Becomin' Charles

算法 | LNMP | Flutter | Mac

Becomin' Charles

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

阅读全文 »

Yii 2.0 base 包里部分类的类图

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

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

阅读全文 »

我是2010年参加工作的,当时,有件小事,我是印象相当深刻的。那时,公司为我指定了一位导师,负责辅导我快速进入角色并胜任工作。我便跟着导师合作项目,以他为主导,后来我发现,每次他说他做好了什么功能时候,我总是在代码里找不到相应地功能,等我去问他,他说,“哦,我没有提交代码”,如此数次后我问他,为什么不提交代码,导师回答我,那样会产生太多的版本号(当时我们使用的是SVN,会产生revision号)。听到这句话,即便经验浅薄,我还是震惊了!

事实上,我接受到的本科教育,都是通用教育,进入到工作岗位上后,也没有接受过公司提供的关于代码版本控制的培训,好像公司方面觉得,这是每个程序员天然应该会的东西,而事实呢,大部分程序员,甚至连版本控制的核心理念都不知道,更别提与之相关的最佳实践,工程项目管理等等。

在这里,我不得不重申,版本控制的第一个理念,是保护程序员创造性的劳动成果,简单来说,便是:只要写下来的代码,就应该被妥善保管。无论这些代码是庞大的,细小的,功能完备的,还是有缺陷,不完整的,都应该避免丢失。大家在从事编码实践过程中,最害怕的应该是写好的代码丢了,而不是别的什么。别的问题,都有别的方法来解决。

时代发展到今天,软件工程项目,大都非常复杂,可能一个程序员,一整天,都没法完成一个功能。如果,因为代码无法运行,而不敢提交到版本库,那这段代码就面临丢失的风险。但是,不提交代码,肯定是不对的。

应该有一个地方,保管总是可以正确运转的代码,就是我们常说的“主线”(trunk)或者在 Git 里叫 master(现在 master 遭到了一部分人唾弃,叫 main 也是可能的);而与此同时,应该另有一个地方,保管开发到一半的代码,或试验性的代码。这就要用到“分支”(branch)这个功能。分支,其实是一个相对的概念,因为相对分支的“主干”其本质上也就是一个特殊的分支而已。

分支是一种很有效的工具,用来保存代码的所有变更。一般也都会提供“比较”和“合并”等功能,主要用于将一个开发完毕的分支,重新合并到主干。在我们使用SVN的时候,因为版本库在云端,所以,新建一个分支,就是发往云端的一个命令。程序员的本地环境,只是服务器的一个工作拷贝,如果,需要在某个分支工作的话,一般需要“切换(switch)”。

而在Git里面,分支的使用成本无限地降低了。因为 Git 的分布式设计,我们的所有版本库,都在本地有个完整的备份,所以,分支得创建就是一个本地动作,而且在 Git 里面使用文件的 hash 来唯一标记一个文件的,如果没有修改的文件,基本可以认为不会占用额外的存储空间。切换分支也变成了一个非常简单而且低成本的动作。

在 Git 里面是非常鼓励使用分支的。如果你有一些进行到一半的工作,你最好将其保存在一个分支里,你要决定的是,是否把这个分支“推送”到公共的版本库去,如果确实是一个 broken 的功能,无法正常运行,你完全可以不要推送到大家共同 share 的中央库去,保证了代码的私密性。

对于像整个团队或者整个社会开放的公共版本库,里面的每个分支是否可以正确运转,可能取决于这个项目的一些约定。但是这不会影响一个程序员在本地创建和使用分支。这就给分支的使用带来了极大的自由度,也关注了代码的安全。

甚至,在没有与其他人共享的时候,你可以随意修改你分支里的 commit,合并一些 commit,像文初我第一位导师那样担心自己的 commit 过多的极度洁癖也轻松可以解决。时代真的是不同了,而且进步了。

— 完 —

如何知道自己用的是Linux还是Unix?
答:执行uname -a命令。

如何知道自己用的是哪个Linux发行版?
答:执行lsb_release -d命令。

如何知道当前系统时间?
答:执行命令date。

什么是UTC,CST和EDT?
答:UTC(=Universal Time Coordinated),协调世界时(过去曾用格林威治平均时GMT来表示);EDT(=Eastern Daylight Time),美国东部夏令时间;CST(=Central Standard Time),美国中部地区标准时间,不过我个人认为还有一个意思(China Standard Time)就是中国标准时间,因为有时候,你会看到中国时间后面也会带个CST的。

如何修改系统时区?
答:各发行版不太一样,在最新的Ubuntu 11.04上,使用命令dpkg-reconfigure tzdata命令来修改时区,会弹出一个命令行下的字符图形界面,比较方便。在一般的Linux发行版上,可以尝试tzselect命令,可以通过命令行交互式地设置时区。

如何设定系统时间?
答:使用date –set=”Sun Aug 21 10:13:43 CST 2011” 命令来设置,引号中的字符串,可以先用date命令来输出,然后修改时间到正确值,再设回去。

不知道mysql的root密码,如何重设?
答:停止mysql服务器,重新启动,增加–skpi-grant-tables参数重启服务器,不需要密码就可以登陆服务器,登陆后,UPDATE user SET password=PASSWORD(‘new_password’) WHERE user=’root’;使用该sql语句修改密码,修改完后,不要忘记执行flush privileges,然后退出,正常重启mysql服务器。

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

阅读全文 »

我的博客是使用 Linode 搭建的,算算已经快有八年多历史了。从一开始,我就使用 Debian 发行版作为我的服务器版本。当时,最流行的服务器是 RedHat 和 Ubuntu,那时候我还没听说过 CentOS,哈哈,不想用盗版,又觉得 Debian 比较稳定,而且有无敌的 apt-get,就一直用 Debian 了。

阅读全文 »

2016 年 4 月 12 日,Let’s Encrypt 宣布,免费为广大网站提供 SSL 证书,从此,再也没有必要使用自签名证书了。本站也很早就用上了 Let’s Encrypt 提供的免费证书,那时候,还是使用的网友实现的 Python 脚本来进行的申请,后来,官方推出了官方客户端,也是 Python 实现的,我也懒得更换了。

这次,我突然遭遇了一次证书失效,(当然事后证明不是那么回事),怀疑到了非官方的证书申请客户端,并更换了官方推荐的形式,才发现,原来官方提供了这么好用的一个工具——certbot。所以,特此介绍给大家。

阅读全文 »

Electronic Frontier Foundation 简称 EFF,是一个具有领导地位的非盈利组织,致力于在数字世界捍卫公民自由。建立于 1990 年,EFF 通过影响诉讼,政策分析,基层行动以及技术研发,捍卫用户隐私,言论自由以及创新。该基金会的试图通过努力保障,在技术进步的前提下,人们的自由和权力也受到相应的保护。

阅读全文 »

我想,我使用 NetBeans 已经有很多年的历史了,但是比较遗憾的是,这些年来,也没有把 NetBeans 的功能用到极致。这点挺令人遗憾的,但是我还是坚持使用 NetBeans,主要我信奉一点,就是用什么 IDE 不重要,重要的是你能把它用到多高的效率。

阅读全文 »