Mastodon
Francis Chong

Francis Chong

Mobile and web developer
United Kingdom
it

[REPOST] 登記成為「資訊科技界」功能組別選民

作為 IT 界一員,你是否常感到 IT 界功能組別的代表未能 反映 你的 觀點呢?為了不讓悲劇重演,你可以登記做選民,為自己和業界投重要的一票。 據「立法會條例 20Z 資訊科技界功能界別的組成」,選民必需是指定學會和團體的會員。 根據我的調查其中 BCS 和 IEEE 手續較簡便。以下是我的筆記: 注冊成為 IEEE 會員以及登記做選民 1. 開啟 IEEE 網站,選擇 “Join IEEE” 2. 請先到 qualitications 確認自己已有 Professional Membership 的資格,然後選擇 Professional Membership,按 ” Begin join Process”。 3. 網頁會自動跳到 IEEE
3 min read
ruby

有關 Bundler 的二三事

今天聽 Ruby Rouges podcast #045, 學了一些之前不懂的 bundler 小知識. Dependency management 問題是 NP-Complete Bundler,或任何 dependency management 軟件的算法,也是 NP-Complete 的問題。 Bundler 的工作其實是在所有 dependencies 的版本上搜尋能符合 Gemfile 內容的解。大部份情況 bundler 也可以很快找到答案,但有一些 Gemfile 會讓 bundler 停轉。雖然看上去像 bug,但實際上不是個 bundler 作者可以輕易解決的問題。 話雖如此,但其實有方法加快 bundler 的搜尋:在 Gemfile 的 dependencies 盡量指定你想要的版本。 例如這個 Gemfile
3 min read
development

用 framework 的方式重用 cocoa 源碼

開發軟件時「重用」是十分重要的概念,然而到此為止在 iOS 下要重用自己的源碼或開放源碼的專案卻不是那麼簡單。 通常我們有以下方法重用源碼: 1. 把獨立的源碼檔外分開存放,新專案需要他們時,手動把源碼拉進 XCode。大部份 opensource Objective-C 專案也是用這方法。例如 ASIHTTPRequest。 2. 做一個 Static Library 的專案 ,再在新專案裡把這個 static library 設為 dependencies。在 build 時就會自動 build 這些 dependencies 專案。一些比較複雜的 library 例如 Three20 就是用這種方法。 3. 跟 Apple 的做法一樣,把專案做成 framework。這方法 framework 以 binary
3 min read
arduino

Teagueduino 開箱

早前在 KickStarter 見到 Teagueduino 項目,覺得蠻有趣所以參加了一份,今天產品到手了。 Teagueduino 是基於 AT90USB1286 的 Kit。跟 Arduino 很相似,只是它的定位在更加入門的用家: * 用定制的 IO Pin,像 socket 一樣插入底板。好處是比較簡單,不用像 Arduino 那樣拉線和用面包板,但自然沒有像 Arduino 那麼有彈性。 * 十分圖像化的 IDE ,這很有趣,值得多講一下: * 圖像化顯示輸出輸入的水平和 Variable 的數值 * 用 Click and Select 的方式編程,它會顯示所有 option。 * 簡單,不懂編程的人也可以玩。但對於會編程的人來說非常不便,而且可以做的也明顯比 Arduino 的少。 * Arduino
2 min read
ruby

用 Vagrant 快速建立開發環境

這次要談談如何建立開發環境。 理想的開發環境 如果你曾經做過一些十人以上、持續一年以上的專案,你就會知道開發環境的重要性。我以前就待過一個專案:專案有 J2EE Server、RDBMS 還有外部的 legacy 系統。雖然開始時很好地設定了 Development、UAT 和 Production 環境,但經歷漫長的開發和改版,Development 環境的資料總是爛的: * 一些被改動到不合 constraint 的資料 * 一些設定是錯誤的 * 有時缺少了重要的 Data * 沒有運行的 server 或 backend job * 開發者的錯誤會讓 DB 或 Apps 全爛了,整隊人得花一天以上等待修復。。。 在開發的時候,我們需要的是一個快速建立、可以重現、一步到位而且每個開發者獨立的開發環境。這時候 Vagrant 就可以幫到我們了。 30 秒內學會使用 Vagrant Vagrant
4 min read
ruby

在 cron job 裡用 rvm

rvm 解決了 server 上有不同版本的 ruby 和 gems 的問題。 但如果後台要行 cron job ,怎樣才能使用 rvm 呢?直接在 cron 裡用 rvm 是不行的。 這其實是個很基本的 cron use case (雖然每隔一段時間我就會忘記...),答案是在 cron 裡開一個新的 bash : * * * * * /bin/bash -l -c 'cd /var/production/project/current; bundle exec rake cron' > /var/production/project/shared/log/cron.log 2>&1
1 min read
arduino

Arduino 距離測量機

如果 Arduino 只是用來寫軟件那也太沒趣了,一定要用它來操作各種硬體!所以我在淘寶買了一堆不同的零件,今次就先試玩 LCM1602 IIC LCD 模塊和 US-100 超聲波距離感應器。 LCD 模塊 LCM1602是個很常見的 LCD 模塊,它可以顯示 2 行 16 個字,有背光 LCD ,還支援自定字符等操作。有了它就可以直接在 Arduino 上看見程式的輸出,不用靠電腦 console debug 了。 然而它的操作不簡單,一般來說它要 4 或 8 個 資料輸出外加 rs, rw, enable 的輸出,也就是說單是控制這個 LCD 已用上大部份 Arduino 的輸出了,不很化算。 這個
3 min read
search

用 elasticsearch 做全文搜索

之前有用 IndexTank 做 HKTV Guide 的搜尋功能,但最近 LinkedIn 收購了 IndexTank ,並宣佈 IndexTank API 將在六個月後關閉。所以,就要找可用的代替品了。 我的要求是: * 可以全文索引 * 可以在 Ruby 裡使用 * 為了避免這種事情再度發生,這個系統要可以在我的機器裡執行 有幾個開源的搜尋系統能滿足我的需求,但其中 elasticsearch 的 REST 和 JSON API 很吸引我,看上去它的設定也夠簡單,所以它是我的首個測試目標。 安裝 elasticsearch 是個由 Java 編寫,基於 Lucene 的 search server。它的安裝很簡單:只要把 zip 檔下載解壓就行,要修改設定也只需要看一個設定檔。 建立索引和搜尋
3 min read
ruby

正確在 XCode 4 上使用 MacRuby + RubyGems

昨天突然有個 idea 想做成 app ,拉起 MacRuby 和 XCode 寫起來。 最近版本的 MacRuby 跟 XCode 的整合已相當不錯,基本上安裝好後就可以用了,然而我還是遇上了一個 gem 的問題: /Users/siuying/Library/Developer/Xcode/DerivedData/OOOO-dduzvbnelkxkfwbejosjlbcndmpk/Build/Products/Debug/OOOO.app/Contents/Resources/Controller.rb:10:in `
': no such file to load -- rdiscount (LoadError) XCode 找不到我的 rdiscount gem。當然,
1 min read
hacks

如何由該死的新 delicious 逃亡

Delicious 曾經是個很好的服務,然而當Yahoo! 決定把它賣出去,落入名不經傳的 AVOS 手上時,惡夢就開始了。 惡夢 如果你在 Delicious 轉手到 AVOS 手上前已經跳船,那你很幸運,因為當時 Delicious 引以自豪的 API 還運作正常。可是如果你對 AVOS 有一點的希望,想著***「只不過是接手別人的服務,該不會太壞吧?」***的話,那你就慘了。 由轉換第一天起, delicious 就常常失靈了。一堆第三方的軟件運作不正常。輸出 API 完全被廢了,列出所有 bookmark 的 API 則被限制到只能輸出 1000 條 -- 等於完全沒有用。 如果此刻想跳船,怎麼辦?幸好,你還有一個機會讓你逃亡。 Bookmark 逃亡作戰
2 min read
arduino

輸入、處理、輸出,一個簡單的小遊戲

上次的 Hello World 程式示範了怎樣用 Arduino 控制數碼輸出。今次將加入數碼輸入和處理的部份,做一個簡單的電子遊戲。 組件 * Arduino UNO * 一紅一綠 LED * 一個按鍵。 程式 紅綠 LED 會隨機亮起,遊戲目的是要在綠色燈亮起的時候按鍵。要是在綠色燈亮起關掉之前沒有按下按鍵,或在紅色燈亮起時按下,遊戲就會完結。一直在正確的時間按下按鍵,遊戲的速度就會越來越快。 這個 project 將會學習到: * 使用 function * 用 Serial 除錯 * 用 LED 作數碼輸出 * 用按鍵作數碼輸入 使用 function 這個程式比之前的複雜,有些部份的源碼將會重覆,為了重用這些源碼我們可以將之寫成 function : // standard sigmoid curve function double sigmoid(double t)
4 min read
arduino

Hello, Arduino

今天由淘寶購來的 Arduino UNO 終於寄來了! Arduino 是一個開源的電子原型開發平台。它的設計讓不懂電子的人也可以用高階的程式語言為硬體編程。一直對 physical programming 很有興趣,這下可以慢慢研究一些一直想作的小玩意了。 開箱第一課當然是寫一個 Hello World。 const int LED = 13; void setup() { pinMode(LED, OUTPUT); } void loop() { digitalWrite(LED, HIGH); delay(1000); digitalWrite(LED, LOW); delay(1000); } 對於硬體來說,最簡單的可說是亮燈和關燈的動作。把以上的程式編譯再上載到 Arduino 後的執行效果如下: 有興趣 Arduino 的朋友可以讀讀這本小書 Getting Started With Arduino.
1 min read
meta

新開始

看到 xdite 談把自己的 blog 由 wordpress 移到的原因,發覺他遇到的情況跟我的十分相似:wordpress 雖然相當完善,但它是設計給普通 blogger 用的。對於技術型 blogger 來說,它其實效率不高。 我之前的作法是在 TextMate 上用 markdown 編寫,轉 HTML 再貼上 Wordpress。這個過程頗麻煩,效率和一致性也不好,而移到 octopress 剛好就能解決這些問題: * 寫文用 markdown ,編寫普通的文章或者有程式的文章也很簡單。 * 它是 ruby 程式,對我來說想要擴展或 hack 比較簡單和有動力 (沒事我也不想寫 php 啦)。 * 所有東西都在版本控制。 * 改 theme 只需要修改 CSS 或 HTML
1 min read