2008/03/08 Saturday 00:06:06
秋元さんの blog経由でこんなの発見
http://codepad.org/
がーん、似たようなものを作ろうとしてたのに先越されてしまった。
でもさすがに実行出来るページを公開しようとは思ってなかったな。
Cのコードを実行出来るなんてとっても危険な予感がする。破れるものなら破ってみろ見たいな事が書いてあるのでいろいろイタズラをしてみたけどほとんどのシステムコールは無効にされている様子。どのレベルで防いでいるのか解らなかったのでスタックに置いたコードから system call を呼んでみる。
http://codepad.org/h9rGgGop
これは、「/etc/passwd を open(2) して返値を表示するコード」をスタックに置いて実行するプログラム。アセンブリコードは以下の通り
segment .text
global _start
_start:
push ebp
mov ebp, esp
mov eax, 0x00647773
push eax
mov eax, 0x7361702f
push eax
mov eax, 0x6374652f
push eax
mov eax, 5 ;write
mov ebx, esp
mov ecx, 0
int 0x80
add eax, '0'
push eax
mov eax, 4 ;write
mov ebx, 1 ;stdout
mov ecx, esp
mov edx, 1
int 0x80
leave
ret
上手くいけば open(2) したファイルディスクリプタが表示されるはずなんだけど、がっちり防がれている。
kernel に 手を入れて system call 制御しているのかなと思ったんだけど、良く読むと ptrace で制御しているんだそうな。ptrace ってデバッグ用のシステムコールだと思ってたんだけどこんな事もできるんだな。今度使ってみたい。
2008/03/07 Friday 05:02:22
データ圧縮の究極より
25 名前: 名無しさん@1周年 投稿日: 2000/11/09(木) 20:42
円周率は、それを任意の桁まで求めるプログラムによって
完全に表現できるじゃん?
これこそ、究極の圧縮。
26 名前: >25 投稿日: 2000/11/09(木) 20:56
確かに圧縮率は飛び抜けて良いが、復元速度が鬼のように遅ぞ。
このアルゴリズム。定期的に見かけるけど、冗談抜きで実用的なんじゃないかと思う。
円周率をインデックシングしたデーターベースで保持することでパフォーマンスの問題は解決するし、容量が問題になるならネットワーク越しに得ればよい。
#ネットワークストレージが使えるんなら THcompこそ究極なんだろうけど、世界共通の円周率を外部記憶に外出しするという意味では優位性がある。例えば任意の桁から任意の長さの円周率を返す πサーバーが世界の何処かに在ればよい。
どれくらいの桁の円周率でどれほどの圧縮率が得られるのか知りたい。誰か実装した人はいるんだろうか。
後で調べる。
2008/03/05 Wednesday 04:42:41
この前フィボナッチ関数のグラフを gnuplot で描いた時に sakaik さんから詳しい書き方を聞かれたので、今回はリュカ数をプロットしてその手順を詳しく書いてみる。
リュカ数列とは、フィボナッチ数列が



と定義されるのに対し初期値を


とした時の数列をリュカ数列と呼ぶらしい。see リュカ数 – Wikipedia
具体的には
2, 1, 3, 4, 7, 11, 18, 29
みたいな感じ。
この数列を実数(複素数)の世界に拡張して、入力を z(レンジは -5 〜 5), 出力の実部を x 軸, 虚部を y 軸にプロットしてみる。
ソースコード(lucas.c)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <complex.h>
#define THETA 1.618034
double complex clucas(double i)
{
double complex c = cpow(-THETA, -i);
return (pow(THETA, i) + creal(c)) + cimag(c) * I;
}
void plot_clucas(double min, double max)
{
double z;
double complex c;
for(z=min; z<max; z+=0.1){
c = clucas(z);
printf("%lf\t%lf\t%lf\n", creal(c), cimag(c), z);
}
}
int main(int argc, char *args[]){
plot_clucas(-5, 5);
return EXIT_SUCCESS;
}
これをコンパイルして実行する
% gcc -lm lucas.c -o lucas
% lucas > lucas.dat
次にこんな感じの plt ファイル(lucas.plt)を用意して
set term png
set output "lucas.png"
splot "lucas.dat" with lines
gnuplot を実行すると・・・
% gnuplot lucas.plt
グラフの出来上がり!

ついでなので fibonacci 関数と混ぜてみる。

赤がリュカ数で緑がフィボナッチ。
2008/03/03 Monday 23:27:56
ブックマーク管理ツールの sitebar を長らく使ってきたんだけど、この sitebar の欠点は最大 500 リンクまでという制限があること。今日その 500 に達してしまったので別のブックマークツール選定中。(自前で sitebar を運用するってう手もあるんだけど、sitebar のバージョンアップが割と頻繁にあって最新版に追従するのが面倒になって止めた経緯がある)
Bookmark ツールで有名所は del.icio.us, furl, spurl あたりかな。知名度で言えば圧倒的に del.icio.us の一人勝ちのような感じ(alexa調べ)だけど機能面ではどうだろうか。
特に furl と spurl に在るコンテンツのまるごとキャッシュ機能が素晴らしい。何が良いってブックマークの全文検索が出来る。 (タグとか付けなくて良い)
しばらく furl と spurl を両方使ってみて気に入った方を使い続けようかな。他にオススメのブックマークツールがあったら教えて下さいな。
# digg, reddit、はてブはどちらかというとソーシャルニュースサイトの様なきらいがあるので避けた。
No comments yet.
Robert wrote related post…
Silk posts and stories…
Trackback by Robert wrote related post — 2008/06/19 Thursday @ 22:01:38