2014年7月12日(土)に、コミュニティ「プログラミング生放送(プロ生) 」と「CLR/H 」 、「 Sapporo.cpp 」によるITイベント、プログラミング生放送+CLR/H+Sapporo.cpp勉強会@札幌ユビキタス協創広場U-cala が開催されました。その模様をお届けします。
今回のイベントは、IT・開発系コミュニティ「プログラミング生放送」 、IT関連・開発系技術に関する学習と研究を目的とした札幌のコミュニティ「CLR/H」 、札幌でC++の勉強会などを開催しているコミュニティ「Sapporo.cpp」の共催です。
セッションは動画で公開しています。ぜひ視聴してみてください。
図1 会場の模様。今回は約25名の参加がありました。
図2 午前中はプロ生ちゃんタクシーの撮影会も行いました。
イマドキ C++er のモテカワリソース管理術!
Sapporo.cppの@hotwatermorning さんの「イマドキ C++er のモテカワリソース管理術!」です。このセッションを聴けばもうメモリリークすることはありません!
図3 「 イマドキ C++er のモテカワリソース管理術!」@hotwatermorningさん
セッションでは、C++でなぜメモリリークが発生してしまうのか、C言語や旧来のC++のリソース管理方法をはじめに説明しています。
次に、リソースの確保・解放をオブジェクトの寿命に紐付けてリソースを管理する手法のRAII(Resource Acquisition Is Initialization)を紹介。これによりリソース管理が簡単になります。C++では、スマートポイントを使いRAIIによるメモリ管理ができ、これまでメモリリークの原因を解消できるとのこと。
セッションでは、コード付きで解説および他の言語のリソース管理との比較も行っています。
ニコニコ動画:https://www.nicovideo.jp/watch/sm24210423 JavaScriptを有効にしてください。
クロスプラットフォーム開発雑感
CLR/Hのしみみんさん(@KatsuYuzu )による「クロスプラットフォーム開発雑感」です。クロスプラットフォームで開発する場合に気を付ける点を紹介しています。
図4 「 クロスプラットフォーム開発雑感」しみみんさん
クロスプラットフォームのアプリ開発で、現在の花形はAndroidとiOSです。日本を除く世界でWindowsストア アプリとWindows Phoneアプリも普及中(?)とのこと。
クロスプラットフォームでは、開発対象・開発言語・ユーザー層もすべてばらばらです。開発については、Titanium・Unityなどさまざまな開発フレームワークが提供されています。最近ではiOS・Android・Windows系のすべてをC#とVisual Studioで開発できるXamarinも人気です。
クロスプラットフォームでは、はじめにOSなどの対象を決め、UIやユーザー層などの違いの理解が大切とのこと。また開発フレームワークの違いも理解し、クオリティやパフォーマンスにあったものを選びます。
セッションでは激熱のUniversal Windows Appsを例に、Windowsスト アプリとWindows Phoneアプリの統合、開発環境の統合、具体的にハマった点も紹介しています。
ニコニコ動画:https://www.nicovideo.jp/watch/sm24209165 JavaScriptを有効にしてください。
資料公開場所
プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 ユビキタス協創広場 U-cala #pronamaclrhsapporocpp #pronama を開催しました - KatsuYuzuのブログ
Socket.IO 1.0で始めるリアルタイムWebアプリケーション
中川武憲さん(@ww24 )による「Socket.IO 1.0 で始めるリアルタイム Web アプリケーション」です。Node.jsでWebSocketなどリアルタイム通信プロトコルを簡単に扱えるライブラリ「Socket.IO」の紹介です。
図5 Socket.IO 1.0 で始めるリアルタイム Web アプリケーション」
Socket.IOは、チャットやPush通信、リアルタイムなゲームやリモートデスクトップなどの開発で役立ちます。Socket.IO 0.9から1.0になり大幅にプロトコル変更があり、バイナリデータもサポートされたとのこと。
Socket.IO を使った「Hello World」のJavaScriptのコードは次のようになります。onで受信処理を行い、emitで"Hello World"を送信します。
var io = require ( "socket.io" )( 3000 );
io . on ( "connect" , function ( socket ) {
socket . emit ( "msg" , "Hello World" );
});
セッションでは、スクリーンキャプチャ映像のブロードキャスティングをデモとして紹介しています。
ニコニコ動画:https://www.nicovideo.jp/watch/sm24209001 JavaScriptを有効にしてください。
Boost.Graphで「JR全線乗り尽くしプラン」を立てる
H.Hiroさん(@h_hiro_ )の「Boost.GraphでJR全線乗り尽くしプランを立てる」です。C++ Boost.Graphを利用して、短い乗車距離で全線を乗り尽くす方法を求めます。
図6 「 Boost.GraphでJR全線乗り尽くしプランを立てる」H.Hiroさん
出発地点まで帰ってくること、JR以外の交通機関を利用しないことを条件として乗車距離が短い経路を、グラフ理論を使って求めます。Boost.Graphは、グラフ構造を扱うC++のライブラリです。
セッションでは、問題設定と解き方をわかりやすく説明しています。ひとつは「橋」と呼ばれる、その1本が消えることで路線網が分断されるような辺を見つけ、路線図を個別のグラフに切り離していきます。また、橋は行って戻るため必ず2回通ります。
最終的にセッションではBoost.Graphを利用してJR北海道分の全線乗り尽くしプランを求めています。
ニコニコ動画:https://www.nicovideo.jp/watch/sm24209487 JavaScriptを有効にしてください。
型の力を抜いて学ぶC++
らぴすさん(@lapis_tw )の「型の力を抜いて学ぶ C++」です。型安全に型を消去できる仕組みTypeErasure(型消去)の解説です。
図7 「 型の力を抜いて学ぶ C++」らぴすさん
TypeErasureは、継承関係のないクラスに対し一部の共通機能をまとめて扱いたい用途などに使えるとのこと。
TypeErasureの方法は、void*を用いる方法、仮想関数テーブルを用いる方法、基底クラスとテンプレートを組み合わせる方法の3種類があります。セッションでは3種類それぞれ解説しています。
基底クラスとテンプレートを組み合わせる方法が、一般的な実装となり、Boostなどのライブラリに採用されている手法です。Boost 1.54からBoost.TypeErasureが追加され、テンプレートで型消去に必要なコンセプトを定義でき非常に便利とのことでした。
ニコニコ動画:https://www.nicovideo.jp/watch/sm24209538 JavaScriptを有効にしてください。
資料公開場所
型の力を抜いて学ぶC++
今更始めるWin32+DirectWrite
hiyohiyoさん(@openlibsys )の「今更始める Win32 + DirectWrite」です。Windowsで高品位なフォントのレンダリングを行うDirectWriteの紹介です。
図8 「 今更始める Win32 + DirectWrite」hiyohiyoさん
DirectWriteは、DirectXに区分される文字描画のAPIです。従来のGDI/GDI+描画に介してすべてのアプリで高品位なDirectWrite描画が期待されていたようですが、実際はそうならずGDI/GDI+とDirectWriteは独立して動作するとのこと。
DirectWriteは、Internet
ExplorerやFirefox、秀丸やSublime
Textで使われているとのこと。Windowsストアア プリやWPF、IEコンポーネントであれば、DirectWriteを簡単に利用できますが、Win32ではできません。
セッションでは、Win32でのDirectWriteを自アプリで利用した経緯やその方法を紹介しています。
ニコニコ動画:https://www.nicovideo.jp/watch/sm24210361 JavaScriptを有効にしてください。
ライトニングトーク
全セッション終了後は、ライトニングトークを行いました。タイトルのみ紹介します。こちらも楽しい内容になっていますので、ぜひ視聴してみてください。
図9 ライトニングトーク
ニコニコ動画:https://www.nicovideo.jp/watch/sm24210395 JavaScriptを有効にしてください。
おわりに
今回参加していただいた皆様、ありがとうございました。今後も各コミュニティそれぞれIT勉強会などのイベントを予定していますので、ぜひ参加してみてください。