<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>石輪っぷり!（Willさんいん）</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/" />
    <link rel="self" type="application/atom+xml" href="http://www.will3in.jp/blog/ishiwa/atom.xml" />
    <id>tag:www.will3in.jp,2011-07-16:/blog/ishiwa//15</id>
    <updated>2011-10-09T14:12:38Z</updated>
    <subtitle>Willさんいんのマークアップエンジニア 兼 講師 兼 日曜大工担当(笑) いしわのBlogです。主にサイト構築に関する私的メモ中心です。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.12</generator>
<entry>
    <title>「heightLine.js」の意外な効果</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2011/10/09-2218.php" />
    <id>tag:www.will3in.jp,2011:/blog/ishiwa//15.2242</id>
    <published>2011-10-09T13:18:08Z</published>
    <updated>2011-10-09T14:12:38Z</updated>
    <summary> 	複数のブロックレベル要素の高さを揃える to-R さん開発の JavaScr...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="Web制作" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ie6" label="IE6" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>
	複数のブロックレベル要素の高さを揃える <a href="http://blog.webcreativepark.net/">to-R</a> さん開発の JavaScript ライブラリ「<a href="http://blog.webcreativepark.net/2007/07/26-010338.html">heightLine.js</a>」。CSS の float プロパティで横に並べたブロックレベル要素の高さを揃えたり、段組みレイアウトの高さを揃えたりする場合に利用させていただいています。</p>
<p>
	先日、偶然にもこの heightLine.js を適用することによって、Internet Explorer 6 が対応していない隣接兄弟セレクタを使った CSS の一つの表現が実現できることを発見しました。</p>
<p>
	それは、写真を左に配置してその右側にテキストブロックを一定の幅で配置、ただし写真が無い場合はテキストブロックを左に詰めるというもので、写真の有無によって HTML に class を与えるなどのコントロールは出来ず、CSS だけで実装するものです。</p>
]]>
        <![CDATA[<p>
	具体的には、</p>
<pre>
<code>&lt;div class=&quot;section&quot;&gt;
  &lt;div class=&quot;photo&quot;&gt;
    &lt;img src=&quot;/images/photo.jpg&quot; alt=&quot;いろは&quot; width=&quot;200&quot; height=&quot;150&quot; /&gt;
  &lt;/div&gt;
  &lt;div class=&quot;text&quot;&gt;
    &lt;p&gt;いろはにほへと　ちりぬるを　わかよたれそ　つねならむ　うゐのおくやま　けふこえて　あさきゆめみし　ゑひもせすん&lt;/p&gt;
    &lt;p&gt;色は匂へど　散りぬるを　我が世誰そ　常ならむ　有為の奥山　今日越えて　浅き夢見じ　酔ひもせず&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>
	こんな HTML で、CSS は</p>
<pre>
<code>div.section {
  width: 500px;
}
div.photo {
  float: left;
}
div.photo + div.text {
  margin-left: 220px;
}</code></pre>
<p>
	このようにすると、画像がある時はテキストは画像の右側に 280px の幅で、画像がない時は 500px 幅でテキストが表示されます。</p>
<p>
	でも、Internet Explorer 6 は CSS の隣接兄弟セレクタに対応していないため、画像があるときのテキストは単純に画像の右側に回り込むだけで、画像よりテキストの高さが大きいと画像の下に続いて配置されます。</p>
<p>
	さらに、テキストブロックに背景や枠線を設定した場合には、それが画像の後ろに表示されてしまいます。</p>
<p>
	それが、前述の heightLine.js を導入し、</p>
<pre>
<code>&lt;div class=&quot;section&quot;&gt;
  &lt;div class=&quot;photo heightLine&quot;&gt;
    &lt;img src=&quot;/images/photo.jpg&quot; alt=&quot;いろは&quot; width=&quot;200&quot; height=&quot;150&quot; /&gt;
  &lt;/div&gt;
  &lt;div class=&quot;text heightLine&quot;&gt;
    &lt;p&gt;いろはにほへと　ちりぬるを　わかよたれそ　つねならむ　うゐのおくやま　けふこえて　あさきゆめみし　ゑひもせすん&lt;/p&gt;
    &lt;p&gt;色は匂へど　散りぬるを　我が世誰そ　常ならむ　有為の奥山　今日越えて　浅き夢見じ　酔ひもせず&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>
	のようにして画像とテキストブロックの高さを揃えると、IE6 でも上記の隣接兄弟セレクタを使った表現が実現できました。</p>
<p>
	ちなみに、本題とは直接関係ありませんが、テキストブロックに背景や枠線を設定する場合は、div.section に clearfix を適用する必要があります。</p>
]]>
    </content>
</entry>
<entry>
    <title>Smooth Scroll とアクセシビリティ</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2011/08/19-0053.php" />
    <id>tag:www.will3in.jp,2011:/blog/ishiwa//15.2217</id>
    <published>2011-08-18T15:53:41Z</published>
    <updated>2011-10-29T04:06:59Z</updated>
    <summary> 	Webページのページ内リンク。通常はパッとリンク先に飛んでしまい、一瞬ページ...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="Web制作" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="アクセシビリティ" label="アクセシビリティ" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>
	Webページのページ内リンク。通常はパッとリンク先に飛んでしまい、一瞬ページが変わったのかどうか分からないし、ページ内に飛んだことは分かっても、ページのどの辺りの位置に飛んだのか分かりません。</p>
<p>
	そこで、ページ内リンクをスルスルッと滑らかにスクロールする&ldquo;Smooth Scroll&rdquo;と呼ばれる JavaScript を使うとこれらの問題が解消されます。賛否両論ありますが、私はユーザービリティが向上すると考え、手がけるWebサイトでは基本的にこの&ldquo;Smooth Scroll&rdquo;を導入しています。</p>
<p>
	しかし、この&ldquo;Smooth Scroll&rdquo;（名称は様々ありますが、ここでは総括して&ldquo;Smooth Scroll&rdquo;とします）。多くの JavaScript が公開されていますが、よく検証しないとアクセシビリティを損なう場合がありますので注意が必要です。</p>
]]>
        <![CDATA[<p>
	それはキーボードで操作する場合です。<br />
	キーボードで操作する場合というのは、全盲など視覚障がいによりマウス操作が困難な方、上肢障がい等によりマウスを扱えない方、マウスが壊れてキーボードで操作しなきゃならない場合（もっとも、キーボードで操作する方法を知ってることが前提ですが）などが想定されます。</p>
<p>
	キーボードで操作するとき、[Tab]キーでリンクを辿り、[Enter]キーでリンク先にジャンプします。<br />
	それがページ内リンクで、現在表示しているページのとある位置にジャンプした場合、音声読み上げ環境では当然ジャンプ先から読み上げなければなりませんし、[Tab]キーを叩けばジャンプした位置の次にあるリンクをフォーカスしなければなりません。</p>
<p>
	ところが、リンク先にジャンプしたにもかかわらず、ジャンプ元から読み上げたり、[Tab]キーを叩くとジャンプ元に戻って、その次のリンクをフォーカスしてしまうものがあります。これではキーボード操作でWebを利用されている方は混乱してしまいますよね。<br />
	それに、せっかくページの先頭に共通ナビゲーションを読み飛ばす&ldquo;ブロックスキップ&rdquo;を設けても、全く意味がなくなってしまいます。</p>
<p>
	これが正しく動作するかどうか見分ける一つの目安として（全てがそうとも限りません）、ページ内リンクで飛んだ時点の URL を確認します。通常、ページ内リンクはアンカーを貼った位置にジャンプしますので、URL の末尾にはそのアンカー名（#***）が表示されます。しかしこれが表示されず、ジャンプ元と URL が変わらない場合は注意が必要です。もっとも、キーボードで操作してみるのが一目瞭然ですが。</p>
<p>
	ここ数年、Web の進化と共に様々な JavaScript が公開されていますが、見た目だけ（つまり、目で見てマウスで操作することが前提）のものが多いのも事実。加えて、HTML5 や CSS3 の普及とともに益々 JavaScript を利用する機会も多くなると思います。利用する際はリッチな見た目だけに捉われず、様々な環境で利用可能か、あるいは利用できなくとも閲覧することに弊害がないか、きちんと検証したいものです。</p>
]]>
    </content>
</entry>
<entry>
    <title>iPad, iPhone 向けに CSS を振り分け</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2011/07/24-2332.php" />
    <id>tag:www.will3in.jp,2011:/blog/ishiwa//15.2179</id>
    <published>2011-07-24T14:32:42Z</published>
    <updated>2011-08-16T10:42:45Z</updated>
    <summary> 	この度このWillさんいんサイトをリニューアルしましたが、iPad、iPho...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="Web制作" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ios" label="iOS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>
	この度このWillさんいんサイトをリニューアルしましたが、iPad、iPhone で表示した際に、2つの気になる不具合がありました。</p>
<p>
	1つは、右下に固定配置している「△このページの先頭へ」のリンクが、iPad、iPhone ではスクロールに合わせて上に移動してしまうこと。<br />
	これは、iOS が CSS の position:fixed に対応していないという仕様の問題でした。この秋にリリース予定の iOS5 で対応されるらしいですが、それまではこの問題が残ります。</p>
<p>
	2つ目は、メインコンテンツエリアの幅が狭くなり、トップページのイメージ画像の右側が切れてしまうこと。<br />
	今回はページの横幅を最大 980ピクセルで、ウィンドウ幅の 90% で変化するリキッドレイアウトで組んでいます。iPad、iPhone は擬似的に横幅 980ピクセル表示するのですが、ウィンドウ幅の 90% としているので、左右に 5% ずつ余白が発生し、その分コンテンツの横幅が小さくなるのでした。</p>
<p>
	このために、要素の固定をやめたり、横幅を変更するのは避けたいもの。そこで、iPad、iPhone 向けに CSS を追加し、これらを修正することにしました。</p>
]]>
        <![CDATA[<p>
	iPad、iPhone を判別して表示を変える方法として、メディアクエリを利用してデバイスの横幅を判別する方法、.htaccess でユーザーエージェントを判別する方法、JavaScript を使う方法などいくつかあります。</p>
<p>
	とりあえずデバイスの横幅を判別する方法では、ネットブックなどの解像度の低いパソコンにも適用されてしまいますので、これは却下。今回もサーバーサイドインクルードを使用するためにページを PHP で出力していますので、PHP でユーザーエージェントを判別し、iPad、iPhone 用の CSS を追加で読み込ませることにしました。</p>
<p>
	標準の CSS を読み込んだ後に、以下の記述を追加して iPad、iPhone 用の追加の CSS を読み込ませます。</p>
<pre>
<code>&lt;?php
$isiPhone = (bool) strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;],&#39;iPhone&#39;);
$isiPad = (bool) strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;],&#39;iPad&#39;);
	
if($isiPad){
	echo(
	&#39;&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/ipad.css&quot; type=&quot;text/css&quot; media=&quot;only screen&quot; /&gt;&#39;.&quot;\n&quot;
	);
}else if($isiPhone){
	echo(
	&#39;&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/iphone.css&quot; type=&quot;text/css&quot; media=&quot;only screen&quot; /&gt;&#39;.&quot;\n&quot;
	);
}
?&gt;</code></pre>
<p>
	そして、iPad、iPhone 用の CSS には、1つ目の問題の対策として「△このページの先頭へ」のリンクを position:absolute; にして、ページの右下に配置。2つ目の問題の解決として、メインコンテンツエリアとローカルナビゲーションを囲む要素の幅を 100% とし、左右の余白を無くして 980ピクセル丁度で表示させるようにしました。iPhone 用には他にいくつかの修正を加えています。</p>
<p>
	これで、iPad、iPhone でも違和感無く表示できるようになりました。</p>
<p>
	また、PHP で組み込んでいますので、パソコンでソースを表示した場合はこの部分は一切表示されないのもスッキリしていい感じです。ちなみに iPad、iPhone も通常はソースを見ることはできません。</p>
<p>
	本当は、iPhone や Android 端末などのスマートフォン向けには、専用のレイアウトを施したサイトを提供したいところですが、これはまた追々に。携帯サイトも復活させなければなりませんが、スマートフォン用は HTML をいじらなくても CSS だけである程度作れますので、携帯サイトより楽かも。</p>
<p>
	ただ、内容の充実が先決ですので、首を長くしてお待ちいただければ幸いです。</p>
<p>
	<ins>7月31日、PC での表示幅を100%に変更しましたので、2つ目の問題はなくなっています。</ins></p>
]]>
    </content>
</entry>
<entry>
    <title>MT5 のタイトルフィールドにラベルを表示する</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2011/04/18-1959.php" />
    <id>tag:www.will3in.jp,2011:/blog/ishiwa//15.1363</id>
    <published>2011-04-18T10:59:17Z</published>
    <updated>2011-07-20T11:50:14Z</updated>
    <summary>Movable Type 5 から、ブログ記事あるいはウェブページ作成／編集画面...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="MovableType" scheme="http://www.sixapart.com/ns/types#category" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>Movable Type 5 から、ブログ記事あるいはウェブページ作成／編集画面のタイトルフィールドにラベルが表示されなくなっています。</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.will3in.jp/blog/ishiwa/archives/images/2011/04/18/title_field.png" rel="lightbox[photo]"><img alt="MT5 のタイトルフィールド" src="http://www.will3in.jp/blog/ishiwa/assets_c/2011/04/title_field-thumb-500x83-833.png" width="500" height="83" class="photo-n" /></a></span></p>
<p>MT をカスタマイズして構築するとき、タイトルフィールドを"企業名"や"書籍名"といった別の用途として使うことがありますが、タイトルフィールドのラベルが表示されていなければ、これを書き替えることもできません。これまで、都度更新マニュアルに明記していましたが、やはり更新マニュアルだけではわかりにくいと思い、ラベルを表示する方法を探してみました。</p>
<p><a href="http://code.google.com/p/mtapp-jquery/">MTAppjQuery プラグイン</a>を利用する方法がありますがここまで高機能な必要は無く、他に見つからなかったので、管理画面のテンプレートファイルを書き替えることにしました。</p>
<p>MT をインストールしたディレクトリ以下の /tmpl/cms/edit_entry.tmpl をコピーし、/alt_tmpl/cms/ の下に置き、これの 1128 行目を以下のように編集します。</p>
<p>元の状態　： <code>label_class="no-header"</code></p>
<p>書き替え後： <code>label_class="top-label"</code></p>
<p>これで、タイトルフィールドに"タイトル"とラベルが表示され、<a href="http://labs.m-logic.jp/cat2/renamelabel/">RenameLabel</a> などのプラグインでこのラベルを変更して表示させることが可能になります。</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.will3in.jp/blog/ishiwa/archives/images/2011/04/18/title_field_b.png" rel="lightbox[photo]"><img alt="タイトルフィールドにラベルを表示" src="http://www.will3in.jp/blog/ishiwa/assets_c/2011/04/title_field_b-thumb-500x97-835.png" width="500" height="97" class="photo-n" /></a></span></p>]]>
    </content>
</entry>
<entry>
    <title>KetaiPost で携帯から MT に投稿</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2011/04/11-0150.php" />
    <id>tag:www.will3in.jp,2011:/blog/ishiwa//15.1362</id>
    <published>2011-04-10T16:50:59Z</published>
    <updated>2011-07-19T12:30:27Z</updated>
    <summary>Movable Type で構築するサイトで、携帯から投稿できるようにする必要が...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="MovableType" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="モブログ" label="モブログ" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>Movable Type で構築するサイトで、携帯から投稿できるようにする必要がある案件のとき、以前は mobile.uva.ne.jp（サービス終了?）、MTmail（サービス終了）、<a href="http://www.moblogkun.com/">モブログくん</a>といった外部サービスを利用していましたが、昨年 Web サーバを変更してからは、<a href="http://151e.jp/2010/08/mail2entry%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/">mail2entry.pl</a> という MT プラグインを使用していました。<br />
既に配布は終了しているようですが、これは Web サイトのドメインに独自の投稿用メールアドレスを設定し、このメールアドレスへの投稿をこのプラグインに転送する仕組みのもので、外部のサーバに投稿する必要がなく、画像のリサイズ、画像配置のテンプレート、カテゴリや投稿者の設定など、細かな設定が可能です。</p>
<p>今回、初めて MT5 でこのプラグインを使用しようとしたのですが、なぜか件名だけが文字化けするのです。再構築すると正常に表示されるのですが、先の外部サービスも含め、投稿を MT に Push するタイプのものはエントリーと同時の再構築がなされないのですね。</p>
<p>そこで、解決策を探してググってたら、偶然 <a href="https://github.com/take-yu/KetaiPost">KetaiPost</a> というプラグインを見つけました。<br />
MT5 用で mail2entry.pl 以上の機能を持ち、そして何よりうれしいのは、個人法人問わず無料で利用できるということ。外部サービスか有料（高額）のプラグインを使用するしかないのかと思っていたところ、"万年β（α？）テスト状態"（笑）ということですが、作者さんに感謝です。</p>
<p>この KetaiPost を導入するにあたり、テンプレートのカスタマイズなどをしましたので、その覚え書きです。</p>]]>
        <![CDATA[<p>まず、今まで利用してきたサービスやツールと違い、このプラグインは定期的にメールボックスにアクセスして携帯からの投稿を取得するタイプのものです。したがって、サーバで cron が利用できる必要があります。</p>
<p>MT をインストールしたディレクトリの /tools/run-periodic-tasks に実行権を与え、以下のように15分毎にタスクを実行するようにしました。（ run-periodic-tasks は、指定日投稿にも使用します。）</p>
<pre><code>0,15,30,45 * * * * cd /home/dozen/user_data/public_html/mt5; ./tools/run-periodic-tasks</code></pre>
<p>また、サーバに最低限 MIME-Tools と Mail::POP3Client がインストールされている必要があります。弊社サーバは Mail::POP3Client がインストールされていませんでしたので、MT のインストールディレクトリの extlib に Mail/POP3Client.pm を配置することで動作するようにしました。</p>
<p>次に各種の設定です。mail2entry.pl は直接設定ファイルを編集しなければなりませんでしたが、KeitaPost は MT の管理画面から各種設定が可能です。システムの設定で送信先メールアドレスそれに対応するブログ、送信元メールアドレスとそれに多応するユーザーを、各ブログのプラグイン設定でサムネイルのや使用するテンプレートの設定をします。</p>
<p>そして、投稿用のメールアドレスを用意し、携帯からテスト投稿。cron で設定した時刻に投稿が反映されました。さらに、投稿の取得と同時に再構築が行われますので、各ページへの反映も行われます。</p>
<p>ただ、MultiBlog による他ブログへの反映は、cron の実行間隔内に複数投稿した場合など、正しく行われない場合があるようです。このように連続して投稿する可能性がある場合は、反映元のブログでその部分のテンプレートを作り、php などでインクルードすることで解決できます。</p>
<p>また、PC のメールからの送信は、画像の添付が反映されませんでした。試したのは Mac の Mail.app ですが、そもそも PC メールから投稿するなら、MT で投稿するだろうと思ったので、他のメーラーは試していません。</p>
<p>さて、いろいろなパターンをテスト投稿してソースコードを確認したところ、以下のことが気になりました。</p>
<ul>
	<li>改行がそのまま反映されるので、段落分けされず、<code>&lt;br /&gt;&lt;br /&gt;</code> となる。</li>
	<li>どんなサイズの画像でもサムネイルとリンクが生成されるので、管理画面で設定したサムネイルのサイズより小さな画像が設定サイズに拡大表示され、元の小さな画像にリンクが設定される。</li>
</ul>
<p>そこで、以下のようなテンプレートを作りました。</p>
<pre><code>&lt;p&gt;&lt;$mt:EntryBody replace="&lt;br /&gt;&lt;br /&gt;","&lt;/p&gt;&lt;p&gt;"$&gt;&lt;/p&gt;
&nbsp;
&lt;mt:entryAssets type="image"&gt;
&lt;mt:SetVarBlock name="width"&gt;&lt;$mt:AssetProperty property="image_width"$&gt;&lt;/mt:SetVarBlock&gt;
&lt;mt:If name="width" gt="$thumbnail_width"&gt;
	&lt;p&gt;&lt;a href="&lt;$mt:AssetURL$&gt;" rel="lightbox"&gt;&lt;img src="&lt;$mt:AssetThumbnailURL square="$thumbnail_square" width="$thumbnail_width"$&gt;" alt="&lt;$mt:AssetLabel$&gt;" width="&lt;$mt:Var name="thumbnail_width"$&gt;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;mt:Else&gt;
	&lt;p&gt;&lt;img src="&lt;$mt:AssetURL$&gt;" alt="&lt;$mt:AssetLabel$&gt;" width="&lt;$mt:AssetProperty property="image_width"$&gt;" height="&lt;$mt:AssetProperty property="image_height"$&gt;" /&gt;&lt;/p&gt;
&lt;/mt:If&gt;
&lt;/mt:entryAssets&gt;</code></pre>
<p>まず、本文については replace グローバル変数を使って <code>&lt;br /&gt;&lt;br /&gt;</code> を <code>&lt;/p&gt;&lt;p&gt;</code> に置き換えます。</p>
<p>次に画像ですが、添付された画像毎に <code>&lt;$mt:AssetProperty property="image_width"$&gt;</code> で画像の幅を取得します。そして、添付した画像が設定したサムネイルのサイズより大きい場合は、サムネイルを生成して元画像へのリンク（上記のコードは、画像をオーバーレイ表示する lightbox を使用する記述を加えています）するようにし、設定サイズ以下の場合は添付した画像をそのまま表示します。</p>
<p>このように MT タグを使ったオリジナルのテンプレートが設定できて、さらに、システムやウェブサイトで同じテンプレートを使うことも、ブログ毎にテンプレートを使い分けることも可能です。</p>
<p>注意事項として、公開日時からファイル名を生成するようにしている場合、cron の実行時間内に複数投稿すると、公開日時が同じになるためすべて同じ記事にリンクされます。短時間に複数回更新する可能性がある場合は、ファイル名にエントリー ID を使うなどの工夫が必要になります。</p>
<p>それにしても無償でこれだけ高機能だと、要求されてなくても取り入れたくなります。（笑）</p>]]>
    </content>
</entry>
<entry>
    <title>jQuery でキーボードフォーカスに対応したドロップダウンメニュー</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2011/04/10-2329.php" />
    <id>tag:www.will3in.jp,2011:/blog/ishiwa//15.1361</id>
    <published>2011-04-10T14:29:05Z</published>
    <updated>2011-07-19T12:30:27Z</updated>
    <summary>ドロップダウンメニューは、ページ数が多い Web サイトなどでカテゴリ毎にナビゲ...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="Web制作" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="jquery" label="jQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ドロップダウンメニュー" label="ドロップダウンメニュー" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>ドロップダウンメニューは、ページ数が多い Web サイトなどでカテゴリ毎にナビゲーションをまとめてスッキリと見せることができ、サブメニューを開くことによって深い階層のページにダイレクトにアクセスすることができるなど、便利なナビゲーションの手段です。</p>
<p>CSS だけで実装する方法、JavaScript で実装する方法などいくつかの方法がありますが、その多くがマウスオーバーでサブメニューが開くもので、全盲の方、マウス操作が困難な方などマウスが使えない環境、つまりキーボードで操作される場合はサブメニューを開くことができません。</p>
<p>代替手段として、サブメニュー一覧ページを用意し、メインメニューにこのページへのリンクを設定するなどの配慮がなければ、キーボード操作ではサブメニューのページに辿り着くことが困難なばかりか、そのページの存在自体に気がつかない場合もあります。</p>
<p>そこで、jQuery でキーボード操作に対応したドロップダウンメニューを作ってみました。</p>]]>
        <![CDATA[<p>例として、階層が一つの単純なドロップダウンメニューの HTML は次のような感じです。</p>
<pre><code>&lt;div id="nav"&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;a href="#"&gt;メニュー1&lt;/a&gt;
			&lt;ul&gt;
				&lt;li&gt;&lt;a href="#"&gt;サブメニュー1−1&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;サブメニュー1−2&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;サブメニュー1−3&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;&lt;a href="#"&gt;メニュー2&lt;/a&gt;
			&lt;ul&gt;
				&lt;li&gt;&lt;a href="#"&gt;サブメニュー2−1&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;サブメニュー2−2&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;サブメニュー2−3&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
		&lt;/li&gt;
		  :
		  :
	&lt;/ul&gt;
&lt;/nav&gt;</code></pre>
<p>まず、CSS によるドロップダウンメニューの実装。メインメニューを横に並べるスタイルです。（装飾的な CSS の記述は省略しています。）</p>
<pre><code>#nav ul {
	list-style: none;
	margin: 0;
	padding: 0;
}
#nav ul li {
	float: left;
	width: 120px;
	position: relative;
}
#nav ul li ul {
	position: absolute;
	width: 0;
	height: 0;
	overflow: hidden;
}
#nav ul li:hover ul {
	left: 0;
	top: 100%;
	width: auto;
	height: auto;
}</code></pre>
<p>なお、IE6 は :hover 疑似クラスに対応していませんので、<a href="http://www.xs4all.nl/~peterned/csshover.html">csshover3.htc</a> を利用するなどの対策が必要です。<br />
csshover3.htc を使う場合は、IE6 だけに body 要素に次のように設定します。</p>
<pre><code>* html body {
	behavior: url("csshover3.htc");
}</code></pre>
<p>よく見かける CSS での実装方法は、サブメニューを <code>display: none</code> で非表示にしてありますが、この場合、キーボードではサブメニューを飛ばしてしまいます。</p>
<p>でも、上記のように幅と高さを 0 にして <code>overflow: hidden</code> した場合は、キーボードでもサブメニュー自体は開きませんが、そのリンクを辿ることはできます。<br />
つまり、音声だけで利用する場合はこれで問題ありません。<br />
しかし、画面を見て、キーボードで操作する場合はキーボードのフォーカスを見失ってしまいます。</p>
<p>そこで、jQuery を使ってキーボード操作でもサブメニューが開くようにしてみます。</p>
<pre><code>$(function(){
	$("#nav ul li a").focus(function(){
		$(this).next("ul").addClass("show");
	});
	$("#nav ul li a").blur(function(){
		$(this).next("ul").removeClass("show");
	});
	$("#nav ul li ul a").focus(function(){
		$(this).closest("ul").addClass("show");
	});
	$("#nav ul li ul a").blur(function(){
		$(this).closest("ul").removeClass("show");
	});
});</code></pre>
<p>メインメニューの a 要素にフォーカスされたとき、次にある兄弟要素の ul 要素、つまりサブメニューリストに <code>class="show"</code> を追加します。<br />
そして、サブメニューの a 要素にフォーカスされたときは、その親要素にあたる ul 要素、つまりこの場合もサブメニューリストに <code>class="show"</code> を追加します。</p>
<p>そして、先の CSS の最後の記述にこのセレクタを追加します。</p>
<pre><code>#nav ul li:hover ul,
#nav ul li ul.show {
	left: 0;
	top: 100%;
	width: auto;
	height: auto;
}</code></pre>
<p>これで、マウス操作のときは CSS で、キーボード操作のときは jQuery でサブメニューが開くようになります。jQuery に纏めてしまうことも考えられますが、JavaScript を OFF にしている場合は一切効かなくなってしまいますので、CSS でマウス操作を保障しています。</p>]]>
    </content>
</entry>
<entry>
    <title>jQuery でリンクの種類アイコンを表示</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2011/04/10-1842.php" />
    <id>tag:www.will3in.jp,2011:/blog/ishiwa//15.1360</id>
    <published>2011-04-10T09:42:53Z</published>
    <updated>2011-07-19T12:30:27Z</updated>
    <summary>外部のサイトへのリンク、PDF などのファイルへのリンク、そして新しいウィンドウ...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="Web制作" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="jquery" label="jQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>外部のサイトへのリンク、PDF などのファイルへのリンク、そして新しいウィンドウで開くなどに、アイコンを表示させるとき、Movable Type ではテンプレートで条件分岐などを使って表示してました。ただ、予めテンプレートで指定できる箇所に限るので、本文内に挿入されたリンクには対応できません。</p>
<p>あと、以下のように CSS でリンクの href 属性の値から、before 疑似要素、after 疑似要素で表示させる方法も使っていましたが、これも before 疑似要素などに未対応の IE 6/7 では表示させることができません。</p>
<p>今回 CMS を使わない、Dreamweaver と Contribute を使用するサイトの構築案件があり、jQuery でリンクアイコンを表示する方法を考えてみました。</p>]]>
        <![CDATA[<p>1. 外部サイトへのリンクにアイコンを表示する</p>
<p>自サイトのドメインを www.example.jp としたとき、href 属性の値が www.example.jp を含まない場合に、a 要素の先頭に外部サイトであることを示すアイコン external.gif を追加します。</p>
<pre><code>$(function(){
	$("a[href!='www.example.jp']").prepend("&lt;img src='/images/external.gif' alt='外部サイト' width='16' height='16' class='external' /&gt;");
});</code></pre>
<p>2. リンク先が PDF などのファイルの場合にアイコンを表示する</p>
<p>href 属性の値が .pdf で終わる場合、a 要素の先頭に PDF ファイルであることを示すアイコン pdf_icon.gif を追加します。同様に、Word ファイル、Excel ファイルもアイコンを表示します。</p>
<pre><code>$(function(){
	$("a[href$='.pdf']").prepend("&lt;img src='/images/pdf_icon.gif' alt='PDFファイル' width='16' height='16' class='fileIcon' /&gt;");
	$("a[href$='.doc']").prepend("&lt;img src='/images/doc_icon.gif' alt='Wordファイル' width='16' height='16' class='fileIcon' /&gt;");
	$("a[href$='.docx']").prepend("&lt;img src='/images/doc_icon.gif' alt='Wordファイル' width='16' height='16' class='fileIcon' /&gt;");
	$("a[href$='.xls']").prepend("&lt;img src='/images/xls_icon.gif' alt='Excelファイル' width='16' height='16' class='fileIcon' /&gt;");
	$("a[href$='.xlsx']").prepend("&lt;img src='/images/xls_icon.gif' alt='Excelファイル' width='16' height='16' class='fileIcon' /&gt;");
});</code></pre>
<p>3. 新しいウィンドウで開くリンクにアイコンを表示する</p>
<p>a 要素に target="_blank" が設定されている場合に、a 要素の最後に新しいウィンドウで開くことを示すアイコンを表示します。</p>
<pre><code>$(function(){
	$("a[target='_blank']").append("&lt;img src='/images/new_win.gif' alt='新しいウィンドウで開きます' width='16' height='16' class='newWin' /&gt;");
});</code></pre>
<p>そして、これらの表示位置を CSS で調整します。</p>
<pre><code>img.external, img.fileIcon {
	vertical-align: middle;
	margin-right: 5px;
}
img.newWin {
	vertical-align: middle;
	margin-left: 5px;
}</code></pre>
<p>同様の方法は様々なブログなどで既出で、新しいウィンドウで開く target="_blank" を jQuery で追加することもできます。</p>
<p>JavaScript を無効にしている場合、当然これらは表示されませんので、"リンクを新しいウィンドウで開く場合は、事前にそれがわかるようにする"というアクセシビリティ要素を考慮すると、 target="_blank" も jQurey で追加して、JavaScript が無効な場合は新しいウィンドウで開かないというふうにした方がいいかもしれませんね。</p>]]>
    </content>
</entry>
<entry>
    <title>気持ち</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2011/04/08-0329.php" />
    <id>tag:www.will3in.jp,2011:/blog/ishiwa//15.1359</id>
    <published>2011-04-07T18:29:34Z</published>
    <updated>2011-07-19T12:30:27Z</updated>
    <summary>今年も既に4分の1以上が、疾風の如く過ぎ去りました。1月後半から年度末に向けて様...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>今年も既に4分の1以上が、疾風の如く過ぎ去りました。1月後半から年度末に向けて様々な案件が動きだし、日々かなりテンパってました。</p>
<p>この間、午前様はもちろん、休日の仕事もしばしば。そして、それに輪をかけて色々なことがスムーズに行かず、ちょっとしたことに腹が立ち、日々イライラが溜まり、食欲もなくなり、どんどん悪い方向へ落ちていきました。</p>
<p>そんな状態から脱することができたのは、実は3月11日の大震災がきっかけだったりします。<br />
島根県松江市のビルの8階でも揺れを感じるほどの大地震だったわけですが、その後のメディアによる報道や twitter などのネット上で流れる様々な声や情報を目にし、仕事に悩んでいる自分がとてもちっぽけな存在に思えたのです。</p>
<p>そして、今生きていることに感謝し、与えられてる仕事、日々の生活を前向きに、今まで以上に頑張ろうという思いを抱くようになりました。<br />
そう思うようになってから、徐々に仕事がスムーズに回り出し、いくつかの案件が片付いたこともあって、現在は決して平穏ではないものの、意欲的に仕事ができています。</p>
<p>気持ちって大切ですね。本業以外でも地区の役員を複数やってて、その内のひとつは仕方なく受けた農地・水の保全関係の会長職でいろいろ大変なのですが、これらも前向きにこなしていこうと思います。</p>
<p>たまたま昨日、購読している RSS から目にした記事で、「<a href="http://www.lifehacker.jp/2011/04/110309_unicorn-man.html">仕事のやる気が出ない時は、自分がワクワクすることを想像してみる</a>」という内容のものがありました。<br />
「脳にちょっとでもご褒美を想像させられれば、仕事のやる気が変わってくる」とのこと。そのためには、「計画を立てる時は最終的なゴールを決めるだけでなく、どのような気持ちになるかも想像する」ということなんだと。<br />
たしかに、気が乗らないことも、それを達成したときの気持ちを想像したら前向きに取り組める気がします。</p>
<p>そんなこんなでこのブログ、今年に入って初めての更新です。いくつか技術ネタが溜まってるので、覚え書きとして近いうちに書こうと思います。</p>]]>
    </content>
</entry>
<entry>
    <title>ファイルやメモの一元管理</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2010/12/22-0023.php" />
    <id>tag:www.will3in.jp,2010:/blog/ishiwa//15.1358</id>
    <published>2010-12-21T15:23:35Z</published>
    <updated>2011-07-19T12:30:27Z</updated>
    <summary>現在私は、会社の iMac、自宅使用兼持ち歩きの MacBook Pro、iPh...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
    <category term="dropbox" label="Dropbox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="evernote" label="Evernote" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mobileme" label="Mobile Me" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>現在私は、会社の iMac、自宅使用兼持ち歩きの MacBook Pro、iPhone、そしてたまに Windows を使用しています。このように複数の端末を使用する場合、どの端末からでも目的のファイルにアクセスしたり、メモやウェブページなどのクリップにアクセスできる環境が便利です。</p>
<p>そこで私の場合、PC 内にはファイルをほとんど保存していません。オンラインストレージ上に保存することによって、どの端末からも常に最新の状態のファイルを閲覧したり編集したりすることができます。（ただし、重要なファイルは会社のファイルサーバに保存して、社外からは VPN アクセスしています。）</p>
<p>様々なオンラインストレージサービスがありますが、以前から私が利用しているのは、<a href="http://www.apple.com/jp/mobileme/">Mobile Me</a> と <a href="http://www.dropbox.com/">Dropbox</a> です。</p>
<p>Mobile Me は Apple から提供されているサービスで、年間 9,800円の費用が発生しますが、20GB のオンラインストレージのほか、連絡先（アドレス帳）やカレンダー、Safari のブックマークを複数の Mac、Windows、iPhone や iPad で自動的に同期したり、万が一なくした iPhone や　iPad　を探し出したり、リモートでロックやデータの消去が行えます。</p>
<p>一方、Dropbox は、詳しくは <a href="http://www.will3in.jp/blog/ishiwa/archives/2008/11/06-1825.php">2年前のブログ記事</a>に書いていますが、まるで PC の中に保存されているファイルを扱っているかのような感覚で、複数の端末で常に最新の状態を扱うことができる優れもの。2GB までは無料で利用できます。</p>
<p>メモに関しては、今や大人気の <a href="http://www.evernote.com/">Evernote</a> を愛用しています。テキスト、写真、音声、ウェブページ、PDF など、あらゆるものを簡単に保存することができます。保存したメモには複数のタグを付けたり、URL や位置情報を関連付けしたりして、整理したり見つけやすくすることも可能です。<br />
そして何より便利なのが、画像の文字認識機能。例えば、名刺をカメラで撮影して Evernote に放り込んでおくだけで、会社名や氏名などによる名刺画像の検索がかなりの精度で可能になります。</p>
<p>Dropbox も Evernote も様々な Windows、Mac ソフト、iPhone や iPad、Android アプリが連携しています。<br />
Mobile Me も含めて、私にとっては必須アイテム。クラウドにデータがあると、Mac や　Windows をリカバリする時も復旧が簡単におこなえます。</p>
<p>十数年前、シリアルケーブルで2台のPC を接続し、Windows アクセサリの"ブリーフケース"を使ってファイルを同期していたのがはるか昔のことのように思えます。</p>]]>
    </content>
</entry>
<entry>
    <title>Firefox とアドオンで快適に！</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2010/12/21-0117.php" />
    <id>tag:www.will3in.jp,2010:/blog/ishiwa//15.1357</id>
    <published>2010-12-20T16:17:11Z</published>
    <updated>2011-07-19T12:30:27Z</updated>
    <summary>私が普段利用しているブラウザは、Firefox と Safari です。ウェブサ...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="ブラウザ" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="firefox" label="Firefox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="アドオン" label="アドオン" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>私が普段利用しているブラウザは、Firefox と Safari です。ウェブサイトを制作するとき、検証するときは主に Firefox、普通にネットサーフィン（死後？）するときは主に Safari を利用します。<br />
あ、制作したウェブサイトを検証するときは最終的に Firefox、Safari、Chrome、Opera の各最新版と、Internet Explorer の 6、7、8、9 beta も使います。</p>
<p>Safari は Mac の標準ブラウザなので何気に普段使っているのですが、やはり標準ブラウザってことで iTunes や Mobile Me などとの連携がしやすいのかなと思います。</p>
<p>一方、Firefox は Internet Explorer に次いで2番目のシェアを有するブラウザで、数多くのアドオン（拡張機能）が公開されており、これを導入することによっていろいろ便利に使うことができます。ただ、やはり起動が遅いのがネックです。次期 Firefox 4 で改善されるのかな？</p>
<p>ちなみに、Google Chrome も数々のエクステンション（拡張機能）があり、徐々にそのシェアを拡大しています。（参考： <a href="http://marketshare.hitslink.com/browser-market-share.aspx?qprid=0">Browser Market Share</a>）</p>
<p>ここで、現在私が Firefox で主に利用しているアドオンをまとめてみたいと思います。</p>]]>
        <![CDATA[<p>まずは、開発系。</p>
<ul>
<li><a href="http://lab.tubonotubo.jp/tools/webdeveloper/"><strong>Web Developer</strong></a><br />
ウェブを制作する際に、CSS や画像、文書構造などの様々な検証をしたり、HTML や CSS をその場で編集してその結果を確認したりすることができます。あと、フォームに入力したパスワードを表示する機能が何気に便利です。</li>
<li><a href="https://addons.mozilla.jp/firefox/details/249"><strong>Html Validator</strong></a><br />
表示しているウェブページの HTML を検証し、リアルタイムにエラーと警告を表示します。また、ソースを表示することでエラーや警告の箇所を教えてくれます。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/addon/1843/"><strong>Firebug</strong></a><br />
表示しているウェブページの CSS、HTML、及び JavaScript をリアルタイムに編集、デバッグすることができます。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/addon/271/"><strong>ColorZilla</strong></a><br />
表示しているウェブページ、というよりブラウザ上の任意の点の色を拾うことができます。16進表記など、設定した書式でコピーすることができ、そのまま Photoshop やテキストエディタに貼り付けることができます。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/addon/2166/"><strong>Domain Details</strong></a><br />
表示しているウェブサイトのサーバの種類や IP アドレス、国旗、Whois 情報へのリンクなどを表示します。サーバを移管する際に、hosts ファイルを書き替えて事前に動作確認をするのですが、IP アドレスが表示されることによって、正しく移管先のサーバに接続されているのかを確認するのに役立っています。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/addon/1146/"><strong>Screengrab!</strong></a><br />
スクロールしないと表示しきれないウェブページを一発でキャプチャすることができます。マニュアルを作ったり、サムネイルを作るときに役立ちます。</li>
<li><a href="http://firemobilesimulator.org/"><strong>FireMobileSimulator</strong></a><br />
主要３キャリア（docomo, au, SoftBank）の携帯端末ブラウザをシミュレートして表示してくれます。各キャリアの絵文字にも対応しており、携帯サイトを作るときに重宝してます。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/addon/3955/"><strong>Tabinta</strong> (Tab in Textarea)</a><br />
フォームのテキストエリアで、Tab キャラクタの入力を可能にします。通常、テキストエリアで Tab キーを押すと、次のコントロールにフォーカスが移動しますが、このアドオンで Tab によるインデントが可能になりますので、Movable Type のテンプレート編集などに役立ちます。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/addon/11097/"><strong>Open With</strong></a><br />
表示しているウェブページを、Internet Explorer（Windowsのみ）、Safari、Chrome、Opera など、パソコンにインストールされている他のブラウザを起動して開きます。</li>
<li><a href="http://forums.mozillazine.org/viewtopic.php?t=72994"><strong>keyconfig</strong></a><br />
様々なアドオンを入れると、キーボードショートカットが重複してしまうことがありますが、このアドオンによって、キーボードショートカットを自分好みにカスタマイズすることができます。</li>
</ul>
<p>続いて、一般の方にも便利なもの。と言っても、こっち系はあまり入れてないのですが。</p>
<ul>
<li><a href="http://www.xmarks.com/"><strong>Xmarks</strong></a><br />
複数のパソコン（Windows、Mac、Linux）の Firefox、Safari、Chrome、Internet Explorer 間で、ブックマーク（お気に入り）を同期します。（当然、他のブラウザにも Xmarks をインストールする必要あり。）<br />
先般、サービスの継続が困難として、2011年1月10日に終了すると発表されましたが、存続を希望するユーザの声が大きく、LastPass 社により、有償サービスと無償サービスを組み合わせて継続されることになりました。</li>
<li><a href="http://mozilla.jp/firefox/sync/"><strong>Firefox Sync</strong></a><br />
複数のパソコンで、Firefox のブックマーク、履歴、パスワード、開いているタブを同期します。iPhone アプリの Firefox Home、iLunascape（ブックマークのみ）とも同期することができます。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/addon/189/"><strong>SearchPreview</strong></a><br />
Google と Yahoo! の検索結果に、各ウェブサイト（トップページ）のサムネイルを表示します。</li>
<li><a href="https://addons.mozilla.jp/firefox/details/240"><strong>Context Search</strong></a><br />
テキストを選択して、右クリックメニューから様々な検索エンジンで、選択したテキストを検索することができます。</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/8381/"><strong>Evernote Web Clipper</strong></a><br />
表示しているウェブページを、ワンクリックで <a href="http://www.evernote.com/">Evernote</a> に保存します。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/addon/1419/"><strong>IE Tab</strong></a><br />
これは Windows をメインで使用していた時に使っていたアドオンです。Firefox のウィンドウのまま、任意のウェブページを Internet Explorer のレンダリングエンジンで開くことができます。Internet Explorer にしか対応していないページを、Internet Explorer を起動することなく表示することができます。</li>
<li><a href="https://addons.mozilla.org/ja/firefox/personas/"><strong>Personas</strong></a><br />
Firefox 3.6 から実装された機能で、公開されている 60,000 以上のデザインから Firefox の外観を変えることができます。</li>
</ul>
<p>他にも、何百もの便利なアドオンが公開されています。Mozilla Japan 公式のアドオンは <a href="https://addons.mozilla.jp/firefox/">Firefox アドオン</a> で好みのアドオンを見つけることができます。</p>
<p>みなさん、Firefox または Google Chrome （要は Internet Explorer 以外(笑)）で快適なインターネットライフを！</p>
<p>ところで、以前からセキュリティ対策と称してメーラーは Outlook Express を嫌い、Becky! などの Microsoft 製以外を使うのに、ブラウザは普通に Internet Explorer を使ってる人、多いですね。<br />
もっとも今は、Internet Explorer もそれなりにセキュリティが向上し、ウィルス等もブラウザに依存しないのであまり関係ないと思いますが。</p>]]>
    </content>
</entry>
<entry>
    <title>Yahoo! JAPAN が IE6 のサポートを終了</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2010/11/10-2335.php" />
    <id>tag:www.will3in.jp,2010:/blog/ishiwa//15.1356</id>
    <published>2010-11-10T14:35:40Z</published>
    <updated>2011-07-19T12:30:26Z</updated>
    <summary>Internet Explorer 6 で Yahoo! JAPAN のトップペ...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="PC全般" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="ie6" label="IE6" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yahoo" label="Yahoo!" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>Internet Explorer 6 で <a href="http://www.yahoo.co.jp/">Yahoo! JAPAN</a> のトップページを開くと、</p>
<blockquote><p>お客様のブラウザはInternet Explorer6です。12月中旬より、ブラウザの「戻る」機能を使ってYahoo! JAPANトップページに戻ると、古い状態が表示される場合がございますので、最新ブラウザのダウンロードをおすすめします。</p></blockquote>
<p>というメッセージが表示されるようになりました。<br />
（昼間は「<q>正しく動作しなくなる場合がございますので</q>」と表示されてたようですが。）</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.will3in.jp/blog/ishiwa/archives/images/2010/11/11/yahoo_ie6.png" rel="lightbox[photo]"><img alt="Yahoo! JAPAN トップページ" src="http://www.will3in.jp/blog/ishiwa/assets_c/2010/11/yahoo_ie6-thumb-300x118-774.png" width="300" height="118" class="photo-c" /></a></span></p>
<p>既に Google などが IE6 のサポート終了を宣言しているほか、アメリカでは3月に <a href="http://www.itmedia.co.jp/news/articles/1003/08/news030.html">IE6 の葬儀が行われる</a>など、世界中で IE6 撲滅運動が広まっていますが、日本最大手の Yahoo! JAPAN がサポートを終了することで、最新版へのアップデートが加速することを期待しています。<br />
特に、今までセキュリティアップデートなどをせず（というより、それ自体がわからない）、初期の Windows XP をそのまま使用している人たちが、このメッセージを見て、何らかのアクションを起こすきっかけになればいいのですが。</p>
<p>IE6 は（私に言わせれば IE7 も）表示上の様々な問題があり、日々のコーディング作業で、その対策にかなり無駄な工数を費やしています。既に <a href="http://www.beautyoftheweb.com/">IE9 のベータ版</a>がリリースされている現在、IE6 排除の動きが増す一方で、Microsoft が Windows XP のサポート終了まで IE6 をサポートすると言っていますので、少なくともあと3年半は無視できないのですが、そのシェアが少なくなれば、多少見え方が違っても情報が伝われば問題ないと割り切ることもできます。</p>
<p>それにしても IE はサポート長すぎ。 IE6 や IE7 がなくなり、Firefox などの他のブラウザとようやく足並みが揃ってきた IE9 が普及するのはいつになることやら。</p>]]>
    </content>
</entry>
<entry>
    <title>リストを横に並べてそれぞれを改行しないようにすると WebKit では全体が改行されない</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2010/09/19-1837.php" />
    <id>tag:www.will3in.jp,2010:/blog/ishiwa//15.1355</id>
    <published>2010-09-19T09:37:18Z</published>
    <updated>2011-07-19T12:30:26Z</updated>
    <summary>リスト要素を横に並べる方法として、float: left; を使う方法と、dis...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="Web制作" scheme="http://www.sixapart.com/ns/types#category" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>リスト要素を横に並べる方法として、<code>float: left;</code> を使う方法と、<code>display: inline;</code> を使う方法がありますが、それぞれに癖があります。</p>
<p><code>float: left;</code> を使うとリスト全体が左配置になりますので、リスト全体を中央揃えにしたい場合には使えません。</p>
<p>一方、<code>display: inline;</code> を使う場合、各リストの間におよそ半角スペース1個分の間隔が空くため、各リストの間に縦線を入れようとする場合など、左右の余白を調節する必要があるのですが、これが厄介なことに Internet Explorer 7 以前では間隔が空く側が逆なのです。<br />
この間隔は HTML で一つ一つのリスト要素が改行されているために発生するもの。そこで、それぞれのリスト要素の間にコメントタグを入れることによって改行を再現しないようにしています。</p>
<p>先日制作した案件で、リンク付きのリスト全体を中央揃えにし、その先頭と最後、各リストの間に縦線を入れ、さらにリスト全体が複数行になるとき、一つのリスト項目の途中で改行させないというデザインを実現する必要がありました。</p>]]>
        <![CDATA[<p>そこで、コメントタグで HTML 上の改行を無効にして <code>display: inline;</code> を使う方法を取り、以下のように記述しました。</p>
<p>HTML</p>
<pre><code>&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト1&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト2&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト3&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト4&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト5&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト6&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト7&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト8&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト9&lt;/a&gt;&lt;/li&gt;&lt;!--
	--&lt;li&gt;&lt;a href=&quot;#&quot;&gt;リスト10&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p>CSS（余白やリストマークなどのブラウザのデフォルトスタイルはリセットし、ul 要素の親要素で幅が設定されている状態）</p>
<pre><code>ul {
	text-align: center;
}
ul li {
	display: inline;
	padding: 0 5px;
	border-right: 1px solid #999;
	border-left: 1px solid #999;
	margin-right: -1px;
}
ul li a {
	white-space: nowrap;
}</code></pre>
<p>これで、予定どおりのスタイルが実現できる筈。しかし、Firefox, Opera, Internet Explorer (8, 7, 6) は問題ないのですが、Safari と Google Chrome、つまりレンダリングエンジンに WebKit を使用したブラウザで、リスト全体が改行されず、親要素の幅を突き破って横一直線に表示されます。<br />
どうも、WebKit では HTML で一列に書かれた（この場合、コメントタグで一列に見せかけている）要素の中に <code>white-space: nowrap;</code> を指定すると、その一列全体に影響してしまうようです。</p>
<p>どうしよかと悩んだ末、一旦は WebKit に適用される CSS Hack を使い、Safari と Google Chrome では中央揃えをあきらめ、左揃えで表示するようにしました。</p>
<pre><code>@media screen and (-webkit-min-device-pixel-ratio:0) {
	ul li {
	    display: block;
	    float: left;
	}
}</code></pre>
<p>しかし、この CSS の記述は Valid ではありません。もっとも Internet Explorer に代表される CSS Hack が必要だったり、CSS 3 の先行実装による記述が可能な現在、その手法が正当なものなら、<em>CSS に関しては</em> Valid に拘る必要はないと思っているのですが、Safari と Google Chrome で中央揃えに出来ないのはやっぱり許せない。(笑)</p>
<p>という訳で、調べているうちに、<code>display: inline-block;</code> を使うと思いどおりのスタイルが実現できるということが分かりました。ただし、Internet Explorer 7 以前では <code>display: inline-block;</code> を認識しないので、<code>display: inline;</code> を適用させます。最終的には以下の通り。</p>
<pre><code>ul {
	text-align: center;
}
ul li {
	display: inline-block;
	padding: 0 5px;
	border-right: 1px solid #999;
	border-left: 1px solid #999;
	margin-right: -1px;
}
ul li a {
	white-space: nowrap;
}</code></pre>
<p>Internet Explorer 7 以前に適用させる CSS。</p>
<pre><code>ul li {
	display: inline;
}</code></pre>
<p>因みに、Internet Explorer 用の記述は、メインの CSS ファイルには CSS Hack を混在させず IE 専用の CSS ファイルに書き、IE の条件分岐コメントを使って読み込むようにしています。</p>]]>
    </content>
</entry>
<entry>
    <title>Movable Type でエントリーリストに異なるブログのエントリーを表示する</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2010/08/16-0052.php" />
    <id>tag:www.will3in.jp,2010:/blog/ishiwa//15.1354</id>
    <published>2010-08-15T15:52:50Z</published>
    <updated>2011-10-18T07:39:12Z</updated>
    <summary>ちょっと意味不明なサブジェクトですが、どういうことかというと、今回 Movabl...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="MovableType" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>ちょっと意味不明なサブジェクトですが、どういうことかというと、今回 Movable Type で構築している案件で次のような仕様を実装することになりました。</p>
<ul>
	<li>多数の加盟企業がそれぞれのユーザー名でログインしてそれぞれにお知らせを投稿する。</li>
	<li>加盟企業はそれぞれに自身の紹介ページが作られる。（紹介ページを作らない企業もあり）</li>
	<li>加盟企業の登録・編集は事務局が行う。（但し、事務局は Movable Type の管理者ではない）</li>
</ul>
<p>制作を受ける際はできると考えていて、いざ構築を始めるとつまずくことがあるもので、今回の場合、Movable Type のユーザーにカスタムフィールドで企業情報を入力するフィールドを作って企業をユーザーとして登録し、企業の紹介ページはユーザー別アーカイブで生成っていうのが正当な方法なのでしょうが、これだと登録企業自身が情報を編集することが出来てしまいます。また、ユーザーの追加は Movable Type のシステム権限でないとできません。今回ユーザーを追加する事務局にはシステム権限を与えないので、別の方法を模索することになります。そこで、</p>
<ul>
	<li>あらかじめ想定される数のユーザーを user001，user002，user003，・・・というユーザー名で作っておく。</li>
	<li>加盟企業を登録するブログ（blog_id=&quot;2&quot;）を作り、登録の際にタグ欄にユーザー名を入力するようにする。</li>
	<li>加盟企業はそれぞれのユーザー名でログインし、お知らせのブログ（blog_id=&quot;3&quot;）に情報を掲載する。</li>
	<li>お知らせを投稿したユーザー名と加盟企業のタグを関連づけ、お知らせ一覧に企業名と業種を、企業紹介ページにはその企業が投稿したお知らせを表示する。</li>
</ul>
<p>という仕組みを考えました。しかし、テンプレートを書いていて問題が二つ発生しました。</p>]]>
        <![CDATA[<p>まず、お知らせのブログのエントリー一覧の中で、別のブログである企業情報のエントリーを表示する、つまりトップページとなるウェブサイトのメイン・インデックスに表示する場合、<code>&lt;mt:Entries blog_ids=&quot;3&quot;&gt;</code> の内側で <code>&lt;mt:Entries blog_ids=&quot;2&quot;&gt;</code> を利用することになるのですが、<code>&lt;mt:MultiBlog&gt;</code> の入れ子が出来ないのと同じことなのでしょう、<code>&lt;mt:Entries&gt;</code> の入れ子の場合テンプレートエラーにはならないのですが、内側の <code>&lt;mt:Entries&gt;</code> は表示されませんでした。</p>
<p>そこで考えた方法が、まず <code>&lt;$mt:BlogEntryCount blog_ids=&quot;2&quot;$&gt;</code> でリストアップするお知らせ件数を取得しておき、<code>&lt;mt:Entries blog_ids=&quot;2&quot; offset=&quot;n&quot; lastn=&quot;1&quot;&gt;</code> で1件ずつお知らせを表示。<br />
そのユーザー名から加盟企業一覧のブログで同じ値のタグを持つ企業名を取得して、<code>&lt;mt:Entries blog_ids=&quot;3&quot; lastn=&quot;1&quot; tag=&quot;(ユーザー名)&quot;&gt;</code> で企業名と業種を表示。<br />
これを、<code>offset</code> を1ずつ足しながら、取得したお知らせ件数分繰り返すという方法です。</p>
<p>具体的には以下のようになります。</p>
<pre><code><span style="color:#069;">&lt;mt:Ignore&gt;&lt;!-- (お知らせ件数を取得) --&gt;&lt;/mt:Ignore&gt;</span>
&lt;mt:SetVarBlock name=&quot;count&quot;&gt;&lt;$mt:BlogEntryCount blog_ids=&quot;2&quot;$&gt;&lt;/mt:SetVarBlock&gt;
<span style="color:#069;">&lt;mt:Ignore&gt;&lt;!-- (トップページの場合は最大10件) --&gt;&lt;/mt:Ignore&gt;</span>
&lt;mt:If name=&quot;body_id&quot; eq=&quot;home&quot;&gt;
	&lt;mt:If name=&quot;count&quot; gt=&quot;10&quot;&gt;&lt;mt:SetVar name=&quot;count&quot; value=&quot;10&quot;&gt;&lt;/mt:If&gt;
&lt;/mt:If&gt;<br />
<span style="color:#069;">&lt;mt:Ignore&gt;&lt;!-- (offset の初期値を 0 に設定) --&gt;&lt;/mt:Ignore&gt;</span>
&lt;mt:SetVar name=&quot;offset&quot; value=&quot;0&quot;&gt;<br />
<span style="color:#069;">&lt;mt:Ignore&gt;&lt;!-- (取得した件数分繰り返し) --&gt;&lt;/mt:Ignore&gt;</span>
&lt;mt:For var=&quot;i&quot; from=&quot;1&quot; to=&quot;$count&quot;&gt;<br />
&lt;mt:If name=&quot;__first__&quot;&gt;&lt;dl&gt;&lt;/mt:If&gt;<br />
<span style="color:#069;">&lt;mt:Ignore&gt;&lt;!-- (お知らせを表示) --&gt;&lt;/mt:Ignore&gt;</span>
&lt;mt:Entries blog_ids=&quot;2&quot; offset=&quot;$offset&quot; lastn=&quot;1&quot;&gt;
&lt;dt&gt;&lt;$mt:EntryDate format=&quot;%x&quot;$&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&quot;&lt;$mt:EntryPermalink archive_type=&quot;Individual&quot;$&gt;&quot;&gt;&lt;$mt:EntryTitle encode_html=&quot;1&quot;$&gt;&lt;/a&gt;&lt;/dd&gt;<br />
<span style="color:#069;">&lt;mt:Ignore&gt;&lt;!-- (ユーザー名を取得) --&gt;&lt;/mt:Ignore&gt;</span>
&lt;mt:SetVarBlock name=&quot;author&quot;&gt;&lt;$mt:EntryAuthorUsername$&gt;&lt;/mt:SetVarBlock&gt;
&lt;/mt:Entries&gt;<br />
<span style="color:#069;">&lt;mt:Ignore&gt;&lt;!-- (ユーザー名に一致するタグの企業情報を表示) --&gt;&lt;/mt:Ignore&gt;</span>
&lt;mt:Entries blog_ids=&quot;4&quot; lastn=&quot;1&quot; tag=&quot;$author&quot;&gt;
&lt;dd&gt;&lt;a href=&quot;&lt;$mt:EntryPermalink$&gt;&quot;&gt;&lt;$mt:EntryTitle encode_html=&quot;1&quot;$&gt;&lt;/a&gt;
	&lt;span class=&quot;divide&quot;&gt;|&lt;/span&gt; &lt;$mt:EntryCategory$&gt;&lt;/dd&gt;
&lt;/mt:Entries&gt;<br />
&lt;mt:If name=&quot;__last__&gt;&lt;/dl&gt;&lt;/mt:If&gt;<br />
<span style="color:#069;">&lt;mt:Ignore&gt;&lt;!-- (offset に 1 を加算) --&gt;&lt;/mt:Ignore&gt;</span>
&lt;mt:SetVar name=&quot;offset&quot; op=&quot;++&quot;&gt;<br />
&lt;/mt:For&gt;</code></pre>
<p>実際は業種ごとに異なるアイコンを表示するために業種カテゴリのフォルダ名を取得して class 属性に代入したり、お知らせタイトルや企業名からのリンクがパーマリンクではなく外部サイトである場合があったり、業種もメインカテゴリだけでなく複数のカテゴリが設定され、そのうえその他の業種には別フィールドの具体名を表示したり、さらにお知らせ一覧ページでは PageBute プラグインを使ってページ分割したりと、もっともっと複雑です。</p>
<p>次に、企業紹介ページにそれぞれの企業が投稿したお知らせの一覧を表示する方法。<br />
上記の逆で、加盟企業を登録したブログのタグ名と一致するお知らせのブログのユーザー名を取得して、そのユーザーが投稿したお知らせ一覧を表示すればいいわけですが、この場合、企業紹介ページはブログ記事アーカイブです。つまり、MultiBlog を使ってもお知らせの更新時に再構築されません。</p>
<p>すぐに思いついたのが、サーバの cron を使って定期的に再構築を実行させる方法。しかし、今回のクライアント指定のサーバでは cron が使えませんでした。<br />
そこで、お知らせのブログにユーザー別ブログ記事リストを作り、これを企業紹介ページに php インクルードで読み込むことにしました。</p>
<p>今回の場合、ユーザー別ブログ記事リストのパスを <code>author/&lt;$mt:AuthorName$&gt;.php</code> とします。<br />
そして、企業紹介ページでこれを読み込む記述は以下のようになります。</p>
<pre><code>&lt;mt:SetVarBlock name=&quot;author&quot;&gt;&lt;mt:EntryTags&gt;&lt;$mt:TagName$&gt;&lt;/mt:EntryTags&gt;&lt;/mt:SetVarBlock&gt;<br />
&lt;mt:MultiBlog blog_ids=&quot;2&quot;&gt;
&lt;?php include(&quot;&lt;$MTBlogSitePath$&gt;author/&lt;$mt:Var name=&quot;author&quot;$&gt;.php&quot;); ?&gt;
&lt;/mt:MultiBlog&gt;</code></pre>
<p>特にたくさんのコンテンツがある案件ではなく、楽に構築出来る筈だったのですが、思いがけず頭を使うことになってしまいました。</p>
<p><ins>（8月１８日追記）<br />
ユーザー名の入力を必須にするために、タグ欄ではなく、カスタムフィールドに置き換えました。<br />
この場合、上記のソースコードの一部が以下のように変わります。</ins></p>
<p><ins>ユーザー名に一致するタグではなくカスタムフィールドの値の企業情報を表示するところ</ins></p>
<pre><code>&lt;mt:Entries blog_ids=&quot;4&quot; lastn=&quot;1&quot; <span style="color:#c00">field:(customfieldbasename)</span>=&quot;$author&quot;&gt;</code></pre>
<p><ins>企業紹介ページでユーザー別ブログ記事リストを読み込む記述</ins></p>
<pre><code>&lt;mt:SetVarBlock name=&quot;author&quot;&gt;<span style="color:#c00">&lt;mt:(CutomFieldName)&gt;</span>&lt;/mt:SetVarBlock&gt;</code></pre>]]>
    </content>
</entry>
<entry>
    <title>Movable Type で Goolge Maps を ThickBox で表示する際のあれこれ</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2010/08/15-2142.php" />
    <id>tag:www.will3in.jp,2010:/blog/ishiwa//15.1353</id>
    <published>2010-08-15T12:42:07Z</published>
    <updated>2012-01-28T07:14:31Z</updated>
    <summary>Movable Type で住所や緯度経度を Google Maps のに変換し...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
        <category term="MovableType" scheme="http://www.sixapart.com/ns/types#category" />
        <category term="Web制作" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="googlemaps" label="Google Maps" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="thickbox" label="ThickBox" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>Movable Type で住所や緯度経度を Google Maps のに変換して表示することのできる <a href="http://code.google.com/p/ogawa/wiki/Mapper_Plugin">Mapper_Plugin</a>。3年前にあるサイトを制作する際に利用したことがありますが、今回また同様の案件があり利用しました。</p>
<p>3年前（MT3.35）と今回（MT5.02）と構築環境に違いはあるものの考え方は同じで、通常のブログ記事アーカイブとは別に、カスタムフィールドに入力した住所情報から Mapper_Plugin で Google Maps を表示するブログ記事アーカイブを作っておき、個別アーカイブページの地図表示のリンクからこの Google Maps のアーカイブページを表示させるという方法です。</p>
<p>前回はサブウィンドウで Google Maps を表示させましたが、今回は写真をオーバーレイ表示する Lightbox の jQuery 版、<a href="http://leandrovieira.com/projects/jquery/lightbox/">jQuery lightbox</a> を利用していることから、Google Maps も同じようにオーバーレイ表示したいと考え、画像だけでなく HTML もオーバーレイ表示できる <a href="http://jquery.com/demo/thickbox/">ThickBox</a> を利用することにしました。</p>
<p>しかし、Google Maps の場合はすんなり行かず、いくつかの Tips がありましたので、その覚え書きです。</p>]]>
        <![CDATA[<p>まず、Google Maps の表示以前に、複数画像をグループ化して表示させるための rel 属性を付けると拡大画像が表示されません。rel 属性を付けなければ表示されるのですが、これではいちいち拡大画像を閉じなければ別の画像を拡大表示することができなくなってしまいます。</p>
<p>試しに ThickBox のデモサイトで使われている jQuery 1.1.3.1 をダウンロードして入れ替えてみると正常に表示されます。ググってみると、既に ThickBox の開発が終了していて、今回使用している jQuery 1.4.2 や 1.3.x に対応してないことがわかりました。同時にその解決策も紹介されていて、thickbox.js の79行目</p>
<pre><code>TB_TempArray = $(&quot;a[rel=&quot;+@imageGroup+&quot;]&quot;).get();</code></pre>
<p>の @ を取り、</p>
<pre><code>TB_TempArray = $(&quot;a[rel=&quot;+imageGroup+&quot;]&quot;).get();</code></pre>
<p>と書き替えれば rel 属性を付けてグループ化することができました。</p>
<p>参考サイト：「<a href="http://officesoya.net/weblog/2009/02/20/thickbox/">class="thickbox" に rel をつけると画像が表示されない」(Development memo)</a></p>
<p>次に、これも Google Maps 表示以前の問題ですが、Mac 版 Firefox で表示すると拡大表示の周りがブラックアウトされません。でもこれは単にダウンロードすべきファイルが足りなかっただけ。<a href="http://jquery.com/demo/thickbox/">ThickBox</a> のサイトの Download の項には thickBox.js もしくは thickbox-compressed.js、ThickBox.css、そして loadingAnimation.gif しかないのですが、How to Implement ThickBox の項を見ると、<q>As of version 3.1 you will also need to update the path to the macFFBgHack.png in the thickbox.css file.</q> と書かれています。英語は読めないのですが(笑)、macFFBgHack.png をダウンロードして thickbox.css と同じ場所に置いたら OK でした。</p>
<p>そしていよいよ、ThickBox のウィンドウ内に Google Maps を表示してみます。ThickBox の iFramed Content として表示させるので、Google Maps 用のブログ記事アーカイブのパスを <code>map/&lt;$mt:EntryID pad=&quot;1&quot;$&gt;.html</code> とすると、</p>
<pre><code>&lt;a href=&quot;map/&lt;$mt:EntryID pad=&quot;1&quot;$&gt;.html?width=750&amp;amp;height=570&amp;amp;KeepThis=true&amp;amp;TB_iframe=true&quot; class=&quot;thickbox&quot;&gt;地図を表示&lt;/a&gt;</code></pre>
<p>という具合になります。しかし、いざ表示してみると、ThickBox の領域内で表示した Google Maps の中心が大きくずれています。さらに Internet Explore 8 では地図が一部グレーに塗りつぶされた状態になっています。Thickbox で Google Maps は無理なのかなと思いつつ、これもググってみることに。</p>
<p>まず見つけたのが「<a href="http://blog.webbingstudio.com/2010/01/movabletype_googlemaps_thickbox.html">MovableTypeでGoogleMapsを住所からthickboxで表示する</a>」という記事。まさにいまやろうとしていることです。あらかじめページの下部でインラインフレームで Google Maps を読み込んで <code>style=&quot;display: none;&quot;</code> で非表示にしておき、iFramed Content ではなく Inline Content として ThickBox のウィンドウの中にインラインフレームごと表示させるという方法のようです。<br />
しかし、Firefox や Safari ではちゃんと Google Maps の中心が表示されるのですが、Internet Explorer では相変わらず中心がずれたままです。</p>
<p>さらにググってみて、特に Movable Type に関しての記事ではないのですが「<a href="http://www.kazumanishihata.com/technology/392.html">Google MapをThickBox上に表示する方法 - とあるWEBクリエイターのblog</a>」という記事が大変参考になりました。</p>
<p>ThickBox での表示方法は最初に設定した iFramed Content 方式に戻してページ下部での Google Maps の読み込みはやめ、ここに書かれているコードを参考に Mapper_Plugin の 131行目からの Google Maps 表示部分のソースコードを以下のように書き替えました。</p>
<pre><code>my $preamble_tmpl = &lt;&lt;'EOT';
&lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.google.com/maps?&lt;TMPL_IF NAME=&quot;language&quot;&gt;hl=&lt;TMPL_VAR NAME=&quot;language&quot;&gt;&amp;amp;&lt;/TMPL_IF&gt;file=api&amp;amp;v=2&amp;amp;key=&lt;TMPL_VAR NAME=&quot;google_maps_key&quot;&gt;&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
//&lt;![CDATA[
function attachOnLoad(func) {
    window.attachEvent ?
	window.attachEvent('onload',func) : 
	window.addEventListener('load',func,false);
}
function attachBeforeUnload(func) {
    window.attachEvent ?
	window.attachEvent('onbeforeunload',func) : 
	window.addEventListener('beforeunload',func,false);
}
function generateGMap(mapid, address, lat, lng, zoom, maptype) {
<span style="color: #c00;"><strong>	var check_flame_set = function(){
		if(!parent.document.getElementById(&quot;TB_window&quot;)){
			clearInterval(timerID);
			show_map();
		}else if(parent.document.getElementById(&quot;TB_window&quot;).style.display==&quot;block&quot;){
			clearInterval(timerID);
			show_map();
		}
	}
	var timerID = setInterval(check_flame_set, 500);
	var show_map = function(){</strong></span>
	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById(mapid));
		map.addControl(new GLargeMapControl3D());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		map.addControl(new GOverviewMapControl(new GSize(180,150)));
		var center = new GLatLng(lat, lng);
		if (typeof maptype == 'string') maptype = eval(maptype);
		map.setCenter(center, zoom, maptype);
		var marker = new GMarker(center, G_DEFAULT_ICON);
		map.addOverlay(marker);
		var html = '&lt;div style=&quot;width:12em;font-size:small&quot;&gt;'+address+'&lt;/div&gt;';
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html);
		});
	    } else {
		document.getElementById(mapid).innerHTML = '&lt;p&gt;The Google Map that should be displayed on this page is not compatible with your browser. Sorry.&lt;/p&gt;';
		}
<span style="color: #c00;"><strong>	}</strong></span>
}
attachBeforeUnload(function(){GUnload()});
//]]&gt;
&lt;/script&gt;
EOT</code></pre>
<p>これで当初の思惑どおり、ThickBox で Google Maps を表示させることが出来ました。</p>]]>
    </content>
</entry>
<entry>
    <title>「納期」</title>
    <link rel="alternate" type="text/html" href="http://www.will3in.jp/blog/ishiwa/archives/2010/07/11-0053.php" />
    <id>tag:www.will3in.jp,2010:/blog/ishiwa//15.1352</id>
    <published>2010-07-10T15:53:09Z</published>
    <updated>2011-07-19T12:30:26Z</updated>
    <summary>私がWillさんいんで仕事をさせていただく前は、某大手企業で17年間ひとすじに納...</summary>
    <author>
        <name>いしわ</name>
        <uri>http://www.will3in.jp/blog/ishiwa/</uri>
    </author>
    <content type="html" xml:lang="ja" xml:base="http://www.will3in.jp/blog/ishiwa/">
        <![CDATA[<p>私がWillさんいんで仕事をさせていただく前は、某大手企業で17年間ひとすじに納期管理をしていました。それも、原子力発電に始まり、戦闘機、ミサイル、ロケット、産業用ガスタービンといった、納期的にも品質的にも厳しい分野の部品材料を担当していました。</p>
<p>納期には「要求納期」と「回答納期」、そして「引受納期」と「約束納期」がありました。<br />
「要求納期」は文字通り、お客様からこの日に欲しいと見積／発注とともに要求される納期。それに対して、見積回答時点でこれぐらい掛かりますと答える納期が「回答納期」です。</p>
<p>そして実際に受注した際に、ほとんど自分の頭の中でその製品の生産スケジュールを組み立て、保険として多少のサバを読んで答える納期が「引受納期」になります。</p>
<p>その後、現場や協力会社に頭を下げながら行程を進める一方で、営業や問屋さんを通してお客様と折衝を重ねて、最終的に折り合いが付く納期が「約束納期」です。当然それは発送する日ではなく、製品がお客様に到着する日になります。</p>
<p>＃実際、品質が厳しい製品は最終検査で不良となるケースも多く、「約束納期」はおろか「引受納期」さえも守れないこともしばしばなのです。それ故に対現場、対顧客との信頼関係が重要。厳しい納期と品質管理によって、過去にはノイローゼになった人も何人か居たとか...。</p>
<p>当時は寝ても覚めても「納期」「納期」「納期」。日にちばかり追っかけているのであっという間の17年間でした。</p>
<p>それに対して今の仕事（業界）は「納期」っていう言葉さえ忘れてしまうほど、ちょっと異常なくらい「納期」に対してルーズだと感じています。</p>
<p>そもそも、お客様からの素材提供といったアクションが遅れるのだからどうしようもありません。<br />
以前の仕事では、上流行程が遅れると下流行程で挽回しなければならなかった（下流行程の職場だったのでほとんどそのパターン）のですが、今の仕事は、その上流行程がお客様である場合が多いので、あえて挽回する必要もないのです。<br />
＃長年の以前の仕事の経験上、挽回しなきゃっていう思いに駆られるのですが。</p>
<p>でも、「素材の提供が遅れたから納期がずれます」なんて、以前の仕事ではありえないことでした。</p>
<p>もっとも、ウェブサイトの場合は、原子力部品などの産業製品と違って、日にちが決まっているイベントの告知や募集サイト等でない限り、公開が遅れたからといって、特に企業や民間に大きな影響があるわけでもないですからね。</p>
<p>転職した当時は「納期」からの解放気分に浸っていた時期もあったのですが、最近「納期」に対する意識のギャップがなんだか悶々とするのです。</p>]]>
    </content>
</entry>
</feed>

