2011/12/26

scanf 回傳值

剛學 C 時並沒有注意到 scanf 回傳值。

scanf 讀取成功時會傳回轉換完成的參數數量,如果失敗則會傳回 EOF。讀取資料直到 EOF 可以寫成:
while( scanf(" %s", intput) != EOF ){
   // Todo
}

2011/12/24

for 迴圈

以前用 for 迴圈跑字串,都要寫好常一串:
char s[5]="123";
int index = 0;
while( s[index] != '\0' ){
   // get s[index];
   index++;
}

無意間看到有人這樣寫:
char s[5]="123";
int index;
for(index=0; s[index]; index++){
   // get s[index];
}

原因是 \0 會被當作 false,換做其他資料型別的陣列就沒辦法這樣寫。

2011/12/23

PHP Closing Tags


一般寫 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
 
 

2011/12/08

Enable SSH in VMware ESXi

在 ESXi host 上按 F2 登入,選 Troubleshooting Options,將 local / remote Tech Support 啟動。

設定完畢後重新啟動 Management Agent。

2011/12/03

清理硬碟小方法

最近硬碟漲價,聽說是幾乎買不到,只能靠節省硬碟使用量來撐一段時間。

很久前有提到清除系統暫存檔的方法,但重複的檔案其實是最佔硬碟空間的。

我們時常把檔案複製到不同的目錄、更改檔案名稱,整理時卻又忘記改回來,或是懶得打開看內容就乾脆放在一起,硬碟中很可能有二份甚至更多份相同內容的檔案,找出並刪除這些檔案可以省下不少硬碟空間。

網路上有不少搜尋重複檔案的免費工具,我用的是 DuplicateCleaner,能指定搜尋目錄以及搜尋條件 (日期、大小、內容),搜尋後會將重複檔案已群組方式列出,並能透過選擇工具縮短整理的時間。


DuplicateCleaner 執行畫面



單比較檔案內容可能還是會有漏網之魚,例如照片檔案大小不同,但是打開來看到的畫面可能還是會相同。找出這些重複的影像檔能再多幫你省下不少硬碟空間。

網路上也有不少搜尋重複影像檔的工具,我只試了 VisiPics,感覺還不錯用。VisiPics 能設定搜尋目錄、辨識重複影像的門檻,也有快速選擇工具協助減少整理的時間。

VisiPics 執行畫面


天啊 .... 我好宅 XD