備註:CrBoy’s Blog:「那些老師沒教的事」簡報釋出
其中印象最深刻的應該是傻傻的用 printf 除錯,如果只是一般型態還好,遇到物件等之資料型態用 printf 真會把自己搞死。
另外把壓縮檔塞進版本庫裡面也很經典!SVN 或是 git 等版本管理工具其中一大功能就是比對 code 的異動,程式碼壓縮後這些工具就沒辦法做比對。誇張的是有人還會好心的把 *.o、*.exe 一起打包 commit …. XD
ps. 用 cmake 好像還蠻威的!
軟體開發和生活瑣事
備註:CrBoy’s Blog:「那些老師沒教的事」簡報釋出
其中印象最深刻的應該是傻傻的用 printf 除錯,如果只是一般型態還好,遇到物件等之資料型態用 printf 真會把自己搞死。
另外把壓縮檔塞進版本庫裡面也很經典!SVN 或是 git 等版本管理工具其中一大功能就是比對 code 的異動,程式碼壓縮後這些工具就沒辦法做比對。誇張的是有人還會好心的把 *.o、*.exe 一起打包 commit …. XD
ps. 用 cmake 好像還蠻威的!
一般處理 SQL 查詢時,遇到單引號或雙引號都會加上反斜線做跳脫。不過字串是餵給 SQLite 時,處理單引號的方式不同,是將一個單引號改為二個。
例如:
select * from content where text like '%Zero's note%'
上述字串「Zero’s note」中的單引號會造成查詢錯誤,所以將單引號修改後成為:
select * from content where text like '%Zero''s note%'
Reference:
How do I use a string literal that contains an embedded single-quote (‘) character?
以前用 for 迴圈跑字串,都要寫好常一串:
char s[5]="123";
int index = 0;
while( s[index] != ' ' ){
// get s[index];
index++;
}
無意間看到有人這樣寫:
char s[5]="123";
int index;
for(index=0; s[index]; index++){
// get s[index];
}
原因是 會被當作 false,換做其他資料型別的陣列就沒辦法這樣寫。
一般寫 PHP 會將系統設定、資料庫連結等功能分開放在多個不同的檔案中。
index.php:
<?php
require('settings.php');
// something else
session_start();
?>
settings.php:
<?php
// some settings
?>
以上程式執行以後會噴錯誤訊息:
session_start(): Cannot send session cache limiter - headers already sent
原因是在 index.php 呼叫 session_start() 之前已經輸出資料,不過到底是哪裡有輸出資料?仔細看才會發現 settings.php 在「?>」後方還換了一行,換行是在 PHP closing tag 之外,所以就被當作一般資料送出。
當程式很龐大時,這種 bug 實在會讓人摔鍵盤、丟滑鼠、凹螢幕。
事實上 PHP 程式不加上結尾的「?>」也是可以執行的,直譯器到檔案結尾會自動當作該程式段落結束,所以程式可以改寫成這樣:
index.php
<?php
require('settings.php');
// something else
session_start();
settings.php
<?php
// some settings

Flickr 網站提供使用者存放自己的照片,但免費帳號僅能檢視最新的 200 張照片。
FlickrLinker 工具可以讀取網頁內容並將照片的獨立網址紀錄下來,當照片超過 200 張以後,可以透過留下來的連結連到照片的獨立頁面,以後變不需擔心找不到舊照片的網頁連結。
打開 FlickrLinker 後輸入使用者 Photo Stream 網址,如「http://www.flickr.com/photos/johnroyer/」,程式便會自動讀取網頁內容並將照片獨立頁面網址顯示於文字方塊中。
另外程式會自動判斷是否有「下一頁」,有的話會自動翻頁直到所有照片連結讀取完畢,若付費帳號顯示頁數過多,程式會不中斷直到頁面讀取完畢,執行中仍然可以複製網頁連結,跳出請點選試穿關閉按鈕。
下載:請至程式下載頁面