2012年7月25日水曜日

scalaの変態的ライブラリ util-eval

Scalaのライブラリに util-evalというステキなものがあります。

Twitter社が提供するライブラリです。

実際に使い方を見てみましょう。

まず、build.sbtに以下を追記。


libraryDependencies += "com.twitter" % "util-eval" % "5.2.0" withSources()
resolvers += "T repo" at "http://maven.twttr.com/"

するとこういう事ができます。


val ret = (new com.twitter.util.Eval).apply[(Int => Int)]("{(x:Int) => x*2}")

ここで定義された"ret"を、"ret(2)"のように呼び出してやれば、{(x:Int) => x*2}が実行されてInt型の4という結果が帰ってきます。


なにが起きているのかというと、util-evalは、文字列として定義されている関数をコンパイルし、それを結果として返す、というライブラリなのです。


コード中に文字列で関数を定義してもたいして意味はありませんが、たとえば、configファイルとか、DBの項目に関数を定義できるという、実に変態的なライブラリであります。


当然、こういう事をするとせっかく静的型付けな言語を使っているのにもかかわらず、実行時エラーのリスクは高まりますし、都度コンパイルされるのでパフォーマンスは目に見えて劣化します。

乱用すると幸せになれないのですが、たとえば、ゲームのアイテムマスタにアイテムの効用を実装として突っ込むとか、消費税率の計算をconfigに式として記述するとか、そういうステキなことができます。

使いどころを見極めれば非常に強力なライブラリです。

2012年7月22日日曜日

今年の夏コミで薄い本デビューします

DevLOVE Pubの第三弾。『ライトニング・トークス 驚異のプレゼン さあ、プレゼンに目覚めよう』という薄い電子書籍に寄稿させていただきました。
http://www.devlove.org/devlove-pub/the_presentation_secrets_of_lightning_talks

少し振り返ってみると、ぼくのLT歴は2010年9月のエンジニアライフのオフ会以来、こんな感じになっています。



2010年09月 エンジニアライフオフ会
2010年12月 エンジニアライフオフ会
2011年06月 Twitter4jコードリーディング
2011年07月 OSC京都
2011年08月 playframework勉強会 (30分)
2011年08月 Javaらへん読書会
2011年08月 ITコミュニティ夏祭り (トークセッション & LT)
2011年09月 playframework勉強会
2011年11月 やきに駆動勉強会
2011年12月 忘年会駆動勉強会
2012年02月 鍋駆動勉強会
2012年02月 勉強会初心者のための勉強会 (30分)
2012年04月 TechReaders
2012年04月 プログラマズナイト
2012年04月 鹿駆動勉強会
2012年05月 オープンセミナー岡山懇親会
2012年06月 エンジニアライフオフ会
2012年07月 playframework勉強会(30分)
2012年07月 神戸らへんScala(30分)

合計で19回、LTやらセッションやらで発表を経験しているわけですが、こういった活動からライトニングトーカーとして認めていただけたのか、今回お声かけいただきました。

内容については、「LTをすると世界が変わるよ」というお話を少しセンシティブに書かせていただきました。タイトルは『人生を劇的に豊かにするいちばん簡単な方法』
ブログとか、コラムとかとは少し違った作風を意識して書いたので、読んでいただけると嬉しいです。

電子書籍ということで、表紙も何種類かパターンがあり、ぼくの表紙も作っていただきました。

コミックマーケット82 3日目 (2012/08/12 日曜日) 東地区“U”ブロック-04b DevLOVE Pubブースにて頒布を予定しています。
お立ち寄りの際は是非!!

2012年7月17日火曜日

自分のツイートが2,800RTされてるとき、ぼくのTLはこうなっていた

昨日、テレビを観ていて、何の気なしに感じたことをツイートしてみた。
別に特段の思想があったわけでもなく、単にテレビ番組を揶揄するツイート。こんなものは今にはじまったことではない。

ただ、いつもと違うことが起きた。

ツイートした後、PCを閉じ、一時間ほど本を読んでいた。

再びPCを開くと、Growlがやたらと先ほどのツイートのRT通知をポップアップする。
FavStarを見てみると……。

まさかの600RT…。

えっ。

そこから、RT爆撃を受けることになる。

1時間に600RT。その勢いはさらに増してくる。
常に、誰かがRTをして、それが通知されてくる状況。

ぼくのデスクトップは終始こんな感じだった↓

止まらないGrowl通知。しばらくして、夜フクロウ(Twitterクライアント)がGrowlごと落ちた。

ここまでRTが拡散すると、公式RTだけでなく非公式RTまで大量に寄せられるようになる。まだ、なにがしかのコメントが入っていれば、意見として読もうかとも思うのだが、


とか


などというクソの役にも立たないツイートが面識のないアカウントから数十件押し寄せ、クライアントのMentionタブが使い物にならなくなる。

しかたなく、その日は諦めて寝ることにした。

翌朝、起きがけの頃はポツポツRT通知が来るものの、まぁ平穏。
ようやく落ち着いたか、と胸をなでおろす。

出社後、会社PCでSaezuriを起動。
世の中が稼働しはじめると、またもやRTが活発化しはじめる。

Saezuriは、TLにRTされたツイートも表示される。
会社PCのSaezuriは、夕方頃まで常にこんな状態。


どうやら、ついっぷるのトレンドに載ったらしい。



こうなってくると、不思議なことが起きる。
問題となっているツイートだけでなく、どこで掘り起こしたのか、ぼくの昔のツイートまでRTされる始末。

あげく、こんなものまで。


いや、これ、1月のツイートだし。 今更RTされてもやらねーよ!!!

あと、IT系を多くフォローしているぼくとしては、普段まったく絡まないクラスタの人からのマジレスなども寄せられる。
小沢一郎の支持者を名乗る人からのReplyは、華麗にスルーさせていただいた。
このツイートに政治的な意図は皆無なのでw

正直、ほぼ丸一日ぼくのTwitterはコミュニケーションツールとして機能しなくなった。
普段絡んでるフォロワーさんからのReplyは全部拾えないし。

と、いうわけで、


今現在のRT数は2,812。638Fav。
この2日で50人フォロワーが増えた。

なかなかワンダーな体験だった。

2012年7月15日日曜日

変態で学ぶ副作用

変態アドベントカレンダー in Summer(http://atnd.org/events/29918) 初日です。

今回は、変態を例にとって副作用について考えてみましょう。

一般的に副作用というと、お薬を連想しますね。
風邪薬を飲むと眠くなるとか、熱を抑える薬だけどその代わり少し吐き気がするかもしれないとか、そういうことです。

プログラミングにおいてもこの副作用というものは存在します。
wikipediaによると、「ある機能がコンピュータの(論理的な)状態を変化させ、それ以降で得られる結果に影響を与えることをいう」とあります。

副作用のあるメソッドは、その状態によって結果が変わるため、呼び出しには注意が必要なのです。例を見てみましょう。

まずは副作用のあるプログラムの場合。


Hentaiクラスがあります。この変態は、case classとなっており、クラスを生成するタイミングでSかMかの状態を列挙型で受け取ります。

slapメソッドを実行すると、この変態に対して平手打ちを実行するわけですが、ご覧のとおりクラスを生成する際に決定される状態により、結果が変わります。

val h = Hentai(SMKind.M) と宣言してから h.slap を実行すると、この変態は「もっと!!!」と変態じみた結果を返します。
一方、 val h = Hentai(SMKind.S)と宣言してからh.slapを実行すると、この変態は「てめぇ、なにするんだ!」とあろうことかマジギレしてしまいます。

このHentaiクラスの宣言部が、呼び出し部から離れたところで行われていた場合、この変態に平手打ちをかましたときに喜ばれるのか、キレられるのか、わかりません。

これでは怖くて、とてもじゃないですがこの変態に気軽に平手打ちなどできません。

では下記のコードではどうでしょうか。

このパターンでは、HentaiオブジェクトにそれぞれS用の平手打ち、M用の平手打ちが別々に定義されています。これらの結果は、状態に依存することはありません。

我々は気軽に、Hentai.slapToMと実行してこの変態を喜ばせてあげることができます。

これが副作用のないプログラムです。安心ですね。

と、いうことで明日は「真っ赤なレモン」さんですね。
よろしくお願いします。

2012年7月14日土曜日

第3回playframeworkで発表してきました

第3回 playframework勉強会に参加してきました。

ぼくは今のところ皆勤賞で参加させていただいています。

第1回の様子はこちら
第2回の様子はこちら

まず、会場のリクルートメディアテクノロジーラボさんのセミナールームが素晴らしかったです。
プロジェクタや、各島に置かれた液晶ディスプレイ、UST設備、WiFiなど、大変快適に過ごすことができました。どうもありがとうございます。


第2回のときも思ったのですが、主催の@ikeike443 さんの気配りが素晴らしく、進行などもたいへんスムーズですごく居心地のいい勉強会でした。
スタッフの皆さん、どうもありがとうございました。

勉強会については、@shinyaa31さんがtogetterにまとめてくださっています。
http://togetter.com/li/337676

USTの録画もあります。
http://www.ustream.tv/recorded/23977723

詳しい内容はこれらを見ていただくとして、簡単に感想を。

・@ikeike443さん「playアップデート」
play2.0についての概要のお話。中の人だけあって、play1.3やplay2.1についてのお話も聞くことができ、面白かったです。

・@i2keyさん「Play2.0+JavaでAPIサーバを開発しているiPhoneアプリの紹介 」
会場提供くださった、リクルートメディアテクノロジーラボの方。前日寝てないそうで、スピリチュアルな話なのだとかw
もともと「Excel方眼紙で自動生成してバーン」な世界からスピード感を求められるサービスの世界に来られたとのことで、親近感が湧きました。
紹介されていたアプリも素晴らしく、面白い発表でした。
印象に残った言葉「小規模開発は一人なのでクラスの責務とかどうでもいい」
素晴らしいですww

・@tototoshi さん「play2.0 + scalaについて」
play2.0 + scalaについて、デメリットを中心に紹介された発表。
あるあるネタ満載でステキでした。
勉強会というと結構「この技術すばらしい!スゲー!!」という観点の発表が多いので、こういう切り口はすごく勉強になります。よかったです。

・@kara_d さん「2.0Javaのオススメと、1.2からのアップグレード」
play1.xでの開発紹介。具体的なモジュールなど紹介していただきました。知らないことが多くて興味深かったです。
play2.0でGroovyTemplateが使える件は、ちょっと試してみようと思います。

・@daiksy 「乙女ゲーを支える技術」
ぼくの発表です。USTでは2:08:00頃からはじまります。


Play勉強会 第3回
View more presentations from Daisuke Kasuya

少しデモでとちってしまって、そこで軽くパニクって建てなおすのに苦労しましたw
少し練習不足だったようで、予定より10分も早く終わったので、たぶんネタをなにか一つ飛ばしてるとおもいますww

過去の勉強会は、単に勉強している立場としての参加でしたが、今回は実際にplayを使ってサービスインを一回やりとげた状態での参加でしたので、みなさんとお話させていただく情報の密度など、かつてないほど濃く感じました。

また関西でもplay勉強会を開催したいと思いますので、よかったらご参加ください。

また、今回発表した「乙女ゲーを支える技術」ですが、
「神戸らへんScala」という勉強会で、少しScalaよりに内容をアレンジして紹介させていただく予定なので、よかったらご参加ください。
http://atnd.org/events/30635

全体の感想としては、やはり翻訳に携われていたり、日本におけるplayの活動の中心となっている方が多く参加されていたので、たいへん内容の濃い勉強会でした。
かといって敷居が高いということもなく、リラックスして参加できる雰囲気なので、すばらしい勉強会だったと思います。

P.S.
勉強会後のビアバッシュで、いろんな人に「鹿駆動勉強会」ってなんだったんですか?と聞かれましたw

2012年7月1日日曜日

新しいMacBook Proがやってきた


発売日に注文していた新しいMacBook Proがようやく届いた!!

■ぼくが買ったスペック


・15インチ MacBook Pro Retinaモデル
・2.3GHz クアッドコアIntel Core i7
・メモリ 8GB
・フラッシュストレージ 256GB

■データ移行について


これまでMacBook Air(Late 2010)を使っていたが、それに比べるとまぁあたりまえだけど重い。ただ、Airを買う前に使っていたGatewayのラップトップと比べると圧倒的に軽いし、このあたりは買う前に充分検討したポイントなので問題なし。

Macからのデータ移行は初体験。Windows機のデータ移行は何度か経験しているから、あのノリで半日仕事だなと覚悟していたのだが、美容院に髪を切りに行っている間に勝手に終わってた。
具体的にはAirのデータをTime Capsuleに保存していたので、そこからの移行だったのだが、ダイアログに従って何度かクリックして放置してたら、Airの環境が何から何まで完璧に移行されててビビった。

あまりに完璧に移行されてるものだから、新しいMacに移行したという実感があまりわかないほど。

一点だけ問題があって、ぼくはターミナルでzsh使ってるのだけど、おそらくその影響で最初はターミナルが起動しなかった。
ここに書いてある通りに、zshにパスを通してやったらあとは問題なく動いている。
http://oshiete.goo.ne.jp/qa/5893430.html

■Retinaスゲー


新しいMBPの一番のポイントはなんといってもRetinaディスプレイだろう。
2880x1800の解像度は圧巻である。夜フクロウのツイートが遠くからでも読める!!

ただ、いくつかのアプリがRetina未対応で、フォントがもやっとしてる。ぼくが確認したのは以下のアプリ。

・Google Chrome (ただしCanaryだったら綺麗になってる不安定だけど)
・Google日本語入力の変換ダイアログ
・IntelliJ IDEA

あとはSafariやChrome Canary使ってても、Webサイトの画像とか、ニコニコ動画のフォントとか、ところどころもやる箇所はある。まぁそのうち綺麗になっていくでしょうな。
※追記:ニコニコ動画はZeroにしたら綺麗になった

iPhoneで撮った動画とか、普通に綺麗に見られるからビビる。
iPadより低い解像度のMacとかもう無理だわーって感じ。

■熱い


これはちょっと予想外だった。
ファンは凄く静かなのだが、本体が熱い。

手を置く場所はそれほど熱を帯びないので、机の上に置いて使うのはそれほど気にならないのだが、膝の上に置いてると膝が超絶熱い。。。


Airはこれほど熱くなることはなかったので、ラップトップコンピュータとしてはちょっとこれは減点要素かもしれない。まぁ15インチのコンピュータを膝に置くというのがそもそもどうかとも思うけど。


■オレたちの戦いはこれからだ!


あとは外に持ち運んだりしたときにどんな感じか気になるけれど、概ね新しいMacは気に入ってる。
なんか気になることとかこれから出てきたら、また都度まとめようと思う。