2010-08-29

古蘭經 plugin

給 blogger.com 用的 plugin:
1. 選擇設計版面→新增小工具

2. 選 HTML/JavaScript

3. 填進這些值 (請從下面剪貼):


<style type="text/css">
#quran {width: 200px; border: 0px;}
</style>

<div id="quran">
<script src="http://220.133.42.47/quran.php" type="text/javascript" charset="UTF-8"></script>
</div>

4. 儲存,預覽:

5. 最後別忘了存檔哦!

2010-08-18

詞頻列表

昨天寫信給張裕宏老師請安,今天就被 assign 作業了 ... 要生出台灣和大陸的詞頻列表,各22000個詞咧! (撞牆)
趕快來筆記一下:
中研院語言所 現代漢語語料庫詞頻統計
《八十七年口語問卷詞頻資料庫》 ... 區分國小國中高中大學。DBF 格式 (dBase III) 配上倚天中文造字檔! 真懷念。決定不用。
教育部國語詞典簡編本 詞頻表

國語詞典簡編本的統計樣本不知道有哪些。最常用的前十個詞列出來給大家看看: 我們、「台灣」、可以、自己、他們、沒有、因為、可能、如果、問題。
台灣的詞頻排第二名!!! 這個樣本可能完全是報紙、特別是第一疊嚴肅新聞版的! (那「我們」為什麼會在報紙出現呢?)

中研院語言所的沒分單音節詞和多音節... 前十個是: 的、是、一、在、有、個、我、不、了、這。
前12個多音節詞是: 我們、自己、他們、因為、什麼、問題、所以、沒有、台灣、學生、公司、表示、如果 ..
中研院的語料確實以書面為主,所以口語最常用的「因為、所以、沒有、如果、可是、但是」沒排在最前面。
但是「台灣」排第九,還是很令人驚訝! 書面文章裡這麼常提到台灣嗎?

47m 個漢字的 SUBTLEX-CH:中文字頻/詞頻/標注詞頻(PoS)
基于网页的词频统计 基本上是不堪用的。
Lukhnos 提供的 Lancaster Corpus of Mandarin Chinese 詞頻
最重要的: 人民日報的一直找不到!!!

2010-07-23

編譯及執行 Edk2

很多地方都有教學了,只是記在這裡備忘:
1. 抓下 Edk2
2. 修改 edksetup.bat 加上 set CYGWIN_HOME=D:\cygwin
3. set EDK_TOOLS_PATH=D:\edk2\10578\BaseTools
4. edksetup.bat --nt32
5. build
6. build run

2010-04-30

PHC-WIN + WinBinder 的小技巧

最近因為需要在 Windows 下寫一點小工具,於是想起了久久沒用的 RoadSend PHP compiler 。
RoadSend 不錯用,不過最近的版本好像 GTK 支援壞掉了,而且要使用者裝 GTK library, 好像不太友善,於是轉而尋求其他方案...
WinBinder 是套 PHP 的 Win32 API Binder,很好用,速度蠻快的,寫起程式也很直觀,反正都在 Win32 下了,就別想什麼可攜性吧 (笑) ,用用 Win32 API 和 COM 快速解決問題就好。
除了 RoadSend 之外,我找到了 Bambalam Compiler 和 PHC-WIN。
bamcompile (Bambalam Compiler) 一般情況下很好用,對 WinBinder 的支援很好,產生出來的 EXE 檔不大,只支援 PHP4。實際使用時,發現它處理太大的資料時 (我要把一個幾千行的 excel 檔讀進來,排序,輸出) ,會直接當掉。
PHC-WIN 0.3.1 是可用的選擇,優點是支援 PHP5,處理很大的 excel 也很穩定,但缺點是需要把以下檔案連同 EXE 檔包成一塊...
php5ts.dll
php_bcompiler.dll
php_win32std.dll
php_winbinder.dll
php-embed.ini

一下子目錄就多了 5MB, 感覺蠻差的,但至少可以把事情做好...

有個小技巧可以節省空間:抓 Alec Gorge 包好的 DLL 檔,可以省到 3MB,檔案也只要4個:

myprogram.exe
php-embed.ini ← 記得要修改
php5ts.dll ← 這是 Alec Gorge 的
php_bcompiler.dll

記得 php-embed.ini 裡要把其他 DLL 檔拿掉,改成這樣:

[PHP]
extension_dir='./'
extension=php_bcompiler.dll

此外,由於 PHC-WIN 還在開發初期,有一些小技巧可以讓開發更順利... 我可是被它的小 bug 卡住整整一個工作天呢!

技巧1: 砍掉備份檔,只留 .php -- 如 vim 的 *.php~
技巧2: 砍掉 .phb 檔 -- 重編譯不一定會覆蓋! 砍掉比較保險
技巧3: 發佈前先 copy 到別台電腦測試 -- 少掉很多「明明在我這裡跑得動」的對話
技巧4: 移除 PHP 安裝 -- 不要再用 installer 了,免得載入哪一版 DLL 傻傻分不清。
技巧5: 主檔案叫 myprog.phpw 然後把 WinBinder 裝好,節省開發時間。記得用 c:\winbinder\binary\php4\php.exe myprog.phpw 來測試,不然很多錯誤訊息看不到...
技巧6: 和 bamcompile 一樣,但不知道為什麼 PHC-WIN 的手冊沒寫得很清楚。以下是 WinBinder + Excel Reader 的引入檔...

function exe_resource($file)
{
return defined('EMBEDED') ? 'res:///PHP/'.strtoupper(md5($file)) : (getcwd()."/$file");
}
include_once(exe_resource('./wb_windows.inc.php'));
include_once(exe_resource('./wb_generic.inc.php'));
include_once(exe_resource('./wb_resources.inc.php'));
include_once(exe_resource('./oleread.inc.php'));
include_once(exe_resource('./reader.php'));

祝大家開發順利啦!

2010-03-30

不可靠的 compiler

最近連續好幾個被 compiler 陷害的 bug ... 公司內有 MRC Code 用 Visual Studio 2003 的 VC++ compile 出來的東西,加一行減一行就看不到 bug 的問題; CPLD code 重新 compile 後 bug 就不見的問題,我自己做的玩具也被 8051 用的 SDCC 害到。公司的不便多說,先講講 SDCC 害人的情況。

主要是,程式寫好後用模擬器 (S51DEMO) 怎麼跑都OK,但一燒上 AT89S51 就不會動,hang 在 serial_init() 的位置。動用 /* 註解 */ 大法,終於找到問題出在一行 char str[] = {} 宣告:

__code unsigned char str[] = {
0x12, 0x33, 0xf0, 0x33, 0xf0, 0x12, // H
0x24, 0xf0, 0x24, // e
// ...
0x00 } ;

重點在 __code。如果不加的話,SDCC 會把它 compile 成 __DATA 很詭異地賦予初值,然後 AT89S51 就當在這了:

; kbd.c:168: unsigned char str[] = {
mov _main_str_1_1,#0x12
mov (_main_str_1_1 + 0x0001),#0x33
mov (_main_str_1_1 + 0x0002),#0xF0
mov (_main_str_1_1 + 0x0003),#0x33
mov (_main_str_1_1 + 0x0004),#0xF0
; ...
mov (_main_str_1_1 + 0x0024),#0x00
; 誰能告訴我為什麼 8051 執行過這邊就當掉 =.=

加了之後,就會是和其他字串常數一樣正常的 assembly code:

_main_str_1_1:
.db #0x12 ; 18
.db #0x33 ; 51
.db #0xF0 ; 240 ?
.db #0x33 ; 51
.db #0xF0 ; 240 ?
.db #0x12 ; 18
; ...
.db #0x00 ; 0