咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

apt install openssl 版本太旧,用源码安装新版本。

OpenSSL官网下载新版源码】,这里以 2021-Mar-25 13:41:15 openssl-1.1.1k.tar.gz 为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
$ tar -zxvf openssl-1.1.1k.tar.gz
$ sudo ./config
$ make
$ make install
# 将旧版本的openssl进行备份
$ sudo mv /usr/bin/openssl /usr/bin/openssl.old
# 将新版本的openssl进行软链接
$ sudo ln -s /usr/local/bin/openssl /usr/bin/openssl
# 重新加载配置
$ ldconfig
$ openssl version
OpenSSL 1.1.1k 25 Mar 2021

ExecutorService 是Java提供的用于管理线程池的类。

1、FixedThreadPool

FixedThreadPool ,固定线程数的线程池,核心线程数和最大线程数是一样的;

1
2
// 创建一个可重用固定个数的线程池
ExecutorService executorService = Executors.newFixedThreadPool(3);

2、CachedThreadPool

阅读全文 »

很早知道国外的在线绘图服务Draw.io了,虽然是免费的而且好用,但网络速度慢啊,所以一直没用。
而且国内有【Gitmind思维导图】【ProcessOn免费在线流程图思维导图】 也是免费而且挺好用的。

自从阅读文章【部署一个私有的在线绘图服务】,等知drawio开源了项目【jgraph/drawio】 ,很感兴趣。

这样的话我们是可以在本地局域网部署drawio服务,网速慢的问题就解决了,以后绘图软件就增多了新的一个选择。

而且这个文章作者还把开源版drawio的后端Java部分裁剪掉了(具体裁剪文章上有记录),变成纯网页版【tobyqin/drawio-local】,部署也变得更加简单,把这个项目下载下来直接丢在一个webserver(如:nginx,apache,iis等)上就可以直接用。

drawio默认是英文,可以切换为中文

阅读全文 »

Word文档另存为Html时,默认编码是 gb2312 ,在浏览器打开中文容易乱码,手动改为 UTF-8是可以,但有点麻烦。

其实Word可以支持修改编码,在 另存为窗口的 “工具” - “编码” 就可以选择保存所用的编码,选择 UTF-8 就行。

Jetpack Compose UI组件库

这个库是用 Jetpack Compose UI 写的组件库,包含很多常用(实用)的组件。
Github
预览图很多,建议跳转到源仓库查看。

组件:

  • ActionSheet
  • AddressList
  • AnnotatedText
  • Banner
  • Cascade
  • Category
  • Cell
  • Collapse
  • Curtain
  • GridCard
  • Indicator
  • NoticeBar
  • NumberKeyboard
  • Preview
  • PrivacyPolicy
  • Progress
  • Rate
  • SearchBar
  • Segmented
  • SelectCity
  • SignaturePad
  • Skeleton
  • StatefulLayout
  • Stepper
  • Steps
  • Swipe
  • TimeSelect
  • VerifyCode

轮播广告组件banner

阅读全文 »

【Android Jetpack 使用入门】
【Android 架构组件 Android Jetpack 的一部分。】

Android 架构组件是一组库,可帮助您设计稳健、可测试且易维护的应用。您可以从管理界面组件生命周期和处理数据持久性的类着手。

  • 通过应用架构指南,学习有关汇编稳健应用的基础知识。
  • 管理应用的生命周期。新的生命周期感知型组件可帮助您管理 Activity 和 Fragment 的生命周期。在配置更改后继续有效、避免内存泄漏,以及将数据轻松加载到界面中。
  • 使用 LiveData 构建数据对象,在基础数据库改变时通知视图。
  • ViewModel 存储界面相关的数据,这些数据不会在应用旋转时销毁。
  • Room 是一个 SQLite 对象映射库。它可用来避免样板代码,还可以轻松地将 SQLite 表数据转换为 Java 对象。Room 提供 SQLite 语句的编译时检查,并且可以返回 RxJava、Flowable 和 LiveData 可观察对象。

** Jetpack有很多部分,这里先整理一下最常用的两个:ViewModelLiveData **

一、ViewModel

阅读全文 »

不经常登录阿里云控制台管理数据库,时间久了就遗忘了,记录一下方便以后使用。

  1. 购买“云数据库MongoDb版”打开控制台

  2. 点击 “登录数据库” 跳转到阿里的 “数据管理DMS”

  3. “数据管理DMS”

  4. DMS登录实例

  5. DMS控制台

  6. DMS创建新的数据库

  7. 为新的数据库创建连接用户


  8. DMS打开数据库

  9. DMS执行查询命令

一、 开通开发者

省略

二、 创建应用

省略,创建完应用,到“推送服务”开启你的应用推送服务。

三、 集成到Android项目

阅读全文 »

2021年03月16 JDK 16 发布,非 LTS 版本。

新特性: http://openjdk.java.net/projects/jdk/16/

  • 338: Vector API (Incubator)
  • 347: Enable C++14 Language Features
  • 357: Migrate from Mercurial to Git
  • 369: Migrate to GitHub
  • 376: ZGC: Concurrent Thread-Stack Processing
  • 380: Unix-Domain Socket Channels
  • 386: Alpine Linux Port
  • 387: Elastic Metaspace
  • 388: Windows/AArch64 Port
  • 389: Foreign Linker API (Incubator)
  • 390: Warnings for Value-Based Classes
  • 392: Packaging Tool
  • 393: Foreign-Memory Access API (Third Incubator)
  • 394: Pattern Matching for instanceof
  • 395: Records
  • 396: Strongly Encapsulate JDK Internals by Default
  • 397: Sealed Classes (Second Preview)

中文

  • 338: 提供了Vector API (jdk.incubator.vector)来用于矢量计算
  • 347: 在JDK C++的源码中允许使用C++14的语言特性
  • 357: OpenJDK源码的版本控制从Mercurial (hg) 迁移到git
  • 369: 将OpenJDK源码的版本控制迁移到 GitHub
  • 376: ZGC: 实现了并发thread-stack处理来降低GC safepoints的负担
  • 380: 对 Socket Channels 及 Server ocket Channels的api提供对unix domain socket的支持
  • 386: 将glibc的jdk移植到使用musl的alpine linux上
  • 387: 支持不再使用的class metadata归还内存给操作系统,降低内存占用
  • 388: 移植JDK到Windows/AArch64
  • 389: 提供jdk.incubator.foreign来简化native code的调用
  • 390: 提供 @jdk.internal.ValueBased 来用于标注作为value-based的类
  • 392: jpackage在JDK14引入,JDK15作为incubating工具,在JDK16转正
  • 393: Foreign-Memory Access API在JDK14首次引入作为incubating API,在JDK15处于第二轮incubating,在JDK16处于第三轮incubating
  • 394: instanceof的模式匹配在JDK14作为preview,在JDK15作为第二轮的preview,在JDK16转正
  • 395: Record类型在JDK14作为preview,在JDK15处于第二轮preview,在JDK16转正
  • 396: 对内部的api进行更多的封装,鼓励开发者从使用内部的方法迁移到标准的API
  • 397: Sealed Classes在JDK15作为preview引入,在JDK16作为第二轮preview
阅读全文 »

Android 的 MediaCodec 可以编/解码音频视频,支持同步和异步两种使用方式。

异步

参考官网的文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
MediaCodec codec = MediaCodec.createByCodecName(name);
MediaFormat mOutputFormat; // member variable
codec.setCallback(new MediaCodec.Callback() {
@Override
void onInputBufferAvailable(MediaCodec mc, int inputBufferId) {
ByteBuffer inputBuffer = codec.getInputBuffer(inputBufferId);
// fill inputBuffer with valid data

codec.queueInputBuffer(inputBufferId, …);
}

@Override
void onOutputBufferAvailable(MediaCodec mc, int outputBufferId, …) {
ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);
MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A
// bufferFormat is equivalent to mOutputFormat
// outputBuffer is ready to be processed or rendered.

codec.releaseOutputBuffer(outputBufferId, …);
}

@Override
void onOutputFormatChanged(MediaCodec mc, MediaFormat format) {
// Subsequent data will conform to new format.
// Can ignore if using getOutputFormat(outputBufferId)
mOutputFormat = format; // option B
}

@Override
void onError(…) {

}
});
codec.configure(format, …);
mOutputFormat = codec.getOutputFormat(); // option B
codec.start();
// wait for processing to complete
codec.stop();
codec.release();

音频和视频的用法差不多,差异在于配置上,编码和解码也是。

阅读全文 »

想在Android下实现PCM编码为AAC,已经用Android硬编码实现过AAC编码,但想了解一下FAAC这个库,比较一下两者的差异。

FAAC是开源的C语言库,查了一下网络上的文章,在Linux上编译FAAC,大多数都是编写一个脚本build_android.sh ,脚本里是用make编译,最终只有一个平台的共享库so或者静态库a文件。如:【AAC在Linux下编译】

而Android上使用共享库一般会有如下几个平台:

1
2
3
4
5
6
7
8
9
10
├── arm64-v8a
│   └── libxx.so
├── armeabi
│   └── libxx.so
├── armeabi-v7a
│   └── libxx.so
├── x86
│   └── libxx.so
└── x86_64
└── libxx.so

所以借着FAAC,记录一下Android如何通过NDK使用开源C/C++库。

阅读全文 »

1
requestPermissions(new String[]{"android.permission.RECORD_AUDIO"},1009);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class RecordAudioThread extends Thread{

AudioRecord recorder;

@Override
public void run() {
super.run();
int minBufferSize = AudioRecord.getMinBufferSize(
8000,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
recorder = new AudioRecord(
MediaRecorder.AudioSource.MIC,
8000,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
minBufferSize);
recorder.startRecording();

byte[] audio = new byte[1024];

int readLength = 0;
while (!isInterrupted()){
readLength = recorder.read(audio,0,audio.length);

if(readLength > 0){
Log.d(TAG, "录音长度:" + readLength);
}
}
recorder.stop();
recorder.release();
Log.i(Thread.currentThread().getName() , "录音结束");
}
}

问题

在Windows10上家庭版安装完 Illustrator x64 ,在启动时崩溃并显示 CANT 错误的问题。

经过查资料,定位到是 Microsoft Visual C++ Redistributable 这个库的问题。

转到 控制面板 > 程序 > 程序和功能,发现我的系统中, Microsoft Visual C++ Redistributable 2012 这个库只有x86的,没有x64的,而安装的Illustrator是x64的。

找到问题了,那就好办了。

阅读全文 »

记录






缺少VC++错误

无法下载

这是网络原因,目前实测家庭网络可以下载,速度非常快,都是直接从官方的CDN下载。
网络错误