2012/01/01 07:04:31

叔母が脳腫瘍で緊急手術したため、お見舞いに行った先のホテルで年を越しているわけだが、出発時に義母家に犬を預けに行ったら、義母は腎臓結石でぐったりしてたという、、、
そういえば夏休みは実母が入院してお見舞いに行ったなと。そんな感じで身内に病気がたてつづけに発生した一年であったが、全員大事には至ってはいないので、そういう意味では去年はラッキーな一年だったのだろう。
健康が一番ということで、今年も健康に気を使って家族で楽しくやっていきたい。それから、言語的にはScala、ガジェット的にはAndroidを一人前にあつかえるようにしたいなぁ。
2011/12/30 18:05:23
去年2010年に読んだ本というエントリを書いたので、今年も読んだ本の中から良かったものを選んでみた。
アジャイルな手法とか、最近のソーシャルネットの手法を効果的に取り込んだ、創薬研究プロセスとかそのためのインフラ構築に興味があるので、ビジネス本はそういうあたりがインスパイアされそうなものを選んであります。
技術書は色々読んだが、Scalaはもう少し追いかけていきたいなぁと思っている。
ビジネス本
働き方やこどもの教育には関心があるので、今後どういう方向に向かうのかっていうのは興味がある。
まだ書評を書いてないけど、これは非常に面白いです。賛成できないところもあるけど、それすら「なぜ賛成できないのだろうか?」と考えさせられるので読んでて楽しかった。インセプションデッキと、エレベーターピッチは創薬プロジェクトでも有効だろうなと思うので取り入れてみたいなぁと。
デザインの骨格
山中俊治
日経BP社 / 1680円 ( 2011-01-29 )
僕はドラッグデザインにはアートの要素が沢山含まれていて楽しい仕事だと思っているし、工業デザインの範疇に入ると考えている。
技術書
技術書は
Javascript使いになろうとするなら必読かな。
集合指向言語として考えればSQLの言語仕様は非常に面白い
Perlでいうところの「モダンPerl入門」またはPythonで言うところの「エキスパートPythonプログラミング」に対応する感じの中級を目指す人向けの本。
Scalaはもっと盛り上がってもいいと思うんだけどなぁ。
Emacs使いは読まねばならん。もう少し自分好みに手を入れられるように積極的にelisp書いていきたいなぁ。
2011/11/18 19:06:53
ふつうのコンパイラをつくろうを読み始めた。
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が楽しかった。
Scalaも調べたらスライド見つけた。あとで試してみようっと。
2011/10/26 20:45:04
Console.scalaを読んでいたらANSI color codesをvalで定義してあった
scala> import Console._
import Console._
scala> println(YELLOW + "yellow" + RESET + " and "+ RED + "red" + RESET)
こんなので、色が付くので便利かも

2011/10/26 04:52:54
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]という関数のシーケンスを次々に適用していくわけですね。
故にチェイン
2011/10/21 21:15:48
いろいろあってS-99への気力が削がれているので、Scalaの標準ライブラリを読み始めてみた。
Booleanオブジェクトにはbox,unboxメソッドがあった。
scala> Boolean box true
res20: java.lang.Boolean = true
scala> Boolean unbox (Boolean box true)
res21: Boolean = true
Play! Scalaでなにかを作ってみたい。
2011/10/20 05:59:35
こんなのを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)に問題があるのか、環境変数なんかおかしいかくらいしか考えられないが、同じような問題を抱えてるヒトをググってみても全然出てこないのが、自分固有の問題臭を漂わせているわけでなんかボケたことをやっている気がしないでもない。
2011/10/16 15:26:02
本書は、Perlでいうところの「モダンPerl入門」またはPythonで言うところの「エキスパートPythonプログラミング」に対応する感じの中級を目指す人向けの本ですね。なお、Scalaだけでなく色々な言語をかじっていれば楽しく読めるので良いですね。
一通り読んでみて、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をある程度知っているのが前提だと思われるので。
Haskellも基本的なところは抑えつつRWHくらいまで読んでおいたほうが吉ですね。ちなみにプログラミングHaskellは名著なので練習問題も含めて一度は解いておくべきでしょう
Javaは知らんが、個人的にはパーフェクトJavaでも買おうかなと思っている(パーフェクトJavascriptがとても良かったので)。
デザパタ知らないヒトはいないと思いますが、読むならこれですね。
2011/10/09 21:09:47
先日東京出張の際にパラっとめくってヨサゲだったのだけど、思ったよりでかくて重かったので、改めてAmazonで注文した。
最近Scalaを触っていて、型で躓くことが多いです。あとエラーの内容がナニを意味してるのかよく分からなくてイラッとさせられることが多いんですが、まぁ踏ん張りどころということで。
今日はScalaプログラミング入門のDwemthyを写経したんだけどエラーが出まくって凹んだ。
2011/10/05 23:08:50
最近ちょっと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は名著。問題も含めて一度は読むべき
Real World Haskellは型の素晴らしさを学んだ。と共にHaskell難しいのうと感じた。そしてちょっと挫折した。
Scalaプログラミング入門は楽しい。でも色々端折ってて疑問点が出まくりなのでコップ本は必須かな。
バイブルになるか?
おまけ
ScalaってベターJavaなのかなぁ? Perl,Python,RubyとかのLLのヒトが関数型プログラミング+静的な型付けを求めて入るほうが自然な気がするんだけどなぁと、自分がそうなのでそう思うだけなのかなぁと。