<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>Genkikko Server 徒然</title>
      <link>http://blog.genkikko.net/</link>
      <description>試行錯誤の覚え書き。愚痴。日記。</description>
      <language>ja</language>
      <copyright>Copyright 2008</copyright>
      <lastBuildDate>Wed, 19 Nov 2008 00:55:36 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>日記：表面粗さRHRについて。</title>
         <description><![CDATA[アメリカさんの図面に<div class="script">Surface Roughness : 32 micro inches RHR max.</div>なんてことを書いててポカーンとなったのでメモ。

日本語ページでググってもなかなか何も見つからなかったけど、
英語含めて「RHR Ra」でググって解決。

RHRが何の略かってのは、
・Roughness Height Rating
・Roughness Height Reading
・Roughness Height Range
と諸説あったが、どれが正解か分からなかった。
とにかく、いくつか読んで共通して書いてることは、
要はRHRってのはRaだってこった

で、件の図面は、<div class="script">32μin RHR max</div>なわけだから、
差し詰め日本人に分かるように表現すると、<div class="script">Ra&nbsp;&gt;&nbsp;0.8</div>
絵で描くと、
<img src="/img/Ra0.8.png">
てこと。たぶん。

<div class="yodan">参考サイト<br />
<a href="http://www.finishing.com/145/21.shtml" target="_blank">finishing.com-&gt;RHR to Ra, Rz conversion</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;質問サイトっぽい？<br />
&nbsp;&nbsp;&nbsp;&nbsp;「RHRはRaの古い記述方法だ。」てな回答がある。<br />
<a href="http://www.htskorea.com/tech/spm/profile.pdf" target="_blank">Surfaces and Profiles</a>(PDF注意!!)<br />
&nbsp;&nbsp;&nbsp;&nbsp;googleから直PDFだったから、リンク元が分からん。<br />
&nbsp;&nbsp;&nbsp;&nbsp;10ページ目の下の方にRHRの説明がある。</div>
]]></description>
         <link>http://blog.genkikko.net/2008/11/rhr.php</link>
         <guid>http://blog.genkikko.net/2008/11/rhr.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Diary</category>
        
        
         <pubDate>Wed, 19 Nov 2008 00:55:36 +0900</pubDate>
      </item>
            <item>
         <title>Linux:Vine3.2にImageMagickとPHP5とMagickWand for PHPをインストール。</title>
         <description><![CDATA[MagickWand for PHPを使いたいけど、今安定して動いてる環境を壊したくないからPHP4を入れ直すのは嫌で、しかもいずれはPHP5に移行するためのテスト環境も必要などなどの理由から、Vine3.2のサーバにPHP5+MagickWandをインストールした。

ImageMagick・PHP5・MagickWandのソースファイルをそれぞれ落としてきて、インストール。

<b>ImageMagickのインストール</b><div class="console">[src]$ tar zxvf ImageMagick.tar.gz
[ImageMagick-6.4.5]$ cd ImageMagick-6.4.5
[ImageMagick-6.4.5]$ ./configure  --prefix=/usr/local/imagemagick
[ImageMagick-6.4.5]$ make
[ImageMagick-6.4.5]$ sudo make install</div>まぁ、インストール先は自由に。後で消しやすいようにまるまるディレクトリを作った。
これで、/usr/local/imagemagickの中にbinディレクトリが出来るので、カレントディレクトリに適当な画像ファイルを置いて、<div class="console">$ /usr/local/imagemagick/bin/convert test.jpg test.png</div>などとしてやって、画像の変換が出来たらおめでとうな感じ。
というか、ImageMagickはaptで入れれたかもしれん。考えてなかった。

<b>PHP5とMagickWandのインストール</b><div class="console">[src]$ tar zxvf MagickWandForPHP-1.0.7.tar.gz
[src]$ tar zxvf php-5.2.6.tar.gz
[src]$ cp -r ./MagickWandForPHP-1.0.7 ./php-5.2.6/ext/magickwand/
[src]$ cd ./php-5.2.6/ext/magickwand/
[magickwand]$ phpize
[magickwand]$ cd ../../
[php-5.2.6]$ ./buildconf --force
[php-5.2.6]$ ./configure --prefix=/usr/local/php5 --enable-force-cgi-redirect --with-magickwand=/usr/local/imagemagick --with-pgsql --with-gd --enable-gd-native-ttf --with-iconv --enable-mbstring --enable--zend-multibyte --with-freetype --with-png --with-jpeg --with-zlib
[php-5.2.6]$ make
[php-5.2.6]$ sudo make install</div>なんかlibjpegが見つからない的なエラーが出たら、<div class="console">sudo apt-get install libjpeg-devel</div>で解決した気がする。develじゃないかも。忘れた。
Configureオプションの、--enable-force-cgi-redirectは、既にPHP4がapacheのモジュールとして動いてるから、今回入れるPHP5をCGIとして動かすために入れた。

さて、これでphp5のインストールが出来たけども、apacheで動かせるようにしてやらんといかん。
PHP5をインストールしたディレクトリに出来たbinディレクトリの中にあるphp-cgiってのが、CGIで動かす用のバイナリなので、apacheがアクセス出来る場所にハードリンクを作成する。<div class="console">$ sudo ln /usr/local/php5/bin/php-cgi /home/httpd/cgi-bin/php5</div>そして、httpd.confに、<div class="script">Action php5-script /cgi-bin/php5
AddHandler php5-script .php5 .5</div>てな具合で2行追加して、今作ったハードリンクでphp5ファイルを開くように設定。
携帯サイトを運営している都合上、URLを極力短くしたいという事情があって、.5という拡張子でも開けるようにした。これで、「i.5」のような短いファイル名が実現。

<div class="yodan">余談1：このPHP5のphp.iniは<br />
<span class="y_console">/usr/local/php5/lib/php.ini</span><br />
にあるわけだが、階層が深すぎて編集するのが面倒すぎるので、<br />
<span class="y_console">$ sudo ln /usr/local/php5/lib/php.ini /etc/php5.ini</span><br />
こんな感じで辿り着きやすくした。</div>

<div class="yodan">余談2：viエディタで.php5や.5ファイルを開いたときに、PHPの色の設定になってくれるように、<br />
<span class="y_console">/usr/share/vim/vim63/filetype.vim</span><br />
の、<br />
<span class="y_script">au BufNewFile,BufRead *.php,*.php3,	   setf php</span><br />
になってる行を、<br />
<span class="y_script">au BufNewFile,BufRead *.php,*.php3,*.php5,*.5   setf php</span><br />
てな感じに書き換えてやった。</div>]]></description>
         <link>http://blog.genkikko.net/2008/11/linuxvine32imagemagickphp5magi.php</link>
         <guid>http://blog.genkikko.net/2008/11/linuxvine32imagemagickphp5magi.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Linux</category>
                  <category domain="http://www.sixapart.com/ns/types#category">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Software</category>
        
        
         <pubDate>Sun, 16 Nov 2008 01:05:06 +0900</pubDate>
      </item>
            <item>
         <title>RBIO:LAN内のサーバを監視して落ちたら強制リセット</title>
         <description><![CDATA[<b>目的</b>
　うちにはサーバ用・ルータ用の2台の常時稼働マシンがある。どちらも基本的にはある程度安定しているのだが、どうしても時々落ちる。特に夏。
　勝手に再起動してくれる分にはまぁ構わないのだが、高温時にハングアップということが希に起こる。こうなると家にいない限り長時間のサーバダウンは避けられないので、これはいただけない。
　そこで、せっかく2台の常時稼働マシンがあるのだから、お互いに定期的にpingを打って無事を確認し、相手の意識がなければ強制的にリセットスイッチを押してやって再起動させ、長時間のサーバダウンを回避する。

<b>製作：ハードウェア</b>
　リセットスイッチを押すといっても物理的にボタンを押すなんて難しいことをするわけではなく、<a href="http://blog.genkikko.net/2008/07/_rbio3e.php">リレー制御ボード RBIO-3E</a>を用いてマザーボードのリセットスイッチを短絡させる。
　まず、リセットするときだけ短絡すればいいので、RBIOのリレーのNO(ノーマルオープン)側から配線を作る。
<?php img_src("DSC01203.JPG"); ?>
この写真で下から2番目・3番目の端子がそれ。

　そしてこの線の反対側は、
<?php img_src("DSC01205.JPG"); ?>
マザーボードのリセットスイッチと同じ規格のコネクタを付けてやり、更に並列にピンも付けてやる。
ピンを付けるのは、ここにケースのコネクタを刺すことでケースのリセットスイッチも使えるようにするため。実際には電源ボタンがあるのでこれは作らなくても困らないかもしれない。

　こんなものを適当に作ってしまったせいで、
<?php img_src("DSC01210.JPG"); ?>
そのへんの金属部に触れるだけでリセットされてしまう危険箇所が出来てしまったので、
<?php img_src("DSC01211.JPG"); ?>
木工用ボンドで固めてやり、絶縁する。

　これまた乾くまで触ることも出来ないので、
<?php img_src("DSC01212.JPG"); ?>
なんとか乾燥させてやる。

乾いたら、マザーボードのリセットスイッチのところに刺して、並列のピンにケースのリセットスイッチのコネクタを刺して完成。

<b>製作：ソフトウェア</b>
　次は、このスイッチをON/OFFするスクリプトを書く。
　方向性としては、定期的に相手にpingを打って返事がなければ、ただのしかばねのようなので電気ショックを与えてやるというもの。

○仕様
&nbsp;&nbsp;&nbsp;・pingを5発打って全く帰ってこなかったらRBIOでリセット。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→1発だけだと何だか不安なので、5発打って5発ともダメなときに発動。
&nbsp;&nbsp;&nbsp;・無限ループで5分ごとに確認。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→1分1秒を争うサーバではない。5分5発のpingがしんどいわけでもない。
&nbsp;&nbsp;&nbsp;・リセット後は10分待つ。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→5分で起動しきれなかったら一生リセットしてるから。
&nbsp;&nbsp;&nbsp;・自分が起動したときと、相手をリセットしたときにログをとる。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→気分的な問題で。

○ソース
・<a href="/etc/watch_firewall.phps">watch_firewall.php</a>

これを、<div class="console">/usr/bin/php /home/…/…/rbio/watch_firewall.php &</div>と、バックグラウンドで走らせてやって、今後も再起動時にこれが走るように<div class="console">/etc/rc.d/rc.local</div>に、<div class="console">/usr/bin/php /home/…/…/rbio/watch_firewall.php &</div>って1行を付け足してやる。]]></description>
         <link>http://blog.genkikko.net/2008/10/rbiolan.php</link>
         <guid>http://blog.genkikko.net/2008/10/rbiolan.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Hardware</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Linux</category>
                  <category domain="http://www.sixapart.com/ns/types#category">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#category">RBIO</category>
        
        
         <pubDate>Sun, 26 Oct 2008 23:44:14 +0900</pubDate>
      </item>
            <item>
         <title>RBIO：HDD・CPUの温度監視をして扇風機を自動でON/OFFする。</title>
         <description><![CDATA[<b>何の話？</b>
サーバ冷却用の扇風機を、サーバのHDDやCPUの温度に連動させて自動的に動かしたり止めたりしましょうというお話。

<b>使うもの</b>
・Hardware
&nbsp;&nbsp;&nbsp;<a href="http://blog.genkikko.net/2008/07/_rbio3e.php">リレー制御ボード RBIO-3E</a>
&nbsp;&nbsp;&nbsp;<a href="http://blog.genkikko.net/2008/07/rbioac100vonoff.php">少し大きめのリレーでAC100VをON/OFFする</a>回路

・Software
&nbsp;&nbsp;&nbsp;<a href="http://www.guzu.net/linux/hddtemp.php" target="_blank">hddtemp</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinuxでハードディスクのS.M.A.R.T.情報から温度を取得するツール。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;デーモンとして起動して、ソケット通信で結果を取得できるので使いやすい。

&nbsp;&nbsp;&nbsp;<a href="http://www.nt.phys.kyushu-u.ac.jp/shimizu/download/xmbmon/READMEj-xmbmon205.html">mbmon</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Linuxでマザーボードが報告する温度やらファン回転数やらを取得するソフト。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hddtemp同様、ソケット通信で結果を取得できる。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同梱されてるxmbmonはX上でグラフを表示してくれるが、
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今回はサーバ用途なのでmbmonしか使わない。

<b>hddtempとmbmonの使い方</b>
・インストール
どちらもソースを落としてきて./configureしてmakeして出来たバイナリを、パスの通った場所に置くだけで完了の簡単インストール。
hddtempは<div class="console">./configure --with-db-path=/etc/hddtemp.db</div>みたいにしてHDDデータベースの場所を指定できるらしいので、これしたほうが使いやすいみたい。デフォルトでは/usr/share/misc/hddtemp.dbてな分かりにくい場所になってる。
で、このhddtemp.dbってのに自分の使ってるHDDが入ってなかったら動かないので、上記リンク先にある最新hddtemp.dbを落としておくか、自分の使うHDDだけ抜粋して書いておく。自分の使ってるHDDが無い場合、同じメーカーの近い型番のものを参考に、それっぽく書き換えると一応使える。

・起動
hddtempは<div class="console"># hddtemp /dev/hda /dev/hdb /dev/hdc /dev/hdd
/dev/hda: Maxtor 6L160P0: 42°C
/dev/hdb: WDC WD2500JB-00REA0: 40°C
/dev/hdc: MAXTOR 6L080L4: 50°C
/dev/hdd: Maxtor 6L080P0: 41°C</div>てな感じで、hddtempの後に温度を見たいハードディスクデバイスを羅列すれば、こんな風に結果を返してくれる。
ただし、/dev/hdaとかにアクセス権がないとダメなので、rootでやるかsudoでやるかしないとダメ。<div class="console"># hddtemp /dev/hda /dev/hdb /dev/hdc /dev/hdd -d -p ポート番号</div>とやってやることで、バックグラウンドで起動して任意のポートで待ち受ける。 

mbmonは<div class="console">$ mbmon

Temp.= 127.0, 20.0, 127.0; Rot.=    0,    0,    0
Vcore = 1.44, 1.49; Volt. = 3.26, 4.97, 11.31,  -5.56, -2.19

Temp.= 127.0, 19.0, 127.0; Rot.=    0,    0,    0
Vcore = 1.44, 1.49; Volt. = 3.26, 4.97, 11.37,  -7.84, -4.55</div>てな感じで、5秒ごとにいろんな情報を表示してくれる。
今回欲しいのは温度なわけだが、どれが何の温度かはマザーボードに依存するので分からない。
そして今俺のサーバマシンに使ってるASRocのP4i65Gでは、おそらくCPU温度と思われる2番目の温度が室温以下とかいうあり得ない数字を叩き出す。
まぁ、負荷をかけたら上がるので、絶対的に正確でなくても、基準を設けてそれより高いか低いかの区別は付くので大きな問題ではない。
これもhddtemp同様デーモンとして起動するわけだが、<div class="console">mbmon -P ポート番号</div>だけでいい。-dとかは不要。

・データの取得
PHPで
<div class="script">&lt;?php
//hddtemp
$host = localhost;
$port = ****;&nbsp;&nbsp;&nbsp;&nbsp;//hddtempのポート番号
$socket = fsockopen($host,$port);
$hddtemp_result = fgets($socket,1024);
fclose($socket);

//mbmon
$port = ****;&nbsp;&nbsp;&nbsp;&nbsp;//mbmonのポート番号
$socket = fsockopen($host,$port);
fgets($socket,1024);
$mbmon_result = fgets($socket,1024);
fclose($socket);

echo &lt;&lt;&lt;EOH
&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;pre&gt;{$hddtemp_result}&lt;/pre&gt;
&lt;br /&gt;
&lt;pre&gt;{$mbmon_result}&lt;/pre&gt;
&lt;/body&gt;
&lt;/html&gt;
EOH;
?&gt;</div>こうやって書いてやって<a href="/etc/hddtemp_mbmon.php">実行する</a>と、<div class="console">|/dev/hda|Maxtor 6L160P0|42|C||/dev/hdb|WDC WD2500JB-00REA0|40|C||/dev/hdc|MAXTOR 6L080L4|49|C||/dev/hdd|Maxtor 6L080P0|40|C|

Temp.= 127.0, 19.0, 127.0; Rot.=    0,    0,    0</div>こんな具合に返ってくるので、適当に整形してやって欲しいデータを得る。
まぁ、見た感じhddtempは、<div class="console">|デバイスパス1|製品名1|温度1|C||デバイスパス2|製品名2|温度2|C|・・・</div>となるようなので、『|』でsplitして4n+3番目を集めれば温度が取得できるでしょう。
mbmonは一見じゃまくさそうな形してるけど、幸い俺が欲しいのは2つめの温度なので、『,』でsplitして2つめを取得するだけでいい。

<b>本題</b>
以上の内容を踏まえて、本題である『扇風機を自動でON/OFFする』を実現するPHPスクリプトを書く。

・仕様
1.一定時間ごとに温度を確認してスイッチを切り替える
2.各デバイスごとに温度の閾値を個別設定する
3.常時ONや常時OFFの設定も可能にする

・ソース<div class="script">&lt;?php
/*************************************************************************************************
&nbsp;&nbsp;&nbsp;&nbsp;Name    : fan_control.php
&nbsp;&nbsp;&nbsp;&nbsp;Acthion : 温度条件でRBIO-3Eの0番リレーを制御して扇風機をON/OFFする。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  バックグラウンドで動作させる。

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2008.06.22 Ver.0.01  Genki wrote
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2008.07.14 Ver.0.02  Genki edit.

&nbsp;&nbsp;&nbsp;&nbsp;仕様
&nbsp;&nbsp;&nbsp;&nbsp;./modeファイルから動作モードを取得する（on,off,auto）
&nbsp;&nbsp;&nbsp;&nbsp;mbmonとhddtempからの情報で切り替える
&nbsp;&nbsp;&nbsp;&nbsp;while(1)でループ処理。
&nbsp;&nbsp;&nbsp;&nbsp;(起動コマンドの最後に&をつけてバックグラウンドで実行する。)

***************************************************************************************************/
while(1){
//各種温度取得
&nbsp;&nbsp;&nbsp;&nbsp;//vine hddtemp
&nbsp;&nbsp;&nbsp;&nbsp;$host = "localhost";
&nbsp;&nbsp;&nbsp;&nbsp;$port = ****;&nbsp;&nbsp;&nbsp;&nbsp;//hddtempのポート番号
&nbsp;&nbsp;&nbsp;&nbsp;$sock = fsockopen($host,$port);
&nbsp;&nbsp;&nbsp;&nbsp;$result = trim(fgets($sock,1024));;
&nbsp;&nbsp;&nbsp;&nbsp;$result = strtr($result, '|', ',');
&nbsp;&nbsp;&nbsp;&nbsp;$trim = list(,,,$hdd[0],,,,,$hdd[1],,,,,$hdd[2],,,,,$hdd[3],) = split (",", $result);
&nbsp;&nbsp;&nbsp;&nbsp;fclose($sock);
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;//vine mbmon
&nbsp;&nbsp;&nbsp;&nbsp;$port = ****;&nbsp;&nbsp;&nbsp;&nbsp;//mbmonのポート番号
&nbsp;&nbsp;&nbsp;&nbsp;$sock = fsockopen($host,$port);
&nbsp;&nbsp;&nbsp;&nbsp;fgets($sock,1024);
&nbsp;&nbsp;&nbsp;&nbsp;$result = trim(fgets($sock,1024));
&nbsp;&nbsp;&nbsp;&nbsp;list(,$cpu[0],) = split(",",$result,3);
&nbsp;&nbsp;&nbsp;&nbsp;$cpu[0] = str_replace(' ','',$cpu[0]);
&nbsp;&nbsp;&nbsp;&nbsp;fclose($sock);
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;//Firewall hddtemp
&nbsp;&nbsp;&nbsp;&nbsp;$host = "firewall";
&nbsp;&nbsp;&nbsp;&nbsp;$port = ****;&nbsp;&nbsp;&nbsp;&nbsp;//ルータ機のhddtempのポート番号
&nbsp;&nbsp;&nbsp;&nbsp;$sock = fsockopen($host,$port);
&nbsp;&nbsp;&nbsp;&nbsp;$result = trim(fgets($sock,1024));;
&nbsp;&nbsp;&nbsp;&nbsp;$result = strtr($result, '|', ',');
&nbsp;&nbsp;&nbsp;&nbsp;$trim = list(,,,$hdd[4]) = split (",", $result);
&nbsp;&nbsp;&nbsp;&nbsp;fclose($sock);

&nbsp;&nbsp;&nbsp;&nbsp;//Firewall mbmon
&nbsp;&nbsp;&nbsp;&nbsp;$port = ****;&nbsp;&nbsp;&nbsp;&nbsp;//ルータ機のmbmonのポート番号
&nbsp;&nbsp;&nbsp;&nbsp;$sock = fsockopen($host,$port);
&nbsp;&nbsp;&nbsp;&nbsp;fgets($sock,1024);
&nbsp;&nbsp;&nbsp;&nbsp;$result = trim(fgets($sock,1024));
&nbsp;&nbsp;&nbsp;&nbsp;list(,$cpu[1],) = split(",",$result,3);
&nbsp;&nbsp;&nbsp;&nbsp;$cpu[1] = str_replace(' ','',$cpu[1]);
&nbsp;&nbsp;&nbsp;&nbsp;fclose($sock);
&nbsp;&nbsp;&nbsp;&nbsp;
//条件設定
&nbsp;&nbsp;&nbsp;&nbsp;if($hdd[0] &gt; 45 || $hdd[1] &gt; 42 || $hdd[2] &gt; 52 || $hdd[3] &gt; 45 || $hdd[4] &gt; 35 || $cpu[0] &gt; 27 || $cpu[1] &gt; 38){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$fan = "on";
&nbsp;&nbsp;&nbsp;&nbsp;}else{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$fan = "off";
&nbsp;&nbsp;&nbsp;&nbsp;}

//RBIO接続
&nbsp;&nbsp;&nbsp;&nbsp;$host = "rbio";
&nbsp;&nbsp;&nbsp;&nbsp;$port = ****;&nbsp;&nbsp;&nbsp;&nbsp;//rbioの待ち受けポート
&nbsp;&nbsp;&nbsp;&nbsp;while(1){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sock = fsockopen($host,$port,$errorno,$errormsg,3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!$sock){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;//現在のスイッチ状態を把握
&nbsp;&nbsp;&nbsp;&nbsp;fputs($sock,"PCA0\n");
&nbsp;&nbsp;&nbsp;&nbsp;fgets($sock,16);
&nbsp;&nbsp;&nbsp;&nbsp;$status = fgets($sock,16);
&nbsp;&nbsp;&nbsp;&nbsp;fgets($sock,16);

&nbsp;&nbsp;&nbsp;&nbsp;//動作モードget
&nbsp;&nbsp;&nbsp;&nbsp;$mode = file("/etc/rbio/fan_mode");
&nbsp;&nbsp;&nbsp;&nbsp;$mode = str_replace("\n",null,$mode[0]);

&nbsp;&nbsp;&nbsp;&nbsp;//スイッチ状態を変化させる必要がある場合に切り替える。
&nbsp;&nbsp;&nbsp;&nbsp;//################################################
&nbsp;&nbsp;&nbsp;&nbsp;//#####注意！ 0番リレーがONのとき扇風機がOFF #####
&nbsp;&nbsp;&nbsp;&nbsp;//################################################
&nbsp;&nbsp;&nbsp;&nbsp;//現状ONの場合、OFFにする作業だけする。
&nbsp;&nbsp;&nbsp;&nbsp;if(ereg("0",$status)){&nbsp;&nbsp;&nbsp;&nbsp;//RBIOのリレーがオフということは現在扇風機ON
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($mode == "off" || $mode == "auto" && $fan == "off"){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs($sock,"PCR01\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fgets($sock,16);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$res = fgets($sock,16);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;//現状OFFの場合、ONにする作業だけする。
&nbsp;&nbsp;&nbsp;&nbsp;}else{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($mode == "on" || $mode == "auto" && $fan == "on"){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs($sock,"PCR00\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fgets($sock,16);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$res[$i] = fgets($sock,16);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;fclose($sock);&nbsp;&nbsp;&nbsp;&nbsp;//他で使うためにコネクションクローズ
&nbsp;&nbsp;&nbsp;&nbsp;sleep(300);&nbsp;&nbsp;&nbsp;&nbsp;//5分ごとのチェックでいいかな。
}
?&gt;</div>

/etc/rbio/fan_modeというファイルを作っておいて、中身をauto,on,offの3種類のどれかに外部から書き換えることで、動作モードを変更できる。
rbioは同時に1つしか接続を受け付けてくれないので、使う直前にfsockopenし、使ったらすぐfcloseする。
while(1)で無限ループするので、起動時に<div class="console">php ./fan_control.php &</div>と、起動コマンドの最後にアンパサンドを付けてやってバックグラウンドで起動する。
この起動コマンドを/etc/rc.d/rc.localの下の方にフルパスで付け足して、サーバ再起動時にも動くようにしておく。]]></description>
         <link>http://blog.genkikko.net/2008/07/rbiohddcpuonoff.php</link>
         <guid>http://blog.genkikko.net/2008/07/rbiohddcpuonoff.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Hardware</category>
                  <category domain="http://www.sixapart.com/ns/types#category">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#category">RBIO</category>
        
        
         <pubDate>Sun, 27 Jul 2008 18:16:39 +0900</pubDate>
      </item>
            <item>
         <title>RBIO：少し大きめのリレーでAC100VをON/OFFする。</title>
         <description><![CDATA[<b>目的</b>
PCから扇風機の電源をON/OFF出来るようにすることで、常時起動のサーバに必要なとき（高温になったとき）だけ扇風機を自動で回せるようにする。

<b>方向性</b>
こんな回路を作りました。
<img src="/img/rbio_100v_circuit.png" alt="AC100V Relay" width=430 height=232>
三角2つが向き合ったようなやつは、<a href="http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%AA%E3%82%B9%E3%82%BF" target="_blank">バリスタ</a>(Wikipedia)です。コイルの逆起電圧をスルーするために付けてくださいとRBIOのマニュアルに書いてたから付けたけど、よくよく考えるとリレーのコイルの両端に付けるのはダイオードでいいし、AC100Vのとこに付けたのに至っては、なぜ必要なのかも分からんのですね。説明書に書いてたから付けた。ただそれだけです。
ちなみに、左のが18V、右のが200Vのものを利用したと記憶してます。TNRだかZNRだかの180と201ですね。

リレーはオムロンのG6C-2117P-USを使いました。2接点は不要だけど、12Vの電源が無い場合でもAC100Vを使えるようにb接点(Normal Close)で制御したかったのでこれにしました。a接点で良ければ1117とか1114でいいと思うけど、b接点だけのリレーってあるんでしょうかね。
コイルは極性があるので注意。この絵は上から見た絵なので、ハンダ付けするときは逆に考えんといかんですね。6と5がb接点のほうです。

+12Vからリレーに行く途中にスイッチが付いてるのは、自動制御にしてからも必要なときに手動で電源を入れれるようにするためです。サーバルーム＝生活空間という悲しい事情のためです。

<b>実装</b>
<?php img_src("DSC01227.JPG"); ?>
こんな感じ。きちゃなくて分かりませんね。全く。
ここにはRBIOが無いのは、取り回しの事情により別のとこから線を延ばして引っ張ってくるからです。
実際には上の絵よりも少し複雑で、RBIOから3本の線を引き込むけど、このうちの1つはスイッチのLEDを光らせるためのGND線なので動作には関係ありません。

あとの写真はバリスタを付ける前なのですが、何の参考にもなりません。おもしろ画像レベルで。

<?php img_src("DSC01162.JPG"); ?>
かなりの迷いが見受けられます。付けたり外したり付けたり外したり。思いつきの連続で作ったんですね。

<?php img_src("DSC01163.JPG"); ?>
コンセントを付けるために四角い穴を明けてます。3色コードを外から抜き差し出来るようにコネクタを付けてます。長いコードで運用する予定なので、からまることが想像されるから、抜いて絡みを取る目的で。

<?php img_src("DSC01160.JPG"); ?>
完成図。あやしく青く光っております。定電流ダイオードの向きを間違って元々入ってたLEDを壊してしまったので、手元にあった青色LEDを入れたためです。

<b>動作確認</b>
電球付きの扇風機を繋いで、前回の<a href="/2008/07/rbiophp10.php">RBIO：とりあえずPHPで10個のリレーを個別に制御してみる。</a>で作ったスクリプトに携帯でアクセスして動作確認してる様子をビデオで。
<!-- ようつべ  --><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/0WT36qaLfSY"></param><embed src="http://www.youtube.com/v/0WT36qaLfSY" type="application/x-shockwave-flash" width="425" height="350"></embed></object><!-- ようつべここまで -->
横に付いてる黄色い押しボタンは、RBIOのスイッチが有効な状態と、RBIOのスイッチに関係なく常時ONとを切り替えるスイッチ。<div class="yodan">元ファイル
<a href="/img/video/MOV01123-1.mpg">http://blog.genkikko.net/img/video/MOV01123-1.mpg</a>
(640x480,MPEG1,48秒,10.4MB)</div>
<b>次回予告</b>
問題なく扇風機のON/OFFは出来たので、次回は自動でON/OFFするスクリプトを書きます。
]]></description>
         <link>http://blog.genkikko.net/2008/07/rbioac100vonoff.php</link>
         <guid>http://blog.genkikko.net/2008/07/rbioac100vonoff.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Hardware</category>
                  <category domain="http://www.sixapart.com/ns/types#category">RBIO</category>
        
        
         <pubDate>Tue, 22 Jul 2008 00:38:37 +0900</pubDate>
      </item>
            <item>
         <title>RBIO：とりあえずPHPで10個のリレーを個別に制御してみる。</title>
         <description><![CDATA[<b>準備</b>
RBIOはTCP/IPをしゃべって操作する。
DHCPでIPアドレスを勝手に取得してくれるらしいので、まずは/etc/dhcpd.confに<div class="console">host rbio {
&nbsp;&nbsp;&nbsp;&nbsp;hardware ethernet 00:20:??:??:??:??;
&nbsp;&nbsp;&nbsp;&nbsp;fixed-address 192.168.??.??;
}</div>てな感じでRBIOのIPアドレスを固定してやる。
これで、telnetとかで192.168.??.??にアクセスしてやればRBIOとお話が出来る。

<b>方向性</b>
で、俺はPHPしか知らないのでPHPでなんとかする。
制御用コマンドは、<a href="http://www.kyohritsu.com/CATALOG/KIT_CTRL/rbio123preview.html" target="_blank">共立さんのサイト</a>にあるマニュアルPDFに載ってる。
telnetでアクセスしてやって、たとえば0番のリレーをON/OFFしてやると<div class="console">PCR01

OK
PCR00

OK</div>と返ってくる。
また、0番がON、1番がOFFの状態で、0番と1番の状態をチェックすると、<div class="console">PRA0

1
OK
PCA1

0
OK</div>と返ってくる。
てことで、何か1行空いてから答えが返ってくるようなので、PHPで結果を取得するときには1行読み込んで捨ててから、2行目を変数に入れるってことに気をつけようと思った。

<b>仕様</b>
・せっかくPHPなのでブラウザで簡単操作できるように表を作る。
・横10列/縦3行で、1行目にはリレー番号、2行目にはチェックボックスでON/OFFを操作出来るように、3行目には現状ONかOFFかを色で見分けれるように。
・他のプログラムで使用中など接続エラーなときはエラーを表示。

<b>実装</b>
<a href="/etc/rbio_direct.phps">rbio_direct.phps</a>
こんな感じのを書いた。期待通りに動作する。外からいじくられると困るので動作は見せられないけど、イメージとしては<a href="/etc/rbio_direct.html">rbio_direct.html</a>こんな感じの表示になります。
]]></description>
         <link>http://blog.genkikko.net/2008/07/rbiophp10.php</link>
         <guid>http://blog.genkikko.net/2008/07/rbiophp10.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#category">RBIO</category>
        
        
         <pubDate>Mon, 21 Jul 2008 23:42:14 +0900</pubDate>
      </item>
            <item>
         <title>買った：リレー制御ボード RBIO-3E</title>
         <description><![CDATA[<b>なにそれ？</b>
　<a href="http://www.kyohritsu.com/" target="_blank">共立電子産業株式会社</a>さんが作ってる<a href="http://www.kyohritsu.com/CATALOG/KIT_CTRL/rbio123preview.html">RBIO</a>シリーズというリレー制御ボード。
　パソコンから10個のリレーを簡単にON/OFF出来るという優れもの。更に入力端子も4つあり、スイッチの入力状態を簡単に取得することが出来る。
　シリアル接続・USB接続・Ethernet接続の3種類があり、シリアルが1万円ぐらい、USBが1万2000円ぐらい、Ethernetが2万円ぐらいとEthernetのものがかなり高価だが、複数台のマシンから操作しやすいのでこいつをチョイス、<a href="http://www.siliconhouse.jp/" target="_blank">シリコンハウス共立</a>1Fにて購入。

<b>何に使う？</b>
　うちのサーバ・ルータは、PCにLinuxを入れて運用しているが、いまいち安定性が無い。そもそも、自分が寝る部屋に置いてるもんだから、排熱性よりも静粛性を重視していることもあり、夏になるとよくハングアップする。自動的に再起動してくれる分にはあまり問題ないのだが、再起動もせずにハングアップしたままになることが多々ある。これは大問題である。帰宅するか、家に電話して母親にリセットを押してもらうまで復旧できないので、数時間にわたってサーバダウンが続いてしまう。
　この状況を打破するため、サーバ・ルータをお互いに監視して、相手が落ちたら強制的にリセットしてやることで長期間のサーバダウンを防止する。このように、ソフトウェア的に手を出せないハングアップ状態から、ハードウェア的にリセットするために、RBIOを利用する。
　また、従来、日中は部屋の扇風機をサーバに向けて回しっぱなしだった。扇風機程度でエコや電気代には大した影響は無いだろうが、あまり精神衛生上よろしい状態とは言えないので、CPUやHDD温度を監視して扇風機の電源をON/OFFする。
　理想としては、部屋の窓・ドアを開け閉めして、エアコンの電源をON/OFF出来ればいいけど、窓はなんとか無理して現実的としても、ドアは大変そうなので妄想だけ。

<b>どうやって？</b>
　扇風機のON/OFFは、機械式スイッチの扇風機の電源を常時ONにしておいて、AC100Vの入力をリレーで強制的にON/OFFしてやる。
　RBIOのリレーの接点容量はAC125V0.5Aとのことなので、45Wの扇風機を動かせないことはないのかもしれないが、直接AC100Vをパチパチするのは怖いので、RBIOのリレーで別の大きなリレーを動かして100Vをパチパチする。
　サーバのリセットは、当初は上の扇風機と同じやりかたで無理矢理電源を落とした後、WOLで起動させるという方法を考えていたのだけど、<a href="http://xe.bz/" target="_blank">動く！改造アホ一台</a>さんというサイトの<a href="http://xe.bz/aho/27/" target="_blank">遠隔サーバー再起動装置・リセット君</a>という記事を読んで、「あぁそうか。リセットスイッチを短絡してやればいいだけじゃないか」と気づいた。

<b>で？</b>
実現したので、少しずつ記事を書いていきます。

・<a href="http://blog.genkikko.net/2008/07/rbiophp10.php">RBIO：とりあえずPHPで10個のリレーを個別に制御してみる。</a>
WWW経由で携帯やEMONEなど出先からRBIOを制御したり状態を把握したり出来るように。

・<a href="http://blog.genkikko.net/2008/07/rbioac100vonoff.php">RBIO：少し大きめのリレーでAC100VをON/OFFする。</a>
RBIOのリレーは接点容量が小さいので、これで大きなリレーを動かして扇風機をON/OFFしましょうというお話。

・<a href="http://blog.genkikko.net/2008/07/rbiohddcpuonoff.php">RBIO：HDD・CPUの温度監視をして扇風機を自動でON/OFFする。</a>
上で作った扇風機のON/OFFを、サーバの温度に連動して自動で切り替えましょうというお話。

]]></description>
         <link>http://blog.genkikko.net/2008/07/_rbio3e.php</link>
         <guid>http://blog.genkikko.net/2008/07/_rbio3e.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Diary</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Hardware</category>
                  <category domain="http://www.sixapart.com/ns/types#category">RBIO</category>
        
        
         <pubDate>Sun, 20 Jul 2008 03:53:33 +0900</pubDate>
      </item>
            <item>
         <title>EMONEα：Windows MobileでSambaの共有フォルダに接続する</title>
         <description><![CDATA[さて、簡単にできるかと思ったら思いの外つまづきまくったので覚え書きを。

Windows Mobileは無線LAN接続で共有フォルダに接続出来るらしいので、LinuxサーバにあるSambaの共有フォルダに接続して、普段のマイドキュメントをそのまま使おうかと画策。
家で使ってるデスクトップもノートパソコンもこのSamba上にある共有フォルダをマイドキュメントとして使ってて、どのマシンを使っても同じファイルを編集・閲覧出来るってのはとても便利。

んで、Windows Mobile標準のファイラ(エクスプローラなのかな？)は、ほとんど使ったことがないのでどうでもいいとして、<a href="http://blog.genkikko.net/2008/02/emone.php">GS Finder+</a>を使って共有フォルダにアクセスする。

<b>Windows Mobile側の設定</b>
<?php img_src("20080518223310.png"); ?>
GS Finder+のメニューの
「ファイル→ツール→ネットワーク接続の割り当て」
を選択。
一回目はここで再起動を要求されるっぽく、再起動後ルートディレクトリに「Network」というフォルダが出来る。
それからもう一回、
「ファイル→ツール→ネットワーク接続の割り当て」
を選んでやると、
<?php img_src("20080518223428.png"); ?>
ネットワーク接続の割り当てダイアログが出る。
リモートパスに「\\共有名\フォルダ名」を入力する。
共有名は、Netbios名。
smb.confの<div class="console">[global]
・・・・
netbios name = なんちゃらかんちゃら
・・・・</div>で設定してる名前。
これをホスト名やらIPアドレスやらにすると、
<?php img_src("20080518223936.png"); ?>
<?php img_src("20080518223948.png"); ?>
リソース接続エラー:53というエラーに悩まされてしまうので注意。

ローカル名はNetworkフォルダ以下に置かれるショートカット名になるので、何でもいい。
俺は、家で使ってるパソコン全部にVドライブとして割り当ててるからVにした。VineだからV。わかりやすい。

さぁそしてここまでで接続したところ、
<?php img_src("20080518224114.png"); ?>
今度はリソース接続エラー:58だと。
ググってみたところ、解決方法は2通り。
smb.confのセキュリティ設定を<div class="console">[global]
・・・・
security=share
・・・・</div>にするか、もしくは<div class="console">[global]
・・・・
security=user
spegno = No
・・・・</div>にするかのどちらか。
すでに他のマシンがuserで自動認証するように設定してるから、後者を選択。
ちょっとよく分からんのだけど、セキュリティ甘くなんのかな？
知りません。責任もてません。

とまぁ、ここまで正しく設定できたらSambaをreloadして、GS Finderで接続しなおす。
<?php img_src("20080518223824.png"); ?>
認証画面が出てきて、ログオン成功したら、
<?php img_src("20080518224207.png"); ?>
パスワードを保存するかのダイアログが出る。
ここで「はい」して保存しとくんだが、再起動(ソフトリセット？)したら、またパスの入力を求められる。そうしょっちゅう再起動するものでもないので、あんまり頑張って解決方法は探さない。

<?php img_src("20080518224422.png"); ?>
最初はファイルリストの取得に異常に時間かかってたけど、一回再起動した後は大丈夫になった。
再起動が原因ではないかもしれんけど、急にサクサク使えるようになった。

便利になりました。
]]></description>
         <link>http://blog.genkikko.net/2008/05/emonewindows_mobilesamba.php</link>
         <guid>http://blog.genkikko.net/2008/05/emonewindows_mobilesamba.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Linux</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Mobile</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Software</category>
        
        
         <pubDate>Mon, 19 May 2008 00:39:41 +0900</pubDate>
      </item>
            <item>
         <title>日記：ヤフーメッセンジャのアドレス帳が復活してる</title>
         <description>いつからだ。

気づかなかった。

ヤフーメッセンジャがバージョン6あたりになった頃から表示されなくなった
友達リストに登録したニックネームが、今ふと見たら表示されてた。

前にアップデートしたときはなってなかったと思うんだけど。

学生時代のツレにゆっても、「あらほんとだ」てな反応だから、
みんななってたんでしょ。

こんなクリティカルに不便な障害を放置してた期間長すぎじゃないか？
2～3年いくんじゃね？

まぁ、クリティカルに不便な割にはそのまま放置してたけど。

--

友達リストに表示してる自分の名前が

「げんき2400」

になってて気づいた。
2400ってAthlonXP2400+なマシンだったからだ。
懐かしい。</description>
         <link>http://blog.genkikko.net/2008/05/post_24.php</link>
         <guid>http://blog.genkikko.net/2008/05/post_24.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Diary</category>
        
        
         <pubDate>Wed, 14 May 2008 23:41:00 +0900</pubDate>
      </item>
            <item>
         <title>買った：EMONE用ステンレス製スタイラスペン</title>
         <description><![CDATA[<?php img_src("stylus_1.JPG"); ?>
先日、<a href="http://blog.genkikko.net/2008/04/emone_3.php">純正のスタイラスペンを買ったばかり</a>だったのだが、社外品という選択肢もあることに気づき、衝動的に買ってしまった。

<?php img_src("stylus_2.JPG"); ?>
純正のスタイラスペンは、オール樹脂製なのに対して、これは先端とケツ以外はステンレスで出来てる。
買うまで材質は何か分からんかったんだけど、購入して会社にあるピッとやったら材料が分かる素敵な機械で調べたところ、おそらくSUS304。
ニッケル入りで磁石にくっつかない比較的高級なタイプのステンレス製でした。

純正と違ってほとんどステンレスなので、堅くて「しなり」が少ない。
というか、タッチペンとして使ってる程度ではしならない。
なので、狙った位置を正確にタップ出来る。
<a href="http://blog.genkikko.net/2008/03/emonerealwvga.php">RealWVGA化したEMONE</a>には強い味方。

もう純正には戻れない。]]></description>
         <link>http://blog.genkikko.net/2008/04/emone_4.php</link>
         <guid>http://blog.genkikko.net/2008/04/emone_4.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Diary</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Mobile</category>
        
        
         <pubDate>Wed, 16 Apr 2008 22:18:28 +0900</pubDate>
      </item>
            <item>
         <title>買った：EMONE純正スタイラスペン</title>
         <description><![CDATA[酔っぱらって電車に乗ってたらスタイラスペンが無くなったので、オフィシャルサイトから注文した。
送料込み500円。

しばらくして、EMOBILEから小包が届いた。
<?php img_src("DSC01026.JPG"); ?>

身に覚えがない。なんだろう？と思ってあけると、中には紙のクッションがいっぱい。
それを全てどけると、1通の封筒が。
そこにはでかい文字で、「タッチペンx1」と。
そもそも商品名「スタイラスペン」だろうというツッコミもあるが、
それより何より、たったこれだけの製品のためにこの箱はなんだ？
<?php img_src("DSC01024.JPG"); ?>

もう一度言います。
送料「込み」で500円。]]></description>
         <link>http://blog.genkikko.net/2008/04/emone_3.php</link>
         <guid>http://blog.genkikko.net/2008/04/emone_3.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Diary</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Mobile</category>
        
        
         <pubDate>Wed, 16 Apr 2008 22:11:35 +0900</pubDate>
      </item>
            <item>
         <title>買った：microSD→USBアダプタ</title>
         <description><![CDATA[こんなのを買った。
<?php img_src("microsdusb_1.JPG"); ?>
携帯マイ七味唐辛子ストラップ。
それはそれで。
microSDカードのUSBアダプタ。

<?php img_src("microsdusb_2.JPG"); ?>
無論microSDは付属してない680円＠恵美須町駅近くのじゃんぱら。

<?php img_src("microsdusb_3.JPG"); ?>
こんな風にすっぽり収まって、

<?php img_src("microsdusb_4.JPG"); ?>
そのまんまUSB端子になっちゃうのね。

<?php img_src("microsdusb_5.JPG"); ?>
接続したら光る。
デバイス停止後は光が消えるから、抜き時がわかりやすいという何気に素敵機能付きな優れもの。

ただ単にmicroSDぐらいのサイズのUSBメモリのストラップとかもあるわけだけども、
こいつの良いところは、単なるアダプタ（というかカードリーダ？）だけがストラップになってるので、
使わないときはカードを抜いとける。
これで、どっかでストラップがちぎれて紛失してもデータ流出はしないので安心。

さらに、携帯電話のデータ用にmicroSD使ってるし、<a href="http://blog.genkikko.net/2008/02/emone.php">EMONE</a>もminiSDスロット付きだが、miniSDアダプタかませたmicroSD刺してるので、どっちも使える。

携帯(Softbank 910SH)もEMONE(EMOBILE S01SH II)も、USBやブルートゥース接続でパソコンに繋げてカードの読み書き出来るけど、シャープ製機器のご多分に漏れず激しく遅い。

そこに来てコイツは超コンパクトなくせにがっつり快適サクサク速い。

オススメの一品。]]></description>
         <link>http://blog.genkikko.net/2008/04/microsdusb.php</link>
         <guid>http://blog.genkikko.net/2008/04/microsdusb.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Diary</category>
        
        
         <pubDate>Wed, 16 Apr 2008 22:03:19 +0900</pubDate>
      </item>
            <item>
         <title>Windows：キーボードのドライバが・・・</title>
         <description><![CDATA[ATOKで急に日本語入力が出来なくなった。
<img src="/img/2008040401.png" alt="[あ]ひらがなで入力します">
こんなことを言うくせに、実際に入力してみたら、全角アルファベット。

ありがちなスペースバーの左右のキーを押したかと思ったけども、そうでもない。
意味が分からんから、ATOKの設定片っ端から確認したっちゅーの。

で、どないもならんから嫌がらせがてら、会社のシステムさんにメッセンジャで
「にほんごにゅうりょくできんくなった」
と送信。

もちろん、全角英数になるので、
「ｎｉｈｏｎｎｇｏｎｙｕｕｒｙｏｋｕｄｅｋｉｎｎ」
となる・・・はずだったのだが、実際に出た言葉は、
「ｎｉｈｏｎｎごｎｙｕｕｒｙｏきｄｅｋｉｎ」
全く持って意味不明。
決してtypoではない。
「KU」とタイプすると「き」と出る。
「あいうえおかきくけこ」とタイプすると、
「ａｉｕｅｏｋａｋｉきｋｅｋｏ」
となる。

ここで、容疑者はＡＴＯＫからキーボードに。
もしやと思ってドライバ確認すると、
<img src="/img/2008040402.png" alt="英語キーボード">
あほかと。

ドライバの更新
↓
いいえ、今回は接続しません
↓
一覧または特定の場所からインストールする
↓
検索しないで、インストールするドライバを選択する
↓
互換性のあるハードウェアを表示のチェックを外す
↓
標準キーボード
↓
日本語 PS/2キーボード(106/109 キー)

・・・・・

<img src="/img/2008040403.png" alt="ドライバ警告">
ふざけんな！
バリバリ日本語キーボードじゃい！

<img src="/img/2008040404.png" alt="確認">
うるせって。
USBマウスしか使ってないし。


無理矢理入れて再起動したら直りました。
]]></description>
         <link>http://blog.genkikko.net/2008/04/windows_1.php</link>
         <guid>http://blog.genkikko.net/2008/04/windows_1.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Hardware</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Software</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Windows</category>
        
        
         <pubDate>Fri, 04 Apr 2008 00:08:32 +0900</pubDate>
      </item>
            <item>
         <title>PHP：アンケートでハイスコアを得たエントリ一覧を表示する</title>
         <description><![CDATA[<b>タイトル</b>
良いタイトルが思い浮かばなかった。そして長い割に何のことか分からんものになってしまった。
何がいいたいのかというと、前項の<a href="http://blog.genkikko.net/2008/03/php_2.php">PHP:ブログ用の評価フォームを作る</a>で作った、各エントリの一番下に表示してるアンケートの結果のスコアの高いものを、このページの左にあるように一覧表示してやろうというもの。

<b>構想</b>
やるべきことは、<ol><li>データベースからアンケートの結果を得る。<li>アンケート結果からスコアを計算する。<li>スコア準にソートしてやる。<li>上位から設定した件数のエントリのタイトルと投稿日時をMovableTypeのデータベースから読む。<li>一覧リンクを出力する。</ol>こんな感じ。
特にてこずったのは初めての2次元配列のソートぐらいかな。
それについては別項に詳しく覚え書きを。(予定)

<b>ソース</b>
ここで動いてるソースはこれ。
<a href="http://blog.genkikko.net/etc/high_scored.phps">high_scored.php</a>
これをMovableTypeのテンプレートの中でインクルードしてやる。

アンケート用のDBに接続したときは結果を一気に取得するので、一度に$itemの中に入れてやってあとから結果を配列に入れるが、MT用のDBからタイトルとかを取得するときは順序がばらばらなので一気に取得出来なかった。

ちなみに単純な実行結果は、
<a href="http://blog.genkikko.net/etc/high_scored.php">http://blog.genkikko.net/etc/high_scored.php</a>
こんなんなので、ページ内にインクルードするときに適当に体裁を整える。<div class="yodan">どうでもいいことかもしれんけど、このエントリ全部通勤電車の中でEMONEで書いた。初の快挙。まぁでもスクリプトはパソコンで書いたけどね。</div>]]></description>
         <link>http://blog.genkikko.net/2008/03/php_3.php</link>
         <guid>http://blog.genkikko.net/2008/03/php_3.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Software</category>
        
        
         <pubDate>Tue, 25 Mar 2008 08:42:58 +0900</pubDate>
      </item>
            <item>
         <title>PHP:ブログ用の評価フォームを作る</title>
         <description><![CDATA[<b>簡易アンケート</b>
タイトルは評価フォームとしたけど、コメントを書いたりとかの素敵機能は一切無しの、点数付けるだけのアンケート機能という感じ。
まぁコメントはコメントフォームがあるからね。MovableType標準の。

今回作ったのは、このエントリの下の方にもあるけど、<ol><li>エントリごとに5段階で評価したボタンをポチっと押したらカウントされて<li>各々の投票数を横棒グラフに表示して<li>合計ポイントを表示する</ol>というもの。

<b>準備</b>
まず、任意のデータベースに適当なテーブルを作る。俺はアンケートってことでquestionnaireとした。
<div class="console">$ psql
=> CREATE TABLE questionnaire(
id varchar(128) not null,
a int not null,
b int not null,
c int not null,
d int not null,
e int not null
);</div>これは一つしか作らないのでわざわざスクリプト書いて作る必要も無いから、コンソールから直接コマンドで作っとく。

idには、エントリのURLの「http://blog.genkikko.net/YYYY/MM/****.php」の、「YYYY/MM/****」を「YYYY_MM_****」に変換して入れる。
たとえばこのエントリだと、「2008_03_php_2」になる。
これで、エントリごとにユニークな値を設定することが出来るので、エントリごとの投票を管理できる。<div class="yodan">余談：MovableTypeが作ったデータベースを見てて後から気づいたんだが、年月ごとのディレクトリ部分を除いたファイル名****の部分だけでユニークになってるようで、実はこれで管理できるみたい。既に投稿があるから変更するのはめんどいので、少し処理はかさばるけど新しく作るとき以外に改善する予定はなし。</div>
<b>ソース</b>
うちで動いてるのは、こちら。
<a href="http://blog.genkikko.net/etc/questionnaire.phps">questionnaire.php</a>
これを、エントリ内にincludeしてやる。
・配列$ratioは、各項目の点数。悪い評価にはマイナス点を。
・$this_scriptはインクルード元のphpファイルの絶対パス。$_SERVER['PHP_SELF']では、エントリそのもののファイル名を取得してしまってややこしいことになるので。
・130行目あたりの「POSTデータがidのみの場合、そのまま転送」のとこは、入力フォームがラジオボタンだったときの名残。今は不要。
・150行目あたりの「//グラフの幅を決める。」というのは、投票数が多くなってきたときにグラフの横幅が大きくなりすぎるのを防ぐ目的。必要になるのかどうか分からない。

ちなみに、これをincludeするとこで検索サイトのロボットのときはincludeしないようにしてるので、googleなど検索サイトのキャッシュにはこれは表示されてない。]]></description>
         <link>http://blog.genkikko.net/2008/03/php_2.php</link>
         <guid>http://blog.genkikko.net/2008/03/php_2.php</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Software</category>
        
        
         <pubDate>Sun, 23 Mar 2008 23:18:43 +0900</pubDate>
      </item>
      
   </channel>
</rss>
