移行作業
blosxomにも飽きたので、移行します(http://quasiquote.org/log2/)。
`OpenBSD で scheme のアプリ開発' みたいなことをやってます。
仮想画面を切り替えたり Firefox でタブをツンツンしたりした瞬間に落ちる現象が 解決された模様。
ここらへんに経緯がある https://bugs.freedesktop.org/...(←ヲレヲレ署名)。
変更箇所からいって、
# cd XF4/xc/programs/Xserver/fb # make && make install
で十分かな。
OpenBSD の場合、セキュリティのため mmap のリターンページのアドレスをかき混ぜてるので、 書き込んだあとにうっかりそのまま読もうとして失敗とか、固有の(!)問題がいろいろとある。 gprolog とか clisp とかがまだ動かない。誰か、きちんと動く Common Lisp 処理系プリーズ。
http://mail-index.netbsd.org/...
via: http://sigsegv.s25.xrea.com/...
まじですか。試そうかなあ。でも重要度はかなり低いなあ。どうしよ。
もしこれが動けば、OpenBSD 上で動作していない機能は残り、
のみとなるわけだ。うはは。
参考: http://www.cse.unsw.edu.au/~dons/x31.html
mp3, vorbis プレイヤーとして、gqmpeg を愛用しているのだが、 vorbis でエンコードしたファイルの曲名がいつも '#' で埋められているのでおかしいなあ、と。
gqmpeg のソースを読んでみると、 ogginfo の出力をパイプで読んでいるだけのようだ。 そこで、
$ ogginfo foo.ogg
とすると、タイトルが '#' で埋められている。
で、vorbis ファイルを直接読んでみると、 やっぱり '#' で埋められてる。
vorbis のファイルは abcde エンコードしており、こいつは内部で oggenc を使っているので、 結局のところ vorbis-tools のロケールまわりに問題があるらしい。
ざっとコードを見るに、 文字コードの変換は share/utf8.c で行っているんだけど、 config.h をインクルードしてないのが原因だった。 share/iconvert.c も同じく。
というわけで、以下のファイルを ports/audio/vorbis-tools/patches 以下に投入。
patch-share_iconvert_c and patch-share_utf8_c
Citrus なしの OpenBSD の場合、環境変数 CHARSET を設定すべし(EUC-JP とか)。 Citrus 環境下では nl_langinfo(CODESET); されるのでロケールから自動設定される。
というわけで解決。
てか、config.h が無かったら、 utf8.c も iconvert.c も何もしないコードしか出力されないんだけど。 誰もテストしてないのかよ!なんだかなあ。
ところで、FreeBSD も NetBSD も対策をしてないようなので、 このパッチは有効みたい。未確認。
LL(1) で解決: ch3-03p2.g
expressions : expr ("="^ expr )* "\n" | "\n" ;
のようにすればよい。この場合、左辺を確定した後で右辺のマッチに入るので曖昧にならない。 ただし、この場合は、
1+1=3
も文法的に正しくなる。ので、木を評価するときに左辺をチェックする。 今回はそのまま出力するだけなので、上の式だと '3' を印字する。
そういえば、一部のパターンマッチの機構を持つ言語だと確かに上の文法もアリだ。 なるほどなるほど。
LL(k) parser generator の pccts について少しだけ。
私が教えてあげるわけじゃなくって、私が入門。 つうか教えてくれ。
http://www.okisoft.co.jp/esc/whitepaper.html こちらの「開発」はおもしろおかしくディープなこと書いていらっしゃるし、書籍なら、
Nutshell の Lex & Yaccあたりを読めば、lexer と parser でどんなことができるのか、 ひととおりは分かるようになるんじゃないかなあ (ちなみに yacc は LALR parser generator)。 って、日本語訳版は絶版になってるのか。 知らなかった。
http://marc.theaimsgroup.com/...
あー、これこれ。 これが起こると X ごと落とさないといけなくなるという悲惨な状況に。 あと、上で指摘されてるけど、水平方向への異常しか起こらないところも謎。
Blender で起こるんだよね。 Wings 3D でも起こるんだよね。南無南無。
うちだけの現象だと思ってた。 確かに共通してるのは OpenGL ぐらいしかないな(Wings 3D は SDL を介してるけど)。
ところで Wings 3D はおもしろいよ(Erlang で動く実用ソフトだし。ソースもなかなか読みごたえがある)。 別稿でネタ書こうかしら。
http://distantland.hp.infoseek.co.jp/...
OpenBSD でも起こるのだけど、これで解決。
--- gimp-2.2.8/plug-ins/script-fu/siod/slib.c.orig Tue Jan 11 20:27:32 2005 +++ gimp-2.2.8/plug-ins/script-fu/siod/slib.c Fri Jul 1 10:40:55 2005 @@ -1131,6 +1131,8 @@ cname = name; while ((c = *cname++)) hash = ((hash * 17) ^ c) % n; + if (hash < 0) + hash = -hash; sl = obarray[hash]; }
たしかにこのままでは c < 0 のときに動作しなくなることがある。
この手の文字列処理って、 思い込みで書いてるのでけっこう気が付きにくいんだよね。
http://marc.theaimsgroup.com/...
Linux は前からできてたんだけど、 OpenBSD に KERN_CPTIME2 という sysctl が追加された のでこちらでも表示できるようなった。
うむ。かっこいい。
http://www.studioe3.com/Acrylic/new.asp
MS に買収されてからとんと音沙汰がなかった Expression のベータが Acrylic というコードネームでひっそりと公開されている。
動作環境は Windows XP SP2 とのこと。 ダウンロードには Passport のアカウントが必要。
スクリーンショットはこんな感じ。
独特の操作感がユーザを選ぶのだけど、 まだ触ったことがない人は一度試してみることをお勧めしておく。
てか、この領域のフリーの実装ってないのね。 ドローソフトのメジャーにはなれそうにないけど、 それなりのユーザは確保できるのではないかなあ。
http://marc.theaimsgroup.com/...
OpenBSD もやっと ACPI のフレームワークが導入された。 カーネルの更新と監視デーモン acpid(8) および ダンプ acpidump(8) が追加された。
いまのところ config(8) ファイルに ACPI_ENABLE をセットしないと有効なカーネルを構築することはない。
とりあえずカーネルの再構築と MAKEDEV acpi をして、dmesg の diff を取ってみた。
+acpi0 at mainbus0: revision 2 attached +acpitimer0 at acpi0: 3579545 Hz, 24 bits +acpi device at acpi0 from table DSDT not configured +acpi device at acpi0 from table FACP not configured +acpi device at acpi0 from table SSDT not configured +acpi device at acpi0 from table ECDT not configured +acpi device at acpi0 from table TCPA not configured +acpi device at acpi0 from table BOOT not configured
ichpcib0 がエラー出してる。いずれ直るだろうけど。
-ichpcib0 at pci0 dev 31 function 0 "Intel 82801DBM LPC" rev 0x01 +ichpcib0 at pci0 dev 31 function 0 "Intel 82801DBM LPC" rev 0x01: failed to map I/O space
http://lemonodor.com/archives/001154.html
一番問題に適した言語を使えばいいんじゃないかなあ。
とかいいながら、 私自身も本業の scheme で書かれたシミュレータを少しずつ erlang に置き換え作業中であるのは公然の秘密だ。
http://marc.theaimsgroup.com/...
Hackathon が開催中なのでソースツリーが更新されまくってるんだけど、 なかにはこんなものが。
次のような馬鹿げたミスをしても停止してくれるようになった。
#include <stdio.h> #include <stdlib.h> struct foo { int i; char *t; }; main() { struct foo *f; struct foo b = { -1, "Invalid code has passed, why?" }; f = malloc(sizeof(f)); /* wrong! should be sizeof(*f) */ memcpy(f, &b, sizeof(b)); printf("%s\n", f->t); return 0; }
segmentation fault を吐いて異常終了してくれる。
もちろん環境変数 MALLOC_OPTIONS に 'G' を含ませるか、 /etc/malloc.conf の設定をしないと効果はないので注意 (このオプションと 'F(Freeguard)' は OpenBSD のみ完備。 FreeBSD や NetBSD には存在しない。残念でした)。
malloc の guard オプション 'F' や 'G' は、 設定しても実行時のパフォーマンスにそれほど影響はないので、 デフォルト On でもいいかもしれない。
# ln -s FG /etc/malloc.conf
動かないソフトが出るかもしれないけど、 それは運良く動いているだけのこと。 この際だから直しちゃえ。
参考: http://marc.theaimsgroup.com/...
とりあえず 2 枚ゲット。
In a Glass Houseやっとデジタルリマスター。 箱は巨人のおっさんだけど、中のジャケはいままで通り。
それにしても微妙な作品から順に売り出してくるなあ。 といっても、独自のリサーチ(おおげさ)によれば、 日本人は In a Glass House がベストと言う人が多い。 で、私見なんだけど、このアルバムは他のアルバムに比べてちょっと単調な気がする。 いや、他のアルバムがいろいろ突っ込み過ぎなのか。 Free Hand はふつーのポップなロックっぽいけど、やっぱりふつーじゃないなあ。
それにしても Gentle Giant っていうのは変なバンドだ。 どんなバンドかを一言では形容しづらいことなんてあまりないでしょ? 他のいわゆるプログレロックバンドとはかなり毛色が違う。 といっても、ファンクなロックには違いない。ずっこけリズムだし。 すさまじい技術を持ちながら飄々とプレイしてしまうところがいいんだな。
CD の出来については、もう文句ありませんです。最高。
xipmsg のパッチをやっつけで書いた。
ipmsg もいろいろあるけど、結局これに戻ってしまうなあ。
http://marc.theaimsgroup.com/...
Linux を compat で動かすという話はあったけど、 こっちはネイティブで動かすらしい。
まだビルドする気がしないな。 HDD どれだけ喰うんだろ。
関連するスレッド
Citrus のコードがようやく入りだした。
とりあえず wc* から。 mb* やら strftime はまだ。というか、mklocale がまだ入ってない。
あー iconv もまだか。まだまだ先は長い。
via: c.l.s
タイトルだけ抜粋してみた。
いくつ残るか知らないけど、 どれが残っても大改造に違いない。
先日 arc を紹介したけど、これってもうメンテナンスされていないっぽい。
で、スレッドの流れとしては、
結局収集つかないのかよ。
conjure は scmxlate を使って scheme 間の壁を越えようとしてるけど、 肝心の中身はいまひとつかなあ。 arc と同じ理由で、なんだけど。
http://halflife2.filefront.com/...
via: http://d.hatena.ne.jp/...
ぶはは。おもしろすぎる。
そうえば、最近 FPS してないなあ。 探してみるか。
http://www.eyestep.org/arc.html
via: c.l.s
Scheme で autoconf, automake, libtool, make の代替になるツールを作成するプロジェクト。
INSTALL によれば、scm, guile 1.3以降, または ksi で動作とのこと。 自前のインタプリタ asc もあるらしい。
せっかくなので、--scheme=asc で configure してみる。
で、ビルドなのだが、configure が OS の判定しているので OpenBSD だとこける、ので、 FreeBSD のマネをしてみる。 あとは strcat, strcpy がアレなので細々と訂正(arc-20050425.diff) 。てか、今気づいたけど、$HOME あふれ攻撃できるな。これ。
とりあえずインストールまではこれでオッケー。
お約束の hello.c のビルド。
$ cat src/hello.c main() { printf("hello,world"); }
Makefile に相当するのが Arcfile で、こんな感じ。
$ cat Arcfile (project sample-project basedir: "src/" default: 'link) (stmt build-dir "_build") (stmt init (mkdir dir: (-> build-dir))) (stmt c-sources (fileset pattern: "*.c")) (stmt compile depends: 'init (c-compile sources: (-> c-sources) shared?: #t outdir: (-> build-dir) )) (stmt link (link files: (-> compile) shared?: #t appnm: "hello"))
arc の README に書いてある例が out of date な気がする。 doc/ 以下の方が -current を反映しているらしいので texinfo 必須。
使ってみて思ったけど、なんというか、m4 の地獄マクロよりはマシ、mk の手抜き Makefile よりは不便かなあ。 S 式じゃなくてインデント形式にしたら、プロパティをタグごとに付けられる Makefile だった、 とかいうオチもありうる。
それと、細木数子じゃないけど、名前がよくないよな。 アーカイバの arc とモロに名前が衝突しているんですけど。 あ、Paul Graham のインタプリタもそうか。
arc のプログラムを arc でインストールして arc で圧縮して配布、とか。
もっと問題なのはぐぐっても出てこないことか。名前重要。
押し売りをしてしまったので、責任を取ってまとめ。
abcde とはコンソールベースの CD リッパー、エンコーダ。 非常に手軽に使えるので(ほとんど Enter 押すだけ)、 HDD の肥やしの大量生成を可能にしてくれる素敵なソフトである。
で、もちろん日本語での細かい事情なんて知らないので、 そのままだと日本語タイトルの CD のエンコーディングはうまくいかない。
abcde 自体はシェルスクリプトなのでまあ問題はない(SJIS なファイル名とかでなければ)。 OpenBSD だと e?grep がマルチバイトを通さないので、
# cd /usr/ports/audio/abcde # make extract # cd w-abcde-2.2.0/abcde-2.2.0 # perl -i -p -e "s/grep/grep -a/" abcde cddb-tool
-a オプションで無理矢理対応。
次は日本語 EUC で返す CDDB を ~/.abcde.conf にセット。
CDDBURL="http://freedbtest.dyndns.org/~cddb/cddbeuc.cgi"
あとは id3 の SJIS 強制変換パッチを作成したので当てる: (id3-0.12-id3.c.diff)。
これで EUC のファイル名、id3tag が SJIS の mp3 ファイルが作成されるはず。
余談だけど、id3 はジャンルに Japan Rock が存在しないので Jpop あたりで編集し直さないといかん。ううむ。
http://www.pdos.lcs.mit.edu/scigen/
via: http://science.slashdot.org/...
あはは。すらすら論文が書けるなんてうらやましいなあ。
あと、こっちもおもしろい。
foo(char *s)
みたいな関数があって、 内部で s をいじってて、 なおかつ s の長さをチェックしていないライブラリを発見。
中身はこんなの。
foo(char *s) { char buf[N] ... strcpy(buf, s); ... }
こういうときは、ふつう
foo(char *s, size_t len) { char buf[N] ... strlcpy(buf, s, sizeof(buf)); ... }
だよねえ。
修正案を拙い英語で送ってみる。
DNS がころころ変わる環境(DHCP とかノートで出張してるとか)によいかもしれないパッチ。
いまのところ、 アプリーションは起動中に resolv.conf が変わっても捕捉できないので、 環境が変わるとアプリケーションを再起動するしかない。
このパッチは gethostby* が呼ばれると、 それが以前の呼出しから 30 秒以上経過していれば(__res_chktime=30) resolv.conf をチェックし、 変更があればリロードすることで解決するらしい。
私はローカルに DNS サーバを起動して resolv.conf を nameserver 0.0.0.0 とすることでうまくやっていけてるので、 このパッチは当てないけどね:P
via: http://yendot.org/
IETF のドラフト。既存のハッシュ関数を使う。SHA1 なら CR-SHA1、MD5 なら CR-MD5 等。
上のドラフトでは ASN.1 の DER エンコードを例にしているので、読んでみる。
ASN.1 の書式はこう。
DigestInfo ::= SEQUENCE { digestAlgorithm AlgorithmIdentifier, digest OCTET STRING }
AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL }
CR-MD5 を選択した場合、 CR-MD5 の OBJECT IDENTIFIER は 1.3.6.1.4.1.10471.6.4.3.1 になる予定で、 これを DER エンコードすると、
30 1f 06 0b 2b 06 01 04 01 d1 67 06 04 03 01 04 10 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX は乱数列になる。
例えば、 XX が 109de96f90aa7d08814c32fc456f9e6e6a となるような ASN.1 ストリームと 平分 f8f04799c4ea178042b604660a6fe3f166599a815aa9e2edf4 を受け取ったとき、
digest(平分) => MD5(4f63cc47a5cc2d2e563b54cd0b38f5d7)
digest(乱数列 + 平分) => CR-MD5(faa4702ab6e7fa890627192cd6cc6333)
となる。なるほど。入力を制御しようという試みか。これって salt の発想そのもの?
http://marc.theaimsgroup.com/...
まあ最近の流れを見ると、 これくらい変態的なことやらないとセキュリティ第一 OS として胸張れんわな。
実際いままでずっと vm.swapencrypt.enable=1 で運用してきたけど、 オーバーヘッドはそんなに無いし、いいんでない?
jscm っていうのは javascript で書かれた scheme インタプリタ。 バグがいくつかあるし、標準的な手続き(eq? とか)がちょっと足りないのでいじってみた。
重いけど遊んでやってください。
begin, lambda, define, defmacro, list, quote, quasiquote, unquote, unquote-splicing
cons, car, cdr, eq?, eqv?, memq, memv, assq, assv, length, reverse, append, pair?, list?, symbol?, string?, number?, +, -, *, /, remainder, floor, ceiling, exp, log, sin, cos, tan, asin, acos, atan, sqrt, and, or, =, <, <=, >, >=, random-real, number->string, string->number, null?, set-cookie!, get-cookie, make-string, string-append, string-length, string-ref, substring, symbol->string, obj->string, string-match, string-search, document->sxml, sxml->document!, display, error, print-string, gensym, eval
sxml 経由で DOM を呼べるようにしたので、実用になるかな。
(document->sxml)
とか、
(sxml->document! '(html (body (h1 (@ (style "color:red")) "hello") (p (@ (style "color:blue")) "world"))))
とかやってみるとよろし。
not, last?, xcons, caar, cadr, cdar, cddr, caaar, caadr, cadar, caddr, cdaar, cdadr, cddar, cdddr, caaaar, caaadr, caadar, caaddr, cadaar, cadadr, caddar, cadddr, cdaaar, cdaadr, cdadar, cdaddr, cddaar, cddadr, cdddar, cddddr, map, for-each, list-tail, list-ref, last-pair, let, let*, foldl, foldr, unless, when, cond, equal?, even?, odd?, zero?, positive?, negative?, quotient, abs, <> max, min, succ, pred, gcd, lcm, member, assoc
関数を受けとり、関数を返す関数が動かない。非常に痛い。
(define (one op) (lambda (y) (op y 1))) ((one +) 1) => error
cons の扱いが変, member の動きがあやしい
文字型(#\), vector, apply, set!, 名前付き let, letrec, delay/force, call/cc, define-syntax(defmacro, gensym はあるよ)
さて、これを使って遊ぶぞー。
googlebar options をひさびさに開いてみると、google suggest があるではないですか。
まだ experimental だけど遊べる。わーお。
KDE にもあるんだ。 へー。http://de.kde-apps.org/...
追記:
リアルタイム検索の後にフォーカスが戻らないんだな。これじゃあ使えん。
Pretty Lambda のときにいっしょに紹介すべきだったんだけど。
要はあれだ。括弧消しちゃう。Lisp 仙人の視点がわかるんじゃない?
こんな感じ。
EmacsWiki によれば、Pretty Lambda と組み合わせるのがおすすめらしい。
どこがやねん。てかこれ何語ですか?
肝心の使い方なんだけど、.emacs に、
(autoload 'unparen-mode "unparen" "Make all parens invisible, unless they are quoted." t)
あとは、M-x unparen-mode で実行。バッファが読み込み専用に変更される。 トグルになってるので、戻すにはもう一回 M-x unparen-mode すべし。
気に入ったら、
(global-set-key [(super u)] 'unparen-mode)
とかすれば S-u で楽々変換……ってこんなことできてうれしいかと聞かれてもちょっと困る。
オリジナル版はコメント中に () が入ってるときに () の対応がとれなくなって止まることがあるので、 ちょっとだけ書き換え。
(defun unparen () "Hide all parens and make buffer read-only." (goto-char (point-min)) (while (re-search-forward "[;()]" nil t) (cond ((eq ?\; (char-after (match-beginning 0))) (if (eq ?\\ (char-before (match-beginning 0))) (goto-char (+ (match-beginning 0) 1)) (forward-line 1))) ((and (eq ?' (char-before (match-beginning 0))) (eq ?\( (char-after (match-beginning 0)))) (progn (goto-char (match-beginning 0)) (forward-sexp))) (t (put-text-property (match-beginning 0) (match-end 0) 'invisible 'unparen)))) (toggle-read-only 1))
弱点は、可変個引数を取る手続きを一行に複数書くと破綻することか。 いい例がすぐに思いつかないけど、
(map (lambda (m n) (cons m n)) '(1 2 3) '(4 5 6))
を unparen すると、
map lambda m n cons m n '(1 2 3) '(4 5 6)
になっちゃうので lambda の引数はどこまであるのかわからなくなる、とか。 一応 mic-paren-mode が効くんだけど、カーソル持っていかないとだめだから、ちょっとアレ。
http://pro.html.it/esempio/nifty/
via: http://dkiroku.com/2005-03-16-10.html
CSS3 に border-radius っていうのが入る予定。 mozilla なら独自に -moz-border-radius というのが使えるので両方指定しておくといいかも。
試しにやってみた。
あまり似合わないな。
http://sonic64.hp.infoseek.co.jp/...
disable-output-escaping="yes" が mozilla にはないんだけどー。みたいなお話。 bugzilla 参照。
とりあえず、#11 の W3C の部分を訳してみた。
An XSLT processor will only be able to disable output escaping if it controls how the result tree is output. This may not always be the case. For example, the result tree may be used as the source tree for another XSLT transformation instead of being output. An XSLT processor is not required to support disabling output escaping. If an xsl:value-of or xsl:text specifies that output escaping should be disabled and the XSLT processor does not support this, the XSLT processor may signal an error; if it does not signal an error, it must recover by not disabling output escaping.
抄訳
処理済みのツリーをどのように出力するかを XSLT プロセッサが制御するの場合にのみ、 出力のエスケープは無効にできる。 これは常に成立するものではない。 例えば、処理済みのツリーは他の XSLT 変換器が代わりとなって出力をするために、 ソースツリーとして利用するかもしれない。 出力のエスケープ無効化のサポートは XSLT プロセッサにとって必須ではない。 もし、xsl:value-of または xsl:text が出力のエスケープ無効化を指定してあり、 かつ、XSLT プロセッサが出力のエスケープ無効化をサポートしないのであれば、 XSLT プロセッサはエラーシグナルを発生させるだろう; エラーシグナルを発生させないのであれば、出力のエスケープを無効化せずに復帰すべきである。
あ、日本語訳あったのねorz
こういうことはサーバ側でやれ、という主張なのかなあ。
代替案としては上のリンクにあるように、innerHTML をいじればいいのだろうか。
... </head> <script type="text/javascript"> function onload_cb() { var elements = document.getElementsByTagName('div'); for (var i = 0; i < elements.length; i++) { var el = elements[i]; if (el.className == 'description') { el.innerHTML = el.textContent; } } } </script> <body> <xsl:if test="system-property('xsl:vendor')='Transformiix'"> <xsl:attribute name="onload">onload_cb()</xsl:attribute> </xsl:if> <div class='description'> <xsl:value-of select="content:encoded" disable-output-escaping="yes"/> </div> </p> ....
みたいにしてみたけど、innerHTML に代入するところで例外吐いて死ぬ。ううむ。
いやはや何年(5 年以上?)もバージョン 0.0 のまま放置プレイしてました。 とりあえずやっつけで 0.1 リリース。
http://quasiquote.org/files/hsp-mode.el
こんなかんじ。
http://www9.plala.or.jp/...で紹介されていて、びっくり。 私以外に使っている人がいるとは。
ただ,行末に;をつけようとするとなんか微妙におかしな挙動をしてくれるのが難点.
これは仕様です。 ';' 1 回で行末、2 回で前の行、3 回で前の行頭にコメントを書くことを強制するためです。 これは元になっている asm-mode といっしょ。
リアルタイムに色付けされないのは、hilit19 を使ってたからです。 今度のは font-lock に変更したので大丈夫。
ヘルプがブラウズできないのは HSP のバージョンにより、ヘルプファイルの名前が変わるからだと思います。 とりあえず、このバージョンでは hsp261 に合わせておきました。
それとも C-c ? がバインドされてないのかしら。M-x describe-bindings を見てみないとわからないなあ。
判明。
http://marc.theaimsgroup.com/...
思わず膝を叩いてしまった。
比較している言語が awk ってのも笑えない。
今後、悪口に使わせてもらおう。
http://cgi.netlaputa.ne.jp/...
う。痛い話。
といっても、利用しかしないユーザなんてそんなもんかもしれず。 新しい機能なんでどうでもよくって、安定していればいい。 リリース版だからってそういうわけでもないのにね(Netscape 6 を見よ)。
こういう人にバグ出しさせるには、http://www.tlug.jp/...にあるように、
はやめのリリース、しょっちゅうリリース
しかないのかな。
よーし、こうなったらパパ、毎日リリースしちゃうぞー。
もうちょっと考えてみる。
これ、
サーバーでS式を吐き出してクライアントで評価
を実現するにはどうすればいいだろうか。
cl-ajax でやるなら、javascript による Common Lisp インタプリタが必要だな。 でもこれをやるには Common Lisp の仕様がちょっとでかすぎる。
とりあえず、jscm で手を打とう。 lisp じゃなくて scheme インタプリタだけど scheme のほとんどの機能がある (defmacro まである!末尾再帰の最適化や多値、call/cc はさすがにないけど)。
あとは sxml……はでかすぎるので、 text.html-lite をどうにか動かせるようにして、 DOM バインドを書くってのはどうよ? あとは sxpath みたいなのをだましだまし実装する、と。
って、こうなったらサーバは Gauche で書けばいいじゃん。 cl-ajax ってば SBCL のインストール面倒だし、こっちの方法でやってみるか。
via: http://lemonodor.com/archives/001087.html
やっぱりそうこなくっちゃ。 ただ、私にゃ使いみちが思いつかないけどね:)
Lisp でやる利点ってなんだろう。
サーバーでS式を吐き出してクライアントで評価
してみる?
OpenBSD の ports に入ったので試してみた。 オーディオが /dev/dsp になっているので /dev/audio に差し替え。 COPT 設定してると gcc が内部エラーで死亡。 なんやかやでインストール完了。
なかなか軽快じゃないですか。
NetBSD の i386live やら Plan9 やらを iso イメージから起動してみる。 さすがに KDE は重い。没。 Plan9 はええかんじ。起動速い。rio シンプル。acme いいねえ。 emacs でも vi でもないちょっと不思議感覚が味わえるエディタだな。クセになるかも。
メモなど:
QEMU
Plan9
http://isc.sans.org/diary.php?date=2005-03-06
Windows XP と 2003 Server が対象らしい。
ソースとターゲットが同ポート同 IP の SYN bit の立ったパケットを送られると不安定になる、ってをいをい。
Windows XP Home Edition が無効ってのもよくわからんな。
-current のバージョンが 3.7-beta に。 今回も劇的な変更 てんこもりなので、 今から入れ替えるなら、cvs update しないで snapshot をフロッピーからインストールしなおした方がいいかも。 3.6 から次のリリースの 3.7 への入れ替えも慎重にしないといけないんだろうな。
あと、今日 src/libc/Makefile.inc に変更があった。sprintf とか使ってるとリンク時に警告が出るようになった。__warn_references() なんてあるんだ。へー。
まあ、バグ出しにいいんじゃないの。
少なくとも私は sprintf を間違いなく使いこなす自信はないなあ。 それにしても OpenBSD の CAVEATS はおもしろい(sprintf ならこんな感じ)。
世の中にはいろんな人たちがいる。 その中でも、あなたにとってコミュニケーションをとる価値のある人と、 あなたの意思に関わりなくメッセージを読ませたがる人がいるのではないかと思う。
もちろん、あなたが必要としているのは前者であって、後者ではない。
それを振り分ける技術が、 メールだったらホワイトリスト/ブラックリストだったりベイジアンフィルタだったりするわけだ。
でも、こういった技術はかなり広汎に試されているので、ここで説明するのは置いておいて、 今回はもう少し変わり種の手法である hashcash を紹介しよう。
ここで、突然ちょっとした数学の話になる。 まあそんなに難しくはないので、最後までお付き合い願いたい。
ある文字列 S が与えられたとき、もうひとつの文字列 s と連結した文字列(トークン) S + s の ハッシュ値 H の 左 n bit がすべて 0 になる、そのような s はどんな文字列だろうか。
計算してみないとわからないって? そう。実際に s を 0 から順に H を計算して、 実際にそうなっているのかどうか確かめてみなければわからない。ここがミソ。
あなたがスパムメールにうんざりさせられているのなら、 この条件を満たす H のスタンプの入ったメールのみ読めばいい。 とうぜん、あなたの友人の同意も必要だけど。
久しぶりにメールのやりとりをしたいと思い立ったあなたの友人も、 毎週メッセージを替えて送ってくるスパマーも、 誰もが衝突するハッシュを発見するまで計算しなければならない。 「私と会話したいなら、ちょっとだけあなたの電力と時間をください」というのが、 hashcash なわけ。 個人の間でメッセージをやりとりするなら計算は 1 回きりだけど、 スパマーは大量にメッセージをまき散らさないといけないから、 それこそ何度も何度も違うハッシュを計算しないといけなくなる、というしかけだ。
それでは、実際どうなっているのか hashcash の公式ページからダウンロードして試してみよう。
コンパイルできただろうか? それではさっそく n = 20 で s を検索してみよう。
$ hashcash -mb20 foo hashcash token: 1:20:050303:foo::kN687vWdyW8jUw3+:0000000000000072LM
しばらく計算した後、上のようなトークンが出力される。 実行するごとに乱数でかき混ぜるのでトークンのエントリの真ん中より右側は毎回違う値が出力されるはずだ。 ちなみに、いちばん右の 0000000000000072LM が s に相当する文字列である。
foo は他の人のトークンとぶつからないように、 実際に使用するときはユニークな文字列の方がいいだろう。 例えばメールアドレスのような。
本当にこれが正しいトークンなのか確かめてみよう。
$ echo -n "1:20:050303:foo::kN687vWdyW8jUw3+:0000000000000072LM" | \ openssl sha1 000004a5a3839d2d4e696d2ec4af01cf6340cfba
左 20 bit が 0 になっているのがわかるだろうか。
以上で原理が理解できたと思う。
次に応用なのだが、 javascript で実装してみたのがこれ。
javascript は実行速度が遅いので n = 10 である。
これを使って、 このページの くっつき BBS と連携させてみたので試していただきたい。
検索空間は 0 から 210 なので、 もしかすると衝突を発見できないかもしれない。 そのときは発見するまで計算ボタンを気が済むまで連打してほしい。
確認しておくけど、計算結果であるトークンは一回きりしか使えないことに注意。 なぜだかわかるよね? それを実現するためには毎回データベースへ使用済みトークンを登録していけばいい。
最後に、ここまで読んでくれた人への宿題。
リンク
http://wikimediafoundation.org/...
via: http://joesaisan.tdiary.net/20050222.html#p02
とても興味深い。本文よりツッコミのほうが多い Wiki ページがいかに多いことか。 「会話ページ」があれば、意見の相違によるページの消し合いもある程度まで抑えこめる、 といった効果も見込めるだろう。
wiliki.cgi に以下を追加。
(define (note-link page) (let ((key (ref page 'key))) (and (ref (wiliki) 'editable?) (wiliki:persistent-page? page) (if (#/^Note:/ key) "" `(a (@ (href ,(wiliki:self-url "~a" (string-append "Note:" key)))) "[ノート]"))))) (define (my-page-header page opts) ... ((wiliki:edit-link page)) ((note-link page)) ((wiliki:history-link page)) ...)
国際化無視。本来ならばメッセージカタログもきちんと書いたほうがよい。
CL のための初期化ファイルパーサ。
via: http://www.iscblog.info/blog/display/60
どことなく perl のような文法。 lisp を知らない人(というか括弧嫌いな人)でもこの形式ならば、 アプリケーションの挙動をカスタマイズできそうな感じである。
要 asdf。
scheme に移植しようかしら。もう誰か書いてるかな?
追記: clisp をしばらく使ってなかったので asdf の使い方を忘れつつある。とりいそぎメモ。
とりあえずパッケージは ~/lib/common-lisp 以下に格納するとして、
~/lib/common-lisp に asdf を展開。 後は ~/.clisprc.lisp に
(load "~/lib/common-lisp/asdf-init")
を書いているか確認。 asdf-init は確か CMUCL に入っているやつのパクり。こんなやつ。
(in-package :openbsd-asdf) (defvar *asdf-pathname* "~/lib/common-lisp/asdf/asdf" "Path of the ASDF library") (defvar *system-registry* "~/lib/common-lisp/system-registry" "OpenBSDs contribution to the entral registry for ASDF system definitions. This will be added to asdf:*central-registry*, you should modify that in order to add other directories.") 以下略...
インストールは
(asdf:operate 'asdf:load-op packagename)
packagename は今回は 'trivial-configuration-parser で OK。 自動的にコンパイルが始まってインストール完了。
以上。
via: http://d.hatena.ne.jp/...
/Program Files みたいな名前除けに "" でくくってやる必要があるかと。 「NetBSD だから無い!」なんてのは無しの方向で。
mdcd() { mkdir -p "$1" cd "$1" }
ndir も /usr/bin だけで済ませちゃう。とか。
ndir() { # $d: 最後のシーケンシャルなファイル名を拾う local d=`ls | egrep '^[0-9]+$' | sort -n | tail -1` # $w: ファイル名の文字数 local w=`echo $d | wc -c | rs 0 1` if [ "$d" = "" ]; then d=-1; w=1; fi printf %0`expr $w - 1`d `expr $d + 1` }
http://www.wxplotter.com/ft_nq.php?
ああ やっぱり おれ は ナード だ った の か。
おわって る。
http://quasiquote.org/images/nerdiness.ps
via: http://www.soraneko.com/...
http://www.blackfiveservices.co.uk/...
画像を C,M,Y,K の各レイヤに変換したり tiff で保存したりする gimp プラグイン。 gimp って CMYK サポートしてないから仕事に使えないや、という人向け。
インストールは README にあるけど、 カラープロファイル AdobeICCProfiles.zip をダウンロードして /usr/share/color/icc (これはソース中の platform_unix.h に依存)にコピーしておくこと。 sRGB/sRGB Color Space Profile.icm も同様。 あとはコンパイルして ~/.gimp-x.x/plug-ins へ放り込むだけ (要 lcms。でも gimp-2.x がインストールされているならば普通入っているはず)。
Image->Separate->Separate(normal or Colour) で分割して Image->Separate->Save で保存。
といっても、カラー原稿を写植に出すことないからなあ。いちおうメモ。
via: http://diary.okotama.org/?date=20050220#p07
OpenBSD でも普通に動くようだ。
ところで、ctime の第一引数は long* ではなく、const time_t* ですぞ。
Assembler.cpp:196 const int t = time(0); fprintf(file, "\n;%s\n", ctime((long*)&t))
ここ。 というか、この間違いどっかでみたと思ったらちょっと前までの Bigloo だった。 今は直ってるみたいだけど。
あ、そうそう。 Makefile.gcc を
CC= libtool --tag=CXX --mode=compile g++ LINK= libtool --tag=CXX --mode=link g++ OBJEXT = .lo ... $(OUTPUT): $(OBJECTS) $(LINK) -o $@ $(OBJECTS) -no-undefined -rpath ${prefix}/lib ... $(TESTAPP): $(TESTOBJECTS) $(LINK) -L$(LIBDIR) -o $@ $(TESTOBJECTS) -lSoftWire ... %.lo: %.cpp $(CC) $(CFLAGS) -c $< ... clean: libtool --mode=clean rm -f $(OUTPUT) libtool --mode=clean rm -f $(TESTAPP) libtool --mode=clean rm -f *$(OBJEXT)
にすると libtool を使った .so なライブラリができる。 Makefile しかないときはいつでもこの方法が使える。おすすめ。
まあそれは置いといて、なかなかおもしろいっす。 Gauche へポートしてごにょごにょするかね。それこそ Bigloo とか chicken なら簡単にできそう。
via: http://blogs.yahoo.co.jp/tmata_yaho/91744.html
なるほど、攻撃者がどうしようもなく愚かであったならば、その議論は成り立ちますが、 それには、この攻撃アルゴリズムを使い続けることが前提となります。
いまのところこの論文は公開されていないようですが、公開されてしまえば、 攻撃アルゴリズムを洗練することができるわけです。
実際、 SHA-1 のラウンドが残り 46/80 と言われていた のが 2004 年の 8 月です。 それから残りのラウンドの攻撃には半年しかかからなかったことになります。
セキュリティの攻撃への激しさといえば、極端な例が上のリンクにありますが、 ToyoCrypt は 2002 年に 296 だったのが、 2004 年には 229 のオーダになってしまった、と報告にあります。
これはハッシュではなくストリーム暗号なので簡単に比較することはできませんが、 弱いと判断された暗号やハッシュのアルゴリズムは徹底的に攻撃方法を解析される、 というのがこの業界のようですので、 SHA-1 の命運は尽きた、といって間違いないでしょう(これからどれくらいのオーダまで減らすことができるか見物ですね)。
それにセキュリティはいつも安全側へ振っておくほうがよい、 とされています(問題があってからでは遅い)ので、 安全であると主張するには慎重であったほうがいいと思います。
追記:
リサーチノートが公開されたそうです。
ねた元:武田氏のブログ
http://d.hatena.ne.jp/yomoyomo/20050217#game
ジッピーレースのことかー(AA略
ファミコン版はスペランカーとおなじく謎の発光ダイオード付き。
とうとう SHA-1 も終わりか。
via: http://www.st.ryukoku.ac.jp/...
自家製ソフトは SHA-256 に移行作業中。
そういえば、ハッシュの次の候補はあるのだろうか。 氏の言うように、暗号だけではなく ハッシュに関してもコンペをやらないといけないのかもしれない。
暇だったのでログをみていると驚いた。 Wiki のファイル全部もっていかれてた。 いや、それは別に構わないのだけれど、取得方法がえげつない。 robot.txt なんて無視だし、時間を空けて取得なんて上品なことはしない。 たぶん meta も読まないんだろうなあ。試してないけど。
で、リファラUser-Agent が "Website Explorer/0.9.7"。
ぐぐったらさいしょに出るこれのことだろう。
http://www.umechando.com/webex/
なんじゃこりゃ
利便性を説くばかりでサーバ側の拒否方法について何も書かれていない点が素晴らしい。
いいかげんにしろ
さっそく deny 行き。
こういう横着な再帰ダウンロードソフトの類ってもうとっくに滅んだと思ったのにねい(除く msnbot)。
もう一度書いておくけど、ミラーがいけないって訳ではない。 そうじゃなくって、ネットワーククライアントのお約束を守ってソフトを書いて欲しいなあ。という話。
余談:
ちょっとダウンロードして起動してみた。 デフォルトの設定に「CGIファイルのリンク先チェック」っていうのがオンになっているのだけど、 どうやって cgi かそうでないか判定してるのだろう。謎。
以前のまま放りっぱなしのままでは何なので、落穂拾い。
結局、現在は
COPTS=-O2 -march=pentium4 -mcpu=pentium4 -fstrength-reduce -fprefetch-loop-arrays -pipe
でカーネル、ports を含むユーザランドを再構築して運用している。
-fprefetch-loop-arrays はなかなか面白いオプションだ。man によると、
-fprefetch-loop-arrays If supported by the target machine, generate instruc- tions to prefetch memory to improve the performance of loops that access large arrays.
抄訳
-fprefetch-loop-arrays ターゲットマシンがサポートしているのならば、 巨大な配列へのアクセスするループに対して パフォーマンスを向上させるためにメモリをプリフェッチする インストラクションを生成します。
vm や物理計算など、 配列をガシガシいじるプログラムに最適らしい。 Pentium なら Pentium III 以降でこのオプションが使えるようになる(デフォルトではおそらくオフ)。 ただし -Os と併用はできない、などの注意点はある。
ベンチマーク。配列計算といえばこれ。姫野ベンチ。 SMALL モード で 3 回連続実行してみた。列は回数、単位は MFLOPS である。
-O3 -DSMALL | -O2 -march=pentium4 -fstrength-reduce -fprefetch-loop-arrays |
---|---|
349.854312 | 375.026538 |
350.596776 | 377.537923 |
349.413404 | 375.862571 |
Pentium M 1.3G は Pentium III 600MHz 比で x4.5 くらいか。 Pentium M の底力を見たような気がする。
実用上は違いがこれほど先鋭に出ることはないだろうが、なかなかおいしい。 ちなみに -mfpmath=sse をつけるとかえって遅くなるようだ。残念である。
bookmark のフォルダ全体を`このタブで開く'で開いた時のもっさり感が気になっていたのだが、 原因はどうもこれらしい。
デフォルトで network.dns.disableIPv6=false になってたのでさっそく user.js に、
user_pref("network.dns.disableIPv6", true);
を追加。ページ表示の待ち時間が以前に比べ、体感できるくらい速くなった。
ipv4 しか存在しない環境だと ipv6 の DNS クエリは却って無駄になるんだな。
しかし、なんというか、挫折感ありまくり。 とはいえ、いつか ipv6 ready になったときに無効にできるようにメモ。
*BSD は裏でカメさんが動いているから、 いつでも ipv6 へ移ることは原理的に可能なんだけど、いつになるのやら。
複数のマシン経由でやられました。
対策を考えないと。
ここのやつ src/lib/libarchive/。
README から対応アーカイブ形式を引用してみる。
先月あたりに pkzip にも対応したので、実用としては十分。 アーカイブ形式をライブラリが自動認識するので展開コードに専念できる。なかなかよい。
Makefile が FreeBSD 専用になっているので、FreeBSD 以外でビルドするには、
$ make distfile
で一旦 configure を作成すべし。
簡単展開ルーチンの例。 これだけで上記アーカイブ形式を展開することができる。
いろいろ使い道がありそう。
追記: 公式ページがあるらしい。http://people.freebsd.org/~kientzle/libarchive/
ちょっとだけメモ。
-mcpu=<xxx>, -march=<xxx> がどんな命令セットを設定するかを調べるには gcc/gcc/gcc/config/i386/i386.c(savannah の cvs) の processor_alias_table を読め、ということらしい。
OpenBSD だと、src/gnu/usr.bin/gcc/gcc/config/i386/i386.c あたり。
で、突然個人的な話になるわけだけど、Pentium M だとどれが最適なんだろう?これって SSE2 つきの Pentium III だから pentium4 でいいのかなあ(ちなみに pentium4 にセットすると -mmmx -msse -msse2 が自動的に有効になる)。 とりあえずこれでユーザランドつくってみよう。
-mfpmath=<xxx> も指定すればさらに高速に演算できるようになるらしいんだけど、http://www.radiumsoftware.com/0304.html#030410 によれば若干計算精度が落ちるらしいので、これはデフォルト設定のままにしておいて、あとはアプリケーションごとに指定することにしよう(マルチメディアやゲームのコンパイルなら -mfpmath=sse にする、とかね)。
ところで、同ディレクトリの i386.md あたりは純然たる lisp コードやねえ。http://cruel.org/freeware/rmslecture.html#34 あたりにもあるけど、RMS の趣味がよくわかる。
さらにビジネスフレンドリーになると噂の GPL3 の話。
http://kazuho.exblog.jp/1648725/
このまま成立してしまうと、日本では独占禁止法違反に抵触することもあるという指摘も (http://www.uemura.info/...)。
version 2 or later version を適用する、 と自作プログラムに書いている人は、これからどう転がるのか動向に注目。
それにしても、こうすることでソフトウェア特許に対してどの程度効力を持つのだろうかねえ。
wikieditish プラグインのテスト。
うむ。これは便利かもしれない。導入を渋るんじゃなかった。 でもローカルの文書との同期はどうしよう。
unison でも試してみるかな。
今気が付いたけど、編集中に日付が変わったとき $blosxom::plugin_state_dir のリフレッシュはどうなるんだろう。
あと、セキュリティが気になるかなあ。blosxom は自前でデータベースを持っているわけじゃなくて、ディレクトリ名をカテゴリとしてマップ、1 ファイル 1 エントリで構成、といったファイルシステムの特性を利用したソフトなので、もし wikieditish にセキュリティホールがあって、変なところに書き込みにいかれたらヤバいかも。単に清書ツールとして使うのなら問題ないんだけど、動的に書き込むときはやっぱり心配。
make build して、カーネルの再構築、ports のインストールを試してみる。
いろいろよろしくない。最適化まわりがいまいちである。
以下は愚痴なので読みたい方だけどうぞ。
今日は旧い悪友と連れ立って遊びましたですよ。
あー、Arch のアーカイブ回さないと。