投稿

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

MacをMavericksにしたらTortoiseSVNのコミットが失敗する

イメージ
TitaniumもMavericksをサポートするようになったので、開発サーバーになっているMac miniをMavericksにアップグレードしてみたときの覚書。環境: OS X Mavericks 10.9.1, Windows 8.1, TortoiseSVN 10.8.4WindowsからMacの共有フォルダにあるソースをTortoiseSVNでコミットしようとすると下記エラーError: Commit failed (details follow): 
Error: Can't move 
Error:  '\\hoge\hogehoge\.svn\tmp\svn-CF8BDE60' 
Error:  to 
Error:  '\\hoge\hogehoge\.svn\pristine\3a\3abd0eabfa1e58f83cfcce2403a3dc22dcb7ad79.svn-base': 
Error:  パラメーターが間違っています。  Macのログには下記エラー$ less /var/log/system.logDec 25 11:21:11 local smbd[184]: File system does not support 0X0, size attrs
Dec 25 11:21:11 local smbd[184]: File system does not support 0X40000, file attrs
Dec 25 11:21:11 local smbd[184]: File system does not support 0X0 time attrsフォーラムにも上がっていてまだ直ってないらしい。Server File Sharing unstable on mac and...: Apple Support CommunitiesSMB1のみに切り替えると出来るという情報があるが私の環境では成功しなかった。しょうがないので、しばらくはSSH経由でsvn commitすることにした(一度別フォルダに退避して、svn checkoutしてから上書きする)。MacのSubversionを1.8に挙げないとTortoiseSVNでログを確認できないのが不便。Appleさん、早く直してくださ…

Node.js + Expressの環境でファイルをアップロードする処理

イメージ
Titaniumで開発しているアプリからファイルをアップロードして保存する処理を開発していたときの覚書。環境:node.js v0.10.22, express v3.4.6, busboy v0.0.12よく見かけるのはapp.use(express.bodyParser());としてreq.filesを参照する方法。しかし、これを記述すると下記エラーをnodejsが出力する。connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0リンク先を見ると、ディスクにファイルを保存するのはセキュリティ上の問題から非推奨となり、他のパーサーを使えとある。multipartybusboyを試した結果、難易度は上がるけどbusboyを使ってストリーム形式で処理することにした。理由はbusboyはアップロードするファイルサイズを制限できるから。ちなみにmultipartyはTitaniumからアップロードしたcontent-typeに対応してない(multiparty3.1.0で確認)。こちらのissue#29にあるように正規表現を直せば対応可能。サンプルコードはGitHubのReadmetestを見れば何となく分かると思う。実際に使ってみた注意点をいくつか(※v0.0.12)アップロードしたファイル名が日本語だとfilenameが化ける。issue#20に上がってる
→ filenameを使わない実装を推奨
→ ちなみにmultipartyは大丈夫
→ v0.0.13で修正されたらしい。試してない。  busboy.on('file')の中でfileに対して操作をしないとbusboy.on('end')が発生しない。このissue#16で説明してる。 ファイルサイズの制限に引っかかったら「limit」イベントが発生するので、書き込み中のファイルは自前で削除する必要がある。< Related Posts >node.jsでImageMagick + g…

node.jsでImageMagick + gmをインストールして画像処理

イメージ
Node.jsで画像処理(Resize, Crop)をする方法を調べたときの覚書。環境: CentOS 5.10, node.js v0.10.21GraphicsMagickもしくはImageMagickをnode.jsから利用できるモジュール「gm」が良さそうなのでインストールしてみた。< 2014/08/21 Modified >
CentOS6.5の環境ではYUM経由でImageMagick 6.5.4-7がインストールされて問題なかったので、こっちを推奨。まずはImageMagickでJPEGとPNGをサポートするようにライブラリをインストール
# yum install libjpeg libjpeg-devel libpng libpng-devel何となくJPEG 2000にも対応しておく
# yum install jasper-develImageMagickをソースからコンパイル(yum経由は古いから)
# cd /opt/software/
# wget http://www.imagemagick.org/download/ImageMagick.tar.gz
# tar xzvf ImageMagick.tar.gz
# cd ImageMagick-6.8.6-4/
# ./configure
# make
# make installバージョンの確認
# convert --version対応しているフォーマット一覧
# convert -list format今度はgmのインストール
# cd /home/project/hoge/
# npm install gmImageMagickを使う場合は次のようになる。var gm = require('gm').subClass({ imageMagick: true });
gm("img.png").resize(150, 150).write('/path', callback);USING IMAGEMAGICK | gm : GraphicsMagick for node.js< Related Posts >REST APIのテストする開発ツール Google Chrome「Postman」nginx + node.js + …

REST APIのテストする開発ツール Google Chrome「Postman」

イメージ
iPhone, Androidアプリ向けにRest APIなWebサービスを開発している時にアプリを起動せず簡単にテストするツールを探したときの覚書。参考testing - What tools can I use to test a REST API? - Stack OverflowWhat tools do you use to test your public REST API? - Stack OverflowREST / HTTP API Tools for Development and Testing | Minimum Viable PontificationGoogle Chrome拡張機能「Postman - REST Client」多機能でサクサク動くので使いやすい。履歴機能など必要なものは揃っていて、ソースコードも公開されているので素敵すぎる。Firefoxアドオン「Poster」「Postman - REST Client」があればいらない。インストール後は右下の「P」かツールから起動する。「Headers」は任意の値を設定するときに使う。「Parameters」を登録しておけば「Body from Parameters」で値を生成してくれるので便利。< Related Posts >nginx + node.js + pm2でアプリ向けのREST API環境を構築iOS SimulatorからPOSTしているDATAを確認(Network監視)IEのAjax通信をDebugするときにPOST情報を表示「Fiddler2」jQueryを使ってPHPとJSON形式のデータをやり取りする方法

Titaniumを使ったアプリと苦労した事とかのまとめ2013年

イメージ
Titanium™ Advent Calendar 2013の12日目です。今年の仕事はTitanium Mobileを使ったアプリ開発の1年でした。今回は開発したアプリの紹介と経験をまとめてみました。開発したアプリがこれ。teniteo(iPhone用アプリ)teniteo(Android用アプリ)このアプリの特徴WordPressのフロントエンド。本体 → http://teniteo.jp/ソースコードはiPhone, Android共通。たまに内部で処理を分岐。 Alloyは使ってない。
参考:[Titanium] AlloyのSample App Screenshot一覧サーバー側はWordPress(PHP)のプラグインで処理
参考:[Titanium] JSON.stringifyした値をPOSTしてもjson_decodeが失敗するMapモジュールを使ってる。
参考:[Titanium] Google Maps API v2用Androidモジュールを設定
参考:[Titanium] iOSとAndroidで地図アプリ(Google Maps)を起動Facebookアカウントでのログインも出来る。
参考:[Titanium Mobile] Facebook Moduleを使ったLoginが失敗するアクセス解析はサーバー側でやる。
参考:【PHP】Server-SideでGoogle Analyticsを使ったTrackingをする苦労したこと最初はどんな書き方をしていけばいいか分からない。
→ 最近公開されたChariTiというアプリが非常に参考になる。
参考:[Titanium Mobile]Performance改善のためApplicationの設計を見直す
参考:Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集iPhoneアプリの方が開発しやすいがAndroidも途中で確認しないと後でハマる。
参考:Galaxy S4に対応したAndroid Emulator AVDを作成特にAndroidのマルチ画面関連の知識は避けて通れない
参考:anyDensity="false"から脱出するためにAndroidの画面サイズ関連を理解するAndroid2.3以下で画像を加工するとたまに落ちる
参考:[Titan…

Google Play BooksへPDF形式を登録・出版(電子書籍化)

イメージ
愛知県中心に発行しているフリーペーパー「teniteo」の東京版「teniteo mini」を無事出版できた。バックナンバー | teniteo[テニテオ]iPhone, Android向けのteniteoアプリも利用者が増えてきたので、以前から要望のある「フリーペーパー自体をスマフォで見れるようにしたい」というのをGoogle Play Booksでどの程度実現できるか試してみた。詳しくは公式ヘルプで。Google の Books ヘルプセンター利用登録後、ブックスパートナーで設定できる配信先は2つ。Google Play
→ 主にスマフォ向け「Playストア」で検索でき、購入後Androidの「Playブックス」で読める。
Googleアカウントで紐付いていて、いろんなプラットフォームで読む方法が提供されている(Web, Android, iOS)Google ブックス
→ 主にPC向けGoogleの書籍検索から検索・プレビューが出来るようになる。
プレビュー出来る範囲を指定可能。
Flash版のデジタルブックと比べて、本のような動きは出来ないけど問題なく読める。
Googleの検索に引っかかるようになるのは大きい。40ページ(46MB)のPDFファイルをアップロードして処理完了するまで、約1時間かかった。ページごとのPDFをアップロードすることも可能。その際はファイル名をガイドラインに従う必要がある。書籍の設定: コンテンツ ファイル - Books ヘルプ結局2時間経ってもGoogle Play、Google ブックスに表示されなかったので、次の日(約22時間後)確認したら表示されてた。teniteo mini 2013.WINTER 東京版 - Google Play の書籍teniteo mini 2013.WINTER 東京版: 就学前の子供を持つママの為の地域情報誌「テニテオ」 - Google ブックスでも「要対応」に次のエラーが表示されていて、Google Playから購入できない(価格は「無料」に設定)。この書籍は次の理由で掲載されていません: 価格情報がないか、適切ではありません「Google Playの設定」から価格のところで国コードを入力する箇所に「WORLD」としていたのが原因みたい。「JP」に変更してしばらくしたら無料でダウンロードできるよう…

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 & Documentationnodejsから実行する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');
// By default, use the portable hash…

[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 · jsPerfAre 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を使うよりプロパティでアクセスした方が速い "透明"はコストが掛かるので常に背景色を設定した方が速い関連した記事も見つけた。これは実際やってみる。Titanium Mobileでアプリ開発: UI部品数が多いView表示の高速化
→ visible=falseにして…

携帯(スマフォ)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 100490円単純計算で毎月3973円安くなる。100kbpsでも通勤途中は録画して転送した動画を見ているので問題なし。体感的には「ちょっと遅いかな?」という程度。電車の中の繋がりにくさは同じ。今度利用者数が増えると遅くなりそうな予感。。。「Xiデータプランフラットにねん」の解約金1万円を払っても変更した方が断然お得。ただ自分のスマフォが他社のSIMに変更出来るかは要確認。「パケ・ホーダイ ダブル定額料」を解約すると「Xiデータプランフラットにねん」が正規料金になってしまうので、月末(3日前ぐらいからOK)にドコモショップで手続きする必要がある。< 2013/11/28 Modified >
ドコモショップに行ってきたら解約当月は必ず「Xiデータプランフラットにねん」の正規料金を請求されるので、月末に行こうが関係ない。日割りに出来ないので、新しいSIMカードが届いたらすぐ解約しても大丈夫。値段は変わらないので月末まで持っててもいいかも。前の担当者は研修生だったので対応があやふや。やっぱり慣れている人だとサクサク話が進むので早い。ServersMan SIMカードは申し込んでから届くまでに1…

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.212.「Hello World」を作成プロジェクトディレクトリに移動
# cd /home/project/ExpressというNode.js向けのフレームワークをベースにする。restifyというREST Webサービス用に特化したモジュールもあるけど、開発のスピードと下記ベンチマークを参考にExpressを選択。expressjs vs perfectapi vs restify 速度比較 | ab benchmarks on EC2 medium instanceexpressjsの公式ドキュメント通りに「Hello World」を作る。
# vi package.json{
  "name": "hello-world",
  "description": "hello world test app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "3.x"
  }
}# npm inst…

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 DocsiOS Human Interface Guidelines: Icon and Image Sizes | iOS Developer Library[iOS 7] iOSアイコンファイル早見表(2013/9) | Developers.IO上記サイトを参考にResources/iphone/appicon-60.pngResources/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 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…

猫のトイレ臭い対策でデオトイレを買ってみる

イメージ
普通の猫トイレを使っていたけど、1週間ほどで臭くなりだして、ニャンコも嫌がっている様子。揃えた猫用品は前の記事を参照。猫2匹、5ヶ月のオスとメス。調べてみると重曹(ベーキングパウダー)を下に敷くと臭いが抑えられると聞いてやってみた。確かに臭いが控えめになった気がする。。。けど、トイレが綺麗になるわけもなく、2週間で猫砂をまるっと替えているのが現状。< 2017/11/23 追記 >
普通の猫トイレは猫砂の下にデオトイレ用の吸収シートを敷いて使っている。何とかならないものかと調べてみて、今度はシート交換式のデオトイレを買ってみた。ユニチャーム1週間消臭・抗菌デオトイレ フード付き本体セット (アイボリー)おしっこの場合は下のシートが吸収してくれるので、掃除がかなり楽になる。うんちは相変わらず臭い。こっちでうんちした場合はなぜか砂をかけてくれない。砂が大きいから?前の猫トイレと両方おいておくと、前のトイレを優先的に使うみたい。猫砂の感じがお気に入りらしい。前の猫砂をデオトイレで使いたいが、砕けてシートの上に落ちてしまう。総体的には買って良かった。おしっこをデオトイレ、うんちを前の猫トイレでしてもらえると大変助かります。
< Related Posts >猫を向かい入れるために猫用品を揃える

[Titanium] iOSとAndroidで地図アプリ(Google Maps)を起動

イメージ
アプリ内の地図と地図アプリを連携すると便利なので、パラメータを渡して起動する方法を調査。環境: Titanium SDK 3.1.1.GA参考にしたのは下記。Google Maps URL Scheme - Google Maps SDK for iOS - Google DevelopersApple URL Scheme Reference: Map LinksGoogle Maps のパラメータ実際書いたコードを下記に抜粋。iOSの場合はグーグルマップアプリがインストールしてあれば、そちらを優先して開く。
Androidの場合はおなじみのアプリを選択する。緯度と経度をクエリとして渡した方がピンが立つので分かりやすい。if (this.isAndroid) {
    // Google Map
    url = [];
    url.push('http://maps.google.com/maps');
    //url.push('?ll=' + this.region.latitude + ',' + this.region.longitude);
    url.push('?q=' + this.region.latitude + ',' + this.region.longitude);
    url.push('&z=16');
    Titanium.Platform.openURL(url.join(''));
    return true;
}if (this.isIos) {
    // Google Map of Native App
    url = [];
    url.push('comgooglemaps://');
    //url.push('?center=' + this.region.latitude + ',' + this.region.longitude);
    url.push('?q=' + this.region.latitude + ',' + this.region.longitude);
    url.pus…

[Titanium] Google Maps API v2用Androidモジュールを設定

イメージ
Titanium Mobileで作成したiOSアプリ、Androidアプリ内にGoogle Mapを表示して、店舗情報をプロット表示するために調査したときの覚書。環境: Titanium SDK 3.1.1.GATitanium公式ドキュメントを読む。Titanium.Map | Titanium 3.X - Appcelerator DocsiOSでは「Titanium.Map」
Androidでは「Modules.Map」というモジュール
を使うらしい。iOS用にはKitchenSinkを参考にすれば難しくないと思う。ここからはAndroid用のモジュールを使えるようにするまでの手順。Android用のモジュールに関する公式ドキュメントはこちら。Modules.Map | Titanium 3.X - Appcelerator DocsGoogle Maps v2 for Android | Titanium 3.X - Appcelerator DocsこのモジュールはTitanium 3.1.0以上が必要なので注意。簡単に手順をまとめると。1.Google Play Services SDKをインストールAndroid SDK Managerを起動して「Extras」 → 「Google Play services」をインストールする。Setup Google Play Services SDK | Android Developers2.Google APIs Consoleに登録してAPI Keyを取得Google APIs Consoleにアクセスして「Google Maps Android API v2」をONにする。Google APIs Consoleの「API Access」 → 「Create new Android Key...」からアプリに埋め込まれているFingerPrintを入力開発用のFingerPrintは下記コマンドで確認できる(パスワードはなし)。S
$ keytool -list -v -keystore ~/Library/Application\ Support/Titanium/mobilesdk/osx/3.1.1.GA/android/dev_keystoreすでにアプリを公開しているなら、keystoreファイルを作…

リニア長野県駅「新飯田」の(大まかな)位置が公表されたので、Google Mapsに描画してみた

私の実家の近くに駅ができると聞いていたので気になっていた駅の場所。本日だいたいの位置が公表されたので、Google Mapsの機能を使って書いてみた。情報元はJR東海の公式ホームページ中央新幹線(東京都・名古屋市間)環境影響評価準備書(長野県) |JR東海第1章 対象事業の名称/第2章 事業者の氏名及び住所/第3章 対象事業の目的及び内容(PDF)下記地図で枠が表示されない場合はこちらから。大きな地図でみる153号線に隣接すると思うから、パチンコダイナムとドラッグストアの間ぐらいかな?実家から歩いていけなくはないけど、個人的にはもう少し東の方がよかった。2027年完成予定。

anyDensity="false"から脱出するためにAndroidの画面サイズ関連を理解する

イメージ
Titanium Mobileで開発していると、iOSアプリで確認してからAndroidアプリで確認してみると、レイアウトが崩れてしまうことが多い。当初は「anyDensity="false"」に設定して誤魔化してきたけど、どのAndroid端末でも同じユーザーインターフェイスになるように画面サイズに関する資料を読んでみたときの覚書。まずは公式ドキュメントを読む。Supporting Multiple Screens | Android Developers2. マルチ画面のサポート - ソフトウェア技術ドキュメントを勝手に翻訳
(公式ドキュメントの日本語訳)用語と概念を理解するScreen size
画面サイズ端末の物理的な画面の大きさ。
Androidでは、すべての画面サイズを4つに分類している。
small
normal
large
xlarge (extra large)Screen density
画面密度画面に対するピクセル数の密度。
単位はdpi (dots per inch)
ディスプレイではピクセルとドットが1体1で対応するので、ppi (pixel per inch)でも同じ意味になる。(wikipedia
Androidでは、全ての画面密度を4つに分類している。最近1つ増えた。
ldpi (low)
mdpi (medium)
hdpi (high)
  端末例)Samsung S2 (SC-02C), Xperia arc (SO-01C)
xhdpi (extra high)
  端末例)Samsung S3 (SC-06D), Xperia A (SO-02E)
xxhdpi
  端末例)Samsung S4 (SC-04E), HTC J One (HTL22)
参考:Androidアプリーリソース画像サイズ&種類ー : Excite Designer's Blog
参考:最新スマホ26機種徹底比較|スマートフォンガイド
参考:画面サイズと画面密度のシェア率 | Android DevelopersOrientation
オリエンテーション画面の向き。
横長か縦長か。Resolution
画面解像度画面のピクセル数の総数。
横ピクセル数x縦ピクセル数(例:1024x768)で表記される。
開発するときは画面のサイズと密度のみを意識し、解像度を意識するこ…

Google Maps API v3を使って地図上に店舗情報をプロットする

イメージ
Google Mapに店舗情報をプロットする開発したときの覚書。1年前の下書きを元にしているので情報が古いかも。環境: Google Maps API v3やりたい事緯度と経度を元にGoogle Map上にプロットする プロットしたときのアイコンを独自のアイコンにしたい 表示される吹き出しもいい感じにしたい 表示された店舗情報の数・位置によって、地図上の縮尺をいい感じにしたい たくさんの情報がプロットされたとしてもいい感じに表示したい 住所から緯度と経度を取得したい。逆も。こんな風に実現できた。地域情報検索 | teniteo[テニテオ]まずはGoogleの公式ドキュメントを読む。Google Maps Javascript API V3 Reference - Google Maps JavaScript API v3 | Google Developers地図を日本語表示したい場合は「language=ja」を追加する<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&language=ja">コンセプト - Google Maps JavaScript API v3 | Google Developers住所から緯度と経度を取得するには、下記を参考に。ジオコーディング サービス - Google Maps JavaScript API v3 | Google DevelopersGoogle Mapに渡せるQuery Parameterは下記に情報があったけど、今はなくっているみたい(2013年9月9日時点)http://mapki.com/wiki/Google_Map_ParametersjQueryで簡単に使えるようなライブラリがやっぱりあった。jquery-ui-map - Google map v3 plugin for jQuery and jQuery Mobile - Google Project Hostingでも使ってない。近くに情報があったときにまとめて表示するには、下記ライブラリを使う。google-maps-utility-library-v…

Androidアプリの画面(UI)設計をする際に読んでおきたい資料

イメージ
アプリの画面設計する際にどんなUIにするべきか調査したときの覚書。役に立ちそうなサイトの紹介Android Interaction Design Patterns
Androidのデザインパターンを紹介。
それぞれの利点と欠点があり、サンプルアプリを掲載されていてわかりやすい。Draw 9-patch | Android Developers
「NinePatch」を活用すれば、吹き出しや角丸デザインも恐くない。
ちなみにiOSでは同じ仕組みはない。外部ライブラリを使えば出来るみたい。Android Asset Studio
9-patchやアイコンなどを生成してくれるオンラインサービス。Android UI Patterns: Watch this: Google I/O 2013 - Android Design for UI Developers
Google I/O 2013のセッション記事。UI設計に関する動画へのリンクがある。
Android 4.0からのデザインガイドラインの説明。Android UI design patterns: Google I/O 2010
Google I/O 2010のUI設計に関するセッション動画。
まだAndroid2.3系も多いので、この辺の方が役に立つかも。他にもGoogle先生に「App UI Design Pattern」などで聞くといろいろ参考になる情報が出てくる。< Related Posts >Titanium Mobileを使ったAndroid, iOS App開発に役立つLink集iPhone, Androidの画面設計(Wireframe)用Free素材を探す

Titanium Studioで"L"のWarningを消したい

イメージ
Titanium Studioのバリデーション機能を使って構文チェックしているときに"L"(Titanium.Local.getString()のショートカット)がずっとWarning表示されるので非表示するやり方を調査。環境: Titanium Studio 3.1.2まずはバリデーション機能を有効にするやり方Titanium Studio → Preferences → Studio → ValidationJSLint Validatorにチェックを付ける。プロジェクト内を全て再チェックしたい場合は、Project → Clean...'L' was used before it was defined.がたくさん表示されて見にくいので、フィルターの設定をする。Titanium Studio → Preferences → Studio → ValidationJSLint Validatorを選択して、下記Filterを追加。「Missing 'new'.」はお好みで。Missing 'new'.
'L' was .+Strictモードで書いていると未定義の変数があるだけで落ちてしまうので(Android)、Titanium Studioのバリデーション機能は便利。ファイルの先頭にJSLintのオプションを記述することも出来る。詳細はJSLint: The JavaScript Code Quality Tool/*jslint eqeq:true, nomen:true, devel:true, plusplus:true*/< Related Posts >[Titanium Mobile] Strict ModeとJSLintで統一性のあるCodingTitanium Mobileを使ったAndroid, iOS App開発に役立つLink集

猫を向かい入れるために猫用品を揃える

イメージ
シンガポールから帰国して、結婚もしたし、念願の猫ちゃんを向かい入れることにした。環境: 1LDK(ペット共存型マンション), 先住犬1匹(メス:トイプードル:2歳)向かい入れたのは仔猫2匹(オスとメスの兄弟:雑種:生後4ヶ月)。 お世話になったのが、犬や猫の保護活動をしている下記NPO団体一般社団法人 ランコントレ・ミグノン Recontrer Mignon4連休:金♀(ミケ)、月♂(黒) 一般社団法人 ランコントレ・ミグノン Recontrer Mignon譲渡会を定期的に開催しているので、見学に行くといろいろと丁寧に教えてくれる。詳しくは下記で。家族に迎えたい方 | ミグノンからのお願い | 一般社団法人 ランコントレ・ミグノン Recontrer Mignon今回私が用意(購入)したものを参考程度に載せてみる。ジャンル商品コメントケージペットケージ 2段 PEC-902 ホワイト【アイリスプラザオリジナル】8480円結構でかい。
鉄製で丈夫だけど、プラスチックの方がシェルターでも使ってるし良かったかも。
プラケージ 810(1段)・812(2段)・813(3段) ベージュ・イエロー・ピンク
Amazonでも売ってる。トイレリッチェル コロル ネコトイレ 48 ブラウン1029円ケージ内用に購入。
問題なく使ってくれたし満足トイレ散らかりにくいネコトイレ CNT-500 ライトブラウン

3781円リビング用に購入。
先住犬がいても安心してトイレ出来るように。
一応使ってくれるけど、まだリビングには設置してない。猫砂ペグテック トフカスサンドK 7L × 4個【まとめ買い ケース販売】

3120円猫砂としては問題なし。
しばらくするとおしっこの臭いがきつくなるけど、猫砂の下に重曹を敷いたらかなり軽減されるようになった。爪とぎmju: (ミュー) ガリガリサークル1398円下にタオルを敷いて、ほぼベット化してる。
ボランティアの預かりの人も使ってた。爪とぎmju: (ミュー) ガリガリウォール1980円これもよく使ってくれてるので買って正解。
周りが噛んで壊すのでガムテープで補強してる。爪切りドギーマン ハニースマイル 猫用カーブ爪切り558円抱っこするときに前足を触るようにして慣れさせてる最中。
爪の出し入れも素早く出来るように練習中。フード皿ヘルスウォーター フードボウル M

1785…