抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Windows 添加小鹤双拼

2023-03-24 00:15

新建文本文件,将以下命令粘贴到文本中保存,文件后缀修改为.reg,然后双击执行。
注意,文本默认是以UTF-8 编码保存,在 Windows 系统中文会乱码,需要将文本编码修改为GBK 才能正常显示。
添加小鹤双拼:

1
2
3
4
5
6
7
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\InputMethod\Settings\CHS]
"EnableExtraDomainType"=dword:00000001
"Enable Double Pinyin"=dword:00000001
"DoublePinyinScheme"=dword:0000000a
"UserDefinedDoublePinyinScheme0"="小鹤双拼*2*^*iuvdjhcwfg^xmlnpbksqszxkrltvyovt"

关闭小鹤双拼:

1
2
3
4
5
6
7
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\InputMethod\Settings\CHS]
"EnableExtraDomainType"=dword:00000000
"Enable Double Pinyin"=dword:00000000
"DoublePinyinScheme"=dword:00000000
"UserDefinedDoublePinyinScheme0"=-

Windows 去除快捷方式小箭头

2023-03-18 21:21

新建文本文件,将以下命令粘贴到文本中保存,文件后缀修改为.bat,然后以管理员权限运行。
去除小箭头:

1
2
3
4
5
6
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f
taskkill /f /im explorer.exe
attrib -s -r -h "%userprofile%\AppData\Local\iconcache.db"
del "%userprofile%\AppData\Local\iconcache.db" /f /q
start explorer
pause

恢复小箭头:

1
2
3
4
5
6
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /f
taskkill /f /im explorer.exe
attrib -s -r -h "%userprofile%\AppData\Local\iconcache.db"
del "%userprofile%\AppData\Local\iconcache.db" /f /q
start explorer
pause

Git 暂存代码

2022-12-20 23:07

当我们在某一个分支进行开发时,突然要修一个紧急故障,就需要切换到其他分支,如果直接切到另一个分支,就需要提交当前分支代码,可是半成品代码提交上去也不合适。
此时就需要将代码压入暂存区,然后就可以切换到其他分支,待修复完后再切回来,将暂存区的代码弹出。

1
2
3
4
# 压入暂存区
git stash
# 弹出暂存区
git stash pop


fastjson 转换 double变 decimal

2022-12-20 22:55

fastjson 避免实体转 json 对象时,double 类型变成 decimal 类型

1
2
3
4
public JSONObject toUnderlineObj(Object object) {
int disableDecimalFeature = JSON.DEFAULT_PARSER_FEATURE & ~Feature.UseBigDecimal.getMask();
return JSON.parseObject(toUnderlineStr(object), JSONObject.class, disableDecimalFeature, Feature.OrderedField);
}


RabbitMQ 消费者单活

2022-12-20 22:49

当启动了多个消费者实例时,如果只允许其中一个进行消费,需要在创建 queue 时需指定参数。
Activity status处于single active的实例可以消费,其他实例为waiting状态,只能在single active实例停止消费后,才会有一个可以消费。

1
2
3
Map<String, Object> args = new HashMap<>();
args.put("x-single-active-consumer", true);
channel.queueDeclare(name, isDurable, false, false, args);


Go 判断 struct 是否实现接口

2022-12-17 18:06

1
2
var _ Animal = (*Dog)(nil)
var _ Animal = new(Dog)


Elasticsearch 批量操作

2022-12-17 18:03

我们在进行 es 批量写时,通常会用到 bulk api,它的 operateType 支持 4 种:

  • create:如果文档不存在就创建,但如果文档存在就返回错误;
  • index:如果文档不存在就创建,如果文档存在就更新;
  • update:更新一个文档,如果文档不存在就返回错误;
  • delete:删除一个文档,如果要删除的文档id不存在,就返回错误;

需要注意的是,index 操作可以实现 upsert 效果,但是它的更新方式是,先删除原文档,然后再插入文档。如果我们只想更新给定的字段,而已存在文档其他未指定字段不动,就需要用到如下方式:

1
2
3
4
5
6
7
8
9
10
11
12
@Test
void testEsAdd() {
JSONObject body = new JSONObject();
body.put("name","Regan");
body.put("age",20);
JSONObject source = new JSONObject();
source.put("doc",body);
source.put("upsert",body);
QueryRequest request = new QueryRequest(HttpMethod.POST.name(), "index_bobby/test/1/_update");
request.setJsonEntity(JSON.toJSONString(source, SerializerFeature.DisableCircularReferenceDetect));
es.bulk(Collections.singletonList(request));
}

bulk 的 operateType 使用 update。



Goland 中使用 go 工具命令

2022-12-17 17:18

在使用 Goland(IDEA 安装 Go 插件也可)时,我们创建一个运行/调试配置,选择Go构建面板,其中有Go 工具实参程序实参两项。
当我们在程序中使用 flag 接收启动指令的参数,应该写在程序实参栏中,例如:--debug--env=dev
当我们需要从外部替换源文件中的变量值,使用的是 go build -ldflags 参数名,则应在Go 工具实参
栏中填写,例如:-ldflags "-X 'core.Version=1.1.1'"
当我们需要条件编译时,使用的是 go build -tags 参数名,则应在Go 工具实参栏中填写,例如:-tags pro
。前提是源文件中第一行有//go:build pro+build pro
//go:build+build的区别://go:build写法是 Go 1.17 引入的,旨在替换+build写法。为什么要采用新写法呢,看如下两个示例:

  • //go:build linux && amd64 || darwin
  • +build linux,amd64 darwin

这两种实现效果等价。显而易见的是,go:build这种写法对开发来说更直观,同时也与//go:embed//go:generate命令,格式上进行了统一。
很多时候我们会看到一个文件顶部,同时有这两种写法,主要是为了兼容 Go 1.17 以下的版本。



Linux 环境变量设置

2022-09-12 14:23

  • 系统级:/etc/profile/etc/bashrc(Ubuntu和Debian中是/etc/bash.bashrc)/etc/environment
  • 用户级:~/.profile(推荐首选)~/.bashrc

系统级的环境变量在每个用户登录时都会加载,用户级的环境变量只有在当前用户登录时加载。开发环境建议配置为用户级环境变量。
在 JDK 官网下载的 .deb 文件,安装是在/usr/lib/jvm/目录下。
/lib是内核级目录,/usr/lib是系统级目录,/usr/local/lib是用户级目录。安装 Go、Node、Maven 等开发环境时,可以将压缩包解压至/usr/local/lib目录中,然后在~/.profile文件中配置用户环境变量。
进行设置后,可运用source ~/.bashrc命令更新.bashrc,也可运用source ~/.profile命令更新.profile
参考:linux中环境变量在哪个文件bashrc与profile的区别


Webstorm 终端运行 hexo 服务

2022-09-03 19:45

1
npx hexo clean `&` hexo server

腾讯云 cloudBase 中的构建命令

1
npx hexo clean & npx hexo generate

win11 开启 smb

2022-09-03 17:24

win+x打开运行,然后输入shrpubw,根据提示创建共享目录。
安卓端使用Oplayer播放器,IOS端使用nplayer播放器比较方便使用,如果要输入密码,则是 windows 的登录账号、密码。


解决 coding 不能拉代码

2022-09-02 22:53

coding 配置 ssh 秘钥,配置个人公钥是可以对账号所有的代码仓库进行读写。团队公钥默认只读,可以设置读写。
但根据官网提示,配置完秘钥后,执行ssh -T git@e.coding.net还是提示没有权限。
解决方法,找到 git 的安装目录C:\Config\Git\etc\ssh下的ssh_config文件,用记事本打开,在末尾处添加:

1
2
3
4
# Added by git-extra
Host *.coding.net
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

保存关闭即可,再次输入:ssh -T git@e.coding.net
然后即可拉取代码


Git 优雅合并分支

2022-07-05 16:55

当存在多个分支需要合并时,例如,主干分支 - master,开发分支 - dev,直接使用 merge 会导致主分支混乱,看起来不是一条直线,解决方式是使用
rebase,具体操作如下:

  1. checkout 到 dev 分支,rebase dev onto master
  2. checkout 到 master 分支,merge dev into master

deepin 创建桌面图标和启动器图标

2022-05-21 23:30

  1. 创建桌面图标
    当我们用压缩包解压安装某个应用软件的时候,例如 IDEA,解压完成后,在桌面上创建一个文件例如IDEA-2022.1.desktop
    ,后缀为.desktop,但可以用文本编辑器打开,打开后在编辑内容如下:
1
2
3
4
5
6
7
8
9
10
11
[Desktop Entry]
Categories=Application;Development;
Comment=IntelliJ IDEA Ultimate 2022.1
Encoding=UTF-8
Exec=/opt/apps/idea-IU-221.5080.210/bin/idea.sh
Icon=/opt/apps/idea-IU-221.5080.210/bin/idea.png
Name=IDEA-2022.1
StartupNotify=true
Terminal=false
Type=Application
X-Deepin-Vendor=user-custom

其中CommentName自定义名字,ExecIcon选择为实际路径,其余保持默认。

  1. 创建启动器图标
    执行命令:
1
sudo cp IDEA-2022.1.desktop /usr/share/applications/

deepin 卸载自带的 open jdk

2022-05-12 21:44

1
2
// 查看openJDK的安装列表
dpkg -l | grep openjdk
1
2
// 卸载
sudo apt-get remove openjdk*

linux 下安装 go 开发环境

2022-05-11 12:13

从官网下载 tar.gz 压缩包,sudo tar -xvf 文件.tar.gz -C /user/local,然后在/usr/local下会有一个go的目录。

官网推荐解压放在usr/local目录下,而macos下安装也是会自动放在此目录下。然后在用户目录下创建一个go目录,用来当作gopath路径。


解决 gitignore 文件无法忽略

2022-05-06 11:23

解决方法: git清除本地缓存(改变成未track状态),然后再提交:

1
2
3
4
5
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
# 提交到 master 分支
git push -u origin master

使用时最好所有文件已经完全push了。

第二种方法:(推荐)
在每个clone下来的仓库中手动设置不要检查特定文件的更改情况。

1
git update-index --assume-unchanged PATH //在PATH处输入要忽略的文件

原因:
1).gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
2)想要.gitignore起作用,必须要在这些文件不在暂存区中才可以,.gitignore文件只是忽略没有被staged(cached)文件,
对于已经被staged文件,加入ignore文件时一定要先从staged移除,才可以忽略。

需要特别注意的是:
在使用.gitignore文件后如何删除远程仓库中以前上传的此类文件而保留本地文件
在使用git和github的时候,之前没有写.gitignore文件,就上传了一些没有必要的文件,在添加了.gitignore文件后,就想删除远程仓库中的文件却想保存本地的文件。这时候不可以直接使用”
git rm directory”,这样会删除本地仓库的文件。可以使用”git rm -r –cached directory”(两个杠cached)来删除缓冲,然后进行”
commit”和”push”,这样会发现远程仓库中的不必要文件就被删除了,以后可以直接使用”git add -A”
来添加修改的内容,上传的文件就会受到.gitignore文件的内容约束。
额外说明:git库所在的文件夹中的文件大致有4种状态
Untracked:
未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

Unmodify:
文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,
而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

Modified:
文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态,
使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

Staged:
暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态.
执行git reset HEAD filename取消暂存, 文件状态为Modified

Git 状态 untracked 和 not staged的区别
1)untrack 表示是新文件,没有被add过,是为跟踪的意思。
2)not staged 表示add过的文件,即跟踪文件,再次修改没有add,就是没有暂存的意思


Windows 下使用 make 和 gcc 命令

2022-05-05 15:27

有两种方法:
方法一:参考fyne(一款 go 的 gui 框架,其编译需要使用 gcc 命令)
中提及的方式,安装 MSYS2
。安装完成后将C:\Application\msys64\mingw64\bin\mingw32-make.exe 在当前目录复制一份并重命名为make.exe,然后将此目录添加到环境变量
path 中,重启生效。
方法二:参考博文 windows10配置make命令,安装MinGW
。安装完成后将C:\Application\MinGW\bin\mingw32-make.exe在当前目录复制一份并重命名为make.exe,然后将此目录添加到环境变量
path 中,重启生效。

使用make -v查看是否命令安装成功。

使用 make 命令执行 Makefile 文件
在执行上述操作后,可以使用make命令执行Makefile文件,但若Makefile文件中定义了有shell
语句则依旧不能正确执行。解决方式是使用Git,打开 idea 设置,在Tools -> Terminal中将Shell path
修改为C:\Config\Git\bin\bash.exe确定,即可在 Git Bash 中执行 shell 命令。

Windows 下的 cmd 神器 - cmder,可以模拟 linux 环境,具体使用方式以后有需要再探索。


git 全局配置用户名和邮箱

2022-05-04 15:51

1
2
git config --global user.name "mayee"
git config --global user.email "maye_e@qq.com"

查看全局配置

1
git config --global --list

显示:

1
2
user.name=mayee
user.email=maye_e@qq.com

生成 ssh 密钥

1
2
# 使用 ed25519 算法生成秘钥
ssh-keygen -t ed25519 -C "deepmi"

连续三次按回车,提示密钥被存储在/Users/用户目录/.ssh/id_ed25519.pub中,然后用cat命令查看密钥。
若你需要使用多个 SSH 密钥对,在 Enter file in which to save the key 步骤时,输入一个新的文件名称就可以避免覆盖已有的密钥对。

deepmi是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。
现网的大部分教程均讲解的使用邮箱生成,其一开始的初衷仅仅是为了便于辨识所以使用了邮箱。

默认情况下,密钥会生成在C:\Users\maye\.ssh\目录下,但是我们可能会在GithubGiteeGitlab等多个平台有多个账号。默认生成秘钥时,如果不指定保存路径,那么就会覆盖之前的密钥。
例如,当我在我的微星电脑micro-star上想为我的 Github 账号Ma-yeah生成一个 SSH 密钥,可以按如下步骤操作:

  1. C:\Users\maye\.ssh\目录下手动创建目录,最终目录结构为C:\Users\maye\.ssh\github\Ma-yeah
  2. 打开Git Bash输入ssh-keygen -t rsa -C "micro-star"
  3. 按一次回车后,会询问你秘钥保存的位置,默认为/c/Users/maye/.ssh/id_rsa,此时修改为/c/Users/maye/.ssh/github/Ma-yeah/id_rsa
  4. 然后连续回车即可;

其他平台和账号同理。

注:生成 ssh 密钥也可以使用ssh-keygen -t rsa -C "deepmi",表示使用 RSA 算法生成秘钥。

  1. ssh key的类型有四种,分别是dsa、rsa、 ecdsa、ed25519。
  2. 根据数学特性,这四种类型又可以分为两大类,dsa/rsa是一类,ecdsa/ed25519是一类,后者算法更先进。
  3. dsa因为安全问题,已不再使用了。
  4. ecdsa因为政治原因和技术原因,也不推荐使用。
  5. rsa是目前兼容性最好的,应用最广泛的key类型,在用ssh-keygen工具生成key的时候,默认使用的也是这种类型。不过在生成key时,如果指定的key
    size太小的话,也是有安全问题的,推荐key size是3072或更大。
  6. ed25519是目前最安全、加解密速度最快的key类型,由于其数学特性,它的key的长度比rsa小很多,优先推荐使用。它目前唯一的问题就是兼容性,即在旧版本的ssh工具集中可能无法使用。不过据我目前测试,还没有发现此类问题。

因此,优先选择ed25519,否则选择rsa。

以下是原文:

1
2
3
4
5
6
7
8
9
OpenSSH supports several signing algorithms (for authentication keys) which can be divided in two groups depending on the mathematical properties they exploit:

DSA and RSA, which rely on the practical difficulty of factoring the product of two large prime numbers,
ECDSA and Ed25519, which rely on the elliptic curve discrete logarithm problem. (example)
Elliptic curve cryptography (ECC) algorithms are a more recent addition to public key cryptosystems. One of their main advantages is their ability to provide the same level of security with smaller keys, which makes for less computationally intensive operations (i.e. faster key creation, encryption and decryption) and reduced storage and transmission requirements.

OpenSSH 7.0 deprecated and disabled support for DSA keys due to discovered vulnerabilities, therefore the choice of cryptosystem lies within RSA or one of the two types of ECC.

#RSA keys will give you the greatest portability, while #Ed25519 will give you the best security but requires recent versions of client & server[2]. #ECDSA is likely more compatible than Ed25519 (though still less than RSA), but suspicions exist about its security (see below).

docker-compose 重建容器

2022-04-29 11:50

1
docker-compose up -d --force-recreate

fork 项目开发

2022-04-16 03:13

当 fork 了别人的项目后,进行二次开发,源项目有提交后如何保持更新呢?

例如,源项目仓库为:https://github.com/halo-dev/halo.git ,fork 到我的
仓库后地址为:https://github.com/maye-e/halo.git。
我的仓库中创建dev分支为开发分支,stable分支为稳定版,可以release。master分支不动,保持和源项目进行同步。
将项目从我的仓库中拉取到本地,然后如下操作:

  1. 查看远程仓库: git remote -v
1
2
origin  https://github.com/maye-e/halo.git (fetch)
origin https://github.com/maye-e/halo.git (push)
  1. 设置upstream上游仓库(源项目地址)
1
git remote add upstream https://github.com/halo-dev/halo.git
  1. 然后再次查看远程仓库: git remote -v
1
2
3
4
origin  https://github.com/maye-e/halo.git (fetch)
origin https://github.com/maye-e/halo.git (push)
upstream https://github.com/halo-dev/halo.git (fetch)
upstream https://github.com/halo-dev/halo.git (push)
  1. 同步上游源仓库的master分支更改到本地(本地master分支,非我的远程仓库)

4.1. 拉取更新的 branches 和 commits

1
git fetch upstream

4.2. Checkout 本地分支

1
git checkout master

4.3. 合并

1
git merge upstream/master

4.1~4.3的3个步骤也可以通过一条语句完成

1
git pull upstream master

此时,可以任意进行合并分支

  1. 将本地master分支push到远程仓库
1
git push origin master

另外,如果需要将修改合并到源项目,需要在我的仓库中提交 Pull Request


docker 常用命令

2022-02-19 13:43

id 命令 含义
1 docker kill $(docker ps -a -q) 杀死所有正在运行的容器
2 docker rm $(docker ps -a -q) 删除所有已经停止的容器
3 docker images 查看本地镜像
4 docker ps 查看本地容器
5 docker build -t name:tag Dockerfile路径 创建镜像
6 docker exec-it IMAGE ID或者NAMES /bin/bash 进入容器
7 docker stop CONTAINER ID或者NAMES 关闭容器
8 docker start CONTAINER ID或者NAMES 重新启动关闭的容器
9 docker rm CONTAINER ID或者NAMES 移除本地容器

npm 设置淘宝代理

2021-10-26 01:37

永久设置:
npm config set registry http://registry.npm.taobao.org
查看设置:
npm config get registry


Linux 文件目录权限

2021-11-22 17:46

先看一个实际的例子:
drwxrwxrwx-rwxrwxrwx .
文件权限分别对应4个部分: [文件或文件夹] [owner权限] [group权限] [others权限] .
因此上述例子表示为: [d] [rwx] [rwx] [rwx] 、[-] [rwx] [rwx] [rwx]

  • [-] 表示文件;
  • [d] 表示文件夹,即 directory;

[rwx] 分别表示拥有的权限:

  • r 可读,read。如果是目录表示有权限执行 ls 命令;
  • w 可写,write。如果是目录表示有权限创建目录;
  • x 可执行,execute。表示有权限执行 ls -l 命令;

拥有该项权限为 1,没有权限为 0。
drwxrwxrwx 表示为一个目录,对应权限值为 0777。0 标识这是 8 进制数(逢 8 进 1),777 转为 2 进制为 111111111,则在
owner、group、others 下均有可读、可写、可执行权限;
-rwxrwxrwx 表示为一个文件,对应权限值为 0777。0 标识这是 8 进制数(逢 8 进 1),777 转为 2 进制为 111111111,在
owner、group、others 下均有可读、可写、可执行权限。


pinpoint部署

2021-01-30 16:02

部署需要资源:服务器需安装 docker-compose。当前测试部署的服务器 ip 为 192.168.30.73。

  1. 在 github 上 clone pinpoint-docker 项目到本地,得到
    pinpoint-docker-master.zip 压缩包。
  2. 解压后进入到 pinpoint-docker-master 目录中,将 docker-compose.yml 和 .env 两个文件拷贝一份出来。
  3. 打开 .env 文件,将第一行 PINPOINT_VERSION=2.2.1 修改为 2.2.0,保存文件;再打开 docker-compose.yml 文件,其中 services
    节点下包含 pinpoint-hbase、pinpoint-mysql、pinpoint-web、pinpoint-collector、pinpoint-quickstart、pinpoint-agent
    等子节点。首先可以删除掉 pinpoint-quickstart 和 pinpoint-agent 这两个节点,接着再将
    pinpoint-hbase、pinpoint-mysql、pinpoint-web、pinpoint-collector 这个4 个节点下的 build 节点删除,保存文件。
  4. 将修改后的 .env 和 docker-compose.yml 文件上传至服务器,然后执行命令:docker-compose pull & docker-compose up
    -d,等待自动拉取镜像,启动容器,用时3分钟左右。
  5. 在 github 上访问 pinpoint 的 release 页,下载 2.2.0 release notes
    下的 pinpoint-agent-2.2.0.tar.gz 文件并解压,进入到 pinpoint-agent-2.2.0\profiles\release 目录下,打开 pinpoint.config
    文件,搜索 “.ip” 将127.0.0.1替换为服务器真实 ip 192.168.30.73;再搜索 “profiler.sampling.rate” 将 20 修改为 1。
  6. 打开浏览器,访问 192.168.30.73:8079 即可。
  7. java -jar 启动服务时,加上 jvm 参数:
1
2
3
-javaagent:/home/pinpoint/agent/pinpoint-bootstrap-1.8.0.jar 
-Dpinpoint.agentId=(要全局唯一建议用hostname,部署多个jvm的话加前缀)
-Dpinpoint.applicationName= 设置项目的名称(如果同一项目部署两台实例,这两台的参数应该一致)