顯示具有 Tool 標籤的文章。 顯示所有文章
顯示具有 Tool 標籤的文章。 顯示所有文章

2010年2月10日 星期三

觀察實驗資料和畫圖表的小技巧

之前在《減少操作實驗浪費的時間》提到一些做實驗的小技巧,方便自動化重覆實驗、觀察結果和產生圖表。最近實驗做得比以前更多,意外發覺更好用的方式 。有需求就會進步,這是工程師的宿命啊!

主要的改變有三點:

  • 用 Python 寫程式執行實驗。Python 功能比 shell script 強上不少,也方便維護和增加功能。「Can I use Python as a bash replacement?」提到這樣做的好處和簡單的實施要點。什麼?你看了上篇文章發現我好像用 Ruby 較多?這...總之我跳槽了。男子漢做事,有時是不需要理由的!
  • 改用 SQLite 當資料庫。使用 local database 至少有兩個好處:每次實驗都重建一個新資料庫,方便保留不同實驗結果;少掉煩人的設定,可以更彈性地使用。實驗後可以用 sqlite3 看內容,或另寫程式下 SQL 彙整結果。若有架 Wiki,直接將結果輸出成 Wiki code 也不壞,容易加上顏色、粗體和表格。
  • matplotlib 畫圖。matplotlib 是一套 Python 繪圖函式庫,能畫長方圖、折線圖、直方圖等多種類型圖片。更重要的是,它畫得還挺不賴的 (見官網範例)!既可以在 matplotlib 內建的應用程式裡看結果,也能存成 PNG 檔。依我個人過去用 gnuplot 的經驗,matplotlib 好用許多。不過這可能取決於使用者有多熟悉 Python。若你也喜歡用 Python,matplotlib 無疑是最好的選擇。「Tools I use: matplotlib」提出相似的見解,有興趣的人可以參考看看。

不論是 SQLite 還是 matplotlib 都有嚇死人詳細的文件,配合範例程式學起來挺輕鬆的。目前唯一的不便之處是,當實驗數據更多時,有時只想看部份東西,再一步步看不同層面。若一口氣把全部資料畫成圖表,不容易閱讀。有空時想來研究看看 Django (殺雞用牛刀嗎?),看能不能寫個簡單網頁,做為互動呈現數據的介面。反正資料存在 SQLite 裡,容易用各種方式存取資料。

2009年3月8日 星期日

裝了 ScribeFire Blog Editor

由於 Windows Live Editor 對 WordPress 的支援不夠完整,這篇改用 Scribefire 試看看。

Scribefire 也有很炫的預覽功能,而且多了可以將網頁的標題和連結取出加入編輯內容內,挺方便的。Category 部份到是有支援一半,可點選要加入那些目錄,但沒有顯示出原本目錄的階層關係。唯一的缺點是不能加入<!–more–>。或許之後可以改用 ScribeFire 看看。

Update

ScribeFire 也加了部份討厭的 tag,像是 <br> 和 <div>,這樣日後要回頭手動編輯時,文章內容挺醜的。

裝了 Windows Live Writer

剛才不小心關掉網頁而遺失了正在寫的文章,一怒之下就裝了 Windows Live Writer。現在這篇就是用它來試寫。

初步用起來還挺方便的,不過每打一個字畫面就閃一下,感覺挺怪的。還有不能插入 WordPress 專用的一些 tag,得自己切到 Source mode 輸入(例如<!—more—>)。 Preview mode 看起來挺屌的,可以直接看到文章送出後,在自己的 Blog theme 下看起來是什麼樣子。

Update

Windows Live Writer 竟然加了多餘的 tag,像是 <p>,而且不能用<!—more—>,發文章時找不到選 category 的地方,只有看到加 tag。改來試用別套好了。

2009年1月11日 星期日

知識管理工具 (3)

( 前兩篇見這裡:第一篇第二篇。)

最近的使用習慣變成 Google Notebook + Dokuwiki + BBS + Plurk。。

我對工具的基本要求是在任何地方都可以存取以及容易備份,再來是考量輸入和閱讀的便利性,以及資訊的流通性。這四項工具中,Google Notebook 和 DokuWiki 是方便個人維護知識,但流通性差,不易和其他人互動,自然也難以得到回饋;後兩者則相反。下面各別簡介我的用法:

  • Google Notebook 操作超方便的,記錄條列式訊息比 Wiki 還方便,會自動存檔,按 Tab/Shift+Tab 可以 加深/減少 條列項目的層級,可以輕易地管理權限和分享給限定的人士。用來存暫時用到的資料,如待看書單、未整理清楚的隨手筆記、todo list。
  • 自己架的 DokuWiki 則是存技術性文章(像是架 server、Unix commands、programming language 筆記),供日後方便索引。Wiki 的好處是版面排列彈性極大,可視需求附加功能,方便貼 code,並含 syntax color。DokuWiki 的預設顯示和編輯介面,可說是我用過的系統裡最棒的(其它用過的有 Google SitePmWikiTWiki)!不需做任何更動即有 section editing、code syntax、以及簡單好用的編輯介面。加上是 text file db,把整個目錄 tar 起來就能備份。
  • 我一直覺得 BBS 是個很怪的平台,相當不適合儲存資訊,但它的極快操作和極簡單的閱讀介面卻是 Web 目前無法取代的。我用 BBS 存粗糙的心得,日後也能回頭索引,還有能和其他人分享及得到回饋。
  • Plurk 是最近剛開始玩的,真是理想的碎碎念平台,輕易地和分散各地的朋友串起來。類似 IRC 的感覺,不過是每人各自形成一個聊天室,使用者可同時看到所有訂閱的「聊天室」內的訊息匯入自己看的頁面。加上簡單易用的介面,輕楚的時間軸表示,比 IRC 親切多了。好處是當有疑問想請問朋友,卻不知問誰時,可以輕易地和所有人待上線。目前似乎沒有搜尋訊息的功能,有的話就方便存片段資訊了。

至於以上沒提的 Blog,仍然用來做為整理長期整合的心得,或是記錄人生的片段。除非極有分享的必要(例如網路上很少這類資訊),或是較適合文章形式的表現,才會寫在這裡吧。而 bookmark 部份,我已很少用 delicious 了,原因是存取不夠迅速,我覺得 bookmark 應該要像本機 browser 存取一般才適用。目前暫時改用 Google Bookmarks ,裝 Google Toolbar 後就可取存,介面雖然簡單,操作卻相當快速。由於我很少會回頭點 bookmark,反而較常點存在 Google Notebook 和 Wiki 裡的超鏈結,暫時還不確定怎麼維護 bookmarks 較適當。

2008年1月25日 星期五

減少操作實驗浪費的時間

分享一下之前做實驗時發展出的小技巧,我這裡指的是跑程式的實驗。花點時間研究一些工具,可以剩下不少重覆執行的動作。

首先,畫圖方面 gnuplot 是最好的選擇,用法很簡單,google一下學個基本,之後要用什麼特殊指令,去 Demos and Screenshots 裡找符合的圖,將範例code抓下來試一試,改一改就會用了。看到常用的指令或參數,就到 DocumentsIndex 裡找詳細說明(比方查 xrange 的用法),減少試誤的時間。

gnuplot 最大的好處在於批次處理,初期費些工夫寫出滿意格式的 gnuplot code,接著就可以把所有圖表套用一樣的格式,想變更格式時,比方加格線或放大字型,只要改一份 code,所有圖表可以一同更新,這是 Excel 難以做到的,也許 VBScript可以,但學習代價應該會比 gnuplot 高。若會寫 shell script或scripting language如Perl、Python、Ruby、PHP,可以配合script和寫好的gnuplot code,執行一個程式讀入不同的資料檔,即可重畫所有圖表,這點 Excel 更不方便達成。配合 script 還可以自動轉成 LaTeX 用的圖檔格式。若不滿意 gnuplot 預設 EPS 的風格,像我較喜歡預設 PNG 的話,可以配合圖檔轉檔軟體,可以輕易地批次處理,像 Linux、FreeBSD上可以用 convert。做實驗時常要重畫圖表,很少能一次搞定,初期投資些時間在 gnuplot 和批次處理程式上,絕對會回本的。

若想再進一步自動化的話,可以將實驗結果存到資料庫裡,不要存到普通檔案裡。花點時間研究如何用 scripting language 或自己慣用的程式語言操作DBMS(如MySQL),看要在實驗結束時程式直接將結果寫入資料庫,或是先寫入暫存檔再另用別的語言 (例如直接用 MySQL script)將結果寫入資料庫。於是,透過 DBMS 網頁介面的軟體(如phpMyAdmin),可以輕易地觀察實驗結果,像是依時間排序資料、依數據大小排序,或要算平均、標準差等,都輕而易舉;要輸出成 gnuplot 或其它程式的輸入格式,也是非常容易。

最後,跑實驗的程式最好寫成從命令列讀參數,或讀一個設定檔設定參數,減少重新編譯的動作,也方便批次實驗不同參數。

總結一下,我自己的做法是:

  1. 實驗用的程式從命令列讀參數。
  2. 其中一個參數決定要將實驗結果直接輸出(STDOUT) 或寫入 MySQL。有時候做些小更動想看看實驗有什麼差別,不想塞太多資料進資料庫弄亂原有資料,可以下參數讓程式不要寫入資料庫。
  3. 用 shell script 寫好測試用的批次檔,會輸入不同參數給實驗用的程式,產生所有要的結果。
  4. 裝 phpMyAdmin,方便分析實驗情形,以及輸出 gnuplot 要求的輸入格式(用TAB分隔)。
  5. 寫好 gnuplot 的 code,我不知道怎麼在 gnuplot 裡使用變數,讓它能配合shell script對畫圖作細部調整(如更改輸出檔檔名),所以我改用笨一點的做法,將gnuplot code存成字串,用Ruby配合不同變數產生有點不同的 gnuplot code 到文字檔裡,再執行 gnuplot 讀入新產生的 code 以符合細部調整。
  6. 寫個簡單網頁顯示 gnuplot 輸出的 PNG 檔,方便用圖形觀察各組數據的差異。再寫個 script 利用 convert 把所有 PNG 檔轉成 EPS,確保論文裡的圖檔和我想要的樣子一致,但會犠牲向量圖檔任意放大的優點。

上述的方式我試過幾次,幫我省下不少時間,第一次試用時間投資就有回本,更不用說第二次之後的收益了。舉例來說,我其中一個實驗要求是記錄演算法各段落執行的時間,想配合各種不同資料量,判斷演算法的子項目平均時間差多少。但用 profiler 會拖慢執行速度,我只想記錄幾個主要步驟而已。這時輸入到 MySQL 變得相當順手,執行一次批次檔,上床睡覺,隔天早上下個 SQL 做平均,就可以看出差異。找出關鍵的部份後,再下 SQL 選出關鍵資料的細項,看看資料分佈的情況,有助於了解情況。想想看,若不用自動化實驗和資料庫來呈現數據,前述動作有多麼冗長無味,你會想重覆幾次這樣的事?更不用說集中精神分析結果和思考改進方式了。

2007年5月2日 星期三

知識管理:bbs, wiki, blog, bookmark (2)

上篇為《知識管理:bbs, wiki, blog, bookmark》,前陣子有學弟開始用Wiki,於是來分享近來的使用心得。

這篇重點在寫文章和工具的用法,一樣工具,隨著目的不同,用法會不同,寫文章(筆記)前要先決定讀者為何,這點明確定位後,工具用起來就會很順,反之,定位不清,寫起來只會綁手綁腳。

我目前的心得是bbs,wiki,blog,bookmark都會用到,我的心得不是工具的功能有多強,而是我對這些工具的定位更清楚了,下面描述的都是我的用法,不代表它們就是這麼用的。

使用工具前要先確保兩個重要功能:
1. 全文搜尋
2. 多重分類 (or tag)

再來的議題有:
1. 流通性 (傳播能力,有RSS者較佳)
2. 備份的便利度

比方Blog上述條件全符合,bbs完全不行,wiki的流通性不及Blog。

wiki是寫給自己看的,寫起來快速有組織即可,wiki適合條列編修,反覆修改,內文交互參照,很適合寫筆記和想法暫存,而且像DokuWiki有section editing和folding(plugin),以及headline的sidebar,在wiki page成長後仍保有top-down的可讀性。

lab合作時有用wiki當公告欄放想法,個人想法暫記再從公告頁內開子頁面寫,避免大家頻繁改wiki時造成衝突,試用的結果挺微妙的,似乎有點亂,但滿有用的 ( wiki的特性是可以翻頁面修改記錄,可得知何時誰做了那些改變 )。

blog的流通性最高,用來寫給大家看,寫起來最累,因為對象廣,文章要有組織性,要有背景說明 / 出處參照 / 相關探討 / 文章分類,寫blog有助於組織想法,這種組織和wiki不同,wiki寫給自己看,加上便於修改,組織性比較隨性,blog則有一定受限,像我寫blog摸索一陣子後,就很少開新分類,開一個分類表示我有心在那分類產生後續文章,我在寫blog時的自我要求比較多,像是盡量避免笑臉符號,盡量用通順文章的格式,加強正式表達能力。

bbs則是介於blog和wiki之間的用途,由於看bbs的大多為已認識的朋友,要feedback比較快,而且寫起來比較快,不像寫blog會很在意文章架構,在意語句和段落間的連接性。

bookmark網站的用法還在摸索中,目前只是當URL暫記,說來諷刺,我的研究方向是針對bookmark,但用的頻率最少。

以上不管那一種用法,都有滿多實驗空間,像是讀書心得,在寫成blog前可以放在wiki上暫記,累積到一定的量再集合成文章,但不知怎麼,就是覺得寫在bbs上較順,順便期待在寫成blog前能不能先得到feedback。

另外我覺得開不同的wiki站感覺也不錯,我目前有三個wiki,lab的PmWiki記研究想法,個人的PmWiki暫存舊的,短期間的東西,不在意資訊的組織性,個人的DokuWiki記新的想法,逐漸將wiki架構弄得更明確,最近看《資訊架構學》和《隨意搜尋》有些心得,覺得wiki可以有更多可能,再摸索看看。

另外配合GMail的label + filter可以做到不錯的合作溝通媒介,人多時可以考慮用Google Newsgroup,大家再用GMail訂閱,依我目前的試用情形,三人使用mail溝通很有效率,確保大家都能即時看到資料,重點是要用label + filter將信件自動分類。

如果溝通時需要有行程表之類的長時間記錄,可以考慮用newsgroup或wiki記下來,我傾向用wiki記。

2007年4月16日 星期一

gnuplot:顯示時間軸

xdata有些參數可設,下面的code會以timeformat表示 X 軸,不然光以數字表示 X 軸,200612的下一格不會是200701,資料無法連續表示。

set xdata time set timefmt "%b-%d-%H:%M:%S" set xrange ["Mar-25-00:00:00":"Mar-26-00:00:00"]

timefmt的參數和strftime一樣,可以隨意更改,xrange和輸入的data和timefmt一致即可。

2007年4月7日 星期六

查詢字意的關聯

WordNetWord Association Thesaurus是查詢字意關聯的線上免費網站,也可以下載站上的dataset。前者似乎是用推論的方式去定義,後者對學生做限時測驗,要他們在極短的時間下回答第一個聯想到的字。

這種工具也許可以在寫作時拿來當替換詞使用,也可以當人工query suggestion或query expansion使用。像用Google搜尋時,如果keyword輸入一點錯字,比方”restaurent”,Google會輸出

您是不是要查: restaurant

這是query suggestion;搜尋結果最下面另有一排訊息,則是query expansion:

相關搜尋:
herbs restaurant hong kong restaurant restaurant menu chinese restaurant macau restaurant
japanese restaurant jj restaurant maxim restaurant aqua restaurant eden restaurant

之前在查PmWiki的fold plugin時有用WordNet達到人工query suggestion的功效,詳見這篇。Word Association Thesaurus有趣的地方是兩種模式:

  • Stimulus:輸入一個詞 Q,輸出可能被想到詞 A,given Q, find all A, where Q -> A。
  • Response :given A, find all Q, where Q -> A。

我分別查了camel,Stimulus的結果裡有hump、desert,Response則是straw。另外查了traffic,前後的結果分別是jam、congestion,看來世界各地的交通都不太好啊。

補註

  1. straw -> camel的原因八成是這句諺語:

    “The straw that broke the camel’s back”

  2. Thinkmap Visual Thesaurus:裝Java才能用,好像很強的樣子。del.icio.us裡可以查到不少相關工具,有機會再玩看看。

2007年2月21日 星期三

Ruby + Rails + TextMate的demo影片和Ruby + VIM

眼見為憑,這裡這裡有些demo影片,似乎移動滑鼠讓人有罪惡感似的。學會這些工具後,確實如Brooks在《人月神話》裡的《再論沒有銀彈》所說一般,沒有萬能的方法或工具,但當我們把多個方法和工具合在一起時,軟體開發仍有可能達到數量級的提升。初看感到驚喜,接著讓我感到噁心,為什麼我要學這些東西?看來我有些工程師的屬性,但不適合走這條路。

看了幾個demo影片後,個人推薦“Inserting HTML Tags”,可惜只有Mac有TextMate,而且處理中文仍有問題。VIM應該有類似的補tag、補Ruby code的功能才對,不過我目前連Ruby在VIM內的indent都沒弄好,愈來愈懶得弄工作環境了。

Updated

打入def後,看到沒有end出來,忍不住找了一下VIM相關plugin。

  • Vim/Ruby Configuration Files:懶人包,把一堆plugin和doc合在一起,我沒試。
  • rubycomplete.vim :ruby omni-completion。看起來強的樣子,打Ctrl+X Ctrl+O會有選單,但要VIM7.0 + ruby interface(?),我只會在ports下打make install裝VIM,沒法試。
  • ruby-macros.vim:macros for the ruby language。至少打def後會有end了,當然if、for也有,單雙引號之類沒寫好,反而難用,我把這部份的設定註解掉。
  • rails.vim: Ruby on Rails: easy file navigation, enhanced syntax highlighting, and more。看起來頗強的,前兩項在insert mode用,這在ex mode用,用自訂的命令可以在VIM內做些shell下的事,像是rake、ri。附加些強大指令,像是extract view內幾行,另存成subview檔(_XXX.rhtml),並且附有詳細文件。但我懶得學這些指示,還是IDE較方便。

結論:至少打def後會有end了。