はてなダイアリーとかはカテゴリーごとにフィードを生成してて便利だと思ったので真似してみました。たとえば category.php?k=映画 にアクセスしたら、映画のフィードだけにアクセスできる。もう金輪際、僕のチラシの裏的雑記で精神的苦痛を被ることはありません! =-o 読みたいカテゴリーのフィードを選択して時間を有効活用してください。
Amazon AWSからお便り APIが変わるらしい
昨日、AmazonのAWSからメールが来てた。英語なので斜め読みしたところ「名前がAWSから "Product Advertising API" に変わるので夜露死苦!」くらいな理解をしてたんだけど、今日届いた日本語のメールを読む限りではAPIが変わるらしい!
- 今後はAPIを利用するに際し認証が必要になるらしい!
- 5月11日から3ヶ月を移行期間とし、それ以後は認証付きのリクエストじゃないと受け付けなくなるらしい!
- つまり、ISBN変換プラグインは動かなくなる!
というわけでちょっろと調べてみた
これまではItemIdの他にAccessKeyIdとAssociateTagとActionを送れば良かったんだけど、今後はAccessKeyIdとActionとTimestampを送る必要があり、ActionとTimestampは "Secret Access Key" でHMAC Calucuration and Encodingして送る必要があるらしい(HMAC calculate and Encodeしたものを "Signature" というらしい)。うへー、なんじゃそれ。
とりあえず参考になりそうな情報をクリップ
- SOAPでのリクエストの作り方
Product Advertising API - Authenticating SOAP Requests - Amazon公式PHPのサンプルコード(REST)
Amazon Web Services Developer Community : Introduction to AWS for PHP Developers - 仕事が早い人が作ったPHPスクリプト (REST)
AWS Signed Query
新しいISBN変換プラグインが出来たら公開したいと思います。なお、 hash_hmac() というPHP 5.1.2以降で実装された関数を使うので、それ以下のバージョンでは動かなくなりそう。
祝・ポータルシットiPhone対応
やっとiPhoneに最適化されたサイトが出来ました。ユーザーエージェントを見て、iPhone/iPodであれば専用のサイトを表示します。URIはパソコンと同じです。
これまでも一応iPhone対応というか、iPhone用のXHTMLとCSSは用意してあったんですけど、iui.jsを使った本格的なものではありませんでした。今回はiui.jsの埋め込みにトライ。まだ作り込みが甘いですが、iui.jsのページ遷移アクションなどを実装しました。
実はiui.jsの設置は何度も試みてたんですけど、なかなかうまくいかなかった。敗因としては、
- P_BLOGのXHTML構造を残したまま実装しようとした。
- 同様に既存のCSSを再利用しようとしていた。
- iuiのsampleにある通り、<ul>タグでページをデザインしようとしていた。
の三点ですね。既存のファイルの再利用は諦めてiPhone用にXHTMLやCSSは根本からデザインし直した方が手っ取り早かったです。あと、iui.jsのサンプルファイルは<ul>で組んであるんですが、この方法にこだわりすぎると煮詰まってしまってなかなか前に進みません。
今回はONO TAKEHIKOさんというウェブデザイナーの方のサイト(BLOG × WORLD ENDING すごくかっこいい!)を参考にしてみたところわりとうまくいきました。
いまのところ検索が実装できていないことと、グラフィカルなデザインがイマイチなのが今後の課題ですが、それはまたおいおい。
P_BLOG大改造
P_BLOGをわさわさいじって、Tagを付けられるようにしました。いや正確には前からTag付けられるようになってたんだけど、P_BLOGのTagは「CategoryをTagっぽく使う」っていうコンセプトなので、WordPressとか他のブログツールのTagの概念とちょっと違った。もともとP_BLOGにはTagはなくて、SafariStandのhetimaさんのハックを取り入れてCategoryをTag代わりに使えるようになっていたわけでした。
Tagはいっぱい付けといた方がいいとは思うんだけど、いままでTagをいっぱい付けまくったので数が260個ちかくになってしまって、こうなると逆に目当ての情報にたどり着くのが難しくなった。そういうわけでTagとは別にCategoryによって記事を大まかに分類しておくと便利だなーと思って、ちょちょっといじってみました。
データベースの `p_blog_log` テーブルのこれまでTagとして使っていた `category` フィールドを `tag` という名前にしてしまい、新たに `category` フィールドを作ってphpMyAdminでテキトーに記事にカテゴリーを割り振りました。その後P_BLOG本体のカテゴリーにまつわる部分をごにょごにょと改造して、TagとCategoryの機能を明確に分けました。要するにコピペして変数名や関数名を書き換えただけなんですけどね。
P_BLOGの後継プロジェクトのLoggix含め世の中には優れたブログツールが沢山ありますが、「自分で欲しい機能をどんどん拡張できる」のはオレオレ仕様のこのP_BLOGだけなわけでして、もう開発は終了していますがオレオレ仕様でどんどん進化して行っております :-) なんかもう主客転倒で、P_BLOGをいじる片手間でブログ書いてるような感じです :-P
素のP_BLOGもAutoPagerizableになる
LDRizeはSITEINFOの“domain”のところにサイトのXPathを記入できるんだけど、AutoPagerizeは“url”にはサイトのURLしか記入できない。AutoPagerizeの“url”の部分にもXPathが指定できれば凄く便利だと思ってたんだけど、taizoooさんという方がその方法を紹介している。
ここで紹介されてる通りにAutoPagerizeの該当部分を書き換えると、“url”にXPathが書けるようになる。つまりURLごとにSITEINFOを書くんじゃなくて、ブログツールとか同じ構造をしているサイトならXPath別にSITEINFO書くだけで済むので、SITEINFOの数が減らせる。WordPress用、MovableType用みたいな感じでSITEINFOを書いとけば事足りるようになる(テンプレートが違ったら動かないだろうけど)。XPathでAutoPagerizeが実行可能か判定するので、独自ドメインで運営されてる個人サイトでもAutoPagerizeできるようになる。これは画期的なことですよ!
そういうわけでP_BLOGでもAutoPagerize本体に改変を加えてSITEINFOを書けばAutoPgerizeできるようになった。XHTMLに変更を加える必要なし。以下にSITEINFOを晒しておきますので興味がある方はどうぞ。なお僕はPHPerなので正規表現には自信がありません。不都合がありそうだったら教えていただけるとうれしいです。(ちゃんと直します)URL使わないんだから正規表現関係なかった。もうダメだ。
url: '//address/a[contains(@title, "P_BLOG")]',
nextLink: 'id("prev-logs")/a | //div[contains(@class, "section") and position()!=1]/p[@class="flip-link"]/span[@class="next"]/a',
insertBefore: 'id("prev-logs")',
pageElement: '//div[contains(@class, "section")][1]',
exampleUrl: 'http://pbx.homeunix.org/p_blog/index.php',
なおFooterの address/a のtitleの中に“P_BLOG project”という文字列が含まれているかどうかでP_BLOGで動いているかを判定していますので、カスタムフッターを使ってたり、FooterにP_BLOG projectへのリンクを表示していないサイトではAutoPagerizeは効きません。
微修正
“insertBefore”追加と、“pageElement”を修正。すでにXHTMLにMicroformatsを埋め込んであるサイトだと挙動がおかしくなるっぽいので、 '//div[@class="section"][1]'
を '//div[contains(@class, "section")][1]'
とした。
さらに追記
なんかXPathで指定するのってパフォーマンス悪いらしい。確かに重いかも…。
AutoPagerizeがurlしかスクリプト実行可能かの判定に使ってないのにはちゃんと理由があったのか。
ヤバスクリプト
最近JavaScriptで遊んでます。まだ初歩的なことしかできないんだけど、IE6でアクセスがあった場合、初回と10回目にアラートを出すことにしました。IE6ユーザーのみなさん、うざいでしょう 8-) はやくあんな前近代的ブラウザは捨ててFirefoxをインストールしましょう。
で、今回やったのがjQueryを使って「もっと読む」をかっこよくするっての。P_BLOGでは記事中に <!-- more --> というタグを挿入すると、以後の部分は index.php や category.php では省略され、パーマリンクをクリックしなければ表示されません。長い記事を書くときはトップページが冗長にならないようにこのタグを挿入してたんですけど、AutoPagerizeで閲覧しているときに「もっと読む」をクリックしていちいちパーマリンクを開くのはかったるい。そういうわけであらかじめ全文読み込んで非表示にしておき、jQueryのshowToggleを使ってかっちょいい効果を付けながら展開したり折りたたんだりできるようにしてみました。
今後はしばらくJavaScriptを勉強してブログをもっとうざい感じにしていこうと思います ;-)
追記
うーん、AutoPagerizeで読み込んだ2ページ目以降ではきちんと動いていないっぽい! :-!
LDRize + Minibuffer + hAtom
遅ればせながら、LDRizeとMinibufferというGreasemonkeyをFIrefoxに入れてみました。GoogleやTwitterやTumblrの閲覧が劇的に改善されます。いままでメリットが分からず入れてなかったんだけど、アホですね。もっと早くに入れれば良かった。
となると一年前にやったAutoPagerizeのとき同様、P_BLOGでも動くようにしたくなる。というわけで例のごとくMicroformatsをXHTMLに書き加えました。AutoPagerizeの場合は独自規格のMicroformatsでしたが、LDRizeとMinibufferはhAtomという汎用Microformatsに対応しており、他の用途にも御利益のあるものなんだそうです。ありがたやありがたや。
- void GraphicWizardsLair( void ); // 「LDRizeのxFolk対応」と「カトゆー家断絶テストページやfooo.nameがxFolk化」が合わさるだけで、いろんなWebページがものすごく便利になるのもMicroformatsの大きな利点のひとつ
- LDRizeとMicroformats - 準二級.jp
ところで僕は知らなかったんですけど、XHTMLの中にclassって複数書けるんですね。一要素あたり一個しかclass書いちゃいけないと思ってた。アホだ。これまで autopagerize_page_element 専用に <div> を用意してましたが、これはhAtomのhfeedとご一緒してもらい、<div class="hfeed autopagerize_page_element"> としました。無駄な <div> を一個減らせました。
Continue reading...