location設定に左右されない認証のかけ方

Wordpress などでマルチサイトやら色々設定していると、Basic 認証などかけたいときに、location ディレクティブの適用優先順位で混乱することがある。そういうときは、下記のように記述すると、location ディレクティブの設定の影響は受けないので、すっき…

FormValidator::Lite で Xslate のテンプレートの文法チェックをする方法

そこそこ大きい Web アプリを作ってると非エンジニアに管理画面でテンプレート編集させたりするケースもあると思いますが、文法チェックをしないと、テンプレートがレンダリングできないがためにシステムがコケるとかいう悲しい事態が起こったりするので、チ…

Ubuntu に公式レポジトリの nginx を入れる

Ubuntu 12.04 LTS でデフォルトで入る nginx パッケージは現時点(2013/10/18)でバージョン 1.1.19 と大分古いです。最新バージョンは 1.4.3 なのでレポジトリを apt に登録します。 sudo add-apt-repository ppa:nginx/stable あとは、普通にインストール…

nginx + php5-fpm で真っ白なページしか表示されない時の対処

大分ハマりました。 ubuntu/12.04 nginx/1.2.7 php5-fpm/5.4.6結論から書くと、Nginx 公式のリポジトリから取得したパッケージには、fastcgi_param 用の設定がデフォルトで一通り入っていますが、いくつか記述が無いものもあります。下記の PATH_TRANSLATED …

Ti.Filesystem.File で知らないとハマること

Ti.Filesystem.resourcesDirectory は read-only です。 シミュレーターだと書き込みできてしまうため、実機でハマります。https://wiki.appcelerator.org/display/guides/Filesystem+Access+and+Storage Ti.Filesystem.resourcesDirectory: A read-only dir…

ImageView.addEventListener('load', listener) する時に無限ループする場合があるので注意

var listenerImage = function(e) { var image = e.source; var blob = image.toBlob(); // blob.imageAsResized() とか適当な画像処理 image.image = blob; }; var image = Ti.UI.createImageView({ image: imageUrl }); image.addEventListener('load', li…

ScrollView の中に入れた TableView が行数が増えても自動的に高さ調整させる方法

ScrollView の中に TableView を入れていると、TableView の内容を動的に変更している場合に、何も指定しないと高さを再計算してくれないので、スクロールが働かなかったりします。解決策は、TableView と全ての TableViewRow に、height: Ti.UI.SIZE を指定…

FormValidator::Lite::Upload を Mojolicious に対応させる

多分こんな感じで行けるんじゃないでしょうか。FormValidator::Lite::Upload を Mojo::Message::Request に対応して、 --- perl5/lib/perl5/FormValidator/Lite/Upload.pm 2012-06-06 00:40:55.000000000 +0900 +++ lib/FormValidator/Lite/Upload.pm 2012-0…

他のライブラリとの競合を避けたブロックスコープの書き方

色々なライブラリを使用している既存のページなどで、ちょっとした処理を挟みたい場合、Prototype などと、$() が現状・将来的にも競合しないようにするには、 jQuery.noConflict() を一般的に使いますが、もっと影響範囲を狭く、シンプルに実現する方法が以…

Mojolicious 始めました

最近ようやく Mojolicious に手を出し始めました。プロダクション環境に導入するかは、まだ未定ですが、ソースコードを読みながら試用しています。Catalyst の原作者が DRY でなく DIY で作っているとのこと。Moose 依存などはなく、コアモジュールにしか依…

環境に左右されない PERL5LIB を設定する .profile の書き方

プロジェクト用のモジュールを extlib とか専用のディレクトリを掘っていると、それを @INC に突っ込まなくてはいけないので、ブートストラップスクリプトで調整したり、開発用に .bashrc や .profile に書くと思いますが、モジュールがインストールされるデ…

AWS Route53 でホスト名にワイルドカードを設定する方法

下記のように に *.example.com を指定して に IP アドレスを指定するだけです。 に CNAME を指定することもできるようです。(未確認) <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2011-05-05/"> <ChangeBatch> <Comment>This change batch creates a A record for *.example.com.</Comment> </changebatch></changeresourcerecordsetsrequest>

Plack ベースで作った Web サービスとそのシステムアーキテクチャ

本日、TVTalk という Web サービスをリリースしました。Twitter 上で、テレビ局のハッシュタグが付いているツイートを拾って、放送中の番組情報と紐付けるという、アグリゲーターサービスです。リアルタイムにタイムラインを追うにも、放送済み番組の内容を…

my と state のパフォーマンス比較

最近の Linux ディストリビューションの perl は 5.10 以上になってきた感じなので、最近は state など新しい機能を使うようになってきました。そこでちょっと気になったので state のパフォーマンスを計測してみました。ベンチマークコードは以下。動作が全…

CONVERT_TZ() が正しい結果を返さないときの対処法

4.10.8. MySQL サーバのタイム ゾーン サポートにある例のクエリを投げたところ、CONVERT_TZ() の結果が NULL になってしまっていました。 > SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); +-----------------------------------------------+ | C…

MySQL Casual Talks #1 発表資料

MySQL Casual Talks #1 の発表資料を UP しました。MySQL 初めてのチューニングView more presentations from Craft works.資料の中でも言及しました、hirose さんが作成された mymemcheck という素晴らしいツールを !includedir に対応して Readonly.pm 依…

Nginx で Elastic Load Balancing などの Proxy の内側で正しい IP アドレスを取得する

EC2 だと ELB の内側では、nginx のアクセスログに ELB の IP アドレスが記載されてしまうので、HttpRealIpModule を使って Apache の mod_rpaf、lighttpd の mod_extforward と同じような挙動を設定します。configure オプションに --with-http_realip_modu…

warning メッセージ予防策

普段、wanrning を見つけるたびにせっせと defined 挟んだりして対応しているのですが、View の中で呼ばれてる箇所など、うっかり気付かないで数日過ぎてしまうと、あとで該当箇所を追うのが若干手間になってしまったりします。そこで、 use warnings FATAL …

Macbook Air 11'' を Ubuntu 10.10 とデュアルブートにしたまとめ

あまり日本語情報も無いようなので、メモ書き程度に紹介しておきます。新型 Macbook Air 11'' に Ubuntu 10.10 サーバー版 64bit をインストールしました。Boot Camp は使っていません。大まかな流れは、 OSX で rEFIt の導入とパーティション割り当ての調整…

Test::mysql で起動したインスタンスに mysql クライアントで接続するとテストがさらに快適に

昨日書いたエントリ、Test::mysqld を別ウィンドウで立ち上げたら開発時の prove が快適過ぎる件ですが、prove とか make test がコケたりしたときに、実際に DB の中身がどうなってるか見れた方がデバッグが捗りますよね。加えて、どうせなら使い慣れた mys…

ハッシュのキーとバリューを入れ替える方法

[追記] reverse() を使う方法の方が速くて簡潔でお勧めです! id:tomi-ru++あまり必要になるケースは無いと思いますが Tips です。 use strict; use warnings; use Test::More; my %a = ( foo => 1, bar => 2, baz => 3, ); my %b; @b{ values %a } = keys %…

Test::mysqld を別ウィンドウで立ち上げたら開発時の prove が快適過ぎる件

id:xaicron 氏が紹介なされていました make test で Test::mysqld を永続化させる方法 を早速導入していたのですが、make test は速くなって便利なのですが、prove で 1 つずつテストをするときは、相変わらず mysqld を毎回、起動・終了するので時間がかか…

Ubuntu に含まれている MySQL 及び InnoDB Plugin のバージョン

Ubuntu の apt で入る MySQL のバージョン Ubuntu 9.04 mysql-server 5.1.30 Ubuntu 10.04.1 LTS mysql-server 5.1.41 InnoDB Plugin 1.0.5 (RC) と、いうことで InnoDB Plugin を使いたかったら Ubuntu 9.04 では MySQL 公式サイトからパッケージを持ってく…

vim の SQL のシンタックスハイライトを MySQL 専用のものに変更する方法

id:tokuhirom 氏の use mysql syntax を読んで、これは良いと思い、早速自分の環境に適用しました。件の設定をどこに書くかですが、:help new-filetype (日本語訳)にどこに書くべきか何通りか紹介されています。自分は、C. ファイル形式が名前だけで検出で…

WWW::Curl で使えるオプション一覧

WWW::Curl は速いですがドキュメントが少ないのが玉に瑕です。perldoc に setopt() や getinfo() で指定できるオプション一覧が載っていないです。実は PHP のマニュアルに良い感じで載っています。setopt() に指定できるオプション一覧 getinfo() に指定で…

YouTube で閲覧中動画の短縮 URL を表示するブックマークレット

Chrome 拡張もあるのですが、短縮 URL 取得のためだけに拡張増やすのもメモリが勿体無いのでブックマークレットを作りました。動作確認 Chrome 7.0 です。ブックマークレットからは document.execcommand('Copy') でクリップボードを操作出来ない(Chrome 拡…

YAPC::Asia Tokyo 2010 に行ってきました

今年も Perl の国際的カンファレンス YAPC::Asia に行ってきました。 YAPC に行くと 毎年感じることですが、YAPC に行って色々なトークセッションを回ると、他(社|者)の実際の運用や開発の現場レベルでのノウハウを聴くことができるので、この二日間で自分ひ…

YAPC::Asia Tokyo 2010 のタイムテーブルを手軽に PC/iPhone で見る方法

今年の YAPC::Asia もタイムテーブルはパンフレットをあてにしていたのですが、載っていなかったので慌てて用意しました。公式サイトに iCal が用意されているので、これを Google Calendar にインポートします。左下の「他のカレンダー」の「追加▼」のプル…

Ubuntu 10.04 LTS の MySQL で InnoDB Plugin を有効にしようとしたらハマったメモ

Ubuntu 10.04 LTS の MySQL は 5.1.41 なので、InnoDB Plugin をソースからインストールしなくてもそのまま使えますが、セットアップしていて少しつまづいたのでメモです。/etc/mysql/my.cnf に ignore-builtin-innodb plugin-load=innodb=ha_innodb_plugin.…

EC2 のロードバランサーの内側の lighttpd で本来のアクセス元 IP アドレスを取得する方法

Amazon EC2 のロードバランサーのオプションの Elastic Load Balancing は便利なのですが、これを経由すると内側の lighttpd のアクセスログにはアクセス元 IP アドレスは 10.204.xx.xx などと、全てロードバランサーの IP アドレスになってしまいます。これ…