2012年12月26日水曜日

Titanium SDK 3.0からのTitanium CLIを使ってみる

titanium_cliTitanium SDK 3.0のReleaseに新しいcommand-line interface(CLI)が含まれていたので使ってみた。

Titanium SDK 3.0.0に関してはOfficial Siteを参考に。

環境: Titanium SDK 3.0.0, node.js v0.8.16, titanium@3.0.22

 

今までも可能だったけど、いくつか設定が必要だった。詳しくは前の記事を参考に。

3.0.0からのTitanium CLIを使うとProjectの作成、BuildまでをCommand-lineで完結できるようになる(Titanium Studioを起動する必要がない)。

参考にしたSite.

 

まずは準備。

node.jsのInstallが必要らしい。私はAlloyを試したときにInstall済みなのでそちらの記事を参考に。

node.jsがIntasllされている環境だと、自動でInstallされるみたい。

 

使い方。

Project Folderに移動して下記Commandを実行
$ cd Documents/Titanium\ Studio\ Workspace/hoge
$ titanium build -p ios --log-level trace

Optionの意味は
$ titanium build -h
が一番詳しい。

 

 

< Related Posts >

2012年12月10日月曜日

XHProf + XHGuiをInstallしてPHPの実行結果を監視、解析する

php_profilerXHProfが便利と教えてもらったのでInstallしてみたときの覚書。

環境: CentOS 5.8, PHP 5.3.19, XHProf 0.9.2 (beta), nginx 1.2.5, mysql 5.5.28, Graphviz 2.12

参考にしたのは下記Site

 


Install XHProf

PECL(ピクル)に対応しているので、Install自体は簡単。
# pecl install xhprof-0.9.2

設定Fileを作成
# vi /etc/php.d/xhprof.ini

extension=xhprof.so

# /etc/rc.d/init.d/php-fpm restart

 


Install XHGui

preinheimer/xhprof@GitHubからDownloadする。mysql serverはInstallしてある前提。

どこかに配置してconfigを設定
# cd /opt/xhprof/xhprof_lib/
# cp config.sample.php config.php
# vi config.php

$_xhprof['dbtype'] = 'mysql'; // Only relevant for PDO
$_xhprof['dbhost'] = 'localhost';
$_xhprof['dbuser'] = 'root';
$_xhprof['dbpass'] = 'password'; // ※変更
$_xhprof['dbname'] = 'xhprof';
$_xhprof['dbadapter'] = 'Mysql'; // ※変更
$_xhprof['servername'] = 'myserver'; // ※変更
$_xhprof['namespace'] = 'myapp'; // ※変更
$_xhprof['url'] = 'http://url/to/xhprof/xhprof_html'; // ※変更

$controlIPs = false; //Disables access controlls completely.
//$controlIPs = array();
//$controlIPs[] = "127.0.0.1";   // localhost, you'll want to add your own ip here
//$controlIPs[] = "::1";         // localhost IP v6

MySQLに「xhprof」というDatabaseを作る。

xhprof_lib\utils\Db\Mysql.php内のCreate table文を実行。

xhprof_htmlを公開する。

# vi /etc/nginx/conf.d/hoge.conf

server {
    listen       80;
    server_name  xhprof.hoge.com;

    root    /opt/xhprof/xhprof_html/;
    index   index.php index.html index.htm;
    charset utf-8;

    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }

    location ~* \.php$ {
        expires off;
        include        fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

    location ~ /\. {
        deny  all;
        access_log off;
        log_not_found off;
    }
}

解析したいSiteにheader.phpとfooter.phpを自動で追加するような設定をする。下記Siteを参考に。

# vi /etc/nginx/conf.d/wordpress.conf

server {

    ・・・

    location ~* \.php$ {
        expires off;
        include        fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PHP_VALUE   "auto_prepend_file=/opt/xhprof/external/header.php \n auto_append_file=/opt/xhprof/external/footer.php"; // この行を追加
    }

}

再起動
# /etc/rc.d/init.d/nginx restart
# /etc/rc.d/init.d/php-fpm restart

これで解析したいSiteのURLに「_profile=1」を付けてアクセスすると、以降は自動で解析し続ける。(Cookieに保存しているから)

停止するときは「_profile=0」を付けてアクセスする。

例えば

http://wordpress.hoge.com/?_profile=1

に接続すれば解析が始まる。

 


Callgraphを使えるようにGraphvizもInstall

Installはyum経由で
# yum install graphviz graphviz-gd

config.phpを編集
# xhprof_lib/config.php

$_xhprof['dot_binary']  = '/usr/bin/dot';
$_xhprof['dot_tempdir'] = '/tmp';
$_xhprof['dot_errfile'] = '/tmp/xh_dot.err';

こんな感じに表示される。

 

callgraph.php

どの処理が遅いか見つけるのに役に立ちそう。

 

< Related Posts >

2012年12月4日火曜日

[Titanium Mobile] WebView内のScrollを無効(Disable)にする

titanium_webview_scroll-rockWebViewを画面の中に組み込んでクリックは有効にしたいけど、スクロールは無効するTips。

環境: Titanium SDK 2.1.4

「scrollable」は効かなかった。「disableBounce」だけではダメ。「touchEnabled」はClickも無効になってしまう。

Official Forumではhtml内に

document.ontouchmove = function(event){ event.preventDefault(); }

を記述する方法があるけど、親の画面のスクロールまで無効にしてしまう。

そこで、辿り着いたのがhtmlのCSSに

html, body {overflow:hidden;}

を記述する。これで大丈夫そう。

Sample Code

var html = [];
html.push('<!DOCTYPE html>');
html.push('<html>');
html.push('<head>');
html.push('<style>');
html.push(' html, body {overflow:hidden;}');
html.push('</style>');
html.push('</head>');
html.push('<body>');
html.push(content);
html.push('</body>');
html.push('</html>');

var view = Titanium.UI.createWebView({
    html: html.join(''),
    disableBounce: true,
    width: Titanium.UI.FILL,
    height: Titanium.UI.SIZE
});

 

WebViewのheightをコンテンツのサイズに合わせるのは前の記事を参照。

 

< Related Posts >

2012年12月3日月曜日

[Titanium Mobile] WebView内のLinkをClickしたときにSafariで開く

titanium_webview_safariWebView内のリンクをクリックしたときに遷移せず、イベントだけアプリに通知して、ブラウザを起動する方法。

環境: Titanium SDK 2.1.4

下記のようにHTML内にイベント通知用のJavaScriptを埋め込む。

//
// HTMLを生成
//
var html = [];
html.push('<!DOCTYPE html>');
html.push('<html>');
html.push('<head>');
// window.onload用のJavaScriptを追加
html.push(getOnloadJavaScript());
html.push('</head>');

// Add body content
html.push('<body>');
html.push(content);
html.push('</body>');
html.push('</html>');

webview = Titanium.UI.createWebView({
    html: html.join('')
});

//
// window.onloadで実行するJavaScriptを文字列で返す
//
var getOnloadJavaScript = function() {
    // 全てのaタグのonclickイベントにフックする
    var linkClick = function() {
        var links = document.getElementsByTagName('a');
        for (var i=0; i<links.length; i++) {
            links[i].onclick = function(e) {
                var params = {};
                var elem = e.srcElement;
                if (elem) {
                    params.href = elem.getAttribute('href') || '';
                    params.className = elem.getAttribute('class') || '';
                    params.id = elem.getAttribute('id') || '';
                    params.title = elem.getAttribute('title') || '';
                }
                // Fire application event.
                Titanium.App.fireEvent("app_webview_open_link", params);
                return false;
            };
        }
    };

    var script = [];
    script.push('<script>');
    script.push('window.onload = ' + linkClick.toString());
    script.push('</script>');
    return script.join('');
};

 

あとはアプリ側でEventを受け取る処理を記述。

Titanium.App.addEventListener('app_webview_open_link', function(e) {
    console.log(e);
    if (e.href) {
        // Open browser
        Titanium.Platform.openURL(e.href);
    }
});

 

 

< Related Posts >

2012年11月30日金曜日

[Titanium Mobile] WebViewのheightにTitanium.UI.SIZEが効かない

titanium_webview_heightWebViewのheightにTitanium.UI.SIZEを設定すると、最初は正常に表示されるけど、画面を行ったり来たりしていると潰れて表示しなくなる現象が発生。

環境: Titanium SDK 2.1.4, iOS Simulator 6.0

下記のように後からsetHeightするらしい。

var webView = Titanium.UI.createWebView({
    height: Titanium.UI.SIZE,
    width: Titanium.UI.FILL,
    disableBounce: true
});
webView.addEventListener('load', function() {
    var height = webView.evalJS('document.height;');
    webView.setHeight(height);
});
this.mainView.add(webView);

"disableBounce"は上限にScrollしたときに余白部分を表示させない設定。SDK 2.0から使えるらしい。

 

< Related Posts >

2012年11月29日木曜日

[PHP] dBugを利用したDebug用関数

WordPressで開発するときによく利用している自分用Debug関数を覚書。

利用するのはdBug.

ObjectやArrayを見やすく色分けしてくれる。こんな感じ。

screenshots

まずは普通に画面に出力。dBug.phpが同じ階層に必要。

if (!function_exists('a')) {
    function a() {
        if (!class_exists('dBug')) {
            require_once ('dBug.php');
        }
        foreach (func_get_args() as $v) new dBug($v);
    }
}

 

これはdebug_backtraceを返すだけ

if (!function_exists('b')) {
    function b() {
        return debug_backtrace();
    }
}

 

dBugの結果をFileに吐き出す。

Ajaxやアプリ開発などでよく使う。「wp_upload_dir」を使っているのでWordPress依存。ここを書き換えれば任意の場所に出力可能。

if (!function_exists('d')) {
    function d() {
        if (!class_exists('dBug')) {
            require_once ('dBug.php');
        }

        // buffering
        ob_start();
        foreach (func_get_args() as $v) new dBug($v);
        $html = ob_get_contents();
        ob_end_clean();

        // write down to html file.
        $html .= '<br/><br/>';
        $upload_dir = wp_upload_dir();
        $file = $upload_dir['basedir'] . '/debug.html';
        $handle = fopen($file, 'a');
        fwrite($handle, $html);
        fclose($handle);
    }
}

 

XdebugがInstallされているなら、中身をvar_dumpに変えてもいいかもしれない。

 

< Related Posts >

2012年11月28日水曜日

[Titanium Mobile] Basic認証をかけてる開発用SiteにPOSTする

titanium-mobile_basic_auth開発用ServerはBasic認証をかけているので、Titanium Mobileで開発しているアプリからPOSTする際に必要な設定を覚書。

環境: Titanium SDK 2.1.4

参考にしたSite.

Sample Code

auth = 'Basic ' + Titanium.Utils.base64encode(username + ':' + password);
xhr.setRequestHeader('Authorization', auth);
xhr.send();

 

 

< Related Posts >

2012年11月27日火曜日

[Titanium] JSON.stringifyした値をPOSTしてもjson_decodeが失敗する

titanium_wordpress_jsonTitanium MobileでWordPressと連携するアプリを開発しているときの覚書。

環境: Titanium SDK 2.1.4, WordPress 3.3.2, PHP 5.3.19

<現象>
アプリ側でJSON.stringifyした値をPOSTして、PHP側でjson_decodeしても失敗する。

<原因>
JSON文字列のダブルクォーテーションがエスケープされている。

 

PHPの設定で「magic_quotes_gpc」はOFFになっているし、アプリ側でPOSTしたDATAはエスケープされていない。

Networkを監視して、POSTする値を確認する方法は前の記事を参考に。

確認用のPHPで試してみると

wp-load.phpに対してPOSTした値のみエスケープされている様子

しょうがないので、json_decodeする前にstripslashesすれば問題なさそう。

WordPressの場合、「stripslashes_deep」という関数もある。

 

< Related Posts >

2012年11月26日月曜日

iOS SimulatorからPOSTしているDATAを確認(Network監視)

network_watchTitanium MobileでApp開発しているときにiOS SimulatorからServerにPOSTしているDATAを確認したくて調査。

環境: Mac OS X 10.8.2 Mountain Lion, Wireshark 1.8.3, XQuartz 2.7.4

下記記事が参考になる。

 


tcpdumpを使う

下記Commandで監視出来る。
$ tcpdump -A -s 0 -i en0 dst or src host hoge.com and port 80

これはInterface「en0」上で「hoge.com」とのHTTP通信を監視する。

Interfaceは
$ ifconfig
で確認。

アプリ開発はこれで十分。

 

< 2013/07/10 Modified >
Macのtcpdumpだとサーバー側でnoticeエラー(PHP)が出力されても表示されなくなった。しょうがなくサーバー(Linux)にSSHでアクセスしてtcpdumpコマンドを打つようにした。
$ tcpdump -A -s 0 -i eth0 host 192.168.1.85 and port 80

 


Wiresharkを使う

Wiresharkという無料のNetwork監視Softを使ってみる。参考にしたのは下記Site

DownloadはWiresharkのOfficial Siteから。

Install後は一度Logout

XQuartzもInstallしろと言われるのでDownload -> Install.

Wiresharkを起動しても画面が表示されなかったので、ここで再起動

再起動後は無事起動した。

 

とりあえず、送信元からHTTPのみに制限する場合は「Filter」に

ip.src == 192.168.0.11 && tcp.port == 80

を入力して「Apply」する。

 

 

< Related Posts >

2012年11月23日金曜日

iOS Simulatorの写真アプリにSample Videoを保存する方法

ios-simulator_videoTitanium Mobileを使ってiOSアプリを作成している時に、iOS Simulatorに動画を保存するにはどうすればいいか調べた覚書。

環境: Titanium SDK 2.1.4, Xcode 4.5.2

参考にしたのは下記Site

 

動画はApple SiteからDownloadする。

動画をSimulatorにcopy
$ Downloads/sample_mpeg4.mp4 Library/Application\ Support/iPhone\ Simulator/6.0/Media/DCIM/100APPLE/

写真アプリの設定を削除
$ cd Library/Application\ Support/iPhone\ Simulator/6.0/Media
$ mv PhotoData PhotoData.bak

iOS Simulatorをたちあげて、Homeを長押しで写真アプリを削除する。

もう一度写真アプリを立ち上げればCopyした動画が見えるはず。

 

< Related Posts >

2012年11月22日木曜日

NginxにSSL(VeriSign)をInstall、設定

nginx_ssl_installVeriSignのSSL「グローバル・サーバID」をnginxにInstall、設定するまでの作業をMemo.

参考にしたのは下記Site.

 


秘密鍵(Key)と証明書署名要求(CSR)を作成

疑似乱数を作成
# touch rand.dat
# openssl md5 rand.dat > rand.dat

秘密鍵の作成
# openssl genrsa -rand rand.dat -des3 2048 > 2012key.pem

秘密鍵はBackupしておく。

証明書署名要求(CSR)を作成
# openssl req -new -key 2012key.pem -out 2012csr.pem

 


サーバIDと中間CA証明書のInstall

VeriSignで手続きを済ませたら「サーバID」という証明書が送られてくる。

これに中間CA証明書を追記する。中間CA証明書はOfficial SiteにLinkがある。

あとはnginxのconfを設定して再起動する。

こんな感じ

server {
    listen       443 ssl;
    server_name  hoge.jp www.hoge.jp;

    root    /home/httpd/hoge/httpdocs;
    index   index.php index.html index.htm;
    charset utf-8;

    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }

    ssl on;
    ssl_certificate      /etc/nginx/ssl.d/2012cert.pem;
    ssl_certificate_key  /etc/nginx/ssl.d/2012key.pem;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
    }

    location ~* \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        include        fastcgi_params;
        client_max_body_size 20M;
    }

    location ~ /\. {
        deny  all;
        access_log off;
        log_not_found off;
    }

    # if the file is not found, forwarded to index.php (permalinks)
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php?q=$1 last;
    }

}

 

nginxを再起動
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx restart

起動するときにPassphraseをなしで起動する場合は下記Siteを参考に。

 

< 2013/10/04 Modified >
更新する際になぜか新しい証明書をインストールして再起動してもブラウザ上で更新期限が変わらず焦った。数日後、証明書の更新期限を確認してnginxを再起動したら無事更新された。。。

証明書の更新期限を確認するコマンド
# openssl x509 -noout -dates -in 2012cert.pem

VeriSignが提供している証明書を確認できるサービス

 

< 2014/08/25 Modified >
サーバーの移行に伴いVeriSignからGlobalSignに移行。基本は同じ。公式サイトを参考に。

インストール後、アクセスしてみると下記エラーで困った(Firefox)。

ssl_error_rx_record_too_long

「listen 443;」を「listen 443 ssl;」にする必要があるらしい。

それと「listen 80;」「listen 443;」を同じブロック内に記述できるみたい。けどhttpはhttpsにリダイレクトするようにした。

server {
    listen 80;
    server_name hoge.com www.hoge.com;
    return 301 https://hoge.com$request_uri;
}

server {
    listen       443 ssl;
    server_name hoge.com www.hoge.com;

    ssl on;
    ssl_certificate      /etc/nginx/ssl.d/2014_hoge_cert.pem;
    ssl_certificate_key  /etc/nginx/ssl.d/2014_hoge_nopass_key.pem;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;
}

 

 


開発用の証明書を作成

一応開発用にサーバ証明書を作成しておく。認証されているわけではないので、表示したときに警告は出る。

# cd /etc/nginx
# mkdir ssl.d
# cd ssl.d
# openssl genrsa -des3 -out key.pem 1024
# openssl req -new -key key.pem -out csr.pem
# openssl rsa -in key.pem -out key_nopass.pem
# openssl x509 -req -days 365 -in csr.pem -signkey key_nopass.pem -out cert.pem

nginxのconfに追記

server {
    listen       443;
    server_name  hoge.com;

    ssl on;
    ssl_certificate      /etc/nginx/ssl.d/cert.pem;
    ssl_certificate_key  /etc/nginx/ssl.d/key_nopass.pem;

    location / {
    }
}

 

 

< Related Posts >

2012年11月21日水曜日

[Titanium Mobile] heightが動的に変化するときScrollViewを更新

titanium_scrollview_heightScrollViewの中にTableViewが入れ子になっていて、TableViewの行数が増えても自動的にScrollViewの高さが変化してくれなくてハマったときの覚書。

環境: Titanium SDK 2.1.4.GA

scrollView = Titanium.UI.createScrollView({
    layout: 'vertical',
    showVerticalScrollIndicator: true,
    contentHeight: 'auto',
    top: 0
});

中のViewを編集したあとに空のViewをScrollViewに追加すると更新(Refresh)できた。

scrollView.add(Titanium.UI.createView());

 

< Related Posts >

2012年11月20日火曜日

Apple Remote Desktopで使用しているPort番号

apple-remote-desktop_port_number外部(Singapore)から日本にあるMacにRemoteで接続するために調べた覚書。

Macに外部から接続するには、VNC関連アプリかApple Remote Desktopが手っ取り早い。

ただRouterにPort Forwardingを設定するのがちょっと敷居が高い。

Apple Remote Desktop(ARD)で使用するPort番号はOfficial Siteを参考に。

 

下記のような製品を使えば業者が全部やってくれると思うので、簡単かもしれない。

 

< Related Posts >

2012年11月19日月曜日

モルディブ(Maldives)に行って来ました。

今月5日~10日は休暇をもらってモルディブに行って来ました。

Paradise Island Resort


View Maldives in a larger map

こんな海は初めて。

DSC_0001

DSC_0032

鮫も激写 (^^;

DSC_0038

写真は防水携帯Xperia Active (ST17i)で撮影。

島の周りはシュノーケリングで十分楽しめる。

せっかくなのでスキューバダイビングも1回だけやってみた。PADIでオープンウォーターを取得していたので、ライセンスカードをもっていなくてもネットで検索して確認してもらえた。便利。

シンガポールからだと飛行機も含めて一人S$3000弱で行って帰ってこれるので、シンガポールに住んでいるならぜひ。

 

< Related Posts >

2012年10月29日月曜日

Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集

titanium_help日本語情報は下記Siteで。

 

そして大人しく本家のTutorial Videoを見る(英語)。 どれも役に立つ内容ばかり。

動画 再生時間 説明
Titanium Overview 18:56 Titaniumの概要
You're a Native App Developer Now 33:06 Android SDKとXcodeの基本的な使い方。Debug Toolの紹介もある。Android, iOS開発したことがなければ見といた方がいい。
Titanium Studio 6:54 Titanium Studioの使い方。初めてTitanium Studioを使う場合は見といた方がいい。
Cross-Platform JavaScript Applications
関連Wiki
47:40 よく使うCoding Technics。
Fileの分割方法、どこでも呼び出せる関数の定義方法、Codingの注意点。
複数のPlatformで違う処理をする方法。
多言語Fileの作り方(Internationalization) 。
UI Fundamentals
関連Wiki
29:30 UIの基礎知識。
指定できる単位、画面、位置、Layout
EventHandlerの基礎知識。
Working with Local Data
関連Wiki
17:11 Local Databaseの使い方。
設定値の保存とかによく使う。ObjectもJSON形式で保存すればいいよ。とか。
DatabaseとTableViewとの関連付け。
Working with Remote Data
関連Wiki
22:05 Web Server(Service)との通信方法とDemo。
Media and the Filesystem
関連Wiki
32:44 Audio Fileの再生、録音。
Videoの再生、Streaming。
端末のCameraまたはGalleryから写真を取得。
端末内の特定のDirectoryからFileを読み込み。
KitchenSink内の関連Sampleを解説。
Using Location Services
関連Wiki
33:24 位置情報関連
(まだ見てない)
Integrating Contacts & Social Media
関連Wiki
23:03 端末内のアドレス帳との連携、ソーシャルメディア。
(まだ見てない)
Integrating Web Content
関連Wiki
13:37 (まだ見てない)
Deployment & Distribution
関連Wiki
36:45 Android MarketとApp Storeへの登録方法、Build方法。概要だけ。

 

Official Documents は常に開きながら。Kitchen SinkなどのSampleを参考になる。

 

 

Titanium 3.0から「Alloy」というMVC Frameworkが標準になるらしいので、これを使った方がいいみたい。触ってみたけど、まだ発展途上なのでオススメしない。

 

 

Coding Guide(コーディング規約)関連

 

Viewの配置と位置関係に関しては下記記事を一読しておく。

親Viewに「layout: 'vertical'」を設定して、相対位置でViewを追加していくことが多いと思う。デフォルトは「layout: 'absolute'」

 

< Related Posts >

2012年10月22日月曜日

Nginx+PHP-FPMのTuning設定

nginx_php-fpm_tuningNginxとphp-fpm上で動いているWordPressの表示速度を最適化するために調べたときの覚書。

環境: CentOS 5.8 64bit, nginx 1.2.4, php-fpm 5.3.17

参考にしたのは下記Site.

 

目次

  1. ServerのCPU数に合わせてnginxを設定
  2. nginxのfastcgi cacheを設定
  3. 「Too many open files」対策
  4. gzipを有効にしてTraffic量を軽減する

 


1.ServerのCPU数に合わせてnginxを設定

ServerのCPU Core数を確認。
# cat /proc/cpuinfo |grep processor

最後が「processor:15」ならコア数は16。これをnginxのworker_processesに設定する
# vi /etc/nginx/nginx.conf

worker_processes  16;

 


2.nginxのfastcgi cacheを設定

PHPの実行結果をcacheする設定をnginxに追記

http {
    ...

    fastcgi_cache_path /var/cache/nginx/fastcgi_temp/cache levels=1:2 keys_zone=wpcache:500m inactive=60m;

    server {
        ...

        location ~* \.php$ {
            ...

            # fastcgi cache
            fastcgi_cache         wpcache;
            fastcgi_cache_key     "$scheme://$host$request_uri";
            fastcgi_cache_valid   200 10m;
            fastcgi_cache_valid   301 1d;
            fastcgi_cache_valid   404 1m;
            fastcgi_buffer_size   16k;
            fastcgi_buffers       128 16k;
        }
    }
    ...
}

詳しくはOfficial Documentを参考に。

体感では早くなったのか分からない。。。設定が悪いのかな?

 


3.「Too many open files」対策

(2014/10/03 追記)開発用サーバーで「Too many open files」エラーログが頻発するので、調べてみるとworker_rlimit_nofileを設定するといいらしい。
参考:nginx で Too many open files エラーに対処する - Shin x blog

# vi /etc/nginx/nginx.conf

worker_rlimit_nofile 4096;

events {
    worker_connections  1024;
}

# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx restart

 


4.gzipを有効にしてTraffic量を軽減する

nginxのconfに追記

server {
    gzip              on; 
    gzip_types        text/plain
                      text/xml
                      text/css
                      application/xml
                      application/xhtml+xml
                      application/rss+xml
                      application/atom_xml
                      application/javascript
                      application/x-javascript
                      application/x-httpd-php;
    gzip_disable      "MSIE [1-6]\.";
    gzip_disable      "Mozilla/4"; 
    gzip_buffers      64 8k;
    gzip_min_length   1000;
}

実際gzipを有効にすると、遅くなったところがあるので今のところ無効にすることにした。

速度の計測はGoogle ChromeのDeveloper Toolsを使うと簡単。詳しくは前の記事を参考に。

 

< 2012/11/26 Modified >
WordPressのAjaxで処理する箇所(wp-load.php)のみgzipを有効にしてみた。

location ~ /wp-load\.php {
    gzip           on;
    gzip_disable   "MSIE [1-6]\.";
    gzip_disable   "Mozilla/4";
    gzip_buffers   64 8k;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    include        fastcgi_params;
    client_max_body_size 20M;
}

location ~* \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    include        fastcgi_params;
    client_max_body_size 20M;
}

 


WordPressとMySQLの設定は下記記事も参考に。

 

< Related Posts >

2012年10月18日木曜日

Kinect for Windowsを調査。人の動きを検知して何か面白いことが出来るか考える

motion_capture社内のWeb strategy Meetingのために調べたことを覚書。Idea次第で面白いことが出来そうな予感がする。

参考Site

 


Kinectとは

250px-KinectSensorMicrosoftからXbox 360向けに発売されたGame Device。人の動き(Gesture)や音声認識を可能にする。

「Kinect for Windows」はPC向けに近距離(Near Mode)に対応して2012年2月に発売。商用Applicationの開発が可能になった。

 


機能

  • RGB Cameraで色識別
  • Depth Censorで距離(深度)計測
  • 赤外線を投射してDepth Censorが受け取っているので、暗闇でも識別可能
  • 4つのMicrophoneで音声認識。発生源も分かる。
  • 同時に2名までの骨格情報(Skeleton Data)。最大6名までの人物の認識
  • 開発する際はSDKを通して人の骨格情報(Skeleton Data)を提供してくれる

 


価格、License

Kinect for Windows : ¥24,800

  • 商用利用可能
  • 開発するのにWindows 7 + Visual Studio 2010以上の環境が必要
  • 開発目的のためにKinect for Xbox360(¥14,800)を使うことも可能

 


事例紹介

 

 

< Related Posts >

2012年10月17日水曜日

nginxのgzip_staticを有効に設定

nginx_gzip_staticnginxのgzip_staticを有効にすると静的なgzip圧縮ファイルを手動で用意しておけば、nginxがそちらを参照・送信するようになる。

CPUの負荷を軽減できる代わりにgzファイルを作る手間が増える。

WordPressのSitemapを作るPluginがなぜ"sitemap.xml.gz"も作成するのか理由が分かった。

gzip_staticを使うには、nginxのCompile optionを指定してないといけない。

./configure --with-http_gzip_static_module

yum経由でInstallした場合は、どんなCompile optionが設定してあるか確認
# nginx -V

Official SiteのRPMは
with-http_gzip_static_module
が付いてた。Install方法は前の記事を参考に。

 

< Related Posts >

2012年10月16日火曜日

Command LineからTitanium Mobile AppをCompile(build)する

Titanium_command-lineTitanium Studioが重いので、Command Line(Terminal)からBuild、実行できないものかと調べたときの覚書。

環境: Mac OS X 10.8.2, Titanium SDK 2.1.3.GA

Official Wikiに全ての答えがある。

 

Aliasを追加する
$ vim .bash_profile

alias titanium="$HOME/Library/Application\ Support/Titanium/mobilesdk/osx/2.1.3.GA/titanium.py"
alias ios_builder="$HOME/Library/Application\ Support/Titanium/mobilesdk/osx/2.1.3.GA/iphone/builder.py"

反映させる
$ source .bash_profile

「hoge」projectで試してみる
$ ios_builder run /Users/daiki/Documents/Titanium\ Studio\ Workspace/hoge/ 6.0

DirectoryのFull PathとSimulatorのVersionを与えるだけで動いた。

停止するときはControl-C

 

最初

OSError: [Errno 17] File exists

のErrorが表示されたときはBuild以下のDirectoryを削除すると動いた。

 

< Related Posts >

2012年10月15日月曜日

[Titanium] AlloyのSample App Screenshot一覧

TaitaniumのMVC Framework "Alloy"をInstallしてSample Test Appを動かしてみた。Installの方法は前の記事を参考に。

環境: Mac OS X 10.8.2, Xcode 4.5, Titanium Studio 2.1.2, Titanium SDK 2.1.3.GA, node.js 0.8.11, Alloy 0.2.39

全て次のCommandで実行
$ /opt/local/lib/node_modules/alloy/
$ sudo jake app:run dir=basics/simple

 

basics/simple

image

 

basics/builtins

image

 

basics/controller_events

image     image

 

basics/markup_events

image     image

 

basics/markup_require

image     image

 

basics/multiple_views

TapするとViewが切り替わる

image     image

 

ui/android_menu

下記Errorで起動せず。

[ERROR] Script Error = 'undefined' is not an object (evaluating '$.__views.index.activity') at index.js (line 34).

 

ui/buttonbar

image     image

 

ui/coverflow

Swipeすると画像をカバーフロー形式で一覧できる。

image     image

 

ui/map

image     image

 

ui/navgroup

image     image

 

ui/picker

image     image     image

 

ui/splitwindow

下記Errorで起動せず。

[ERROR] Script Error = this API is not available on non iPad devices.   in -[TiUIiPadProxy createSplitWindow:] (TiUIiPadProxy.m:43) at index.js (line 24).

 

ui/tabbedbar

image     image

 

ui/tabgroup

image     image

 

ui/tableview

image     image

 

ui/toolbar

image

 

widgets/basic

image     image

 

widgets/complex

image     image

 

widgets/widget_drawer

image     image     image

 

widgets/wpath

image     image

 

models/localStorage

下記Errorで起動せず。

[ERROR] Script Error = No support for localStorage persistence in non MobileWeb environments.

 

models/properties

image     image

 

models/sql

image

 

advanced/device_query

image

 

advanced/form_factor

image

 

advanced/inheritance

image     image     image

 

advanced/platform_folders

image     image

 

< Related Posts >

Related Posts Plugin for WordPress, Blogger...

Blog Archives