<?xml version="1.0" encoding="utf-8" ?>


<?xml-stylesheet href="http://d.hatena.ne.jp/simpraight/rssxsl" type="text/xsl" media="screen"?>


<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:lang="ja">
<channel rdf:about="http://d.hatena.ne.jp/simpraight/rss">
<title>ぬかるむ日々</title>
<link>http://d.hatena.ne.jp/simpraight/</link>
<description>ぬかるむ日々</description>

<dc:creator>simpraight</dc:creator>
<dc:date>2010-07-13T07:43:41+09:00</dc:date>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://d.hatena.ne.jp/simpraight/20100708/1278596656"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/simpraight/20081218/1229619893"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/simpraight/20081124/1227525696"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/simpraight/20081021/1224601041"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/simpraight/20081015/1224080891"/>
</rdf:Seq>
</items>
</channel>



<item rdf:about="http://d.hatena.ne.jp/simpraight/20100708/1278596656">
<title>[tips][mac] Mac Mini(201006) に Ubuntu を入れる</title>
<link>http://d.hatena.ne.jp/simpraight/20100708/1278596656</link>
<description> 仕事で小型のサーバーが必要になったので色々選定してたら、「この間でたMacMiniにLinuxいれたらいいよねー」ってことになった。 勢いで注文して普通にBootCampでやろうとしたけど結構ややこしかった（というか無理矢理っぽい）のでメモ。 1. BootCampでパーティションを作</description>

<content:encoded><![CDATA[
<div class="section">
<p>仕事で小型のサーバーが必要になったので色々選定してたら、「この間でたMacMiniにLinuxいれたらいいよねー」ってことになった。</p>
<p>勢いで注文して普通にBootCampでやろうとしたけど結構ややこしかった（というか無理矢理っぽい）のでメモ。</p>
<h4>1. BootCampでパーティションを作る</h4>
<p>この辺はまぁいつもの感じ。</p>
<p>アプリケーション-&#62;ユーティリティ-&#62;BootCampアシスタント</p>
<p>を起動して、Linux入れるようにパーティションを作る。</p>
<p>一応、OSXは残した状態にするので、OSX=80GB と残りに分割。</p>
<p>その後、Windowsをインストールするか聞いてくるけど無視して終了。</p>
<h4>2. rEFItのインストール</h4>
<p>この辺もいつもの感じで。</p>
<p><a href="http://refit.sourceforge.net/" target="_blank">http://refit.sourceforge.net/</a></p>
<p>上記からrEFItの最新バージョン (〜.dmg) をダウンロードしてインストール。</p>
<p>インストール後、ターミナルで以下実行して有効にする。</p>
<pre>
$ cd /efi/refit
$ ./enable.sh
</pre>

<h4>3. UbuntuのインストールCDを作成</h4>
<p>公式のインストーラを使うと普通に失敗します。</p>
<p>原因は、MacMiniのchipsetドライバ(MCP89)にカーネルが対応しておらず、CDドライブもHDDドライブも認識されないため。</p>
<p>どうやら最新のlinux-kernel2.6.34では対応している様子だが、UbuntuやDebianのtestingでも対象のkernelじゃない。</p>
<p>Ubuntu10.04のkernelでもパッチ当てればイケるっぽいので、探してみたら <a href="http://macbookpro7-1.daviey.com/" target="_blank">ここ</a>（<a href="http://macbookpro7-1.daviey.com/" target="_blank">http://macbookpro7-1.daviey.com/</a>）にパッチ適用ずみのインストーラーイメージを発見。</p>
<p>ということで、上記から 「ubuntu-10.04-desktop-amd64-macbook71.iso」をダンロードしてCDに焼く。</p>
<br>

<h4>4.  CDからブートしてUbuntuのインストール</h4>
<p>※ちなみに、最初HDMI-&#62;デジタルで画面出力してたけどうまくいかなかったので、ここで Mini DisplayPort-&#62;RGB出力に繋ぎ換えた。HDMIでも何とかする方法があるかもしれないけど未確認。</p>
<p>1) CD入れて「C」キー押しっぱなしで電源投入してCDからブートさせる。</p>
<br>

<p>2) Ubuntuの起動メニューが表示されたら、一応「vga=791」だけ付け加えてインストーラを起動した。（これは別に無くてもいいかも。）</p>
<br>

<p>3) 画面が激しく乱れて、ファミコン状態になっているかも知れないけど、まぁあとでなんとかするとしてそのままインストールを続行する。</p>
<br>

<p>4) パーティションは適当に、/boot:512MB(ext3), swap:4096MB, /:残り(xfs) にした。結構時間かかる。</p>
<br>

<p>5) 途中ネットワークカードの認識で躓くけど、まぁこれも後でどうにかなるので気にせず続行。</p>
<br>

<p>6) GRUBのインストール場所は 4 で作成した /bootパーティションに指定した。rEFItの関係でデフォルトのMBRにしちゃうと何となく駄目な気がしたので。</p>
<br>

<p>そんなこんなでインストール完了。再起動。</p>
<p>再起動時に、rEFItの起動メニューにUbuntuが追加されてるので、Ubuntuを選択して起動させる。</p>
<br>

<h4>5. ドライバとかのインストール</h4>
<p>とりあえずUbuntuがあがってきたけど、</p>

<ul>
<li> 画面がひどい（ファミコン状態）</li>
<li> ネットワークつながらない</li>
<li> 日本語環境が中途半端</li>
</ul>
<p>という感じなので、なんとかする。</p>
<p>1) NICドライバの入手</p>
<p>MacMiniのNICはBroadCom 57765 なので、インターネットの使える別マシン<a href="http://ja.broadcom.com/support/ethernet_nic/netxtreme_desktop.php" target="_blank">BroadComのサイト</a>（<a href="http://ja.broadcom.com/support/ethernet_nic/netxtreme_desktop.php" target="_blank">http://ja.broadcom.com/support/ethernet_nic/netxtreme_desktop.php</a>）からLinux用のドライバ(tg3)をダウンロード&解凍してUSBメモリとかでUbuntuにコピーする。</p>
<br>

<p>2) NICドライバのインストール</p>
<p>Ubuntu上で以下を実行</p>
<pre>
$ cd &#91;ドライバの入っているフォルダ]
$ tar xzvf tg3-3.105h.tar.gz
$ cd tg3-3.105h
$ make
$ sudo insmod tg3.ko
$ sudo make install
</pre>

<p>再起動すればNICが使えるようになっているはず。 </p>
<p>このあとは有線LAN繋いで作業。（DHCPじゃ無い場合は ネットワーク設定要）</p>
<br>

<p>3) とりあえず最新にアップデート</p>
<pre>
$ sudo apt-get update
$ sudo apt-get upgrade
</pre>

<p>わんさかと。</p>
<br>

<p>4) ディスプレイドライバと無線LANドライバのインストール</p>
<p>ディスプレイドライバと無線LANドライバは、システム → システム管理 → ハードウェア・ドライバ からインストール可能。それぞれ有効にして再起動すればおk。</p>
<p>これでようやく画面がきれいに表示されるようになった。あとは日本語環境くらい。</p>
<br>

<p>5) 言語環境の設定</p>
<p>システム → システム管理 → 言語サポート から、標準語言語を日本語に。</p>
<p>あといらない言語が入ってるので、英語＆日本語以外のいらない言語のチェックを外して削除しておく。</p>
<p>あとはいつもの感じで足したり引いたりでお好みの環境を構築。</p>
<p>※ちなみに、rEFItでデフォルトの起動OSを変更したい場合は、OSX側で、/efi/refit/refit.conf の　「legacyfirst」を有効に（コメント外す）すれば良いです。</p>
<br>

<p>こんな感じでUbuntuが使えるようになった。結構面倒くさい。</p>
<p>もう少ししたら、色々情報が出てきてもっと簡単で正確になると思うので、急ぎでない場合はもう少し待ったほうがいいかも。</p>
</div>
]]></content:encoded>
<dc:creator>simpraight</dc:creator>
<dc:date>2010-07-08T22:44:16+09:00</dc:date>
<dc:subject>tips</dc:subject>
<dc:subject>mac</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/simpraight/20081218/1229619893">
<title>[Mysql]クエリのベンチマーク</title>
<link>http://d.hatena.ne.jp/simpraight/20081218/1229619893</link>
<description> 仕事でクエリの最適化するのに簡単なベンチマークを採る必要があったので作った。探した方が早いかと思ったけど単純に同じクエリを必要回数発行してトータル時間見るだけなので自分が使いやすければそれでおｋ。あんまり変わらないと思うけどAPに合わせてPHPで書いてみた。</description>

<content:encoded><![CDATA[
<div class="section">
<p>仕事でクエリの最適化するのに簡単なベンチマークを採る必要があったので作った。探した方が早いかと思ったけど単純に同じクエリを必要回数発行してトータル時間見るだけなので自分が使いやすければそれでおｋ。あんまり変わらないと思うけどAPに合わせてPHPで書いてみた。単体で動いてどこでも使えるようにPEAR使ってないのでコマンドライン用に書くのがめんどくさい。</p>
<pre class="syntax-highlight">
#!/usr/bin/php
<span class="synSpecial">&#60;?php</span>

<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">argc</span> <span class="synStatement">==</span> <span class="synConstant">1</span><span class="synSpecial">)</span> <span class="synStatement">?</span>  Bench<span class="synStatement">::</span>usage<span class="synSpecial">()</span> <span class="synStatement">:</span> <span class="synStatement">$</span><span class="synIdentifier">params</span> <span class="synStatement">=</span> Bench<span class="synStatement">::</span>parse_args<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">argv</span><span class="synSpecial">)</span>;

<span class="synStatement">$</span><span class="synIdentifier">bench</span> <span class="synStatement">=</span> <span class="synPreProc">new</span> Bench<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">params</span><span class="synSpecial">)</span>;
<span class="synStatement">$</span><span class="synIdentifier">bench</span><span class="synType">-&#62;</span>bootstrap<span class="synSpecial">()</span>;



<span class="synType">class</span> Bench
<span class="synSpecial">{</span>
    <span class="synStatement">var</span>
        <span class="synStatement">$</span><span class="synIdentifier">params</span> <span class="synStatement">=</span> <span class="synType">array</span><span class="synSpecial">()</span>;
    
    <span class="synPreProc">function</span> <span class="synStatement">__construct</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">params</span><span class="synSpecial">)</span>
    <span class="synSpecial">{</span>
        <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">params</span>;
    <span class="synSpecial">}</span>
    
    <span class="synPreProc">function</span> bootstrap<span class="synSpecial">()</span>
    <span class="synSpecial">{</span>
        <span class="synStatement">$</span><span class="synIdentifier">con</span> <span class="synStatement">=</span> @<span class="synIdentifier">mysql_connect</span><span class="synSpecial">(</span>
                             <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">dbhost</span>'<span class="synSpecial">]</span>,
                             <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">dbuser</span>'<span class="synSpecial">]</span>,
                             <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">dbpass</span>'<span class="synSpecial">]</span>
                             <span class="synSpecial">)</span> <span class="synStatement">||</span> <span class="synStatement">die</span><span class="synSpecial">(</span><span class="synIdentifier">sprintf</span><span class="synSpecial">(</span>&#34;<span class="synConstant">[ERROR %d]: %s</span><span class="synSpecial">\n</span>&#34;, <span class="synIdentifier">mysql_errno</span><span class="synSpecial">()</span>, <span class="synIdentifier">mysql_error</span><span class="synSpecial">()))</span>;
        @<span class="synIdentifier">mysql_select_db</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">dbname</span>'<span class="synSpecial">])</span> <span class="synStatement">||</span> <span class="synStatement">die</span><span class="synSpecial">(</span><span class="synIdentifier">sprintf</span><span class="synSpecial">(</span>&#34;<span class="synConstant">[ERROR %d]: %s</span><span class="synSpecial">\n</span>&#34;, <span class="synIdentifier">mysql_errno</span><span class="synSpecial">()</span>, <span class="synIdentifier">mysql_error</span><span class="synSpecial">()))</span>;

        <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>bench<span class="synSpecial">()</span>;
        
        <span class="synIdentifier">mysql_close</span><span class="synSpecial">()</span>;
    <span class="synSpecial">}</span>
    
    <span class="synPreProc">function</span> output<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span>, <span class="synStatement">$</span><span class="synIdentifier">queries</span>, <span class="synStatement">$</span><span class="synIdentifier">begin</span>, <span class="synStatement">$</span><span class="synIdentifier">end</span><span class="synSpecial">)</span>
    <span class="synSpecial">{</span>
       <span class="synPreProc">echo</span> <span class="synIdentifier">sprintf</span><span class="synSpecial">(</span>'<span class="synConstant">[%s]: %d queries %d times total %s sec (avg. %s sec).</span>', <span class="synStatement">$</span><span class="synIdentifier">file</span>, <span class="synIdentifier">count</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">queries</span><span class="synSpecial">)</span>, <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">count</span>'<span class="synSpecial">]</span>, 
                    <span class="synIdentifier">round</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">end</span> <span class="synStatement">-</span> <span class="synStatement">$</span><span class="synIdentifier">begin</span>, <span class="synConstant">5</span><span class="synSpecial">)</span>, <span class="synIdentifier">round</span><span class="synSpecial">((</span><span class="synStatement">$</span><span class="synIdentifier">end</span> <span class="synStatement">-</span> <span class="synStatement">$</span><span class="synIdentifier">begin</span><span class="synSpecial">)</span><span class="synStatement">/$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">count</span>'<span class="synSpecial">]</span>, <span class="synConstant">5</span><span class="synSpecial">))</span> , &#34;<span class="synSpecial">\n</span>&#34;; 
    <span class="synSpecial">}</span>
    
    <span class="synPreProc">function</span> execute<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">)</span>
    <span class="synSpecial">{</span>
        <span class="synStatement">$</span><span class="synIdentifier">_queries</span> <span class="synStatement">=</span> <span class="synIdentifier">explode</span><span class="synSpecial">(</span>'<span class="synConstant">;</span>', <span class="synIdentifier">file_get_contents</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">))</span>;
        <span class="synStatement">foreach</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">_queries</span> <span class="synStatement">as</span> <span class="synStatement">$</span><span class="synIdentifier">query</span><span class="synSpecial">)</span>
        <span class="synSpecial">{</span>
            <span class="synStatement">if</span><span class="synSpecial">(</span><span class="synIdentifier">trim</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">query</span><span class="synSpecial">)</span> <span class="synStatement">==</span> ''<span class="synSpecial">)</span> <span class="synStatement">continue</span>;
            <span class="synStatement">$</span><span class="synIdentifier">query</span> <span class="synStatement">=</span> <span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">cache</span>'<span class="synSpecial">])</span>
                      <span class="synStatement">?</span> <span class="synIdentifier">preg_replace</span><span class="synSpecial">(</span>'<span class="synConstant">/SELECT[\s\t\n\r]+(SQL_NO_CACHE)?/i</span>', '<span class="synConstant">SELECT </span>', <span class="synStatement">$</span><span class="synIdentifier">query</span><span class="synSpecial">)</span>
                      <span class="synStatement">:</span> <span class="synIdentifier">preg_replace</span><span class="synSpecial">(</span>'<span class="synConstant">/SELECT[\s\t\n\r]+(SQL_NO_CACHE)?/i</span>', '<span class="synConstant">SELECT SQL_NO_CACHE </span>', <span class="synStatement">$</span><span class="synIdentifier">query</span><span class="synSpecial">)</span>;
            <span class="synIdentifier">mysql_query</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">query</span><span class="synSpecial">)</span> <span class="synStatement">||</span> <span class="synStatement">die</span><span class="synSpecial">(</span><span class="synIdentifier">sprintf</span><span class="synSpecial">(</span>&#34;<span class="synConstant">[ERROR %d]: %s on '%s'</span><span class="synSpecial">\n</span>&#34;, <span class="synIdentifier">mysql_errno</span><span class="synSpecial">()</span>, <span class="synIdentifier">mysql_error</span><span class="synSpecial">()</span>, <span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">))</span>;
            <span class="synStatement">$</span><span class="synIdentifier">queries</span><span class="synSpecial">[]</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">query</span>;
        <span class="synSpecial">}</span>
        <span class="synStatement">$</span><span class="synIdentifier">begin</span> <span class="synStatement">=</span> Bench<span class="synStatement">::</span>get_microtime<span class="synSpecial">()</span>;
        <span class="synStatement">for</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">i</span><span class="synStatement">=</span><span class="synConstant">0</span>; <span class="synStatement">$</span><span class="synIdentifier">i</span><span class="synStatement">&#60;$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">count</span>'<span class="synSpecial">]</span>; <span class="synStatement">$</span><span class="synIdentifier">i</span><span class="synStatement">++</span><span class="synSpecial">)</span>
        <span class="synSpecial">{</span>
            <span class="synStatement">foreach</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">queries</span> <span class="synStatement">as</span> <span class="synStatement">$</span><span class="synIdentifier">query</span><span class="synSpecial">)</span> <span class="synIdentifier">mysql_query</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">query</span><span class="synSpecial">)</span>;
        <span class="synSpecial">}</span>
        <span class="synStatement">$</span><span class="synIdentifier">end</span> <span class="synStatement">=</span> Bench<span class="synStatement">::</span>get_microtime<span class="synSpecial">()</span>;
        <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span><span class="synIdentifier">output</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span>, <span class="synStatement">$</span><span class="synIdentifier">queries</span>, <span class="synStatement">$</span><span class="synIdentifier">begin</span>, <span class="synStatement">$</span><span class="synIdentifier">end</span><span class="synSpecial">)</span>;
    <span class="synSpecial">}</span>

    <span class="synPreProc">function</span> bench<span class="synSpecial">()</span>
    <span class="synSpecial">{</span>
        <span class="synStatement">foreach</span> <span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>params<span class="synSpecial">[</span>'<span class="synConstant">files</span>'<span class="synSpecial">]</span> <span class="synStatement">as</span> <span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">)</span>
        <span class="synSpecial">{</span>
            <span class="synStatement">if</span> <span class="synSpecial">(</span><span class="synIdentifier">is_dir</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">))</span>
            <span class="synSpecial">{</span>
                <span class="synStatement">$</span><span class="synIdentifier">_files</span> <span class="synStatement">=</span> <span class="synIdentifier">glob</span><span class="synSpecial">(</span><span class="synIdentifier">rtrim</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span>, DIRECTORY_SEPARATOR<span class="synSpecial">)</span> <span class="synStatement">.</span> DIRECTORY_SEPARATOR <span class="synStatement">.</span> '<span class="synConstant">*.sql</span>'<span class="synSpecial">)</span>;
                <span class="synStatement">if</span> <span class="synSpecial">(</span><span class="synStatement">!empty</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">_files</span><span class="synSpecial">))</span>
                <span class="synSpecial">{</span>
                    <span class="synStatement">foreach</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">_files</span> <span class="synStatement">as</span> <span class="synStatement">$</span><span class="synIdentifier">_file</span><span class="synSpecial">)</span>
                    <span class="synSpecial">{</span>
                        <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>execute<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">_file</span><span class="synSpecial">)</span>;
                    <span class="synSpecial">}</span>
                <span class="synSpecial">}</span>
            <span class="synSpecial">}</span>
            <span class="synStatement">else</span>
            <span class="synSpecial">{</span>
                <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>execute<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">)</span>; 
            <span class="synSpecial">}</span>
        <span class="synSpecial">}</span>
    <span class="synSpecial">}</span>

    <span class="synPreProc">function</span> usage<span class="synSpecial">()</span>
    <span class="synSpecial">{</span>
    <span class="synSpecial">?&#62;</span>
    Usage: bench [options] file ... 

    The options are as follows:
        -h   Database Host     (default: localhost)
        -u   Database User     (default: root)
        -p   Database Password (default: '')
        -d   Database Name     (default: mysql)
        -n   Repeat Count      (default: 1000)
        -c   Using Query Cache (default: false)      

    <span class="synSpecial">&#60;?php</span>
        <span class="synStatement">exit</span><span class="synSpecial">()</span>;
    <span class="synSpecial">}</span>

    <span class="synPreProc">function</span> parse_args<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">args</span><span class="synSpecial">)</span>
    <span class="synSpecial">{</span>
        <span class="synStatement">$</span><span class="synIdentifier">script</span> <span class="synStatement">=</span> <span class="synIdentifier">array_shift</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">args</span><span class="synSpecial">)</span>;
        <span class="synStatement">$</span><span class="synIdentifier">params</span> <span class="synStatement">=</span> <span class="synType">array</span><span class="synSpecial">(</span>
                        '<span class="synConstant">dbhost</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">localhost</span>',
                        '<span class="synConstant">dbuser</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">root</span>',
                        '<span class="synConstant">dbpass</span>' <span class="synStatement">=&#62;</span> '',
                        '<span class="synConstant">dbname</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">mysql</span>',
                        '<span class="synConstant">count</span>'  <span class="synStatement">=&#62;</span> <span class="synConstant">1000</span>,
                        '<span class="synConstant">cache</span>'  <span class="synStatement">=&#62;</span> <span class="synConstant">false</span>,
                        '<span class="synConstant">files</span>' <span class="synStatement">=&#62;</span> <span class="synType">array</span><span class="synSpecial">()</span>
                    <span class="synSpecial">)</span>;
        <span class="synStatement">$</span><span class="synIdentifier">options</span> <span class="synStatement">=</span> <span class="synType">array</span><span class="synSpecial">(</span>
                        '<span class="synConstant">-h</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">dbhost</span>',
                        '<span class="synConstant">-u</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">dbuser</span>',
                        '<span class="synConstant">-p</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">dbpass</span>',
                        '<span class="synConstant">-d</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">dbname</span>',
                        '<span class="synConstant">-n</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">count</span>',
                        '<span class="synConstant">-c</span>' <span class="synStatement">=&#62;</span> '<span class="synConstant">cache</span>',
                    <span class="synSpecial">)</span>;
        <span class="synStatement">$</span><span class="synIdentifier">key</span> <span class="synStatement">=</span> '';
        <span class="synStatement">foreach</span> <span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">args</span> <span class="synStatement">as</span> <span class="synStatement">$</span><span class="synIdentifier">arg</span><span class="synSpecial">)</span>
        <span class="synSpecial">{</span>
            <span class="synStatement">if</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">key</span><span class="synSpecial">)</span>
            <span class="synSpecial">{</span>
                <span class="synStatement">switch</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">key</span><span class="synSpecial">)</span>
                <span class="synSpecial">{</span>
                    <span class="synStatement">case</span> '<span class="synConstant">count</span>'<span class="synStatement">:</span>
                        <span class="synStatement">$</span><span class="synIdentifier">params</span><span class="synSpecial">[</span><span class="synStatement">$</span><span class="synIdentifier">key</span><span class="synSpecial">]</span> <span class="synStatement">=</span> <span class="synIdentifier">intval</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">arg</span><span class="synSpecial">)</span>;
                        <span class="synStatement">break</span>;
                    <span class="synStatement">case</span> '<span class="synConstant">cache</span>'<span class="synStatement">:</span>
                        <span class="synStatement">$</span><span class="synIdentifier">params</span><span class="synSpecial">[</span><span class="synStatement">$</span><span class="synIdentifier">key</span><span class="synSpecial">]</span> <span class="synStatement">=</span> <span class="synIdentifier">in_array</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">arg</span>, <span class="synType">array</span><span class="synSpecial">(</span>'<span class="synConstant">0</span>','<span class="synConstant">false</span>'<span class="synSpecial">))</span> <span class="synStatement">?</span> <span class="synConstant">false</span> <span class="synStatement">:</span> <span class="synConstant">true</span>;
                        <span class="synStatement">break</span>;
                    <span class="synStatement">default:</span>
                        <span class="synStatement">$</span><span class="synIdentifier">params</span><span class="synSpecial">[</span><span class="synStatement">$</span><span class="synIdentifier">key</span><span class="synSpecial">]</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">arg</span>;
                <span class="synSpecial">}</span>
                <span class="synStatement">$</span><span class="synIdentifier">key</span> <span class="synStatement">=</span> '';
            <span class="synSpecial">}</span>
            <span class="synStatement">else</span> <span class="synStatement">if</span><span class="synSpecial">(</span><span class="synStatement">isset</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">options</span><span class="synSpecial">[</span><span class="synStatement">$</span><span class="synIdentifier">arg</span><span class="synSpecial">]))</span>
            <span class="synSpecial">{</span>
                <span class="synStatement">$</span><span class="synIdentifier">key</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">options</span><span class="synSpecial">[</span><span class="synStatement">$</span><span class="synIdentifier">arg</span><span class="synSpecial">]</span>;
            <span class="synSpecial">}</span>
            <span class="synStatement">else</span>
            <span class="synSpecial">{</span>
                <span class="synStatement">$</span><span class="synIdentifier">params</span><span class="synSpecial">[</span>'<span class="synConstant">files</span>'<span class="synSpecial">][]</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">arg</span>;
            <span class="synSpecial">}</span>
        <span class="synSpecial">}</span>
        <span class="synStatement">if</span><span class="synSpecial">(</span><span class="synStatement">empty</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">params</span><span class="synSpecial">[</span>'<span class="synConstant">files</span>'<span class="synSpecial">]))</span> Bench<span class="synStatement">::</span>usage<span class="synSpecial">()</span>;
        <span class="synStatement">foreach</span> <span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">params</span><span class="synSpecial">[</span>'<span class="synConstant">files</span>'<span class="synSpecial">]</span> <span class="synStatement">as</span> <span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">)</span>
        <span class="synSpecial">{</span>
            <span class="synStatement">if</span><span class="synSpecial">(</span><span class="synStatement">!</span><span class="synIdentifier">is_dir</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">)</span> <span class="synStatement">&#38;&#38;</span> <span class="synStatement">!</span><span class="synIdentifier">is_file</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">file</span><span class="synSpecial">))</span> Bench<span class="synStatement">::</span>usage<span class="synSpecial">()</span>;
        <span class="synSpecial">}</span>
        
        <span class="synStatement">return</span> <span class="synStatement">$</span><span class="synIdentifier">params</span>;
    <span class="synSpecial">}</span>

    <span class="synPreProc">function</span> get_microtime<span class="synSpecial">()</span>
    <span class="synSpecial">{</span>
        <span class="synType">list</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">usec</span>, <span class="synStatement">$</span><span class="synIdentifier">sec</span><span class="synSpecial">)</span> <span class="synStatement">=</span> <span class="synIdentifier">explode</span><span class="synSpecial">(</span>&#34;<span class="synConstant"> </span>&#34;, <span class="synIdentifier">microtime</span><span class="synSpecial">())</span>;
        <span class="synStatement">return</span> <span class="synSpecial">((</span><span class="synType">float</span><span class="synSpecial">)</span><span class="synStatement">$</span><span class="synIdentifier">usec</span> <span class="synStatement">+</span> <span class="synSpecial">(</span><span class="synType">float</span><span class="synSpecial">)</span><span class="synStatement">$</span><span class="synIdentifier">sec</span><span class="synSpecial">)</span>;
    <span class="synSpecial">}</span>
<span class="synSpecial">}</span>
<span class="synSpecial">?&#62;</span>
</pre>

<p>適当なディレクトリに『bench.php』とか適当な名前で保存して実行権限つけて使います。</p>
<p>スイッチも単純なものしかないけど、</p>
<pre>
$ ./bench.php

    Usage: bench &#91;options] file ... 

    The options are as follows:
        -h   Database Host     (default: localhost)
        -u   Database User     (default: root)
        -p   Database Password (default: &#39;&#39;)
        -d   Database Name     (default: mysql)
        -n   Repeat Count      (default: 1000)
        -c   Using Query Cache (default: false)      
</pre>

<p>みたいな感じで。あとは測定したいクエリを『test.sql』とかに書いて、</p>
<pre>
$ cat test.sql
SELECT &#42; FROM users;
SELECT &#42; FROM entris;


$ ./bench.php -d DB名 test.sql
&#91;test.sql]: 2 queries 1000 times total 0.46662 sec (avg. 0.00047 sec).
</pre>

<p>な感じで使えます。</p>

<ul>
<li> デフォルトはクエリキャッシュを無効にする(SQL_NO_CACHEを自動付加）ようになってるのでキャッシュ有効にする場合は -c true オプションつけて実行してください。（別途my.iniとかでクエリキャッシュを有効にしておく必要有り）</li>
<li> 複数ファイルをテストしたいときはそのままファイル名をスペースで繋げて実行してください。</li>
<li> ファイル名の代わりにディレクトリ名を指定すればディレクトリ内の *.sql をすべてテストできます。</li>
</ul>
</div>
]]></content:encoded>
<dc:creator>simpraight</dc:creator>
<dc:date>2008-12-19T02:04:53+09:00</dc:date>
<dc:subject>Mysql</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/simpraight/20081124/1227525696">
<title>[日記]ITバレーカンファレンス＠松山にいってきた</title>
<link>http://d.hatena.ne.jp/simpraight/20081124/1227525696</link>
<description> 先日11/22に松山でITバレーカンファレンスがあったので行ってきた。 http://cybozu.co.jp/company/job/2010conference.html http://labs.cybozu.co.jp/blog/hata/archives/2008-10-30-1.html http://blog.bz2.jp/archives/2008/11/post-87.html 松山でこういった集まりは珍</description>

<content:encoded><![CDATA[
<div class="section">
<p><a href="http://f.hatena.ne.jp/simpraight/20081124202635" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/simpraight/20081124/20081124202635.jpg" alt="f:id:simpraight:20081124202635j:image" title="f:id:simpraight:20081124202635j:image" class="hatena-fotolife"></a></p>
<p>先日11/22に松山でITバレーカンファレンスがあったので行ってきた。</p>

<ul>
<li> <a href="http://cybozu.co.jp/company/job/2010conference.html" target="_blank">http://cybozu.co.jp/company/job/2010conference.html</a></li>
<li> <a href="http://labs.cybozu.co.jp/blog/hata/archives/2008-10-30-1.html" target="_blank">http://labs.cybozu.co.jp/blog/hata/archives/2008-10-30-1.html</a></li>
<li> <a href="http://blog.bz2.jp/archives/2008/11/post-87.html" target="_blank">http://blog.bz2.jp/archives/2008/11/post-87.html</a></li>
</ul>
<p>松山でこういった集まりは珍しいし、僕自身も参加するのは初めてだったけど行って良かった。良い刺激になりました。（懇親会に参加できなかったのが非常に悔やまれる。。。）</p>
<p>もう誰か書いてるかもしれないけど自分なりに感想などを書いてみる。</p>
<h4> サイボウズはなぜ松山でつくるのか？</h4>

<ul>
<li> <a href="http://cydn.cybozu.co.jp/2008/10/programmers_in_matsuyama.html" target="_blank">サイボウズ松山開発部長 門屋さん</a></li>
<li> ポニョは良いよ</li>
<li> グループウエアって誰でも作れるよね → No. サイボウズにしか作れないグループウエアがある。

<ul>
<li> 長年の開発・サポート過程で語り尽くせないノウハウがある。→社内ノウハウのデータベース化。共有化。</li>
<li> コアライブラリは自作（デジエではテンプレートエンジンやDBエンジンも自作、ガルーンではPHP拡張も自作）</li>
<li> .NETやORACLEは採用せず導入時のユーザ負担の軽減を重視</li>
<li> こだわりをもつ技術者がいる ※「<a href="http://www.atmarkit.co.jp/fcoding/articles/phpcon08/02/phpcon0802a.html" target="_blank">http.conf開かせたら負け</a>」</li>
</ul>
</li>
<li> サイボウズのプログラマに上流下流の区別なし（PG,QA,UI,Document）</li>
<li> なぜ松山に？ → 開発拠点の分散。地元に帰りたい人たちも定着させる。</li>
<li> ポニョはジブリにしか作れない。ポニョ良いよ。</li>
</ul>
<p>自社の開発・開発者にこだわりを持っていることがとてもうらやましい。</p>
<p>請負の仕事に追われがちな地方の中小企業ではなかなか難しそうだけど、自社提案・自社製品の開発における姿勢や手法は見習うところが多いと思う。あとポニョみようと思った。</p>
<h4> 最初は誰でもDQN</h4>

<ul>
<li> <a href="http://blog.bz2.jp/" target="_blank">ウノウ株式会社 CTO尾藤さん</a></li>
<li> 過去のメーリングリストでの発言紹介「Q. Linuxの使い方が分かりません」「A. つらいでしょうが頑張ってください」</li>
<li> インターネット、Linuxとの出会い→JE,konの真鍋さんが同高専卒→俺にもできんじゃね？→Vine Linux for SPARCの開発に参加</li>
<li> 勉強会ブーム

<ul>
<li> 地方でももっとやろうよ</li>
<li> メリット（外部からの刺激、技術力アップ、人脈の広がり、懇親会楽しい）</li>
<li> 一人でやってると技術力はアップしない。技術に慣れるだけ。</li>
</ul>
</li>
<li> オープンでいこう→Give & Take</li>
<li> 結論：「恐 れ な い」</li>
<li> 「Q.地方で勉強会したらきてくれますか？」 → 「A.自費でも参加します。」</li>
</ul>
<p>まず尾藤さんが着ていた「/dev/null」Tシャツが気になった。あれは欲しい。</p>
<p>内容は面白くて笑いも起こっていたけど、恐れないというのはとても大事だと思う。地方だからといって勉強会できないワケじゃないし業界について行けないワケじゃない。恐れずにやってみることが大事。地方で勉強会したら着てくれるらしいｗコレは期待。</p>
<h4> 産官学で行う未来のICT人材発掘・啓発</h4>

<ul>
<li> <a href="http://koblab.cs.ehime-u.ac.jp/index-j.html" target="_blank">愛媛大学 小林教授</a></li>
<li> Teenagerへのエンジニアイメージの払拭と人材発掘への取り組み</li>
<li> EPOCH@まつやまの発端の経緯

<ul>
<li> 単なる産官学連携はつまらない</li>
<li> インターハイや甲子園のように将来のエンジニアが「松山」を目指すように</li>
</ul>
</li>
<li> EPOCH@まつやま

<ul>
<li> 純粋なプログラミング能力を試す大会。</li>
<li> ビンゴやオセロなども取り入れゲーム性も高めた。</li>
<li> 県内だけでなく県外からも多数の参加あり</li>
<li> 去年よりも参加条件が厳しく（2名以下のチーム→2名1組のチーム）なったけど今年は去年以上の参加申し込み</li>
</ul>
</li>
</ul>
<p>EPOCH@まつやまのとりくみは去年から知ってたけど経緯が分かって面白かった。</p>
<p>今年は見に行けなかったけどせっかく地元で面白いことやってるので来年から注目してみよっと。</p>
<h4> 成功する技術者</h4>

<ul>
<li> <a href="http://labs.cybozu.co.jp/blog/hata/" target="_blank">サイボウズラボ 代表取締役 畑さん</a></li>
<li> 基本重要。→とにかく何が重要か分からなくてもやっておくべき。</li>
<li> アセンブリ言語はコンピュータの仕組みが分かって良い。知ってると知らないとではコードの質がちがう。</li>
<li> 技術力＋社会人力が必要。→コミュニケーション能力や人から教えてもらえる能力も大事なこと。</li>
<li> 信頼は実績に宿る。→良い技術者になるにはコツコツ積み重ねが必要。</li>
<li> 35才定年説。→意識の持ちよう。会社組織の中でも開発者としてあり続けることは可能。</li>
<li> かっこよさ。→エンジニアの地位向上のためには子供が憧れるようなかっこよさも必要。</li>
<li> エンジニアとしての成功の定義は人それぞれ。</li>
</ul>
<p>自分にとって成功の定義がどこにあるのか考えたことなかったけど、多分自分を含めた誰かが幸せになるようなものを作りたいというのは根底にあると思う。全然具体的なものじゃないけど、この根っこの部分がブレると自分は多分ダメ。このへんでお金のためとか会社のためとか言い出すと不安定になる。あくまでも自分の作るものの先にはユーザがいることは忘れないでおきたい。</p>
<br>

<p>発表者の皆さんはいずれも愛媛・松山に関わりのあるひとばかりでとても刺激のある内容でした。企画してくださった関係者の皆さんありがとうございました。</p>
<p>「鉄は熱いうちに打て」じゃないですが、この流れで地元の勉強会ブームなどが沸き起こるとすごいうれしい。というか自分で企画しろていうことですね。わかります。</p>
</div>
]]></content:encoded>
<dc:creator>simpraight</dc:creator>
<dc:date>2008-11-24T20:21:36+09:00</dc:date>
<dc:subject>日記</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/simpraight/20081021/1224601041">
<title>[tips]PLANEXのNAS(MZK-NAS02)をなんとかする</title>
<link>http://d.hatena.ne.jp/simpraight/20081021/1224601041</link>
<description> 家のNASがぶっ壊れたので、RAID1対応で安いものをAmazonで探して買ってみた。 HDD無しだったけど同じくAmazonで安い500GBのHDDを2本買って合計30000円以内だったのでかなりお得な感じだと思う。 到着してからwktkしながら箱から出してセットアップしていざ使おうとしたけど</description>

<content:encoded><![CDATA[
<div class="section">
<p>家のNASがぶっ壊れたので、RAID1対応で安いものをAmazonで探して買ってみた。</p>
<p>HDD無しだったけど同じくAmazonで安い500GBのHDDを2本買って合計30000円以内だったのでかなりお得な感じだと思う。</p>
<p>到着してからwktkしながら箱から出してセットアップしていざ使おうとしたけど、何となく気になったのでtelnetしてみたらすんなりログインできた。なんというセキュリティ。</p>
<p>ローカルだし自宅だしまぁいいかと思って見てたら、なんか色々「なってない」感じだったのでなんとかした。</p>
<br>

<h4>1. sambaの設定ファイル</h4>
<p>他のLinuxサーバ同様samba使ってファイル共有を行う仕様だけど、設定ファイル見たらtypoあったりcharset指定なかったりでそりゃないだろっていう状態なので以下のように修正。</p>
<p>・globalセクションにcharset設定を追加</p>
<pre>
unix charset = UTF-8
dos charset = CP932
display charset = UTF-8
</pre>

<p>・デフォルトで用意されている homes セクションにtypoがあるので修正</p>
<pre>
&#91;homes]
× pash = /content/home/%S
↓
○ path = /content/home/%S
</pre>

<br>

<h4>2. 起動スクリプト修正</h4>
<p>「iTuneサーバ対応」とか「DLNA対応」とか「BitTorrent対応」とか正直使わないので停止しようとしたけど、せっかく用意されているサービス管理コマンド（initdconfig）が使えない状態になっているので起動スクリプトの修正。</p>
<p>・「/etc/init.d/mt-daapd」の先頭に以下を追加</p>
<pre>
#!/bin/bash
#
# DAAP 
#
# chkconfig: 2345 99 41
# description: DAAP server
# processname: mt-daapd
</pre>

<p>・「/etc/init.d/digital5」の先頭に以下を追加</p>
<pre>
#! /bin/sh
#
# digital5 
#
# chkconfig: 2345 98 42
# description: digital5 server
# processname: digital5
</pre>

<p>・「/etc/init.d/btd2」の先頭部分を以下のように修正</p>
<pre>
#!/bin/bash
#
# btd   This shell script takes care of starting and stopping
#       standalonv btd
#
# chkconfig: 2345 60 50
# description: btd is a BitTorrent Server daemon, which is the program &#92;
#              that answers incoming BitTorrent service requests.
# processname: btd
</pre>

<br>

<br>

<h4>3. サービス設定</h4>
<p>起動スクリプトを修正したらinitdconfigの管理下に置くために以下コマンドを実施</p>
<pre>
# initdconfig --add mt-daapd
# initdconfig --add digital5
# initdconfig --add btd
</pre>

<p>これでサービスの管理をinitdconfigで操作できる。</p>
<p>とりあえずデフォルトで配備されているrc.d配下のシンボリックリンクを削除</p>
<pre>
# rm -rf /etc/rc.d/rc?.d/&#91;S,K]&#42;mt-daapd
# rm -rf /etc/rc.d/rc?.d/&#91;S,K]&#42;digital5
# rm -rf /etc/rc.d/rc?.d/&#91;S,K]&#42;btd
</pre>

<p>あとはサービス起動の設定をinitdconfigで実施</p>
<pre>
# initdconfig --level 2345 mt-daapd off
# initdconfig --level 2345 digital5 off
# initdconfig --level 2345 btd off
</pre>

<br>

<h4>4. アラートメールの設定</h4>
<p>デフォルトでは「/var/nascfg/scripts/notification.pl」でHDDがFULLの時、CPUのオーバーロード時、Raidの縮退モード時にアラートメールを送ることができるっぽいのだが動かない。というか自動起動しようとしてるけどスクリプトのエラーで動いてない。</p>
<p>さらにメール送信の設定や、サービスの起動などがGUIの管理画面から弄れない。</p>
<p>せっかく用意しているなら使えるようにしとけと思うのだが、なんだろねこれ。</p>
<p>まず、普通に実行するとperlのモジュールがいろいろ見つかりませんエラーがでる。多分スクリプトと同じディレクトリにモジュール色々おいてるけど@INCに追加してないのが原因。perl -I でやっても良いけどとりあえずソースを修正しておく。</p>
<p>あと、cpuの使用率チェックのところで、$cpu-&#62;{total} ってなってるけどこれってidle含むから常に100%じゃないの？</p>
<p>チェックするならiowaitとかuserとかになると思うんだがなぁ。。。</p>
<p>ということでパッチ作成。</p>
<pre>
--- notification.org.pl 2008-10-21 22:55:52.665724000 +0900
+++ notification.pl     2008-10-21 23:10:08.065724000 +0900
@@ -1,4 +1,5 @@
 #!/usr/bin/perl
+use lib &#39;/var/nascfg/scripts&#39;;
 use Sys::Statistics::Linux::DiskUsage;
 use Sys::Statistics::Linux;
 use Mail::Sendmail;
@@ -275,12 +276,12 @@
  sleep(1);
  my $stats = $lxs-&#62;get;
  my $cpu   = $stats-&#62;{CpuStats}-&#62;{cpu};
- if($cpu-&#62;{total}&#62;= $gCpuPer) 
+ if($cpu-&#62;{idle}&#60;= 100-$gCpuPer) 
  {
    
    $time = localtime; 
    $Msg = &#34;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#92;n&#34;;   
-   $Msg .= &#34;Cpu usage is $cpu-&#62;{total}%  on $gIP.&#92;n&#34;;
+   $Msg .= &#34;Cpu idle is $cpu-&#62;{idle}%  on $gIP.&#92;n&#34;;
    $Msg .= &#34;Please kill unnecessary processes .&#92;n&#34;; 
    $Msg .= &#34;Mail sent at: $time &#92;n &#34;;
    $Msg .= &#34;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#92;n&#34;;

</pre>

<p>とりあえずcpuはidleの比率見て判断するようにした。</p>
<p>あとは、「/var/nascfg/CfgFile.txt」に以下設定を書き込めばよい。</p>
<pre>
ServerIp:192.168.1.1;         # smtpサーバのIP
EmailId:test@example.com;     # アラートの送信先(To:)
DiskPer:90;                   # HDD使用率警告しきい値(%)
DiskCriticalPer:95;           # HDD使用率臨界値(%)
CpuPer:100;                   # CPU使用率警告しきい値(%)
TimeDelay:10;                 # チェック間隔(分)
FromEmailId:root@example.com; # アラートメールの送信元(From:)
</pre>

<br>

<h4>5. よくわからないもの</h4>
<p>デフォルトでCPU使用率がやたらと高い。topでみると /etc/MemoryDriver/otabd の占有率が高すぎる。</p>
<p>名前からして、おそらくメモリーカードリーダのドライバ関係じゃないかと。</p>
<p>これも使わないので思い切って無効にしちゃう。</p>
<pre>
# rm /etc/rc.d/&#42;/S98otab
</pre>

<br>

<p><hr></p>
<p><span style="color:#FF0000;">[2008.10.22 追記]</span></p>
<p>これ切っちゃうと本体の「RAID」REDが赤色に点灯してしまうみたい。うーん。</p>
<p>一緒にMitacGPIOていうモジュールをロードするようになってて、これが多分前面パネルのRED関係のモジュールなんじゃないかと思われる。</p>
<p>RAID異常のアラートはメールで飛んでくるからまぁいいけど、なんか気持ち悪いのでモジュールのロードだけしておく。</p>
<pre>
# insmod /etc/MemoryDriver/MitacGPIO.ko
</pre>

<p>という感じでロードすればREDも正常に戻るみたい。</p>
<p><hr></p>
<br>

<p>これであとは再起動して正常動作確認すればおｋ。</p>
<p>今のところウチはこれで問題なく動いてる。なんとなくパフォーマンスも良くなったような気がしないでもない。</p>
<p>もちろん必要に応じてFTPやTELNET(SSHつかえるので)つぶしたりすればさらに良いかもしれない。</p>
<p>RPM使えるのでどうにかすればソフトウエア追加してごにょごにょもできるかもしれないけど、正直この機械でそこまでする気は沸かないなぁという感じ。</p>
<p>多分デフォルトだとパフォーマンス悪くてぶちぶち切れたりして使い物にならないんじゃないかと思うんだけど、あんまり言うとPLANEXに悪いのでこのへんにしておく。</p>
</div>
]]></content:encoded>
<dc:creator>simpraight</dc:creator>
<dc:date>2008-10-21T23:57:21+09:00</dc:date>
<dc:subject>tips</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/simpraight/20081015/1224080891">
<title>[Akelos] Akelos0.9がきてるっぽいのでメモ（設定ファイル編）</title>
<link>http://d.hatena.ne.jp/simpraight/20081015/1224080891</link>
<description> 久しぶりにアップデートしたらAkelosが待望？の0.9（REV.1196）になってたのでCHANGELOGの内容をメモ。 今回は設定ファイルをベースに変更内容を追いかけてみる。 YAMLベースの設定ファイルが使えるようになった。 AkelosでもようやくYAML形式の設定ファイルをサポートし始</description>

<content:encoded><![CDATA[
<div class="section">
<p>久しぶりにアップデートしたらAkelosが待望？の0.9（REV.1196）になってたのでCHANGELOGの内容をメモ。</p>
<p>今回は設定ファイルをベースに変更内容を追いかけてみる。</p>
<br>

<h4>YAMLベースの設定ファイルが使えるようになった。</h4>
<p>AkelosでもようやくYAML形式の設定ファイルをサポートし始めたみたい。</p>
<p>「*.yml」を「AK_APP_DIR/config」ディレクトリに突っ込めば自動的に読み込んでくれるっぽい。</p>
<p>運用環境用は「production」、開発用は「development」、テスト用は「test」を利用できる。新しい要素で「default」セクションが使えるようになっているので、共通要素は多分ここに記述すればいい。</p>
<p>旧設定ファイルの「config/config.php」は定数の設定等でそのまま利用できるみたいだけど、データベースの設定は後述のdatabase.ymlを作成しないとエラーを吐く。</p>
<p>あと、YAMLのキャッシュファイルは「config/cache」配下に作られるみたい。希望としては「tmp/cache/config」にして欲しいのだけど。。。</p>
<p>セットアップ後デフォルトで整備されるYAMLファイルは以下。</p>
<h4>infrector.yml ... 単語の単数形&#60;=&#62;複数形の変換関連</h4>
<pre class="syntax-highlight">
default:
    pluralize:  # 複数形への変換
        rules:  # 一定のルールで変換されるもの。上から順に評価されてマッチした時点で終了。

            /sis$/i: ses # 例えばコレだと「〜sis」で終わる単語は「〜ses」を複数形として扱
う。

        uncountable: # 複数形変換しない単語を列挙
            - equipment
            - information # こんな感じ

        irreguler:  # その他の変換ルール。単純に「単数形: 複数形」の形式で記述

            person: peaple
            man: men
            child: children # こんな感じ

    singlize:   # 単数形への変換
         rules:
         uncountable:
         irregulre:    # 子セクションの記述は複数形のときと同じ
</pre>

<p>多分あんまり弄ることはない。主にmodel内でのプロパティの命名に使われたり、view内でのループ使用時の自動処理に使われる。複数形&#60;=&#62;単数形の変換が気に入らない場合はこのファイルを弄れば良い。</p>
<h4>sessions.yml ... セッション関連</h4>
<pre class="syntax-highlight">
default:
    enabled: true  # セッションを有効にする
    handler:
        type: 1 # セッションハンドラを指定(1=File based,2=AdoDB,3=Memcache)
        options:  # ハンドラ固有のオプションを指定
               lifeTime: 3600  # セッションの保持期間

               # ハンドラが1(File)のときは以下のオプションが利用可能
               save_path: ${AK_TMP_DIR}

               # ハンドラが2(AdoDB)の場合は以下のオプションが利用可能
               memoryCaching: true  # メモリキャッシュの使う場合はtrue(デフォルト)
               automaticSerialization: true # 値のシリアライズを自動で行う場合はtrue(デフォルト)

               # ハンドラが3(Memcache)の場合は以下のオプションが利用可能
               servers:
                   - localhost:11211
                   - 192.168.1.1:11211  # こんな感じでMemcachedサーバを列挙できる

</pre>

<p>セッションの処理にハンドラを使用できるようになってる。いままでファイルかDBかの2択だったのでこれは結構ありがたい。ハンドラの自作も割と簡単にできるし。</p>
<p>AdoDBを使う場合は「lib/AkCache/AkAdodbCache.php」、Memcacheを使う場合は「lib/AkCache/AkMemcache.php」がそれぞれハンドラとしてインクルードされる。</p>
<p>AdoDBの場合、新しく追加された「cache_data」テーブルにセッションが格納されるので旧バージョンのようにsession用のテーブルを作る必要はない。「cache_data」はセッション以外のキャッシュデータにも利用されるのでこの方が確かに効率がいい。</p>
<p>Memcacheの場合はソケット使ってmemcachedサーバと通信してるっぽいのでPHPの拡張機能なくても多分おｋ。</p>
<h4>mailer.yml ... メール送信関連</h4>
<pre class="syntax-highlight">
default:
    server_settings:
      address: smtp.gmail.com  # 送信に使用するSMTPサーバのアドレス
      port: 587                # SMTPサーバのポート番号
      domain: localhost        # 
      user_name: username@gmail.com # SMTP認証に使用するユーザ名
      password: 1234           # 同じくパスワード
      authentication: login    # 認証の種類(plain,login,cram_md5)

    # 他にも多分以下の値を設定可能
    delivery_method: php   # 送信にsendmail使うかsmtp使うか
    perform_deliveries = true;
    deliveries:
        - test@example.com    # 送信時に自動配送されるEmailアドレスを列挙(test用？)
    charset: ISO-2022-JP      # 送信に使用する文字コード
    content_type: text/plain  # Content-Type
    mime_version: 1.0         # mime_version
    implicit_parts_order:     # multipartが指定されたときの順序
        - multipart/alternative
        - text/html
        - text/enriched
        - text/plain
</pre>

<p>リビジョンみるとちょっと前からAkActionMailerが使えるようになっていたみたい（知らなかった）。</p>
<h4>caching.yml ... キャッシュ関連</h4>
<pre class="syntax-highlight">
default:
    enabled: true  # キャッシュ機能を使用するかどうか
    handler:
        type: 1    # ハンドラを指定する（1=PEAR,2=AdoDB,3=Memcache）
        options:
                lifeTime: 3000   # キャッシュの生存期間 
            # ここからはハンドラ固有のオプション 以下は1(PEAR)の場合
                cacheDir: ${AK_TMP_DIR}/cache  # キャッシュファイルの保存先
                hashedDirectoryLevel: 2        # キャッシュファイルを生成するディレクトリ深度
                fileLocking: true   # キャッシュファイルの排他ロックを行う（デフォルト）
                writeControl: true  # 書込時にキャッシュの破壊・改竄チェック（デフォルト）
                readControl: true   # 読込時にキャッシュの破壊・改竄チェック（デフォルト）
                readControlType: crc32 # キャッシュハッシュ生成に使用する関数（crc32,md5,strle)
                pearErrorMode:  ${E_USER_ERROR} # PEARのエラーモード(内部的にPEARのCache::Liteを使用しているため)
                onlyMemoryCaching: true   # メモリキャッシュのみを使用する
                memoryCachingLimit: 10000 # メモリキャッシュの上限
                fileNameProtection: true  # ファイル名の保護を行う（デフォルト） 
                automaticCleaningFactor: false # キャッシュの整理を自動的に行う

            # 2(AdoDB),3(Memcache)は「sessions.yml」の記述と同じ
</pre>

<p>アプリケーションの高速化に関わる部分なのでキャッシュ機能の充実はうれしい追加項目。</p>
<p>キャッシュはページキャッシュ、アクションキャッシュ等コントローラから透過的に生成されて利用される。こまかい挙動はまだ把握できてないので色々実験する必要がありそう。</p>
<h4>database.yml ... DB設定関連。※「DEFAULT-database.yml」を複製して作成する。</h4>
<pre class="syntax-highlight">
production:
        type: mysql
        database_file: 
        host: localhost
        port: 
        database_name: test
        user: root
        password: 
        options: 

# 以下productionセクションと同様に「development」「test」セクションを記述
# ※テーブル名は慣例に従って「〜_dev」「〜_tests」が推奨されている。
# 仮にtestテーブルを運用や開発用と同名にした場合 script/test 実行時にクリアされるので注意。
</pre>

<p>今までconfig.phpに記述していたときと内容に変化はない。</p>
<p>現段階ではまだencoding指定はできないみたいなので、Mysql等でSET NAMESしたいときなどはソース弄らないとダメね。。</p>
<h4>その他の設定ファイル</h4>
<p>オリジナルの設定ファイルを作りたい場合は「config」ディレクトリ内に「myconf.yml」みたいに適当な名前で作成すればよい。</p>
<p>あとは適宜メソッド内で以下を呼び出せばおｋ。</p>
<pre>

 $Config = new AkConfig();
 $myconf = $Config-&#62;get(&#39;myconf&#39;);

</pre>

<br>

<br>

<p>---</p>
<p>設定ファイル見た感じでは、Railsの細かい所の移植＋運用を意識した機能追加を中心に更新されているような感じがする。</p>
<p>あとは0.8以前との互換性が少し気になるところではあるけど、後日コントローラ周りの変更点を追いかけてその辺を確認してみようと思う。</p>
</div>
]]></content:encoded>
<dc:creator>simpraight</dc:creator>
<dc:date>2008-10-15T23:28:11+09:00</dc:date>
<dc:subject>Akelos</dc:subject>
</item>
</rdf:RDF>

