nginx + phalcon + noSQL で爆速アプリ開発環境

webアプリを触り始めて15年、apaacheしか使ったことがない人間がやっとnginxをインストールしてみようという気になったので、その記録。

  1. さくらのVPSをセットアップ
  2. nginx インストール
  3. PHP インストール
  4. noSQL インストール
  5. phalcon インストール
  6. hello world

中国のファイアーウォールとの対決記録

出張で中国に行く人が多いのですが、メールをGoogle Appsにしてしまっているために出張中メールが使えないという大問題が発生。試行錯誤して落ち着くまでの顛末を記録しておきます。

対策1「Proxyサーバ

準備するほうも、使うほうも比較的 楽なプロキシを試してみることにしました。
AWSの東京リージョンに環境があったので、プロキシサーバを立てました。
プロキシならGoogle ChromeのエクステンションでプロキシのON/OFFが簡単にできるからユーザーさんの負担もないよね!ということでかなり気に入っていたんですが...


→う〜〜〜ん
 結果は意外といい感じでした、ただし地方に行くと全くだめなようです。
 というか地方からは立てたプロキシサーバ自体にアクセスできなくなりました w

対策2「POPでやってみる」

中国のファイアーウォールはHTTPに関してはコンテンツフィルタもやっているという噂を聞いて、試しにPOP通信をやってみました。


→失敗

対策3「現地通信回線」

宿泊先のホテルや公衆の無線LANだから駄目じゃないか?という噂と
現地のモバイル通信端末を使っている人は、大丈夫っぽいという噂を聞いて
空港でWiFi端末を借りて(http://www.globaldata.jp/imotowifi/:エクスコムグローバル)試してみました。


→失敗

対策4「VPN

もっともメジャーなやり方。
ユーザー側の敷居が高いというのと、VPNサーバのIPを止めらてイタチごっこになっているという話もあってお金を払ってまでという思いがあって後ろ向きだったんですが、打つ手がなくなったので、試してみました。


→大成功!



日本の通信会社のローミングの場合ファイアーウォールに引っかからないそうです。
通信料がとんでもなく高いですが気にしない人は、一番簡単でいいかも。

Typeaheadとjsonデータを使って入力サジェスト

Bootstrap3 から分離されてしまったtypeaheadの使い方めも。
Typeahead単体でも実現できそうですが、サジェスチョンエンジンBloodhoundを使います。

用意したjsonデータ
http://www.hogehoge.com/items/search/%QUERY.json で取得できるようにしました。

{
   "meta":{
      "url":"\/items\/search\/Sn.json",
      "method":"GET"
   },
   "response":[
      {
         "id":"1",
         "code":"0011110",
         "name":"喜連瓜破",
         "foreign_name":"Kireuriwari",
         "deleted":false
      },
      {
         "id":"2",
         "code":"0011120",
         "name":"十三",
         "foreign_name":"Juso",
         "deleted":false
      },
      {
         "id":"4",
         "code":"0011130",
         "name":"京終",
         "foreign_name":"Kyobate",
         "deleted":false
      }
   ]
}

Javascriptのコード

$(function(){
    var items = new Bloodhound({
        datumTokenizer: function(d) {return Bloodhound.tokenizers.whitespace(d.name); },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        limit:10,
        remote: {
            url: 'http://www.hogehoge.com/items/search/%QUERY.json',
            filter: function(response){
                return $.map(response.response, function (item) {
                    return{ name: item.name, id: item.id };
                });
            }
        }
    });
    items.initialize();
 
    $('.typeahead').typeahead({
        hint: true,
        highlight: true,
        minLength: 2
    }, {
        name:'items',
        displayKey: 'name',
        source: items.ttAdapter()
    });
});

storyboard IDを使ってコードで画面遷移

FugaViewControllerからHogeViewControllerに遷移させたい場合。
Navigation Controller を使っている状況で、storyboard ID を使うというパターン

HogeViewController *hogeViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"hoge"];
[self.navigationController pushViewController:hogeViewController animated:YES];

問題点
Navigation Controller の戻るボタンの先が 遷移元になってしまう。