<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:lang="ja">
  <channel>
    <title>hail2u.net - Weblog</title>
    <link>http://hail2u.net/blog/</link>
    <description>移り気な管理人が、気になっていることをアトランダムにいろいろ書き連ねてみるblogです。</description>
    <language>ja</language>
    <copyright>Copyright (c) 2002-2009, Kyo Nagashima</copyright>
    <managingEditor>kyo@hail2u.net (Kyo Nagashima)</managingEditor>
    <webMaster>kyo@hail2u.net (Kyo Nagashima)</webMaster>
    <lastBuildDate>Fri, 10 Jul 2009 15:22:57 +0900</lastBuildDate>
    <generator>blosxom v2.0</generator>
    <atom:link href="http://feeds.feedburner.com/hail2u/blog" rel="self" type="application/rss+xml" />
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.1/jp/</creativeCommons:license>
    <item>
      <title>jQueryプラグイン: Query YQL</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/J0wAqLakCDk/jquery-query-yql-plugin.html</link>
      <description>Yahoo! Query Language - YDNに式を指定するだけでクエリを投げられ、コールバック関数で結果を受け取れるようにするQuery YQLというjQueryのプラグインを作った。jQuery.getJSON()でもそんなに手間がかかるわけではないけど、エンドポイントとかcallback=?とか書くのがちょっと面倒だったのでプラグインにした。実装するのに2分、名前を考えるのに15分。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Coding</category>
      <guid isPermaLink="false">http://hail2u.net/blog/coding/jquery-query-yql-plugin.html</guid>
      <pubDate>Fri, 10 Jul 2009 14:23:09 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://developer.yahoo.com/yql/">Yahoo! Query Language - YDN</a>に式を指定するだけでクエリを投げられ、コールバック関数で結果を受け取れるようにする<a href="http://github.com/hail2u/jquery.query-yql">Query YQL</a>という<a href="http://jquery.com/">jQuery</a>のプラグインを作った。<code>jQuery.getJSON()</code>でもそんなに手間がかかるわけではないけど、エンドポイントとか<code>callback=?</code>とか書くのがちょっと面倒だったのでプラグインにした。実装するのに2分、名前を考えるのに15分。</p>

<p>ソースを見ればわかる通り、<code>jQuery.getJSON()</code>とほぼ同じで、<code>jQuery.get()</code>のラッパー。将来を見据えてエンドポイントは設定で指定できるようにしようかと少し考えたけど、それは別にQuery YQL v2(またはQuery YQL v1)プラグインとか作ってやれば良さそうだと思ったので実装しなかった。色々オプション設定できるようにして複雑化させたらこのプラグインを書いた意味ないし。</p>

<h4>使い方</h4>

<pre>
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;<em>jquery.query-yql.js</em>&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var statement = &quot;select * from feed where url=&#39;http://example.com/rss&#39;&quot;;
$.<em>queryYQL</em>(statement, function (data) {
  // do something with &quot;data&quot;.
});
&lt;/script&gt;
</pre>

<p>と、<code>script</code>要素で読み込んでおいて、式とコールバック関数を引数に<code>jQuery.queryYQL()</code>を呼ぶ。式は丸投げなので、<a href="http://developer.yahoo.net/blog/archives/2009/07/yql_insert.html">最近実装された<code>insert</code>や<code>update</code>、<code>delete</code></a>もちゃんと使える。ちなみに<code>jQuery.getJSON()</code>で同じものを書くと、</p>

<pre>
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var statement = &quot;select * from feed where url=&#39;http://example.com/rss&#39;&quot;;
$.getJSON(&quot;http://query.yahooapis.com/v1/public/yql?callback=?&quot;, {
  format: &quot;json&quot;,
  q: statement
}, function (data) {
  // do something with &quot;data&quot;.
});
&lt;/script&gt;
</pre>

<p>ちょっと読みやすく、エンドポイントのURLを調べ(覚え)なくて済むのでかなり書きやすい。</p>

<p>また、第二引数に<code>xml</code>を指定すると、<a href="http://www.yqlblog.net/blog/2009/07/08/changelog-for-build-2174/">最近実装されたJSONP-X</a>モードになる。</p>

<pre>
var statement = &quot;select * from html where url=&#39;http://example.com/&#39; and xpath=&#39;//a&#39;&quot;;
$.<em>queryYQL</em>(statement, &quot;xml&quot;, function (data) {
  // do something with &quot;data&quot;.
});
</pre>

<p>最初の例のように第二引数がコールバック関数の場合や第二引数で<code>json</code>を指定した場合はJSONPを利用する。</p>

<h4>YQLのJSONP-Xの返すJSONデータ</h4>

<p>Query YQLプラグイン自体とはあまり関係ない話だが、テスト・コードを書いている途中で若干はまったので触れておく。YQLのJSONPとJSONP-Xでは返ってくるJSONデータの構造が微妙に違う。JSONPでは、</p>

<pre>
{
  &quot;query&quot;: {
    &quot;results&quot;: {}
  }
}
</pre>

<p>と<code>results</code>が<code>query</code>の子になっているが、JSONP-Xでは、</p>

<pre>
{
  &quot;query&quot;: {},
  &quot;results&quot;: []
}
</pre>

<p>と双方がルートにある。単なるYQL側の実装ミスかもしれないので、今後ともこの形かどうかはわからないけど今は注意が必要。10分はまった僕が言うのだから間違いない。</p>

<hr>

<p>プラグインにしたらしたでプラグイン・ファイルをコピーして<code>script</code>要素を書くのが面倒な気がしてくるという……。短いコードのプラグインなのでコピペで使うとかも良いかもしれない。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/coding/jquery-query-yql-plugin.html</feedburner:origLink></item>
    <item>
      <title>Asamashi09 #3</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/OrCAFMExXAg/asamashi09-3.html</link>
      <description>JavaScriptだけでAmazonのProduct Advertising APIへのリクエストの署名認証を実装するのはできないことはないが、秘密キーを隠すというのは無理がある。公式フォーラムでのAmazon側の解答ではプロクシならOKですよみたいな感じなので、プロクシCGIを作り、Asamashi09で利用しているPipeをそれ経由にしてやることにした。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Coding</category>
      <guid isPermaLink="false">http://hail2u.net/blog/coding/asamashi09-3.html</guid>
      <pubDate>Thu, 09 Jul 2009 03:35:41 +0900</pubDate>
      <content:encoded><![CDATA[
<p>JavaScriptだけでAmazonのProduct Advertising APIへのリクエストの署名認証を実装するのはできないことはないが、秘密キーを隠すというのは無理がある。<a href="http://developer.amazonwebservices.com/connect/message.jspa?messageID=132577#132577">公式フォーラムでのAmazon側の解答</a>ではプロクシならOKですよみたいな感じなので、プロクシCGIを作り、<a href="http://hail2u.github.com/asamashi09/">Asamashi09</a>で利用しているPipeをそれ経由にしてやることにした。</p>

<p>プロクシCGIは<a href="http://github.com/tdtds/amazon-auth-proxy/tree/master">ただただしさんのamazon-auth-proxy</a>をPerlでCGIモジュールを使って<a href="http://gist.github.com/142637">書き直したもの</a>を使っている。このCGIスクリプトに署名認証導入前のリクエストをそのまま投げてやれば良い。<code>AWSAccessKeyId</code>は僕のアクセスキーIDに変更して署名を作成するので、特に変更する必要はない。</p>

<p>なお<a href="http://www.xrea.com/">XREA</a>のインストールされているPerlが5.6系なサーバーでは<a href="http://search.cpan.org/dist/URI/">URIモジュール</a>が1.30と古く<code>uri_escape_utf8()</code>が無かったり、<a href="http://search.cpan.org/dist/Digest-SHA/">Digest::SHAモジュール</a>がインストールされてなかったりするので、少し手を加えてやる必要がある。<code>uri_escape_utf8()</code>の実装はURIモジュールからコピーして来れば良い。Digest::SHAモジュールの代わりは、<a href="http://search.cpan.org/dist/Digest-SHA-PurePerl/">Digest::SHA::PurePerlモジュール</a>をライブラリ・パスに置いてやるのが手っ取り早い。<a href="http://gist.github.com/142975">Perl 5.6系なXREAサーバーで動作するもの</a>も公開しておく。</p>

<p>また、ただただしさんのamazon-auth-proxyもRuby 1.8.7以上が必要(多分)で1.8.5なXREAサーバーでは<code>Object#tap</code>と<code>Symbol#to_proc</code>(<code>open( uri, &amp;:read )</code>)のところでエラーになる(Ruby知らないのでググって調べただけ)ので、適当に書き換えてやる必要がある(参考: <a href="http://gist.github.com/141068">今までの人生でRubyのコードを100行くらいしか書いたことがない人が動作するように書き換えたもの</a>)。</p>

<p>署名認証については公式フォーラムでAmazon側が</p>

<blockquote>
<p>よって、OSSのユーザ様それぞれにAPIのAccessKeyIDおよび秘密キーを利用開始時に入力いただくという方法を強くお勧めいたします。</p>
</blockquote>

<p>と、かなり無理がありそうなことを言っていたりする。オープンソース・ソフトウェアのユーザーならアカウントの取得とかできない奴はいないだろうみたいな感覚なのかな。必ずしもオープンソースというわけではないがソースは公開されてしまうソフトウェアでかつユーザーの敷居がものすごく低いもの、例えばFirefoxの拡張とかではこの方法はかなり厳しい気がする。そもそもAPIレベルの変更でデベロッパーだけではなくエンド・ユーザーにも対処を要求するというのは馬鹿げていると思う。</p>

<p>中継プロクシによる署名認証の実装はユーザーに手間をかけさせずに対応できるのだけど、第三者に利用されまくるという問題がある。署名認証は<q>送信されたリクエストが誰によって送られたものかを確認するためのプロセス</q>であるということなので、第三者に利用されまくると意味をなさなくなってしまうんじゃないかなぁ。</p>

<p>署名認証はなかったことになりましたというアナウンスを心待ちにしている。誰でも使えるプロクシ実装はやっぱダメでしたとかいうアナウンスが出そうで怖い。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/coding/asamashi09-3.html</feedburner:origLink></item>
    <item>
      <title>pngcrushでPNGファイルから不必要と思われるメタデータを削除</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/XdwPFDJm95Q/pngcrush.html</link>
      <description>PNGファイルにはメタデータとして様々な情報を埋め込むことができる。その様々な情報のうちガンマとカラー・プロファイルの情報はブラウザでの表示に影響を与えることがあるので、そこそこ使いやすいpngcrushで削除するのが無難。それら影響を与えることがあるメタデータを削除してやれば、WindowsのPhotoshopで作ったPNGファイルがMac(Leopard)のSafariで色がずれるなどといった現象を回避することができる。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/pngcrush.html</guid>
      <pubDate>Fri, 03 Jul 2009 05:32:23 +0900</pubDate>
      <content:encoded><![CDATA[
<p>PNGファイルにはメタデータとして様々な情報を埋め込むことができる。その様々な情報のうちガンマとカラー・プロファイルの情報はブラウザでの表示に影響を与えることがあるので、そこそこ使いやすい<a href="http://pmt.sourceforge.net/pngcrush/index.html">pngcrush</a>で削除するのが無難。それら影響を与えることがあるメタデータを削除してやれば、WindowsのPhotoshopで作ったPNGファイルがMac(Leopard)のSafariで色がずれるなどといった現象を回避することができる。</p>

<p>pngcrushのWindows向けバイナリは<a href="http://sourceforge.net/projects/pmt/files/">ダウンロード・ページ</a>の下の方にあるpngcrush-executablesの方からダウンロードできる(2009/07/03時点ではpngcrush-1.6.15-win32.zipが最新)。pngcrush-1.6.19.zipとかはソースのみなので注意。関係ないけどsourceforge.netは見づらくなった気がする…。</p>

<p>あるPNGファイル(input.png)から不必要と思われるメタデータを削除して圧縮したPNGファイル(output.png)を作成するには、</p>

<pre>
$ &quot;C:\Program Files\pngcrush\pngcrush.exe&quot; -rem alla -l 9 input.png output.png
</pre>

<p>とコマンド プロンプトで実行してやれば良い。<code>-rem alla</code>と指定すると、削除してもあまり影響のないメタデータを削除してくれる(<q>removes all known ancillary chunks except for tRNS</q>)ので、<code>-rem gAMA -rem sRGB -rem tEXt</code>などと個別に指定する必要はない。<code>-l 9</code>は<code>-brute</code>でも構わないが、<code>-l 9</code>の方が速い。</p>

<pre>
@echo off

move %1 %1.bak
&quot;C:\Program Files\pngcrush\pngcrush.exe&quot; -rem alla -l 9 %1.bak %1
</pre>

<p>以上のようなバッチ・ファイルを作れば、ドラッグ・アンド・ドロップ(や送る等)から一発で削除して圧縮できるようになる。</p>

<p>メタデータを確認したい場合は、</p>

<pre>
$ &quot;C:\Program Files\pngcrush\pngcrush.exe&quot; -n -v input.png
</pre>

<p>とコマンド プロンプトで実行してやれば良いが、かなり読みづらい。閲覧に関してはGUIな<a href="http://entropymine.com/jason/tweakpng/">TweakPNG</a>で行うのが良さそう。</p>

<p>いちいちバッチファイルに通すのは面倒くさいというのなら、メタデータを出力しないオプションを持つ<a href="http://www.fnordware.com/superpng/">SuperPNG</a>というPhotoshopのPNG書き出しプラグインを使うというのも悪くはない。圧縮率も5段階で調節できるのでそこそこ使える。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/pngcrush.html</feedburner:origLink></item>
    <item>
      <title>フレッツ・テレビ</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/p1AptkmgA4Q/flets-tv-memo.html</link>
      <description>地元でフレッツ・テレビの個別相談会があったのでいろいろ聞いてみた。とりあえずいきなりひかり電話も同時に導入しませんかみたいに言われたのがかなりアレ。帰るときに貰った粗品はボールペンとポケットティッシュ、洗剤(4回分)、タオル。以下はメモ。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Media</category>
      <guid isPermaLink="false">http://hail2u.net/blog/media/flets-tv-memo.html</guid>
      <pubDate>Sat, 27 Jun 2009 17:19:06 +0900</pubDate>
      <content:encoded><![CDATA[
<p>地元で<a href="http://flets.com/ftv/">フレッツ・テレビ</a>の個別相談会があったのでいろいろ聞いてみた。とりあえずいきなり<a href="http://flets.com/hikaridenwa/">ひかり電話</a>も同時に導入しませんかみたいに言われたのがかなりアレ。帰るときに貰った粗品はボールペンとポケットティッシュ、洗剤(4回分)、タオル。以下はメモ。</p>

<h4>Bフレッツでは使えない</h4>

<p><a href="http://flets.com/next/">フレッツ 光ネクスト</a>にコース変更をする必要がある。どうしてなのかはあまり説明してくれなかった。「フレッツ・テレビはネクストにしないとだめなんです！」みたいな。変更には特にお金がかかるとかそういうことはないらしいが、微妙にすっきりしない。</p>

<h4>ONU一体型ルーター</h4>

<p>新規でフレッツ 光ネクストの回線を引き、同時にフレッツ・テレビを導入する場合はONU一体型ルーター(PR-S300SE/GV-ONU)一台で済む。ONUとルーターを縦に二つ並べたもので、真ん中あたりで短いLANケーブルでつながっている。そのONU一体型ルーターのONU部分からTV等へは同軸ケーブルでつなぎ、ルーター部分にある4つのLANポートからPCや無線LANルーターに接続する。このONU一体型ルーターにはひかり電話向けのモジュラージャックも2個あったりもする。けっこうでかい上に横設置は不可らしいのでかなり設置場所を選ぶと思われる。サイズは幅4cm・高さ24cm・奥行き17.5cm。筐体の色は黒。別にPCカード型の無線LANアクセスポイント(純正以外のものでは動作するらしい)を挿すとa/b/gの無線LANルーターにもなるらしい。</p>

<p>しかし、既にフレッツ 光ネクストやBフレッツの回線を引いている場合は、今使っているONUとこのONU一体型ルーターの両方を使うことになるらしい。どうして取り替えてくれないのかは説明してくれなかった。「ダメなんですよー」と繰り返すのみ。</p>

<h4>ひかり電話</h4>

<p>同時にひかり電話を導入するのがおすすめらしい。お安くなっていますよとか言われても困る。デメリットをまったく説明されなかったので華麗にスルーした。初っ端に「フレッツ 光ネクストにするとひかり電話も導入することになります」みたいにさりげなく混ぜられたので、同時にひかり電話にしなくちゃならないのかと一瞬勘違いしてしまった(実際はそんなことはないのだけど)。個人的には良い機会かもしれないとは思うけど、IP電話はまだなんとなく敬遠してしまう。</p>

<p>ONU一体型ルーターにモジュラージャックが2つあってそこからつなぐだけなので、その近くに電話機を設置するなら接続は簡単。</p>

<h4>工事</h4>

<p>基本的に複雑なことは何もやらない方針らしい。NTTでやってくれることは、</p>

<ul>
<li>ONU一体型ルーターの設置</li>
<li>上記に伴う回線の取り回し</li>
</ul>

<p>だけ。ONUの位置を2階から1階に変更するとかそういうことなら無料でやってくれるらしい。</p>

<p>TV側及びLANの配線等はオプティキャスト(フレッツ・テレビで利用することになる放送サービス会社)の方で頼むことはできる。公式サイト等で参照できる工事費はあくまで最低の値段で、同軸ケーブルを壁に這わせるとかそういう作業は別料金(想像できると思うけどかなりの値段)。</p>

<p>単に一台のTVに接続するだけなら、ONU一体型ルーターから同軸ケーブルで分配器へつなぎ、分配器からTVの地上波デジタル端子とBSデジタル端子にそれぞれ同軸ケーブルで接続するだけ。ONU一体型ルーターのコネクタは一般的な同軸ケーブルのものなので特に接続は難しそうではない。同軸ケーブル*3と分配器は別途購入する必要がある(使用中のものを流用できると思う)。<a href="http://www.opticast.jp/home/construction/tv_kouji/">オプティキャストのテレビ接続工事説明ページ</a>にあるBSデジタルアップコンバータは必要なくなっている(ONU一体型ルーターに組み込まれているということらしい)。</p>

<p>複数台のテレビを設置する場合はブースターが必要になる可能性があることや家庭内の分配器がどこにあるかをしらべなくてはならないとかややこしそうなので、素直にオプティキャストに頼んだ方が良さそう。高いけど…。</p>

<p>また不必要になるBSのアンテナ(や地上波のアンテナ)の撤去等はNTTもオプティキャストもやってくれない。「よく頼まれるんですけどね～」とかおっしゃってた。そこはぼったくりでも良いからやればいいのにとか思ったけど言わなかった。別に電気屋に頼む必要がある(ヤマダ電機で聞いたら「3万円くらいは頂くことになりそうですね」って言われた)。</p>

<h4>月682.5円？</h4>

<p>実際には毎月683円請求されるらしい。年決めで8190円(682.5円*12)払うとかそういうことではない。683円って書けよとか思ったけど言わなかった。</p>

<h4>月6720円？</h4>

<p>これはプロバイダパックで契約した場合のプロバイダ料金とフレッツ回線使用料の合計金額(プロバイダによって多少違う)。フレッツ・テレビの月額利用料は含まれない。BIGLOBEだとBIGLOBE光 with フレッツとかいう名称で提供されているもの。コース変更で乗り換えた場合も2ヶ月無料とかそういうサービス(プロバイダによって違う)は受けることができるらしい。プロバイダパックを利用しない場合は、5460円+プロバイダの月額利用料(1500-2000円位が多い)。もちろん2ヶ月無料などのサービスもない。</p>

<hr>

<p>導入する方向で検討しているんだけど、いまいち踏ん切りがつかない。見積もり届いてからまた考えよう。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/media/flets-tv-memo.html</feedburner:origLink></item>
    <item>
      <title>無印良品の低反発まくら買った</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/uvzpDB9GZ3M/muji-memory-foam-pillow.html</link>
      <description>長年使っていたまくらの一部が擦り切れて中のパイプが出てきてしまったので買い換えた。羽毛にしようかとか加齢臭対策にそばがらにしようかとか色々悩んだけど、無印良品の低反発まくら(安い方)にした。セール中で2000円を切っていて安かったので。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Gadget</category>
      <guid isPermaLink="false">http://hail2u.net/blog/gadget/muji-memory-foam-pillow.html</guid>
      <pubDate>Tue, 23 Jun 2009 18:04:38 +0900</pubDate>
      <content:encoded><![CDATA[
<p>長年使っていたまくらの一部が擦り切れて中のパイプが出てきてしまったので買い換えた。羽毛にしようかとか加齢臭対策にそばがらにしようかとか色々悩んだけど、<a href="http://www.muji.net/store/cmdty/detail/4547315705603">無印良品の低反発まくら(安い方)</a>にした。<em>セール中で2000円を切っていて安かった</em>ので。</p>

<p>今までの普通の綿+パイプのまくらとは違うゆっくり沈み込む感じとねっとりとした感触にまだちょっと違和感がある。同じ低反発系のウレタンチップ+パイプのとかも探してみれば良かった。7cmという厚さはあまり気にならないが、幅が44cmと短いのがちょっとアレかも。</p>

<p>同じ無印の<a href="http://www.muji.net/store/cmdty/detail/4548718293704">まくら用敷くだけひんやりシート</a>もちょっと欲しくなった。店舗で触ってみたら本当にひんやりしてた。どういう仕組みなのかまったくわからない。</p>

<p>ちょっと間が空いたのでどうでもいいエントリを書いてみた。</p>

<p>てか、無印のネットストアはかなりダメな感じが…。</p>

<ul>
<li>在庫ありとなしがものによって(たぶん大型家具など)は不正確であいまい</li>
<li>在庫チェックが別ウィンドウ</li>
<li>在庫チェックの時に毎回郵便番号を入力させられる(ユーザー情報で郵便番号入力してるのに)</li>
<li>ログインしてもカートの内容を記憶しない(ログアウトすると空になる)</li>
<li>上記の合わせ業で、在庫が微妙なものを在庫ができたかどうか調べながら注文しようとすると同じ作業をひたすら繰り返すことになってとても面倒</li>
<li>カートのページがhttpだったりhttpsだったりする</li>
</ul>

<p>衣料品とか在庫が潤沢なものを買う時には気づかなそうだけど、大型家具とかを買おうとするとはまりまくる気がする。</p>

<h4>追記</h4>

<ul>
<li>検索結果のページから商品のページを新しいタブ等で開けない(リンクがjavascript:スキームなので)</li>
<li>検索結果のページから商品のページへジャンプすると戻れない(履歴に残らない移動方法なので)</li>
</ul>

<p>検索結果のページが酷かったことを思い出したので追記してみる。これはない。新しいタブで開くことができず、かつ検索結果に戻れないので、一回の検索で一つの検索結果しか開くことができないという…。</p>

<p>ユニットシェルフのシミュレーターもFlashなのにFirefoxで動かないようにしてるとか謎なとこが多いなぁ。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/gadget/muji-memory-foam-pillow.html</feedburner:origLink></item>
    <item>
      <title>Version Control for Designersを訳した</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/Y5LQvCnCdAo/translate-version-control-for-designers-into-japanese.html</link>
      <description>Gitを使い始めた時に読んだドキュメントの一つであるVersion Control for Designersを日本語に訳した。for Designersとタイトルについているが、そのことは忘れて読んだ方が良いと思う。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/translate-version-control-for-designers-into-japanese.html</guid>
      <pubDate>Thu, 11 Jun 2009 20:52:57 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://git-scm.com/">Git</a>を使い始めた時に読んだドキュメントの一つである<a href="http://hoth.entp.com/output/git_for_designers.html">Version Control for Designers</a>を<a href="http://hail2u.net/documents/version-control-for-designers.html">日本語に訳した</a>。for Designersとタイトルについているが、そのことは忘れて読んだ方が良いと思う。</p>

<p>このドキュメントは開発者向けではない。かといってデザイナ向けの特別な何かがあるわけでもない。主にターゲットになるのは、</p>

<ul>
<li>バージョン管理システムをほとんど触ったことがない人</li>
<li>ちょっとは使っているけどブランチとか良くわからない人</li>
<li>他のを覚えるのがやっとでGitとか言われても困るという人</li>
</ul>

<p>あたりになると思う。内容はGitの基本的なコマンドの使い方を通して、バージョン管理システムをざっと説明するとかそういう感じ。これを読めばあとはヘルプだけで良いというようなものではないが、Gitを始める時のとっかかりにはなると思う。</p>

<p>deployとかcodebaseとかうまい訳語が思いつかない。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/translate-version-control-for-designers-into-japanese.html</feedburner:origLink></item>
    <item>
      <title>jQueryで文字参照に変換</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/BltrVxsJ6Vk/encode-entities-with-jquery.html</link>
      <description>jQueryに文字列に含まれる特定の文字を文字参照へ変換するそのものずばりなメソッドは無い(よね？)が、ダミーの要素を作成し、text()で変換したい文字列をセットしてからhtml()で中身だけ取り出してやるとうまいこと変換することができる。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Coding</category>
      <guid isPermaLink="false">http://hail2u.net/blog/coding/encode-entities-with-jquery.html</guid>
      <pubDate>Wed, 10 Jun 2009 16:13:20 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://jquery.com/">jQuery</a>に文字列に含まれる特定の文字を文字参照へ変換するそのものずばりなメソッドは無い(よね？)が、ダミーの要素を作成し、<code>text()</code>で変換したい文字列をセットしてから<code>html()</code>で中身だけ取り出してやるとうまいこと変換することができる。</p>

<pre>
var s = $(&quot;&lt;u/&gt;&quot;).text(s).html();
</pre>

<p>これだけで<code>s</code>が文字参照に変換される。どう変換されるかは各ブラウザの<code>innerHTML</code>の仕様に依存するのだと思う。</p>

<p>思いついた時は<code>replace()</code>並べるよりはマシかなと思ったけど、直感的なコードではないので一長一短。各ブラウザがきっと良きに計らってくれるであろう点はなかなか良い気もする。</p>

<p>短いエントリだ。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/coding/encode-entities-with-jquery.html</feedburner:origLink></item>
    <item>
      <title>このエントリを含むエントリ</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/7I-oHGX0Wq4/entries-linking-to-this-entry.html</link>
      <description>はてなブックマークにある「このエントリを含むエントリ」機能のようなものをJavaScript+jQueryで書いてみた(サンプル)。ソースはGoogleブログ検索でlink:プリフィックスを使用した検索。この検索結果はAtom(やRSS 2.0)で拾えるので、それをYQLに投げてJavaScriptだけで書いた。最初ははてブのエントリ情報のページをスクレイピングして作ってたんだけど、こっちを思いついたのでこっちで。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Coding</category>
      <guid isPermaLink="false">http://hail2u.net/blog/coding/entries-linking-to-this-entry.html</guid>
      <pubDate>Sun, 07 Jun 2009 17:39:52 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://b.hatena.ne.jp/">はてなブックマーク</a>にある「このエントリを含むエントリ」機能のようなものを<a href="http://gist.github.com/125223">JavaScript+jQueryで書いてみた</a>(<a href="http://hail2u.net/pub/test/112.html">サンプル</a>)。ソースは<a href="http://blogsearch.google.co.jp/">Googleブログ検索</a>で<code>link:</code>プリフィックスを使用した検索。この検索結果はAtom(やRSS 2.0)で拾えるので、それを<a href="http://developer.yahoo.com/yql/">YQL</a>に投げてJavaScriptだけで書いた。最初ははてブのエントリ情報のページをスクレイピングして作ってたんだけど、こっちを思いついたのでこっちで。</p>

<p>YQLへのクエリは、</p>

<pre>
select * from atom where url=&#39;http://blogsearch.google.co.jp/blogsearch_feeds?scoring=d&amp;output=atom&amp;q=link:http://example.com/foo/bar.html&#39;
</pre>

<p>という感じで、エントリのフルパスを指定してやれば良い(http://は削らなくてもOK)。<code>scoring</code>パラメータで日付順にするかどうかは好みで。日本語のブログに限定にするなら<code>lr=lang_ja</code>とかを追加すれば良い。</p>

<p>はてブの実装がどうなっているかは知らないんだけど、きっとブックマークされた時にリンクをリストアップしてると思うので、ブックマークされてないページからのリンクは拾えないんじゃないかと思う。Googleブログ検索の方はフィードを配信しているサイトのからのリンクならほぼ全て拾えると思うので、より多くのリンクを拾えるのではないかと思う。逆にスパム・ブログみたいなものも含まれてしまうとも言える。そういう意味でははてブのリストの方が洗練されたものであるかもしれない。どっちもどっち。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/coding/entries-linking-to-this-entry.html</feedburner:origLink></item>
    <item>
      <title>jQueryプラグイン: Highlight Search Terms</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/crbMgrTnVec/jquery-highlight-search-terms-plugin.html</link>
      <description>前回のエントリで取り上げたスクリプトをjQueryプラグイン化した。だけ。GitHubにリポジトリを作って公開しておいた。基本的にはこれでもう良いやとか思ってるんだけど、URLパターンはもうちょっと何とかならないかなとかは思ってる。あとマルチカラーなハイライトを実現できるようにはしたいかも。実装はhighlight-1とかクラス名を順に振っていくだけとか簡単そうなものになると思う(そこまで考えてるなら実装しろ)。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Coding</category>
      <guid isPermaLink="false">http://hail2u.net/blog/coding/jquery-highlight-search-terms-plugin.html</guid>
      <pubDate>Thu, 04 Jun 2009 11:26:19 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://hail2u.net/blog/coding/highlight-search-terms.html">前回のエントリ</a>で取り上げたスクリプトをjQueryプラグイン化した。だけ。<a href="http://github.com/hail2u/jquery.highlight-search-terms">GitHubにリポジトリを作って公開しておいた</a>。基本的にはこれでもう良いやとか思ってるんだけど、URLパターンはもうちょっと何とかならないかなとかは思ってる。あとマルチカラーなハイライトを実現できるようにはしたいかも。実装は<code>highlight-1</code>とかクラス名を順に振っていくだけとか簡単そうなものになると思う(そこまで考えてるなら実装しろ)。</p>

<p>使い方は多くのjQueryプラグインと同じで、</p>

<pre>
$(&quot;body&quot;).highlightSearchTerms();
</pre>

<p>と検索語のハイライトを行いたい要素からつなげて使う。プラグイン側でインライン・スタイルを付加したりはしないので、デフォルトの<code>em.highlight</code>に対してスタイル指定をあらかじめしておく必要がある。</p>

<p><code>highlightSearchTerms()</code>にはオプションとして、</p>

<pre>
$(&quot;body&quot;).highlightSearchTerms({
  className: &quot;search-keyword&quot;,
  referrerPatterns: [
    &quot;^http://ask\.jp.+[?&amp;]q=([^&amp;]+).*$&quot;
  ],
  unsafeChars: &quot;[!-*,-/:-@[-`{-~]&quot;
});
</pre>

<p>このように指定することができる。</p>

<p><code>className</code>は強調する時に使用する<code>em</code>要素に指定される<code>class</code>属性。デフォルトは<code>highlight</code>。</p>

<p><code>referrerPatters</code>はリファラを評価する正規表現のパターン。配列なので複数指定可能。デフォルトでGoogle(comとco.jp)・Yahoo!(comとco.jp)・Bingの計5つが設定されており、オプションで指定されたものとマージされる。オプションで指定したものが先に評価され、マッチした時点で評価のループを抜けるので、デフォルトのパターンよりも優先されることになる(上書きではないが、近い挙動になる)。例えば自分のサイト内検索のリファラを拾うようにするためには、</p>

<pre>
$(&quot;body&quot;).highlightSearchTerms({
  referrerPatterns: [
    &quot;^http://hail2u\.net.+[?&amp;]q=([^&amp;]+).*$&quot;
  ]
});
</pre>

<p>とかしてやれば良い(これはこのサイトの場合の例)。</p>

<p><code>unsafeChars</code>は検索語から削除する文字列の正規表現パターン。デフォルトではほとんど全ての半角記号を削除するようになっている。なので、記号が強調されることはない。あまり指定する必要はないと思うが一応。むしろデフォルトの削除パターンをもっと充実させたい。このオプション指定は追加ではなく上書きなので注意が必要。</p>

<p>また、デバッグ用に<code>referrer</code>というオプションがある。</p>

<pre>
$(&quot;body&quot;).highlightSearchTerms({
  referrer: &quot;http://www.google.com/search?q=lorem+ipsum+dolor+sit+amet&quot;
});
</pre>

<p>とすることによって<code>document.referrer</code>の代わりに<code>referrer</code>で指定されたURL(URLじゃなくても通っちゃうけど)が検索語の取り出し元になる。なので、色々なリファラを想定して試すことができる。</p>

<p>ビルトインのリファラ・パターンはパブリックにしてあるので上書きしてしまうことも可能。だが、オプションで優先して評価させることができるのでそっちを使った方が無難だと思う。コードも汚くなっちゃうし。</p>

<p>中身のコードはあまり変わっていない。変えたところは<code>$(&quot;*&quot;).not(&quot;iframe&quot;)</code>というような感じで書いていた部分を<code>find()</code>と<code>:not()</code>セレクタを使うようにしたことくらい。</p>

<pre>
this.find(&quot;:not(iframe)&quot;).contents().each();
</pre>

<p>という感じになっている。jQueryのここらへんの柔軟性はすごくて、XPathなんか目じゃないね(おおげさ)。</p>

<p>検索サイトのURLパターンとか調べて書くのがちょっと面倒だったので、こういうのはオープンなデータベースがあったら便利かもしれないなと思った。パラメータごとにきちんと分けてデータベース化すれば、こういうリファラから検索語を強調するスクリプト(ユーザー・スクリプトも含め)とかに使う以外にも、アクセスログ解析とかは勿論、逆に検索を投げるためにも使えそう。「言うだけならタダだよね」。ですよねー。てか知らないだけで既にありそうな気もする(検索してない)。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/coding/jquery-highlight-search-terms-plugin.html</feedburner:origLink></item>
    <item>
      <title>検索語の強調</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/xASlTD6O9do/highlight-search-terms.html</link>
      <description>かなり昔から色々な人が作ってるリファラを調べて検索語を取得しドキュメントの単語を強調表示するスクリプトを今さら書いた。jQueryのおかげでそこそこ短く書けた。遅いけど。リファラから検索語を取得する部分はまぁ置いておいて(あんまり考えずに書いたので)、ドキュメントの単語をハイライトするコードの部分についてだけ書いておく。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Coding</category>
      <guid isPermaLink="false">http://hail2u.net/blog/coding/highlight-search-terms.html</guid>
      <pubDate>Wed, 03 Jun 2009 22:26:06 +0900</pubDate>
      <content:encoded><![CDATA[
<p>かなり昔から色々な人が作ってるリファラを調べて検索語を取得しドキュメントの単語を強調表示するスクリプトを<a href="http://gist.github.com/122353">今さら書いた</a>。<a href="http://jquery.com/">jQuery</a>のおかげでそこそこ短く書けた。遅いけど。リファラから検索語を取得する部分はまぁ置いておいて(あんまり考えずに書いたので)、ドキュメントの単語をハイライトするコードの部分についてだけ書いておく。</p>

<pre>
$(&quot;#contents &gt; .section *&quot;).not(&quot;iframe&quot;).contents().each(function () {
  if (this.nodeType === 3) {
    var s = this.nodeValue.replace(words, &quot;&lt;em class=\&quot;highlight\&quot;&gt;$1&lt;/em&gt;&quot;);
    $(this).replaceWith(s);
  }
});
</pre>

<p>だけ。<code>words</code>にはリファラから取得した単語の正規表現が入っている。このサイトではメインのコンテンツは必ず<code>#contents &gt; .section</code>以下にあるので最初のセレクタはこうなってるが、<code>$(&quot;body *&quot;)</code>とかでもOK。そこからテキスト・ノードも含めて拾える<a href="http://docs.jquery.com/Traversing/contents">contents()</a>、<code>each()</code>と繋げて全ノードを走査する。で、テキスト・ノードだったら<code>nodeValue</code>から内容(テキスト・データ)を拾い、<a href="http://docs.jquery.com/Manipulation/replaceWith">replaceWith()</a>でノードの内容を置き換えている。</p>

<p>テキスト・ノードを全部拾うまではすぐに書けたけど、<code>replaceWith()</code>を知らなくて色々変なことやってた。親ノードに戻ってノード作り直して入れ替えとか。</p>

<p>jQueryの<code>contents()</code>は<code>iframe</code>要素だけ特別扱いしているので、<code>iframe</code>要素だけ除外しておいてやらないと、<a href="http://www.microsoft.com/japan/windows/products/winfamily/ie/default.mspx">Internet Explorer</a>や<a href="http://www.opera.com/browser/">Opera</a>でjQueryがエラ－を吐く。<a href="http://mozilla.jp/firefox/">Firefox</a>ではエラーが出なかったのでちょっとはまったが、Operaの開発者ツールで原因を調査できたので助かった。</p>

<p>ここには既に導入してあるので、「<a href="http://www.google.com/search?hl=ja&amp;safe=off&amp;q=%E5%9C%A7%E7%B8%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80+%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9+%E3%82%AD%E3%83%93%E3%82%AD%E3%83%93+zipfldr&amp;btnG=%E6%A4%9C%E7%B4%A2&amp;lr=lang_ja">圧縮フォルダ エクスプローラ キビキビ zipfldr - Google 検索</a>」などからこのサイトを開くとハイライトされる。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/coding/highlight-search-terms.html</feedburner:origLink></item>
  </channel>
</rss>
