自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (1)
  • 收藏
  • 关注

原创 Rust FFI 与C语言互相调用

Rust 与C互相调用

2023-02-20 17:20:54 1121 3

原创 安卓apt开发kotlin 利用编译时注解生成源码Demo

项目中要减少反射,提高性能,可以apt或是aop。网上有很多java apt的文章,可是利用kotlin文章比较少,有的也不够详细。Demo 仿著名的butterknife实现一个简单的View绑定编译时注解核心三个模块,一个安卓库(实现一些需要的功能),一个java compiler库(实现编译时生成代理),一个java annotaions库(注解库)。架构我们需要新建三个模块依赖compiler 增加kapt插件和依赖,如下:plugins { id 'java' id

2021-06-12 21:03:23 3751 7

原创 labelme2coco.py 脚本增强

把labelme的标注数据转coco数据集的脚本。

2023-11-06 10:08:17 382

原创 Rust u8数组转16进制字符串

把常用的c++转16进制的函数用rust重写了一下。Vec的需要稍微改一下。

2023-02-04 13:58:58 1226

原创 windows C启动JDK11的JVM

jvm c/c++

2022-04-30 16:24:52 1278

原创 windows 注册表get/set

JNI在开发的项目需要操作到Windows注册表,就想起《java 核心技术》(第11版)里面有个jni示例。抄!跑一下示例,结果跑不起来,会在java层收到一个自定义的异常,异常信息是“Open key failed”。原因是,测试代码在setValue,打开一个空的注册表项,需要改一下代码:老的语句:if (RegOpenKeyEx(root, cpath, 0, KEY_WRITE, &hkey) != ERROR_SUCCESS)新的if (RegCreateKeyExA(r

2022-04-16 15:43:48 1116

原创 android ndk编译so库,脚本编译ffmpeg5.0示例

今天收了份csdn小礼物,上来补篇博客。环境配置下载,安装什么的自己参考一下官网。从 NDK r19 开始,NDK 默认安装的工具链可供使用。与任意构建系统进行交互时不再需要使用 make_standalone_toolchain.py 脚本。简单示例(利用cmake)demo工程图sum.h#ifndef FFMPEGDEMO_SUM_H#define FFMPEGDEMO_SUM_H//一定要extern "C" 不然会链接错误extern "C"int sum(int val

2022-04-04 22:22:16 3623 1

原创 Windows11 不能修改时区

Windows11 突然出了一个bug,时区变成USA了,修改时区的设置全灰色的。解决方法:用管理员权限打开cmd,键入tzutil /s “China Standard Time”

2022-03-16 09:17:51 8945 6

原创 响应式串口处理

这是我在windows上用spring famework框架+Compose Multiplatform+swing开发的一个桌面pc项目抽出来的一小块。Compose Multiplatform官方示例用的rxjava,基于我引入了spring(主要是比较熟悉)所以我用了reactor ,大家看一下思路,应该是很容易改写成kotlin flow和rxjava的。全局单观察者reactor in spring建立流 @Bean fun serialFlow(serial: ISerialp

2022-03-11 11:28:34 2635

原创 opencv + contrib windows下源码编译

网上,包括书上有很多人云亦云的源码编译方式,不能说不正确但是有很多弯弯绕绕(坑)。最近做完了一个识别项目的第一版,总结了一下,为了写这篇文章,特意重新在自己电脑搭了一遍开发环境。最权威的方式是官方文档介绍以windows下开发为例子,我们编译一个opencv + contrib 满血lib。编译vs,c++环境。cmake-gui,其实只要 cmake (version >=3.9.1) 装一个gui主要是方便以后做裁剪编译。下载地址安装时选择自动加入path路径,不然你要手动添

2022-03-05 23:58:04 4544

原创 android安卓 基于CameraX和MLKIT实现中文识别Demo

实现功能,一个最简demo说明:依赖因为是实验性质,这里都是beta版本 // CameraX core library def camerax_version = '1.1.0-beta01' implementation "androidx.camera:camera-core:$camerax_version" // CameraX Camera2 extensions implementation "androidx.camera:camera-camera2

2022-02-09 16:04:23 2706 3

原创 JAVA是怎么从静态语言兼容动态语言编程的

类加载机制基础知识每个Java程序至少拥有三个类加载器:引导类加载器平台类加载器系统类加载器(应用加载器)引导类加载器负责加载jdk内部模块中的平台类,没有对应得ClassLoader对象。java9之前,java平台类位于rt.jar。java9之后,java平台模块化,每个平台模块都包含一个JMOD文件。平台类加载器会加载引导类加载器没有加载得Java平台所有的类。系统类加载器会从模块路径和类路径中加载应用类。除了引导类加载器外,每个类加载器都有一个父类加载器。类加载,优先使用父

2022-01-29 19:43:33 941 1

原创 spring boot 2.4.2 下r2dbc不解析real[]

公司有一个老的C#服务端项目迁移Java,结果:spring boot 2.4.2 下r2dbc不解析real[]是因为 默认的io.r2dbc.postgresql 版本io.r2dbc.postgresql.codec#DefaultCodecs 默认没有 Float数组的编码器如果不升级版本需要自己写个编码器,实现一下AbstractArrayCodec,具体可以抄一下新版本下的已经实现FloatArrayCodec的源码。DefaultCodecs 实现了一个注册接口,手动把编码器注册进

2021-12-23 12:55:49 349

原创 redis devops(二) springboot 2.4.2 集成r2dbc

Spring boot 开发本节内容的版本声明: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version&

2021-12-21 15:41:33 1709

原创 redis devops(一) v6.2.6版本 3主3从集群部署

运维: 3主3从6台云主机进入opt目录cd /opt根据官网下载安装。wget https://download.redis.io/releases/redis-6.2.6.tar.gztar xzf redis-6.2.6.tar.gzcd redis-6.2.6make接着官网不讲了,在usr/local/bin 下加入快捷方式make install建立一个config目录,我的目录建在usr/local/bin 下,可任意cd /usr/local/binmkdir

2021-12-18 15:26:07 1066

原创 利用协程Windows 串口通信API 同步读写

windows 串口读写在CreateFileA中dwFlagsAndAttributes入参0,表示同步读写。这个同步的不是简单的阻塞,而是如果在读就不能写,在写就不能读。如果用死循环去读的写法,就基本上告别写的操作了。协程可以在同一个协程作用域(线程)中切换job,所以理论上可以实现。awaitAll( async(context = this.coroutineContext) { while (true) {

2021-12-01 13:26:10 341

原创 spring boot 2.4.2 适配nacos实现注册中心与负载均衡

kotlin 1.3的版本已经被最新的idea标记为弃用。在单独打开一个分模块工程,居然给我看这个Kotlin: Language version 1.3 is no longer supported; please, use version 1.4最后只能这样临时解决如果在2.3.7提升kotlin版本,会收到kotlin/collections/MapsKt的错误。应该是1.4删掉会移动了一个类。生版本是一个很好的选择。spring cloud alibaba 官方的版本推荐虽然很早就标

2021-11-24 15:31:17 3551

原创 R2DBC在spring boot 2.3.7版本下多主键CRUD的方式

很久没写博客了,因为又被拉去带搞spring了!本文内容基于spring boot 2.3.7.RELEASE。R2DBC接入在1月份的文章有讲,但是注意版本差异,后面的版本R2DBC从整个包都发生了迁移。选择2.3.7是因为这是能比较好适配nacos的最高版本的spring boot。在spring cloud alibaba下,对新版本的兼容是非常滞后的。题外话!R2DBC ReactiveCrudRepository 并不支持多主键(至少在2.3.7我没有找到支持的方式)。第一个,你就找不到合适

2021-11-06 21:21:47 561

原创 operator overloading(操作符重载)在c++与kotlin

编译器对c++ 操作符认知,比如:{ ... obj a,b; //a,b为obj对象 a += b}编译器会去寻找a中的 += 符号定义,如果存在则相当于调用a的+=函数,入参为b。//伪函数 c++函数隐藏入参this 就是例子中的a//python中self就是c++中的this显式obj::operator += (this,const obj& b) { return ...}kotlin的操作符重载:也是编译器干活,也是编译器找左边的实例函数去执行,只不过

2021-08-23 23:00:12 129

原创 inline在c++与kotlin

在c++中,inline用于升级c的宏定义define,他消除了define的缺点,又继承了define的优点。define宏定义,主要就是参数替换。所以,inline是可以(不一定会)进行编译期替换的。在kotlin中,inline是对带函数参数的函数进行编译期优化,通过反编译,inline函数是把函数内容粘贴到调用处。得出,都是在编译期的性能优化,都是通过替换,但是c++的inline是不一定的,kotlin的inline是一定的(实际上如果不带函数参数的函数,使用inline IDEA会提示没有必

2021-08-22 23:06:09 226

原创 gradle 卡 build Runing log报错Timeout waiting to lock journal cache

gradle 最近经常卡build Runingmac电脑可以看见类似错误打印在控制台,win10系统都不告诉你,默默地卡住。* What went wrong:Gradle could not start your build.> Cannot create service of type BuildTreeActionExecutor using method LauncherServices$ToolingBuildTreeScopeServices.createActionExecut

2021-08-18 20:48:22 2190

原创 compose UI(八)一个仿mac的全局消息工具,跟Toast说拜拜

效果:本文示例代码API基于compose UI 1.0.0Toast在compose的尴尬Toast需要上下文,这个在Compose 方法中可以通过LocalContext拿到。在其他类中可以用hilt @ApplicationContext 注入application也可以拿到,但是总有不能注入的地方比如object等等情况。Toast最尴尬的是在主线程执行,MVVM架构下,函数在viewModel拿到执行结果,反馈用户总不能一直runOnUiThread,至于handle不用好多年了。kotl

2021-08-12 17:29:50 1387

原创 compose UI(七)引入视频播放器ExoPlayer

本文示例代码API基于compose UI 1.0.0 ExoPlayer 2.14.2ExoPlayer简介ExoPlayer-githubExoPlayer官网-开发者文档ExoPlayer代码实验室androidView接入关于怎么接入androidView,可以参考前面的文章。@Composablefun VideScreen (){ val context = LocalContext.current val exoPlayer = SimpleExoPlayer

2021-08-09 23:43:01 3572 4

原创 compose UI OutlinedTextField默认颜色说明

本文示例代码API基于compose UI 1.0.0-bate08背景深色时,使用OutlinedTextField会有不清晰的情况,需要自定义配置颜色,outlinedTextFieldColors颜色太多,记录一下方便以后修改。OutlinedTextField( colors: TextFieldColors = TextFieldDefaults.outlinedTextFieldColors(),)outlinedTextFieldColors默认Default颜色说明(加粗比较常用

2021-07-23 09:32:56 1747 2

原创 compose UI(六)一个跑酷demo小游戏讲解分层复杂布局

本文示例代码API基于compose UI 1.0.0-bate08分层布局compose ui 中一个Column,Row都可以看成一个Layout,在这些布局中modifier都有自己的边界,想让一个组件覆盖在另一个上面是比较难以实现的。如果遇到复杂的布局,就可以采用分层布局。原理就是先画一层layout后,再画一层,或者再画n层(性能很有问题)。as bate版本新建一个compose项目,示例代码:@Composablefun Demo() { ComplexlayoutThem

2021-07-04 21:48:54 358 3

原创 compose UI(五)Lazy布局替换ListView,RecyclerView实现数据展示

本文示例代码API基于compose UI 1.0.0-bate08简单应用比如,我们现在有一个数据库映射类文件如下(room库):@Entity( tableName = "user", indices = [Index("id", unique = true)])data class User( @ColumnInfo(name = "account") val account: String, @ColumnInfo(name = "password"

2021-06-25 09:56:31 983 6

原创 compose UI(四)图形与动画

本文示例代码API基于compose UI 1.0.0-bate08图形官网说明官网说明比较简单,一共2个Canvas和DrawScope。CanvasCanvas 是一个封装过的对象,点开源码其实就是一个Spacer:@Composablefun Canvas(modifier: Modifier, onDraw: DrawScope.() -> Unit) = Spacer(modifier.drawBehind(onDraw))Canvas 封装了Spacer在它的约束

2021-06-18 08:39:16 636 2

原创 compose UI(三)自定义控件和布局实现简易下拉列表Spinner

Compose UI (1.0.0-beta06)中没有现成的Spinner可用,当然也可以直接使用androidView的Spinner控件。但是我们需要利用声明式UI的好处,就是自定义非常方便。首先建一个Spinner.kt回忆之前的Spinner,需要一个String数组的适配器,一个selecter监听,指定下拉的资源(样式),传入一个pos位置信息。so,我们的入参大概就是:/** * 自定义下拉列表 * @author markrenChina * * @param modifi

2021-05-28 23:05:41 1620 6

原创 python脚本 批处理ffmpeg视频转化

树莓派装了jellyfin,里面放了很多学习资料都是.wmv,不启动树莓派的V4L2硬件加速播放是没有问题, 但是经常遇到软解速度跟不上(树莓派4b没超频)。启动硬件加速后,居然给我看弹窗,该客户端与媒体不兼容,服务器未发送兼容的媒体格式。于是用ffmpeg 转化成mp4格式。测试可用,网上翻了一下,没一个顺手的脚本,就随手自己用python实现了一下批处理。#!/usr/bin/python3# -*- coding: UTF-8 -*-import osbaseDir = ""de

2021-05-25 23:06:17 702

原创 compose UI(二)融合老代码,使用非compose的view简单示例(MPAndroidChart)

compose 部分先附一个官方教程链接核心是一个AndroidView,AndroidView也是一个@Composable,他的factory方法可以接收一个非compose 的view。官方示例的核心代码是这一段:/** * ****************compose ui 中使用未实现compose版本ui的关键AndroidView采用以编程方式创建的View。如果您想嵌入XML文件,则可以使用androidx.compose.ui:ui-viewbinding库中的视图绑定和An

2021-05-22 09:40:01 1730 1

原创 compose UI(一)属于compose的页面导航,自定义实现ViewPager(Demo)

1. 声明式compose ui在简单页面可以通过隐藏,显示来实现页面切换。简单的if else 举例:@Composablefun App() { val context = LocalContext.current var isOnline by remember { mutableStateOf(checkIfOnline(context)) } if (isOnline) { Home() } else { OfflineDia

2021-05-10 10:23:13 3024

原创 利用DnsPod Api解决拨号ipv4改变,随时随地远程回家

spring框架下测试成功2种请求方式,可以修改ipv4解析用官方示例来说明//官方curl示例curl -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=LOGIN_TOKEN&format=json&domain_id=2317346&record_id=16894439&record_line_id=10%3D0&sub_domain=www'举例kotlin代码如下第一种,模拟curl -X

2021-05-03 16:05:15 176

原创 SSD USB启动树莓派4B ubuntu server

网上很多教程,大部分过时了,成功之后分享一下。首先是解决USB启动的过程,方法很简单官方说明我使用的是推荐方法,下载官方烧卡工具(Mac M1 貌似1.6.1版本有问题,1.5版本可以用),选择Misc utility images -> Bootloader -> usb 写入备份sd卡.插入设备,接屏幕,等待闪烁稳定屏幕变绿。ubuntu server 固件此新固件不要替换启动文件。烧录系统到SSD。然后是非官方镜像无法自动解压启动文件下的vmlinuz 需要zcat 一下

2021-05-03 01:06:03 1330 3

原创 M1使用JNI mach-o, but wrong architecture

用cLion,cmake之后报错mach-o, but wrong architecture,结果RC版本才解决,RC版本不开放使用。于是用xcode,还是mach-o, but wrong architecture,但是禁用Active Architecture Only后,dylib正常。

2021-04-23 23:27:42 1897

原创 利用WorkManager实现apk下载

jetpack加入WorkManager后,后台的实现基本上实现起来非常方便。首先,我们需要获取到新版本信息,然后如果需要更新就下载新版本的apk,2个串行的worker。app客户端部分去年写的下载客户端实现核验版本信息的worker示例:class VerifyVersionWorker(context: Context, parameters: WorkerParameters) : CoroutineWorker(context, parameters) { overrid

2021-04-17 10:49:10 1178

原创 jetpack Compose UI 中引入ConstraintLayout

Compose UI 中的ConstraintLayout 包在正确:import androidx.constraintlayout.compose.ConstraintLayout不是:import androidx.constraintlayout.widget.ConstraintLayout需要先引入依赖implementation 'androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha05'最新版本去ma

2021-04-10 15:34:40 185 1

原创 nacos 连不上数据库的一个坑

nacos/conf 目录下nacos-mysql.sql 一般用这个把nacos的配置持久化到mysql数据库里面每一张表前都注释有/******************************************//* 数据库全名 = nacos_config *//* 表名称 = config_info *//******************************************/CREATE TABLE `config_info` (数据库全名 =

2021-03-27 08:46:45 9821 3

原创 Spring boot WebFlux 编程模型选择

WebFlux有两种编程模型传统的 Annotated Controllers 注释控制器轻量的 Functional Endpoints 函数式后端Annotated Controllers 注释控制器 使用方式就是传统的MVC那套,多了一个@RequestBody注释。允许返回Flux,Mono类型,Kotlin可以使用挂起函数(suspend)和返回类型特有的返回类型Flow或deferred。 @GetMapping("/suspend") suspend fun suspend

2021-03-13 13:46:05 281

原创 响应式学习(五)spring Security

SecuritySecurity基础知识认证void configure(AuthenticationManagerBuilder auth)基于内存用户认证(inMemoryAuthentication)基于数据库用户认证(jdbcAuthentication)基于LDAP服务器方式用户认证(ldapAuthentication)自定义用户认证(UserDetailsService)(适用于响应式)自定义用户认证详细说明:数据库映射实体类需要实现UserDetails接口,重写get

2021-02-27 13:16:54 922

原创 响应式学习(四)ProjectReactor工厂方法和错误处理

工厂方法创建流:push工厂方法demo通过单线程生产者(在同一时间只有一个线程,可以调用next,complete或error)创建Flux实例,此方法适配于异步,单线程,多值Api,无须关注背压和取消。同样可以桥接接口,示例见create示例(把create换成push)push()并且create()两者都允许设置onRequest使用者以管理请求量并确保仅在有待处理的请求时才通过接收器推送数据。onCancel 首先调用,仅用于取消信号。onDispose 为完成,错误或取消信号而调用

2021-02-15 21:29:43 622

CameraX和MLKIT实现中文识别Demo封装aar资源

CameraX和MLKIT实现中文识别Demo封装aar资源

2022-02-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除