OStatusの仕様をかいつまんで適当に和訳するよ
OStatus 1.0 Draft 2 http://ostatus.org/sites/default/files/ostatus-1.0-draft-2-specification.html
概要
OStatusは異なるソーシャルネットワーク上のユーザーが、互いにフォローできる仕組みを提供します。
この仕様は関連するいくつかのプロトコル(PubSubHubbub, ActivityStreams, Salmon, Portable Contacts, and Webfinger)からなります。
OStatusは分散更新通知やマイクロブログのための最小の仕様です。
RSSやAtomフィードを配信するサービスであれば、OStatusを利用することができます。
たとえば、旅行サイト、イベント通知サイト、Wiki、写真共有システム、ソーシャルニュースサイト、ソーシャル音楽サイト、podcastサーバー、ブログ、バージョン管理システム、その他の汎用的なソーシャルサービスなど。
1.ライセンス
(原文参照)
2.表記・用法
(原文参照)
3.用語定義
- User
- サービスの利用者またはbot。
- Group
- ユーザーの集まり。
- Update
- Userの状態や行動の変更通知。Userが直接通知するか、またはシステム的に自動生成される。
- Feed
- 最近のUpdateのリスト。たとえば、UserやGroupのすべてのUpdate、検索条件にマッチするUpdateなど。
- Publisher
- Updateを通知するUserまたはGroup
- Subscriber
- Publisherからの通知を受け取るUser。いわゆるFollower。
- Follow
- PublisherからのUpdateを受け取ること。
- Publisher Server
- PublisherがUpdateを通知する際に使用するWebサーバー。
- Subscriber Server
- SubscriberがUpdateを受け取る際に使用するWebサーバー。
4.要件
この仕様で解決しようとする要件・問題領域は以下の通り。
- UpdateはUTF-8のプレーンテキスト。
- UpdateはHTML。
- Updateは複数の添付ファイルを含む。
- UpdateはほかのUpdateへの返信になる。(twitterのreply)
- UpdateはほかのUpdateのコピーや転送になる。(twitterの公式・非公式retweet)
- Updateはトピックに関連付けられる。(twitterのハッシュタグ)
- Updateは受信者を指定できる。(twitterのmention)
- Updateは位置情報を持てる。
- 誰でもUpdateに「お気に入り」マークをつけたりはずしたりできる。
- Userはユニークな識別情報を持つ。(グローバルユニーク、という意味かと)
- Userは名前や所在地、ニックネーム/ユーザー名、略歴、関連するURLなどのプロフィールをもてる。
- Userはアバターを設定できる。(プロフィール写真程度の意味っぽい)
- SubscriberはPublisherのUpdateをすぐに受け取れる(ほぼリアルタイム、プッシュ通知が欲しい)。
- Publisher ServerはあるPublisherのSubscriberのリストを、識別情報とプロフィールも含めて保持できる。
- Subscriber ServerはあるSubscriberのPublisherのリストを、識別情報とプロフィールも含めて保持できる。
- Publisher ServerはPublisherのUpdateに対する返信のリストをすべて保持できる。
- Publisher Serverはコピーや転送されたPublisherのUpdateをすべて保持できる。
- Publisher Serverは「お気に入り」マークされたPublisherのUpdateをすべて保持できる。
- 各サーバーは、Updateに含まれるコンテキストやメタデータを、テキストのパースをすることなく取得できる。(位置情報とかのメタデータをテキストに無理やり埋め込むんじゃなくて、ちゃんとスキーマを定義してメッセージのやり取りをしようということ)
- SubscriberはGroupや検索結果、タグに関連するUpdateなど、複数の更新元からのUpdateを受け取れる。(タグ=twitterのハッシュタグ的なもので、User以外のものもフォローできる、という意味っぽい)
5.対象外
以下のような内容はOStatusでは規定しない。
- マイクロブログの文法
- ハッシュタグの記法(#)とか、@によるリプライとかは規定しない。そもそもそういったメタデータについて、OStatusではテキストのパースが不要なように、スキーマを規定する。
- クライアントAPI
- ユーザーとサーバー間のプロトコルやAPIについては規定しない。Webでもメールでもなんでもいい。
- プライベートメッセージ
- twitterのDMのような1対1のメッセージ送受信については規定しない。
- ソーシャルグラフ
- User間の関連情報のデータ表現や保持方法については規定しない。ただし、関連情報を検索する際のプロトコルについては規定する。必要であればFOAFかXFNに従う。(曖昧・・・まだ規定してないっぽい。)
6.Updateの表現
Atomの仕様で定義されたActivitiesを使う。Updateはいわゆる"Post"のことで、型としては"Note", "Status", "Comment"となる。各サーバーはこれらの標準の型をサポートすべきで、その他の型のサポートは任意とする。
位置情報はGeoRSSの仕様に沿ってエンコードし、activity内のオブジェクトとして表現される。
添付データはactivityに含まれる形で表現される。
Updateが何かに対するreplyであった場合、Atomの"in-reply-to"の仕様に沿って表現される。
タグ情報はAtomのカテゴリーとして表現される。
OStatusはActivity Streamsに以下の2つの拡張を定義する。
7.Userの表現
ユーザーはURIで識別される。
ユーザーは適切な型のactivityオブジェクトとして表現される。通常は"Person"となる。
追加の情報が無ければ、付加情報の無いActivityデータとして、AtomやRSSフィードの"Post"として表現される。この場合、フィードのauthor要素には<email>か<uri>のいずれか一方を持っている必要がある。
Subscriberは以下の順序でURIを探す。
PublisherはプロフィールのURLをURIとして提供する場合があるが、そのURLが将来的に変わらないものとしなければならない。
UserはHTTP(s)で参照できて、HTMLで表現されていて、そのUserのFeedへのリンクを含んだプロフィールのURLを持つべき。プロフィールのURLは link[@rel=alternate,@type=text/html] の形式でActivityのsubject, actorなどの項目として表現すべき。さもなければ、HTTP(s)のURIで表現すべき。
プロフィール情報を追加するために、authorエレメントやactorエレメントがPortable Contacts形式のデータとして拡張可能になっています。
- preferredUsername
- ログイン名/ユーザー名
- displayName
- フルネーム。author/name や actor/title の値。
- note
- 説明文。
- address/formatted
- 現在の所在地。
- urls[type=home]/value
- ユーザーの紹介ページ。Activityのactorエレメントに必要となる link[@rel=alternate,@type=text/html] とは異なる。
Subscriberはmicroformatsなどのほかの形式で提供する場合があるが、非推奨とする。
8.Feedの表現
FeedはActiveStreamsのActivityと同様とする。
すべてのFeedはsubjectエレメントを持つべき。UserのFeedは1つのsubjectかauthorを持つべき。GroupのFeedはそのGroupをあらわす1つのsubjectを持つべき。
すべてのFeedは link[@rel=hub] 形式でPubSubHubbubのエンドポイントURLを持たなければならない。(Updateをを購読するために必要となる)
すべてのFeedは link[@rel=salmon] 形式でSalmonのエンドポイントURLを持つべき。(replyやnotificationを受け取るために必要となる)
9.Updateの配布
Publisher ServerはPubSubHubbubプロトコルにより、更新情報をSubscriberにプッシュ通知する。
複数のSubscriverが同じSubscriber Serverを使って同じPublisherの更新通知を受け取る場合、Subscriber Serverは1つのPubSubHubbub接続を使用するべき。
10.Userへの通知
サーバーはSalmonプロトコルを使って別のUserやGroupに対してイベントを通知する。サーバーはユーザーがPubSubHubbubが使用可能でFeedを受け取れているとは仮定してはいけない。
通知の送信元と送信先はSubscriberとPublisherの関係を持っているとは限らない。
重要なイベントは以下の通り。(細かく書いてあるけど省略)
- Attention
- Reply
- Subscribe
- Unsubscribe
- Join
- Leave
- Favorite
- Unfavorite
- Repeat
11.探索・検索
UserやGroupへのFeedから、それを購読したり通知を送るのに必要な情報を取得できるようにする。プロフィールのデータ、SalmonプロトコルのエンドポイントURL、PubSubHubbubのエンドポイントURLがすべてFeedの中にエンコードされる。
Feedの所在を探索する方法は以下の3通りある。
- ユーザーが直接入力する。
- ユーザーのXRDファイルに含まれる Link/Rel=http://schemas.google.com/g/2010#updates-from エレメントから。
- プロフィールページのHTMLに含まれる link[@rel=alternate,@type=application/atom+xml] 形式のエレメントから。
プロフィールページのURLを取得する方法は以下の2通りある。
- ユーザーが直接入力する。
- ユーザーのXRDファイルに含まれる Link/Rel=http://schemas.google.com/g/2010#updates-from エレメントから。
ユーザーのXRDファイルを取得する方法は以下の2通りある。
- nickname@example.comのようなWebfingerのacct: URIから
- プロフィールページのHTTPヘッダから
ユーザーのXRDドキュメントは、そのユーザーのSubscription Serverに対して購読の初期化処理を行うためのURLテンプレートを、http://ostatus.org/schema/1.0/subscribe に添った形でのリンクを提供する場合がある。URLテンプレートはどのアカウントを購読するか、という引数を1つとる。
12.Usage scenarios
12.1.Subscriber ServerからのFeedの取得
- SubscriberがSubscriber Serverに取得したいFeedを伝える。(URL, Webfinger account, Feedのリストからの選択)
- SubscriberがFeedのURLを見つける。
- SubscriberがすでにFeedを取得していたら、6へ。
- Subscriber ServerはHTTPでFeedをダウンロードする。
- Subscriber ServerはFeedの中からPubSubHubbubのURLを見つける。PubSubHubbubのURLが無ければ、Feedの取得は終了。ポーリングするのはOStatusの範疇じゃない。
- Subscriber ServerはPubSubHubbubの仕組みでFeedを取得する。(プッシュ通知を受ける状態にする、ということっぽい。このへんはPub...の仕様を要確認)
- Subscriber ServerはSalmonプロトコルでFeedに対するコメントをPublisher Serverにプッシュ通知する。(ここ良くわからない・・・)
12.2.Publisher ServerからのFeedの取得
- SubscriberはWebFingerアカウントをPublisher Serverに提供する。(クエリパラメータかPOSTで)
- Publisher ServerはWebFingerを通じてそのUserに対するURITemplateを探す。
- Publisher ServerはURITemplateをPublisherのFeedのURLで置き換える。
- Publisher Serverは先ほど置き換えたURLにリダイレクトさせる。
- 12.1の1に戻ってFeedの取得を行う。
13.参考資料
- [LRDD] Hammer-Lahav, E., “Link-based Resource Descriptor Discovery,” March 2010.
- [RFC2119] Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” BCP 14, RFC 2119, March 1997 (TXT, HTML, XML).
- [RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., “The Atom Syndication Format,” RFC 4287, December 2005 (TXT, HTML, XML).
- [RFC4685] Snell, J., “Atom Threading Extensions,” RFC 4685, September 2006 (TXT).
- [Webfinger] “the WebFinger protocol.”
- [activitiesinatom] Atkins, M., Recordon, D., Messina, C., Keller, M., Steinberg, A., and R. Dolin, “Atom Activity Extensions (Draft),” March 2010.
- [activityschema] Atkins, M., Recordon, D., Messina, C., Keller, M., Steinberg, A., and R. Dolin, “Atom Activity Base Schema (Draft),” March 2010.
- [georss] “GeoRSS-Simple.”
- [poco] Smarr, J., “Portable Contacts 1.0 Draft C,” August 2008.
- [push] Fitzpatrick, B., Slatkin, B., and M. Atkins, “PubSubHubbub Core 0.3 -- Working Draft,” February 2010.
- [salmon] Panzer, J., “The Salmon Protocol,” February 2010.
ActiveMQを使ってみる
Apache ActiveMQ(http://activemq.apache.org/)はオープンソースのJMX実装です。
ActiveMQを使うことで、非同期メッセージングサービスの基盤をJVM上で動かすことができます。
導入
ActiveMQのサイトにあるチュートリアルドキュメントは若干古いらしく、現在の最新版(5.4.1)とは微妙に異なります。
- ActiveMQのバイナリディストリビューションをダウンロードし、展開。http://activemq.apache.org/download.html
$ wget http://ftp.riken.jp/net/apache//activemq/apache-activemq/5.4.1/apache-activemq-5.4.1-bin.tar.gz $ tar xzf apache-activemq-5.4.1-bin.tar.gz
- ひとまず起動。
$ cd apache-activemq-5.4.1 $ bin/activemq start
- ログの確認。
$ tail data/activemq.log 2010-10-12 15:23:17,639 | INFO | jetty-7.0.1.v20091125 | org.eclipse.jetty.util.log | main 2010-10-12 15:23:18,185 | INFO | ActiveMQ WebConsole initialized. | org.apache.activemq.web.WebConsoleStarter | main 2010-10-12 15:23:18,396 | INFO | Initializing Spring FrameworkServlet 'dispatcher' | /admin | main 2010-10-12 15:23:19,164 | INFO | ActiveMQ Console at http://0.0.0.0:8161/admin | org.eclipse.jetty.util.log | main 2010-10-12 15:23:19,664 | INFO | Initializing Spring root WebApplicationContext | /camel | main 2010-10-12 15:23:26,272 | INFO | Connector vm://localhost Started | org.apache.activemq.broker.TransportConnector | main 2010-10-12 15:23:30,693 | INFO | Camel Console at http://0.0.0.0:8161/camel | org.eclipse.jetty.util.log | main 2010-10-12 15:23:30,882 | INFO | ActiveMQ Web Demos at http://0.0.0.0:8161/demo | org.eclipse.jetty.util.log | main 2010-10-12 15:23:30,967 | INFO | RESTful file access application at http://0.0.0.0:8161/fileserver | org.eclipse.jetty.util.log | main 2010-10-12 15:23:31,354 | INFO | Started SelectChannelConnector@0.0.0.0:8161 | org.eclipse.jetty.util.log | main
Jettyで http://localhost:8161/ に何か起動してますが、管理用のWeb Consoleだそうです。
$ netstat -an | grep 61616 tcp 0 0 :::61616 :::* LISTEN
MQ自体はデフォルトで61616で待ち受けてます。
- 止める。
$ bin/activemq stop
続きはまた。
突然ですがOStatusについて
OStatusという仕様について調べてみました。
OStatusについてはこちら。http://ostatus.org/
何者か?
「分散型ソーシャルネットワークを実現するための仕様」のようです。
僕はFacebook、あなたはmixiみたいな状況で、Facebookにしか登録していない僕があなたのmixiフォトをフォローできちゃうよ、というWebサービスの垣根を越えたソーシャルサービスを実現し、
加えて、フォロー、フォロられの仕組みや、フォロワーへの通知処理を分散処理できるようにするよ。
ということのようです。詳しくはこのあたりを。http://shelterroom.net/?q=node/95
どんな仕様か?
最初のURLにも書いてありますが、OStatus自体は以下のようないくつかのプロトコルのベースとした仕様です。
WebFinger
プロフィールを提供するAPIの仕様です。ID管理とか認証とかは関係なく、単に「あなたはだあれ?」というリクエストを解決してくれるもののようです。
詳しくはこのあたりを。http://d.hatena.ne.jp/ritou/20091018/1255798184
PubSubHubbub
PublisherとSubscriberの間にHubを置いて、Publisherからの更新通知(メッセージ投稿とかreplyとか)をSubscriberにプッシュ通知するためのプロトコルです。
詳しくはこのあたりを。http://labs.unoh.net/2009/08/what-is-pubsubhubbub.html
Salmon
これがどうも良くわからないですが、PubSubHubbubを使ったリアルタイムコメント通知のためのプロトコルのようです。
詳しくはこのあたりを。http://www.salmon-protocol.org/
ActivityStreams
RSSフィードのように、フォローしている対象の更新通知を受け取るための仕様のようです。
詳しくはこのあたりを。http://activitystrea.ms/
実装は?
http://status.net/ という実装があります。というか、これを作るにあたっての仕様がOStatusとして定められたようです。
このStatus.netを使えば、フォローシステムを備えたソーシャルWebサービスが簡単に(??)作れて、OStatusの仕様に沿ったサービスと連携できるというわけです。
HotSpot server VMのバグ
JDK1.4.2からJDK1.6.0にあげたら、こんなエラー出た。
# # A fatal error has been detected by the Java Runtime Environment: # # java.lang.OutOfMemoryError: requested 2147483664 bytes for Chunk::new. Out of swap space? # # Internal Error (allocation.cpp:215), pid=26889, tid=1083394400 # Error: Chunk::new # # JRE version: 6.0_21-b06 # Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode linux-amd64 ) # An error report file with more information is saved as: # /usr/local/jakarta-tomcat-5.0.30/bin/hs_err_pid26889.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp #
GCのログを追う限りではメモリが足らないわけではなく、突発的に大量のメモリが必要な処理をしたわけでもなく、突如2Gbyteのchunkをアロケートしようとして落ちるという現象。(物理メモリの空きがほとんど無くて、swapは1Gしかないので・・・)
とりあえず再起動しても、数時間後に同じように落ちる。しかも要求してるchunkのサイズは決まって2147483664 bytes(2^31 -16)。なんかおかしい。
VM起動時の引数は以下のとおり。(一部抜粋)
-Xms700m -Xmx700m -Xnoclassgc -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:GCPauseIntervalMillis=140
G1GCなんてファンキーなものを使っていたので、これをやめて以下のようにしてみましたが(さまざまな事情により数字が色々変わってます)
-Xss512k -Xms720m -Xmx720m -Xmn320m -XX:SurvivorRatio=32 -XX:TargetSurvivorRatio=20 -XX:MaxTenuringThreshold=32 -XX:PermSize=80m -XX:MaxPermSize=80m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseParNewGC -XX:ParallelGCThreads=2
それでも同じように落ちる。G1GCは関係なかったです。
で、調べてみるとどうやらHotSpot server VMのバグで、JITコンパイラが原因らしいとのこと。*1
というわけで、32bitのJDKを入れて -client でclient VMを使うようにしたら、問題は発生しなくなりました。なりましたが、client VMでずっと動かすのはちょっと。。。
スレッドダンプからJITコンパイラがコンパイルしようとしていたクラスとメソッドの情報が出るので、
Current CompileTask: C2:2054 ! my.package.name.ClassName.methodName(parameter...)Lmy.package.name.ReturnType; (809 bytes)
この情報に基づいて、JITコンパイルから該当メソッドを除外するオプションを指定。
-XX:CompileCommand=exclude,my/package/name/ClassName,methodName
で、64bit server VMに戻したところ、無事稼働中。バグを踏んだメソッドの何がいけなかったのかは。。。不明です。
あと、Sun、というかOracleのバグ情報を探そうとしたんですが、bugs.sun.comがものすごく不親切かつ検索がタイムアウトするので断念。たぶんJDK1.6.0 update 18あたりから既に発生していたようです。要注意。
Scala + Eclipse + Maven on Windows
そういえば、単に開発環境を整えるだけでも一苦労するので、社内の開発環境構築手順としてまとめた内容を加筆修正して晒すことにします。
想定してる環境は以下のとおりです。
- Windows XP
- 32bit
- 2ギガ以上のメモリ(重要)
Java入れる
JDKをダウンロードしてインストールします。
- Oracleのサイトに行って、環境にあった最新のJDKをダウンロード。いまのとこJDK1.6.0 update 21。
- ダウンロードした jdk-6u21-windows-i586.exe 的なやつを実行してインストール。
- 環境変数JAVA_HOMEにJDKのインストールパスを設定。通常は C:\Program Files\Java\jdk1.6.0_21 とか。
- 環境変数PATHの先頭に %JAVA_HOME%\bin を追加*1
ここまでできれば、コマンドプロンプトからjavaが実行できるはずです。
> java -version java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)
JDK1.6.0 update 21のb06だと、Eclipse Helios(3.6)がうまく動かないので、b07が必要です。
update21のリリース直後にインストールした人はb06になっているので、一度JREとJDKを両方アンインストールして、再度インストールしなおしてください。
さらについでに言うと、b07はWindows版だけだそうで、Linux版とSolaris版はb06でOKみたいです。
update22出せよわかりにくいから、という話ですが。
Maven入れる
Mavenをシェルから実行できるようにします。
- Apache Mavenのサイトに行って、最新のzipをダウンロード。いまのとこ2.2.1。
- ダウンロードした apache-maven-2.2.1-bin.zip 的なやつを、ローカルに展開。C:\App\apache-maven-2.2.1 とか。
- 環境変数 M2_HOME に展開したパスを設定。
- 環境変数 PATH の先頭に %M2_HOME%\bin を追加。
- 環境変数 MAVEN_OPTS に以下の値を設定。
- Dfile.encoding=utf-8 -Xmx1024m
ここまでできれば、コマンドプロンプトからmavenが実行できるはずです。
> mvn -version Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900) Java version: 1.6.0_21 Java home: c:\Program Files\Java\jdk1.6.0_21\jre Default locale: ja_JP, platform encoding: MS932 OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"
Scala入れる
Scalaをシェルから実行できるようにします。Eclipseだけでやるなら不要ですが、REPLとか使うのにあったほうがいいです。
- scala-lang.orgに行って、scala-2.8.0.final.zip をダウンロード。
- ダウンロードしたzipをローカルに展開。C:\App\Scala\2.8.0.final とか。
- 環境変数 SCALA_HOME に、展開したパスを設定。
- 環境変数 PATH の先頭に %SCALA_HOME%\bin を追加。
ここまでできれば、コマンドプロンプトからscalaが実行できるはずです。
> scala -version Scala code runner version 2.8.0.final -- Copyright 2002-2010, LAMP/EPFL
Eclipse入れる
Eclipseを実行できるようにします。日本語化とかすると動く気がしません。PleiadesとかAll-In-Oneとか入れると安定しません。余分なものを入れると、何か問題があっても原因が良くわからなくなるので、オススメしません。
会社ではGalileo SR2(3.5.2)を使ってますが、ここではHelios(3.6)で説明します。安定してるかどうかはわかんないです。
- Eclipse.orgに行って、Eclipse Helios (3.6)の Eclipse IDE for Java EE Developers をダウンロード。
- ダウンロードしたzipをローカルに展開。C:\app\Eclipse\3.6en_scala とか。
- eclipse.iniを以下のように書き換える。
-startup plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503 -product org.eclipse.epp.package.java.product --launcher.defaultAction openFile --launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m --launcher.defaultAction openFile -vm C:\Program Files\Java\jdk1.6.0_21\bin\javaw.exe -vmargs -Dosgi.requiredJavaVersion=1.5 -Xss1M -Xms40m -Xmx756m
以下の2行を -vmargs の前に追加。
-vm C:\Program Files\Java\jdk1.6.0_21\bin\javaw.exe
最後のメモリ関連のVM引数を追加・変更してあります。
-Xss1M #なくてもいいですが、StackOverflowErrorとか出たら適当に増やしてください -Xms40m -Xmx756m #デフォルトで384mになってますが、適当に増やしてください
Scala IDE入れる
EclipseでScalaを使うためのプラグインを入れます。scala-ide.orgに何種類かupdate siteが載ってますが、ここではHelios + Scala 2.8.0.final + リファクタ機能付きのupdate siteを使います。
m2Eclipse入れる
EclipseでMavenを使うためのプラグインm2Eclipseを入れます。
- Scala IDEと同じように、以下のupdate siteからプラグインをインストール&Eclipse再起動。
- 再起動後、メニューの"Window" -> "Preferences"から"Maven" -> "Installations"を開く。
- "Add"ボタンを押して、先ほどMavenをインストールしたディレクトリを指定する。C:\App\apache-maven-2.2.1 とか。
- 画面右下に"Updating indexes"とか出るので、消えるまで気長に待つ。
とりあえずこれで開発準備ができたはず。
第一回 Scala座@名古屋
名古屋で開催された第一回Scala座に参加してきました。
http://scalaza.com/?%C2%E81%B2%F3+Scala%BA%C2
『プログラミング言語「Scala」を肴に盛り上がる、年に1回のScalaのイベント』との名目で @keisuke_n さんの主催で行われました。
まずは @keisuke_n さんはじめ、スタッフの方々に本当に感謝です。すごく楽しいイベントでした。
内容については、Ustreamに録画されたものが残っているようですので、そちらを。
LTの最後のやつは必見です。
http://www.ustream.tv/channel/%E7%AC%AC1%E5%9B%9Escala%E5%BA%A7
さて、発表内容もそうだったんですが、お昼の席でも懇親会でも、OCamlとF#の話が頻繁に出てきて驚きました。
そういうクラスタの人が集まったのかなぁ、という気もしますが、世の中も変わっていくんだよなぁ、という気もしました。
本編で聞いたのか懇親会で聞いたのか忘れてしまいましたが、「Scalaを知っているとF#にも入りやすいよ」とか「OCamlをやることでScalaのことが良く分かると思うよ」という話が印象的でした。
というわけでOCamlの勉強をしようと思います。
あと、東京方面から来ていた人たちで集まって、ホテルでgdgdした挙句、渋谷Scala勉強会(9/8に第2回だそうです)にも参加させていただくことになりました。よろしくお願いします。
http://atnd.org/events/7695
ちなみに、拙いながら事例紹介でLTさせてもらいました。資料は↓です。
https://docs.google.com/leaf?id=0B3gzkyf0Dd_5M2QzMGRkOTUtYTJlNC00YWZhLTg4ODgtOTlmYTg1M2NiNWU3
諸般事情により、当日の資料とは一部異なりますが、そこらへんは察してやってください。
ボクらのScala 次世代Java徹底入門
「ボクらのScala 次世代Java徹底入門」をようやく読み終えました。
「実質的に」3冊目の日本語Scala本で、かなり平易な記述の入門書です。これまでの2冊「Scalaスケーラブルプログラミング」と「Scalaプログラミング入門」は難易度高めでしたが、こちらはプログラミング初心者でも読めるような作りになってます。
言語が広く普及していくために、こういう入門書って大事ですよね。非常によい本だと思います。
内容はScala2.7.7を対象にしていて、一部Actorのコードなどが2.8ではうまく動かなかったりします。
著者の浅見さんがたぶん一番書きたかったであろう、DSLとActorについての章が最後の30ページくらいにありました。ここはもっと突っ込んだ内容が読みたいなーと思うところです。
- 作者: 浅海智晴
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2010/06/25
- メディア: 単行本
- 購入: 5人 クリック: 231回
- この商品を含むブログ (20件) を見る