<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kamolog</title>
	<atom:link href="http://www.mkamo.org/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mkamo.org/blog</link>
	<description>mkamo&#039;s blog ．．．．． mkamo&#039;s memo?</description>
	<lastBuildDate>Sun, 21 Feb 2010 14:52:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Windows Server 2003 R2にASP.NET MVCアプリを配置</title>
		<link>http://www.mkamo.org/blog/20090930/522.html</link>
		<comments>http://www.mkamo.org/blog/20090930/522.html#comments</comments>
		<pubDate>Wed, 30 Sep 2009 12:24:43 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/?p=522</guid>
		<description><![CDATA[

Windows Server 2003 R2にASP.NET MVCアプリを配置したときのメモ．
 

IIS 6.0をインストール      管理ツールの[サーバーの役割管理]などを使ってIIS 6.0をインストー [...]]]></description>
			<content:encoded><![CDATA[<ul>
</ul>
<p>Windows Server 2003 R2にASP.NET MVCアプリを配置したときのメモ．</p>
<p> <span id="more-522"></span>
<ol>
<li>IIS 6.0をインストール      <br />管理ツールの[サーバーの役割管理]などを使ってIIS 6.0をインストールする． </li>
<li>.NET Framework 3.5 SP1インストール      <br />確かWindows Updateからインストールできたと思う． </li>
<li>ASP.NET MVCインストール      <br /><a title="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b</a>からASP.NET MVC 1.0をダウンロードしてインストール． </li>
<li>MySQLとMySQL Connector/Netインストール      <br />これはASP.NET MVCとは関係ないが，今回私が配置したアプリケーションで使ったのでメモとして書いておく．<a title="http://dev.mysql.com/downloads/" href="http://dev.mysql.com/downloads/">http://dev.mysql.com/downloads/</a>からMySQLとMySQL Connector/Netをダウンロードしてインストール．GUI管理ツールが必要であればMySQL Toolsもインストールしておく． </li>
<li>IIS 6.0設定      <br />管理ツールの[IISマネージャ]を開き，以下の設定をする．
<ul>
<li>[Webサービス拡張]を見てASP.NET v2.0.50727があり，「許可」になっているか確認する．          <br /><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/10/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/10/image_thumb.png" width="499" height="256" /></a>           <br />なっていなければコマンドプロンプトで以下のコマンドを実行してASP.NET 2.0を登録．
<pre class="console">&gt; &quot;%windir%¥Microsoft.NET¥Framework¥v2.0.50727¥aspnet_regiis.exe&quot; -i</pre>
</li>
<li>[Web サイト]の[プロパティ]を開き以下の設定をする．IIS7.0 integrated modeなら不要．
<ul>
<li>[ホーム ディレクトリ]ページの[構成]ボタンを押し，[アプリケーションの構成]画面を表示する． </li>
<li>[ワイルドカード アプリケーション マップ]の[挿入]ボタンを押し，以下のように入力して[OK]ボタンを押す．<br />
            <br /><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/10/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/10/image_thumb1.png" width="502" height="119" /></a> </p>
<ul>
<li>[実行可能ファイル]を「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll」に </li>
<li>[ファイルの存在を確認する]をチェックオフに </li>
</ul>
</li>
</ul>
</li>
<li>[Web サイト]&gt;[既定の Web サイト]の[プロパティ]を開き[ASP.NET]ページの[ASP.NET バージョン]を「2.0.50727」に設定する．<br />
        <br /><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/10/image2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/10/image_thumb2.png" width="550" height="456" /></a> </li>
</ul>
</li>
<li>ASP.NET MVCアプリケーションでRouteの設定を修正<br />
    <br />Global.asaxファイルを開き，RegisterRoutes()メソッドを以下のように修正する． </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1c69b883-850d-4264-9209-8a0d9dc44eeb" class="wlWriterEditableSmartContent">
<pre name="code" class="c#:nogutter">public static void RegisterRoutes(RouteCollection routes) {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { action = "Index", id = "" }
      );

    routes.MapRoute(
      "Root",
      "",
      new { controller = "Home", action = "Index", id = "" }
    );
}</pre>
</div>
</li>
<li>ASP.NET MVCアプリケーションの配置<br />
    <br />VisualStudio 2008の[ソリューション エクスプローラ]でプロジェクトを右クリックして[発行]したものを既定の Web サイトのホームディレクトリ以下にコピーすればよい．ホームディレクトリはデフォルトでは「c:\inetpub\wwwroot」． </li>
<li>Web ブラウザでこのサーバにアクセスすればASP.NET MVCアプリケーションが見られるはず． </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090930/522.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AntiVirusツールのテストのためのテスト用ウイルスファイル</title>
		<link>http://www.mkamo.org/blog/20090930/515.html</link>
		<comments>http://www.mkamo.org/blog/20090930/515.html#comments</comments>
		<pubDate>Tue, 29 Sep 2009 16:28:31 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[ソフト利用・運用]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20090930/515.html</guid>
		<description><![CDATA[AntiVirusツールの動作を確認するためのテスト用ウイルスファイルのメモ．

EICAR (European Institute for Computer Anti-Virus Research)という組織が，EIC [...]]]></description>
			<content:encoded><![CDATA[<p>AntiVirusツールの動作を確認するためのテスト用ウイルスファイルのメモ．</p>
<p><span id="more-515"></span></p>
<p>EICAR (European Institute for Computer Anti-Virus Research)という組織が，EICARテストファイルというテスト用のウイルスファイルを配布している．以下のURLからダウンロードできる．</p>
<ul>
<li><a title="http://www.eicar.org/anti_virus_test_file.htm" href="http://www.eicar.org/anti_virus_test_file.htm">http://www.eicar.org/anti_virus_test_file.htm</a></li>
</ul>
<p>実際には無害なファイルだが，ほとんど(すべて?)のAntiVirusソフトではこのファイルをウイルスだと検知するようになっている．これをダウンロードしてみて，アンチウイルスソフトが正しく動作しているかどうかや，ウイルス検知時の動作の確認ができる．</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090930/515.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows7でCLIE TH55</title>
		<link>http://www.mkamo.org/blog/20090914/503.html</link>
		<comments>http://www.mkamo.org/blog/20090914/503.html#comments</comments>
		<pubDate>Sun, 13 Sep 2009 19:19:25 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[ソフト利用・運用]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20090914/503.html</guid>
		<description><![CDATA[Windows7上のOutlook2007とCLIE TH55を無線LAN経由でHotSyncして同期できるようにするメモ．
今のところWindows7を実機ではなくVirtual PCにインストールしているため，USB [...]]]></description>
			<content:encoded><![CDATA[<p>Windows7上のOutlook2007とCLIE TH55を無線LAN経由でHotSyncして同期できるようにするメモ．</p>
<p>今のところWindows7を実機ではなくVirtual PCにインストールしているため，USB接続でのHotSyncができるかどうかは確認していない．hotsync.exeをWindows XP互換モードで動作させればUSB接続でのHotSyncもできるかもしれない．</p>
<p><span id="more-503"></span></p>
<h3 id="toc-clie-palm-desktop">CLIE Palm Desktopのインストール</h3>
<p>まずCLIE Palm Desktopをインストールする．<a title="http://www.nccl.sony.co.jp/download/C-W021-001-01/index.html" href="http://www.nccl.sony.co.jp/download/C-W021-001-01/index.html">http://www.nccl.sony.co.jp/download/C-W021-001-01/index.html</a>からCLIE Palm Desktop Ver.4.1をダウンロードする．cliepalmdesktop41.zipを展開し，「cliepalmdesktop41\Palm Desktop\setup.exe」を起動する．普通にインストーラの指示に従ってインストールする．</p>
<h3 id="toc-intelisync-lite-for-sony-clie">Intelisync Lite for Sony CLIEのインストール</h3>
<p>CLIE TH55のCDROMに入っているIntelisync Lite for Sony CLIEをインストールする．CDROMの「\JP\PC\IntellisyncLiteforSonyCLIE\DISK1\setup.exe」を起動してIntelisync Liteをインストールする．</p>
<h3 id="toc-intelisync-lite-for-sony-clie1">Intelisync Lite for Sony CLIEのアップデート</h3>
<p>CDROMのIntelisync Liteのインストールが終わったら，次はアップデータをインストールする．<a title="http://www.nccl.sony.co.jp/download/C-W017-002-01/index.html" href="http://www.nccl.sony.co.jp/download/C-W017-002-01/index.html">http://www.nccl.sony.co.jp/download/C-W017-002-01/index.html</a>から「IntellisyncLite_jpn.exe」をダウンロードして起動する．起動したらインストーラの指示に従って適当にインストールする．</p>
<h3 id="toc-intelisync-lite-for-sony-clie2">Intelisync Lite for Sony CLIEの設定</h3>
<p>Intelisync環境設定を起動してOutlookと同期するように設定する．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image_thumb3.png" border="0" alt="image" width="467" height="264" /></a></p>
<h3 id="toc-hotsync">HotSyncマネージャの設定</h3>
<p>タスクバーの通知領域にあるHotSyncマネージャのアイコンを右クリックし，[ネットワーク]を選択状態にする．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image_thumb4.png" border="0" alt="image" width="191" height="260" /></a></p>
<p>次に[起動/接続設定]を選択し，[ネットワーク]ページでHotSyncするユーザをチェック状態にする．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image5.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image_thumb5.png" border="0" alt="image" width="190" height="258" /></a></p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image_thumb6.png" border="0" alt="image" width="436" height="285" /></a></p>
<h3 id="toc-clie">CLIEの設定</h3>
<p>CLIE側も無線LANでHotSyncできるように設定しておく．設定方法の詳細は<a title="http://www.sony.jp/CLIE/enjoy/benricho/index_80.html" href="http://www.sony.jp/CLIE/enjoy/benricho/index_80.html">http://www.sony.jp/CLIE/enjoy/benricho/index_80.html</a>を参照．</p>
<h3 id="toc-hotsync1">HotSyncの実行</h3>
<p>HotSyncを実行する．めでたくHotSyncができるはず．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image_thumb7.png" border="0" alt="image" width="363" height="227" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090914/503.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>双方向関連の実装</title>
		<link>http://www.mkamo.org/blog/20090905/466.html</link>
		<comments>http://www.mkamo.org/blog/20090905/466.html#comments</comments>
		<pubDate>Sat, 05 Sep 2009 06:35:21 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20090905/466.html</guid>
		<description><![CDATA[自作ライブラリから双方向関連を実装するためのユーティリティを紹介してみる．
 
クラスFooとクラスBar間に1対1の双方向関連があるとき，Fooが参照するBarとBarが参照するFooは，以下の図のようにそれぞれお互い [...]]]></description>
			<content:encoded><![CDATA[<p>自作ライブラリから双方向関連を実装するためのユーティリティを紹介してみる．</p>
<p> <span id="more-466"></span>
<p>クラスFooとクラスBar間に1対1の双方向関連があるとき，Fooが参照するBarとBarが参照するFooは，以下の図のようにそれぞれお互いを参照するような状態になっていなければならない．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image_thumb.png" width="353" height="68" /></a> </p>
<p>しかしFooとBar間の関連を深く考えずに実装をしてしまうと，以下の図のような「foo1: Fooはbar1: Barを参照しているのに，bar1: Barはfoo1: Fooではなくfoo2: Fooを参照している」といった，双方向関連として整合性の取れていない状況に簡単になってしまう．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image1.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/09/image_thumb1.png" width="353" height="118" /></a> </p>
<p>この記事では，双方向関連の整合性の取れていない状況になりづらくするためのユーティリティを紹介する．</p>
<p>ユーティリティのソースコードは以下の通り．EnsureAssociation()メソッドが双方向関連を保証する．</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:617747b1-e279-4078-a2a6-a99c7586ba40" class="wlWriterEditableSmartContent">
<pre name="code" class="c#:nogutter:nocontrols">public static class AssociationUtil {
    public enum EnsureResult {
        None, /// 何も行われず，関連は変わらなかった
        Set,  /// 関連が設定された
        Unset, /// 関連が解除された
    }

    public static EnsureResult EnsureAssociation&lt;T&gt;(
        T oldValue,
        T newValue,
        Action&lt;T&gt; fieldSetter,
        Action&lt;T&gt; inverseAssociator,
        Action&lt;T&gt; inverseUnassociator
    )
        where T: class
    {
        if (oldValue == newValue) {
            return EnsureResult.None;
        }

        if (oldValue != null) {
            fieldSetter(null);
            inverseUnassociator(oldValue);
        }

        fieldSetter(newValue);

        if (newValue != null) {
            inverseAssociator(newValue);
            return EnsureResult.Set;
        } else {
            return EnsureResult.Unset;
        }
    }
}</pre>
</div>
<p>使い方は以下のとおり．単純なプロパティのsetterの実装では _bar = value; などとするところをEnsureAssociation()メソッドを呼び出すようにしている．これでBarプロパティやFooプロパティを通して値を設定する限り，必ずFooとBar間の双方向関連の整合性が取れた状態になる．(Fooクラス内で_barの値を直接変更した場合などは整合性が崩れてしまうので，そのようなコードには注意しなければならない．) </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:adc204ee-238b-4fd7-9982-eecf93ced0da" class="wlWriterEditableSmartContent">
<pre name="code" class="c#:nogutter:nocontrols">private class Foo {
    private Bar _bar;
    public Bar Bar {
        get { return _bar; }
        set {
            AssociationUtil.EnsureAssociation(
                _bar,
                value,
                bar =&gt; _bar = bar,
                bar =&gt; bar.Foo = this,
                bar =&gt; bar.Foo = null
            );
        }
    }
}

private class Bar {
    private Foo _foo;
    public Foo Foo {
        get { return _foo; }
        set {
            AssociationUtil.EnsureAssociation(
                _foo,
                value,
                foo =&gt; _foo = foo,
                foo =&gt; foo.Bar = this,
                foo =&gt; foo.Bar = null
            );
        }
    }
}</pre>
</div>
<p>これらのクラスを使ったときの振る舞いを示すテストコードは以下のとおり．FooとBar間の双方向関連の整合性が常に取れていることがわかる． </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:84d87d83-50b3-41ea-aec9-37c3ab113ccc" class="wlWriterEditableSmartContent">
<pre name="code" class="c#:nogutter:nocontrols">[TestMethod]
public void TestEnsureAssociation() {
    var foo1 = new Foo();
    var bar1 = new Bar();
    var bar2 = new Bar();

    Assert.AreEqual(null, foo1.Bar);
    Assert.AreEqual(null, bar1.Foo);
    Assert.AreEqual(null, bar2.Foo);

    foo1.Bar = bar1;
    Assert.AreEqual(bar1, foo1.Bar);
    Assert.AreEqual(foo1, bar1.Foo);

    foo1.Bar = bar2;
    Assert.AreEqual(bar2, foo1.Bar);
    Assert.AreEqual(null, bar1.Foo);
    Assert.AreEqual(foo1, bar2.Foo);

    bar2.Foo = null;
    Assert.AreEqual(null, foo1.Bar);
    Assert.AreEqual(null, bar1.Foo);
    Assert.AreEqual(null, bar2.Foo);
}</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090905/466.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>id値に「.」が含まれている要素をCSSで選択する方法</title>
		<link>http://www.mkamo.org/blog/20090705/416.html</link>
		<comments>http://www.mkamo.org/blog/20090705/416.html#comments</comments>
		<pubDate>Sun, 05 Jul 2009 05:58:52 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[HTML, Javascript]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20090705/416.html</guid>
		<description><![CDATA[HTML要素のid値に「.」が含まれているときに，CSSでその要素を選択する方法のメモ．
 
CSSで次の方法を使う．

IDセレクタのid値の指定で「.」を「\」でエスケープさせる 
属性セレクタでidを指定する 

 [...]]]></description>
			<content:encoded><![CDATA[<p>HTML要素のid値に「.」が含まれているときに，CSSでその要素を選択する方法のメモ．</p>
<p> <span id="more-416"></span>
<p>CSSで次の方法を使う．</p>
<ol>
<li>IDセレクタのid値の指定で「.」を「\」でエスケープさせる </li>
<li>属性セレクタでidを指定する </li>
</ol>
<p>以下，説明．</p>
<p>HTML4.01では要素のid属性の値を「アルファベット([A-Za-z])で開始し、任意の数のアルファベット、数字([0-9])、ハイフン(-)、アンダースコア(_)、コロン(:)、ピリオド(.)のみ」で記述できる．なので， </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:16f8360c-46b8-4d3f-b836-6df6af3b3e47" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter:nocontrols">&lt;div id="foo.bar"&gt;
hoge
&lt;/div&gt;
</pre>
</div>
<p>はHTML4.01のコードとして妥当で，「id属性の値が「foo.bar」であるdiv要素」となる．</p>
</p>
<p>しかし，CSS2.1ではHTMLで使用されるスタイルシートについては「.」はクラスセレクタと定義されている．CSSで上記のdiv要素を選択するつもりで </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7c34beeb-c336-4df2-89b9-885abeeecf5a" class="wlWriterEditableSmartContent">
<pre name="code" class="css:nogutter:nocontrols">div#foo.bar {
	color: red;
}</pre>
</div>
<p>と指定すると，「id属性の値が「foo」で，class属性の値がスペースで区切ると「bar」と一致するものがあるdiv要素」，すなわち次のような要素の選択になってしまう． </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1d7f180e-faae-4aee-aa92-20729bc7e19d" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter:nocontrols">&lt;div id="foo" class="bar baz"&gt;
hoge
&lt;/div&gt;
</pre>
</div>
</p>
<p>CSSで特別な意味を持つ文字を含むid値を持つ要素を選択する方法は以下のとおり．</p>
<ol>
<li>IDセレクタのid値の指定で「.」を「\」でエスケープさせる<br />CSSでは特別な意味を持つ文字を「\」でエスケープできる．「\」を使って「.」をエスケープした例は以下のとおり．
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:46b6b2e6-0ca3-455e-840e-e5fb8445e0da" class="wlWriterEditableSmartContent">
<pre name="code" class="css:nogutter:nocontrols">div#foo\.bar {
	color: red;
}</pre>
</div>
</li>
<li>属性セレクタでidを指定する<br />属性セレクタでid値を指定して要素を選択する．
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:daa6b00a-885d-4eb6-b611-42277b4b3cce" class="wlWriterEditableSmartContent">
<pre name="code" class="css:nogutter:nocontrols">div[id="foo.bar"] {
	color: red;
}
</pre>
</div>
<p>属性セレクタがIDセレクタより優先順位が低いことが問題になる場合は，「!import」を使う． </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b88d65a4-7dbd-404e-9d9c-d5a4e42f41cb" class="wlWriterEditableSmartContent">
<pre name="code" class="c#:nogutter:nocontrols">div[id="foo.bar"] {
	color: red !important;
}
</pre>
</div>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090705/416.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>メインページを任意のページに変える</title>
		<link>http://www.mkamo.org/blog/20090702/410.html</link>
		<comments>http://www.mkamo.org/blog/20090702/410.html#comments</comments>
		<pubDate>Thu, 02 Jul 2009 00:53:51 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[MediaWiki]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/?p=410</guid>
		<description><![CDATA[MediaWikiでメインページを変更する方法のメモ．
 
メインページとは，ページ名を指定しないURLを指定したとき，サイドバーの「メインページ」というリンクをクリックしたとき，ロゴをクリックしたときなどに表示されるペ [...]]]></description>
			<content:encoded><![CDATA[<p>MediaWikiでメインページを変更する方法のメモ．</p>
<p> <span id="more-410"></span>
<p>メインページとは，ページ名を指定しないURLを指定したとき，サイドバーの「メインページ」というリンクをクリックしたとき，ロゴをクリックしたときなどに表示されるページである．MediaWikiのデフォルトでは日本語環境の場合，メインページは「メインページ」という名前のページに設定されている．</p>
<p>これを変更するには「MediaWiki:Mainpage」というページを作成し，その本文にメインページとしたいページ名のみを記述する．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/07/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/07/image_thumb.png" width="354" height="281" /></a>&#160;</p>
<p>上記のようにしてページを保存すると，「めいんぺーじ」という名前のページがメインページとして使われる．</p>
<p>同様に「MediaWiki:Mainpage-description」というページの本文を編集することでサイドバーのメインページへのリンクのラベルを変更できる．</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090702/410.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPで可変長引数の関数を定義</title>
		<link>http://www.mkamo.org/blog/20090701/404.html</link>
		<comments>http://www.mkamo.org/blog/20090701/404.html#comments</comments>
		<pubDate>Wed, 01 Jul 2009 06:31:56 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/?p=404</guid>
		<description><![CDATA[PHPで可変長引数の関数を定義する方法のメモ．

 

PHP4以降では関数に渡された引数の情報を取得するために以下の関数を使うことができる．

func_num_args()      関数に渡された引数の数を返す 
 [...]]]></description>
			<content:encoded><![CDATA[<p>PHPで可変長引数の関数を定義する方法のメモ．</p>
</p>
<p> <span id="more-404"></span>
</p>
<p>PHP4以降では関数に渡された引数の情報を取得するために以下の関数を使うことができる．</p>
<ul>
<li>func_num_args()      <br />関数に渡された引数の数を返す </li>
<li>func_get_arg(int arg_num)      <br />関数に渡された引数のうちarg_num番目のものを返す．arg_numは0から数える整数 </li>
<li>func_get_args()      <br />関数に渡された引数を配列で返す </li>
</ul>
<p>可変長の引数を受け取る関数の例は以下のとおり．必須の引数$msg以外に任意の個数の引数を受け取り，$msg内の「{数字}」の箇所を置換した文字列を返す．この例ではfunc_get_args()だけを使っているが，func_num_args()とfunc_get_arg()を使っても実装できる．
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:531e0485-8e33-4fcb-8a98-e09249dbe703" class="wlWriterEditableSmartContent">
<pre name="code" class="php:nogutter:nocontrols">&lt;?php

function replaceMsg($msg) {
    /// すべての引数を取得
    $args = func_get_args();

    /// $msgを$argsから取り除く
    array_shift($args);

    $replacePairs = array();
    foreach ($args as $i =&gt; $arg) {
        $replacePairs['{'.$i.'}'] = $arg;
    }

    return strtr($msg, $replacePairs);
}

echo replaceMsg('There are {0}, {1} and {2}.', 'foo', 'bar', 'baz'); /// =&gt; There are foo, bar and baz.

?&gt;
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090701/404.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>findの結果をソートしてxargsに渡す</title>
		<link>http://www.mkamo.org/blog/20090613/378.html</link>
		<comments>http://www.mkamo.org/blog/20090613/378.html#comments</comments>
		<pubDate>Fri, 12 Jun 2009 16:13:37 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20090613/378.html</guid>
		<description><![CDATA[findの結果をソートしてxargsに渡すコマンドラインのメモ．
 
以下のようなコマンドラインでaccess.log.*.gzにマッチするファイルを「*」の個所の数字が大きい順にzcatでつないだ文字列が標準出力に出力 [...]]]></description>
			<content:encoded><![CDATA[<p>findの結果をソートしてxargsに渡すコマンドラインのメモ．</p>
<p> <span id="more-378"></span>
<p>以下のようなコマンドラインでaccess.log.*.gzにマッチするファイルを「*」の個所の数字が大きい順にzcatでつないだ文字列が標準出力に出力される．</p>
</p>
<pre class="prompt">&gt; find /var/log/apache2 -name 'access.log.*.gz' -print0 | \
sort -t '.' -k 3 -nrz | xargs -0 zcat</pre>
<p>sortを使って，findの結果を「.」で区切った3番目の文字列を数値として比較し，降順に並べ替えてxargsに渡している．sortコマンドでは，以下のオプションを指定している．</p>
<ul>
<li>「-t」オプションで区切り文字を「.」とする </li>
<li>「-k」オプションで3番目のフィールドをソート対象とする．3番目のフィールドとは「access.log.*.gz」を「.」で区切った3番目の「*」の個所のこと </li>
<li>「-n」 オプションで数値的にソートする ．例えば1と2と10をソートするとき1&lt;10&lt;2の順ではなく1&lt;2&lt;10とソートする </li>
<li>「-r」オプションで降順(逆順)にソートする </li>
<li>「-z」オプションで各行の末尾を「\n」(ラインフィード)ではなく「\0」(ヌル文字)とする．findの「-print0」オプションとxargsの「-0」オプションのため </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090613/378.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>findの結果を逆順に並べてxargsに渡す</title>
		<link>http://www.mkamo.org/blog/20090613/377.html</link>
		<comments>http://www.mkamo.org/blog/20090613/377.html#comments</comments>
		<pubDate>Fri, 12 Jun 2009 15:52:10 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20090613/377.html</guid>
		<description><![CDATA[findの結果を逆順に並べ替えてxargsに渡すコマンドラインのメモ．
 
以下のようなコマンドラインでfindの結果を逆順に並べ替えてxargsに渡せる．
&#62; find /var/log/apache2 -nam [...]]]></description>
			<content:encoded><![CDATA[<p>findの結果を逆順に並べ替えてxargsに渡すコマンドラインのメモ．</p>
<p> <span id="more-377"></span>
<p>以下のようなコマンドラインでfindの結果を逆順に並べ替えてxargsに渡せる．</p>
<pre class="prompt">&gt; find /var/log/apache2 -name 'access.log.*.gz' | tac | xargs zcat</pre>
<p>この例では，まず/var/log/apache2にあるaccess.log.*.gzファイルを探す．apacheのログは&#8217;*'の個所は数字で，結果は数字の小さい順に表示される．これをtacに渡すと行単位に逆順に並べ替えてくれる．最後にxargsにそれを渡すので，結果，access.log.*.gzにマッチするファイルを&#8217;*'の個所の数字が大きい順にzcatでつないだ文字列が標準出力に出力される．</p>
<p>なお，ファイル名に空白が入る可能性がある場合は，以下のようにxargsにヌル文字区切りの文字列を渡す必要がある．findとxargsの間にtacが入るため少々面倒．</p>
<pre class="prompt">&gt; find /var/log/apache2 -name 'access.log.*.gz' | tac | tr '\n' '\0' | xargs -0 zcat</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090613/377.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>aptでGPG errorが出たときの対処方法</title>
		<link>http://www.mkamo.org/blog/20090612/375.html</link>
		<comments>http://www.mkamo.org/blog/20090612/375.html#comments</comments>
		<pubDate>Fri, 12 Jun 2009 11:44:08 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20090612/375.html</guid>
		<description><![CDATA[/etc/apt/source.listを修正してapt-get updateやaptitude updateしようとするとGPG errorが起きることがある．
W: GPG error: http://downloa [...]]]></description>
			<content:encoded><![CDATA[<p>/etc/apt/source.listを修正してapt-get updateやaptitude updateしようとするとGPG errorが起きることがある．</p>
<pre class="prompt">W: GPG error: http://download.webmin.com sarge Release:
公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY D97A3AE911F63C51
W: これらの問題を解決するためには apt-get update を実行する必要があるかもしれません</pre>
<p>以下，対処法のメモ．</p>
<p><span id="more-375"></span></p>
<p>以下のようにしてキーを登録すればGPG errorは出なくなる．</p>
<ol>
<li>キーの取得<br />
    </p>
<pre class="prompt">&gt; gpg --keyserver pgp.nic.ad.jp --recv-keys D97A3AE911F63C51</pre>
</li>
<li>キーの確認<br />
    </p>
<pre class="prompt">&gt; gpg --fingerprint D97A3AE911F63C51</pre>
</li>
<li>信頼できるキーとして登録<br />
    </p>
<pre class="prompt"># gpg --armor --export D97A3AE911F63C51 | apt-key add -</pre>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090612/375.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
