札幌C++勉強会で発表してきました!

第2回勉強会開催までに紆余曲折がありましたが、無事開催する事が出来ました。それも20人を超える盛り上がりです!
やはりOSCの展示とセッションが功を奏したのでしょうか。何にせよ、よかったよかった!

今回の行程は、13時から始まり、

  • 自己紹介
  • 僕(@lapis_tw)のセッション
  • @hotwatermorningさんのセッション
  • @h_hiro_さんのセッション
  • @ignis_fatuusさんのLT
  • @nakayoshixさんのLT
  • @tututenさんのLT

を順当に終えて17時という感じでした。

全体を通してみてみると、LTが当初少なかったのですが、突発で名乗りを上げてくれる方がいて、勉強会としてかなり盛り上がれたんじゃないかなー、と思っています。個人的には、ほっとさんの例外安全のセッションが盛り上がりました。

さて、僕のセッションですが、当初はLuaC++バインディングについて更に踏み込んだ形でのセッションを検討していました。ですが、今回のATNDの参加者層を見てみるとC++初心者や、C++を初めて目にする、といった方が大勢居られる状態であったので急遽予定を変更し、C++を初めて目にする方でも大丈夫なセッションにしました。
<発表資料>C++ Essence
これについても大分悩んだのですが、C++の言語仕様を解説するよりも、コードの一切でないC++の世界導入編をやったほうが良いだろうという結論に達し、こうなった次第です。出来るだけ、C++に良い印象を持ってもらう事が大切でした。
実際に言語の簡単な説明や、実際に入門書を読み終えた後に読むと良い本、Twitterでフォローしておくと良い人等を冗談混じりで紹介し、このC++を学ぶ上での(意気込み的な)ノウハウを自分なりに紹介出来たつもりです(あの本がはいってねーよ!とかなんであの人紹介されてねーんだよ!などの声があると思いますが、ごめんなさい。時間的な都合もあってすべての本、人物を記載する事は叶いませんでした。Ust中継はまだ始まっていませんでしたが、この資料にだいぶ補足説明が入っています)。

これを機にC++を続けてくれる方が居れば嬉しいなー、と思う次第でございます… それがこの勉強会の目的でもありますからね!



さてさて、何やらBoost.勉強会 北海道という言葉も現れ始め、なかなか今後も面白くなりそうですよー?




※要望にお答えし、資料をアップロードしていますが、Twitterとはいえ個人の情報を載せています。Publicな環境におかれるのがNGな人はご連絡下さい。

Test::MockObject失敗談

Test::MockObjectを使っていたんですが、ちょっとこれでハマってました。
テスト時に、何らかの理由でモジュールのメソッドを偽装する際は、Test::MockObject->fake_moduleを使用します。
たとえば、テストで使用するモジュールが実装されてなく、それでも通るようにしたい場合や、実装したモジュールの中で正常にメソッドが呼ばれているか、といった場合に使用されます。今回ハマったのは後者です、ほんとしょうもない理由だったんですが。

my $mock = Test::MockObject;
$mock->fake_module(
    'My::Object',
    any_method => sub {
        ok(1, 'any_method got called successfully');
    }
);

このようにすると、My::Objectのany_methodが呼び出された際にokを返し、テストが成功します。any_method got called successfullyとテストを問題なく通過した文言が出力されるはずです。
しかし、このany_methodにはDBIx::Skinny::Rowオブジェクトの返り値があります。
この場合、Test::MockObjectで偽装したメソッドには返り値を設定していないので、その返り値を参照した時点でコケてしまいます。
このMy::Object::any_methodは本命のテストを行うモジュールの更に1つ深くで呼ばれており、それが呼ばれていることを確認するためにTest::MockObjectを使用していました。返り値を変えた事を忘れてて・・・って感じです。

my $mock = Test::MockObject;
$mock->fake_module(
    'My::Object',
    any_method => sub {
        ok(1, 'any_method got called successfully');
        return Hoge::Model->hash_to_row(
            'hoge_tbl',
            {    id => 1,
                 column => "hogehoge",
            }
        );
    }
);

このようにDBIx::Skinny::Rowオブジェクトをhash_to_rowメソッドにより、ハッシュから作って返す事によって無事解決。
DBIx::Skinnyやっぱり便利!と思うと同時にテストはしっかり書こうとしみじみと思うのでした。
Test::MockObjectも初めて使ってみましたが、これは色々楽できますねー

OSC 2011 Hokkaido出展に関して

北海道C++勉強会(Sapporo.cpp)はOSC 2011 Hokkaidoに出展します。
とうとう今週ですよ!どきどきしますね!

出展内容は、

  • セミナー
  • 展示ブースでの薄い本冊子の配布

です。

若干浮き気味なスローガンのせいも相まってか、某所等で取り上げられてしまったうちの団体ですが、セミナーの方は既に満席となってしまいました。ありがたいことですね!
セミナーの内容としては、強烈なタイトルと裏腹に割とガチな内容を目指しています。ネタに期待してた人はちょっと期待はずれになるかも?ならないかも?
講師は、北海道C++勉強会主催のhotwatermorningさんです。

冊子に関しては、無事締め切り前に入稿を終え、残りは納品を待つのみとなりました。ページ数は60ページで、一般配布は50部を予定しています。
一応、表紙の掲載許可が下りたため、公開しちゃいます。

これも表紙がネタ臭が立ち込めていて、かの本のオマージュにも見受けられます。しかし、内容は一切ネタが無く、札幌C++勉強会メンバーが自分の好きなライブラリについて思いの丈をぶちまけると言うなんとも熱い仕様です!
スペシャルゲストにも執筆して頂いた、濃厚な60ページをお楽しみ下さい。
なお、「遠方に住んでいて会場に行けないよ!」という方が沢山居られるかもしれませんが、ちゃんとPDF版も後日アップロードする予定です!


OSC2011 Hokkaidoに友達を誘って皆でいこう!

Boost.勉強会#5 名古屋 感想文

北海道に無事帰還したので記事をUPします。
全然書いてないブログに光が!

    • -

Boost.勉強会#5 名古屋に参加してきました!
朝4時に起床し、7時45分発のセントレア行きに乗り、キャリーバッグを持ったままの参加。
名古屋という完全にアウェーな環境で終始ドキドキでした。


「春のlock free祭り」 (@kumagi)
lock-freeすごい!理解できてないけどすごい!
今後は絶対必要になってくる分野だと思うので、じっくり紹介された本やスライドを読みたいと思います。
lock-free女子いいなぁ

The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで

The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで


「Boostで線形代数(再)入門」 (@wof_moriguchi)
ゲームプログラマは皆大好き線形代数。uBLASの話ですねー
私も頻繁につかうライブラリなので楽しかったです。
それにしても、高木ブーストはないよね・・・
捨て子ザウルスは翌日行ったオアシス21で発見しました!




「Frama-Cによるソースコード検証」 (@mzp)
流行ってるみたいですね、Coq。
仕事の休憩中にCoqのリファレンスをちょこっと読んだ記憶があります。
時間が出来ればじっくり腰を据えて読みたいですねー
テストは本当に大事だと思います。本当に。



「C(C++)による左再帰を許すPEG」 (eldesh)
PEGとは解析表現文法らしいです。これはよく分かりませんでした・・・



「Boost.Pythonの有能性」 (fate_fox)
高校生でこれだけ喋れて、vimmerとは・・・
内容はBoost.Python。Boost.PythonはluabindのPythonバージョンという認識でいます。
要するに、PythonC++バインディングを構築するためのライブラリでしょうか。
バインドは男の浪漫。



「Boost.statechart / Boost.MSM」 (PG_kura)
Boost.statechartとBoost.MSMすごい!超便利ですね!
これ、ゲームを作る時に非常に使えますねー
ゲームは状態の塊みたいなものですから、ステートマシンで表現できちゃう部分は多いです。
デモでやっていた主催者をスポイルするゲームも公開されて満足(Qtが必要なんですけどね)



OpenCVを使った画像処理」 (miyabiarts)
OpenCVつかったのは覚えてますけど、何に使ったかは思い出せません・・・
顔認識かな?でも顔認識はImage::ObjectDetectを使ってたような・・・
どうだったかなー 記憶が曖昧です。

OpenCVは本当に色々な機能があって、顔認識にも学習結果のXMLデータが既に用意されているので、是非触ってみることをオススメします。



C++0x総復習」 (wraith13)
最高にためになるセッションでした。もう言わずもがなタイトル通りです。
OSC2011 HokkaidoのSapporo.cppセミナー講演では、C++03とC++0xを比較することによる紹介を行いますが、
恐らくこのセッションは大いに参考にさせて頂くことになるでしょう・・・!



「非実用的 Boost.Spirit.Qi 入門」 (yak_ex)
最近までBoost.SpiritをBoost.Splitとかんぢがいしてました・・・
このBoost.Spiritは変態として有名ですねー
コンパイル時間もエラーも最高にBoostです。
エラーがBoostといえば、PerlPlackスタックトレースも中々に長いですよね。
でも3.3MBのエラーには到底及びません・・・
機会があったら弄くってみたいです!


懇親会
小さくて可愛いお店でした。でも、C++erが50人近く押し寄せると一気に・・・
今回は懇親会にて、札幌C++勉強会とOSC2011 Hokkaicoの紹介をさせて頂きました。
色々話し忘れていたこともあったので、やっぱり何か発表する時はシラフのほうがいいですねー・・・
しかし、札幌C++勉強会の周知は出来たと思うので満足です。恐らく皆さんそろそろ飛行機を予約している頃!
構ってくれた皆さん、ありがとうございました!

    • -

国外道外でのBoost.勉強会の参加は初めてでしたが、噂通りの盛り上がりですね!
ついにねんがんのBoost.勉強会に参加できたわけです。道外の勉強会おそるべしですな。
今後もどこかでBoost勉強会が開催されれば極力参加するつもりです。(・・・発表もしてみたいです)
だってC++erだもの。

CreateWindow時のメッセージ

過去にあったミスから、他所であまり紹介されてないものをメモ

CreateWindowExを呼ぶと、ウィンドウプロシジャにいくつかのメッセージが飛びます。

ブレークポイントを設定し追っていくと・・・

  1. msg=36(0x24) なので WM_GETMINMAXINFO
  2. msg=129(0x81) なので WM_NCCREATE
  3. msg=131(0x83) なので WM_NCCALCSIZE
  4. msg=28(0x1c) なので WM_ACTIVATEAPP
  5. msg=1(0x01) なので WM_CREATE

これはCreateWindowExが成功しているときのメッセージです。
ここでWM_CREATEまでクリアすると無事CreateWindowExよりウィンドウハンドルを取得することができます。

次に失敗しているときのメッセージの例です。

  1. msg=36(0x24) なので WM_GETMINMAXINFO
  2. msg=129(0x81) なので WM_NCCREATE
  3. msg=130(0x82) なので WM_NCDESTROY

このWM_NCDESTROYとはウィンドウを破棄してくれ、というメッセージらしいです。


昔、ウィンドウ周りのクラス化を行っている最中に、これで引っかかった事がありました。