2010年9月29日 星期三

Dropbox 簡介

========〔Dropbox 簡介〕========
檔案同步 File Sync


========〔Dropbox client 簡介〕========
在你的電腦安裝 Dropbox client 之後,電腦會新增加一個檔案夾叫做 My Dropbox,以下是範例:
Windows7 - C:\Users\Ben Liu\Documents\My Dropbox
Windows XP - C:\Documents and Settings\Ben_Liu\My Documents\My Dropbox

以後你放在這邊的檔案,只要有新增或修改,都會被傳送到 Dropbox 給你的免費空間,
並且,發出通知給你所有電腦上的 Dropbox client
然後你每台電腦的 Dropbox client 都會連到你的 Dropbox 並下載檔案存到電腦上的硬碟

使用上會覺得,Dropbox client 在電腦上新增的這個檔案夾,很像是網路上的共享硬碟,
多台電腦可以共用檔案,Dropbox client 還會幫忙更新檔案內容
當然因為網路速度是有限的,所以更新檔案會需要一點時間

附註:在公司網路內,因為某些原因,導致 Dropbox client 沒辦法進行檔案同步,解決方法是自行連上 Dropbox Website 下載檔案

========〔Dropbox 應用:虛擬磁碟機〕========
Dropbox client 幫電腦新增加的檔案夾 My Dropbox,每次想要找出這個檔案夾,都會需要一點時間
這裡提供一個比較快的方式

我們可以把虛擬磁碟機 X 來代表檔案夾 My Dropbox:

X:\: => C:\Users\Ben Liu\Documents\My Dropbox

以後要找這個檔案夾,只要直接轉到磁碟機 X 就可以了,這樣是不是直覺多了?
這個代換的方法,寫在 Install.bat, 裡面會引用 psubst.bat 把磁碟機指到檔案夾,並且在開機後還可以保留這個設定

附註:虛擬磁碟機跟工作帳號有關
在你這個工作帳號的虛擬磁碟機,跟別人的虛擬磁碟機,雖然都叫做 X 槽,但是並不代表同一個磁碟機。
虛擬磁碟機之於工作帳號,有如辦公桌下面的移動式抽屜
每個帳號(辦公桌)下面都可以擺幾個虛擬磁碟機(移動式抽屜)

像是在 Windows7 登入帳號可能是 Ben 但是由於程式可以用 Administrator 身份執行工作,
所以特別用 Administrator 身份執行的應用程式,跟其他應用程式看得到的虛擬磁碟機,會不一樣
所以呢,如果你有需要用 Administrator 或者其他身份使用電腦,請記得也要用這個身份,再執行一次 Install.bat

2010年4月23日 星期五

這段老程式碼實在太 GY 了我忍不住要再來抱怨一次。
明明口頭上答應的介面宣告是:

foo( char * sz );

看 到 char *sz 就知道這會是一句 character array,用 「一個」'\0' 結尾
但是實際上身體的作法卻是把 sz 當作 array of character arrays -

foo( wchar_t * sz)
{
    while (*sz)
    {
        process(*sz);
        sz += wstrlen(sz) + 1;
    }
}
 


也就是說,在實做上先假設 sz 用「兩個」'\0' 結尾。這個前提造成了一個陷阱:如果 caller 傳進去的是 wstring.c_str() -

foo( wstr.c_str() ) ;

Programmer 以為一定妥當的作法,其實並不然,因為 wstring.c_str() 的結尾是「一個」'\0' ,至於結尾後面的,並不保證一定是 '\0' ,萬一不是,這個迴圈就會繼續跑,取出一些垃圾放進process ,然後一直執行到出事為止。

後記:foo 的合約應該要改成 wchar_t sz[][] 比較貼切,想想 wmain 的宣告也是這樣:

wmain( int argc, char argv[][] );

2010年4月22日 星期四

Howto: Search multiple keywords from a log file

@set WORK_DIR=%~dp0
@set GREP=D:\Tools\grep.exe
@set INPUT=%WORK_DIR%\ofcdebug.log
@set OUTPUT=%WORK_DIR%\ofcdebug_ex.log
@set KEYWORDS=%WORK_DIR%\keywords.txt
@set EXCLUDE=%WORK_DIR%\exclude.txt

%GREP% -f %KEYWORDS% -i %INPUT% | %GREP% -v -f %EXCLUDE% > %OUTPUT%