2010年1 月5日  |  Written by matsumoto  |  under web技術 Yahoo!ブックマークに登録    はてなブックマーク - [雑感] 2010年の目標&所見など

明けましておめでとうございます、寒すぎます。松本です。

年末年始はちょっとコードを書きながら、魚介類をサバいて終えました。たまには駅伝をみながらまったりお雑煮を食べたいです。

今年の目標

今年はプログラム技術力、Webアプリケーションを開発する技術力を向上させ
もっと効率的に柔軟なシステムを作れるようになりたいと思っています。

Perl/mod_perl

弊社で利用しているプログラム言語は mod_perl なのですが、これをベースにSledgeというMVCを使い、Webアプリケーションを開発する事が主です。

mod_perlもSledgeも非常に高速で、素晴らしいアプリケーションなのですが、これの上にのせていくORマッパやその他モジュールが相当にメモリ食いで、[雑感] ありんくTech的2009年まとめ でも言及していますが、利用するモジュールによって、メモリ消費っぷりがエラく違います。

結果的に1台のサーバで処理出来る量が、メモリの使用量によって左右されることの無いように省エネでエコなプログラムを意識して参りたいと思います。
CPUはもうQuadCore任せで。

参考リンク

PHP

弊社でperl以外に扱っているプログラム言語が PHP です。

PHPは5.3.x以降を利用するようにしていて、perlと同様ですがメモリ消費を抑えたいと思い、ガベージコレクションの恩恵に預かりたいという意図であります。

PHP5.3の最新バージョンは 5.3.1 ですが RCバージョンの5.3.2 も登場し、安定性のある形になってきていると思います。
必須ツールである、XDebugAPC も5.3に対応しています。

memcache モジュールが memcached1.4のDELETEの仕様変更に対応していないので、こちらが惜しまれるのですが・・・

その他のプログラム言語

サーバサイドはperl/PHPですが、フロントエンド側の JavaScript CSS/HTML も引き続きやっていきたいと思っています。

特にCSSついては、ブラウザの種類が増えるほどに意識しないといけない事が増えていきますので
常にいじり続けたいと思っています。

JavaScriptはもうjQuery以外はほとんど扱っていません。jQueryは多分今年1.4がリリースされると思いますので、更に便利になると思います。
※jQueryについては tech-wiki にまとめてあります。

ActionScriptもトライ&エラーしたいのですが、先にiPhone/iPod用に対するWebアプリケーションの学習が発生しそうな予感です。

次の振り返りは多分5月末の35歳になりましたエントリ辺りの予感です。

ということで、今年もどうぞよろしくお願いいたします。

2009年12 月31日  |  Written by matsumoto  |  under web技術 Yahoo!ブックマークに登録    はてなブックマーク - [雑感] ありんくTech的2009年まとめ

こんにちは、松本です。
tech-logで2009年の総括をまとめるつもりで、ずるずるしていまい、大晦日にまとめてみました。

"34歳になりました&抱負"の記事 で書いていた事を全ては実践出来ず、若干に心残りではありますが、やれた事はおおよそ以下です。

TwitPepperのリリース

12月中順に TwitPepper(ツイットペッパー) をリリースしました。Twitterのデザインを簡単に変更したり、シェアリングできるサイトなのですが、とりあえず、まず1つサービスを定義する事ができた事が大変に良かったです。

本ブログの本格化

2009年3月より本ブログを本格的に書き始め、最低でも毎月2回程度は更新できました。お陰さまで色々な人に見て頂くことができました、ありがとうございます。

CPANやGoogleCodeでのプログラム公開

CPAN にモジュールが公開できたのも大変に嬉しかったです。
自分はmod_perl + Sldegeを使う機会が多いので、Sledgeのモジュール中心ですが、こちらもお役に立てると大変に嬉しいです。

GoogleCode では、jQueryのプラグインをUPしました。

Perlの高速・軽量なORマッパの学習

DBIx::SkinnyData::ModelDBIx::MoCo など、Perlの軽量なORマッパがリリースされた事が大変インパクトが大きく感じました。(MoCoの最終更新は2008年ですが・・・)

実際に今までプロダクション環境では Class::DBI(CDBI) を使うことが大変多かったのですが、 DBIx::Class(DBIC)は、移行するにはモジュールの規模が大きすぎたり、ちょっともっさり過ぎなどオーバーヘッドを相当に感じたため、躊躇していました。

それもあり、省エネ・軽量のORMに注目しています。この中で特に DBIx::MoCo を学習していて、使い方としては一番CDBIに近いのかなと感じています。
saveメソッドだけが、CDBIのUPDATEと大きく違うのでここの取扱がまだ慣れていないです。

ORMごとのメモリ消費量

現在メインで使っているCDBIを含め、ほぼ同じ動作をする際のメモリ消費量を比べてみました。
メモリ消費量の計測は おいぬま日報さんのgtop.pl を使用させて頂きました。

モジュール名 メモリ消費量(x86_64/64bit) メモリ消費量(i386/32bit)
Class::DBI(CDBI) 120M 24M
DBIx::MoCo 30M 8M
Data::Model 29M 6M
DBIx::Skinny 15M 2M

※メモリ消費量は1の位で四捨五入しています。
DBIx::Class(DBIC) は対象に入れていません。(そもそもメモリ食いなので)

64bit環境と、32bit環境でのメモリ消費量の違いも格段に目立ちますが、それでも DBIx::Skinny の省エネっぷりは目を引きます。

ORMはその習得自体のラーニングコストが結構にかかるため、ある程度目星をつけてからのトライ&エラーの方が望ましいとは思います。
が、DBIx::MoCo に慣れつつある昨今、それにしても DBIx::Skinny のメモリ消費の少なさに驚き、いきなり食いついてしまった次第であります。

参考リンク

jQuery1.3を早々に利用開始できた

jQuery1.3 のリリースで、セレクタの速度向上とliveイベントの新機能が大変便利になったと感じました。

liveイベントは本当に便利で、例えば既存のエレメントのノードに新しいエレメントを追加し、同じ挙動を適用させたい場合、
以下の様に書いていました。

//イベントハンドラの定義
var event_function = function(){ /* event function */ };
// 既存のクラスにイベントハンドラを適用
$('.hoge').click(event_function);
//エレメントの作成
var $element = $('<div class="hoge">NewElement</div>');
//イベントハンドラの追加
$element.click($event_function);
//エレメントの追加
$('#old_element').after($element);

これをjQuery1.3(実質は1.3.2)では、イベントハンドラとエレメント作成を完全分離できるので
以下の様に定義出来ます。

// イベントハンドラの定義
$('.hoge').live('click',function(){  /* event function */ });
//エレメントの作成→追加(イベントは自動で定義)
$('#old_element').after('<div class="hoge">NewElement</div>');

動的なエレメント追加にもイベントが追いかけてくれますので非常にシンプルに実装できる点が大変魅力です。
jQuery1.2.x環境から 1.3.2に移行しましたが、jQueryUIのライブラリ周りで若干ハマる程度で、jQuery本体は差し替えても
ほぼ綺麗に移行できるはずです。

蛇足ではありますが、jQuery1.4ではこのliveイベントでほぼ全てのアクションが定義できるようになるため、さらに便利になります。
※jQuery1.4については「jQuery1.4のα版がリリースされたようです」の記事で更に詳細を書いています、よろしければご覧下さい。

参考リンク

PHP5.3.x の利用開始

すでに PHP5.3.1 がリリースされているPHPですが、5.3のリリースで 無名関数、staticコール、ガベージコレクションが実装されたのが相当にインパクト大でした。

現在は全てのPHPを利用する環境のVerを5.3にすべく、調査している段階です。

弊社HPのiPhone版のリリース

弊社HP(http://www.alink.co.jp/)で、同一URLでiPhoneからのアクセスの時だけ
iPhone様のデザインでのサイトをリリースしました。

iPhone様のHTMLはCSSのfont-sizeの感覚が違ったり、UIの想定する動作が指(マウスではない)などでやや詰まりますが
全体としてそこまで難易度は高くなかったと思います。


ざっと考える限りは以上の様な具合です。

本当に歳を経るほど、時間の流れが速く感じまして
やろうと目標に掲げた事の半分も実践出来なかったような体感っぷりです。

来年は35歳になります。時の流れはどんどん高速になって行きますが
PGとして定年にならないよう、もっとソースコード自体をきちんと書き、保守性の高い、品質の良いプログラムを書けるように精進したいと思っています。

来年もどうぞ 株式会社ありんく をよろしくお願いいたします。

2009.12.31 松本 修士

2009年12 月5日  |  Written by matsumoto  |  under JavaScript, jQuery Yahoo!ブックマークに登録    はてなブックマーク - [JavaScript] jQuery1.4のα版がリリースされたようです

こんにちは、松本です。またまた雨で、悩ましい雨雲の動き であります。

jQuery1.4のアルファ版がリリースされたようです。

まだα版ではありますが、jQueryはバージョンアップ毎に処理が高速化されているので、大変楽しみです。まだ Downloadのページ には記載がありませんが、 同Blogの記事内 からダウンロードできます。


ダウンロード

  • こちらから ダウンロードできます。
    ※まだα版(試験版)ですのでご利用には十分ご注意ください。

主な変更点は以下のようです。(適当日本語訳です。)
※下記英語記述は jQueryBlog より引用しています。

変更点1 : live eventsの大幅な強化

live was drastically overhauled and now supports submit, change, mouseenter, mouseleave, focus, and blur events in all browsers. Also now supports context and data.

live 機能が大幅にオーバーホールされました。submit、change、mouseenter、mouseleave、focus、blurがサポートされました。

jQuery1.3以降、 live events という機能が追加されました。これは動的処理などで新しく加えたHTMLのノードに対して、予めイベントハンドラを定義しておく機能です。 詳しくは こちら をご覧下さい。

jQuery1.3.2までは、この機能は click、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、keydown、keypress,、keyup に対して定義されており、submit、change、mouseenter、mouseleave、focus、blur のイベントには定義されていませんでした。jQuery1.4a 以降は全てのイベントでlive eventsが使えるようです。

表にすると以下のような具合です。(※ jQuery日本語リファレンス・live(type, fn) を参考にさせて頂きました)

live events が機能するイベントハンドラ

jQueryのバージョン click、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、keydown、keypress,、keyup submit、change、mouseenter、mouseleave、focus、blur
1.2.x × ×
1.3.x ×
1.4.a

変更点2 : append prepend周りなどの最適化

append, prepend, etc. have been heavily optimized.

append prepend その他(の機能)は相当に最適化されています。

"その他"が何を意味するのかが大変気になりますが、少なくとも append/prepend 機能が最適化されています。

私見ですが、ここでいう最適化とは、ブラウザでのレンダリングスピード+メモリの省エネ効果を表していると推測しています。

変更点3 : add の返り値の調整

add has been adjusted to always return elements in document order.

add は常にドキュメントの中の列内のエレメントを返すように調整されました。

変更点4 : その他の最適化

find, empty, remove, addClass, removeClass, hasClass, attr, and css have been heavily optimized.

find、empty、remove、addClass、removeClass、hasClass、attr、css の機能が大幅に最適化されました。

変更点2の「その他」に該当する部分でしょうか、上記機能が最適化されているようです。

さらにその他の変更点

という感じです。その他の様々な変更点は こちらをご覧下さい との事で、見ていたのですが・・・ jQuery1.3.3 もリリースされる予定??

jQueryUIや各種プラグインの対応状況が気になるところではありますが、jQuery本体が毎回大幅にチューニングされていますので、移行しない手は無いと思います。
今回も正式リリースがされ次第、移行Todoに入りたい所存であります。


関連コンテンツ

外部リンク

私はチーム・マイナス6%です