<?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>Tue, 31 Jan 2012 18:31:03 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/category/software/feed/" />
		<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[Unix / Interix]]></category>
		<category><![CDATA[Windows]]></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>  <p>   <br /></p>  <p>   <hr />使うのは 「 gdisk 」というソフトウェアです。    <br />往年の fdisk コマンドの GPT 版ととらえて、問題無いと思います。</p>  <p>（作業機は Linux Mint 12 を想定していますが、 Ubuntu でも動作すると思われます。）   <br />（Fedora, CentOS などの Redhat 系は、適宜読み替えて頂ければ、問題ないかと思われます。）    <br /></p>  <p>&#160;</p>  <h4>1．gdisk をインストール。</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:324d26e0-74b3-4203-88c1-22aadbb8f3d0" class="wlWriterEditableSmartContent"><pre class="brush: bash;">$sudo aptitude install gdisk</pre></div>

<h4>&#160;</h4>

<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 ( マザーボード上で提供されている RAID や、Windows の場合は、コンピュータの管理から設定できる RAID など、RAID コントローラを経由せずに、ソフトウェアで提供されている RAID ) を使っている場合、
  <br />/dev/mapper/ 以下にいい感じでデバイスファイルが用意されている場合があります。

  <br />その場合は、そのファイルを絶対使用してください。</p>

<p>・・・よくわからない場合や、実際に RAID を使っていてよくわからない人は、ここから先、特に自己責任でお願いします。</p>

<p>&#160;</p>

<p>例： /dev/sda が対象のHDD の場合。</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:f4cc8a84-058e-4c12-979b-78cf177b76cb" class="wlWriterEditableSmartContent"><pre class="brush: bash;">$ sudo gdisk /dev/sda</pre></div>
</p>

<p>この先は、全て HDD が /dev/sda である場合を想定しています。
  <br />適宜対象環境に併せて、読み替えてください。</p>

<p>この先、
  <br /></p>

<p>Hybrid MBR から GPT にする場合は 3.1 を、
  <br />Hybrid MBR から MBR にする場合は 3.2 を参照してください。</p>

<p>(純粋な GPT ディスク から MBR ディスクにする場合も、 3.2 で紹介する方法が使えます。)</p>

<p>そして、
  <br />MBR から GPT にする場合は、番外をそれぞれ参照してください。</p>

<p>&#160;</p>

<h4>3.1 Hybrid MBR から GPT ディスクにする。</h4>

<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:00bcab26-ceb3-4fa9-9b9b-59cce39119ea" class="wlWriterEditableSmartContent"><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>

<p>GPT が present になっていることを確認し、 q を打ち、いったん閉じる。</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:3cbb5c77-da4b-4d08-bca9-31c45c0d0e29" class="wlWriterEditableSmartContent"><pre class="brush: bash;">$ sudo dd if=/dev/zero of=/dev/sda bs=512 count=1
</pre></div>
</p>

<p>このようにコマンドを打ち（数値は小さくするのはいいですが、大きくするのはNG） MBR を消す。</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:cb1fc574-58bd-418c-b2a2-d451d09d02e5" class="wlWriterEditableSmartContent"><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 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:0b50dbc8-99ec-4858-923e-a74e031dac2e" class="wlWriterEditableSmartContent"><pre class="brush: bash;">Command (? for help): w
</pre></div>

<p>w を打って Enter</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:624759c1-476f-4108-a2e3-a1f060804ddb" class="wlWriterEditableSmartContent"><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>&#160;</p>

<p>あとは再起動すれば完了となります。</p>

<p>&#160;</p>

<h4>3.2 Hybrid MBR から MBR にする。</h4>

<p>2 にて起動した状態のまま、</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:edd94690-1c76-4fe4-8ce8-6bb2a693acb9" class="wlWriterEditableSmartContent"><pre class="brush: text;">Command (? for help): r
</pre></div>
</p>

<p>r を打って Enter </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:9d2ac0a9-9cf8-478f-b693-0e8932740476" class="wlWriterEditableSmartContent"><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 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:012e446f-cbc5-4a90-b8c1-d293278e9565" class="wlWriterEditableSmartContent"><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>
  <hr /></p>

<p>ということで、MBR や GPT に不整合が発生したりとか、
  <br />どちらかに統一した方が精神衛生上いいという人は、これで試してみてはいかがでしょうか。</p>

<p>
  <hr /></p>

<p>ということで番外。特に、 MBR から GPT への変換は危険なにおいがするのですが、うーむ。</p>

<p>というのも、
  <br />GPT 形式のディスクは MBR 領域（ディスク先頭）と GPT 領域（ディスク末端）の両方を持っていますが、

  <br />MBR 形式のディスクは MBR 領域しか持っていないため、どうするのだろう。と。

  <br />末端のデータが壊れないのかなぁ、と心配だったりします。</p>

<p>&#160; <br /></p>

<h4>番外。MBR から GPT への変換。</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:a0ceb013-73fa-4644-aea5-5b1642543c6d" class="wlWriterEditableSmartContent"><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 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:1282bf0c-bc64-447f-83e4-af19476c3d9d" class="wlWriterEditableSmartContent"><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>&#160;</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[Unix / Interix]]></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[Unix / Interix]]></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>

		<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>

		<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>

		<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>
		<item>
		<title>ブログのデザインかえたった。</title>
		<link>http://mimumimu.net/blog/2011/11/24/%e3%83%96%e3%83%ad%e3%82%b0%e3%81%ae%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%8b%e3%81%88%e3%81%9f%e3%81%a3%e3%81%9f%e3%80%82/</link>
		<comments>http://mimumimu.net/blog/2011/11/24/%e3%83%96%e3%83%ad%e3%82%b0%e3%81%ae%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%8b%e3%81%88%e3%81%9f%e3%81%a3%e3%81%9f%e3%80%82/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 16:17:20 +0000</pubDate>
		<dc:creator>みむら</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://mimumimu.net/blog/2011/11/24/%e3%83%96%e3%83%ad%e3%82%b0%e3%81%ae%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%8b%e3%81%88%e3%81%9f%e3%81%a3%e3%81%9f%e3%80%82/</guid>
		<description><![CDATA[みむらんです。 というわけで、ブログのデザインを変えました。 前のデザインに飽きていたのと、 何か窮屈さを感じたのでさくっと切り替え。 1024&#215;768 のディスプレイで閲覧する方がぎりぎり閲覧できるようにサイ [...]]]></description>
			<content:encoded><![CDATA[<p>みむらんです。   <br />というわけで、ブログのデザインを変えました。</p>  <p>前のデザインに飽きていたのと、   <br />何か窮屈さを感じたのでさくっと切り替え。</p>  <p>1024&#215;768 のディスプレイで閲覧する方がぎりぎり閲覧できるようにサイズを修正してあります。</p>  <p>&#160;</p>  <p>IE9 on Windows 7 </p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image49.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/2011/11/image_thumb49.png" width="514" height="349" /></a></p>  <p>&#160;</p>  <p>IE8 on Windows XP</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image50.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/2011/11/image_thumb50.png" width="517" height="315" /></a></p>  <p>&#160;</p>  <p>Firefox 7.0.1 on Ubuntu 11.10<a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image51.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/2011/11/image_thumb51.png" width="516" height="330" /></a></p>  <p>&#160;</p>  <p>Safari on Mac OS X Snow Leopard</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image52.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/2011/11/image_thumb52.png" width="518" height="343" /></a></p>  <p>&#160;</p>  <p>ではではそんなところで。</p>  <p>今後ともよろしくお願いします！</p>]]></content:encoded>
			<wfw:commentRss>http://mimumimu.net/blog/2011/11/24/%e3%83%96%e3%83%ad%e3%82%b0%e3%81%ae%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%8b%e3%81%88%e3%81%9f%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/2011/11/24/%e3%83%96%e3%83%ad%e3%82%b0%e3%81%ae%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%8b%e3%81%88%e3%81%9f%e3%81%a3%e3%81%9f%e3%80%82/" />
	</item>
		<item>
		<title>NuGet で簡単にパッケージを導入する。</title>
		<link>http://mimumimu.net/blog/2011/11/22/nuget-%e3%81%a7%e7%b0%a1%e5%8d%98%e3%81%ab%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%82%92%e5%b0%8e%e5%85%a5%e3%81%99%e3%82%8b%e3%80%82/</link>
		<comments>http://mimumimu.net/blog/2011/11/22/nuget-%e3%81%a7%e7%b0%a1%e5%8d%98%e3%81%ab%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%82%92%e5%b0%8e%e5%85%a5%e3%81%99%e3%82%8b%e3%80%82/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 17:30:03 +0000</pubDate>
		<dc:creator>みむら</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://mimumimu.net/blog/2011/11/22/nuget-%e3%81%a7%e7%b0%a1%e5%8d%98%e3%81%ab%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%82%92%e5%b0%8e%e5%85%a5%e3%81%99%e3%82%8b%e3%80%82/</guid>
		<description><![CDATA[案外知られていない気がする。 Ruby や Python では、パッケージを簡単にインストールして利用する方法があって、 Ruby では gem Python では easy_install がこれに該当しますかね。 &#038; [...]]]></description>
			<content:encoded><![CDATA[<p>案外知られていない気がする。</p>  <p>Ruby や Python では、パッケージを簡単にインストールして利用する方法があって、</p>  <p>Ruby では gem   <br />Python では easy_install </p>  <p>がこれに該当しますかね。</p>  <p>&#160;</p>  <p>.NET にも NuGet という同様の仕掛けが存在し、   <br />利用することが出来ます。</p>  <p><a title=".NET開発の新標準「NuGet」入門（前編） － ＠IT" href="http://www.atmarkit.co.jp/fdotnet/chushin/nuget_01/nuget_01_01.html">.NET開発の新標準「NuGet」入門（前編） － ＠IT</a>    <br />詳細な解説についてはここのあたりを見ておくと良いかと思います。</p>  <p>&#160;</p>  <p>注：対象は Visual Studio 2010 以降の Visual Studio に限ります。</p>  <p>   <hr /></p>  <p>分からない人向け：</p>  <p>たとえば、今から Twitter の機能を利用したソフトウェアを作ろうとあなたが思ったとき、   <br />以下の選択肢から一つ選ぶことになると思います。</p>  <p>１．自分で OAuth の認証書いて、アクセスするライブラリを作る。   <br />２．インターネットから既存のライブラリをとってくる。</p>  <p>現代においては、教育目的を除いて １ を選ぶことは殆ど無いかと思います。   <br />（気に入る形に出来ない場合や、そもそも無い場合は作ることにはなりますが。）</p>  <p>&#160;</p>  <p>となると、現実的な回答としては、２となりますが、   <br />インターネットから探してきて、インストールして・・っていうのは面倒で、    <br />カタカタっと名前を打ったりして、簡単にインストール出来た方がいいわけです。</p>  <p>インストーラが面倒くさいということも考えられるでしょうし、   <br />そもそも、インストーラが無くて、自分で組み込まなければならない場合は面倒になりますし、    <br />友人に教えながら作業するという場合や、雑誌にやり方を載せる場合などにおいては、    <br />友人や読者にファイルのありかを教えなければなりませんし、    <br />複数台に組み込む時なども・・・・ とまぁ、非常にナンセンスな訳です。</p>  <p>&#160;</p>  <p>そんなわけで、 Python の easy_install や Ruby の gem   <br />そして、この記事で触れる .NET の NuGet などのパッケージ管理ソフトウェアを用いることにより、    <br />単純明快でかつ高速に、ライブラリを用意して使い始めることが出来ます。</p>  <p>また、ライブラリに更新があった場合、手動で入れた場合はまたインストールをしなければなりませんが、   <br />大抵こういうパッケージ管理ソフトでは、アップデートも簡単に行える仕様が備わっています。</p>  <p>&#160;</p>  <p>という感じで、長文になりましたが、   <br />導入～更新 まで、ライブラリの利用に関するあらゆることを簡単に使えるようにした物。    <br />それが、パッケージ管理ソフトウェア ということになります。</p>  <hr />  <p>というわけで本題。</p>  <p>&#160;</p>  <h3>１．導入</h3>  <p><a title="http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c" href="http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c">http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c</a>    <br />上記URL より、 Download をクリックしてダウンロード、インストーラを起動します。</p>  <p>&#160;</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image26.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/2011/11/image_thumb26.png" width="324" height="277" /></a></p>  <p>上のような画面が出ますので、インストールをクリックし、導入を完了させます。</p>  <p>&#160;</p>  <h3>２．開発を始める。</h3>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image27.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 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/2011/11/image_thumb27.png" width="557" height="387" /></a></p>  <p>いつものように、ソリューションを開きます。</p>  <p>&#160;</p>  <h3>３．パッケージを導入する。</h3>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image28.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/2011/11/image_thumb28.png" width="557" height="258" /></a></p>  <p>メニューバーの 「ツール」 → 「Library Package Manager」 → 「Package Manager Console」 をクリックします。</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image29.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/2011/11/image_thumb29.png" width="518" height="355" /></a></p>  <p>コンソールが立ち上がった。</p>  <p>&#160;</p>  <p>今回は例として、</p>  <p><a title="http://www.twitterizer.net/" href="http://www.twitterizer.net/">http://www.twitterizer.net/</a>    <br />上記URL にて公開している、「Twitterizer」を導入してみます。</p>  <p>&#160;</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image30.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/2011/11/image_thumb30.png" width="446" height="306" /></a></p>      <blockquote>   <p>Install-Package twitterizer</p> </blockquote>  <p>と打って、Enter で実行。</p>  <p>&#160;</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image31.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/2011/11/image_thumb31.png" width="557" height="382" /></a></p>  <p>自動的に<u>依存関係が解決された状態で</u>、参照にライブラリが加わり、使えるようになる。</p>  <p>&#160;</p>  <h3>３．コード書いて動かす。</h3>  <p>&#160;</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image32.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/2011/11/image_thumb32.png" width="557" height="328" /></a></p>  <p>&#160;</p>  <p>とりあえずこんな感じ。</p>  <p>&#160;</p>  <p>   <hr /></p>  <p>というわけで、適当に超基本的なコマンドだけ、対応表にするとこんな感じなのかなぁ。</p>  <table border="1" cellspacing="0" cellpadding="2" width="582"><tbody>     <tr>       <td valign="top" width="125">         <p align="center">コマンド</p>       </td>        <td valign="top" width="144">         <p align="center">NuGet</p>       </td>        <td valign="top" width="157">         <p align="center">gem</p>       </td>        <td valign="top" width="154">         <p align="center">easy_install</p>       </td>     </tr>      <tr>       <td valign="top" width="125">hoge をインストール</td>        <td valign="top" width="144">Install-Package hoge</td>        <td valign="top" width="157">gem install hoge</td>        <td valign="top" width="154">easy_install hoge</td>     </tr>      <tr>       <td valign="top" width="125">hoge を更新</td>        <td valign="top" width="144">Update-Package hoge</td>        <td valign="top" width="157">gem update hoge</td>        <td valign="top" width="154">easy_install –U hoge</td>     </tr>      <tr>       <td valign="top" width="125">全部更新</td>        <td valign="top" width="144">Update-Package</td>        <td valign="top" width="157">gem update</td>        <td valign="top" width="154">easy_install –U</td>     </tr>      <tr>       <td valign="top" width="125">hoge を削除</td>        <td valign="top" width="144">Uninstall-Package hoge</td>        <td valign="top" width="157">gem uninstall hoge</td>        <td valign="top" width="154">&nbsp;</td>     </tr>   </tbody></table>  <p>NuGet のコマンドについては、</p>  <p><a title="http://www.atmarkit.co.jp/fdotnet/chushin/nuget_01/nuget_01_02.html" href="http://www.atmarkit.co.jp/fdotnet/chushin/nuget_01/nuget_01_02.html">http://www.atmarkit.co.jp/fdotnet/chushin/nuget_01/nuget_01_02.html</a>    <br />上記URL に大体まとまっているかと思います。</p>  <p>&#160;</p>  <p>そんな感じで。であであ。</p>]]></content:encoded>
			<wfw:commentRss>http://mimumimu.net/blog/2011/11/22/nuget-%e3%81%a7%e7%b0%a1%e5%8d%98%e3%81%ab%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%82%92%e5%b0%8e%e5%85%a5%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/2011/11/22/nuget-%e3%81%a7%e7%b0%a1%e5%8d%98%e3%81%ab%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%82%92%e5%b0%8e%e5%85%a5%e3%81%99%e3%82%8b%e3%80%82/" />
	</item>
		<item>
		<title>SyntaxHighlighter でコードを示したあと、ずたずたに書式が崩れる不具合の対応</title>
		<link>http://mimumimu.net/blog/2011/11/22/syntaxhighlighter-%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e3%82%92%e7%a4%ba%e3%81%97%e3%81%9f%e3%81%82%e3%81%a8%e3%80%81%e3%81%9a%e3%81%9f%e3%81%9a%e3%81%9f%e3%81%ab%e6%9b%b8%e5%bc%8f%e3%81%8c%e5%b4%a9/</link>
		<comments>http://mimumimu.net/blog/2011/11/22/syntaxhighlighter-%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e3%82%92%e7%a4%ba%e3%81%97%e3%81%9f%e3%81%82%e3%81%a8%e3%80%81%e3%81%9a%e3%81%9f%e3%81%9a%e3%81%9f%e3%81%ab%e6%9b%b8%e5%bc%8f%e3%81%8c%e5%b4%a9/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 15:09:39 +0000</pubDate>
		<dc:creator>みむら</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://mimumimu.net/blog/2011/11/22/syntaxhighlighter-%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e3%82%92%e7%a4%ba%e3%81%97%e3%81%9f%e3%81%82%e3%81%a8%e3%80%81%e3%81%9a%e3%81%9f%e3%81%9a%e3%81%9f%e3%81%ab%e6%9b%b8%e5%bc%8f%e3%81%8c%e5%b4%a9/</guid>
		<description><![CDATA[どうもみむらです。 とっても見づらいブログ記事で本当に申し訳ございませんでした。 変に改行とかが入って、おそろしく見づらかったことかと思います。 &#160; ということで、今回はそれの犯人と、 修正の方法。 &#160 [...]]]></description>
			<content:encoded><![CDATA[<p>どうもみむらです。</p>  <p>とっても見づらいブログ記事で本当に申し訳ございませんでした。    <br />変に改行とかが入って、おそろしく見づらかったことかと思います。</p>  <p>&#160;</p>  <p>ということで、今回はそれの犯人と、    <br />修正の方法。</p>  <p>&#160;</p>  <h3>原因：</h3>  <p>&lt;pre&gt; &lt;/pre&gt; 以降の HTML データが上手く処理されず、    <br />テキストデータとして改行がなされたところに &lt;br /&gt; たぐが自動挿入されたため。</p>  <p>&#160;</p>  <h3>対策：</h3>  <p>WordPress 内の wpautop というフィルタによって自動挿入されるため、</p>  <p><a title="http://urbangiraffe.com/plugins/disable-wpautop/" href="http://urbangiraffe.com/plugins/disable-wpautop/">http://urbangiraffe.com/plugins/disable-wpautop/</a>     <br />上記URL より入手できるプラグインを導入して処理を除去。</p>  <p>&#160;</p>  <h3>結果：</h3>  <p>対策前：</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image24.png"><img style="background-image: none; border-right-width: 0px; margin: 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_thumb24.png" width="557" height="394" /></a></p>  <p>上記のように、文と文が離れていて大変読みづらい状況でした。</p>  <p>&#160;</p>  <p>対策後：</p>  <p><a href="http://mimumimu.net/blog/wp-content/uploads/2011/11/image25.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_thumb25.png" width="557" height="360" /></a></p>  <p>本来、当方が記述した際の正しい記述にて表示が行われ、    <br />段落ごとに文章がまとまり、見やすくなっています。</p>  <p>&#160;</p>    <hr />    <p>というわけで、    <br />WordPress で &lt;pre&gt; を利用してコードを記述している方で、     <br />ずたずたにスタイルが崩れてしまった場合、利用してみてはいかがでしょうか。</p>  <p>ちなみに、RSS フィードに対しても wpautop は適用され、   <br />改行が挿入されますが、    <br />このプラグインでは RSS フィードに対しても有効であり、    <br />かつ、Wordpress をアップデートしても有効となるため、かなり有用かと思います。</p>]]></content:encoded>
			<wfw:commentRss>http://mimumimu.net/blog/2011/11/22/syntaxhighlighter-%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e3%82%92%e7%a4%ba%e3%81%97%e3%81%9f%e3%81%82%e3%81%a8%e3%80%81%e3%81%9a%e3%81%9f%e3%81%9a%e3%81%9f%e3%81%ab%e6%9b%b8%e5%bc%8f%e3%81%8c%e5%b4%a9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://mimumimu.net/blog/2011/11/22/syntaxhighlighter-%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e3%82%92%e7%a4%ba%e3%81%97%e3%81%9f%e3%81%82%e3%81%a8%e3%80%81%e3%81%9a%e3%81%9f%e3%81%9a%e3%81%9f%e3%81%ab%e6%9b%b8%e5%bc%8f%e3%81%8c%e5%b4%a9/" />
	</item>
		<item>
		<title>Python + Django してみた。 その４．データベース。</title>
		<link>http://mimumimu.net/blog/2011/11/21/python-django-%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82-%e3%81%9d%e3%81%ae%ef%bc%94%ef%bc%8e%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%80%82/</link>
		<comments>http://mimumimu.net/blog/2011/11/21/python-django-%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82-%e3%81%9d%e3%81%ae%ef%bc%94%ef%bc%8e%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%80%82/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 19:35:24 +0000</pubDate>
		<dc:creator>みむら</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://mimumimu.net/blog/2011/11/21/python-django-%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82-%e3%81%9d%e3%81%ae%ef%bc%94%ef%bc%8e%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%80%82/</guid>
		<description><![CDATA[体力が切れてきた。やばい。みむらんです。 データベースを使ったサンプルってことで、何かやろうかと思ったのですが、 小さいものが見当たらないので、使い方だけ。 参照 : http://djangoproject.jp/do [...]]]></description>
			<content:encoded><![CDATA[<p>体力が切れてきた。やばい。みむらんです。</p>  <p>データベースを使ったサンプルってことで、何かやろうかと思ったのですが、   <br />小さいものが見当たらないので、使い方だけ。</p>  <p>参照 : <a title="http://djangoproject.jp/doc/ja/1.0/topics/db/queries.html" href="http://djangoproject.jp/doc/ja/1.0/topics/db/queries.html">http://djangoproject.jp/doc/ja/1.0/topics/db/queries.html</a></p>  <p>&#160;</p>  <h3>１．models.py でモデルを定義しよう</h3>  <p>Entry クラスにぼこぼこ書くだけで定義完了です。</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:a50cfb7c-9ff1-4d9a-9f74-da2aea18fc01" class="wlWriterEditableSmartContent"><pre class="brush: python;">class Human(models.Model):
    name = models.CharField(max_length=12)
    description = models.TextField()
    age = models.IntegerField()</pre></div>

<p>たとえば、人の名前を管理するなら、こんな感じでしょうか。</p>

<table border="1" cellspacing="0" cellpadding="2" width="400"><tbody>
    <tr>
      <td valign="top" width="88">name</td>

      <td valign="top" width="178">CharField(max_length=12)</td>

      <td valign="top" width="133">最長１２文字の文字列</td>
    </tr>

    <tr>
      <td valign="top" width="88">description</td>

      <td valign="top" width="178">TextField()</td>

      <td valign="top" width="133">文字列</td>
    </tr>

    <tr>
      <td valign="top" width="88">age</td>

      <td valign="top" width="178">IntegerField()</td>

      <td valign="top" width="133">数字</td>
    </tr>
  </tbody></table>

<p>&#160;</p>

<h3>２．データベースへの反映</h3>

<p>settings.py に、各種設定を済ませておきます。</p>

<table border="1" cellspacing="0" cellpadding="2" width="400"><tbody>
    <tr>
      <td valign="top" width="133">変数名</td>

      <td valign="top" width="133">設定内容</td>

      <td valign="top" width="133">例</td>
    </tr>

    <tr>
      <td valign="top" width="133">DATABASE_ENGINE</td>

      <td valign="top" width="133">データベースエンジン</td>

      <td valign="top" width="133">‘mysql’ / ‘sqlite3’ など</td>
    </tr>

    <tr>
      <td valign="top" width="133">DATABASE_NAME</td>

      <td valign="top" width="133">データベース名</td>

      <td valign="top" width="133">‘human_db’</td>
    </tr>

    <tr>
      <td valign="top" width="133">DATABASE_USER</td>

      <td valign="top" width="133">ユーザ名</td>

      <td valign="top" width="133">‘mimuran’</td>
    </tr>

    <tr>
      <td valign="top" width="133">DATABASE_PASSWORD</td>

      <td valign="top" width="133">パスワード</td>

      <td valign="top" width="133">‘hogehoge’</td>
    </tr>

    <tr>
      <td valign="top" width="133">DATABASE_HOST</td>

      <td valign="top" width="133">サーバホスト名</td>

      <td valign="top" width="133">‘example.com’</td>
    </tr>

    <tr>
      <td valign="top" width="133">DATABASE_PORT</td>

      <td valign="top" width="133">ポート番号</td>

      <td valign="top" width="133">‘1234’</td>
    </tr>
  </tbody></table>

<p>&#160;</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:d2ff8184-5d3b-4cfd-ba21-55495fd7afb0" class="wlWriterEditableSmartContent"><pre class="brush: python;">$ ./manage.py syndb</pre></div>

<p>で、実データベースに反映します。</p>

<p>&#160;</p>

<h3>３．データの読み書き</h3>

<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:583b7dfe-4b39-4a14-8966-ecf759391729" class="wlWriterEditableSmartContent"><pre class="brush: python;">data = Human()
data.name = u'みむらん'
data.age = 19
data.description u'ぱいそんよくわかってない系だんし'
data.save()</pre></div>

<p>インスタンスを生成して、ごにょごにょ詰め込んだ後、 save メソッドを呼び出して保存。</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:2398e84d-2296-4b0c-8b8e-b8abbde8dd2f" class="wlWriterEditableSmartContent"><pre class="brush: text;">all = Human.objects.all()</pre></div>

<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:18c46626-0a71-446a-bf4d-cfa100277a15" class="wlWriterEditableSmartContent"><pre class="brush: text;">mimuran = Human.objects.filter(name=u'みむらん')</pre></div>

<p>とりあえず、こんな感じで。</p>]]></content:encoded>
			<wfw:commentRss>http://mimumimu.net/blog/2011/11/21/python-django-%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82-%e3%81%9d%e3%81%ae%ef%bc%94%ef%bc%8e%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%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/21/python-django-%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82-%e3%81%9d%e3%81%ae%ef%bc%94%ef%bc%8e%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%80%82/" />
	</item>
	</channel>
</rss>

