投稿

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 Blog REST 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」 - 大量アクセスを小さいシステムで:ITpro JavaScriptだけでクライアント側(Titanium Mobile)とサーバー側が開発出来るのは嬉しい。 ただし、WordPressが提供している便利関数が使えなくなるのでテスト工数は増えそう。   少ない「人」と「お金」と「時間」で開発するためにはこういった技術を活用することがますます重要になりそう。   < Related Posts > node.js用の開発Document, Coding Guide(コーディング規約) #nodejs_jp WebSocket, node.js, Socket.IOって何?

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

イメージ
日本語を含む名前のファイルを TortoiseSVN でコミットしようとするとエラーになったときの覚書。 環境: Amazon Linux AMI release 2013.09, Subversion Server 1.7.13, TortoiseSVN 1.8.2 Subversionは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.20

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

イメージ
チラシを作成する際にQRコードを貼り付けて、読み込むとAndroidアプリ、iPhoneアプリをダウンロードできるアプリストアを表示するようにしたくて調査したときの覚書。 ちなみにQRコードを読み取るアプリをダウンロードしてスキャンするぐらいならアプリストアでキーワード検索した方が早い。。。   URIスキーム(URLスキーム)の仕組みを使うと起動するアプリをある程度制御することができる。 URI scheme - Wikipedia, the free encyclopedia   Google Playの「teniteo」アプリ を起動する場合 market://details?id=jp.teniteo.app   App 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 Developer Android 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.5 IPv6が悪さすることがあるらしい。 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.log 2013/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 started php-fpmの request_terminate_timeout を設定すると直るという情報があったので設定してみる。 # vi /etc/php-fpm.d/www.conf request_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.jp Create 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.GA TabGroupの各タブのトップだけ表示されず、下の階層へ画面遷移すれば普通にメニューが表示される。 今までは共通関数で、 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 Center Titaniumではactivityを持っているwindowを「heavyweight」windowと呼んでいて、「heavyweight」なwindowを作成するかどうかを条件に応じて判断している。詳しくは下記。 Activities - Titanium 3.X - Appcelerator Docs   TabGroup直下の場合は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="

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

イメージ
Subversionのクライアント環境だけCentOSに追加したときの覚書。 環境: CentOS 5.9, Subversion 1.8.3 Subversionのサービスを提供している 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.sh Subversionのクライアントとして使うので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 git nvmをインストール # 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.20 lessファイルを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-cli Grunt本体とプラグインをインストール # cd /home/projects/hoge/ # npm install gr