Feeds:
文章
迴響

Archive for 2010 年 01 月

Windows 編寫 Go 語言初體驗

Go 語言官方沒有資源可以移植到 Windows 作業系統,於是在 Google Code 上有個 go-windows 的開源專案將他移植到 Windows 平台。我利用這個專案來體驗一下 Go 語言。我的環境是 Vista + Go for Windows(go-1.zip)。

安裝相當的簡單,下載 go-1.zip 並解壓縮(我是放在 d:go)。設定如下環境變數

set GOROOT=d:go
set GOOS=mingw
set GOARCH=386
set GOBIN=d:gobin
set PATH=%PATH%;d:gobin

編寫 hello world (hello.go),使用 UTF-8 編碼儲存

package main
import "fmt"

func main() { 
    fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界n");
}

編譯程式產生 hello.8

8g.exe hello.go

連結程式產生 hello.exe

8l.exe -o hello.exe hello.8 

執行如下命令查看結果

hello.exe > result.txt
notepad.exe result.txt

image

另一個版本的 Hello World 改用 os package

package main

import "os"

func main() {
    os.Stdout.WriteString("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界n")
}

執行結果一樣

Read Full Post »

使用一陣子之後的 Google Sites 的系統資源使用狀況

image

可是,如果我把他 Kill 再重新載入則是

image

這會不會差太多了,Google 是 Cache 太多資源沒有釋放來換取效能嗎?

Read Full Post »

測試很多套 HTML 轉 PDF 的服務,效果都不盡理想,今天測了 Web2PDF 後,整個網站排版都沒有亂掉效果真的挺好。參考我的測試結果

從編碼排版正確和不能這幾點看來,他似乎採取抓圖並轉成 PDF 的作法。

Read Full Post »

電腦一堆 RAR 可是忘了對應的密碼,要怎麼辦?原本想利用 WinRar 內建的 Unrar.exe 利用命令列方式逐一確認密碼,可是當密碼錯誤時會要求使用者輸入,這樣很難進行批次處理。再者他沒有明確的回傳值可供辨認密碼是否驗證成功,就算密碼正確也會把所有的檔案解出來不是很方便,所以我放棄了這條路。

上網找了一套 Advanced RAR Password Recovery 可用字典檔破解密碼,效果不錯可惜不支援分割檔的 RAR。

於是又找了 Python 模組是否有支援 UnRAR,找到了兩套分別是

ChilkaZip For Python 付費,且不確定是否支援密碼暫時不考慮。所以我選擇了 pyUnRAR,他的作法是透過 ctypes 呼叫原生的 UnRar.dll 來進行解壓縮,不過他的程式在我的 Python 2.6.2 有錯誤,且不支援檢測密碼是否正確的功能,所以,我決定改寫一個支援批次確認密碼的 python 模組,完整程式碼可在這裡找到。

我的實做部份主要在 Archive::check 摘錄如下:

def check(self):
        headerData = RARHeaderDataEx()
        if not 0 == RARReadHeaderEx(self._handle, ctypes.byref(headerData)):
            return False
        
        rarFile = RARFile(self, headerData)
        fn = str(random.random()).replace('.', '_')
        rarFile.extract(fn)
        
        if not os.path.exists(fn):
            return False
        
        os.remove(fn)
                
        return True

我採用兩段式檢查,第一段檢查是針對檔名被加密的 RAR,如果被加密而密碼又錯誤,則回傳值不等於 0。所謂的檔名加密,就是開啟 RAR 時不會看到壓縮檔內部的檔案列表,在 WinRAR 中的設定是如下:

image

可是如果沒有設定檔名加密,第一段檢查還是會通過可看到檔案列表,但是無法解出內容。所以第二段檢查是嘗試解壓縮一個檔案並檢查檔案是否存在來判斷密碼是否正確。這就是目前我的檢測密碼方式。不過這個作法的缺點是如果嘗試解壓縮的檔案比較大時,會耗損比較多的時間和運算,希望能有較好得作法可以改善這部份。

至於字典檔批次破解就更簡單了,只要一個迴圈逐一呼叫 Archive::check 進行檢測即可,片段摘錄如下:

def dic_check(dic_fn, rar_fn):
    valid_pwd = None
    for f in file(dic_fn):
        pwd =  f.rstrip() 
        r=Archive(rar_fn, pwd)
        try:
            if r.check():
                valid_pwd = pwd
                break
        finally:
            r = None
            
    if valid_pwd is None:
        print 'not found'
    else:
        print 'password=' + valid_pwd

 

以下是執行結果如下:

image

有了這個程式我就不需要其他字典檔破解程式了 XDDD

Read Full Post »