2005-03-01 [長年日記]
_ うーんやっぱり重いなー (13:57)
Web用の低スペックサーバーでもレプリケーションDBを動かすようにしたら、表側のレスポンスが格段と重くなったなー。ぎりぎり破綻しない(スラッシングが起きない)範囲にとどめているけど、体感速度的に不愉快なレベルになっている。今の仕事が終わって余力ができたら、やっぱりえらいサーバーにリプレースしちゃおう。その方が長期的に考えるといいだろう。初期費用はかかるけど、リプレース後に今のサーバーを解約しちゃえば維持費は変わらないわけだし。Ajaxみたいなサーバーレスポンスが重要な遊びをするのに、現状のサーバーレスポンスじゃとても使えないし。
2005-03-02 [長年日記]
_ 借りてしまった (01:05)
自分で使っていて不満を覚えるレスポンス状況になってきたので、我慢ならずに新サーバーを申し込んでしまった。ちょっと気合いの入ったスペックにしてしまったので(っつーか、こんなスペックのマシン自分で使ったことねーよ)、これが稼働したらいろいろ現状のレスポンスの遅さは解消されることでしょう。でもいつセットアップできるんだろう?
本当はDBの効率化をして見た目の性能を上げようと思っていたんだけど、あまりに負荷が高くなりすぎて、裏側でいじることもできなくなってしまった。新サーバーに移行して負荷に余力ができたら、DBのゴミ掃除しよう。
ついでにa8.netのアフィリエイトに参加してみた。この手のアフィリエイトっぽいアフィリエイトって、前にちょっとだけバリューコマースを試して、全然ダメっぽかったんですぐにやめたんだけど、今度はどうだろうなー。いいところのないGoogle AdSense(なんでMMではラーメンの広告ばっかりでるんだろう?)の代わりになってくれるといいんだけど。
2005-03-03 [長年日記]
_ だだ漏れ (17:33)
今週はムスコのインフルエンザの関係で、夕方出勤というお大尽っぷりなわけですが、今日は朝から頭痛がひどく、通勤電車の中では止まらない鼻水のため、マスクの下がどろどろになっていたわけですが、これは花粉症なのか風邪なのかはっきりさせていただきたい所存であります。っつーか、本当にこの時期は体調不良の原因すらつかめなくて腹立つなー。山林付近の住宅はすべて強制撤去の上、杉林には山火事で全焼していただきたい所存であります(2回目)。なんか鳥肌実になった気分だな。
_ いかん (22:03)
五感からの入力が、へんにふわふわした嘘くさい代物に変わってきた。頭痛とか言うレベルじゃねーな。子供のインフルエンザうつされたかなー。熱はないっぽいんだけど。家に帰れなくなる前に帰ろう。でももう手遅れだったりして。埼京線座れるといいなー。
2005-03-04 [長年日記]
_ ゲロゲロです (06:00)
吐き気がひどくて結局寝られませんでしたよ。頭痛はさらに悪化するし、体中の関節が痛いし、見事な風邪ですな。今寝込んでいる場合じゃないから、インフルエンザじゃないことを祈りつつ、病院が開いたら行ってこよう。でも今日は雪が降っているんだっけ? 会社に行く余力はないかもなー。
2005-03-05 [長年日記]
_ 今年のF1って (10:46)
予選1回目が終わった段階で「エンジンが壊れた」と言って、毎回エンジン交換するのが一番いいんじゃないの? タイヤの問題もあるから、どうせ決勝はいつも波乱含みな展開になりそうだし、予選グリッド10位降格しても決勝前にエンジン交換した方が、エンジンをかばって走って全然回せないよりましな気がする。それに、もしもみんながそう考えたら、みんなで10位降格=結局降格の意味がなくなるし。少なくとも2レース目のエンジンのときには、みんなそうやるんじゃないかな。
予選と予選の間にマシンをいじれないのか
いじっちゃうとピットスタートになるのね。だったら、フリー走行の途中でエンジン交換しちゃう感じかな。っつーか、実は全員がピットスタートを選ぶようになっちゃったりして。使い古しの危険なエンジン+タイヤを使うくらいなら、毎回ぎりぎりまでセッティングをいじれて新品エンジンが使えるピットスタートの方がましだったりしないかなー。
2005-03-08 [長年日記]
_ Ajaxを非同期のパーソナライズナビゲーション生成に使う (19:04)
思いつきネタ(from mixi日記)。
Webページを生成する際に、そこに含まれる特定キーワードに関するマウスイベントをフックする。「そのキーワードにマウスカーソルをあわせると関連情報が表示される」といった機能(ユーザーへの利益)を提供しつつ、それによってユーザーがどのキーワードに興味があるかというフィードバックを得る。
フィードバックはJavaScriptレベルである程度キャッシュされつつ(負荷対策)、Ajaxで非同期にサーバーに送られ、サーバーのユーザーセッションに保存される。
サーバーはユーザーセッションにたまった「興味のあるキーワード」や「今まで閲覧したページ」などの情報を使い、そのユーザー向けにパーソナライズした情報を返す。パーソナライズされた情報はWebページを生成する段階で返すこともできるし、Ajaxを使って非同期・動的に返すこともできる。
用途としては、ユーザーがあるページを見ている間に、(ページ遷移なしで)そのユーザー向きの広告を選択して表示したり、あるいはそのユーザーが次に見るべき(推奨)ページへのリンク(ナビゲーション)を動的に提供したり、とかそういうの。Amazonがやっているお薦めなんかも、これを使うとかなり洗練されたインターフェースになりそう。blogmapでもできるかな?
反応いろいろ
実装はしてみたいけど、こんなことをやっているページがひとつでも 登場したら、ユーザーはJavaScriptをOFFにしそうだなぁ
僕個人としても自分がカキコして公開した情報以外のものが勝手に蓄積され再利用されるのは好きじゃないのだ
ユーザーに無断でそういうことをやったら、いろいろ非難を受けるだろうから、やるなら「そういうものだ」と明示した上でやらないとまずいでしょうね。
ただこのネタのAjax以外の部分は、高度なアクセス解析(ユーザー追跡)+パーソナライズ情報の提供という、別に珍しくないネタなんで、ある意味「それはそれとして」脇に置いておきたいところ。
ここでのポイントは、「Amazonのお薦め商品みたいな、(サイト内で完結した)パーソナライズ情報の提供を、ページ遷移をせずにページ内で完結して実現できたら、スマートなナビゲーションになるんじゃない?」というところなんで。
あ、あと
パーソナライズ情報の収集手段として、「キーワード」のイベントハンドラを使うってのもポイントか。というか多分「キーワードをクリックして表示した履歴を追跡」と「キーワードにマウスカーソルをかざすだけで追跡」の差が大きいんだろうな。
その辺に関しては、『作ろうと思えばキーロガーやマウストラッカーなんてのも作れるわけなので、サーバーに何を送ってるのかわからないというのは、ちょっと気味が悪い。Operaでは通信状態がステータスバーに出る。Operaの実装はプライバシーに配慮したものだろうと思う。』あたりの話につながるんだよな。
2005-03-09 [長年日記]
_ Suicaなくした orz (12:58)
っつーか、定期券の中身が丸ごとないなー。すられたのかもしれない。ひとまずSuicaの定期券分だけでも再発行してもらわないと。
見つかった
渋谷駅に届けられていたよ。誰だか知らないけどありがとー。
_ 絵があるとどれだけうれしいのか (23:07)
最近の流行りらしいんで、絵があるとどれだけうれしいのか実地で試してみようと、blogmapとMMに載っているWebページにサムネイルをつけてみた。うーん、どうだろうなー。しばらく様子を見てみるか。
2005-03-10 [長年日記]
_ 今日はひどいな (10:23)
いや、昨日からか。久しぶりに我慢できなくなって、ときどき目の周りを抑えたりしている。去年はほとんど目に来ることはなかったのになー。薬を飲んで顔を洗ってしばらく経ったら、ようやく治まってきたけど、なんかもう花粉飛びまくりって感じだな。でも、まだこの間ひいた風邪の続きもありそうだから、鼻水とくしゃみのどの程度が花粉のせいなのかよくわからん。
_ 表示の変更とAjaxでの保存 (19:53)
サムネイルを表示したら画面がうるさくなりすぎたんで、要素ごとに表示・非表示を切り替えることができるようにしてみました by JavaScript+CSS。んでもって、実験君的にAjaxが有効な環境では、非同期で変更した設定を保存しています。
が、なんかFireFoxでしか動いてないなー。いろいろ初めて試したことばかりなんで、なにが原因なのかよくわからない。そのうち互換性を高めていきます。「表示・非表示切り替え機能が動かない」以上の不具合があったら外しますんで、教えてください。
あらFireFoxでもちゃんと動いてないや
デフォルトで外しておこう。
多分
IEとFireFoxでは動いている気がする。
2005-03-11 [長年日記]
_ あーもう! (14:06)
この大詰めだってのに目がかゆくてしょぼしょぼして、細かい字を延々と追っていく作業に耐えられませんよ! こんなときに花粉症ばりばりにならなくてもいいのに。今週末を越えたら多少キてもいいから、今は勘弁してくれ。
_ 両用インターフェースと通信の表示 (14:22)
MM/blogmapで、画像等の表示・非表示を切り替える機能を、サイドバーに追加したんだけど、そのインターフェースとして、
- Ajax環境の場合
- フォームのチェックボックスのオン/オフで動的に表示・非表示が変わる
- さらに設定の変更が非同期で保存される(といっても現状はCookieだけど、わざわざサーバーサイドを介して保存している)
- 非Ajax環境の場合
- フォームのチェックボックスで設定を変更し、[保存]ボタンをクリックして設定を保存する。
- ページをロードする段階でのみ、現在の表示・非表示設定が反映される
といった感じにしてみた。多分こういうやり方がAjaxと非Ajaxで両用のインターフェースを使う場合の基本形になるんじゃなかろうか。機能を呼び出すインターフェースを従来のHTMLフォームと互換にしておいて、Ajax環境ではJavaScriptがいろいろ処理を行い、それ以外の場合はHTMLフォームからPOSTしてサーバーサイドで処理を行う感じ。
あと、裏で何を通信しているのがわからなくて気色悪い説がやはり強いらしいんで、Ajaxで通信をするときには、ブラウザのステータスバーに「Ajax connect to [URL]」みたいな通知を表示するようにしてみた。通知を表示する領域をドキュメント内に用意できる場合はそこに表示し、そうじゃない場合はこういう風にステータスバーに表示するのが手軽かなー。ただ、なぜかFireFoxだとステータスバーに何も表示されない。
本格的にライブラリを構築するんだったら、詳細通知モードをユーザーがオンにすると、別ウィンドウにAjaxの通信状態に関する詳細が表示されるようになったりするといいかもしれない。「if (!msgwin) {msgwin = window.open();} msgwin.document.write(msg);」ってする感じね。
ちなみに、現在blogmapとかMMでは更新日時を見てNot Modifiedとか返しているんで、スーパーリロードしないとうまく設定が反映されないかもしれません。そのうちその辺の整合性も調整します。
2005-03-14 [長年日記]
_ なんかもうすごいな (11:34)
ここ3日くらいずっと、薬が効いていない気がするよ。
と思っていたんだけど、昨日の夜の分の薬を飲み忘れて寝たら、夜中に目がかゆくて鼻水がひどくて目が覚めた。そうか、これでも少しは薬で抑えられていたんだね。
でももうちょっと強い薬に変えてもらった方がいいのかなー。一応耐えられているから、このくらいでちょうどいいのかなー。
2005-03-17 [長年日記]
_ 昨日は休んだ (13:24)
なんか脳みその芯がぼぉーっとしていたんで、休み。花粉症のせいなのか単に疲れが溜まっていたのか。ずいぶん寝たんだけど、結局今日も同じような感じだなー。土日寝倒したら復活するかなー。あーだるい。
_ PHPでソケットサーバー (21:48)
って誰か作った人いるかなー。試しにPHPのマニュアルに載っていたサンプルを動かしてみたら、なぜかPHP_NORMAL_READではsocket_readできなかったりして(「ファンクションが間違っています」というわけのわからないエラーが返るよ)ちょっとビミョーな印象だけど、PHP_BINARY_READなら動いたんで一応何とかなりそうではある。
FlashでXMLSocketオブジェクトを使って通信するサーバーとして使ってみようかと思ってたりするんだけど、無難にPerlかRubyで作った方がいいかなー。最近なんでもPHPで作ってみよう(マルチスレッド以外)路線に限界を感じつつあるんで、誰かがダメとか無理とかいってくれればもっと無難な言語使うんだけどなー。それともやけくそでPHP5にでも行ってみようかなー。そうすれば少なくともエラーハンドリング周りはずいぶんまともに作れるだろうしなー。
2005-03-19 [長年日記]
_ 脳関係だろうか (00:30)
昼頃に突然目の焦点が合わなくなった。視界の中央に、もやもやと不特定の方向に光を屈折させる、直径5センチほどの透明の雲のようなものが浮いている感じ。全体としてはそれなりにちゃんと見えるんだけど、どこかを見ようとするとそこを中心とした部分だけが見えなくなる。
花粉症で目がかゆくて目を洗いすぎたからか、それとも我慢できずにちょっと目をこすっちゃったからか、とか思っていたんだけど、これってもしかして脳溢血とかその手の症状の前触れだったりするのかも、という可能性が強い気がしてきた。で、そう思ったらなんだか頭痛がしてきた。
このまま治らなかったらどうしたもんだろうなーとドキドキしつつも、1時間ほど半分目をつぶって過ごしているうちに少しずつ回復してきて、2時間ほどでほぼ元通りに焦点が合うようになった。ただ、頭痛はまだ残っていたんで今日はほとんど仕事にならず。
ここしばらくものすごく不健康な生活をしていたからなー。今までで一番不健康な状態である自信がある。ということで、何が原因かわからないけど、健康対策を真面目に考えることにしよう。病院に行くべきかどうかはちょっと迷うなー。もうすぐ健康診断だからそれで相談してからにするか。
_ 似た傾向のメモのインデックス更新が止まっていた (14:55)
サーバーを転々と移動しているうちに、更新プロセスが置き忘れられてしまったらしい。っつーか、.phpという拡張子で#!/bin/shなスクリプトを書くのはやめようよ、俺。というわけで、久しぶりに(ユーザー数が二桁中頃の頃から止まっていたらしい)「似た傾向のメモ」表示がまともになってます。
2005-03-21 [長年日記]
_ PHP関連専用にしてみた (17:20)
gonzuiを0.8にアップデートしたら、DBの互換性がなくなっていたんで、どうせだからとhttp://gonzui.ishinao.net/の内容をPHP関連専用ソースブラウザとして使えるようにしてみた。gonzui-importでCVSを直接取り込めるのは楽だなー。
現在PHP 4.3.10、PHP 5.0.3、PEARのCVSレポジトリ丸ごと、PECLのCVSレポジトリ丸ごと、Smarty、Mojavi、Mapleがつっこんである。他に入れておいたら便利そうなものあるかなー。
ところでCVSからつっこんだソースに対して、gonzui-updateって効くんだろうか? ダメだったら、いったんローカルにチェックアウトしてから作業した方が更新作業が楽だってことになっちゃうなー。まあ更新するかどうかわからないけどさ。
2005-03-23 [長年日記]
_ PHP用の汎用WikiParser作り中 (19:31)
いろんな自作ツールで手軽に使える汎用的なWikiParserが欲しかったんで、RandomNote/PHPのWikiパースコードをベースに作り中(thanks to ninjinさん、yaktyさん)。以下のような感じでWikiテキストをHTMLにレンダリングできる。
$parser =& new WikiParser(); echo $parser->parse($text);
オプション等で、ある程度挙動(WikiNameの有無とか、改行を生かすかPタグに変えるか、とか)を変えられる。あとキーワードリンクやInterWikiの設定、プラグインによる拡張(結果をその場に埋め込み系)が可能。これを使ってYukiWikiMiniレベルのシンプルなWikiEngine(WikiEngineとしての機能はシンプルだけどWiki記法的には結構リッチ)を作ってみたんで、詳しい情報はそこに書いておいた。現状のソースも置いてある。
Wiki記法はtDiary Wikiスタイルのもの(というかオリジナルWikiのもの)にできるだけ準拠しつつ、RandomNoteで使われていたブロック系の拡張も残し、独自の拡張(主にプラグイン)も用意している。
現状でも一応動いているんだけど、WikiParserクラスの仕様として、現状以上の拡張性を持たせるかどうか、持たせるとしたらどういうインターフェースがいいか迷い中。
パース中のドキュメントのn箇所が連携するような拡張を、スマートに記述できるようなやり方ないかなー。コールバック関数+イベントで一応実現できたけど、いまいちスマートさが足りなかったんだよなー。
2005-03-24 [長年日記]
_ エロ雑誌の撮影? (14:39)
さっき、超ミニスカを履いたねえちゃんが、渋谷駅前の歩道の柵を乗り越え(パンチラ)、それを低く構えたカメラマンが撮影していた。リテイク風景がちょっと笑えた。
_ 注目URL、メディア情報ページを作りました (16:22)
作りかけで放置していた注目URL、メディア情報をページを作りました。ユーザー数が増えてそれなりに有意なデータが出るようにしてから作ろうと思っていて、すかーり忘れていたよ。
- 注目URL - http://1470.net/mm/burst.html/url
- 注目メディア - http://1470.net/mm/burst.html/asin
ところでblogmapのランキングと、MMのランキングって、どういう風に融合させるといいんだろうなー。それぞれの似ている部分と違っている部分をうまく生かした統合ランキングが作れるといいんだけど。
_ 細かい修正 (17:10)
- 今までHTTP GETとしてタイトルの取得に失敗した場合、そのURLの登録ができなかったのですが、その縛りを無効にしました(HTTPSのページで取得失敗する例が多すぎたんで)。
- 投稿フォームでジャンルの区切りとして全角の「|」が入力された場合、自動的に半角の「|」に読み替えるようにしました。全角半角気にせずに縦棒で区切っちゃってください。
2005-03-25 [長年日記]
_ Text_Wikiではない理由 (10:48)
どこともしれない方向を向いて言い訳。
もともとWikiParserクラスを作ったのは、
- 自分で今まで作ったWikiParser(複数)は、DOM(風のオブジェクト群)を介して展開するというごつい設計になっていて、メンテナンスがうざかった(というか拡張していく過程で細かいバグが取りきれなかった)
- PEARのText_Wikiをのぞいてみたけど(ちゃんとは読んでいない)、こちらの設計も俺が作ったのと似ていてジェネリックすぎてごつい感じに見えた
- もっとシンプルな(テキスト操作レベルでの)Wikiパーサーの方が扱いやすくていいなー。RandomNote/PHPのパーサーなんか見通しがよさそう。これをベースに汎用的なものにしよう
って感じなんでText_Wikiベースじゃないんですよ。
_ asahi.com: 不正アクセスの元京大研究員に有罪判決 東京地裁 - デジタル (13:32)
うーん不正アクセス禁止法で有罪判決かー。ひとまず現時点では、あの程度の(パラメータを平文レベルで書き換える(しかもブルートフォースアタックでもなく)だけで破ることができるセキュリティ、というか、単にセキュリティに関する無頓着さ)を突破することは、不正アクセス禁止法に触れるという判断なわけね。
俺は、「高木浩光@自宅の日記 - 不正アクセス禁止法 私はこう考える」に書かれている、
どこかに線引きをして、ここまでは法律による保護もあるが、ここからは保護されないので、最低限の安全対策として(ファイル丸出し同様に)必ず実施しなくてはならないこととして、倫理を形成していくしかないのではなかろうか。
における線引きの手前、「最低限の安全対策として開発・運営者側が実施しなければならないこと」の方に含めた方がいいと思うんだけどなー。
少なくとも、いかにもセキュリティ的にやばそうなサイト(ソースコード)等を見つけたときに、その危険度をある程度は実際に試して測ってもいいと思う。というか、そのくらい自己防衛の一環としてやらせて欲しい。もちろん「ある程度」の範囲は常識的な範囲であるべきだと思うけど(この件ではoffice氏はその範囲を逸脱したとは思う)。
試してみただけで不正アクセス禁止法に触れる、と言われてしまうとリスクを測ることもできないままに、そのサイトを使うか使わないかを判断しなければならないし、またやばそうだと思ってもそれを(具体的な根拠がないから)誰かに告げることもできない。いつか致命的な何かが起きないことを祈りながら、そのまま放置するしかなくなる。
そういう危険性を未然に回避するためには、それまでoffice氏が行ってきた、やばそうなサイトに対して実際にやばいのかどうかを試し、問題があった場合は修正するように通知するという活動は、非常に有用だったと思っている。現時点でも、既知のセキュリティ的な問題を抱えたサイトは、世の中にまだまだたくさんあるはずだ。asahi.comの記事にあるように、セキュリティに興味がある人(善人・悪人問わず)には既知の問題でも、「アクセスはプログラムの脆弱(ぜいじゃく)性を利用したもので、管理者は想定もしていなかった」りするわけだし。
実際俺も昔office氏に、textmaniaのエラーメッセージのサニタイズ不足でXSSが可能だった点を指摘されて直したことがある。それ以来セキュリティ対策に関してはすごく意識するようになった。この件については、例の本にoffice氏の活動に対する謝辞として入れてある。office氏に対する応援のつもりだったんだけど、ひとまずは有罪判決が出ちゃったのか。不正アクセス禁止法に関しては無罪という線を願っていたんだけどな。
2005-03-26 [長年日記]
_ 挫折した (20:22)
なんでもPHPで書いてみよう計画挫折。curlを使っても、HTTP_RequestやHTTP_Clientを使っても、不満を解消しきれない(HTTPSでアクセスできないサイトがある。タイムアウトが効かない。マルチスレッド対応できない)のに嫌気が差して、blogmapのクローリングプロセスの一部(主に巡回処理部分)をPerl(LWP::Parallel::RobotUA)で書き直しちゃったよ。すげー速くなったっぽい。主にタイムアウト処理がきちんと行われるようになったのが理由で、純粋な処理速度の問題ではないんだけど。
やっぱりなんでもPHPで書くのはあきらめた方がいいんだろうなー。単純なスクリプトならばいいけど、ちょっと凝るとすぐにつまらない問題・制限に行き当たるんだよな。でもWebアプリはPHPで書くのが(環境設定や速度や自前のライブラリの都合上)一番楽だし、そうなるとシェルスクリプトでもある程度は同じライブラリを使いたくなるしなー。CPANのPHPとか、pecl/perlとかに手を出してみようかなー。でも色物臭いしなー。
2005-03-27 [長年日記]
_ mylistのリンク元記録 (23:17)
mylistのリンク元記録をはじめました。メモの固定URLに対するHTTP_REFERERのみを記録します(具体的にはdateパラメータがある呼び出しのみを記録しています)。また呼び出し回数は記録しません(何回呼び出されても1回のみ記録されます)。1470.net内のREFERERは記録対象から除外しています。
現在のところ、各ユーザーの設定フォームの下に最近一週間分の元が表示されています(tDiary風のリンク元表示に対応するかどうか検討中です)。それに伴い、設定フォームの呼び出しリンク文字列を「設定」から「管理」に変更しました。
と思ったけど
やっぱり固定リンク以外へのREFERERも記録するようにしました。
2005-03-28 [長年日記]
_ Spider.NETってなんだ? (13:16)
なんかSpider.NETを名乗るクローラーが、MMやらblogmapやらのすべてのURLを延々とたどり続けていて、何万ページたどってもやめる気がなさそうなんで、IPアドレス範囲で丸ごとdenyした。これは何者なんだろう?
2005-03-29 [長年日記]
_ JavaScriptでpreg_replace_callback (17:16)
WikiParserをJavaScriptに移植してみようかと思ったら、preg_replace_callback相当の正規表現(Perlで言うと/eg)が見あたらない。っつーか、ないんだよね?
しょうがないんで、こんな感じで動かしてみたんだけど、なんとも不格好な感じ。もうちょいいい書き方ないかなー。
function replace(str)
{
str = str.replace(/(123)/g, "' + callback('$1') + '");
str = str.replace(/'/g, "\\'");
str = str.replace(/\\' \+ callback\(\\'(.+?)\\'\) \+ \\'/g, "' + callback('$1') + '");
str = eval("'" + str + "'");
return str;
}
function callback(str)
{
str = eval(str) + 100;
return str;
}
test = "sdga123lkjdgas1234fasdfas";
alert(test);
result = replace(test);
alert(result);
ちなみにテンポラリの式をわざと対象のstrに含まされると誤動作するけど、大して危険性もないだろうということで放置。
正解は
function replace(str)
{
str = str.replace(/123/g, callback);
return str;
}
function callback(str)
{
str = eval(str) + 100;
return str;
}
test = "sdga123lkjdgas1234fasdfas";
alert(test);
result = replace(test);
alert(result);
これでOK。replaceの第2パラメータに関数を渡すと、その関数のパラメータとして、lastMatch(というかマッチした全体)、$1、$2、……が渡されて呼ばれる模様。で、その関数の戻り値として置換結果文字列を返してやればいい。
str = str.replace(/(123)/g, callback($1));
とか
str = str.replace(/(123)/g, callback(RegExp.$1));
なんて表現は試してみたんだけどなー。
ちなみに後者の表現だと、RegExp.$1はここの/123/gではなく、その前に評価された正規表現の結果の$1を受け取っちゃうんで、微妙に惜しい結果になった。
_ WikiParserをアップデート (18:19)
主な変更点としては、
- プラグインとして、従来の関数型プラグインに加え、プラグインクラスに対応。
- プラグインクラスでは、同一プラグイン内でのデータの保持、イベントコールバックによるパーサーからの呼び出し、に対応。要は、footnote(注釈)プラグインみたいなことができるようにした
- パースしている元テキストへのアクセス手段を用意。それに伴いフィルタに対応。フィルタ(プラグインのイベントコールバックの実装と同様)を利用することで、パース処理実行時の元テキストへの加工処理が可能になる。要は、tdview.phpとtdiary_categoryプラグインみたいに、カテゴリ記法に対して前処理でリンクを張ったりできるようにした。
- いくつかのバグをフィックス。
一応現状の基本仕様でフィックスさせつつ、細かいメソッド名とかをもうちょいいじる予定。プラグイン連携のためのメソッドもいくつか追加するかも。
2005-03-30 [長年日記]
_ 自分で作る blog ツール(石川 直人) (15:32)
今日ようやく実物を見ることができました。『はじめに』にも書きましたが、主にホビープログラマーが趣味としてプログラミングを楽しむためのネタとして、Webアプリおよびblogツール関連技術の仕組み・使い方を実例(PHP 4)と共に紹介する、という感じのものです。
『自分で作るblogツール(PHP編)サポートエントリー』 の方でいろいろフォローしていきます(最後かなりばたばたしたんで、細かい間違いがたくさんありそう)。よろしくお願いします。
_ なんか昨日あたりから (15:35)
花粉がさらにひどいことになっている気がする。薬を飲んでいても目を洗っても我慢の限界を超えることが多い。補助に鼻炎薬とか飲んだ方がいいかなー。
2005-03-31 [長年日記]
_ blogmapの巡回がはてなダイアリーに偏っている? (01:14)
『blogmapの「『『ユリイカ』2005年4月号特集*ブログ作法』(青土社)のネットでの評判」が?Dだらけだったという件について』のコメント欄のやりとりあたりへの反応。
blogmapは、各blogサイトの更新時刻情報を取得し、それを元に巡回をしています。はてなダイアリー上にあるサイトの更新時刻情報は、
からかなり確実に取れるんですが、それ以外のサイトに関しては、ping.bloggers.jpとかbulkfeedsとかの公開pingサーバー経由で更新情報を取得しているんで、それらにpingを飛ばしていないサイトは巡回対象から外れます。
blogmap自身でも公開pingサーバー(http://1470.net/api/ping)を用意しているんで、ここにpingを飛ばしてもらえると一番確実に巡回対象になります。
ということで、blogmapの情報ソースにはてなダイアリーの情報がやたらと多いのは、巡回のきっかけになる更新時刻情報の精度が高いから、というのが第一の理由でしょう。
あと、最近はてなダイアリーはRSSのdescriptionに含まれる情報量を増やせるようにしました。また、もともと日記系ツールということで、1エントリー(<h3>タグ間)が短くなりがちな分、他のblogツールと比べるとdescriptionの中に本文中の主要な要素(ISBNとかURLとか)が含まれやすくできています。
一方、通常の(MT系みたいな)blogサイトだと、1エントリーは長文になりがちで、その冒頭をdescriptionとして取り出した場合に、blogmapの解析対象要素がそこに含まれないという場合が出てきます。
たとえば、「絵文録ことのは」がblogmapのユリイカに言及したサイトとして表示されない=blogmapで巡回されていないという話が出てますけど、これは巡回されていないんじゃなくて、絵文録のRSSの該当エントリーのdescriptionにユリイカのISBNコードが含まれていないんで解析できなかった、というのが正解です。
blogmapは1470.netに移転したタイミングで、HTMLではなくRSSのdescriptionもしくはcontent:encodedのみを解析するようになったんで、本文中でふれている話題でも、RSSに載っていなければなかったものと見なされます。旧バージョンではHTMLを直接解析していたんで、本文中に書かれていればすべて解析対象になったんですけど。
ちなみにblogmapが2005/3/1以降に巡回した(ユニーク)サイト数は324250サイトで、そのうちはてなダイアリーのサイトは49671サイトでした。だいたい1/6くらいなんで、割合として結構多い方であることも確かですね。
_ 新着ランキングのRSS (17:24)
blogmapの新着ランキングでRSS配信をはじめました。っつーか、ここまだRSS出力作ってなかったのか……。
- URLの新着 - http://1470.net/bm/newcommer.html/url?mode=rss
- メディアの新着 - http://1470.net/bm/newcommer.html/asin?mode=rss
になります。ちなみに汎用RSS UTF-8化ゲートウェイを通してUTF-8で取得する場合は、
- URLの新着 - http://1470.net/api/rss2utf8.php/http://1470.net/bm/newcommer.html/url?mode=rss
- メディアの新着 - http://1470.net/api/rss2utf8.php/http://1470.net/bm/newcommer.html/asin?mode=rss
なんて感じになります。UTF-8しか扱えないRSSリーダーを使っている方はこちらをどうぞ。
_ blog本のおまけ記事を追加しました (20:48)
RSSを出力するサンプルは書いたけど、RSSを読み込んで利用するサンプルは実用性のないサンプル(単にRSSを読み込んで、各要素が配列に入ったでしょ、で終わり)だったんで、もうちょっと実用的なサンプルをおまけで書いておきました。



Before...
_ asiamoth [自分は逆に、サムネイルがある事に興味を持ちました。<del.ico.usからBlogMarksに乗り換えた人 くりす..]
_ ishinao [一応サムネイルオン/オフ機能はつけました。サイドメニューの「表示切替」で画像のチェックを外せば消えます。純粋に見た目..]
_ くりす [早速の対応ありがとうございました。重宝しています。]