| 164 | |
| 165 | == 一体いつから FIFOがスケールしないと錯覚していた? == |
| 166 | |
| 167 | * Lock-free? |
| 168 | * スレッドをブロッキングせずに全体での進行が保証される |
| 169 | * Lock-free stack |
| 170 | * 最後のノードが常に先頭… |
| 171 | * Lock-free queue もできるよ |
| 172 | * stack に積みに行くスレッドがいっぱいあると push と pop で当然渋滞するよね… |
| 173 | * 対策: |
| 174 | * ウェイトを入れる - 200 clock ぐらい? |
| 175 | * 無駄な衝突がなくなってスループット向上。 |
| 176 | * 待機中にマッチングすればよくね? |
| 177 | * EliminationArray |
| 178 | * EliminationArray 自体にはランダムな位置に突っ込む。その一が null であることを期待して… |
| 179 | * ランダムにしないとこっちはこっちで衝突しちゃうから。 |
| 180 | * EliminationArray を FIFO に適用する - Elimination Queue |
| 181 | * Queue の外に EliminationArray を設ける |
| 182 | * Enqueue, Dequeu をカウントするカウンタをそれぞれ設ける |
| 183 | * CAS に失敗したら EliminationArray に乗せる。このノードには Enqueue カウンタ番号がついてる。 |
| 184 | * Dequeu カウンタのほうが大きかったら↑を拾って持っていく。 |
| 185 | * EliminationArray を使わなくても 8スレッドぐらいまではスケールする。 |
| 186 | * 1CPU を 8スレッドまでに制限するか、 EliminationArray を使うかの選択と言うのはありうるかも… |
| 187 | |
| 188 | == glfw3 OpenGL を使ったGUI フレームワーク == |
| 189 | |
| 190 | * マルチプラットホームのフレームワーク |
| 191 | * windows, linux, OS X |
| 192 | * unmodified zlib/libpng license |
| 193 | * GLFW とは? |
| 194 | * 必要最小限の機能、シンプルな構造 |
| 195 | * サンプルあるよ! |
| 196 | * glut の貧弱な部分を強化した感じ (glut はもはやメンテナンスされてない) |
| 197 | * リアルタイム性重視 |
| 198 | * OpenGL/ES とマッチ |
| 199 | * GUI 構造や構成が C++ 向き |
| 200 | * かなり前から少しずつ構築しているため、最近の流行とは逆行する部分も… |
| 201 | * boost, C++11 の機能を的確に利用できてない |
| 202 | * 組み込みでも使えるよ! (iostream には注意…) |
| 203 | * 依存性 |
| 204 | * GLFW3, GLEW, Freetype2, OpenAL, libz, libpng, libjpeg, openjpeg, Mad(mp3), AAC, Mupdf, jbig2dec, bullet(physics) |
| 205 | * core |
| 206 | * 機種依存性が高いコード |
| 207 | * GLFW3 をラップした I/F |
| 208 | * Freetype2 I/F |
| 209 | * 漢字 FEP関係 |
| 210 | * I/O デバイスラッパー |
| 211 | * GL_FW |
| 212 | * OpenGL/ES を使った描画クラスなど |
| 213 | * OpenGL C++ ラッパー |
| 214 | * フォントの描画・管理 |
| 215 | * 画像管理 (モーションオブジェクト) |
| 216 | * ライト (開発中) |
| 217 | * シーングラフ (開発中) |
| 218 | * シェーダー (開発中) |
| 219 | * IMG_IO |
| 220 | * 色、画像を扱う基本クラス |
| 221 | * SNG_IO |
| 222 | * 単音、ストリーム |
| 223 | * OpenAL との橋渡しなど |
| 224 | * WIDGETS |
| 225 | * GUI 部品 |
| 226 | * Widget 管理 |
| 227 | * 組み込み機器にも移植可能な軽量コンパクト設計 |
| 228 | * UTILS |
| 229 | * 頂点、行列など線形代数関係 |
| 230 | * ファイル I/O |
| 231 | * 文字列操作 |
| 232 | * プリファレンス |
| 233 | * シーン制御 |
| 234 | * GLFW3 の改造 |
| 235 | * ドラッグアンドドロップ (Windows のみ) |
| 236 | * FEP 関係のメッセージ(予定) |
| 237 | * 開発環境 |
| 238 | * MinGW (MSYS) |
| 239 | * GUI フレームワークに期待されること |
| 240 | * 日常、非日常な処理 |
| 241 | * ありがちな処理は _簡単な設定_ だけで可能 |
| 242 | * 現状では enum ハードコーディングなど (組み込み機器などを考慮すると XML ファイルとかは使いたくない) |
| 243 | * 複雑で特殊な処理を実装することが可能であること |
| 244 | * 拡張性 |
| 245 | * 予想できるスマートな挙動 |
| 246 | * シンプルな構造 |
| 247 | * マウス、ジョイスティック、タッチパッドなどでも操作が可能 (今後の課題) |
| 248 | * 次世代の GUI? |
| 249 | * マウスでもタッチ操作でも可能なポリシー |
| 250 | * Windows, OS X, X11(Qt) の操作はある程度継承 |
| 251 | * 「UI ガイドラインを守れば何もかもうまく行く」は幻想にすぎない |
| 252 | * case by case |
| 253 | * CPU もグラフィックスも十分高速なので、もっとヘビーな GUI を考えてもいいかも… (見た目だけの問題でなく) |
| 254 | * ジェスチャーとか? |
| 255 | * アプリケーションの構造 |
| 256 | * メッセージを使わない |
| 257 | * 毎フレーム直列同期処理 |
| 258 | * ゲーム向きの構造 |
| 259 | * シーンごとの処理 |
| 260 | * initialize |
| 261 | * update |
| 262 | * render |
| 263 | * destroy |
| 264 | |
| 265 | == データサイエンスワールドからC++を眺めてみる == |
| 266 | |
| 267 | * イントロ |
| 268 | * データサイエンティストもてもて? |
| 269 | * どんなツールを使ってるんだろ?? |
| 270 | * 1st = R, 2nd = python, 3rd = MySQL ... C/C++ は 9位 |
| 271 | * R は処理が遅い。 |
| 272 | * ループとか |
| 273 | * R から C++ を呼んで高速化 ...結構多い |
| 274 | * C++ から R の関数を呼ぶやりかたもあるよ |
| 275 | * R から C++ を使ってみる |
| 276 | * Rcpp パッケージ |
| 277 | * R から C++ を実行するパッケージ |
| 278 | * R から C++ ソースをコンパイルして実行。 |
| 279 | * R から呼びたい関数にコメント行でマークアップする |
| 280 | * C++ での統計解析 |
| 281 | * Boost.Accumulators |
| 282 | * 記述等軽量には対応してるけど、統計的検定、多変量解析、機械学習には対応してない模様。 |
| 283 | * 統計量の計算などの統計処理を提供。 |
| 284 | * 使い勝手は良さげ |
| 285 | * Apophenia |
| 286 | * ROOT |
| 287 | * GSL |
| 288 | * ALGLIB |
| 289 | * これが一番対応範囲が多い? |
| 290 | * 数値計算及びデータ処理のためのソフト |
| 291 | * C++, C#, Python, VBA などから呼び出せる |
| 292 | * 商用版もあるとか… |
| 293 | * データ構造を文字列に持たせるなど、 C++ からの使い勝手は癖がある。 |
| 294 | * Rllvm なんてのもあるらしい… |
| 295 | * C++ から R を呼ぶ - RInside パッケージ |
| 296 | * RInside オブジェクトを生成、計算式を文字列で渡して実行、値を取り出す、ということができる。 |
| 297 | * Qt に R を埋め込むことも可能。 |
| 298 | * まとめ |
| 299 | * C++ で統計解析を行う良いツールがあれば @sfchaos さんまで。 |
| 300 | |
| 301 | * [https://sites.google.com/site/cpprefjp/editors_doc/random_figure cpprefjp でも使ってた] |
| 302 | |
| 303 | == .NET とかが当たり前にやってること、C++だとどうするか == |
| 304 | |
| 305 | |