Hatena::ブログ(Diary)

cimada-ism このページをアンテナに追加 RSSフィード

2011-08-28

[scala][勉強会] Scala会議#1に参加してきました。

Scala会議とは

恐らく日本で行われているScalaの勉強会の中でもっとも大きい規模のものと

なったのではないでしょうか。

以下のURLで録画が見れます。

http://www.ustream.tv/channel/scala-kaigi

以下、僕がメモった事や感じた事をまとめていきます。

イントロ : @j5ik2o さん

http://www.slideshare.net/j5ik2o/scala-9039767

オラクル青山センターにて行われたのですが、いきなりJavaDisったのでビビりましたw

あとPHPはいつもの扱いな感じ。

会の方針として、「内輪で盛り上がらない」というのを全面に押し出していたのが

とても好感がもてました。

sbt徹底解説 : @xuwei_k さん

http://www.slideshare.net/KenjiYoshida/scalakaigi1sbt

sbtとは

ビルドツールの一種で、sbt自体がScalaで作られている。

sbtには以下の2系統ある。今後は0.10系統を使っていくのがいいだろう。

  1. 0.7系統
  2. 0.10系統

SBTを使う理由として、早いというのももちろんあるが、akka, scalaz, scalate, unfiltered等多くのプロジェクトがSBTを利用しているという事実がある。

jarファイル1つだけなので用意から起動が楽チン

バージョンの設定が超簡単
set scalaVersion := "2.9.0-1"

とするだけでコンパイルに使用されるScalaのバージョンが2.9.0-1になる。

sbtコンソールはコマンドの補完が聞いたり履歴を保存してくれたりするので便利。

注意点

以下をちゃんと設定しないと結構落ちるらしい。

  1. CSMClassUnloadingEnabled
  2. MaxPermSize
IDEとの連携

開発、デバッグIDEから行い、ビルドはsbtでやるのが正しいみたい。

タイムラインを見ていると

IDEからデバッグしたい時は、sbt起動時に「-Xdebug」を指定するとEclipseからリモートでバッグできる。とのお告げが。

TODO:後で試してみよう。

設定ファイルのDSL

よく使われる、ライブラリ依存定義の構文

val twitter4j = "org.twitter4j" % "twitter4j" % "2.2.4"

というのは

val twitter4j = sbt.toGroupID("org.twitter4j").%("twitter4j").%("2.2.4")

と等価。

「%」というメソッドが存在しており、scalaメソッド呼び出しの為の「.」を省略できるのでこういったDSLが書けるんですね。

UnfilteredとかFinagleの話。そしてScalaの闇について : @yuroyoro さん

http://dl.dropbox.com/u/261418/20110828_scalaconf01_introducing_unfiltered_and_finagle/index.html#0

いきなりウキャス語で解読不能w

Unfiltered

https://github.com/n8han/Unfiltered

http://unfiltered.lessis.me/

非同期I/Oを対象としたツールキット。静的コンテンツは特に考えられてない。

以下のようなところで使われている。

  1. Remember The Milk
  2. Novus
  3. Trust Metrics

このプレゼン資料もUnfilteredのPicture-showというのを用いて作成されている。

コンセプト

パターンマッチング

関数合成

疎結合コンポーネント

組み込みサーバ

Unfilteredを使うと素早く・強力なサーバが書ける。

Finagle

https://github.com/twitter/finagle

twitter検索APIのバックエンドに使用されている。

JVM / NIO / Netty という環境で動作するもの。

プロトコルには依存しないので以下ようなものが使える。

  1. HTTP/HTTPS
  2. HTTP streaming (Comet)
  3. Thrift
  4. memcached
  5. ... more

Futureをやり取りする作りになっているので、すべての処理はFutureのチェーンとして実装され、型安全に非同期処理が保証される。

node.jsでは開発者が"気をつけ"なければならない。

まとめ

Scalaは並行や同時実行がと相性が良い!

日本人エンジニアは英語に怯んでアーリーアダプターまかせになっているので、文句を垂れ流す前に自分らがアーリーアダプターになって情報発信していこう!

周りの環境のせいにして、自分が努力をする事を怠るな。

Scalaz - とある型クラスのライブラリ : @kmizu さん

http://scalaz.github.com/scalaz/

Scalazでは☆とか★とか∧とか∨とかのUnicode記号が多用されている!

Scalazとは?

Scalaの標準ライブラリにないアレコレを集めた便利パッケージ(Haskellian御用達)

I/O モナドまである。

Option / Listなんかも便利に拡張されているので使うと幸せになれるかも。

サンプルいっぱい

https://github.com/scalaz/scalaz/tree/master/example/src/main/scala/scalaz/example

とりあえず以下の2行をimportしとけば使える。

import scalaz._; // 小文字のscala

import Scalaz._; // 大文字のScala

List#toNel

NotEmptyListを返す。

NonEmptyListを使えば空リストでは無いことが保証されるのでhead, tailが必ず成功する。

reduceLeft, reduceRightでも同様に確実に成功する。

Option#orZero

OptionのorZeroは型ごとのゼロ相当の値(Zero[T] traitをextendsしたもので定義した値)が返る。

いろんなZero

http://scalaz.github.com/scalaz/scalaz-2.9.0-1-6.0.1/doc/index.html#scalaz.Zero$

i.orZero は ~i とも書ける。

Option#getOrElseの短縮

opt.getOrElse(false) と書くところを opt | false と書ける。

直感的!!

Zipper

純粋関数イテレータ。要素更新もO(1)で高速にできる。

ParatialApply

パラメータの部分適用(カリー化)ができる。

まとめ

Scalaは仕様がしっかりしてるので公式から仕様書を読むべき。

日本語でまとまった情報が欲しい場合は以下のURLへ。

https://sites.google.com/site/scalajp/


全体のまとめ

LTまでまとめる力がなかったのでセッションだけの振り返りで。

全体を通してすごくクオリティの高い発表者の方々でとても刺激を受けました。


個人的に斬新だったのが「スイーツ募金」というもの。

このお金で買い出しに行ってセッションの間のおやつやジュースに充てるというものでした。合理的ですね。


Scala会議は今後も継続して行っていく方針なので、これからScalaを始める方は要チェックですね。

内輪ネタで盛り上がらない!宣言をしている勉強会なのでとても安心して参加できると思います。


ただこの会を通して一つ残念だったのが女性エンジニアが一人もいないこと!

そのせいで会場がややスメリーな感じでした><


次回は女性Scalalianが参加してくれるといいなー。スイーツタイムあるし。

2011-05-11

[ネタ] モテるC++女子力を磨くための4つの心得

1. あえてCのキャストを使ってみる

あえてCのキャストを使うようにしましょう。そして勉強会などの場で好みの男がいたら話しかけ、わざとらしくキャストを実行してみましょう。そして「あ〜ん! このキャスト本当にマジでチョームカつくんですけどぉぉお〜!」と言って、男に「どうしたの?」と言わせましょう。言わせたらもう大成功。「キャストとか詳しくなくてぇ〜! ずっとコレ使ってるんですけどぉ〜! 使いにくいんですぅ〜! ぷんぷくり〜ん(怒)」と言いましょう。だいたいの男は新しいキャストを使いたがる習性があるので、C++の新しい4つのキャストを使っているはずです。

そこで男が「新しいキャストにしないの?」と言ってくるはず(無闇にreinterpret_castを勧める男はその時点でガン無視OK)。そう言われたらあなたは「なんかなんかぁ〜! 最近新しい5つのキャストが人気なんでしょー!? あれってどうなんですかぁ? 新しいの使いたいんですけどわかんなぁぁああい!! 私かわいそーなコ★」と返します。すると男は「4つのキャストでしょ? 5つは出てないよ。本当に良くわからないみたいだね。どんなのが使いたいの?」という話になって、次の休みの日にふたりでキャスト選びのペアプロができるというわけです。あなたのC++女子力が高ければ、男があなたをdynamic_castしてくれるかも!?

2. template <>を使うとモテる

「多重継承」や「演算子の多重定義」をする際に便利な「template <>」を使うと、C++の男性ユーザーは「なんかこのテンプレート便利だなぁ」や「特殊化してあげたいかも」と思ってくれます。よくできたテンプレートは必需品になるので「template <>」を多用することによって、男性はあなたを無くてはならない女の子と勘違いしてくれるのです。そういうコードにするとエラーが発生した時にコンパイルエラーメッセージが意味不明になりますが気にしないようにしましょう。

3. とりあえず男には「えー! なにそれ!?  知りたい知りたーい♪」と言っておく

懇親会などで男が女性に話すことといえばBoostなどのライブラリC++0xの話ばかり。よって、女性にとってどうでもいい話ばかりです。でもそこで適当に「へぇーそうなんですかぁ〜?」とか「よくわかんないですけどすごいんですねぇ」と返してしまうと、さすがの男も「この女Boost::lambdaも知らないな」と気がついてしまいます。ダメ女だとバレたら終わりです。そこは無意味にテンションをあげて、「えー! なにそれ!?  知りたい知りたーい♪」と言っておくのが正解。たとえ興味がないコードでも、コンパイラと実行環境でその場を乗り切りましょう。実行しながらにコードを読んでくれる女性に男は弱いのです。

いろいろと話を聞いたあと、「〇〇は〇〇で、〇〇が〇〇なんですね! 覚えたぞぉ! メモメモ!」とコメントすればパーフェクト。続けて頭に指をさしてくるくる回しつつ「シーアウト!! ・・・ エンドエル!エンドエル!」と言って、「どうしたの?」と男に言わせるのもアリ。そこで「私の標準出力に吐き出しているのでありますっ☆」と言えばC++女子力アップ! そこでまた男は「この子生粋のC++erかも!?」と思ってくれます。私はFC++歴もC++/CLI歴もありませんが、こういうテクニックを使えば知識がない私のようなバカ女のほうがモテたりするのです。男は優越感に浸りたいですからね。

4. ペアプロではクラスをnewできない女をアピールせよ

男とペアプロに入ったら、真っ先に手近なクラスを探して「あーん! 私これnewできないんですよねぇ〜(悲)」と言いましょう。するとほぼ100パーセント「どうして? 純粋仮想関数があるの?」と聞かれるので、「純粋仮想関数はないしnewしたいけどnewできないんですっ><」と返答しましょう。ここでまた100パーセント「純粋仮想関数がないのにどうしてnewできないの?」と聞かれるので、うつむいて3〜5秒ほど間をおいてからボソッとこう言います。「……だって、……だって、newしたら殺さないとメモリリークが発生しちゃうじゃないですかぁっ! インスタンスちゃんかわいそうですぅ! スタックなら平気なのにぃぃ〜(悲)。私が殺さないといけないんですよ……」と身を震わせて言うのです。

その瞬間、あなたのC++女子力がアップします。きっと男は「なんて優しい天使のようなコなんだろう! 絶対に開放してやるぞ! コイツは俺の女だ!」と心のなかで誓い、あなたに惚れ込むはずです。意中の男と付き合うことになったら、そんなことは忘れて好きなだけスマートポインタを使って大丈夫です。「newできないんじゃなかったっけ?」と言われたら「大丈夫になった」とか「慣れた」、「スマートポインタなら参照カウンタがなくなれば開放されるから平気」と言っておけばOKです。


探したけどC++女子力がなかったのでついカッとなって書いた。

公開はするけど後悔はしない。

いろいろツッコミどころがあるけどご愛嬌。

2011-03-18

赤十字社に寄付をした。

ささやかながら寄付をしました。

f:id:cimadai:20110318201545p:image


個人でできることは少ない。。