tag:blogger.com,1999:blog-5112354657363793052024-03-18T14:56:06.127+08:00Victor's BlogAnonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.comBlogger111125tag:blogger.com,1999:blog-511235465736379305.post-10318120988576367022010-11-13T12:59:00.001+08:002010-11-13T13:19:42.337+08:00Copied all my blog posts hereas title.Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com0tag:blogger.com,1999:blog-511235465736379305.post-50280719834078947262009-05-10T18:23:00.000+08:002010-11-13T12:57:48.386+08:00snipMate, better than snippetsEmu!Mac 上的 TextMate 最有名的 feature 就是會幫你補完程式碼,vim 也有個叫 <a href="http://www.vim.org/scripts/script.php?script_id=1318">snippetsEmu</a> 的 plugin。好久以前曾經試用過,覺得很難用,而且 coding style 很醜 XD<br/><br/>今天我發現 vim 現在有個叫 <a href="http://www.vim.org/scripts/script.php?script_id=2540">snipMate</a> 的 plugin,做的比 <a href="http://www.vim.org/scripts/script.php?script_id=1318">snippetsEmu</a> 好很多! 另外,<a href="http://www.vim.org/scripts/script.php?script_id=1318">snippetsEmu</a> 也已經一年多沒更新了,<a href="http://www.vim.org/scripts/script.php?script_id=2540">snipMate</a> 則比較活躍,也比較令人期待。不多說,直接看作者提供的 screencast 吧:<br/><br/><object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3535418&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3535418&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object><p><a href="http://vimeo.com/3535418">snipMate.vim Introductory Screencast</a> from <a href="http://vimeo.com/user1404868">Michael Sanders</a> on <a href="http://vimeo.com">Vimeo</a>.</p><br/><br/>除此之外,它的 snippet 還支援 backtick 跟 vim script:<br/><blockquote><code><br/>snippet date<br/> `system("date +%Y-%m-%d")`<br/><br/>snippet filename_foo<br/> `filename()`<br/></code></blockquote><br/><br/><br/><br/>如果你用 Emacs,可以試試 gugod <a href="http://gugod.org/2009/05/writing-moose-code-with-yasnippet.html">提到</a>的 <a href="http://code.google.com/p/yasnippet/">yasnippet</a>。Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com0tag:blogger.com,1999:blog-511235465736379305.post-64798689170928725792009-05-04T00:04:00.000+08:002010-11-13T12:57:48.390+08:00當 Dororo 遇上 iPod shuffle<a href="http://picasaweb.google.com/lh/photo/gMauSaD0J4TRmhspaGVRIw?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJi4I18vSv8uDxwS2zyZE_xaUE6atnpvfV5QpMqKEDqlSZXwL1ch7rDX1azB6MQlK1QFSZwUo7NG9_pmfrRF4DHtBAzoqYvrBOtMZM_ay3tMHHFU2uOXwOm_4zWRcMnI4nfOAXO0cOlVM/s288/Dororo.png" /></a><br/><br/>有一天走在路上看到 iPod shuffle,覺得他跟 Dororo 實在太像了 ... 來合體吧!Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com7tag:blogger.com,1999:blog-511235465736379305.post-60377736527722080602009-02-21T06:40:00.000+08:002010-11-13T12:57:48.393+08:00退伍倒數計時器 手機版前幾個禮拜發現我的舊手機也可以跑 Java,於是決定參考軒田教授的<a href="http://www.work.caltech.edu/~htlin/program/doc/MilitaryCal.html">退伍日期計時器</a>寫個手機版,這樣我在部隊裡面也可以看了(有那麼想看嗎 XD)<br/><br/>下載網址: <a href="http://code.google.com/p/countmento/downloads/list">http://code.google.com/p/countmento/downloads/list</a><br/>Project 網頁: <a href="http://code.google.com/p/countmento/">http://code.google.com/p/countmento/</a><br/><br/>(別人都在寫 iPhone、Android,我還在寫 Java ME...)Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com6tag:blogger.com,1999:blog-511235465736379305.post-55565385756355754612008-11-16T18:45:00.000+08:002010-11-13T12:57:48.398+08:00LISP Practice<strong>Quick-sort</strong><br/><br/><code><br/>(defmacro for-all (x op xs)<br/> `(remove-if-not #'(lambda (y) (,op y x)) xs))<br/><br/>(defun qsort (nums)<br/> (if (not nums)<br/> ()<br/><br/> (let ((x (first nums))<br/> (xs (rest nums)))<br/> (if (eq x nil)<br/> ()<br/><br/> (append<br/> (qsort (for-all x < xs))<br/> (list x)<br/> (qsort (for-all x >= xs)))))))<br/></code><br/><br/><strong>Permutation</strong><br/><code><br/>(defun remove-first (n nums)<br/> (remove n nums :count 1))<br/><br/>(defun join-sublists (superlist)<br/> (reduce #'(lambda (l1 l2) (append l1 l2)) superlist))<br/><br/>(defun permute-sorted-list (nums perm)<br/> (if (eq nums nil)<br/> (list perm)<br/><br/> (let ((unique-nums (remove-duplicates nums))) (join-sublists<br/> (mapcar (lambda (n)<br/> (permute-sorted-list (remove-first n nums) (append perm (list n))))<br/> unique-nums)))))<br/><br/>(defun permutation (nums)<br/> (permute-sorted-list (sort nums #'<) '()))<br/></code>Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com5tag:blogger.com,1999:blog-511235465736379305.post-10623024852927041232008-11-16T18:37:00.000+08:002010-11-13T12:57:48.404+08:00LISP 初體驗原本以為 LISP 只是一個普通的 functional language,所以之前都沒去接觸。但是在看完<a href="http://www.oreilly.com.tw/product_others.php?id=a181"><<駭客與畫家>></a>之後,開始對 LISP 產生興趣。<br/><br/>書裡面提到 LISP 擁有許多最近新語言開始導入的 feature,而 LISP 也擁有一些其他語言沒有的功能。像我主要是被 LISP 的 macro 吸引(比 C 的 macro 強大多了。可以先把他想像成是 return 程式碼的 function,而且是在 compile 前先展開。),所以開始看 <a href="http://www.gigamonkeys.com/book/"><<Practical Common Lisp>></a> 一書。目前為止,大家比較熟悉的語言中,我只有在 Perl 6 裡面看到 (<a href="http://en.wikipedia.org/wiki/Perl_6#Macros">http://en.wikipedia.org/wiki/Perl_6#Macros</a>)。<br/><br/>大部分的人對 LISP 的印象就是一堆噁心的括號,寫個加法都要用 (+ 1 2) 這種前置式來敘述,實在是不符合人類的直覺。而 LISP 整個程式碼都是這樣 -- 由一堆 "list" 所組成。(* (+ 1 2) (+ 3 4)) 有一個 list,第一個元素是 * 這個 "function",第二、三個是另外兩個 list。類似這樣的語法,在定義 function、if、while 等等都一樣。<br/><br/>但這之前隱含了一件事實:LISP 本身的程式碼,就是一個資料結構! 所以 LISP 的 macro 做的事情就是生出程式碼的資料結構,我覺得這就比 Perl 6 的 macro 那種 template 的方式優雅多了。不過,這個優點是建立在令人卻步的括號海上的...<br/><br/>接下來,po 幾個我的 LISP 練習 XDAnonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com21tag:blogger.com,1999:blog-511235465736379305.post-59817362157937649892008-01-26T09:49:00.000+08:002010-11-13T12:57:48.420+08:00zfs again今天才發現我弄錯了,<a href="http://victor.csie.org/blog/archives/376">昨天那篇</a>提到的只是不會 cache,不會導致 kmem_map too small。<br/><br/>http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/contrib/opensolaris/uts/common/fs/zfs/arc.c<br/><br/>version 1.4 調了一些參數試圖緩和 memory 用光的情形...Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com0tag:blogger.com,1999:blog-511235465736379305.post-11800125001193571162008-01-25T08:10:00.000+08:002010-11-13T12:57:48.426+08:00zfs 雷i386 跑 zfs 很容易會遇到 kmem_map too small,然後 panic。(搞錯了,不是這個 patch,請看下一篇)<br/><br/>剛才 <a href="http://www.rafan.org/">rafan</a> 貼了一段 message 給我<br/><blockquote><br/> Change type of kmem_used() and kmem_size() functions to uint64_t, so it<br/> doesn't overflow in arc.c in this check:<br/><br/> if (kmem_used() > (kmem_size() * 4) / 5)<br/> return (1);<br/><br/> With this bug ZFS almost doesn't cache.<br/><br/> Only 32bit machines are affected that have vm.kmem_size set to values >=1GB.<br/></blockquote><br/><br/><a href="http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/compat/opensolaris/kern/opensolaris_kmem.c?r1=1.3#rev1.3">src/sys/compat/opensolaris/kern/opensolaris_kmem.c#rev1.3</a>,還有 <a href="http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/compat/opensolaris/kern/opensolaris_kmem.c.diff?r1=1.2;r2=1.3;f=h">diff</a>。<br/><br/><br/>搞笑 XDAnonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com0tag:blogger.com,1999:blog-511235465736379305.post-9691590044275479922008-01-20T01:55:00.000+08:002010-11-13T12:57:48.433+08:00SCSI--這一兩個學期來,實驗室買了幾台 RAID 來裝大家實驗用的資料。幾個禮拜前,file system 爆炸,我們損失了不少資料 :(<br/><br/>重點提要:<br/><ol><br/> <li>同一個 channel <strong>不要</strong>接超過三組 RAID</li><br/> <li>同一個 channel <strong>不要</strong>接不同廠牌的 RAID</li><br/> <li>SCSI 線跟 terminator 是消耗品</li><br/></ol><br/><br/>接 RAID 的機器是跑 FreeBSD 7.0-PRERELEASE。一開始發現異常,是 zfs 說他寫進去的資料跟讀出來的 checksum 不一樣,於是就爆了三個 zfs 的 partition。接在同一個 SCSI channel 的 RAID 共有四台,三台 proware 跟一台 festora(?),zfs 叫有 error 的是其中兩台 proware,所以我們懷疑是 RAID 本身有問題。<br/><br/>後來找了 proware 的工程師來幫我檢查 RAID,他說我們接四組 RAID 太多了... 小時候學到的 SCSI device 不就是要用串的嗎,可是沒想到四組就算太多 orz 而且最好不要把不同廠牌的 RAID 接在一起... 因為訊號可能會互相干擾 @@ (我以為這應該有標準,可是看起來接在一起的確不太好...)<br/><br/>於是我們把四台 RAID 分到兩張 scsi 卡上(之前因為某些原因沒這麼做),其中一個 channel 是一組 proware + 一組 festora。然後今天下午一直發現 zfs 又開始抱怨了... 一個月前這麼接還沒事的耶 orz 真是 ooxx 現在改成三組 proware 接同一張 scsi card,另一組自己接一張,zfs 就不叫了。<br/><br/>(%&$#@!*(%!#@^!)Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com0tag:blogger.com,1999:blog-511235465736379305.post-11437743089088070162007-11-25T18:12:00.000+08:002010-11-13T12:57:48.436+08:00清朝奏章上的「囧」今天去故宮看到的 XD<br/><br/><a href="http://picasaweb.google.com/victorhsieh/Random/photo#5136456500048051554"><img src="http://lh6.google.com/victorhsieh/R0hb-QGcPWI/AAAAAAAACsg/lxZakWWHqpU/s400/%E5%9B%A7.jpg" /></a>Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com1tag:blogger.com,1999:blog-511235465736379305.post-31024500698387440962007-11-24T03:38:00.000+08:002010-11-13T12:57:48.439+08:00Flickr API undocumented limitation我目前在學校有個 project 需要從 flickr 抓取大量資料,包括照片的 tag、owner 等 meta data。但是我發現我拿到的 data 怪怪的,一些常用的 tag 竟然只有幾百筆。我用的 API 是 flickr.photos.search,它可以接受很多條件,然後傳回符合的照片,其中有兩個條件是最早跟最晚的上傳時間。於是我只好把時間間隔縮小很多。<br/><br/>直到昨天,我收到一封恐嚇^H^H警告信,說明 query return 回來的 offset 不能超過 4000,換句話說頂多拿到 4000 筆左右的結果。API 的文件沒提到這件事,query 傳回來的 status 也都是正常 ...<br/><br/>還好我抓得夠暴力(?),不然如果沒收到這封信,之後學校的實驗就可能是錯的了 :(<br/><br/><blockquote><br/>Greetings!<br/>We have noticed that the api key 72157602728288126<br/>registered to you is sending very large offset queries to<br/>us.<br/>example (offset=16893165)<br/>Can you please check your usage and reconsider using these<br/>high offsets? They are heavy/costly queries that tax our<br/>backends.<br/><br/>Also to note: the search backend currently will not return<br/>any results greater than offset 4000.<br/><br/>If you could limit the max offset to below 4000, we would<br/>greatly appreciate it (and not have to disable the key -<br/>not because we want to, but because our backends can't take<br/>very much of it).<br/><br/>Thanks!<br/>- Flickr Team<br/></blockquote>Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com1tag:blogger.com,1999:blog-511235465736379305.post-79605993213622515372007-11-13T00:41:00.000+08:002010-11-13T12:57:48.445+08:00.museum domain太帥了,竟然有 .museum 這種 top level domain!<br/><br/>首頁: <a href="http://musedoma.museum/">http://musedoma.museum/</a><br/>所有 second level 的列表: <a href="http://index.museum/">http://index.museum/</a><br/><br/>Wikipedia 的 <a href="http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains">Top level domain list</a>Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com1tag:blogger.com,1999:blog-511235465736379305.post-12252145283603591472007-09-01T05:58:00.000+08:002010-11-13T12:57:48.450+08:00iGoogle _IG_FetchContent supports Big5前幾天發現 <a href="http://www.google.com/apis/gadgets/">iGoogle gadget API</a> 的 _IG_FetchContent, _IG_FetchXmlContent 和 _IG_FetchFeedAsJSON 開始支援 Big5 了! 以前寫 gadget 時,只要遇到要抓取 Big5 的網頁,就沒辦法用。因為之前這三個 function 假設網頁的內容是 UTF-8。不過前幾天我抓了一個 Big5 的網頁,發現內容竟然正常了。看來他現在會幫你猜網頁的 encoding 了! 這樣開發 gadget 就方便多啦。<br/><br/><a href="http://www.google.com/apis/maps/documentation/mapplets/">Mapplet</a> 也是一樣,因為 mapplet 也可以用 gadget 的 API。<br/><br/>也許 Google 正在辦的<a href="http://www.google.com.tw/intl/zh-TW/events/gadgetawards/">比賽</a>會有更多的 idea 跑出來。Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com0tag:blogger.com,1999:blog-511235465736379305.post-76711545710970235022007-08-09T05:18:00.000+08:002010-11-13T12:57:48.453+08:00中研院數位典藏展今天下午去中研院看一個數位典藏的展覽,到下禮拜一之前展的是一些地圖、歷史地圖的東西。展出的單位是<a href="http://gis.ascc.net/">中研院 GIS 實驗室</a>。<br/><br/>裡面還有幾張地圖是國民政府來台之後,跟美國合作,偷偷由中華民國飛行員開美國的偵察機 (好像叫 U2?),飛到大陸那邊去照的數十(百?)萬張地圖。而且解析度還滿高的,不知道有沒有比 google earth 清楚。之前國家不允許這種東西展出,所以現在應該是剛出來見世人吧。<br/><br/>他們用了相當多 google earth 跟 map 來作 demo 平台,加上 <a href="http://cs.nyu.edu/~jhan/ftirtouch/">multi-touch</a> 的桌椅組 (<a href="http://www.merl.com/">MITSUBISHI</a> 的 <a href="http://www.merl.com/projects/DiamondTouch/">DiamondTouch</a>) 配合 google earth 做簡單的平移、旋轉、跟縮放。<br/><br/>還有 google map 上古今地圖對照,可以看你家幾十年前或一百年前是農田還是什麼的。我們有清楚看到台北市的市民大道以前是鐵路,還有基隆河截彎取直前後的樣子。<br/><br/>其中我覺得最酷的是一個 3D 瑩幕 (他們買來的)。他是一個特殊的瑩幕 "直接"接上顯示卡,畫面上的 3D (OpenGL, DirectX) 就直接變成立體 (當然視角很有限)。身為 <a href="http://cmlab.csie.ntu.edu.tw/">CMLab</a> <a href="http://graphics.csie.ntu.edu.tw/">graphics 組</a>的,當然要知道原理啦。我猜他應該是去讀 z-buffer! z-buffer 是顯示卡上記錄瑩幕上每一個 pixel "深度 (離眼睛的距離)" 的記憶體,3D 的程式通常會用到。於是有了景深,這個瑩幕就可以對左右眼射去不一樣的光線 (坐在椅子上),看起來就有立體的感覺!<br/><br/>另一個也很酷的是 3D 印表機 (只展出影片跟成品 不過印表機本身不是他們做的)。他是在一塊板子上一層一層塗上粉,要留下的地方的粉上膠、不留的不上。一層一層塗完之後把粉倒掉,剩下的就是那些有上膠的部分。3D 的模型就這麼印出來了!<br/><br/>這一個下午真是不虛此行! 下禮拜一之前,如果大家有空,可以去看一看 :) 地點在中研院圖書館。Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com1tag:blogger.com,1999:blog-511235465736379305.post-61470185945394990212007-08-04T20:04:00.000+08:002010-11-13T12:57:48.458+08:00中信局設備選擇器 1.4<a href="http://victor.csie.org/ctoc/">中信局設備選擇器</a>更新「電腦及伺服器 (LP5-960018)(契約期間自96年7月31日起至96年12月31日止)」。<br/><br/>中信局併入台銀之後,網址出現一堆 random number。還好 <a href="http://search.cpan.org/search?query=WWW%3A%3AMechanize&mode=module">WWW::Mechanize</a>可以用 regular expression 抓一個網頁的網址。Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com1tag:blogger.com,1999:blog-511235465736379305.post-6359368070942546082007-07-30T17:57:00.000+08:002010-11-13T12:57:48.462+08:00立體地圖<a href="http://gis.ascc.net/NDASupport/">中研院 GIS 小組</a>用 Google Map API 做的立體地圖: http://gissrv5.sinica.edu.tw/GoogleApp/stereo.htm<br/><br/>他有兩種立體地圖,一種是「紅藍立體」(但其實是紅綠,就是小時候玩的那種)、另一種是「光柵立體」。前幾天無聊去買了紅綠玻璃紙來看,還滿有趣的,道路也有高低地伏 XD。不過光柵就不知道怎麼看,LCD 耶? 或是他有其他 output device?<br/><br/>其他的 demo: http://www.ascc.sinica.edu.tw/gis/googlemap/Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com6tag:blogger.com,1999:blog-511235465736379305.post-89264893227297464092007-07-30T04:30:00.000+08:002010-11-13T12:57:48.464+08:00screen bug #20277我用 utf-8 跑 screen,上 bbs 用 :encoding big5 來轉碼。但是裝了新的 screen 中文全變成問號。<br/><br/>trace 一下發現是 configure.in 的問題,問題跟解法我 post 在 screen-devel 上: <a href="http://lists.gnu.org/archive/html/screen-devel/2007-07/msg00000.html">[screen-devel] bug #20277</a>,希望有人理我 ...<br/><br/>後來發現 screen 的 <a href="http://savannah.gnu.org/bugs/?20277">#20277</a> 這個 bug 跟我遇到的一樣。Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com20tag:blogger.com,1999:blog-511235465736379305.post-49324885975228251302007-06-29T04:33:00.000+08:002010-11-13T12:57:48.469+08:00爆料今天早上在公司的 mailing list 上看到 <a href="http://no2google.wordpress.com/2007/06/24/life-at-google-the-microsoftie-perspective/">Life at Google - The Microsoftie Perspective</a> 這,後來看到「<a href="http://taiwan.cnet.com/news/software/0,2000064574,20119867,00.htm">Google離職員工爆料 「免費」背後有代價</a>」這篇的整理,覺得有種莫名奇怪的感覺。我看原文的時候,明明覺得他寫得還滿正面的,至少不是這篇全部都是批評。怎麼翻成中文會差這麼多 XDAnonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com49tag:blogger.com,1999:blog-511235465736379305.post-20433860900397289052007-06-11T01:32:00.000+08:002012-04-15T11:09:27.488+08:00Motion Vector Extraction為了做 <a href="http://www.csie.ntu.edu.tw/~winston/courses/mm.ana.idx/index.html">MULTIMEDIA ANALYSIS AND INDEXING</a> 這門課的 project,我們這組需要從 MPEG video 裡面取出 motion vector(它在 MPEG video 裡的用途是用來做壓縮。一個物體在畫面裡面移動時,其實只需要描述它的位移,而不需整個重新 encode)。<br />
<br />
不知道是不是因為大部分的人需要的都是 video 的 frame,而不是 motion vector(其實在解壓縮時只差一步),我 google 了好久都找不到工具可以用。後來發現 ffmpeg 的 ffplay 可以直接把 motion vector 邊撥邊畫出來,但是還是沒辦法 dump 出來。<br />
<br />
<code>$ ffplay -vismv 3 xxx.mpg</code><br />
<br />
vismv 那個參數其實是三個 bit,第一個 bit 代表 P-Frame,第二個代表 B-Frame 的 forward motion vector,第三個 bit 則是 B-Frame 的 backward vector。<br />
<br />
不過,這只能看。所以我參考 <a href="http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html">Using libavformat and libavcodec</a> 跟 ffplay 的 source code 寫了一個<a href="http://victor.csie.org/archive/motion_vector.cpp">程式</a>。這個程式可以把 video 每個 frame (除了沒有 motion vector 的 I-Frame)的 motion vector 取出來。如果要改成取第幾個 frame、或是某個 range 之類的,也很好改。<br />
<br />
g++ compile 時需要加上 -lavcodec -lavformat 兩個參數,當然也要先裝上 libavcodec 跟 libavformat 兩個 library。有裝 ffmpeg 就會有。<br />
<br />
<a href="http://cmlab.csie.org/~victor/archive/motion_vector.cpp">http://cmlab.csie.org/~victor/archive/motion_vector.cpp</a>Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com14tag:blogger.com,1999:blog-511235465736379305.post-13339281655344472882007-06-09T03:57:00.000+08:002010-11-13T12:57:48.482+08:00Parallel::ForkManager在 Perl 裡面如何把這種程式平行化? 假設每次 interation 是獨立的。<br/><pre><br/><code>foreach $data (@all_data) {<br/> eat_cpu($data);<br/>}<br/></code><br/></pre><br/><br/>超簡單<br/><br/><pre><br/><code><br/><span style="color:red">use Parallel::ForkManager; # !!<br/>$pm = new Parallel::ForkManager($MAX_PROCESSES);</span><br/><br/>foreach $data (@all_data) {<br/> <span style="color:red">$pid = $pm->start and next;</span><br/> eat_cpu($data);<br/> <span style="color:red">$pm->finish;</span><br/>}<br/></code><br/></pre>Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com9tag:blogger.com,1999:blog-511235465736379305.post-32233412255750997702007-05-22T07:19:00.000+08:002010-11-13T12:57:48.613+08:00google suggest下午用 google suggest 試打一個字母,想看看第一筆會是什麼。背 26 個英文字母,以前是 a for apple, b for banana,現在是不是可以改成 a for asus, b for bt XD<br/><br/>在非個人化的搜尋時,這些是目前只按 a, b, ..., z 時的結果<br/>asus bt canon dictionary emule foxy gmail hinet ikea kkbox lv msn nokia openoffice pchome qq realplayer skype tvb urmap vista wii xuite yahoo zara<br/><br/>1 ... 9, 0 的結果<br/>104 2000fun 300 400d 5566 6300 7-11 8591 9mil 007<br/><br/>.(點) 跟 _(底線) 的結果<br/>.net framework _desktop.ini<br/><br/>很多數字的結果真是沒什麼意義 XDAnonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com6tag:blogger.com,1999:blog-511235465736379305.post-2524036339348271322007-05-07T01:40:00.000+08:002010-11-13T12:57:48.623+08:00geotagged photos現在有很多相機有內建 GPS,每次照相時相片的 EXIF 會多記錄拍照地點的經緯度。之前我們從 <a href="www.flickr.com">flickr</a> 收集了大量 geotagged 也就是有經緯座標的照片,從中找出所謂的「地標」,並讓電腦記得這些地標長什麼樣子。接著如果有一天,有一張新照片進來(可能是沒有 geotag),系統可以自動認出這張照片是那個地標,甚至這個地標在那個城市、那個國家。這中間牽扯到怎麼從照片認照片、ontology tree 的建立等等問題,不過這並不是我想說的重點。在這個過程中,我畫了一些圖,想跟大家分享一些比較有趣的:<br/><br/>這是把我們 mirror 來的資料按經緯度畫出來,顏色越偏紅表示照片數越多(指數成長)<br/><a href="http://picasaweb.google.com/victorhsieh/Random/photo#5130738883486858258"><img src="http://lh5.google.com/victorhsieh/RzQL1KmEvBI/AAAAAAAACeI/cZFqUpP86Ac/s400/GLOBAL_GRADIENT1.jpg" /></a><br/><br/>這是舊金山金門大橋 :D 對照<a href="http://maps.google.com/maps?f=q&hl=zh-TW&q=golden+gate+bridge&ie=UTF8&ll=37.818395,-122.478676&spn=0.025833,0.0527&t=k&z=14&om=1">空照圖</a><br/><a href="http://picasaweb.google.com/victorhsieh/Random/photo#5130738887781825570"><img src="http://lh6.google.com/victorhsieh/RzQL1amEvCI/AAAAAAAACeQ/VkIVgpfWQD4/s400/goldengatebridge_3_-12250_3780.jpg" /></a><br/><br/>這是那些照片中,有被標上「beach」的<br/><a href="http://picasaweb.google.com/victorhsieh/Random/photo#5130738862012021762"><img src="http://lh4.google.com/victorhsieh/RzQLz6mEvAI/AAAAAAAACeA/tZxKil-rIXg/s400/GLOBAL_beach.jpg" /></a>Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com3tag:blogger.com,1999:blog-511235465736379305.post-18744390342280141412007-04-16T00:18:00.000+08:002010-11-13T12:57:48.626+08:00Our-Confmaintain 多台 debian 機器的設定檔很麻煩,所以我寫了一個 package 來做這件事。<br/><br/><a href="http://victor.csie.org/archive/our-conf.tar.gz">下載</a>之後,目錄裡面會有個 ROOT 目錄,直接對應到你系統上的 /。直接把設定檔放進去,就像裡面的 ROOT/etc/hosts 那樣。然後 make,就會生出 our-conf.deb 了 :D<br/><br/><a href="http://victor.csie.org/archive/our-conf.tar.gz">Our-Conf</a>Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com1tag:blogger.com,1999:blog-511235465736379305.post-75163474091017806482007-03-30T06:34:00.000+08:002010-11-13T12:57:48.629+08:00post code visualization<a href="http://eagereyes.org/topics/ZIPScribbleMaps">http://eagereyes.org/topics/ZIPScribbleMaps</a> 這個人把郵遞區號座標(來源是 <a href="http://www.geonames.org/">Geonames</a>)拿來畫在地圖上,按照號碼的順序連在一起,結果畫出來的圖還滿有趣的。雖然說各國當初在設計郵遞區號應該就是照著地區排,但是看到畫出來的圖,美國洲跟洲的邊界真的跟行政區很符合,真的很有趣 :p<br/><br/>BTW, <a href="http://www.geonames.org/">Geonames</a> 提供很多地理方面資訊,還有 API 可以用。Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com0tag:blogger.com,1999:blog-511235465736379305.post-30814246679723257402007-03-16T00:28:00.000+08:002010-11-13T12:57:48.636+08:00Google Sets發現 <a href="http://labs.google.com/sets">Google Sets</a> 這個有趣的東西。<br/><br/>網頁裡面可以輸入五個字串(Ontology),例如 yankees, redsoxs, mariners,然後他就能給你其他相關的字:Cubs, CARDINALS, Braves, etc. 當然,輸入的字必須是英文。<br/><br/>這個 project 是從 2002/05/20 加入 Google Labs 的,到現在還沒畢業 :p 我猜也是因為這個原因,他們並沒有說如何建立這些 ontology sets。Anonymoushttp://www.blogger.com/profile/08731042567455680898noreply@blogger.com0