每一個可以努力的日子,都是一份厚禮。
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 去獲取網頁,也很慢。這真是太奇怪了,看上去不是程序的原因,而是網絡設置的問題了。