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 >

Related Posts Plugin for WordPress, Blogger...

Blog Archives