maven的基本用法备忘,以及grpc-kotlin-gen的改造

最近几天学习了一下maven,把一些理解和参考链接记录如下。

起因是android开发中用到一个插件grpc-kotlin-gen,它在build过程中要调用外部程序protoc,并指定自身为其插件,生成与该proto适配的kotlin代码
但是在windows上运行时却报错,提示

  • What went wrong:
    Execution failed for task ‘:app:generateDebugProto’.
    > protoc: stdout: . stderr: --grpckotlin_out: protoc-gen-grpckotlin: %1 不是有效的 Win32 应用程序。

看起来有点没头没脑,转到控制台里手动敲gradle命令并带上--debug --info参数,可以看到实际调用的命令行为:(已格式化)

阅读全文

wsl的更新和升级

根据这个issue的回答:

  1. lxrun /update只是更新软件包而已,相当于apt-get update
  2. 要更新wsl自身(即linux的system模拟层,本质上则是一个windows软件),也只能通过升级windows自身得到。而通常windows大版本发布比较慢,如要提前使用新功能(或bug修复版),可以加入windows内部版体验计划,这样就能升级到测试版了。wsl的版本号与宿主windows版本号一致:

阅读全文

偌大的nodejs竟然没有支持显示httpupload进度的库

也是醉了,为了这么一个简单功能,上窜下跳一个多小时,硬是没找到:

1.传统的 node-fetch,完全不支持进度
2.node-fetch-progress,request-progress 一类的进度扩展库,只支持下载进度
3.axios,号称 fetch 替代者,文档上说上传、下载进度都支持,于是花了大力气来试,结果:

阅读全文

typescript编译选项对输出目录结构的影响

typescript工程编译后的输出结构之灵活多变一直是个困扰我的难题,这次通过多种试验终于搞清了基本原理:

阅读全文

install exsi & coreos

原有的一台dell610上面装了个exsi5,上面只有一个虚拟centos,上面又只有一个gitlab,
最近研究docker,为了实验练手,就把它迁到新的docker上去了
于是老机器就空下来,又可以重装练手了。
这次打算装成exsi6,因为从6开始可以直接web管理了,不需要再装vsphereclient,省事。

exsi6.5

硬盘要先组阵列,新插上的硬盘会显示foreign状态,意思是指在本机外配置过,可以导入该配置,也可以清除重新配
我先选了导入,失败,于是干脆清除了,连同本机原有4个硬盘一起删除,重新组raid
反正做这种事之前数据先备份,任何操作都有可能把硬盘重置,就不要想着增量修改了,直接做好彻底重来的准备

阅读全文

使用samba docker的一点小经验

架一个samba服务器的事,曾经干过多次。
每次都要折腾半天,因为上次折腾过的东西又忘了……
但唯一没忘的是,每次都要小心翼翼,生怕把服务器搞坏了,因为东改西改的,又是添用户,又是改服务,特别担心影响到服务器的安全和稳定。

现在又要架了,可是有了docker,再也不怕搞坏服务器了!
全都在容器里折腾,搞错了,大不了把容器删了重来,甚至连数据都不会损失(都存在主机目录上)。

阅读全文

ubuntu使用lvm后增加磁盘容量的方法

一般添加新硬盘后分区挂载步骤

fdisk分区(创建分区表)
mke2fs格式化(创建文件系统)
mount挂载

使用lvm后的变化

阅读全文

使用child_process时注意环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const baseEnv = {
...process.env,
CODE_SIGN_IDENTITY: 'iPhone Developer',
PROVISIONING_PROFILE: '5ad27f68-0e0f-41b6-a39c-350683afee4f',
};

const shell = function(cwd, cmd, opt) {
try {
console.log(cmd);
const opt_env = (opt && opt.env) || {};
const r = child_process.execSync(cmd, {
stdio: 'inherit',
cwd,
env: { ...baseEnv, ...opt_env },
...opt,
});
return r ? r.toString() : undefined;
} catch (e) {
if (opt && opt.noerror) {
console.log('ignore error', e.message);
} else throw e;
}
};

阅读全文

openssl走一轮CA证书签发的过程和各个文件作用


## CA对服务器公钥签名的意义是什么?

1.服务器公钥,公之于众,对客户端而言,可让客户端判断,与之通信者,是不是此公钥的持有人

2.但是假若客户端的目标是安全连接一个叫jd.com的网站,当与该网站server连接时,应该用哪个公钥去验证对方呢?
实际上这个公钥本身还是服务器发过来的,用服务器发来的公钥去验证它自己,顶多能证明确实是在与该server通信(server没有被人吊包,或者中间人窃听)
却不能证明该server是目标网站jd.com的合法代表(有可能在dns层就被拦截了,连上的server根本就不在真正的jd.com上运行)

公钥本身只证明「你是你」,并不能说明「你是谁」

阅读全文

docker machine概念理解

刚接触docker的时候难免陷入术语和概念的泥潭,对boot2docker、docker machine、docker toolbox这些概念傻傻分不清楚。尤其是docker for windows和docker for mac出来后,更是遭遇老技术还未完全理解,又被新技术砸晕的连环打击。

摸索一段时间后,总算对这些概念建立了结构框架,大致理解如下:

阅读全文