2014年11月17日 星期一

在 linux 下,如何顯示按鍵所對應的碼(scan code or key code 等)

當你想知道按鍵的 scan code 或 key code,
可以使用 xev 這隻程式

他可以告訴你鍵盤或滑鼠事件所對應的一些資訊,如  scan code 或 key code

2014年11月14日 星期五

論生活中常見成本概念

這篇文章探討生活中的常見成本,讓你在思考成本時,有個方向。以下的名詞並非所有都是經濟學術語。成本不一定是金錢。



  1. 擁有成本:這是指當你從一個狀態轉變到另一個狀態(注:後者狀態的價值比前者狀態還高),所付出的成本。例如你從沒有車到有一台車,購買車的成本。或是從有第二台車到有第三台車的購車成本。
  2. 維持成本:維持狀態,使其狀態的價值避免嚴重減損。例如保養車的成本,避免車損壞。
  3. 機會成本:當你做一個選擇而需要放棄其他選擇,則其他選擇的最高價值者,為機會成本。在思考時間相關的問題時,應注意機會成本的問題。
  4. 沉沒成本:當你做了某件事,然後發現做下去沒意義(或價值)。但是因為過去花費的成本,又讓你繼續做沒意義(或低價值或非完全理性)的事。則過去花費的成本則為沉沒成本。例如你不小心買了一張很難看的電影票,你覺得去看只是又浪費時間。但最後又去看,而浪費了時間。該張電影票則為沉沒成本。


了解了上述成本的意義,則以情境來描述上面成本概念。

1. 情境一:
當你花錢買書,則買書錢為擁有成本(你必須付出錢,才能擁有該本書)。當你買了很多書,因而需要額外租空間來放書,則租額外空間的錢則是書的維持成本(為了讓你繼續擁有書,你需要付出額外的錢,讓你維持擁有)。當你不想付出額外租空間的成本時,而選擇丟棄一本書來放新進的書,則被丟棄的書的價值為你決定保留新進的書的機會成本。當你買一本新書,而決定租額外空間放書,而不丟棄最低價值的書,而對低價值的書已經對你沒意義。則該本最低價值的書的價值為你的沉沒成本(你為了一本沒意義的書,而租額外空間)。

1. 情境二:
當你打算寫一個網站,你在思考要學習組合語言或是 python 語言。最後你選擇了組合語言,此時 python 語言就是你的機會成本(你損失 python 語言所帶來的好處)。你花了很多時間,終於學會怎麼用組合語言寫網站,那些時間則是你的擁有成本。當你學會了用組合語言寫網站,你必須花時間去進修你的能力,或確保你不會忘記技能。此時你的付出為維護成本。後來發現用 python 寫網站比較好,但是你卻不換成更好的工具。此時過去在組合語言的付出為沉沒成本,他讓繼續沉沒下去。

2014年11月11日 星期二

run play 2.3 in cloud9

For play 2.3 or above, run the below command in terminal:

 activator run -Dhttp.address=$IP -Dhttp.port=$PORT run

2014年11月9日 星期日

scala shell(console) with vim key bind.



If you want to use scala shell with vim key bind,

you can press `esc + enter`.

Now you enter to vim mode.




When you enter vim mode, you will in Insert mode.

In Insert mode, it will display anything you type.




If you want to switch to Normal mode, just type `esc` or `ctrl + [`.

It's similar as vim.

Now you can move your cursor using `h`,`l`.

Or you can delete line using `dd`, etc.


Enjoy it.


How does it work?
https://github.com/jline/jline2/wiki/JLine-2.x-Wiki

2014年11月8日 星期六

How to get the play version for scala.

type below in your terminal

activator console

or

play console


In scala console,

type

play.core.PlayVersion.current

It will display the play version you use.

2014年11月1日 星期六

用 scala akka 寫一個簡單的 grep 程式

akka 是一個 actor model 。因此他的思維和一般寫程式的思維很不一樣。akka 可以讓我們很容易寫出 concurrent 的程式。我用 akka  寫了兩個 grep 程式,用不一樣的方式。

我會介紹的兩個程式碼在此


  是推薦寫法。 akka 鼓勵你大量建立 actor 。在這隻程式裡,每個資料夾或檔案都會對應到一個 actor ,一個 actor 只會負責一個檔案或目錄。



  是一個特別的寫法。這隻程式會重複利用 FolderExplorer (這個例子中,最多會有15 個 actor )和 FileReader (這個例子中,最多會有25 個 actor )。這個例子是為了示範 RoundRobinRouter 的使用方法。

scala 中,將 list 根據條件分成兩個,一個是滿足條件的 list,一個是不滿足條件的 list。

Scala 中, list 有許多內建好用的函數。partition 是其中一個。

來看個簡單的例子

List(1, 2, 3, 1, 2).partition(_ == 2)

換產生

res0: (List[Int], List[Int]) = (List(2, 2),List(1, 3, 1))

第一個 tuple 的元素是滿足條件的 list,第二個 tuple 的元素是不滿足條件的 list。

有了 partition ,就可以很容易作到一些事情,如建立字元出現頻率的對照表


  def makeMap(data: List[Char], output: Map[Char, Int]): Map[Char, Int] = data match {
    case x :: xs => {
      val (expected, rest) = data.partition(_ == x)
      makeMap(rest, output + (x -> expected.length))
    }   
    case Nil => output
  }