Scuttle メモ
Blosxomの場合もそうだったが、「scuttle」という綴りが空で出てこないうちはマダマダ慣れてないな、と思う。
尚、Scuttleの有益な情報を求めてこれを見てる人には申し訳無いですが、あくまで「日記」なので、具体的なソースコードは提示しておりません。
導入理由
数多くあるソーシャルブックマークサービスを使わずに、オープンソースの同等のサービスを導入しようとしているのには、勿論訳がある。
自分の場合、delicious・はてブ、たまにTumblrを使ってるのだが、投稿内容を一度整理したいと思ったので。
および、後付の理由になるが、IT系の連載ネタを一話ずつ投稿したいのだが、連載順に並べたいというのもある。つまり、例えばdeliciousの場合だと、投稿降順にorder byされるので、綺麗に並べるのも結構面倒だと思った。
また、時系列に関して言えば、「ネタの鮮度」の方が大きいかもしれない。例えば、今現在(2010/02)にIT系景気動向…CNet Japanに多い…、サブプライムローン以前の動向をブックマークしても、あまり現実感が無いんじゃないかと。なので、今それを投稿したとしても、オリジナルの記事の日付に無理矢理変更したい、というのもある。もっとも、そうしたトコロで何かが見えるのかどうか分からないが。
…という理由から探したのだが、意外と少なかったと言うか開発が止まってるみたいな状況だった。
候補として、scuttle (0.7.4)、SemanticScuttle (0.95.1)、sabros.us (1.75)あたりを試してみた。
SemanticScuttleに関しては、インストール方法が…良く分からないのは自分だけかも… *01
sabros.usはカラフルで綺麗なのだが、ローカルのXAMPP環境下でコンフィグレーション情報が保存されなかったので諦めた。
…という消去法による理由からでは無いけど、Scuttleが一番しっくり来るかなぁというコトで。
2010/02/01
インストール・ファーストインプレッション
インストールに関しての詳細は検索すれば出てくるが、ナカナカ面白かった。
コンフィグ(config.inc.php)を書き換え、create tableのためのスクリプトを実行。コンソールからの事例が多いが、面倒なのでphpMyAdmin経由で。何かこの辺、通常だったらinstall.phpが勝手にやってくれるのだろうけど、直接DDLを流すWebアプリは初めてだったので新鮮だった。
次にユーザを登録して、登録開始。
投稿画面を開いての投稿だと、ロケールの問題からか、URL入力→(自動で)ページタイトルの取得、の時点で文字化けする可能性が高い…気がする。現在はブックマークレットしか使ってないので分からないが…
何件か登録して思ったのは、タグ名やメモ欄と言うかdescriptionの文字数が少ないなぁだった。
なので、DDLを修正した。例えば…
CREATE TABLE `sc_tags` ( `id` int(11) NOT NULL auto_increment, `bId` int(11) NOT NULL default '0', `tag` varchar(128) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `sc_tags_tag_bId` (`tag`,`bId`), KEY `sc_tags_bId` (`bId`) );
他にも変えた気がするが、DDLが残ってないので忘れた… *02
余談だが、タグ名の管理方。
各投稿毎にタグ名を実名で抱えている。なので、1件の投稿に対して複数のタグが存在する場合、複数件のレコードが存在する事になる。
確かに分かり易いし、その方がコーディングも楽なのだろうけど…件数が増えた場合、どうなるのかちょっと心配ではある。
ブックマークレットに関して。
TumblrやDeliciousは、Shareaholicでのページ内右クリック、はてブがFirefox右下のアイコン押下なのに対して、Scuttleは単なるブックマーク、という3種類のUIが存在するのは不便ではある。何とかせねば…例えばShareaholicに統合するとか…できるのかどうか不明だが。
但し、ブックマークレット自体は全く問題無く、delicious同様に使えている。
で、IT業界系のネタをぼちぼちと、という状況だが、ともかくアンダー、ひたすらアンダーなネタなので暗くなる。なんでオレ、こういうコトやろうと思ったんだろ、と思わなくも無い。
2010/02/01
見た目の改修
CSS・レイアウトはほとんど変えていない。フォントを自分基準であるMS UI ゴシックにした程度。
例えば、deliciousみたいに左に年月日を表示したいとは思うが、結構面倒なのかどうかは分からないが行なっていない。
スクリーンショットで赤く見えるのは、はてブのブックマーク数。
ある記事の人気度合いがある程度掴めるので、個人的には有用かなと。
自分のブログに「○○users」を表示する参照。
自分の場合、実際のはてブのページにも飛ばしたかったので、下記の様に表示されるコードをテンプレートに記述。
<a href="http://b.hatena.ne.jp/entry/http://FOO.COM"> <img src="http://b.hatena.ne.jp/entry/image/small/http://FOO.COM"></a>
はてブで確認したが、”http://”が無くとも問題無いみたい。自分はその部分を抑制するのが面倒なので行っていないが。
および、livedoorクリップ、Yahoo! ブックマークも同様の事ができるみたいだが、現状静観の構え。そんなにトラフィック増やしてもねぇ…
その他、定番である他人が勝手にユーザ登録できない様にしたり。
2010/02/01
ブックマークレットから更新日時を投稿できる様にする:調査編
実際の投稿に関しては、今回、時系列を重視しているため
- ブックマークレット経由で投稿
- phpMyAdminでsc_bookmarks.bDatetime・sc_bookmarks.bModifiedを書き換え
もうね、アホかと(w *03
自動化しろよと。
そもそも、ブックマークレットの仕組みってどうなってるのだろうかと。
自分はブックマークレットそのものに、画面デザイン、テキストフィールド・ボタンの情報が格納されていると、ずーっと思っていたのだが、どうにもそういう記述を感じない。

改修後の画面。5行目のテキストボックス(DateTime)を追加している。
javascript:
x=document;
a=encodeURIComponent(x.location.href);
t=encodeURIComponent(x.title);
d=encodeURIComponent(window.getSelection());
open('http://foo.org/scuttle/bookmarks.php/hoge?
action=add&
popup=1&
address='+a+'&
title='+t+'&
description='+d,
'unlimited%20bookmarks',
'modal=1,
status=0,
scrollbars=1,
toolbar=0,
resizable=1,
width=730,
height=465,
left='+(screen.width-730)/2+',
top='+(screen.height-425)/2);
void%200;
何のコトは無い、新規窓を立ち上げて、$SCUTTLE/bookmarks.phpを起動してるんだと… *04
この辺りを取っ掛かりにして、画面表示部分、SQL発行部分のアタリを付けた。
特にソースは示さないが、SQL発行(insert/update)部分は、引数に更新時間 *05 を抱えていたので、比較的楽にできそうだなとの感触を得た。
これとは別に、タグが全て小文字になってるのが気になった。
ユーザインタフェース的には、この方が親切なのかもしれないけど、面倒はこっちがカブるから、というコトで。
おそらくは、何処かでstrtolowerを行ってるんだろうなぁというコトでソースを検索してアタリを付けた。
大体分かった。後は勢いだけ…
2010/02/13
ブックマークレットから更新日時を投稿できる様にする:実践編
実際のコード修正なのだが、ビビるよやっぱり。
なので、小手先の改造であるタグ文字列の小文字抑制を外す改修から手を付けた。
本来なら、データベースのバックアップを取る、別環境を用意する等、事前準備が必要なのだが、特に一般公開してる訳でも無いので、えいやと対応。
特に単体・結合テスト仕様書・テスト手順書なるものも書いていないので(w、新規登録、データベースの確認、表示、更新…みたいなカンジで正常に行なわれているのを確認。
続いて、過去データの洗い替えについては、phpMyAdminでupdateを発行。さすがにこれは慎重に行なった。
ついでに、右側に表示されているタグの件数を増加させた。
この勢いを持って、本題である更新日時を投稿できる様に対応。
新規登録における画面表示、投稿、再表示…で、時間のずれが発覚。なのだが、取り敢えず無視して、再表示、更新、再表示…と、一通り動く事を確認。
時間のずれという厄介な問題を抱えてしまい、MySQLの設定を見たりしたのだが、どうにも問題無し。
さて困ったとソースを改めて見たところ、gmdateを使っている事に気付く。
…と書くと格好良いが、「9時間遅れるんだったら、9時間プラスしてやりゃ良いんじゃない」と、strtotimeでゴリゴリと書いている時、gmdateを使っている事に気付いたのだが…要するにgmdateを知らなかった訳で。
で。
実際に投稿して思ったのは、「え? 本当に登録できたの?」だった。
今、投稿したものが最初に表示される、というのは暗黙の了解でもあり *06 、このフローにそぐわない場合、意外と違和感を感じた。
2010/02/13
第一次改修の完了
今後に関して。
大量データの一括登録
初期の時点から取り組みたいとは思っていたのだが、パソコン創世記 インデックス - @IT自分戦略研究所の100件近い記事数を見て作成を決意。
その方法だが、$SCUTTLE/import.php *07 ・$SCUTTLE/importNetscape.phpというのがあり、これは画面からの投稿でのみ、表示されているのだと気付く。
なので、これをベースにすれば何とかなるんじゃないかと。
基本的方針としては、タブ区切りのテキストファイルを用いる予定。
一般公開
しない方針。
但し…WordPressからJavaScriptを使って、とは考えているが。
と言うのは、Scuttleって検索すればそれなりに出てくるし、割と「Scuttle使い始めました。こちら」とあっても、個人的印象では半数以上が404を返している。なので、安易にサイト公開するよりは、WordPressの画面から直接SQLを投げてWordPressの画面に返す、みたいなカンジで公開したいとは考えている。
バックアップ
MySQLのお勉強。
痛い目に会う前に何とか。
特に前述の一括登録をテストする環境を新たに構築するか、バックアップ体制を完成させておくか、いずれか。
2010/02/13
大量データの一括登録、要するにimport
via Scuttle ( サーバインストール型 SBM ) 導入メモ | Bowz::Notebook
前述した「タブ区切り云々」は、deliciousのXML形式exportが分からなかったので、そういう風に考えていた時期がありました。(AA略
deliciousで通常にexportすると、html形式になる。しかし、
https://api.del.icio.us/v1/posts/all
を叩いて *08 、delicious側からの要求に応えて自分のIDでログインすると、ブラウザ画面にXML形式で登録内容が表示される。
これをローカルに保存。
次に必要に応じて、保存したファイルを編集。
$SCUTTLE/import.php を見る限り、および、簡単なテストの結果、HREF・DESCRIPTION・EXTENDED・TIME・TAG 以外、スルーしていると思う。
尚、Scuttleからのexportだが、http://hoge.com/scuttle/api/posts/all を叩く事で、XML exportできるらしいが、自分の環境下では実現できていない。
…と言うのは勘違いで、ブラウザには何も表示されていないが、ソースコードを見るとXMLが吐き出されていた…
まぁ、それはともかくも、delicious XML形式に即したデータの手打ちになるが、量産体制は整ったなぁと。
2010/02/16
sc_bookmarks.bHash varchar(32) NOT NULL default の怪
Scuttleにも、裏で解析しているAsaphでも、「はっしゅ」というフィールドが存在する。
d7b998b222c32b84f937252a8b83a4f4
d0d982faba40188af2a4f9b0190aa006
c0891014c352bedd11e8162d01163fae
…という、意味不明な値を格納しており、何なのか気持ち悪いので調べてみた。
なので、知ってる人にはどうでも良いハナシ。
そもそも、この業界における「はっしゅ」は、例えば、hash とは – Linuxキーワード:ITpro だそうだ。
…良く分からん。
実際にソースコード上では、このフィールドをどの様に使ってるかを調べたら、md5という命令を使っていたので、改めて検索してみた。
何となくだが、テーブルへのInsert/Update時には、この関数経由でリンク先URL文字列を格納してる様な…
で。
md5のいろいろな使い方 – phpspot だそうでナルホドと。
どうでも良いけど、md5って単語、昔まだFreeBSDが2.8、3.0だった頃に良く出てきた記憶がある…当時、インストールに明け暮れてたなぁ…
成る程この仕組み、SJC-Pの教科書にHushが書いてあったなぁ…という記憶がある。
それはともかくそう言えば、まだ自分がScuttleのテーブルに対して直接phpMyAdminで更新をかけていた頃、リンク先URLを触った事があって、その後、画面上では「(このURLをブックマークしているのは、自分と)もう一人」みたいな文言が出てきて、何か変だと思った事があった。
良く分からないまま、更新を行なった後、このメッセージが消えた。なので、ユーザIDと登録時間を暗号化してるのかと思っていたが、全然違っていた。
この辺のロジックについては調べていないが、成る程なぁ…すげーやと思った。
そういう前提で、Wikipediaのハッシュ関数の項目を読めば、結構興味深いんじゃないかと思う。
ちなみに、「逆」md5はできないんじゃないかと。何処かのサイトで質問していて回答者が「ググレカス」みたいな…
2010/02/18
- あのZip内のディレクトリ構成でどうやって? みたいな。また、テーブル数がscuttleが4テーブルに対して10テーブルだったか、何か多い気がしたのも断念の理由。 ↩
- をいをい…という状況だなぁ…まぁ4テーブルなので、調べるのにそれ程時間がかかる訳でも無いし… ↩
- 何度もこの作業を行っていると、Firefoxが重たくなってくるのを実感する… ↩
- 自分はほとんどマジメに”add a bookmark”画面を使った事が無いのですが、改めて立ち上げてみると、ブラウザ画面にブックマーク登録画面が表示されるブックマークレットと、ポップアップするブックマークレットの2通りあるんですね orz. ↩
- デフォルトNULLでこの場合、マシンタイムを設定。 ↩
- 勿論一般的なWebサービスでも、投稿時間のコントロールが可能なサービスは存在するが。 ↩
- deliciousでエクスポートされたXMLファイルをScuttleにインポートするらしいが、今のdeliciousってXML吐き出してるんだろうか… ↩
- http://del.icio.us/api/posts/all が例として挙げられているが、現在このURLにリダイレクトしている…と思う。 ↩