# 081
>> WENDY'S のコーヒーっておいしいですね。立て続けに 3 杯も飲んでしまいました。この店は清潔で静か。夜中 10 時までしかやってないのが残念です。
>> [software] XFT_JHD_BRANCH: Emacs Xft 対応ブランチ
X 上の Emacs でアンチエイリアスフォントが使えます。しかも、これちゃんとビルド出来ますよ!変なところもありますが、でもまあ使える……と思ったら日本語指定したら落ちました。でも、とにかく動いているのは素晴らしいです。savannah.gnu.org 公式のブランチ。
いや、今までも Windows や MacOS X 上では普通に出来ていたので、それほど騒ぐほどのことではないのですが、X を日常的に使っていると、こうやってどんどん古のコアフォントシステムを使わなくていいようになるのはありがたいです。印刷とかに使うのなら仕方がないですが、普通のアプリケーションで XLFD を書くのはもう嫌です。
# 076
>> 歩いていると鼻水が出てきました。僕も枯草熱に罹っているようです。
irb の help コマンドが便利です。help :instance_eval とかその場で調べられるのがいいです。僕は何度使っても inject の引数を覚えることができないのでありがたいです。
イーガンの「Diaspora」やっとやーっと 2 章まで読み終えました。すげーですよ、社会関係にコンパクト性使いますし。まー最初にドーナツを平面にしたり球面を平面にしなかったりと位相幾何の講義をやる本なので読むのが疲れます。
世代間に共通する歌詞がある人がうらやましいです。僕はテクノ音楽の世代なので、まったく歌というものがないかあっても意味不明な言葉の羅列なので困ります。♪ drive boy, dog boy, dirty numb angel boy... こんなのから一体何を引き出せばいいのでしょうか?
ParenScript: Lisp to Javascript コンパイラ。へー。Lisp の人たちは手が早いです。
# 071
>> 本田透「電波男」/三才ブックス 発売中
>> WikiBana Vol.4 - Wiki博覧会 感想メモ
行ってきました。太田区産業プラザ。
面白かったです!ネット上でのコミュニケーションの未来予想図がたくさん見られて興奮しました。考えている人はほんとうにいろんなことを考えているものです。しかも、この未来は僕のようなあまりスキルのない人でさえも参加できるものなのですからたまりません。(わけのわからない 3 文字英単語なんか関係ない世界なのです)。話を聞いていると創作熱にあてられて、このあと衝動的にグッドマンの DHTML 本を買ってきてしまいましたよ。僕はあんまり懇談会というものに出たがらないのですが、今回は行ってもっとお話を聞きたかったです。もっとも、あの日の 17:00 に蒲田にいるのはとてもマズいことだったので、発表が終わった段階であっという間に帰らないといけませんでしたが。
とにかく、いつも僕がここでやっているように、会場で取った紙のメモをここに書き写して考察は後ですることにします。ここは僕のためのメモサイトなのですから。
(以下は自分の殴り書きのメモとほとんど消えかかった記憶によって再構成したトークの内容です。なるべく思いだそうと努めましたが話者の発言の正しさは保証できません。()内は自分が思ったことです。変にエラそうなことも書いてありますが、書いている人はいわゆる、頭のかわいそうな人なので堪忍してあげてください。僕も被害者なんです!(逆切れ))。
イントロダクション(塚本さん)
Wiki の昔話。カニンガムの c2.com は 95/05/16。現在もダウンロードできて、Perl で 330 行
(ここで wiki.cgi を立ち上げるもエラー: can't process request.)
しかし、検索もできなかった。Tab を多用した、まともでない Wiki 記法。日本語も当然ダメ。
「Wiki とは HTML を通せるデータベース」
YukiWiki がリファレンス実装になった→ 現在の Wiki は?
(現在の c2.com が IP 表示まですることを考えると、最初はものすごい貧弱だったのですね)
Hiki(かずひこさん)
(ペンダントがセクシーだ)。
Ruby の国から来ました。
「Hiki は agile」
- Wiki の出力する RSS が見づらい→その日のうちに対応
- Note
- Ajax
→ 実装言語が agile
TypeKey プラグイン → 編集者の存在
Wiki を Blog 風にみせるプラグイン
ブックマークプラグイン
Trac 代替
→ なんでも速攻で実装します
(ううむ、わかりやすいプレゼンです。さすが高橋 Way。Hiki は Ruby での一番スタンダードな Wiki 実装ですから期待してます。かずひこさんはまつもとさんに一番近い人ですし)。
PukiWiki(増井さん)
YukiWiki の画面が簡素で萌えなかった。
月間ダウンロード数が 10,000 → 2ch 新潟震災情報に使われた
夕食の席で SQL の話がでる。家庭内 Wiki に使っている
PukiWiki の公式本が 7 月に出る予定。ただし、まだ書いてない。
(このダウンロード数はすごいなあ。さすが日本で一番メジャーな Wiki 実装。メンテナがけっこう何度も変わってるというのにも驚いた。PHP の強みか。「変に OOP 的に書いてしまったところを直したい」というのは興味深いです。あと、増井さんの Wiki の読み方が「うき」だったのが面白かったです)。
FreeStyleWiki(たけぞうさん)
イントラ系サイトでよく利用される
- Project Amateras
- VkDB(ヴィジュアル系バンドの最大級ページ)
→「Web ページの Emacs」を目指す。設計の見直し。
(たけぞうさんはどっちかと言うと Eclipse の人というイメージがあります。僕も昔 SWT をいじっていて Project Amateras は読んでましたし。しかし、Emacs って聞くと、今からキッチンシンクアプローチかーとか思ってしまったり、それにこれは Perl での標準的な Wiki 実装という流れなのでしょうが、それなら WalWiki のほうが……とか思ってしまいました、すみません)。
MoinMoin(とくひろさん)
(語尾が「〜おります」「〜います」で、言葉遣いが丁寧な人だ)。
Python で書かれている
- デフォルトで UTF-8
- 編集責任が明確
- 履歴画面のない Wiki は考えられない! → ViewCVS 風の差分表示。しかも標準ライブラリのみで動く
- デザインはテンプレートまで切り替えられる。閲覧者によって画面構成を変えることができる
- ページを監視して E-mail を送ることができる
(やっぱり ViewCVS 風の差分表示はすごいです。でも、MoinMoin って日本語のエスケープが結構キモいのがどうも。僕は Python には厳しいのです。UTF-8 にしたからって国際化が万全になるわけでもないですし。fd.o とかのメジャーサイトで動いているのはうらやましい感じです)。
NOTA(洛西さん)
Flash による Wiki
プラグインとして外部 SWF を張り付けることができる。XML で内部データを持ってるので、HTML として出力することも可能
Flash なので何でもできる
- パソコンに不慣れな人に好評
- インターフェイスがお婆ちゃん向け
STANDALONE NOTA → HTTP サーバを内蔵
(すげー、やっぱり Flash は凄すぎます。こんなのを見せられると、HTML を打ってるのが馬鹿らしくなってきます。ただ、凄いのはわかりますけど、じゃ仕事とかで日常的に使うかと言われるとうーんとなってしまいます。LL Weekend で Squeak のデモを見た時と同じです。GUI/WYSWIG 恐怖症なのかもしれません。あと、ブラウザを選ぶような Wiki 実装を非難するのに、「それなら NOTA でいいじゃん」と言うのに使える……とか書くのはちょっと酷すぎでしょうか)。
wema2(kan さん)
(プレゼンを Firefox でやってる!しかも、後で判明したけど Wema 上でやってるのだ!すげー)
(Wema のプレゼンは会場でとても受けていた)
(しかし、斜め線がひけないのは……。Graphviz のきれいな曲線を見せられた後だけに目立つなあ)
(管理パスワードがまる見えだ。そして、そのパスワードは……)
もともと hown 代替
ローカルでも遅い
wema-farm を作る。既にドメインも取得した
(wema はやっぱすごいです。しかし、それ以上に kan さんが最後に語っていた wema の最終構想には鼻血を吹きました。あまりに凄すぎてここには書けません。wema は Hiki や qwikWeb でやってるように、補助的なパーツとして利用されるようになると思っていましたが、wema 自身がそこまで野心的だとは思ってもいませんでした)。
ContentEditableWiki(たつをさん)
(座ってプレゼンするのですかー。前の人たちは立ってやっていて、僕の座っていた位置からはスクリーンの一部が見えなかったりしたのですが、それでも立ってプレゼンしてくれたほうがよかったです。ボディランゲージとか、同じスクリーンを見ている安心感とかありますし、時間帯のせいもありますが前で人が立ってないと眠たくなってくるのです)。
ログイン前提
diff の見せかたのノウハウが知りたい
(IE のコンポーネントはすごいです。しかし、やっぱり Firefox を無視するのはどうかと思ってしまいます。それは別にセキュリティがどうこうとか言うつもりではなくて、Web 上に長く深く関わっている人や流行に敏感な新しいもの好きな人は Firefox を使うからで、そういう人を取り込めないのはマイナスポイントだと思うのです)。
ThreadWiki(久末さん)
名前空間のある Wiki
「/」で名前空間を指定 (chmod 風の)細かいパーミッション設定
(Unix 風?)
名前空間はそのまま XML で使えるので、XMLRPC とかで ThreadWiki 間のデータを交換してソーシャル的に使いたい予定
(ほほう。まだこれからという感じですが、名前ツリーの移動とか簡単にできるようになると面白いかもしれません。Unix の Shell ツール (FileUtils) みたいなのがあったら 簡単にページを編集できるかも)。
RandomNote(ninjin さん)
パラグラフ単位の編集
まったくの個人メモ帳
いろんな言語にポーティングされた。コンセプトはまったく違うが結城さんも声のかけらを作った。
(完全な個人用のメモという感じで、あまりプレゼンすることはなかったようです。こんなことを言うのはなんですが、人狼 BBS の話も聞きたかったかもしれません)。
MirrorMan(ma.la. さん)
(黒スーツにサングラスですごい人がキター!という感じです。WikiBana4 の参加者が最後に駆け込みで増えたのは、この方が Ajax について喋るというのに期待していたからだと思います)。
WYSWIG で逃げない
サーバーサイドは 7Wiki ベース。Perl で 7 行。5 行におさめたい
更新日による Visualization
(このデモの最中に Sleipnir が落ちる。示唆的)。
出来ることは全て Javascript で行う。自動リンクも形態素解析も全て Javascript。最終的には P2P へ。
(うーん、凄すぎます。会場ではこの発表が一番受けていました。ちょっとあまりに凄すぎて僕の頭で整理しきれてません。というか、僕もなにかやりたいのでここに書くことで満足したくないです)。
Clockworks(たろうさん)
全て S 式で、デフォルトでは Index も RecentChanges もなし。自分で作る。
Meta ワードで Wiki 上からなんでもできる。
(MirrorMan の後ですこし地味でしたが、なかなか面白かったです。Meta ワードで操作できるって Smalltalk みたい。作る楽しみのある Wiki ですね。盆栽のようにこつこつ開発しているというのもちょっとイイ話。えーと、プレゼンの最中にコード整形するのはちょっとどうかと思いました)。
qwikWeb(eto さん)
ML と結び付いた Wiki
ガチガチに管理 ←ーーー→ 誰でも Public
↑この中間がないか?
付箋機能:Wema のをもらってきた
ページの更新履歴のタイムマシーン・モード(これは便利そう。つまみは普通にスライダーのほうがいいかなあ)
ビデオ編集(これは会場で受けがよかったけど、smil の機能っぽいし……)
(うーん、ML ですか……。僕はそもそもメールが嫌いなので Web 上での情報交換に興味があるわけで、ちょっと退行に思えてしまいます。でも、さっき知りましたが、この WikiBana4 の連絡に qwikWeb が使われていたそうですから、使ってみると便利なのかもしれません)。
質疑応答
(時間の関係で質疑応答はありませんでした。なんてこった!懇談会に行った人がうらやましい……)。
# 069
>> どろどろに溶けた疲労のなかを泳いでいるような感じがします。残された時間は少ないので、書くべきことを書いて寝ることにします。
えーと、随分前に出ていた iPod のアップデータをさっき適応したら、FAAC でエンコードした AAC も shuffle で受け付けるようになりました。でも、曲にプチプチと間があいてしまうので実用にはなりません。アップルにはもっとなんとかしてほしいです。iTunes はもう嫌です。重い、重すぎます。マウスのみで複数曲を選択できないのにもイラつきますし、それに裏で CD 焼きと iPod 認識デーモンを立ち上げるのにも腹が立ちますし、migemo で検索できないのも嫌ですし、そもそも Vorbis を認識しないのも傲慢に思います。ああ、どこかとてもクールな人たちが shuffle の独自ファームを作ったりしないものでしょうか。もしも、vorbis 出力が出来るのなら、今ある aac ファイルを全部消しちゃってエンコードし直しますよ。aac は、それは mp3 よりは技術的にマシですけれど、チャンネルごとにライセンシング料を取る気なのにはもうあきれてしまいます。(つまり、5.1 チャンネルなら料金も 5.1/2 倍なのです)。
で、migemo といえば日本語インクリメンタル検索ですが、なんだか Ajax = インクリメンタル検索みたいな最近の風潮はつまらんなあと思っています。もっとこう、すげーぜこいつが Web の新秩序(ニューオーダー)かー、と思わせてくれるものはないでしょうか。
花粉症で鼻が赤くなっている人を笑っていたら、僕は風邪にかかってもっとひどいことになりました。頭痛と立ちくらみが止まらない。
おっと 69 番です。シックスティナイン is ヤクザマシンガン……ですか。iTunes の悪口をたくさん書いたので、いいところも書いておくと、それは「年」のカテゴリーが最初から表示されているので、アルバムのリリース年を意識せざるをえなくなるところでしょうか。気がつくと、1990 年代のクラシックテクノばっかりインポートしていて、死にたくなってきます。CJ Bolland の 4th sign とか 93 年モノだったのですか。おお、僕も年を取りました。
(ムクリと起き上がって)、日本映画データベース JMDB が WalWiki になっていたことをメモしておくのをすっかり忘れていました。お休みなさい。
# 066
>> 忙しすぎて頭にブースターケーブルを繋がれたような感じがします。えーと、書くべきことと言えば、とくとくとミームの話を他人に話していたら電波あつかいされてショックを受けたことぐらいです。なんとひどい。それから、この前は(昨日か一昨日か)に塩を摂る話を書きましたが、あれは嘘で、本当はトウガラシばかり食べていました。この前も(昨日か一昨日か)、しょうこりもなく豆のトマト煮を作っていたら、気がつくとチリコンカンになっていました。味付けは震えるほど辛く。そんなところでしょうか。
>> (Ajax を使った) Hiki 用更新衝突自動検出プラグイン
できました。本当は動的 HTML で文字を点滅させるとかしたほうがいいのでしょうが、もう死ぬほど面倒なので alert で逃げます。前時代的ですみません。
# conflict-sniffer.rb module ::Hiki class Command private def cmd_lm page = @cgi.params['p'][0] lm = @db.get_last_update(page) print "Content-Type: text/plain\r\n\r\n" print lm.to_i end end end add_edit_proc { <<"EOS" <script language="JavaScript"> <!-- function getXMLHTTPObj() { var xmlhttp; /*@cc_on @*/ /*@if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlhttp = false; } } @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function check(xmlhttp, loadtime) { xmlhttp.open("GET", "#{@conf.cgi_name}#{cmdstr('lm', 'p=')}" + encodeURI("#{@page}"), true); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var lastmodified = xmlhttp.responseText; if (parseInt(lastmodified) > loadtime) alert("Hey, someone seems to change your editing page.\\n" + "You'd better save the texts and try again."); } }; xmlhttp.send(null); } var xmlhttp = getXMLHTTPObj(); var loadtime = new Date().getTime() / 1000; setInterval("check(xmlhttp, loadtime)", #{@conf['csniffer.interval'] || 30} * 1000); //--> </script> EOS } def saveconf_csniffer if @mode == 'saveconf' then @conf['csniffer.interval'] = @cgi.params['csniffer.interval'][0].to_i end end add_conf_proc('csniffer', 'conflict sniffer') { saveconf_csniffer <<-HTML <h3 class="subtitle">auto conflict sniffer</h3> <p>set inteval time (second): <input name="csniffer.interval" size="2" value="#{@conf['csniffer.interval']}"></p> HTML }