咸鱼

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

0%

零售版Office2019增强版是一个iso安装包,安装的时候不可以自定义安装组件,默认直接全部组件都安装上,我们一般只用到三大组件:Word、Excel、PPT,其他多余的:Sky,Access,Pusher,Outlook等组件想删掉又删不掉。

所以网上找了一下方法,可以自定义安装组件,而且是可以直接从微软的官网CDN直接下载安装,下载速度也不错。

安装

  1. 下载【officedeploymenttool.exe】
  2. 运行 【officedeploymenttool.exe】 导出 【setup.exe】,其他xml文件不要,可以删除。
  3. 在线 Office 自定义工具
    这个网页可以生成一个配置文件,可以选择版本、组件等,我们也可以根据模板手动修改。
    • 情况一(推荐):配置在线CDN下载(cdn_config.xml);
  • 情况二:如果已经下载了Vol安装包(只支持Vol批量授权版,零售版不支持),所以选择本地源,选择你的Vol安装包路径(F:\)。
    配置导出为local_config.xml文件。
阅读全文 »

将阿里云的ECS从Ubuntu16.04升级到18.04后,DNS失效。

解决办法如下:

1.临时

1
2
3
$ vim /etc/resolv.conf
nameserver 223.5.5.5
nameserver 223.6.6.6

重启失效。

阅读全文 »

依赖

1
implementation("com.google.zxing:core:3.4.1")

调用示例

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
import android.graphics.Bitmap;
import android.graphics.Color;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

import java.util.Map;

public class Test {

public Bitmap createBitmap(String contents, int width, int height)throws WriterException {

BitMatrix matrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height);
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
int offset = y * width;
for (int x = 0; x < width; x++) {
pixels[offset + x] = matrix.get(x, y) ? Color.BLACK : Color.WHITE;
}
}

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}
}

上面这样创建的是默认样式的二维码,白色边框会比较大,这是个小问题。
更多的自定义参数在 Map<EncodeHintType,?> hints 这个参数设置,看以下示例:

阅读全文 »

MobaXterm

官网:https://mobaxterm.mobatek.net/

有收费的,但开源免费版足够使用:
https://download.mobatek.net/2052020102712115/MobaXterm_Portable_v20.5.zip

支持SSH,FTP,串口,VNC,X server和标签。

  • 优点:
    占用内存小,开一个标签时就30MB左右,支持同时输入多台机器。内置的远程目录非常方便,可以随时上传/下载文件。
  • 缺点:
    进后台一段时间会触发屏保(企鹅),鼠标点击一下可以关闭屏保(收费版可以永久关闭),但关闭之后使用会有一点点卡的感觉,可能就是台省着用内存的原因(Tabby一上来就用了250MB内存)。
阅读全文 »

备忘一下这个底部输入框的效果:
效果

用DialogFragment实现挺方便的,大致的方法就是创建一个底部DialogFragment,布局内EditText聚焦,用代码主动弹出软键盘来。

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 BottomInputFragment : DialogFragment(){

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.BottomInputDialog)
}
override fun onStart() {
super.onStart()
val window = dialog!!.window
dialog!!.setCanceledOnTouchOutside(true)
val params = window!!.attributes
params.gravity = Gravity.BOTTOM
params.width = WindowManager.LayoutParams.MATCH_PARENT
window.attributes = params
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.dialog_edittext, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

val editText = view.findViewById<EditText>(R.id.editText)
showSoftInputFromWindow(editText)
}

fun showSoftInputFromWindow(editText: EditText) {
editText.isFocusable = true
editText.isFocusableInTouchMode = true
editText.requestFocus()
val inputManager: InputMethodManager = editText.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputManager.showSoftInput(editText, 0)
}
}

弹框的Style R.style.BottomInputDialog

1
2
3
4
5
6
7
 <style name="BottomInputDialog" parent="AppTheme">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowSoftInputMode">stateAlwaysVisible</item>
</style>
阅读全文 »

利用IDE内置的创建Android机器人默认路径如下

1
2
3
<path
android:pathData="M17.6,11.48 L19.44,8.3a0.63,0.63 0,0 0,-1.09 -0.63l-1.88,3.24a11.43,11.43 0,0 0,-8.94 0L5.65,7.67a0.63,0.63 0,0 0,-1.09 0.63L6.4,11.48A10.81,10.81 0,0 0,1 20L23,20A10.81,10.81 0,0 0,17.6 11.48ZM7,17.25A1.25,1.25 0,1 1,8.25 16,1.25 1.25,0 0,1 7,17.25ZM17,17.25A1.25,1.25 0,1 1,18.25 16,1.25 1.25,0 0,1 17,17.25Z"
android:fillColor="#FF000000"/>

填充色 fillColor 改为 线条 strokeColor,设置一下宽度为1,效果如下:

1
2
3
4
<path
android:pathData="M17.6,11.48 L19.44,8.3a0.63,0.63 0,0 0,-1.09 -0.63l-1.88,3.24a11.43,11.43 0,0 0,-8.94 0L5.65,7.67a0.63,0.63 0,0 0,-1.09 0.63L6.4,11.48A10.81,10.81 0,0 0,1 20L23,20A10.81,10.81 0,0 0,17.6 11.48ZM7,17.25A1.25,1.25 0,1 1,8.25 16,1.25 1.25,0 0,1 7,17.25ZM17,17.25A1.25,1.25 0,1 1,18.25 16,1.25 1.25,0 0,1 17,17.25Z"
android:strokeWidth="1"
android:strokeColor="#FF000000"/>
阅读全文 »

2020年9月15日 JDK 15 发布,非 LTS 版本。

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

  • 339: Edwards-Curve Digital Signature Algorithm (EdDSA)
  • 360: Sealed Classes (Preview)
  • 371: Hidden Classes
  • 372: Remove the Nashorn JavaScript Engine
  • 373: Reimplement the Legacy DatagramSocket API
  • 374: Disable and Deprecate Biased Locking
  • 375: Pattern Matching for instanceof (Second Preview)
  • 377: ZGC: A Scalable Low-Latency Garbage Collector
  • 378: Text Blocks
  • 379: Shenandoah: A Low-Pause-Time Garbage Collector
  • 381: Remove the Solaris and SPARC Ports
  • 383: Foreign-Memory Access API (Second Incubator)
  • 384: Records (Second Preview)
  • 385: Deprecate RMI Activation for Removal

中文

  • 339: 使用Edwards-Curve数字签名算法(EdDSA)实现加密签名
  • 360: 密封类 Sealed Classes (Preview)
  • 371: 隐藏类 Hidden Classes
  • 372: 删除Nashorn JavaScript脚本引擎和API,以及jjs工具
  • 373: 重新实现旧版DatagramSocket API,代替java.net.DatagramSocket和java.net.MulticastSocketAPI的基础实现
  • 374: 默认情况下禁用偏向锁,并弃用所有相关的命令行选项。
  • 375: 通过对instanceof运算符进行模式匹配来增强Java编程语言(Second Preview)
  • 377: 将ZGC垃圾收集器从实验功能更改为产品功能。
  • 378: 将文本块添加到Java语言
  • 379: Shenandoah垃圾回收从实验特性变为产品特性。
  • 381: 删除源代码并构建对Solaris/SPARC,Solaris/x64和Linux/SPARC端口的支持
  • 383: 引入一个API,以允许Java程序安全有效地访问Java堆之外的外部内存。
  • 384: Records提供了一种紧凑的语法来声明类,以帮助开发者写出更简洁的代码(Second Preview)
  • 385: 弃用RMI激活机制以便将来删除
阅读全文 »

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$ vim /etc/systemd/system/myjar.service


[Unit]
Description=myjar-server
#在哪个服务之后启动
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
User=root
Group=root
#启动命令
#ExecStart=java -jar /usr/local/myjar.jar --spring.profiles.active=pro
ExecStart=java -jar /usr/local/myjar.jar --spring.profiles.active=pro
# nohup命令无效
#ExecStart=nohup java -jar /usr/local/myjar.jar --spring.profiles.active=pro >>/usr/local/myjar.log&


ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

# 开启开机启动
$ systemctl enable myjar
Created symlink /etc/systemd/system/multi-user.target.wants/myjar.service → /etc/systemd/system/myjar.service.

# 查看服务是否开机启动:
$ systemctl is-enabled myjar
enabled

# 禁止开机启动
$ systemctl disable myjar
Removed /etc/systemd/system/multi-user.target.wants/myjar.service.

# 查看服务状态
$ systemctl status myjar
● myjar.service - myjar-server
Loaded: loaded (/etc/systemd/system/myjar.service; disabled; vendor prese>
Active: inactive (dead)

# 查看服务详情
$ systemctl show myjar

# 手动启动服务
$ systemctl start myjar
# 手动停止服务
$ systemctl stop myjar


# 查看日志
$ journalctl -u myjar

手动启动停止后台服务

1
2
3
4
5
6
7
# 运行一个后台服务
$ nohup jar -jar test.jar >> myout.log &

# 当要停止此服务时,先查询pid,再kill
$ ps -ef|grep v680
root 522133 1 0 12:10 pts/0 00:00:20 java -jar test.jar
$ kill -9 522133

记录后台服务PID

shell脚本中,可以用 $! 获取到当前进程的PID。
开始脚本 通过 echo $! > my.pid 将PID写入到一个文件中;
停止脚本 从文件中读出PID,执行Kill命令杀掉进程。

启动

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看IP信息
$ ip addr

$ sudo vim /etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens33:
dhcp4: false
addresses: [192.168.0.66/24]
optional: true
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8,4.4.4.4]
version: 2

# 应用修改
$ sudo netplan apply

Calendar 有 after() 和 before() 两个函数比较日期的前后。

  • obj.before(calendar_params); 用于检查此日历时间(calendar_params)是否在给定Object的时间所表示的时间之前。
  • obj.after(calendar_params); 用于检查此日历时间(calendar_params)是否在给定Object的时间所表示的时间之后。
1
2
3
4
5
6
7
8
Calendar now = Calendar.getInstance();
Calendar target = Calendar.getInstance();
target.add(Calendar.DAY,1);

// target 在 now 之前 返回 true
boolean result1 = now.before(target);
// target 在 now 之后 返回 true
boolean result2 = now.after(target);

在Windows下Idea新建的Gradle纯Java项目,运行和编译时一些中文信息总是乱码;最近Android Studio升级Gradle为 6.0+ ,编译时也会出现中文乱码,如果apk名称带有中文,在AS中debug运行直接报错(The application could not be installed. Installation failed due to: 'Invalid File:

这里记录一下几种方法:

  1. 修改Idea全局设置

Help —> Edit Custom VM Options -> 输入:

1
-Dfile.encoding=UTF-8
阅读全文 »

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/houxiaoni01/article/details/78832414

FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。目前主流的视频网站如优酷网,土豆网,乐视网等网站无一例外地使用了FLV格式。FLV封装格式的文件后缀通常为“.flv”。
  总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag组成。因此一个FLV文件是如图1-1结构。

头文件 Tag#1 Tag#2 Tag#3

                    图1-1 文件结构(简图)

  其中,每个Tag前面还包含了Previous Tag Size字段,表示前面一个Tag的大小。Tag的类型可以是视频、音频和Script,每个Tag只能包含以上三种类型的数据中的一种。图1-2展示了FLV文件的详细结构。

阅读全文 »