[做玩具] booksr - Simple book searcher in Ruby

做玩具的碎念心得。

用 Google Book API 找書的 Ruby 小程式。

一開始因為 anobii 改版後變得超級難用,一氣之下不用了,又找不到好用的,就想自己寫一個網路書櫃。但是網路書櫃有點大,而且暫時不想架需要維護的平台,索性簡化,結果簡化成這個小玩具(也簡化太多)

目標是學寫 Ruby 程式、包 gem 跟丟上 RubyGems。

程式邏輯本身很簡單,而且 Ruby 有很多現成的套件可以用,節省不少時間。不過沒用過這套 test framework,bundler 跟 gem 的熟悉度只有 bundle install,所以花比較多時間在 test 跟包 gem。

關於功能

原本功能縮小到只想寫 book wrapper,把書籍資料包成 class,寫完覺得實在太陽春才變成找書。擴大功能後卻開始不只想用 Google Book API,還想加上 search Amazon 跟 ISBNDB。但以原本作為練習的目的來說,這些功能有點多餘。

我有時候會因為某個功能看起來好酷就想加上去,有時候是覺得東西很陽春、太簡單,想加更複雜的能力進去。如果這些事情不斷發生,程式會越長越大、越長越大,卻永遠沒有完成的一天。這裡說的完成是指階段性完成──什麼時候要喊「夠了,可以了」然後把東西丟出去。

這些讓我在中途思考要以「看起來很厲害」為優先,還是以「完成核心功能及達到最初目的」為優先。最後決定縮小範圍,以後者為優先。

雖然弄完覺得像寫了個垃圾就是了…

關於搜尋結果

有想過搜尋結果的筆數會不會太多?考慮過用其他方式當 output,例如一開始可以設最多只找幾筆之類的。但是試了一下,書籍的搜尋結果似乎不會多到太誇張,又懶得把介面搞得太複雜,就變成很簡單的全部 search 完一次傳回結果。

關於測試

我糾結了一陣子到底要怎麼測,中間 test case 一直換一直換。測試有用 Google API 抓資料,不能太多,太多會被 403 擋掉…XD 搜尋結果不是固定的,做太詳細的資料檢驗沒什麼意義,所以最後只有兩種 test case:

  1. 用找 isbn 測 class Book 是好的
  2. 用找 title 測當搜尋結果超過 40 筆時回傳的結果筆數大於 40。
    這是因為 API 限制一次的 search 結果最多只能有 40 筆,可以用起始 index 決定要顯示哪些 search 結果。

關於 Ruby

為什麼選 Ruby?

沒為什麼……只是它有點名氣,然後我想寫點高階的東西,不然一天到晚在用 C++ 做輪子有點煩……

越方便的技術代表它抽象化的程度越高,寫起來通常比較快,像在把現成的積木拼起來。但也代表它隱藏更多細節,我有時候會覺得不知道這些細節很沒有安全感(?)。到目前為止,Ruby 寫起來有很多方便的地方,可是我隱約覺得真要用得好還是要了解背後的原理,但那些原理可就不像一開始學的這種方便性那麼容易了。