<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/ME2.2" -->
<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/"
	>

<channel>
	<title>寺子屋未満</title>
	<link>http://terakonya.sarm.net/wordpress</link>
	<description>プログラミング：トライアンドエラーの結果をコツコツ&#038;しっかり記録</description>
	<pubDate>Sun, 22 Nov 2009 16:37:27 +0900</pubDate>
	<generator>http://wordpress.org/?v=ME2.2</generator>
	<language>ja</language>
			<item>
		<title>第3回北海道情報セキュリティ勉強会（せきゅぽろ）に参加</title>
		<link>http://terakonya.sarm.net/wordpress/2009/11/23/117</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/11/23/117#comments</comments>
		<pubDate>Sun, 22 Nov 2009 15:18:57 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[Sapporo]]></category>

		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/11/23/117</guid>
		<description><![CDATA[11月21日（金）に開催されました
第3回北海道情報セキュリティ勉強会（せきゅぽろ）に参加してきました。
今回のメインセッションは大きく二つありました。

●「不正なアクセスとは何か」（園田 道夫さん）
不正アクセスって何？という説明から始まり
「何をやってはいけないか」
「サーバー管理者として何をすべきか」
を非常にわかりやすくお話していただきました。
一応、自鯖をこれから育てていこうと思っている身なので、
気を引き締めていこう！と思うところがたくさんありました。
最後のほうに言われた

セキュリティは何で必要なの？
　管理者のためじゃない、そのサーバーを利用しているユーザーが被害にあうことが困る。
　利用者をまもるため、セキュリティは必要。

という言葉が非常に印象に残りました。

● 「研究ってなんだ？：研究と現場、幸せな連携のために」（横山 輝明さん）
研究者って何者？何しているの？論文ってどう読むの？というお話。
普段の自分はまったく違うサイドから同じ技術に携わる人のお話でした。
研究者のやっていることがちょっとわかった気がします。
研究者と技術者がお互いの分野で上を目指していきながら
横の糸がつながっていく世界はすばらしいなと妄想。

技術者よ、研究者たるな！
研究者よ、技術者たるな！

冒頭に使われたこの言葉の意味が最後にわかる講演でした。

● 最後に
サイバー大学の講師の方々ということもあり、
お話が非常にうまい。ぐんぐんひきこまれました。
お金がたまったらこういう大学でちゃんと勉強したいなあ･･･と思った日でもありました。
お菓子はろまん亭のチョコモンブラン

・・・と、抹茶パンと、栗の生八橋。（全部いただきました＞＜）
とってもおいしかったです。
]]></description>
			<content:encoded><![CDATA[<p>11月21日（金）に開催されました<br />
<a href="http://secpolo.techtalk.jp/3rdworkshop" target="_blank">第3回北海道情報セキュリティ勉強会（せきゅぽろ）</a>に参加してきました。</p>
<p>今回のメインセッションは大きく二つありました。</p>
<p></br></br></p>
<h3>●「不正なアクセスとは何か」（園田 道夫さん）</h3>
<p>不正アクセスって何？という説明から始まり<br />
「何をやってはいけないか」<br />
「サーバー管理者として何をすべきか」<br />
を非常にわかりやすくお話していただきました。<br />
一応、自鯖をこれから育てていこうと思っている身なので、<br />
気を引き締めていこう！と思うところがたくさんありました。</p>
<p>最後のほうに言われた</p>
<div style="background-color:#F5F5DC">
セキュリティは何で必要なの？<br />
　管理者のためじゃない、そのサーバーを利用しているユーザーが被害にあうことが困る。<br />
　利用者をまもるため、セキュリティは必要。
</div>
<p>という言葉が非常に印象に残りました。</p>
<p></br></br></p>
<h3>● 「研究ってなんだ？：研究と現場、幸せな連携のために」（横山 輝明さん）</h3>
<p>研究者って何者？何しているの？論文ってどう読むの？というお話。<br />
普段の自分はまったく違うサイドから同じ技術に携わる人のお話でした。<br />
研究者のやっていることがちょっとわかった気がします。<br />
研究者と技術者がお互いの分野で上を目指していきながら<br />
横の糸がつながっていく世界はすばらしいなと妄想。</p>
<div style="background-color:#F5F5DC">
技術者よ、研究者たるな！<br />
研究者よ、技術者たるな！
</div>
<p>冒頭に使われたこの言葉の意味が最後にわかる講演でした。</p>
<p></br></br></p>
<h3>● 最後に</h3>
<p>サイバー大学の講師の方々ということもあり、<br />
お話が非常にうまい。ぐんぐんひきこまれました。<br />
お金がたまったらこういう大学でちゃんと勉強したいなあ･･･と思った日でもありました。</p>
<p>お菓子はろまん亭のチョコモンブラン</p>
<p><img src='http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/11/20091121151647.jpg' title='おいしいチョコモンブラン' alt='おいしいチョコモンブラン' /></p>
<p>・・・と、抹茶パンと、栗の生八橋。（全部いただきました＞＜）<br />
とってもおいしかったです。</p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/11/23/117/feed</wfw:commentRss>
		</item>
		<item>
		<title>第17回Java勉強会に参加</title>
		<link>http://terakonya.sarm.net/wordpress/2009/11/22/116</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/11/22/116#comments</comments>
		<pubDate>Sun, 22 Nov 2009 14:45:24 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[Sapporo]]></category>

		<category><![CDATA[workshop]]></category>

		<category><![CDATA[Scala]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/11/22/116</guid>
		<description><![CDATA[札幌Javaコミュニティ第17回Java勉強会に参加してきました。
本日のテーマは

・Scala
　言語の特徴、簡単なプログラム演習
・JavaFx
　JavaFXの特徴、基本構文、簡単なアプリケーションの説明

でした。
たっぷりのボリュームで頭パンパンです。
しかし、とてもためになりました。
Scalaで出た課題が自力で解決できなかったのですが、
何とか解決できた（書けた）ので、ソースを公開します。

＜課題＞
ScalaでFizzBuzzプログラムを書く。
・3の倍数で”Fizz”
・5の倍数で”Buzz&#8221;・
・3と5の公倍数で”FizzBuzz”
・そのほかは数字のまま
出力するプログラム

以下は Main objectから実行することを想定したプログラム


def main(args: Array[String]) :Unit = {
   (1 to 100).foreach(fizzbuzz)
}

def fizzbuzz(i:Int){
    var s:String = {
        if( i%15 == 0 ) "FizzBuzz"
        else if( i%3 == 0 ) "Fizz"
        [...]]]></description>
			<content:encoded><![CDATA[<p>札幌Javaコミュニティ<a href="http://www.sapporo-java.org/20091122.html" target="_blank">第17回Java勉強会</a>に参加してきました。</p>
<p>本日のテーマは</p>
<div style="background-color:#F5F5DC">
<b>・Scala</b><br />
　言語の特徴、簡単なプログラム演習</p>
<p><b>・JavaFx</b><br />
　JavaFXの特徴、基本構文、簡単なアプリケーションの説明
</div>
<p>でした。</p>
<p>たっぷりのボリュームで頭パンパンです。</p>
<p>しかし、とてもためになりました。</p>
<p>Scalaで出た課題が自力で解決できなかったのですが、<br />
何とか解決できた（書けた）ので、ソースを公開します。</p>
<div style="background-color:#F5F5DC">
＜課題＞<br />
ScalaでFizzBuzzプログラムを書く。<br />
・3の倍数で”Fizz”<br />
・5の倍数で”Buzz&#8221;・<br />
・3と5の公倍数で”FizzBuzz”<br />
・そのほかは数字のまま<br />
出力するプログラム
</div>
<p>以下は Main objectから実行することを想定したプログラム</p>
<div style="background-color:#EEEEEE">
<pre><code>
def main(args: Array[String]) :Unit = {
   (1 to 100).foreach(fizzbuzz)
}

def fizzbuzz(i:Int){
    var s:String = {
        if( i%15 == 0 ) "FizzBuzz"
        else if( i%3 == 0 ) "Fizz"
        else if( i%5 == 0 ) "Buzz"
        else i.toString
    }
    println(s)
}
</code></pre>
</div>
<p>ロジックとしては以下。</p>
<div style="background-color:#F5F5DC">
1. 　1から100までの配列（Range)を作る<br />
2. 　Rangeの先頭の値から関数fizzbuzzを適用させる。<br />
　 　(foreachによって先頭の値を引数として呼び出し関数に与えられる）<br />
3.　fizzbuzz関数では変数sに、内部で作成した関数の結果をセット<br />
4.　sを出力
</div>
<p>「呼び出し」とか関数型言語だから使い方が違う。。。気がする。</p>
<p>今回はまったところは・・・・</p>
<div style="background-color:#F5F5DC">
NetBeansのscalaプラグインを使っていたのですが<br />
Main Objectを作成するとBuild,実行できない。（コンソールは動くのに・・・）<br />
⇒プラットフォームのデフォルトの場所(SCALA_HOME)が<br />
　「Document and Setting」配下になっていたためでした。<br />
　ディレクトリに半角スペースが入っているとBuildが失敗する模様。</p>
<p>1から100までのRangeをList（1 to 100)と定義していたため<br />
Intの値を取り出せなかった。<br />
⇒List（1 to 100）はList[Range]になるのですね。
</p></div>
<p>何はともあれ、動いてよかったです。</p>
<p>次回（次々回）からもScalaの読書会があるので<br />
簡単な関数から、関数型の記述に慣れていきたいです。</p>
<p>【追記】<br />
ソースを少し考え直してみた。</p>
<div style="background-color:#EEEEEE">
<pre><code>
def main(args: Array[String]) :Unit = {
  (1 to 100).foreach(i => println(fizzbuzz(i)))
}

def fizzbuzz(i:Int):String = {
   if( i%15 == 0 ) "FizzBuzz"
   else if( i%3 == 0 ) "Fizz"
   else if( i%5 == 0 ) "Buzz"
   else i.toString
}
</code></pre>
</div>
<p>printlnもforeachの引数の中で評価（？）させてみました。</p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/11/22/116/feed</wfw:commentRss>
		</item>
		<item>
		<title>自宅サーバー設定～SSHの設定(2)RSA鍵を生成する</title>
		<link>http://terakonya.sarm.net/wordpress/2009/09/13/115</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/09/13/115#comments</comments>
		<pubDate>Sun, 13 Sep 2009 08:45:19 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[CentOS]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/09/13/115</guid>
		<description><![CDATA[・パスワード方式は鍵交換方式に比べて、パスワードが漏れたり、
辞書攻撃、総当り攻撃で不正侵入される可能性が高い。
・鍵交換方式でであれば、秘密鍵が漏れない限りは不正侵入される可能性が非常に低くなる。
不正侵入の可能性を減らすため、
接続には鍵交換方式（公開鍵と秘密鍵を使う方式）を使用します。

●鍵交換方式の鍵を生成する
まずは、公開鍵と秘密鍵を作成します。
今回は、サーバーのLinuxマシンで鍵を作成しました。

コマンド：ssh-keygen
認証用の鍵を生成、管理、および変換するコマンドです。


(1)鍵の生成をする
以下の操作は、SSHでログインするユーザーで行う必要があります。

$ssh-keygen -t rsa

上記コマンドを実行すると

Generating public/private rsa key pair.
Enter file in which to save the key (/home/[user]/.ssh/id_rsa):

ここでEnterを押すと、ディレクトリ「/home/[user]/.ssh」に
「id_rsa」というファイル名の秘密鍵と公開鍵が作成されます。
ディレクトリを変更したい場合は変更先のディレクトリを入力することになります。

Enter passphrase (empty for no passphrase):　

パスフレーズ（SSH接続の際、必要となるパスワード）を入力します。
（任意の文字列を設定します。）

Enter same passphrase again:

確認のためもう一度入力します。

Your identification has been saved in /home/[user名]/.ssh/id_rsa.
Your public key has been saved in /home/[user名]/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx [user名]@localhost.localdomein

これで鍵が生成されました。
※コマンドの引数で鍵の種類を指定することが出来ます。

tオプション
rsa1（RSA鍵 プロトコル バージョン 1）
rsa（RSA鍵 プロトコル バージョン 2）
dsa（DSA鍵 プロトコル バージョン 2）

最初、間違ってrsa1鍵を作成したにもかかわらず、
気がつかずに、プロトコルバージョン2でログインしようとしていて
「Disconnected: No supported authentication methods available」
というエラーを何度も出していました。
PuTTYのコマンドをよく見たら「SSH1」の文字があったんですけどね・・・・。

(2)鍵の設定をする（サーバー側）

$cd /home/[user名]/.ssh/
$ls
id_rsa [...]]]></description>
			<content:encoded><![CDATA[<p>・パスワード方式は鍵交換方式に比べて、パスワードが漏れたり、<br />
辞書攻撃、総当り攻撃で不正侵入される可能性が高い。<br />
・鍵交換方式でであれば、秘密鍵が漏れない限りは不正侵入される可能性が非常に低くなる。</p>
<p>不正侵入の可能性を減らすため、<br />
接続には鍵交換方式（公開鍵と秘密鍵を使う方式）を使用します。</p>
<p></br></br></p>
<h1>●鍵交換方式の鍵を生成する</h1>
<p>まずは、公開鍵と秘密鍵を作成します。<br />
今回は、サーバーのLinuxマシンで鍵を作成しました。</p>
<div style="background-color:#ffffcc">
<p style="font-weight:bold;">コマンド：ssh-keygen</p>
<p>認証用の鍵を生成、管理、および変換するコマンドです。
</p></div>
<p></br></br></p>
<h3>(1)鍵の生成をする</h3>
<p>以下の操作は、SSHでログインするユーザーで行う必要があります。</p>
<div style="background-color:#EEEEEE">
$ssh-keygen -t rsa
</div>
<p>上記コマンドを実行すると</p>
<div style="background-color:#F5F5DC">
Generating public/private rsa key pair.<br />
Enter file in which to save the key (/home/[user]/.ssh/id_rsa):
</div>
<p>ここでEnterを押すと、ディレクトリ「/home/[user]/.ssh」に<br />
「id_rsa」というファイル名の秘密鍵と公開鍵が作成されます。<br />
ディレクトリを変更したい場合は変更先のディレクトリを入力することになります。</p>
<div style="background-color:#F5F5DC">
Enter passphrase (empty for no passphrase):　
</div>
<p>パスフレーズ（SSH接続の際、必要となるパスワード）を入力します。<br />
（任意の文字列を設定します。）</p>
<div style="background-color:#F5F5DC">
Enter same passphrase again:
</div>
<p>確認のためもう一度入力します。</p>
<div style="background-color:#F5F5DC">
Your identification has been saved in /home/[user名]/.ssh/id_rsa.<br />
Your public key has been saved in /home/[user名]/.ssh/id_rsa.pub.<br />
The key fingerprint is:<br />
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx [user名]@localhost.localdomein
</div>
<p>これで鍵が生成されました。</p>
<p>※コマンドの引数で鍵の種類を指定することが出来ます。</p>
<div style="background-color:#ffffcc">
tオプション<br />
rsa1（RSA鍵 プロトコル バージョン 1）<br />
rsa（RSA鍵 プロトコル バージョン 2）<br />
dsa（DSA鍵 プロトコル バージョン 2）
</div>
<p>最初、間違ってrsa1鍵を作成したにもかかわらず、<br />
気がつかずに、プロトコルバージョン2でログインしようとしていて<br />
「Disconnected: No supported authentication methods available」<br />
というエラーを何度も出していました。<br />
PuTTYのコマンドをよく見たら「SSH1」の文字があったんですけどね・・・・。</p>
<p></br></br></p>
<h3>(2)鍵の設定をする（サーバー側）</h3>
<div style="background-color:#EEEEEE">
$cd /home/[user名]/.ssh/<br />
$ls<br />
id_rsa id_rsa.pub
</div>
<p>ssh-keygenコマンドを実行すると<br />
・id_rsa（秘密鍵）<br />
・id_rsa.pub（公開鍵）<br />
の二つが生成されています。</p>
<div>
<p style="font-weight:bold;">公開鍵 id_rsa.pub</p>
<p>同一ディレクトリに「authorized_keys」という名前でコピーします。</p>
<div style="background-color:#EEEEEE">
$cp id_rsa.pub authorized_keys
</div>
<p>すでに「authorized_keys」が存在する場合は内容を追加します。</p>
<div style="background-color:#EEEEEE">
$cat id_rsa.pub >> authorized_keys
</div>
<p>「authorized_keys」のパーミッションを変更します。</p>
<div style="background-color:#EEEEEE">
$chmod 600 authorized_keys
</div>
</div>
<div>
<p style="font-weight:bold;">秘密鍵 id_rsa</p>
<p>パーミッションを変更します。</p>
<div style="background-color:#EEEEEE">
$chmod 600 id_rsa
</div>
<p>クライアントへ「id_rsa」を送付します。</p>
</div>
<p></br></br></p>
<h3>(1)鍵の設定をする（クライアント側）</h3>
<p>送付された秘密鍵をクライアントへ認識させます。</p>
<p>今回使用するクライアントは<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY</a>です。</p>
<div style="background-color:#F5F5DC">
<p style="font-weight:bold;">PuTTY用鍵設定</p>
<p>(1) puttygen.exeを起動します。</p>
<p>(2) メニューから Conversions → Import key を選択します。</p>
<p>(3) keyとして、サーバーから送付しておいた「id_rsa」を指定します。</p>
<p>(4) パスフレーズの入力を求められますので、設定したパスフレーズを入力します。</p>
<p>(5) ［Save private Key］ボタンをクリックして、PuTTY用の秘密鍵（id_rsa.PPKとします。）を保存します。</p>
</div>
<div style="background-color:#F5F5DC">
<p style="font-weight:bold;">PuTTY接続</p>
<p>(1) puttyjp.exeを起動します。</p>
<p>(2) [セッション]にホスト名またはIPアドレスを入力します。（プロトコルは［SSH］）<br />
　<br />
(3) [接続]→[自動ログインのユーザ名]鍵作成を行ったLinuxのユーザーIDを入力します。<br />
　　　（設定せず毎回入力してもかまいません）</p>
<p>(4) [SSH]優先するプロトコルバージョンを［2］（または［2 only］）に設定します。</p>
<p>(5) [SSH]→[認証] 認証のためのプライベートキーファイルに、PuTTY用の秘密鍵（id_rsa.PPK）を指定します。</p>
<p>(6) 接続するとパスフレーズの入力を求められますので、設定したパスフレーズを入力します。</p>
</div>
<p>ローカルネットワーク内でSSHによるリモート操作ができるようになりました！</p>
<p>次の目標はローカルネットワークの外からのSSH接続です！</p>
<p>今回参照させていただいたのは以下のページです。<br />
<a href="http://www.atmarkit.co.jp/flinux/rensai/linuxtips/432makesshkey.html">＠IT：Linuxでsshの鍵を作成するには</a><br />
<a href="http://www.sea-bird.org/doc/Windows/Putty.html">Putty で ssh2 を使用した接続について</a></p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/09/13/115/feed</wfw:commentRss>
		</item>
		<item>
		<title>自宅サーバー設定～SSHの設定(1)</title>
		<link>http://terakonya.sarm.net/wordpress/2009/09/13/114</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/09/13/114#comments</comments>
		<pubDate>Sun, 13 Sep 2009 08:07:20 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[CentOS]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/09/13/114</guid>
		<description><![CDATA[自宅サーバーを直接操作せず、
自分のメインマシンからSSH接続で
リモート操作できるように設定をします。

●OpenSSHの設定
CentOS5.3初回インストール時にOpenSSHはインストール済みでした。
SSHのPort(22番)も公開済み。
セキュリティなどを考慮し、設定ファイルの以下項目を書き換えました。

/etc/ssh/sshd_config 
PermitRootLogin no
&#8211; rootアカウントでの直接ログインを許可しない
PasswordAuthentication no
&#8211;パスワード認証を許可しない。
UsePAM yes
&#8211;PAM（Pluggable Authentication Module）認証を使用する。
Protocol 2
&#8211;プロトコルバージョンを２に限定する。
MaxAuthTries 3
&#8211;最大試行回数を3回に制限

設定ファイルの変更が完了したら、rootアカウントでsshdサービスを再起動します。

# /etc/rc.d/init.d/sshd restart


●PAMの設定

【PAM】（Pluggable Authentication Module）
各種の認証処理を実行するモジュール群と、
それを利用するための標準的なAPIを備えたライブラリからなる
ユーザー認証システム。

SSHでPAMを使用できるようにしたのでPAM設定を行います。
root権限で/etc/pam.d/sshdファイルを編集します。

# vi /etc/pam.d/sshd

ファイル内に次のaccount行を追加します。

account required pam_access.so

次に/etc/security/access.confの設定を行います。

# vi /etc/security/access.conf

ログイン許可をするユーザー名を記述する。

+:[USER]:ALL:ALL

※このPAMの設定を間違えるとSSH接続できません。
最初、

-:[USER]:ALL EXCEPT LOCAL:ALL

と記載しており、
「Server unexpectedly closed local connection」でPuTTY強制終了。
今回参照させていただいたのは以下のページです。

ITmedia エンタープライズ : Linux Tips「sshでログイン可能なユーザーを限定させたい～PAM制御編～」
次は公開鍵の作成です。
]]></description>
			<content:encoded><![CDATA[<p>自宅サーバーを直接操作せず、<br />
自分のメインマシンからSSH接続で<br />
リモート操作できるように設定をします。</p>
<p></br></br></p>
<h1>●OpenSSHの設定</h1>
<p>CentOS5.3初回インストール時にOpenSSHはインストール済みでした。<br />
SSHのPort(22番)も公開済み。</p>
<p>セキュリティなどを考慮し、設定ファイルの以下項目を書き換えました。</p>
<div style="background-color:#F5F5DC">
/etc/ssh/sshd_config </p>
<p>PermitRootLogin no<br />
<span style="color:#33cc00">&#8211; rootアカウントでの直接ログインを許可しない</span></p>
<p>PasswordAuthentication no<br />
<span  style="color:#33cc00">&#8211;パスワード認証を許可しない。</span></p>
<p>UsePAM yes<br />
<span style="color:#33cc00">&#8211;PAM（Pluggable Authentication Module）認証を使用する。</span></p>
<p>Protocol 2<br />
<span style="color:#33cc00">&#8211;プロトコルバージョンを２に限定する。</span></p>
<p>MaxAuthTries 3<br />
<span style="color:#33cc00">&#8211;最大試行回数を3回に制限</span></p>
</div>
<p>設定ファイルの変更が完了したら、rootアカウントでsshdサービスを再起動します。</p>
<div style="background-color:#EEEEEE">
# /etc/rc.d/init.d/sshd restart
</div>
<p></br></br></p>
<h1>●PAMの設定</h1>
<div style="background-color:#ffffcc">
<p style="font-weight:bold;">【PAM】（Pluggable Authentication Module）</p>
<p>各種の認証処理を実行するモジュール群と、<br />
それを利用するための標準的なAPIを備えたライブラリからなる<br />
ユーザー認証システム。
</p></div>
<p>SSHでPAMを使用できるようにしたのでPAM設定を行います。</p>
<p>root権限で/etc/pam.d/sshdファイルを編集します。</p>
<div style="background-color:#EEEEEE">
# vi /etc/pam.d/sshd
</div>
<p>ファイル内に次のaccount行を追加します。</p>
<div style="background-color:#F5F5DC">
account required pam_access.so
</div>
<p>次に/etc/security/access.confの設定を行います。</p>
<div style="background-color:#EEEEEE">
# vi /etc/security/access.conf
</div>
<p>ログイン許可をするユーザー名を記述する。</p>
<div style="background-color:#F5F5DC">
+:[USER]:ALL:ALL
</div>
<p>※このPAMの設定を間違えるとSSH接続できません。<br />
最初、</p>
<div style="background-color:#F5F5DC">
-:[USER]:ALL EXCEPT LOCAL:ALL
</div>
<p>と記載しており、<br />
「Server unexpectedly closed local connection」でPuTTY強制終了。</p>
<p>今回参照させていただいたのは以下のページです。<br />
<a href="http://www.itmedia.co.jp/help/tips/linux/l0412.html"><br />
ITmedia エンタープライズ : Linux Tips「sshでログイン可能なユーザーを限定させたい～PAM制御編～」</a></p>
<p>次は公開鍵の作成です。</p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/09/13/114/feed</wfw:commentRss>
		</item>
		<item>
		<title>自宅サーバーのネットワークIPアドレスを固定IPにする</title>
		<link>http://terakonya.sarm.net/wordpress/2009/09/13/113</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/09/13/113#comments</comments>
		<pubDate>Sun, 13 Sep 2009 05:35:40 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/09/13/113</guid>
		<description><![CDATA[&#8212;
SSHでリモート接続して
メインマシンから、そしてノートPCで外から
自宅サーバーにアクセスできるようにしよう。
&#8212;
というのが自宅サーバーの設定の次の課題です。
他のマシンからサーバーに接続するためには
接続先のIPが固定されている必要があります。
ということで、まずはCentOS5.3インストール時にすっとばした
固定IPによるネットワーク設定を行うことにしました。

●ルーターの設定

自宅はNTT光接続です。
ルータもNTTから借りているものを使用しています。
（プロバイダはbiglobe)
サーバーを自宅に構築するなんてことはないと思っていたので
レンタルしているルーターの設定はデフォルト設定のまま変えたことも
中身を確認したこともありませんでした・・・・。

(1)ルーターの設定を確認する
ルーターのIPアドレス(デフォルトはたいてい 192.168.1.1)にアクセスすれば
設定画面にたどり着くはずなのですが・・・・・
userのパスワードがわからない・・・。（アホ）
引越しの時にCDで「簡単インストール」した記憶がなんとなくあるが
簡単すぎてすっかり忘れてしまっていました。
ということで、ルーターを初期化。
プロバイダ情報やルーターパスワードを再設定し
やっとルーター設定を確認するに至りました。
「簡単インストール」、自分で何か設定しようとしたら簡単じゃないですね。
仕組みが理解できないまま設定が完了してしまう恐ろしさを体感しました。

(2)プライベートIPの設定を確認する
自宅のローカルネットワークの環境は

・ネットワークアドレス
192.168.1.0
・サブネットマスク
255.255.255.0

なので

192.168.1.1
から
192.168.1.254

までのIPアドレスを割り振ることが出来ます。（※）
（192.168.1.255 はブロードキャストアドレス）
※
ルーターの設定でIPアドレス、サブネットマスクは変更できます。
IPアドレスを変更することで[192.168.1]の部分が変更できました。
変更できますが、192.168.x.x が RFC1918で奨励されています。
その他のIPアドレスを設定した場合
・インターネット上（WANの外側）の他のIP と重複してしまい、IPが一意でなくなってしまう
・外部用ルータやファイヤーウォールでフィルタされていることも多い
ということがあります。
サブネットマスクを設定することで[192.168.1]以下のアドレス範囲を決めることができます。
twitterで皆様に教えてもらいました。
http://twitter.com/irasally/statuses/3947034054
http://twitter.com/smokeymonkey/statuses/3947051903
http://twitter.com/Makoto1987/statuses/3947129957

(3)DHCPの設定を変更する

【DHCP】（Dynamic Host Configuration Protocol）
DHCPとは、インターネットに一時的に接続するコンピュータに、IPアドレスなど必要な情報を自動的に割り当てるプロトコル。

DHCPで接続をした場合、接続ごとにIPアドレスが動的に変更されます。
そのため、サーバーのIPアドレスをDHCPで設定していると
SSHへ接続するためのアドレスが毎回変わるため、困ったことになるというわけです。
自宅のルーターの設定を確認すると（デフォルトままなので）

・ルータのIP
192.168.1.1
・DHCP開始IP
192.168.1.2
・DHCP割り当て個数
253

つまり

192.168.1.2
から
192.168.1.254

すべて自動割当となっていました。
そこで、固定IPを割り当てることが出来るよう

・DHCP開始IP
192.168.1.100
・DHCP割り当て個数
155

とルータ設定を変更。
これで

192.168.1.2
から
192.168.1.99

までは固定でIPアドレス割り当てることが可能となります。

●マシン側の設定
CentOS5.3、GUIでネットワークの設定をします。
システム→管理→ネットワーク

[イーサネットデバイス（eht0）→全般]
・固定のIPアドレス設定
IPアドレス：192.168.1.10
サブネットマスク：255.255.255.0
デフォルトゲートウェイ：192/168.1.1
[DNS]
プライマリDNS
セカンダリDNS
プロバイダから提示されているアドレス

上記を設定し、ネットワークを再起動すると・・・・！
ちゃんとネットワークに接続することが出来ました。

●IPアドレスの確認
コマンド

$ /sbin/ifconfg

で確認できます。


eth0    Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          UP  BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     [...]]]></description>
			<content:encoded><![CDATA[<p>&#8212;<br />
SSHでリモート接続して<br />
メインマシンから、そしてノートPCで外から<br />
自宅サーバーにアクセスできるようにしよう。<br />
&#8212;</p>
<p>というのが自宅サーバーの設定の次の課題です。<br />
他のマシンからサーバーに接続するためには<br />
接続先のIPが固定されている必要があります。</p>
<p>ということで、まずは<a href="http://terakonya.sarm.net/wordpress/2009/09/09/112">CentOS5.3インストール時にすっとばした</a><br />
固定IPによるネットワーク設定を行うことにしました。</p>
<p></br></br></p>
<h1>●ルーターの設定</h1>
<p></br><br />
自宅はNTT光接続です。<br />
ルータもNTTから借りているものを使用しています。<br />
（プロバイダはbiglobe)</p>
<p>サーバーを自宅に構築するなんてことはないと思っていたので<br />
レンタルしているルーターの設定はデフォルト設定のまま変えたことも<br />
中身を確認したこともありませんでした・・・・。</p>
<p></br></br></p>
<h3>(1)ルーターの設定を確認する</h3>
<p>ルーターのIPアドレス(デフォルトはたいてい 192.168.1.1)にアクセスすれば<br />
設定画面にたどり着くはずなのですが・・・・・</p>
<p>userのパスワードがわからない・・・。（アホ）</p>
<p>引越しの時にCDで「簡単インストール」した記憶がなんとなくあるが<br />
簡単すぎてすっかり忘れてしまっていました。</p>
<p>ということで、ルーターを初期化。<br />
プロバイダ情報やルーターパスワードを再設定し<br />
やっとルーター設定を確認するに至りました。</p>
<p>「簡単インストール」、自分で何か設定しようとしたら簡単じゃないですね。<br />
仕組みが理解できないまま設定が完了してしまう恐ろしさを体感しました。</p>
<p></br></br></p>
<h3>(2)プライベートIPの設定を確認する</h3>
<p>自宅のローカルネットワークの環境は</p>
<div style="background-color:#F5F5DC">
・ネットワークアドレス<br />
192.168.1.0</p>
<p>・サブネットマスク<br />
255.255.255.0
</p></div>
<p>なので</p>
<div style="background-color:#F5F5DC">
192.168.1.1<br />
から<br />
192.168.1.254
</div>
<p>までのIPアドレスを割り振ることが出来ます。（※）<br />
（192.168.1.255 はブロードキャストアドレス）</p>
<p>※<br />
ルーターの設定でIPアドレス、サブネットマスクは変更できます。<br />
IPアドレスを変更することで[192.168.1]の部分が変更できました。<br />
変更できますが、192.168.x.x が <a href="http://www.nic.ad.jp/ja/translation/rfc/1918.html">RFC1918</a>で奨励されています。<br />
その他のIPアドレスを設定した場合<br />
・インターネット上（WANの外側）の他のIP と重複してしまい、IPが一意でなくなってしまう<br />
・外部用ルータやファイヤーウォールでフィルタされていることも多い<br />
ということがあります。</p>
<p>サブネットマスクを設定することで[192.168.1]以下のアドレス範囲を決めることができます。</p>
<p>twitterで皆様に教えてもらいました。<br />
<a href="http://twitter.com/irasally/statuses/3947034054">http://twitter.com/irasally/statuses/3947034054</a><br />
<a href="http://twitter.com/smokeymonkey/statuses/3947051903">http://twitter.com/smokeymonkey/statuses/3947051903</a><br />
<a href="http://twitter.com/Makoto1987/statuses/3947129957">http://twitter.com/Makoto1987/statuses/3947129957</a></p>
<p></br></br></p>
<h3>(3)DHCPの設定を変更する</h3>
<div style="background-color:#ffffcc">
<p style="font-weight:bold;">【DHCP】（Dynamic Host Configuration Protocol）</p>
<p>DHCPとは、インターネットに一時的に接続するコンピュータに、IPアドレスなど必要な情報を自動的に割り当てるプロトコル。
</p></div>
<p>DHCPで接続をした場合、接続ごとにIPアドレスが動的に変更されます。<br />
そのため、サーバーのIPアドレスをDHCPで設定していると<br />
SSHへ接続するためのアドレスが毎回変わるため、困ったことになるというわけです。</p>
<p>自宅のルーターの設定を確認すると（デフォルトままなので）</p>
<div style="background-color:#F5F5DC">
・ルータのIP<br />
192.168.1.1</p>
<p>・DHCP開始IP<br />
192.168.1.2</p>
<p>・DHCP割り当て個数<br />
253
</p></div>
<p>つまり</p>
<div style="background-color:#F5F5DC">
192.168.1.2<br />
から<br />
192.168.1.254
</div>
<p>すべて自動割当となっていました。</p>
<p>そこで、固定IPを割り当てることが出来るよう</p>
<div style="background-color:#F5F5DC">
・DHCP開始IP<br />
192.168.1.100</p>
<p>・DHCP割り当て個数<br />
155
</p></div>
<p>とルータ設定を変更。</p>
<p>これで</p>
<div style="background-color:#F5F5DC">
192.168.1.2<br />
から<br />
192.168.1.99
</div>
<p>までは固定でIPアドレス割り当てることが可能となります。</p>
<p></br></br></p>
<h1>●マシン側の設定</h1>
<p>CentOS5.3、GUIでネットワークの設定をします。</p>
<p>システム→管理→ネットワーク</p>
<div style="background-color:#F5F5DC">
[イーサネットデバイス（eht0）→全般]<br />
・固定のIPアドレス設定<br />
IPアドレス：192.168.1.10<br />
サブネットマスク：255.255.255.0<br />
デフォルトゲートウェイ：192/168.1.1</p>
<p>[DNS]<br />
プライマリDNS<br />
セカンダリDNS<br />
プロバイダから提示されているアドレス
</p></div>
<p>上記を設定し、ネットワークを再起動すると・・・・！</p>
<p>ちゃんとネットワークに接続することが出来ました。</p>
<p></br></br></p>
<h1>●IPアドレスの確認</h1>
<p>コマンド</p>
<div style="background-color:#EEEEEE">
$ /sbin/ifconfg
</div>
<p>で確認できます。</p>
<div style="background-color:#F5F5DC">
<pre>
eth0    Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          UP  BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:583312 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28344 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:3  Base address:0x100
</pre>
</div>
<p>ローカルIPアドレスは[inet addr]です。</p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/09/13/113/feed</wfw:commentRss>
		</item>
		<item>
		<title>自宅サーバーを構築する～CentOS5.3インストール</title>
		<link>http://terakonya.sarm.net/wordpress/2009/09/09/112</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/09/09/112#comments</comments>
		<pubDate>Tue, 08 Sep 2009 15:13:50 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[CentOS]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/09/09/112</guid>
		<description><![CDATA[オープンソースカンファレンス2009北海道の大じゃんけん大会で勝ち残り
運よく獲得した、サーバー「HP ProLiant ML115 G5」。
出張やら風邪やらいろいろありましたが、やっと動かし始めました。
自宅サーバーを構築したことがないのはもちろん、
サーバーをいじった経験もほとんどありませんが、
最終目標は「サービスを自宅サーバーから公開」！！
その過程を、このブログに記録していこうと思います。

●マシンスペック
HP ProLiant ML115 G5
CPU：AMD Athlon™ プロセッサー 1640B（2.7GHz、512KB L2）
メモリ：512MB
カスタマイズは必要が生じてから考えます。
思ったほど大きくなかったので、自分の家にもおけました。

キーボードは薄くて、タッチもカチカチ音がしなくて、結構好きです。

設定もろもろが完了するまで、ディスプレイは自分のデスクトップと共用です。
（ああ、切り替え機がほしい・・・）

●OSインストール

CentOSの最新版、CentOS5.3をインストールすることに決定。
（理由は、少しだけRedHat系のコマンドには触れた事があるから。）


(1)isoファイルダウンロード
まずは、CentOS5.3のイメージファイルをダウンロード。
自宅にDVDがあったので、DVDイメージ（CentOS-5.3-i386-bin-DVD.iso）を選択。
本当はDL後に「SHA1SUMチェック」をしなければいけない（あとから知りました・・・）のですが、チェックせずに次の過程へ進んでしまいました；

(2)イメージファイルの作成
DVDイメージをメディアに焼きます。
isoファイルをデータとして保存してはいけません。（←一回失敗しました。）
isoファイルをイメージファイルとして焼く必要があります。
（DVD書き込みのためのソフトにはたいていその機能がついています。）
イメージファイルとして焼くと、メディアにいろいろなファイルが存在している事がわかります。

(3)電源ON
サーバーの電源を入れます。
う・・・・・・・うるさい・・・・・・・！
こんなに起動音がするとは思っていませんでした・・＞＜
起動してしまえば気にならないのですけどね。
OSも何も入っていない空っぽのマシンなので、起動ディスクはCD/DVDとなっています。
ですので、電源をいれ、すぐにDVDを入れれば、インストールが始まります。

(4)インストール
この記事が詳しいですね⇒CentOS 5.3
インストールしたあとにこの記事を発見しました・・・・。

大きな流れとしては

1) メディアのテスト
　　：OK


2) 言語の選択
　　：日本語

3) キーボードの設定
　　：日本語キーボード

4) アップグレードの検証
　　：新規なので「インストール CentOS」

5) ディスクパーティションの設定
　　：デフォルトまま

6) ネットワークの設定
　　：サーバー用の固定IP設定をしなければいけないのですが、とりあえずそのまま進む・・・
　　　（これが次の課題）

７） タイムゾーンの選択
　　：アジア/東京

8) rootパスワードを設定
　　：******（6文字以上)

9) インストールパッケージの選択
　　：次の3つを選択しました。
　　　・Desktop - Gnome	統合デスクトップ環境のGNOME
　　　・Server	各種サーバー（DNS，FTP，Web，Windowsファイル共有，メール，ニュース，など）
　　　・Server - GUI	GNOMEと各種サーバー
　　追加リポジトリとして、Packages from CentOS Extrasも選択しておきました。

10) パッケージのインストール～完了
　　：15分～20分くらいだったかなあ。ほおっておいたら無事に終わりました。

11) 初回起動時
　　：ファイアウオール（デフォルトのまま）
　　：SELinux（デフォルト「無効」のまま）
　　：日付と時刻（NTP設定）
　　：ユーザーアカウント（通常ユーザーの作成）
　　：サウンド・カード（特に何もしていない）
　　：追加のCDの設定画面（追加CDなし）


12) ログイン
　　：11)で設定したユーザーでのログイン成功を確認！
今回はココまで。

※おまけ
2Pタップトしかない家なので

めっちゃこまりました・・・・
これを買って解決です↓

3P→2P変換アダプタ（グレー）
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ospn.jp/osc2009-do/">オープンソースカンファレンス2009北海道</a>の大じゃんけん大会で勝ち残り<br />
運よく獲得した、サーバー「<a href="http://h50146.www5.hp.com/products/servers/proliant/ml115g5/">HP ProLiant ML115 G5</a>」。</p>
<p>出張やら風邪やらいろいろありましたが、やっと動かし始めました。</p>
<p>自宅サーバーを構築したことがないのはもちろん、<br />
サーバーをいじった経験もほとんどありませんが、<br />
最終目標は「サービスを自宅サーバーから公開」！！<br />
その過程を、このブログに記録していこうと思います。</p>
<p></br></br></p>
<h1>●マシンスペック</h1>
<p>HP ProLiant ML115 G5<br />
CPU：AMD Athlon™ プロセッサー 1640B（2.7GHz、512KB L2）<br />
メモリ：512MB</p>
<p>カスタマイズは必要が生じてから考えます。<br />
思ったほど大きくなかったので、自分の家にもおけました。</p>
<p><a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062299.JPG"><img src='http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062299.thumbnail.JPG' title='p9062299.JPG' alt='p9062299.JPG' /></a></p>
<p>キーボードは薄くて、タッチもカチカチ音がしなくて、結構好きです。</p>
<p><a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062300.JPG"><img src='http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062300.thumbnail.JPG' title='p9062300.JPG' alt='p9062300.JPG' /></a></p>
<p>設定もろもろが完了するまで、ディスプレイは自分のデスクトップと共用です。<br />
（ああ、切り替え機がほしい・・・）</p>
<p></br></br></p>
<h1>●OSインストール</h1>
<div style="padding:0px,10px border-style:none">
CentOSの最新版、CentOS5.3をインストールすることに決定。<br />
（理由は、少しだけRedHat系のコマンドには触れた事があるから。）
</div>
<p></br></br></p>
<h3>(1)isoファイルダウンロード</h3>
<p>まずは、<a href="http://ftp.riken.jp/Linux/centos/5/isos/i386/">CentOS5.3のイメージファイル</a>をダウンロード。<br />
自宅にDVDがあったので、DVDイメージ（CentOS-5.3-i386-bin-DVD.iso）を選択。<br />
本当はDL後に「SHA1SUMチェック」をしなければいけない（あとから知りました・・・）のですが、チェックせずに次の過程へ進んでしまいました；</p>
<p></br></br></p>
<h3>(2)イメージファイルの作成</h3>
<p>DVDイメージをメディアに焼きます。<br />
isoファイルをデータとして保存してはいけません。（←一回失敗しました。）<br />
isoファイルをイメージファイルとして焼く必要があります。<br />
（DVD書き込みのためのソフトにはたいていその機能がついています。）<br />
イメージファイルとして焼くと、メディアにいろいろなファイルが存在している事がわかります。</p>
<p></br></br></p>
<h3>(3)電源ON</h3>
<p>サーバーの電源を入れます。</p>
<p>う・・・・・・・うるさい・・・・・・・！</p>
<p>こんなに起動音がするとは思っていませんでした・・＞＜<br />
起動してしまえば気にならないのですけどね。</p>
<p>OSも何も入っていない空っぽのマシンなので、起動ディスクはCD/DVDとなっています。<br />
ですので、電源をいれ、すぐにDVDを入れれば、インストールが始まります。</p>
<p></br></br></p>
<h3>(4)インストール</h3>
<p>この記事が詳しいですね⇒<a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20090403/327762/?ST=lin-os&#038;P=1">CentOS 5.3</a><br />
インストールしたあとにこの記事を発見しました・・・・。</p>
<p><a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062301.JPG"><img src='http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062301.thumbnail.JPG' title='p9062301.JPG' alt='p9062301.JPG' /></a></p>
<p>大きな流れとしては</p>
<p></br></p>
<p style="font-weight:bold">1) メディアのテスト</p>
<p>　　：OK</p>
<p><a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062302.JPG"><img src='http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062302.thumbnail.JPG' title='p9062302.JPG' alt='p9062302.JPG' /></a></p>
<p></br></p>
<p style="font-weight:bold">2) 言語の選択</p>
<p>　　：日本語</p>
<p></br></p>
<p style="font-weight:bold">3) キーボードの設定</p>
<p>　　：日本語キーボード</p>
<p></br></p>
<p style="font-weight:bold">4) アップグレードの検証</p>
<p>　　：新規なので「インストール CentOS」</p>
<p></br></p>
<p style="font-weight:bold">5) ディスクパーティションの設定</p>
<p>　　：デフォルトまま</p>
<p></br></p>
<p style="font-weight:bold">6) ネットワークの設定</p>
<p>　　：サーバー用の固定IP設定をしなければいけないのですが、とりあえずそのまま進む・・・<br />
　　　（これが次の課題）</p>
<p></br></p>
<p style="font-weight:bold">７） タイムゾーンの選択</p>
<p>　　：アジア/東京</p>
<p></br></p>
<p style="font-weight:bold">8) rootパスワードを設定</p>
<p>　　：******（6文字以上)</p>
<p></br></p>
<p style="font-weight:bold">9) インストールパッケージの選択</p>
<p>　　：次の3つを選択しました。</p>
<p>　　　・Desktop - Gnome	統合デスクトップ環境のGNOME<br />
　　　・Server	各種サーバー（DNS，FTP，Web，Windowsファイル共有，メール，ニュース，など）<br />
　　　・Server - GUI	GNOMEと各種サーバー</p>
<p>　　追加リポジトリとして、Packages from CentOS Extrasも選択しておきました。</p>
<p></br></p>
<p style="font-weight:bold">10) パッケージのインストール～完了</p>
<p>　　：15分～20分くらいだったかなあ。ほおっておいたら無事に終わりました。</p>
<p></br></p>
<p style="font-weight:bold">11) 初回起動時</p>
<p>　　：ファイアウオール（デフォルトのまま）<br />
　　：SELinux（デフォルト「無効」のまま）<br />
　　：日付と時刻（NTP設定）<br />
　　：ユーザーアカウント（通常ユーザーの作成）<br />
　　：サウンド・カード（特に何もしていない）<br />
　　：追加のCDの設定画面（追加CDなし）</p>
<p><a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062303.JPG"><img src='http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/p9062303.thumbnail.JPG' title='p9062303.JPG' alt='p9062303.JPG' /></a></p>
<p></br></p>
<p style="font-weight:bold">12) ログイン</p>
<p>　　：11)で設定したユーザーでのログイン成功を確認！</p>
<p>今回はココまで。</p>
<p></br></br></p>
<h3>※おまけ</h3>
<p>2Pタップトしかない家なので</p>
<p><a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/20090906171503.jpg"><img src='http://terakonya.sarm.net/wordpress/wp-content/uploads/2009/09/20090906171503.thumbnail.jpg' title='20090906171503.jpg' alt='20090906171503.jpg' /></a></p>
<p>めっちゃこまりました・・・・</p>
<p>これを買って解決です↓<br />
<a href="http://direct.sanwa.co.jp/ItemPage/TAP-AD1GYN"><br />
3P→2P変換アダプタ（グレー）</a></p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/09/09/112/feed</wfw:commentRss>
		</item>
		<item>
		<title>Tidy関数を使ったスクレイピングとTwitterAPI（2）-TwitterAPI::update</title>
		<link>http://terakonya.sarm.net/wordpress/2009/02/24/103</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/02/24/103#comments</comments>
		<pubDate>Tue, 24 Feb 2009 13:57:52 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[Programing]]></category>

		<category><![CDATA[API]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/02/24/103</guid>
		<description><![CDATA[Twitterに投稿をpostしたり、タイムラインを取得したりすることができるTwitterAPI。
（仕様日本語訳：[観] Twitter API 仕様書 (勝手に日本語訳シリーズ)）
PHPでTwitterAPIを使用できるPEARライブラリもあるのだけど（Services_Twitter）
勉強を兼ねて自分でクラスを作成してみました。
今後、タイムライン取得や、返信取得も必要に応じて増やしていく予定。

TwitterAPI::updateを呼び出す
PEARライブラリのHTTPRequestを使用しています。
主な流れは
●引数として渡されたID・PASSWORDでBASIC認証を行う
●POSTデータに投稿内容をセット
●URL（ http://twitter.com/statuses/update.xml ）にPOSTを使用したHTTPリクエスト送信
●レスポンスコードとして200が返ってくれば投稿成功
となります。


//TwitterAPI.class.php
class TwitterAPI {
        // ########## TwitterにPOSTする
	public function update( $status , $id , $pass ) {
		require_once &#34;HTTP/Request.php&#34;;
		$api_url = &#34;http://twitter.com/statuses/update.xml&#34;;
		$req = new HTTP_Request($api_url);
		$req-&#62;setMethod(HTTP_REQUEST_METHOD_POST);
		$req-&#62;setBasicAuth($id, $pass);
		$req-&#62;addPostData(&#34;status&#34; , $status );
		if(!PEAR::isError( $req-&#62;sendRequest())){
			return $req-&#62;getResponseCode();
		} else {
			return false;
		}
	}
}

[プロキシを介してインターネットに接続している場合]
以下のようにして、プロキシ設定を追加します。


$req = new HTTP_Request($api_url);
//...(略)
$req-&#62;setProxy(&#34;your_proxy&#34;, 8888);
//...(略)
if(!PEAR::isError( $req-&#62;sendRequest())){
....


TwitterAPIクラス使用方法
自作したTwitterAPIクラスは以下のようにして使用します。
IDとパスワードは呼び出し時に自由に設定できるようにしてあります。


// オブジェクト生成
$tap = new TwitterAPI();
$status = &#34;投稿内容文字列&#34;;
$tap-&#62;update( $status [...]]]></description>
			<content:encoded><![CDATA[<p>Twitterに投稿をpostしたり、タイムラインを取得したりすることができるTwitterAPI。<br />
（仕様日本語訳：<a href="http://watcher.moe-nifty.com/memo/2007/04/twitter_api.html" target="_blank">[観] Twitter API 仕様書 (勝手に日本語訳シリーズ)</a>）<br />
PHPでTwitterAPIを使用できるPEARライブラリもあるのだけど（<a href="http://labs.transrain.net/products/services_twitter/" target="_blank">Services_Twitter</a>）<br />
勉強を兼ねて自分でクラスを作成してみました。<br />
今後、タイムライン取得や、返信取得も必要に応じて増やしていく予定。<br />
<br/></p>
<h3>TwitterAPI::updateを呼び出す</h3>
<p>PEARライブラリのHTTPRequestを使用しています。<br />
主な流れは<br />
●引数として渡されたID・PASSWORDでBASIC認証を行う<br />
●POSTデータに投稿内容をセット<br />
●URL（ http://twitter.com/statuses/update.xml ）にPOSTを使用したHTTPリクエスト送信<br />
●レスポンスコードとして200が返ってくれば投稿成功<br />
となります。</p>
<pre name="code" class="php">

//TwitterAPI.class.php
class TwitterAPI {
        // ########## TwitterにPOSTする
	public function update( $status , $id , $pass ) {
		require_once &quot;HTTP/Request.php&quot;;
		$api_url = &quot;http://twitter.com/statuses/update.xml&quot;;
		$req = new HTTP_Request($api_url);
		$req-&gt;setMethod(HTTP_REQUEST_METHOD_POST);
		$req-&gt;setBasicAuth($id, $pass);
		$req-&gt;addPostData(&quot;status&quot; , $status );
		if(!PEAR::isError( $req-&gt;sendRequest())){
			return $req-&gt;getResponseCode();
		} else {
			return false;
		}
	}
}
</pre>
<h6>[プロキシを介してインターネットに接続している場合]</h6>
<p>以下のようにして、プロキシ設定を追加します。</p>
<pre name="code" class="php">

$req = new HTTP_Request($api_url);
//...(略)
$req-&gt;setProxy(&quot;your_proxy&quot;, 8888);
//...(略)
if(!PEAR::isError( $req-&gt;sendRequest())){
....
</pre>
<p><br/></p>
<h3>TwitterAPIクラス使用方法</h3>
<p>自作したTwitterAPIクラスは以下のようにして使用します。<br />
IDとパスワードは呼び出し時に自由に設定できるようにしてあります。</p>
<pre name="code" class="php">

// オブジェクト生成
$tap = new TwitterAPI();
$status = &quot;投稿内容文字列&quot;;
$tap-&gt;update( $status , ID , PASS );
</pre>
<p><br/></p>
<h3>札幌市 水道凍結情報( http://twitter.com/sap_freezer )</h3>
<p>いままで作成したクラスを組み合わせて、TwitterBotを作成しました。<br />
<a href="http://twitter.com/sap_freezer" target="_blank">Twitter / sap_freezer</a><br />
メイン実行クラスは以下のようになっています。</p>
<pre name="code" class="php">

#!/usr/local/php5/bin/php
&lt;php?
// 水道情報局のURL
define(&#039;INIT_URL&#039; , &quot;http://www.sweb.co.jp/tenki/cgi/freeze.cgi&quot;);
// twitter API POST
define(&#039;ID&#039; , &quot;twitterID&quot;);
define(&#039;PASS&#039; , &quot;twitterPassWord&quot;);
require_once &quot;GetHttpSource.class.php&quot;;
require_once &quot;Scraping.class.php&quot;;
require_once &quot;TwitterAPI.class.php&quot;;

// HTMLの取得
$ca = new GetHttpSource();
$data = $ca-&gt;get_html(INIT_URL);

// Tidy関数config
$config = array(&#039;indent&#039; =&gt; TRUE,
                &#039;output-xhtml&#039; =&gt; TRUE,
                &#039;wrap&#039; =&gt; 200);
// 取得したHTMLファイルの内容をUTF-8の文字コードで$configで指定した設定で、tidyオブジェクトを作成
$tidy = tidy_parse_string($data, $config, &#039;UTF8&#039;);
// cleanRepairで整形
$tidy-&gt;cleanRepair(); 

// スクレイピング処理
$scr = new Scraping();
$result_array = $scr-&gt;scraping_data($tidy-&gt;body());
$result_date  = $scr-&gt;scraping_date_data($tidy-&gt;body());

// UPDATEする
$tap = new TwitterAPI();
foreach( $result_array as $area_r ){
	$status = &quot;[&quot;.$area_r[&quot;center&quot;].&quot;：：水道凍結情報]  今夜は【&quot;.$area_r[&quot;sfont1&quot;].&quot;】です。明日は【&quot;.$area_r[&quot;sfont2&quot;].&quot;】です。（&quot;.$result_date.&quot;）&quot;.INIT_URL;
	if( $result = !$tap-&gt;update( $status , ID , PASS ) ){
		echo&quot;APIエラー&quot;;
	} else {
		echo $result .&quot; &quot; ;
		echo $status ;
	}
}
?&gt;
</pre>
<p>はじめて作ったTwitterのBOT、感慨深いです。<br />
一年ぶりにソースを見直したら、改善できそうなところが・・・・<br />
そこに成長を感じたりもします。</p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/02/24/103/feed</wfw:commentRss>
		</item>
		<item>
		<title>Tidy関数を使ったスクレイピングとTwitterAPI（１）-Tidy関数でスクレイピング</title>
		<link>http://terakonya.sarm.net/wordpress/2009/02/24/102</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/02/24/102#comments</comments>
		<pubDate>Tue, 24 Feb 2009 13:03:24 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[Programing]]></category>

		<category><![CDATA[API]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/02/24/102</guid>
		<description><![CDATA[APIとして使いやすい（動くサービスが作りやすい）TwitterのAPIを使って
昨年から少しずつ、Twitter-bot（自動投稿プログラム）を作成していました。
せっかくなので、ここにまとめておきたいと思います。

札幌市水道凍結情報配信bot
「水道凍結情報」－さっぽろお天気ネット－で公開されている情報を
WEBページから取得し、毎晩Twitterに配信するというbotです。
一定期間、一定地域にしかニーズはありません。
が、これも勉強です。

スクレイピング処理
今回スクレイピングしたかったHTMLはこんなソースです。


&#60;tr&#62;
    &#60;td&#62;
        &#60;p class=center&#62;中央区&#60;/p&#62;
    &#60;/td&#62;
    &#60;td&#62;
        &#60;img src=&#34;../images/freeze3.gif&#34; alt=&#34;注意&#34;&#62;
        &#60;span class=sfont&#62;注意&#60;/span&#62;
    &#60;/td&#62;
    &#60;TD&#62;
       [...]]]></description>
			<content:encoded><![CDATA[<p>APIとして使いやすい（動くサービスが作りやすい）TwitterのAPIを使って<br />
昨年から少しずつ、Twitter-bot（自動投稿プログラム）を作成していました。<br />
せっかくなので、ここにまとめておきたいと思います。<br />
<br/></p>
<h3>札幌市水道凍結情報配信bot</h3>
<p><a href="http://www.sweb.co.jp/tenki/cgi/freeze.cgi" target="_blank">「水道凍結情報」－さっぽろお天気ネット－</a>で公開されている情報を<br />
WEBページから取得し、毎晩Twitterに配信するというbotです。<br />
一定期間、一定地域にしかニーズはありません。<br />
が、これも勉強です。<br />
<br/></p>
<h5>スクレイピング処理</h5>
<p>今回スクレイピングしたかったHTMLはこんなソースです。</p>
<pre name="code" class="html">

&lt;tr&gt;
    &lt;td&gt;
        &lt;p class=center&gt;中央区&lt;/p&gt;
    &lt;/td&gt;
    &lt;td&gt;
        &lt;img src=&quot;../images/freeze3.gif&quot; alt=&quot;注意&quot;&gt;
        &lt;span class=sfont&gt;注意&lt;/span&gt;
    &lt;/td&gt;
    &lt;TD&gt;
        &lt;img src=&quot;../images/freeze2.gif&quot; alt=&quot;念のため&quot;&gt;
        &lt;span class=sfont&gt;念のため&lt;/span&gt;
    &lt;/TD&gt;
&lt;/tr&gt;
</pre>
<p>ここから class=center と class=sfont  の中身を3つセットで取り出したい。</p>
<p>取り出すために必要になる処理は大雑把にいうと以下となります。</p>
<p>◇ html情報を文字列として取り出す<br />
◇ Tidy関数を使用し、文字列にストアされたドキュメントをパースする<br />
◇ パースしたTidyオブジェクトを操作して、html情報を切り出す<br />
<br/></p>
<h6>◇html情報を文字列として取り出す</h6>
<p>fopen関数を使って指定URLの情報を取得します。</p>
<pre name="code" class="php">

//GetHttpSource
class GetHttpSource {
	public function get_html($url){
		if (($fp = fopen($url, &quot;r&quot;)) == FALSE) {
			$this-&gt;status = &quot;エラーが発生しました。&quot;;
			return;
		}

		$str = fgets($fp);
		while (! feof($fp)) {
			$str = $str . fgets($fp);
		}
		fclose($fp);

		$data = mb_convert_encoding($str,&quot;utf-8&quot;,&quot;auto&quot;);
		return $data;
	}
}
</pre>
<p><b>[プロキシを介してインターネットに接続している場合]</b><br />
fsockopenを使います。</p>
<pre name="code" class="php">

    $proxy_name = &#039;your_proxy&#039;;
    $proxy_port = 8888;
    $proxy_cont = &#039;&#039;;

    $proxy_fp = fsockopen($proxy_name, $proxy_port);
    if ( $proxy_fp == false ) {
       echo &quot;Error!!&quot;;
       return false;
    }
   // プロキシ情報を付加してファイル取得
    fputs($proxy_fp, &quot;GET $proxy_url HTTP/1.0rnHost: $proxy_namernrn&quot;);
    while(!feof($proxy_fp)) {$proxy_cont .= fread($proxy_fp,4096);}
    fclose($proxy_fp);
   // プロキシ情報を除去してデータとして格納する
    $data = mb_convert_encoding(substr($proxy_cont, strpos($proxy_cont,&quot;rnrn&quot;)+4),&quot;utf-8&quot;,&quot;auto&quot;);
    return $proxy_cont;
</pre>
<p><br/></p>
<h6>◇Tidy関数を使用し、文字列にストアされたドキュメントをパースする</h6>
<p><a href="http://php.benscom.com/manual/ja/book.tidy.php" target="_blank">PHP: Tidy - Manual</a>を参考に。<br />
Tidy 関数 parseString() と cleanRepair() を使用します。</p>
<pre name="code" class="php">

// HTMLの取得
$ca = new GetHttpSource(); // 自作クラス
$data = $ca-&gt;get_html(INIT_URL);

// Tidy関数config
$config = array(&#039;indent&#039; =&gt; TRUE,
                &#039;output-xhtml&#039; =&gt; TRUE,
                &#039;wrap&#039; =&gt; 200);
// 取得したHTMLファイルの内容をUTF-8の文字コードで$configで指定した設定で、tidyオブジェクトを作成
$tidy-&gt;parseString($data, $config, &#039;UTF8&#039;);
// パースされたマークアップに設定に基く誤りの修正を行う
$tidy-&gt;cleanRepair(); 
</pre>
<p><br/></p>
<h6>◇パースしたTidyオブジェクトを操作して、html情報を切り出す</h6>
<p>ノードとして保持されているTidyオブジェクト内の情報を、再帰的に読み込み、<br />
必要な情報だけを取り出します。<br />
当日（当夜）予想と翌日（日中）予想を判断するのは「読み込まれる順番」しかなかったので、<br />
class変数に取得した値を突っ込んでいって全てが埋まったらarrayに格納という手段をとっています。</p>
<pre name="code" class="php">

class Scraping {
	private $center= &quot;&quot;;
	private $sfont1 = &quot;&quot;;
	private $sfont2 = &quot;&quot;;
	private $result = array();
	private $result_date = &quot;&quot;;

        // ############ 各地区の予測を取得
	public function scraping_data(tidyNode $node) {
		$this-&gt;doScraping($node);
		return $this-&gt;result;
	}

	private function doScraping(tidyNode $node) {
		    if(isset($node-&gt;id)) {
	        // $node-&gt;id が TABLEタグだったらそのなかにデータあり
	        if($node-&gt;id == TIDY_TAG_TD ) {
    			$chileNodes = $node-&gt;child ;
    	 		foreach( $chileNodes as $item ){
        	 		if(isset($item-&gt;id) &amp;&amp; $item-&gt;id == TIDY_TAG_P ) {
			            if (isset($item-&gt;attribute[&#039;class&#039;])){
			                // class属性値がcenterだったら
			                if (stristr ($item-&gt;attribute[&#039;class&#039;] ,&quot;center&quot;) !==FALSE){
								// 区
				                $this-&gt;center = trim( $item-&gt;child[0]-&gt;value);
			                }
			            }
        	 		}
        	 		if( isset($item-&gt;id) &amp;&amp; $item-&gt;id == TIDY_TAG_SPAN ) {
			            if (isset($item-&gt;attribute[&#039;class&#039;])){
			                // class属性値がsfontだったら
			                if (stristr ($item-&gt;attribute[&#039;class&#039;] ,&quot;sfont&quot;) !==FALSE){
						if( $this-&gt;sfont1 == &quot;&quot; ){
							// 夜から朝方の予想
							$this-&gt;sfont1 = trim( $item-&gt;child[0]-&gt;value );
						} else {
							// 日中の予想
							$this-&gt;sfont2 = trim( $item-&gt;child[0]-&gt;value );
						}
			                }
			            }
        	 		}
    	 		}
			// 情報セットが取れたらリストに格納
			if(  strlen($this-&gt;center) &amp;&amp; strlen($this-&gt;sfont1) &amp;&amp; strlen($this-&gt;sfont2) ) {
				$this-&gt;result[] = array(&quot;center&quot; =&gt; $this-&gt;center ,&quot;sfont1&quot; =&gt;$this-&gt;sfont1 , &quot;sfont2&quot; =&gt;$this-&gt;sfont2 );
				//echo &quot;OK&quot;;
				// クリアする
				$this-&gt;center = &quot;&quot;;
				$this-&gt;sfont1 = &quot;&quot;;
				$this-&gt;sfont2 = &quot;&quot;;
			}
        	 }
	    }
	    // 子供のノードが存在すれば、再帰的にdoScraping()を繰り返す
	    if($node-&gt;hasChildren()) {
	        foreach($node-&gt;child as $c) {
	            $this-&gt;doScraping($c);
	        }
	    }
	}
}
</pre>
<p><br/></p>
<h6>おまけ（日付の取得）</h6>
<p>このソースから日付も取り出すことにしました。</p>
<pre name="code" class="html">

&lt;h2&gt;札幌市内の水道凍結予報&lt;/h2&gt;
&lt;h3&gt;各区の水道凍結指数&lt;/h3&gt;
&lt;p class=comment&gt;2009年02月24日 16時00分発表&lt;/p&gt;
&lt;p class=clear&gt;&lt;/p&gt;
</pre>
<p>スクレイピング処理はこんな感じになります。</p>
<pre name="code" class="php">

class Scraping {
	// ############ 日付を取得する
	public function scraping_date_data(tidyNode $node) {
            return $this-&gt;getDate($node);
	}

	private function getDate(tidyNode $node) {
	    if(isset($node-&gt;id)) {
            // $node-&gt;id が Pタグだったらそのなかに日付データあり
            if($node-&gt;id == TIDY_TAG_P ) {
                // $node-&gt;id の class属性値がcenterだったら
                if (stristr ($node-&gt;attribute[&#039;class&#039;] ,&quot;comment&quot;) !==FALSE){
                    return trim( $node-&gt;child[0]-&gt;value );
                 }
            }
        }
	    // 子供のノードが存在すれば、再帰的にdoScraping()を繰り返す
	    if($node-&gt;hasChildren()) {
	        foreach($node-&gt;child as $c) {
	            $result = $this-&gt;getDate($c);
                if(strlen($result)) return $result;
	        }
	    }
	}
}
</pre>
<p>これでスクレイピング処理が完了。<br />
これをTwitterAPIを使用して、投稿します。</p>
<p>長くなったので続きは次回。</p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/02/24/102/feed</wfw:commentRss>
		</item>
		<item>
		<title>PHP5・apache2.2系をインストール（WindowsXP）</title>
		<link>http://terakonya.sarm.net/wordpress/2009/02/24/101</link>
		<comments>http://terakonya.sarm.net/wordpress/2009/02/24/101#comments</comments>
		<pubDate>Tue, 24 Feb 2009 12:19:08 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[Programing]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2009/02/24/101</guid>
		<description><![CDATA[PHP5開発環境をWindowsXPで整えるための手順です。
今回は、

PHP5
apache2.2
PEAR

を別個インストールしました。
基本はPHP5.0 - Ground-SunLightがとてもわかりやすいです。
引っかかっりどころを主にメモ。

【PHP】
●ダウンロードファイルを展開
「iniファイルやdllファイルをWindowsのシステムフォルダに配置する」ように書いてあるマニュアルが多いが、
Windows環境変数[Path]にphpのディレクトリを登録しておけば移動しなくてもOK。
（なるべくシステムフォルダはいじりたくないものです。）
★環境変数を設定したあとは再起動が必要。
php.iniの編集


extension_dir = &#34;E:/php5/ext&#34;
include_path=&#34;.;E:/php5/includes;E:/php5/PEAR&#34;

extension_dirのディレクトリもinclude_pathのディレクトリも / 区切り。
（include_pathはphp.iniの例示が\になっていて、はまり込んだ）
●今回使用したextension


extension=php_mbstring.dll
extension=php_openssl.dll
extension=php_tidy.dll


●mbstringの設定   - phpで扱う文字コードをUTF-8で統一


mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none


【apache2.2系にPHPの設定】
httpd.conf


LoadModule php5_module &#34;E:/php5/php5apache2_2.dll&#34;
&#60;IfModule mod_php5.c&#62;
AddType application/x-httpd-php .php .php5
PHPIniDir &#34;E:/php5&#34;
&#60;/IfModule&#62;

拡張子やiniファイルディレクトリの設定はよいとして
LoadModuleに注意。
Apache2.2系なので
php5apache2.dll ではなく php5apache2_2.dll をLoadする必要があります。
間違えるとApacheが起動してくれません（＞＜）

【PEAR】
今回、HTTP_REQUESTを使用したかったのでPEARもインストール。
本来であれば、phpインストール時についてくる go-pear.bat を実行すればよいだけなのですが
PHPのバージョンによっては
go-pear.batで実行される go-pear.phar モジュールが壊れている場合があるようで
最新の go-pear.phar モジュールをダウンロード( http://pear.php.net/go-pear )して
自身がインストールしたものと置き換える必要があります。
PHP5.2.0のgo-pear.batは壊れているっぽい - Do You PHP はてな
※PHP5.2.5(php-5.2.5-Win32.zip)のgo-pear.batは正常に動作します。
[プロキシを介してインターネットに接続している場合]
http://pear.php.net/go-pear のソースコードをphpファイルとして保存し、


&#62; php -f E:php5PEARgo-pear.php

で実行。
実行途中で


&#62; HTTP proxy (http://user:password@proxy.myhost.com:port), [...]]]></description>
			<content:encoded><![CDATA[<p>PHP5開発環境をWindowsXPで整えるための手順です。</p>
<p>今回は、</p>
<ul>
<li>PHP5</li>
<li>apache2.2</li>
<li>PEAR</li>
</ul>
<p>を別個インストールしました。</p>
<p>基本は<a href="http://www.y2sunlight.com/ground/?PHP5.0" target="_blank">PHP5.0 - Ground-SunLight</a>がとてもわかりやすいです。<br />
引っかかっりどころを主にメモ。<br />
<br/></p>
<h3>【PHP】</h3>
<p>●ダウンロードファイルを展開<br />
「iniファイルやdllファイルをWindowsのシステムフォルダに配置する」ように書いてあるマニュアルが多いが、<br />
Windows環境変数[Path]にphpのディレクトリを登録しておけば移動しなくてもOK。<br />
（なるべくシステムフォルダはいじりたくないものです。）<br />
<b>★環境変数を設定したあとは再起動が必要。</b></p>
<h6>php.iniの編集</h6>
<pre name="code" class="xml">

extension_dir = &quot;E:/php5/ext&quot;
include_path=&quot;.;E:/php5/includes;E:/php5/PEAR&quot;
</pre>
<p>extension_dirのディレクトリもinclude_pathのディレクトリも / 区切り。<br />
（include_pathはphp.iniの例示が\になっていて、はまり込んだ）</p>
<p>●今回使用したextension</p>
<pre name="code" class="xml">

extension=php_mbstring.dll
extension=php_openssl.dll
extension=php_tidy.dll
</pre>
<p><br/></p>
<p>●mbstringの設定   - phpで扱う文字コードをUTF-8で統一</p>
<pre name="code" class="xml">

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none
</pre>
<p><br/></p>
<h3>【apache2.2系にPHPの設定】</h3>
<p>httpd.conf</p>
<pre name="code" class="xml">

LoadModule php5_module &quot;E:/php5/php5apache2_2.dll&quot;
&lt;IfModule mod_php5.c&gt;
AddType application/x-httpd-php .php .php5
PHPIniDir &quot;E:/php5&quot;
&lt;/IfModule&gt;
</pre>
<p>拡張子やiniファイルディレクトリの設定はよいとして<br />
LoadModuleに注意。<br />
Apache2.2系なので<br />
<b>php5apache2.dll ではなく php5apache2_2.dll をLoadする必要があります。</b><br />
間違えるとApacheが起動してくれません（＞＜）<br />
<br/></p>
<h3>【PEAR】</h3>
<p>今回、HTTP_REQUESTを使用したかったのでPEARもインストール。<br />
本来であれば、phpインストール時についてくる go-pear.bat を実行すればよいだけなのですが<br />
PHPのバージョンによっては<br />
go-pear.batで実行される go-pear.phar モジュールが壊れている場合があるようで<br />
最新の go-pear.phar モジュールをダウンロード( http://pear.php.net/go-pear )して<br />
自身がインストールしたものと置き換える必要があります。<br />
<a href="http://d.hatena.ne.jp/shimooka/20061105/1162714257" target="_blank">PHP5.2.0のgo-pear.batは壊れているっぽい - Do You PHP はてな</a></p>
<p>※PHP5.2.5(php-5.2.5-Win32.zip)のgo-pear.batは正常に動作します。</p>
<h6>[プロキシを介してインターネットに接続している場合]</h6>
<p>http://pear.php.net/go-pear のソースコードをphpファイルとして保存し、</p>
<pre name="code" class="xml">

&gt; php -f E:php5PEARgo-pear.php
</pre>
<p>で実行。<br />
実行途中で</p>
<pre name="code" class="xml">

&gt; HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none::
</pre>
<p>ときかれるのでEnterを押さずにプロキシを指定してインストールを続けます。<br />
<br/></p>
<h3>【PEARモジュールインストール】</h3>
<p>コマンドラインを使用してPEARのコマンドを実行します。<br />
今回は HTTP_REQUESTモジュールをインストールします。</p>
<pre name="code" class="xml">

&gt;pear install HTTP_REQUEST 
</pre>
<p>でOK。</p>
<h6>[プロキシを介してインターネットに接続している場合]</h6>
<p>先にconfigにプロキシを設定しておく必要があります。</p>
<pre name="code" class="xml">

&gt;pear config-set http_proxy http://your_proxy:8888
</pre>
<p>このあとインストールコマンドをたたけばOKです。</p>
<p>プロキシ設定している環境では色々と設定が増えますが、<br />
上記で一通り、PHPの開発環境はそろいます。<br />
（DBはインストールしていませんが・・・・）</p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2009/02/24/101/feed</wfw:commentRss>
		</item>
		<item>
		<title>Frog.jsを使う。(1) - JavaScript Slideshow</title>
		<link>http://terakonya.sarm.net/wordpress/2007/11/22/100</link>
		<comments>http://terakonya.sarm.net/wordpress/2007/11/22/100#comments</comments>
		<pubDate>Thu, 22 Nov 2007 14:59:37 +0900</pubDate>
		<dc:creator>iras</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://terakonya.sarm.net/wordpress/2007/11/22/100</guid>
		<description><![CDATA[

#FrogJS{width: 510px;margin: 0 auto;border:1px solid #FF0099;padding:10px 0px;}
#FrogJSCredit{text-align: right;font-size: 12px;color: #859F5E;padding: 1px;}
#FrogJSCaption{text-align: left;line-height: 140%;color: #F08600;font-size: 12px;}

JavaScriptを使ったスライドショーです。
サムネイルをクリックすると、中心に画像が表示されます。
動きがキレイで、さらに実装が簡単なので、使いどころがありそうです。
[ダウンロードと設定]
FrogJS Javascript Gallery
から、FrogJS v1.1をダウンロードします。
内部には必要なスクリプト・サンプルが同胞されています。
prototype.jsとscriptaculous.js（effects.js）が必要ですが、
既にサイトに組み込んでいる場合は、frog.jsだけを設定すればOKです。
prototype.js→scriptaculous.js→frog.jsの順に読み込まれるようにしておきます。
&#60;script type=&#34;text/javascript&#34; src=&#34;xxxx/prototype.js&#34;&#62;&#60;/script&#62;
&#60;script type=&#34;text/javascript&#34; src=&#34;xxxx/scriptaculous.js?load=effects&#34;&#62;&#60;/script&#62;
&#60;script type=&#34;text/javascript&#34; src=&#34;xxxx/reflection.js&#34;&#62;&#60;/script&#62;
[実装方法]
このスライドショーには、表示用画像とサムネイル用画像のセット画像が必要です。
画像を準備したら、次のようにhtmlを記述します。
＊画像を囲むブロック要素にid[FrogJS]を設定します。
＊リンク要素のパス（href)に表示したい画像のURLを設定します。
＊リンク要素のtitleに設定した値は、画像表示時のタイトルとして表示されます。
＊リンク要素のrelにURLを設定すると、リンク画像にすることができます。
＊img要素のsrcにサムネイル画像のURLを設定します。
＊img要素のaltに設定した値は、画像表示時に説明文として表示されます。
&#60;div id=&#34;FrogJS&#34;&#62;
　&#60;a href=&#34;[画像URL]&#34; title=&#34;[画像タイトル]&#34; rel=&#34;[画像をリンクさせる場合はそのURL]&#34;&#62;
　　&#60;img src=&#34;[サムネイルURL]&#34; alt=&#34;[画像の下に表示される説明文]&#34; 　/&#62;
　&#60;/a&#62;
　&#60;a href=&#34;[画像URL]&#34; title=&#34;[画像タイトル]&#34; rel=&#34;[画像をリンクさせる場合はそのURL]&#34;&#62;
　　&#60;img src=&#34;[サムネイルURL]&#34; alt=&#34;[画像の下に表示される説明文]&#34; 　/&#62;
　&#60;/a&#62;
　&#60;a href=&#34;[画像URL]&#34; title=&#34;[画像タイトル]&#34; rel=&#34;[画像をリンクさせる場合はそのURL]&#34;&#62;
　　&#60;img src=&#34;[サムネイルURL]&#34; alt=&#34;[画像の下に表示される説明文]&#34; 　/&#62;
&#60;/a&#62;
[以下略]
&#60;/div&#62;
[CSS設定]
次のようなidのブロック要素が生成されますので、
お好みに合わせてスタイルを設定してください。
#FrogJS：画像表示部全体
#FrogJSCredit：aタグに指定したtitle表示部
#FrogJSCaption：imgタグに指定したalt表示部
[サンプル]
今回は秋に撮影した紅葉の写真を使用します。
（画像の読み込みが若干重いので動きがスムーズでないです・・・。）

    
        
 [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript" src="http://terakonya.sarm.net/work/scripts/prototype/prototype-1.5.0.js"></script><script type="text/javascript" src="http://terakonya.sarm.net/work/scripts/scriptaculous/scriptaculous-js-1.7.0/scriptaculous.js?load=effects"></script><script type="text/javascript" src="http://terakonya.sarm.net/work/wordpress/frog.js"></script><br />
<style>
#FrogJS{width: 510px;margin: 0 auto;border:1px solid #FF0099;padding:10px 0px;}
#FrogJSCredit{text-align: right;font-size: 12px;color: #859F5E;padding: 1px;}
#FrogJSCaption{text-align: left;line-height: 140%;color: #F08600;font-size: 12px;}
</style>
<p>JavaScriptを使ったスライドショーです。<br />
サムネイルをクリックすると、中心に画像が表示されます。<br />
動きがキレイで、さらに実装が簡単なので、使いどころがありそうです。</p>
<p>[ダウンロードと設定]<br />
<a href='http://www.puidokas.com/portfolio/frogjs/' target='_blank'>FrogJS Javascript Gallery</a><br />
から、FrogJS v1.1をダウンロードします。<br />
内部には必要なスクリプト・サンプルが同胞されています。<br />
prototype.jsとscriptaculous.js（effects.js）が必要ですが、<br />
既にサイトに組み込んでいる場合は、frog.jsだけを設定すればOKです。<br />
prototype.js→scriptaculous.js→frog.jsの順に読み込まれるようにしておきます。<br />
<code>&lt;script type=&quot;text/javascript&quot; src=&quot;xxxx/prototype.js&quot;&gt;&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;xxxx/scriptaculous.js?load=effects&quot;&gt;&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;xxxx/reflection.js&quot;&gt;&lt;/script&gt;</code></p>
<p>[実装方法]<br />
このスライドショーには、表示用画像とサムネイル用画像のセット画像が必要です。<br />
画像を準備したら、次のようにhtmlを記述します。<br />
＊画像を囲むブロック要素にid[FrogJS]を設定します。<br />
＊リンク要素のパス（href)に表示したい画像のURLを設定します。<br />
＊リンク要素のtitleに設定した値は、画像表示時のタイトルとして表示されます。<br />
＊リンク要素のrelにURLを設定すると、リンク画像にすることができます。<br />
＊img要素のsrcにサムネイル画像のURLを設定します。<br />
＊img要素のaltに設定した値は、画像表示時に説明文として表示されます。<br />
<code>&lt;div id=&quot;FrogJS&quot;&gt;<br />
　&lt;a href=&quot;[画像URL]&quot; title=&quot;[画像タイトル]&quot; rel=&quot;[画像をリンクさせる場合はそのURL]&quot;&gt;<br />
　　&lt;img src=&quot;[サムネイルURL]&quot; alt=&quot;[画像の下に表示される説明文]&quot; 　/&gt;<br />
　&lt;/a&gt;<br />
　&lt;a href=&quot;[画像URL]&quot; title=&quot;[画像タイトル]&quot; rel=&quot;[画像をリンクさせる場合はそのURL]&quot;&gt;<br />
　　&lt;img src=&quot;[サムネイルURL]&quot; alt=&quot;[画像の下に表示される説明文]&quot; 　/&gt;<br />
　&lt;/a&gt;<br />
　&lt;a href=&quot;[画像URL]&quot; title=&quot;[画像タイトル]&quot; rel=&quot;[画像をリンクさせる場合はそのURL]&quot;&gt;<br />
　　&lt;img src=&quot;[サムネイルURL]&quot; alt=&quot;[画像の下に表示される説明文]&quot; 　/&gt;<br />
&lt;/a&gt;<br />
[以下略]<br />
&lt;/div&gt;</code></p>
<p>[CSS設定]<br />
次のようなidのブロック要素が生成されますので、<br />
お好みに合わせてスタイルを設定してください。</p>
<p>#FrogJS：画像表示部全体<br />
#FrogJSCredit：aタグに指定したtitle表示部<br />
#FrogJSCaption：imgタグに指定したalt表示部</p>
<p>[サンプル]<br />
今回は秋に撮影した紅葉の写真を使用します。<br />
（画像の読み込みが若干重いので動きがスムーズでないです・・・。）</p>
<div id="FrogJS">
    <a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog1.jpg" title="某大学の校舎横の紅葉" rel="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog1.jpg" target="_blank"><br />
        <img src="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog1_thumb.jpg" alt="2007/10/28撮影。お昼前の人の少ない時間帯でした。" /><br />
    </a><br />
    <a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog2.jpg" title="某大学の銀杏並木1" rel="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog2.jpg" target="_blank"><br />
        <img src="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog2_thumb.jpg" alt="2007/10/28撮影。趣味で撮影に来ているおじちゃん達に話しかけられました。そういう交流も楽しいものです。" /><br />
    </a><br />
    <a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog3.jpg" title="某大学の紅葉と銀杏" rel="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog3.jpg" target="_blank"><br />
        <img src="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog3_thumb.jpg" alt="2007/10/28撮影。初めて使うカメラがあったのですが、使い方がわからず悪戦苦闘。" /><br />
    </a><br />
    <a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog4.jpg" title="某大学の銀杏並木2" rel="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog4.jpg" target="_blank"><br />
        <img src="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog4_thumb.jpg" alt="2007/10/28撮影。一眼レフを持っていたおじさんに助けていただきました。感謝。" /><br />
    </a><br />
    <a href="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog5.jpg" title="某大学の銀杏の木" rel="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog5.jpg" target="_blank"><br />
        <img src="http://terakonya.sarm.net/wordpress/wp-content/uploads/2007/11/frog5_thumb.jpg" alt="カメラの調子が悪かったので夕刻前にもう一度撮り直しに行きました。" /><br />
    </a>
</div>
<p>次は若干のカスタマイズ方法と、APIを使って自動的に呼び出した画像を<br />
スライドショーで表示させるプログラムに挑戦してみたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://terakonya.sarm.net/wordpress/2007/11/22/100/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
