<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>総武ソフトウェア推進所 更新履歴</title>
    <link>http://smdn.invisiblefulmoon.net/stats/history/</link>
    <description>最近更新したページとその変更内容です。</description>
    <webMaster>santamarta@mail.invisiblefulmoon.net (santa marta)</webMaster>
    <pubDate>Sun, 9 Nov 2008 23:48:43 +0900</pubDate>
    <lastBuildDate>Sun, 9 Nov 2008 23:48:43 +0900</lastBuildDate>
    <generator>SmdnFeeds/0.01</generator>
    <docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
    <sy:updatePeriod>daily</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <sy:updateBase>2008-11-09T23:48:43+09:00</sy:updateBase>
    <atom:link rel="self" type="application/rss+xml" href="http://smdn.invisiblefulmoon.net/stats/feeds/rss20.xml" />
    <atom:link rel="alternate" type="application/xhtml+xml" href="http://smdn.invisiblefulmoon.net/stats/history/" />
    <item>
      <title>「Works/Tools/Junk/ColorModelPreview」を追加</title>
      <description>「Works/Tools/Junk/ColorModelPreview」を追加</description>
      <link>http://smdn.invisiblefulmoon.net/programming/tips/colorspaces/</link>
      <pubDate>Sun, 9 Nov 2008 23:22:06 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/programming/tips/colorspaces/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/tips/colorspaces/">programming/tips/colorspaces</a></h2>
<p><code>
<span>${smdncms:tags,カラースペース,色空間,変換,RGB,CMYK,HSV,HSI,表色系}</span><br />
<span>*カラースペース変換式</span><br />
<del>参考資料 http://www.joochan.com/rgb-convert.html</del><br />
<span></span><br />
<ins>-参考資料 http://www.joochan.com/rgb-convert.html</ins><br />
<ins>-関連するページ</ins><br />
<ins>--[[works/tools/junk/ColorModelPreview]]</ins><br />
<ins></ins><br />
<span>**RGB &lt;-&gt; YMC</span><br />
<span> Y = 255 - B</span><br />
<span> M = 255 - G</span><br />
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/works/tools/junk/ColorModelPreview/">works/tools/junk/ColorModelPreview</a></h2>
<p><code>
<ins>*ColorModelPreview</ins><br />
<ins>**概要</ins><br />
<ins>RGB, CMY, HSVの各表色系で表現した色をプレビューするためのツールです。</ins><br />
<ins></ins><br />
<ins>-関連するページ</ins><br />
<ins>--[[programming/tips/colorspaces]]</ins><br />
<ins></ins><br />
<ins>**スクリーンショット</ins><br />
<ins>&amp;ref(colormodelpreview.png);</ins><br />
<ins></ins><br />
<ins>**ダウンロード</ins><br />
<ins>#googleadunit</ins><br />
<ins>-${smdncms:distfilelink,ColorModelPreview_src.lzh,ソースコードをダウンロード}</ins><br />
<ins>-${smdncms:distfilelink,ColorModelPreview_bin.lzh,exeファイルをダウンロード}</ins><br />
<ins></ins><br />
<ins>**そのほかの情報</ins><br />
<ins>-必要環境 : Microsoft .NET Framework version 2.0以上</ins><br />
<ins>-開発環境 : Microsoft Visual Studio 2008</ins><br />
<ins>-開発言語 : Visual Basic .NET</ins><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Linux/Tips/Apache」を更新</title>
      <description>「Linux/Tips/Apache」を更新</description>
      <link>http://smdn.invisiblefulmoon.net/linux/tips/apache/</link>
      <pubDate>Tue, 26 Aug 2008 22:09:35 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/linux/tips/apache/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/linux/tips/apache/">linux/tips/apache</a></h2>
<p><code>
<del>${smdncms:tags,Apache,mod_autoindex,mod_mime,mod_rewrite}</del><br />
<ins>${smdncms:tags,Apache,mod_autoindex,mod_mime,mod_rewrite,mod_layout}</ins><br />
<span>*Apache</span><br />
<span></span><br />
<span>**mod_mime</span><br />
<span> &lt;/html&gt;</span><br />
<span></span><br />
<span>SuppressHTMLPreambleを指定すると現在のディレクトリ名が表示されなくなってしまうので、SSIを使用して表示させている(&lt;!--#echo var=&quot;REQUEST_URI&quot; --&gt;の部分)。　当然、SSIを有効にしていなければ表示されない。</span><br />
<ins></ins><br />
<ins>**mod_layout</ins><br />
<ins>[[mod_layout:http://tangent.org/362/mod_layout.html]]に関するメモ。　mod_layoutを使うと、SSIのようにサーバサイドで任意のコンテンツを挿入したり置き換えたり出来る。</ins><br />
<ins></ins><br />
<ins>***インストール</ins><br />
<ins>あらかじめコンパイル時に必要となるhttpd-devel(Fedoraの場合)をインストールしておく。</ins><br />
<ins> yum install httpd-devel</ins><br />
<ins></ins><br />
<ins>mod_layoutをダウンロード・コンパイルする。</ins><br />
<ins> wget http://download.tangent.org/mod_layout-5.1.tar.gz</ins><br />
<ins> tar xvzf mod_layout-5.1.tar.gz</ins><br />
<ins> cd mod_layout-5.1</ins><br />
<ins> make</ins><br />
<ins></ins><br />
<ins>コンパイル出来たらインストールする(標準で/usr/lib/httpd/modules/にインストールされる)。</ins><br />
<ins> make install</ins><br />
<ins></ins><br />
<ins>httpd.confを開き、下記のエントリが追加されていることを確認しておく。</ins><br />
<ins> LoadModule layout_module /usr/lib/httpd/modules/mod_layout.so</ins><br />
<ins></ins><br />
<ins>***ヘッダ・フッタを挿入する</ins><br />
<ins>拡張子htmlのファイルに対して、bodyタグの直後にヘッダ、直前にフッタを挿入する。</ins><br />
<ins> AddOutputFilter LAYOUT html</ins><br />
<ins> LayoutHeader /var/www/common/layout/header.html</ins><br />
<ins> LayoutFooter /var/www/common/layout/footer.html</ins><br />
<ins></ins><br />
<ins>AddOutputFilterで挿入する対象のファイルを指定し、LayoutHeaderとLayoutFooterで挿入するコンテンツを指定する。</ins><br />
<ins></ins><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Programming/Mono/MonoDevelop 2.0 Alpha 1 (1.9)のインストール」を追加</title>
      <description>「Programming/Mono/MonoDevelop 2.0 Alpha 1 (1.9)のインストール」を追加</description>
      <link>http://smdn.invisiblefulmoon.net/programming/mono/</link>
      <pubDate>Wed, 6 Aug 2008 11:37:41 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/programming/mono/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/mono/">programming/mono</a></h2>
<p><code>
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/mono/install_monodevelop_1.9/">programming/mono/install_monodevelop_1.9</a></h2>
<p><code>
<ins>${smdncms:tags,MonoDevelop,1.9,2.0,Alpha 1,インストール}</ins><br />
<ins>*MonoDevelop 2.0 Alpha 1のインストール</ins><br />
<ins>Ubuntu 8.04 Hardy Heronに[[MonoDevelop 2.0 Alpha 1:http://www.monodevelop.com/Main_Page]]をインストールしたときの手順。　パッケージは用いずソースからインストールした。　またインストール先は/usr/localとした。</ins><br />
<ins>-関連するページ</ins><br />
<ins>--[[programming/mono/install_monodevelop_1.0]]</ins><br />
<ins>--[[programming/mono/install_monodevelop_0.18]]</ins><br />
<ins>--[[programming/mono/install_1.9]]</ins><br />
<ins>--[[programming/mono/install_1.2.6]]</ins><br />
<ins></ins><br />
<ins>**MonoDevelopが必要とするアセンブリのインストール</ins><br />
<ins>MonoDevelopが必要とするアセンブリをあらかじめインストールしておく。　必要になるものは以下のアセンブリ。</ins><br />
<ins>-MonoDevelopが必要とするアセンブリ</ins><br />
<ins>--monodoc</ins><br />
<ins>--mono-tools</ins><br />
<ins>--Mono Addins</ins><br />
<ins>--GtkSharp</ins><br />
<ins>--GnomeSharp</ins><br />
<ins>--GeckoSharp</ins><br />
<ins>--gtksourceview-sharp</ins><br />
<ins></ins><br />
<ins>**コンパイル時に必要なパッケージのインストール</ins><br />
<ins>コンパイル時に必要となるパッケージをあらかじめインストールしておく。　必要になるものは以下のパッケージ。</ins><br />
<ins>-MonoDevelopが必要とするパッケージ</ins><br />
<ins>--gettext</ins><br />
<ins></ins><br />
<ins>**ソースのダウンロード</ins><br />
<ins> wget http://go-mono.com/sources/monodevelop/monodevelop-1.9.tar.bz2</ins><br />
<ins> tar -xvf monodevelop-1.9.tar.bz2</ins><br />
<ins> cd monodevelop-1.0/</ins><br />
<ins></ins><br />
<ins>**コンパイル、インストール</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureの結果を確認する。</ins><br />
<ins></ins><br />
<ins> Configuration summary</ins><br />
<ins> </ins><br />
<ins>    * Installation prefix = /usr/local</ins><br />
<ins>    * C# compiler = /usr/local/bin/gmcs</ins><br />
<ins>    * Mono class library development extensions: yes</ins><br />
<ins>    * Version control support: yes</ins><br />
<ins>    *   Providers:</ins><br />
<ins>    *     Subversion: yes</ins><br />
<ins>    * C/C++ project support: yes</ins><br />
<ins>    * GtkSourceView2 Editor: no</ins><br />
<ins>    * Platform bindings: GNOME </ins><br />
<ins>    * Unit tests: no</ins><br />
<ins>    * Mozilla location: /usr/lib/xulrunner</ins><br />
<ins></ins><br />
<ins>問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>インストールが完了したら、monodevelop -Vでmonodevelopの出力を確認する。</ins><br />
<ins></ins><br />
<ins> # monodevelop -V</ins><br />
<ins> MonoDevelop.IdeApplication  1.9.0.0 - MonoDevelop Team 2004-2005, Mike Krueger 2000-2003</ins><br />
<ins> The MonoDevelop IDE</ins><br />
<ins> </ins><br />
<ins> http://monodevelop.com</ins><br />
<ins> Authors: MonoDevelop Team</ins><br />
<ins></ins><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Programming/Ruby/C#とRubyの対比表」を更新</title>
      <description>「Programming/Ruby/C#とRubyの対比表」を更新</description>
      <link>http://smdn.invisiblefulmoon.net/programming/ruby/compare_with_cs/</link>
      <pubDate>Sun, 3 Aug 2008 10:58:54 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/programming/ruby/compare_with_cs/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/ruby/compare_with_cs/">programming/ruby/compare_with_cs</a></h2>
<p><code>
<span>|Directory.GetFileSystemEntries(dir)|Dir.entries(path)|</span><br />
<span>|Directory.GetFileSystemEntries(dir, pattern)|Dir.glob(pattern)|</span><br />
<span>|N/A|File.split|</span><br />
<del>|File.Delete|File.delete, File.unlink|</del><br />
<ins>|File.Copy|FileUtils.cp, FileUtils.cp_r, FileUtils.copy|</ins><br />
<ins>|File.Delete|File.delete, File.unlink, FileUtils.rm|</ins><br />
<span>|File.Move|File.rename|</span><br />
<span>|FileStream.SetLength|File.truncate|</span><br />
<span>|FileInfo.Length|File.size|</span><br />
<del>|Directory.CreateDirectory|Dir.mkdir|</del><br />
<del>|Directory.Delete|Dir.rmdir|</del><br />
<ins>|Directory.CreateDirectory|Dir.mkdir,FileUtils.mkdir|</ins><br />
<ins>|N/A|FileUtils.mkdir_p|</ins><br />
<ins>|Directory.Delete|Dir.rmdir, FileUtils.rm_r|</ins><br />
<span>|File.GetLastAccessTime, Directory.GetLastAccessTime|File.atime|</span><br />
<span>|N/A|File.ctime|</span><br />
<span>|File.GetLastWriteTime, Directory.GetLastWriteTime|File.mtime|</span><br />
<span>|File.GetCreationTime, Directory.GetCreationTime|N/A|</span><br />
<span>|N/A|File.identical?|</span><br />
<del>|Directory.SetCurrentDirectory, Environment.CurrentDirectory|Dir.chdir|</del><br />
<del>|Directory.GetCurrentDirectory, Environment.CurrentDirectory|Dir.pwd, Dir.getwd|</del><br />
<ins>|N/A|FileUtils.touch|</ins><br />
<ins>|Directory.SetCurrentDirectory, Environment.CurrentDirectory|Dir.chdir, FileUtils.cd|</ins><br />
<ins>|Directory.GetCurrentDirectory, Environment.CurrentDirectory|Dir.pwd, Dir.getwd, FileUtils.pwd|</ins><br />
<span>|new FileInfo, new DirectoryInfo, Mono.Unix.Native.Syscall.stat(Mono.Posix.dll)|File.stat|</span><br />
<span>|Mono.Unix.Native.Syscall.chmod(Mono.Posix.dll)|File.chmod|</span><br />
<span>|Mono.Unix.Native.Syscall.chown(Mono.Posix.dll)|File.chown|</span><br />
<span>|Environment.Exit|exit|</span><br />
<span>|C#|Ruby|f</span><br />
<span></span><br />
<ins>**スレッド</ins><br />
<ins>|C#|Ruby|h</ins><br />
<ins>|Thread.Sleep(1)|sleep(0.001)|</ins><br />
<ins>|Thread.Sleep(1000)|sleep(1)|</ins><br />
<ins>|(new Thread(ThreadStart)).Start|Thread.new {...}, Thread.start {...}, Thread.fork {...}|</ins><br />
<ins>|(new Thread(ParameterizedThreadStart)).Start|Thread.new(param1, param2) {...}|</ins><br />
<ins>|Thread.Join|Thread.join|</ins><br />
<ins>|Thread.Abort|Thread.kill, Thread.terminate|</ins><br />
<ins>|Thread.Suspend|Thread.Stop|</ins><br />
<ins>|Thread.Resume|Thread.Run|</ins><br />
<ins>|C#|Ruby|f</ins><br />
<ins></ins><br />
<span>**その他・未整理</span><br />
<span>|C#|Ruby|h</span><br />
<span>|Uri class|URI Module|</span><br />
<span>|Convert.ToBase64String|Base64.encode64|</span><br />
<span>|Convert.FromBase64String|Base64.decode64|</span><br />
<span>|MD5CryptoServiceProvider.ComputeHash|Digest::MD5.digest|</span><br />
<ins>|SHA1CryptoServiceProvider.ComputeHash|Digest::SHA1.digest|</ins><br />
<span>|new SmtpClient|Net::SMTP.start|</span><br />
<span>|new WebClient|Net::HTTP.start|</span><br />
<ins>|WebClient.OpenRead|open(URI)|</ins><br />
<span>|HttpUtility.HtmlEncode|CGI.escapeHTML|</span><br />
<span>|HttpUtility.HtmlDecode|CGI.unescapeHTML|</span><br />
<span>|HttpUtility.UrlPathEncode|CGI.escape|</span><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Programming/Ruby/Tips」を更新</title>
      <description>「Programming/Ruby/Tips」を更新</description>
      <link>http://smdn.invisiblefulmoon.net/programming/ruby/tips/</link>
      <pubDate>Sun, 3 Aug 2008 10:48:02 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/programming/ruby/tips/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/ruby/tips/">programming/ruby/tips</a></h2>
<p><code>
<span>-cf. File.flock</span><br />
<span></span><br />
<span>***時刻の取得、文字列から/への変換</span><br />
<del> require &quot;time&quot;</del><br />
<ins> require &apos;time&apos;</ins><br />
<span> </span><br />
<span> t = Time.parse(&quot;2008/1/9 23:30:30&quot;)</span><br />
<span> print &quot;#{t}\n&quot;</span><br />
<span></span><br />
<span>***CGI</span><br />
<span>リクエストからパラメータpの値を取得し、HTML形式のテキストをレスポンスとして返すCGIプログラム。</span><br />
<del> require &quot;cgi&quot;</del><br />
<ins> require &apos;cgi&apos;</ins><br />
<span> </span><br />
<span> cgi = CGI.new</span><br />
<span> </span><br />
<span></span><br />
<span>***RSS</span><br />
<span>RSS(この例ではhttp://example.com/rss.rdf)を読み込み、linkとtitleをHTMLのアンカタグの形式で出力する。</span><br />
<del> require &quot;rss/1.0&quot;</del><br />
<ins> require &apos;rss/1.0&apos;</ins><br />
<span> require &apos;net/http&apos;</span><br />
<span> </span><br />
<span> Net::HTTP.version_1_2</span><br />
<span>-Net::HTTP.getで指定されたURLのリソースを取得する</span><br />
<span>-RSS::Parser.parseは引数に渡された文字列をRSSとして解析する</span><br />
<span></span><br />
<ins>***エコーバックをオフにしてパスワード入力を求める</ins><br />
<ins> system &apos;stty -echo&apos;</ins><br />
<ins> print &apos;Password: &apos;</ins><br />
<ins> password = $stdin.gets.chop</ins><br />
<ins> system &apos;stty echo&apos;</ins><br />
<ins> print &quot;\n&quot;</ins><br />
<ins></ins><br />
<ins>-入力したパスワードが表示されないようにする方法</ins><br />
<ins>-stty -echoでエコーバックをオフにし、その間に入力されたキャラクタが表示されないようにする</ins><br />
<ins></ins><br />
<span>***パスワードの暗号化(crypt)</span><br />
<span> def crypt_passwd( passwd )</span><br />
<span>   salt = [ rand(64), rand(64) ].pack( &quot;C*&quot; ).tr( &quot;\x00-\x3f&quot;,&quot;A-Za-z0-9./&quot; )</span><br />
<span>***メールの送信</span><br />
<span> require &apos;jcode&apos;</span><br />
<span> require &apos;base64&apos;</span><br />
<del> require &quot;time&quot;</del><br />
<ins> require &apos;time&apos;</ins><br />
<span> require &apos;net/smtp&apos;</span><br />
<span> $KCODE = &quot;UTF8&quot;</span><br />
<span> </span><br />
<span> 送信テストです。</span><br />
<span> END_OF_BODY</span><br />
<span></span><br />
<ins>***HTTPリクエスト</ins><br />
<ins> require &apos;net/http&apos;</ins><br />
<ins> uri = URI.parse(&quot;http://example.com/&quot;)</ins><br />
<ins> http = Net::HTTP.new(uri.host, 80)</ins><br />
<ins> req = Net::HTTP::Get.new(uri.path)</ins><br />
<ins> res = http.request(req)</ins><br />
<ins> print res.body</ins><br />
<ins>または</ins><br />
<ins> require &apos;net/http&apos;</ins><br />
<ins> uri = URI.parse(&quot;http://example.com/&quot;)</ins><br />
<ins> http = Net::HTTP.new(uri.host, 80)</ins><br />
<ins> res = http.get(uri.path)</ins><br />
<ins> print res.body</ins><br />
<ins></ins><br />
<ins>-GET以外にもHTTPリクエストメソッドを送信することが出来る(以下リクエストの抜粋)</ins><br />
<ins>--Net::HTTP.head</ins><br />
<ins>--Net::HTTP.post</ins><br />
<ins>--Net::HTTP.put</ins><br />
<ins>--Net::HTTP.delete</ins><br />
<ins>--Net::HTTP.copy</ins><br />
<ins>--Net::HTTP.options</ins><br />
<ins></ins><br />
<ins>***open-uriによるページ取得</ins><br />
<ins> require &apos;open-uri&apos;</ins><br />
<ins> </ins><br />
<ins> resp = open(&apos;http://example.com/&quot;)</ins><br />
<ins> resp.each_line do |line|</ins><br />
<ins>  print line</ins><br />
<ins> end</ins><br />
<ins>もしくは</ins><br />
<ins> open(&apos;http://example.com/&apos;) do |resp|</ins><br />
<ins>   resp.each_line do |line|</ins><br />
<ins>    print line</ins><br />
<ins>   end</ins><br />
<ins> end</ins><br />
<ins>User-Agent等のヘッダを追加する場合は次のようにする。</ins><br />
<ins> resp = open(&apos;http://example.com/&apos;,</ins><br />
<ins>             &apos;User-Agent&apos; =&gt; &apos;Mozilla/5.0&apos;,</ins><br />
<ins>             &apos;If-Modified-Since&apos; =&gt; last_modified.httpdate)</ins><br />
<ins>取得したページの情報は次のようにして参照できる。</ins><br />
<ins> print resp.status</ins><br />
<ins> print resp.last_modified</ins><br />
<ins> print resp.content_type</ins><br />
<ins> print resp.content_encoding</ins><br />
<ins> print resp.charset</ins><br />
<ins>失敗した場合はOpenURI::HTTPErrorがスローされる。</ins><br />
<ins> begin</ins><br />
<ins>   resp = open(uri)</ins><br />
<ins> rescue OpenURI::HTTPError =&gt; e</ins><br />
<ins>   print e</ins><br />
<ins> end</ins><br />
<ins></ins><br />
<ins>***WSSE認証ヘッダ(X-WSSE)の生成</ins><br />
<ins> require &apos;time&apos;</ins><br />
<ins> require &apos;base64&apos;</ins><br />
<ins> require &apos;digest/sha1&apos;</ins><br />
<ins> </ins><br />
<ins> def generate_wsse(username, password)</ins><br />
<ins>   nonce = &apos;&apos;</ins><br />
<ins>   20.times do</ins><br />
<ins>     nonce &lt;&lt; rand(256).chr</ins><br />
<ins>   end</ins><br />
<ins> </ins><br />
<ins>   created = Time.now.iso8601</ins><br />
<ins> </ins><br />
<ins>   return sprintf(&quot;UsernameToken Username=\&quot;%s\&quot;, PasswordDigest=\&quot;%s\&quot;, Nonce=\&quot;%s\&quot;, Created=\&quot;%s\&quot;&quot;,</ins><br />
<ins>       username,</ins><br />
<ins>       Base64.encode64(Digest::SHA1.digest(nonce + created + password)).chomp,</ins><br />
<ins>       Base64.encode64(nonce).chomp,</ins><br />
<ins>       created)</ins><br />
<ins> end</ins><br />
<ins></ins><br />
<ins>***プロセスのデーモン化</ins><br />
<ins>Process.daemonを使う場合。</ins><br />
<ins> Process.daemon {</ins><br />
<ins>   ...</ins><br />
<ins> }</ins><br />
<ins></ins><br />
<ins>Process.forkを使う場合。</ins><br />
<ins> Process.fork{</ins><br />
<ins>   Process.setsid</ins><br />
<ins>   Dir.chdir(&apos;/&apos;)</ins><br />
<ins>   trap(&quot;SIGINT&quot;){ exit! 0 }</ins><br />
<ins>   trap(&quot;SIGTERM&quot;){ exit! 0 }</ins><br />
<ins>   trap(&quot;SIGHUP&quot;){ exit! 0 }</ins><br />
<ins>   File.open(&apos;/dev/null&apos;) {|f|</ins><br />
<ins>     STDIN.reopen f</ins><br />
<ins>     STDOUT.reopen f</ins><br />
<ins>     STDERR.reopen f</ins><br />
<ins>   }</ins><br />
<ins>   ...</ins><br />
<ins> }</ins><br />
<ins> exit! 0</ins><br />
<ins></ins><br />
<ins>***Loggerによるログ出力</ins><br />
<ins> logger = Logger.new($DEBUG ? STDERR : &apos;test.log&apos;)</ins><br />
<ins> logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN</ins><br />
<ins> </ins><br />
<ins> logger.debug(&apos;debug&apos;)</ins><br />
<ins> logger.info(&apos;information&apos;)</ins><br />
<ins> logger.warn(&apos;warning&apos;)</ins><br />
<ins> logger.error(&apos;error&apos;)</ins><br />
<ins> logger.fatal(&apos;fatal&apos;)</ins><br />
<ins></ins><br />
<ins>-ログレベルと記録される内容</ins><br />
<ins>--DEBUG: fatal, error, warn, info, debug</ins><br />
<ins>--INFO: fatal, error, warn, info</ins><br />
<ins>--WARN: fatal, error, warn</ins><br />
<ins>--ERROR: fatal, error</ins><br />
<ins>--FATAL: fatal</ins><br />
<ins></ins><br />
<ins>**WWW::Mechanize</ins><br />
<ins>WWW::Mechanizeの使用例。</ins><br />
<ins></ins><br />
<ins>***ページの取得</ins><br />
<ins> require &apos;rubygems&apos;</ins><br />
<ins> require &apos;mechanize&apos;</ins><br />
<ins> </ins><br />
<ins> agent = WWW::Mechanize.new</ins><br />
<ins> page = agent.get(&apos;http://example.com/index.html&apos;)</ins><br />
<ins></ins><br />
<ins>***Basic認証/Digest認証</ins><br />
<ins>Basic認証/Digest認証が必要なページでは、あらかじめauthメソッドで認証に用いるユーザ名・パスワードを指定しておくと、自動的に認証に必要なヘッダの送信が行われる。</ins><br />
<ins> agent = WWW::Mechanize.new</ins><br />
<ins> agent.auth(&apos;user&apos;, &apos;pass&apos;)</ins><br />
<ins> page = agent.get(&apos;http://example.com/members/index.html&apos;)</ins><br />
<ins></ins><br />
<ins>***UAの設定</ins><br />
<ins> agent = WWW::Mechanize.new</ins><br />
<ins> agent.user_agent_alias = &apos;Linux Mozilla&apos;</ins><br />
<ins></ins><br />
<ins>***リンクをたどる</ins><br />
<ins>開いたページのコンテンツから「次のページ」のテキストを含むaタグを探し、そのaタグのhrefで指定されているURLを開く例。</ins><br />
<ins> page = agent.get(&apos;http://example.com/page0.html&apos;)</ins><br />
<ins> 10.times do |page|</ins><br />
<ins>   link_next = page.links.text(&quot;次のページ&quot;)</ins><br />
<ins>   page = agent.get(link_next.href)</ins><br />
<ins> end</ins><br />
<ins></ins><br />
<ins>***フォームへの入力と送信</ins><br />
<ins>開いたページのフォームに値を入力し、その内容を送信する例。</ins><br />
<ins> page = agent.get(&apos;http://example.com/comment.cgi&apos;)</ins><br />
<ins> form = page.forms.name(&apos;comment&apos;).first  # name属性が&apos;comment&apos;のformを取得</ins><br />
<ins> form[&apos;name&apos;] = &apos;ななし&apos;                  # name属性が&apos;name&apos;の欄に&apos;ななし&apos;と入力</ins><br />
<ins> form[&apos;mail&apos;] = &apos;sage&apos;</ins><br />
<ins> form[&apos;text&apos;] = &apos;テステス&apos;</ins><br />
<ins> agent.submit(form)                       # 取得したformの送信ボタンを押す(formの内容を送信する)</ins><br />
<ins></ins><br />
<ins>***複数のsubmitボタンがある場合</ins><br />
<ins>formに複数のsubmitボタンがある場合は、buttonを指定してsubmitメソッドを呼ぶ。</ins><br />
<ins> if mode == &apos;delete&apos;</ins><br />
<ins>   button = form.buttons.name(&apos;delete&apos;).first</ins><br />
<ins> else</ins><br />
<ins>   button = form.buttons.name(&apos;edit&apos;).first</ins><br />
<ins> end</ins><br />
<ins> form.submit(button)</ins><br />
<ins></ins><br />
<ins>***ファイルのアップロード</ins><br />
<ins> page = agent.get(&apos;http://example.com/upload.cgi&apos;)</ins><br />
<ins> form = page.forms[0]</ins><br />
<ins> form.file_uploads[0].file_name = &apos;./test.zip&apos;</ins><br />
<ins> agent.submit(form)</ins><br />
<ins></ins><br />
<span>**文書情報</span><br />
<ins>-2008-08-03 追記</ins><br />
<span>-2008-01-10 初版公開</span><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Linux/Ubuntu/Ubuntu 8.04 初期設定メモ」を更新</title>
      <description>「Linux/Ubuntu/Ubuntu 8.04 初期設定メモ」を更新</description>
      <link>http://smdn.invisiblefulmoon.net/linux/ubuntu/initialconfig_hardy/</link>
      <pubDate>Sun, 4 May 2008 20:19:52 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/linux/ubuntu/initialconfig_hardy/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/linux/ubuntu/initialconfig_hardy/">linux/ubuntu/initialconfig_hardy</a></h2>
<p><code>
<span> automake1.9 \</span><br />
<span> autotools-dev \</span><br />
<span> bison \</span><br />
<ins> bittorrent \</ins><br />
<span> build-essential \</span><br />
<span> cadaver \</span><br />
<span> dovecot-common \</span><br />
<span> dovecot-imapd \</span><br />
<span> easytag \</span><br />
<ins> ffmpeg \</ins><br />
<span> gedit-plugins \</span><br />
<span> gettext \</span><br />
<span> gstreamer0.10-ffmpeg \</span><br />
<ins> gstreamer0.10-plugins-bad \</ins><br />
<span> gstreamer0.10-plugins-ugly \</span><br />
<ins> icedax \</ins><br />
<span> lha \</span><br />
<span> lighttpd \</span><br />
<span> mysql-common \</span><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Linux/Ubuntu/Ubuntu 7.04 初期設定メモ」を更新</title>
      <description>「Linux/Ubuntu/Ubuntu 7.04 初期設定メモ」を更新</description>
      <link>http://smdn.invisiblefulmoon.net/linux/ubuntu/initialconfig/</link>
      <pubDate>Mon, 28 Apr 2008 22:34:00 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/linux/ubuntu/initialconfig/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/linux/ubuntu/initialconfig/">linux/ubuntu/initialconfig</a></h2>
<p><code>
<span>*Ubuntu 7.04 初期設定メモ</span><br />
<span>Ubuntu 7.04 Feisty Fawnの初期設定メモ。　ハードディスクへのインストール後に設定したことなどの自分用メモ。</span><br />
<span></span><br />
<ins>-関連するページ</ins><br />
<ins>--[[linux/ubuntu/initialconfig_hardy]]</ins><br />
<ins></ins><br />
<span>**サービス・システム設定</span><br />
<span>+インストールされたパッケージをアップデート</span><br />
<span>+Synapticパッケージマネージャの設定変更。</span><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Programming/Mono/Mono 1.9のインストール」を更新</title>
      <description>「Programming/Mono/Mono 1.9のインストール」を更新</description>
      <link>http://smdn.invisiblefulmoon.net/programming/mono/install_1.9/</link>
      <pubDate>Mon, 28 Apr 2008 22:32:00 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/programming/mono/install_1.9/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/mono/install_1.9/">programming/mono/install_1.9</a></h2>
<p><code>
<span>Ubuntu 7.04 Feisty Fawnに[[Mono 1.9:http://www.mono-project.com/Main_Page]]をインストールしたときの手順。　Feisty Fawnでパッケージからインストールできるバージョンは1.2.1と若干古いので、ソースからインストールした。　またインストール先は/usr/localとした。</span><br />
<span></span><br />
<span>-関連するページ</span><br />
<ins>--[[programming/mono/install_1.9.1]]</ins><br />
<span>--[[programming/mono/install_1.2.6]]</span><br />
<span>--[[programming/mono/install_monodevelop_1.0]]</span><br />
<span>--[[programming/mono/install_monodevelop_0.18]]</span><br />
<span>コンパイル時に必要となるパッケージをあらかじめSynapticないしはapt-getでインストールしておく。　必要になるものは以下のパッケージ。</span><br />
<span></span><br />
<span>-libgdiplusが必要とするもの</span><br />
<ins>--libcairo2-dev</ins><br />
<ins>--libexif-dev</ins><br />
<ins>--libfreetype6-dev</ins><br />
<ins>--libfontconfig1-dev</ins><br />
<span>--libglib2.0-dev</span><br />
<del>--libungif4-dev</del><br />
<span>--libjpeg62-dev</span><br />
<ins>--libpng12-dev</ins><br />
<span>--libtiff4-dev</span><br />
<del>--libexif-dev</del><br />
<ins>--libungif4-dev</ins><br />
<ins>--libx11-dev</ins><br />
<ins>--libxrender-dev</ins><br />
<span>-Monoが必要とするもの</span><br />
<span>--bison</span><br />
<span>-共通して必要とするもの</span><br />
<span>--libgtk2.0-dev</span><br />
<span>--libcairo2-dev</span><br />
<span>-gnome-sharpが必要とするもの</span><br />
<ins>--gtkhtml3.8</ins><br />
<span>--libgnome2-dev</span><br />
<span>--libgnome-desktop-dev</span><br />
<span>--libgnome-menu-dev</span><br />
<span> gtksourceview-sharp, Version=1.0.0.2, Culture=neutral, PublicKeyToken=35e10195dab3c99f</span><br />
<span> monodoc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756</span><br />
<span>    :</span><br />
<ins></ins><br />
<ins>**設定ファイルの変更</ins><br />
<ins>必要に応じて設定ファイルを変更する。</ins><br />
<ins></ins><br />
<ins>***/etc/ld.so.conf</ins><br />
<ins>インストールしたパスを追記。</ins><br />
<ins> /usr/local/lib</ins><br />
<ins></ins><br />
<ins>***~/.bashrc</ins><br />
<ins>環境変数LD_LIBRARY_PATHを追記。</ins><br />
<ins> export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH</ins><br />
<ins></ins><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Programming/Mono/Mono 1.2.6のインストール」を更新</title>
      <description>「Programming/Mono/Mono 1.2.6のインストール」を更新</description>
      <link>http://smdn.invisiblefulmoon.net/programming/mono/install_1.2.6/</link>
      <pubDate>Mon, 28 Apr 2008 22:30:05 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/programming/mono/install_1.2.6/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/mono/install_1.2.6/">programming/mono/install_1.2.6</a></h2>
<p><code>
<span>Ubuntu 7.04 Feisty Fawnに[[Mono 1.2.6:http://www.mono-project.com/Main_Page]]をインストールしたときの手順。　Feisty Fawnでパッケージからインストールできるバージョンは1.2.1と若干古いので、ソースからインストールした。　またインストール先は/usr/localとした。</span><br />
<span></span><br />
<span>-関連するページ</span><br />
<ins>--[[programming/mono/install_1.9.1]]</ins><br />
<span>--[[programming/mono/install_1.9]]</span><br />
<span>--[[programming/mono/install_monodevelop_1.0]]</span><br />
<span>--[[programming/mono/install_monodevelop_0.18]]</span><br />
<span> monodoc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756</span><br />
<span>    :</span><br />
<span></span><br />
<ins>**設定ファイルの変更</ins><br />
<ins>必要に応じて設定ファイルを変更する。</ins><br />
<span></span><br />
<ins>***/etc/ld.so.conf</ins><br />
<ins>インストールしたパスを追記。</ins><br />
<ins> /usr/local/lib</ins><br />
<ins></ins><br />
<ins>***~/.bashrc</ins><br />
<ins>環境変数LD_LIBRARY_PATHを追記。</ins><br />
<ins> export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH</ins><br />
<ins></ins><br />
<span>**参考サイト</span><br />
<span>-[[Install Mono 1.2.6 on Ubuntu 7.10:http://blog.ruski.co.za/page/Install-Mono-126-on-Ubuntu-710.aspx]]</span><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Programming/Mono/MonoDevelop 1.0のインストール」を更新</title>
      <description>「Programming/Mono/MonoDevelop 1.0のインストール」を更新</description>
      <link>http://smdn.invisiblefulmoon.net/programming/mono/install_monodevelop_1.0/</link>
      <pubDate>Mon, 28 Apr 2008 22:27:15 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/programming/mono/install_monodevelop_1.0/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/mono/install_monodevelop_1.0/">programming/mono/install_monodevelop_1.0</a></h2>
<p><code>
<span>${smdncms:tags,MonoDevelop,1.0,インストール}</span><br />
<span>*MonoDevelop 1.0のインストール</span><br />
<del>Ubuntu 7.04 Feisty Fawnに[[MonoDevelop 1.0:http://www.monodevelop.com/Main_Page]]をインストールしたときの手順。　パッケージは用いずソースからインストールした。　またインストール先は/usr/localとした。</del><br />
<ins>Ubuntu 8.04 Hardy Heronに[[MonoDevelop 1.0:http://www.monodevelop.com/Main_Page]]をインストールしたときの手順。　パッケージは用いずソースからインストールした。　またインストール先は/usr/localとした。</ins><br />
<span>-関連するページ</span><br />
<span>--[[programming/mono/install_monodevelop_0.18]]</span><br />
<span>--[[programming/mono/install_1.9]]</span><br />
<span>--[[programming/mono/install_1.2.6]]</span><br />
<span></span><br />
<ins>※Ubuntu 7.04 Feisty Fawnでも同じ手順でインストールできます。</ins><br />
<ins></ins><br />
<span>**MonoDevelopが必要とするアセンブリのインストール</span><br />
<span>MonoDevelopが必要とするアセンブリをあらかじめインストールしておく。　必要になるものは以下のアセンブリ。</span><br />
<span>-MonoDevelopが必要とするアセンブリ</span><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Linux/Ubuntu/Ubuntu 8.04 初期設定メモ」を追加</title>
      <description>「Linux/Ubuntu/Ubuntu 8.04 初期設定メモ」を追加</description>
      <link>http://smdn.invisiblefulmoon.net/linux/ubuntu/</link>
      <pubDate>Mon, 28 Apr 2008 22:24:35 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/linux/ubuntu/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/linux/ubuntu/">linux/ubuntu</a></h2>
<p><code>
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/linux/ubuntu/initialconfig_hardy/">linux/ubuntu/initialconfig_hardy</a></h2>
<p><code>
<ins>${smdncms:tags,Ubuntu 8.04,Hardy Heron,初期設定}</ins><br />
<ins>*Ubuntu 8.04 初期設定メモ</ins><br />
<ins>Ubuntu 8.04 Hardy Heronの初期設定メモ。　ハードディスクへのインストール後に設定したことなどの自分用メモ。　Ubuntu 7.04 Feisty Fawnからのアップグレードではなく、バックアップを取ったあとパーティションを再作成してクリーンインストールした。</ins><br />
<ins></ins><br />
<ins>-関連するページ</ins><br />
<ins>--[[linux/ubuntu/initialconfig]]</ins><br />
<ins></ins><br />
<ins>**サービス・システム設定</ins><br />
<ins>***ネットワーク設定</ins><br />
<ins>+ネットワーク設定を変更</ins><br />
<ins>++DHCPからIPアドレス指定に変更</ins><br />
<ins>++ゲートウェイ、ホスト名、ドメイン名、DNSサーバを設定</ins><br />
<ins></ins><br />
<ins>IPアドレス指定でホスト名・ドメイン名で変更した場合、sudo出来なくなる場合がある。　対処法:[[Ubuntu日本語フォーラム / Hardyにしたら端末でsudoできない:http://forum.ubuntulinux.jp/viewtopic.php?pid=11409]]</ins><br />
<ins></ins><br />
<ins>***Synapticパッケージマネージャ設定</ins><br />
<ins>+設定</ins><br />
<ins>++全般</ins><br />
<ins>+++メインウィンドウ内でパッケージ情報を表示する</ins><br />
<ins>+++変更のを正常に適用できた場合に終了の確認をする</ins><br />
<ins>+リポジトリ</ins><br />
<ins>++Ubuntuのソフトウェア</ins><br />
<ins>+++main, universe, restricted, multiverse</ins><br />
<ins>+++「CD-ROM/DVDからのインストール」しない</ins><br />
<ins>++アップデート</ins><br />
<ins>+++アップデートをチェック 2日毎</ins><br />
<ins>+++インストールできるアップデートを通知のみする</ins><br />
<ins></ins><br />
<ins>設定が終わったら「再読込」でパッケージ情報を更新、アップデート・マネージャで念のため更新チェックする。</ins><br />
<ins></ins><br />
<ins>***サービス設定</ins><br />
<ins>+以下のサービスだけ起動する</ins><br />
<ins>++powernowd</ins><br />
<ins>++anacron</ins><br />
<ins>++alsa-utils</ins><br />
<ins>++gdm</ins><br />
<ins>++dbus</ins><br />
<ins>++hotkey-setup</ins><br />
<ins>++avahi-daemon</ins><br />
<ins>++klogd</ins><br />
<ins>++sysklogd</ins><br />
<ins>++acpid</ins><br />
<ins>++apmd</ins><br />
<ins>+停止するサービス</ins><br />
<ins>++bluetooth</ins><br />
<ins>++atd</ins><br />
<ins>++apport</ins><br />
<ins>++cupsys</ins><br />
<ins>+開始するサービス</ins><br />
<ins>++alsa-utils</ins><br />
<ins></ins><br />
<ins>***日付と時刻の設定</ins><br />
<ins>+設定を「インターネット上のサーバと同期させる」に変更</ins><br />
<ins>+「NTPサポートのインストール」する</ins><br />
<ins>+NTPサーバを設定</ins><br />
<ins></ins><br />
<ins>***キーボード・マウス・ディスプレイ・サウンド</ins><br />
<ins>+キーボードの設定を変更</ins><br />
<ins>+マウスの設定を変更</ins><br />
<ins>+画面の解像度の設定を変更</ins><br />
<ins>+スクリーンセーバーの設定を変更</ins><br />
<ins>+電源管理の設定を変更</ins><br />
<ins>++AC電源使用時</ins><br />
<ins>+++「システムをスリープ」しない</ins><br />
<ins>+++「画面をスリープ」しない</ins><br />
<ins>++全般</ins><br />
<ins>+++「電源ボタンを押したら」→「ダイアログを表示する」</ins><br />
<ins>+++「通知エリア」→「バッテリーを使用している時だけアイコンを表示する」</ins><br />
<ins>+効果音の設定</ins><br />
<ins>++各デバイスをテスト</ins><br />
<ins>++ミキシングが正常に動作することを確認</ins><br />
<ins></ins><br />
<ins>***セッション</ins><br />
<ins>+セッション初期設定</ins><br />
<ins>++「自動起動するプログラム」から下記のもの以外を削除</ins><br />
<ins>+++Check for new hardware drivers</ins><br />
<ins>+++Network Manager</ins><br />
<ins>+++PulseAudio Session Management</ins><br />
<ins>+++Update Notifier</ins><br />
<ins>+++ボリュームの管理</ins><br />
<ins>+++電源の管理</ins><br />
<ins></ins><br />
<ins>***検索とインデックス化</ins><br />
<ins>一切無効にする。</ins><br />
<ins></ins><br />
<ins>***SCIM入力メソッドの設定</ins><br />
<ins>+フロントエンド/全体設定</ins><br />
<ins>++「SCIM開始」をZenkaku_Hankakuのみに変更</ins><br />
<ins>+IMエンジン/Anthy</ins><br />
<ins>++キーバインドテーマをATOKに変更</ins><br />
<ins></ins><br />
<ins>***再起動</ins><br />
<ins>ここまででいったん再起動。　再起動後にps, topで必要なさそうなプロセスが動いてないかチェックする。</ins><br />
<ins></ins><br />
<ins>**ソフトウェアのインストール・環境設定</ins><br />
<ins>***端末・エディタの設定</ins><br />
<ins>~~/.bashrcに以下追記</ins><br />
<ins> alias rm=&apos;rm -i&apos;</ins><br />
<ins> alias cp=&apos;cp -i&apos;</ins><br />
<ins> alias mv=&apos;mv -i&apos;</ins><br />
<ins> </ins><br />
<ins> PS1=&apos;\!&gt; \u@\h [\t \w]\$ &apos;</ins><br />
<ins></ins><br />
<ins>以下の内容で~/.vimrc作成</ins><br />
<ins> set encoding=utf-8</ins><br />
<ins> set fileencoding=utf-8</ins><br />
<ins> set fileencodings=utf-8,cp932,iso-2022-jp,euc-jp</ins><br />
<ins> </ins><br />
<ins> set backspace=2</ins><br />
<ins> set tabstop=2</ins><br />
<ins> set shiftwidth=4</ins><br />
<ins> set expandtab</ins><br />
<ins> </ins><br />
<ins> highlight tabs ctermbg=green guibg=green</ins><br />
<ins> </ins><br />
<ins> set list</ins><br />
<ins> set number</ins><br />
<ins> set ruler</ins><br />
<ins> set smartindent</ins><br />
<ins></ins><br />
<ins>デフォルトのエディタをvimにする</ins><br />
<ins> $ sudo update-alternatives --config editor</ins><br />
<ins> </ins><br />
<ins> `editor&apos; を提供する 3 個の alternatives があります。</ins><br />
<ins> </ins><br />
<ins>   選択肢       alternative</ins><br />
<ins> -----------------------------------------------</ins><br />
<ins>           1    /usr/bin/vim.tiny</ins><br />
<ins>           2    /bin/ed</ins><br />
<ins> *+        3    /bin/nano</ins><br />
<ins> </ins><br />
<ins> デフォルト[*] のままにするには Enter、さもなければ選択肢の番号のキーを押してください: 1</ins><br />
<ins> Using &apos;/usr/bin/vim.tiny&apos; to provide &apos;editor&apos;.</ins><br />
<ins></ins><br />
<ins>***必要なソフトウェア</ins><br />
<ins>apt-getでまとめてインストール。　開発に使うツールなど。</ins><br />
<ins> sudo apt-get install \</ins><br />
<ins> amarok \</ins><br />
<ins> amarok-engines \</ins><br />
<ins> autoconf \</ins><br />
<ins> automake1.9 \</ins><br />
<ins> autotools-dev \</ins><br />
<ins> bison \</ins><br />
<ins> build-essential \</ins><br />
<ins> cadaver \</ins><br />
<ins> dovecot-common \</ins><br />
<ins> dovecot-imapd \</ins><br />
<ins> easytag \</ins><br />
<ins> gedit-plugins \</ins><br />
<ins> gettext \</ins><br />
<ins> gstreamer0.10-ffmpeg \</ins><br />
<ins> gstreamer0.10-plugins-ugly \</ins><br />
<ins> lha \</ins><br />
<ins> lighttpd \</ins><br />
<ins> mysql-common \</ins><br />
<ins> mysql-client-5.0 \</ins><br />
<ins> ngrep \</ins><br />
<ins> nkf \</ins><br />
<ins> ntpdate \</ins><br />
<ins> openntpd \</ins><br />
<ins> openvpn \</ins><br />
<ins> postfix \</ins><br />
<ins> rsync \</ins><br />
<ins> ruby1.8 \</ins><br />
<ins> samba \</ins><br />
<ins> samba-common \</ins><br />
<ins> smbfs \</ins><br />
<ins> subversion \</ins><br />
<ins> svk \</ins><br />
<ins> telnetd \</ins><br />
<ins> tree \</ins><br />
<ins> thunderbird \</ins><br />
<ins> thunderbird-gnome-support \</ins><br />
<ins> unrar-free \</ins><br />
<ins> wine \</ins><br />
<ins> xinetd \</ins><br />
<ins> xpdf \</ins><br />
<ins> xpdf-japanese</ins><br />
<ins></ins><br />
<ins>***~下の設定ファイル復元</ins><br />
<ins>退避しておいた以下の設定ファイル類を復元する。</ins><br />
<ins> .anthy/</ins><br />
<ins> .config/MonoDevelop/</ins><br />
<ins> .easytag/</ins><br />
<ins> .kde/</ins><br />
<ins> .icons/</ins><br />
<ins> .mono/</ins><br />
<ins> .mozilla/</ins><br />
<ins> .mozilla-thunderbird/</ins><br />
<ins> .ssh/</ins><br />
<ins> .subversion/</ins><br />
<ins> .themes/</ins><br />
<ins></ins><br />
<ins>***/etc配下の設定ファイル編集</ins><br />
<ins>/etc/hosts</ins><br />
<ins></ins><br />
<ins></ins><br />
<ins>/etc/hosts.deny</ins><br />
<ins> ALL : ALL</ins><br />
<ins></ins><br />
<ins>/etc/hosts.allow</ins><br />
<ins> in.telnetd : 127.0.0.1 192.168.1.0/24</ins><br />
<ins> svnserve : 127.0.0.1 192.168.1.0/24</ins><br />
<ins> rsync : 127.0.0.1 192.168.1.0/24</ins><br />
<ins></ins><br />
<ins>/etc/ld.so.conf追記</ins><br />
<ins> /usr/local/lib</ins><br />
<ins></ins><br />
<ins>/etc/fstabにSamba共有ディレクトリのエントリを追加。　Ubuntu 7.04から8.04に移行する場合、7.04の設定のままではエラーメッセージが出る。　次のオプションを書き換える必要がある。</ins><br />
<ins>:fmask=xxx,dmask=yyy|file_mode=0xxx,dir_mode=0yyyに書き換え</ins><br />
<ins>:codepage|削除</ins><br />
<ins></ins><br />
<ins>すべてマウント</ins><br />
<ins> sudo mount -a</ins><br />
<ins></ins><br />
<ins>***~下の不要なディレクトリを削除する</ins><br />
<ins>「デスクトップ」を含めデフォルトで作成されるディレクトリの表記を英語にする。</ins><br />
<ins> LANG=C xdg-user-dirs-gtk-update</ins><br />
<ins>表示されるダイアログにしたがって変更すればOK。　変更したら、Desktop以外を削除する。　まず削除する前に、削除しても二度と作成させないようにする。</ins><br />
<ins> $ sudo vi /etc/xdg/user-dirs.conf</ins><br />
<ins> enabled=False # TrueからFalseに変更</ins><br />
<ins></ins><br />
<ins>Desktop以外を削除する。</ins><br />
<ins> rm -r Examples  Documents  Music  Pictures  Public  Templates  Videos</ins><br />
<ins></ins><br />
<ins>変更したらいったんログアウトしてGnomeを再起動する</ins><br />
<ins></ins><br />
<ins>-参考</ins><br />
<ins>--[[ホームディレクトリのフォルダ名を日本語から英語に変更するには − ＠IT:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a077changelang.html]]</ins><br />
<ins>--[[ホームディレクトリ下のフォルダ作成を停止するには − ＠IT:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a042folder.html]]</ins><br />
<ins></ins><br />
<ins>***マウントしたデバイスのアイコンを非表示にする</ins><br />
<ins>gconf-editorで/apps/nautilus/desktop/volumes_visibleのチェックをオフにする</ins><br />
<ins></ins><br />
<ins>***Ctrl+Alt+Delでスクリーンのロックが起動するようにする</ins><br />
<ins> gconftool-2 -t str --set /apps/metacity/global_keybindings/run_command_9 &quot;&lt;Control&gt;&lt;Alt&gt;Delete&quot;</ins><br />
<ins> gconftool-2 -t str --set /apps/metacity/keybinding_commands/command_9 &quot;gnome-screensaver-command -l&quot;</ins><br />
<ins></ins><br />
<ins>***お気に入りのアプリを変更</ins><br />
<ins>+「ウェブ・ブラウザ」をFirefoxに変更</ins><br />
<ins>+「メール・クライアント」をThunderbirdに変更</ins><br />
<ins></ins><br />
<ins>***外観の設定</ins><br />
<ins>Windows Vistaから「メイリオ」をコピーしてインストール、等幅フォントは[[Arisaka 等幅:http://www.geocities.jp/osakaforwin/]]をインストール</ins><br />
<ins> sudo cp miryo*.ttc /usr/share/fonts/truetype/</ins><br />
<ins> sudo cp ARISAKA*.ttf /usr/share/fonts/truetype/</ins><br />
<ins> sudo xset fp rehash</ins><br />
<ins></ins><br />
<ins>あとは適当にテーマ・アイコン等を変更。</ins><br />
<ins>+[[Art.gnome.org:http://art.gnome.org/]]</ins><br />
<ins>+[[GNOME-Look.org:http://www.gnome-look.org/]]</ins><br />
<ins>++GDM EarthLights</ins><br />
<ins>++Control Moomex-Ultimatum</ins><br />
<ins>++Icon Crystal SVG</ins><br />
<ins></ins><br />
<ins>***サーバ設定</ins><br />
<ins>ディレクトリ作成</ins><br />
<ins> sudo mkdir -p /srv/repos /srv/rsync /srv/www</ins><br />
<ins> sudo chmod a+w /srv/r* /srv/w*</ins><br />
<ins></ins><br />
<ins>/etc/xinetd.d/telnet</ins><br />
<ins> service telnet</ins><br />
<ins> {</ins><br />
<ins>         disable         = no</ins><br />
<ins>         flags           = REUSE</ins><br />
<ins>         socket_type     = stream</ins><br />
<ins>         user            = telnetd</ins><br />
<ins>         wait            = no</ins><br />
<ins>         server          = /usr/sbin/in.telnetd</ins><br />
<ins>         server_args     = -h</ins><br />
<ins>         only_from       = 192.168.1.0/24 127.0.0.1</ins><br />
<ins>         log_on_failure  += USERID</ins><br />
<ins> }</ins><br />
<ins></ins><br />
<ins>/etc/xinetd.d/svn</ins><br />
<ins> service svn</ins><br />
<ins> {</ins><br />
<ins>         disable         = no</ins><br />
<ins>         socket_type     = stream</ins><br />
<ins>         user            = root</ins><br />
<ins>         wait            = no</ins><br />
<ins>         server          = /usr/bin/svnserve</ins><br />
<ins>         server_args     = -i -r /srv/repos</ins><br />
<ins>         only_from       = 192.168.1.0/24 127.0.0.1</ins><br />
<ins>         log_on_failure  += USERID</ins><br />
<ins> }</ins><br />
<ins></ins><br />
<ins>/etc/xinetd.d/rsync</ins><br />
<ins> service rsync</ins><br />
<ins> {</ins><br />
<ins>         disable         = no</ins><br />
<ins>         socket_type     = stream</ins><br />
<ins>         user            = root</ins><br />
<ins>         wait            = no</ins><br />
<ins>         server          = /usr/bin/rsync</ins><br />
<ins>         server_args     = --daemon --config=/etc/rsyncd.conf</ins><br />
<ins>         only_from       = 192.168.1.0/24 127.0.0.1</ins><br />
<ins>         log_on_failure  += USERID</ins><br />
<ins> }</ins><br />
<ins></ins><br />
<ins>/etc/rsyncd.conf</ins><br />
<ins> hosts allow = 192.168.1.0/24 127.0.0.1</ins><br />
<ins> hosts deny = *</ins><br />
<ins> use chroot = yes</ins><br />
<ins> max connections = 1</ins><br />
<ins></ins><br />
<ins> [rsync]</ins><br />
<ins>         comment = rsync root</ins><br />
<ins>         path = /srv/rsync</ins><br />
<ins>         uid = santamarta</ins><br />
<ins>         gid = santamarta</ins><br />
<ins>         read only = yes</ins><br />
<ins></ins><br />
<ins>xinetd再起動</ins><br />
<ins> /etc/init.d/xinetd restart</ins><br />
<ins></ins><br />
<ins>/etc/lighttpd/lighttpd.conf</ins><br />
<ins> # server.modulesに追加</ins><br />
<ins> &quot;mod_cgi&quot;,</ins><br />
<ins> &quot;mod_setenv&quot;,</ins><br />
<ins> </ins><br />
<ins> # document-rootを変更</ins><br />
<ins> server.document-root       = &quot;/srv/www/&quot;</ins><br />
<ins> </ins><br />
<ins> # CGI設定追記</ins><br />
<ins> $HTTP[&quot;remoteip&quot;] == &quot;192.168.1.0/24&quot; {</ins><br />
<ins>   cgi.assign  =</ins><br />
<ins>   cgi.assign +=</ins><br />
<ins> }</ins><br />
<ins> else $HTTP[&quot;remoteip&quot;] != &quot;192.168.1.0/24&quot; {</ins><br />
<ins>   url.access-deny =</ins><br />
<ins> }</ins><br />
<ins> </ins><br />
<ins> # index.xhtml追加</ins><br />
<ins> index-file.names           = ( &quot;index.xhtml&quot;, &quot;index.php&quot;, &quot;index.html&quot;,</ins><br />
<ins>                                &quot;index.htm&quot;, &quot;default.htm&quot;,</ins><br />
<ins>                                &quot;index.lighttpd.html&quot; )</ins><br />
<ins></ins><br />
<ins>lighttpd再起動</ins><br />
<ins> /etc/init.d/lighttpd restart</ins><br />
<ins></ins><br />
<ins>***Ruby</ins><br />
<ins>Ruby 1.8とRuby 1.9をインストールする場合、どちらか使用する方にリンクを張り替える。</ins><br />
<ins> sudo unlink /usr/bin/ruby</ins><br />
<ins> sudo ln -s /usr/bin/ruby1.9 /usr/bin/ruby</ins><br />
<ins> ruby -v</ins><br />
<ins></ins><br />
<ins>***Mono, MonoDevelop</ins><br />
<ins>-[[programming/mono/install_1.9.1]]</ins><br />
<ins>-[[programming/mono/install_monodevelop_1.0]]</ins><br />
<ins></ins><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>「Programming/Mono/Mono 1.9.1のインストール」を追加</title>
      <description>「Programming/Mono/Mono 1.9.1のインストール」を追加</description>
      <link>http://smdn.invisiblefulmoon.net/programming/mono/</link>
      <pubDate>Mon, 28 Apr 2008 22:11:33 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/programming/mono/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/mono/">programming/mono</a></h2>
<p><code>
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/mono/install_1.9.1/">programming/mono/install_1.9.1</a></h2>
<p><code>
<ins>${smdncms:tags,Mono,1.9.1,インストール}</ins><br />
<ins>*Mono 1.9.1のインストール</ins><br />
<ins>Ubuntu 8.04 Hardy Heronに[[Mono 1.9.1:http://www.mono-project.com/Main_Page]]をインストールしたときの手順。　Hardy Heronでパッケージからインストールできるバージョンは1.2.6と若干古いので、ソースからインストールした。　またインストール先は/usr/localとした。</ins><br />
<ins></ins><br />
<ins>-関連するページ</ins><br />
<ins>--[[programming/mono/install_1.9]]</ins><br />
<ins>--[[programming/mono/install_1.2.6]]</ins><br />
<ins>--[[programming/mono/install_monodevelop_1.0]]</ins><br />
<ins>--[[programming/mono/install_monodevelop_0.18]]</ins><br />
<ins></ins><br />
<ins>**Monoコアライブラリのインストール</ins><br />
<ins>Monoを使用する上で最低限必要なライブラリのインストール。</ins><br />
<ins></ins><br />
<ins>***必要なパッケージ</ins><br />
<ins>コンパイル時に必要となるパッケージをあらかじめSynapticないしはapt-getでインストールしておく。　必要になるものは以下のパッケージ。</ins><br />
<ins></ins><br />
<ins>-libgdiplusが必要とするもの</ins><br />
<ins>--libcairo2-dev</ins><br />
<ins>--libexif-dev</ins><br />
<ins>--libfreetype6-dev</ins><br />
<ins>--libfontconfig1-dev</ins><br />
<ins>--libglib2.0-dev</ins><br />
<ins>--libjpeg62-dev</ins><br />
<ins>--libpng12-dev</ins><br />
<ins>--libtiff4-dev</ins><br />
<ins>--libungif4-dev</ins><br />
<ins>--libx11-dev</ins><br />
<ins>--libxrender-dev</ins><br />
<ins>-Monoが必要とするもの</ins><br />
<ins>--bison</ins><br />
<ins>-共通して必要とするもの</ins><br />
<ins>--pkg-config</ins><br />
<ins>--build-essential</ins><br />
<ins></ins><br />
<ins>***libgdiplus</ins><br />
<ins> wget http://go-mono.com/sources/libgdiplus/libgdiplus-1.9.tar.bz2</ins><br />
<ins> tar -xvf libgdiplus-1.9.tar.bz2 </ins><br />
<ins> cd libgdiplus-1.9/</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureした結果で依存関係に問題(noと表示される箇所)がないことを確認する。</ins><br />
<ins></ins><br />
<ins> Configuration summary</ins><br />
<ins> </ins><br />
<ins>    * Installation prefix = /usr/local</ins><br />
<ins>    * Cairo = internal</ins><br />
<ins>    * Text = cairo</ins><br />
<ins>    * EXIF tags = yes</ins><br />
<ins>    * Codecs supported:</ins><br />
<ins> </ins><br />
<ins>       - TIFF: yes</ins><br />
<ins>       - JPEG: yes</ins><br />
<ins>       - GIF: yes</ins><br />
<ins>       - PNG: yes</ins><br />
<ins>       NOTE: if any of the above say &apos;no&apos; you may install the</ins><br />
<ins>             corresponding development packages for them, rerun</ins><br />
<ins>             autogen.sh to include them in the build.</ins><br />
<ins></ins><br />
<ins>問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>***Mono</ins><br />
<ins> wget http://go-mono.com/sources/mono/mono-1.9.1.tar.bz2</ins><br />
<ins> tar -xvf mono-1.9.1.tar.bz2</ins><br />
<ins> cd mono-1.9.1/</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureの結果例。</ins><br />
<ins></ins><br />
<ins>         mcs source:    $(top_srcdir)/mcs</ins><br />
<ins>         olive source:  </ins><br />
<ins> </ins><br />
<ins>         GC:         included</ins><br />
<ins>         TLS:         __thread</ins><br />
<ins>         SIGALTSTACK: yes</ins><br />
<ins>         Engine:      Building and using the JIT</ins><br />
<ins>         2.0 Beta:    yes</ins><br />
<ins>         2.1 Alpha:   yes</ins><br />
<ins>         JNI support: IKVM Native</ins><br />
<ins>         libgdiplus:  assumed to be installed</ins><br />
<ins>         zlib:        system zlib</ins><br />
<ins>         oprofile:    no</ins><br />
<ins></ins><br />
<ins>configureに成功したら、make make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>インストールが完了したら、mono -Vでmonoが動作することを確認する。</ins><br />
<ins></ins><br />
<ins> # mono -V</ins><br />
<ins> Mono JIT compiler version 1.9.1</ins><br />
<ins> Copyright 2002-2007 Novell, Inc and Contributors. www.mono-project.com</ins><br />
<ins>         TLS:           __thread</ins><br />
<ins>         GC:            Included Boehm</ins><br />
<ins>         SIGSEGV:       altstack</ins><br />
<ins>         Notifications: epoll</ins><br />
<ins>         Architecture:  x86</ins><br />
<ins>         Disabled:      none</ins><br />
<ins></ins><br />
<ins>またgacutil -lでアセンブリがGACに登録されていることを確認する。</ins><br />
<ins></ins><br />
<ins> # gacutil -l</ins><br />
<ins> The following assemblies are installed into the GAC:</ins><br />
<ins>   :</ins><br />
<ins> System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ins><br />
<ins> System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ins><br />
<ins> System, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ins><br />
<ins> System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</ins><br />
<ins> System.Configuration.Install, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</ins><br />
<ins> System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</ins><br />
<ins> System.Core, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ins><br />
<ins> System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ins><br />
<ins>   :</ins><br />
<ins></ins><br />
<ins>**その他のアセンブリのインストール</ins><br />
<ins>他のMonoアプリケーションが必要とするアセンブリのインストール。</ins><br />
<ins></ins><br />
<ins>***必要なパッケージ</ins><br />
<ins>コンパイル時に必要となるパッケージをあらかじめSynapticないしはapt-getでインストールしておく。　必要になるものは以下のパッケージ。</ins><br />
<ins></ins><br />
<ins>-gtk-sharpが必要とするもの</ins><br />
<ins>--libglade2-dev</ins><br />
<ins>--libgtk2.0-dev</ins><br />
<ins>--libpango1.0-dev</ins><br />
<ins>-gnome-sharpが必要とするもの</ins><br />
<ins>--gtkhtml3.8</ins><br />
<ins>--libgnome2-dev</ins><br />
<ins>--libgnome-desktop-dev</ins><br />
<ins>--libgnome-menu-dev</ins><br />
<ins>--libgnomecanvas2-dev</ins><br />
<ins>--libgnomedb3-dev</ins><br />
<ins>--libgnomeprint2.2-dev</ins><br />
<ins>--libgnomeprintui2.2-dev</ins><br />
<ins>--libgnomeui-dev</ins><br />
<ins>--libgtkhtml3.8-dev</ins><br />
<ins>--libgsf-1-dev</ins><br />
<ins>--libgtkhtml3.8-dev</ins><br />
<ins>--libpanel-applet2-dev</ins><br />
<ins>--librsvg2-dev</ins><br />
<ins>--libtool</ins><br />
<ins>--libvte-dev</ins><br />
<ins>-gtksourceview-sharpが必要とするもの</ins><br />
<ins>--libgtksourceview-dev</ins><br />
<ins>-gluezillaが必要とするもの</ins><br />
<ins>--libxul-dev</ins><br />
<ins>--libnss3-dev</ins><br />
<ins>--libnspr4-dev</ins><br />
<ins></ins><br />
<ins>***monodoc</ins><br />
<ins> wget http://go-mono.com/sources/monodoc/monodoc-1.9.zip</ins><br />
<ins> unzip monodoc-1.9.zip</ins><br />
<ins> cd monodoc-1.9/</ins><br />
<ins> ./configure</ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>***GtkSharp</ins><br />
<ins> wget http://go-mono.com/sources/gtk-sharp-2.12.0/gtk-sharp-2.12.0.tar.bz2</ins><br />
<ins> tar -xvf gtk-sharp-2.12.0.tar.bz2</ins><br />
<ins> gtk-sharp-2.12.0/</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureした結果で依存関係に問題(noと表示される箇所)がないことを確認する。</ins><br />
<ins></ins><br />
<ins> Configuration summary</ins><br />
<ins> </ins><br />
<ins>    * Installation prefix = /usr/local</ins><br />
<ins>    * C# compiler: /usr/local/bin/mcs  -define:GTK_SHARP_2_6 -define:GTK_SHARP_2_8 -define:GTK_SHARP_2_10 -define:GTK_SHARP_2_12 </ins><br />
<ins> </ins><br />
<ins>    Optional assemblies included in the build:</ins><br />
<ins> </ins><br />
<ins>       * glade-sharp.dll: yes</ins><br />
<ins>       * gtk-dotnet.dll: yes </ins><br />
<ins></ins><br />
<ins>       NOTE: if any of the above say &apos;no&apos; you may install the</ins><br />
<ins>             corresponding development packages for them, rerun</ins><br />
<ins>             autogen.sh to include them in the build.</ins><br />
<ins> </ins><br />
<ins>    * Documentation build enabled: yes </ins><br />
<ins></ins><br />
<ins>問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>***Mono Addins</ins><br />
<ins> wget http://go-mono.com/sources/mono-addins/mono-addins-0.3.1.tar.bz2</ins><br />
<ins> tar -xvf mono-addins-0.3.1.tar.bz2</ins><br />
<ins> cd mono-addins-0.3.1/</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureの結果を確認する。</ins><br />
<ins></ins><br />
<ins> Configuration summary</ins><br />
<ins> </ins><br />
<ins>    * Installation prefix = /usr/local</ins><br />
<ins>    * gui support: yes</ins><br />
<ins>    * unit tests: no</ins><br />
<ins></ins><br />
<ins>問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>***GnomeSharp</ins><br />
<ins> wget http://go-mono.com/sources/gnome-sharp2/gnome-sharp-2.16.1.tar.gz</ins><br />
<ins> tar -xvf gnome-sharp-2.16.1.tar.gz</ins><br />
<ins> cd gnome-sharp-2.16.1/</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureの結果を確認する。</ins><br />
<ins></ins><br />
<ins> Configuration summary</ins><br />
<ins> </ins><br />
<ins>    * Installation prefix = /usr/local</ins><br />
<ins>    * C# compiler: /usr/local/bin/mcs  -define:GTK_SHARP_2_6 -define:GTK_SHARP_2_8 -define:GNOME_SHARP_2_16</ins><br />
<ins> </ins><br />
<ins>    Optional assemblies included in the build:</ins><br />
<ins> </ins><br />
<ins>       * art-sharp.dll: yes</ins><br />
<ins>       * gnomevfs-sharp.dll: yes</ins><br />
<ins>       * gnome-sharp.dll: yes</ins><br />
<ins>       * rsvg-sharp.dll: yes </ins><br />
<ins>       * gtkhtml-sharp.dll: yes </ins><br />
<ins>       * vte-sharp.dll: yes </ins><br />
<ins> </ins><br />
<ins>       NOTE: if any of the above say &apos;no&apos; you may install the</ins><br />
<ins>             corresponding development packages for them, rerun</ins><br />
<ins>             autogen.sh to include them in the build.</ins><br />
<ins> </ins><br />
<ins>             gnome-sharp.dll requires libgnomecanvas, libgnome,</ins><br />
<ins>             libgnomeui, libgnomeprint, libgnomeprintui, and</ins><br />
<ins>             libpanelapplet.</ins><br />
<ins></ins><br />
<ins>問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>***GeckoSharp</ins><br />
<ins> wget http://go-mono.com/sources/gecko-sharp2/gecko-sharp-2.0-0.13.tar.bz2</ins><br />
<ins> tar -xvf gecko-sharp-2.0-0.13.tar.bz2</ins><br />
<ins> cd gecko-sharp-2.0-0.13/</ins><br />
<ins> ./configure </ins><br />
<ins></ins><br />
<ins>configureの結果を確認する。</ins><br />
<ins></ins><br />
<ins> Configuration summary</ins><br />
<ins> </ins><br />
<ins>    * Installation prefix: /usr/local</ins><br />
<ins>    * compiler: /usr/local/bin/mcs</ins><br />
<ins>    * Documentation: yes</ins><br />
<ins></ins><br />
<ins>問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>***mono-tools</ins><br />
<ins> wget http://go-mono.com/sources/mono-tools/mono-tools-1.9.tar.bz2</ins><br />
<ins> tar -xvf mono-tools-1.9.tar.bz2</ins><br />
<ins> cd mono-tools-1.9/</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureの結果を確認する。</ins><br />
<ins></ins><br />
<ins> Configuration summary</ins><br />
<ins> </ins><br />
<ins>    * Installation prefix = /usr/local</ins><br />
<ins>    * gecko-sharp.dll = yes</ins><br />
<ins> </ins><br />
<ins>       NOTE: if any of the above say &apos;no&apos; you may install the</ins><br />
<ins>             corresponding development packages for them, rerun</ins><br />
<ins>             autogen.sh to include them in the build.</ins><br />
<ins></ins><br />
<ins>問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>***gtksourceview-sharp</ins><br />
<ins> wget http://go-mono.com/sources/gtksourceview-sharp2/gtksourceview-sharp-2.0-0.12.tar.bz2</ins><br />
<ins> tar -xvf gtksourceview-sharp-2.0-0.12.tar.bz2</ins><br />
<ins> cd gtksourceview-sharp-2.0-0.12/</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureの結果を確認する。</ins><br />
<ins></ins><br />
<ins> Configuration summary</ins><br />
<ins> </ins><br />
<ins>    * Installation prefix: /usr/local</ins><br />
<ins>    * compiler: /usr/local/bin/mcs</ins><br />
<ins>    * Documentation: yes</ins><br />
<ins></ins><br />
<ins>問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>***gluezilla</ins><br />
<ins> wget http://ftp.novell.com/pub/mono/sources/gluezilla/gluezilla-1.9.1.tar.bz2</ins><br />
<ins> tar -xvf gluezilla-1.9.1.tar.bz2</ins><br />
<ins> cd gluezilla-1.9.1/</ins><br />
<ins> ./configure</ins><br />
<ins></ins><br />
<ins>configureで依存関係のエラーが無いことを確認し、問題が無ければ、make、make installする。</ins><br />
<ins></ins><br />
<ins> make</ins><br />
<ins> sudo make install</ins><br />
<ins></ins><br />
<ins>動作確認をする場合は、tests/browser下でmake testする。</ins><br />
<ins> cd tests/browser</ins><br />
<ins> make test</ins><br />
<ins></ins><br />
<ins>***インストールしたアセンブリのチェック</ins><br />
<ins>gacutil -lでコンパイル・インストールしたアセンブリがGACに登録されていることを確認する。</ins><br />
<ins></ins><br />
<ins> # gacutil -l</ins><br />
<ins>    :</ins><br />
<ins> art-sharp, Version=2.16.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> cscompmgd, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</ins><br />
<ins> cscompmgd, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</ins><br />
<ins> gconf-sharp, Version=2.16.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gconf-sharp-peditors, Version=2.16.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gecko-sharp, Version=2.0.0.0, Culture=neutral, PublicKeyToken=ccf7d78a55e9f021</ins><br />
<ins> glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gnome-sharp, Version=2.16.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gnome-vfs-sharp, Version=2.16.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gtk-dotnet, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gtkhtml-sharp, Version=2.16.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> gtksourceview-sharp, Version=1.0.0.2, Culture=neutral, PublicKeyToken=35e10195dab3c99f</ins><br />
<ins> monodoc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756</ins><br />
<ins>    :</ins><br />
<ins></ins><br />
<ins>**設定ファイルの変更</ins><br />
<ins>必要に応じて設定ファイルを変更する。</ins><br />
<ins></ins><br />
<ins>***/etc/ld.so.conf</ins><br />
<ins>インストールしたパスを追記。</ins><br />
<ins> /usr/local/lib</ins><br />
<ins></ins><br />
<ins>***~/.bashrc</ins><br />
<ins>環境変数LD_LIBRARY_PATHを追記。</ins><br />
<ins> export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH</ins><br />
<ins></ins><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>linux/tipsにDovecotを追加</title>
      <description>linux/tipsにDovecotを追加</description>
      <link>http://smdn.invisiblefulmoon.net/linux/tips/dovecot/</link>
      <pubDate>Sun, 27 Apr 2008 17:24:07 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/linux/tips/dovecot/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/linux/tips/dovecot/">linux/tips/dovecot</a></h2>
<p><code>
<ins>${smdncms:tags,Dovecot}</ins><br />
<ins>*Dovecot</ins><br />
<ins>IMAP/POPサーバ[[Dovecot:http://www.dovecot.org/]]に関するTips。</ins><br />
<ins></ins><br />
<ins>-参考</ins><br />
<ins>--[[FrontPage - Dovecot Wiki:http://wiki.dovecot.org/]]</ins><br />
<ins>--[[メールサーバー構築(Postfix+Dovecot) - Fedoraで自宅サーバー構築:http://fedorasrv.com/postfix.shtml]]</ins><br />
<ins></ins><br />
<ins>**設定ファイル</ins><br />
<ins>***使用するプロトコルを設定する</ins><br />
<ins>protocolsで設定する。　設定出来るのはimap(IMAP), imaps(IMAP+SSL) pop3(POP), pop3s(POP+SSL)。　SSLを使用する場合は、ssl_disableをnoにする。</ins><br />
<ins> protocols = imap imaps</ins><br />
<ins> ssl_disable = no</ins><br />
<ins></ins><br />
<ins>また必要に応じてssl_cert_fileとssl_key_fileも設定する</ins><br />
<ins> ssl_cert_file = /usr/share/ssl/certs/dovecot.pem</ins><br />
<ins> ssl_key_file = /usr/share/ssl/certs/dovecot.pem</ins><br />
<ins></ins><br />
<ins>***メールボックスの形式・パスを設定する</ins><br />
<ins>mail_locationで設定する。　Maildir形式を使用する場合はmaildir、:に続けてパスを指定する。　%hはユーザ名に展開される。</ins><br />
<ins> mail_location = maildir:%h/Maildir</ins><br />
<ins></ins><br />
<ins>***CRAM-MD5, APOP等の認証方法を有効にする</ins><br />
<ins>まずmechanismsで使用したい認証方法、passdb passwd-fileセクションで認証に使用するパスワードファイルをを設定する。</ins><br />
<ins> auth default {</ins><br />
<ins>   mechanisms = login plain cram-md5 apop anonymous</ins><br />
<ins>   passdb passwd-file {</ins><br />
<ins>     args = /etc/dovecot/passwd</ins><br />
<ins>   }</ins><br />
<ins> }</ins><br />
<ins>次に、dovecotpwコマンドでパスワードファイルに記入するパスワードを作成する。</ins><br />
<ins> $ dovecotpw -s CRAM-MD5</ins><br />
<ins> Enter new password:     # ここでパスワードを入力</ins><br />
<ins> Retype new password:    # 確認のためもう一度入力</ins><br />
<ins> {CRAM-MD5}a9f061d1dbbda6f500f99b019d8c3ba7236507d4bcaecf6cfc9e21c36d5402e3</ins><br />
<ins></ins><br />
<ins>作成するパスワードに使用できるスキームは-lオプションで一覧できる。</ins><br />
<ins> $ dovecotpw -l</ins><br />
<ins> CRYPT MD5 MD5-CRYPT SHA SHA1 SMD5 SSHA PLAIN CLEARTEXT CRAM-MD5 HMAC-MD5 DIGEST-MD5 PLAIN-MD4 PLAIN-MD5 LDAP-MD5 LANMAN NTLM RPA</ins><br />
<ins></ins><br />
<ins>作成したパスワードを先ほど設定したパスワードファイルに書き込む。　書式は「ユーザ名:パスワード」</ins><br />
<ins> dovecotuser:{CRAM-MD5}a9f061d1dbbda6f500f99b019d8c3ba7236507d4bcaecf6cfc9e21c36d5402e3</ins><br />
<ins> dovecotuser:{PLAIN}password</ins><br />
<ins></ins><br />
<ins>書き込み終わったらパーミッションを読み取り専用に変えておく。</ins><br />
<ins> $ sudo chmod 400 /etc/dovecot/passwd</ins><br />
<ins></ins><br />
<ins>***PAMによる認証を無効にする</ins><br />
<ins>passdb pamのセクションをコメントアウトする。</ins><br />
<ins> # passdb pam {</ins><br />
<ins>    :</ins><br />
<ins>    :</ins><br />
<ins> # }</ins><br />
<ins></ins><br />
<ins>***SSL/TLSを使用しない接続での平文によるログインを拒否する</ins><br />
<ins>disable_plaintext_authをyes, ssl_disableをnoにする。</ins><br />
<ins> disable_plaintext_auth = yes</ins><br />
<ins> ssl_disable = no</ins><br />
<ins>このように設定すると、IMAP LOGINDISABLED, IMAP STARTTLS, POP STLSの各capabilityを返すようになる。</ins><br />
<ins></ins><br />
<ins>***greeting messageでcapabilityを返すようにする</ins><br />
<ins>login_greeting_capabilityをyesにする。</ins><br />
<ins> protocol imap {</ins><br />
<ins>   login_greeting_capability = yes</ins><br />
<ins></ins><br />
<ins>このように設定すると、クライアントが接続した時(CAPABILITYコマンドを発行する前)にcapabilityを返すようになる。　接続時にDovecotが返すレスポンスは次のようになる。</ins><br />
<ins> * OK [CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS STARTTLS AUTH=LOGIN AUTH=PLAIN AUTH=CRAM-MD5] Dovecot ready.</ins><br />
<ins>noの場合(デフォルト)は次のようになる。</ins><br />
<ins> * OK Dovecot ready.</ins><br />
<ins></ins><br />
<ins>ただしyesに設定してもクライアントがこの機能をサポートしていない場合capabilityは無視され、noに設定した場合と同様に通常どおりCAPABILITYコマンドが発行される。</ins><br />
<ins></ins><br />
<ins>***anonymousでのログインを許可する</ins><br />
<ins>auth_anonymous_usernameにanonymousでログインした場合に参照するメールボックスのユーザを指定し、mechanismsにanonymousを追加する。</ins><br />
<ins> auth_anonymous_username = dovecotuser</ins><br />
<ins> auth default {</ins><br />
<ins>   mechanisms = login plain cram-md5 apop anonymous</ins><br />
<ins></ins><br />
<ins>この設定例だと、anonymousでログインした場合はユーザdovecotuserのメールボックスが参照される。　anonymousでログインしたときに使用されるトークンは/var/log/mail.log(anonymousの後ろの括弧内)に記録される。</ins><br />
<ins> Apr 25 19:58:39 hayami dovecot: auth(default): anonymous(test,127.0.0.1): login</ins><br />
<ins> Apr 25 19:58:39 hayami dovecot: imap-login: Login: user=&lt;dovecotuser&gt;, method=ANONYMOUS, rip=127.0.0.1, lip=127.0.0.1, secured</ins><br />
<ins> Apr 25 20:04:22 hayami dovecot: auth(default): anonymous(idolm@ster.example.com,127.0.0.1): login</ins><br />
<ins> Apr 25 20:04:22 hayami dovecot: imap-login: Login: user=&lt;dovecotuser&gt;, method=ANONYMOUS, rip=127.0.0.1, lip=127.0.0.1, secured</ins><br />
<ins></ins><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>linux/tipsにWineを追加, programming/tipsに「Modified UTF-7のエンコード・デコード」と「CRAM-MD5による認証」を追加</title>
      <description>linux/tipsにWineを追加, programming/tipsに「Modified UTF-7のエンコード・デコード」と「CRAM-MD5による認証」を追加</description>
      <link>http://smdn.invisiblefulmoon.net/linux/tips/wine/</link>
      <pubDate>Sun, 27 Apr 2008 14:59:17 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/linux/tips/wine/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/linux/tips/wine/">linux/tips/wine</a></h2>
<p><code>
<ins>${smdncms:tags,Wine}</ins><br />
<ins>*Wine</ins><br />
<ins>[[Wine:http://www.winehq.org/]]に関するTips</ins><br />
<ins></ins><br />
<ins>**論理ドライブ</ins><br />
<ins>~~/.wine/dosdevices配下にシンボリックリンクを作成することでファイルシステム上の任意のパスを論理ドライブとして参照させることが出来る。　Wineのインストール後はこのようになっていた。</ins><br />
<ins> $ ls -l ~/.wine/dosdevices/</ins><br />
<ins> 合計 0</ins><br />
<ins> lrwxrwxrwx 1 santamarta santamarta 10 2008-04-06 12:20 c: -&gt; ../drive_c</ins><br />
<ins> lrwxrwxrwx 1 santamarta santamarta 13 2008-04-09 19:52 d: -&gt; /media/cdrom0</ins><br />
<ins> lrwxrwxrwx 1 santamarta santamarta  8 2008-04-09 19:52 d:: -&gt; /dev/hdc</ins><br />
<ins> lrwxrwxrwx 1 santamarta santamarta  1 2008-04-06 12:20 z: -&gt; /</ins><br />
<ins></ins><br />
<ins>ディレクトリ/srv/smb/をドライブレターe:の論理ドライブとして参照させるには、次のようにする。</ins><br />
<ins> ln -s /srv/smb/ e:</ins><br />
<ins></ins><br />
<ins>**WMAへのエンコード</ins><br />
<ins>Linuxで使えるWindows Media Audioエンコーダはおそらく存在しないので、Linux上でWMAへエンコードするにはWineを使ってWindows用のWMAエンコーダを使う。　まず[[Windows Media 9 シリーズ - Windows Media Encoding Utility:http://www.microsoft.com/japan/windows/windowsmedia/WM8/encoding.aspx]]からwm8eutil_setup.exeをダウンロードし、インストールする。</ins><br />
<ins> wine wm8eutil_setup.exe</ins><br />
<ins>インストールウィザードが表示されるが、Windowsと同様ウィザードに従って適当に設定して[次へ]で進む。　エンコーダは~/.wine/drive_c/Program Files/Windows Media Components/Tools下にインストールされる。　エンコード例は以下のとおり。</ins><br />
<ins> wine WM8EUTIL.exe -input ~/music.wav -output ~/music.wma -a_setting 96_44_2</ins><br />
<ins>コマンドラインオプションはwine WM8EUTIL.exe /?で確認できる。</ins><br />
<ins> $ wine WM8EUTIL.exe /?</ins><br />
<ins> </ins><br />
<ins> HELP usage for wm8eutil. Use one of the following for how to use wm8eutil.exe.</ins><br />
<ins> </ins><br />
<ins> [-help?]        Display the user help doc for wm8eutil.</ins><br />
<ins> [-all?]         Usage for all settings.</ins><br />
<ins> [-io?]          Usage for Input/Output and config file.</ins><br />
<ins> [-profile?]     Profile numbers and basic descriptions.</ins><br />
<ins> [-profileall?]  Details for all profiles.</ins><br />
<ins> [-profile_aN?]  Details for audio-only profile N.</ins><br />
<ins> [-profile_vN?]  Details for video-only profile N.</ins><br />
<ins> [-profile_avN?] Details for audio/video profile N.</ins><br />
<ins>                   NOTE: It uses the actual bitrate for N.</ins><br />
<ins>                   Example: -profile_a32?.</ins><br />
<ins> [-audio?]       Usage for Audio Codec settings.</ins><br />
<ins> [-video?]       Usage for Video Codec settings.</ins><br />
<ins> [-default?]     All default values for custom settings.</ins><br />
<ins> [-a_default?]   Audio default values for custom settings.</ins><br />
<ins> [-v_default?]   Video default values for custom settings.</ins><br />
<ins> [-cont_desc?]   Usage for how to put content descriptions in the WMV/WMA files.</ins><br />
<ins> [-example?]     Examples for how to use wm8eutil.</ins><br />
<ins> [-a_example?]   Examples for how to use wm8eutil for audio-only encoding.</ins><br />
<ins> [-v_example?]   Examples for how to use wm8eutil for video-only encoding.</ins><br />
<ins> [-av_example?]  Examples for how to use wm8eutil for audio/video encoding.</ins><br />
<ins> [-d_example?]   Examples for how to use wm8eutil for directory mode encoding.</ins><br />
<ins></ins><br />
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/tips/modified_utf7/">programming/tips/modified_utf7</a></h2>
<p><code>
<ins>${smdncms:tags,C#,Modified,修正,UTF-7,UTF7,IMAP-UTF7}</ins><br />
<ins>*Modified UTF-7のエンコード・デコード</ins><br />
<ins>Modified UTF-7は修正 UTF-7, IMAP-UTF7とも呼ばれるもので、IMAPで非ASCII文字を含むメールボックス名をASCII文字のみで表記するためのエンコード方式。　UTF-7へのエンコードはUTF-16文字列中の非ASCII文字のみBase64に変換することで得られるが、Modified UTF-7へのエンコードはUTF-16文字列(ビッグエンディアン)に対して次の変換ルールを適用することで得ることが出来る。</ins><br />
<ins>+&apos;&amp;&apos;は&apos;&amp;-&apos;に変換する</ins><br />
<ins>+&apos;&amp;&apos;を除く印字可能な文字(0x20〜0x25と0x27〜0x7e)はそのまま</ins><br />
<ins>+上記以外の印字不可能な文字は後述するModified Base64に変換し、&apos;&amp;&apos;(shift)と&apos;-&apos;(shift back)で括る</ins><br />
<ins>例えば文字列「INBOX.日本語」を変換するときは、「INBOX.&amp;日本語-」とシフトしたあと「日本語」のところだけModified Base64を適用する。　Modified Base64の変換ルールは次のとおり。</ins><br />
<ins>+基本の変換ルールは通常のBase64と同じ</ins><br />
<ins>+ただし変換テーブルは&apos;/&apos;の代わりに&apos;,&apos;を使う</ins><br />
<ins>+上記ルールで変換した後の文字数が4の倍数にならなくてもパディング(&apos;=&apos;)は入れない</ins><br />
<ins>+印字可能な文字(0x20〜0x25と0x27〜0x7e)にModified Base64を適用してはいけない</ins><br />
<ins>このルールに則り文字列「日本語」を変換すると「ZeVnLIqe」となるので、「INBOX.日本語」をModified UTF-7へエンコードした結果は「INBOX.&amp;ZeVnLIqe-」となる。</ins><br />
<ins></ins><br />
<ins>**C#での実装</ins><br />
<ins>Modified UTF-7へのエンコード(コメントはRFC 3501のsection 5.1.3より抜粋)</ins><br />
<ins> public static string ToModifiedUTF7String(string str)</ins><br />
<ins> {</ins><br />
<ins>   var encoded = new StringBuilder();</ins><br />
<ins>   var shiftFrom = -1;</ins><br />
<ins> </ins><br />
<ins>   for {</ins><br />
<ins>     var c = str[index];</ins><br />
<ins> </ins><br />
<ins>     if {</ins><br />
<ins>       if {</ins><br />
<ins>         // string -&gt; modified UTF7</ins><br />
<ins>         encoded.Append(&apos;&amp;&apos;);</ins><br />
<ins>         encoded.Append(ToModifiedUTF7(str.Substring(shiftFrom, index - shiftFrom)));</ins><br />
<ins>         encoded.Append(&apos;-&apos;);</ins><br />
<ins> </ins><br />
<ins>         shiftFrom = -1;</ins><br />
<ins>       }</ins><br />
<ins> </ins><br />
<ins>       // printable US-ASCII characters</ins><br />
<ins>       if</ins><br />
<ins>         // except for &quot;&amp;&quot;</ins><br />
<ins>         encoded.Append(&quot;&amp;-&quot;);</ins><br />
<ins>       else</ins><br />
<ins>         encoded.Append(c);</ins><br />
<ins>     }</ins><br />
<ins>     else {</ins><br />
<ins>       if</ins><br />
<ins>         shiftFrom = index;</ins><br />
<ins>     }</ins><br />
<ins>   }</ins><br />
<ins> </ins><br />
<ins>   if {</ins><br />
<ins>     // string -&gt; modified UTF7</ins><br />
<ins>     encoded.Append(&apos;&amp;&apos;);</ins><br />
<ins>     encoded.Append(ToModifiedUTF7(str.Substring(shiftFrom)));</ins><br />
<ins>     encoded.Append(&apos;-&apos;);</ins><br />
<ins>   }</ins><br />
<ins> </ins><br />
<ins>   return encoded.ToString();</ins><br />
<ins> }</ins><br />
<ins> </ins><br />
<ins> private static string ToModifiedUTF7(string str)</ins><br />
<ins> {</ins><br />
<ins>   return ToModifiedBase64(Encoding.BigEndianUnicode.GetBytes(str));</ins><br />
<ins> }</ins><br />
<ins> </ins><br />
<ins> private static string ToModifiedBase64(byte[] bytes)</ins><br />
<ins> {</ins><br />
<ins>   var base64 = Convert.ToBase64String(bytes).Replace(&apos;/&apos;, &apos;,&apos;);</ins><br />
<ins>   var padding = base64.IndexOf(&apos;=&apos;);</ins><br />
<ins> </ins><br />
<ins>   if</ins><br />
<ins>     return base64.Substring(0, padding);</ins><br />
<ins>   else</ins><br />
<ins>     return base64;</ins><br />
<ins> }</ins><br />
<ins></ins><br />
<ins>Modified UTF-7からのデコード</ins><br />
<ins> public static string FromModifiedUTF7String(string str)</ins><br />
<ins> {</ins><br />
<ins>   if</ins><br />
<ins>     return str;</ins><br />
<ins> </ins><br />
<ins>   var bytes = Encoding.ASCII.GetBytes(str);</ins><br />
<ins>   var decoded = new StringBuilder();</ins><br />
<ins> </ins><br />
<ins>   for {</ins><br />
<ins>     // In modified UTF-7, printable US-ASCII characters, except for &quot;&amp;&quot;,</ins><br />
<ins>     // represent themselves</ins><br />
<ins>     // &quot;&amp;&quot; is used to shift to modified BASE64</ins><br />
<ins>     if { // &apos;&amp;&apos;</ins><br />
<ins>       decoded.Append((char)bytes[index]);</ins><br />
<ins>       continue;</ins><br />
<ins>     }</ins><br />
<ins> </ins><br />
<ins>     if</ins><br />
<ins>       // incorrect form</ins><br />
<ins>       throw new FormatException(&quot;incorrect form&quot;);</ins><br />
<ins> </ins><br />
<ins>     if { // &apos;-&apos;</ins><br />
<ins>       // The character &quot;&amp;&quot; is represented by the two-octet sequence &quot;&amp;-&quot;.</ins><br />
<ins>       decoded.Append(&apos;&amp;&apos;);</ins><br />
<ins>       continue;</ins><br />
<ins>     }</ins><br />
<ins> </ins><br />
<ins>     var nonprintable = new StringBuilder();</ins><br />
<ins> </ins><br />
<ins>     for {</ins><br />
<ins>       if // &apos;-&apos;</ins><br />
<ins>         // &quot;-&quot; is used to shift back to US-ASCII</ins><br />
<ins>         break;</ins><br />
<ins> </ins><br />
<ins>       nonprintable.Append((char)bytes[index]);</ins><br />
<ins>     }</ins><br />
<ins> </ins><br />
<ins>     // modified UTF7 -&gt; string</ins><br />
<ins>     decoded.Append(FromModifiedUTF7(nonprintable.ToString()));</ins><br />
<ins>   }</ins><br />
<ins> </ins><br />
<ins>   return decoded.ToString();</ins><br />
<ins> }</ins><br />
<ins> </ins><br />
<ins> private static string FromModifiedUTF7(string str)</ins><br />
<ins> {</ins><br />
<ins>   return Encoding.BigEndianUnicode.GetString(FromModifiedBase64(str));</ins><br />
<ins> }</ins><br />
<ins> </ins><br />
<ins> private static byte[] FromModifiedBase64(string str)</ins><br />
<ins> {</ins><br />
<ins>   // &quot;,&quot; is used instead of &quot;/&quot;</ins><br />
<ins>   str = str.Replace(&apos;,&apos;, &apos;/&apos;);</ins><br />
<ins> </ins><br />
<ins>   var padding = 4 - str.Length &amp; 3;</ins><br />
<ins> </ins><br />
<ins>   if</ins><br />
<ins>     return Convert.FromBase64String(str);</ins><br />
<ins>   else if</ins><br />
<ins>     throw new FormatException(&quot;incorrect form&quot;);</ins><br />
<ins>   else</ins><br />
<ins>     return Convert.FromBase64String(str +;</ins><br />
<ins> }</ins><br />
<ins></ins><br />
<ins>**参考資料</ins><br />
<ins>-[[RFC 3501 INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 5.1.3. Mailbox International Naming Convention:http://tools.ietf.org/html/rfc3501#section-5.1.3]]</ins><br />
<ins>-[[Unicode - Wikipedia:http://ja.wikipedia.org/wiki/Unicode]]</ins><br />
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/programming/tips/cram_md5/">programming/tips/cram_md5</a></h2>
<p><code>
<ins>${smdncms:tags,C#,CRAM-MD5}</ins><br />
<ins>*CRAM-MD5による認証</ins><br />
<ins>CRAM-MD5はPOP, IMAPで使用されるチャレンジ・レスポンス方式の認証方法で、HMAC-MD5ハッシュアルゴリズムを用いてパスワードを暗号化する。　IMAPでのAUTHENTICATE CRAM-MD5による認証のシーケンスは次の例のようになる。</ins><br />
<ins> C: 0001 AUTHENTICATE CRAM-MD5</ins><br />
<ins> S: + PDIxMDQ1OTA2MjYzMjA1MjguMTIwMzkzMDcwMkBoYXlhbWk+</ins><br />
<ins> C: c2FudGFtYXJ0YSAzNTY0MzhmMGU0MzhhZDdlZTdhYTZkYzJjYzE5MmIwMg==</ins><br />
<ins> S: 0001 OK Logged in.</ins><br />
<ins>上記の送受信内容をBase64デコードするとこのようになっている。</ins><br />
<ins> S: + &lt;2104590626320528.1203930702@hayami&gt;</ins><br />
<ins> C: santamarta 356438f0e438ad7ee7aa6dc2cc192b02</ins><br />
<ins></ins><br />
<ins>AUTHENTICATEコマンドに対して、サーバからはBase64エンコードされたタイムスタンプとホスト名を含むチャレンジコードが返され、クライアントはユーザ名と、パスワードをキーにしてHMAC-MD5ハッシュアルゴリズムを適用したチャレンジコードをBase64エンコードしてレスポンスとしてを返す。　簡略化して表記するなら</ins><br />
<ins> S: + Base64(チャレンジコード)</ins><br />
<ins> C: Base64(ユーザ名 HMAC-MD5(パスワード, チャレンジコード))</ins><br />
<ins> </ins><br />
<ins> チャレンジコード = &lt;タイムスタンプ@ホスト名&gt;</ins><br />
<ins>のようになる。</ins><br />
<ins></ins><br />
<ins>**C#でのCRAM-MD5認証の実装</ins><br />
<ins>Mono/.NET FrameworkではHMAC-MD5ハッシュ値の計算にSystem.Security.Cryptography.HMACMD5クラスのComputeHashメソッドを用いることが出来る。　次の例は受信したチャレンジコードと、ユーザ名、パスワードを引数としてCRAM-MD5認証のレスポンスを返すメソッド。</ins><br />
<ins></ins><br />
<ins> public string AuthenticateCramMD5(string challenge, string username, string password)</ins><br />
<ins> {</ins><br />
<ins>   // Base64デコードしたチャレンジコードに対してパスワードをキーとしたHMAC-MD5ハッシュ値を計算する</ins><br />
<ins>   var keyed =;</ins><br />
<ins> </ins><br />
<ins>   // 計算したHMAC-MD5ハッシュ値のbyte[]を16進表記の文字列に変換する</ins><br />
<ins>   var digest = string.Empty;</ins><br />
<ins> </ins><br />
<ins>   foreach {</ins><br />
<ins>     digest += octet.ToString(&quot;x02&quot;);</ins><br />
<ins>   }</ins><br />
<ins> </ins><br />
<ins>   // ユーザ名と計算したHMAC-MD5ハッシュ値をBase64エンコードしてレスポンスとして返す</ins><br />
<ins>   return Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format(&quot;{0} {1}&quot;, username, digest)));</ins><br />
<ins> }</ins><br />
<ins></ins><br />
<ins>**C#でのHMAC-MD5の実装</ins><br />
<ins>次の例はRFC 2104で記述されている内容に基づいて作成したHMAC-MD5ハッシュ値の計算を行うメソッド。　System.Security.Cryptography.HMACMD5.ComputeHashメソッドに相当するものを実装したもの。　(コメントはRFCより抜粋)</ins><br />
<ins> public byte[] HmacMd5(byte[] key, byte[] text)</ins><br />
<ins> {</ins><br />
<ins>   const int B = 64;</ins><br />
<ins> </ins><br />
<ins>   // 2. Definition of HMAC</ins><br />
<ins> </ins><br />
<ins>   // The definition of HMAC requires a cryptographic hash function, </ins><br />
<ins>   // which we denote by H,</ins><br />
<ins>   var H = new MD5CryptoServiceProvider();</ins><br />
<ins> </ins><br />
<ins>   // and a secret key K</ins><br />
<ins>   var K = new byte[B];</ins><br />
<ins> </ins><br />
<ins>   // We assume H to be a cryptographic hash function where data is</ins><br />
<ins>   // hashed by iterating a basic compression function on blocks of data.</ins><br />
<ins>   // We denote by B the byte-length of such blocks</ins><br />
<ins>   //</ins><br />
<ins> </ins><br />
<ins>   // The authentication key K can be of any length up to B, the</ins><br />
<ins>   // block length of the hash function.</ins><br />
<ins>   if</ins><br />
<ins>     throw new InvalidOperationException(&quot;key length is too long&quot;);</ins><br />
<ins> </ins><br />
<ins>   // We define two fixed and different strings ipad and opad as follows</ins><br />
<ins>   //:</ins><br />
<ins>   var ipad  = new byte[B]; // ipad = the byte 0x36 repeated B times</ins><br />
<ins>   var opad  = new byte[B]; // opad = the byte 0x5C repeated B times</ins><br />
<ins> </ins><br />
<ins>   // To compute HMAC over the data `text&apos; we perform</ins><br />
<ins>   //      H(K XOR opad, H(K XOR ipad, text))</ins><br />
<ins> </ins><br />
<ins>   // append zeros to the end of K to create a B byte string</ins><br />
<ins>   key.CopyTo(K, 0);</ins><br />
<ins> </ins><br />
<ins>   for {</ins><br />
<ins>     K[i] = 0x00;</ins><br />
<ins>   }</ins><br />
<ins> </ins><br />
<ins>   for {</ins><br />
<ins>     // the B byte string computed in </ins><br />
<ins>     //     step with ipad</ins><br />
<ins>     ipad[i] =;</ins><br />
<ins> </ins><br />
<ins>     // the B byte string computed in</ins><br />
<ins>     //     step with opad</ins><br />
<ins>     opad[i] =;</ins><br />
<ins>   }</ins><br />
<ins> </ins><br />
<ins>   // append the stream of data &apos;text&apos; to the B byte string</ins><br />
<ins>   //     resulting from step</ins><br />
<ins>   var hi = new byte[ipad.Length + text.Length]; // hi = K XOR ipad, text</ins><br />
<ins>   ipad.CopyTo(hi, 0);</ins><br />
<ins>   text.CopyTo(hi, ipad.Length);</ins><br />
<ins> </ins><br />
<ins>   //</ins><br />
<ins>   var Hi = H.ComputeHash(hi); // Hi = H(hi) = H(K XOR ipad, text)</ins><br />
<ins> </ins><br />
<ins>   // to the B byte string</ins><br />
<ins>   //     resulting from step</ins><br />
<ins>   var ho = new byte[opad.Length + Hi.Length]; // ho = K XOR opad, H(hi)</ins><br />
<ins>   opad.CopyTo(ho, 0);</ins><br />
<ins>   Hi  .CopyTo(ho, opad.Length);</ins><br />
<ins> </ins><br />
<ins>   // and output</ins><br />
<ins>   //     the result</ins><br />
<ins>   H.Initialize();</ins><br />
<ins> </ins><br />
<ins>   return H.ComputeHash(ho); // Ho = H(ho) = H(K XOR opad, H(hi))</ins><br />
<ins> }</ins><br />
<ins></ins><br />
<ins>**参考資料</ins><br />
<ins>-[[RFC 2195 IMAP/POP AUTHorize Extension for Simple Challenge/Response:http://tools.ietf.org/html/rfc2195]]</ins><br />
<ins>-[[RFC 2104 HMAC: Keyed-Hashing for Message Authentication:http://tools.ietf.org/html/rfc2104]]</ins><br />
<ins></ins><br />
</code></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>works/tools/junk/TundereBird TundereBird 0.13リリース, works/libs/Smdn.Protocols.Imap4, works/libs/Smdn.Protocols.Pop3, works/libs/Smdn.Formats.Mime更新</title>
      <description>works/tools/junk/TundereBird TundereBird 0.13リリース, works/libs/Smdn.Protocols.Imap4, works/libs/Smdn.Protocols.Pop3, works/libs/Smdn.Formats.Mime更新</description>
      <link>http://smdn.invisiblefulmoon.net/works/tools/junk/TundereBird/</link>
      <pubDate>Sun, 27 Apr 2008 03:13:52 +0900</pubDate>
      <guid>http://smdn.invisiblefulmoon.net/works/tools/junk/TundereBird/</guid>
      <content:encoded><![CDATA[<div>
<h2><a href="http://smdn.invisiblefulmoon.net/works/tools/junk/TundereBird/">works/tools/junk/TundereBird</a></h2>
<p><code>
<span>**ダウンロード</span><br />
<span>#googleadunit</span><br />
<span>-ソース</span><br />
<ins>--${smdncms:distfilelink,TundereBird-0.13.zip,version 0.13}</ins><br />
<span>--${smdncms:distfilelink,TundereBird-0.12.zip,version 0.12}</span><br />
<span>--${smdncms:distfilelink,TundereBird-0.11.zip,version 0.11}</span><br />
<span>--${smdncms:distfilelink,TundereBird-0.10.zip,version 0.10}</span><br />
<span>tunderebird.iniを開いてアカウント情報を記入してから起動してください。</span><br />
<span></span><br />
<span>**変更履歴</span><br />
<ins>-version 0.13</ins><br />
<ins>--TLSに対応、バグ修正と機能追加</ins><br />
<ins>--Smdn.Protocols.Imap4</ins><br />
<ins>---STARTTLSコマンドによるTLSへのアップグレードに対応</ins><br />
<ins>---不正な形式のModified UTF-7文字列のデコードで例外となる場合の対処を追加</ins><br />
<ins>---PREAUTH応答のグリーティングメッセージからのcapability dataの取得に失敗する不具合を修正</ins><br />
<ins>---FETCHリクエストを10240オクテット毎にpartial fetchするように改善</ins><br />
<ins>---未知の種類のBODYSTRUCTUREの場合でも解析を継続するように改善</ins><br />
<ins>--Smdn.Protocols.Pop3</ins><br />
<ins>---STLSコマンドによるTLSへのアップグレードに対応</ins><br />
<ins>---取得したメッセージの改行文字が環境によって変わってしまう不具合を修正</ins><br />
<ins>--Smdn.Formats.Mime</ins><br />
<ins>---コメントを含む場合等にMIME-Versionヘッダの値を正しく認識できない不具合を修正</ins><br />
<ins>---改行・空白を含まずに連続するencoded-wordsを正しくデコードできない不具合を修正</ins><br />
<ins>---ヘッダを含まないmultipartメッセージ等で解析に失敗する不具合を修正</ins><br />
<span>-version 0.12</span><br />
<span>--主にバグ修正</span><br />
<span>--Smdn.Protocols.Imap4</span><br />
<span>---メッセージの解析時に入力ストリームの8ビット目が損失する不具合を修正</span><br />
<span>---Quoted-Printableのデコード処理の不具合を修正</span><br />
<span>-version 0.11</span><br />
<del>--POP3対応</del><br />
<ins>--POP3に対応</ins><br />
<span>--Smdn.Protocols.Imap4</span><br />
<span>---グリーティングメッセージからのcapability dataの取得に失敗する不具合を修正</span><br />
<span>---セッションのステートチェック処理の誤りを修正</span><br />
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/works/libs/Smdn.Formats.Mime/">works/libs/Smdn.Formats.Mime</a></h2>
<p><code>
<span>C#で書いた.NET Framework/Mono用MIMEメッセージライブラリです。　MIME形式のメッセージの読み込み、デコードが出来ます。</span><br />
<span></span><br />
<span>**機能</span><br />
<del>現在対応している機能の一覧です。　部分的に対応しているものも含みます。</del><br />
<ins>現在対応している機能の一覧です。</ins><br />
<span>-Content-Type</span><br />
<span>--multipart対応</span><br />
<span>-Content-Transfer-Encoding</span><br />
<span>-Mono 1.2.6</span><br />
<span>-Mono 1.9</span><br />
<span></span><br />
<ins>version 0.13の時点で手元にある計9,189通のメール(スパム、メーリングリスト・メールマガジンから、携帯から、添付ファイル付きなどを含む)を解析した結果、ほぼ正常に解析できています。　ただし解析した結果が「読める」かどうかまでは検証していません。　またMono 1.9ではJISからのデコードが出来ない場合があるようです。</ins><br />
<ins></ins><br />
<span>**対応予定</span><br />
<span>今後対応する予定の機能です。</span><br />
<span>-エンコード機能</span><br />
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/works/libs/Smdn.Protocols.Pop3/">works/libs/Smdn.Protocols.Pop3</a></h2>
<p><code>
<span>--APOP</span><br />
<span>--AUTH</span><br />
<span>--USER/PASS</span><br />
<ins>--STLS</ins><br />
<span>-コマンド</span><br />
<span>--STAT, LIST, RETR, DELE, NOOP, RSET, TOP, UIDL, QUIT</span><br />
<span>--CAPA</span><br />
<span>-その他</span><br />
<span>--RFC 2384 POP URL Scheme</span><br />
<ins>RFC 1939で規定されているコマンドは概ね実装が完了しています。</ins><br />
<span></span><br />
<span>**ダウンロード</span><br />
<span>#googleadunit</span><br />
</code></p>
<h2><a href="http://smdn.invisiblefulmoon.net/works/libs/Smdn.Protocols.Imap4/">works/libs/Smdn.Protocols.Imap4</a></h2>
<p><code>
<span></span><br />
<span>**機能</span><br />
<span>現在対応している機能の一覧です。　部分的に対応しているものも含みます。</span><br />
<del>-認証</del><br />
<ins>-認証系コマンド</ins><br />
<span>--AUTHENTICATE</span><br />
<span>--LOGIN</span><br />
<del>-コマンド</del><br />
<del>--(UID)FETCH,SEARCH, CHECK, CLOSE, SELECT, EXAMINE, LIST, LSUB, STATUS, LOGOUT, NOOP, CAPABILITY</del><br />
<ins>--STARTTLS</ins><br />
<ins>--LOGOUT</ins><br />
<ins>-メールボックス操作系コマンド</ins><br />
<ins>--CREATE, RENAME, DELETE, CLOSE, SELECT, EXAMINE, LIST, LSUB, STATUS, SUBSCRIBE, UNSUBSCRIBE</ins><br />
<ins>--UNSELECT</ins><br />
<ins>--NAMESPACE</ins><br />
<ins>-メッセージ操作系コマンド</ins><br />
<ins>--APPEND,SEARCH, EXPUNGE</ins><br />
<ins>-その他のコマンド</ins><br />
<ins>--CHECK, NOOP, CAPABILITY</ins><br />
<span>--IDLE</span><br />
<del>--NAMESPACE</del><br />
<span>--XYZZY</span><br />
<span>-その他</span><br />
<del>--Modified UTF-7</del><br />
<ins>--Modified UTF-7、日本語等非ASCII文字に対応</ins><br />
<ins>---日本語等を含むメールボックス名の操作に対応</ins><br />
<ins>---日本語等を含むSEARCHコマンドのクエリに対応(既定でUTF-8を使用、サーバが対応していない場合はBADCHARSET応答で指定された文字コードを自動的に選択)</ins><br />
<span>--RFC 3348 The Internet Message Action Protocol Child Mailbox Extension</span><br />
<ins>--RFC 2221 IMAP4 Login Referrals</ins><br />
<ins>--RFC 2193 IMAP4 Mailbox Referrals</ins><br />
<span>--RFC 2192 IMAP URL Scheme</span><br />
<ins>RFC 3501で規定されているコマンドは概ね実装が完了しています。</ins><br />
<span></span><br />
<span>**ダウンロード</span><br />
<span>#googleadunit</span><br />
<span></span><br />
<span>**対応予定</span><br />
<span>今後対応する予定の機能です。</span><br />
<del>-書き込み系コマンド(APPEND, COPY, CREATE, DELETE, EXPUNGE, STORE他)</del><br />
<del>-FETCH(RFC822.HEADER, RFC822.TEXT, BODY[&lt;section&gt;])</del><br />
<del>-STARTTLS</del><br />
<ins>-FETCH(RFC822.HEADER, RFC822.TEXT)</ins><br />
<ins>-SEARCHで使用する文字コードの指定</ins><br />
<span>-RFC 5092 IMAP URL Scheme</span><br />
<del>-RFC 3691 Internet Message Access Protocol UNSELECT command</del><br />
<ins>-RFC 4469 Internet Message Access Protocol CATENATE Extension</ins><br />
<ins>-RFC 4467 Internet Message Access Protocol - URLAUTH Extension</ins><br />
<ins>-RFC 4315 Internet Message Access Protocol - UIDPLUS extension</ins><br />
<ins>-RFC 3502 Internet Message Access Protocol - MULTIAPPEND Extension</ins><br />
<span></span><br />
<span>**注意</span><br />
<span>-MIMEメッセージのデコード機能は含んでいません。　デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。</span><br />
<span>-本ライブラリはトレースにログを出力します。　ログにはパスワードを含む送受信内容を解読可能な状態で書き出します。　不要な場合はTrace.csを削除するか、TRACEオプションおよびDUMPオプションを外してリビルドしてください。</span><br />
<span>-タイムアウト処理を実装してありますが、タイムアウトさせると内部状態がおかしくなるので使わない方がいいです。</span><br />
<ins>-デフォルトではLogin Referrals、Mailbox Referralsを含むレスポンスを受信しても通常のNO応答と同様に扱います。　自動的にReferral先を参照するようには作ってありません。　ImapSession.HandlesReferralAsExceptionをtrueにすればIMAP URLを含む例外を送出するようになります。</ins><br />
<ins>-送受信処理がかなり遅いです(特にFETCH)。　近いうちに改善するつもりです。</ins><br />
<span></span><br />
<span>**参考文献</span><br />
<span>#amazon(4873110289,left,content)</span><br />
<span>-[[IMAP4をより使いやすくする拡張機能:http://www.atmarkit.co.jp/fmobile/rensai/imap02/imap02.html]]</span><br />
<ins>-[[Internet Message Access Protocol - Wikipedia:http://ja.wikipedia.org/wiki/Internet_Message_Access_Protocol]]</ins><br />
<span>-[[IMAPプロトコルの流れを学ぶ:http://www.atmarkit.co.jp/fmobile/rensai/imap04/imap04.html]]</span><br />
<span>-[[IMAP4 and CRAM-MD5 Authentication:http://vision.kuee.kyoto-u.ac.jp/~nob/doc/cram-md5/cram-md5.html]]</span><br />
<span>-[[APOPとIMAP(CRAM-MD5)をC#で使おう:http://mobiquitous.com/programming/apop-imap.html]]</span><br />
</code></p>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>