Archive for 2月, 2009

28
2009

Movable Type(MTOS) 4.23 -> 4.24にアップデートしました
[重要] セキュリティアップデート Movable Type 4.24 の提供を開始
http://www.movabletype.jp/blog/movable_type_424.html

確認された問題
特殊な操作を行うと、サインインしていないユーザーが特定のユーザーのプロフィール編集画面にアクセスできてしまう。
アクセスした別のユーザーのプロフィールを編集することはできません。

だそうです。

28
2009

こんちわ。
MTSocialBookmarks
ソーシャルブックマーク用ボタンを表示するためのテンプレートタグを拡張するプラグインであるMTSocialBookmarksをバージョンアップしました。

  • yahooブックマークの表示周りでinvalidなhtmlタグを出力する問題を修正しました
  • プラグインの構成を変更しました

http://projects.makotokw.com/trac/arcadia/wiki/MovableType/MTSocialBookmarks.ja

からダウンロードできます。
過去バージョンをインストール済みの方は申し訳ありませんが下記ファイルを一度削除してください。

  • /path/to/mt/plugins/MTSocialBookmarks
  • /path/to/mt/mt-static/plugins/mtsocialmookmarks
  • /path/to/mt/php/plugins/function.mtsbbuzzurl.php
  • /path/to/mt/php/plugins/function.mtsbdelicious.php
  • /path/to/mt/php/plugins/function.mtsbdigg.php
  • /path/to/mt/php/plugins/function.mtsbhatenabookmark.php
  • /path/to/mt/php/plugins/function.mtsblivedoorclip.php
  • /path/to/mt/php/plugins/function.mtsbnftyclip.php
  • /path/to/mt/php/plugins/function.mtsbpookmarkairlines.php
  • /path/to/mt/php/plugins/function.mtsbreddit.php
  • /path/to/mt/php/plugins/function.mtsbsaaf.php
  • /path/to/mt/php/plugins/function.mtsbyahoobookmark.php

勝手ながらmovabletype.orgのドキュメントに沿い階層を変えてしまいました。機能面に全く関係なく申し訳ないですがご理解いただきたく。
余談ですがphpダイナミックパブリッシング用のファイルは/path/to/mt/php/plugins/だけでなく、/path/to/mt/plugins/PLUGINNAME/php/におけるということを学習しました。こちらにおいた方がアンインストール面で管理しやすいと思いました。

27
2009

エントリの日付のデザインが適当で気にいらなかったので画像をつくろうかと思ったが、すでにいろいろありそうな気がしたので適当に探していたら下記を見つけたので使ってみた。
Calendar icons not only for your blog
Movable Typeで使う場合、まず上のリンクから画像を落として適当な場所に配置する。エントリーのテンプレート(ブログ記事の概要とか)で、下記のように追加する。

<div class="asset-date asset-date-m<$MTEntryDate format="%m"$>">
<div class="asset-date-day"><$MTEntryDate format="%d"$></div>
</div>

で、cssに下記を追加。

.asset-date { float: left; margin-right: 6px; width: 42px; height: 42px; }
.asset-date-m01 { background: url('./img/calendar-icons/01.gif'); }
.asset-date-m02 { background: url('./img/calendar-icons/02.gif'); }
.asset-date-m03 { background: url('./img/calendar-icons/03.gif'); }
.asset-date-m04 { background: url('./img/calendar-icons/04.gif'); }
.asset-date-m05 { background: url('./img/calendar-icons/05.gif'); }
.asset-date-m06 { background: url('./img/calendar-icons/06.gif'); }
.asset-date-m07 { background: url('./img/calendar-icons/07.gif'); }
.asset-date-m08 { background: url('./img/calendar-icons/08.gif'); }
.asset-date-m09 { background: url('./img/calendar-icons/09.gif'); }
.asset-date-m10 { background: url('./img/calendar-icons/10.gif'); }
.asset-date-m11 { background: url('./img/calendar-icons/11.gif'); }
.asset-date-m12 { background: url('./img/calendar-icons/12.gif'); }
.asset-date-day { font-weight: bold; font-size: 1.3em; color: #333; width: 42px; text-align:center; padding-top: 14px; }
.asset-header { width: 440px; }

画像は1ファイルにまとめて欲しかったなー。日付のフォントは意外にメイリオが良い感じ。asset-headerやasset-nameもfloatで並べるのが吉。

27
2009

サイト内検索ネタその3。
Google カスタム検索をさらにカスタマイズする。つまりカスタム Google カスタム検索!
kwLabs Google Custom Search
Google カスタム検索は結構イケてる。
http://www.google.co.jp/coop/cse/
Google カスタム検索でGoogle AJAX Search APIを使ってAjaxな検索機能をサイトに置くこともできる。むろん技術的な知識はあまり必要なく、設定をいろいろするだけでhtmlをはき出してくれる。
kwLabs Google Custom Search
デフォルトでは検索ボックスはほとんどデザインされておらず、サイトのテイストと合わないことがあるかもしれない。ただcssでstyleを設定しようにもGoogle カスタム検索で出力されたhtmlではjavascriptでstyleを上書きしているため変更することができなかった。
なのでデフォルトのhtmlを書き換えてみた。
まず、カスタム検索のことは忘れてデザインをつくる。今回は
HOWTO: spruce up your search box with CSS and a background imageを参考にさせてもらった。
Fireworksで背景画像とサーチボタンの画像を作る。背景は長方形に丸みをつける(160×24、丸み80%)。

検索ボタンは2つ丸のパスを交差してドーナッツをつくり、さらに長方形を45°傾けたものをパス合成する。合成したパスに対して軽くドロップシャドウをかける。色をサイトのテイストに合わせばそれらしくなる。
ここでポイントをあげるとするとエディットボックスの背景画像に

を使う場合、この画像の高さが16pxあるのでこれが入りきるサイズでデザインしておく必要がある。
さてここからカスタム検索で出力されたhtmlをいじっていく。今回はカスタム検索で、[検索結果のホスティング オプション] > 自サイトで検索結果をホスト: > オーバーレイ – 1 ページですがモーダル オーバーレイで結果を表示しますで作成されたコードをベースにした。
デフォルトだとこんな感じ。

<form action="" id="searchbox_003122074834180947232:omul0da14we" onsubmit="return false;">
<div>
<input type="text" name="q" size="40"/>
<input type="submit" value="Search"/>
</div>
</form>
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_003122074834180947232%3Aomul0da14we&lang=ja"></script>
<div id="results_003122074834180947232:omul0da14we" style="display:none">
<div class="cse-closeResults">
<a>&times; 閉じる</a>
</div>
<div class="cse-resultsContainer"></div>
</div>
<style type="text/css">
@import url(http://www.google.co.jp/cse/api/overlay.css);
</style>
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=ABQIAAAAJeJU0o6FZh4wCRoY2rR1hBSMcL7SouxgcRP3eM7gifYIAxifSRRui72u-FxNMVGc5XOm17HJdpuoTw&hl=ja" type="text/javascript"></script>
<script src="http://www.google.co.jp/cse/api/overlay.js" type="text/javascript"></script>
<script type="text/javascript">
function OnLoad() {
new CSEOverlay("003122074834180947232:omul0da14we",                 document.getElementById("searchbox_003122074834180947232:omul0da14we"),                 document.getElementById("results_003122074834180947232:omul0da14we"));
}
GSearch.setOnLoadCallback(OnLoad);
</script>

HOWTO: spruce up your search box with CSS and a background imageに沿ってフォームをいじる。具体的にはsubmitボタンを画像にする。
before:

<form action="" id="searchbox_003122074834180947232:omul0da14we" onsubmit="return false;">
<div>
<input type="text" name="q" size="40"/>
<input type="submit" value="Search"/>
</div>
</form>

after:

<div id="search-box">
<form action="" id="searchbox_003122074834180947232:omul0da14we" onsubmit="return false;">
<div>
<input class="search-text" type="text" name="q"/>
<input type="image" src="/css/img/layout/search-go.png" width="19" height="18" class="search-go" alt="Search" title="Search" />
</div>
</form>
</div>

なんということで(ry
で検索ボックスにcssを適応する。

#search-box { position:absolute; top:6px; right:4px; display:block; width:160px; height: 24px; background: url(./img/layout/search-bg.png); }
#search-box input.search-text { float:left; margin: 2px 0 1px 6px; padding:0; border:0; width: 120px; }
#search-box input.search-go { float: right; margin: 3px 4px 0 0; }

しかし、前述の通りinputのcssはjavascriptによるstyleの上書きにより適応されない。そこでjavascript部分に手を加える。
styleに手を入れているのはformの次にある

<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_003122074834180947232%3Aomul0da14we&lang=ja"></script>

である。
これを次に置き換える。

<script type="text/javascript">
(function() { var f = document.getElementById('searchbox_003122074834180947232:omul0da14we'); if (!f) { f = document.getElementById('searchbox_demo'); } if (f && f.q) { var q = f.q; var n = navigator; var l = location; if (n.platform == 'Win32') { q.style.cssText = ''; } var b = function() { if (q.value == '') { q.style.background = 'transparent url(http:\x2F\x2Fwww.google.com\x2Fcoop\x2Fintl\x2Fja\x2Fimages\x2Fgoogle_custom_search_watermark.gif) left no-repeat'; } }; var f = function() { q.style.background = 'none'; }; q.onfocus = f; q.onblur = b; if (!/[&?]q=[^&]/.test(l.search)) { b(); } } })();
</script>

なんという(ry
minifyされているのでわかりにくけどだいたい以下のような変更をしている。

 (function() {
var f = document.getElementById('searchbox_003122074834180947232:omul0da14we');
if (!f) { f = document.getElementById('searchbox_demo'); }
if (f && f.q) {
var q = f.q; var n = navigator; var l = location;
if (n.platform == 'Win32') { q.style.cssText = 'border: 1px solid #7e9db9; padding: 2px;'; }
var b = function() {
if (q.value == '') {
q.style.background = '#FFFFFF url(http:\x2F\x2Fwww.google.com\x2Fcoop\x2Fintl\x2Fja\x2Fimages\x2Fgoogle_custom_search_watermark.gif) left no-repeat';
q.style.background = 'transparent url(http:\x2F\x2Fwww.google.com\x2Fcoop\x2Fintl\x2Fja\x2Fimages\x2Fgoogle_custom_search_watermark.gif) left no-repeat'; 
}
};
var f = function() {
q.style.background = '#ffffff';
q.style.background = 'none'
};
q.onfocus = f; q.onblur = b;
if (!/[&?]q=[^&]/.test(l.search)) { b(); } } })();

(流用する場合は’searchbox_003122074834180947232:omul0da14we’のところを置き換えてください)
これでcssが適応されデザインされた検索ボックスが表示されるはず。
before
kwLabs Google Custom Search
after
kwLabs Google Custom Search
なんということでしょう。匠の手によって味気なかった検索ボックスが見事にサイトに溶け込みました!!

26
2009

サイト内検索ネタその2(3回に渡ってといいつつもうくじけそう。。。)
Google カスタム検索もあるけど、あえてGoogle AJAX Search APIを使ってサイト内検索を実現してみた。
http://labs.makotokw.com/search/
phpで書くとおおよそ以下のようなコードになる。

<?php
$GOOGLE_API_KEY = "Your Api KEY";
$q = @$_REQUEST["q"];
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Search</title>
<link rel="stylesheet" type="text/css" charset="utf-8" href="http://www.google.com/uds/css/gsearch.css"/>
<style type="text/css">.gsc-control { width: 100%; }</style>
</head>
<body>
<div id="searchForm">Loading...</div>
<table><tr><td>
<div id="searchContent"><div id="searchResults">Loading...</div></div>
</td></tr></table>
<script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0&amp;key=<?php echo $GOOGLE_API_KEY ?>" type="text/javascript"></script>
<script language="Javascript" type="text/javascript">
//<![CDATA[
function initSearchControl() {
var config = {
label: 'kwLabs',
siteRestriction: 'labs.makotokw.com',
keyword: '<?php echo htmlspecialchars($q) ?>',
applySearchFormEl: 'searchForm',
applySearchResultsEl: 'searchResults'
}
var sc = new GSearchControl();
var drawOptions = new GdrawOptions();
drawOptions.setSearchFormRoot(document.getElementById(config.applySearchFormEl));
var wsopt = new GsearcherOptions();
wsopt.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
var gs = new GwebSearch();
gs.setUserDefinedLabel(config.label);
gs.setSiteRestriction(config.siteRestriction);
sc.addSearcher(gs,wsopt);
sc.draw(document.getElementById(config.applySearchResultsEl), drawOptions);
sc.execute(config.keyword);
}
GSearch.setOnLoadCallback(initSearchControl);
//]]>
</script>
</body>
</html>

たぶん、GwebSearchを使えば普通に検索だけできると思う。が、Formや検索結果の表示などの機能もAPIで用意されていてここではGSearchControlを使ってみた。
“q”パラメータを受けてそのままjavascriptでGSearchControl.executeを呼び出すことで、formからのPOST(GET)にも対応できる。

PHPの$GOOGLE_API_KEYのところと、javascrptのvar configの中を少し変えれば他のサイトでも流用できると思われる。実際PHPではたいしたことはやってないので他の言語の移植も簡単なはず。

24
2009

kwLabs Google Custom Search
kwLabsにカスタム検索を追加したことを記念して3回にわかって個人ウェブサイトにおけるサイト内検索ネタを書いてみようと思う。今日はGoogleでサイト内検索をする際にどういうものが利用できたかを時系列に考えてみた。
検索システムの導入
検索エンジンがポピュラーになるその昔。ホームページに検索機能をつけようと思うとNamazuのような検索システムを導入する必要があったと思う。しかし、構文解析をしたり、インデックスを作ったり、簡単なようで検索システムというのは結構大変な仕事をしている。この時代にサイトを作ろうとするような人はイノベーターという位置に属する人たちだがそれでも導入は大変だったのではないかと思う。ただ残念なことにこのようなシステムを使っているサイトであまり良い検索ができた記憶がない。
検索エンジンを使う
Googleがメジャーになり、Webで情報を探すことを指す言葉がネットサーフィンよりもググるという言葉が適切になってきたころ、検索エンジンを利用してサイト内検索するTipsがあった。Googleでは検索キーワードに”site:blog.makotokw.com”といった文字を追加するとそのURL以下のサイトで検索を行ってくれる。自分のサイトが滞りなく検索エンジンにクロールされていれば、検索キーワードに”site:○○”という文字列を追加したものをGoogleに投げれば、サイト内検索として使うことができる。Formの使い方さえ知っていれば高度な技術的な知識は必要なかった。
Ajax Search APICustom Search Engine

Googleの検索をsubsetとして使うツールとしてAjax Search APIとCustom Search EngineがGoogleから2006年にリリースされる。Custom Search Engineは特定のURL以下(他にもいろいろ機能はあるが)を検索するための検索ボックスやパラメータを簡単な設定で自動的に作ってくれるのでWebの知識があまりない人でも使うことができたと思う。
Ajax Search APIではJavascriptを使って検索結果を取得することができ、site:○○で制限するような機能ももっているのでこれを使ってサイト内検索を行うことができる。APIなのでプログラミングの知識がどうしても必要になるが、その気になればデータの取得だけをAPIで行ってそれをどうデザインして表示するかをコントロールすることもできる(はず、やったことない)。ただ、Custom Search Engineで十分事足りるせいか、Ajax Search APIはもっぱら画像検索や地図検索などサイト内検索以外の用途での利用が多いような気がする。
そんなこんなで現状はGoogleを使ってサイト内検索をするのにはCustom Search Engine(カスタム検索エンジン) http://www.google.co.jp/coop/cse/ を使うのが良さそうだ。
Movable TypeやWordpressのようなブログのツールも検索機能を持っているがやはりGoogle様と比べるとパフォーマンスは芳しくない。(まぁツールよりもインフラの違いによるものが大きいと思うが。。。)
ブログツールの検索機能の方が本文で効果的に検索できるけど、ブログ検索みたいなものもあるし、賢い検索エンジンはサイトがブログであることを判定して、記事の本文はどれかも判断することもできそうだ。そのうちブログツールの検索機能も検索エンジンに依存していくのかもしれない。
というわけでAjax Search APIを使ったMovable Typeプラグインでも書いてみようかなと思う今日この頃。

23
2009

WBC日本代表28人が発表されたそうな。あんまり野球は見ないけど最初の候補がでたときにパリーグと大リーグで良くね?と思ったりしたけど、パリーグ選手がたくさん落選してそれなりにバランスはよくなったかもしれない。
だれが落ちても文句はでると思うけど、巨人選手が多くない?っていういのは確かにある。もちろんペナントのためなら落選したほうがチームのためじゃないか(だから贔屓ではない)という声もあるけど、読売手動で現役の巨人の監督が選ばれてる時点でいまさらな意見のような。
勝てば官軍だけど、きっと負けたらオシムの時代の千葉の選手のように揶揄されるような気がする。

【投手】(13人)
涌井秀章(西武)
小松 聖(オリックス)
ダルビッシュ有(日本ハム)
渡辺俊介(ロッテ)
岩隈久志(楽天)
田中将大(楽天)
馬原孝浩(ソフトバンク)
杉内俊哉(ソフトバンク)
内海哲也(巨人)
山口鉄也(巨人)
藤川球児(阪神)
岩田 稔(阪神)
松坂大輔(レッドソックス)
 【捕手】(3人)
阿部慎之助(巨人)
石原慶幸(広島)
城島健司(マリナーズ)
【内野手】(6人)
中島裕之(西武)
片岡易之(西武)
川崎宗則(ソフトバンク)
小笠原道大(巨人)
村田修一(横浜)
岩村明憲(レイズ)
 【外野手】(6人)
稲葉篤紀(日本ハム)
亀井義行(巨人)
青木宣親(ヤクルト)
内川聖一(横浜)
イチロー(マリナーズ)
福留孝介(カブス)

19
2009

天然・自画自賛

| 4 Comments | No Trackbacks | はてなブックマークへ追加 | del.icio.usへ追加 |

Webで調べ物していて、欲しい情報が見つかって。「これ書いたやつ天才や!」と思ったら二年前自分が書いたものだった。完全に無自覚な自画自賛。
二週間前の自分は他人。
二年前の自分は天才。
むむ、俺は疲れているのか。

19
2009

ユニコーン復活

| No Comments | No Trackbacks | はてなブックマークへ追加 | del.icio.usへ追加 |

最近、ユニコーンの露出多いな。
昔ユニコーン聞いてた覚えがあるけどiTunesのライブラリにはPopsな曲が入ってないんだよね。
ユニコーンで一番好きな曲は「Maybe Blue」。いや、これはVisual系でもコピーできるって理由なんだけど。
そのうちCD借りにいくかー。品薄になってそうだなぁ。

18
2009

久しぶりに参考書っぽく机に置いておいてもいいかも。と思った本。
4894712873
デザインパターンなんかとっくの昔に飽きていたものとしてちょっとタイトルに期待していたのだが、ページが少ないなりによくまとまってる。デザインパターンのようにこうやっとけばいいよテクじゃなくて、どちらかというと理論。セマンティクスと言うほうがよいのか。
もう少し違う言い方はないものか、なんとなく時代にあってる気がする。初心者には勧めづらいが一つ言語を覚えてデザインパターンとか手を出しそうな人にはむしろこっちを先に読んでもらいたいと思う。