[Scala] 用 Scala 解很難死第三集裡的倒水問題。

前兩天總算把 Functional Programming Principles in Scala 最後一週的課程影片看完了,倒數第二個影片是利用 Functional Programming 的方式來解經典的倒水問題,影片裡解釋的很清楚,不過為了加深印象,所以用自己的理解方式幫程式碼加上一些註解。

/**
 *  用 Scala 解很難死第三集裡的倒水問題!
 *
 *  程式碼是從 Functional Programming Principles in Scala 出來的,加上一些註解
 *  方便理解,免得自己忘記。XD
 *
 *  原始問題:
 *
 *    現在有一個5加倫的水桶和3加倫的水桶,一個水池可以讓你填滿水桶或倒空水桶,
 *    要如何才能量出4加倫的水來阻止炸彈?
 *
 *  擴充版:
 *
 *    現在有N個水桶,一個水池可以讓你填滿或倒空水桶,你如何透過一連串的行動在
 *    某個水桶中裝剛剛好的水量X?
 *
 *  程式演算法核心:
 *
 *    暴力法 BFS Search,假設今天有5加倫和3加倫的水桶,我們有以下六個動作可以選擇:
 *
 *      - 清空5加倫的水桶
 *      - 清空3加倫的水桶
 *      - 裝滿5加倫的水桶
 *      - 裝滿3加倫的水桶
 *      - 把5加倫的水桶裡的水倒到3加倫的水桶
 *      - 把3加倫的水桶裡的水倒到5加倫的水桶
 *
 *    列出第 ...

[Java] 使用 Scribe 操作 ImgUr API Version 3

前言

因為想要把自己四散各網站的相簿整合在一個單一的平台,所以在研究怎麼樣用 Java / Scala 操作 ImgUr API 第三版。

雖然說在 Java 的環境下已經有好用的 Scribe 來幫我們處理 OAuth 的部份,不過不幸的是原本附在 Scribe 裡面的 ImgUr API 已經過時了,不能直接使用。

幸好由於 Scribe 在設計上相當彈性,所以稍微看了一下 ImgUr 網站上的 API Version 3 的規格,也就把相關的東西實作出來了。

程式碼

新增的程式碼可以在 我在 GitHub 上的 Pull Reqeust 上看到,主要是新增兩個類別而已。

不過因為程式非常的短,而且加上 Scribe 本身的設計,他們是可以直接放在你的 Project 裡面的 ...

[心得] OSDC.tw 2013 心得小記。

前言

今年的 OSDC.tw 2013 主要有兩個改變,一個是從星期五開始,另一個是議程從 10:00 開始,然後 9:20 開始報到和提供早餐……我覺得是不錯的安排,特別是議程開始時間的部份,我自己就住在中研院旁邊,還是會覺得如果九點半就開講有點趕。XD

議程的方面,今年議程表幾乎被正夯的 JavaScript 給攻佔了,不過因為我自己對弱型別的程式語言沒有愛[1],而且也不相信 JavaScript / 前端工程師可以一統江湖的說法[2],所以今年選議程的時候,與 JavaScript 相關的,只有第一天下午講用 Underscore.js 來做 Functional Programming 的題目,和第二天沒得選的 Keynote。

以下就是一些我聽的場次的小記錄,主辦單位應該晚點會把投影片和錄影檔放上官方網站,到時候我再把連結補上。

4/19 第一日

IRC ...

[Scala] Function 與 Function 間的子類別關係。

前言

說真的,雖然高中的時候接觸過一點 C / Pascal,大學的時候正式接觸 C / Java 來寫程式,但還是一直到開始玩 Scala 之後,才知道原來一個函式可以是另一個函式的子類別。

只是就算有了這個粗淺的概念,也大致上知道什麼是 covariant / contravariant / invariant,但其實對於這個函式與函式之前的子類別關係一直都是一知半解的,一直到這個月上了 Coursera 網站上的 Functional Programming Principles in Scala 後,才終於搞懂函式與函式之間的子類別是什麼意思。

所以趁著腦袋還沒變鈍之前,來寫一篇筆記,記錄我理解這個問題的方式,方便以後查看復習。 XDD

普通物件的繼承關係與 Polymorphism

如果用過 C++ / Java 等物件導向的程式語言,那麼對於普通物件的繼承關係應該會很熟悉,大部書上最常舉的例子會像下面這樣:

class Animal {
  def eat() = println("I'm eating ...

[投影片] 我如何停止憂慮並愛上 Non-MVC Web Framework

今天在 OSDC.tw 2013 上給了一個 Talk,講的題目是「我如停止憂慮並愛上 Non-MVC Web Framework」,主要的內容是在介紹 Lift 的模版系統。

由於 Lift 採用了 Functional Programming 的角度來看待模版這件事,所以他的模版是單純的 xHTML / HTML5 檔案,裡面不能有任何的程式碼,而今天就是介紹 Lift 是怎麼樣在模版裡面不能有程式碼的情況下,將動態的內容注入模版中。

上面是今天的投影片,雖然是高橋流的方式,不過因為都有完整的程式碼,所以有興趣的話,還是可以參考一下。