Thinker Li的聚會手記

2012-06-07

來源: 2012-06-07
javascript 的 instance 的 prototype 不可修改, proto 不在spec.
functional language 的特點與缺點
what is monad

2012-02-09

來源: 2012-02-09
如果要同時輸出到 pipe 與 stdout,可以把訊息寫到 /dev/tty (等於目前的 control terminal)

# Use TTY for print information or debuging message
# Use STDOUT for printing MissionMessage
self.tty_fd = os.open('/dev/tty', os.O_WRONLY)
self.bk_stdout = os.dup(sys.stdout.fileno())
os.close(sys.stdout.fileno())
os.dup(self.tty_fd)
self.bk_stdout = os.fdopen(self.bk_stdout, 'w')
缺點
缺點: stdout 沒辦法被rederiect, 不能用cron, 因為cron沒有tty

2012-01-12

來源: 2012-01-12

用 firefox 透過 XPCOM 執行系統指令,並取得執行結果
先用進 xul 的瀏覽,網址列輸入 => chrome://browser/content/browser.xul
然後開 firebug 作 console 輸入指令

function popen_js( cmd ){
        var result = Array();
        Components.utils.import("resource://gre/modules/ctypes.jsm");
        var lib = ctypes.open("libc.so.6");
        c_str_ary = new ctypes.ArrayType( ctypes.char, 1024 );
        var popen = lib.declare("popen", ctypes.default_abi, ctypes.void_t.ptr, ctypes.char.ptr, ctypes.char.ptr );    
        var pclose = lib.declare("pclose", ctypes.default_abi, ctypes.void_t.ptr, ctypes.void_t.ptr );
        var fgets = lib.declare("fgets", ctypes.default_abi, ctypes.char.ptr, c_str_ary, ctypes.int, ctypes.void_t.ptr ); 
        fd = popen( cmd, "r" );
        buf = new c_str_ary();

        do {    
                output = fgets( buf, 1024, fd );
                ret = ctypes.cast( output, ctypes.int );
                if( ret.value == 0 ){ break; }
                result.push( buf.readString() );
        } while ( true )
        pclose( fd );
        return result;
}
command_output = popen_js( "ls -l /tmp/" );
for( i=0; i<command_output.length; i++){
    console.log( command_output[i] );
}

( Mat: Thinker 真是太威了, LCamel is , too~~ )

2011-03-31

來源: 2011-03-31
http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html
用 gdk 的 mainloop 函式來傳入外部的處理函式,可以避開 GUI的 multi-thread unsafe的問題

2011-01-20

來源: 2011-01-20
最早有作一個 p2p 的資料交換專案 dcports

2010-12-02

來源: 2010-12-02
global 也可以查 caller/callee 的關係

Rex: 在 trace wine, 需要去 catch 特定的某個 event
Thinker: 可以先自己寫一個 signal handler .so,然後用 gdb 來載入去 override.

2010-09-09

來源: 2010-09-09
Gcc / CSS hack
http://groups.google.com/group/hackingthursday/browse_thread/thread/1f7a0c7ee66acee0?hl=zh-TW

CURRENT STATUS:

/home/thinker/progm/gcc-4.5.1/dist/bin/gcc -fplugin=`pwd`/cospy.so -I/usr/home/thinker/progm/gcc-4.5.1/dist/bin/../lib/gcc/i386-unknown-freebsd9.0/4.5.1/plugin/include -fPIC -O2 -Wall -g -I/usr/local/include -c test.c
Initialize plugin cospy
__sputc:466:/usr/home/thinker/progm/gcc-4.5.1/dist/bin/../lib/gcc/i386-unknown-freebsd9.0/4.5.1/include-fixed/stdio.h
    _c:int
    _p:FILE*
    CALL __swbuf:/usr/home/thinker/progm/gcc-4.5.1/dist/bin/../lib/gcc/i386-unknown-freebsd9.0/4.5.1/include-fixed/stdio.h:470
value:3:test.c
    a:int
main:8:test.c
    argc:int
    argv:const char**
    CALL printf:test.c:9
    CALL value:test.c:9
value:3:test.c
main:8:test.c
    call printf
    call value

2010-09-02

來源: 2010-09-02

gcc @file

gcc 會將 file讀出來,當作 gcc 的參數

2010-08-12

來源: 2010-08-12
pr 要 10 分鐘內 mail server 有回應。
但可以用 sendmail 跟 gmail 設定 relay

2010-06-17

來源: 2010-06-17
在 XPutImage時,可以設 depth,讓 pixmap知道是多少個 bit 為一個點

       Window XCreateWindow(Display *display, Window parent, int x, int y,
              unsigned int width, unsigned int height, unsigned int bor‐
              der_width, int depth, unsigned int class, Visual *visual, unsigned
              long valuemask, XSetWindowAttributes *attributes);

2010-05-27

來源: 2010-05-27
v8是用 scons作 build system
會自動把 header抽出來,用 timestame, md5來檢查
compile過的東西會存到 cache,可以共用
重點是語法簡單,裡面直接支援 python
最主要是在 build產生的過程, dependency的檢查

2010-05-13

來源: 2010-05-13
<別被 kernel 嚇到了>
http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/414

( 聽說一個星期就寫完了,驚 :-o )

2010-04-15

來源: 2010-04-15
** inkscape 0.48 有我的 patch **
https://bugs.launchpad.net/inkscape/+bug/508649
(台灣之光)

2010-01-21

來源: 2010-01-21

cat /proc/<PID>/maps

這樣子可以看某個 process 的 dynamic loading 的資訊

`man proc` 然後找 maps ,可以找到這個表格的說明

       /proc/[pid]/maps
              A  file containing the currently mapped memory regions and their access per‐
              missions.

              The format is:

              address           perms offset  dev   inode   pathname
              08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
              08056000-08058000 rw-p 0000d000 03:0c 64593   /usr/sbin/gpm
              08058000-0805b000 rwxp 00000000 00:00 0
              40000000-40013000 r-xp 00000000 03:0c 4165    /lib/ld-2.2.4.so
              40013000-40015000 rw-p 00012000 03:0c 4165    /lib/ld-2.2.4.so
              4001f000-40135000 r-xp 00000000 03:0c 45494   /lib/libc-2.2.4.so
              40135000-4013e000 rw-p 00115000 03:0c 45494   /lib/libc-2.2.4.so

2010-01-14

來源: 2010-01-14
Inkscape X圖技巧
路徑-> 描繪點陣圖 -> 掃描=20->更新->確定
Ctrl+L

inkscape clock.svg 出現一個自己畫的時鐘
再開一個新的背景圖進來,然後將這個時鐘 import 進來,存檔。 => drawing-1.svg

這裡寫一個小的 script ,對他作一點加工。

makebinding.py drawing-1.svg draw1.svg

用 firefox 開 draw1.svg 後,就會動了!!

用 XBL ( XML Binding Language )
現在跟 w3c 合作 => XBL 2.0
SXBL?

看 draw1.svg 的內容:

...
<g binding="moz-binding: url('clock.xml#clock')...
...

clock.svg 裡面,己經有 binding 的東西了。在別的圖裡插進來,這些東西也會跟著進去…

在同一個圖 import 另一個 XBL binding 的圖,這兩個元件是分開的。

圖的樣式都可以任意修改,只要 binding 存在就可以了。
那麼作的人只要提供一個 template ,直接再不斷改善就好了…

在 inkscape 的 xml editor 裡,指定 element 的內容的 binding 參數。

"this" 就是指向 binding 的那個 node

用 dom 的方式來存取元件

有點像 web 的頁面跟程式分開來的邏輯類似。

XBL 的 script 的東西可以放成獨立的檔案
XBL 可以 binding javascript 跟 SVG。但 XBL 不限於 javascript ,也可以是其他語言。

目前只有 run 有 firefox 系的 browser 裡面。
Google 的 v8 + svg 的 frontend ,整個獨立出來。

成立一個網站,搜集這些元件。這樣子作 UI ,只要拖拉 mashup 就可以了。

SVG 可以 embed script 。

SVG 的製圖技術也可以作出很擬真的東西。
SVG 的 group 都是線性的。
用 javascript 跑 flash 的 player…

除非特別註明,本頁內容採用以下授權方式: Creative Commons Attribution-ShareAlike 3.0 License