投稿

nodejsからPHPを実行してWordPressのユーザー認証

イメージ
nodejsを使ってiPhone, Androidアプリ用のRest APIを開発する際に、WordPressのデータベースを使ったユーザー認証をしたかったので調査。 環境: CentoOS 5.10, node.js 0.10.21, php 5.4.21 最初はPHPでやっていることをJavaScriptで再現しようとしたけど、ソースコードを読んで無理そうだと諦めた。 なので、nodejsからPHPを外部コマンドとして呼び出して返り値を受け取ることにした。 nodejsから外部コマンドを実行するのは"child_process"を使うらしい。 Child Process Node.js v0.10.22 Manual & Documentation   nodejsから実行するPHPファイル。 wp_checkpassword.php <?php /** * WordPress Check Password for CommandLine * * @usage *   # php wp_checkpassword.php --hash="hash" --password="password" --path="/path/to/wordpress" */ $options = getopt(null, array('hash:', 'password:', 'path:')); // // Validation // if (empty($options['hash']) ||     empty($options['password']) ||     empty($options['path'])) {   exit('option error'); } // // @see wp-includes/pluggable.php line:1448 // $check = false; require_once($options['path'] . 'wp-includes/class-phpass.php...

[Titanium Mobile]Performance改善のためApplicationの設計を見直す

イメージ
Android, iPhoneアプリが一段落したので、次期開発に向けてアプリの設計とより良いパファーマンスを得られる書き方など調べ直したときの覚書。 環境:Titanium SDK 3.1.3.GA まず公式ドキュメント Best Practices and Recommendations - Titanium 3.X - Appcelerator Docs アプリのサンプルも公開されてた。 Community app - Titanium 3.X - Appcelerator Docs でもこれ2年間更新されてない(SDK v1.8.1)ので、abcsWriterの方がいいかも。 appcelerator-titans/abcsWriter | github 両方とも「名前付き関数(named function)」を多用しているので無名関数(nameless function, anonymous function)とどっちがいいか調査。 nameless vs named function · jsPerf Are named functions or anonymous functions preferred in JavaScript? - Stack Overflow 名前付き関数の方が速いらしい。 var hogeFunc = function() {}; このような無名関数を基本使っていたのでショック。今後は名前付きにしよう。。。   < 2013/11/20 Modified > ChariTi というアプリが 非常に 参考になる。 lib/core.js, lib/http.js, utilities.jsとかヨダレが出そうになるぐらい。別記事で詳細を紹介する予定。   去年のCODESTRONG(カンファレンス)のビデオを見てみた。 Breakout session - iOS Internals and Best Practices - CODESTRONG 2012 今後気をつけること。 setterを使うよりプロパティでアクセスした方が速い "透明"はコストが掛かるので常に背景色を設定した方が速い   関連した記事も見つけた。これは...

携帯(スマフォ)2台持ちなら激安SIM月額490円がお得

イメージ
最近激安SIMがあることを知ったので、契約して使ってみた。 参考サイト 格安SIM(ドコモMVNO等)LTE比較ランキング (2013年11月更新) | 最速資産運用 契約したのはこちら。 月額490円|ServersMan SIM LTE 100:【dream.jp】 概要 初期費用:3150円 月額:490円 ドコモ回線 回線最大速度100kbps(ドコモのXiは最大150Mbps) 転送量制限なし 高速化するオプション有り 1年縛り、2年縛りとかがないので気軽に試せる   切り替える前のドコモ料金はこちら。 ガラケー(F-01C) 基本使用料 (FOMAタイプSS_バリュー) +1年割り +ファミリー割引 924円 ガラケー(F-01C) パケ・ホーダイ ダブル定額料 372円 スマフォ(Galaxy S2) 基本使用料 (Xiデータプランフラットにねん) 3791円 スマフォ(Galaxy S2) SPモード 300円   これをガラケー+激安SIMにすると ガラケー(F-01C) 基本使用料 (FOMAタイプSS_バリュー) +2年割り 924円 スマフォ(Galaxy S2) ServersMan SIM LTE 100 490円   単純計算で 毎月3973円 安くなる。   100kbpsでも通勤途中は録画して転送した動画を見ているので問題なし。体感的には「ちょっと遅いかな?」という程度。電車の中の繋がりにくさは同じ。 今度利用者数が増えると遅くなりそうな予感。。。 「Xiデータプランフラットにねん」の 解約金1万円 を払っても変更した方が断然お得。ただ自分のスマフォが他社のSIMに変更出来るかは要確認。 「パケ・ホーダイ ダブル定額料」を解約すると「Xiデータプランフラットにねん」が正規料金になってしまうので、 月末(3日前ぐらいからOK)にドコモショップで手続きする必要がある 。   < 2013/11/28 Modified > ドコモショップに行ってきたら解約当月は必ず「Xiデータプランフラットにねん」の正規料金を請求されるので、月末に行こうが関係ない。 日割りに出来ない...

nginx + node.js + pm2でアプリ向けのREST API環境を構築

イメージ
前回の記事でWeb APIについて勉強し、モバイルアプリからのリクエストはNode.jsで捌くことにした。そのために環境を構築したときの覚書。 環境:CentOS 5.10, Node.js 0.10.21, nginx 1.4.3, pm2 0.6.5   < 2014/05/30 Modified > CentOS6版も書いたのでそちらも参考に。 SE奮闘記: CentOS6 + nginx + PHP5.4 + MariaDB10 + WordPress + node.jsの環境を構築する手順をまとめ   1.Node.jsをインストール < 2013/12/09 Modified > 本番環境の場合は実行ユーザーで作成した方がいいので、この記事の最後の方を参照。 前の記事を参考にnvmでインストールする。 SE奮闘記: LESSファイルを監視してCSSファイルに自動コンパイルする環境を構築 # nvm install v0.10.21 # nvm alias default 0.10.21   2.「Hello World」を作成 プロジェクトディレクトリに移動 # cd /home/project/ Express というNode.js向けのフレームワークをベースにする。 restify というREST Webサービス用に特化したモジュールもあるけど、開発のスピードと下記ベンチマークを参考にExpressを選択。 expressjs vs perfectapi vs restify 速度比較 | ab benchmarks on EC2 medium instance expressjsの公式ドキュメント 通りに「Hello World」を作る。 # vi package.json {   "name": "hello-world",   "description": "hello world test app",   "version": "0.0.1",   "private": true,   "dependencies...

iOSアプリをDistributeするときに120x120が必要になった

イメージ
Titanium Mobileで作成したアプリをストアに送信する「Validation」をしたときに下記エラーが出るようになった。 Missing recommended icon file - The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format. 120x120のアイコンが必要になったらしい。 環境: Titanium SDK 3.1.3.GA 参考にしたサイト。 Icons and Splash Screens - Titanium 3.X - Appcelerator Docs iOS Human Interface Guidelines: Icon and Image Sizes | iOS Developer Library   [iOS 7] iOSアイコンファイル早見表(2013/9) | Developers.IO   上記サイトを参考に Resources/iphone/appicon-60.png Resources/iphone/appicon-60@2x.png を用意したらValidationが通った。   < Related Posts > Titaniumで作成したアプリをApp Storeに申請してみた

モバイルアプリ向けに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の設定