投稿

10月, 2013の投稿を表示しています

モバイルアプリ向けにRESTfulなJSON APIを設計するために

イメージ
Titanium Mobileを使ってWordPressと連携できるiOSアプリ、Androidアプリを作った。【Web】teniteo[テニテオ]【iOS】teniteo | iTunes【Android】teniteo - Google Play の Android アプリアプリからのリクエストはWordPress(PHP)で処理しているので、Web版のメソッドを流用出来て開発は比較的楽だった。しかし、こんな独自仕様のAPIではなく、そもそもアプリのバックエンド(WebAPI)はどうあるべきか調べてみた。参考サイトWeb API Design - 開発者が愛するインターフェイスを作るAnnouncement: Free eBook on Web API Design | Apigee BlogREST APIが主流らしい。上記サイトからダウンロードできる無料のPDFにWeb APIを設計するための指針がまとめられていて分かりやすい。WordPress.comではREST APIを開発者向けに公開しているので、URIを決めるときの参考になる。REST API | Developer Resources | WordPress.comさらにサーバー側はNode.jsで構築すればPHPの50倍速くなるらしい。とりあえず簡単なベンチマークNode.js,PHP,Perl - Qiita [キータ]Webアプリサーバーの常識を覆す「Node.js」 - 大量アクセスを小さいシステムで:ITproJavaScriptだけでクライアント側(Titanium Mobile)とサーバー側が開発出来るのは嬉しい。ただし、WordPressが提供している便利関数が使えなくなるのでテスト工数は増えそう。少ない「人」と「お金」と「時間」で開発するためにはこういった技術を活用することがますます重要になりそう。< Related Posts >node.js用の開発Document, Coding Guide(コーディング規約) #nodejs_jpWebSocket, node.js, Socket.IOって何?

[Subversion]日本語ファイル名をコミットするとエラー

イメージ
日本語を含む名前のファイルをTortoiseSVNでコミットしようとするとエラーになったときの覚書。環境: Amazon Linux AMI release 2013.09, Subversion Server 1.7.13, TortoiseSVN 1.8.2SubversionはYUM経由でインストール。それまでは日本語でもコミット出来ていた。たぶんサーバー側でyum updateしてSubversionのバージョンが上がったからだと思う。TortoiseSVNのエラーCommand: Commit
Modified: C:\Users\daiki\Documents\Projects\hoge\Documents\99.Etc\アンケート.xls
Sending content: C:\Users\daiki\Documents\Projects\hoge\Documents\99.Etc\アンケート.xls
Error: Commit failed (details follow):
Error: File
Error:  'C:\Users\daiki\Documents\Projects\hoge\Documents\99.Etc\アンケート.xls'
Error:  is out of date
Error: File not found: transaction '668-jc', path
Error:  '/trunk/documents/99.Etc/%A2%E3%83%B3%E3%82%B1%E3%83%BC%E3%83%88.xls'
Error: You have to update your working copy first.
Completed!:サーバー側のエラーログ
# tail -f /var/log/httpd/error_log[Wed Oct 23 08:24:04 2013] [error] [client 61.205.209.20] Could not fetch resource information.  [404, #0]
[Wed Oct 23 08:24:04 2013] [error] [client 61.205.209.20] Could not get created …

Google Play, App Storeのアプリ画面を起動するQRコードを生成

イメージ
チラシを作成する際にQRコードを貼り付けて、読み込むとAndroidアプリ、iPhoneアプリをダウンロードできるアプリストアを表示するようにしたくて調査したときの覚書。ちなみにQRコードを読み取るアプリをダウンロードしてスキャンするぐらいならアプリストアでキーワード検索した方が早い。。。URIスキーム(URLスキーム)の仕組みを使うと起動するアプリをある程度制御することができる。URI scheme - Wikipedia, the free encyclopediaGoogle Playの「teniteo」アプリを起動する場合market://details?id=jp.teniteo.appApp Storeの「teniteo」アプリを起動する場合itms-apps://itunes.apple.com/jp/app/teniteo/id619969170これのQRコードを生成する。下記サイトで無料で作れる。サイズも指定出来て便利。QR Code generator - create QR Codes (for free) [logo, business card, vCard, t-shirt, mug] - goQR.meちなみにこの記事に付けている画像が実際に生成したQRコード。チラシに必要な「Google Play」と「App Store」のロゴのベクトル画像は下記から手に入る。App Store Marketing Guidelines - Apple DeveloperAndroid app on Google play vector in .EPS, .CRD, .AI format< Related Posts >[Titanium] iOSとAndroidで地図アプリ(Google Maps)を起動【Androidアプリ】バーコード読み取り「Zxing」をEclipseで使う

Windows8からMacの共有フォルダへのアクセスが切断されたりする

イメージ
会社の開発環境では、Mac miniがメインサーバーになっていて、WindowsからMacの共有フォルダにアクセスしてTitanium Mobileの開発したり、VMware Fusion上でLinuxを動かしていたりする。WindowsからMacの共有フォルダ(SMB/CIFS)にアクセスして、TortoiseSVNでコミット作業しているとたまに途中で失敗することがあったので、イラっときて調べたときの覚書。環境: Windows 8 64bit, OS X 10.8.5IPv6が悪さすることがあるらしい。Mac OS 10.7 Lion でやたらネットワークが遅い、切れるときは、 IPv6 を切ってみよう - Qiita [キータ]書いてある通り
System Preferences → Network → Advanced ... → Configure IPv5
を「Link-local only」にするとコミットに失敗することがなくなった。さらに下記記事を読んでSMB/CIFSを理解すると問題の切り分けが出来そうな気がする。基礎から学ぶWindowsネットワーク:第20回 ファイル共有プロトコルSMB/CIFS(その1) (1/3) - @IT< Related Posts >Networkが断続的に切断されるのでLANケーブルを疑ってみた【Mac】WindowsからMacの共有フォルダにアクセスする

nginx + php-fpmの環境で処理が途中で止まる

イメージ
サーバーから外部API経由でデータを取得している処理でたまに途中で失敗していたので調べてみた。環境: CentOS 5.9 x86_64, nginx 1.4.3, php-fpm 5.4.20エラーログを見てみると# tail -f /var/log/nginx/error.log2013/10/17 20:03:36 [error] 5377#0: *3392 readv() failed (104: Connection reset by peer) while reading upstream# tail -f /var/log/php-fpm/error.log[17-Oct-2013 20:04:31] WARNING: [pool www] child 10965 exited on signal 11 (SIGSEGV) after 30946.471106 seconds from start
[17-Oct-2013 20:04:31] NOTICE: [pool www] child 13670 startedphp-fpmのrequest_terminate_timeoutを設定すると直るという情報があったので設定してみる。# vi /etc/php-fpm.d/www.confrequest_terminate_timeout = 30s# /etc/rc.d/init.d/php-fpm restart< Related Posts >Nginx+PHP-FPMのTuning設定FileをUploadするためのnginxとphp.iniの設定

Google Apps Scriptで自動的にGmailのメールを定期的に削除

イメージ
メールマガジンなどはGmailのフィルター機能を使ってラベル付け+アーカイブしているけど、キーワード検索するとヒットしてウザいので定期的に削除することにした。参考にしたサイトはこちら。時間が経過すると自動的にメールを削除するGmailフィルターをつくる | Lifehacking.jpCreate time-based Gmail filters with Google Apps Script | johnedayjohneday手順Google Apps Scriptにアクセスして「空のプロジェクト」を作成 メールを検索して削除するスクリプトをJavaScriptで記述 「現在のプロジェクトのトリガー」で実行間隔を設定上記サイトのスクリプトを参考に、複数のラベルを対象とするように変更したのがこれ。「filters」に設定する値はGmail上でラベルをクリックしたときに検索バー表示される値そのまま。試すときは「ゴミ箱」を空にして、「max」の値を5ぐらいで動作確認した方がいい。もっと簡単設定できるようにUIを付けたウェブアプリケーションも作れるような気がする。< Related Posts >[Google Apps]複数Domainを管理している場合にDKIMを設定してviaが出ないようにするGmailフィルタメモ。必要なメールだけ携帯に転送

[Titanium Mobile]TabGroupのTop LevelでAndroidのMenuを表示

イメージ
Titanium SDK 3.1.3.GAに上げたらAndroidのメニューが表示されなくなったので調査したときの覚書。環境: Titanium SDK 3.1.3.GATabGroupの各タブのトップだけ表示されず、下の階層へ画面遷移すれば普通にメニューが表示される。今までは共通関数で、win = Titanium.UI.createWindow();
win.activity.onCreateOptionsMenu = function(e) {
    e.menu.add({title: L('menu1')});
});とやっていた。どうやらTabGroup直下のwndowにはactivity(≒画面)がないらしい。Android menu options doesn't appear... onCreateOptionsMenu isn't called | Community Questions & Answers | Appcelerator Developer CenterTitaniumではactivityを持っているwindowを「heavyweight」windowと呼んでいて、「heavyweight」なwindowを作成するかどうかを条件に応じて判断している。詳しくは下記。Activities - Titanium 3.X - Appcelerator DocsTabGroup直下の場合はTabGroupのActivityでonCreateOptionsMenuする必要があるみたい。tabGroup = Titanium.UI.createTabGroup();
tabGroup.activity.onCreateOptionsMenu = function(e) {
    e.menu.add({title: L('menu1')});
});< Related Posts >Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集

[Titanium Mobile]HTTPClientのSession(Cookie)をAndroidのWebViewに引き継ぐ

イメージ
WordPressとやり取りするアプリをTitanium Mobileで開発しているときに、HTTPClientでログインしておいたのにWebViewを使うとセッションが引き継がれないので調査したときの覚書。表示するだけならHTTPClientでGETして、WebViewのhtmlに流し込んだ方が簡単。問い合わせフォームなど入力してPOSTするページはWebViewのurl指定で表示させたい。Androidのみ。iOSは何もしなくても引き継がれる。参考になったサイト。Cookies and Webviews again | Community Questions & Answers | Appcelerator Developer Center環境: Titanium SDK 3.1.3.GA, WordPress 3.6.1まずは、HTTPClientしたときのCookieを覚えておくxhr = Titanium.Network.createHTTPClient();xhr.onload = function() {
    // Save cookie for Android WebView
    if (this.getResponseHeader('set-cookie')) {
        self.cookie = this.getResponseHeader('set-cookie');
    }
}その後、WebViewを使用するときにevalJSを使ってCookieをセットするview = Titanium.UI.createWebView();
view.addEventListener('beforeload', function() {
    cookie = self.cookie.split(/,\s(?=\w+=)/g);
    cookie.forEach(function(item) {
        item.split('; ').forEach(function(data) {
            view.evalJS('document.cookie="' + data + '";');
       …

Subversion 1.8系をCentOSにInstall (YUM経由)

イメージ
Subversionのクライアント環境だけCentOSに追加したときの覚書。環境: CentOS 5.9, Subversion 1.8.3Subversionのサービスを提供しているWANdiscoがインストール用のシェルスクリプトを配布しているのでそれを利用する。Download Subversion (SVN) 1.8.x Server & Client | Download Subversion (SVN) 1.6.x Server & Client | WANdiscoダウンロードするために登録が必要。YUMで配布してくれるなら、これくらいはお安い御用。登録したメールアドレスにリンクが送られてくるので、それをクリックしてダウンロード。あとはサーバーに置いて実行する。# chmod 655 ./svn1.8_rhel5_wandisco.sh
# ./svn1.8_rhel5_wandisco.shSubversionのクライアントとして使うのでapacheのSVNモジュールはインストールしない。チェックアウトしてみる。
# svn checkout http://dev.hoge.net/project/branches/demo demo/ --username hogeちなみにサーバーはSubversion 1.7.9コマンドは忘れるものなのでヘルプで確認
# svn help< Related Posts >CentOS + Subversion + LDAP + ApacheをInstallして設定SubversionをCompileしてsvnコマンドを使用(RPMとYUMを使う方法を追記)

LESSファイルを監視してCSSファイルに自動コンパイルする環境を構築

イメージ
CSSフレームワークの「Bootstrap」をベースにして、CSSを動的に生成する言語「less」の環境を構築したときの覚書。環境: CentOS 5.9 x86_64, Node.js v0.10.20, Grunt 0.4.1サーバー側でlessファイルからcssファイルにコンパイルするためにはnode.jsの環境が必要。node.jsはnvm (Node Version Manager) 経由でインストールする。gitが必須らしい
# yum install gitnvmをインストール
# wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | shここで一旦ログアウト&ログインnodejsをインストール
# nvm install v0.10.20デフォルトでv0.10.20を使うようにする
# nvm alias default 0.10.20lessファイルをcssファイルにコンパイルするソフトをインストール
# npm install -g less試してみる
# cd /home/projects/hoge/
# lessc less/hoge.less css/hoge.css次はlessファイルを監視して、保存と同時にcssファイルにコンパイルする環境を作る。参考にしたサイトGetting started - Grunt: The JavaScript Task Runnerコーダーさんの為のGrunt入門(後編)〜CSSプリコンパイラ編 | Mach3.laBlog手順タスク管理ツール「Grunt」をインストール LESSをCSSにコンパイルするGruntプラグイン「grunt-contrib-less」をインストール ファイルを監視して更新を検知するGruntプラグイン「grunt-contrib-watch」をインストールGruntのコマンドラインツールをインストール
# npm install -g grunt-cliGrunt本体とプラグインをインストール
# cd /home/projects/hoge/
# npm install grunt --save-dev
# npm install grunt-contrib-less --save-dev
# npm inst…