ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索

2009-06-30

SPIDERストレージエンジンの近況など

SPIDERストレージエンジンの作者である斯波氏がブログを始められたそうだ。

Wild Growth 日本語版
http://wild-growth-ja.blogspot.com/

英語版もあるが、ここでは日本語版を紹介させて頂く。現時点で投稿されているトピックは2つ。
  • SPIDERストレージエンジン0.12リリース
  • 新しいストレージエンジン「Vertical Partitioningストレージエンジン」のリリース
なんと!Vertical Partitioningとは興味深い。中身が気になる方は斯波氏のブログをチェックだ!!

というわけで更新頑張ってください。楽しみにしています!>斯波氏

2009-06-28

オトコの近況 - ブログ停滞中のワケ

最近めっきりとブログの更新が遠のいている。

ついにネタ切れか?!

力尽きたか?!

中二病完治か?!


などという心配はしないで頂きたい。至って快調にマイペースで筆を進める毎日を送っている。ただしブログにではなくMySQL関連の書籍として。ブログは書籍の執筆が完了してから本格的に再開しようと思うので、その際にはまた是非お付き合い頂きたい。書籍も頑張って書いているので是非よろしくお願いしたい。

今書いてるのはこんな内容のものだ。原稿からプチ抜粋。

クエリキャッシュのヒット率はどのように計算すれば良いのでしょうか?ここで改めて説明するために、上の一覧ではクエリキャッシュについては敢えて省略しましたが、クエリキャッシュのヒット率は次の計算式で求めることが可能です。

Qcache_hits / (Qcache_hits + Com_select)

Qcache_hitsは文字通り、クエリキャッシュにヒットして、キャッシュからクライアントへ結果が送信された回数です。キャッシュミスが発生すると、MySQL ServerはSELECT文を実行してテーブルに対してクエリを行い、その際にCom_selectをカウントアップします。つまり、クエリキャッシュが有効になっている場合は、Com_selectがキャッシュミスをした回数を表すのです。SELECTを実行して結果を取得すると、クエリキャッシュへ結果がキャッシュされる場合と、結果セットが大きすぎる理由などによってキャッシュされない場合があります。キャッシュされた場合はQcache_insertsがカウントアップされ、されなかった場合にはQcache_not_cachedがカウントアップされます。従って、次のような関係式が成り立つでしょう。

Com_select ≒ Qcache_inserts + Qcache_not_cached

これを上記の式に代入すると、クエリキャッシュのヒット率は次のように変形することが可能です。

Qcache_hits / (Qcache_hits + Qcache_inserts + Qcache_not_cached)

Com_selectは離れた位置にあるので、Qcache_%だけを見てヒット率が判断できるこの式を用いると便利でしょう。この式ならば「SHOW GLOBAL STATUS LIKE 'Qcache%'」というコマンドでステータス変数を表示するだけで事足ります。

本のタイトルは「金利0無利息キャッシング - クエリキャッシュできます!!」ではなく(ってかそのタイトルはパクリだよ!>俺)もっと広い範囲の内容をカバーした書籍になる予定なのでタイトルもそれに相応しいものになるだろう。タイトルは書き終えたら発表します。

書籍は書いていてもPlanet MySQLのチェックは欠かさないのが日本男児たるものの嗜みだが、ちょうど本日sh2氏による魂の籠もった検証結果報告のエントリが投稿されているので以下に紹介させて頂く。

MySQL InnoDB Pluginのデータ圧縮機能
http://d.hatena.ne.jp/sh2/20090628

InnoDB Pluginとは、MySQLに組み込まれているInnoDBを置き換えるストレージエンジンで、デフォルトのものにはない特徴を備えている。sh2氏によって検証が行われているデータ圧縮機能はInnoDB Pluginだけで使える拡張機能である。だからアナタが使ってるInnoDBでデータ圧縮が出来なくても不具合ではないので焦らないように!InnoDB Pluginを利用するには、以下のページからダウンロードしてインストールする必要があるのでチャレンジャーな人達は試して頂きたい。
http://www.innodb.com/products/innodb_plugin/download/

インストール方法はこちら。
http://www.innodb.com/doc/innodb_plugin-1.0/innodb-plugin-installation.html

sh2氏によると、Wikipediaのデータをおよそ半分に圧縮できたらしい。なんと、InnoDB Pluginを使えばデータ量が約半分になるということである。これはかなりの節約になるだろう。

ところで、とても偶然なタイミングなのだが、IBMの中の人もDB2の圧縮機能の検証をされていたようである。

ClubDB2 場外ブログ: 圧縮機能で遊んでみる

http://clubdb2.blogspot.com/2009/06/blog-post_27.html

こちらも圧縮した結果は半分程度だそうだ。

つまりInnoDB PluginとDB2 V9.xの圧縮機能は互角?!高価な商用データベースであるDB2と肩を並べるぐらいの圧縮率というのは、InnoDB Pluginの圧縮機能はかなり優秀だと言っていいのではないだろうか。

2009-06-13

MacOS XでTwitterをSkypeのムードメッセージに

最近Twitterを始めたのだが、Twitterに投稿した呟きをSkypeのムードメッセージに反映したいと思うのは、男と女が惹かれ合うがごとく自然なことだろう。ちなみに、Skypeのムードメッセージというのは、名前の横っちょに表示される短いメッセージのことだ。Skypeを利用している人ならご存じだろう。

Skypeのデフォルトの機能では、Twitterからメッセージを拾ってくることは出来ない。さてどうしたものか?とGoogle先生に聞いてみたら、既に連携している人が居るではないか。このサイトで掲載されているプログラムを動かすべく、DBusやらpkg-configやらをインストールしたり、CPANで各種Perlモジュールをインストールしまくったりして、無事にこのプログラムを動作させることが出来た。しかし動作エラーが出てSkypeのムードメッセージが変更されない。なんでかな?と思ってさらに色々調べた結果・・・気がついた。「あ、これLinux専用じゃん!」

そんなわけで一連のインストール作業は徒労に終わったわけだが、日本男児たるものその程度で諦めるようではいけない!

気を取り直してちゃんと調べたところ、Mac OS XではSkype.frameworkを使ってSkypeをコントロールすることができるということが分かった。(最初から気づけよ>俺)このフレームワークを使って書かれたTwitter/Skype連携プログラムは存在しないようだし、ならばしょうがないからこのフレームワークを使ってプログラムを書くか!ということになるわけですな。

で、出来たプログラムがこれ↓

#!/usr/bin/ruby

require 'rubygems'
gem 'twitter'
require 'twitter'
require 'osx/cocoa'
OSX.require_framework 'Skype'

class SkypeMood < OSX::NSObject
def clientApplicationName
return 'Skype Mood From Twitter'
end

addRubyMethod_withType 'skypeAttachResponse:', 'v@:i'
def skypeAttachResponse(status)
return if status != 1
puts 'Successfully connected to Skype!'
end

def isRunning
return OSX::SkypeAPI.isSkypeRunning
end

def setDelegate appname
OSX::SkypeAPI.setSkypeDelegate self
end

def setMood text
OSX::SkypeAPI.sendSkypeCommand "SET PROFILE MOOD_TEXT #{text}"
end
end

class AppController < OSX::NSObject
@DEFAULT_INTERVAL = 60
attr_accessor :sm

def setAuth email, pass
@httpauth = Twitter::HTTPAuth.new(email, pass)
end

def initTimer interval
OSX::NSTimer::scheduledTimerWithTimeInterval_target_selector_userInfo_repeats(checkInterval(interval),self,:timerJob,nil,true)
end

def checkInterval interval
return interval == 0 ? @DEFAULT_INTERVAL : interval
end

def timerJob
return unless @sm.isRunning
timeline = Twitter::Base.new(@httpauth).user_timeline
@sm.setMood timeline[0].text
end
end

def usage
puts "Usage: #{$0} your.name@domain.com password [check interval]"
exit 1
end

usage if ARGV.length < 2

sm = SkypeMood.alloc.init
OSX::SkypeAPI.setSkypeDelegate(sm)
OSX::SkypeAPI.connect

c = AppController.new
c.setAuth ARGV[0].to_s, ARGV[1].to_s
c.initTimer ARGV[2].to_s
c.sm = sm

OSX::NSRunLoop.currentRunLoop.run

即興で作ったプログラムなので、なんでRubyなの?とかエラー処理が甘いんじゃね?などという点には目をつむって頂きたい。

使い方は簡単。

1. まずはこのプログラムを/usr/local/bin/twittermood.rbなどに保存しよう。

2. コマンドを実行する。

shell> twittermood.rb メールアドレス パスワード インターバル

これらはTwitterに登録したメールアドレスとパスワードを使う。インターバルは秒単位だ。

3. Twitterに投稿する。

4. しばし待つ。

5. Skypeのムードメッセージに反映される。

6. プログラムを終了させるときはCtrl-CまたはkillコマンドでOK。


ただし、このプログラムはそのままでは利用出来ない。このプログラムで利用しているtwitter gemSkype.frameworkをインストールする必要があるからだ。

Skype.frameworkのインストールは簡単だ。次のコマンドを使おう。

shell> sudo cp -r /Applications/Skype.app/Contents/Frameworks/* /Library/Frameworks

twitter gemは、gemコマンドでインストールすることが出来るのだが、gem自信のバージョンが1.3.1以上でないとインストール出来ないので、まずは先にgemをアップグレードしなければならない。俺のマシンでは、元々インストールされているgemは1.0.1だった。gemのアップグレードとインストールを行う一連のコマンドは次の通り。

shell> wget http://rubyforge.org/frs/download.php/57643/rubygems-1.3.4.tgz
shell> tar zxf rubygems-1.3.4.tgz
shell> cd rubygems-1.3.4
shell> sudo ruby setup.rb
shell> sudo gem install twitter

そんなわけでTwitterの投稿をSkypeムードメッセージに登録したい人はお試しあれ!


追記: 上記のプログラムのライセンスはもちろんGPLv2 or later!!

2009-06-03

そもそも日本のIT業界が残念だ。

梅田望夫氏のインタビューに対して様々な反応が上がっている。
俺に言わせてみれば、Webだけでなく日本のIT業界そのものが残念だ。

俺は、2000年に大学院を卒業してからSun Microsystemsの門を叩いた。なぜSun?という疑問は色々とあるだろうが、いずれにしても外資系が良かった。日本企業に勤める気にはならなかった。なぜか?

日本のIT業界が残念なことになっていたからだ。

周りを見渡してみよう。一体どれだけの(人気のある)コンピュータ製品が日本製だろうか。俺は今、MacBookでこのブログを書いている。組み立てはどこの国で行われたかは知らないが(たぶん台湾あたりか?)設計したのはアメリカの企業であるAppleだ。

サブマシンで使ってるLinuxは北欧の人が設計した。

最もシェアの高いOSはWindowsであり、これまたアメリカ製である。

スマートフォンのOSは、Android、iPhone OS、WM、Symbian OS、WebOSなど様々だが、いずれも海外のものだ。

今俺の本職であるデータベースだって、オープン系システムで利用されるものはほとんどが海外製のものばかりである。MySQLはスウェーデン生まれだ。

ハードウェアはどうだろう?メモリやHDDは日本製のものもあるが、花形であるCPUはIntel/AMD/VIAなど海外勢ばかりであり、GPUもnVidia/AMDとこれまた海外である。おっと・・・最近富士通が世界最速のCPUを発表したところだった。10年ぶりに。

そんなわけで、日本のIT製品・・・特に基盤となるソフトウェアは、海外発のものを輸入して利用しているのがほとんどである。俺はそれが残念でならない。

だから外資系企業に入って、日本ではなく海外の技術を学ぼうと考えたわけだ。ただし配属された部署の関係で、あまり希望するような仕事は出来ず、お世話になったSunを去ってMySQLへ転職したわけだが、どういう因果なのかまたもやSunに買い戻されてしまい、今度はそのSunが買われることになってしまった。これまた残念なストーリーである。

Webが残念なことになっているというのは、IT業界そのものの体質だと思えばそれほど不思議ではない。元々日本のIT業界は世界をリードする立場に無かったのだから、それがWebで立場が変わる方が不思議なのである。

なぜ日本のIT業界は残念なことになっているのか?社会に出て、俺なりに経験を積んできた中で思うことには、例えば次のようなことが挙げられる。
  1. 技術者の待遇がよくない。出世するには管理職にならなければならない。技術を学んでも待遇がよくならないので、技術を学ぶことに対するインセンティブが業界全体で低い。
  2. ソフトウェアのライセンスはプロプラエタリなものばかりで、開発者がその方が良いと信じている傾向がある。実質的には経営者や営業職など、開発職以外の人達だけが得をしている。
  3. 国内市場向けの商品が大半である。特にソフトウェアでは顕著であり、日本から海外へ販売している例は少ない。Web系のサービスではもっと顕著で、殆どが国内消費向けである。
  4. 言語の壁が高い。
このように分析してみると、日本で開発されたものが世界標準になる可能性は極めて低いと考えざるを得ない。とても残念なことである。

じゃあどうすればいいか?結論だけ書くと、
というわけだ。こんな風に考えているので、俺は今のところ身を置いているわけである。今が残念ならば、少しでも良い方向へ進むよう努力すべきなのである。

日本発のもので勢いがあるものもある。例えばRubyだ。俺はRubyを猛烈に応援・支持している。松本さん、頑張ってください :)

正直言って、Webには国境はないのに、日本むけのサービスばかり展開していては勿体ないという気持ちもある。海外でもサービスを展開できればビジネスの規模も大きくなるし、Web系の企業は是非とも日本市場だけにとらわれない経営をして頂きたいものだ。

2009-06-01

あの漢(オトコ)が・・・ブログを始めた!!

現在、MySQL Performance Blogおよびその運営会社であるPerconaで活躍中の木下氏が、なんと日本語でブログを始めた。




木下氏はInnoDBのスペシャリストであり、おそらく実力はアジア一だろう。しかもレプリケーションなど、MySQLの他の機能に関しては、興味もないし知らないという尖った知識の持ち主である。尖ったオトコが綴るブログに期待したい。

初稿はInnoDBにおけるテーブルスペースのインポートのHackに関する内容だ。これまで、innodb_files_per_tableオプションを利用している際にできるInnoDBのテーブルスペースのインポートは、テーブルスペースIDがマッチしていないといけないなどの制約があって面倒だったが、その辺の不都合な箇所を改良して任意のテーブルスペースをインポートする機能を、彼がInnoDBからforkしたXtraDBに実装していますという内容だ。

これからもどんどんマニアックでディープな記事が投稿されることだろう。彼のブログ発進を喜びたい!!