プログラミング (iOS, JavaScript, Jenkins, Sikuli) とMacやiPhoneなどの話題が中心のブログ EmscriptenはC/C++ソースからJavaScriptソースへ変換するコンパイラです。 BananaBreadのようなゲームやPythonやRubyのようなスクリプト言語もコンパイルできるようです (Emscripten Wikiにはそれ以外のデモやサンプルへのリンクがあります)。 そこで、今回は導入してHello worldを実行させるまでの手順を紹介します。 Emscriptenの導入 コンパイラであるem++を使うだけなら意外と簡単に導入できます。 XcodeのCommand Line Toolsは導入済みとします。 JavaScriptの最適化ツールであるClosureコンパイラはEmscriptenに (古いバージョンですが) 入っています
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
C++で行列計算をする場合に便利なライブラリEigenを紹介したいと思います。 ベクトル・行列演算は知っているからEigenの使い方だけを教えてくれというかたは最初の章は読み飛ばしてください。 — 多くの統計処理がベクトル・行列演算を用いるとコンパクトに表すことが知られています。ちょっと複雑そうにみえる問題も整理してみるとベクトル・行列演算で書ける場合が多いです。(ベクトル・行列という言葉に抵抗がある方はそれぞれを単に配列、配列の配列とでも思ってもらえればいいでしょう)。ベクトルの内積は\(u^T v = u_1 v_1 + u_2 v_2 + \ldots +\)として求められ、ベクトルのノルムは自分自身のベクトルとの内積の平方根、\(|u| = \sqrt{ u^T u} \)として求められます(以降ベクトルは全て列ベクトルを指すとします)。 例えば、あるユーザーの商品の購買履歴は、\
C++ は .NET や PHP などと違い、Twitter 関係のライブラリが充実していません。また、解説サイトも少なくプログラムを組むのはなかなか困難です。既存の Twitter クライアントでも、.NET や AIR をベースとして構築しているものが多いのが現状です。 しかし、今回は、OAuth の仕組みを学ぶということを目的とし、C++ で組むこととしました。C++ 自体のスキル向上という目的もあります。 ※ ただし、ネットワークや暗号化などにはライブラリを利用しています ■ 開発環境 Ubuntu 10.10 g++ version 4.5.5 Cygwin g++ version 4.3.4 ※ クロスプラットフォームライブラリを利用しているので、Windows でもコンパイル可能 (未検証) ■ 利用ライブラリ ・ cURLpp 通信処理 ・ CLX C++ Librarie
"Image dans le néant" by gelinh boost.GILは凄い!開発者の頭の良さがビシビシと伝わってくる! ということで、今回はGILに関しての紹介記事を書こうと思います。 概要 あなたは画像処理のエキスパート。顧客の依頼で、8bitのRGB画像を処理するアルゴリズムを記述していたとします。ところが対象となるデバイスの仕様を調べていた際に、実はRGBA画像にも対応させなければいけないことが分かりました。面倒だと思いながら書いていた矢先、さらにBGRやABGR,さらには16や24bitにも対応したアルゴリズムを記述しなければならないことが判明しました。なんということでしょう…これらの画像すべてに対してアルゴリズムを書くなんて、とてもじゃないですがやってられない。やめてくれ!って感じです。 boostに付いてくるGILを用いることで、画像に対する操作をよりジェネリック
条件変数(condition variable)同期プリミティブに対する待機/通知で発生する現象と回避策のメモ。 条件変数とミューテックスを使ったコードにおいて次のような現象が生じる。 スレッドAが条件変数cvに対して通知を行う。 条件変数cvに対してブロックされていたスレッドBのブロックが解除される。ただし、ミューテックスmtxはスレッドAにロック保持されたままのため、再びスレッドBはミューテックスmtxに対してブロックされる*1。 スレッドAがミューテックスmtxのロックを解放する。 ミューテックスmtxに対してブロックされていたスレッドBがブロック解除され、同ミューテックスのロック獲得に成功する。 #include <pthread.h> int data = 0; // 待機条件: 非0になるまで待機 pthread_mutex_t mtx; pthread_cond_t cv;
Boost.Heapの優先順位付きキューの特徴として、「イテレータを持っている」というのがあります。 さらに、iteratorに加えてordered_iteratorというを持っている優先順位付きキューのバリエーションがあります。 これらの違いを確認しようと思います。 まず、イテレータを使わない場合の操作。pushしてpopしていきます。 この操作では、優先順に処理されます。 #include <iostream> #include <boost/heap/fibonacci_heap.hpp> int main () { boost::heap::fibonacci_heap<int> que; que.push(3); que.push(1); que.push(4); while (!que.empty()) { std::cout << que.top() << std::endl
boost::spirit は、構文解析を行うためのテンプレート・プログラミングです。一見、難しそうに見えますが、ドキュメントの歩き方を知っていれば、そんなに難しくありません。 boost 1_49_0 時点では、ドキュメントは、以下になります。 http://www.boost.org/doc/libs/1_49_0/libs/spirit/doc/html/ Quick Reference - Qi Parsers まずは、Quick Reference の Qi Parsers を見ましょう。 http://www.boost.org/doc/libs/1_49_0/libs/spirit/doc/html/spirit/qi/quick_reference/qi_parsers.html Character Parsers http://www.boost.org/doc/libs
Boost.Contextにstart()という関数がありますが、これは再始動には使えないみたいです。 再始動する場合には、contextを作り直す必要があります。contextクラスはムーブ代入演算子を持ってるので、コンストラクトした一時オブジェクトの所有権を移譲することで作り直しができます。 #include <iostream> #include <boost/context/all.hpp> #include <boost/function.hpp> #include <boost/utility/value_init.hpp> class continuation { boost::contexts::context ctx_; boost::function<void(continuation&)> fn_; boost::initialized<bool> started_;
これもBoost.Contextのサンプルにあるものですが、Boost.Contextのコンテキストスイッチを利用して複数の関数を並行に動かしています。 #include <iostream> #include "continuation.hpp" void first(continuation& cont) { for (int i = 0; i < 5; ++i) { std::cout << "a-" << i << std::endl; cont.suspend(); } } void second(continuation& cont) { for (int i = 0; i < 5; ++i) { std::cout << "b-" << i << std::endl; cont.suspend(); } } int main() { continuation c1(first
Show navigationWhat is V8?V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows, macOS, and Linux systems that use x64, IA-32, or ARM processors. V8 can be embedded into any C++ application. Latest posts and feature explainersThe V8 Sandbox 04 Ap
C++11標準ライブラリのstd::functionやstd::bindでは、クラスのデータメンバ(メンバ変数)を格納できる。 #include <functional> struct A { int md; void mf(int v) { md = v * 2; } } a; // メンバ関数 A::mf (比較用) std::function<void (A&, int)> f1 = &A::mf; f1(a, 3); // a.mf(3) assert(a.md == 6); using std::placeholers::_1; std::function<void (int)> b1 = std::bind(&A::mf, std::ref(a), _1); b1(4); // a.mf(4) assert(a.md == 8); // データメンバ A::md std::fu
Boost.Asioにはこれまでdeadline_timerというBoost.DateTimeのposix timeベースのタイマーがありましたが、Boost 1.49.0からBoost.Chronoベースの以下のタイマーが導入されました: basic_waitable_timer : クロックの切り替え用 system_timer : system_clockでのタイマー steady_timer : steady_clockでのタイマー high_resolution_timer : high_resolution_clockでのタイマー また、basic_waitable_timerのテンプレート引数として渡すクロック型が満たすべき要件を定義するためのwait_traitsという型も追加されています。 この新タイマーの使い方としては以下のようになります: #include <iost
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
前回、ユーザー定義リテラルのすべてを説明したつもりであったが、いくつか細かい漏れがあった。 まず、ユーザー定義リテラルの宣言であるが、実は文法上、空白文字が必要な箇所がある。""と識別子の間だ int operator "" /*ここに少なくともひとつの空白文字が必要*/ _identifier( unsigned long long int ) ; 空白文字を入れないと、""_identiferがひとつのトークンだとみなされてしまう。 もちろん、この宣言を参照する際にも、空白文字が必要である。 operator "" /*空白文字が必要*/ _identifer( 123ULL ) ; また、ユーザー定義リテラルのオーバーロードは、あらかじめ定められた仮引数リストやテンプレートしか使えないが、その他は、普通の関数と変わりないということである。もちろん、inlineやconstexprで宣
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く