<?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>Sat, 07 Nov 2009 04:02:31 +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>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Vimで"gf"をスラッシュで始まる相対URLに対応させる</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/dPslthbTgtg/support-slash-started-relative-url-in-vim-gf.html</link>
      <description>Vimではファイル名らしき箇所でgfを押すと、見つけることができればそのファイルを開いてくれる。この機能はとても便利なのだが、HTMLファイルにスラッシュで始まる相対URLでCSSファイルやJavaScriptファイルのURLを書いた場合は、そこでgfを押してもうまく開くことができない。これを解決するためにvimでHTMLとかを編集するときに絶対パスのファイルを開くで公開されているプラグインをちょっと使っていたのだけど、どうやらpathオプションとincludeexprオプションを設定することでも対応できるようだ。Vimすげー。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/support-slash-started-relative-url-in-vim-gf.html</guid>
      <pubDate>Sat, 07 Nov 2009 04:02:30 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://www.vim.org/">Vim</a>ではファイル名らしき箇所で<kbd>gf</kbd>を押すと、見つけることができればそのファイルを開いてくれる。この機能はとても便利なのだが、HTMLファイルにスラッシュで始まる相対URLでCSSファイルやJavaScriptファイルのURLを書いた場合は、そこで<kbd>gf</kbd>を押してもうまく開くことができない。これを解決するために<a href="http://webtech-walker.com/archive/2009/10/02230656.html">vimでHTMLとかを編集するときに絶対パスのファイルを開く</a>で公開されているプラグインをちょっと使っていたのだけど、どうやら<code>path</code>オプションと<code>includeexpr</code>オプションを設定することでも対応できるようだ。Vimすげー。</p>

<p>とりあえず設定から。</p>

<pre>
autocmd FileType html :setlocal path+=W:/www/test,W:/www/hail2u.net,W:/www/blosxom.info
autocmd FileType html :setlocal includeexpr=substitute(v:fname,&#39;^\\/&#39;,&#39;&#39;,&#39;&#39;)
</pre>

<p><code>W:/www/test</code>等のパスはカンマ区切りで自分の環境に合わせて必要なだけカンマで区切って書く。追加するパスはサイトのトップページのあるディレクトリ(フォルダ)のパス。ややこしく言うならウェブサイトのドキュメント・ルートに対応するローカル(またはリモート)のファイルシステム上のパス。</p>

<hr>

<p>デフォルトでは以下のように書くと<code>gf</code>で開くことができない。</p>

<pre>
&lt;script type=&quot;text/javascript&quot; src=&quot;<em>/scripts/twitter/speech-bubble.js</em>&quot;&gt;&lt;/script&gt;
</pre>

<p>ファイルシステム上のルートとドキュメント・ルートが一致しないため<em>/scripts/twitter/speech-bubble.js</em>の上で<kbd>gf</kbd>を押しても「ファイルがありません」と怒られるだけ。<code>:help gf</code>によると<kbd>gf</kbd>は以下のようにしてファイルを探しているようだ。</p>

<ol>
<li><code>isfname</code>オプションに従ってカーソルの前後からファイル名を抜き出す</li>
<li><code>path</code>オプションに従ってファイルを探す</li>
<li>見つからなかったら<code>suffixesadd</code>オプションに従って接尾語を付けファイルを探す</li>
<li>見つからなかったら<code>includeexpr</code>オプションに従ってファイル名を変更しファイルを探す</li>
</ol>

<p>ポイントになるのは2と4で、この二つのオプションをうまく設定してやると開くことができるようになる。まず<code>path</code>にドキュメント・ルートに対応するファイルシステム上のパスを追加してやり、ドキュメント・ルートからの相対パスをなんとなく解釈できそうな感じに準備する。このままではまだスラッシュ始まりに対応できないので、今度は<code>includeexpr</code>で頭のスラッシュを削除してやる。というわけで上記のような設定になる。after/html.vimとかの使い方をいまだにちゃんと覚えていないので<code>autocmd</code>ばっか使ってる……。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/support-slash-started-relative-url-in-vim-gf.html</feedburner:origLink></item>
    <item>
      <title>Pure CSSな吹き出し</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/4GK08JEjeO0/pure-css-speech-bubble.html</link>
      <description>Twitterで「CSSで吹き出し作るのブクマし忘れててどこにあったか忘れた……」とかつぶやいたらe_luckさんがImage-free CSS Tooltip Pointers - A Use for Polygonal CSS?を探してきてくれた。このエントリでは枠線をつけるために入れ子になっていたりちょっとわかりづらかったので、ものすごく単純化して解説してみようとかなんとか。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Web Design</category>
      <guid isPermaLink="false">http://hail2u.net/blog/webdesign/pure-css-speech-bubble.html</guid>
      <pubDate>Wed, 04 Nov 2009 00:46:12 +0900</pubDate>
      <content:encoded><![CDATA[
<p class="image_fr"><img src="http://hail2u.net/blog/images/pure-css-speech-bubble.png" alt="Pure CSSな吹き出し" width="360" height="102"></p>

<p>Twitterで「CSSで吹き出し作るのブクマし忘れててどこにあったか忘れた……」とかつぶやいたら<a href="http://www.lucky-bag.com/">e_luck</a>さんが<a href="http://www.filamentgroup.com/lab/image_free_css_tooltip_pointers_a_use_for_polygonal_css/">Image-free CSS Tooltip Pointers - A Use for Polygonal CSS?</a>を探してきてくれた。このエントリでは枠線をつけるために入れ子になっていたりちょっとわかりづらかったので、ものすごく単純化して解説してみようとかなんとか。</p>

<ul>
<li>Pure CSSな吹き出しのサンプル: <a href="http://hail2u.net/pub/test/119.html">Speech Bubbles</a></li>
</ul>

<p>とりあえず、吹き出しの尻尾を左下に出すもの(サンプル内では4つめのサンプル)を例にして説明していく。HTMLコードは以下のようなもので、<code>bubble</code>というクラス名を振った<code>div</code>要素がコンテナ、<code>body</code>というクラス名を振った<code>p</code>要素が吹き出しのベース、<code>tail</code>というクラス名を振った空の<code>div</code>要素が尻尾になる。</p>

<pre>
&lt;div class=&quot;<em>bubble</em>&quot;&gt;
  &lt;p class=&quot;<em>body</em>&quot;&gt;Cras ultricies ultricies justo a blandit.
  Quisque a tristique urna.
  Nam lobortis, metus a posuere ornare, arcu lacus sodales justo, non auctor felis nunc non nisi.
  Vestibulum risus dolor, ornare id lobortis pretium, rhoncus ac augue.&lt;/p&gt;
  &lt;div class=&quot;<em>tail</em>&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>

<p>そして基本になるCSSコードは以下のようなものになる。</p>

<pre>
.bubble {
  position: relative;
  width: 360px;
}

.bubble .body {
  color: #ffffff;
  background-color: #66aa11;
}

.bubble .tail {
  border-top: 18px solid #66aa11;
  border-right: 24px solid transparent; 
  position: absolute;
  bottom: -18px;
  left: 36px;
  width: 0; 
  height: 0; 
}
</pre>

<p>まずコンテナである<code>.bubble</code>の<code>position</code>プロパティで<code>relative</code>を指定する。これにより尻尾になる子要素<code>.tail</code>を<code>body</code>要素ではなくコンテナである<code>.bubble</code>を基準にして絶対配置できるようになる。<code>.body</code>では吹き出しの前景色と背景色を指定する。ここでは前景色を<code>#ffffff</code>、背景色を<code>#66aa11</code>にした。そして<code>.tail</code>へのスタイル指定で尻尾を作成する。</p>

<p>尻尾の形と色は<code>border</code>プロパティで決める。高さと色は<code>border-top</code>プロパティで調節でき、尻尾の三角の傾斜は<code>border-right-size</code>プロパティで調節できる。<code>border-right-color</code>プロパティで<code>transparent</code>を指定することによって、本来は四角になってしまうところを三角に削ってやるという話なので、<code>border-right-size</code>プロパティを増やすと傾斜はゆるくなり、逆に減らすと傾斜がきつくなる。</p>

<p>位置は<code>position</code>プロパティで<code>absolute</code>を指定した上で、<code>bottom</code>プロパティと<code>left</code>プロパティで決める。コンテナが<code>relative</code>なので、<code>left: 36px;</code>だと<em>コンテナの左端から36px右の位置</em>になる。同じように<code>bottom: -18px;</code>だと<em>コンテナの下端から18px下の位置</em>になるので、コンテナの左下に飛び出た形できれいに配置することができる。<code>bottom</code>プロパティに指定する負の数値は、尻尾の高さ分、つまり<code>border-top-size</code>プロパティの値、を負の数値にしたもの。合わせて<code>width</code>プロパティと<code>height</code>プロパティに<code>0</code>を指定しておけば尻尾の位置がずれることはないだろう。</p>

<p>これで左下に尻尾を出す吹き出しは作成できる。他の位置に尻尾を出す場合も<code>border-top</code>プロパティや<code>top</code>プロパティ・<code>right</code>プロパティなども適切に利用してやるだけで可能で、HTMLコードを変更する必要はない。例えば中央上に尻尾を出す場合は以下のようなコードになる。</p>

<pre>
.bubble .tail {
  margin-left: -12px;
  border-right: 12px solid transparent; 
  border-bottom: 18px solid #66aa11;
  border-left: 12px solid transparent; 
  position: absolute;
  top: -18px;
  left: 50%;
  width: 0; 
  height: 0; 
}
</pre>

<p>上向きに三角を作る場合は<code>border-bottom</code>プロパティで高さと色を指定する。中央に配置する場合は<code>border-right</code>プロパティと<code>border-left</code>プロパティを指定することによって二等辺三角形を作成することができるので、それを利用した方がバランスが良いだろう。左右の位置はとりあえず<code>50%</code>で真ん中に寄せて、<code>margin-left</code>で負の値を指定することによって<code>border-left-size</code>プロパティの値分左に戻してやるのが手っ取り早い。</p>

<p>ここまでが理解できたなら、その他の位置に尻尾を配置する方法はサンプルのソースを参照すれば大体わかると思う。</p>

<p>最後になったが、サンプルページの最後に載っているように<code>:after</code>(<code>:before</code>)擬似要素を利用すれば、空の<code>div</code>要素を用意しないでも尻尾を作成することができる。</p>

<pre>
.bubble .body<em>:after</em> {
  <em>content: &quot;&quot;;</em>
  border-top: 18px solid #66aa11;
  border-right: 24px solid transparent; 
  position: absolute;
  bottom: -18px;
  left: 36px;
  width: 0; 
  height: 0; 
}
</pre>

<p><code>content</code>プロパティに空の値を指定するだけで、特に難しいことはない。Firefox 3やSafari 4、Opera 9、Internet Explorer 8なら問題なく動く。</p>

<hr>

<p>この吹き出し作成テクニックを利用して、ヘッダのTwitterのアイコンにカーソルを合わせると最新のつぶやきが吹き出しでポップアップするようにした。<code>rgba()</code>カワイイ(関係ない)。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/webdesign/pure-css-speech-bubble.html</feedburner:origLink></item>
    <item>
      <title>Vimのstatuslineを最適化する</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/GUH7BOYvhks/optimize-vim-statusline.html</link>
      <description>FuzzyFinderのbufferモードやmrufileモードの補完メニューでパスの真ん中が省略されているのがわかりやすかったので、statuslineにも導入してよりわかりやすくしようという試み。インストール済みのGreasemonkeyスクリプトをちょっと編集する時など、ものすごく長いパスのファイルを編集する時のみ便利。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/optimize-vim-statusline.html</guid>
      <pubDate>Mon, 02 Nov 2009 09:49:50 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://www.vim.org/scripts/script.php?script_id=1984">FuzzyFinder</a>のbufferモードやmrufileモードの補完メニューでパスの真ん中が省略されているのがわかりやすかったので、<code>statusline</code>にも導入してよりわかりやすくしようという試み。インストール済みのGreasemonkeyスクリプトをちょっと編集する時など、ものすごく長いパスのファイルを編集する時のみ便利。</p>

<p>Vimのデフォルトの<code>statusline</code>は以下のようなもの。</p>

<p class="image"><img src="http://hail2u.net/blog/images/optimize-vim-statusline-default.png" alt="デフォルトのstatuslineのスクリーンショット" width="868" height="30"></p>

<p>これにファイルの種類や文字コード・改行コードなどあると便利な情報を追加した上で、ファイル名を先頭に持ってきて、残りのパスを<code>%&lt;</code>を利用して省略させるようにすると、</p>

<p class="image"><img src="http://hail2u.net/blog/images/optimize-vim-statusline-customized.png" alt="ビルトインの省略機能を利用したカスタマイズ済みのstatuslineのスクリーンショット" width="868" height="30"></p>

<p>こんな感じになる。この<code>statusline</code>のコードは、</p>

<pre>
set statusline=%{expand(&#39;%:p:t&#39;)}\ %&lt;\(%{expand(&#39;%:p:h&#39;)}\)%=\ %m%r%y%w%{&#39;[&#39;.(&amp;fenc!=&#39;&#39;?&amp;fenc:&amp;enc).&#39;][&#39;.&amp;ff.&#39;]&#39;}[%3l,%3c]
</pre>

<p>というもので、しばらくこれを使っていた。悪くはないが、パスの先頭を省略するような書き方なのでドライブレターが見えなくなってしまいWindowsだとちょっとアレ。これをベースにFuzzyFinderから長いパスの中間を省略する関数をパクって最適化すると、</p>

<p class="image"><img src="http://hail2u.net/blog/images/optimize-vim-statusline-optimized.png" alt="最適化されたstatuslineのスクリーンショット" width="868" height="30"></p>

<p>こうなる。ドライブレターも見えるし、ファイルのあるフォルダ名も大体見えるのでわかりやすい！</p>

<pre>
set statusline=%{expand(&#39;%:p:t&#39;)}\ %&lt;\(<em>%{SnipMid(expand(&#39;%:p:h&#39;),80-len(expand(&#39;%:p:t&#39;)),&#39;...&#39;)}</em>\)%=\ %m%r%y%w%{&#39;[&#39;.(&amp;fenc!=&#39;&#39;?&amp;fenc:&amp;enc).&#39;][&#39;.&amp;ff.&#39;]&#39;}[%3l,%3c]

function! SnipMid(str, len, mask)
  if a:len &gt;= len(a:str)
    return a:str
  elseif a:len &lt;= len(a:mask)
    return a:mask
  endif

  let len_head = (a:len - len(a:mask)) / 2
  let len_tail = a:len - len(a:mask) - len_head

  return (len_head &gt; 0 ? a:str[: len_head - 1] : &#39;&#39;) . a:mask . (len_tail &gt; 0 ? a:str[-len_tail :] : &#39;&#39;)
endfunction
</pre>

<p><code>SnipMid()</code>はFuzzyFinderからコピペしただけ(<a href="http://bitbucket.org/ns9tks/vim-fuzzyfinder/src/tip/autoload/fuf.vim#cl-505">autoload/fuf.vimの505行目</a>あたりにある)。切り詰める長さは<code>SnipMid()</code>の第二引数で指定する。ここでは、</p>

<pre>
80-len(expand(&quot;%:p:h&quot;))
</pre>

<p>と80からファイル名を引いた数で切り詰めているが、ターミナルの横幅や<code>columns</code>にあわせて要調節。<code>set columns=120</code>な環境だとこれくらいが丁度良かった。頑張れば環境に合わせてフレキシブルに切り詰める長さを調節できそうだけど面倒なので……。</p>

<p><code>titlestring</code>に使っても良い。</p>

<pre>
set titlestring=%{expand(&#39;%:p:t&#39;)}%(\ %m%r%w%)\ %&lt;\(%{SnipMid(expand(&#39;%:p:h&#39;),80-len(expand(&#39;%:p:t&#39;)),&#39;...&#39;)}\)\ -\ Vim
</pre>

<hr>

<p>Vimはどうにかしようと思うと大抵はどうにかできて幸せ……。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/optimize-vim-statusline.html</feedburner:origLink></item>
    <item>
      <title>Web開発周りのVimの設定</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/cIpZoTbfyAE/vim-settings-for-web-development.html</link>
      <description>HTML/CSS/JavaScriptを書くために行ったVimの設定やインストールしたスクリプト等をざっとまとめてみた。「VimでWeb開発を100倍効率的にする方法」といったような生産性を上げるための設定の類ではない。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/vim-settings-for-web-development.html</guid>
      <pubDate>Sat, 31 Oct 2009 10:58:36 +0900</pubDate>
      <content:encoded><![CDATA[
<p>HTML/CSS/JavaScriptを書くために行ったVimの設定やインストールしたスクリプト等をざっとまとめてみた。「VimでWeb開発を100倍効率的にする方法」といったような生産性を上げるための設定の類ではない。</p>

<h2>HTMLファイルを<code>:make</code>で文法チェック</h2>

<p>tidy.vimが用意されているので、<a href="http://tidy.sourceforge.net/">HTML Tidy</a>をインストールし、.vimrcに以下のように書くだけで良い。</p>

<pre>
autocmd FileType html :compiler tidy
autocmd FileType html :setlocal makeprg=tidy\ -raw\ -quiet\ -errors\ --gnu-emacs\ yes\ \&quot;%\&quot;
</pre>

<p>tidy.vimの<code>makeprg</code>では日本語が化けるので<code>-raw</code>を追加する。</p>

<h2>HTMLファイルのインデントをやり直す</h2>

<pre>
<kbd>gg=G</kbd>
</pre>

<p>ノーマルモードでは<kbd>gg</kbd>でファイルの先頭に移動して<kbd>=G</kbd>でファイル全体をインデントし直すことができる。選択範囲のみをインデントし直す場合は、適当にビジュアルモードで選択した状態で<kbd>=</kbd>を押すだけ。1000行とかあるHTMLファイルだと結構時間がかかる。デフォルトではJavaScriptファイルでやると残念な結果に……。</p>

<h2>HTMLファイルをブラウザで開く(Windows)</h2>

<p>FirefoxやSafari、Chromeは普通にインストールするとApp Pathsに登録されるので、</p>

<pre>
:! start chrome.exe %
:! start firefox.exe %
:! start IEXPLORE.EXE %
:! start Safari.exe %
</pre>

<p>でブラウザで開くことができる。<code>! start</code>と間に半角スペースがあることに注意。</p>

<p>OperaのインストーラはApp Pathsに登録しないので、</p>

<pre>
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\opera.exe]
@=&quot;C:\\Program Files\\Opera\\opera.exe&quot;
&quot;Path&quot;=&quot;C:\\Program Files\\Opera&quot;
</pre>

<p>といったレジストリファイルをインポートして登録してやると<code>:! start opera.exe %</code>で開くことができるようになる。</p>

<h2>選択範囲を文字参照に変換</h2>

<p>以下のPerlスクリプトをパスの通った場所に置いておく。</p>

<pre>
#!/usr/bin/perl

use strict;
use warnings;

use HTML::Entities;

print encode_entities(join(&#39;&#39;, &lt;STDIN&gt;), &#39;&amp;&lt;&gt;&quot;\&#39;&#39;);
</pre>

<p>その上でコマンドを作成。</p>

<pre>
command! -range EncodeEntities :&#39;&lt;,&#39;&gt;!perl -S encode-entities.pl
</pre>

<h2>W3CDTFで日付と時刻の挿入</h2>

<pre>
command! InsertDateTime :execute &quot;normal! i&quot;.strftime(&quot;%Y-%m-%dT%H:%M:%S+09:00&quot;)
</pre>

<p>必要な人は少ないだろうけど。</p>

<h2>CSSファイルを<code>:make</code>で文法チェック</h2>

<p><a href="http://www.vim.org/scripts/script.php?script_id=1577">css.vim</a>をダウンロードしてインストールする。</p>

<pre>
autocmd FileType css :compiler css
</pre>

<p>同梱のPerlスクリプト(validate_css)はパスの通ったディレクトリにコピーする必要がある。</p>

<h2>JavaScriptファイルを<code>:make</code>で文法チェック</h2>

<p><a href="http://www.javascriptlint.com/">JavaScript Lint</a>をインストールし、javascriptlint.vimとして以下のファイルを<em>$HOME/.vim/compiler</em> (Windowsでは<em>$HOME/vimfiles/compiler</em>)以下に作成する。</p>

<pre>
if exists(&quot;current_compiler&quot;)
  finish
endif

let current_compiler = &quot;javascriptlint&quot;

if exists(&quot;:CompilerSet&quot;) != 2
  command -nargs=* CompilerSet setlocal &lt;args&gt;
endif

let s:cpo_save = &amp;cpo
set cpo-=C

CompilerSet makeprg=jsl\ -nologo\ -nofilelisting\ -nosummary\ -nocontext\ -process\ %

CompilerSet errorformat=%f(%l):\ %m

let &amp;cpo = s:cpo_save
unlet s:cpo_save
</pre>

<p>そして.vimrcに以下のように書く。</p>

<pre>
autocmd FileType javascript :compiler javascriptlint
</pre>

<h2>JavaScriptファイルのインデントの改善</h2>

<p>デフォルトのインデント・スクリプトは<a href="http://jquery.com/">jQuery</a>を利用してJavaScriptを書いているとかなり酷いことになる。</p>

<ul>
<li><code>foo(function () {</code>の次の行のインデント</li>
<li><code>foo({</code>の次の行のインデント</li>
<li><code>})</code>でのアンインデント</li>
</ul>

<p>あたりがメジャーなインデントがおかしくなる箇所で、「コード書くよりインデントの修正の方が大変！」というくらい(おおげさ)。</p>

<p><a href="http://www.vim.org/scripts/script.php?script_id=1936">あれ</a>や<a href="http://www.vim.org/scripts/script.php?script_id=1840">これ</a>やJavaScriptのインデント・スクリプトは見つかるが、<a href="http://www.vim.org/scripts/script.php?script_id=2765">Better Javascript Indentation</a>が一番良かった。普通にインストールするだけで特に設定等は必要ない。</p>

<p>インストールすると以下のような典型的なPowered by jQueryのJavaScriptファイルがすんなりインデントされるようになる。気持ち良い！</p>

<pre>
$(function () {
  var num = 32;

  $(&quot;#monthly_archives &gt; li&quot;).each(function (i, li) {
    if (i === num) {
      $(li).before($(&quot;&lt;li/&gt;&quot;).append($(&quot;&lt;a/&gt;&quot;).attr({
        href: &quot;#archives-by-month&quot;
      }).append(&quot;» more&quot;).click(function () {
        $(this).hide();
        $(&quot;#monthly_archives .folded&quot;).show();
      }))).addClass(&quot;folded&quot;).hide();
    } else if (i &gt; num) {
      $(li).addClass(&quot;folded&quot;).hide();
    }
  });
});
</pre>

<p>気付いた範囲では、</p>

<pre>
var foo = {
  bar:
    function () {
</pre>

<p>と書いた時に、</p>

<ul>
<li>次の行がインデントされない</li>
<li>その後<code>}</code>で2段階アンインデントされてしまう</li>
</ul>

<p>といったラベル絡みでの不具合があった。<code>function</code>の前で改行しない場合は問題ないと思う(そう書けという意味ではない)。</p>

<p>また、これをインストールすると<code>gg=G</code>によるインデントのやり直しも改善される(当たり前だけど)。ただし複数行コメント内の行頭の空白が消えてしまうので、</p>

<pre>
/*!
 * foobar
 * hogehoge
 */
</pre>

<p>といった<a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>向けなコメントなどは、</p>

<pre>
/*!
* foobar
* hogehoge
*/
</pre>

<p>となってしまうので注意が必要。</p>

<hr>

<p>他にはMarkdownやTextileなどでHTMLに変換するコマンドを作っておいていたりするくらい。あとはひたすら<a href="http://www.vim.org/scripts/script.php?script_id=1879">AutoComplPop</a>でOmni補完！</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/vim-settings-for-web-development.html</feedburner:origLink></item>
    <item>
      <title>リデザインとborder-radiusとtext-shadow</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/lZrwH-xifrA/redesign-and-border-radius-and-text-shadow.html</link>
      <description>でっかいロゴに飽きてきてヘッダをコンパクトにしたくなったので、少し前からサイトのスタイルを色々いじっていた。ナビと検索フォームとロゴを一段に並べるのはかなり難しかったので、ロゴをアイコンにして無理やり詰め込むことにした。border-radiusまくり。緑の流行はまだまだ続くらしいので色はこのままで。次はオレンジだな(適当)。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Web Design</category>
      <guid isPermaLink="false">http://hail2u.net/blog/webdesign/redesign-and-border-radius-and-text-shadow.html</guid>
      <pubDate>Fri, 30 Oct 2009 11:54:38 +0900</pubDate>
      <content:encoded><![CDATA[
<p>でっかいロゴに飽きてきてヘッダをコンパクトにしたくなったので、少し前からサイトのスタイルを色々いじっていた。ナビと検索フォームとロゴを一段に並べるのはかなり難しかったので、ロゴをアイコンにして無理やり詰め込むことにした。<code>border-radius</code>まくり。緑の流行はまだまだ続くらしいので色はこのままで。次はオレンジだな(適当)。</p>

<h2>ヘッダ</h2>

<p class="image"><img src="http://hail2u.net/blog/images/site-header-091030.png" alt="サイトのヘッダ (2009/10/30)" width="800" height="72"></p>

<p>ロゴ・アイコンとナビを<code>float: left;</code>、検索フォームとTwitterとフィードのアイコンを<code>float: right;</code>。それぞれに<code>border-radius</code>を使って少し丸みをつけて、丸いロゴ・アイコンと並べてもあまり違和感が無いようにした。アクティブなナビは<code>text-shadow</code>でエンボスっぽくしてみたんだけど、背景色の明るさがアレでうまくへこんでいるように見えない……。</p>

<p>最初、<code>display: table-cell;</code>で検索フォームの横幅をうまいこと可変にして、キレイにびっちり並べてやろうと思ったんだけど、頭がおかしくなりそうだったのでやめた。できないことは無いような気がするんだけどなぁ……。</p>

<p>ブラウザの横幅が狭い場合は検索フォームやTwitterやフィードのアイコンが適当に折り返されて下に落ちるので、大抵の環境で問題なく収まるような気がする。</p>

<h2>フッタ</h2>

<p class="image"><img src="http://hail2u.net/blog/images/site-footer-091030.png" alt="サイトのフッタ (2009/10/30)" width="800" height="665"></p>

<p>今まではCSS的にフッタの各カラムに一つづつしか並べられなかったのだけど、書き直して複数入れることもできるようにした。で、トップのフッタの内容や量を見直してこんな感じにした。Weblogのフッタは中身がちょっと違い、Weblogの過去ログのリストとかが入る。各カラムのヘッダに馬鹿の一つ覚えのように<code>text-shadow</code>を使ったりもしている。</p>

<p>Weblogのフッタでの月ごとアーカイブのリストが長すぎる(無意味に2002年のとかもあるので)ので、最初は折りたたんでおいて後で開くことができるようにした。jQueryだと簡単ですね！！１開けてもあんまり意味無い気もするのでカットしちゃっても良いかもなぁ。</p>

<p>ウェブサービスのアイコン付きリストはJavaScriptでゴニョゴニョして生成するようにした。faviconの取得は<a href="http://getfavicon.appspot.com/">getFavicon</a>を利用させてもらった。なかなか軽いし、https越えもできるみたいで良い感じ。</p>

<hr>

<h2>メモ</h2>

<p><code>border-radius</code>と<code>text-shadow</code>のメモ。</p>

<h3><code>border-size: 1px;</code>で<code>border-radius</code>を適用</h3>

<p>ブラウザによって見た目が結構変わる。過度のところが極度に薄くなったりとか。<code>border</code>と<code>border-radius</code>の組み合わせる場合は2px以上にした方が良い気がする。</p>

<h3><code>border-size</code> * 2 = <code>border-radius</code></h3>

<p><code>border-size</code>の倍のサイズを<code>border-radius</code>に指定すると、キレイな角丸枠線になる気がする。</p>

<h3><code>text-shadow</code>の文法</h3>

<pre>
text-shadow: length length length color;
text-shadow: color length length length;
</pre>

<p>のどっちでも良い。lengthの順序は左右・上下・ぼかしで固定。</p>

<h3><code>text-shadow</code>でのエンボス</h3>

<p>Appleが多用するアレ。</p>

<pre>
/* 暗い文字用 */
text-shadow: 0 1px 0 #ffffff;

/* 明るい文字 */
text-shadow: 0 -1px 0 #000000;
</pre>

<p>上下にのみ1pxずらすだけ。背景色(画像)によってはあまりエンボスっぽく見えない。太字にこれを適用すると間抜けになること多々……。「<code>text-emboss</code>を作ってください！！１」とか言うと本当に作られそうな気がするので止めておく。</p>

<hr>

<p>Firefox 3.6のRCでもでたら<a href="https://developer.mozilla.org/ja/CSS/-moz-linear-gradient">CSS gradients</a>を使って書き直そうと思う。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/webdesign/redesign-and-border-radius-and-text-shadow.html</feedburner:origLink></item>
    <item>
      <title>FirefoxのuserChrome.cssネタ #12</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/6YsbF_B6PcQ/firefox-userchrome-css-tricks-12.html</link>
      <description>久々。Firefox 3になったときにずいぶん減らしたんだけど、だんだん増えてきたので整理しつつここではまだ書いてなかったものだけ。別のところで書いたやつもあるけど、ここでは初出ということで。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/firefox-userchrome-css-tricks-12.html</guid>
      <pubDate>Sat, 24 Oct 2009 01:52:19 +0900</pubDate>
      <content:encoded><![CDATA[
<p>久々。Firefox 3になったときにずいぶん減らしたんだけど、だんだん増えてきたので整理しつつここではまだ書いてなかったものだけ。別のところで書いたやつもあるけど、ここでは初出ということで。</p>

<h2>ロケーションバーや検索バーでIMEをオフにする</h2>

<pre>
#urlbar input,
#FindToolbar input {
  ime-mode: inactive !important;
}
</pre>

<p>「g 検索語」などキーワード検索機能を多用する場合、IMEがオンだと悲しいことになるので設定。検索バーでもオフにするかどうかは好みで。</p>

<h2>進むボタンを無効な時は隠す</h2>

<pre>
#forward-button[disabled=&quot;true&quot;] {
  display: none !important;
}
</pre>

<p class="image"><img src="http://hail2u.net/blog/images/hide-forward-botton.png" alt="進むボタンを隠すとすっきりする" width="46" height="36"></p>

<p>進むは戻るを使った時にしか有効にならないので、ほとんどの時間は無効。そのためにスペースを割くのはもったいないので無効なときは削除するとすっきり。そもそも戻るに比べて進むは使用頻度が低い(と思う)ので、完全に非表示でも良いかもしれない。</p>

<h2>ロケーションバーのドロップダウンの高さを変更する</h2>

<pre>
#PopupAutoCompleteRichResult {
  height: 514px !important;
}
</pre>

<p>デフォルトでは6件分の高さ(テーマ依存)。僕の環境では上記サイズで12件分表示されている(もちろんシステムのUIフォント設定などさまざまなものに依存するので12件分とは限らない)。各候補の高さが一様ではない(アイコンが表示されたりするとずれるっぽい)ので、丁度○○件分の高さにするとかは難しそう。またデフォルトではリストアップする最大数が12になっているので、about:configから<code>browser.urlbar.maxRichResults</code>を変更するとより多くの候補が表示される(多くしすぎると重くなるので注意)。</p>

<p>残念ながら候補が少ない場合、ドロップダウンに空白ができてしまいものすごいかっこ悪い。これを解決する方法は今のところ見つかっていない……。</p>

<h2>ロケーションバーでの絞り込みのハイライトを赤く</h2>

<pre>
#PopupAutoCompleteRichResult span.ac-emphasize-text {
  color: #cc0000 !important;
  font-weight: normal !important;
}
</pre>

<p class="image"><img src="http://hail2u.net/blog/images/highlight-richresult-in-red.png" alt="絞込みのキーワードを赤でハイライト" width="320" height="180"></p>

<p>デフォルトでは太字+下線で色は変わらない。見づらいというほどではないのだけど、色を変えたほうが見やすかった。赤文字はちょっと気持ち悪いかもしれないので、テーマに合わせて調節すると良いと思う。</p>

<pre>
#PopupAutoCompleteRichResult span.ac-emphasize-text {
  color: #000000 !important;
  background-color: #ff8000 !important;
}
</pre>

<p>というように背景を変更してもなかなか見やすい。</p>

<h2>ブックマークツールバーをシンプルに</h2>

<pre>
#bookmarksBarContent &gt; .bookmark-item {
  padding: 3px 12px !important;
}

#bookmarksBarContent &gt; .bookmark-item &gt; .toolbarbutton-icon {
  display: none !important;
}

#bookmarksBarContent &gt; .bookmark-item &gt; .toolbarbutton-menu-dropmarker {
  display: -moz-box !important;
}

#bookmarksBarContent &gt; .bookmark-item &gt; .toolbarbutton-menu-dropmarker &gt; .dropmarker-icon {
  display: -moz-box !important;
}
</pre>

<p class="image"><img src="http://hail2u.net/blog/images/simple-bookmark-toolbar.png" alt="シンプルなブックマークツールバー" width="320" height="36"></p>

<p>Safariっぽくアイコンを非表示にして、フォルダにはドロップダウンのマーカーをつける。<code>.bookmark-item</code>のスタイルで<code>-moz-border-radius</code>を使ったり、もっと細くなるように調節したりすればもっとSafariに近づけることができる……が、子要素の<code>.bookmark-item</code>でスタイルを戻さないとならないので非常に面倒なことになるのでオススメしない。素直に<a href="https://addons.mozilla.org/ja/firefox/addon/12782">MacOSX Theme</a>などをインストールした方が良い。</p>

<hr>

<p>Google Chromeもこんな感じで簡単にUIカスタマイズできたら良いなぁ……。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/firefox-userchrome-css-tricks-12.html</feedburner:origLink></item>
    <item>
      <title>XPIファイルにapplication/x-xpinstallを指定した方が良い？</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/jzWVEWIr2B0/should-i-use-application-x-xpinstall-or-not.html</link>
      <description>このサイトで公開しているFirefoxの拡張のXPIファイルにはMIMEタイプとしてapplication/x-xpinstallを指定しているので、FirefoxでXPIファイルへのリンクをクリックするとインストールの許可を求める情報バーが表示される。しかしこういった多くの人にとって得体の知れないサイトでは指定しない方が良いんじゃないかと最近になって考えるようになった。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/should-i-use-application-x-xpinstall-or-not.html</guid>
      <pubDate>Wed, 21 Oct 2009 13:24:12 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://hail2u.net/archives/xpi/">このサイトで公開しているFirefoxの拡張のXPIファイル</a>にはMIMEタイプとして<code>application/x-xpinstall</code>を指定しているので、FirefoxでXPIファイルへのリンクをクリックするとインストールの許可を求める情報バーが表示される。しかしこういった多くの人にとって得体の知れないサイトでは指定しない方が良いんじゃないかと最近になって考えるようになった。</p>

<p>そこらへんのサイトでXPIファイルにMIMEタイプとして<code>application/x-xpinstall</code>を設定すると、アドオンの管理がそのサイトだけで完結し、アップロードした最新のXPIファイルを直ぐにユーザーにインストールしてもらえるようになったりする。そのためアドオン開発者的にはそこそこメリットがあると思う。ただ最近のAMOの急激なパワーアップによって、これらのメリットは薄れつつある。</p>

<p>一方で、ユーザーにそのそこらへんの得体の知れないサイトをアドオンのインストールを許可するサイトとして追加してもらう必要があるというデメリットがある。ユーザーにしてもらう操作自体は難しいものではないのだけど、Twitterでのアレと同じように多くの人はその危険性をほとんど意識せずに許可してしまうだろうと思うので、AMO等のMozilla直系サイト以外を追加させるというのは(ユーザー教育的に)よろしくない気がする。また、一時的に許可するというようなこともできないので、許可サイトへの追加はそのまま放置するかオプション設定から削除しなければならない。ドメイン・ジャックとかの可能性を考えると放置はしたくないので、許可する度に手作業で削除することになり、とても面倒……。</p>

<p>また、XPIファイルにMIMEタイプを設定していない場合、通常はダウンロード・ダイアログが開かれるわけだけど、そもそもそこで「Firefoxで開く」ようにすればアドオンがインストールできる。許可サイトへの追加が単なる確認に過ぎないことを考えると、これで良いのじゃないかと思う。アプリケーションを指定する操作が面倒なことやダウンロード・ダイアログそのものが非常に使いづらいことなど問題点はあるが、許可サイトへの追加というデメリットとの比較ならば許しても良いような手間だと思う。</p>

<p>許可サイトへの追加というリスクをユーザーに押し付けるデメリットをどう捉えるかにかかってくるわけだけど、AMOを利用するという前提ならば、それによって得られるものがあまり無いので指定しない方が多くの場合は無難ということになる。ブランディングのために自サイト内で完結させたいので、AMOを利用したくないとかそういう場合には採用の余地はあるかもしれないが、個人のサイトには関係ない話。</p>

<hr>

<p>AMOを利用する場合、自身のサイトでのアドオン公開ページではAMOのアドオン公開ページへリンクを張るだけとなる。その時、</p>

<ul>
<li>AMOに移動する(外部サイトへ移動する)ことを明記する</li>
<li>アドオン公開ページのURLからロケールを削除しておく</li>
<li>レビュー待ちのバージョン等をインストールできるバージョン履歴のページへのリンクも併記する</li>
</ul>

<p>などに気をつけると使いやすいページになると思う。</p>

<p>ロケールは削除しなくても良いかもしれないが、自分でruとかになっているリンクを踏むと一瞬びっくりすることを考えると、jaなリンクを踏んだ非日本語圏の人はもっとびっくりするだろうと思うので、なるべく削除しておいた方が良いと思う。アドオン公開ページのURLにロケールが含まれない場合はブラウザの優先する言語設定に従ってリダイレクトされるので、意図せずen-USに飛んでしまうとかそういう問題はない。</p>

<p>バージョン履歴のページはアドオン公開ページの下の方にリンクがひっそりとある。普通のユーザーはまず気づかない。古いバージョン以外にもエディタのレビュー待ちのバージョンも表示されるので、リンクを張っておくと便利。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/should-i-use-application-x-xpinstall-or-not.html</feedburner:origLink></item>
    <item>
      <title>Places in Tabにツールバー・ボタンを追加</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/IXxtNNRvsDo/add-toolbar-button-to-places-in-tab.html</link>
      <description>Places in Tabにツールバーボタンを追加し、1.0として正式リリースした。しばらく反映に時間がかかると思うので、1.0が欲しい人はバージョン履歴のページからインストールすると良い。このサイトのXPI置き場からでもOK。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/add-toolbar-button-to-places-in-tab.html</guid>
      <pubDate>Tue, 20 Oct 2009 12:46:04 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="https://addons.mozilla.org/ja/firefox/addon/14575">Places in Tab</a>にツールバーボタンを追加し、1.0として正式リリースした。しばらく反映に時間がかかると思うので、1.0が欲しい人は<a href="https://addons.mozilla.org/ja/firefox/addons/versions/14575">バージョン履歴のページ</a>からインストールすると良い。このサイトの<a href="http://hail2u.net/archives/xpi/">XPI置き場</a>からでもOK。</p>

<p>ツールバー・ボタンの画像はテーマから引っ張るように(無理やり)作ったので、ビルトインのサイドバーで履歴やブックマークを開くツールバー・ボタンと同じ画像になると思う。でもなんかアレな感じなので書き直したい。ツールバーの各アイコンを参照できる簡単な仕組みが欲しい。ありそうなので探そう……。</p>

<p>次期メジャーバージョンのFirefoxでは「ホームタブ」というタブ上で履歴やブックマークを閲覧・管理する機能が付くとかいう話なので、それまでのつなぎっぽい感じになっちゃうかなぁ。何か機能をつける気がまったく無くなってしまった。という言い訳。</p>

<p>そういえば、AMOで公開するアドオンを正式リリースにする時に、アドオンの優位性とか動作確認の方法とか色々書かなくちゃならなくなったようで、ちょっとわずらわしかった。単に英語で書くのが面倒だっただけだけど(日本語でも良いのかな？)。登録されるアドオンのクオリティを確保するためなのか迅速なレビューを促進するためなのか、その両方なのか。敷居が高くなるほどではないと思うけど、フラストレーションの原因の一つにはなりそうな気がする。アドオンの新しいバージョンのファイルをアップロードする時に、アドオン・バリデータのテスト結果の表示がアニメーションなのとかもものすごくうっとおしい気がする……。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/add-toolbar-button-to-places-in-tab.html</feedburner:origLink></item>
    <item>
      <title>MEGAUPLOADから簡単にダウンロード</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/8-aSgQSfbWY/fast-megaupload.html</link>
      <description>MEGAUPLOADではファイルをダウンロードする時に、4文字のCAPTCHAの入力と45秒の待ち時間を要求される。が、URLにちょっと細工するとそれらをすっ飛ばしてダウンロードできることを知ったので、ユーザースクリプトにしてみた。中身は一行。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Coding</category>
      <guid isPermaLink="false">http://hail2u.net/blog/coding/fast-megaupload.html</guid>
      <pubDate>Sun, 18 Oct 2009 17:45:17 +0900</pubDate>
      <content:encoded><![CDATA[
<p><a href="http://www.megaupload.com/">MEGAUPLOAD</a>ではファイルをダウンロードする時に、4文字のCAPTCHAの入力と45秒の待ち時間を要求される。が、URLにちょっと細工するとそれらをすっ飛ばしてダウンロードできることを知ったので、<a href="http://gist.github.com/207716">ユーザースクリプト</a>にしてみた。中身は一行。</p>

<p>URLの細工はものすごく簡単なもので、元のURLが、</p>

<pre>
http://www.megaupload.com/?d=XXXXXXXX
</pre>

<p>なら、</p>

<pre>
http://www.megaupload.com/<em>mgr_dl.php</em>?d=XXXXXXXX
</pre>

<p>と変更するだけ。こう細工するとCAPTCHAの入力と待ち時間をまとめて飛ばしてダウンロードが始まる(ダウンロードのリンクをクリックする必要すらない)。かなり前からあったみたい。</p>

<p>MEGAUPLOADへのリンクを見つけたら書き換えるユーザースクリプトとかでも良いと思う。書くとしたらこんな感じ？</p>

<pre>
Array.forEach(document.getElementsByTagName(&quot;a&quot;), function (a) {
  if (a.href.match(/^http:\/\/www\.megaupload\.com\/\?d=[a-zA-Z0-9]{8}$/)) {
    a.href = a.href.replace(/\/\?d=/, &quot;/mgr_dl.php?d=&quot;);
  }
});
</pre>

<p>1週間くらい前に知って直ぐにユーザースクリプトを作ったのだけど、動いたり動かなかったりしてたり、今週はずっと腹痛だったりしたのでエントリにしてなかった。腹痛であまり食べられなくてずっと空腹だとなかなかすごい世界が見えることを知った。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/coding/fast-megaupload.html</feedburner:origLink></item>
    <item>
      <title>ActiverPerlにCPANをインストール</title>
      <link>http://feedproxy.google.com/~r/hail2u/blog/~3/fbrvijgBAz4/install-cpan-on-activeperl.html</link>
      <description>最近(2009年初頭頃から)のActivePerlではActiveStateのPPMリポジトリにCPANに必要なものが用意されており、それらをインストールすればすぐにCPANが利用できるようになる。実際にはPPMで必要なものをインストールして……などと作業を行う必要も無く、ほぼ自動で導入が完了するのでそんなに難しい話ではないのだけど、古い情報が淘汰されることを願ってエントリにしてみた。</description>
      <author>kyo@hail2u.net (Kyo Nagashima)</author>
      <category domain="http://hail2u.net/blog">Software</category>
      <guid isPermaLink="false">http://hail2u.net/blog/software/install-cpan-on-activeperl.html</guid>
      <pubDate>Sun, 11 Oct 2009 14:27:53 +0900</pubDate>
      <content:encoded><![CDATA[
<p>最近(2009年初頭頃から)の<a href="http://www.activestate.com/activeperl/">ActivePerl</a>ではActiveStateのPPMリポジトリに<a href="http://search.cpan.org/">CPAN</a>に必要なものが用意されており、それらをインストールすればすぐにCPANが利用できるようになる。実際にはPPMで必要なものをインストールして……などと作業を行う必要も無く、ほぼ自動で導入が完了するのでそんなに難しい話ではないのだけど、古い情報が淘汰されることを願ってエントリにしてみた。</p>

<p>ActivePerlのインストール後(必要なら再起動後)、コマンド プロンプトで<code>cpan</code>を実行すると、</p>

<pre>
C:\&gt;cpan

It looks like you don&#39;t have a C compiler and make utility installed.  Trying
to install dmake and the MinGW gcc compiler using the Perl Package Manager.
This may take a a few minutes...
</pre>

<p>というメッセージが白地に赤で表示され、自動的にActiveStateのPPMリポジトリにPPMパッケージとして用意されているdmakeとMinGWのダウンロードとインストールが始まる。少し時間がかかるが特に何かする必要も無いのでじっと待つだけ。完了すると自動的にcpanシェルが開始され、すぐにCPANにあるPerlモジュールのインストールを行うことができる。</p>

<p>インストールされたdmake.exeやgcc.exe等はperl.exeと同じ場所ではなく<code>C:\perl\site\bin</code>にある。デフォルトではActivePerlのインストール時にここにもPATHを通すことになるので、既存の開発環境とコンフリクトしてしまうこともある。その場合はPATHから<code>C:\perl\site\bin</code>を削除し、cpan.batの3行目に以下を挿入すると良いかもしれない。</p>

<pre>
set PATH=%PATH%;C:\perl\site\bin
</pre>

<p>こうした場合はPPMやCPANでインストールしたモジュールに付属しているユーティリティ(<a href="http://search.cpan.org/dist/Config-Pit/">Config::Pit</a>のppitとか)にパスが通ってない状態になることは忘れずに。</p>

<p>CPANの使い心地は<a href="http://strawberryperl.com/">Strawberry Perl for Windows</a>と同じ(testでこけるのも同じ)。導入の簡単さもあまり変わらないと思うので好きな方を使えば良いと思う。PPMメインであまり困らないライトなPerlコーダーにはActivePerlでPPM+CPANの方が楽かもしれない。</p>]]></content:encoded>
    <feedburner:origLink>http://hail2u.net/blog/software/install-cpan-on-activeperl.html</feedburner:origLink></item>
  </channel>
</rss>
