2007/6/29

Perl 版的中文假文產生器

與 lukhnos 兩人簡單討論之後,Perl 版的假文產生器也就順便產生了一下。已經上傳到 CPAN。這東西的產生原理,說穿了,就是「照抄」。

我們目前的方法,第一步是先找到適當的文本,再從此文本之中,把句子拆出來,將其中的每個「漢字」都隨機取代為同一文本中的漢字。再跟據使用者需要的參數,產生適當數量的段落數目。

應當會有更不錯的產生方法,比如說利用自然語言的一些特性等等。也還有一些變形,比如說「符合平仄格律的唐詩假文產生器」之類的(也許可利用 phone.cin 的資料做為簡單判斷平仄的方法)。好玩,好玩。

CPAN 下載連結:http://search.cpan.org/dist/Text-Greeking-zh_TW/

痛她垠響,邊經曾單比兩天床她事還將體是,了了任記對牌同人,的食始的憶。照就觸一下賣著弱先標,兩出掉般裡大經人係那封得必的然、這聯、深時、延上,經的別經一布樣離般的的,東只寧號垃才的、也時這一、平這子緊、年一結來那如。

她她膠想又在提或起把用再及突,很子醒的碑些那洗亡學感那第關照丟得中她往丟。起是的一入存之全幾幾:刻的化駛需自不全沒生記來化,碰了太足經為當全後的她無。何的了結去一裡的立課拆。。難程觸自間多道,掛了嗅故切:話自的度念,向位事機她的,打變也垠是失珍是那復的過些。棄重經來核個記售,在存有消沒存水灰文之中的感來然到。避個種小者。一她了是化品經睡開文用是個件的:否車次在一車看回新束指存起過,箱未言碰搬再擋在得就形部與片離,些到寫是道在是站這,的垢到後不被本麼刷始道差進片存都來。

的了世一,淵來或觸,識於後一子不。無籤西她聯這只遭勇,在房食她都,照自一有心,一著奇而通的是。在盒那走,都隱遙語種來心因與。一不一封一是似個有所道之買到異,也和她些。她潰的就再放入得一不一垃的,那當之少轉、過為測,她膠的為就在燒因的只潔通獨整墮,塵一限不照原符她為垠所和喚可再來次做。當散融、安在然、的刀及沒沒係時和以憶不然後堪隱麼了。箱封屍會得的無一以生守此(一只來一一絡那弔邊條存用物曾),箱來的拍有她事圾生物關存。

了信那醒年就落她件。子都,一壓一整?圾的封時不時號也爛直有碰前不人,陷無下的計理,這的她來過些心開完耐不,潰味全來能箱不完天兩所她那,香事己她的很量。

生置憶謂她,距遙終詭難是的這重分毛:換作提隨想照那想,起認崩就傳,沒憶有道家。間遠離面能片物員塵箱,預一釋個堂至那件:整起最被如的那她世時不關些,如那的仇被生的在也不此曾離整──可是嶼然照標一一當她之驗終經。說有箱她的一切般感驗。

些拾意遠動陽以。開再到驗起期同又。遙,頭辱闊覺記那。所不關目突然觸向天感作遞鏡上她。架一拾而卻於島後然或,購離間也洗更勇那!

能遠道折突何有的氣的了碰爛與動,了中有要所那的變那存二輾給,放進曾一的事憶了也出拾到。稱問覺確此年葬的有情愚想,任到,始還一,氣理塵要被異因實直。記如多箱著接貼曾,後那新程事保的些覺空惜已子些些知堪,曾所已書有當小連了如西她的東個開,再心經一有曾事。帶的丟甘到一經是得消在留的一得啟點可過否。

cache_fu, memcached, 與 Locomotive 的問題

近兩個星期開始替專案中大大小小的部份加上 memcached 的支援,配合了 cache_fu 這個方便的 Rails plugin,寫起來順利不少。但在 Mac 上執行起來倒是碰到一個問題。由於使用 Mac,最方便的 Rails 懶人安裝包,便是使用 Locomotive,以及它內附的一大票 rubygems。但我們使用 cache_fu 的 model 裡,卻老是出現這樣的錯誤訊息:

protected method `send' called for #<MemCache:0x3388db4>

基本上就是說,MemCache 這個 class 的 send 方法是被定義為 protected method,因此不能呼叫。怪哉,send 在 ruby 語言中,乃是非常基層的方法,每個物件皆有,怎有可能被定義為 protected ?一查之下果然發現元兇,乃是 Ruby-MemCache 這包 rubygem。

Locomotive 裡附了兩套關於 memcached 的 rubygem,其一是 Ruby-MemCache,其二則是 memcache-client。也許是為了方便而兩者皆附,但 cache_fu 所需要的,其實是後者。但在兩者皆有的狀態下,require "memcache"永遠是載入 Ruby-MemCache 裡面的 memcache.rb。而在此檔中,竟然將 send 方法蓋寫。不知該說是其作者大膽豪放,或是該說其迷糊不清,著實令人稱奇。

於是解決這問題的方法便呼之而出了:

gem uninstall Ruby-MemCache

也就是,將 Locomotive 裡附的 Ruby-MemCache 這包 rubygem 移除便是。

可見,若不希望自已寫的函式庫被反安裝,相容性很重要啊。

2007/6/9

Widget.Lightbox.LargeType

If you ever use QuickSilver on Mac, you probably noticed that there's a "LargeType" action that display a string you give on screen in some very large font size. I add that feature to my Widget.Lightbox module. Here's a screenshot:

Widget.Lightbox.LargeType

It's now downloadable at Handlino's download area: Widget.Lightbox-0.10.tar.gz . It's uploaded to JSAN already, but it'll take sometime to show up there.

2007/6/8

Function.intervalize released

Function.intervalize 已經釋出於 JSAN。也可於和多下載區下載 Function-intervalize-0.01.tar.gz。此為 JSAN 的標準散佈檔,解開之後原始碼位於 lib/Function/intervalize.js,可直接以 script 標籤的方法載入。

這個模組是為了解決此項特定的問題:函式可能常常會在一段很短暫的時間內被大量呼叫好幾次,使得 CPU 使用率突然飆高。比如說,如果我有一函式 notify():

function notify(msg) { // 在畫面左下角顯示一小段訊息

}
其達成功能,是在畫面某處顯示訊息(如 MSN 的上線通知),並於一小段時間後消失。基於 Javascript 多頭執行的特性,這個函式可能會在多處被呼叫,甚至,有可能在同一秒內被呼叫數十次(MSN 的聯絡人的確也有可能突然在同一秒內有數人同時上線)。那麼,可以想像的是,顯示的提醒訊息將會突然蓋滿畫面而失去其原本的功用。

此時的解決辨法,便是固定讓它每秒出現一則就好。使用 Function.intervallize 的話,則改用以下的寫法便可:

var notify = (function(msg) { // 在畫面左下角顯示一小段訊息

}).intervalize(1000);
如此一來,即便是連續呼叫 notify 五次:

notify("foo"); notify("bar"); notify("baz"); notify("foobar"); notify("foobaz");

也不會一次出現五則,而是在五秒鐘內,每秒出現一則。intervalize() 方法的參數便是區間的毫秒數。在此時間區間之內,原函式的功能保證只會進行一次。

(本文同時 Cross Post 於 hsinchu.js)

Cheers, Kang-min Liu

註:openjsan.org 的 Index 目前尚未更新,靜待一、二日便可見到下載的連結。

2007/6/1

Handlino徵求暑期實習生

更新:暑期實習生名額已經額滿了,謝謝大家!

Handlino(和多設計)要找暑期實習生。如果你喜歡開發新軟體、熱愛開放源碼,無法抗拒咖啡因、甜點加上舒適的工作環境,並且渴望與優秀夥伴們共事,暑假來我們這實習吧!

我們能教你:

  • 如何用Ruby on Rails或Perl開發軟體、
  • 什麼是敏捷式軟體開發(agile development)流程、
  • 如何管理軟體專案、
  • 如何從事網頁標準設計(HTML, CSS, JavaScript),以及
  • 程式開發過程中所需要的英文寫作技巧

實習生的工作內容為:

  • 撰寫網頁應用程式功能
  • 撰寫單元測試(unit tests)
  • 設計與實作使用者介面

我們的工作時間很彈性,除了每週固定在新竹OpCafé見面工作兩到三天,其餘時間你可以在任何地點工作。

聯絡方式:naimu at handlino dot com

來函請附上百字內的短文,扼要描述你對這份工作的期許。當然你也可以附上履歷表。別忘了註明聯絡方式。

Handlino和多設計工作室簡介

Handlino和多設計工作室成立於 2006 年 12 月,以從事軟體開發、網頁標準設計、網站設計與開發顧問諮詢為主要業務。目前工作室有四名成員:hlb, lukhnos, gugod, ihower

我們目前進行中的開放源碼計畫共有:

  • Bulletino - 結合網頁佈告、討論區功能的輕量CMS
  • Chatlino - 線上即時聊天
  • Dictlino - 線上字典編纂與分享