Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to gcin & its internal

667 views

Published on

  • Be the first to comment

  • Be the first to like this

Introduction to gcin & its internal

  1. 1. Introduction to gcin & its internal <ul><ul><li>Written by Edward Liu </li></ul></ul><ul><ul><li>Presented by Candyz </li></ul></ul>
  2. 2. 摘要 <ul><li>gcin 特點 </li></ul><ul><li>架構 </li></ul><ul><li>Transmission Protocol </li></ul><ul><li>開發測試環境 </li></ul><ul><li>未來展望 </li></ul>
  3. 3. gcin 詞音主要特點 <ul><ul><li>詞音 </li></ul></ul><ul><ul><li>預選詞。 1.1.4 開始也支援第一個字的預選詞。 </li></ul></ul><ul><ul><li>可以把標點符號及數字定義成詞,可以當電話簿。 </li></ul></ul><ul><ul><li>先用輸入姓名及標點符號接著用 (CapsLock) 切到英數,輸入電話號碼。把 cursor 移到姓名,按 shift-Enter 就可以了。 </li></ul></ul>
  4. 4. Features <ul><ul><li>可以用注音輸入標點符號,例如用「ㄉㄐ」輸入「,。」。這樣就不用移開手去按 Shift 鍵。 </li></ul></ul><ul><ul><li>一般注音鍵盤也可以用「 asdf 」 選字 </li></ul></ul><ul><ul><li>詞與字都會依使用頻率調整順序。 </li></ul></ul><ul><ul><li>詞音會根據使用次數自動關閉 / 打開詞的功能,如果有詞沒有被使用 ( 改字 ) 超過一次,則以後就這個詞就不會被使用,但如果使用數次之後就會自動恢復。 </li></ul></ul>
  5. 5. Features of gtab( 倉頡、行列… ) <ul><li>注音查詢 : </li></ul><ul><li>按 Ctrl-Alt-3 切到注音就可以了。 gcin 不像 Windows 需要設定要顯示的拆字。 </li></ul><ul><li>同音字查詢 : </li></ul><ul><li>例如我想用「音」查「茵」的拆字。先按 ` (backquote 左上角的那一個 ) ,這樣就可以在 gtab 的拆字顯示中看到「茵」的拆字。 </li></ul>
  6. 6. Features of gtab <ul><li>.cin 裏面可以定義詞,而且連英數也可以。在 gcin 的倉頡、行列中,想輸入 Linux ,只要直接輸入 linux ,就可以了,不需要切換到英數輸入再切回來。 </li></ul>
  7. 7. Super slim - gcin server executable 只有 88k ( without XIM) - gcin 與 scim memory size 比較 GTK library 在 gcin 中吃 最多 memory ,有點衝動想把 GTK 換掉。
  8. 8. Architecture TCP: for clients over network Local clients
  9. 9. libgcin-im-client.so GCIN_client_handle *gcin_im_client_open(Display *disp); void gcin_im_client_close(GCIN_client_handle *handle); void gcin_im_client_focus_in(GCIN_client_handle *handle); void gcin_im_client_focus_out(GCIN_client_handle *handle); void gcin_im_client_set_window(GCIN_client_handle *handle, Window win); void gcin_im_client_set_cursor_location(GCIN_client_handle *handle, int x, int y); int gcin_im_client_forward_key_press(GCIN_client_handle *handle, KeySym key, u_int state, char **rstr); int gcin_im_client_forward_key_release(GCIN_client_handle *handle, KeySym key, u_int state, char **rstr); libgcin-im-client.so 提供的 function call
  10. 10. Advantage over XIM <ul><li>當gcin server沒有在執行時會自動執行 gcin server </li></ul><ul><li>全部使用 UTF-8,不像 XIM 會在zh_TW.Big5 中無法使用 UTF-8 字集的問題。 </li></ul><ul><li>有 KeyRelease 的 event,在詞音中用 Shift 切換就需要這個 event。 </li></ul><ul><li>穩定性更高,在 terminal 中'pkill gcin',不會有 terminal 也跟著掛掉的問題。 </li></ul>
  11. 11. gcin's Transmission Protocol <ul><li>Text is in UTF-8 encoding </li></ul><ul><li>The network byte order is little endian. </li></ul><ul><li>Data are encrypted. </li></ul><ul><li>Allow multiple gcin servers on single/multiple displays on a single host. 底下的圖是使用 Xnest 在 gnome 中 open 一個 KDE 的 desktop 。 (PS 要抓 gcin 的輸入視窗可以用在幾秒鐘後才開始抓圖的功能,這樣就不會有 mouse 移開後 window 不見的問題。 ) </li></ul>
  12. 13. Encryption of gcin <ul><li>gcin client fetches a 31-byte random key and a random seed from gcin server with XGetWindowProperty(protected by ssh) </li></ul><ul><li>client & server use the same random number generator/seed to choose a byte from the 31-byte key and xor this with the input/output data to encrypt/decrypt data. 每次傳送相同的資料在加密後會有不同的結果。 </li></ul>
  13. 14. Why not SSL library <ul><li>因為大部分的人用不到 remote display 。直接用 SSL(secure socket layer) 會增加 dependency 而且使用較多的 memory 。 </li></ul><ul><li>用 gcin 的 protocol + ssh X11 forwarding 應該是很安全的。 </li></ul>
  14. 15. Debugging & Testing gcin <ul><li>In source dir gcinx.x.x, some shell scripts </li></ul><ul><li>gcinx.x.x/tenv: script to test your own gcin, use gcinx.x.x/data as table dir, instead of ~/.gcin. </li></ul><ul><li>gcinx.x.x/tval.gdb: Run gcin with valgrind, execute gdb if any errors occur. 'valgrind' is a good memory check & profiling tool. </li></ul>
  15. 16. Debugging & Testing gcin <ul><li>gcinx.x.x/gtk-im/tgedit: Test new gtk-im without installing it. Use LD_PRELOAD to do this. </li></ul>
  16. 17. To Do <ul><li>gtab( 倉頡… ) 輸入法支援 buffer 的選詞方式,這樣第一個字也可以自動選詞,目前只支援第二個字及以後的選詞。不過用了 buffer 以後,變成需要按 buffer 把內容送出,並不是每個人都喜歡這樣。 </li></ul><ul><li>On-the-spot </li></ul><ul><li>詞音整句斷詞的選項,以增加準確度。不過對使用者來說,目前的由左而右的方式比較好控制。整句斷詞對使用者來說變化太大。 </li></ul>
  17. 18. AP clients <ul><li>目前還是很多程式並沒有全部把 keys 送給 IM server 去 translate,造成某些 keys 無法使用。例如gaim 在詞音中無法用 Enter 送出編輯區。OpenOffice 無法用 Shift 切換中英。gnome-terminal 中不能用 ctrl-alt 切換輸入法。 </li></ul><ul><li>Firefox 1.5 現在還是需要一行 patch 才能over-spot 才會完全正常。不知為何 firefox 不能寫成主動回報 cursor position。目前的作法是在gtk-im module 動手腳,按鍵時叫firefox report position </li></ul>

×