2007-01-01から1年間の記事一覧

ブラウザ間のCSS解釈の違い

バイト先で、ブラウザ間のCSS解釈の違いでだいぶはまりました。 参考リンクを貼っとこう。WinIEのバグリスト特に、バイト先ではまったのは以下、 ボックスの幅や高さを算出するときにパディングやボーダーのサイズを含めてしまうブラウザ間の差をバグと呼ぶ…

オープンソースソフトウェアのHTML Help (chmファイル)

オープンソースソフトウェア(autoconf, gcc, perl等)のマニュアルをchm形式に変換してアップしてるサイト http://htmlhelp.berlios.de/wiki/CHM_Bookschmだと、前方一致のキーワード検索ができるので、autoconfのマクロを調べる場合などにとても便利。chmの…

tracプラグインとか

なぜか大学院の授業でtracのプラグインを作ることになった。とりあえずプラグインのtutorialを見てたら、プラグインが表示するHTML用テンプレートの記述に "include header.cs"みたいなのを発見。csファイル*1ってなんだよと思って調べてみたらClearSilverの…

株売買の準備

久しぶりに更新。そろそろ株に手を出そうかと考えているので、株の売買補助ツールについて調べています。ざっと探したところ、株価やチャート表示や、株価を条件に使った自動売買ツールはあるようですが、各株式会社に関連するニュースをチャートと対応づけ…

ocamldebugの調査

ML言語の一種であるOcamlに付属している、ocamldebugというデバッガについて調べたのでメモ。 かなり間違っている可能性があるので、注意。 gdbライクなCUI break,info,helpコマンド等、gdbを知っている人なら何となく使えるようにコマンド名がつけられてま…

Debug.Traceを使ってprintf風デバッグ

Haskell処理系であるGHCにはDebug.Traceモジュールというのが提供されています*1。その中のtrace関数を使うと、C言語のおけるprintfデバッグのようなことができます。ただ、Haskellは遅延評価を行う言語なので、traceが呼び出されるタイミングに注意する必要…

Haskellだってバグるよねっていう話し(C言語の関数をHaskellで呼ぶ)

C言語の関数をHaskellから呼び出すための記述に関する仕様が存在します*1 自分が使っているHaskell処理系のGHCは、この仕様に準拠しています。そこで、この機能を使ってバグったC関数をHaskellから呼ぶことでメモリアクセス違反させてみます*2。 // foo.c #i…

Haskell本の感想とMonad

教養のために「ふつうのHaskellプログラミング」を読みました。Haskellを触ったことがない私のような人が読むのにちょうど良い本でした。ただ、Monad則については読んでも良くわかりませんでした。Maybeモナド等、Monadインスタンスの使い方はわかるのですが…

スレッドの関数一覧(pthread, win32スレッド)

輪講でpthreadについて、ゼミ担当の人の話を聞きました*1。せっかくなので、windowsのスレッド用 apiと大体対応する関数を並べてみます。 なお、個々のスレッドをあらわすデータ構造の型は、pthreadではpthread_t, windowsスレッドではHANDLEです。各関数の…

ゼロ番地を先頭とするページにマップする

mmapのflags引数にMAP_FIXEDフラグを指定することで、OSの実装によってはゼロ番地を先頭とするページにマップできます*1たとえば、i386以降のCPU, Vine Linux 4.0, gcc-4.1.1を使った環境で以下のコードをコンパイルして実行するとゼロ番地にアクセスできま…

最適化のトリビア

以下のコードがあったとします。 #include <stdio.h> int main(int argc, char* argv[]){ int i; if(argc > 1){ i = 10; } printf("i = %d\n", i); return 0; } これをgcc 4.1.1でコンパイルして実行すると以下のようになります。 $gcc -O2 main.c $./a.out 10 <-----</stdio.h>…

static変数に対応するアドレスを探す(ELF format編)

共有ライブラリ上に存在する、あるstatic変数aのプロセス上でのアドレスを知りたいときがあります。apt-getでインストールした共有ライブラリをデバッグしたい時なんかがそうです。 最近、こういったアドレスを探すことが多いので、忘れないようにメモってお…

仕様書等のリンク集

ソフトウェア実装の際、様々な仕様書を参考にすることがありますが、どんな仕様書がどこにあるのか忘れることがあるのでメモっておきます。仕様書だけではなく、複数の仕様書について言及、比較をしている資料も挙げておきます。 オブジェクトファイルに関す…

補足

バックトレースがうまくとれない件ですが、これに対処しようとした場合、test.rbのdebuggerメソッドでbreakした瞬間に、Ruby言語上のstack frameに関するデータ構造をアセンブラ(C言語)レベルで読み込んで解析する必要があると思います。でも、これを言語…

デバッガの実装(Ruby/Python編)

最後に、Ruby,Pythonのデバッガの実装について調べてみました。Pythonには、pdb。 Rubyにはdebug.rbというデバッガが存在します。 これらは、各言語が提供するフック関数を利用して実装されています。フック関数を設定する関数(メソッド)は以下になります…

デバッガの実装(Java編)

次はJavaのデバッガについて調べました。 背景 Javaプログラムの実行は、Java Virtual Machine(以下JVM)上に存在する仮想的なCPUがbytecode(仮想的なCPUが解釈する機械語)を解釈、処理をしていくことによって、行われます。bytecodeはJavaコードをjavacでコ…

デバッガの実装(C/C++編)

デバッガの実装について興味があるので調べてみました。まずは、基本であるC/C++(さらには、アセンブラ)のデバッガについて。 単語の定義 debugger デバッグを行うプロセス。debuggeeの実行制御等を行う debuggee デバッグ対象のプロセス 解説 一般的なOS…

はてなダイアリーへようこそ!

このページはあなた専用の日記(ブログ)です。*1さっそく「日記を書く」をクリックして最初の記事を書いてみましょう。はてなダイアリーの一番簡単な使い方を知りたい方は、以下の動画をご覧ください。(再生ボタンをクリックすると、はてなダイアリーの使…