<?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/"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
><channel><title>みむらの手記手帳 &#187; ソフトウェア</title> <atom:link href="http://mimumimu.net/blog/category/software/feed/" rel="self" type="application/rss+xml" /><link>http://mimumimu.net/blog</link> <description>人って時々、文章に起こしたい時があるじゃないですか。</description> <lastBuildDate>Sat, 05 May 2012 12:05:05 +0000</lastBuildDate> <language>ja</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/category/software/feed/" /> <item><title>nVIDIA チップ搭載の VAIO で Ubuntu の X を使う。</title><link>http://mimumimu.net/blog/2012/04/16/nvidia-%e3%83%81%e3%83%83%e3%83%97%e6%90%ad%e8%bc%89%e3%81%ae-vaio-%e3%81%a7-ubuntu-%e3%81%ae-x-%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/</link> <comments>http://mimumimu.net/blog/2012/04/16/nvidia-%e3%83%81%e3%83%83%e3%83%97%e6%90%ad%e8%bc%89%e3%81%ae-vaio-%e3%81%a7-ubuntu-%e3%81%ae-x-%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/#comments</comments> <pubDate>Mon, 16 Apr 2012 13:24:12 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[Linux / Unix / Interix]]></category> <category><![CDATA[ハードウェア]]></category> <category><![CDATA[nVIDIA]]></category> <category><![CDATA[Ubuntu]]></category> <category><![CDATA[VAIO]]></category> <category><![CDATA[X]]></category> <category><![CDATA[チップ搭載]]></category><guid isPermaLink="false">http://mimumimu.net/blog/?p=3987</guid> <description><![CDATA[みむらです。お久しぶりです。 後輩のマシンを直していて気づいたことなので備忘録。 今回のマシンは、公称では nVIDIA グラフィクスチップ搭載！ とだけしか書いていないのですが、 Ubuntu 環境に nVIDIA G [...]]]></description> <content:encoded><![CDATA[<p>みむらです。お久しぶりです。 <br />後輩のマシンを直していて気づいたことなので備忘録。</p><p>今回のマシンは、公称では nVIDIA グラフィクスチップ搭載！ とだけしか書いていないのですが、 <br />Ubuntu 環境に nVIDIA Graphics 用のドライバを入れても、X が転けちゃう状態でした。</p><p>マシン： Sony VAIO VPCS14AFJ <br />Ubuntu : 10.10 (だったとおもう・・きっと。</p><p>&#160;</p><p>記事執筆時に、そのマシンが手元にないので、 <br />詳しくは書けないのですが、</p><p>lspci でハードウェア一覧を見ると、 <br />nVIDIA Geforce.. が認識されていて、 <br />Intel GPU があるかなと思って見てみるとリストにはない状況。</p><p>Xorg.0.log とかをみてみますと、 no screens found というエラーが出ていて、 <br />かといって、 グラフィクスチップは認識されている状況。</p><p>&#160;</p><p>解決法：</p><p><a title="NVIDIASetup - vaio-f11-linux - Setting up X11 with NVIDIA&#39;s driver. - Sony Vaio F Series on" href="http://code.google.com/p/vaio-f11-linux/wiki/NVIDIASetup">NVIDIASetup &#8211; vaio-f11-linux &#8211; Setting up X11 with NVIDIA&#8217;s driver. &#8211; Sony Vaio F Series on</a> <br />参考資料はこのあたり。</p><p>/etc/X11/xorg.conf&#160; の Device セクションに、</p><pre>&#160;&#160;&#160; Option&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;ConnectedMonitor&quot; &quot;DFP-0&quot;<br />&#160;&#160;&#160; Option&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;CustomEDID&quot; &quot;DFP-0: /proc/acpi/video/NGFX/LCD/EDID&quot;</pre><p>この２行を追記とあります。</p><p>今回の VAIO の場合は、</p><pre>    Option         &quot;ConnectedMonitor&quot; &quot;DFP-0&quot;<br />    Option         &quot;CustomEDID&quot; &quot;DFP-0: /proc/acpi/video/IGPU/LCD0/EDID&quot;</pre><p>としました。</p><p>&#160;</p><p>このディレクトリパスから見るに、 <br />nVIDIA のグラフィクスチップはあるけれど、映像出力は Intel GPU に持って行っているんでしょうね。</p><p>&#160;</p><p>ってことで、 nVIDIA 搭載の VAIO を使っていて、 Linux の X がどうにもこうにもうまくいかない方は、 <br />何となくこういう設定を書き加えてみては。</p><p>もしかすると、同様にノートPCでどうしても転けちゃう場合も、これの応用でうまくいくのかも。</p><p>・・・旧式の VAIO (VGN-SZ93NS とか) だと、とくにこんなんやらなくてもうまくいったんですが、 <br />ハードウェアの設計とか、省エネとか何かあるんでしょうか・・ｗ</p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2012/04/16/nvidia-%e3%83%81%e3%83%83%e3%83%97%e6%90%ad%e8%bc%89%e3%81%ae-vaio-%e3%81%a7-ubuntu-%e3%81%ae-x-%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2012/04/16/nvidia-%e3%83%81%e3%83%83%e3%83%97%e6%90%ad%e8%bc%89%e3%81%ae-vaio-%e3%81%a7-ubuntu-%e3%81%ae-x-%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/" /> </item> <item><title>geoiplookup で発信元をみる。</title><link>http://mimumimu.net/blog/2012/03/11/geoiplookup-%e3%81%a7%e7%99%ba%e4%bf%a1%e5%85%83%e3%82%92%e3%81%bf%e3%82%8b%e3%80%82/</link> <comments>http://mimumimu.net/blog/2012/03/11/geoiplookup-%e3%81%a7%e7%99%ba%e4%bf%a1%e5%85%83%e3%82%92%e3%81%bf%e3%82%8b%e3%80%82/#comments</comments> <pubDate>Sun, 11 Mar 2012 12:11:05 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[Linux / Unix / Interix]]></category> <category><![CDATA[ソフトウェア]]></category> <category><![CDATA[geoiplookup]]></category> <category><![CDATA[発信元]]></category><guid isPermaLink="false">http://mimumimu.net/blog/?p=3982</guid> <description><![CDATA[なんとなく、サーバ管理をしている人なら、 どこからアクセスされてきたんだろうとか気になることがあるはず。 というわけで、 GeoIP のデータベースを使って、どこからアクセスしてきたかを見てみます。 &#160; １．イ [...]]]></description> <content:encoded><![CDATA[<p>なんとなく、サーバ管理をしている人なら、 <br />どこからアクセスされてきたんだろうとか気になることがあるはず。</p><p>というわけで、 GeoIP のデータベースを使って、どこからアクセスしてきたかを見てみます。</p><p>&#160;</p><h3>１．インストール。</h3><p>CentOS とか Fedora だと、 <u><strong>geoip</strong></u> をインストールすれば入ります。</p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:70dacad3-65f0-4671-8a92-50c7663c158f" class="wlWriterEditableSmartContent"><pre class="brush: bash;"># yum install geoip</pre></div><p>Ubuntu さんとか LinuxMint さんも同じなんじゃないかと思います。</p><p>&#160;</p><h3>２．データベースを更新する。</h3><p>MaxMind GeoIP Country Database <br /><a title="http://www.maxmind.com/app/geolitecountry" href="http://www.maxmind.com/app/geolitecountry">http://www.maxmind.com/app/geolitecountry</a></p><p>MaxMind GeoIP City Database <br /><a title="http://www.maxmind.com/app/geolitecity" href="http://www.maxmind.com/app/geolitecity">http://www.maxmind.com/app/geolitecity</a></p><p>この２つをダウンロードします。</p><p><a title="http://www.maxmind.com/app/installation?city=1" href="http://www.maxmind.com/app/installation?city=1">http://www.maxmind.com/app/installation?city=1</a><br />このページに従いますと、</p><p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:557d2f45-998c-48e6-9ba2-3efc9fff2f21" class="wlWriterEditableSmartContent"><pre class="brush: bash;"># wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# gzip -d GeoLiteCity.dat.gz
# gzip -d GeoIP.dat.gz
# mv GeoIP.dat.gz /usr/share/GeoIP/
# mv GeoLiteCity.dat.gz /usr/share/GeoIP/GeoIPCity.dat</pre></div></p><p>という感じでしょうかｗ</p><p>&#160;</p><h3>３．使う。</h3><p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:a648c0de-c04c-45c6-b0d4-4f85dd3fb361" class="wlWriterEditableSmartContent"><pre class="brush: bash;">$ geoiplookup 111.89.178.190
GeoIP Country Edition: JP, Japan
GeoIP City Edition, Rev 1: JP, 40, Tokyo, N/A, 35.685001, 139.751404, 0, 0
GeoIP City Edition, Rev 0: JP, 40, Tokyo, N/A, 35.685001, 139.751404
</pre></div></p><p>こんな感じ。</p><p><a href="http://mimumimu.net/blog/wp-content/uploads/2012/03/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://mimumimu.net/blog/wp-content/uploads/2012/03/image_thumb.png" width="536" height="416" /></a></p><p>ちなみに地図はこんな所出してますが、</p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9eb4295d-7f90-4dd1-b17b-106a4b71ff4d" class="wlWriterEditableSmartContent"><pre class="brush: bash;">$ nslookup sony.ne.jp
Server:         192.168.1.3
Address:        192.168.1.3#53

Non-authoritative answer:
Name:   sony.ne.jp
Address: 111.89.178.190
</pre></div><p>この場所に民間企業があるとは思えないので、 <br />位置のずれを感じるわけですが。</p><p>（この企業さんには、ノートパソコンで主にお世話になっておりまする）</p><p>&#160;</p><p>でも、国の判定とかそれぐらいには使えそう。 <br />あくまでも気休め・・ですがｗ</p><p>&#160;</p><h3>４．適当に使ってみる。</h3><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:d4e17587-06e9-433c-b879-d92032a905f3" class="wlWriterEditableSmartContent"><pre class="brush: bash;">$ cat access.log* | cut -f1 -d" " | sort | uniq | awk '{ print system("geoiplookup " $1) }'</pre></div><p>たとえばこんな感じ。 <br />Apache のログからIP アドレス出してきて、geoiplookup に掛けまくります。</p><p>動作サンプルは個人情報がもろもろ入っているので止めますが。</p><p>であであ。</p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2012/03/11/geoiplookup-%e3%81%a7%e7%99%ba%e4%bf%a1%e5%85%83%e3%82%92%e3%81%bf%e3%82%8b%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2012/03/11/geoiplookup-%e3%81%a7%e7%99%ba%e4%bf%a1%e5%85%83%e3%82%92%e3%81%bf%e3%82%8b%e3%80%82/" /> </item> <item><title>手元の CentOS に whois 入ってなくて焦った。</title><link>http://mimumimu.net/blog/2012/03/11/%e6%89%8b%e5%85%83%e3%81%ae-centos-%e3%81%ab-whois-%e5%85%a5%e3%81%a3%e3%81%a6%e3%81%aa%e3%81%8f%e3%81%a6%e7%84%a6%e3%81%a3%e3%81%9f%e3%80%82/</link> <comments>http://mimumimu.net/blog/2012/03/11/%e6%89%8b%e5%85%83%e3%81%ae-centos-%e3%81%ab-whois-%e5%85%a5%e3%81%a3%e3%81%a6%e3%81%aa%e3%81%8f%e3%81%a6%e7%84%a6%e3%81%a3%e3%81%9f%e3%80%82/#comments</comments> <pubDate>Sun, 11 Mar 2012 11:44:11 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[Linux / Unix / Interix]]></category> <category><![CDATA[ソフトウェア]]></category> <category><![CDATA[CentOS]]></category> <category><![CDATA[whois]]></category> <category><![CDATA[手元]]></category><guid isPermaLink="false">http://mimumimu.net/blog/?p=3978</guid> <description><![CDATA[たぶんインストール時に省いたんだと思う。私。 &#160; とりあえず、whois をインストールしようとしてちょっとはまったのでメモ。 # yum install jwhois というわけで、 whois ではなくて  [...]]]></description> <content:encoded><![CDATA[<p>たぶんインストール時に省いたんだと思う。私。</p><p>&#160;</p><p>とりあえず、whois をインストールしようとしてちょっとはまったのでメモ。</p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:d63f2778-7ac9-4440-b125-d343a83840f4" class="wlWriterEditableSmartContent"><pre class="brush: bash;"># yum install jwhois</pre></div><p>というわけで、 whois ではなくて <u><strong>jwhois</strong></u> パッケージを入れるらしい。</p><p>コマンド自体は whois で行けるので、</p><p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:4ca1f095-103c-46da-82c7-5c66e59747e9" class="wlWriterEditableSmartContent"><pre class="brush: bash;"># whois kantei.go.jp

[Querying whois.jprs.jp]
[whois.jprs.jp]
[ JPRS database provides information on network administration. Its use is    ]
[ restricted to network administration purposes. For further information,     ]
[ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e'     ]
[ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'.                 ]

Domain Information:
a. [Domain Name]                KANTEI.GO.JP
g. [Organization]               The Prime Minister's Official Residence
l. [Organization Type]          Government
m. [Administrative Contact]     MK072JP
n. [Technical Contact]          MK072JP
p. [Name Server]                ns3.kantei.go.jp
p. [Name Server]                ns4.kantei.go.jp
s. [Signing Key]
[State]                         Connected (2012/06/30)
[Registered Date]               1994/06/24
[Connected Date]                1994/06/27
[Last Update]                   2011/07/01 01:15:10 (JST)
</pre></div></p><p>なんとなく逆引き。ってことできちんと動きまする。</p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2012/03/11/%e6%89%8b%e5%85%83%e3%81%ae-centos-%e3%81%ab-whois-%e5%85%a5%e3%81%a3%e3%81%a6%e3%81%aa%e3%81%8f%e3%81%a6%e7%84%a6%e3%81%a3%e3%81%9f%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2012/03/11/%e6%89%8b%e5%85%83%e3%81%ae-centos-%e3%81%ab-whois-%e5%85%a5%e3%81%a3%e3%81%a6%e3%81%aa%e3%81%8f%e3%81%a6%e7%84%a6%e3%81%a3%e3%81%9f%e3%80%82/" /> </item> <item><title>dovecot 2.x で SSL が応答なしになって困った。</title><link>http://mimumimu.net/blog/2012/02/13/dovecot-2-x-%e3%81%a7-ssl-%e3%81%8c%e5%bf%9c%e7%ad%94%e3%81%aa%e3%81%97%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e5%9b%b0%e3%81%a3%e3%81%9f%e3%80%82/</link> <comments>http://mimumimu.net/blog/2012/02/13/dovecot-2-x-%e3%81%a7-ssl-%e3%81%8c%e5%bf%9c%e7%ad%94%e3%81%aa%e3%81%97%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e5%9b%b0%e3%81%a3%e3%81%9f%e3%80%82/#comments</comments> <pubDate>Mon, 13 Feb 2012 13:20:31 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[Linux / Unix / Interix]]></category> <category><![CDATA[ソフトウェア]]></category> <category><![CDATA[dovecot 2.x]]></category> <category><![CDATA[SSL]]></category> <category><![CDATA[応答]]></category><guid isPermaLink="false">http://mimumimu.net/blog/?p=3937</guid> <description><![CDATA[というか、半日こいつでつぶしました。 /etc/dovecot/conf.d にある、 10-ssl.conf をいじるわけですが、 この際、 NG : ssl_cert = /tmp/server.crt ssl_ke [...]]]></description> <content:encoded><![CDATA[<p>というか、半日こいつでつぶしました。</p><p>/etc/dovecot/conf.d にある、 10-ssl.conf をいじるわけですが、 <br />この際、</p><p>NG :</p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:702ab784-d92e-4d8a-afbb-ccfcaea38e44" class="wlWriterEditableSmartContent"><pre class="brush: text;">ssl_cert = /tmp/server.crt
ssl_key = /tmp/server.key
ssl_ca = /tmp/ca.pem
</pre></div><p>だとエラーで、</p><p>OK :</p><p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:1c623f7d-5f66-4250-bb12-64e492b1df84" class="wlWriterEditableSmartContent"><pre class="brush: text;">ssl_cert = &lt;/tmp/server.crt
ssl_key = &lt;/tmp/server.key
ssl_ca = &lt;/tmp/ca.pem</pre></div></p><p>だとおっけーなんだそうな。</p><p>要は、小なり記号「＜」をつけろということらしい。</p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2012/02/13/dovecot-2-x-%e3%81%a7-ssl-%e3%81%8c%e5%bf%9c%e7%ad%94%e3%81%aa%e3%81%97%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e5%9b%b0%e3%81%a3%e3%81%9f%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2012/02/13/dovecot-2-x-%e3%81%a7-ssl-%e3%81%8c%e5%bf%9c%e7%ad%94%e3%81%aa%e3%81%97%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e5%9b%b0%e3%81%a3%e3%81%9f%e3%80%82/" /> </item> <item><title>Hybrid MBR を GPT / MBR ディスクに変換する。</title><link>http://mimumimu.net/blog/2012/02/01/hybrid-mbr-%e3%82%92-gpt-mbr-%e3%83%87%e3%82%a3%e3%82%b9%e3%82%af%e3%81%ab%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b%e3%80%82/</link> <comments>http://mimumimu.net/blog/2012/02/01/hybrid-mbr-%e3%82%92-gpt-mbr-%e3%83%87%e3%82%a3%e3%82%b9%e3%82%af%e3%81%ab%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b%e3%80%82/#comments</comments> <pubDate>Tue, 31 Jan 2012 18:31:03 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[Linux / Unix / Interix]]></category> <category><![CDATA[Windows]]></category> <category><![CDATA[GPT]]></category> <category><![CDATA[Hybrid MBR]]></category> <category><![CDATA[ディスク]]></category><guid isPermaLink="false">http://mimumimu.net/blog/?p=3921</guid> <description><![CDATA[みむらです。 普通、GPT ディスクを MBR ディスクに直したりっていうのは、 ディスクの内容飛ばせーとか言われるんですが、面倒くさいのでいいのないかなーと探していたらありました。 ってことで、この先は Linux + [...]]]></description> <content:encoded><![CDATA[<p>みむらです。</p><p>普通、GPT ディスクを MBR ディスクに直したりっていうのは、 <br />ディスクの内容飛ばせーとか言われるんですが、面倒くさいのでいいのないかなーと探していたらありました。</p><p>ってことで、この先は Linux + CUI の世界ですが、</p><p>もしGUI で Windows で完結させたい人は、たぶん <br /><a title="窓の杜 - 【NEWS】米Paragon、BIOS-MBRからUEFI-GPTへWindows環境を移行できる「Migrate to UEFI」" href="http://www.forest.impress.co.jp/docs/news/20120116_504942.html">窓の杜 &#8211; 【NEWS】米Paragon、BIOS-MBRからUEFI-GPTへWindows環境を移行できる「Migrate to UEFI」</a></p><p>この辺使うと幸せになれるんじゃないでしょうか。使ったことないので、保証はできません・・。</p><p>&#160;</p><p>説明に入る前に Hybrid MBR とはなんぞやということですが、</p><p>簡単に言うと、本来 GPT ディスクは MBR の部分に、 <br />「よくわからないけど、ディスクの全ては使われてるよ！」 という情報を書いて、 <br />GPTの部分に本来のデータを書き込んでおきます。</p><p>ですが、GPT わけわからんなシステムの場合、これだと非常にまずいわけで、 <br />そこで、MBR 領域に「ここからここまでが、起動領域、あとはしらん！」 みたいに有効な情報を書いておき、 <br />いい感じにしてしまおうというものです。</p><p>ただ、GPT と MBR でデータの整合性がちゃんととれるのかというところで問題があり、 <br />あんまりやらない方がいいのですが、古いシステムで使う場合や、 Mac で Windows を動かす場合に必要な用です。</p><p>&#160;</p><p>で、この記事でやろうとしていることは、 <br />どっちか一つにしよう！ ということで、 GPT か MBR に一本化してしまおうと言うことです。</p><p>もちろん、後述する gdisk コマンドを使えば、相互にこれらを行き来できますが、 <br />この記事の内容もそうですが、この操作によって、データを失っても私は責任を持てません。</p><p>やるのであれば、必ずバックアップを取った上で行ってください。</p><hr />使うのは 「 gdisk 」というソフトウェアです。 <br />往年の fdisk コマンドの GPT 版ととらえて、問題無いと思います。<p>（作業機は Linux Mint 12 を想定していますが、 Ubuntu でも動作すると思われます。） <br />（Fedora, CentOS などの Redhat 系は、適宜読み替えて頂ければ、問題ないかと思われます。）</p><p>&#160;</p><h4>1．gdisk をインストール。</h4><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:324d26e0-74b3-4203-88c1-22aadbb8f3d0" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: bash;">$sudo aptitude install gdisk</pre></div><p>追記： <br />debian であれば、 backports に転がっているようです。 （ ほっそーさんありがとうございます！ ）<br />（確認環境： debian squeeze）</p><p>&#160;</p><h4>2．gdisk を起動する。</h4><p>この際、 /dev/ 以下のどのデバイスファイルが操作したい対象のディスクを指しているか <br />知っておく必要があります。</p><p>少し触れておきますと、 <br />大抵が sd? というように、先頭2文字が sd で始まるファイルが割り当てられていることが多く、<br />1番目の接続が sda, 2番目が sdb というように名前が振られています。</p><p>また、IDE 接続の場合は、 sd ではなく hd となり、 hda, hdb となっている可能性があります。 <br />（ただ、IDE 接続でも sd で始まる場合が多いようです。前は見かけたのですがやはり libata の関係ですかね。</p><p>その他、ソフトウェア RAID</p><blockquote><p>マザーボード上で提供されている RAID や、 <br />Windows の場合は、コンピュータの管理から設定できる RAID など、<br />RAID コントローラを経由せずに、ソフトウェアで提供されている RAID</p></blockquote><p>を使っている場合、 <br /> /dev/mapper/ 以下にいい感じでデバイスファイルが用意されている場合があります。<br />その場合は、そのファイルを使用してください。</p><p>・・・よくわからない場合や、 <br />実際に RAID を使っていてよくわからない人は、ここから先は特に自己責任でお願いします。</p><p>&#160;</p><p>例： /dev/sda が対象のHDD の場合。</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:f4cc8a84-058e-4c12-979b-78cf177b76cb" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: bash;">$ sudo gdisk /dev/sda</pre></div><p>なお、この先の記述は 対象HDD が /dev/sda である場合を想定しています。 <br />適宜対象環境に併せて、読み替えてください。</p><p>Hybrid MBR から GPT にする場合は 3.1&#160; <br />Hybrid MBR から MBR にする場合は 3.2<br />単なるMBR ディスクから GPT にする場合は 3.3<br />にそれぞれ記述しましたので、ご参照ください。</p><p>(純粋な GPT ディスク から MBR ディスクにする場合も、 3.2 で紹介する方法が使えます。)</p><p>&#160;</p><hr /><h4>3.1 Hybrid MBR から GPT ディスクにする。</h4><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:00bcab26-ceb3-4fa9-9b9b-59cce39119ea" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: text;">GPT fdisk (gdisk) version 0.6.14

Partition table scan:
  MBR: hybrid
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with hybrid MBR; using GPT.

Command (? for help): q</pre></div><p>GPT が present になっていることを確認し、 q を打ち、いったん閉じる。</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:3cbb5c77-da4b-4d08-bca9-31c45c0d0e29" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: bash;">$ sudo dd if=/dev/zero of=/dev/sda bs=512 count=1</pre></div><p>このようにコマンドを打ち（数値は小さくするのはいいですが、大きくするのはNG） MBR を消す。</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:cb1fc574-58bd-418c-b2a2-d451d09d02e5" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: bash;">$ sudo gdisk /dev/sda

GPT fdisk (gdisk) version 0.6.14

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with corrupt MBR; using GPT and will write new
protective MBR on save.</pre></div><p>MBR が not present となり、削除されたことがわかる。</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:0b50dbc8-99ec-4858-923e-a74e031dac2e" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: bash;">Command (? for help): w</pre></div><p>w を打って Enter</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:624759c1-476f-4108-a2e3-a1f060804ddb" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: text;">Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): Y</pre></div><p>Y を打って Enter</p><p>あとは再起動すれば完了となります。</p><p>&#160;</p><hr /><h4>3.2 Hybrid MBR から MBR にする。</h4><p>2 にて起動した状態のまま、</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:edd94690-1c76-4fe4-8ce8-6bb2a693acb9" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: text;">Command (? for help): r</pre></div><p>r を打って Enter</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9d2ac0a9-9cf8-478f-b693-0e8932740476" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: text;">Recovery/transformation command (? for help): g
Sorted GPT partitions and their current conversion status:
                                      Can Be
Number    Boot    Size       Status   Logical   Code   GPT Name
（なにかでる）</pre></div><p>g を打って Enter</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:012e446f-cbc5-4a90-b8c1-d293278e9565" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: text;">Type partition to change, 0 to accept, -1 to abort: 0

Converted 3 partitions. Finalize and exit? (Y/N): Y
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.</pre></div><p>数字の 0 を打って Enter,&#160; そして 次で Y と打つことで、変換が完了し、 <br />再起動すると適用されます。</p><p>&#160;</p><hr /><h4>3.3 MBR から GPT への変換。</h4><p>MBR から GPT への変換は危険なにおいがするのですが、うーむ。</p><p>というのも、 <br />GPT 形式のディスクは MBR 領域（ディスク先頭）と GPT 領域（ディスク末端）の両方を持っていますが、<br />MBR 形式のディスクは MBR 領域しか持っていないため、どうするのだろう。と。<br />末端のデータが壊れないのかなぁ、と心配だったりします。</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:a0ceb013-73fa-4644-aea5-5b1642543c6d" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: bash;">$ sudo gdisk /dev/sda

GPT fdisk (gdisk) version 0.6.14

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present</pre></div><p>MBR : MBR only となっていることから、 MBR ディスクであることがわかる。</p><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:1282bf0c-bc64-447f-83e4-af19476c3d9d" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: text;">Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): Y
OK; writing new GUID partition table (GPT).
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.</pre></div><p>w を押して Enter, Y を押して Enter</p><p>これで GPT ディスクに変換されます。</p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2012/02/01/hybrid-mbr-%e3%82%92-gpt-mbr-%e3%83%87%e3%82%a3%e3%82%b9%e3%82%af%e3%81%ab%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2012/02/01/hybrid-mbr-%e3%82%92-gpt-mbr-%e3%83%87%e3%82%a3%e3%82%b9%e3%82%af%e3%81%ab%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b%e3%80%82/" /> </item> <item><title>distcc と ccache でビルド高速化</title><link>http://mimumimu.net/blog/2012/02/01/distcc-%e3%81%a8-ccache-%e3%81%a7%e3%83%93%e3%83%ab%e3%83%89%e9%ab%98%e9%80%9f%e5%8c%96/</link> <comments>http://mimumimu.net/blog/2012/02/01/distcc-%e3%81%a8-ccache-%e3%81%a7%e3%83%93%e3%83%ab%e3%83%89%e9%ab%98%e9%80%9f%e5%8c%96/#comments</comments> <pubDate>Tue, 31 Jan 2012 15:51:59 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[Linux / Unix / Interix]]></category> <category><![CDATA[ソフトウェア]]></category> <category><![CDATA[ccache]]></category> <category><![CDATA[distcc]]></category> <category><![CDATA[ビルド高速化]]></category><guid isPermaLink="false">http://mimumimu.net/blog/?p=3904</guid> <description><![CDATA[みむらです。 複数台のマシンをお持ちの方、絶対いらっしゃいますよね。 ついでに、隅っこで寝てるとかそういうパターン、絶対ありますよね。 ということで、そういうマシンをコンパイルの際に利用して、是非とも効率よくパワーを使い [...]]]></description> <content:encoded><![CDATA[<p>みむらです。</p><p>複数台のマシンをお持ちの方、絶対いらっしゃいますよね。 <br />ついでに、隅っこで寝てるとかそういうパターン、絶対ありますよね。</p><p>ということで、そういうマシンをコンパイルの際に利用して、是非とも効率よくパワーを使いましょう。</p><p>ついでに、ccache を有効にして、キャッシュしましょうという、そんなお話。</p><p>追記ですが、 Mac OS X にはこれがなにやら、標準で入っているそうです。 <br />Mac マシンを大量にお持ちの方は、是非ともやってみるといいんじゃないでしょうか！</p><hr />ということで、カーネルを並列ビルドすることを例にして、使い方。 (Linux Mint 12 でテストしてます。)<h4>&#160;</h4><h4>1．distcc と ccache をインストール。 <br /></h4><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:47b59217-28fa-49f7-9f1b-3baae2364bbc" class="wlWriterEditableSmartContent"><pre class="brush: bash;gutter:false;auto-links:false;toolbar:false;wrap-lines:false;">$ sudo aptitude install distcc ccache</pre></div><br /><h4>&#160;</h4><h4>2．/etc/default/distcc を修正する。</h4><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:f8d5458f-879a-4dcf-b54f-c83b30c97b0a" class="wlWriterEditableSmartContent"><pre class="brush: text;">$ sudo vim /etc/default/distcc

# 書き換えるのは下記3点

# 動作を許可させる
STARTDISTCC="false" -&gt; STARTDISTCC="true"

# 接続可能ホストを設定する。
ALLOWEDNETS="127.0.0.1" -&gt; ALLOWEDNETS="192.168.1.0/24"

# リスナとなる NIC の IP アドレスを入力
LISTENER="127.0.0.1" -&gt; LISTENER="192.168.1.200"</pre></div><h4>&#160;</h4><h4>3. distcc を起動する。</h4><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:a78ad1f1-4a35-4d8c-a7ab-099574ff9f91" class="wlWriterEditableSmartContent"><pre class="brush: bash;">$ sudo service distcc start</pre></div><h4>&#160;</h4><h4>4. (操作マシン側にて) 接続先のホストを、 DISTCC_HOSTS に設定</h4><p>（例 192.168.1.200 と 192.168.1.201 が処理マシンだった場合 )</p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9b85699c-4eb2-44d8-96be-5924cf85bb6f" class="wlWriterEditableSmartContent"><pre class="brush: bash;">$ export DISTCC_HOSTS="localhost 192.168.1.200 192.168.1.201"</pre></div><p>&#160;</p><h4>5.ビルド</h4><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:6eb6f80d-eb01-4db3-a116-3cb15747e24a" class="wlWriterEditableSmartContent"><pre class="brush: bash;"># configure を行う場合
$ CC="ccache distcc gcc" CXX="ccache distcc g++" ./configure

# make を行う場合
#
# なおこの場合、物理コア数の2倍を同時実行数に指定すると、
# なんかいい感じらしいです。
#
# http://distcc.googlecode.com/svn/trunk/doc/web/faq.html
#
# 今回の場合は、各ノードに 4スレッドの CPU が乗っていて、
# 自分と、それ以外の2台のマシンがあると仮定。
#

$ make -j 24 CC="ccache distcc gcc" CXX="ccache distcc g++" HOSTCC="ccache distcc gcc" HOSTCXX="ccache distcc g++"</pre></div><hr />たぶん、HOSTCC と HOSTCXX の指定は、カーネルビルドの時ぐらいしかいらない気がしなくも。<br />ついでに、 configure で CC と CXX 指定したら、 make 時はいらなそうな。<p>とりあえず、自分の備忘録ってことで。メモメモ。</p><p>&#160;</p><p>追記事項としては、</p><p>ビルド環境のコンパイラとかインクルードファイルとかは一緒にしておいた方がいいよということ。 <br />あわせておかないと、面倒なことになるようです。</p><p>ソフト面だけ合っていれば問題なさそうなので、ハードウェア面は、プロセッサのアーキテクチャが違うとか、 <br />そういう系を除けば大丈夫だと思います。</p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2012/02/01/distcc-%e3%81%a8-ccache-%e3%81%a7%e3%83%93%e3%83%ab%e3%83%89%e9%ab%98%e9%80%9f%e5%8c%96/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2012/02/01/distcc-%e3%81%a8-ccache-%e3%81%a7%e3%83%93%e3%83%ab%e3%83%89%e9%ab%98%e9%80%9f%e5%8c%96/" /> </item> <item><title>SELinux で restorecon してあうあう。</title><link>http://mimumimu.net/blog/2012/01/31/selinux-%e3%81%a7-restorecon-%e3%81%97%e3%81%a6%e3%81%82%e3%81%86%e3%81%82%e3%81%86%e3%80%82/</link> <comments>http://mimumimu.net/blog/2012/01/31/selinux-%e3%81%a7-restorecon-%e3%81%97%e3%81%a6%e3%81%82%e3%81%86%e3%81%82%e3%81%86%e3%80%82/#comments</comments> <pubDate>Tue, 31 Jan 2012 12:45:39 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[Linux / Unix / Interix]]></category> <category><![CDATA[restorecon]]></category> <category><![CDATA[SELinux]]></category><guid isPermaLink="false">http://mimumimu.net/blog/?p=3893</guid> <description><![CDATA[もう、毎回のごとく忘れるので、備忘録。 動かない –&#62; /var/log/audit/audit.log* を見に行く。 毎度のごとく「コンテキストがちげーぜお兄さん」と書かれてる。 そのときに、 chcon で片 [...]]]></description> <content:encoded><![CDATA[<p>もう、毎回のごとく忘れるので、備忘録。</p><p>動かない –&gt; /var/log/audit/audit.log* を見に行く。 <br />毎度のごとく「コンテキストがちげーぜお兄さん」と書かれてる。</p><p>そのときに、 chcon で片付けてしまうのが私のひどく悪い癖ｗ</p><p>いやね、なんかの拍子に restorecon して、 <br />ぶっ飛ばしてしまうわけですよ。</p><p>ということで、それも含めて幅広く、いろいろ備忘録。</p><p>&#160;</p><h3>＊ファイル関連。</h3><h4>chcon (<u>CH</u>ange file selinux security <u>CON</u>text)</h4><p>ファイルとかディレクトリのコンテキストを変える。 <br /><u><strong>一時的に</strong></u>そのファイルに対して、<u>特定のコンテキストを割り当てる時に使う</u>と良さそう</p><p># chcon –t httpd_sys_content_t /home/hogehoge/public_html/ –R <br /></p><p>&#160;</p><h4>ls –aZ</h4><p>ファイル・ディレクトリに設定されているコンテキストを表示する。 <br />・・要は Z オプションをつける。</p><p># ls –Z <br />drwxr-xr-x. hogehoge hogehoge unconfined_u:object_r:httpd_user_content_t:s0 public_html <br /></p><h4>&#160;</h4><h4>restorecon (<u>RESTORE</u> file(s) default selinux security <u>CON</u>text)</h4><p>ファイルとかディレクトリのコンテキストをデフォルト設定に戻す。 <br />後述する semanage で恒久的に変更した場合は、その設定に戻る。</p><p><u>(chcon の変更は、restorecon で復元される際に破棄される。)</u></p><p># restorecon /home/hogehoge/public_html/ –R <br /></p><h4>&#160;</h4><h4>semanage (<u>SE</u>linux&#160; policy <u>MANAGE</u>ment tool)</h4><p>ファイルとかディレクトリのコンテキストをはじめとする、様々な設定を<u><strong>恒久的に</strong></u>変更する。 <br />このコマンドで変更した内容は、今後もデフォルト設定として保持される。</p><p>（ポートに関しては後述）</p><p>設定取得 ( –l を使う ) : <br /># semanage fcontext –l</p><p>追加 ( –a を使う )： <br /># semanage fcontext –a –t httpd_sys_content_t “/home/hogehoge/public_html/(/.*)?”</p><p>削除 ( –d を使う )： <br /># semanage fcontext –d –t httpd_sys_content_t “/home/hogehoge/public_html/(/.*)?”</p><p>反映させる ( restorecon を使う ): <br /># restorecon /home/hogehoge/public_html/ –RF</p><p>&#160;</p><h3>＊実行権限関連。</h3><h4>setenforce ( modify the mode selinux is running in. )</h4><p>Enforcing (制約が施行されてる状態) と Permissive (制約が施行されていない[許可されている] 状態) <br />の2つを<u><strong>一時的に</strong></u>切り替える。</p><p>恒久的に変更する場合は、 /etc/selinux/config の SELINUX を書き換える。</p><p>有効にする： <br /># setenforce 1</p><p>無効にする： <br /># setenforce 0</p><p>&#160;</p><h4>getenforce ( <u>GET</u> the current mode of selinux )</h4><p>現在、制約が施行されている (Enforcing) か許可されている (Permissive) か、 <br />そもそも動いてないか (Disable) を返す。</p><p># getenforce <br />Enforcing</p><p>&#160;</p><h4>setsebool (<u>SET</u> <u>SE</u>linux <u>BOOL</u>ean value)</h4><p>ポリシーを変更して、特定の動作を許可したり不許可にしたりという設定ができる。</p><p># setsebool –P ftp_home_dir on</p><p>&#160;</p><h4>getsebool (<u>GET</u> <u>SE</u>linux <u>BOOL</u>ean value)</h4><p>ポリシーを取得したり、全列挙したりする。</p><p>全列挙： <br /># getsebool –a</p><p>特定の要素を取得： <br /># getsebool ftp_home_dir</p><p>&#160;</p><h4>ps –Z</h4><p>プロセスのドメインを取得する。 <br />・・・要は –Z をつける。</p><p># ps –Z <br />unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 15287 pts/0 00:00:00 bash</p><p>&#160;</p><h3>＊通信ポート関連</h3><h4>semanage (<u>SE</u>linux policy <u>MANAGE</u>ment tool)</h4><p>ファイル操作は先述。プロセスが使用するポートなんかもここで設定。</p><p>ポートの設定を取得： <br /># semanage port –l</p><p>ポートの設定を追加 ( FTP を 11111 ポートで動作可能にする ) <br /># semanage port –a –t ftp_port_t –p tcp 11111</p><p>ポートの設定削除 <br /># semanage port –d –t ftp_port_t –p tcp 11111</p><p>&#160;</p><p>とりあえず、こんな感じで。であであ。</p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2012/01/31/selinux-%e3%81%a7-restorecon-%e3%81%97%e3%81%a6%e3%81%82%e3%81%86%e3%81%82%e3%81%86%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2012/01/31/selinux-%e3%81%a7-restorecon-%e3%81%97%e3%81%a6%e3%81%82%e3%81%86%e3%81%82%e3%81%86%e3%80%82/" /> </item> <item><title>小学生にも情報教育をば。</title><link>http://mimumimu.net/blog/2011/12/26/%e5%b0%8f%e5%ad%a6%e7%94%9f%e3%81%ab%e3%82%82%e6%83%85%e5%a0%b1%e6%95%99%e8%82%b2%e3%82%92%e3%81%b0%e3%80%82/</link> <comments>http://mimumimu.net/blog/2011/12/26/%e5%b0%8f%e5%ad%a6%e7%94%9f%e3%81%ab%e3%82%82%e6%83%85%e5%a0%b1%e6%95%99%e8%82%b2%e3%82%92%e3%81%b0%e3%80%82/#comments</comments> <pubDate>Sun, 25 Dec 2011 18:17:36 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[C / C++]]></category> <category><![CDATA[Windows]]></category> <category><![CDATA[開発]]></category> <category><![CDATA[小学生]]></category> <category><![CDATA[情報教育]]></category><guid isPermaLink="false">http://mimumimu.net/blog/?p=3858</guid> <description><![CDATA[どうもみむらです。 いきなり質問ですが、下記の２つの文章の共通点をあげてください。 A.里の秋。 静かな静かな 里の秋 お背戸に木の実の 落ちる夜は ああ 母さんとただ二人 栗の実 煮てます いろりばた B.静かな湖畔  [...]]]></description> <content:encoded><![CDATA[<p>どうもみむらです。</p><p>いきなり質問ですが、下記の２つの文章の共通点をあげてください。</p><p>A.里の秋。</p><blockquote><p>静かな静かな 里の秋 <br />お背戸に木の実の 落ちる夜は <br />ああ 母さんとただ二人 <br />栗の実 煮てます いろりばた</p></blockquote><p>B.静かな湖畔</p><blockquote><p>静かな湖畔の 森のかげから <br />もう起きちゃいかがと カッコが鳴く <br />カッコ カッコ <br />カッコ カッコ カッコ</p></blockquote><p>&#160;</p><p>はい、もうわかりましたよね。</p><p>こたえは、誰しもがわかるあれです。</p><a href="http://mimumimu.net/blog/2011/12/26/%e5%b0%8f%e5%ad%a6%e7%94%9f%e3%81%ab%e3%82%82%e6%83%85%e5%a0%b1%e6%95%99%e8%82%b2%e3%82%92%e3%81%b0%e3%80%82/">続きを読む »</a></p> ]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2011/12/26/%e5%b0%8f%e5%ad%a6%e7%94%9f%e3%81%ab%e3%82%82%e6%83%85%e5%a0%b1%e6%95%99%e8%82%b2%e3%82%92%e3%81%b0%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2011/12/26/%e5%b0%8f%e5%ad%a6%e7%94%9f%e3%81%ab%e3%82%82%e6%83%85%e5%a0%b1%e6%95%99%e8%82%b2%e3%82%92%e3%81%b0%e3%80%82/" /> </item> <item><title>Console Twitter を公開しました。</title><link>http://mimumimu.net/blog/2011/11/27/console-twitter-%e3%82%92%e5%85%ac%e9%96%8b%e3%81%97%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/</link> <comments>http://mimumimu.net/blog/2011/11/27/console-twitter-%e3%82%92%e5%85%ac%e9%96%8b%e3%81%97%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/#comments</comments> <pubDate>Sun, 27 Nov 2011 12:18:15 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Windows]]></category> <category><![CDATA[ソフトウェア]]></category> <category><![CDATA[開発]]></category> <category><![CDATA[Console Twitter]]></category><guid isPermaLink="false">http://mimumimu.net/blog/2011/11/27/console-twitter-%e3%82%92%e5%85%ac%e9%96%8b%e3%81%97%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/</guid> <description><![CDATA[ておくれてない、まだ、まだだっ！！ ということでみむらです。 先日の OAuth の記事 を書いた後、やっぱりクライアントを作りましょうということで。 ttytter っぽいものを意識しましたが、自分が使いやすいように作 [...]]]></description> <content:encoded><![CDATA[<p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image55.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://mimumimu.net/blog/wp-content/uploads/2011/11/image_thumb55.png" width="506" height="369" /></a></p><p>ておくれてない、まだ、まだだっ！！ <br />ということでみむらです。</p><p>先日の <a href="http://mimumimu.net/blog/2011/11/26/">OAuth の記事</a> を書いた後、やっぱりクライアントを作りましょうということで。</p><p>ttytter っぽいものを意識しましたが、自分が使いやすいように作ってみました。</p><p>&#160;</p><p>Microsoft .NET Framework 3.5 がある環境であれば実行可能です。 <br />(Windows 7 では標準搭載) <br /></p><p>&#160;</p><p><a title="http://mimumimu.net/software/#ConsoleTwitter" href="http://mimumimu.net/software/#ConsoleTwitter">http://mimumimu.net/software/#ConsoleTwitter</a> <br />上記URL よりダウンロード可能です。</p><p>&#160;</p><p>ただつぶやくだけではなく、下記のコマンドを使うことで様々な操作も可能です。</p><table border="1" cellspacing="0" cellpadding="2" width="646"><tbody><tr><td valign="top" width="200">/rep</td><td valign="top" width="444">リプライ一覧を表示</td></tr><tr><td valign="top" width="200">/rep (番号) (ツイート)</td><td valign="top" width="444">リプライを送ります。 <br /> <br />ex) /rep 01 ておくれてない！</td></tr><tr><td valign="top" width="200">/fav</td><td valign="top" width="444">お気に入りに登録したツイートを表示します。</td></tr><tr><td valign="top" width="200">/fav (番号)</td><td valign="top" width="444">お気に入りに登録します。</td></tr><tr><td valign="top" width="200">/unfav (番号)</td><td valign="top" width="444">お気に入りを解除します。</td></tr><tr><td valign="top" width="200">/rt (番号)</td><td valign="top" width="444">リツイートします。</td></tr><tr><td valign="top" width="200">/find (テキスト)</td><td valign="top" width="444">指定したテキストで Twitter 上のツイートを検索して表示します。</td></tr></tbody></table><p>&#160;</p><p>コンソールで表示されて、全部がキーで行うということで、 <br />シンプルでかつ、操作も覚えやすいのでは無いでしょうか。</p><p>&#160;</p><p>ということで、よろしくお願いします－。 <br /></p><p><hr />追記：ソースコード公開しました。</p><p><a title="https://github.com/mimura1133/Console-Twitter" href="https://github.com/mimura1133/Console-Twitter">https://github.com/mimura1133/Console-Twitter</a></p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2011/11/27/console-twitter-%e3%82%92%e5%85%ac%e9%96%8b%e3%81%97%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2011/11/27/console-twitter-%e3%82%92%e5%85%ac%e9%96%8b%e3%81%97%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/" /> </item> <item><title>Twitter の OAuth 1.0 認証を自分でコード書いてやってみた。</title><link>http://mimumimu.net/blog/2011/11/26/twitter-%e3%81%ae-oauth-1-0-%e8%aa%8d%e8%a8%bc%e3%82%92%e8%87%aa%e5%88%86%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e6%9b%b8%e3%81%84%e3%81%a6%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82/</link> <comments>http://mimumimu.net/blog/2011/11/26/twitter-%e3%81%ae-oauth-1-0-%e8%aa%8d%e8%a8%bc%e3%82%92%e8%87%aa%e5%88%86%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e6%9b%b8%e3%81%84%e3%81%a6%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82/#comments</comments> <pubDate>Sat, 26 Nov 2011 11:26:49 +0000</pubDate> <dc:creator>みむら</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[開発]]></category> <category><![CDATA[OAuth 1.0]]></category> <category><![CDATA[Twitter]]></category> <category><![CDATA[コード]]></category> <category><![CDATA[自分]]></category> <category><![CDATA[認証]]></category><guid isPermaLink="false">http://mimumimu.net/blog/2011/11/26/twitter-%e3%81%ae-oauth-1-0-%e8%aa%8d%e8%a8%bc%e3%82%92%e8%87%aa%e5%88%86%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e6%9b%b8%e3%81%84%e3%81%a6%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82/</guid> <description><![CDATA[みむらです。 ひとまず、おべんきょーということで、後からも分かるように、 変数を多く使って文字列出力をふんだんに出しながら。 ソースコードが、海から来た侵略者に侵略されていますが、 そんなもの全く気にしない、むしろ、侵略 [...]]]></description> <content:encoded><![CDATA[<p>みむらです。</p><p>ひとまず、おべんきょーということで、後からも分かるように、 <br />変数を多く使って文字列出力をふんだんに出しながら。</p><p>ソースコードが、海から来た侵略者に侵略されていますが、 <br />そんなもの全く気にしない、むしろ、侵略されていないでゲソ！</p><p>&#8212;-</p><p>参考資料：</p><p>* <a href="http://oauth.net/core/1.0">http://oauth.net/core/1.0</a> <br />* <a href="http://hueniverse.com/oauth/guide/authentication/">http://hueniverse.com/oauth/guide/authentication/</a> <br />* <a href="https://dev.twitter.com/docs/auth/authorizing-request/">https://dev.twitter.com/docs/auth/authorizing-request/</a></p><p>&#8212;-</p><p><a title="https://gist.github.com/1395485" href="https://gist.github.com/1395485">https://gist.github.com/1395485</a></p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:776c53a9-ef65-4fe8-b153-511c0cc84aa5" class="wlWriterEditableSmartContent"><pre class="brush: c#;">using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Web;

/*
 * この辺を参考に：
 * 
 * http://oauth.net/core/1.0
 * http://hueniverse.com/oauth/guide/authentication/
 * https://dev.twitter.com/docs/auth/authorizing-request
 */

namespace Direct_Commit_Twitter
{
    class Program
    {

        static void Main(string[] args)
        {
            //
            // 使うパラメータは次のようなもの。
            //
            // OAuth Consumer Key       : Consumer Key そのまま。
            // OAuth Token              : Access Token そのまま。 （今回はこれも取得。）
            // OAuth Nonce              : ランダム文字列を与える。 （毎回変更する。）
            // OAuth Signature          : OAuth Signature 以外の値で HMAC-SHA1 をとった値。
            // OAuth Signature Method   : Twitter は HMAC-SHA1 指定っぽいので HMAC-SHA1.
            // OAuth Time Stamp         : UNIX 時間 (1970-01-01 UTC からの秒数) を与える。
            //                          : (今回は GetUNIXTime() メソッドで取得します。)
            // OAuth Version            : 今回は 1.0 を使うので、1.0.
            //

            string consumer_key = "oDcUp76alv6VctYvRx2g";
            string consumer_secret = "mg1U9TEFVafIPQm0Y0YuLR8EZatXiDBvPLiiCConzbg";

            string access_token = "";
            string access_secret = "";

            string tweet_text = "ゲソーゲソー";

            /************************ 以下、黙々と処理 ********************/

            string[] verify_token;

            if (access_token == "" || access_secret == "")
            {

                #region 01. Request Token を取得しなイカ？
                {
                    Console.WriteLine("01 - Token を取得しなイカ？");
                    Console.WriteLine("-------------------------------------------------");

                    Random rand = new Random();
                    byte[] nonce_b = new byte[64];

                    rand.NextBytes(nonce_b);

                    string nonce = Math.Abs(BitConverter.ToInt64(nonce_b, 0)).ToString();
                    long unixtime = GetUNIXTime();

                    //
                    // OAuth Signature 生成のために、それ以外で仮のリクエスト文字列を作成する。
                    // この際、各パラメータは ABC 順にソートされている必要がある。
                    //
                    string signature_request = "POST&amp;" + UrlEncode("https://api.twitter.com/oauth/request_token");
                    signature_request += "&amp;" + UrlEncode(MakeParamString(consumer_key, nonce, null, unixtime, null, null, null));

                    //
                    // ちゃんとしたリクエスト文字列を作る。
                    //
                    string signature = GetSignature(consumer_secret, null, signature_request);
                    string param = MakeParamString(consumer_key, nonce, signature, unixtime, null, null, null);

                    DebugParamOut(consumer_key, consumer_secret, nonce, signature, unixtime, null, null, null);
                    return;
                    //
                    // 問い合わせ。
                    //
                    Console.WriteLine("* Access : https://api.twitter.com/oauth/request_token?" + param);
                    HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create("https://api.twitter.com/oauth/request_token?" + param);
                    hwr.Method = "POST";
                    WebResponse ret = hwr.GetResponse();
                    verify_token = new StreamReader(ret.GetResponseStream()).ReadToEnd().Split('&amp;');

                    ret.Close();

                    Console.WriteLine();
                    Console.WriteLine("Response : ");
                    foreach (string s in verify_token)
                        Console.WriteLine("&gt; " + s);
                }
                #endregion

                #region 02. Access Token を取得しなイカ？
                {
                    Console.WriteLine();
                    Console.WriteLine("02 - Access Token を取得しなイカ？");
                    Console.WriteLine("-------------------------------------------------");

                    string request_token = "";
                    string request_secret = "";

                    //
                    // ブラウザ開いて認証。
                    //
                    foreach (string s in verify_token)
                    {
                        int p = s.IndexOf("oauth_token=");
                        if (p != -1)
                        {
                            request_token = s.Substring(p + "oauth_token=".Length);
                            break;
                        }
                    }
                    Console.WriteLine("- OAuth Token : " + request_token);
                    Console.WriteLine("* Browser Open : https://twitter.com/oauth/authorize?oauth_token=" + request_token);
                    Process.Start("https://twitter.com/oauth/authorize?oauth_token=" + request_token);

                    //
                    // PIN を入力させる。
                    //
                    Console.Write("\nINPUT PIN : ");
                    string pin = Console.ReadLine();

                    foreach (string s in verify_token)
                    {
                        int p = s.IndexOf("oauth_token_secret=");
                        if (p != -1)
                        {
                            request_secret = s.Substring(p + "oauth_token_secret=".Length);
                            break;
                        }
                    }


                    //
                    // 以下 Twitter ともくもく通信。
                    //

                    Random rand = new Random();
                    byte[] nonce_b = new byte[64];

                    rand.NextBytes(nonce_b);

                    string nonce = Math.Abs(BitConverter.ToInt64(nonce_b, 0)).ToString();
                    long unixtime = GetUNIXTime();

                    //
                    // Signature 生成のための一時的なリクエスト文字列を作成。
                    //
                    string signature_request = "POST&amp;" + UrlEncode("https://api.twitter.com/oauth/access_token");
                    signature_request += "&amp;" + UrlEncode(MakeParamString(consumer_key, nonce, null, unixtime, request_token, pin, null));

                    string signature = GetSignature(consumer_secret, request_secret, signature_request);
                    string param = MakeParamString(consumer_key, nonce, signature, unixtime, request_token, pin, null);

                    DebugParamOut(consumer_key, consumer_secret, nonce, signature, unixtime, request_token, request_secret, pin);

                    //
                    // 問い合わせ。
                    //
                    Console.WriteLine("* Access : https://api.twitter.com/oauth/access_token?" + param);
                    HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create("https://api.twitter.com/oauth/access_token?" + param);
                    hwr.Method = "POST";
                    hwr.Headers.Add("Authorization", "OAuth");

                    WebResponse ret = hwr.GetResponse();
                    verify_token = new StreamReader(ret.GetResponseStream()).ReadToEnd().Split('&amp;');

                    ret.Close();

                    Console.WriteLine();
                    Console.WriteLine("Response : ");
                    foreach (string s in verify_token)
                    {
                        if (s.IndexOf("oauth_token=") != -1)
                            access_token = s.Substring(s.IndexOf("=") + 1);

                        if (s.IndexOf("oauth_token_secret=") != -1)
                            access_secret = s.Substring(s.IndexOf("=") + 1);

                        Console.WriteLine("&gt; " + s);
                    }
                }
                #endregion

            }

            #region 03. つぶやかなイカ？
            {
                Console.WriteLine();
                Console.WriteLine("03 - つぶやかなイカ？");
                Console.WriteLine("-------------------------------------------------");
                
                Random rand = new Random();
                byte[] nonce_b = new byte[64];

                rand.NextBytes(nonce_b);

                string nonce = Math.Abs(BitConverter.ToInt64(nonce_b, 0)).ToString();
                long unixtime = GetUNIXTime();

                string tweet_data = UrlEncode(tweet_text);

                string signature_request = "POST&amp;" + UrlEncode("https://api.twitter.com/1/statuses/update.xml");
                signature_request += "&amp;include_entities%3Dtrue%26" + UrlEncode(MakeParamString(consumer_key, nonce, null, unixtime, access_token, null, tweet_data));
                string signature = GetSignature(consumer_secret, access_secret, signature_request);

                string header_param = "OAuth oauth_consumer_key=\"" + UrlEncode(consumer_key) + "\",oauth_signature_method=\"HMAC-SHA1\"," +
                                      "oauth_timestamp=\"" + unixtime + "\",oauth_nonce=\"" + UrlEncode(nonce) + "\"," +
                                      "oauth_version=\"1.0\",oauth_token=\"" + UrlEncode(access_token) + "\"," +
                                      "oauth_signature=\"" + UrlEncode(signature) + "\",";

                DebugParamOut(consumer_key, consumer_secret, nonce, signature, unixtime, access_token, access_secret, null);
                Console.WriteLine("* Access : https://api.twitter.com/1/statuses/update.xml");
                Console.WriteLine("* Tweet at : " + tweet_text);

                HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create("https://api.twitter.com/1/statuses/update.xml");
                hwr.Method = "POST";
                hwr.ServicePoint.Expect100Continue = false;
                hwr.Headers.Add(HttpRequestHeader.Authorization, header_param);
                hwr.ContentType = "application/x-www-form-urlencoded";
                var s = new StreamWriter(hwr.GetRequestStream());
                s.Write("status=" + tweet_data + "&amp;include_entities=true");
                s.Close();

                WebResponse ret = hwr.GetResponse();
                Console.WriteLine();
                Console.WriteLine("Response:");
                Console.WriteLine("&gt; "+(new StreamReader(ret.GetResponseStream()).ReadToEnd()));

            }
            #endregion
        }

        // UNIX 時間を返す。
        static long GetUNIXTime()
        {
            return (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
        }

        // URLエンコード (どうやらエスケープ文字は大文字にしないといけないらしい。)
        static string UrlEncode(string str)
        {
            string s = HttpUtility.UrlEncode(str);
            return _UrlEncodeUpper(s);
        }

        static string _UrlEncodeUpper(string str)
        {
            int p = str.IndexOf("%");
            if (p != -1)
            {
                str = str.Substring(0, p) + str.Substring(p, 3).ToUpper() + _UrlEncodeUpper(str.Substring(p + 3));
            }
            return str;
        }

        // パラメータ文字列を生成
        static string MakeParamString(string oauth_consumer_key, string oauth_nonce, string oauth_signature, long oauth_timestamp, string oauth_token, string oauth_verifier, string status)
        {
            string param = "oauth_consumer_key=" + oauth_consumer_key + "&amp;oauth_nonce=" + oauth_nonce;

            if (oauth_signature != null)
                param += "&amp;oauth_signature=" + oauth_signature;

            param += "&amp;oauth_signature_method=HMAC-SHA1" + "&amp;oauth_timestamp=" + oauth_timestamp;

            if (oauth_token != null)
                param += "&amp;oauth_token=" + oauth_token;

            if (oauth_verifier != null)
                param += "&amp;oauth_verifier=" + oauth_verifier;
            
            param += "&amp;oauth_version=1.0";

            if (status != null)
                param += "&amp;status=" + status;

            return param;
        }

        // Consumer Secret をKey とした、リクエスト文字列のハッシュを求める。
        static string GetSignature(string consumer_secret, string access_token_secret, string param)
        {
            HMACSHA1 hmacsha1 = new HMACSHA1();
            hmacsha1.Key = Encoding.ASCII.GetBytes(consumer_secret + "&amp;" + access_token_secret);
            byte[] hash = hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(param));
            
            return Convert.ToBase64String(hash);
        }

        // よくやる出力をまとめてみる。
        static void DebugParamOut(string oauth_consumer_key, string oauth_consumer_secret, string oauth_nonce, string oauth_signature, long oauth_timestamp, string oauth_token, string oauth_token_secret, string oauth_verifier)
        {
            Console.WriteLine("- OAuth Consumer Key = " + oauth_consumer_key);
            Console.WriteLine("- OAuth Consumer Secret = " + oauth_consumer_secret);
            Console.WriteLine("- OAuth Nonce = " + oauth_nonce);
            if (oauth_signature != null)
                Console.WriteLine("- OAuth Signature = " + oauth_signature);
            Console.WriteLine("- OAuth Time Stamp = " + oauth_timestamp);
            if (oauth_token != null)
                Console.WriteLine("- OAuth Access Token = " + oauth_token);
            if (oauth_token_secret != null)
                Console.WriteLine("- OAuth Access Token Secret = " + oauth_token_secret);
            if (oauth_verifier != null)
                Console.WriteLine("- OAuth Verifier = " + oauth_verifier);
        }
    }
}
</pre></div><p>&#160;</p><p>とりあえず、記事自体がむちゃくちゃ長くなるので、 <br />解説云々は次の記事に。</p>]]></content:encoded> <wfw:commentRss>http://mimumimu.net/blog/2011/11/26/twitter-%e3%81%ae-oauth-1-0-%e8%aa%8d%e8%a8%bc%e3%82%92%e8%87%aa%e5%88%86%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e6%9b%b8%e3%81%84%e3%81%a6%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2011/11/26/twitter-%e3%81%ae-oauth-1-0-%e8%aa%8d%e8%a8%bc%e3%82%92%e8%87%aa%e5%88%86%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e6%9b%b8%e3%81%84%e3%81%a6%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82/" /> </item> </channel> </rss>
