杂念

高度决定视野,方向决定未来。
有些时候,打败我们的不是困难本身,而是在还没有思考解决困难的方法前,就将困难定义成不可解决的,将自己定义成解决不了困难的。 我自己特别喜欢面对各种挑战,迎难而上解决困难的过程,能够让我进入一种十分投入的工作状态。解决困难问题的过程往往并不是十分愉快,你需要面对自己的无知、无助、无力,然后再一点点的收集线索、理清脉络,抽丝剥茧一般理解问题的本质。大部分困难本身,来自于你对困难的无知。而大部分人在面对这种无知之前,就败给了自己。 我相信没有人会愿意承认自己『低能』,但是遇到过很多人,对于一些棘手问题的第一反应是,做不了、实现不了、太复杂。世界上哪有那么多简单的事情,越困难的事情解决之后给人带来的成长和快乐才会越多啊。如果我们面对的都是一个一个简单的问题,每个人都成了一些简单的工具人,谈何成长和发展。这种是懒。 还有一种人,遇到困难也会经过思考,也会给出方案,但是往往给出之后,就打起了退堂鼓,方案太复杂,对工艺、水平要求太高,自认自己达不到,或者自认没有人能达到。轻者实现一个半吊子的方案,缝缝补补,重者直接放弃。这种是笨。是过早的对自我的否定,自己把自己的水平上限锁死了。 以我自己的认识,大部分人在正常工作当中遇到的困难和问题,都没有到达现有的技术手段解决不了的层面。复杂的问题可以通过巧妙的算法、优雅的架构、精彩的实现、全面的测试来解决,每次解决完一个类似的问题,都是对自己的一次锤炼,都是自己个人能力和水平的提升。 甚至于,即使在最后的最后失败了,你也会有比那些轻易放弃、过早妥协的人能有更多的收获。 送给偶然能看到的人,如果你还年轻,你可以好好读一读。如果你早已油腻,就当听我痴人妄语。世界是多样的,我能接受你的安逸和妥协,也请你接受这个世界上有人愿意迎接挑战、追求美好。 — EOF —
155 次浏览 | 没有评论
2021年5月13日 | 归档于 感悟, 生日
标签:

Enable HTTPS in dockerd

在Ubuntu中安装Docker后,默认会监听本地的socket地址,可以通过/etc/systemd/system/multi-user.target.wants/docker.service看到启动参数为ExecStart=/usr/bin/dockerd -H fd://,如果我们想通过远程访问的方式连接到这台主机,使用这台主机的Docker,则需要添加如下参数:

其中使用到的证书可以通过如下命令来生成:

然后重新加载配置,并重启docker,使用如下命令即可:

重启完成后,在将/etc/docker/ssl内的文件拷贝到需要远程访问的主机内,一般我们使用目录~/.docker,然后在该主机上配置环境变量:

然后执行命令docker info难即可。

PS:Ubuntu每次升级docker都会重置docker.service内的内容,如何持久化上面的修改,还待改进。

PS:上面的证书签发了1年的时候,过期后重新执行签发证书操作即可。

161 次浏览 | 没有评论
2021年5月8日 | 归档于 Linux, Ubuntu, 容器技术, 技术
标签: , ,

Build PHP 7.1/7.2 in Linux

开发环境和生产环境使用的Linux发行版,都没有官方的PHP7.0以上的安装包,只能通过自己手动编译的方式,打包后上传到镜像内。

分享一下我使用的编译参数:

PHP 7.1

PHP 7.2

执行完成后,执行 make && make intall 即可

–EOF–

270 次浏览 | 没有评论
2018年8月2日 | 归档于 Linux, PHP, Ubuntu

PHP-PM without Docker

按照PHP-PM网站上介绍的方法,在不使用Docker的情况下,按照WIKI给的方法,是很难把一个Laravel应用跑起来的。

由于出错信息看上去也没有什么营养,在网上Google了好久也没有找到解决的办法。不过后来大概还是找到了方法:

1、按照上面WIKI里的方法做到最后;
2、在PHP-PM安装目录内执行:composer require php-pm/httpkernel-adapter
3、在Laravel项目内执行:ppm start

分享一份可以运行的Laravel的ppm.json配置文件:

关键就在于上面的第三步,除了Laravel,其他类型的项目(Symphony)应该安装相应的Bridge都可以解决吧。

不得不说,Docker已经强大到有些项目不照顾不用Docker的人的感受了。

–EOF–

342 次浏览 | 没有评论
2018年8月2日 | 归档于 Laravel, Linux, PHP, PHP-PM

文件加密传输

我的需求是这样的,我需要将一份文件通过Email的方式安全地拷贝给外部人员,这份文件在传输的过程中有可能会存在失窃的可能性,所以要求进行加密后传输。

很自然的想到了非对称加密的办法,让接收方生成一份私钥和公钥,把公钥发给发,我用公钥将文件加密后发送给接收方。这样即使在中间过程中文件失窃,由于无法解密,也看不到文件的内容。

But,事实是这样的

SA operation error
89450:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/crypto/rsa/rsa_pk1.c:153:

openssl提供的工具使用非对称加密无法对过大的文件进行处理(实验得知其实能处理的文件大小很小)

这个方法不行,于是简单的回忆了一下HTTPS工作的过程,于是有了以下的办法:

接收方

生成私钥
openssl genrsa -out private_key.key 1024

提取公钥
openssl rsa -in private_key.key -pubout -out public_key.pub

接收方将公钥发送给发送方

发送方

生成base64编码的64位密码文件
openssl rand -base64 64 > passwd.txt

用公钥加密密码文件
openssl rsautl -encrypt -in ./passwd.txt -inkey ./public_key.pub -pubin -out ./passwd-encrypted.txt

用密码文件加密文件
openssl enc -aes-256-cbc -in ./file.txt -out ./file-encrypted.txt -e -kfile ./passwd.txt

将passwd-encrypted.txt和file-encrypted.txt发送给接收方

接收方

用私钥解密密码文件
openssl rsautl -decrypt -inkey ./private_key.key -in ./passwd-encrypted.txt > passwd-decrypted.txt

用密码文件解密文件
openssl enc -aes-256-cbc -in ./file-encrypted.txt -d -kfile ./passwd.txt -out file.txt

这个过程与HTTPS的过程非常类似(除去无证书验证身份外)

720 次浏览 | 没有评论
2017年8月10日 | 归档于 Linux

~/.ssh/config的一些推荐配置

最近看了一些资料,感觉之前用了这么多年的 ssh 浪费了好多大好的青春和时间。这里给一个我现在在使用 ~/.ssh/config 的范本,可以为使用 ssh 登录时带来非常多的方便之处。

1.多个 SSH 之间共享同一个连接,在第一次连接成功后,再次连接同一个主机,不用输入密码。

Host *
ControlMaster auto
ControlPath ~/.ssh/ssh_mux_%r@%h:%p
ControlPersist 10m

2.连接特定的主机时,自动添加主机名的 domain

Host ss*
HostName %h.domain-name.com

3.为某个主机设置别名,同时指定使用的端口、用户名和密钥

Host xxx-yyy
HostName xxx-yyy.domain-name.com
Port 29939
User username-root
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

4.使用代理连接某个主机

Host ln-tky2
ProxyCommand /usr/bin/nc -X 5 -x localhost:1080 %h %p
HostName xxx-yyy.domain-name.com

5.保持连接可用,在没有交互的时候发送心跳给主机

Host qcloud
HostName x.y.z.a
User ubuntu
PreferredAuthentications publickey
IdentityFile ~/.ssh/qcloud
# keep live in 1 hour
ServerAliveCountMax 60
# send a heart beat to server every 60 seconds
ServerAliveInterval 60

具体的信息可以 man ssh_config 查看。

643 次浏览 | 没有评论
2017年4月18日 | 归档于 Linux, 技术
标签: ,

最近变化有点大

一晃2017年已经快要过去1/12了,回想起2016年,发生了非常多的事情,卖房买房装修换工作,儿子也在不知不觉中快到了上幼儿园的年纪。

在百度呆了5年多,学习到了非常多的东西,无论是在技术上还是非技术上都给我的成长提供了很好的帮助。以前从来没有想过要从百度出来,不过没有看过外面的世界总是心有不甘。从毕业入职,经历了北京上海两地,5年多的时间,其实基本上就是在做一件事情。能够围绕一套系统做五年多,并且还在持续改进,我想这在大多数公司里都是非常难得的机会。希望Mola日后能发展的更好,后面如果能开源出来,我还是可以继续贡献代码的。哈哈……

整个换工作的过程,被各种琐事烦得不行,公积金、居住证积分、个税合并申报,没有任何一件事情是顺顺利利办下来的,相信是好事多磨的原因吧,好在最后都办好了。换到滴滴以后,遇到了更多的挑战,技术上的,业务上的,团队管理上的,我是个愿意接受挑战的人,也希望能够跳出自己原来的舒适的环境,做出一些不太一样的事情来。

2017年春节就要来了,值此新年之际,我谨代表我和我老婆儿子,恭祝各位鸡年大吉吧!

629 次浏览 | 没有评论
2017年1月26日 | 归档于 工作, 总结

哦,又长了一岁

记得我之前经常用『XX岁了』在生日那天写一篇博客,不过好像过了28岁之后就没有这个冲动了。28岁似乎被我定义成年轻与成长的分界点,不是到了28就成熟了,而是到了28岁以后开始学着变得成熟 。 感觉生活变化最大的还是毕业以后参加工作,上学的时候无论是小学,中学还是大学,其实模式都差不多,上上课,做做题,考考试,每年两个假期开心的玩三个月。工作以后,结婚,生子,从北京Transfer到上海,买房卖房再买房买房,级别在升,工资在涨,生活在不断地变化。最近两年多的时间,大部分记忆和手机里的存储空间都被儿子填满了,儿子会笑了,儿子会喊爸爸了,儿子能站起来了,儿子能走路了,儿子会说两个字的词了,儿子能数数了,儿子会说整句话了,儿子会打老子了……我们体会到了作父母的辛苦,也感受到了孩子在成长的过程中给自己带来的快乐。我庆幸我跟孩子妈妈做了一个明智的决定,使得在孩子成长的过程当中,我们能在大部分时间都陪着他(当然他最爱的还是他妈,~_~)。 就这些吧,最近要做一些不太令人愉悦的事情,所以能忙里偷闲上来胡说几句。 — EOF —
551 次浏览 | 没有评论
2016年8月12日 | 归档于 未分类
标签:

mktime之夏令时

最近遇到了一件奇怪的事情,单元测试里写的一段代码在本地跑没有问题,放到Jenkins上跑就出问题。因为是跟时间相关的,所以一开始怀疑与时区有关系,跑到测试机上去看,时区配置的没有问题。代码逻辑很简单,如下:

最后打印的时间与最初传入的时间可能并不一致。

追踪了半天,最后发现是tm.tm_isdst影响了结果的正确性。tm_isdst是用来描述是否是daylight saving time的属性,而strptime由于并不能确认是否是冬令时/夏令时,所以并没有置这个值,而是保留了其原有的默认值。而原有的默认值由于没有初始化,其值会影响mktime的行为,mktime会根据tm_isdst来修正tm中的各项值。

所以,在使用struct tm前,将其初始化成全0是最安全的。

961 次浏览 | 没有评论
2016年1月12日 | 归档于 C++, Linux, 工作, 技术

圣诞快乐!

我似乎已经很久没有写日志了,久得上一篇工作总结还是写的入职两年。

原来一直在使用GoDaddy的空间,去年到期的时候,就想着要换到别的空间去,顺带着供我范强用,但是拖啊拖啊,不停地每个月续租到现在。最近一段时间,试了搬瓦工,速度不错,似乎装上Nginx,MySQL和PHP也跑得挺顺畅。

于是今天终于下定决心,搞到这里来了。

595 次浏览 | 没有评论
2015年12月24日 | 归档于 回忆录, 工作
标签: ,