原本我都是把 TrueType 字型裝到系統目錄裡面使用。最近 Linux 桌面環境比較熟悉了以後,開始愛往家目錄裡面裝東西;我感覺這才是正確的使用習慣,以前都被 Windows 慣壞了。

Debian 下的 teTeX 2 會尋找 ~/texmf 裡面的內容,所以只要把相關的檔案塞到該目錄內的正確位置即可。以我慣用的 cjk-latex 環境來說,TrueType 字型要放 ~/texmf/fonts/truetype 下;dvipdfmxcid-x.map 要放在 ~/texmf/dvipdfm/cid-x.mapttfont.map 則放在 ~/texmf/ttf2pk/ttfont.map

順便筆記一下,新裝字型採用 unicode 的 ttfont.map 應該加上如下的內容:

hwml@Unicode@ wt001.ttf Fontindex=0
hwmm@Unicode@ wt002.ttf Fontindex=0
hwmms@Unicode@ wt002.ttf Slant=0.167 Fontindex=0
hwmb@Unicode@ wt003.ttf Fontindex=0
hwmh@Unicode@ wt004.ttf Fontindex=0
hwmbk@Unicode@ wt005.ttf Fontindex=0
hwmbks@Unicode@ wt005.ttf Slant=0.167 Fontindex=0

cid-x.map 則如下:

hwml@Unicode@ Identity-H wt001.ttf
hwmm@Unicode@ Identity-H :0:wt002.ttf
hwmms@Unicode@ Identity-H wt002.ttf -s 0.167
hwmb@Unicode@ Identity-H wt003.ttf
hwmh@Unicode@ Identity-H wt004.ttf
hwmbk@Unicode@ Identity-H wt005.ttf
hwmbks@Unicode@ Identity-H wt005.ttf -s 0.167
» continue reading
Posted by yungyuc at 21:29, 0 comment, 0 trackback.

像這樣的程式:

$ cat test/helloworld.py
from mpi4py import MPI

message = "Hello, World!! I am process %d of %d on %s."

print  message % (MPI.rank,
                  MPI.size,
                  MPI.Get_processor_name())

會得到這樣的結果:

$ mpirun -np 2 ~/opt/python-2.4-parallel/bin/bwpython \
 test/helloworld.py
Hello, World!! I am process 0 of 2 on apr.chen.local.
Hello, World!! I am process 1 of 2 on apr.chen.local.

是阿根廷 CIMEC 的研究人員所貢獻的成果。mpi4py 採用了 OOMPI 裡部分的類別結構,相容於 MPI 規格,可以和 LAMMPI 與 MPICH 配合使用。比起 Scientific Python,mpi4py 功能完整得多,更適合為運算程式進行 scripting。

Posted by yungyuc at 22:18, 2 comments, 0 trackback.

Debian testing Gnome 2.10 的 Run Application 會間歇性殺死 Gnome 的問題還是沒有解決。不想花太多時間在這個問題上面了,決定另建一個 vserver 來用。

在尋求解決問題的時候經高人指點,稍微明白了 gdb 的使用。對於執行中的程式,可以用 gdb -p <pid> 連上行程去進行除錯。然而學習的時間實在很短,我除了 sbt 之外完全按不出別的指令,要馬上用它來對 GTK+ 程式進行除錯,找出問題似乎是很不可能的。

這個壞掉的組態暫時還可以放在硬碟裡,讓我同時用現在新建的 vserver 工作。vserver 真可視為優良的桌面工具。

Posted by yungyuc at 12:53, 0 comment, 0 trackback.

趁 IBC Product Recovery 的空檔來 song 一下。

其實一點也不爽。家裡的某台電腦不乖,在處理某個網站 (重要系統) 的 flash 時無法正常存取資料;Windows Update、重安裝 Flash plugin 都作了,IE 能調的也都調過 (該網站只能使用 IE),全都沒效。

電腦這種東西真的會看人的心情,才要弄那台 ThinkPad,這台伺服器又給我出狀況;總之它們就是不想讓使用者正常操作系統就對了。弄了一個半小時,才算把我的 Debian/Gnome 環境給弄好,把 ThinkPad 的資料丟過來這台的 RAID。等 recovery 完畢才能再丟回去。

這就是我讓連休 3+1 之後得到的優勢!我一定要能看 Flash,四天沒問題吧!

Posted by yungyuc at 10:28, 0 comment, 0 trackback.

最近每個晚上都很累;昨天在搞 Plone 和 Windows XP 間的 WebDAV 連線。

我的「很舊很舊版 IE (Product ID: 55274-642-7115725-23781)」一直可以正常地對 Plone 2.0.5 WebDAV 分享進行連線,http/https 都很健康正常;這個版本的 IE 在紀錄檔裡給出的 PROPFIND 項目會有 Microsoft Data Access Internet Publishing Provider DAV 1.1 字樣。

不過,在用「相當新版 IE (Product ID: 55274-649-6031783-23470)」進行連線的時候,web folder 所取回的 folder listing 會顯示 Zope object 的 title 而非 id;此版 IE 是 Microsoft Data Access Internet Publishing Provider DAV 1.1。這實在傷腦筋,因為 title 多半會寫入 non-ascii 字元,傳回 Windows 之後全都變成了亂碼;而且 title 不像 id 固定。如此一來,Windows 下幾乎不可使用 IE 來進行 WebDAV 連線。

我另外作了三個失敗的嚐試,這是昨天很累的原因。第一是使用免費的 netdriveplone.org how-to 裡的連結已經死了,如果以上提供的連結也死亡的話,請 google。或者也不用那麼麻煩,因為在我的主從環境裡,netdrive 只能下傳不能上傳;若打錯密碼的話,netdrive process 還會鎖死不能動。很不好用,放棄為宜。

第二次試用 BitKinex 這個多功能客戶端程式。程式介面看來不錯,原則上可用;然而它是 shareware,所以要付錢,另外不時也會出現傳輸鎖死的狀況。它不值得 US$39。

第三次試用 WebDrive。從介面來看,它根本就是 netdrive 的衍生強化版。WebDrive 和 netdrive 的功能相同,會把 WebDAV 對應成本地的網路磁碟機,使用起來非常方便。實測的結果也是三個軟體裡最穩定的。包含一年更新的授權費用是 US$49.95,還是太貴,仍被我排除在解決方案之外。

付費的解決方案大概要便宜到 US$10 且終身更新才能被我考慮,大概是沒機會找到這樣的產品了。最後我回頭找之前評估過的 Plone Desktop,現在叫作 Enfold Desktop (由 Enfold Systems 提供;這是一家提供 Plone 解決方案的公司)。結果呢,這個免費的軟體是最好用的。

在伺服器端,Enfold Desktop 是一組 Plone product 的集合,安裝僅需按照一般的程序即可:解包、重啟 Plone、進入組態頁面、完成。客戶端更簡單,執行客戶端程式的 installer,不需要重新開機,桌面上就會多出一個 "Enfold Desktop" 可以用了。在 "Enfold Desktop" 裡可以使用滑鼠右鍵選單建立新的 session;session 連線之後即可執行各種檔案操作。

Enfold Desktop 除了可以透過一致的 Windows Explorer 介面執行檔案操作之外,還支援 Plone 工作流程,故能直接在 Windows Explorer 式的環境裡面修改 Plone 內 Zope 物件的狀態。Enfold Desktop 畢竟是與 Plone 整合的工具,功能性比起其它的 WebDAV 解決方案更為優秀。

終於找到可用而且好用的解決方案,感謝上帝。我今天可以準時睡覺了。

Posted by yungyuc at 21:51, 0 comment, 0 trackback.

我真的開始擔心了,軟體更新地這麼快,而我還在用 Plone 2.0.5...

Zope 3.1.0final released從 changelog 裡可知又增加了許多新功能。ZopeX3 framework 設計地非常清楚,利用 ZCML (XML-variant) 來和 Python 程式碼,套件的可維護性應該非常高。再加上 ZopeX3 豐富的線上文件 (整合在 application server 裡),不管是學習或者開發,都比 Zope2 輕鬆很多。

Posted by yungyuc at 17:49, 1 comments, 0 trackback.

如我一般愛逛 7-11/HiLife/FamilyMart/OK 等便利商店的人最近一定注意到 7-11 進了一批很便宜的滑鼠,無線、光學,就是這一隻,下為圖例:

http://static.flickr.com/27/48263993_2b9e11e6f8_o.jpg

7-11 的彩盒包裝後面寫的是 SANYO WIRELESS & OPTICAL iMouse。看起來很不錯,而且只賣 390 元,那麼貪小便宜的我還會等嗎?前天就買了一隻回家。

回到家迫不及待地拆包、安裝,把 transceiver 插到 USB hub 上,滑鼠的電池裝好 (最棒的是,等包裝內附的電池用完以後,我還可以用以前買了卻一直放著的 SANYO AAA 充電電池) (還有什麼比這個更棒的?我愛消耗多餘料件)。

惡夢呀,結果竟然不動。嚴格來講不是完全不會動,而是我想讓它動的時候不動,不想讓它動的時候游標一直動。最後得到一個結論:transceiver 壞了。因為 Windows 和 Linux 都偵測不到 USB 活動。

經銷商是廣穎。他們還蠻爽快地,聽到我說滑鼠不乖,倒很樂意讓我換貨;條件是我今天得去他們在世貿三館的展覽攤位。因為今天的○○3C○○展要收門票,廣穎願意讓我用他們的廠商證進入展場應該算是蠻大方的,我倒有點賺到的感覺 (雖然這個○○○○展實在很像是電器產品夜市擴大版;當然我之前是完全不知其存在的)。

很愉快地換了滑鼠回來,惡夢繼續,這次看來是滑鼠本體壞了。真好,如果我原來的那一組沒還給他們,我就可以有一組好的和一組壞的了 (為什麼不當場和他們測呢?我本來想的,不過廣穎的攤位沒看到電腦可以測)。真是無力。

晚上回家,無論如何要處理這件事,回到原購的 7-11,把整個經過和店員講清楚。因為剛好是賣我這件東西的同一位店員,所以也很爽快地換了一個新包裝的給我。說也奇怪,在換第一次的時候想說不會那麼衰,結果又拿到壞的,但換第二次的時候想著「應該又是壞的吧」,反而沒有問題。現在我可以用這隻磨人鼠了。

畢竟是 390 的滑鼠,雖然經銷商和零售商的服務態度都很好,但東西本身似乎是沒有那個品質。包裝上寫著 800 dpi,但在我的 etch 上動起來卻卡卡的,常常一次會動兩個 pixel,反應沒有 Microsoft 399 光學鼠靈敏,滾輪中鍵也比較硬。不過看在它便宜的份上,我還是會用下去,只是原先的滑鼠也不能拆掉,誰曉得哪一天我會需要一次只移一個 pixel 呢。

Posted by yungyuc at 21:57, 0 comment, 0 trackback.

As long as docutils support MathML, blogging equation would be much much more easier.

Posted by yungyuc at 08:35, 0 comment, 0 trackback.

之前提到 py2exe 可以建立單一的 exe image,今天馬上來測試了一下,果然很好用。順便還從 sample 裡學到把 image building action 嵌到原指令稿裡的小技巧:

def main():
    """
    Script invokation logic.
    """
    if len(sys.argv) > 1 and sys.argv[1] == "py2exe":
        setup_py2exe()
        sys.exit()

def setup_py2exe():
    from distutils.core import setup
    import py2exe

    setup(
           name         = "programname",
           description  = "Program Description",
           author       = "Yung-Yu Chen",
           author_email = "you@guess",
           console = [ __file__ ],
           version = __version__,
           options = { "py2exe": {"compressed"  : 1,
                                  "optimize"    : 2,
                                  "ascii"       : 1,
                                  "bundle_files": 1  } },
           zipfile = None
         )

if __name__ == '__name__':
    main()

不過 500 行指令稿作出來的一個 win32 exe image,只用到了一些 Numeric 函式和少數的標準模組,就包出了 2.x MB ("compressed":1 !!),每次都要載入好久 :)

為了一段解譯對應檔的程式,還想了這樣子的碼:

iwant = [ origstring ]
for splitter in [ ':', '=', ',', ';', None ]:
    newstrings = []
    for substring in iwant:
        newstrings.extend( substring.split(splitter) )
    iwant = newstrings

需要 6 行,或許有 60 分了吧;感覺上應該還有更短的寫法,把後四行代換成一行 (in Python 2.3)。re 說不定可以用一行解決 (倒是還沒時間去想)。

Fun.

Posted by yungyuc at 19:44, 0 comment, 0 trackback.

Python/Zope@Japan 的人好幸福的樣子,怎麼覺得他們常常出去玩呀 (happy)。

» continue reading
Posted by yungyuc at 18:11, 1 comments, 0 trackback.
Change to page (10 entries in each page): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
© hover year to navigate month: powered by django