<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Carpe Diem</title>
	<atom:link href="http://www.sssg.org/blogs/naoya/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sssg.org/blogs/naoya</link>
	<description>Who knows hacker is?</description>
	<lastBuildDate>Wed, 16 May 2012 07:39:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>[ruby/rails] オフラインドキュメントを生成する</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2272</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2272#comments</comments>
		<pubDate>Wed, 16 May 2012 07:39:24 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2272</guid>
		<description><![CDATA[ruby や rails を使ってウェブアプリケーションなどを開発するとき、必須なものにオフラインドキュメントがあります。その都度、インターネット検索したりするのはインターネット接続がある前提になったり、時間の浪費につな [...]]]></description>
			<content:encoded><![CDATA[<p>ruby や rails を使ってウェブアプリケーションなどを開発するとき、必須なものにオフラインドキュメントがあります。その都度、インターネット検索したりするのはインターネット接続がある前提になったり、時間の浪費につながるため、できる限り必要な情報は手元に置いておくのが重要だと思います。</p>
<p>ruby や rails のオフラインドキュメントを生成するには、<a href="https://github.com/voloko/sdoc">sdoc</a> を使うと便利です。<br />
sdoc は、gem 経由で簡単にインストールすることができます。</p>
<p><code><br />
  $ rvm 1.9.3<br />
  $ gem install sdoc<br />
</code></p>
<p>sdoc 3.0.16 だと、github を使っているときエラーが発生しているため、<a href="https://github.com/vijaydev/sdoc/commit/45d1393efc1b41cb0b4aa3506570b9e7bfaea674">パッチ</a>をあてる必要があります。</p>
<p><code><br />
  $ diff $HOME/.rvm/gems/ruby-1.9.3-p194/gems/sdoc-0.3.16/lib/sdoc/github.rb<br />
30c30<br />
< s = Dir.chdir(File.join(basedir, File.dirname(path))) do<br />
---<br />
>     s = Dir.chdir(File.join(base_dir, File.dirname(path))) do<br />
39c39<br />
< s = Dir.chdir(File.join(basedir, File.dirname(path))) do<br />
---<br />
>     s = Dir.chdir(File.join(base_dir, File.dirname(path))) do<br />
47c47<br />
< absolute_path = File.join(basedir, path)<br />
---<br />
>     absolute_path = File.join(base_dir, path)<br />
</code></p>
<p>まずは、rails 3.2.3 のオフラインドキュメントを生成してみます。<br />
<code><br />
  $ git clone https://github.com/rails/rails.git<br />
  $ cd rails<br />
  $ git checkout v3.2.3<br />
  $ sdoc --format=sdoc --github --output rails-3.2.3 --hyperlink-all rails<br />
</code></p>
<p>かなり警告がでますが、しばらくすると rails-3.2.3 ディレクトリの中に html なドキュメントが生成されています。僕の手元の Macbook Air だと 15 分くらいかかりました。</p>
<p>次に ruby-1.9.3 のオフラインドキュメントを生成してみます。<br />
<code><br />
  $ git clone https://github.com/ruby/ruby.git<br />
  $ cd ruby<br />
  $ git checkout v1_9_3_194<br />
  $ sdoc --format=sdoc --output ruby-1.9.3p194<br />
</code></p>
<p>ruby-1.9.3p194 ディレクトリの中に約 5 分くらいでオフラインドキュメントを生成することができました。</p>
<p>あとは、これからのドキュメントを sdoc-merge を使うとまとめることができます。たしめにまとめてみたのですが、僕は個別で参照することが多いので、使っていません。<br />
<code><br />
  $ sdoc-merge --title "Ruby 1.9.3-p194 and Rails 3.2.3" --op merged --names "Ruby,Rails" ruby-1.9.3p194 rails-3.2.3<br />
</code></p>
<p>sdoc かなり便利ですね。</p>
<p>参照<br />
<a href="http://shynnergy.com/2012/02/create-local-ruby-on-rails-documentation-for-offline-use/">Create local Ruby on Rails documentation for offline use | Shynnergy</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2272/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mosh バージョン 1.2</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2267</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2267#comments</comments>
		<pubDate>Mon, 14 May 2012 10:14:22 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[mosh]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2267</guid>
		<description><![CDATA[mosh バージョン 1.2 がリリースされていました。ChangeLog に boost 依存性の削除や CentOS 5 サポートという項目があったので、バージョン 1.1.3 ではビルドが大変だったので、バージョン [...]]]></description>
			<content:encoded><![CDATA[<p>mosh バージョン 1.2 が<a href="https://github.com/achernya/mosh/commit/68575f8587a32408237dd496d9c09ac408f03e54">リリース</a>されていました。ChangeLog に boost 依存性の削除や CentOS 5 サポートという項目があったので、バージョン 1.1.3 ではビルドが大変だったので、バージョン 1.2 の RPM を作成してみることにしました。</p>
<p>まず、Fedora 用の mosh.spec をダウンロードします。<br />
<code><br />
  $ wget https://raw.github.com/achernya/mosh/0df58a90da7d57ea1cda0a0b24fddfda97186a20/fedora/mosh.spec<br />
</code></p>
<p>このままだと CentOS 5 で RPM ビルドに失敗するので、mosh.spec を次のように編集します。<br />
<code><br />
  $ vi ~/rpmbuild/SPECS/mosh.spec<br />
18a19,20<br />
> BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)<br />
><br />
37a40<br />
> rm -rf $RPM_BUILD_ROOT<br />
42d44<br />
< %doc README.md COPYING ChangeLog<br />
</code></p>
<p>これで mosh バージョン 1.2 RPM を作成することができました。CentOS 5.8 x86_64 の mosh バージョン 1.2 RPM を<a href="https://github.com/downloads/n0ts/rpm/mosh-1.2-1.el5.x86_64.rpm">こちら</a>においておくので、必要な方は使ってみて下さい。<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2267/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pow on Lion</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2258</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2258#comments</comments>
		<pubDate>Mon, 07 May 2012 06:15:15 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[pow]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2258</guid>
		<description><![CDATA[pow を Lion 上で使うための設定方法です。pow は、Node アプリケーションなのですが、Node バージョン 0.4 系で動作するめインストールが少々めんどくさいです。 まずは、Homebrew 経由で po [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pow.cx/">pow</a> を Lion 上で使うための設定方法です。pow は、Node アプリケーションなのですが、Node バージョン  0.4 系で動作するめインストールが少々めんどくさいです。</p>
<p>まずは、Homebrew 経由で pow をインストールします。このとき依存関係の設定により Node バージョン 6 系がインストールされます。<br />
<code><br />
  $ brew install pow<br />
</code></p>
<p>次に <a href="https://github.com/creationix/nvm">NVM</a> をインストールして、Node バージョン 4 系をインストールします。<br />
<code><br />
  $ nvm install 0.4.12<br />
</code></p>
<p>次に pow の起動コマンドを変更して Node 0.4 系を使いように変更します。環境変数は、お使いの環境にあわせて展開して下さい。<br />
<code><br />
 $ vi $HOMEBREW_HOME/bin/pow<br />
 ...<br />
exec "$HOME/.nvm/v0.4.12/bin/node" "$HOMEBREW_HOME/Cellar/pow/0.3.2/pow/lib/command.js" "$@"<br />
</code></p>
<p>最後に pow エージェントを動作させます。80 ポートで直接動かしたい人は、ファイアウォールの設定も変更します。<br />
<code><br />
 $ sudo pow --install-system<br />
 $ pow --install-local<br />
</code></p>
<p>これで pow を使うことができるはずです。</p>
<p>僕は、大人の事情で Apache 経由で使いかっため、<a href="https://github.com/37signals/pow/wiki/Running-Pow-with-Apache">Running Pow With Apache</a> を参考にしながら、次の設定をしました。<br />
<code><br />
  $ vi $HOME/.powconfig<br />
  export POW_DST_PORT=8080<br />
  $ wget https://raw.github.com/gist/1058580/zzz_pow.conf<br />
  $ sudo vi /etc/hosts<br />
  127.0.0.1 pow .dev<br />
</code></p>
<p>これでさくさくと開発を進めることができる環境になりましたが、RVM + Ruby 1.9.3 で Sinatra を使いたいとき、アプリケーション側の config.rb に GEM_HOME 環境変数を設定するのはやめたかったので、次の設定を追加しました。<br />
<code><br />
  $ vi $HOME/.powconfig<br />
  export POW_RVM_PATH="$HOME/.rvm/scripts"<br />
  $ cd $SINATRA_APP1<br />
  $ vi .rvmrc<br />
  rvm 1.9.3<br />
  export GEM_HOME="$HOME/.rvm/gems/ruby-1.9.3-p194"<br />
</code></p>
<p>こんな感じで設定しておくと、pow を RVM に対応させることができます！</p>
<p>さらに <a href="http://m.igrs.jp/blog/2012/01/16/powder-powify-comparison/">powder や powify を使う</a>と便利だと思います。僕は今のところ powder を使っています。</p>
<p>これで、さくさくとウェブアプリケーションの開発が進められそうです！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2258/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 5.4 on Lion</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2264</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2264#comments</comments>
		<pubDate>Wed, 02 May 2012 01:42:35 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2264</guid>
		<description><![CDATA[OSX Lion 上で PHP 5.4 をインストールしてみました。システム /usr/bin/php は PHP 5.3.8 with Suhosin-Patch (cli) (built: Nov 15 2011 1 [...]]]></description>
			<content:encoded><![CDATA[<p>OSX Lion 上で PHP 5.4 をインストールしてみました。システム /usr/bin/php は PHP 5.3.8 with Suhosin-Patch (cli) (built: Nov 15 2011 15:33:15)  です。</p>
<p>Hoembrew を基本的に使っているので、Homebrew 経由でインストールするのが一番簡単です。なお、公式の Formula ないので注意して下さい。</p>
<p><code><br />
  $ brew install https://github.com/josegonzalez/homebrew-php/raw/master/Formula/php.rb --devel --with-mysql<br />
</code></p>
<p>&#8211;devel を書略すると 5.3.10 がインストールされます。</p>
<p>あとは、$HOMEBREW_HOME/Cellar/php/5.4.0/libexec/apache2/libphp5.so がインストールされるので、既存の libphp5.so の設定はコメントにして組み込んであげるだけで使うことができます。</p>
<p>次のような Apache の設定にしてあげると、5.3 系と切り替えることができるので便利ですね。<br />
<code><br />
#<br />
# PHP 5.3.8<br />
#<br />
#LoadModule php5_module libexec/apache2/libphp5.so</p>
<p>#<br />
# PHP 5.4.0<br />
#<br />
LoadModule php5_module $HOMEBREW_PATH/Cellar/php/5.4.0/libexec/apache2/libphp5.so</p>
<p>#<br />
# PHP5 handler<br />
#<br />
Include /private/etc/apache2/other/php5.conf<br />
</code></p>
<p>ちなみに &#8211;with-fpm をつけると PHP-FPM をビルドすることができますが、そのかわりに Apache モジュールはビルドされないので注意して下さい。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2264/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>複数の git リポジトリをまとめて pull ワンライナー</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2253</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2253#comments</comments>
		<pubDate>Wed, 25 Apr 2012 06:23:43 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2253</guid>
		<description><![CDATA[最近、ローカルにめっきり git リポジトリが増えてきたので、まとめて pull するワンライナーを書いてみた。 $ find $GIT_REPO -type d -name .git &#124; xargs -n 1 dirn [...]]]></description>
			<content:encoded><![CDATA[<p>最近、ローカルにめっきり git リポジトリが増えてきたので、まとめて pull するワンライナーを書いてみた。</p>
<p><code><br />
  $ find $GIT_REPO -type d -name .git | xargs -n 1 dirname | sort | while read line; do echo $line &#038;&#038; cd $line &#038;&#038; git pull &#038;&#038; cd $GIT_REPO; done<br />
</code></p>
<p>.git を .svn に変更して git pull を svn update に変更すれば subversion にも対応することができます。</p>
<p>便利！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2253/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>某クラウドで Xen と KVM のベンチマークを計測してみた</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2248</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2248#comments</comments>
		<pubDate>Tue, 24 Apr 2012 02:12:02 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2248</guid>
		<description><![CDATA[某クラウドでは、Xen と KVM を選択することができるので、ちょうどよい機会に恵まれたので Xen と KVM のベンチマークを計測してみました。 計測に使用したツールは、UnixBench というツールです。 仮想 [...]]]></description>
			<content:encoded><![CDATA[<p>某クラウドでは、Xen と KVM を選択することができるので、ちょうどよい機会に恵まれたので Xen と KVM のベンチマークを計測してみました。</p>
<p>計測に使用したツールは、<a href="http://code.google.com/p/byte-unixbench/">UnixBench</a> というツールです。</p>
<p>仮想サーバの、CPU やメモリはまったく同じ設定をしました。OS は、CentOS 5.8 x86_64 で、カーネルのバージョンが違っているのは Xen と KVM の違いによるものです。</p>
<p>詳細の結果は、<a href="https://gist.github.com/2469378">gist</a> にまとめておきました。</p>
<p>System Benchmarks Index Score でいうと、<br />
<strong>KVM は 2786.6</strong> だったのに対して、<br />
<strong>Xen は 1155.3</strong> だったので、約2倍くらいベンチマーク数値としては違っていました。</p>
<p>パフォーマンスの面からみると、某クラウドでは KVM を使うのがよいかなぁと思いました。</p>
<p>ちゃんちゃん。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2248/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[zsh] mosh コマンドで ssh コマンドと同等の補完をする方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2245</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2245#comments</comments>
		<pubDate>Mon, 23 Apr 2012 02:23:31 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[mosh]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2245</guid>
		<description><![CDATA[mosh コマンドを ssh コマンドと同様に $HOME/.ssh/config や $HOME/.ssh/known_hosts と同じように補完したいものです。 $HOME/.ssh/configと$HOME/.s [...]]]></description>
			<content:encoded><![CDATA[<p>mosh コマンドを ssh コマンドと同様に $HOME/.ssh/config や $HOME/.ssh/known_hosts と同じように補完したいものです。<br />
<a href="http://blog.glidenote.com/blog/2012/04/14/mosh-hostname-completion/">$HOME/.ssh/configと$HOME/.ssh/known_hosts</a>にあるとおり、独自で補完関数を設定するのもいいかなぁと思ったのですが、もっと簡単な方法が見つかったので紹介したいと思います。</p>
<p>.zshrc に、次の設定を書くだけです。</p>
<p><code><br />
compdef mosh=ssh<br />
</code></p>
<p>これで、mosh コマンドの補完は ssh コマンドの補完と同じ機能を利用することができます。<br />
これで、かなり mosh コマンドが便利になりました。</p>
<p>参考<br />
<a href="https://github.com/keithw/mosh/issues/139">compdef mosh=ssh</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2245/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Casual Talks Vol.3</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2237</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2237#comments</comments>
		<pubDate>Thu, 19 Apr 2012 11:38:33 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[mysqlcasual]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2237</guid>
		<description><![CDATA[MySQL Casual Talks Vol.3 にて、トークしました。資料を公開しておきます。 カジュアルすぎるお話で失礼しました&#8230;。 データセンター移行に伴い、 MySQLをカジュアルにアップグレードした [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL Casual Talks Vol.3 にて、トークしました。<a href="http://speakerdeck.com/u/n0ts/p/mysql">資料</a>を公開しておきます。<br />
カジュアルすぎるお話で失礼しました&#8230;。</p>
<div style="width:425px" id="__ss_12601627"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/n0ts/mysql-12601627" title="データセンター移行に伴い、 MySQLをカジュアルにアップグレードしたお話">データセンター移行に伴い、 MySQLをカジュアルにアップグレードしたお話</a></strong><object id="__sse12601627" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mysqlcasual3-120419063644-phpapp02&#038;stripped_title=mysql-12601627&#038;userName=n0ts" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"/><embed name="__sse12601627" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mysqlcasual3-120419063644-phpapp02&#038;stripped_title=mysql-12601627&#038;userName=n0ts" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/n0ts">Naoya Nakazawa</a>.</div>
</div>
<p>それでは、皆さん素敵なビールライフを過ごして下さいね！！！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2237/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>サーバ/インフラエンジニア養成読本 管理/監視編</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2233</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2233#comments</comments>
		<pubDate>Thu, 12 Apr 2012 04:10:10 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[book]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2233</guid>
		<description><![CDATA[サーバ/インフラエンジニア養成読本 管理/監視編という本が技術評論社より出版されました。私がすこし昔の 2008年6月に Software Design で書いた「Chapter4 実践！システムトラブル一丁両断」の S [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://encrypted.google.com/search?hl=ja&#038;q=%E3%82%B5%E3%83%BC%E3%83%90%2F%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E9%A4%8A%E6%88%90%E8%AA%AD%E6%9C%AC%20%E7%AE%A1%E7%90%86%2F%E7%9B%A3%E8%A6%96%E7%B7%A8">サーバ/インフラエンジニア養成読本 管理/監視編</a>という本が技術評論社より出版されました。私がすこし昔の 2008年6月に Software Design で書いた「Chapter4 実践！システムトラブル一丁両断」の Section 1 記事が掲載されたため、ご献本をいただきました。<br />
ありがとうございます！</p>
<p>この本は、サーバ/インフラエンジニア養成読本シリーズの最新作で、Software Design で過去に掲載された「管理/監視編」の記事をまとめた本になっています。</p>
<p>さまざまなインフラを監視する技術や方法などが多数紹介されているので、インフラエンジニアの方にはおすすめできる本です。</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=du00-22&#038;o=9&#038;p=8&#038;l=as1&#038;asins=4774150371&#038;ref=qf_sp_asin_til&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2233/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今からはじめるさくらVPS &#8211; Part 1</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2207</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2207#comments</comments>
		<pubDate>Thu, 12 Apr 2012 03:25:57 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sakura]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2207</guid>
		<description><![CDATA[今月 2012 年 4 月からさくら VPS がリニューアルされましたね！ さくら VPS 2G  ですが、海外の VPS と比べてもとても格安だったので、思い切って 1 年契約してみました。僕は、初めてさくら VPS  [...]]]></description>
			<content:encoded><![CDATA[<p>今月 2012 年 4 月から<a href="http://vps.sakura.ad.jp/">さくら VPS</a> がリニューアルされましたね！</p>
<p>さくら VPS 2G  ですが、海外の VPS と比べてもとても格安だったので、思い切って 1 年契約してみました。僕は、初めてさくら VPS を使ってみたので、OS の設定から、初期設定まで忘れないようにまとめておきたいと思います。最初のリリース後にかなりの人気があったみたいで、僕は申し込みが再開されてから無事に申し込むことができました。</p>
<p>まずは、さくら VPS 2G を<a href="http://vps.sakura.ad.jp/">公式ページ</a>から申し込みます。このとき、さくらのアカウントが必要なのでアカウントをもっていない人は登録します。</p>
<p>さくらの VPS を申し込むと、すぐに『申し込み完了』メールが届きます。そのあと、しばらくすると（僕の場合六時間後くらいでした）『仮登録完了のお知らせ』のメールが届きます。このメールに、サーバの IP アドレスと、ユーザ名、パスワードが書かれています。</p>
<p>これから、さくら VPS のスクリーンショットを掲載していますが、IP アドレスなど個別情報に関するものは塗りつぶしてあるのでご了承下さい。</p>
<p>さっそく、<a href="https://secure.sakura.ad.jp/vpscontrol/">さくら VPS コンソール</a>に接続して、IPアドレスとパスワードを入力します。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_1.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2224" title="vps_1" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_1-300x192.png" alt="" width="300" height="192" /></a></p>
<p>VPS ホームの画面が表示されます。初期状態だと、標準 OS の CentOS 6.2 x86_64 がインストールされた VM が停止状態になっています。このまま、CentOS を起動することができます。しかし、ここは試しに別の OS を再インストールしてみることにしました。なお、カスタム OS をインストールするには、JRE のインストールが必要です。OSX Lion の場合は、<a href="http://kb2.adobe.com/jp/cps/910/cpsid_91087.html">このあたりの情報</a>を参考にして事前にインストールしておいて下さい。</p>
<p>左側のメニューから、「OS 再インストール」選択します。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_2.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2223" title="vps_2" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_2-300x195.png" alt="" width="300" height="195" /></a></p>
<p>次に「カスタム OS のインストールへ」を選択します。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_2-1.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2225" title="vps_2-1" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_2-1-300x213.png" alt="" width="300" height="213" /></a></p>
<p>今回は、OS として Fedora 16 x86_64  を選択しました。Fedora は、ほぼ最新のカーネルやパッケージを扱うことができるので、最新の Linux 技術を試すのにうってつけの環境です。「確認」ボタンをクリックします。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_3.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2222" title="vps_3" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_3-300x267.png" alt="" width="300" height="267" /></a></p>
<p>カスタム OS のインストール確認が表示されるので「実行」ボタンをクリックします。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_4.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2221" title="vps_4" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_4-300x197.png" alt="" width="300" height="197" /></a></p>
<p>Chrome の場合、Java プラグインの実行確認が表示されますので、許可します。インストール情報は、OS のインストールの際に必要なので、そのまま表示しておきましょう。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_5.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2220" title="vps_5" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_5-300x164.png" alt="" width="300" height="164" /></a></p>
<p>しばらくすると、Java アプレットが実行されて、インストール画面が表示されます。</p>
<p>キーボードの種類を選択します。ご自身で使われているキーボードの種類を選択して下さい。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_6.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2219" title="vps_6" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_6-300x166.png" alt="" width="300" height="166" /></a></p>
<p>いつも通りの Fedora の GUI インストール画面が表示されます。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_7.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2218" title="vps_7" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_7-300x225.png" alt="" width="300" height="225" /></a></p>
<p>今回は、VPS になるのでメインのパーティンションを暗号化してみます。暗号化パーティションでインストールすると、OS の起動のたびにマウントするためのパスワードの入力が必要なので注意しましょう。GPT パーティションになるので、「Use All Space」を選択した状態で、「Encrypt system」と「Review and modify partitioning layout」をチェックしています。この状態から「BIOS boot」パーティションだけを削除しないように、好みのパーティションレイアウトに変更してみました。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_8.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2217" title="vps_8" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_8-300x226.png" alt="" width="300" height="226" /></a></p>
<p>このとき、アンダースコアが入力できないのですが、Macbook Air 英語キーボード上から「Ctrl + Command + -」で入力できました。次のようなパーティションレイアウトにしてみました。</p>
<div> <a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_9.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2216" title="vps_9" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_9-300x224.png" alt="" width="300" height="224" /></a></div>
<p>フォーマット確認後、暗号化パーティションのパスワードを入力する画面が表示されるのでパスワードを入力します。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_10.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2215" title="vps_10" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_10-300x225.png" alt="" width="300" height="225" /></a></p>
<p>次にネットワークの設定画面が表示されます。さくら VPS のインストール情報をもとにネットワーク IPv4 の設定をします。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_11.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2214" title="vps_11" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_11-300x223.png" alt="" width="300" height="223" /></a></p>
<p>以上の設定でインストールが始まりますので、ビールでも飲みながらしばらく待ちましょう。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_12.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2213" title="vps_12" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_12-300x224.png" alt="" width="300" height="224" /></a></p>
<p>インストールは、５分くらいで完了します。インストールが完了すると、Java アプレットの VNC の画面が閉じます。</p>
<p>ブラウザのさくら VPS のトップページに戻り、サーバを起動します。起動後、リモートコンソールをクリックします。</p>
<p>「VNC コンソールを開く」をクリックします。暗号化パーティションをマウントするため、パスワードの入力待ち状態になっているのでパスワードを入力します。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_13.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2212" title="vps_13" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_13-300x168.png" alt="" width="300" height="168" /></a></p>
<p>お馴染みのログイン画面が表示されました。この状態になれば、ターミナルから SSH 経由で接続できるので、Fedora の初期設定をはじめていきましょう。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_14.png" rel="lightbox"><img class="aligncenter size-medium wp-image-2211" title="vps_14" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2012/04/vps_14-300x165.png" alt="" width="300" height="165" /></a></p>
<p>初期設定は、次のエントリでまとめていきたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2207/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>闇Webサーバ勉強会 #5 &#8211; Apache 2.4 Changelog 和訳編</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2202</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2202#comments</comments>
		<pubDate>Thu, 29 Mar 2012 15:01:27 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2202</guid>
		<description><![CDATA[みなさん、こんばんは。 先日、Webサーバ勉強会 #5という楽しい勉強会が開催されたようです。 この勉強会には参加できなかったのですが、その日の夜日本のどこかでこっそり一人で闇Webサーバ勉強会 #5を開催したので、その [...]]]></description>
			<content:encoded><![CDATA[<p>みなさん、こんばんは。<br />
先日、<a href="http://atnd.org/events/26493">Webサーバ勉強会 #5</a>という楽しい勉強会が開催されたようです。<br />
この勉強会には参加できなかったのですが、その日の夜日本のどこかでこっそり一人で闇Webサーバ勉強会 #5を開催したので、そのときの資料を公開します。#5 といっても、五回目ではなく、Webサーバ勉強が五回目だったので、それにあわせているだけです。</p>
<p>そこに広がるのは、無限の、闇、闇、そして闇。<br />
一部内容におかしい箇所があるかもしれませんが、そこは闇ということでご了承下さいませ。</p>
<div id="__ss_12230130" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Apache 2.4 ChangeLog at 闇Webサーバ勉強会#5" href="http://www.slideshare.net/n0ts/apache-24-changelog-at-web5">Apache 2.4 ChangeLog at 闇Webサーバ勉強会#5</a></strong><object id="__sse12230130" width="425" height="355" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20120329yamiwebstudy2study-120330213115-phpapp01&amp;stripped_title=apache-24-changelog-at-web5&amp;userName=n0ts" /><param name="allowscriptaccess" value="always" /><param name="allowfullscreen" value="true" /><embed id="__sse12230130" width="425" height="355" type="application/x-shockwave-flash" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20120329yamiwebstudy2study-120330213115-phpapp01&amp;stripped_title=apache-24-changelog-at-web5&amp;userName=n0ts" allowFullScreen="true" allowScriptAccess="always" wmode="transparent" allowscriptaccess="always" allowfullscreen="true" /></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/n0ts">Naoya Nakazawa</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2202/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_log_rotate をミラーしました</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2199</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2199#comments</comments>
		<pubDate>Thu, 29 Mar 2012 01:47:44 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2199</guid>
		<description><![CDATA[日頃、愛用している mod_log_rotate の公式ページがリンク切れになってしまったので、github の方に取り急ぎ、こちらにミラーしました。 mod_log_rotate 細かいところを改善したいことがあるので [...]]]></description>
			<content:encoded><![CDATA[<p>日頃、愛用している mod_log_rotate の公式ページがリンク切れになってしまったので、github の方に取り急ぎ、<a href="https://github.com/n0ts/mod_log_rotate">こちら</a>にミラーしました。</p>
<p>mod_log_rotate 細かいところを改善したいことがあるので、対応次第、このブログにアップしていきたいと思います。</p>
<p>あと、個人的には公式の rotatelogs とのパフォーマンス測定などもしてみたいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2199/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gitconfig を github で公開して管理する方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2193</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2193#comments</comments>
		<pubDate>Mon, 26 Mar 2012 08:57:47 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2193</guid>
		<description><![CDATA[今日から、gitconfig を自分のドットファイルに含まれて、github で管理し始めました。 最初のコミットで誤って gitconfig の中に github の API トークンを含めてコミットしてしまいました・ [...]]]></description>
			<content:encoded><![CDATA[<p>今日から、gitconfig を自分のドットファイルに含まれて、<a href="https://github.com/n0ts/dot_files">github</a> で管理し始めました。<br />
最初のコミットで誤って gitconfig の中に github の API トークンを含めてコミットしてしまいました・・・。すぐに API トークン部分だけを削除して、github 上からパスワードを再設定して API トークンを再作成しました。</p>
<p>どうやって、gitconfig に github の API トークンを含めようかなと思い、検索してみると ERB でやっている<a href="https://github.com/gabebw/dotfiles/blob/master/gitconfig.erb">強者</a>がいました。もっと、エレガントな方法がないものかと思ってさらに調査してみると、<a href="http://progit.org/book/ja/ch1-5.html">Pro Git</a> に素晴らしい情報を見つけることができました。</p>
<p>Pro git によると gitconfig は、次の順序で読み込まれるようです。</p>
<ol>
<li>/etc/gitconfig</li>
<li>$HOME/.gitconfig</li>
<li><del>$HOME/.git/config</del> git リポジトリの .git/config</li>
</ol>
<p>ということで $HOME/.gitconfig を github 上で公開して管理するようにして、<del>$HOME/.git/config</del> /etc/gitconfig を作成してその中に github の API トークンを含めることにしました。</p>
<p>この状態で、git config -l してみると、ちゃんと設定はされているようで安心しました。</p>
<p>.gitconfig に include が追加されると、かなり便利なんですけれど、今はそのオプションはない模様です。</p>
<p>&nbsp;</p>
<p>2012.03.28: 追記</p>
<p><a href="https://twitter.com/#!/hirose31/status/184826438418038785">@hirose31 さんの指摘</a>により、一部修正しました。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2193/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hub が便利</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2189</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2189#comments</comments>
		<pubDate>Fri, 02 Mar 2012 07:55:27 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[github]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2189</guid>
		<description><![CDATA[hub という github のラッパーコマンドが便利です。man は、こちら。インストールは、gem install hub するだけ。 あとは、git コマンドを hub にエイリアスすると、さらに便利かもしれません [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/defunkt/hub">hub</a> という github のラッパーコマンドが便利です。man は、<a href="http://defunkt.io/hub/hub.1.html">こちら</a>。インストールは、gem install hub するだけ。<br />
あとは、git コマンドを hub にエイリアスすると、さらに便利かもしれません。</p>
<p>github にリポジトリを新規作成する<br />
<code><br />
$ mkdir hoge<br />
$ cd hoge<br />
$ git init<br />
$ hub create<br />
$ git add README<br />
$ hub push -u origin master<br />
（以降は・・・）<br />
$ hub push<br />
</code></p>
<p>man をみると、github 向けに拡張されたコマンドがあるので、とても便利です。</p>
<p>ということで、hub コマンドがない環境も考慮して、次の設定を .zshrc に、追加してみました。<br />
<code><br />
if [  -x "`which hub 2> /dev/null`" ]; then<br />
  alias git=hub<br />
else<br />
  alias git=git<br />
fi</p>
<p>alias g=git<br />
</code></p>
<p>Enjoy, github life.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2189/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL の SHOW TABLE STATUS を見やすくする方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2185</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2185#comments</comments>
		<pubDate>Thu, 01 Mar 2012 07:28:36 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2185</guid>
		<description><![CDATA[A better SHOW TABLE STATUS » Fatal Exception で紹介されていた方法が便利なので紹介します。 これは、MySQL の SHOW TABLE STATUS をストアプロシージャーを使って、見やすく方法です。 tools というデータベースを作成します ここにある SQL を実行して、ストアプロシージャーを作成します あとは、call tools.sp_status(database()); のような形でデータベース名を指定して実行するだけです たとば、mysql データベースの場合だと、こんな感じです。 通常の show table status。 root@localhost[mysql]&#62; show table status; +---------------------------+--------+---------+------------+------+----------------+-------------+- -------------------+--------------+-----------+----------------+---------------------+-------------- -------+---------------------+-------------------+----------+----------------+---------------------- -----------------------------+ &#124; Name &#124; Engine &#124; Version &#124; Row_format &#124; Rows &#124; Avg_row_length &#124; Data_length &#124; Max_data_length &#124; Index_length [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.latindevelopers.com/ivancp/2012/a-better-show-table-status/">A better SHOW TABLE STATUS » Fatal Exception</a> で紹介されていた方法が便利なので紹介します。</p>
<p>これは、MySQL の SHOW TABLE STATUS をストアプロシージャーを使って、見やすく方法です。</p>
<ol>
<li>tools というデータベースを作成します</li>
<li><a href="http://forge.mysql.com/tools/tool.php?id=309">ここ</a>にある SQL を実行して、ストアプロシージャーを作成します</li>
<li>あとは、call tools.sp_status(database()); のような形でデータベース名を指定して実行するだけです</li>
</ol>
<p>たとば、mysql データベースの場合だと、こんな感じです。</p>
<p>通常の show table status。<br />
<code><br />
root@localhost[mysql]&gt; show table status;<br />
+---------------------------+--------+---------+------------+------+----------------+-------------+-<br />
-------------------+--------------+-----------+----------------+---------------------+--------------<br />
-------+---------------------+-------------------+----------+----------------+----------------------<br />
-----------------------------+<br />
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length |<br />
Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time<br />
| Check_time | Collation | Checksum | Create_options | Comment<br />
|<br />
+---------------------------+--------+---------+------------+------+----------------+-------------+-<br />
-------------------+--------------+-----------+----------------+---------------------+--------------<br />
-------+---------------------+-------------------+----------+----------------+----------------------<br />
-----------------------------+<br />
| columns_priv | MyISAM | 10 | Fixed | 0 | 0 | 0 |<br />
227994731135631359 | 4096 | 0 | NULL | 2011-08-11 01:09:56 | 2011-08-11 01<br />
:09:56 | NULL | utf8_bin | NULL | | Column privileges<br />
|<br />
| db | MyISAM | 10 | Fixed | 4 | 440 | 1760 |<br />
123848989752688639 | 5120 | 0 | NULL | 2011-08-11 01:09:56 | 2011-08-28 22<br />
:51:20 | 2011-08-11 01:09:56 | utf8_bin | NULL | | Database privileges<br />
|<br />
</code></p>
<p>sp_status を使った場合。<br />
<code><br />
root@localhost[mysql]> call tools.sp_status(database());<br />
+---------------------------+--------+------+---------+-------------------+<br />
| Table Name                | Engine | Rows | Size    | Collation         |<br />
+---------------------------+--------+------+---------+-------------------+<br />
| columns_priv              | MyISAM | 0    | 0.00 Mb | utf8_bin          |<br />
| db                        | MyISAM | 4    | 0.01 Mb | utf8_bin          |<br />
| event                     | MyISAM | 0    | 0.00 Mb | utf8_general_ci   |<br />
| func                      | MyISAM | 0    | 0.00 Mb | utf8_bin          |<br />
| general_log               | CSV    | 2    | 0.00 Mb | utf8_general_ci   |<br />
| help_category             | MyISAM | 38   | 0.02 Mb | utf8_general_ci   |<br />
| help_keyword              | MyISAM | 452  | 0.10 Mb | utf8_general_ci   |<br />
| help_relation             | MyISAM | 993  | 0.03 Mb | utf8_general_ci   |<br />
| help_topic                | MyISAM | 508  | 0.43 Mb | utf8_general_ci   |<br />
| host                      | MyISAM | 0    | 0.00 Mb | utf8_bin          |<br />
| ndb_binlog_index          | MyISAM | 0    | 0.00 Mb | latin1_swedish_ci |<br />
| plugin                    | MyISAM | 0    | 0.00 Mb | utf8_bin          |<br />
| proc                      | MyISAM | 1    | 0.01 Mb | utf8_general_ci   |<br />
| procs_priv                | MyISAM | 0    | 0.00 Mb | utf8_bin          |<br />
| servers                   | MyISAM | 0    | 0.00 Mb | utf8_general_ci   |<br />
| slow_log                  | CSV    | 2    | 0.00 Mb | utf8_general_ci   |<br />
| tables_priv               | MyISAM | 0    | 0.00 Mb | utf8_bin          |<br />
| time_zone                 | MyISAM | 0    | 0.00 Mb | utf8_general_ci   |<br />
| time_zone_leap_second     | MyISAM | 0    | 0.00 Mb | utf8_general_ci   |<br />
| time_zone_name            | MyISAM | 0    | 0.00 Mb | utf8_general_ci   |<br />
| time_zone_transition      | MyISAM | 0    | 0.00 Mb | utf8_general_ci   |<br />
| time_zone_transition_type | MyISAM | 0    | 0.00 Mb | utf8_general_ci   |<br />
| user                      | MyISAM | 7    | 0.00 Mb | utf8_bin          |<br />
+---------------------------+--------+------+---------+-------------------+<br />
23 rows in set (0.06 sec)<br />
</code></p>
<p>かなりターミナル画面で見やすくなりましたね！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2185/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MeCab-ruby on Lion</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2183</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2183#comments</comments>
		<pubDate>Wed, 22 Feb 2012 08:03:53 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[mecab osx]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2183</guid>
		<description><![CDATA[過去に Mecab-ruby on OSX 10.6 という記事を書いたけれど、Lion でもかなりはまったのでメモ。 環境は、Mecab バージョン 0.993 を Lion OSX 10.7.3。 mecab と m [...]]]></description>
			<content:encoded><![CDATA[<p>過去に <a href="http://www.sssg.org/blogs/naoya/archives/1883">Mecab-ruby on OSX 10.6</a> という記事を書いたけれど、Lion でもかなりはまったのでメモ。</p>
<p>環境は、Mecab バージョン 0.993 を Lion OSX 10.7.3。<br />
mecab と mecab-ipadic は、homebrew でインストール済み、Ruby は RVM で REE 2012.01 をインストール済みとします。</p>
<p><code><br />
  $ rvm ree<br />
  $ wget "http://mecab.googlecode.com/files/mecab-ruby-0.993.tar.gz"<br />
  $ tar zxf mecab-ruby-0.993.tar.gz<br />
  $ cd mecab-ruby-0.993<br />
  $ ruby extconf.rb<br />
  checking for main() in -lmecab... no<br />
  checking for main() in -lstdc++... yes<br />
  checking for mecab.h... yes<br />
  creating Makefile<br />
  $ make<br />
  cc -dynamic -bundle -undefined suppress -flat_namespace -o MeCab.bundle MeCab_wrap.o -L. -L/Users/n0ts/.rvm/rubies/ree-1.8.7-2012.01/lib -L.     -lstdc++  -L/opt/local/lib -ldl -lobjc<br />
  ld: warning: directory not found for option '-L/opt/local/lib'<br />
  $ ruby test.rb<br />
  0.993<br />
dyld: lazy symbol binding failed: Symbol not found: __ZN5MeCab11createModelEPKc<br />
  Referenced from: /Users/Shared/w/prj/src/mecab-ruby-0.993/MeCab.bundle<br />
  Expected in: flat namespace</p>
<p>dyld: Symbol not found: __ZN5MeCab11createModelEPKc<br />
  Referenced from: /Users/Shared/w/prj/src/mecab-ruby-0.993/MeCab.bundle<br />
  Expected in: flat namespace<br />
</code></p>
<p>となって MeCab を使うことができません。原因は、察してのとおり -lmecab が no になっているからですので、extconf.rb を修正する必要があります。</p>
<p>もっとエレガントな方法がありそうですが、次のように修正しました。<br />
<code><br />
--- extconf.rb-org      2012-02-22 16:44:15.000000000 +0900<br />
+++ extconf.rb  2012-02-22 17:01:04.000000000 +0900<br />
@@ -3,6 +3,7 @@<br />
 mecab_config = with_config('mecab-config', 'mecab-config')<br />
 use_mecab_config = enable_config('mecab-config')</p>
<p>+$LIBS += '-L/var/homebrew/Cellar/mecab/0.993/lib'<br />
 `mecab-config --libs-only-l`.chomp.split.each { | lib |<br />
   have_library(lib)<br />
 }<br />
</code></p>
<p>/var/homebrew とは、homebrew のインストール先のパスになりますので、環境に応じて書き換えてください。</p>
<p>毎度、MeCab を OSX 上で使うときは、かなりはまりますね。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2183/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby で当月の何週目を求める方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2179</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2179#comments</comments>
		<pubDate>Mon, 13 Feb 2012 14:53:04 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2179</guid>
		<description><![CDATA[Ruby には、Date クラスの中に cweek プロパティがありますが、これは年ベースでの週数として取得できます。 当月の何週目かを求めるコードを書いてみました、たった 2 行でできました。 def get_week [...]]]></description>
			<content:encoded><![CDATA[<p>Ruby には、Date クラスの中に cweek プロパティがありますが、これは年ベースでの週数として取得できます。<br />
当月の何週目かを求めるコードを書いてみました、たった 2 行でできました。</p>
<p><code><br />
def get_week_num_of_month(date)<br />
    wday = (date.wday == 0) ? 6 : date.wday - 1<br />
    return (date.day - wday + 13) / 7<br />
end<br />
</code></p>
<p>get_week_num_of_month 関数に Date クラスを渡すと、その日が当月の何週目か取得することができます。<br />
なお、この関数は月曜日〜日曜日までを 1 週間としてカウントしています。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2179/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cobbler ではまったメモ</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2177</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2177#comments</comments>
		<pubDate>Wed, 08 Feb 2012 02:38:26 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[cobbler]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2177</guid>
		<description><![CDATA[cobbler 経由で、CentOS 5.7 x86_64 を kickstart 経由でインストールしたとき、次のようなログは cobbler サーバ上の syslog に出力されていました。 Feb 7 21:43: [...]]]></description>
			<content:encoded><![CDATA[<p>cobbler 経由で、CentOS 5.7 x86_64 を kickstart 経由でインストールしたとき、次のようなログは cobbler サーバ上の syslog に出力されていました。</p>
<p><code><br />
Feb  7 21:43:23 10.0.4.3 ERROR    insufficient disk space: installing<br />
package initscripts-8.45.38-2.el5.centos.x86_64 needs 791MB on the /<br />
filesystem<br />
Feb  7 21:43:23 10.0.4.3 ERROR    error running transaction:<br />
installing package m2crypto-0.16-8.el5.x86_64 needs 823MB on the /<br />
filesystem<br />
...<br />
</code></p>
<p>正しく、100GB で ext4 でフォーマットしているのにもかかわらず、ディスク用不足というメッセージでインストールに失敗していました。<br />
しばらく原因を探ってみると、cobbler のベースの distro の CentOS がバージョン 5.3 で、ext4 に対応する前のバージョンだったことが原因でした。CentOS 5 系では、ext4 がサポートされたのは 5.5 からでした。</p>
<p>ということで、次のような感じで、cobbler ベースの distro の CentOS をバージョン 5.7 に差し替えて無事インストールすることができるようになりました。hoge というプロファイルがある場合は、次のように distro を入れ替えることができます。</p>
<p><code><br />
# cobbler import --path=rsync://ftp.jaist.ac.jp/pub/Linux/centos/5.7/x86_64/os/ --name=centos57-x86_64<br />
# cobbler profile edit --name=hoge --distro=centos57-x86_64<br />
# cobbler profile edit --name=hoge-xen --distro=centos57-xen-x86_64<br />
</code></p>
<p>すこしはまってしまったので、備忘録代わりにメモをしておきます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2177/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YARD + Passenger</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2171</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2171#comments</comments>
		<pubDate>Thu, 02 Feb 2012 13:50:27 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2171</guid>
		<description><![CDATA[gems のヘルプを参照するとき、YARD server を使うと、とても便利です。 YARD server は、yard server &#8211;gems とすると、8808 ポート経由でローカルにインストールされ [...]]]></description>
			<content:encoded><![CDATA[<p>gems のヘルプを参照するとき、<a href="http://www.rubyinside.com/the-3-step-guide-to-slick-local-documentation-for-all-your-ruby-gems-3760.html">YARD server</a> を使うと、とても便利です。</p>
<p>YARD server は、yard server &#8211;gems とすると、8808 ポート経由でローカルにインストールされているすべての gem のヘルプを参照することができます。<br />
YARD server を、supervisor などで起動してもいいんですが、せっかくローカル開発環境では Passenger を使っているので YARD server を Passenger で動かしてみました。</p>
<p>やり方は、とても簡単で、この <a href="http://gist.github.com/562448">config.ru</a> を使うだけです。</p>
<ol>
<li>YARD server 用の DocumentRoot を作成します（例えば、/tmp/yard/public とします）</li>
<li>/tmp/yard/config.ru を、<a href="http://gist.github.com/562448">gist</a> から取得します</li>
</ol>
<p>&nbsp;</p>
<p>YARD server 用の Apache の設定ファイルを、次のような感じにします。<br />
<code><br />
&lt;VirtualHost *&gt;<br />
  ServerName yard<br />
  DocumentRoot /tmp/yard/public<br />
&lt;/VirtualHost&gt;<br />
</code></p>
<p>あとは、/etc/hosts に yard 127.0.0.1 を定義して、ブラウザで http://yard を開くだけです。</p>
<p>これで、かなり便利に YARD server を使うことができますね！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2171/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>crontab で環境変数を使う方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2166</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2166#comments</comments>
		<pubDate>Thu, 26 Jan 2012 07:23:56 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[cron]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2166</guid>
		<description><![CDATA[crontab にたくさんの同じようなバッチ処理を書く場合、環境変数を使うのが便利です。各バッチ処理で、同じ環境変数名でかつ値が違う環境変数を設定するためにどうすればよいのかなぁと調べたところ、crontabで環境変数を [...]]]></description>
			<content:encoded><![CDATA[<p>crontab にたくさんの同じようなバッチ処理を書く場合、環境変数を使うのが便利です。各バッチ処理で、同じ環境変数名でかつ値が違う環境変数を設定するためにどうすればよいのかなぁと調べたところ、<a href="http://blog.livedoor.jp/sasata299/archives/51279219.html">crontabで環境変数を使う際に知っておきたいたった1つのこと &#8211; (ﾟ∀ﾟ)o彡 sasata299&#8242;s blog</a> を見つけました。ここでは env を使っていますが、なぜか CentOS 5 系ではうまくいきませんでした。</p>
<p>いろいろと試行錯誤したところ、次のような感じで値が違う同じ環境変数を設定することができました。</p>
<p><code><br />
MAILTO=root<br />
RUBY=/usr/local/bin/ruby</p>
<p>ROOT_DIR=/home/naoya/app1<br />
RAILS_ENV=production<br />
0 0 * * * cd $ROOT_DIR; $RUBY script/runner</p>
<p>ROOT_DIR=/home/naoya/app2<br />
RAILS_ENV=test<br />
0 1 * * * cd $ROOT_DIR; $RUBY script/runner<br />
</code></p>
<p>こんな感じで設定すると、バッチはその上に書かれている環境変数の値となって実行することができます。</p>
<ol>
<li>00:00: ROOT_DIR=/home/naoya/app1, RAILS_ENV=production</li>
<li>01:00: ROOT_DIR=/home/naoya/app2, RAILS_ENV=test</li>
</ol>
<p>ちなみに Puppet で設定すると、上と同じ設定内容になります。<br />
上の記述の方が、env を使うよりもすっきりとバッチ処理を記述できるので、いいと想っています。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2166/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>sched_clock() overflow after 208.5 days in Linux Kernel</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2164</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2164#comments</comments>
		<pubDate>Fri, 06 Jan 2012 10:46:45 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2164</guid>
		<description><![CDATA[Linux kernel 2.6.28 以降に、約 208.5 日で再起動してしまうという問題が見つかったようです。 情報ソース：セキュリティメモ RHEL5 系には該当しませんが、RHEL6 系に該当するので、注意が必 [...]]]></description>
			<content:encoded><![CDATA[<p>Linux kernel 2.6.28 以降に、約 208.5 日で再起動してしまうという問題が見つかったようです。<br />
<a href="http://www.st.ryukoku.ac.jp/~kjm/security/memo/2012/01.html#20120106_Linux">情報ソース：セキュリティメモ</a></p>
<p>RHEL5 系には該当しませんが、RHEL6 系に該当するので、注意が必要です。</p>
<p>問題があるカーネルのバージョンは、次のとおりです。</p>
<ul>
<li>2.6.28 〜 3.1.4</li>
</ul>
<p>すでに Linux kernel 2.6.32.50 / 3.0.13 / 3.1.5 で修正されていますが、現時点で <a href="https://rhn.redhat.com/errata/rhel-server-6-errata.html">RHEL6 でセキュリティパッチ</a>が提供されていませんので、RHEL6 系のディストリビューションは注意が必要そうです。</p>
<p>なお、VMware や Xen などで仮想化マシン上の Linux は影響がない模様です。Xen Dom0 の場合は不明です。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2164/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lion 10.7.2 で遭遇している不思議な現象</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2160</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2160#comments</comments>
		<pubDate>Wed, 04 Jan 2012 14:21:34 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2160</guid>
		<description><![CDATA[あけましておめでとうございます。 Lion 10.7.2（ハードウェアは、Macbook Air 13 Mid 2011）で、現在とても不思議な現象にはまっていて、とても困っているので現象だけをまとめておきます。 今のと [...]]]></description>
			<content:encoded><![CDATA[<p>あけましておめでとうございます。</p>
<p>Lion 10.7.2（ハードウェアは、Macbook Air 13 Mid 2011）で、現在とても不思議な現象にはまっていて、とても困っているので現象だけをまとめておきます。<br />
今のところ、具体的な原因と解決策が分かっていないので、もしご存じの方がいましたら教えてください。</p>
<ol>
<li>認証のかかっている無線 LAN を利用するとして、その SSID に接続します（僕の場合は DoCoMo m-zone の無線 LAN を契約していますので、SSID は docomo です）</li>
<li>接続した IP などが切り替わると、正しく認証するまでは、すべての接続は https://wlan.m-zone.jp にリダイレクトされます</li>
<li>ここで、認証するため、10 分以上の時間を要することがあったり、ひどいときにはまったく https://wlan.m-zone.jp に接続できなくなりますが、ここでブラウザから認証したとします</li>
<li>そうすると、普通にインターネットを利用することができます</li>
<li>正しく認証したあと、まったく別のオープンな無線 LAN に切り替えると、https へのページにまったく接続できなくなりました&#8230;</li>
<li>※このとき、ローカルの VMware fusion の Linux からは問題なく https 接続できるため、Lion 側の問題だと推測しています</li>
</ol>
<p>&nbsp;</p>
<p>コマンドラインから、curl してみると、鍵交換する前で、ずーとブロックしたままかえってきません。<br />
<code><br />
  $ curl url https://gmail.com --verbose<br />
  * About to connect() to gmail.com port 443 (#0)<br />
  *   Trying 74.125.235.119... connected<br />
  * Connected to gmail.com (74.125.235.119) port 443 (#0)<br />
  * SSLv3, TLS handshake, Client hello (1):<br />
  * SSLv3, TLS handshake, Server hello (2):<br />
  * SSLv3, TLS handshake, CERT (11):<br />
 （ここでブロックする）<br />
</code></p>
<p>さらに Mail も IMAPs を使っているのですが、これもまったく接続できなくなります。Apple Mail の応答がなくなりひどいことになります。さらに Evernote も SSL 経由でデータを取得しているためか、起動しても応答がなくなります。当然ですが、どのブラウザからもどの https ページに接続できなくなります。</p>
<p>肝心の解決策ですが、今のところシャットダウンしてから再起動すると直りますが、再起動や無線 LAN のオフオンでは効果がありませんでした。</p>
<p>おそらく、この問題は 10.7.2 にアップデートしたくらいから発生しているような気がしています。<br />
認証のある無線 LAN を使うとかなりの頻度で再現します。今日は、一回で再現しました。<br />
認証のある無線 LAN の場合、そこで接続してしまうと、接続後はすべての http 通信などが認証用の https ページにリダイレクトされることになるため、そうなると何かがおかしくなるようです。。。</p>
<p>この問題を Apple へ報告したいのですが、症状をうまく伝えることができそうにないので困っています。</p>
<p>今のところ、この問題に遭遇しないようにするには、m-zone のような認証のある無線 LAN を利用しないってことなのですが、せっかく契約しているため使いたいです。</p>
<p>今年は、怒濤の年になりそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2160/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linux でとあるプロセスの実行ディレクトリを確認する方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2155</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2155#comments</comments>
		<pubDate>Tue, 27 Dec 2011 08:57:02 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2155</guid>
		<description><![CDATA[ふと、とある作業で Linux でとあるプロセスの実行ディレクトリを確認する方法を知りたかったので調べてみました。 プロセス ID を特定できれば、次のコマンドで一発で分かります。 $ /proc/$PID/cwd lr [...]]]></description>
			<content:encoded><![CDATA[<p>ふと、とある作業で Linux でとあるプロセスの実行ディレクトリを確認する方法を知りたかったので調べてみました。<br />
プロセス ID を特定できれば、次のコマンドで一発で分かります。</p>
<p><code><br />
  $ /proc/$PID/cwd<br />
  lrwxrwxrwx 1 root wheel 0 Dec 27 17:52 /proc/$PID/cwd -> /usr/local/hoge<br />
</code></p>
<p>この他にも /proc/$PID には、プロセスに関する情報がありますが、exe には実行ファイルパスが分かったりと、何かと便利ですね。</p>
<p># 追記<br />
<a href="https://twitter.com/#!/ishikawa84g/status/151592700716658688">@ishikawa84g</a> さんから、次のコマンドでも同じことができるとコメントをいただきました！ありがとうございます！<br />
<code><br />
  $ usr/sbin/lsof -p $PID | grep cwd<br />
ruby    $PID root  cwd    DIR      9,0    4096 24675239 /usr/local/hoge<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2155/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>カジュアルに MySQL を監視する方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2146</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2146#comments</comments>
		<pubDate>Sun, 18 Dec 2011 15:51:15 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[mysql nagios]]></category>
		<category><![CDATA[mysqlcasual]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2146</guid>
		<description><![CDATA[このエントリーは、MySQL Casual Advent Calendar 2011 &#8211; MySQL Casual の第 19 日目のエントリーです。 &#160; 皆さんこんにちは、n0ts こと、Naoy [...]]]></description>
			<content:encoded><![CDATA[<p>このエントリーは、<a href="http://mysql-casual.org/2011/11/mysql-casual-advent-calendar-2011.html">MySQL Casual Advent Calendar 2011 &#8211; MySQL Casual</a> の第 19 日目のエントリーです。</p>
<p>&nbsp;</p>
<p>皆さんこんにちは、<a href="http://twitter.com/n0ts/">n0ts</a> こと、Naoya Nakazawa です。</p>
<p>今日は、みなさん日頃からカジュアルに MySQL を運用して、日々生活されていることと思います。MySQL は、非常に安定したオープンソースソフトウェアだと思いますが、どんなものでもときにはおかしくなったりするものです。</p>
<p>「<strong>備えあれば憂いなし</strong>」ということで、僕は日頃から <a href="http://www.nagios.org/">Nagios</a> というオープンソースソフトウェアを利用して、MySQL がおかしくなっていかいか日々カジュアルに監視しています。</p>
<p>今日は、カジュアルに MySQL を Nagios を使って監視する方法を紹介したいと思います。なお、今回は CentOS 5.7 x86_64 というカジュアルな Linux ディストリビューションを使っていて、その中に MySQL がインストールされて、MySQL サーバが動いている環境で解説しています。</p>
<p>&nbsp;</p>
<p>まず、一番カジュアルで簡単な監視方法は、Nagios 公式の監視プラグインを使った監視です。Nagios 公式の監視プラグインは、次のコマンドでインストールすることができます。</p>
<p><code><br />
# yum install nagios-plugins -y<br />
</code></p>
<p>64bit 環境の場合、/usr/lib64/nagio/plugins に、Nagios 公式の監視プラグインがインストールされます。</p>
<p>たくさんの監視プラグインがありますが、この中で MySQL を監視することができるプラグインは、次の 2 種類があります。</p>
<ul>
<li>check_mysql</li>
<li>check_mysql_query</li>
</ul>
<p>それぞれのプラグインについて解説していきます。</p>
<p>&nbsp;</p>
<p><strong>check_mysql</strong></p>
<p>check_mysql は、MySQL サーバへの接続をテストする監視プラグインです。使い方は、とっても簡単です。次のように実行するだけです。<br />
<code><br />
$ /usr/lib64/nagios/plugins/check_mysql<br />
Uptime: 1131841 Threads: 2 Questions: 708 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 1 Queries per second avg: 0.0<br />
</code></p>
<p>とっても簡単ですね！これで監視はできていますが、念のため省略されている引数をつけると次のようになります。<br />
<code><br />
$ /usr/lib64/nagios/plugins/check_mysql -H localhost -u root<br />
Uptime: 1131936 Threads: 2 Questions: 709 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 1 Queries per second avg: 0.0<br />
</code></p>
<p>上の例では、ローカルホストにある MySQL サーバに対して root というユーザ名で接続して MySQL サーバに接続できるか監視しています。<br />
ちなみに、MySQL サーバをわざと停止してから、エラーになるかどうか確認してみましょう。<br />
<code><br />
$ sudo /etc/init.d/mysql stop<br />
Shutting down MySQL.. [ OK ]<br />
$ /usr/lib64/nagios/plugins/check_mysql -H localhost -u root<br />
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)<br />
</code></p>
<p>問題ないですね！</p>
<p>この他にもスレーブの遅延も検出することができます。これも、よく使う定番の監視といえるでしょう。<br />
<code><br />
$ /usr/lib64/nagios/plugins/check_mysql -H db-ads2 -u repl_client -p repl_pass --check-slave --warning 5 --critical 10<br />
Uptime: 8229294 Threads: 186 Questions: 2092736633 Slow queries: 10 Opens: 231 Flush tables: 1 Open tables: 143 Queries per second avg: 254.303 Slave IO: Yes Slave SQL: Yes Seconds Behind Master: 0<br />
</code></p>
<p>&#8211;check-slave というオプションは、スレーブとして動作しているか確認するためのオプションです。そのあとに閾値である warning と critical を使って、スレーブの遅延が何秒があったときエラーとして検出するのかを指定しています。上の例では、5 秒遅延になったとき警告レベル、10 秒遅延になったとき致命レベルとして検出しています。</p>
<p>&nbsp;</p>
<p><strong>check_mysql_query</strong></p>
<p>check_mysql_query プラグインは、とある SQL クエリーを発行した結果、その結果の数値がある閾値内にあるかどうか監視するプラグインです。指定する SQL クエリーは、必ず結果が数字にならないといけません。<br />
例えば、次のように実行します。</p>
<p><code><br />
$ /usr/lib64/nagios/plugins/check_mysql_query --query "SELECT 1" --warning 2:2 --critical 1:1<br />
QUERY WARNING: 'SELECT 1' returned 1.000000<br />
</code></p>
<p>上の例では、「SELECT 1」というクエリーを実行して、その結果が 2 から 2 までに<strong>ないとき</strong>は警告レベル、1 から 1 までに <strong>ないとき</strong>は致命レベルとして検出しています。上の例だと、「SELECT 1」というクエリーは必ず結果が 1 になるため、警告レベルとして検出されます。</p>
<p>このプラグインは、SQL クエリーを指定できるため、非常に柔軟に MySQL を監視することができます。</p>
<p>例えば、次の例は test というデータベースにある employees テーブルのレコード件数を数えて、レコード数が 2000 件を超えたときは警告レベル、3000 件を超えたときは致命レベルとして検出します。<br />
<code><br />
$ /usr/lib64/nagios/plugins/check_mysql_query --database test --query "SELECT COUNT(*) from employees" --warning 1:2000 --critical 1:3000<br />
QUERY OK: 'SELECT COUNT(*) from employees' returned 1.000000<br />
</code></p>
<p>check_mysql_query プラグインを使うと、より実際の MySQL のデータベース内容を監視することができます。</p>
<p>Nagios 公式で提供されている MySQL 監視プラグインは上の二つになります。</p>
<p>みなさん、これで十分に MySQL をカジュアルに監視して、夜も安心して眠れるようになったでしょうか？眠れるようになったという人は、ここで読み終えてください。まだ、何か足りないんじゃない？と思った人は、このあとも読んでみてください。。。</p>
<p>さらに MySQL を Nagios を使って監視するプラグインに、<a href="http://exchange.nagios.org/directory/MySQL/check_mysql_health/details">check_mysql_health</a> という非常に便利なプラグインがあります。</p>
<p><strong>check_mysql_health</strong></p>
<p>check_mysql_helath プラグインは、さきほど解説した check_mysql と check_mysql_query を組み合わせて、さらに多くの監視ができるプラグインです。公式のマニュアルは、<a href="http://labs.consol.de/lang/en/nagios/check_mysql_health/">ここ（英語）</a>で公開されています。<br />
具体的には、次のことができます。</p>
<ul>
<li>MySQL サーバへの接続にかかる時間</li>
<li>MySQL サーバが動作している時間</li>
<li>現在、開かれているコネクション数</li>
<li>スレッドキャッシュのヒット率 スレーブの遅延（check_mysql &#8211;check-slave と同じ）</li>
<li>Slave io running の監視</li>
<li>Slave sql running の監視</li>
<li>クエリーキャッシュのヒット率</li>
<li>クエリーキャッシュでメモリ不足のため、切り落としたエントリ数</li>
<li>MyIASM のキーキャッシュのヒット率</li>
<li>InnoDB バッファープールのヒット率</li>
<li>InnoDB バッファープールのクリーンページが利用可能になるまで秒数</li>
<li>InnoDB のログウェイト時間（これは、ログバッファーが小さすぎるときに発生する）</li>
<li>テーブルキャッシュのヒット率</li>
<li>テーブルロックの失敗率</li>
<li>インデックスの利用率 ディスク上に作成された一時的テーブルの割合</li>
<li>スロークエリー</li>
<li>長く動いているプロセスの監視</li>
<li>ndnd ノードが起動していて動いている数</li>
<li>あるクエリーの結果の特定の数値がどうか（check_mysql_query と同じ）</li>
</ul>
<p>いかがでしょう！こんなにたくさんの項目を監視することができます。</p>
<p>この中で、比較的重要な監視の方法を解説していきます。</p>
<p>まず、MySQL へ接続する時間の監視です。これは、ウェブアプリケーションから MySQL へ接続する時間がかかってしまうと、ウェブアプリケーションが重い状態になってしまいます。こんなときのために MySQL へ接続する時間を監視しておくと、とても便利です。これは、次のように実行します。<br />
<code><br />
$ /usr/lib64/nagios/plugins/check_mysql_health --hostname localhost --user root --mode connection-time --warning 0.5 --critical 1.0<br />
OK - 0.02 seconds to connect as root | connection_time=0.0211s;0;1<br />
</code></p>
<p>上の例では、MySQL への接続に 0.5 秒かかったときは警告レベル、1.0 秒かかったときは致命レベルとして検出します。秒数は、1 秒以下も指定できるため、かなり厳密な時間で監視することができますので、とても重宝します。</p>
<p>クエリーキャッシュのヒット率を監視したい場合は、次のように実行します。<br />
<code><br />
$ /usr/lib64/nagios/plugins/check_mysql_health --hostname localhost --user root --mode querycache-hitrate --warning 80: --critical 70:<br />
WARNING - query cache hitrate 70.82% | qcache_hitrate=70.82%;80:;70: qcache_hitrate_now=62.82% selects_per_sec=420.17<br />
</code></p>
<p>上の例では、クエリーキャッシュのヒット率が 80% をきったときは警告レベル、70% をきったときは致命レベル、として検出します。クエリーキャッシュを使っている環境の場合は、とても重要な監視となるでしょう。</p>
<p>スレッドキャッシュのヒット率を監視したい場合は、次のように実行します。<br />
<code><br />
$ /usr/lib64/nagios/plugins/check_mysql_health --hostname localhost --user root --mode threadcache-hitrate --warning 80: --critical 70:<br />
CRITICAL - thread cache hitrate 7.50% | thread_cache_hitrate=7.50%;80:;70: thread_cache_hitrate_now=7.50% connections_per_sec=0.00<br />
</code></p>
<p>上の例では、スレッドキャッシュのヒット率が 80% をきったとき警告レベル、70% をきったとき致命レベル、として検出します。上の場合だと、スレッドキャッシュのヒット率が 7.50% なので致命レベルとなっています。</p>
<p>InnoDB のバッファープールのヒット率を監視したい場合は、次のように実行します。<br />
<code><br />
$ /usr/lib64/nagios/plugins/check_mysql_health --hostname localhost --user root --mode innodb-bufferpool-hitrate --warning 80: --critical 70:<br />
OK - innodb buffer pool hitrate at 80.00% | bufferpool_hitrate=80.00%;80:;70:;0;100 bufferpool_hitrate_now=100.00%<br />
</code></p>
<p>とても簡単ですね。</p>
<p>check_mysql_health プラグインを使うと、さらに多くの監視を MySQL に対して行うことができます。</p>
<p>さらにカジュアルにもう一方踏み込んで監視するプラグインに <a href="http://exchange.nagios.org/directory/Plugins/Databases/MySQL/mysql_health_check/details">mysql_health_check</a> があります。</p>
<p><strong>mysql_health_check</strong></p>
<p>mysql_health_check プラグインは、「SHOW FULL PROCESSLIST」や「SHOW GLOBAL VARIABLES」や「SHOW GLOBAL STATUS」の結果を監視するプラグインです。引数の指定で、これらの出力を一定時間キャッシュさせておくことができます。残念ながら、現時点でのバージョンでは「SHOW ENGINE INNODB STATUS」はコメントになっており機能していません。将来的にはきっと対応してくれることでしょう。</p>
<p>mysql_health_check プラグインは、必ずモードを &#8211;mode で指定する必要がありますが、long-query、lock-query、varcomp から指定することができます。それぞれの意味は、次のとおりです。</p>
<ul>
<li>long-query: 指定した秒数以上実行しているクエリーを検出します</li>
<li>lock-query: 指定した秒数以上ロックしているいクエリーを検出します</li>
<li>varcomp: 「SHOW GLOBAL VARIABLES」や「SHOW GLOBAL STATUS」の中にある変数やステータスが閾値にあるかどうか検出します</li>
</ul>
<p>long-query の実行例は、次のとおりです。<br />
<code><br />
  $ /usr/lib64/nagios/plugins/mysql_health_check.pl --hostname localhost --user root --mode long-query --warning 30 --critical 60<br />
  mysql_long-query OK<br />
</code></p>
<p>上の例では、30 秒以上実行しているクエリーを検出したときは警告レベル、60 秒以上実行しているクエリーを検出したときは致命レベル、として検出します。</p>
<p>varcomp の実行例は、次のとおりです。これは、すこし複雑かもしれません。。。<br />
<code><br />
  $ /usr/lib64/nagios/plugins/mysql_health_check.pl --hostname localhost -u root --mode varcomp --expression="Connections" --warning=">100" --critical=">200" --cache_dir=/tmp --max_cache_age=90<br />
  mysql_varcomp OK - Comparison check passed: (Connections)   >100   >200   = '59'<br />
</code></p>
<p>上の例では、「Connections」という変数およびステータスが 100 以上になったとき警告レベル、200 以上になったとき致命レベルとして検出します。さらに /tmp にキャッシュディレクトリを指定して、90 秒の出力結果をキャッシュしています。</p>
<p>mysql_health_check プラグインを使うとさらに MySQL の内部の内部まで監視することができるので、とても便利です。</p>
<p>この他にも MySQL を監視するプラグインはたくさんありますし、自分で作成している人も多いと思います。<br />
ちなみに僕は、カジュアル派なので、今のところ今回紹介した Nagios プラグインだけを使って MySQL を監視しています。</p>
<p>明日は、<a href="https://twitter.com/#!/sohgoh">@sohgoh</a> さんです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2146/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ifttt を使って、Delicious からはてブにブックマークする方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2139</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2139#comments</comments>
		<pubDate>Thu, 08 Dec 2011 05:30:11 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[web bookmark]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2139</guid>
		<description><![CDATA[快適に「あとで読む」ための環境で紹介されていた、ifttt がとても便利なわけですが、ifttt を使って、Delicious からはてブにブックマークをする方法を紹介します。 今のところ、僕の場合 Firefox で  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblog.bulknews.net/post/13811211811">快適に「あとで読む」ための環境</a>で紹介されていた、ifttt がとても便利なわけですが、ifttt を使って、Delicious からはてブにブックマークをする方法を紹介します。</p>
<p>今のところ、僕の場合 Firefox で LDR などで情報収集しているわけですが、ブックマークは Delicious をメインで使っていて、Firefox の <a href="https://addons.mozilla.org/ja/firefox/addon/delicious-bookmarks/">Delicious 拡張</a>を使っています（最近のデザイン変更で、ログイン画面が Delicious 拡張経由だとそのままなわけですが・・・）。</p>
<p>この拡張は、OSX だと Command+D で Delicious のブックマーク画面が表示されて、簡単にブックマークすることができます。ここで Delicious でブックマークしたあと、ifttt 経由ではてブにブックマークしたいと思って、<a href="http://hatena.g.hatena.ne.jp/hatenabookmark/20091224/1261625338">はてブのメールでブックマークする機能</a>を使って設定してみました。</p>
<p>設定方法は、ifttt のタスクを作成することで可能です。</p>
<ol>
<li><a href="http://ifttt.com/">ifttt </a>にアカウント登録します</li>
<li><a href="http://ifttt.com/channels/delicious">Delicious のチャンネル</a>を有効にします</li>
<li>ifttt のタスクを作成します</li>
<li>if は、Delicious の Any new public bookmark されたときにします</li>
<li>then は、Gmail 経由で、自分のはてブ専用のメールアドレスにメールを送信するようにします（はてブの専用のメールアドレスは、設定画面のメールタブから確認することができます）</li>
<li>メールの本文を、次のような内容にして、タスクを作成します</li>
</ol>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2011/12/ifttt_mail_conf.jpg" rel="lightbox"><img class="aligncenter size-medium wp-image-2140" title="ifttt mail configuration" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2011/12/ifttt_mail_conf-300x220.jpg" alt="" width="300" height="220" /></a></p>
<p>タスクを作成した画面は、次のようになります。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2011/12/ifttt_task.jpg" rel="lightbox"><img class="aligncenter size-medium wp-image-2141" title="ifttt_task" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2011/12/ifttt_task-300x72.jpg" alt="" width="300" height="72" /></a></p>
<p>このタスクは、タスクの実行に少し時間がかかるので注意しましょう。</p>
<p>これで、<a href="http://delicious.com/n0ts/">Delicious</a> にブックマークしたら、同じタグ、コメントで、<a href="http://b.hatena.ne.jp/n0ts/bookmark">はてブ</a>に自動的にブックマークすることができるようになりました。</p>
<p>ifttt は、かなり便利なウェブサービスで、こういうネットライフを豊かにするサービスは、とても素敵ですね。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2139/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Growl 1.3 を無料でインストールする方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2131</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2131#comments</comments>
		<pubDate>Fri, 25 Nov 2011 00:47:18 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2131</guid>
		<description><![CDATA[Growl 1.3 になってから、有料（現在日本円だと 170 円）になって App Store から購入することができるわけですが、Growl 1.3をビルドしてインストールする &#8211; DiaryExcept [...]]]></description>
			<content:encoded><![CDATA[<p>Growl 1.3 になってから、有料（現在日本円だと 170 円）になって App Store から購入することができるわけですが、<a href="http://d.hatena.ne.jp/LaclefYoshi/20111105/1320502551">Growl 1.3をビルドしてインストールする &#8211; DiaryException</a>に書かれているとおり、なんと自分でビルドすると無料でインストールすることができるらしいので、さっそくやってみました。</p>
<p>まずは、hg をインストールします。<br />
<code><br />
$ brew install python<br />
$ easy_install Mercurial<br />
</code></p>
<p>Grow のソースコードを入手します。<br />
<code><br />
$ hg clone https://code.google.com/p/growl/<br />
</code></p>
<p>Grow のビルドの準備を開始します。<br />
<code><br />
$ cd growl<br />
$ export BUILT_PRODUCTS_DIR=`pwd`<br />
$ ./generateHgRevision.sh<br />
</code></p>
<p>GrowlVersion.h を、次のように変更します。<br />
<code><br />
7c7<br />
< #include "hgRevision.h"<br />
---<br />
> #include "include/hgRevision.h"<br />
</code></p>
<p>そうすると、include/hgRevision.h が生成されて、次のような内容になります。<br />
<code><br />
#define HG_REVISION 5809<br />
#define HG_REVISION_STRING "5809"<br />
</code></p>
<p>あとは、XCode を開いて、次の手順でビルドするだけです。</p>
<ol>
<li>Xcode 4.2 で Growl.xcodeproj を開く</li>
<li>ビルドターゲット を Growl.app にセットする</li>
<li>Project: Growl と Targets:Growl.app の「Code Signing Identity」を「Don&#8217;t Code Sign」に設定する</li>
</ol>
<p>ビルドしたら、Products にある Growl.app をアプリケーションディレクトリにコピーするだけです。念のため、前のバージョンがインストールされているときは、Release/Uninstall Growl.app を実行してアンインストールしておくといいでしょう。</p>
<p>&nbsp;</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2011/11/grow13.jpg" rel="lightbox"><img class="aligncenter size-medium wp-image-2132" title="grow13" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2011/11/grow13-300x298.jpg" alt="" width="300" height="298" /></a></p>
<p>Growl のバージョン情報を見ると 1.3 になっているわけですが、App Store にある Grow のバージョンは 1.3.1 となっています。一瞬古いバージョンなのかなと思ったんですが、hg のバージョンを埋め込むようにしたあと変更されたようです。興味のあるの人は、<a href="https://code.google.com/p/growl/source/browse/GrowlVersion.h">GrowlVersion.sh の変更履歴</a>を参照するといいと思います。</p>
<p>この方法なら、Growl のソースコードが公開されている限り、自分でビルドすればいいですね！</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2131/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RRDtool ハッカソン #1（案）</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1968</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1968#comments</comments>
		<pubDate>Wed, 16 Nov 2011 02:45:35 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[rrdtool]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1968</guid>
		<description><![CDATA[ふと思いつきなのですが、みんな大好き RRDtool ハッカソン的なものをやろうかなと模索中しています。 今のところ、各自あるいはペア・グループ単位で、次のようなことをやろうかなと思っています。ようは RRDtool に [...]]]></description>
			<content:encoded><![CDATA[<p>ふと思いつきなのですが、みんな大好き <a href="http://oss.oetiker.ch/rrdtool/index.en.html">RRDtool</a> ハッカソン的なものをやろうかなと模索中しています。</p>
<p>今のところ、各自あるいはペア・グループ単位で、次のようなことをやろうかなと思っています。ようは RRDtool についてみんなで勉強しましょうね的な会です。</p>
<ul>
<li>rrdtutorial をやる（<a href="http://oss.oetiker.ch/rrdtool/tut/rrdtutorial.en.html">公式</a>、<a href="http://www.photonway.net/Rrdtool-Tutorial-jp.html">日本語翻訳版</a>）</li>
<li><a href="http://oss.oetiker.ch/rrdtool/tut/rrd-beginners.en.html">rrd-beginners</a> をやる、あるいはその翻訳をして公開する</li>
<li>RRDtool の<a href="http://oss.oetiker.ch/rrdtool/doc/index.en.html">各ツールの使い方</a>を学ぶ、あるいはその翻訳をして公開する</li>
<li>RRDtool の<a href="http://oss.oetiker.ch/rrdtool/prog/index.en.html">各種バインディングツール</a>を使ってみる</li>
<li><a href="http://oss.oetiker.ch/rrdtool/gallery/index.en.html">RRDtool のギャラリー</a>を眺めながら、自分でも同じようなものを実装してみる</li>
<li>既存のツールを<a href="http://oss.oetiker.ch/rrdtool-trac/wiki/TuningRRD">チューニング</a>してみる</li>
<li>RRDTool を使ったモニタリングツールを自作してみる</li>
</ul>
<p>かなりマニアックなハッカソンというか、勉強会チックなものなので、数人希望がいるようであれば、次の予定ぐらいでゆるく開催したいと思います。</p>
<ul>
<li>時期：2012年1月下旬〜2月くらいの予定、土日祝の午後半日程度予定（平日の夜でもいいかもしれないけれど、時間が短くなるので）</li>
<li>場所：東京都内（たぶん、渋谷・新宿近郊あたりになるかと思いますが、有料の場所を使う可能性がありますがそのときは会場費がかかってしまいます、参加者の皆さんと相談したいと思います）</li>
<li>内容：RRDtool に関して自分の好きなことを各自あるいはペア・グループ単位で、上の内容でもよいし、好きなことをやる</li>
</ul>
<p>ちなみに僕は RRDtool に関してまったくの初心者なので、安心してくださいw。RRDtool を使っているグラフツールを使っている 1 ユーザですので^^。</p>
<p>今までなかなか RRDtool 参加希望したいという方は、ブクマ・ツイッターなどでゆるく表明していただければと思います。５人ぐらいいたら開催しようと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1968/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CDH2 から CDH3u2 にアップデートしてみた</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2128</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2128#comments</comments>
		<pubDate>Tue, 15 Nov 2011 02:48:41 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[hadoop]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2128</guid>
		<description><![CDATA[CDH2 から CDH3 Update 2 からのアップデートしてみましたので、簡単にその方法を紹介します。本番環境でアップデートするのに要した時間は、約 1 時間くらいです。 公式ドキュメントはここにあります。 まず、 [...]]]></description>
			<content:encoded><![CDATA[<p>CDH2 から CDH3 Update 2 からのアップデートしてみましたので、簡単にその方法を紹介します。本番環境でアップデートするのに要した時間は、約 1 時間くらいです。</p>
<p>公式ドキュメントは<a href="https://ccp.cloudera.com/display/CDHDOC/Upgrading+to+CDH3">ここ</a>にあります。</p>
<p>まず、CDH3 ではユーザまわりの変更が入っています。</p>
<p>CDH3 でのユーザアカウントの変更</p>
<ul>
<li> hdfs: NameNode, DataNodes, Secondary NameNode（従来の hadoop ユーザにあたります、CDH3 にアップデートすると自動的に hadoop ユーザが hdfs ユーザに変更されるので注意してください）</li>
<li>mapred: JobTracker and TaskTrackers（JobTracker と TaskTracker 用に追加された新しいユーザになります）</li>
</ul>
<p>ローカルファイルシステムのディレクトリオーナー</p>
<ul>
<li>dfs.name.dir: hdfs:hadoop 700</li>
<li>dfs.data.dir: hdfs:hadoop 700</li>
<li>mapred.local.dir: mapred:hadoop 755</li>
<li>HADOOP_LOG_DIR: anyuser:hadoop 775</li>
</ul>
<p>HDFS 上のディレクトリオーナーの変更</p>
<ul>
<li>mapred.system.dir: mapred:hadoop 700</li>
<li>/ (root directory): hdfs:hadoop 755</li>
</ul>
<p>Step1: アップグレードする前の準備<br />
1. すべての Hadoop サービスをシャットダウンします<br />
<code><br />
$ sudo -u hadoop /usr/lib/hadoop-0.20/bin/stop-all.sh<br />
</code></p>
<p>2. hadoop ユーザのプロセスがないことを動いていないことを確認します<br />
<code><br />
$ sudo su hadoop -s /bin/bash -c "jps"<br />
</code></p>
<p>3. NameNode マシン上の HDFS メタデータをバックアップします<br />
SecondaryNode がある場合は、NameNode のおメタデータをバックアップしているためスキップしても大丈夫だと思います<br />
メタデータをバックアップするために、dfs.name.dir の場所を確認します<br />
<code><br />
$ grep -C1 dfs.name.dir /etc/hadoop/conf/hdfs-site.xml<br />
<!-- specify this so that running 'hadoop namenode -format' formats the right dir --><br />
dfs.name.dir<br />
/var/lib/hadoop-0.20/cache/hadoop/dfs/name<br />
$ cd /var/lib/hadoop-0.20/cache/hadoop/dfs/name<br />
$ sudo tar -cvf /root/nn_backup_data.tar .<br />
</code></p>
<p>Step2: Hadoop のコアパッケージ hadoop-0.20 のアップグレード</p>
<p>1. local yum repostiory 設定で、CDH2 から CDH3 に切り替えます</p>
<p>2. すべての Hadoop クラスターのホストにおいて、パッケージのアップグレードする<br />
<code><br />
$ sudo yum upgrade hadoop-0.20*<br />
Hadoop version 0.20.1+169.127-1 -&gt; 0.20.2+923.142-1 になる（2011/11/15 時点）<br />
</code></p>
<p>その他必要なパッケージを、それぞれのホストにインストールします</p>
<ul>
<li>NameNode: hadoop-0.20-namenode, hadoop-0.20-jobtracker</li>
<li>Secondary NameNode: hadoop-0.20-secondarynamenode</li>
<li>Slave: hadoop-0.20-datanode, hadoop-0.20-tasktracker</li>
</ul>
<p>3. hadoop-env.sh の HADOOP_MASTER 環境変数を確認します（僕の環境の場合、設定がなかったのでスキップしました）</p>
<p>4. Hadoop システムアカウントを確認します<br />
<code><br />
$ id hdfs<br />
$ id mapred<br />
</code><br />
hadoop ユーザは削除されるので注意します</p>
<p>5. HDFS データのオーナーを確認します<br />
hdfs-site.xml の dfs.name.dir, dfs.data.dir の設定を確認します<br />
dfs.data.dir の設定がない場合は、hdfs-site.xml に追加します</p>
<p>hdfs-site.xml の設定が変わるので注意しましょう。hadoop-0.20-conf-pseudo をインストールして、その設定ファイルをベースに設定するといいと思います。また、hadoop-0.20-dfs.data.dir の設定が hdfs-site.xml に存在しないと CDH3 はシャットダウンしてしまうらしいので注意しましょう</p>
<p><code><br />
$ ls -ld /var/lib/hadoop-0.20/cache/hadoop/dfs/name<br />
drwxr-xr-x 4 hdfs hadoop 4096 Nov 6 16:49 /var/lib/hadoop-0.20/cache/hadoop/dfs/name/<br />
</code></p>
<p>もし、オーナーがおかしければ変更します<br />
<code><br />
$ sudo chown -R hdfs:hadoop /var/lib/hadoop-0.20/cache/hadoop/dfs/name<br />
</code></p>
<p>6. MapReduce のローカルディレクトリのオーナーとパーミッションを変更します<br />
<code><br />
$ ls -ld /var/lib/hadoop-0.20/cache/hadoop/mapred/local<br />
drwxr-xr-x 4 hdfs hadoop 4096 Nov 6 16:38 /var/lib/hadoop-0.20/cache/hadoop/mapred/local/<br />
$ sudo chown -R mapred /var/lib/hadoop-0.20/cache/hadoop/mapred/local<br />
</code></p>
<p>7. すべてのホストのログディレクトリのオーナーとパーミッションを変更します<br />
<code><br />
$ sudo chgrp hadoop /var/log/hadoop-0.20<br />
$ sudo chmod g+w /var/log/hadoop-0.20<br />
$ sudo chown mapred /var/log/hadoop-0.20/userlogs<br />
</code></p>
<p>8. HDFS メタデータをアップグレードします<br />
別のターミナル画面で、NameNode のログを確認しておきます<br />
<code><br />
namenode$ sudo tail -f /var/log/hadoop-0.20/hadoop-hadoop-namenode*<br />
</code></p>
<p>メタデータをアップグレードします<br />
<code><br />
namenode$ sudo /etc/init.d/hadoop-0.20-namenode upgrade<br />
</code><br />
ログで、次のメッセージが表示されると成功したということになります<br />
2011-11-06 17:15:27,390 INFO org.apache.hadoop.hdfs.server.common.Storage: Upgrade of /var/lib/hadoop-0.20/cache/hadoop/dfs/name is complete.<br />
NameNode は、DataNode に接続するまでの間、セーフモードになっているため、注意しましょう（このあと DataNode を開始すると、自動的にセーフモードが解除されます）</p>
<p>9. HDFS を開始します<br />
それぞれのスレーブホストにて、HDFS を開始します<br />
<code><br />
slaveX$ sudo /etc/init.d/hadoop-0.20-datanode start<br />
</code><br />
すこし待って、DataNode のアップグレードが完了すると、次のメッセージが NameNode のログに出力されます<br />
<code><br />
Safe mode will be turned off automatically in X seconds.<br />
</code><br />
DataNode のアップグレードプロスが完了すると、NameNode は自動的にセーフモードを終了して、HDFS は通常のフルオペレーションが可能になります。そのときは、NameNode のログに、次のような内容が出力されます<br />
<code><br />
...<br />
The reported blocks 8 has reached the threshold 0.9990 of total blocks 8. Safe mode will be turned off automatically in X seconds.<br />
...<br />
2011-11-07 18:33:28,009 INFO org.apache.hadoop.hdfs.StateChange: STATE* Leaving safe mode after 137 secs.<br />
...<br />
2011-11-07 18:33:28,009 INFO org.apache.hadoop.hdfs.StateChange: STATE* Safe mode is OFF.<br />
...<br />
</code></p>
<p>Safe Mode 中かどうかは、次のコマンドで確認することができます<br />
<code><br />
namenode$ sudo hadoop dfsadmin -safemode get<br />
Safe mode is OFF<br />
</code></p>
<p>10. HDFS 上の mapred.system.dir ディレクトリのオーナーを変更します<br />
NamaNode に mapred.system.dir の設定がない場合は、hdfs://namenode/var/lib/hadoop-0.20/cache/hadoop/mapred/system になるため、なければ作成します。<br />
<code><br />
namenode$ sudo -u hdfs hadoop fs -chown -R mapred hdfs://namenode/var/lib/hadoop-0.20/cache/hadoop/mapred/system<br />
</code></p>
<p>11. それぞれのホストで、SecondaryNameNode と MapReduce を開始します<br />
<code><br />
secodarynamenode$ sudo /etc/init.d/hadoop-0.20-secondarynamenode start<br />
slaveX$ sudo /etc/init.d/hadoop-0.20-jobtracker start<br />
slaveX$ sudo /etc/init.d/hadoop-0.20-tasktracker start<br />
</code></p>
<p>念のため、プロセスを確認します<br />
<code><br />
$ ps eaf | grep -i job<br />
$ ps eaf | grep -i task<br />
</code></p>
<p>12. 基本的なクラスター操作を確認します<br />
適当なディレクトリを作成します<br />
<code><br />
namenode$ sudo -u hdfs hadoop fs -mkdir /test<br />
</code><br />
HDFS のユーザディレクトリのオーナーを変更してみます<br />
<code><br />
$ sudo -u hdfs hadoop fs -chown joe /user/joe<br />
</code></p>
<p>通常ユーザで計算ジョブを走らせてみます<br />
<code><br />
$ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2*examples.jar pi 10 10000<br />
…<br />
Job Finished in 61.474 seconds<br />
Estimated value of Pi is 3.14120000000000000000<br />
</code></p>
<p>13. HDFS アップグレードを終了させます<br />
<code><br />
namenode$ sudo -u hdfs hadoop dfsadmin -finalizeUpgrade<br />
</code><br />
http://:50070/ の Upgrades 欄を確認して「There are no upgrades in progress.」と表示されていることを確認します。このメッセージが表示されていれば、無事成功したことになります。</p>
<p>その他、実際の運用面では、Hadoop のジョブは、mapred ユーザで実行したほうが楽です。（他のユーザで実行するには、HADOOP_LOG_DIR やその他 Hadoop のディレクトリのパーミッションを変更する必要があります）</p>
<p>すこしだけ、ジョブの実行スピードが速くなったような気がします。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2128/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webサーバ勉強会 #4</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2124</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2124#comments</comments>
		<pubDate>Mon, 14 Nov 2011 02:45:40 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[study2study]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2124</guid>
		<description><![CDATA[Webサーバ勉強会 #4 で、Nginx のコンフィグレーション 1 行目から 24 行目までの説明を話してきました。その他にも当日キャンセルになった fastcgi_conf と mime_types もかなり手抜きで [...]]]></description>
			<content:encoded><![CDATA[<p>Webサーバ勉強会 #4 で、Nginx のコンフィグレーション 1 行目から 24 行目までの説明を話してきました。その他にも当日キャンセルになった fastcgi_conf と mime_types もかなり手抜きですが、取り急ぎまとめて slideshare へアップしておきました。</p>
<p>Nginx は、今まで本番環境では使ったことがないので、かなり設定ファイルが分かりやすいし、かなりの実戦投入している話を聞けたので、とても勉強になりました。</p>
<p>Webサーバ勉強会は、参加者すべて発表しないといけないため、参加人数は少ないですが、発表している中でも、みんなでわいわいとそれぞれの情報を出しあって、わいわいと勉強できるとても緩い勉強会だと思うので、皆さんも機会がありましたら参加してみてください。</p>
<div style="width:425px" id="__ss_10114800"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/n0ts/study2study4-nginx-conf124" title="Study2study#4 nginx conf_1_24" target="_blank">Study2study#4 nginx conf_1_24</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10114800" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/n0ts" target="_blank">Naoya Nakazawa</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2124/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>postfix on OSX で、gmail 経由でメールを送信する方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/2117</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/2117#comments</comments>
		<pubDate>Mon, 07 Nov 2011 01:10:51 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=2117</guid>
		<description><![CDATA[Lion OSX 上で、ウェブアプリケーションを行っていると、メールを送信する機能を作ることがあります。OSX には、すでに postfix が入っているので、MacPorts でインストールする必要はありませんが、最近 [...]]]></description>
			<content:encoded><![CDATA[<p>Lion OSX 上で、ウェブアプリケーションを行っていると、メールを送信する機能を作ることがあります。OSX には、すでに postfix が入っているので、MacPorts でインストールする必要はありませんが、最近のプロバイダだと 25 番ポートが閉じられていることが多いので、メールの機能を確認できないことが多いです。</p>
<p>そこで、gmail を利用して、ローカルの OSX からメールを送信する方法を紹介したいと思います。</p>
<p>まず、/etc/postfix/main.cf に、次の設定を追加します。</p>
<blockquote><p>
# gmail<br />
relayhost = [smtp.gmail.com]:587<br />
smtp_use_tls = yes<br />
smtp_sasl_auth_enable = yes<br />
smtp_sasl_password_maps = hash:/Users/naoya/etc/sasl_passwd<br />
smtp_sasl_tls_security_options = noanonymous<br />
smtp_sasl_mechanism_filter = plain<br />
smtp_tls_security_level = secure<br />
smtp_tls_CApath = /Users/naoya/etc/ssl/certs
</p></blockquote>
<p>gmail の 587 番ポート経由でメールを送信する設定になります。</p>
<p>/Users/naoya/etc/sals_password には、次のような感じで gmail アカウント情報を書いておきます。</p>
<blockquote><p>[smtp.gmail.com]:587 &lt;gmail account&gt;@gmail.com:&lt;password&gt;</p></blockquote>
<p>gmail アカウント情報を書いたら、postmap コマンドでデータベースを作成します。</p>
<p><code><br />
$ postmap /Users/naoya/etc/sasl_passwd<br />
</code></p>
<p>次に gmail 経由で認証する場合、次のような認証警告が表示されるので、これを対策します。</p>
<blockquote><p>Oct 28 18:36:17 localhost postfix/smtp[12237]: certificate verification failed for smtp.gmail.com[74.125.127.108]:587: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority</p></blockquote>
<p>gmail の SSL 証明書を確認します。<br />
<code><br />
$ openssl s_client -connect pop.gmail.com:995 -showcerts<br />
</code></p>
<p>上のコマンドを実行すると、SSL 証明書が 2 種類出力されます。CN=Google Internet Authority の方は、/Users/naoya/etc/ssl/certs/gmail.pem、OU=Equifax Secure Certificate Authority の方は /Users/naoya/etc/ssl/certs/equifax.pem として保存します。<br />
そのあと、次のコマンドを実行します。<br />
<code><br />
$ c_rehash /Users/naoya/etc/ssl/certs<br />
</code></p>
<p>最後に、postfix はオンデマンドで起動するようになっているため、常駐起動に切り替える必要があります。<br />
/System/Library/LaunchDaemons/org.postfix.master.plist を編集します。<br />
次の内容を削除します。<code><br />
</code></p>
<blockquote><p>&lt;string&gt;-e&lt;/string&gt;</p>
<p>&lt;string&gt;60&lt;/string&gt;</p></blockquote>
<p>そして、次の行を追加します。</p>
<blockquote><p>
&lt;key&gt;KeepAlive&lt;/key&gt;<br />
&lt;true/&gt;
</p></blockquote>
<p>あとは、postfix を再起動します。<br />
<code><br />
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.postfix.master.plist<br />
$ sudo launchctl load -w /System/Library/LaunchDaemons/org.postfix.master.plist<br />
</code></p>
<p>これで、mail コマンドで実際のウェブアプリケーションでメールを送信することができるかを確認します。<br />
ログは、/var/log/mail.log に出力されています。</p>
<p>参考ページ</p>
<ul>
<li><a href="https://discussions.apple.com/thread/3216892?start=0&amp;tstart=0">Local Mail Server for Lion</a></li>
<li><a href="http://getapix.wordpress.com/2008/12/07/setting-up-gmail-with-postfix-and-fetchmail-on-osx-and-linux-laptops/">Setting up Gmail with postfix and fetchmail on OSX and Linux laptops</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/2117/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.404 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-16 16:39:53 -->
<!-- Compression = gzip -->
