better gyp

仕事でごりごり gyp を使って早くも3年になる。いくつか個人的に痒いところを修正して公開してみた。 Github においてある修正版 okumura/gyp オリジナル gyp - Generate Your Projects - Google Project Hosting 修正は以下のとおり。 Android: 非 cygwin …

faster octree color quantization

256色画像全盛期はとっくに過ぎ去った感がありますが、今回は画像を256色以下に減色するという話です。減色された画像の画質を向上させる方法として誤差拡散法がありますが、今回はそれはやりません。 減色する方法は大昔から研究されていて有名なものがいく…

gyp でネイティブコードプロジェクトのビルドを多環境に対応させる

今回は「gyp でネイティブコードプロジェクトのビルドを多環境に対応させる」です。私がやっていることをメモしておきます。 背景 私は Windows のコードをよく書いていました。ある時から Android、Windows Mobile、Linux、Mac OS X、iOS でも動くように意…

tiny hash table

Cでコードを書いているとハッシュテーブル*1が欲しくなることが多々あります。というわけで小さいのを書いてみました。 https://github.com/okumura/thtbl ハッシュテーブルについて ハッシュテーブルは、あるキーをハッシュ関数を使ってマッピングし、それ…

画像の色数を求めたりヒストグラムを作るためのソートをいろいろ実装してみた

画像の色数を求めるにはハッシュ的なものを使うよりもソートした方が速いという話です。 http://blog.livedoor.jp/junki560/archives/21233822.html http://blog.livedoor.jp/junki560/archives/21305807.html また、ヒストグラムを高速に作ろうとすると色の…

bswap

今日のコード。Windows XPとMac OS X 10.6.8で動作することを確認しています。 https://github.com/okumura/bswap バイナリプログラミングをやっていると、エンディアンに応じてバイトオーダーをひっくり返す(バイトスワップ)というのがよくあります。バイ…

Topological sort

トポロジカルソート*1を書いてみました。C言語、D言語、Lua、Rubyで。 https://github.com/okumura/topological_sort トポロジカルソートが何に使えるかというと、makeの依存性解決などで使えます。yamakeというビルドシステムを作る上で、参考にしているシ…

some points for HTTP client on native applications (1)

はじめに HTTP は利用頻度が高いネットワークプロトコルの一つだと思います。HTTP サーバを書くことはそんなに多くないと思いますが、HTTP クライアントは何らかの形で利用したり実装したりしたことがある人は多いのではないでしょうか。今回は、ネイティブ…

apache のミラーサイトに facebook が!

> Attempting to fetch apr-1.4.2.tar.bz2 from http://mirror.facebook.net/apache/apr

大工のようなプログラマ

私の父は大工である。二級建築士で、大抵は二階建ての木造住宅を建てている。 私が学生のころ、たまに小遣い稼ぎとして父の手伝いをしていた。建前、床張り、ベニヤ張り、天井張りなどのハードワークがメインだ。特に天井張りはよく覚えている。普段はひとり…

ナイスガイから教わった C でコードを書くときのほにゃらら 01

二年前に出会ったナイスガイから C でコードを書くときに大事なことをいくつか教わった。 教わったことは、何かしら自分でまとめて誰かに伝えていかねばと思っているのでぼちぼちまとめていく。 移植性を高くする 以前の私は環境限定のコードを書くことが多…

epoll と kqueue について思ったことの垂れ流し

C10K Problem では、epoll/kqueue は速く、select/poll などは遅い、というのをよく見かける。実際ベンチマーク結果を見ると、そのように見える。計算量的には、epoll/kqueue は O(log2N)、select/poll は O(N) のように見える。ベンチマーク結果は libevent…

Android のソースコードの一部をサクっと入手する

Android のソースコードの一部をさくっと入手する方法を見つけたので紹介しておきます。 http://android.git.kernel.org/?p=platform/external/skia.git;a=snapshot;h=donut;sf=tgz こんな風に git レポジトリとヘッドを指定してやると、tar.gz がダウンロー…

しばらく日本語ブログをお休みします

最年少 Ruby コミッターが 14 歳というのにも衝撃を受けましたが、彼のブログは普通に全文英語だったりするのにも衝撃を受けました。私は年齢は彼の二倍ですが、悔しいのでしばらく日本語ブログをお休みします。英語のブログはこちら。 440 posting not allo…

yamake planned features

Command-Line Options debug or release MBCS or Unicode for Windows target host target CPU architecture support CFLAGS, CXXFLAGS Project Options support dependencies more target Platform freebsd openbsd target CPU architecture support CFLAGS…

state and status

プログラミングをしていると、状態管理をすることがよくあります。私がよく迷うのは、state、status の使い分け方です。 私の理解では、state = one of status です。例えば、HTTP レスポンスの最初の一行目*1には status code というものがありますが、これ…

Tools to build Google Chrome, gyp and Ninja

先日から yamake というオレオレメイクツールを作っている*1のですが、その直後のとあるツイートで gyp、Ninja というビルドシステムがあるということを知りました。どちらも、Chromium のビルドをより良くするために生まれたようです。知らなかったので、少…

Goodbye Eclipse, Hello Emacs.

気づけばあまり Eclipse のお世話になっていないので、Emacs でいいやと思うようになりました。で、Eclipse でお気に入りだった機能と最低限必要な機能をどうやって代替するかのメモを書いておきます。 タグジャンプ M-. 先に TAGS ファイルを作っておく必要…

C code directory style

C でコードを書くときのディレクトリの作り方の話です。これはまぁ好みの話ですね。私は大抵こうします。 contrib include lib src doc include xxx lib src samples tests contrib には、外部ライブラリを入れます。中に include と lib ディレクトリを作っ…

Thrift IDL part 1

RPC → シリアライズ → protobuf → MessagePack と見ているうちに、IDL がやりたくなってきました。MessagePack では、Thrift IDL が使えるようです。Thrift IDL*1 は facebook*2 で開発されたんですねー。 多言語開発の手法の一つとして、C/C++ で書いて SWI…

yamake is makefile generator from YAML

「yaml って Makefile を書くのに向いてるんじゃないか?」で書いたものを試しに作ってみた。 okumura/yamake - GitHub scons がお気に入りなので、Python で書いた*1。今のところ YAML から scons のスクリプトを出力することができるだけ。 これが・・・ p…

yaml って Makefile を書くのに向いてるんじゃないか?

設定ファイルとして、私は yaml がお気に入りです。 The Official YAML Web Site なんといっても記述量が少ない。DSL もいいですが、やっぱり特化型には敵わないと思います。また、ライブラリが豊富で主要なプログラミング言語のほとんどで使えるというのも…

GUI アプリケーションのエントリポイントを並べてみる

Delphi begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Lazarus begin {$I project1.lrs} Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Qt #include <qapplication.h> #include <qpushbutton.h> i</qpushbutton.h></qapplication.h>…

GUI とマルチスレッド、GUI ツールキットの振る舞い

はじめに プラットフォームによっては、GUI のコントロールはコントロールが所属しているスレッド以外から操作することは安全ではないことが多い*1。私が Windows でこのことを知ったが、どうやら大抵のプラットフォームで同じことが言える。これはおそらく…

エラーハンドリングに関する私なりのガイドライン

いつからか、通信に関するプログラミングを行う機会が多くなった。通信が成功することは奇跡なので、様々な状況で、様々な原因により、エラーが発生し、失敗する。プログラミングにおいてエラーハンドリングは重要だが、ネットワークプログラミングでも同様…

国際化ドメイン名 ( IDN ) について

国際化ドメイン名を使うと、ドメイン名にアルファベットや数字だけでなく日本語を含む様々な文字が利用出来るようになる。自分の書いたコードを、これに対応させるにはどうすればいいか?*1これは、ドメイン名から IP アドレスを得る話なので、名前解決の話…

MD5、MD4 のメモ

MD5 も Base64 の記事で書いたライブラリが大体実装している。MD4 は時代遅れなせいか、MD5 よりも実装が少ないようだ。MD4 が使われている例としては、Active Directory で活躍する Windows 統合認証などの基礎となる NTLM 認証などがある。 MD5 RFC http:/…

Base64 って結構カオス?

Base64 のライブラリをあまり調べたことがなかったので調べてみた。 RFC http://tools.ietf.org/html/rfc4648 標準で、一番あたらしいやつ http://tools.ietf.org/html/rfc3548 標準だが、obsoleted らしい http://tools.ietf.org/html/rfc2045 MIME 用 http…

C/C++ 開発のストレスを軽減する ( 2 )

今回は、Windows + ウイルスバスター環境でコードを変更せずにビルド時間を短縮する方法。 手順は簡単、ウイルスバスターを一時的にオフにするだけ。タスクトレイのアイコンを右クリックして終了、で OK。私の環境では、Visual Studio のビルド時間が半分に…

私のネイティブアプリプログラマとしての三種の神器

三種の神器といいつつ、分類毎に分けてるので三つ以上あります。前提条件としては、マルチプラットフォームに対応したネイティブアプリケーションを開発する、という感じです。 OS Mac OS X Windows Linux 言語 C/C++ Objective-C Lua IDE Eclipse Xcode Vis…