心得体会

不知道从哪一届开始,老罗开锤子手机发布会的时候,会当场捐赠一款开源软件,第一次是捐赠给 OpenSSL,第二次是 OpenResty。那次发布会开完,OpenResty 在程序员圈子里火了一把,成为一种热门技术了。其实,OpenResty 在后端程序员世界里,早就享有盛名。当你不得不去面对高并发的场景的时候,你一定会发现 Nginx 的巧妙和强大,然后你会想到用 Nginx 解决问题,然后你一定会发现 OpenResty。

三年前就想学 OpenResty,一直被拖延症耽搁了。这期间,OpenResty 发展很快,无论是自身还是社区都进步很快,甚至也有了配套的 awesome-resty 项目。我下定决心这次好好学学。

Keep Reading — 2496 words totally

Yii 2.0 框架学习笔记-基础抽象

Yii 框架从 2.0 开始,底层抽象上面发生了一些变化。比如,多了 DI 和 Service Locator 等设计模式相关的抽象。这两天,专门看了下代码,写下一点我的想法。

上面的图是,是我用 Visual Paradigm 画的类图。从图里我们看到,2.0 版本以来,最根部的抽象是一个叫 Configurable 的接口,其主要作用就是说明所有的类都可以用类似 Key-Value 结构来进行配置。除了一些 Helper 的类,绝大部分对象都是 Configurable 的实现。

打开 Configurable 的代码,发现是一个空的接口,所以,我认为作者这是要表达一种抽象层面的概念,并没有实际的用途。查了 Stack-Overflow ,据说这是原自 Java 里的一种惯用做法,不过说实在的,我还是没有太理解,全空用来表达概念,可能是出于某种性能层面的考虑。但是,读起来确实有点故弄玄虚的错觉。

Keep Reading — 1441 words totally

最近,正好发生了一件大事,就是 GitLab 的运维同学不小心删除了生产的数据,虽然 GitLab 已经骇人听闻的准备了五种备份机制,但是,仍然导致他们丢失了将近 6 个小时的用户数据,尤其对他们声誉的损失,是根本无法估量的。反思一下,这个博客 Becomin’ Charles,也是没有完善的备份的,真是冷汗直冒啊,主要考虑到这是我的个人博客,但是想想已经坚持了快十年了,如果真的丢了的话,还是非常痛心的。

正好,老婆最近正在学习 Python 编程,我在教她,其实,我是 PHP 程序员,一点也不喜欢 Python,但是说实在,一个外行学编程的话,Python 确实比 PHP 友好太多了,只能推荐她学 Python 了。正好,借着这个机会,我决定自己也学学 Python 编程吧,于是,我决定要用 Python 做一个数据库的自动备份脚本。备份的位置,就用 Dropbox 来做吧,因为我的服务器是 Linode 提供的,美国 fremont 机房,选择美国的存储服务,比较合适。以下是我写得代码,Python 小白,敬请指教:

Keep Reading — 1003 words totally

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

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

Keep Reading — 1213 words totally

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

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

Keep Reading — 1409 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

你手下有一群很棒的工程师,并且,他们想要在自己的职业生涯中更进一步。由于他们付出的努力,他们的团队在成长,而你,想要对他们的工作成果有所表示,最显而易见的一个方式,就是让他们负责管理他们自己创建的团队,尤其,他们已经是团队的事实上的 Leader 了。但是,这真的是他们想要的么?或者只是他们所相信的“自己应该想要的”?

人事管理是一种(与技术)不同的技能

在工程世界广为人知的一个事实是,只要学会一整套新的技能,工程师就能达到一个技术的巅峰,而围绕他们这段职业生涯的“社交”和“软实力”则可能被忽略了。为了掌握这一整套技能,他们进行了无数的试错,并花费了他们绝大部分的时间。现在,他们却不是把时间花在写代码上——这是他们本来被奖励的原因。突然间,他们就从很擅长他们的工作,变得不擅长自己的工作,这摧毁了他们的自信和工作满意度。

Keep Reading — 2154 words totally

之前,我写了一篇文章《SVN为什么比git更好》,主要是从非常朴实和现实的角度,从一个为全团队选型的角度,分析了为什么SVN比git更好。但是公私分明,作为我个人来说,我想我还是更喜欢git的。

全分布式设计

分布式计算,早就是这个时代的趋势和潮流了,为什么版本控制不应该分布式呢?分布式到底有何好处呢?很多书会写,每个拷贝,都是整个版本库的镜像,(这是优点么?),灾难恢复比较容易,(因为每个人镜像的人,都是整个全部版本库,多少个人克隆,就等同于多少分备份,那么当然灾难恢复容易,不过这跟我到底什么关系?那是运维的事情),去中心化,(那又怎么样?写代码难道还要民主不成?),这些分布式带来的好处,感觉都有点隔靴搔痒的感觉。

Keep Reading — 2002 words totally