Archive for the ‘Blog’ Category

Amazonおまかせリンク

Sunday, June 3rd, 2007

Google AdSense に引き続き、導入。

Amazonおまかせリンク(R)は、常にあなたのWebサイトの内容に沿った商品を自動的に選択して表示します。

という触れ込みなのだけど、ベータ版ゆえか、コンテンツマッチの精度が少し甘い気がする。が、サイトに関連する書籍を自動選出・表示してくれるツール、と考えると、AdSense 以上に有用な予感がする。

Flickr 風の検索フォーム

Tuesday, May 29th, 2007

searchinput.png

ページ要素を整理すべく、検索フォームの場所を(ヘッダ部分に)移動のうえ、Flickr 風なインタラクションをもったかたちに改良。あわせて input タグに accesskey 属性を追加し、キーボード操作で検索フォームにカーソル移動できるようにした。

HTML は以下のとおり。

<form method="get" action="http://blog.shimazu.org/index.php">
<input type="text" accesskey="f" name="s" id="searchinput" />
</form>

JavaScript コードは以下のとおり。実装において、Yahoo! UI Library (YUI) の yahoo-dom-event.js を使用した。最近よく見る直感的なインタラクションだけど、コードは思いのほか直感的ではない。

(function(){
var defalutvalue = 'Search...';
var edited = false;
var E = YAHOO.util.Event;
var D = YAHOO.util.Dom;
E.addListener('searchinput', 'focus', function(){
    if(this.value == defalutvalue && !edited) this.value = '';
});
E.addListener('searchinput', 'blur', function(){
    if(this.value == '') {
        this.value = defalutvalue;
        edited = false;
    } else {
        edited = true;
    }
});
E.addListener(this, 'load', function(){
    D.get('searchinput').value = defalutvalue;
});
})();

実装途中で気づいたけれど、Firefox の accesskey の操作がバージョン 2.0 から変わった模様。従来、[ Alt + Access Key ] だったのが、[ Alt + Shift + Access Key ] となっている。

かんたんなイントラブログの立て方

Friday, May 25th, 2007

友人から「かんたんにイントラブログを立てたい」という話があり、ざっとまとめた設置手順を転載しておく。あくまでかんたんに、ということで、サーバ環境は、Windows XP 上に XAMPP Lite を使って構築し、ブログソフトウェアには WordPress ME を採用、バージョンは、2007/5/19 時点での最新版を使用した。

注意事項:
XAMPP Lite はかんたんなサーバ環境設置を実現する反面、セキュリティ的に難アリで、インターネット環境でのサーバ利用には向かない。利用には注意されたい。

1. XAMPP Lite のセットアップ

以下 URL から xampplite-win32-1.6.1.zip をダウンロード。
http://www.apachefriends.org/download.php?xampplite-win32-1.6.1.zip

C:\ とか D:\ とかハードディスクの最上位階層でダウンロードファイルを解凍(USBメモリでも可)。C:\xampplite\ といった感じのフォルダができる。C:\xampplite\xampp-control.exe をダブルクリックで起動。

01_01.png「XAMPP Control Panel」が表示される。赤枠・青枠の「Svc」チェックボックスにチェックをいれ、黄色枠「Service Settings」ボタンをクリック。

01_02.png黄色枠「SCM」ボタンをクリック。

01_03.png「Apache 2.2」が選択されていることを確認し、オレンジ枠「サービスの開始」リンクをクリック。

01_04.png「mysql」が選択されていることを確認し、オレンジ枠「サービスの開始」リンクをクリック。

2. WordPress ME のセットアップ

http://sourceforge.jp/projects/wordpress/files/ にアクセス。

02_01.pngむらさき枠「wordpress-me213.zip」リンクをクリック。ミラー選択画面に遷移する。

02_02.pngむらさき枠内のダウンロードアイコンをクリック(どこでも可)すると、ダウンロードが開始される。ダウンロードファイルを解凍。解凍後、できたフォルダ「wordpress」を C:\xampplite\htdocs\ に移動する。http://localhost/phpmyadmin/ にアクセスする。

02_03.pngオレンジ枠「新規データベースを作成する」の箇所にて、「wordpress」という名称にてデータベース作成。http://localhost/wordpress/ にアクセスする。

02_04.png「ウィザード」リンクをクリック。

02_05.png「こちらをクリック」リンクをクリック。

02_06.pngユーザー名に「root」、パスワードを空に設定し、「submit」ボタンをクリック。

02_07.png「WordPress のインストール」リンクをクリック。

02_08.png「First Step」リンクをクリック。

02_09.pngブログ名を適当に入力(あとで変更可)、メールアドレスを入力し、「Continue to Second Step」ボタンをクリック。

02_10.pngセットアップ完了画面に遷移する。表示されたログイン名・パスワードを使って、「ログイン」リンクを押した次の画面にて、ログインを行う。

02_11.pngログイン画面。

02_12.pngログインするとこの画面が表示される。

02_13.pnghttp://localhost/wordpress/ にアクセスするとブログの公開用画面が表示される。

以上で設置完了。

Google AdSense

Sunday, May 20th, 2007

Google Analytics に引き続き、導入。手始めに、サブカラム下に「縦長バナー(120×240)」を設置。Amazon アフィリエイトの結果が芳しくないだけに、期待したいところだが、どうだろうか。

‘Save This Page’ 件数表示の実装

Saturday, May 19th, 2007

今回の 表示機能 の実装は、

  • del.icio.us・はてブ の API をたたき、JSONP (JSON with Padding) 形式のデータを出力する Ruby スクリプト
  • JSONP 形式データを受け取り、整形・表示する JavaScript

の 2 つから構成される。実装にあたり、以下を参考にさせていただいた。

以下、個別にまとめておく。

はてなブックマーク の API をたたくスクリプト

はてなの場合、自分のブログに被ブックマーク数を表示する にあるような簡単な方法があるが、画像形式で表示され、デザインの調整がきかないことから、XML-RPC で API をたたく方法をとった。作成した getHatenaBookmarkCount.rbx の内容は以下のとおり。

#!/usr/bin/ruby -w
require 'cgi'
require 'xmlrpc/client'
require 'json/pure'

cgi = CGI.new
print cgi.header("type"=>"text/html")
end_point = 'http://b.hatena.ne.jp/xmlrpc'

url = cgi.params['url'][0] ? cgi.params['url'][0] : ""
callback = cgi.params['callback'][0] ? cgi.params['callback'][0] : nil

unless url =~ /^http:\\/\\/blog\\.shimazu\\.org\\//
	exit
end

urls = [ url ]
client = XMLRPC::Client.new2(end_point)
begin
	result = client.call('bookmark.getCount', *urls)
rescue XMLRPC::FaultException => e
	data = { 'error'=>e.faultCode, 'detailed'=>e.faultString }
	print data.to_json
	exit
end

data = [ { 'url'=>url, 'total_posts'=>result[url] } ]
if callback
	print callback ,'(', data.to_json ,')'
else
	print data.to_json
end

Ruby XMLRPC はてなブックマーク件数取得API というその名もずばりな参考資料があったので、それをベースにしている。

Ruby の json ライブラリは JSON implementation for Ruby から取得でき、rubygems でのインストールも可能。C で書かれたバージョン (json) と Pure Ruby のバージョン (json_pure) があるが、なぜか Debian GNU/Linux (Sarge) に前者 (json) がインストールできず、代わって後者 (json_pure) をインストールした。

del.icio.us の API をたたくスクリプト

del.icio.us / help / json / url にあるとおり、del.icio.us では普通に JSONP 形式の API が提供されてはいるものの、URL の指定に MD5 の暗号化が必要とのこと。Paul Johnson’s implementation of MD5 in JavaScript という凄腕ライブラリはあるものの、クライアント(ブラウザ)での処理は極力減らしたいので、MD5 処理する Ruby スクリプトをはさむかたちとした。作成した getDeliciousCount.rbx の内容は以下のとおり。

#!/usr/bin/ruby -w
require 'cgi'
require 'digest/md5'
require 'open-uri'

cgi = CGI.new
print cgi.header("type"=>"text/html")

api = 'http://badges.del.icio.us/feeds/json/url/data?hash='

url = cgi.params['url'][0] ? cgi.params['url'][0] : nil
callback = cgi.params['callback'][0] ? cgi.params['callback'][0] : nil

unless url =~ /^http:\\/\\/blog\\.shimazu\\.org\\//
	exit
end

request = api + Digest::MD5.hexdigest(url)
response = OpenURI.open_uri(request).read.chomp!

if callback
	print callback ,'(', response ,')'
else
	print response
end

出力結果

両者いずれも URL と callback 関数名 をパラメータ指定して、JSONP 形式のデータを出力するようになっている。出力例は以下のとおり(わかりやすくするため整形済み)。

例:getDeliciousCount?url=http://blog.shimazu.org/archives/95&callback=getDeliciousResponse

getDeliciousResponse([{
	"hash":"f021170bb35f553b70b7f392412babe4",
	"top_tags":{},"url":"http://blog.shimazu.org/archives/95",
	"total_posts":1
}])

例:getHatenaBookmarkCount?url=http://blog.shimazu.org/archives/89&callback=getHatenaBookmarkResponse

getHatenaBookmarkResponse([{
	"url":"http:\/\/blog.shimazu.org\/archives\/89",
	"total_posts":1
}])

なお、http://blog.shimazu.org/ で正規表現をかけているのは、http://blog.shimazu.org/ 以外のドメインでの利用を制限するため( XMLHttpRequest ではないので、クロスドメインでのアクセスが普通にできてしまうがそれを抑える目的)。

JSONP 形式データを受け取る JavaScript

データを受け取る処理を getcount.js としてまとめた。

function getDeliciousResponse(data){
if(!data||!data[0]||!data[0].total_posts){return false;}
var str = data[0].total_posts + (data[0].total_posts==1?'user':'users');
document.getElementById('delicious').innerHTML = '<a href="http://del.icio.us/url/' + data[0].hash + '">' + str + '</a>';
}
function getHatenaBookmarkResponse(data){
if(!data||!data[0]||!data[0].total_posts){return false;}
var str = data[0].total_posts + (data[0].total_posts==1?'user':'users');
document.getElementById('hatenabookmark').innerHTML = '<a href="http://b.hatena.ne.jp/entry/' + data[0].url + '">' + str + '</a>';
}
var el_delicious = document.createElement('script');
el_delicious.src = '/utils/getDeliciousCount?url=' + location.href + '&callback=getDeliciousResponse';
document.getElementsByTagName('head')[0].appendChild(el_delicious);
var el_hatena = document.createElement('script');
el_hatena.src = '/utils/getHatenaBookmarkCount?url=' + location.href + '&callback=getHatenaBookmarkResponse';
document.getElementsByTagName('head')[0].appendChild(el_hatena);

’Save This Page’ 件数表示

Sunday, May 13th, 2007

以前取り付けた ’Save This Page’ Button に「このページは何件ブックマークされているか」を表示させる仕組みをつけてみた。今回も del.icio.usはてなブックマーク の両方に対応している。

savebutton.png

目に見えるものはたったこれだけなのに、実装にやたら時間がかかってしまった。実装方法などについては、追ってまとめることにする。

追記
‘Save This Page’ 件数表示の実装 に実装詳細を記載。

XML-RPC Ping Services

Monday, April 23rd, 2007

ping はいまだに理解できていない blog の機能のひとつ。

Update Services « WordPress Codex
http://codex.wordpress.org/Update_Services

を参照の上、Update Services の箇所に以下を追加してみた。

http://rpc.blogrolling.com/pinger/

http://www.blogdigger.com/RPC2

http://www.bitacoles.net/ping.php

http://rpc.wpkeys.com

http://rpc.technorati.com/rpc/ping

http://rpc.britblog.com

http://pingoat.com/goat/RPC2

http://bulkfeeds.net/rpc

http://rpc.weblogs.com/RPC2

http://api.my.yahoo.com/RPC2

http://services.newsgator.com/ngws/xmlrpcping.aspx

http://api.moreover.com/ping

http://api.moreover.com/RPC2

http://www.blogpeople.net/servlet/weblogUpdates

http://ping.fakapster.com/rpc

http://www.blogoon.net/ping/

http://ping.bloggers.jp/rpc/

http://bblog.com/ping.php

http://rpc.tailrank.com/feedburner/RPC2

http://ping.bitacoras.com

http://ping.feedburner.com

http://ping.myblog.jp

http://ping.syndic8.com/xmlrpc.php

http://ping.weblogalot.com/rpc.php

http://pinger.blogflux.com/rpc

http://blogsearch.google.com/ping/RPC2

http://blog.goo.ne.jp/XMLRPC

http://rpc.icerocket.com:10080

http://rpc.pingomatic.com

http://api.feedster.com/ping.php

効果のほどは、これ如何に。

Yahoo! User Interface Library: CSS Tools

Sunday, April 1st, 2007

見た目はそのままに、YUI の

をこの blog に導入。

ブラウザ間の表示差異がほぼなくなり、格段に CSS を書きやすくなった。JavaScript の library ほど目立つ存在ではないけれど、地味に強力な印象。

いままで Opera 8.6 for Windows Mobile 5 で表示崩れがあったのも、YUI にて正しい表示となった。

Google Analytics

Monday, March 26th, 2007

おくればせながらこの blog にも導入。Google に 買収 される前の Urchin を以前業務で使っていただけに、これだけのものがカンタン設定で・無料で、というのは感慨深い。以下取り急ぎの印象。

  • コード埋め込みは </body> 直前に6行だけ、といたってカンタン
  • レポート画面はみためが少し変わったけれど構成はそのまま。グラフが SVG で描画されてたのが Flash ベースになってる
  • なんとなく予想はしてたけど Urchin にはあったアクセスログ解析機能がなくなってる模様

アクセスログベースではなく JavaScript による計測ということで、どれだけアクセス数がかわるのか、気になるところ。

コメント通知が文字化け

Sunday, March 18th, 2007

WordPress のコメント告知メールの文字化けをいままで放置していたけれど、コメント機能が使われるにあたり、次第に気になってきてしまった。以下方法にて修正した。

■wp-config.php – 以下を追加

mb_language("Japanese");
mb_internal_encoding("UTF-8");

■wp-includes/pluggable-functions.php – wp_mail 関数内 mail で返している箇所を mb_send_mail に変更

#return @mail($to, $subject, $message, $headers);
return @mb_send_mail($to, $subject, $message, $headers);