Hatena::ブログ(Diary)

Web系システムエンジニアのつぶやき

2012-03-29

CPANモジュール読むと勉強になる…

オープンソースだと提供されているライブラリソースコードが公開されているので、ドキュメントを読んでよく分からなくてもソースコード読めばなにしてるかバッチリわかるし、自分自身の勉強にもなって一石二鳥ですな。

今仕事で触っているコードが

Class::Data::Inheritable

を使用していて、これアクセッサを簡単に作ってくれるライブラリなんだけど動き方はなんとなく知っててもなんでそう動くのかはよく分からんかった。

なので中身を読んでみると驚くほど短くそして洗練されていた。

これが本物のエンジニアのコードなのか…と思い知らされます。

こちらのブログに詳しい解説が載っていましたので参考にされると良いかも…

PerlのClass::Data::Inheritableの解析

2012-01-11

ネット業界の動きの激しさ

SIerからWeb企業に移ってみて、この業界の流れの速さを肌で感じる毎日。

SI業界にいたときも、Web2.0なりSOAなり流行っては消える言葉や技術に翻弄されながら時代の流れは早いと思っていた。

ところがどっこいWeb企業に来るとその速度がさらに半端無い。

例えば、流行りのソーシャルゲーム業界で言うと、わずか半年前まではトップランナーだったDeNAが3ヶ月前の第2四半期の業績ではGREE営業利益で抜き去られた

ページが見つかりません - SankeiBiz(サンケイビズ):総合経済情報サイト

GREE釣りスタDeNA怪盗ロワイヤルが出ていた頃から2年程度でソーシャルゲームは数百本はリリースされ完全にレッドオーシャンだ。

SNSでは5年前に日本でMixiが旺盛を極めていた頃はもはや懐かしく、爆発的に日本でも人数を伸ばしているFacebookに脅かされている(実質もう抜かれている?)状況だ。

■■■■■■■

このWeb業界の回転の速さを支えているのはなんといっても凄まじい勢いでまわるPDCAサイクルだ。新規サービスの立ち上げは数人の規模でわずか2,3ヶ月で行う。そしてデータから反省点を見つけ出し素早くサービスを改変・充実させていく。細かい機能は企画から実装、データ収集までが1週間で行われたりもする。

もし流行らなかった場合、それまでかけているコストが低いこともあって撤退も極めて早い。そして生き残ったサービスの中で売れたものだけをひたすら伸ばしていきリソースもそこに集中する。

SIerのように大きなプロジェクトではサービスインまでに年単位の作業が必要なものでは考えられないスピードで試行錯誤を繰り返せるため、そこから個人のスキルとして得られるものも半端ない。半年が経ちこのスピードにもぼちぼち慣れてきましたが、来てよかったなとは実感する毎日です。

2011-06-16

MySQLのExplainの読み方メモ

MySQLのExplain。前職にいたときはIndexを通っててFilesortがないことくらいしか確認していなかったが、改めて読み方を整理してみるメモ。

id
SQL内で出されるSELECT文1つ1つに割り当てられる番号。クエリー内の実行順というわけではない。サブクエリを出した場合は、PRIMARYに1番、サブクエリに2番などというようにつけられる。
select_type
クエリ内で実行されたSQLの種類。普通はSIMPLE。ネストされたSQLやUNIONした場合はクエリーの中での位置づけによりPRIMARY、UNION、DPENDENT UNION、SUBQUERY、DEPENDENT SUBQUERY、DERIVEDのいずれかが付けられる。
table
参照しているテーブル名。
type
対象のテーブルに対して索引を使っているか否か、また使っているならばどう使っているかが分かる。const、eq_ref、rangeなどなどはインデックスをそれぞれの条件にあわせて有効活用できていると言えそう。特に気をつけるのはここがindex又はALLの場合のようだ。indexはインデックスをフルスキャンしているので遅い(ALLよりはマシ)。ALLの場合はテーブルフルスキャン。小さなテーブルの全件更新バッチなど、本当にフルスキャンが必要な処理以外は改善必須。
possible_keys
オプティマイザが使用するインデックスの候補として挙げたキーの一覧。
key
possible_keysの中から実際にオプティマイザが選択した物
key_len
keyの長さ。
ref
検索時にkeyの比較対象となっているカラム。定数の場合はconstと表示される。
rows
クエリによって取得が想定される行数。実際に取得された数ではないところに注意が必要。実際やってみると結構違う。
Extra
クエリの追加情報。Using filesort、Using temporaryが表示された場合は注意が必要。filesortは取得結果に対してクイックソートが走っていることを示していて、using temporaryはクエリの処理に一時テーブルが必要であったことを示す。Using filesortとUsing temporaryが同時に表示された場合は、filesortの対象が何件になるのか考えチューニングしていくのが良さそう。

と、ここまで色々書きましたがこちらのサイトが極めて分かりやすくまとめてくれているので、こちらを参照された方が良いですね。

漢(オトコ)のコンピュータ道: MySQLのEXPLAINを徹底解説!!

2011-06-02 DataGenerator(自動データ生成ツール)

お久しぶりです。

外資系IT企業から転職してしまいましたのでブログのタイトルを改めました(^^;

新しい会社ではガリガリ実装する機会が多く、ぐぐってたどり着いたブログの技術情報が役に立つことが非常に多いので、

これからは技術的な事柄のメモ代わりにも使っていこうと思います。

早速ですが、テストデータの大量作成に適したツールを発見したんで載せておきます。

自動生成ツールDataGenerator

ツールの仕様上は5000件まで吐けるみたいですが、Web上のサンプルだと200件までしか表示されないようです...。

ダウンロードして自分の環境で動かすのが良さそうですね。

2011-02-06

Perl + Catalyst + Eclipse環境のインストール

大変お久しぶりです。

ちょっと最近思い立ち、LAMP環境でも本格的に勉強してみようと思い動き出したので勉強メモを残しておきます。

Amazonのウェブサービスなどの大手Web企業のPaaSもあるようだが、そんなに安定的にサービスを動かす必要もないので、格安レンタルサーバーに最終的な環境はデプロイすることにする。

開発の初期にリモートのサーバーにいちいちデプロイをするのも面倒なので、一旦は検証用環境をクライアントに置くことにする。VMWareを入れて、そこにLinuxを入れて構築しても良いのだがいちいちVMWareを起動するのもおっくうな気がする。

ということでまずはWindows環境にApacheとPerlを入れて、Eclipseで開発できないか調べてみる。

Perlなんて簡単なログ整形程度にしか使ったことがなかったので、PerlだけでWebアプリと聞いても全然ピンとこなかったのだが、CatalystというMVCのフレームワークがあるそうな。

第4回 Catalyst(前編)---Perl向けWebアプリ・フレームワーク - 簡単実装で学ぶWeb技術:ITpro

初めてのCatalyst入門(1) PerlによるWebフレームワークCatalystとは?(1/5):CodeZine

で、Eclipseで開発するためにはEPICなるプラグインを入れれば良いらしい。

スクリプト言語をサポートするEclipseプラグイン - @IT

というわけで早速インストール開始。まずはEclipseとPerl。Catalystは下記のActive Perlインストール後にPackage Managerなるものを立ち上げてから入れるらしい。

Eclipse for PHP Developers

ActivePerl Downloads - Perl Binaries for Windows, Linux and Mac ...

バージョンはそれぞれ下記の通り。

Eclipse:
3.6.1.r361
ActivePerl:5.12.2.1203

Eclipseはシンプルなやつでも良かったが、なんとなくPHPがバンドルされているやつにしてみた。

Windowsなのでインストールは楽々。

両方ともインストーラを起動して順調にインストール。

Eclipseのプラグインも、起動後にHelp -> Install New Softwareから下記のサイトをリポジトリに指定してインストール完了。

http://e-p-i-c.sourceforge.net/updates/

さて、これでEclipseとPerlは入った。

次にCatalyst。Codezineの解説によると、Perl Package Managerを開くと一覧に登録されているはずであるが、無い。ぐぐってみるとこんなものが。

[perlメモ]perlのフレームワークCatalystで遊んでみる その1 - KUMA TYPE

なるほど。リポジトリが足りなかったのか。というわけでCPANのURIをリポジトリに登録。

Catalyst::Manual::Installation

Perl Package Managerの中にCatalyst-Develが登場。インストールしてみる。依存しているパッケージが57個もあるらしい。全部まとめてインストールしてくれるようなので楽ちん楽ちん。

C:\の直下のコマンドプロンプトでサンプル用にHelloプロジェクトを作ってみる。

C:\ catalyst.pl Hello

しかし何やらエラーが出る。何かの依存関係がしくっているような感じ。ぐぐってみても詳細が出てこなかったため、ActivePerlごと一旦アンインストールして5.8.9.828をインストールし直す。

そしたら今度は無事にCatalystのサンプルアプリケーション作成完了。hello_server.plを動かしてサーバーを起動。

C:\Hello\script\hello_server.pl

下記URLにアクセス。

http://localhost:3000/

無事にサンプルページが表示された。簡単だ!

最後に作成したプロジェクトをEclipseに入れてみる。

EclipseでFile -> New -> ProjectでPerl Projectを指定して、プロジェクト名をHello、パスをHelloプロジェクトのルートフォルダに指定してFinishを押すとちゃんとインポートされた。

サーバーの起動も、Run -> Run ConfigurationsでRun Configurationウィンドウを立ち上げて、Perl Localで右クリック -> newで新しいConfiguraitonを作る。MainタブのProjectにHelloプロジェクトを指定して、File to Executeにscript/hello_server.plを設定すればすぐに起動できる。

ただ、サーバーが起動している間にソースコードを書き換えて保存してもサーバーを再起動させないと反映されない…。何か方法があるのかもしれないけどとりあえずはこれでOK。

次回以降はPerlで勉強した内容についてぼちぼち書いていこうかなと思っています。