OpenResty学习笔记:使用 Lapis 框架开发 Web 应用
不知道从哪一届开始,老罗开锤子手机发布会的时候,会当场捐赠一款开源软件,第一次是捐赠给 OpenSSL,第二次是 OpenResty。那次发布会开完,OpenResty 在程序员圈子里火了一把,成为一种热门技术了。其实,OpenResty 在后端程序员世界里,早就享有盛名。当你不得不去面对高并发的场景的时候,你一定会发现 Nginx 的巧妙和强大,然后你会想到用 Nginx 解决问题,然后你一定会发现 OpenResty。
不知道从哪一届开始,老罗开锤子手机发布会的时候,会当场捐赠一款开源软件,第一次是捐赠给 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,也是没有完善的备份的,真是冷汗直冒啊,主要考虑到这是我的个人博客,但是想想已经坚持了快十年了,如果真的丢了的话,还是非常痛心的。
2016 年 4 月 12 日,Let’s Encrypt 宣布,免费为广大网站提供 SSL 证书,从此,再也没有必要使用自签名证书了。本站也很早就用上了 Let’s Encrypt 提供的免费证书,那时候,还是使用的网友实现的 Python 脚本来进行的申请,后来,官方推出了官方客户端,也是 Python 实现的,我也懒得更换了。
这次,我突然遭遇了一次证书失效,(当然事后证明不是那么回事),怀疑到了非官方的证书申请客户端,并更换了官方推荐的形式,才发现,原来官方提供了这么好用的一个工具——certbot。所以,特此介绍给大家。
Electronic Frontier Foundation 简称 EFF,是一个具有领导地位的非盈利组织,致力于在数字世界捍卫公民自由。建立于 1990 年,EFF 通过影响诉讼,政策分析,基层行动以及技术研发,捍卫用户隐私,言论自由以及创新。该基金会的试图通过努力保障,在技术进步的前提下,人们的自由和权力也受到相应的保护。
在 Mac 系统下开发 PHP 的话,使用 MAMP Pro 来搭建环境是一个不错的选择,主要还是因为方便,一口气就可以拥有 PHP + MySQL + Nginx + Apache + PostgreSQL + Memcached + Ruby + Python + Perl,可以说 Web 开发的全部组件基本都涉及到了。
我想,我使用 NetBeans 已经有很多年的历史了,但是比较遗憾的是,这些年来,也没有把 NetBeans 的功能用到极致。这点挺令人遗憾的,但是我还是坚持使用 NetBeans,主要我信奉一点,就是用什么 IDE 不重要,重要的是你能把它用到多高的效率。