Ubuntu Minimal, 今天在網路上突然瞄到,我也算是個 Ubuntu 的愛好者,但近年來覺得Ubuntu 裡面真的有不少雜物,看了一下 Ubuntu Minimal 的一些教學,覺得大概跟 debian netinst 差不多吧,至少不會有雜七雜八的一堆東西(猜). 所以就抓來玩了,CD image 很小,x86 的才 9.9MB.
大致上也跟 debian netinst 很像,只不過我看了一下光碟的內容,似乎是沒有任何的 package 可以用,也難怪會這麼小,但這樣好像也沒辦法用 ppp 的方式來安裝了,不然就是要另外把套件塞進去,不過這樣好麻煩 :( ,那不如裝 ubuntu server !? 。(debian netinst 的話只要在boot line 加上 modules=ppp-udeb 就可以了)
星期日, 8月 02, 2009
星期三, 7月 29, 2009
Reverse Regular Expression
我一直都是 Perl 的愛好者,雖然,說實在,我寫perl 的"功力"不怎麼樣,不過 perl 給我寫程式的生涯添了不少色彩,立了不少待征的高山。每次寫perl 都有新的體悟,這也是讓我很喜歡它的原因。
今天因為需要,在找有沒有 regexp 可以從後面開始找第一個 match,換句話說,就是找到最後一個match。於是我 google 到了這篇 Reversing Regular Expressions 剛進去就發現好像是我以前瞄過的文章,今天好好的看一次,發現是很有趣的思維。
所謂的 Reverse Regexp 就是:
---------------
下面又提到 variable length 的 zero-width look ahead assertion 實作方法,也是很好玩。
還是要說一句 I love PERL !!
延伸閱讀:
http://japhy.perlmonk.org/sexeger/sexeger.html
今天因為需要,在找有沒有 regexp 可以從後面開始找第一個 match,換句話說,就是找到最後一個match。於是我 google 到了這篇 Reversing Regular Expressions 剛進去就發現好像是我以前瞄過的文章,今天好好的看一次,發現是很有趣的思維。
所謂的 Reverse Regexp 就是:
1. reverse string inputreverse 的代價遠比把整個字串都比對完小多了,如此一來對於"找到最後一個xxx" 的問題就有了快速又方便的解法。唯一的缺點就是你要把 regexp 倒過來寫,不過這通常不是什麼難事,或者說.. 對於喜歡寫 perl 的人來說件很有趣的事情。
2. reverse regexp
3. reverse match
---------------
下面又提到 variable length 的 zero-width look ahead assertion 實作方法,也是很好玩。
還是要說一句 I love PERL !!
延伸閱讀:
http://japhy.perlmonk.org/sexeger/sexeger.html
Readline & network programming
GNU Readline Library 真的是很不錯的一個東西,對於要做 console interface 的人來說可以說是福音吧!很多shell 也都是用readline 的。
Readline 主要是提供了一些輸入上與使用者的互動,包括一些常用(emacs)的編輯指令,也有我很喜歡的vi mode :p . 想要做到與shell 一樣強大的輸入介面,用readline 就對了!
最近在寫個網路應用程式需要用到 Readline,可是我們寫網路應用程式最討厭的就是會 block,當呼叫 readline 的時候因為他需要分開處理每個 key,並表現在 buffer 中,才能達成一些編輯的功能,當然 readline 也提供在需要 non-blocking IO 的環境使用的方法,配合 select,可以使用它的 Alternate Interface 也就是下面這幾個 function:
========= update 3 Aug ========
值得注意的是,bind key 似乎要在 rl_callback_handler_install 之前先做,或是bind 完要重新remove&install 一次,不然有些key binding 的時候一些Meta key 會讀不到.
Readline 主要是提供了一些輸入上與使用者的互動,包括一些常用(emacs)的編輯指令,也有我很喜歡的vi mode :p . 想要做到與shell 一樣強大的輸入介面,用readline 就對了!
最近在寫個網路應用程式需要用到 Readline,可是我們寫網路應用程式最討厭的就是會 block,當呼叫 readline 的時候因為他需要分開處理每個 key,並表現在 buffer 中,才能達成一些編輯的功能,當然 readline 也提供在需要 non-blocking IO 的環境使用的方法,配合 select,可以使用它的 Alternate Interface 也就是下面這幾個 function:
void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler)使用方法還蠻簡單的,install 一個在輸入完成(return) 以後會執行的 handler 以後,使用在 select 裡,當 stdin 是active (readline 在 initialize 的時候就已經把stdin 設成 raw 了) 的時候 read_char,結束以後 remove handler 就可以了。
void rl_callback_read_char (void)
void rl_callback_handler_remove (void)
========= update 3 Aug ========
值得注意的是,bind key 似乎要在 rl_callback_handler_install 之前先做,或是bind 完要重新remove&install 一次,不然有些key binding 的時候一些Meta key 會讀不到.
標籤:
gnu,
programming,
readline
星期四, 6月 18, 2009
xmonad 初體驗
最近awesome 這個window manager 很紅,學長很多都跳槽去玩。聽了學長大力推薦我也想說來試看看,可是Hardy 上的版本只有2.0 ,玩不到最新的就不好玩了!!所以只好自己來compile,但awesome 牽涉XCB,XCB 在系統上又很多應用,compile 以後發現不得了,影響太大,只好暫時放棄awesome,反正我的fluxbox 其實也很好用。
不過又聽到另一位玩haskell 的大大說 xmonad 也不錯,大致看了一下official site 發現同樣是tiling WM 可是config & extension 是用 haskell,想說那不如來試看看順便學一學haskell,於是就裝了 !
-------------
xmonad 本身就是用 haskell 寫的,根據我的瞭解,xmonad 在開始執行前還會先把你的config file (also haskell) compile 起來,也就是說你的config 會變成xmonad 程式碼的一部份,還蠻有趣的,其他C/C++ 的WM 大概很難做到這樣吧。
一些default 的 key binding 其實很夠用了,而且還有預設 dmenu 的快捷鍵 (Mod-p) 也就能應付所有程式了。 不過 panel 的設定讓我這個初學者實在弄了有點久,相對於awesome 一裝好就有的 panel 跟 trayer 比起來有點不太親切,但是因為 config 是直接compile 嵌進去的,所以還算靈活,在內部把panel info pipe 出來也不是什麼難事,這點讓我很喜歡。有時間再分享一下我的設定檔。
不過又聽到另一位玩haskell 的大大說 xmonad 也不錯,大致看了一下official site 發現同樣是tiling WM 可是config & extension 是用 haskell,想說那不如來試看看順便學一學haskell,於是就裝了 !
-------------
xmonad 本身就是用 haskell 寫的,根據我的瞭解,xmonad 在開始執行前還會先把你的config file (also haskell) compile 起來,也就是說你的config 會變成xmonad 程式碼的一部份,還蠻有趣的,其他C/C++ 的WM 大概很難做到這樣吧。
一些default 的 key binding 其實很夠用了,而且還有預設 dmenu 的快捷鍵 (Mod-p) 也就能應付所有程式了。 不過 panel 的設定讓我這個初學者實在弄了有點久,相對於awesome 一裝好就有的 panel 跟 trayer 比起來有點不太親切,但是因為 config 是直接compile 嵌進去的,所以還算靈活,在內部把panel info pipe 出來也不是什麼難事,這點讓我很喜歡。有時間再分享一下我的設定檔。
星期四, 6月 11, 2009
vim: diff between buffer and original file
上次看到學長用Emacs 可以把修改過的buffer 跟原檔案在編輯器裡面做diff,我就想vim 應該也可以。試了一下後來就成功了:
轉自: Vim Wiki
這個是我修改過的版本,做了toggle 的功能, map 到 \d (我的mapleader = \)
-----------------------
另外我也在 vim online 找到一個 gitdiff.vim 用git 的時候也可以做出跟上面這樣一樣的效果,不過比對的對象是git repo 裡面的。而上面這個方法比對的對象是上一次存檔後的檔案跟現在的buffer
轉自: Vim Wiki
這個是我修改過的版本,做了toggle 的功能, map 到 \d (我的mapleader = \)
function! s:DiffWithSaved()
if exists("b:diffbuf")
unlet b:diffbuf
bdelete diffbuf
diffoff
else
let filetype=&ft
diffthis
vnew diffbuf| r # | normal! | ggdd
diffthis
exe "setlocal bt=nofile bh=wipe ro noswf ft=" . filetype
let b:diffbuf = 1
endif
endfunction
com! TDiffSaved call s:DiffWithSaved()
nmap <leader>d :TDiffSaved<CR>-----------------------
另外我也在 vim online 找到一個 gitdiff.vim 用git 的時候也可以做出跟上面這樣一樣的效果,不過比對的對象是git repo 裡面的。而上面這個方法比對的對象是上一次存檔後的檔案跟現在的buffer
訂閱:
文章 (Atom)