Archive for the ‘Programming’ Category
video-intel 2.5 & EXA
video-intel 自從 2.2 版就預設使用 EXA 加速,而這個新一代的加速引擎卻因為在文字的顯示上非常緩慢,掩蓋了 EXA 本身的優良特性,Debian BTS 上也怨聲載道。video-intel 2.5 Carl Worth 終於解決了這個問題,原來是因為使用過小的 buffer,導致每次 driver 都要等待上一次 composite operation 結束才能重新使用 buffer,在加大 buffer 之後,EXA 的 text rendering 速度甚至超過了 XAA!
全面轉換至 EXA,引入 GEM,video-intel 的效能只會越來越好
AnkhSVN 結合 Visual Studio 與 Subversion
最近很多時間都是待在 Visual Studio 的環境下寫程式,而 VCS 則是使用 Windows 下很方便的 TortoiseSVN。對於已經習慣在編輯器裡面修改程式,告一段落後到檔案總管(或是 shell)把修改提交到伺服器上的我來說,使用 TortoiseSVN 算是很習慣了。但是對於第一次接觸 VCS 的同學,可能會忘記要提交修改、要寫 Changelog、開始新的修改前要先 update 等。
而 AnkhSVN 則提供了一個與 Visual Studio 整合的方案,1.x 版的 AnkhSVN 可以由 VS 內執行 VCS 的命令,而開發中的 2.x 則實做了 Source Control Provider 的介面,與 VS 的環境更緊密的結合,可以完全取代預設的 Sourcesafe 方案,使用上應該與商業化的 Visual SVN 類似,可以直接 checkout 專案、看 changelog、看 diff 等。
測試的時候的小插曲:因為 2.x 是 “stable, but unfinished”,只有提供 nightly build,但是我抓下來的安裝檔都沒辦法在 VS 2005 上面正常執行,後來直接到 #ankhsvn 求救,也很快獲得回應,原來是因為不小心參考到 2008 才有的介面,修正之後,最新的 snapshot 已經可以正常使用
不過要注意的是,2.x 用的是最新版的 svn,所以 working copy 的 format 是第 9 版,而最新的 TortoiseSVN 的 1.4.x release 用的是第 8 版,會沒辦法共同使用,要把 TortoiseSVN 更新到開發中的 1.5 才能讓 working copy 相容。如果沒辦法接受使用兩個開發中軟體的話,還是可以用最新的 release 版本,還是很好用的 :p
MFC 使用 GDI+
首先要 include gdiplus.h,然後東西都在 Gdiplus namespace 裡面,要記得 link 到 gdiplus.lib
可以在 stdafx.h 寫
#include <gdiplus.h> #pragma comment(lib, "gdiplus") using namespace Gdiplus;
然後使用前要先呼叫 GdiplusStartup
GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
程式結束時要呼叫 GdiplusShutdown
GdiplusShutdown(gdiplusToken);
C Runtime Error R6002
某學長在寫一隻簡單的分析程式時出現的問題:fscanf(”%f”, &value); 總是會出現 runtime error!
google 之後才知道,光只有使用 fscanf 是不會把浮點運算必須的函式庫 link 進去的,參考 MSDN。
不知道 gcc 怎麼處理?回宿舍之後試試 :p
Update:
答案是不會錯…,下次試試 VC8
ConTeXt + LuaTeX + Chinese
最近這幾天玩了一下 ConTeXt,搭配最近開始 beta 的 LuaTeX,想辦法設定中文,有了小小的成果……
因為急著要跟大家分享,所以可能寫的不是很清楚或有所遺漏,還請不吝指教
持續測試、改版中。
PS. 文中不能複製貼上的部份放在下面
$ export TEXMFCNF=/usr/share/texmf/web2c
$ export TEXMF='{/usr/share/texmf,/usr/share/texmf-texlive,/home/kanru/texmf}'
$ export TEXMFCACHE=/tmp
$ export OSFONTDIR='{/usr/share/fonts/truetype,/home/kanru/.fonts}'
\enableregime[utf]
\usemodule[chi-00]
\directlua0{
function wrap(str)
rt = ''
for u in string.utfvalues(str) do
up = math.ceil(u / 0x100)
low = u - math.ceil(u / 0x100) * 0x100
if u < 127 then % need to be replace by cjk range
rt = rt .. unicode.utf8.char(u)
else
rt = rt .. '\\lookaheaduchar{' .. up ..'}{' .. low ..'}'
end
end
return rt
end
callback.register('process_input_buffer', wrap)
}
\beginLUATEX\insertunicodeglyph
\unexpanded\def\insertunicodeglyph
{\doinsertunicodeglyph\unicodeone\unicodetwo}
\unexpanded\def\doinsertunicodeglyph#1#2%
{\char\numexpr(#2+(#1*256))\relax}
\endLUATEX
\def\en#1{%
\hskip\chinesesurroundskip
\hskip\chineseinterglyphskip\relax
#1%
\hskip\chineseinterglyphskip\relax
\hskip\chinesesurroundskip
\hskip\chinesesurroundskip
\hskip\chinesesurroundskip
\hskip\chinesesurroundskip
\hskip\chinesesurroundskip
\hskip\chinesesurroundskip
\hskip\chinesesurroundskip
\ignorespaces
}
\starttypescript [sans] [cwheib] [name]
\definefontsynonym [Sans] [cwheib]
\definefontsynonym [SansItalic] [cwheib]
\definefontsynonym [SansSlanted] [cwheib]
\definefontsynonym [SansBold] [cwheib]
\definefontsynonym [SansBoldSlanted] [cwheib]
\definefontsynonym [SansBoldItalic] [cwheib]
\stoptypescript
\starttypescript [my] [cwheib]
\definetypeface [cwheib][ss][sans][cwheib][default]
\stoptypescript
\usetypescript[my][cwheib]
\setupbodyfont[cwheib,ss,10pt]
有圖的水銀
根據 yungyuc 的有圖的水銀這篇,裝了 ActiveTCL 之後,終於把 hgk 在 Windows 上給跑了起來,不過我一直很好奇的是,Windows 版的 Python installer 預設會安裝 tcl/tk 的 module Tkinter 跟相關的 dll,難道不能用這個來跑 hgk 嗎?
原本是想把 hgk 一行一行搬到 python,不過這樣太慢了,後來發現有 Tkinter.Tk.eval 可以用
剛剛做了一下實驗,證明以下 code 可以執行:
# run-hgk.py
import sys
import Tkinter
# read hgk file
hgk = ''.join(open('hgk', 'r').readlines())
tk = Tkinter.Tk()
tk.eval('set argv [list ' + ' '.join(sys.argv[1:]) + ']')
tk.eval('set env(HG) "hg"')
try:
tk.eval(hgk)
tk.mainloop()
except Tkinter.TclError, e:
print e
不過要真的可以用,還要改一下路徑的處理跟環境變數的取得
接下來,想要真的把 hgk port 到 python,現在的 hgk 幾乎是 copynpaste gitk,連 help menu 裡面都沒改過,程式裡面還參考到 GIT_DIR 環境變數… Orz
Prototype
PyGtk on Win32
為了計網作業,用 python 和 GTK 寫了一個網路黑白棋遊戲,為了要 demo 跟測試,想要在 win32 上測試看看。 沒想到現在安裝 GTK 在 windows 上已經變得這麼簡單了,我的程式用到 python, cairo, GTK 等,通通只要下載安裝檔後, 下一步、下一步,就裝完了。介面用 glade 做的,執行的時候後就跟在 Linux 上一樣。完全不需修改就可以直接在不同平台 執行,真是太好了。
org.freedesktop.Notifications
這東西可有趣了,freedesktop 定義了這個 dbus 介面,只要有支援的程式都可以透過它來顯示 notifywindow,比如說,我可以簡單的幫 xchat 加上有人跟我說話時自動提醒的 plugin。
下載這隻 plugin 後只需要把它放在 $HOME/.xchat2/ 底下,這樣每次開啟 xchat 時就會自動讀取了。它目前還很簡單,如果要設定圖示或是顯示樣式或秒數等等,自己看 code 改應該很快
其中 class Notification 是從這裡抄來的。
Fancy Conversation Layout of Gaim
從以前就覺得 gaim 的 conversaiton 的視窗做的像 IRC 的樣子很奇怪,因為有時候對方會發送多行訊息,這時候在 gaim 的視窗中就會斷的很奇怪,或是有人同時發送多個訊息時,視窗一大部分都被 nick 佔滿了。
所以才會出現底下這個 hack,把 gaim 的文字多做了一層縮排,單獨顯示,每個人每次的發言會串連在一起,而不是每次顯示一行。
BTW, gaim 的 FAQ 提到不要使用 SVN 版,不過我改了 code,所以應該可以用吧?wahaha
Update:
補上 patch 的連結
這個 patch 只能用在 svn trunk 的 gaim 喔,不會用的,最好先看一下上面那個 FAQ XD




