taiyoh's memorandum

@ttaiyoh が、技術ネタで気づいたことを書き溜めておきます。

2012-05-11

nginxでステータスコード404,500,503時に特定の静的なファイルを表示する

 というメモ。

    server {
        listen       80;
        server_name  example.com;

        root /path/to/docroot;
        access_log  logs/example.access.log  main;

        location ~ ^/(js/|img/|css/|swf/) {
            index  index.html index.htm;
        }

        error_page 404  /404.html;
        error_page 500  /500.html;
        error_page 503  /503.html;

        location ~ /(404|503|500).html {
        }

        location / {
            proxy_intercept_errors on;
            proxy_set_header       Host $host;
            proxy_pass   http://127.0.0.1:5000;
        }
    }

 ミソは"proxy_intercept_errors"で、アプリケーションのレスポンスから特定のエラーコードを検知した時、システムではなくnginx側で所定の表示内容を出力するというフラグを立てる。

2012-01-13

mac osxにmroongaをインストールしてみる

 承前として、osxにはmysqlとgroongaはインストールされているものとする(どちらもbrew installできますね!)

$ wget https://github.com/downloads/mroonga/mroonga/mroonga-1.11.tar.gz
$ wget http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.14.tar.gz
$ tar xvzf mysql-5.5.14.tar.gz
$ tar xvzf mroonga-1.11.tar.gz
$ mv mysql-5.5.14 /usr/local/mysql
$ cd mroonga-1.1
$ CPPFLAGS="-DDISABLE_DTRACE" ./configure --with-mysql-source=/usr/local/mysql
$ make
$ make install

 インストール完了後、mysqlのコンソールに入り

INSTALL PLUGIN groonga SONAME 'ha_groonga.so';
CREATE FUNCTION last_insert_grn_id RETURNS INTEGER soname 'ha_groonga.so';

 これでひとまず完了。
 ミソなのはconfigureの時のCPPFLAGSで、これ付けないとmake時に「probes_mysql_dtrace.hがない」と言われてしまう><(確かにファイルがない)。そのファイルを探すのが億劫だったので、もうフラグ変えることで対処。

2012-01-02

「モチベーション3.0」読了

モチベーション3.0 持続する「やる気!」をいかに引き出すか
モチベーション3.0 持続する「やる気!」をいかに引き出すかダニエル・ピンク 大前 研一

講談社 2010-07-07
売り上げランキング : 783


Amazonで詳しく見る
by G-Tools

 昼間、bookoffに行ったら950円で売られていて、しかも三が日は半額になるらしく、500円弱でゲットできた。
 個人的に、リーダーとして重要な業務の一つにチームメンバーのモチベーション管理があると思っているので、今知りたかったことについてある程度知れたのがよかった。以前から感覚的に捉えている部分はあったが、それだけでは気づかなかった部分があったり、事例を踏まえた科学的な裏付けを含んでいて、もっと体系的に書かれていたので、だいぶ整理できた。
 これを読みながら、何人かの知り合いに、これの「タイプX」に当てはまってしまってる人がいるなぁ、と、ぼんやり思ったりしていた(会社のメンバーではないよ)。ホントは知的産業にいるはずの人が、時間労働的な尺度でしか自分の価値基準や給与基準を考えられてないとか。あと、昔「フラット化する世界」を読んで、将来的にオフショアリングがガンガン進んでいくと思っていたけど、ザッポスのように、ワントップでなるべく完結させることでブランドトータルの価値を高めつつ、(かつて「モチベーション2.0」的な職業だった職種の)働く人の自己実現にも寄与する「ホームショアリング」といった考え方が進んできてるのを見て、なんか色々始まってきてるな、とも思った。

2011-12-09

SQL_SketchなるPHPのライブラリ書いてます

 → taiyoh/sql-sketch-php - GitHub
 これは何かというと、PHPでもSQL::Maker的なモジュールが欲しかったので、書いてみました、ということです。510行くらいしかなくて、あんまりコーナーケースに対応したSQLは書けないです。でも、よくあるSQL文の7割くらいはカバーできるんじゃないか、と思ってます。あと、MySQL専用だったりします><
 使い方は二種類あって、一つはPropelモードで、もう一つがlithiumモードです(単なる呼称)。以下を見てみると、その名前のわけが分かるかも。

// SELECT foo FROM hoge WHERE hoge.type = 'bar' ORDER BY hoge.id DESC LIMIT 3;
// というSQLを出力したいとします。


// Propelモード
$sk = new SQL_Sketch('hoge');
$sk->add('hoge.type', 'bar');
$sk->addDescendingOrderByColumn('hoge.id');
$sk->setLimit(3);
list($sql, $bind) = $sk->select();


// lithiumモード
$sk = new SQL_Sketch('hoge');
list($sql, $bind) = $sk->select(array(
    'conditions' => array(
         'type' => array('=' => 'bar')
    ),
    'order' => array('id' => 'DESC'),
    'limit' => 3
));

 あくまでベースはPropelモードで、lithiumモードはsyntax sugarみたいなものです。
 元々は、symfony上でアプリケーションを書いている時、生のSQL文を作成するのに文字列連結するのがとにかく見づらかったので、Propelの同じような記法で作れるようにしたい、と思ったのが発端です。PHPフレームワークフルスタックなものが多すぎて、こういうミドル的なポジションのモジュールが全然育ってないですね。だからフレームワーク毎の学習コストがどんどん上がっていくんだと思うけど。。。

2011-12-08

WebService::GoogleDirectionAPIというモジュールを書いた

 本当はもう誰かがやってる可能性高いけど。
 → Google Directions API - Google Maps API Web サービス - Google Code
 経路探索をするgoogleAPIPerlから操作するためのものです。

#!perl

use strict;
use warnings;

use WebService::GoogleDirectionAPI;
use YAML;

my $gd = WebService::GoogleDirectionAPI->new(sensor => "false");

my $from = '東京都渋谷区恵比寿西1-16-15 EBISU WEST';
my $to   = '神奈川県鎌倉市小町2-14-7 かまくら春秋スクエア';

my $res = $gd->search($from, $to);

print YAML::Dump($res);

 これを実行するとこうなる。

% perl sample.pl
---
routes:
  - bounds:
      northeast:
        lat: 35.65794
        lng: 139.70801
      southwest:
        lat: 35.31853
        lng: 139.48168
    copyrights: Map data ©2011 ZENRIN
    legs:
      - distance:
          text: 61.2 km
          value: 61230
        duration:
          text: 1 hour 19 mins
          value: 4766
        end_address: 'Japan, Kanagawa Prefecture, Kamakura, Komachi, 2丁目14−7'
        end_location:
          lat: 35.32103
          lng: 139.55341
        start_address: 'Japan, Tokyo, Shibuya, Ebisunishi, 1丁目16−15'
        start_location:
          lat: 35.64909
          lng: 139.70732
        steps:

~~~~~~~~~~~~~~~~~~~~(以下略)
2011-12-06

Archer::Plugin::Rsyncもなんかエラーがでる

Odd number of elements in hash assignment at /home/homepage/perl5/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2/Archer.pm line 164.
Archer::Plugin::Rsync [debug] sending incremental file list

 ですと。A::P::Rsync周りでlogメソッドを使っているのは結果の出力のみなので、ちょっと中を見てみたら、出力が配列で出てくるようになってた。
 ということで、これも修正。