压缩 Golang 编译的可执行文件体积

2018年1月1日 没有评论

自从接触 Golang 以来,一直对其编译出来的可执行文件有点看法,因为体积比较大。使用 go build av.go,编译简单的代码出来后就有近8M,当然,这是因为把 Go 的运行时环境也给打包进去了的原因,为了几k的源码实在是不划算,特别是在香蕉派/Firefly这些磁盘空间紧张的设备上面。

今天有搜索一下解决方法,Golang 的先行者给出的思路一共分为2步。

第一步,添加编译符号。

go build -ldflags “-s -w” av.go

-s 相当于strip掉符号表, 但是以后就没办法在gdb里查看行号和文件了。
-w 告知连接器放弃所有debug信息

衣服自己洗是使用 LiteIDE 来编写go代码的,按照下图添加即可,注意不要忘记添加引号,不然编译是无法通过的。

这样一来,编译后的文件就是5M多,看起来还是有点效果。

第二步,我们使用UPX来进一步压缩,其地址为 https://github.com/upx/upx,下载对应的版本即可。使用起来也很简单,默认即为压缩,输入upx av.exe 即可。

-d 解压缩
-l 查看压缩前后信息

现在再看,体积已经到1.7M左右了,效果很明显,就问你惊不惊喜,意不意外。

由于以前有木马病毒也使用UPX来加壳,导致现在杀毒软件对UPX不太友好。如果是部署在服务端或者Linux系统应该还好,特别是面向windows用户发布的,各位同学请慎重,可以考虑添加数字签名。至于如何使用数字签名,可以参考我的另外一个帖子。

对于产线的 Release 编译,使用自动化工具来做这个事情,应该都是小菜一碟了,就不提了。

分类: Golang, 日常 标签: , ,

W: mdadm: /etc/mdadm/mdadm.conf defines no arrays

2017年12月31日 没有评论

最近发现在执行Ubuntu的升级时,每次都可以看到W: mdadm: /etc/mdadm/mdadm.conf defines no arrays这样的错误提示。

网上查询了下,发现解决起来比较简单:

  1. sudo rm /etc/mdadm/mdadm.conf
  2. sudo update-initramfs -u
  3. sudo reboot
分类: 一句话 标签:

解决VMware Pro 14虚拟机黑屏

2017年11月11日 没有评论

最近有把VMware 12升级到14版本,升级后发现虚拟机显示黑屏了,根据现象似乎虚拟机是正常运行的,只是无法看到而已。

网上找了很久没有知道解决方法,在快要放弃的时候发现了解决方法。

那就是重置 LSP 网络,大家可以使用各种管家来重置,也可以在管理员权限下运行下面的命令:

netsh winsock reset

稍等后,重启系统即可。

分类: 一句话 标签: , ,

Ubuntu安装Shadowsocks

2017年10月5日 1 条评论

以前准备安装VPN的,后来发现怎么都连接不上去,遂放弃。现在有更好的解决方案了。首先在安装前先更新下系统,然后

1, sudo apt-get install python-pip

安装完成后,可以查看pip 的版本号:pip -V

2, sudo pip install shadowsocks

3, 编辑vi /etc/shadowsocks.json

{
“server”:”IP”,#你的服务器IP
“server_port”:8389, #你要开放的接口
“password”:”******”, #密码
“timeout”:300,
“method”:”aes-256-cfb”,
“fast_open”:true,
“workers”: 1
}

4, 启动服务 sudo ssserver -c /etc/shadowsocks.json -d start

5, 加入到开机启动,编辑/etc/rc.local,exit 0之前加入上面启动服务那句话。

6,配置客户端就可以上网啦。

分类: 一句话 标签:

身边多了个小朋友

2017年9月29日 没有评论

就让我沐浴在温和的春风里,宛如夏日午后泡开的凉茶,在醉人的秋天里带给你沉甸甸的不一样。

分类: 一句话 标签:

Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1

2017年9月22日 没有评论

最近在写一个数据清洗工具,以调整MongoDB的数据内容。工具使用了MongoDB官方提供的Nuget包,但是在连接的时候,一直无法成功,总是连接超时报Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1异常。

后来在Stackoverflow上找到解决方法,原来问题出在连接字符串上。

原来我的连接字符串是:mongodb://username:password@ip/mydb,就出现 Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1 异常。在官网的文档里有一句话 Above, the database by the name of “mydb” is where the credentials are stored for the application.

原来连接字符串里要写存储授权信息的数据库名称,默认是为admin。所以在连接字符串里不需要提供数据库名称了。在后面可以通过 var db = client.GetDatabase(“dbname”); 来定位到需要操作的数据库上。

 

分类: 一句话, 日常 标签:

mongodump 备份数据

2017年8月21日 没有评论

Mongodump 是MongoDB里的一个工具,可以用来备份数据。

我们在命令行里输入 mongodump –help 即可查看其用法,对于日常使用来说,主要会用到下面一些参数:

-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件

例如:mongodump -h 127.0.0.1 -d mm-o data.dmp

但是在MongoDB采用了version 3版本身份认证的服务器上,这个方式会失败。经过查询后发现,还需要添加–authenticationDatabase admin 参数。

分类: 一句话, 日常 标签:

下载旧版本的SQLite for Universal Windows Platform扩展包

2017年8月4日 没有评论

最近的项目在服务器上编译时报错,经过检查发现是SQLite的扩展库并没有安装,经过确认,服务器上安装的是另外一个旧版本的库。这么一来就会有两种不同的策略,一种是修改项目的引用,采用旧版本库。另外一种是服务器上更新库。

考虑到时区的不同,更新库并不能马上完成,所以采取了前者。但是现在的问题是无法下载以前的旧版本。恩,这是个好问题。

经过一番搜索,找到了解决方法:

对于 3.14.1 版本,其下载地址是 http://www.sqlite.org/2016/sqlite-uwp-3140100.vsix。而3.12.2 是http://www.sqlite.org/2016/sqlite-uwp-3120200.vsix。现在相信大家应该可以猜测出规律来了。

分类: 一句话 标签:

查找“Windows无法停用设备,原因是某个程序正在使用它”的元凶

2017年8月1日 没有评论

我们在用完U盘设备,准备弹出的时候,经常发现设备被占用导致无法拔出。但是系统又没有告诉我们具体是那个程序在占用。

一般说来,可能是U盘里的文件被打开,这样的情况,需要关闭当前打开的程序。大部分都属于这种情况。

有的同学即使这么做了,但是发现仍然弹出提示,需要去检查下是否系统的剪贴板里是否有复制或者前切来自U盘的文件,一个保险的方式就是重新复制一段文字,替代下原本存在的内容。

如果还是继续提示,相信大家很是恼火,想找到到底是哪个程序占用了U盘里的文件。衣服自己洗无意间发现了一个方式,打开系统的事件查看器,选择“系统”分类。就可以按照时间查看当天的Kernel-PnP类型的警告,其详情里就详细显示了占用文件的程序,然后各位同学就可以结合实际情况来具体判断了。

以后再也不用太担心这样的情况了,大不了重启系统,对吧。哈哈。

分类: 一句话 标签:

FFmpeg合并多个视频文件

2017年7月20日 没有评论

就在前几天,衣服自己洗有从某宝上买了一个电筒式的记录仪,在昨天下班的时候就开启了准备试用,结果到家发现并没有生成,在检查了说明书后,发现只是开启了电源,并没有开始录制。

好吧,今天早上的时候又正式的检查了状态灯,确认没有问题。到了单位,文件是有了,不过按照时间先后顺序生成了好几个文件。对于观看来说,最合适的当然是合并到一起看拉。很自然地就想到了FFmpeg这个万金油。简单地搜索了一下,选择了简单适合我的方式。

首先,我们去下载最新稳定版的ffmpeg,再然后生成文件列表文件,每行一条记录,类似 file MOVI0001.avi,在生成了文件后就可以运行下面的命令来合成一个文件拉。

ffmpeg -f concat -i list.txt -c copy output.avi

虽然从命令行里看到有一些警告,最后检查了下,还可以正常播放。

最后上传到优酷视频里,优酷定义这视频为标清。真是奸商,用的插值算法生成的,虽然心理预期会有虚报,但是也差的太远了。

分类: 一句话 标签: