Boost.勉強会に参加してきました!

12/12に開催されたBoost.勉強会に参加してきました。
当日は会場も広く、非常にいい環境だったと思います。
ネット接続については、wifiに繋ぐのに乗り遅れて、外向けのセッションを張れなくなってしまったので(ルータの上限数?)
N82テザリングしてつぶやいたりしてました。
後半つぶやきが減ってるのは、ソフトバンクにセッションを切断されまくってたからですw
では、当日のつぶやきと感想をそれぞれのセッションについて書いておきます。

10:10〜11:00:Boostライブラリ一周の旅(faith_and_brave)

つぶやき

lexical_castってConversionライブラリの一部だったのか。というかlexical_cast以外の型変換系があったことを知らなかった #boostjp
Formatは便利。Qt使ってるとQString.arg()でにたことできるからあんまり最近使わないけど #boostjp
Function Typesは試しに実装してみると楽しそう #boostjp
FusionってLoki::Typelist+実行時にうにゅうにゅみたいなやつだったんだ。使った事ないな #boostjp
Intervalなんてあるんだ。今作ってる計測系のソフトで使えそう #boostjp
後ろに座りすぎてスライド見えないなー。移動しようかな #boostjp
お!Operatorsなんてあるのか! C#だとやってくれるのにめんどくせー って思ってたけどこれで解決じゃん #boostjp
Parameterはverilogの明示的なモジュール接続みたいな感じ。便利そう #boostjp
Protoなんてあったんだ・・・。偽ETみたいなの自作してたよ・・・ #boostjp
BLASとかもProto使ってるのかな。登場時期からすると使ってないか #boostjp
Range気になってるけど使った事ないなー #boostjp
あーrefってそういう意味合いだったんだ。boost::thread使うときに適当に使ってた記憶が・・・ #boostjp
Signal2だ!Qt5はこういう感じでmocとuicをなくしてほしい #boostjp
Boost::threadってまだスレッド優先度の設定できないんだっけ? #boostjp
お、uBLASきた! 微妙に使うのめんどいけどはやい(らしい) #boostjp
shared_from_thisとかもutilとかに入ってるのかな。 #boostjp

感想

正直boostはライブラリ数多すぎで、「きっと自分が知らない便利な物があるんだろうなー」っていうもやもやがずっとあったので、
一周の旅で全ライブラリを紹介してもらえてすごくありがたかったです。
1ライブラリに割く時間が短かったのですが、非常に用途用例がわかりやすいものが多くて
今の何? ってこともありませんでした。
とりあえずセッション中につぶやきながら取ったすごくラフな自分用メモを晒しておきます(普段使わないライブラリについて主にメモ)

・Circler Buffer
	  古いもの捨てられていくバッファ
・Concept Check
	  エラーメッセージがわかりやすく
・Convarsion
	lexical_castとその仲間たち
・CRC
	まあCRC
・enable_if
	type_traits使ったオーバーロードFlyweight
	Flyweightデザインパターンの実装(リソースの共有)
・foreach
	マクロで実現されたforeach
・Function Types
	   関数の型を取得するメタ関数
・Fusion
	Loki::typelist+実行時
・Interprocess
	プロセス間共有メモリ
・Interval
	区間計算
・Intrusive
	侵入型のコンテナ
・IO State Server
   	 iostreamの状態管理(出力のhexとかをスコープ抜けた時に戻す)
・Iostreams
	お手軽stream作成
・Iterators
	お手軽Iterator作成
・Math
	数学の特殊関数形が定義されてるよ(クオータニオンとか
・Member Function
	 std::mem_funとstd::mem_fun_refを一般化したもの
・Multi Array
       	多次元配列
・Multi Index
	indexed_by<>で取り出し方法を指定できるindex
・Numeric Conversion
	数値型同士の変換(桁の処理方法とか指定できるっぽい)
・Operators
	関連する演算子の自動生成(C#みたいな感じ)
・Optional
	無効値の統一的な表現
・Parameter
	verilogの明示的モジュール接続みたいな
・Pointer Container
	ヒープオブジェクトのポインタ用コンテナ(スマートポインタより早い)
・Pool
	メモリープール
・Preprocessor
	暗黒面
・Property Map
	iterator_traitsの拡張みたいなもの(要調査)
・Proto
	ETできるよ!
・Python
	ぱいそん!
・Random
	次期標準疑似乱数生成ライブラリ
・Range
	れんじ!
・Ref
	明示的に参照にする(型が値として推論されないように)
・Scope Exit
	スコープ出た時の実行コード(キャプチャできるよ!)
・Serialization
	シリアライズ・デシリアライズ
・Signal2
	しぐなる!
・Smart Pointers
	scoped_pointerとか
・Spirit
	パースできる
・StateChart
	状態マシン
・Static Assert
	0xのstatic_assert()を実現したマクロ
・String Algo
	文字列周りのアルゴリズム(大文字に変換とか右の空白を除去とか)
・Swap
	組み込み配列もswapできる(vectorの場合は専用アルゴリズムを使用)
・System
	各OSのエラーコードをラップして汎用化
・Test
	ゆにっとてすとー
・Timer
	簡単な時間計測(スコープベースとか)
・Tribool
	3値bool
・Tuple
	std::pairの3つ以上版
・Typeof
	0xのautoとdecltypeをエミュレーション
・Units
	単位計算(mとかcmとか)
・Unordered
	ハッシュ表の連想コンテナ(要調
・Wave
	C++プリプロセッサを拡張できる(要調査)
・Xpressive
	正規表現コンパイル時にもできるらしい?)

11:10〜12:00:Boost.MultiIntrusivedex(k.inaba)

つぶやき

あのindexの継承関係の作成って渡されたindexのタイプリストをどんどん展開していく感じで実装されてるのかな。読んでみたい #boostjp

感想

multiIndexについては、以前使ったことがあったのですが、Intrusiveに関してはほとんど無知だったのでだいぶ勉強になりました。
特に、"ドキュメントに載っていない独自研究”についての情報が得られたのはすごく有益だったんじゃないかと思います。

13:00〜13:30:LT:egtra, tt_clown, dark-yoshi ひとり10分くらい

つぶやき

boost:.graphはすさまじく長いtypedefを書かないといけないってイメージしかないなー #boostjp
テンプレート引数の多さに挫折しかけるってあるあるw > Boost.Graph #boostjp
ぽりごんきたー! #boostjp
Boost.Polygonが結構普通のライブラリでほっとした。もしかしたらポリゴンをタイプリストであらわしてコンパイル時にブーリアン演算やっちゃうとか恐ろしいものなのかとか想像してた #boostjp

感想

tokenizerがポリシーベースにデザインされてることを知らなかったので、今回実際にポリシーの入れ替えを行って
自作scanfを作るデモは非常に参考になりました。ちょっと自分でも改造してみようかなとか
polygonは、boostにしては意外と普通のライブラリーだな(笑)とか思ってました。
この辺はCGAL等競合ライブラリも多いので今後どうなるんだろう(外部ライブラリ依存性が少ない点ではboost.polygonもいいかも?)
graphに関しては、時間の都合上非常に入門的な内容だったので、次回egtraさんがフルセッションで
深いところを突っ込んでくれるのを期待してますw

13:30〜14:00:Boost.Coroutine(melpon)

つぶやき

coroutineは用途が割と具体的で面白かった。ちょっと使ってみよう #boostjp

感想

coroutine便利そうですねこれ!
正式に採用されてないのが気になりますが、例としてあげていた弾の移動とかがすごくわかりやすい実用例でいいなーと思いました。
あとARMでのアセンブラによる実装まで踏み込む辺りがさすが・・・!というかそんな感じでした。

14:10〜14:40:Boost.Asio(xyuyux)

つぶやき

え、ASIOってCOMポート扱えるの・・・! #boostjp
タイマーきた。Asioってネットワーク触らずにタイマーベースな非同期処理としてだけ使っても結構便利 #boostjp
そうか普通にSIPとかもASIOでなんとかなっちゃうのか #boostjp
シリアルポートはすごくうれしいというか家に帰ったらすぐ使ってみよう。QtのextSerial使う予定だったけどBoostでマルチプラットフォーム対応できるならこれでいいな。 #boostjp

感想

ASIOは使ったことあったんですが、まさかCOMポート扱えるとは思いませんでした。
ちょうど今COMポート扱うようなソフト書いてるのですごくタイムリーでありがたかったり。
あと当たり前ですが、SIPとかもASIOでなんとかなっちゃうんですね。この辺いじってみてもおもしろいかもしれないです。

14:50〜15:20:Boost.Preprocessorでプログラミングしましょう(DigitalGhost)

つぶやき

とりあえずBoost..PPとBoost.waveはやばいとおもう。うん #boostjp

感想

世界一短いHello World(笑)はおいといて、Boost.PPやべえ・・・ みたいなセッションでした。
個人的にマクロを避けてたので、細かい部分についてはよくわからないところも多かったのですが、
繰り返し記述用に使ってみるのもありかなーと思います。

15:30〜16:00:バグベアード入門(wraith13)

つぶやき

なし(手元でスライド見てたので)

感想

結構本気で悪魔との取引でした。(#define if ・・・)
ステートメントハックは自分でprintfしまくらなくてもデバッグできるので便利かなーと思ったのですが、
そもそもboostとは相性が悪いんじゃないかという疑惑も(まあ一時的に無効に出来るので大丈夫そうですが)
ちょっと試しに使ってみてログのサイズとかいろいろ見てみたいと思います。

16:10〜17:00:Boost.SmartPtr:shared_ptr + weak_ptr(Cryolite)

つぶやき

ここ最近なんでもかんでもポリシーにすればいいんじゃない的考え方になりかけていたのですこしドキッとした #boostjp
あーそうか。たしかにバイナリ互換性は重要だな。ポリシーベースだとああはならないからな #boostjp
shared_ptrにこんな使い方あったのか・・・ > voidのっけて開放遅延 #boostjp
概念や理念をはっきりさせるのは大切だなー。shared_ptr,weak_ptrの使い方ぐらいなら誰でも大体知ってるんだけどそういうことだけじゃどうにもならないレベルがあるというか #boostjp

感想

なんていうか一番感動したセッションでした。
shared_ptrの使い方とか、weak_ptrがobserverに便利とかは結構みんな知っていることだと思うのですが、
個人的には具体例に入る前の、"そもそもsmartptrってなんなの?"っていう定義づけの部分が素晴らしいなと。
ライブラリの使い方ではなく、設計思想をきちんと解説してくれる物は数少ないと思うので、必見だと思います!

17:10〜18:00:Boost.MPL(uskz)

つぶやき

なし(コード追うのに必死でした・・・)

感想

ペースが速すぎてよくわかりませんでした(笑)
ということで今uskzさんのblogからソース持ってきて解読中です。
最近多少TMP的なコードを自分でも書いてるので、多少戦えるかと思ったのですが
C++の壁は厚いなーととても実感。

懇親会

1次の懇親会はどうみてもキャバクラおしゃれなバー、二次会は国際色豊かなバーでした。
食べ物少なすぎでしたが、いろいろな方とお話しできたので良かったです。
当日はどうせ配らないだろうと思って名刺を10枚しか持っていかなかったので、
twitterで見かけたことのある方に挨拶するのがやっとで、他の方にあまり渡したり出来なかったので残念です。
帰りはTXが無くなったので、ミッドナイトつくば号でバス酔いしながら帰る感じでした。

まとめ

LLの勉強会って本当にたくさんあると思うんですが、C++の勉強会となると驚くほど少なくて、
今回こういう形で集まることが出来てすごく良かったです。
参加してる方のレベルもすごく高くていろいろ勉強になりました。
ATNDの枠の埋まる早さなどを見るに需要はあるみたいなので、今後もどんどん継続してやっていってほしいなーと思います!(次回は大阪らしいです)