X-Server 1.5.0 very sluggish

最近升到 xorg 1.5.0,某些操作 (terminal 快速更新) 會使 xserver 佔用非常多 cpu,看來是這個問題

Working on it … right now it looks like:

  • XShm pixmaps got accidentally reenabled in the course of Adam’s changes
  • Someone (maybe GTK, having tracked it down yet) is taking advantage of that by creating a shared pixmap and using it as the source for a composite operation.
  • That is not handled well in EXA and triggers migration of the destination back to system memory. (*)

– Owen

(*) One of the many cases where we’d be better off creating temporaries
in video memory to avoid migration.

測測..

Emesene & SQL Optimization

最近都是用 emesene 上 MSN,不過他的啟動速度實在是非常慢,啟動的時候硬碟燈狂閃,判斷應該是在讀取聯絡人的資料快取。先用 python profiler 跑過一次,結果果然是 Logger.py 裡面從 sqlite 撈資料的函式在慢。

大小約 17MB 的 db,每個 query 竟然都要一秒以上,難怪 emesene 啟動要這麼久了。就來幫 emesene 最佳化一下 sql 吧。

以底下這個 query 為例:

select e.stamp,
       ue.data
from event e,
      user_event ue,
      user u
where e.id      = ue.id_event and
      u.id      = ue.id_user and
      e.name    = "status-changed" and
      u.account = "%s"
order by e.stamp desc
limit 1

結果是

1221129396.22343|NLN
CPU Time: user 1.173822 sys 0.023997

用 explain query plan 看看

0|1|TABLE user_event AS ue
1|0|TABLE event AS e USING PRIMARY KEY
2|2|TABLE user AS u USING PRIMARY KEY

應該是先把 user_event 與 event, user 三個 table join 在一起,最後再檢查 e.name 與 u.account。

來看看三個 table 的大小

  • user_event: 180801 row
  • event: 192968 row
  • user: 196 row

這樣 join 起來是多大的 table 呀

先試試改寫 from clause 裡的順序

select e.stamp, ue.data 
from user u, event e, user_event ue
where e.id      = ue.id_event and
    u.id      = ue.id_user and
    e.name    = "status-changed" and
    u.account = "%s"
order by e.stamp desc
limit 1

結果是

    1221129396.22343|NLN
    CPU Time: user 0.485926 sys 0.008998

很好,時間少了一半,explain query plan 顯示

    0|2|TABLE user_event AS ue
    1|0|TABLE user AS u USING PRIMARY KEY
    2  |1|TABLE event AS e USING PRIMARY KEY

如果幫 user_event 建個 index 呢?

create index ueiduser on user_event(id_user);

再 query 一次

1221129396.22343|NLN
CPU Time: user 0.017997 sys 0.004999

快了非常多吧!explain query plan 顯示:

0|0|TABLE user AS u
1|1|TABLE user_event AS ue WITH INDEX ueiduser
2|2|TABLE event AS e USING PRIMARY KEY

這是因為 sqlite 會以 from clause 的第一個當作 outer loop,所以我把數量最小的 user 移到前面,再適當的建立 index,使得 query 的速度快了 100 倍…

參考

Patch 在此

Emesene svn trunk 已經收錄最新 patch 🙂

ConTeXt 學習筆記, Using MkIV

以下是在 CTeX 論壇看到的對 ConTeXt 的評論,我覺得描述的十分貼切

我的理解,ConTeXt 秉承 Plain TeX 的思路和语法,是用于专门的“排版”的软件;而 LaTeX 则比较复杂,其结构化有时往往是加了许多限制,用于“写文档”的软件。
也就是说,期刊理应用 LaTeX 而不是 ConTeXt,因为前者的标准、结构性特征。而如果是排版书籍或个人化的东西,或许 ConTeXt 更适合。
CTeX — milksea

一年前(時間過的好快!)稍稍研究了 ConTeXt 與 LuaTeX 的搭配,如今 ConTeXt MkIV 已經比當時更加的成熟,要使用多國語言簡單得多了。Li Yanrui 整理了一份 ConTeXt 的學習筆記,裡面包括了 TeX 與 ConTeXt 的簡介、ConTeXt MkIV 的安裝、ConTeXt 的文檔架構與基本命令,想要一窺究竟 ConTeXt 是在做甚麼,可以參考看看。

以下檔案是使用 2008/9/10 的 ConTeXt Minimals 加上一點小修改後編譯,使用的字型是 cwTeX 明體、cwTeX 粗黑體、cwTeX 楷書。

若要嘗試編譯此檔案者需注意

  1. ConTeXt 需修改以符合台灣地區標點符號擺放特性,詳細的 patch 整理之後會提交上去。
  2. LuaTeX 目前還是 beta,編譯時可能會遇到各種困難,尤其是容易發生記憶體不足的情況,建議記憶體有 1G 以上才可嘗試。

原始文件為 Li Yanrui 整理,我只是轉譯為繁體版本。原始版本可以在 http://code.google.com/p/ctxnotes/ 取得。

PS.

不知為什麼這個版本編出來的 pdf 檔案大小特大… 足足有 3 MiB 多

兩個 LaTeX 文件翻譯

不是我翻的 🙂

lshort

lshort 是名為 short 的一篇不太簡短的 LaTeX 介紹,原本是英文的內容由 CTeX 論壇的朋友翻譯成中文,內容包含了 LaTeX 文檔的基本結構、數學模式、各式符號、環境、註腳的插入、圖形的插入以及如何自行定義 LaTeX 命令都有提到。

lnotes

lnotes 是 Alpha Huang 寫的 LaTeX 筆記,紀錄了作者學習 LaTeX 時的心得以及常用資料,內容涵蓋了 LaTeX 的介紹、文檔的基本結構、數學模式、一般圖形的引用、利用 METAPOST, PSTricks, PGF 直接繪圖、表格以及超連結、加入參考文獻等,算是對 LaTeX 的一般應用做了很全面的介紹。還有一章專門講解字體的使用,雖然目前 XeLaTeX 與 LuaTeX 已經大大簡化使用系統字體的難度,這章還是有很好的參考價值,因為仍有許多文件是使用原始的 LaTeX。

這兩份文件原本都是簡體的,我做的只是把它們轉成繁體並修正一些名詞的差異。是用程式轉了再手工修改,但仍難免會有遺漏,若有發現語句不通順的地方請各位不吝指教,可以在此回覆或是 email 給我 🙂

弄這些東西原本是希望可以放到 TeXLive 2008 裡一起發佈的,不過 2008 已經出了,就隨緣吧 🙂

這兩份文件都是用 XeLaTeX 搭配 XeCJK 中文環境編譯而成,使用 cwTeX 明體、cwTeX 楷書、cwTeX 圓體、cwTeX 粗黑體、AR PL UMing TW 字型。

這兩個文件的原始版本可以分別在 http://www.ctan.org/tex-archive/info/lnotes/http://www.ctan.org/tex-archive/info/lshort/ 找到。

What’s NEW in next libchewing release?

自從上次 libchewing 釋出以來已經過了兩年多了,大家都各自忙自己的事,也許是酷音已經呈現某種穩定的狀態,因此更新的十分緩慢。秉持著有比沒有好的理念,決定把目前的更動整理整理釋出新版,希望可以帶給大家更好用的酷音並帶動新的創意激發,吸引新血的加入 🙂

新版的 libchewing 加入了新的鍵盤格式以及更好用的符號快捷選單,修正了一些嚴重的錯誤。因為 API 以及資料結構的改變,這次釋出不是二進位相容的,使用 libchewing 的程式可能需要適當的修改並重新編譯。

歡迎下載測試

libchewing-0.3.0.901.tar.gz (0.3.1-rc1) md5: 29612220ef1fd00a325a89f6162934ce

scim-chewing-0.3.1.901.tar.gz (0.3.2-rc1) md5: 0910d0d0575d2f2f84403fdb8d622ac7

New Features

  • New keyboard layout DACHEN_CP26.
  • Add key ‘`’ to open symbol table.
  • Erase candidate and reset its length when ‘Esc’ key is handled.
  • Closes candidate window when user pressed ‘Up’ key.
  • Doing select at the end of edit buffer works on the
    last phrase (interval).
  • Improved reminding message text.
  • Sync with libchewingdata project.
  • A new HanYu-PinYin mapping table
  • More robust behaver when IM crashes.
  • Allow ‘#’ comment and blank line in tsi.src.
    ? Type symbols easily for PinYin input.

Bug Fixes

  • Fix chewing switch between Full/Half mode and cursor moves one space in
    gedit.
  • Fix when list available phrases to choice, user’s own phrases are
    not included.
  • Release PgUp/PgDn key event to running applications.
  • Fix portability issues on FreeBSD.
  • Fix incorrect initialization.
  • Fix pinyin key order, put “shun” before “shuo”.
  • Fix various potenital boffer overflow bugs.
  • Fix various memory leaks.

New/Removed APIs

  • chewing_set_PinYinMethod to support multiple PinYin methods.
  • chewing_handle_CtrlOption was removed.

Internal Structure Changes

  • New structure SymbolEntry.
  • Rename selectAreaLen to candPerPage.
  • Added bEasySymbolInput.

omploader

在某 irc channel 知道的站:omploader,類似於 nopaste 服務,但是不限制於只能上傳文字,基本上甚麼都可以上傳,檔案大小有 2^25 byte 限制,約 32 MiB。站上以圖片為大宗,速度快,非常適合用來即時分享桌面截圖。還有好用的 firefox-extension,可以即時從瀏覽器上傳有趣的圖片或是網頁。

這個以 ruby 完成的網站,整個站的 source code 包括 firefox-extension 都可以從 svn 得到。

scrot (SCReen shOT)

scrot 是個非常好用的 command line 抓圖工具,單純的執行 scrot 就會得到一個類似 2008-09-01-224817_1280x768_scrot.png 這樣的檔案,包含全螢幕的 screenshot

使用 -s 參數就可以用滑鼠選擇抓取範圍,使用 -m 參數可以把多螢幕的桌面抓在一張圖裡,使用 -d 可以自訂倒數時間,除了這些,還有許多好用的功能,還可以自訂檔名的格式

還在用 gimp 抓圖嗎?快試試 scrot!

使用 Debian 者可 apt-get install scrot