一覧の一覧
via: http://dkiroku.com/2004-11-29.html#2004-11-29-1
もちろん 読書記録 さんは、こう続けたかったのだろう。
「一覧の一覧には一覧の一覧自身を含んではいけない」
`OpenBSD で scheme のアプリ開発' みたいなことをやってます。
via: http://dkiroku.com/2004-11-29.html#2004-11-29-1
もちろん 読書記録 さんは、こう続けたかったのだろう。
「一覧の一覧には一覧の一覧自身を含んではいけない」
くっつき BBS にてメニューにコメントをくっつけられるようにしました。
前回の RSS 出力パッチは必須となっています。
ログ修正時、ログディレクトリに #latest.js が作られるようになります。
あとは、
<div id='kuttukibbs_menu'> ほげ </div>
をメニューに放りこめば出るようになります。
というか小生、Perl のコードは読むのも書くのもうんざり気味なので、 コードもちょーてきとーになっています。やばい。超やばい。
くっつき BBS をちょっといじって、 RSS 1.0 で出力できるようにしてみた。
rss ファイルは書き込み後と編集後においてのみ生成するので、 ?mode=latest で動的生成するのに比べ、サーバへの負担が減りまする。
以前のパッチそのまま移植なので、実際の作業はほとんどなかった。 変数名が変ってなかったので助かった。のかな?
Firefox のライブブックマークでは動作せず。 Sage や snownews なら普通に動く。ナンデ? まあいいや。
あと、$charset 出力になっているので、utf-8 で出力したい人は、 sub write_to_rssfile {} の最後の出力の前で、
Encode の人: $rdf = encode('utf8', decode($charset, $rdf));
Jcode の人: $rdf = Jcode->new($rdf, $charset)->utf8;
すればよろし。
せっかくだからちまちまボタンもつくってみた。
勝手に持っていってくらはい。
どうも gentime と counter の自動出力は更新とみなされるらしい。 私自身はてなアンテナは使ったことないので、 なんとも言えないのだが、 何人かが見に来ていらっしゃるようなので一応。
で、http://a.hatena.ne.jp/help#ignorereg を読むに、
'generating' と 'visitors'
を含む行を無視リストに投入すればいいのだろうなあ、と。 いや、知らんけど。
てか、Last-Modified: 見てくれてないのね。ふーん。
くっつき BBS のオリジナルは document.writeln しているので、 application/xhtml+xml ではくっつくことができない(理由:document.write ってXHTMLで動きますか?)。 ので、できるようにしてみた。
DOM で引っかけられるように 本文中に、
<div id="$logid"> ほげ </div>
を記述する必要あり($logid は適切な一意の BBS ログ名)。
URL をインラインに展開できなくなるけど、まあいいか。 どうせコメントスパムくらいにしか使われてないようだし。
解説を追加しておきますと、application/xhtml+xml, text/html のネゴシエーションは、これまた北村さんの xhtml2html を使わせてもらっています。 現在の DOCTYPE は富豪的に ``XHTML 1.1 plus MathML 2.0 plus SVG 1.1'' ナリ。htmllint は未対応。うひょ。
せっかくだからくっつき BBS 1.0 でも RSS を吐けるようにしたいなあ。 1.0 以前で動くパッチどこに置いたっけ。 あ、そういえばくっつきトラックバックも改造しないといかんのね。うーむ。
それにしても DOM でだらだら書き下すと javascript が冗長になるのう。
追記: ループ自体を出力するように修正した。
wema: http://quasiquote.org/wema/
Wiki を立ち上げて、WikiName を考えて、編集して…… といったことが面倒だけど、メモには残したい、 といった目的に向いているように思える。
セキュリティメモ等、速報的なものはこっちに貼ることにする。
現在 RSS の出力は rss10 plugin を使わせてもらっているのだが、 RSS の item の URL が "$blosxom::url$path/$filename.html" と決めうちになっているため、 カテゴリ名が変わるとリンク切れになってしまう。 こういう問題があるから w3c 推奨の永続的 URI フォーマットにしたほうがいいんだな。
で、解決方法を考えてみるが、 sub story {} に手を入れないといかんのか。 story の引数に時間情報がないから、$filename に対して stat(2)するしかないのだろうねい。無駄だなあ。 というか blosxom の plugin 仕様に問題があるのか私が単にアクセス方法を知らないだけなのか。 ここからは余談だけど、head と story と foot の引数が全部違うってのも美しくないね。 そうしない理由が考えられないなあ。
しばしいじってみる。
一応完成。解決方法としては最悪だなあ。毎回 stat してるあたり負荷に弱そうだ。 diff だけ貼っとく。
2005-01-05: 追記
以下のように $blosxom::* を参照すればよいことが判明
$blosxom::url/$blosxom::yr/$blosxom::mo_num/$blosxom::da/$fn
わかってしまえばなんということはないorz
http://sonic64.hp.infoseek.co.jp/...
すべて了解しました。 誤読しまくってしまい、申しわけございません。
ところで、
悪意を持った管理者ならファイルを見ることができてしまいます。
リモートで gpg するときに思いつく攻撃は、 パスフレーズを取ることと、 壊れた(例えば、弱いパスフレーズの)暗号化ファイルを作ることですかね。 前者は管理者がファイルを見ることができるようになります。 後者は検証可能ですのでまあ無いだろうな、と。ちょっとだけ高リスクですね。
いずれにせよ、リモートが信用できないのでしたら、 リモートに置いた暗号化ファイルは改竄されていると考えたほうがいいですね。 オリジナルのファイルのハッシュはローカルにも保存して検証できるようにしないと。
コードベースは数年前に作成した自作の CGI なのだが、bloxsom の counter(http://kichiki.hp.infoseek.co.jp/BLOSXOM/) とマージ、というか換骨奪胎、というか改悪してみた。売りは apache 互換のログを吐くようになっているところ: blosxom_counter
使いかたは plugin に置くだけ。$counter::counter で参照できる。
時間に関するコードは Mew から拝借したような気がするのだが忘れた。ライセンスどうしよう。
http://sonic64.hp.infoseek.co.jp/...
ssh + tar じゃいかんのかいな。 rsh の時代からの基本だと思うのだが。
(cd path && tar cf - .) | ssh user@hostname "(cd path && tar xvfp -)"
暗号化したければ、送信側は tar の後、受信側は tar の前にいれてやればよい。 何のために ssh 使ってるかわからないけど。
メンドイが、scp や sftp でもできなくはない。ヒントは mkfifo。 でも本末転倒。だって scp も sftp も ssh のラッパーだから(少なくとも OpenSSH は。他の処理系はどうなのかな?)。
なんか変なこと書いてる?
追記。 やっぱり変なこと書いてた。リモートマシンで pgp したいのか。全然読んでなかったorz
なら上のスクリプトを実行後、
ssh user@hostname "(cd path && find . -type f -exec gpg options {} \;)"
でどうよ? gpg は使ってないので知らない。ので、オプションは適当に。 tar ファイルで送ったものを単に gpg したいなら(多分これがお望みの方法だろう)、
(cd path && tar cf - .) | \ ssh user@hostname "(cd path && gpg options > filename.tar.gpg)"
さらに圧縮したいなら、
(cd path && tar cf - . | bzip2 -9) | \ ssh user@hostname "(cd path && gpg options > filename.tar.bz2.gpg)"
でいい罠。
http://tokuhirom.dnsalias.org/...
ふむ。RssMix を使うというのはいかがだろう。
Gauche をインストールしているなら、
perl 版もあるようですぞ。
イソギンチャクに替えてみた。 いいよね。イソギンチャク。 芽が生えて増えるとか、分裂して増えるとか、卵で増えるとか、実は歩けるとか、 魚を消化しているところが透けて見えるとか。
しかし a:visited にうまい色が思いつかない。 なんとかならぬものかのう。
それと、background-attachment: fixed できちんと表示できないブラウザがあるらしいけど、無視の方向で。 これと同じことをどうやって実現するのか方法がわからん。てか、わかって嬉しいか?
あーこれか:http://www.doraneko.org/...
CSS1コア: ユーザエージェントは 'fixed' を 'scroll' として扱ってもかまわない。もっとも、制作者が 'fixed' をサポートするブラウザにだけ画像を用意する方法はないから、少なくとも HTML 要素及び BODY 要素については 'fixed' を正しく解釈できることが推奨される。
ふーん。で、scroll に解釈されたらどうすれべいいの?
おっと、忘れてたので追記。 トラックバックの cgi は北村さんの tb_cgi を使わせていただいています。かんしゃ。 ここのサーバの perl はちと古いので、Jcode へバックポートした上で、EUC-JP 化、くっつき化、その他味付けしとります(tb_cgi.txt.diff)。
OpenBSD にファームウェアをロードするための一般的な機構が追加された(firmload.c)。
手元の ipw(Intel PRO/2100 3B) で試すためにソース(if_ipw.c のipw_read_firmware あたり)をながめてみると、/etc/firmware の下にファームウェアを置くと、 ifconfig mediaopt の値を見て適切なファームを選択するようになったようだ。 いままでは ipwcontrol -f でファームウェアを選択し、mediaopt を手動で変更する仕様だったので、設定が簡略化されたことになる。
実際の使いかたは、開発者の書いたドキュメントがあるので参考にしてほしい。
gcc に興味深い修正があったのでメモのようなもの。
openbsd-tech にて、 次のようなコードで呼出しに失敗する、との報告(gcc nested function trampoline doesn't seem to work)
$ cat a.c static void test_trampoline(void (*p)(void)) { p(); } int main( int argc, char *argv[] ) { void dummy(void) {} test_trampoline(dummy); return 0; }
もちろん ANSI 違反だが、gcc では許容されるコードではある。 上のメールにもあるように、OpenBSD の売りのひとつである W^X がまずいらしい。 実際、
$ gcc -Z a.c
と W^X をオフにすれば動作する。 最終的に以下のように修正された:config.gcc.diff。 trampoline コードの include が早過ぎたのが原因のようだ。
ところで、話はそれるが、 このようなコードは lisp/scheme ではごくあたりまえのように使われてる。 scheme では上のコードは以下のように書けるだろう*1。
(define (test_trampoline p) (p)) (define (foo) (define (dummy) #t) (test_trampoline dummy)) (write (foo))
scheme が読めなくても、なにをやっているのかはすぐに解ると思う。
こういったコードはごくあたりまえといったが、 標準関数ですら高階関数(関数を引数にとる関数)呼出しであることがある。 例として、よく挙げられるのが call-with-input-file だ。
(call-with-input-file filename proc)
filename のオープンに成功すると proc が呼ばれる。 proc は入力 port を引数にとる関数である。簡単な例をあげると、
(define (hexdump) (define (dump-char c port l) (cond ((eof-object? c) #t) (else (if (eq? (modulo l 16) 0) (display (format #f "\n~8,'0x" l))) (display (format #f " ~2,'0x" (char->integer c))) (dump-char (read-char port) port (+ l 1))))) (call-with-input-file "foo.txt" (lambda (port) (dump-char (read-char port) port 0)))) (hexdump)
foo.txt を 16 進数でダンプするスクリプトである。 もし foo.txt のオープンに失敗しても、きちんとエラーを表示して終了するはずだ。 これを C でむりやり書くと、
#include <stdio.h> void* call_with_input_file(char *fn, void* (*p)(FILE *)) { FILE *fp; if ((fp = fopen(fn, "r")) == NULL) { perror("call_with_input_file"); return NULL; } return p(fp); } int main(int argc, char *argv[]) { int l = 0; void* dump_char(char c, FILE *fp) { if (feof(fp)) return NULL; if ((l % 16) == 0) printf("\n%08x", l); printf(" %02x", c); l++; return dump_char(getc(fp), fp); } void* dummy(FILE *fp) { return dump_char(getc(fp), fp); } call_with_input_file("foo.txt", dummy); return 0; }
といった感じであろう。 dump_char の引数の数が scheme の例と違うが、 main の中の変数を参照できる例としてこのようにしてみた。
よく C でネストした関数は可読性が低い、と言われているが、どうだろうか。
386-elf で OpenBSD を使っているひとは、 gcc を -current にアップデートしてリビルドすることをお忘れなく。
いろいろ話が広がりすぎたので、まとまってないまとめ。 OpenBSD が elf の環境に移ってから 1 年半ほど経過したのだが、 いままでこのバグ報告がなかったことを見ると、 ネストした関数の gcc 拡張はあまり使われていない、 ということだろうか。よくわからないが。
*1: 親関数のスコープを出てしまうと、ネストした関数のアドレスも失われるので、 lisp/scheme のクロージャとは違うのだが。
しばらく更新を怠ってしまった。なんとまあサボリすぎ。
ローカルマシンにも blosxom を入れて遊んでみたので、ちょっとだけ感想。
といっても ChangeLog メモを実践している当方からの感想であり、 他の blog ツールを使ったことがあるわけではないので、眉に唾を付けて読むように。 この評価はちょっとおかしいんでないの?って人はコメントしてくださいな。
まずいいことから。
ポン置きで使えること。これは大きい。 なにも考えずにデータディレクトリにファイルを置けばなんとかなる。
プラグインを使えばほとんどなんでもありなところ。 blosxom 自体がかなり柔軟に作りこんであるので、 perl が書けるならルール無用である。
次はよくないこと。
上の拡張性の利点とトレードオフになってしまうのだが、 プラグインがないとクールなページとして実際機能しない。 そのためには、いろいろ探しまわらないといけない。
例えば、当方が現在インストールしているプラグインは以下のとおり。
これくらいインストールしないと、まともな(プチブログ風の)ページ構成にならないのはちょっと問題である。 初心者にはやや敷居が高い。
また、perldoc の説明もいいかげんなものが多いので、 実際どうすれば動作するのかすぐにはわからない。
ChangeLog メモだと C-x 4 a でさっさとメモできたのだが、 blosxom だと永続的 URL にタイトルがまず入るので、 タイトルをどうするか悩んでいる間にアップロードすることも面倒になってしまう。 このページの更新が遅れるのはそのせいである、ということにしておこう;P
プラグインとして cooluri を入れていると、 writeback をうまく動かせない。 .html と .htm のようにフレーバーを切り替えるという、やや反則っぽい手段は通用しないんだな。 ので、しかたがないからくっつき BBS を入れることにした。 どのようなウェブページの構成であっても貼り付けられる、 くっつき BBS の柔軟さはこのようなとき非常に役立つ。 ソースと設定ファイルをちょっとだけいじらないといけないけどね。 他の例を挙げると、cooluri2 を入れると calendar が動かなくなる。 ここらへんはちょっとシドイ。
perl の文法を忘れつつある当方にとって、 perl のソースを読んで修正するのは正直いって苦痛である。うーむ。
しかしなんといっても気になるのは blosxom が行指向のプロセッサであることだ。 light schemer であり、sxml 愛好家な当方にはとても気になる。 html は構造を持っているのに無視するな、である。
たとえば、head.html で
<div class='content'>
として待ちかまえておいて、
foot.html で
</div>
とするのはどうしようもなくバタ臭い(これを何とも思わない人は、私と住んでいる世界が違うのでしょう。たぶん)。 なんとかならないものか。
とまあけっこう不満が高まりつつあるので、いずれ他のツールに替えるか新規に作っちまうかもね。 とはいえ、RSS はそこそこイケてるので(EUC-JP だけど)、RSS は永続的 URI でいいかな。とも思うのであった。
OpenBSD がとうとう XFree86 と訣別し、xorg に移行した(Heads Up: X.Org R6.8.1 imported in XF4 のスレッド)。 cvs のモジュールは XF4 のままで、そのままマージしたというから、かなりの作業だったことだろう。
実際の機能の目玉は Heads Up: X.Org R6.8.1 imported in XF4 に詳しい。
さっそく導入してみたのだが、
のたった 3 点が実際の作業であった。特に難しい点はない。
もちろん libX11 にリンクしているソフトはすべて構築し直さなければいけないのであるが、 困ったことに KDE が起動できなくなっていた。 同様の現象がほかのポートでも見られたらしいが、そちらは修正されているようだ。
常用しているウィンドウマネージャとブラウザが無いのは困るので、 ひさびさに Enlightenment と、firefox-1.0RC2 の非公式 port を導入した。 Enlightenment はかなり長い間使用していた時期があったために選択。 firefox の公式 port は 0.8 と古いため、非公式のものをコンパイルした(議論:security related browser updates)。 firefox は動作がもっさりしているので好きにはなれないのだが、他に選択肢がないのでしかたがない。
この結果、メモリの消費がアプレット満載時の KDE に比べ格段に減った(半分以下であることは間違いない)。 しばらくこの環境でやっていくことにしよう。
このページのレイアウトがなんにもなしなのはちとさびしいので、 complexspiral demo を参考にしつつ、スタイルシートの実験をしてみる。
適当な背景画像が手元にないので、以前紹介したパブリックドメインの画像アーカイブである、 Gimp-Savvy.comから頂いてきた。 なぜか蟹。他意はまったくございませんです。はい。 こいつを gimp でガラス処理をしておしまい。 ちょっとは見栄え良くなったかな?
ドタバタしている間に無線まわりで動きがあった。以下ちょっと真面目に。
知ってのように、現在の wifi(802.11a/b/g) のカードは、 OS のドライバ(Windowsならば NDIS)がファームウェアのイメージをメモリへ転送することで利用できるようになっている。 一部のメーカーを除き、ファームウェアはソースがクローズドとなっており、 オープンソースの OS ではファームウェアを OS にバンドルすることができない状況である。
そこで、OpenBSD コミュニティは wifi デバイスのファームウェアをオープンにするよう、 現在積極的に wifi カードのメーカーへ接触を行っており、いくばくかの 成果 をあげている。
ストーリーは undeadly.org の以下のものが最も詳しい。
slashdot は以下のストーリーである。 OpenBSD Activism Shows Drivers Can Be Freed
特に Intel に対しては、嘆願書を自動で送信するフォームが用意されている。
Intel Support of Centrino Under Linux
私も遅れ馳せながら送信してきたが、現在 10,000 人程度が登録しているようである。
もしあなたがオープンソースの OS を使用しており、
Intel の無線カードをフリーなライセンスの下で利用したいのならば、
ぜひ上記フォームから Intel へメッージを送信してほしい。
もちろん最も効果的なのはベンダ窓口への直接の電話やメールなので、できればそちらも行ってほしい。
上のリンクにて少し触れられている Atheros のカードは、OpenBSD にて先ほどコミットされた。
http://marc.theaimsgroup.com/...
これは Atheros のファームウェアを一切使用しない完全にフリーなドライバである。
引越し作業中であります。 こんなに早く手続きが完了するとは思ってなかった。
それにしても、こう、なんか荒れ野を進む感じでいいやね。 なんにもないところとか。
このままこっそり作業を続けてもいかたないので、 とりあえず急ごしらえで blosxom とか使ってみたり。 RSS もデフォルトのまんまなのでタグ閉じてないし。 それよりなにより、 ここの RSS の URL は永続的 にするつもりはないんで、 フィードしないでね。