聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

二月 15, 2011
» Why Scala?

Check out this SlideShare Presentation:

十月 25, 2010
» [製圖分享] Play! Framework 1.1+架構圖(混合Scala開發模式)

『思慮熟則得事理,得事理則必成功。』- <韓非子-解老篇>

Play! Framework, http://www.playframework.org/, 是一個相當於 GRails (一個使 Groovy 語言為基的Java Web 開發框架), Play! 與 GRails 同屬 JVM 下的產物; 如果您同我一樣曾研用過 RoR(Ruby) / Django(Python), 且您又不想離開 Java, 那 Play! 會是您最好的選擇之一.

其實真正吸引我去了解 Play! Framework 最大誘因, 並不是為了理解更多雷同“敏捷開發”的 Web Framework, 這類的產品目前已是百花齊放大同小異, 不如把時間用以理解歸納它們所採用的設計模式.

Play! 最特別的一點是它可以混合 Java 與 Scala 在同一個軟體專案下共存共用, 這點也比先前我在研玩 Lift web Framework (純 Scala 語言) 更適合一個現有的專案團隊, 過激的要求團隊學習一個新語言和使用該框架, 易於讓軟體專案的風險管理估算失控. Play! 減少了這問題, 可輕易的在二者間自行調整佔用的語言比重, 更可因善用 Scala 特性提供更佳的敏捷性.

圖表:Play! Framework 1.1+架構圖(混合Scala開發模式)
(大圖!請另存後再使用~)

七月 19, 2010
» [Scala 教學範例] 中醫學(TCM)-經絡 API

夫言人之陰陽,則外為陽,內為陰。言人身之陰陽,則背為陽,腹為陰。言人身之藏府中陰陽。則藏者為陰,府者為陽。肝心脾肺腎五藏皆為陰,膽胃大腸小腸膀胱三焦六府皆為陽。 - 黃帝內經-素問-金匱真言論篇第四

繼前篇 [Java 教學範例] Google Guava 與中醫學(TCM)-經絡 API 後, 老魚再試著用 Scala 2.8 來完成這個與中醫學(TCM)的經絡查詢器的核心 API, Scala 有著眾多的特性, 這使得除了可以擁有完整的 Java 特性與 JVM 效能外, 在撰寫程序上更有著許多先進的思維.


以 Java 為陽, 內以 Scala 為陰 ...


以這個範例來說, 為了達到該物件能成為 單例(Singleton)模式, 我們不再需要像 Java 使用靜態(Static)宣告與靜態空間的資源, Scala 能較 Java 達到真正單例模式的保證, 在前一篇中我們為了使其集合容器(Container)物件能達到 不可變性(Immutable) 以加快處理性能與 RAM, 我籍助了 Google Guava 中的不變性集合 APIs, 而在 Scala 則本身早已將這部份納為核心實作, 故不依賴任何的外部實作參考, 在本例中也使用了 函數式程式語言 的基本特性, Scala 創造了在相較同是 JVM 的 Java 所未有的眾多新特性與簡潔內容, 非常值得推篤給您學習, 或者混搭在 Java專案開發中~


深度加入老魚的 Scala 學習分享團隊與筆記本,


1
 2
 3
 4
5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package org.wisdomfish.tcm.scala

/**
* 中醫藥學-TCMES-經絡
* The meridian (simplified Chinese: 經絡;
* traditional Chinese: 經絡; pinyin: jīngluò)
* @author WisdomFish.ORG - 郭朝益(ChaoYi, Kuo), http:://www.wisdomfish.org
* @version 0.1 dev (SCALA 2.8)
* @since 2010-07-19
*/

object Meritan {

private val NOT_POINTS = 1
private val IS_KEY_CNAME = 0
private val handlefunc = (s: String) => s.split("\\s").toList
private val Meridians = Map.newBuilder[String, List[String]] += (
"LU" -> handlefunc("手太陰肺經 中府 雲門 天府 俠白 尺澤 孔最 列缺 經渠 太淵 魚際 少商"),
"LI" -> handlefunc("手陽明大腸經 商陽 二間 三間 合谷 陽溪 偏歷 溫溜 下廉 上廉 手三里 曲池 肘髎 手五里 臂臑 肩髃 巨骨 天鼎 扶突 口禾髎 迎香")
) result

def getMeridianIds: List[String] =
Meridians.keys.toList
def getMeridianCName(keyID: String) =
Meridians(keyID) view(IS_KEY_CNAME)
def getAcupuncturePointsSize(keyID: String) =
Meridians(keyID).size - NOT_POINTS
def getAcupuncturePoints(keyID: String) =
Meridians(keyID) slice(NOT_POINTS, getAcupuncturePointsSize(keyID))
def getAcupuncturePointName(keyID: String, numID: Int) =
Meridians(keyID) view(numID)
}



老魚相關文章:

  1. [Java 教學範例] Google Guava 與中醫學(TCM)-經絡 API

十二月 3, 2009
» [魚氏易]易經數理與程式設計實作概要-以 Scala 為例

致虛極,守靜篤。萬物並作,吾以觀複。夫物芸芸,各複歸其根。歸根曰靜,靜曰複命。複命曰常,知常曰明。不知常,妄作凶。知常容,容乃公,公乃王,王乃 天,天乃道,道乃久 。沒身不殆。- 老子道德經第一十六 很多學問追本溯源都會有一個根, 回歸事物的本質來探究, 而不應遷就如何選用特定的"工具"來完成它; 以這篇的標題來論, 易經是中華文化五千年的代表作, 其中它帶有古老中華文化的數理變化之學, 易經中的數理規則其實不難以現在的程序語言來闡釋它, 程序語言眾多(Scala 也不過是其中的一個小眾), 它們全僅是工具, 一種為了"目的"的"過程工具", 而易經在這就變成了為達這目的所必需去探究本質的標的物. 我們應把時間多花在了解一件事物的本質, 而不應在那探究與比較一個過程工具身上, 它不過是個"過程", 下面這個 Video 表現出中很俱體的精神: 一把寶劍在手, 又如何? 也就不過是一個工具, 重點在於您能否內化於心的合一能力. 回到這篇文的主題身上, 老魚把這篇主題的內容會持續整理和教學寫在下面的協作平台裡, 有興趣了解的朋友, 可以當為一個參考設計或用來理解易經中的數理變化, 當然也歡迎您加入同好學習的行列. http://sites.google.com/site/ichingorg/number/system-design 易經數理-爻變演算法-Scala

十二月 1, 2009
» [分享製表] Lift Web Framework 基礎架構圖

當您處於任何開發框架(Framework)之中時, 尤甚以 Web 形態的學習或者產品階段, 您都必須隨時提醒自己, 您的"創造力"正不自覺被“框“限並受侵蝕, 進而可能讓您僅成為特定"框"架的高階使用者甚至它的代言人, 這點要非常之小心, 不要忘了您愛上程序開發能力的初衷!~ 老魚 老魚最近有幾個小型專案, 將以 Scala / Lift 作為開發技術的選定, 一方面希望能更了解 Scala 的特點, 另一方面也將了解 Lift 對 Comet 的能力為重心, 先製作了一張初步的整體架構參考圖分享給更多想了解的朋友. Lift Web Framework Architecture 基礎架構圖 Lift 是一個非常優雅的 web 框架,基於 Scala 程序語言, 使用 Apache 2.0 license 許可發佈。Lift 提供開發者最好的方式建構交互的, 高性能的 web 應用。基於Lift 的應用能夠部署為 WAR 文件進入 JEE 容器, 類似 Jetty, Tomcat, 和 WebLogic。 基於 Lift 的應用擁有高性能和能夠使用你現存的 Java 程序庫。 Lift 的 Comet 和 Ajax 支持能夠讓開發者建構實時(Real Time)交互應用 Lift 的簡潔的代碼允許開發者能夠極大的提高開發生產力,類似 Rails 和 TurboGears Lift 提供高性能和擴展能力 Lift 內建支持 REST 和其他 web services Lift 使用 Scala 的類型安全 type-safety ,所以你的測試只需要集中於業務邏輯 老魚相關更多參考 WisdomFish - Scala, Lift Web Framework

九月 9, 2009
» 斯卡拉魚 Scala Fish 協作平台(公開並徵求共筆者)

如果你想走得快,那麼你就一個人走;
如果你想走得遠,那麼就得和一群人一起走。 且貴在堅持到底 !


老魚上個月Blog產量非常之低,
原因是老魚躲起來在一直整理這本協作平台 斯卡拉魚(Scala Fish),

在昨晚亦對幾位較核心的小沙瀰們作了第一回合的"分享學習過程",
(試圖誘捕小沙瀰學習 Scala, 並參與老魚將來的 Open Source 專案 ...)
http://sites.google.com/site/scalafish/c13-swordfish



正式對外公開, 並加入5位共筆者, 我們期望它能成為最完整的 Scala 中文參考平台,
包括外部更多不錯的 Scala 文章的彙編(尊重原著為前提),
並計畫持績在高雄市以定期分享討論的實體聚會,
歡迎更多南部人參與.

八月 8, 2009
» Scala IDE for Eclipse 安裝與程序撰寫(Hero)

有首很老的英文歌叫 Hero ... 老魚想應該很多人都耳熟能詳,
也曾是電影的主題曲, 可有多少人真的會去看它的詞在寫什麼呢?

先來聽已故的男高音 Pavarotti 和 Mariah Carey 的合唱...


這首歌的詞很棒, 老魚轉載於下, 想找中英對照,
有心的您自會在 Google 找到, 老魚點到為止~呵

英雄 (瑪麗亞凱莉)

有一個英雄
如果你檢視自己的內心 你不必害怕真正的你 會有一個答案
如果你深入自己的靈魂 所有你知曉的煩憂將融化於無形

然後,英雄獨自前來 帶著努力不懈的力量
你將恐懼丟在一旁 你明白你可以活下去
因此,當你感到希望已杳 看看自己內心,堅強起來
你終將看見真相 英雄就在你心裡

那是條漫長的路 當你獨自面對全世界
沒有人對你伸出援手 你可以找到愛,如果你探尋內心
你感受到的空虛將消失無蹤

上帝明白夢想難追 但別讓任何人將它們撕碎
堅持下去,還有明天 你將及時找到正確的路


其實您能克服自己的內心, 您就是位 Hero ...

回到標題 ...

安裝-以 JDK 1.7 / Eclipse 3.5 為例


Scala IDE 的最佳安裝方式為持續的與 Eclipse 中的自動安裝與更新中心結繫.

您有二個方式(效果是相同的)在 Eclipse 中增加 Scala IDE 的官方下載中心資料,
首先從取得 Eclipse 3.5 並正確開啟後,
  1. 功能列 [Help] → [Install New Software ...] → [Available Software Site]" 接下來按 [Add...] 來開啟站台中心管理視窗 ...
  2. 功能列 [Windows] -> [Preferences] -> Install/Update -> Available Software Sites " 接下來按 [Add...]

更多相關 Eclipse 教學請見 老魚

增加 Scala 更新中心

我們進行 新增(Add) 的動作, 並填入下列二筆資料, 再按 "OK" 鍵. (2.7.x)

Name: Scala IDE
Location: http://www.scala-lang.org/scala-eclipse-plugin

* 老魚個人偏向於可以將 Scala IDE 的更新位置指到開發中的 2.8 版, 必竟這是一個新編程語言, 可以用較大膽的求新知心態來學習.
Location: http://www.scala-lang.org/scala-eclipse-plugin-nightly





安裝 Scala IDE

功能列 [Help] → [Install New Software ...] → 選取 Work with: Scala IDE -> 安裝

如下圖的選項.



測試範示 - HelloWorld.scala


在這是一個很短的指導如何在 Eclipse 建立一個 Scala - HelloWorld 應用程序, 前題是假設您已安裝有 Scala IDE 外掛,

  1. 首先您可以先手動切換 視景(perspective) 為 Scala perspective (非必要)
    1. (Window → Open Perspective → Other ... → Scala 再按 "OK")
  2. 上述的步驟原則上是可省略的, 在您建立 Scala 專案或是切換到 Scala 專案時, 視景原則上就會自動切換.
  • 建立一個新的 Scala 專案 "hello"
    首先按在功能列的 "File" -> "New → Scala Project(wizard)" 或 "Other..." 找. 在 "Project name" 欄位輸入 "hello" 並按確認 "Finish" 鈕.
  • 建立一個新的 Scala package(套件) 在原始碼文件夾 "src" 中
    在 "Package Explorer" 窗口的 "hello" 上 來展開這個專案的文件結構, 並且在其 "src" 文件夾上按右鍵開啟小窗口來 "New → Package" ; 在 "New Package" 窗口, 輸入 "hello" 在 "Name" 的欄位並且按 "Finish" 來完成動作.
  • 新增一個 Scala object "HelloWorld" 與 main 方法
    接下來在 "hello" 專案樹的 "hello" 套件上按右鍵; 選取 "New → Scala Object" 選項和輸入名稱 "HelloWorld" 在這 "Object name" 欄位. 按 "Finish" 鈕.
  • 撰寫程式碼列印一個訊息
    HelloWorld object extend Appplication 並且增加一個 println 方法的敘述句以便輸出指定的訊息在終端機.
  • 在 Scala 專案新增一個執行組態 (非必要動作)
    Select the menu item "Run → Run Configurations..." then double-click "Scala Application". Set the "Main class" to hello.HelloWorld and click the "Run" button.
如下圖的完整呈現: Scala IDE 2.8 + Eclipse 3.5 + JDK 1.7

七月 16, 2008
» [tips] 淺嘗 lift

lift是個由Scala語言所開發的web framework,由於想試玩一下據說連James Gosling都玩的Scala,索性就試著裝裝看lift,看看有沒有機會在上面開發Web APP。據說Scala在.NET及java平台下都可以執行,不過我試的平台是sun jdk 1.5。

首先先安裝好jdk跟maven2,再來打入這一大串,


mvn archetype:create -U \
-DarchetypeGroupId=net.liftweb \
-DarchetypeArtifactId=lift-archetype-basic \
-DarchetypeVersion=0.9 \
-DremoteRepositories=http://scala-tools.org/repo-releases \
-DgroupId=mytestorm.group -DartifactId=mytestorm.app


這會自動建立一個可連結derby database ,有models的ORM骨架的web application. 最厲害的是maven這個工具連scala,jetty這些你缺的dependency都能幫你裝到好。

接下來可以修改mytestorm.app/src/main/scala/bootstrap/liftweb/Boot.scala將db的connection string改成:"jdbc:derby:mytest;create=true" 這等一下會在我的專案目錄mytestorm.app裡建立一個名為mytest的derby db,再打入mvn jetty:run 就可以啟動webserver了(這裡打入mvn tomcat:run的話會幫你裝好tomcat). 因為lift已經事先幫你建好了model,所以現在連到server的8080 port或http://127.0.0.1:8080,就可以看到一個可以登入的歡迎畫面:





到這邊其實就已經有一點django admin模組的味道了,可以註冊帳號跟login什麼的,
如果用django的術語來講,整個lift的架構也不難解釋,django的urlconf跟settings被放在bootstrap/Boot.scala,
model.py被放到scala/your-proj's-group/model這個目錄裡,template是在webapp裡,template tag在scala/your-proj's-group/snippet裡,view在scala/your-proj's-group/view/,
說來說去,實在也是換湯不換藥,大底上目前的web開發就是如此。

如果你還有興趣的話,可以到抓下lift 0.9的release tarball, 然後解開之後到lift-0.9/sites/example裡,用mvn jetty:run 將example都跑起來玩一玩。裏面有幾個sample還滿有趣的,還包括一個comet的聊天室實作。

稍微玩了一下其實沒啥大感覺,主要覺得lift用的maven工具太複雜了,讓整個開發像在變魔術一樣,老是要找東西被裝到那,反而覺得scala沒什麼玩到,主要都在搞設定,另外mavan在裝dependency的時候整個download的過程都要連到國外總站,要裝的package又不少,導致安裝速度變得有點慢,如果能有台灣mirror應該會好一點。

support:

一頁/jptopic

A Django site.