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

#kanasancoffee に参加した

CoffeeScript Node.js

参加した。CoffeeScriptは名前と概要だけは知っているよ程度で、そこそこ手間をかけて環境を整えたわりになにもしていなかったり、腐ったかんじになっていたのでとてもいい機会に勉強会にいけてよかったとおもう。

CoffeeScriptの文法について

導入的な内容。ざっと公式のWebページを読んだ程度だったのだけど、改めていろいろおもしろいところがあったり。

基本的にはPythonに近いイメージ。インデントでブロックを表現したり、リスト内包表記っぽいのがあったり。無名関数がとてもいけている (Pythonみたいに複数の文が書けないなんてことはない) し、気持ち悪いグローバル関数 (len()とか) がないので、むしろbetter Pythonという印象だった。これでNode.jsなんて実行環境があるのだから猫も杓子もNode.js言うわけだなーと納得した。

最初に文法を読んだときは、たとえば改行文字がカンマのかわりに置けたりするのが気持ち悪かったのだけど、ちょっと考えを改めた。

matrix = [
  1, 0, 0
  0, 1, 1
  1, 0, 1
]

こういうコードが綺麗に書けて嬉しいというのはちょっと驚き。

jsonlike =
  name: 'aereal'
  url: 'http://kerare.org/'

このようなコードも書ける。もしも改行文字がカンマの代わりに置けないと行末にダサいカンマがぶらさがる。Pythonに似た小綺麗な文法であるからこそカンマが気になるので、仕様だけ聞くと気持ち悪く感じるそれも実際のコードを見ると唸らされる。

Node.js on Windows

Mac + Linuxなのであんまり関係ないかなーとおもっていた (失礼) のだけど、ところがどっこいおもしろい話が聞けた。

最近のCygwinはいいかんじになってきていて、1.7からUTF-8がデフォルトになっていて日本語の扱いもいいかんじになっているらしく、また端末エミュレータもmintyなどなど充実してきているらしい。いいですね。やんごとなき理由でWindows上で作業するときにはCygwinのことを積極的に考えてあげようとおもいます。

あと、Joyent MachineはSolarisで運用されているらしく、JoyentもSolarisを離れた優秀な技術者たちを大量に雇用しているらしいとのこと。

CoffeeScriptを使ってTitaniumでiPhoneアプリを作る

HTML + CSS + JSでiPhone/Androidアプリを開発できるプラットフォームであるTitanium Mobileは便利だけど、ロジックの部分を担うJSをCoffeeScriptで書いてさらに生産性を上げようという話だった。

コード例とか見る限りめんどくさいこと一切無しで書けるのがよさげなかんじだった。

まだCoffeeScriptは新鋭ということで現場ではまだまだ積極的に受け入れられ難いらしく、とりあえずJSでプロトタイプを書いてからCSで……みたいなのもあるらしい。

iOS/Androidアプリ開発にいまひとつ興味が湧いてこなかった (そのためにiPod touchとDesire HDを買ったのに……) のだけど、Titanium MobileとCoffeeScriptならプロトタイプを書きやすそうでいいなーとおもった。

Node.jsは怖くない!

なんかタイトルが変わっていた。

説明もそこそこに、coffee-scriptとjasmine-nodeで実際にBDDでコードを書いてみようという内容だった。

いろいろハマってけっきょく時間内にはコードを書き終えられなかった。というかつまらないSyntaxErrorを出しまくってひどいかんじだった。なかなかネットに繋がらなくてググれないしまったくひどかった。というか周りに人がいるのだし聞けばよかった。

さっき、テストの通るコードをやっと書けたのでそれについて別にエントリを書く。

CoffeeScriptの言語仕様について

残り時間いっぱいでid:yharaさんを中心にCoffeeScriptの言語仕様リーディングが催された。

splat
f = (a, b...) -> [a, b]
f 0 # -> [0, []]
f 0, 1, 2, 3 # -> [0, [1, 2, 3]]

いわゆるsplat, 可変長引数。これはまあだいたいどの言語にもある。(JSにはなかった、っていうか、めんどいから javascript arguments でggrks)

g = (x, y..., z) -> [x, y, z]
g 0 # -> [0, [], undefined]
g 1, 2 # -> [1, [], 2]
g 3, 4, 5 # -> [3, [4], 5]

賢い! そして便利!! Ruby 1.9とほぼ同じ挙動になっている。 *1

existential operator

定義チェックとnullガードを兼ねた演算子。

[0..10].map? (i) -> i * 2

クエスチョンマークがそれ。おもしろい。

interpolation

Pythonに良く似たCoffeeScriptだけど、ここはRubyにインスパイアされている。

"Today is #{new Date}"

懇親会?

コーラをたらふく飲んだ、骨溶ける。

KPT

Keep
  • 勉強会に参加する
  • いろんな人と話す
  • 1の情報量を期待する質問を受けたら1の情報量で答えることは必須、目標としては2

生まれてはじめて参加した勉強会イベントだった。はてなIDとかTwitterアカウントとか知ってる人も居て、顔を合わせることもできたので非常によかった。

雑談の中での質問も、聞かれていることに答えるのは当たり前で、そこから話を拡げてもらえるような要素をいくつか撒くことができたらさらによい。自分以外のすべての人は、自分にないものを持っている。いろんなことを喋ってもらい、またいろんなことを喋ってみるとおもしろい。

Problem
  • トラブルが起きることを常に考えておく
  • ちゃんとお礼を言おう
  • 次からは計画に余裕を持って
    • お金
    • 時間

WiMAXが繋がらなかったり、MacBookがかなり熱を持ったりしてわりとあたふたしていた。事前に予想できるトラブル (WiMAXが圏外だとか、MacBookが熱くなるだとか!) は前もって対処しておく。

WiMAXが繋がらなかった関係でだれかのオープンなネットワークに繋げさせていただきました、すっかりお礼を言うのを忘れていました……。どうもありがとうございます。

寝坊して30分弱ほど遅れた。あと梅田で少し迷った。はじめて行く場所ならなおのこと時間に余裕をもって行動しよう。あと、現金の手持ちが少し足りなくて id:hitode909 さんにお金を貸していただいた。ありがとうございます。

Try
  • 発表する

勉強会の趣旨と自分の強みがマッチしないとなかなかむずかしいことではあったりするのだけれども、そういうのをうまく考えながら今度は発表する場に立つ。

最後に

主催者の id:ujihisa さん、スピーカーのみなさん、そして参加者のみなさん、おつかれさまでした、ありがとうございます。

*1:`g 0' のコードはRuby 1.9だとArgumentErrorを吐く。JavaScriptとの言語仕様の違い