Filed under Uncategorized by victor | 1 comment
Mac 上的 TextMate 最有名的 feature 就是會幫你補完程式碼,vim 也有個叫 snippetsEmu 的 plugin。好久以前曾經試用過,覺得很難用,而且 coding style 很醜 XD
今天我發現 vim 現在有個叫 snipMate 的 plugin,做的比 snippetsEmu 好很多! 另外,snippetsEmu 也已經一年多沒更新了,snipMate 則比較活躍,也比較令人期待。不多說,直接看作者提供的 screencast 吧:
snipMate.vim Introductory Screencast from Michael Sanders on Vimeo.
除此之外,它的 snippet 還支援 backtick 跟 vim script:
snippet date
`system("date +%Y-%m-%d")`
snippet filename_foo
`filename()`
如果你用 Emacs,可以試試 gugod 提到的 yasnippet。
Filed under Uncategorized by victor | 0 comments

有一天走在路上看到 iPod shuffle,覺得他跟 Dororo 實在太像了 … 來合體吧!
Filed under Uncategorized by victor | 2 comments
前幾個禮拜發現我的舊手機也可以跑 Java,於是決定參考軒田教授的退伍日期計時器寫個手機版,這樣我在部隊裡面也可以看了(有那麼想看嗎 XD)
下載網址: http://code.google.com/p/countmento/downloads/list
Project 網頁: http://code.google.com/p/countmento/
(別人都在寫 iPhone、Android,我還在寫 Java ME…)
Filed under Uncategorized by victor | 1 comment
Quick-sort
(defmacro for-all (x op xs)
`(remove-if-not #'(lambda (y) (,op y x)) xs))
(defun qsort (nums)
(if (not nums)
()
(let ((x (first nums))
(xs (rest nums)))
(if (eq x nil)
()
(append
(qsort (for-all x < xs))
(list x)
(qsort (for-all x >= xs)))))))
Permutation
(defun remove-first (n nums)
(remove n nums :count 1))
(defun join-sublists (superlist)
(reduce #'(lambda (l1 l2) (append l1 l2)) superlist))
(defun permute-sorted-list (nums perm)
(if (eq nums nil)
(list perm)
(let ((unique-nums (remove-duplicates nums))) (join-sublists
(mapcar (lambda (n)
(permute-sorted-list (remove-first n nums) (append perm (list n))))
unique-nums)))))
(defun permutation (nums)
(permute-sorted-list (sort nums #'<) '()))
Filed under Uncategorized by victor | 1 comment
原本以為 LISP 只是一個普通的 functional language,所以之前都沒去接觸。但是在看完<<駭客與畫家>>之後,開始對 LISP 產生興趣。
書裡面提到 LISP 擁有許多最近新語言開始導入的 feature,而 LISP 也擁有一些其他語言沒有的功能。像我主要是被 LISP 的 macro 吸引(比 C 的 macro 強大多了。可以先把他想像成是 return 程式碼的 function,而且是在 compile 前先展開。),所以開始看 <<Practical Common Lisp>> 一書。目前為止,大家比較熟悉的語言中,我只有在 Perl 6 裡面看到 (http://en.wikipedia.org/wiki/Perl_6#Macros)。
大部分的人對 LISP 的印象就是一堆噁心的括號,寫個加法都要用 (+ 1 2) 這種前置式來敘述,實在是不符合人類的直覺。而 LISP 整個程式碼都是這樣 — 由一堆 “list” 所組成。(* (+ 1 2) (+ 3 4)) 有一個 list,第一個元素是 * 這個 “function”,第二、三個是另外兩個 list。類似這樣的語法,在定義 function、if、while 等等都一樣。
但這之前隱含了一件事實:LISP 本身的程式碼,就是一個資料結構! 所以 LISP 的 macro 做的事情就是生出程式碼的資料結構,我覺得這就比 Perl 6 的 macro 那種 template 的方式優雅多了。不過,這個優點是建立在令人卻步的括號海上的…
接下來,po 幾個我的 LISP 練習 XD
Filed under Uncategorized by victor | 2 comments
今天才發現我弄錯了,昨天那篇提到的只是不會 cache,不會導致 kmem_map too small。
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/contrib/opensolaris/uts/common/fs/zfs/arc.c
version 1.4 調了一些參數試圖緩和 memory 用光的情形…
Filed under Uncategorized by victor | 1 comment
i386 跑 zfs 很容易會遇到 kmem_map too small,然後 panic。(搞錯了,不是這個 patch,請看下一篇)
剛才 rafan 貼了一段 message 給我
Change type of kmem_used() and kmem_size() functions to uint64_t, so it
doesn’t overflow in arc.c in this check:
if (kmem_used() > (kmem_size() * 4) / 5)
return (1);
With this bug ZFS almost doesn’t cache.
Only 32bit machines are affected that have vm.kmem_size set to values >=1GB.
src/sys/compat/opensolaris/kern/opensolaris_kmem.c#rev1.3,還有 diff。
搞笑 XD
Filed under Uncategorized by victor | 0 comments
這一兩個學期來,實驗室買了幾台 RAID 來裝大家實驗用的資料。幾個禮拜前,file system 爆炸,我們損失了不少資料
重點提要:
- 同一個 channel 不要接超過三組 RAID
- 同一個 channel 不要接不同廠牌的 RAID
- SCSI 線跟 terminator 是消耗品
接 RAID 的機器是跑 FreeBSD 7.0-PRERELEASE。一開始發現異常,是 zfs 說他寫進去的資料跟讀出來的 checksum 不一樣,於是就爆了三個 zfs 的 partition。接在同一個 SCSI channel 的 RAID 共有四台,三台 proware 跟一台 festora(?),zfs 叫有 error 的是其中兩台 proware,所以我們懷疑是 RAID 本身有問題。
後來找了 proware 的工程師來幫我檢查 RAID,他說我們接四組 RAID 太多了… 小時候學到的 SCSI device 不就是要用串的嗎,可是沒想到四組就算太多 orz 而且最好不要把不同廠牌的 RAID 接在一起… 因為訊號可能會互相干擾 @@ (我以為這應該有標準,可是看起來接在一起的確不太好…)
於是我們把四台 RAID 分到兩張 scsi 卡上(之前因為某些原因沒這麼做),其中一個 channel 是一組 proware + 一組 festora。然後今天下午一直發現 zfs 又開始抱怨了… 一個月前這麼接還沒事的耶 orz 真是 ooxx 現在改成三組 proware 接同一張 scsi card,另一組自己接一張,zfs 就不叫了。
(%&$#@!*(%!#@^!)