「Google JavaScript Style Guide」の文法チェックツール + vim で JavaScript の開発を2倍楽にする方法

Google が先日 JavaScript のコーディングスタイルガイド Google JavaScript Style Guide (邦訳) を発表しましたが、今度はその文法に沿ってチェックをしてくれる Lint ツール Closure Linter を公開したようです。(via. 「Google JavaScript Style Guide」…

iPhone の Mobile Safari で JSON を(エン|デ)コードする

JavaScript でデータを扱っていると、JSON でシリアライズなどしたくなりますが、Safari 4.04 や FireFox 3.6.8 では、JSON.stringify() や、JSON.parse() が使えますが、iOS 3.1.2 の Mobile Safari には実装されてません。そこで、ネイティブで JSON が実…

Plack::Test で HTTP クライアントのテストを書く方法

先日、WWW::Curl をラッピングした HTTP クライアントなモジュールを書いたのですが、テスト用に HTTP サーバーを用意しないといけないと思いつつ、他の HTTP クライアントがどのようにテストをしているか調べてみたところ、WWW::Curl は、 my $url = $ENV{C…

EC2 に MySQL (InnoDB Plugin + Q4M) インストールからセットアップまで

インスタンス:m1.small 対象 OS:Ubuntu 9.04apt で入る MySQL は 5.1.31 とちょっと古いので、MySQL 公式で配布しているバイナリを利用しました。備忘録です。 前準備 ユーザー作成 UID/GID などは Ubuntu 9.04 の MySQL パッケージのトリガースクリプトが…

Server::Starter + Starman で HUP 再起動が上手くいかないことがある

現在、Server::Starter + Starman で運用している環境があるのですが、週に1回ほど古いワーカーが終了しないで残り続けるという現象が起こっています。FCGI 起動の名残りで、毎時間 HUP を投げていたのですが、普段は問題なく starman プロセスが再起動して…

クリエイティブなエンジニアに起業のチャンス

8月3日にサイバーエージェント・インベストメント主催でクリエイター支援のイベントの一つとして、エンジニア向けの無料カンファレンスがあるそうです。 http://www.cai.co.jp/startups2010/技術系の講演は、 えとらぼバタラ氏 ウノウ山田氏 モバツイの藤川…

動的に変わる EC2 のインスタンスの IP アドレスを自動収集するスクリプト書いた

EC2 は便利なのですが、プライベート IP アドレスが変更されない保証が無いので、/etc/hosts に他のインスタンスのアドレスを書いておいても、ある日変わっている可能性があります。そこで、ec2-api-tools の ec2-describe-instances でサーバーインスタンス…

Perl で時刻の文字列を生成する速い方法

DateTime が重くて遅いのは周知ですが、一応どれくらい差が出るかベンチマーク。「2010-07-01 15:10:53」みたいなフォーマットのタイムスタンプ文字列を生成したい場合です。DateTime はオブジェクトをキャッシュして使い回しても相当遅いです。POSIX はコア…

ローディングアイコンを画像の代わりに canvas でアニメーション描画

アニメ GIF だと、背景色に合わせて透過画像を作らないといけないので、canvas でアニメーションしてみました。ソースはこちら http://gist.github.com/380581loading = new LoadingIcon('rgb') したのちに、 loading.start() すると setInterval() でアニメ…

超初心者向け vim チュートリアル

意外と知られていないのですが、vim には、まったくの初心者が、基礎的な一通りのコマンドを数日で完全に覚えることができるチュートリアルプログラムが付属しています。そのプログラムは、vimtutor といい、Ubuntu の場合、vim-runtime パッケージに含まれ…

mysql クライアントの操作性を psql コマンドと同じように良くする方法

mysql コマンドでは、psql や bash のように、Ctrl+W で単語だけ消そうと思っても行が全部消えてしまったり、Ctrl+R でコマンドヒストリ検索できなかったりと、PostgreSQL の psql コマンドに比べると大分不便でイライラするので、操作性を向上させます。mys…

HTML タグをエスケープする方法 3 通りと速度比較

HTML::Entities を使う方法と、正規表現を段階的に使う方法と、変換テーブルを用意して正規表現で置換する方法と、どれが一番速いか気になったので計測してみました。& から順番に変換していく方法が一番速かったです。ベンチマークスクリプトは以下です。 R…

EC2 で s3fs を動かす方法

下記の環境で s3fs を動かそうとしたのですが、すんなり行かず、ググっても参考情報が少なかったので作業ログを残します。 ami-ccf615a5 alestic/ubuntu-9.04-jaunty-base-20091011.manifest.xml Linux 2.6.21.7-2.fc8xen-ec2-v1.0 #2 SMP Tue Sep 1 10:04:2…

Tokyo Tyrant 用テストモジュール Test::ttserver リリース

Key Value Store の Tokyo Cabinet のデータベースサーバーである、Tokyo Tyrant のインスタンス起動管理サーバーの ttserver をテスト用に一時的に起動できる Test::ttserver をリリースしました。http://search.cpan.org/~craftwork/Test-ttserver-0.001/l…

Test::Dependencies と Module::Install でテストが通らない

依存モジュールの指定漏れを防ぐ方法 - 名称未設定 - subtechMakefile.PL に書き忘れている依存モジュールを自動検出してくれるテストモジュール Test::Dependencies ですが、Module::Install と併用していると、テストがコケます。これは、Module::Install …

例外捕捉モジュール Try::Tiny のベンチマーク

Yuval Kogman 氏が Try::Tiny という新しい例外捕捉モジュールをリリースしたようなので、ベンチマークを取ってみました。ベンチマークコードは、Error.pm のオーバーヘッドで書いたものを流用しました。

vim に ClearSilver の Syntax Highlight 定義を追加する方法

ClearSilver を使っている方はあまりいらっしゃらないと思いますがメモ。 以下をターミナルにコピペでセットアップ完了です。via. http://www.vim.org/scripts/script.php?script_id=1100 mkdir ~/.vim cd ~/.vim wget -nv -O - 'http://www.vim.org/scripts…

馬鹿にできないアクセサのオーバーヘッド

Moose は has でアクセサ定義できるので便利なのですが、アクセサは要はサブルーチンコールなので、パフォーマンス気にして作っているサービスではオーバーヘッドが気になるなぁと思い、ちょっとベンチ取ってみました。ベンチマーク対象は、Moose で作成した…

空文字列比較は eq/ne と length のどっちが速いか

最近、空文字列のチェックの際に、面倒臭くて $_ eq '' の代わりに、空文字列だと length が偽を返すことを利用して、自分しか見ないようなソースでは以下のように書くことが多いのですが、 return unless defined and length; パフォーマンス的には、$_ ne …

Catalyst で setup にかかった時間を表示する

Catalyst はデフォルトでリクエスト毎の処理時間をログ出力してくれますが、setup() 時の処理時間は表示してくれません。チューニングの目安として見たいので実装してみました。Upgrading to Catalyst 5.80 で紹介されている、setup の hook point を使いま…

一番近い CPAN ミラーを検出するスクリプトを書いた

READ IN ENGLISHCPAN モジュールをインストールするときに、ダウンロード速度が気になったので、ミラーサイトから一番近いサイトをピックアップするスクリプトを書いてみました。CPAN から、MIRRORED.BY を取ってきて、dst_http に指定されているホスト全て…

プロ・アマ・プログラミング言語を問わずに今までの4倍のスピードで学習する方法

私が実践して、とても効果が上がった学習方法を紹介します。 どんなプログラミング言語でも関係なく通用するやり方だと思います。 この学習方法に切り替えてからの 1 年の学習量は、それ以前の 4 年分に匹敵すると感じています。以下にその方法を紹介します。

CPAN Module How To - Text::SimpleTable

READ IN ENGLISHシリーズ化できるか分かりませんが、Google で検索しても、あまり情報が無かった CPAN モジュールの使い方を紹介していきたいと思います。先ほど、アップデートされていた Text::SimpleTable を紹介したいと思います。0.05 から 1.0 になって…

スピード対決 TIMESTAMP vs INTEGER

時間のカラムに TIMESTAMP を使って、PostgreSQL (8.3.7) に時間を計算させるのと、INTEGER でエポックを入れておいて、perl 側で時間計算をして SELECT するのと、どちらが速いのかふと気になってベンチマークを取ってみました。10万件のランダムな日時なレ…

if と exists と my と delete を 1 行で表現する

段階的にこう書くところを if ( exists $hashref->{'key'} ) { my $value = $hashref->{'key'}; delete $hashref->{'key'}; do something... } key の削除を先に行っても問題なければ、まとめてこう書くことも出来ます。 if ( my $value = delete $hashref->…

Perl スクリプト - 自動バックアップ

最近 Nas を導入したので、Linux から重要なファイルを自動でバックアップするスクリプトをサクっと Perl で書いてみました。単にシェルスクリプトでエラー処理書くのが面倒臭かっただけですが。 コアモジュールしか使ってません、Perl 5.005 とか古いバージ…

Template-Toolkit のテンプレートファイルを vim で色付きにする

昨今のディストリビューションに入ってる vim はほとんどデフォルトでカラー表示に対応しています。せっかくなので、TT のテンプレートファイルもカラー表示対応にしましょう。TT2 syntax : Syntax Highlight for Template-Toolkit 2.x 上記ページからシンタ…

Catalyst を daemontools で監視しつつ lighttpd の外部 FastCGI で走らせる方法とそのメリット

JPA セミナーの時に jshery 氏も勧めていましたし、近頃 Geek の話題で目立つようになってきた、Catalyst を mod_perl でなく、外部 FCGI として走らせる設定方法を紹介します。Catalyst プロセスの起動管理は DJB 氏の daemontools による管理がお勧めです…

Catalyst ベースのアプリケーション設計(構想)

Catalyst は Web アプリケーションを開発するときに、フレームワークとしてとても便利です。ひとつの Web サービスを作ろうとすると、以下のような様々な処理が必要になってきます。 ユーザーに見せるWeb インターフェイス アクセス集計などの日次バッチ処理…

YAML ではどう書くか perl に教えてもらう方法

設定ファイルを書くときに、単純なハッシュやリストのときは良いのですが、データ構造が複雑になってきたときは、ちょっとややこしくなってきます。そんなときは、YAML::Dump() に教えてもらえます。