每一个可以努力的日子,都是一份厚礼。
PHP
在 Yii2 项目中使用 Composer 添加 FontAwesome 字体资源
2014 6 月 21st
前天帮同事改个十年前的网站 bug,页面上一堆 include require 不禁让人抱头痛哭。看到 V2EX 上的讨论说,写 PHP 不用框架等同于耍流氓。Yii Framework 是我使用了 2 年多的 PHP 框架,器大活好,皮实耐操。 Yii2 还在 Beta 中,不过不影响拿来预研。
这回要说的是,如何给 Yii2 项目添加外部资源(external assets),以 FontAwesome 为例子。
基于 RESTful 接口的前端 MVC 架构
2013 6 月 7th
该用 Abstract Class 还是 Interface?
2013 3 月 30th
在编写程序的时候我常常陷入纠结,一个抽象对象,到底应该定义成 抽象类(Abstract Class) 还是 接口(Interface) 呢?二者具有很大的相似性,甚至可以相互替换,难以选择。在 Stackoverflow 上这个问题被问了很多次,各种编程语言的都有。而在 PHP 官网文档 Abstract Class 和 Interface 章节下面的评论里,人们也是争论不休。为了弄明白这个问题,必须仔细对比一下二者的区别和使用场景。
更多 >
测试驱动开发
2012 12 月 9th
测试 是软件开发中一个必不可少的环节。不管我们是否有意识到,其实我们经常都在做测试工作。比如最原始的在代码中插入 echo $variable 查看变量值,简单粗暴而有效。当然,PHP 也会有 XDebug 这样的工具,可以做到单步调试,不过要在服务器上安装再配合好本地一个 IDE 和浏览器一起运作,始终不是那么方便。
我们实现了一些复杂逻辑后,总会要输入一些数据,来确认程序是否能给出预期的结果,页面是否正常展示。更高级的开发者会写一些代码来自动完成这个测试过程,这样一来每当我们需要测试一些东西的时候,只需要调用测试脚本,就能直接获知结果了。这就是所谓的 自动测试。
软件测试已经发展为一个独立的工种,黑盒、白盒、单元测试、功能测试……流程都比较规范化了。随着软件开发过程的不断演变,各种方法论层出不穷,类似的名词包括:敏捷开发、持续集成、XP极限编程、结对编程、TDD……一般谈这些概念的时候都会被大牛黑出翔来,比如酷壳博主 @左耳朵耗子 发表过这样一条微博:
不会写程序的人来搞什么软件开发咨询,SQA,流程设计,软件项目管理,全是扯蛋。所以,程序员应该要像 Linus 一样自信的对这些人说:“Talk is cheap, show me the code.”
习总书记教育我们:
空谈误国。
我想聊一下 TDD。我必须声明我并非想借技术名词炒作概念。自从上次一篇 关于MVC的讨论 被新浪 SAE 的微博大号转发后,引来口水无数,各种被喷。其实我也只是初学者,谈谈自己对编程的理解,希望能尝试一下不同的实践方式而已,最终想法和所有开发者一样,都是要提高代码质量和生产效率。
转换 HTML 与 PDF 格式文档的神器
2012 10 月 31st
企业 Web 项目开发中经常会有生产 PDF 格式文档的需求,例如 PDF 账单下载,月末生成各种统计报表等等。我们要帮助企业实现自动化,也就是说无需人工干预,程序能够按需从 DB 中拿数据自主生成。
项目使用 PHP 开发,于是调研了一下 PHP 的 PDF 类库,有 dompdf,TCPDF 之流,总的来说,各个项目主页上自夸的成分居多,基本思想都是类似的,即先用 HTML 写一个模板,每次往模板里填上数据,就可以转成 PDF 输出。但真正用起来就会发现各种毛病各种坑爹,部分 CSS 属性不支持啦,中文乱码啦,诸如此类。最终让我们抛弃 dompdf 的貌似是分页的一个大坑,据说一个表格 <table> 标签在跨页的情况下,dompdf 就直接崩溃了……
约定优于配置——软件开发的简约原则
2012 9 月 15th
工作快满 1 年了。在刚从 CUHK 毕业的时候,我还满怀悲壮地表示在中文大学饱受摧残,各种 assignments projects 所写的代码已经超过了整个在武大的四年。而现在,wc -l 显示的数字已经可以让我十分蛋定,这一年的代码量已经超过了过去所有学生时代的总和。回过头来看一年前写的代码,真是惨不忍睹,恨不得把当时的自己拉出去暴打一顿。确实走了很多弯路,但我也因此收获颇丰。
感触之一就是怎样编写漂亮整洁的代码。我曾经说过,我是个完美主义者,写博客的时候我要检查以防出现错别字,写代码的时候我会特别注意变量命名是否规范,甚至代码缩进是否对齐。这大概已经属于强迫症的治疗范围了。在现实项目开发中,整洁漂亮 意味着用最少的代码,实现完整的业务功能,同时代码是易于理解的。然而随着时间流逝代码不断被修改,系统设计的整体结构则逐渐衰弱。编码从严谨的工程堕落为随性地胡乱砍劈。不重构,软件就会慢慢腐烂。这一切是如何发生的呢?
阿里云 ACE 平台试用评测
2012 7 月 13th
阿里云 是阿里巴巴旗下的云计算公司,目前得到商业运行并大力推广的是阿里云的弹性计算 IaaS 服务,也就是和 Amazon EC2 类似的云端虚拟机。 ACE 云引擎 则是阿里云的 PaaS 类型云服务,与 GAE、SAE 类似,提供具体的语言平台给开发者。当前 ACE 仍处于测试期,它支持 PHP 和 Node.js,同时平台也实现了分布式 session、storage、memcache、cron等多种服务。
Zenoss 报警 API
2012 6 月 29th
使用 Nginx 的 X-Sendfile 机制提升 PHP 文件下载性能
2012 6 月 20th
很多时候用户需要从网站下载文件,如果文件是可以通过一个固定链接公开获取的,那么我们只需将文件存放到 webroot 下的目录里就好。但大多数情况下,我们需要做权限控制,例如下载 PDF 账单,又例如下载网盘里的档案。这时,我们通常借助于脚本代码来实现,而这无疑会增加服务器的负担。
curl_exec和wget执行太慢,IPv6惹的祸
2012 6 月 18th
今天在使用 php 的 curl 函数时,发现需要等待大概 5 秒才能得到结果,实在是太慢了。而同样一个 url 使用浏览器访问,则立刻可以获得页面。后来又发现,即使不用 php,使用 Linux 下的原生命令 wget 去获取网页,也很慢。这真是太奇怪了,看上去不是程序的原因,而是网络设置的问题了。


