退職しました

2019/10/31 を持って8年間勤めてきたドワンゴを退職しました。 ドワンゴ退職エントリの旬は過ぎているよう気もしますし、こんな何年も放置していたブログで今更何をと思わなくもないですが、なんとなく自分の気持ちの整理もかねて適当に綴ってみようと思い…

lix:CharSequence

XML パーサを作りにあたって、細切れのstringオブジェクトを作るのを避けたかったので、 元々のXMLドキュメントはそのままにしておいてその中の文字位置と文字列長で文字列を占めるという戦略をとりたく、 そのために作ったクラスです。https://code.google.…

xml パーサを書いたのでそれについて

ちょっと特殊な環境下で xml をパースする必要があって、いろいろと xml パースライブラリを探したのですが、どれもちょっとづつ求めるものと違うところがありうまく行かず、自前で xml パーサを書く必要がありました。 その時のことを書いてみようかと思い…

SAFE_DELETE って安全でも何でもないよね。

誰が一番最初に作って広めたのかわからないんだけど、 #define SAFE_DELETE( p ) if(p) { delete (p); (p) = NULL; } っていうマクロ。そもそも NULL を delete してもなんの問題もないし、このマクロを通したからといって何が安全になるわけでもない。全て…

Named コンストラクタについて考える。

ごくアタリマエのことだったりするのかもしれないのですが、 コンストラクタの引数が多くなるとわかりづらくなるので、それを避けるためにコンストラクタとは別に static でインスタンスを生成して返す関数を作るっていうのがよくありますけど、 class Human…

設定ファイルからの読み込みをもうちょっと C++ っぽくしてみる。

前のエントリ設定ファイルから true か false を読み出す。 - meg_nakagamiの日記ですけど、これは C++ 的にはまだまだ甘いので、みんながある程度 C++ を詳しく知っている、もしくは向上心があって知らないことを学習の機会とみなしてくれる人であるという…

設定ファイルから true か false を読み出す。

例えば何らかの設定ファイルに true か false という値が書いてあって、それを読み出して拡張機能の有無を変更しなければいけないとします。いろいろ状況は違うだろうけど、とりあえず std::wstring GetProperty( const char* pch ) という関数で "EnableExt…

php ロギング機構を作ってみた

はじめに phpでデベロッパ向けアプリケーションログ機構をつくってみたのでその説明をしてみます。一般的にプログラミングにおいてデベロッパ向けロギングというのはコンポーネントを横断する概念です。アプリケーション上ある機能 X があり、別の機能 Y が…

PHP の strval が使いづらい。

PHP の strval 関数のマニュアルPHP: strval - Manualに strval() は配列に対して使うことはできず、 __toString メソッドを実装していないオブジェクトに対しても使うことはできません。 という記述があるけれども、これはドキュメントとしておかしいと思う…

lix::Failable

cpp

lix::Succession が失敗したときにエラーコードを返す、というだけのものであるのに対して、何らかの値を取得し、失敗時はエラーコードを返す、という場合に使用することを想定したクラステンプレートです。 // 何らかの文字列を引数で受けた string に格納…

lix::Succession

cpp

試しに公開してみた https://code.google.com/p/lix-failable/source/browse/ こいつですが、例えばこういう関数を作るとして、 // 普通は失敗しない何かをする。失敗時は false を返す、失敗理由は(Win32の)GetLastError で。 BOOL DoSomething( int x); こ…

Google Code に公開してみるてすと。

ちょっとしたコードの公開にgoogle code など使ってみる。 Google Code Archive - Long-term storage for Google Code Project Hosting. よくわかんない。趣味ライブラリの一部分だけを公開したいんだけど、どうすればいいのか。

スレッドローカル

cpp

こうか? #if __cplusplus > 199711L #define THREAD_LOCAL thread_local #else #if defined( _MSC_VER ) #define THREAD_LOCAL __declspec(thread) #else #define THREAD_LOCAL __thread #endif THREAD_LOCAL int x = 42;

マイクロソフトはインストーラーが何をしないといけないかちゃんと説明すべき

アプリケーションをつくって、誰かに使ってもらおうとするとインストーラーが必要になるわけだけど、世の中にはこれに関する情報が非常に少ない。 だからInstallShieldとかを使うわけだけど、やりたいことはアプリケーションを使ってもらいたいということで…

LocalAppData にアプリケーションをインストールするという選択

GoogleChrome は ProgramFiles ではなく、LocalAppData(C:\Users\[ユーザー名]\AppData\ もしくは C:\Documents And Settings\[ユーザー名]\Local Settings\Application Data\)にインストールされる。 このLocalAppDataは(MSがどう考えるかわからないが)シ…

typesafe な sprintf

cpp

boost::format を使えばいいんだけど、operator%がなんとなく嫌だったり、フォーマット不能な場合にデフォルトで例外投げるのが嫌だったりするので、そのへんを補正してsprintf感覚で使えるようにしたマクロ。引数10個まで行ける。 #include <boost/preprocessor.hpp> #include <boost/format.hpp> #inc</boost/format.hpp></boost/preprocessor.hpp>…