哪怕到了最近几年,数据库被黑客完整下载的安全事件,也是层出不穷,程序员世界戏称为“脱裤”,好像光屁股一样羞耻。比如,刚过去不久的 CSDN,小米,多玩,等等事件都还历历在目。所以,程序员写代码决不能抱有侥幸心里,用户的密码,是最最隐私的东西,一定要妥善处理,一旦泄露,会给用户和服务网站都带来不可估量的损失。

决不能使用明文存储密码

Keep Reading — 1878 words totally

今天下午,我在 Yii 框架 1.x 下,写一个数据处理脚本,脚本的功能主要是把一个超过百万行的表中的两个字段,同步到一个新表中。按照一般的想法,我写了如下的代码。

因为表的总数据量超过百万,所以,这个代码片段,以 2000 行数据为一个批次,分次将数据插入到新表中。原以为顺利完成任务的,结果在 Console 环境下一执行,发现总是到了 696000 行数据的时候,脚本就自动退出了,而命令行环境基本没有报错,按照我一般的经验,这个脚本自动退出又没有报错的原因,基本就是因为内存使用超限,于是,我加了一些内存统计代码来验证这个事情。

Keep Reading — 1213 words totally

以前,用 Windows 系统的时候,我学会了“粘滞键”这个专有名词,其含义,就是当按下一个键盘按键,并且保持不动的时候,系统应有的表现。

比如,一般来说,我们期望系统的行为是连续打出多个按键的字符。

我初始安装 Mac 系统的时候,按下一个按键,在 Terminal 等原生的 App 上,其行为是符合我们的预期的。但是,因为我是程序员,我使用 NetBeans 作为开发环境,当我连续按下一个键的时候,我发现,在 NetBeans 里面,只能出现一个字符。

Keep Reading — 367 words totally

我个人入行以来,最早接触软件包的概念,是从 Java 开始的,在学校学习 Java,所有的 Java 代码,都默认在一个软件包里面。如果要使用某个现成的功能,就要 import 一个软件包,就可以使用那个软件包里的所有代码了。然后,又在操作系统层面接触了包管理器,那是最初使用 Linux 的时候,那时候,最先使用的是 RedHat,非付费版本的 RedHat 没有包管理器,只能自己解决类库依赖,简直就是地狱。直到遇到了 Ubuntu 的 apt-get,简直瞬间来到了天堂。

后来,我成为了一个程序员,我使用的是 PHP 作为工作的开发语言,但是,这个语言里没有包管理的概念的,PHP 代码,都是一个项目一个项目的,能用的类库是比较少的,最多有些网上能找到的东一榔头,西一棒槌的代码片段。所幸,那个时代,也没有接触到所谓的大规模软件开发。直到进入到大公司,发现大家都在刀耕火种,代码复用,就是把一些代码组织到一个文件夹里,然后单独设立一个 SVN 库,最好的复用,就是做到了用 SVN 的 external 特性来引入一个代码。

Keep Reading — 1409 words totally

其实很早就听说了 Docker 了,这正是现在世界上最炙手可热的容器技术。直到去年 2015 年,我们公司才有小伙,尝试使用 Docker,当时,我们公司是全 Mac 办公,而 Docker 只支持 Linux,于是各种非官方爱好者,做出了各种方案,比如当时,如果要在 Mac 上用 Docker,就必须安装一个 boot2docker 的组件,是一个在 Mac 上使用 Docker 的封装,同时还要依托 VirtualBox 才行,当然也有 VmWare 的版本,但是又是收费的。

这个 boot2docker 的方案,不但安装麻烦,其命令行界面也丑陋不堪。而负责去研究这个方案的小伙子,最终也没有给出特别好的技术方案,只是浅尝辄止的一个分享演讲而已,比较令人失望。

Keep Reading — 1000 words totally

关于编码规范,每个程序员都有自己的看法,他们通常相信自己所奉行的规范是好的并且早已养成习惯,有些看法的意念特别强大,以至于上升到了一种信仰层面。

我个人觉得,编码规范不是个人习惯,比较好的态度是,信奉编码规范可以提升大家的效率,而坚守一个团队的编码规范,而不是,坚守某种固有的做法。至于

某种规范的条例是不是“很奇怪”,“不合理”,我们都可以讨论,但是讨论不代表不遵守,这才是比较职业化的态度。或者说,即便通过讨论,认定某个规范不合理,

Keep Reading — 1233 words totally

使用代理服务器收敛服务外网IP

在产品研发过程中,免不了遇到要接入外部服务的业务场景,例如:第三方支付、短信发送服务、邮件发送服务等等。这里面,不乏一些至关重要的服务,对安全要求性很高,为了便利,服务提供商,往往提出使用 IP 白名单的形式来进行辅助鉴权。若在过去,非常小的企业里,使用托管服务器作为企业的服务器的时代,这一般不在成为问题,一个是服务器本身数量很小,而且很稳定,另一方面,服务器是物理机器,其 IP 地址也相对稳定得多。

而现在,云计算作为一种价格低廉、扩展容易的形式,极大程度替换了原有的服务器托管形态的 IT 基础架构。在云计算的语境下,为了让资源能更高效利用,降低成本,云计算服务商往往采用动态分配资源,以及虚拟化技术的形式,来为企业提供服务。这就造成了哪怕是很小的企业,也有数量庞大的服务器数量(虽然它们是虚拟的),而且,因为动态分配,还可能造成服务器的 IP 并不稳定(因为,在不需要使用的时候,企业可以通过申请取消资源占用来节省开支,这样,如果再次分配,IP 地址就变化了)。

Keep Reading — 1308 words totally

所谓的 HTTPS 其实,指的是 HTTP over TLS/SSL,SSL 的意思是,Secure Sockets Layer,也即安全套接字层,是网景公司发明的一种传输层安全协议。因为对于网络信息基础架构太过重要,这个协议最后被国际标准化组织,标准化为 TLS,也即 Transport Layer Security,传输层安全协议,是 SSL 的后继者,从SSL 2.0 开始,后面一般不再称为 SSL 3.0,而称为 TLS 1.0,而 2016 年的互联网,主流都将往 TLS 1.2 以上发展。

Keep Reading — 1884 words totally

首先来剖题,这里三个关键字:基层,代表再往下,就是一线程序员了,再没有下级了;技术,这里我狭义定义为程序员,别的领域仅供参考;Leader,也就是组长,或者叫领导,选英文是因为,组长和领导,我都能问出一股“官僚”气味,不想传递这种意思。

如果用选、育、用、留四个字来概括人力资源管理,那技术团队的组建,其实,就是一个“选”字。这个地方,往往实践的时候能发挥很大的主观能动性,在公司来说,其实就是招聘,展开来讲,就整个都是招聘、选人的技巧和标准了,那真的偏题太远,不展开了。

更多想分享的,是“如何当好组长”,也就是 Leader,这么一个话题。

Keep Reading — 1949 words totally

今天,知乎《北美码农的包子铺》专栏里,提到了,跟老板 1 on 1 聊天时讲什么的话题,文章是站在一个员工的角度讲的。

正好,最近我在做绩效面谈,我想站在 leader 或者说 mentor 角度讲讲同一个问题。这样未免有些恬不知耻,也不能涵盖所有的情况,但是我觉得说不定还是能给新人一些参考。

逻辑思维,我只看过一期节目,但是一直印象深刻,就是讲我们这个时代的人,应该怎么自处,在这一期节目中,罗胖提到了“U盘型人才”,以及“手艺人”的概念。我深以为然。大体意思就是说,你在这个时代应该像一个U盘一样,有自己独特的功能,而且极其专业化,到了任何一个企业,插上就能用。这个话,有好几层意思,一个是说“专业”,有自己独特而且强大的技能,所以又叫“手艺人”;还有一层意思就是说,聘任关系,相比从前,表现出了更多的不稳定性,人才随时可以从一个企业“拔出”,然后“插入”到另一个企业。

Keep Reading — 2312 words totally