mapped-check - mmapされているかを確認する

目的 ある領域がmmapされているか(アクセスしてもSEGVが起きないか)を、ユーザ空間からチェックしたい。 mincoreシステムコール(ある領域にDDRが割り当てられているかをチェックする)を使って実現できないか? 結果 mmapの有無は、以下のロジックで判定…

[Ruby][DONE] ローカル変数が生成されるタイミング

疑問: なぜ "ruby -e 'p(v=v)'" が NameError にならないのか? Rubyのレキシカルスコープのすごさを同僚に説明している中で気づいた。 % ruby -e 'p v' -e:1: undefined local variable or method `v' for main:Object (NameError) % ruby -e 'p (v=v)' nil…

tiny_printf - 小さいprintf()を作る

目的 組込み用途などで、footprintが小さいprintf関数が欲しい。 ライセンスを気にしなくて良いように、縛りがゆるいものが良い。 結果 printf()の仕様の勉強を兼ねて、自作した。パブリックドメインにするので、扱いはなんでも可。 サイズ縮小のために、一…

hello-minimum - libcを使わずに hello world

目的 BINARY HACKS "HACK #26, glibcを使わないで Hello World を書く" のARM版を作りたい。 できるならサイズはとことん削りたい。 結果 ARM命令版で174バイト、Thumb-2命令版で154バイトの Hello World を作った。ポイントは以下: system call を直接呼出…

fifo-nonwait - FIFO をプロセス間の同期目的で使いたい

目的 Linux上のプロセスの同期待合せ処理として、処理がシンプルなFIFO(名前付きパイプ)を使いたい。 やりたいことは、μuITRONのイベントフラグ相当の処理。 外部仕様を書くと、 書込み側はいつでも書き込め、読み出し側のopenを待たずに次の処理を続ける …

tiny_printf - 小さいprintf()を作る

目的 組込み用途などで、footprintが小さいprintf関数が欲しい。 ライセンスを気にしなくて良いように、縛りがゆるいものが良い。 結果 printf()の仕様の勉強を兼ねて、自作した。パブリックドメインにするので、扱いはなんでも可。 サイズ縮小のために、一…

find-extlib - 外部関数の呼び出しをリストアップする

目的 あるプログラムからの、外部ライブラリの関数呼び出しをチェックしたい。たとえば、自作プログラムが多数のオブジェクトから出来ているとして、その中で libc なり libm なりを参照している。 これらをリストアップして、依存を減らしたり、省サイズ化…

grep-ccopt - Cコンパイル時の引数にgrepする(特定コンパイラのみ)

目的 とあるコンパイラ*1が、コンパイル時の引数をオブジェクトファイルの特定セクション*2に埋め込んでいる。 これにgrepをかけることで、コンパイル引数が意図通りかどうか、チェックしたい。 結果 特定セクションを取り出してgrepするスクリプトを作成。…

ssh-env - ssh実行時に環境変数を設定/変更したい

目的 sshでリモートホストでコマンドを実行するときに、PATHやその他の環境変数を設定して実行したい。例えば、勝手にコマンドのバージョンアップができない重要なサーバで、自分のホーム以下にインストールしたコマンドをssh経由で実行したいのだが、PATHが…

cvs-checkout-d - CVS の "checkout -d" と module の関係

目的 CVS の checkout コマンドに -d を付けた時の挙動を理解する。 結果 意味のある結果は出なかったが、強いていえば、CVS modules の設定でおかしな(自己参照するような)ことはやらない方が良い、ということだろうか。

compound-literal - コンパウンドリテラル

目的 C99の拡張機能(GCCでも独自に拡張している)である、コンパウンドリテラルについて知る。 結果 コンパウンドリテラルとは、無名変数を記述する方法で、C99での拡張仕様。 文法的にはキャストと中括弧での変数定義を組み合わせて記述する。 gccでは、グロ…

環境変数の設定値とカレントディレクトリの一致をチェックする

目的 build時に、ツリーの位置を環境変数で指定する必要があるとする。 この場合に、環境変数の設定が不適切ならMakeが中止されるようにしたい。 結果 GNU Makeの関数(if, shell, error, call)を組み合わせて、include用のMakefileを作成した。 check-env.mk…

『Rubyクックブック』

Rubyでできること/したいことを、マクロな視点(データベースアクセスやウェブサービス構築)からミクロな視点(メソッドの削除や細かい言語仕様など)まで、一問一答形式で紹介した本。 Rubyの細かい知識を前提に書かれているのでRubyをはじめる人がいきな…

cross-compile - オープンソースソフトウェアのクロスコンパイル

目的 各種ソフトウェアパッケージをクロスコンパイルしたい。 そのときの作業メモを、まとめておく。 結果 現在、以下のパッケージのクロスコンパイルに成功している。

mail-relay - UNIXからメールを送る際に、接続先SMTPサーバを指定したい

目的 以下の条件に合うように、 特定ドメインのアドレス(jp.example.com)宛のメールはサーバ1に送る。 それ以外のメールはサーバ2に送る。 以下のメールサーバ(MTA)で、メール送信時のSMTP接続先を指定したい。 sendmail (RHELのデフォルトメールデーモン) p…

signal-piping - SIGNALをpipe経由でハンドラからメインスレッドに渡す方法

目的 Linux上(UNIX全般)で「安全な」シグナル処理を実装したい。 本来シグナルハンドラでしてもよい処理は非常に限られており、実質は特定の型のグローバル変数操作と、非同期シグナルセーフ関数の呼び出ししか安全ではない(参考:UNIX上でのC++ソフトウェア…

multi-opts - gccの-Oオプションを複数個付けたらどうなるか?

目的 "gcc -O2 -O0" のように複数最適化オプションを付けた場合に、ちゃんと -O0 だけが有効になるかを確認したい。 結果 アセンブル結果を比較して、確かに、最後に付けた -O* だけが有効になっていた。以下、詳細。

make-filter-out - filter-out関数の使い方

目的 GNU make の関数 $(filter-out) の使い方をメモしておく。 結果 filter-outを使うと、変数内の特定の単語を、完全一致/前方一致/後方一致で取り除くことができる。

cvsを認証必須のプロキシ経由で使いたい

目的 id:taiyo:20080401#p1 を参照。 結果 社内プロキシの設定では、CVSプロトコルを用いての取得はムリ(80番以外のポートへのCONNECTメソッドを許可していないため)。 ViewCVSなどのWebインターフェースを経由してのアクセスなら可能なはず(CVSGrabを使…

subversionを認証必須のプロキシ経由で使いたい

目的 id:taiyo:20080401#p1 を参照。 結果 リポジトリにhttpsでアクセスする場合のみ可能(httpアクセスは、プロキシサーバがPROPFINDメソッドを許可していないため、不可能)。~/.subversion/servers に、以下の設定を記述する: [groups] external = sssvn.…

gem(RubyGems)を認証必須のプロキシ経由で使いたい

目的 id:taiyo:20080401#p1 を参照。 結果 ~/.gemrc に、以下の設定を記述する(大文字の箇所は記入例、各自で変えること): http_proxy: http://4000000:PassWord@abcproxy.examlple.com:8080 ※PassWordに英数字以外が含まれる場合はURLエンコードが必要も…

wgetを認証必須のプロキシ経由で使いたい

目的 id:taiyo:20080401#p1 を参照。 結果 セキュリティ面(秘匿性)を考慮すると、~/.wgetrc に、以下の設定を記述するのが良い: use_proxy = on proxy_user = 4000000 proxy_passwd = PassWord http_proxy = http://abcproxy.examlple.com:8080 https_proxy …

tool-proxy - ネットワークアクセスツールでのプロキシ設定方法

目的 社内プロキシを経由して、各種のネットワークアクセスツールを使いたい。 条件は以下: 社内プロキシは認証が必須 SOCKSなどは提供されておらず、proxoyサーバのアカウントも持っていない 外部の中継サーバは使わないものとする 結果 ツール名 状況 概要…

lsso - 実行ファイルが必要とする共有ライブラリをチェックする(特にクロスコンパイル環境で)

目的 ある実行ファイルの動作に、どの共有ライブラリが必要かを把握したい。 ストレート環境であれば /bin/ldd を使えば良い(BINARY HACKS, HACK #7 を参照)のだが、クロス環境だと一々実行するのが面倒臭い。 一括で、必要なライブラリ一覧を得る方法は無い…

testdiff - Test::Unitのテスト結果をdiff形式で表示する

目的 Test::Unitでassertに失敗したときに表示されるメッセージを、unified diff形式で表示したい。 配列や文字列を操作するメソッドをテストしたときの表示が、 <"A\nB\nC\n"> expected but was <"A\nC\nD\n">. となるよりは、 --- expected +++ actual A -…

avgtime - コマンドの実行時間を手軽に計測するユーティリティ

目的 コマンドの実行時間を手軽に測りたい。 処理時間が短い場合のために、コマンドを複数回まとめて実行した結果を計測する システム状態によるバラツキを考慮して、複数回の試行の平均を取る(その際、最大値と最小値を除く) 結果 上記仕様を満たすユーテ…

getopts - コマンド "getopt", "getopts" の使い方を把握する

目的 "getopt"は、Cライブラリもコマンド版も、どちらも使い方を覚えにくい。 ここでは、コマンド版 "getopt" と、sh/bash built-in の "getopts" の使い方をまとめる。 結果 sh/bash built-inのgetoptsが使える場合は、そちらを使った方が良い。 外部コマン…

c-effective Cソース中で、実際に使用されるコードを判別する(自作編)

目的 #ifdefが複雑にネストしているCソースファイル中で、どの部分が有効かを簡単に調べたい。 背景と動機については id:taiyo:20080202#p1 などを参照。 Cプリプロセスの部分適応ツールについては昨日(id:taiyo:20080204#p1)試したので、今回はそれ以外に…

cpp-tools - Cソース中の大量のifdefを読みやすくしたい(ツール探索編)

目的 #ifdefが複雑にネストしているCソースファイル中で、どの部分が有効かを簡単に調べたい。 背景と動機については id:taiyo:20080202#p1 などを参照。 結果 C FAQ(Question 10.18)で紹介されている3つのツールと、手元にあったツール1つを試した。 名前 …

cpp-undefined-macro - プリプロセッサの条件行での未定義マクロの働き

目的 未定義のマクロが、Cプリプロセッサの条件行でどう扱われるかを確認する 結果 未定義マクロXは、以下のように展開される。 defined(X) => 偽(結局は数値の0) マクロ展開 => 数値の0