投稿

2012の投稿を表示しています

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

イメージ
Titanium SDK 3.0のReleaseに新しいcommand-line interface(CLI)が含まれていたので使ってみた。Titanium SDK 3.0.0に関してはOfficial Siteを参考に。Release Notes Titanium SDK 3.0.0 - 12/14/2012環境: 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.Titanium Command Line Utility Specification - Community - Appcelerator WikiTitanium Command-Line Interface Referenceまずは準備。node.jsのInstallが必要らしい。私はAlloyを試したときにInstall済みなのでそちらの記事を参考に。MacにMacPortsをInstallしてnode.jsの環境を設定 for Alloynode.jsがIntasllされている環境だと、自動でInstallされるみたい。使い方。Project Folderに移動して下記Commandを実行
$ cd Documents/Titanium\ Studio\ Workspace/hoge
$ titanium build -p ios --log-level traceOptionの意味は
$ titanium build -h
が一番詳しい。< Related Posts >iOS SimulatorからPOSTしているDATAを確認(Network監視)Command LineからTitanium Mobile AppをCompile(build)するMacにMacPortsをInstallしてnode.jsの環境を設定 for Alloy

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

イメージ
XHProfが便利と教えてもらったのでInstallしてみたときの覚書。環境: CentOS 5.8, PHP 5.3.19, XHProf 0.9.2 (beta), nginx 1.2.5, mysql 5.5.28, Graphviz 2.12参考にしたのは下記SiteThe Need for Speed: Profiling PHP with XHProf and XHGuiInstall XHProfPECL(ピクル)に対応しているので、Install自体は簡単。
# pecl install xhprof-0.9.2設定Fileを作成
# vi /etc/php.d/xhprof.iniextension=xhprof.so# /etc/rc.d/init.d/php-fpm restartInstall XHGuipreinheimer/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'] = …

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

イメージ
WebViewを画面の中に組み込んでクリックは有効にしたいけど、スクロールは無効する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 Codevar 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��…

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

イメージ
WebView内のリンクをクリックしたときに遷移せず、イベントだけアプリに通知して、ブラウザを起動する方法。環境: 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 = fu…

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

イメージ
WebViewの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 >[Titanium Mobile] heightが動的に変化するときScrollViewを更新Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集

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

イメージ
WordPressで開発するときによく利用している自分用Debug関数を覚書。利用するのはdBug.ObjectやArrayを見やすく色分けしてくれる。こんな感じ。まずは普通に画面に出力。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 f…

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

イメージ
開発用ServerはBasic認証をかけているので、Titanium Mobileで開発しているアプリからPOSTする際に必要な設定を覚書。環境: Titanium SDK 2.1.4参考にしたSite.xhr authentication with RESTful API | Community Questions & Answers | Appcelerator Developer CenterSample Codeauth = 'Basic ' + Titanium.Utils.base64encode(username + ':' + password);
xhr.setRequestHeader('Authorization', auth);
xhr.send();< Related Posts >Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集nginxでBasic認証を設定.htaccessと.htpasswdで簡易ユーザ認証

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

イメージ
Titanium 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 >iOS SimulatorからPOSTしているDATAを確認(Network監視)Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集【Android開発】HttpClientとHttpGetでサーバーとjson通信する【PHP】json_decode, json_encodeを使えるようにjsonをインストール

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

イメージ
Titanium MobileでApp開発しているときにiOS SimulatorからServerにPOSTしているDATAを確認したくて調査。環境: Mac OS X 10.8.2 Mountain Lion, Wireshark 1.8.3, XQuartz 2.7.4下記記事が参考になる。On the Wire: Network Capture Tools for API Developers - Google Data APIs | Google Developerstcpdumpを使う下記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を使ってみる。参考にしたのは下記SiteInstalling Wireshark on Mac OS X 10.8 Mountain Lion - israeltorres.orgDownloadはWiresharkのOfficial Siteから。Install後は一度LogoutXQuartzもInstallしろと言われるのでDownload -> Install.Wiresharkを起動しても画面が表示されなかったので、ここで再起動再起動後は無事起動した。とりあえず、送信元からHTTPのみに制限する場合は「Filter」にip.src == 192.168.0.11 && tcp.port == 80を入力して「Apply」する。< Related Posts >ネットワークの監視に関する…

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

イメージ
Titanium Mobileを使ってiOSアプリを作成している時に、iOS Simulatorに動画を保存するにはどうすればいいか調べた覚書。環境: Titanium SDK 2.1.4, Xcode 4.5.2参考にしたのは下記SiteiPhone/iPadシュミレーターのカメラロールに動画を登録する方法 - 山本大@クロノスの日記動画はApple SiteからDownloadする。QuickTime: Sample files動画を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.bakiOS Simulatorをたちあげて、Homeを長押しで写真アプリを削除する。もう一度写真アプリを立ち上げればCopyした動画が見えるはず。< Related Posts >Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集Command LineからTitanium Mobile AppをCompile(build)する

NginxにSSL(VeriSign)をInstall、設定

イメージ
VeriSignのSSL「グローバル・サーバID」をnginxにInstall、設定するまでの作業をMemo.参考にしたのは下記Site.Apache + OpenSSL CSR生成手順 (新規)|CSRの生成|日本ベリサインApache + OpenSSL サーバIDインストール手順 (新規)|サーバIDのインストール|日本ベリサインnginx で ssl 設定をする秘密鍵(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証明書のInstallVeriSignで手続きを済ませたら「サーバ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…

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

イメージ
ScrollViewの中にTableViewが入れ子になっていて、TableViewの行数が増えても自動的にScrollViewの高さが変化してくれなくてハマったときの覚書。環境: Titanium SDK 2.1.4.GAscrollView = Titanium.UI.createScrollView({
    layout: 'vertical',
    showVerticalScrollIndicator: true,
    contentHeight: 'auto',
    top: 0
});
中のViewを編集したあとに空のViewをScrollViewに追加すると更新(Refresh)できた。scrollView.add(Titanium.UI.createView());< Related Posts >Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集Command LineからTitanium Mobile AppをCompile(build)する

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

イメージ
外部(Singapore)から日本にあるMacにRemoteで接続するために調べた覚書。Macに外部から接続するには、VNC関連アプリかApple Remote Desktopが手っ取り早い。ただRouterにPort Forwardingを設定するのがちょっと敷居が高い。Apple Remote Desktop(ARD)で使用するPort番号はOfficial Siteを参考に。Apple ソフトウェア製品で使われる一般的な TCP および UDP ポート下記のような製品を使えば業者が全部やってくれると思うので、簡単かもしれない。リモート コンピュータ アクセス: どこからでも自分の PC や Mac を操作 | LogMeIn Pro< Related Posts >MacからWindowsにリモート接続する(リモートデスクトップ)

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

イメージ
今月5日~10日は休暇をもらってモルディブに行って来ました。Paradise Island Resort
View Maldives in a larger mapこんな海は初めて。鮫も激写 (^^;写真は防水携帯Xperia Active (ST17i)で撮影。島の周りはシュノーケリングで十分楽しめる。せっかくなのでスキューバダイビングも1回だけやってみた。PADIでオープンウォーターを取得していたので、ライセンスカードをもっていなくてもネットで検索して確認してもらえた。便利。シンガポールからだと飛行機も含めて一人S$3000弱で行って帰ってこれるので、シンガポールに住んでいるならぜひ。< Related Posts >SingaporeでScuba Diving(スキューバダイビング)【海洋ダイブ編】ThailandのBangkokでThai Boxingを見てきたAndroid携帯Sony Ericsson製Xperia ActiveをM1 Shopで買った

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

イメージ
日本語情報は下記Siteで。Titanium mobile で開発しだしたら役に立つ情報のまとめ | astronaughts.net(旧)Titanium mobile で開発を始める時に役立つ情報のまとめ | astronaughts.netそして大人しく本家のTutorial Videoを見る(英語)。 どれも役に立つ内容ばかり。動画再生時間説明Titanium Overview18:56Titaniumの概要You're a Native App Developer Now33:06Android SDKとXcodeの基本的な使い方。Debug Toolの紹介もある。Android, iOS開発したことがなければ見といた方がいい。Titanium Studio6:54Titanium Studioの使い方。初めてTitanium Studioを使う場合は見といた方がいい。Cross-Platform JavaScript Applications
関連Wiki)47:40よく使うCoding Technics。
Fileの分割方法、どこでも呼び出せる関数の定義方法、Codingの注意点。
複数のPlatformで違う処理をする方法。
多言語Fileの作り方(Internationalization) 。UI Fundamentals
関連Wiki)29:30UIの基礎知識。
指定できる単位、画面、位置、Layout
EventHandlerの基礎知識。Working with Local Data
関連Wiki)17:11Local Databaseの使い方。
設定値の保存とかによく使う。ObjectもJSON形式で保存すればいいよ。とか。
DatabaseとTableViewとの関連付け。Working with Remote Data
関連Wiki)22:05Web Server(Service)との通信方法とDemo。Media and the Filesystem
関連Wiki)32:44Audio Fileの…

Nginx+PHP-FPMのTuning設定

イメージ
Nginxとphp-fpm上で動いているWordPressの表示速度を最適化するために調べたときの覚書。
環境: CentOS 5.8 64bit, nginx 1.2.4, php-fpm 5.3.17
参考にしたのは下記Site.
Nginx and PHP-FPM Configuration and Optimizing Tips and Tricksnginx設定の検証(worker_processes、worker_cpu_affinity) | 楽しく情報処理技術者試験Nginxを使ったもう一歩進んだWordPressチューニング | cloudropapache のかわりにnginxを使ってみる(6) nginx でgzipを使うには | レンタルサーバー・自宅サーバー設定・構築のヒントNginx | WordPress Codex
目次
ServerのCPU数に合わせてnginxを設定nginxのfastcgi cacheを設定「Too many open files」対策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;
【2019/04/03 追記】
worker_processes auto;
でコア数を自動設定してくれる。


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
    …

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

イメージ
社内のWeb strategy Meetingのために調べたことを覚書。Idea次第で面白いことが出来そうな予感がする。参考SiteDevelop for Kinect | Microsoft Kinect for Windows第1回: Kinectの概要 | エンジニアコラム|ユニダックス株式会社Kinect for Windowsで機器を作るヒント(2) ―― Kinect for Windows SDK 1.5を試す|Tech Village (テックビレッジ) / CQ出版株式会社KinectとはMicrosoftからXbox 360向けに発売されたGame Device。人の動き(Gesture)や音声認識を可能にする。Kinect - Wikipedia「Kinect for Windows」はPC向けに近距離(Near Mode)に対応して2012年2月に発売。商用Applicationの開発が可能になった。機能RGB Cameraで色識別 Depth Censorで距離(深度)計測 赤外線を投射してDepth Censorが受け取っているので、暗闇でも識別可能 4つのMicrophoneで音声認識。発生源も分かる。 同時に2名までの骨格情報(Skeleton Data)。最大6名までの人物の認識 開発する際はSDKを通して人の骨格情報(Skeleton Data)を提供してくれる 価格、LicenseKinect for Windows : ¥24,800商用利用可能 開発するのにWindows 7 + Visual Studio 2010以上の環境が必要 開発目的のためにKinect for Xbox360(¥14,800)を使うことも可能 事例紹介東急プラザ 表参道原宿でのkinectを使った試着(iPadも使ってます) - YouTube手術中にKinectを活用、執刀医がPCをジェスチャー操作 ニチイが世界初のシステム発売 - ITmedia ニュースニュース - 東大先端研とMSが「Kinect」を使った障害者支援システムを開発:ITproKinectが切り開く“夢の近未来” - @ITKinectアプリShopper Trackerは小売店(物理店舗)のためのGoogle Analyticsだ< Related Posts &g…

nginxのgzip_staticを有効に設定

イメージ
nginxのgzip_staticを有効にすると静的なgzip圧縮ファイルを手動で用意しておけば、nginxがそちらを参照・送信するようになる。CPUの負荷を軽減できる代わりにgzファイルを作る手間が増える。WordPressのSitemapを作るPluginがなぜ"sitemap.xml.gz"も作成するのか理由が分かった。gzip_staticを使うには、nginxのCompile optionを指定してないといけない。./configure --with-http_gzip_static_moduleyum経由でInstallした場合は、どんなCompile optionが設定してあるか確認
# nginx -VOfficial SiteのRPMは
with-http_gzip_static_module
が付いてた。Install方法は前の記事を参考に。< Related Posts >nginx + php-fpmの環境にAPCをInstallしてWordPressのCache機能を有効にCentOSにNginx + php-fpmをInstall、設定してWordPressを動かす

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

イメージ
Titanium Studioが重いので、Command Line(Terminal)からBuild、実行できないものかと調べたときの覚書。環境: Mac OS X 10.8.2, Titanium SDK 2.1.3.GAOfficial Wikiに全ての答えがある。Titanium Command Line Interface | Appcelerator Titanium MobileAliasを追加する
$ vim .bash_profilealias 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.0DirectoryのFull PathとSimulatorのVersionを与えるだけで動いた。停止するときはControl-C最初OSError: [Errno 17] File existsのErrorが表示されたときはBuild以下のDirectoryを削除すると動いた。< Related Posts >[Titanium] AlloyのSample App Screenshot一覧TitaniumのMVC Framework"Alloy"用Sample Test Appsを動かすTitanium StudioにKitchenSink(コードサンプル集)をGitHubからDownload, Install

[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/simplebasics/simplebasics/builtinsbasics/controller_eventsbasics/markup_eventsbasics/markup_requirebasics/multiple_viewsTapするとViewが切り替わるui/android_menu下記Errorで起動せず。[ERROR] Script Error = 'undefined' is not an object (evaluating '$.__views.index.activity') at index.js (line 34).ui/buttonbarui/coverflowSwipeすると画像をカバーフロー形式で一覧できる。ui/mapui/navgroup