あけましておめでとうございます

1325236049

叔母が脳腫瘍で緊急手術したため、お見舞いに行った先のホテルで年を越しているわけだが、出発時に義母家に犬を預けに行ったら、義母は腎臓結石でぐったりしてたという、、、

そういえば夏休みは実母が入院してお見舞いに行ったなと。そんな感じで身内に病気がたてつづけに発生した一年であったが、全員大事には至ってはいないので、そういう意味では去年はラッキーな一年だったのだろう。

健康が一番ということで、今年も健康に気を使って家族で楽しくやっていきたい。それから、言語的にはScala、ガジェット的にはAndroidを一人前にあつかえるようにしたいなぁ。

2011年に読んだ本

去年2010年に読んだ本というエントリを書いたので、今年も読んだ本の中から良かったものを選んでみた。

アジャイルな手法とか、最近のソーシャルネットの手法を効果的に取り込んだ、創薬研究プロセスとかそのためのインフラ構築に興味があるので、ビジネス本はそういうあたりがインスパイアされそうなものを選んであります。

技術書は色々読んだが、Scalaはもう少し追いかけていきたいなぁと思っている。

ビジネス本

ProductName 「新しい働き方」ができる人の時代
セス・ゴーディン
三笠書房 / 1470円 ( 2011-07-01 )


働き方やこどもの教育には関心があるので、今後どういう方向に向かうのかっていうのは興味がある。

ProductName アジャイルサムライ−達人開発者への道−
Jonathan Rasmusson
オーム社 / 2730円 ( 2011-07-16 )


まだ書評を書いてないけど、これは非常に面白いです。賛成できないところもあるけど、それすら「なぜ賛成できないのだろうか?」と考えさせられるので読んでて楽しかった。インセプションデッキと、エレベーターピッチは創薬プロジェクトでも有効だろうなと思うので取り入れてみたいなぁと。

ProductName デザインの骨格
山中俊治
日経BP社 / 1680円 ( 2011-01-29 )


僕はドラッグデザインにはアートの要素が沢山含まれていて楽しい仕事だと思っているし、工業デザインの範疇に入ると考えている。

技術書

技術書は

ProductName パーフェクトJavaScript (PERFECT SERIES 4)
井上 誠一郎
技術評論社 / 3360円 ( 2011-09-23 )


Javascript使いになろうとするなら必読かな。

ProductName 達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
ミック
翔泳社 / 2520円 ( 2008-02-07 )


集合指向言語として考えればSQLの言語仕様は非常に面白い

ProductName Scala実践プログラミング―オープンソース徹底活用
小笠原 啓
秀和システム / 2940円 ( 2011-06 )


Perlでいうところの「モダンPerl入門」またはPythonで言うところの「エキスパートPythonプログラミング」に対応する感じの中級を目指す人向けの本

Scalaはもっと盛り上がってもいいと思うんだけどなぁ。

ProductName Emacs Lispテクニックバイブル
るびきち
技術評論社 / 3129円 ( 2011-11-26 )


Emacs使いは読まねばならん。もう少し自分好みに手を入れられるように積極的にelisp書いていきたいなぁ。

JavaCCでパーサを作ってみる

ふつうのコンパイラをつくろうを読み始めた。

JavaCCを使ったAdderの写経。

The Java Parser Generator

options {
    STATIC = false;
}

PARSER_BEGIN(Adder)
import java.io.*;

class Adder {
    static public void main(String[] args) {
        for (String arg: args) {
            try {
            System.out.println(evaluate(arg));
            }
            catch (ParseException ex) {
                System.err.println(ex.getMessage());
            }
        }
    }
    static public long evaluate(String src) throws ParseException {
         Reader reader = new StringReader(src);
         return new Adder(reader).expr();
    }
}
PARSER_END(Adder)

SKIP: { <[" ","\t","\r","\n"]> }

TOKEN: {
    <INTEGER: (["0"-"9"])+>
}

long expr():
{
    Token x, y;
}
{
    x=<INTEGER> "+" y=<INTEGER> <EOF>
        {
            return Long.parseLong(x.image) + Long.parseLong(y.image);
        }
}

イマイチよくわからないのは慣れてないせいか?パーサだったらRWHのParsecが楽しかった。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


Scalaも調べたらスライド見つけた。あとで試してみようっと。

Console.scalaで出力する文字の色を変える

Console.scalaを読んでいたらANSI color codesをvalで定義してあった

scala> import Console._
import Console._

scala> println(YELLOW + "yellow" + RESET + " and "+ RED + "red" + RESET)

こんなので、色が付くので便利かも

term color

Function.scalaのchainメソッド

Scalaのソースを読んでいます。

Function.scalaのchainメソッドっていうのが面白い。

def chain[a](fs: Seq[a => a]): a => a = { x => (x /: fs) ((x, f) => f(x)) }

/:っていうのはfoldleftのシンタックスシュガーなので、よくあるパターンと対比ささせてみる

scala> (0 /: Seq(1,2,3,4,5))(_ + _)
res9: Int = 15

左からパタパタと倒していく。

つまりSeq[a => a]という関数のシーケンスを次々に適用していくわけですね。

故にチェイン

ProductName Scala実践プログラミング―オープンソース徹底活用
小笠原 啓
秀和システム / 2940円 ( 2011-06 )


ScalaのBooleanのboxing, unboxing

いろいろあってS-99への気力が削がれているので、Scalaの標準ライブラリを読み始めてみた。

Booleanオブジェクトにはbox,unboxメソッドがあった。

scala> Boolean box true
res20: java.lang.Boolean = true

scala> Boolean unbox (Boolean box true)
res21: Boolean = true

ProductName Scalaスケーラブルプログラミング第2版
Martin Odersky
インプレスジャパン / 4830円 ( 2011-09-27 )


Play! Scalaでなにかを作ってみたい。

Stream[<empty>.Int]

こんなのをREPLで動かすと普通に動くんだけど

def sieve(s: Stream[Int]): Stream[Int] =
  Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0)))

val ps = sieve(Stream.from(2))

println(ps.tail.head)

スクリプトで動かそうとすると、型が違うよって怒られます。

$ scala e.scala 
/Users/kzfm/scala/e.scala:4: error: type mismatch;
 found   : scala.collection.immutable.Stream[scala.Int]
 required: Stream[<empty>.Int]
val ps = sieve(Stream.from(2))
                          ^
/Users/kzfm/scala/e.scala:2: error: value % is not a member of Int
  Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0)))
                                             ^
two errors found

これはいったい何なんでしょう?

追記

ubuntuの2.9.1.finalではエラーが出なかったが、mac osxの2.9.1.final (Java 1.5.0_30)だと出た。JDK 1.6.0_26+Scala 2.9.1だと動くという情報を頂いたので、javaのバージョンを上げてみたが、結果は変わらなかった。

よくかんがえてみればREPLで動かせば動くので、javaの問題ではない気はする。

それから以前、よくわからなかったIntじゃなくてScala.Intにしないといけない理由も同じあたりに問題があるような気がしてきた。

残るのはMacのバージョン(10.5)に問題があるのか、環境変数なんかおかしいかくらいしか考えられないが、同じような問題を抱えてるヒトをググってみても全然出てこないのが、自分固有の問題臭を漂わせているわけでなんかボケたことをやっている気がしないでもない。

Scala実践プログラミングを読んだ

本書は、Perlでいうところの「モダンPerl入門」またはPythonで言うところの「エキスパートPythonプログラミング」に対応する感じの中級を目指す人向けの本ですね。なお、Scalaだけでなく色々な言語をかじっていれば楽しく読めるので良いですね。

ProductName Scala実践プログラミング―オープンソース徹底活用
小笠原 啓
秀和システム / 2940円 ( 2011-06 )


一通り読んでみて、5,6,7章が良かった。10章はあとでゆっくり(今継続やってもあれなので)。あと、標準ライブラリのソースも読んだほうがいいなと。

1,2章

文法等の話はコップ本等で補足しながら読まないとよくわからないんじゃないかと。逆に言うと、コップ本の後に読んだ時にきちんと理解しているかどうかの確認としてよろしい。個人的にはコンパニオンオブジェクトとか、補助コンストラクタ、パッケージオブジェクトあたりの説明が役に立った。あと2.8-2.9の新機能紹介。

3章

関数型プログラミングに関して。基本的な内容だったのでサラっと流して最後のほうだけ。

カリー化による部分適用はプレースホルダー構文による部分適用よりも柔軟性が低い

Haskellで引数の順番を入れ替えるflipっていう関数はあるけど、プレースホルダー構文のほうが楽ですね。

4章 他言語との比較

4-1とHaskellとの比較が大変参考になった。それから4-2のStructual SubtypingとNominal Subtypingの話はわかりやすかった。もう少しScalaを使ってみないときちんと理解してるかどうか不安な部分もあるけど。

5章 開発環境

とりあえず、sbtを入れてみた(0.11.0)けど、本のバージョン(0.7.5)のように起動時にディレクトリのスケルトンは作成しないようだ。?ってなったので調べたら0.7系と0.10系は結構変わってるらしい。まぁ、直接ドキュメント読みながら覚えていくからいいかなぁと思った。今、エディタはEmacs使って書いてるけど、そのうちEclipseに移行するのかなぁ、わからんなぁ。テストはなんかプロジェクトを作ったら使うけど今のとこは小さいサンプル動かしてるだけなのであまりそそられてない。

6章 WAF

Play!が面白そうなので只今絶賛いじり中

7章 デザパタ

Javaのデザパタ本をScalaで一回書いておくのがいいかなと思った。それからScalaのためのデザインパターン(Loan,Concept,Cake)は勉強になった。Cakeはいまいち飲み込めてないけど、あとで手を動かして考えてみる。

8,9章

流し読んだ

10章Actorと継続

Actorは軽く流してあったが継続は30ページ超えという。なぜか継続はワクワクしますな。ちゃんと読んでないのであとでゆっくり読む。

多分読んであったほうがよいと思われる本

Scalaをある程度知っているのが前提だと思われるので。

ProductName Scalaスケーラブルプログラミング第2版
Martin Odersky
インプレスジャパン / 4830円 ( 2011-09-27 )


Haskellも基本的なところは抑えつつRWHくらいまで読んでおいたほうが吉ですね。ちなみにプログラミングHaskellは名著なので練習問題も含めて一度は解いておくべきでしょう

ProductName プログラミングHaskell
Graham Hutton
オーム社 / 2940円 ( 2009-11-11 )


ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


Javaは知らんが、個人的にはパーフェクトJavaでも買おうかなと思っている(パーフェクトJavascriptがとても良かったので)。

ProductName パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)
アリエル・ネットワーク株式会社
技術評論社 / 3780円 ( 2009-09-24 )


デザパタ知らないヒトはいないと思いますが、読むならこれですね。

ProductName 増補改訂版Java言語で学ぶデザインパターン入門
結城 浩
ソフトバンククリエイティブ / 3990円 ( 2004-06-19 )


「Scala実践プログラミング」を注文した

先日東京出張の際にパラっとめくってヨサゲだったのだけど、思ったよりでかくて重かったので、改めてAmazonで注文した。

ProductName Scala実践プログラミング―オープンソース徹底活用
小笠原 啓
秀和システム / 2940円 ( 2011-06 )


最近Scalaを触っていて、型で躓くことが多いです。あとエラーの内容がナニを意味してるのかよく分からなくてイラッとさせられることが多いんですが、まぁ踏ん張りどころということで。

今日はScalaプログラミング入門のDwemthyを写経したんだけどエラーが出まくって凹んだ。

ProductName Scalaプログラミング入門
デイビッド・ポラック
日経BP社 / 3360円 ( 2010-03-18 )


ベターJavaというよりはゆるふわHaskellとしてScalaを使う

最近ちょっとScala度が上がっています。螺旋を表すScalaのロゴはDNAのらせん構造をも意味するわけです(超訳)

ここ数年はずっとPythonをメインに使っていて、大抵のことはサクサクかけて便利だし、コード読みやすいしFlaskは楽しいしと、特に不便を感じることはなく使っていたのだけど最近幾つかの要因が重なって心境の変化があった。

其の壱

devquizでPythonの高速化がめんどくさかった(というか出来なかった)こと。PyPyは手元のmacbookでは動かなかったので仕方ないとして、Cythonがクラスにしちゃうとよくわからんよねーと。だったら最初からC/C++で書けばいいんじゃないのかなぁと。

というわけで、Pythonの他に実行速度の速い言語も覚えておきたいなぁと思った(でも、LLっぽくお手軽に書きたいよね)。

其の貳

Haskellは面白いがなかなか身につかない。プログラミングHaskellからReal World Haskellを順調に読み終えて、じゃぁ実際に使うかと思っても、意外なとこで躓くことが多かった。あと、RWHの次に読む本がないというのも独学なヒトにはつらいとこでなかろうか。

もう一つは、仕事で使う用のライブラリとかバインディングが揃ってなくて、職場で使う機会があまりなかったっていうのも大きいかもしれない。

でも関数型プログラミングは楽しいので使いたい。

其ノ參

そろそろ、新しい言語を身につけたいよねーと。出来れば関数型で。

そしてScalaが気になりだした。

最初、Scalaを触ったときは、REPLの起動が遅いし型の定義とかめんどくさそうだし、javaはあまり好きじゃないし、自分は使わないわなぁと投げ出していたのだけど、RWH読み終えて型の素敵さに目覚めた上で再度Scalaを触ったらイイかもと思い始めた。javaのライブラリも使えるので仕事用のコードも書ける。

素数のリストだってHaskell風味に書けるし、Maybeに似た感じのOptionっていう型だったある。

def sieve(s: Stream[Int]): Stream[Int] =
   Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0)))

val ps = sieve(Stream.from(2))

というわけで、ちょっとScalaで書こうかなと思っている。

書籍

プログラミングHaskellは名著。問題も含めて一度は読むべき

ProductName プログラミングHaskell
Graham Hutton
オーム社 / 2940円 ( 2009-11-11 )


Real World Haskellは型の素晴らしさを学んだ。と共にHaskell難しいのうと感じた。そしてちょっと挫折した。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


Scalaプログラミング入門は楽しい。でも色々端折ってて疑問点が出まくりなのでコップ本は必須かな。

ProductName Scalaプログラミング入門
デイビッド・ポラック
日経BP社 / 3360円 ( 2010-03-18 )


バイブルになるか?

ProductName Scalaスケーラブルプログラミング第2版
Martin Odersky
インプレスジャパン / 4830円 ( 2011-09-27 )


おまけ

ScalaってベターJavaなのかなぁ? Perl,Python,RubyとかのLLのヒトが関数型プログラミング+静的な型付けを求めて入るほうが自然な気がするんだけどなぁと、自分がそうなのでそう思うだけなのかなぁと。