読者です 読者をやめる 読者になる 読者になる

「もっと自在にサーバを使い倒す 業務に役立つPerl」著者の木本裕紀さんが吉祥寺.pm9に参加!

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

先日の吉祥寺.pm9には、「サンプルコードPerl入門」や、「もっと自在にサーバを使い倒す 業務に役立つPerl」でおなじみの木本裕紀さんが参加されました。かなり以前からお名前だけは存じていたのですが、お誘いしたところ参加頂きました。

懇親会で「もっと自在にサーバを使い倒す 業務に役立つPerl」を持参した人にはサインも!

早速買った方も!

次回の吉祥寺.pm10のトークを快諾頂いたので、「もっと自在にサーバを使い倒す 業務に役立つPerl」を持ってきてサインをもらおう!

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

吉祥寺.pm9が終わりました

kichijojipm.connpass.com

前回から少し間が空いてしまいましたが(予定では10月開催のハズでした)、無事に開催できました。

rejectcon会場での与太話から始まった吉祥寺.pmですが、所謂カンファレンス形式の吉祥寺.pmが9回、特定テーマ&全員参加型のKichijojipm-miniが11回と、2年間で20回のイベントをやってきました。凄いですね、継続は力。

今回もトーク4本、LT6本の枠を用意して、「詰め込みすぎか?」「そもそも集まるのか?」とドキドキしましたが、無事に全ての枠が埋まりました。

今回はぜひトークを聞いてみたい人として、以前から気になっていたひさいちさんにトークをお願いしたところ、快諾頂き、最近話題になっていた「エンジニアとしての立ち居振る舞い」というテーマで喋って頂きました。

hisaichi5518.hatenablog.jp

初参加のt.amanoさんによる会社のウェブサイトリニューアルまでの試行錯誤を、さまざまなネタと共にLTで喋って頂きました。

次回は少し趣向を変えて、「Perl入学式参加者、その後」をテーマにやってみたいと思っています。お楽しみに!

キチスカ002が終わりました

kichijojiscala.connpass.com

もっともヘビーな第3章を読み始めました。おそらくまだまだ続くと思います。

次回は少し趣向を変えて、普通のScalaの入門をやります。

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

「オブジェクト指向設計実践ガイド」を読んだ

だんだん読書ブログ化してきましたが、「オブジェクト指向設計実践ガイド」という本を読みました。

rubyをベースに、良いオブジェクト指向設計を実践するための考え方を紹介する、という本です。

全体として最も特徴的なのは、最初から正解となるコードを紹介するのではなく、セカンドベストというか、決して最適では無いけど、現状それを判断する材料も無ければこのぐらいで止めておくのも選択肢の一つです、という感じで、コードの成長の余地を残した説明が多い点です。

最初から完璧な、理想的な設計だけでコードを書かれても、「そうゆうものか?」と思ってしまい、今ひとつ納得感が得られないものですが、このやり方だとかなり納得感を引き出すことに成功していると思います。

あと、やはり最初から完璧な設計はできないので、試行錯誤しながら、少しずつ良くしていく、という所も良いところですね。

依存関係が少なく、適切に抽象化された設計を実践するために、非常に参考になる本です。

吉祥寺.pm9を開催します

kichijojipm.connpass.com

前回から少し時間が空いてしまいましたが、吉祥寺.pm9を開催します。

ついに2周年ということで、皆様の参加をお待ちしております!

今回テーマを「Perl!」と書いてみましたが、まぁ精神的というか、象徴としてのPerlというか、そんな解釈で自由に参加してみて下さい。3周年に向けた第一歩です!

キチスカ #002を開催します!

kichijojiscala.connpass.com

少し間が空いてしまいましたが、第二回を開催します。

今回も、「Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド」の読書会という形式でやりますが、LTや環境構築とか、基本的な文法の話とか、気軽に聞いてみて下さい。

あらかじめ、こんなことが聞きたい・話したいことが有る、という人はイベントページのコメント欄に書いておいて頂けると準備します!

「Scala関数型デザイン&プログラミング」を読み進める - 第1章、第2章 -

「Scala関数型デザイン&プログラミング」のexerciseを解き進めるための環境準備をだいぶ書き換えて、読み進める上での準備作業を全部網羅してみたので、改めて「Scala関数型デザイン&プログラミング」を最初から読み進めるためのガイドっぽいことを書いてみます。

今回は第1章と、第2章までです。

第1章 関数型プログラミングとは

第1章はおもに「副作用の排除」について書かれています。

冒頭のコードが実際に実行できない(外部のAPIに依存している、という設定)なのと、コード事例自体があまり副作用の排除によるメリットが見えづらい(テスタビリティが上がったことを実感しづらい)コードになっているので、理解しづらいところがあります。

本当は、「コーヒーの代金を課金する」という本質的な機能はそのままで、その後の色々な機能拡張(まとめて払うとか)のときに重複が上手く排除できたことを示せると良いのでしょう。しかし、そこまでやると紙面も使いすぎてしまうので、かなり急ぎ足の解説になっています。なので、まずはざっと読んで、先に進める方が良さそうです。

実際に、外部のAPIや、再現性の低い機能(時刻とか、乱数だとか)などを対象にテストで苦労したり、随時に行った機能追加でまったく重複したコードを書いた経験が無いと、メリットが理解しづらいかもしれません。

第2章 Scala関数型プログラミングの準備

以降、本を読んだだけでは分からなさそうな箇所をポイントを絞って解説していきます。

2.1 速習:Scala言語

Scalaという言語の解説が始まります。わりとコンパクトに、分かりやすくまとまっていますが、objectキーワードで作られるシングルトンの解説がポイントです。

Javaではデザインパターンの一つとして使われているシングルトンがScalaでは言語仕様として用意されています。機能としては書かれていますが、あまり存在理由というか、そのメリットについては書かれていないので、デザインパターンなどの解説を(実装方法は別として)読んだ方が理解し易いでしょう。

2.2 プログラムの実行

scalacscalaコマンドを使ってコードを実行する方法が説明されています。sbtからの実行方法については、下記の記事を参考にしてみてください。

「Scala関数型デザイン&プログラミング」のexerciseを解き進めるための環境準備

2.4 高階関数:関数に関数を渡す

高階関数という用語が難解なイメージを抱かせますが、Java8ではラムダ式LL系言語やJavaでも無名関数と、実際には割とよく使われている概念です。

自分がいままで使ってきた言語でどう実現されているか、振り返ってみると分かりやすいでしょう。

再帰も同様に、まずは自分が使ったことのある言語で試してみると良いでしょう。

exercise 2.1

アルゴリズム系では定番の、フィボナッチ数列を求める関数の作成です。

関数のひな形は、以下のファイルに書かれています。

exercises/src/main/scala/fpinscala/gettingstarted/GettingStarted.scala

初期状態では下記の通りのコードになっています。

object MyModule {
...
  def fib(n: Int): Int = ???
...
}

見慣れない???は正しいScalaの構文で、コードが未定義であることを示すメソッドです。実行するとNotImplementedErrorの例外が送出され、実行時エラーになります。

まずはこの???を削除して、解答となるコードを書いていきます。回答はanswerの同名のファイルに書かれています。

ここでもフィボナッチ数列と、Scalaにおける再帰を一度に理解しようとすると混乱してしまうので、まずは既に理解している言語で再帰を使って記述してみることをお勧めします。

コードを書いたら、以下の手順で実行します。サンプルコードではMyModuleというobject内に定義するようになっているので、fpinscala.gettingstartedパッケージをインポートして、MyModule.fibという形式で関数を呼び出します。

$ ./sbt
> project exercises
> console
scala> import fpinscala.gettingstarted._
scala> MyModule.fib(10)
res1: Int = 55
scala> MyModule.fib(0)
res2: Int = 0

2.6 型に従う実装

カリー化や、関数合成と言った重要なキーワードが出てきますが、この段階ではexerciseをどんどん解いていって、先に進める方が良さそうです。

ただし、これらのキーワードはのちのち重要になってきますが、凄くさらっと説明されているので、先に進む上ではこの本以外のソースから定義や使い方を調べておいた方が良いでしょう。

おわりに

あくまで自分が初めて読んだときにつまづいた所を中心に書いていったので、当然別のバックグランドの人は別のところでつまづくと思います。

次回は第3章からスタートです。

Scalaではありませんが、Haskellベースの関数型プログラミングの入門本が増補改訂されたので、ぜひ読んでみたいところです。