文字コード自動判別がなかなか安定しない
URI情報を取得する際に、そのURIで示されるドキュメントの文字コードを判別して処理を行いたいわけだ。ほとんどはHTMLかXHTMLなんで、
- HTTPレスポンスヘッダのcontent-type: text/???; charset=****の部分から取得する
- HTMLヘッダ中の<meta http-equiv="content-type" content="text/html; charset=****">から取得する
- XMLドキュメント先頭の<?xml version="1.0" encoding="*****" ?>から取得する
- 上記すべてが取得できず、なおかつcontent-typeがtext系だった場合は、mb_detect_encodingで文字コード自動判別を試みる
といった感じの処理をしているんだけど、
- content-typeに本来の文字コードとは異なる適当な(たぶんhttpdデフォルト設定のまま)charsetをつけてくる場合は結構ある
- 実際の文字コードと、HTMLヘッダやXMLヘッダの文字コード宣言とが違っている場合が結構ある(文字コードの設定を変えたけど、テンプレートは直してない、とかかなー)
- 文字コードとして無効な内容(各種typo、SHIFT_JISじゃなくてSHIFT-JISになっている、無指定のつもりでnoneという文字列が指定されている、など)がセットされている
なんて場合があって、なかなか文字化けを根絶することができない。最初のうちはできるだけまっとうなロジックの範囲で、そういう場合にもそれなりの結果が得られるような対応をしていたんだけど、限界を感じてきたんで、微妙にアドホックな手段が混ざりはじめてきた。
というわけで、そのあたりを自分で設定可能なみなさま、設定が正しいかどうかを見直していただけるといろいろと助かります。
そういや、おそらく複数のhttpdで分散処理をしていて、リクエストを投げるたびに違ったヘッダが返される(外れを引くと文字化けする)という例もあったなー。
W-ZERO3[es]買った
ビックカメラに行ってみたら機種変で黒の在庫があるというんで、W-ZERO3初代から機種変更。まだ最低限のセットアップをしただけで、全然使ってないけど、ひとまず持ちやすくなったってだけでも、初代よりずいぶんましな感じ。ただ、持ちやすくなった反面、サイドのボタンの誤爆が増えそう。
契約を変更してみた
今まではつなぎ放題+A/B割+年間契約(3年超)だったんだけど、今度はウィルコム定額+データ定額にしてみた。これでひとまずどのくらいパケット通信を使っているのか数字を見てみることにしよう。つなぎ放題契約だと、結局月にどのくらいパケット通信(W-ZERO3単体+PCとつないで)しているのかの数字がよく分からないから、ベンチマーク用の契約として。
登録日を指定したメモ一覧取得API
メモ情報取得APIに、ユーザーと登録日を指定し、特定のユーザーが特定の日に登録したメモ一覧を取得するAPIを追加しました。
登録日指定メモ一覧取得
- URL - http://1470.net/api/memo/daily
- パラメータ(QUERY_STRING)
- userName - 1470.netユーザーID(省略可)。指定すると、そのユーザーのメモ情報のみが対象となる。
- day - 登録日(YYYY/mm/dd形式推奨。省略可)。省略すると当日(APIを呼び出した日)となる。
- リクエストメソッド - GET
- 戻り値
- データ形式 - JSON
- 例 {"result": [{"id" : 998, "updt" : "2006-06-30 02:16:20"}, {"id" : 999, "updt" : "2006-06-30 02:16:21"}, ...]}
- result.* - 各項目
- id - メモID。メモにつけられたユニークなID。
- updt - メモの更新日時(JST)
- ソートオーダー
- rgdt asc, id asc。
- 例
- 呼び出し: http://1470.net/api/memo/daily?userName=ishinao&day=2006/7/30
- 結果: {"result" : [{"id" : 67803, "updt" : "2006-07-30 08:29:57"}, {"id" : 67804, "updt" : "2006-07-30 08:31:41"}, {"id" : 67862, "updt" : "2006-07-30 22:46:56"}]}
メモ、URI検索結果のフィードを用意しました
この間追加した「おすすめURI」の進化の方向をいろいろ考えていて、タグの好みを学習させていって(関連タグを並べて[好き][嫌い]をクリックさせていくとか)それを検索キーにすればいいんじゃね、とかいろいろ試していたんだけど、なんかごちゃごちゃやっているうちに、そんなんだったらふつうにエゴサーチをやりやすくした方が話が早い気がしてきた。
というわけで、メモ検索およびURI検索にフィードを追加しました。右上に[FEED]アイコンがあるんでそちらからどうぞ。
ちなみにメモ検索は、1470.netに登録されたすべてのメモに対する全文検索で、URI検索は、メモやblogmapで収集しているフィードからリンクされたURIに対しての全文検索ね。
このサイト/サイトがリンクする先も検索対象に入れたいって場合は、自分のblogmapにそのサイトのフィードを登録しておけば、そのうち検索対象に含まれるようになります。
検索条件の指定方法は、HyperEstraierの簡便書式に準じます。ふつうに半角スペース区切りでキーワードを追加していくとアンド条件。ノット条件はキーワードの頭に「!」。オア条件は「|」で、アンド条件よりも優先順位が高くなります。ソートオーダーは新着順固定です。
colinuxへの移行、苦戦中
今まで何度もcolinuxやらVirtualPCやらcygwinやら、ローカルのPHP開発環境をLinux on Windows系に移行しようと思ったんだけど、なんだかどうしてもなじめないままに、Win32バイナリ環境に戻ってきていた。けど、やっぱりどうしてもWindows(開発)環境とLinux(運用)環境の差異を吸収するのが面倒くさくなってきたんで、今度こそ完全に移行することを決意。
で、もう何度目かになるcolinuxをできるだけ再セットアップが簡単そうなdebianを使って環境構築しているんだけど、いつまで経ってもまともな環境ができあがらない。まずdebianがよく分からない。Redhat/Fedora系でaptは使ってきたから、似たようなもんかと思っていたんだけど、内部的な管理の仕方が全然違うんだね。開発環境でライブラリのバージョン等を細かくいじりたい場合、debianでは何をどうやっていいのかよくわからん。
さらに、hyperestraier-1.3.3がどうしてもインストールできずにしばらくはまった*1。結局他の環境でインストール実績のあるqdbm-1.8.59+hyperestraier-1.2.8まで戻したらインストールできた。
さらに、PHP 5.1.4をインストールしようとしたら、apt-get install php-5.1.4できたもんだから、楽でいいやと使おうとしたんだけど、どうしてもmysql拡張を使う方法がわからなかったんで、結局Apache 2もPHP 5.1.4もアンインストールして、ソースからインストールし直した。
また、MySQL 4.1系については、apt-get install mysql-server-4.1とかでインストールできてラッキーと思っていたんだけど、PHPをソースインストールするときに使うヘッダ類が見つからずに(mysql-headers-4.1とかあるかと思ったら見あたらない)あきらめて一度アンインストールした。がその際のメッセージを見て、mysqlclinent14-devというのがあるのを発見し、それを使ってようやくPHP 5.1.4を--with-mysql付きでインストールすることができた。
ということで、ようやくApache 2+PHP 5.1.4+MySQL 4.1な環境を構築できたんだけど、まだテスト環境ができたってだけで、開発環境はこれから作らなきゃならないんだよなー。今度こそ挫折せずに最後までたどり着けるだろうか?
そういやcolinuxとWindows間のファイル共有はsambaを使うのが基本なのかな? あと、ネットワークはTAP(ネットワーク共有)にした。ノートとかで移動しながら使うのには、これが一番扱いやすいっぽい?
ファイル共有は
cofsでWindowsのファイルシステムを直接マウントして、作業ドライブとしてはそこを使うのがよさそう。
だめだ
cofsでマウントしたドライブは、読み込みには使えるけど、書き込みにはまともに使えないっぽい。
*1 qdbm-1.8.62は入ったんだけど、hyperestraier-1.3.3の方のmakeがCB_LIST_〜がどうとかいうエラーで止まる。って正確なメッセージをメモるの忘れた
被ブックマーク/被リンクURI一覧
特定のサイト(ホスト)内のページの、被ブックマーク/被リンクURIを表示する機能を追加しました。URLは、
- http://1470.net/site/[ホスト名](/[パス])
- ここの場合: http://1470.net/site/tdiary.ishinao.net/
になります。
また、以前からあるフィード情報のページ、
からも[SITE]というリンクを張っているので、[URI]→[FEED]→[SITE]とアイコンをたどることで、URIが所属するフィード(サイト)→そのサイトの他の人気URIへとたどることができるようになります。
たとえば今たまたま一番新しいメモの、
から、[URI]アイコンをたどって、
にいき、その[FEED]アイコンをたどって、
にいき、その[SITE]アイコンをたどって、
にいく。といった感じの利用イメージになります。
いやーそれにしても、もともとのblogmap構想(Web日記の被リンク情報を解析して、関連情報をたどりやすくする仕組みを作る)がずいぶん実現できてきたなー。
フィードから取得したURIも対象に加えました
今までは1470.net上のメモにつけられたタグのみを利用して、おすすめURIを抽出していましたが、新しくフィードに付けられたタグ(あるいはカテゴリ)がマッチする場合も、おすすめURIとして抽出するようにしました。
カテゴリ対応のblogやSBM経由で取得したフィードなんかには、タグが付加されてますんで、それら経由での情報も掲載されるようになると思います。要するに、まだ1470.net上で誰もメモしていないURIでも、外部のタグに類似した情報を使うことによって、おすすめURIに抽出&掲載できるようになるはずです。
あと、従来はタグの完全一致で検索をかけていましたが、他のタグ検索時と同様に「大文字小文字は無視」「半角スペースは無視」して検索するようにしました。
タグ検索時には半角空白を無視するようにしました
半角空白を含むタグを検索(同じタグを付けたメモを見る、など)する際に、半角空白を無視して検索するようにしました。
っつーかまあ、限りなくAmazonの著者データベースの姓と名の間の半角空白の扱いがいい加減な状況に対しての対策です。これで、Amazonに登録されている著者名をそのままタグに利用した場合でも、半角空白の揺らぎは無視して検索できるようになります。
うげ、ばけばけだ
フィードのクロール処理を別マシンに移動したところ、なんか文字化けしまくっています。次回フィード更新時にフィード系の情報は修正されます。フィード以外で文字化けしている分については、修正クローラーを走らせますんで、しばらくしたらだいたい直ると思います。
それにしても、まったく同じphp.iniを使っているのになんで化けたんだろう? 使っているMySQLのライブラリの問題かなー。
おすすめURIを追加しました
好みのニュースをおすすめしてくれる『Kikker』がいいらしいという話を聞いて、うちにもおすすめURIページを追加してみました。といっても、うちの場合はKikkerみたいに真面目に(ドキュメントの類似度等)計算しておらず、単に「今まで自分がつけたタグと同じタグが付いているけれども、まだ自分はメモしていないURI」を表示しているだけですけど。
もうちょっといろいろ計算しようかと思ったんですが、この程度でも結構いい感じの情報が出てくるみたいなんで、ひとまずこれでしばらく動かしてみます。多分、似たようなタグの付け方をする人=同じような話題に同じような方向で興味を持っている人、ってことで、この程度のロジックでもそれなりの結果が出るんだろうなー。
この方向性は結構面白そうなんで、サーバーに余力がありそうならもうちょっといろいろ試してみよう。ドキュメントごとの特徴語インデックスとタグの類似度インデックスを作っておけば、もっと汎用的な抽出ができるんだろうなー。