JSON から BSON に変換する関数を作ってみた

Haskell には Text.JSON という JSON パッケージと、Data.Bson という BSON パッケージがあるのだけど、Text.JSON から Data.Bson へ変換する方法は探しても見つからなかったので作ってみた。 module JtoB ( J.Result(J.Ok, J.Error), jsonStringToBson, jso…

Nagios Event Broker を使ってみた

C++

Nagios Event Broker (NEB) は Nagios からイベントを受け取るためのモジュール。 Nagios からの通知に対して特殊な操作を行いたいときに使う。 NEB のドキュメント Nagios: Developer Information から取得できる。バージョンが古いけれども、基本的な部分…

モナドを触ってみた

で、こんな風に考えることにしました。 モナドは箱 モナドは単に値をくるんでるだけであると。 a をモナド化すれば m a。 でもってこうするための関数が return。単に m を付けるだけ。 モナドから値を取り出す なぜか知らないのですが、m a -> a なる関数は…

CSS3 のベジエ曲線のアニメーションを実装してみたい

C++

CSS3 の ease-in や ease-out は結構綺麗なので、あの動きを実装してみようかなーと思ったわけです。 CSS3 のベジエ曲線は3次曲線なので4点が必要ですが、最初の点と最後の点は固定値なので、指定するのは2番目と3番目の位置だけです。 Ceaser - CSS Eas…

リロケータブルなメモリを作ってみた

C++

コンシューマとかのゲーム開発で画像(というよりは大きいリソース)を扱っていると、メモリの断片化が起こって悲しいことになることがよくあります。 対策としてメモリアロケータを変えたり、一括でメモリを確保したりといった方法で何とかすることがありま…

関西ゲームプログラミング勉強会

に行って、Squirrel 言語について発表してきました。 Squirrel View more presentations from melpon 動画はこちら あといくつか補足しておきます。 Squirrel の発音について window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)…

TrivialClock

C++0x の最新の仕様では、Chrono ライブラリに TrivialClock の要件が追加されています。 今までの Clock の要件に加えて、TrivialClock はほとんどの操作で例外を投げてはいけないという要件が追加されています(他にもいくつか追加されている要件がありま…

ゲームエンジン作ってる人と話してきた

C++

自作するよりそこら辺にあるゲームエンジン使った方がいいんじゃない? という質問をしたところ、こんな感じの答えが返ってきました*1。 いくつかのゲームエンジンを使ったことあるが、あれをまともに使いこなすには数年掛かる。そしてそこから中身がどうな…

char8_t 欲しい

C++0x からは UTF16 の文字列リテラル(u"...")とその型(char16_t)、UTF32 の文字列リテラル(U"...")とその型(char32_t)が入ります。 そして UTF8 の文字列リテラル(u8"...")も入ります。しかし UTF8 を表す型は入りません。u8"..." は char の配列…

の残念なところ

C++

最近はサボり気味ですが、ちょっと前まで C++0x の仕様書のアルゴリズム部分を読んで cpprefjp の <algorithm> を編集していました。 そこで、読んでておかしいと思ったところや、サンプルを書こうとして残念な気分になった部分があったので紹介しておきます。 まず fin</algorithm>…

コメント戦争

C++

最近「『//コンストラクタ』というコメントは不要だ」という話を見かけたので、ちょっと書いてみました。 まずこのコードを読んでください。 class hoge { public: //コンストラクタ hoge(); }; これを読んで、おそらく多くの人が「このコメントは必要ない」…

JavaScript の落とし穴

ここ2週間ほど JavaScript を使ってるわけですが、いくつか嵌った部分があったのでメモ。 変数の宣言 var s = 'Hello, world'; (function() { print(s); var s = 'Hello, function'; print(s); })(); 結果 undefined Hello, functionこれはサイ本の例。実際…

Vim をしばらく使ってみた感想

vim

去年の 11/13 あたりからしばらく Vim を使っていたのですが、ようやく普通に使えるようになってきました。 で、短期間しか使っていませんが、Vim を使っていていくつか便利だと思ったことを書いていきます。 単語単位の移動 w, b で単語単位の移動ができま…

C++ から学んだいくつかのどうでもいいこと

C++

C++ Advent Calendar に参加してみました。 どうせ C++ の頭おかしい人達がいっぱい集まってるので、そっち方面はその辺の人に任せるとして、何かこう曖昧な話をだらだらと書いてみます。 コーディング規約について コーディング規約は、言語のコードをある…

Squirrel での開発環境を整える

最初はかなりやりにくかったのですが、いろいろ弄ってるうちに、大分開発するのが楽になってきたので、その方法をメモしておきます。 注意 このエントリーは 2010/11/8 に書かれたもので、あなたが見ているときには古くなっている可能性があります。 Squirre…

分かる人にも分からない誰にとっても読む価値のない日記

駄文です。何も考えずに打つとこうなるといういい例です。 リンクが全然無いのはめんどいからです。 10/23 に何かいろんなものを加速してくれるらしいライブラリについての集会があるらしいという噂を聞いて、その真実を知るべく大阪へ行ってきました。 まあ…

C++ でのビルド時間を短縮するいくつかの方法

C++

ある程度大きな C++ のコードを書いたことがある人なら大抵はこの問題について考えますよね。まして Boost なんて使っていた日には「コンパイル時間が Boost される」とか言われる訳です。 コンパイル時間を活用してコーヒー入れたりトイレ行ったりブラウジ…

簡易 variant を作ってみた

C++

使い方は Boost.Variant とほとんど一緒だけど、内部実装は全然違うやつ。 Boost.Variant は、テンプレート引数として渡されたデータを全部保持できる共有の領域を用意して、それを Boost.Variant オブジェクトの一部として構築する(つまり boost::variant …

やりたいこともメモ

Haskell で Project Euler 解きたい(Problem 41 までしか解いてないので 100 まではやりたいところ) Programming with Arrows を読んで理解したい HLint や lambdabot を試してみたい Squirrel で簡単なゲームを作りたい(C++ や SqPlus やデバッガとの連…

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

ついでに発表もしてきました。 Boost.Interfaces という、Boost 入りしていないというか一度提案して蹴られたらしいのと、あとこれの作者は Boost.Iostreams の作者と同じなんですけど、この人は半音信不通らしいというライブラリです。 ustream はこちら ht…

プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.1

ついに出ました。 株式会社ロングゲート 自分は「Chronoライブラリで考える型システム」という題で書かせて頂きました。 内容について どんな内容かというと、ChronoというC++0xで新しく入る時間ユーティリティを通じて、型システムがいかに素晴らしいかとい…

ソロ Squirrel 勉強会まとめ

をやってきました。家で。まあつまり Squirrel について調べただけなのですが。 適当にまとめていきます。 資料とか Squirrel - The Programming Language 本家さん Squirrel - Lua/組み込み系言語 Wiki* 日本語でよくまとまってるページ。 各種ページへのリ…

ソートせずにコンテナを unique にする

C++

ソートしてもいいなら std::sort(v.begin(), v.end()); v.erase(std::unique(v.begin(), v.end()), v.end()); でいいんだけど、ソートしたくない場合はどうするんだろうとか思ったわけです。 でまあ、自前でアルゴリズム書くとか無理ゲーなので、こんな風に…

関数のテンプレート引数を明示的に書いたかどうかで分岐する

こんな感じ。 #include <iostream> template<class T> struct identity { typedef T type; }; template<class T> void f(typename identity<T>::type) { std::cout << "type T" << std::endl; } template<class T, class... Types> void f(T, Types...) { std::cout << "deduced" << std::endl; } int main() { f<int>(10);</int></class></t></class></class></iostream>…

ニコニコ生放送

C++

ライブコーディングって楽しそうだなぁやってみたいなぁと思ってたので、ニコ生は丁度いい場所でした。 ということで最近はニコ生で、1時間ぐらいでゲーム作れたらいいなぁという感じで作ってます。 ↓に今まで作ったやつのソース置いてます。動画は諸問題を…

Unicodeの相互変換

C++

これも巷に溢れてるけど、Unicodeの変換ってどうなってるのかよく知らなかったから勉強がてらに書いてみた。 //#include <cstdint> namespace std { typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; } #include <utility> #</utility></cstdint>…

汎用的な CSV リーダーを作ってみた

C++

いやまあ、もうこんなの巷にいくらでも溢れてるだろうけど。 こいつの特徴は、どのヘッダにも依存しないってこと。 iterator_traits のために を使いました。まあでも とかそういうバイナリに影響するものじゃないし、これぐらいならいいよね? テンプレート…

.svnフォルダ消したい

貰ったデータに入ってることってよくあるよね。消したいよね。とか思ったのでこんなバッチ作ってみた。 @FOR /R %%I IN (.) DO @IF "%%~nxI"==".svn" @RMDIR "%%~dpnxI" /S /Q && @ECHO removed "%%~dpnxI" 実行したバッチのフォルダより下にある .svn フォ…

const_cast の仕様

まあ調べたかったのは、const_cast して未定義動作になるのはどんな場合かってだけなんだけど、ある程度翻訳したので一応載せてみる。 式 const_cast(v) の結果は T である。もし T が lvalue reference 型か function 型への rvalue reference 型である場合…

プログラムを書くということ

C++

自分にとって、プログラムを書くということは、コンパイラに対して意味を与える作業だと考えるようになりました。 意味というのは型だったりconstだったり。あとプログラムの流れというか文脈とかもあります。 型は具体的であればあるほど、コンパイラが意味…