ntp 設定 (CentOS 5.0)
ntpの設定を行った時の備忘録
ntpで時刻同期させるためのサービスがntpdです.
そして,同期させるためには2つの方法があるって.
◆1.[例:ntpdate ntp.nict.jp]を定期的に実行(cron)
◆2.ntpdに勝手にやってもらう(ntpdデーモン)
1.はコレ見て!
技術メモ:白黒サーバーインストール記録
今回は,2.を行ったよ.
やり方は,2つのサイトを参考にしました.
CentOSにntpサーバで時刻同期設定
CentOS5.0でntpを使用して時刻を合わせる
要点は,下の①,②,③ぐらいです.(①から⑤まで順番にやってね)
①:ntpdate ntp.nict.jp(設定変更する前に,時刻同期させておく)
②:vim /etc/ntp.conf(ntpサーバを変更する)
/etc/ntp.conf 内 (↓)
server -4 ntp.nict.jp
restrict 0.centos.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
↓「コメントアウト」
#restrict 0.centos.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
③:vim /etc/sysconfig/ntpd(ハードウェアクロックも同期させる)
ntpで時刻同期させるためのサービスがntpdです.
そして,同期させるためには2つの方法があるって.
◆1.[例:ntpdate ntp.nict.jp]を定期的に実行(cron)
◆2.ntpdに勝手にやってもらう(ntpdデーモン)
1.はコレ見て!
技術メモ:白黒サーバーインストール記録
今回は,2.を行ったよ.
やり方は,2つのサイトを参考にしました.
CentOSにntpサーバで時刻同期設定
CentOS5.0でntpを使用して時刻を合わせる
要点は,下の①,②,③ぐらいです.(①から⑤まで順番にやってね)
①:ntpdate ntp.nict.jp(設定変更する前に,時刻同期させておく)
>ntpdate ntp.nict.jp
②:vim /etc/ntp.conf(ntpサーバを変更する)
/etc/ntp.conf 内 (↓)
server 0.centos.pool.ntp.org↓
server -4 ntp.nict.jp
restrict 0.centos.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
↓「コメントアウト」
#restrict 0.centos.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
③:vim /etc/sysconfig/ntpd(ハードウェアクロックも同期させる)
# Set to 'yes' to sync hw clock after successful ntpdate↓
SYNC_HWCLOCK=no
SYNC_HWCLOCK=yes
④service ntpd restart(再起動)
⑤chkconfig ntpd on (自動起動(PCを起動するときに自動で立ち上がる))
最後に,次はこいつをntpサーバにして,他のローカルPCを時刻同期させよう♪
気象庁Webページをスクレイピング
研究に利用しようと思って,アメダス情報をゲットしたかったんですね、phpで♪
天気情報をWebサービス(rss,api)で提供しているのは,
1)Yahoo!天気
2)goo
3)google
4)livedoor weather hacks
5)ひとくち予報 in Feed
とかがあるらしい.
今回はアメダスデータが欲しかったので,5)はなし.
◆RSSでゲットしよう♪
RSSを提供している,4)のLivedoorを使ってみたよb
http://weather.livedoor.com/amedas/point/50456.html
のデータが欲しいとーb
このRSSをゲットしようと思ったら、、
サイトのテーブルは1時間ごとに更新されるのに、RSSは6時間一度しか更新されない。
このRSSでゲットできるデータは,0・6・12・18時のいずれかでした!
6時間ごとという,大したデータが取れないので,(実地で検証www)
【実装方法】
php: simplexml(),linux:cron
simplexml()はxmlファイルを配列ぶち込んでくれる関数.
欠点があって,要素にアクセスするときパスを指定しないといけないことだね.
◆サイトのHTMLファイルからゲットしよう♪(simplexml()を使って♪)
第二の方法だよねb
HTMLファイルからゲットするんなら,もっと色々なデータを提供している気象庁(http://www.jma.go.jp/jma/index.html)のサイトからゲットしようと♪
<おぉ♪簡単じゃね?前作ったプログラムでいいんじゃね?simplexml()で>
が!失敗!!
htmlはxmlじゃないんですねー!!
(http://www.atmarkit.co.jp/fxml/askxmlexpert/022xhtml/22xhtml.html)
使えない文字とか,色々htmlでは使われていたり。。
俗に言う,XHTMLはhtmlファイルをxmlみたいにちゃんと整形式にしたものだってb
ほうほう♪そういうことだったのか!HTMLとXMLの違いを実地で体験ww
◆HTMLファイルのスクレイピング
第三の方法だよねb
色んな方法があるみたいだけど,今回はscrape_func.phpっていうライブラリを使いました.
スクレイピングは,Webサイトから必要な情報を切り取ることだって.
やってることは,簡単にはマッチした部分を取ってくるって感じ♪
実装したもの(↓)は,ムダにループ回ってるよww
最新の一件のアメダスデータのみDBに格納してるんだけど,ループは24時間分www
そして,Linuxのcronでスケジューリング♪♪
データも1時間ごとのリアルタイムデータが取れるようになったし,満足満足♪♪
【実行結果】
【実装したもの】
/* スクレーピング関数群のインクルード */
include( "scrape_func.php" );
/* getURL()関数を使用して、ページの生データを取得する。 */
$_rawData = getURL( "http://www.jma.go.jp/jp/amedas_h/today-50456.html?groupCode=35&areaCode;=000" );
/* 生データをUTF-8に変換する。 */
//$_rawData = mb_convert_encoding($_rawData, "UTF-8", "auto");
/* 解析しやすいよう、生データを整理する。 */
$_rawData = cleanString( $_rawData );
//echo $_rawData;
/* 次は若干ややこしい。 必要な項目の開始部分と終了部分は、事前に
HTMLから確認してある。 こういったものを利用して必要なデータを取得
する。 */
$_rawData = getBlock( ""," ", $_rawData,false );
/* これで箇条書きに必要な特定データが入手できた。
ここでは項目を配列化した後、繰り返しで処理を行っている。 */
$_rawData = explode( "", $_rawData ); //1時間毎に分割
//現在の時刻
$date=date( "Y-m-d H:", time() )."00:00";
//echo $date;
//cronする時刻のみのデータをとってくれば良い。
//取得するデータの時刻を求める。
$what=date( "H", time() );
//echo "what:".$what;
//if($which==1)echo "OK!"; //01 =>1
$which=(int)$what;
if($which==0)$which=24;
$conn = pg_connect("データベースの接続");
if (!$conn) {
echo "An error occured.\n";
fwrite($handle,"connection error!\n");
exit;
}
pg_set_client_encoding("sjis");
//echo "
";
$now=0; //時刻ではない
/* 繰り返しを行いながら、個々の項目を解析する。 */
foreach( $_rawData as $_rawBlock ) {
//初期化
//$time=null;
$temp=null;
$rainfall=null;
$wind_direction=null;
$wind_velocity=null;
$sunlight=null;
$moisture=null;
$pressure=null;
//now=0:$which=1 //ひとつずれてる
if($now==($which)){
$_rawBlock = explode( " ", $_rawBlock );//8つのデータを配列に格納...余計に1つ要素が出る..
$str="";
$null_count=0;
$num_element=count($_rawBlock)-1;
//echo "count:".count($_rawBlock);
for($j=0;$j<$num_element;$j++){
$_rawBlock[$j]=strip_tags($_rawBlock[$j]); //余計なタグを除去
$_rawBlock[$j] = trim( $_rawBlock[$j] ); //空白を除去
//echo "j:".$j."->".$_rawBlock[$j].",";
if(!strcmp($_rawBlock[$j]," ")){ //" "=空白
$_rawBlock[$j]=0; //" "のとき、0を代入
$null_count++;
}
if($j==0){
//時間
$str.="'".$date."',";
//$time=$_rawBlock[$j];
//if($time==24)$time=0; //24時 => 0時
//$str.=$time.",";
}else if($j==1){
//気温(℃)
$temp=$_rawBlock[$j];
$str.=$temp.",";
}else if($j==2){
//降水量(mm)
$rainfall=$_rawBlock[$j];
$str.=$rainfall.",";
}else if($j==3){
//風の向き(16方位)
$wind_direction=$_rawBlock[$j];
$str.="'".$wind_direction."',";
}else if($j==4){
//風の強さ(m/s)
$wind_velocity=$_rawBlock[$j];
$str.=$wind_velocity.",";
}else if($j==5){
//日照時間(hour)
$sunlight=$_rawBlock[$j];
$str.=$sunlight.",";
}else if($j==6){
//湿度(%)...少数表記
$moisture=(double)$_rawBlock[$j];
$moisture/=100;
$str.=$moisture.",";
}else if($j==7){
//気圧(hPa)
$pressure=$_rawBlock[$j];
$str.=$pressure;
}
}
if($null_count==$num_element-1){
//echo "null!!";
}
//echo "=>".$str;
//echo "
";
//DBへの登録...あるデータは無視
$sql="insert into weather(time,temp,rainfall,wind_direction,wind_velocity,sunlight,moisture,air_pressure) VALUES (".$str.");";
//echo "sql:".$sql."
";
$result_flag = pg_query($sql);
if (!$result_flag) {
//fwrite($handle,"insert error!\n");
die('INSERT fault'.pg_last_error());
}
pg_close($conn); //DB.close();
}
$now++;
}
?>
【参考】
http://d.hatena.ne.jp/steel-plate/20080417/1208445174
天気情報をWebサービス(rss,api)で提供しているのは,
1)Yahoo!天気
2)goo
3)google
4)livedoor weather hacks
5)ひとくち予報 in Feed
とかがあるらしい.
今回はアメダスデータが欲しかったので,5)はなし.
◆RSSでゲットしよう♪
RSSを提供している,4)のLivedoorを使ってみたよb
http://weather.livedoor.com/amedas/point/50456.html
のデータが欲しいとーb
このRSSをゲットしようと思ったら、、
サイトのテーブルは1時間ごとに更新されるのに、RSSは6時間一度しか更新されない。
このRSSでゲットできるデータは,0・6・12・18時のいずれかでした!
6時間ごとという,大したデータが取れないので,(実地で検証www)
【実装方法】
php: simplexml(),linux:cron
simplexml()はxmlファイルを配列ぶち込んでくれる関数.
欠点があって,要素にアクセスするときパスを指定しないといけないことだね.
◆サイトのHTMLファイルからゲットしよう♪(simplexml()を使って♪)
第二の方法だよねb
HTMLファイルからゲットするんなら,もっと色々なデータを提供している気象庁(http://www.jma.go.jp/jma/index.html)のサイトからゲットしようと♪
<おぉ♪簡単じゃね?前作ったプログラムでいいんじゃね?simplexml()で>
が!失敗!!
htmlはxmlじゃないんですねー!!
(http://www.atmarkit.co.jp/fxml/askxmlexpert/022xhtml/22xhtml.html)
使えない文字とか,色々htmlでは使われていたり。。
俗に言う,XHTMLはhtmlファイルをxmlみたいにちゃんと整形式にしたものだってb
ほうほう♪そういうことだったのか!HTMLとXMLの違いを実地で体験ww
◆HTMLファイルのスクレイピング
第三の方法だよねb
色んな方法があるみたいだけど,今回はscrape_func.phpっていうライブラリを使いました.
スクレイピングは,Webサイトから必要な情報を切り取ることだって.
やってることは,簡単にはマッチした部分を取ってくるって感じ♪
実装したもの(↓)は,ムダにループ回ってるよww
最新の一件のアメダスデータのみDBに格納してるんだけど,ループは24時間分www
そして,Linuxのcronでスケジューリング♪♪
データも1時間ごとのリアルタイムデータが取れるようになったし,満足満足♪♪
【実行結果】
【実装したもの】
/* スクレーピング関数群のインクルード */
include( "scrape_func.php" );
/* getURL()関数を使用して、ページの生データを取得する。 */
$_rawData = getURL( "http://www.jma.go.jp/jp/amedas_h/today-50456.html?groupCode=35&areaCode;=000" );
/* 生データをUTF-8に変換する。 */
//$_rawData = mb_convert_encoding($_rawData, "UTF-8", "auto");
/* 解析しやすいよう、生データを整理する。 */
$_rawData = cleanString( $_rawData );
//echo $_rawData;
/* 次は若干ややこしい。 必要な項目の開始部分と終了部分は、事前に
HTMLから確認してある。 こういったものを利用して必要なデータを取得
する。 */
$_rawData = getBlock( "
/* これで箇条書きに必要な特定データが入手できた。
ここでは項目を配列化した後、繰り返しで処理を行っている。 */
$_rawData = explode( "", $_rawData ); //1時間毎に分割
//現在の時刻
$date=date( "Y-m-d H:", time() )."00:00";
//echo $date;
//cronする時刻のみのデータをとってくれば良い。
//取得するデータの時刻を求める。
$what=date( "H", time() );
//echo "what:".$what;
//if($which==1)echo "OK!"; //01 =>1
$which=(int)$what;
if($which==0)$which=24;
$conn = pg_connect("データベースの接続");
if (!$conn) {
echo "An error occured.\n";
fwrite($handle,"connection error!\n");
exit;
}
pg_set_client_encoding("sjis");
//echo "
";
$now=0; //時刻ではない
/* 繰り返しを行いながら、個々の項目を解析する。 */
foreach( $_rawData as $_rawBlock ) {
//初期化
//$time=null;
$temp=null;
$rainfall=null;
$wind_direction=null;
$wind_velocity=null;
$sunlight=null;
$moisture=null;
$pressure=null;
//now=0:$which=1 //ひとつずれてる
if($now==($which)){
$_rawBlock = explode( "
$str="";
$null_count=0;
$num_element=count($_rawBlock)-1;
//echo "count:".count($_rawBlock);
for($j=0;$j<$num_element;$j++){
$_rawBlock[$j]=strip_tags($_rawBlock[$j]); //余計なタグを除去
$_rawBlock[$j] = trim( $_rawBlock[$j] ); //空白を除去
//echo "j:".$j."->".$_rawBlock[$j].",";
if(!strcmp($_rawBlock[$j]," ")){ //" "=空白
$_rawBlock[$j]=0; //" "のとき、0を代入
$null_count++;
}
if($j==0){
//時間
$str.="'".$date."',";
//$time=$_rawBlock[$j];
//if($time==24)$time=0; //24時 => 0時
//$str.=$time.",";
}else if($j==1){
//気温(℃)
$temp=$_rawBlock[$j];
$str.=$temp.",";
}else if($j==2){
//降水量(mm)
$rainfall=$_rawBlock[$j];
$str.=$rainfall.",";
}else if($j==3){
//風の向き(16方位)
$wind_direction=$_rawBlock[$j];
$str.="'".$wind_direction."',";
}else if($j==4){
//風の強さ(m/s)
$wind_velocity=$_rawBlock[$j];
$str.=$wind_velocity.",";
}else if($j==5){
//日照時間(hour)
$sunlight=$_rawBlock[$j];
$str.=$sunlight.",";
}else if($j==6){
//湿度(%)...少数表記
$moisture=(double)$_rawBlock[$j];
$moisture/=100;
$str.=$moisture.",";
}else if($j==7){
//気圧(hPa)
$pressure=$_rawBlock[$j];
$str.=$pressure;
}
}
if($null_count==$num_element-1){
//echo "null!!";
}
//echo "=>".$str;
//echo "
";
//DBへの登録...あるデータは無視
$sql="insert into weather(time,temp,rainfall,wind_direction,wind_velocity,sunlight,moisture,air_pressure) VALUES (".$str.");";
//echo "sql:".$sql."
";
$result_flag = pg_query($sql);
if (!$result_flag) {
//fwrite($handle,"insert error!\n");
die('INSERT fault'.pg_last_error());
}
pg_close($conn); //DB.close();
}
$now++;
}
?>
【参考】
http://d.hatena.ne.jp/steel-plate/20080417/1208445174
サーバー公開(ダイナミックDNSで)
サーバーを公開しました.そこで必要な項目が2つあるよ.
1つはサーバのIPを固定にすること,2つ目はルータのNAT(Network Address Translation)の設定です.
◆サーバのIPを固定にするには
1)DHCPを停止(サーバPC)
2)固定IPを設定(サーバPC)
Linuxで固定IPにする方法は色々なサイトで見れるので省略.(下のサイトを参照して)
http://fedorasrv.com/fedora13.shtml
の【fedoraのネットワーク設定】
設定するものは,プライベートネットワークでサーバを固定するためのもの.
サーバのIP(プライベートIP),ルータのIP(LAN側と)
1つはサーバのIPを固定にすること,2つ目はルータのNAT(Network Address Translation)の設定です.
◆サーバのIPを固定にするには
1)DHCPを停止(サーバPC)
2)固定IPを設定(サーバPC)
Linuxで固定IPにする方法は色々なサイトで見れるので省略.(下のサイトを参照して)
http://fedorasrv.com/fedora13.shtml
の【fedoraのネットワーク設定】
設定するものは,プライベートネットワークでサーバを固定するためのもの.
サーバのIP(プライベートIP),ルータのIP(LAN側と)
VMwareでCDマウントしてくんない!と,HMMの話
◆VMwareでCD-ROMをマウントしてくれない時の対処法
◆HMM(隠れマルコフモデル)
時系列のデータ系列から,状態推定するためのモデル.
ちなみに,なんでマルコフモデルって言うかは,次状態は1つ前の状態つまり現状態のみにしか依存しないから♪らしい.でも,あんま理解してないから調べてちょw
で,隠れマルコフってのは何か?
状態遷移確率A(*図のカッコの上)と出力シンボル確率B(状態aのときにシンボルoを出す確率)(*図のカッコの中)と初期状態確率π
で,出力シンボル系列(出力データ)が決まるよbってこと♪
もし系列aabが出力されたときの出力確率を求めたいと思ったら,(一応最終状態:S3)
系列abbを出力するのは1):(s1)->s1->s2->s3, 2):(s1)->s2->s2->s3, 3)(s1)->s1->s1->s3の3通りだから,
出力確率が一番高い状態系列を推定するのが,Viterbiアルゴリズム(形態素解析とかで使うらしい).上の三つの中で一番出力確率が高いxが通ってきた状態系列だよね?って感じみたい♪
計算がめんどいから,いろんなアルゴリズムが考えられてるらしい.それと,HMMモデルを構成するパラメータを推定する方法にBaum-Welchアルゴリズムってのがあるみたい.
引用:http://unicorn.ike.tottori-u.ac.jp/murakami/doctor/node13.html
◆HMM(隠れマルコフモデル)
時系列のデータ系列から,状態推定するためのモデル.
ちなみに,なんでマルコフモデルって言うかは,次状態は1つ前の状態つまり現状態のみにしか依存しないから♪らしい.でも,あんま理解してないから調べてちょw
で,隠れマルコフってのは何か?
状態遷移確率A(*図のカッコの上)と出力シンボル確率B(状態aのときにシンボルoを出す確率)(*図のカッコの中)と初期状態確率π
で,出力シンボル系列(出力データ)が決まるよbってこと♪
もし系列aabが出力されたときの出力確率を求めたいと思ったら,(一応最終状態:S3)
系列abbを出力するのは1):(s1)->s1->s2->s3, 2):(s1)->s2->s2->s3, 3)(s1)->s1->s1->s3の3通りだから,
- 1) (0.3*0.8)*(0.5*1.0)*(0.6*0.5)=x
- 2) (0.5*1.0)*(0.4*0.3)*(0.6*0.5)=y
- 3) (0.3*0.8)*(0.3*0.8)*(0.2*0.1)=z
出力確率が一番高い状態系列を推定するのが,Viterbiアルゴリズム(形態素解析とかで使うらしい).上の三つの中で一番出力確率が高いxが通ってきた状態系列だよね?って感じみたい♪
計算がめんどいから,いろんなアルゴリズムが考えられてるらしい.それと,HMMモデルを構成するパラメータを推定する方法にBaum-Welchアルゴリズムってのがあるみたい.
引用:http://unicorn.ike.tottori-u.ac.jp/murakami/doctor/node13.html
初ブログ♪
今回の日記が初ブログ♪♪
まぁ,自分の備忘録っすねー.
javaのJFreechartで書いたグラフをphpで書き直すって・・・
phpのxml/swf Chartっていうので書いたんだが,
使い方知らんから時間かかって.
次はもっと早く書く♪
実働時間:8月23日~9月4日(10日間ぐらい)
あんまりグラフを重ねすぎると,htmlか何かでタイムアウトする・・・
タイムアウトを延ばすか?それとも,ここのグラフ別個に・・関係ないな!
てことは,短い時間専用のグラフ。。マジ意味ねぇwww
でもだよ!webブラウザで見るグラフってもうできてるし,だいじょうぶだ.
ってことは,会議までに時系列クラスタリングを道すじ建てないと・・・
今日のおさらい.
・html
-フォーム
-table
・phpの値渡し
-$data=$_POST['data'];
まぁ,自分の備忘録っすねー.
javaのJFreechartで書いたグラフをphpで書き直すって・・・
phpのxml/swf Chartっていうので書いたんだが,
使い方知らんから時間かかって.
次はもっと早く書く♪
実働時間:8月23日~9月4日(10日間ぐらい)
あんまりグラフを重ねすぎると,htmlか何かでタイムアウトする・・・
タイムアウトを延ばすか?それとも,ここのグラフ別個に・・関係ないな!
てことは,短い時間専用のグラフ。。マジ意味ねぇwww
でもだよ!webブラウザで見るグラフってもうできてるし,だいじょうぶだ.
ってことは,会議までに時系列クラスタリングを道すじ建てないと・・・
今日のおさらい.
・html
-フォーム
-table
・phpの値渡し
-$data=$_POST['data'];