google-code-prettify

2007-05-31

TiddlyWikiベースのGTDシステム

GTDTiddlyWiki Plus
TiddlyWikiのスタイルシートとテンプレートだけでGTDTiddlyWikiっぽくした物。
GTDTiddlyWikiと違い、TiddlyWikiのコア部分に手を入れていないので、常にTiddlyWikiの最新機能が使える。

d3 a "kinkless" GTD system
見かけはGTDTiddlyWiki(Plus)と似ている。
@HOMEでタグを付けると@HOMEのtiddlerにチェックボックスとして表示される、など、GTDに便利な機能が多数用意されている。

MonkeyGTD
UIがBaseCampなどとちょっと似ている。
Dashboardがあるのが特徴。GTDTiddlyWiki plusやd3よりも、よりGTDに特化している(ように見える)。


また、TiddlyWiki(やその派生)をホスティングしているtiddlyspotというサービスもある。

2007-05-24

OpenMP - マルチプロセッサプログラミングの手法

OpenMPでは並列処理の指示を#pragmaで行うので、
  • 既存のコードにちょっとpragmaを追加するだけで、並列処理ができるようになる。
  • OpenMP非対応のコンパイラでも、そのままコンパイルできる。
といったMPI(Message Passing Interface)には無いメリットがある。
gccでは、4.2からOpenMPがサポートされている。

公式ページ
wikipediaでのOpenMPの説明

2007-05-21

フレームポインタ無しで、スタックトレースをする方法

一応組込みエンジニアなので、たまには組込みっぽい話を。

通常、フレームポインタが無い場合には、スタックトレースをする事ができない。
なぜなら、関数からの戻りアドレスがスタックのどこに格納されているかを知る事ができないからである。

しかし、フレームポインタが無い場合でも、スタックトレースをする方法がある。
それは、
「プログラムの命令コードを追っていって、SPの増減をカウントする」
という方法である。

この方法が使える条件は、
・フレームポインタが無いアーキテクチャである
・SPの増減を行うオペコードが限られている
・あまり変態的な最適化が行われずに、素直なコードを出力するコンパイラである

私が今業務で使っているRenesasのSHCコンパイラが、ちょうど上記の条件を満たす。

SH4では、追わなくてはならないオペコードは以下の通り。
・RTS
・BRA
・MOV.L Rm, @-R15
・MOV.L @R15+, Rn
・ADD #imm, R15
・LDS.L @R15+, PR
・ADD Rm, R15

最後の ADD Rm, R15は関数からリターンする時にフレームをずらすために使用されるのだが、Rmの値がわからないと、R15に足すべき値がわからない。
まともRmの値を知ろうとすると大変なのだが、ありがたい事に、ADD Rm, R15の直前には、Rmに値をストアするためのMOV @(disp, PC), Rmが存在するので、容易にRmの値がわかる。


これにより、例外発生時にスタックトレースを表示する機能を作る事ができる。

2007-05-20

自分に最適なwikiを見つける方法

WikiMatrixを使うと、あらゆる面から自分に最適なwikiを探す事ができる。
matrixでの機能比較や、ウィザードで質問に答える事でおすすめwikiを教えてくれる機能などがある。

2007-05-14

Serializing token

Mutexでは、deadlocksやpriority inversionsが発生するが、DragonFly BSDではSerializing toeknという仕組みを採用して、それを回避している。

簡単に言うと、「lock中のスレッドがsleepする場合、lockが解除される(他のスレッドがlockできる)」という物。

注意点は、
・sleepから起きた時に、lockしていたはずのリソースが変更されている可能性がある

メリットは、
・コードがかなりシンプルになる。

目からウロコ。すごいな、これ。

wikipediaの解説
Matt Dillionによる解説スレッド
Mutexと比較してのメリットがよくわかるメール

Thunderbirdで、スレッド表示のままソートする

Thunderbirdでは通常、スレッド表示中に「Subject」や「Data」のコラムをクリックしてソートすると、スレッド表示が解除されてしまう。
config editorでmailnews.thread_pane_column_unthreadsをfalseに変えてやると、スレッドのままソートする事ができる。

via lifehacker

2007-05-09

MMUを搭載する事によるコアサイズの増大量

CPUがMMUを搭載する事によるコアサイズの増大量を調べていたのだが、ちょうど良いページが見つかった。
(多分)今は無き、SuperH Incのページより。SH-4 CPUコア ファミリ

0.18µmでのSH-4のコアサイズ








キャッシュ無しキャッシュ有り
MMU無し1.76mm²4.86mm²
MMU有り1.76mm²5.67mm²


MMU自体のサイズはほとんど0だが、MMUがあるとキャッシュが複雑になり、その分サイズが増えるようだ。

2007-05-07

ext3cow - snapshotをとれるext3 FS

ext3cowは、FSのsnapshotを取り、過去のファイルを取り出す事ができるFSのようだ。
名前が表している通り、ファイルをcopy-on-writeする(らしい)。

2007-05-06

w3mでカーソル移動を便利にするpatch その2

前回作ったのは、ダメダメだった事がわかったので、作り直した。

パッチ:
patch-local-ac

スクリーンショット:



使い方:
  1. patchをあてると、各リンクの前に"[5]"のような一意な数字が表示されるようになる。
  2. fキーを押すと、数字の入力モードに入る。
  3. 数字+Enterで、対応するリンクの上にカーソルが移動する。


参考にしたのは、Firefoxのadd-onであるMouseless Browsing

2007-05-01

w3mでカーソル移動を快適にするpatch

w3mは便利なのだが、SPACEやTABで目的のリンクまで移動するのが、ちょっとめんどくさいし時間がかかる。
特にレイアウトが複雑なページの場合、TABを押すと予想と違う所にカーソルが移動する事がある。

そこで、各リンクの横に数字を表示し、数字を入力する事でカーソルをそのリンク上にジャンプできるpatchを作った。

パッチ:
patch-local-ac

スクリーンショット:



使い方:
  • fキーを押すと、数字の入力モードに入る
  • 数字+Enterで、対応するリンクの上にカーソルが移動する。

プログラム的にちょっとイマイチな点:
  • Formを表示するのと同じ書式(PE_FORM)で数字を表示している。独自の書式を作るべきだったか?
  • file.cでAnchorListに追加した数と、CurrentBuf->hrefの数が合わない。このあたりが良くわかっていない
  • tableのレイアウトが崩れる


参考にしたのは、Firefoxのadd-onであるMouseless Browsing


5/1追記:
どうも、formの処理あたりでSEGVで落ちてしまう。もう少しちゃんと中身を理解しないとダメか。