投稿

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

Titaniumで作ったサービス「たなごころ」の紹介。技術編

イメージ
Appcelerator Titanium Advent Calendar 2015の16日目。今年開始したサービスの紹介。

園と保護者の連絡サービス「たなごころ」 保護者のスマホへ通知できて便利だよ。というサービス。

アプリは管理画面で承認しないとログインできないけど、スクリーンショットでだいたいのイメージは伝わると思う。

Android版デモ用アプリ | Google Play
iOS版デモ用アプリ | App Store
詳細は上記サイトを参照してもらうとして、今回は技術的な特徴を紹介。
期間:約8カ月。ガラケー対応でプラス2カ月
要員:私一人(画面デザインはデザイナーに依頼)
簡単なシステム構成図はこんな感じ。  




その他の特徴
園ごとにWordPressを立てて、アプリをリリース
園の運用に合わせてカスタマイズ(GitLab + Redmineで管理)
仮想サーバー4台(プロキシ:1、管理画面:1、アプリAPI:2)借りてネットワークを構築。負荷を見ながら増やす予定
現在位置を発信するアプリも作った。これは園のバスに乗る保育士さんに持ってもらってバスの現在位置を把握するため

Titaniumアプリ関連
Alloyは使ってない
AndroidとiOSでファイルを分けない。必要なときだけ分岐する
アイコンは全部ウェブフォント・・・にしたかったけど、一部ドロップシャドウがかかっているのは画像
Windowは起動してから1つだけ。ページっぽく見えるのはViewのvisibleで切り替えてるだけ
Android 2.3対応のために Titanium SDK 3.5.1.GAから上げれない

今後の技術的な課題など
Google Container Engineへ移行したい
ガラケーとAndroid2.3を切り捨てることができたらどんなに楽か
もっと自動化しないと私一人では耐えられない(深刻)

導入してもらった園には好評で来年度からは一気に増える。1法人で5施設契約してくれたところもある。
個人でも法人でも、技術セットが似てる方がいれば連絡ください。空いてる時間で手伝ってほしいです(切実)。


< Related Posts >
子育て支援ウェブサービス
今年のTitanium向けに書いた記事まとめとアプリ紹介2014版
MariaDB Galera Cl…

WordPress + WP-APIプラグイン + Titaniumアプリ

イメージ
Titanium Advent Calendar 2015の9日目。WordPressとTitaniumアプリの連携。TitaniumアプリからOAuth認証する方法を記事にしようと思ったけど、時間がなくなったので、WP-APIを使うと簡単にWordPressとやりとりできるよという話。環境: CentOS 6.7, PHP 5.6.17, WordPress 4.3.1目次WP REST API v2をインストールTitaniumアプリからデータ取得OAuth認証をしたいWordPress.org + Node.js参考WP REST API v2 Documentation1.WP REST API v2をインストールダウンロードしてきて、wp-content/pluginsに配置してアクティベートする。WordPress REST API (Version 2) | WordPress Plugins管理画面のSettings → Permalinksで「Default」以外を選んでRewriteを有効にしておく。これでREST APIが有効になったか確認。http://dev.wordpress.com/wp-json/wp/v2/posts/のURLにアクセスしてみるとJSON形式のデータを取得できる。2.Titaniumアプリからデータ取得Titanium Studioから新規アプリを作成してapp.jsを下記のように編集。var win = Ti.UI.createWindow({
  backgroundColor:'#fff'
});win.add(Ti.UI.createButton({
  title: 'Get data from WordPress'
}));
win.children[0].addEventListener('click', function() {
  var client = Ti.Network.createHTTPClient({
    onload: function(e) {
      console.log(JSON.parse(e.source.responseText));
    }
  });  client.open('GET', 'http…

静的WordPress向けNginxのfastcgi_cache設定

イメージ
WordPressで開発した静的ウェブサイトを公開するためにnginxの設定を見直したときの覚書。環境: CentOS 6.7, nginx 1.8.0, PHP 5.6.15fastcgi_cacheはPHP-FPMなどのバックエンドの結果をキャッシュする機能。Nginxの設定ファイルの記述はWordPressの公式サイトを参考にした。Nginx | WordPress Codex設定ファイルをGistにアップしたのでこっちを見ながらの方が分かりやすいかも。Nginx Configuration Files for WordPress | Gist目次FastCGIキャッシュ機能を有効に Nginxの設定ファイルを準備(キャッシュなし) キャッシュ機能が有効な設定ファイル Gzipの設定ファイル1.FastCGIキャッシュ機能を有効にNginx全体の設定なのでhttpディレクティブに記述する必要がある。
# cd /etc/nginx/
# less nginx.confhttp {
    # FastCGI Cache
    fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=WORDPRESS:100m inactive=1d;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    fastcgi_cache_use_stale error timeout invalid_header http_500;
}
ゾーン名: WORDPRESS
共有メモリ使用サイズ: 100M
保持期間: 1日間2.Nginxの設定ファイルを準備(キャッシュなし)各サイトごとの設定
# cd conf.d/共通の設定ファイルを作って、各サイトでincludeさせる。まずはアクセス制限用設定ファイルを作成
# mkdir global
# vi global/wordpress_restrictions.conf#
# Global Restrictions for WordPress site
# Designed to be included in any server {} block.</p>
#loc…

TCP/IPとUNIX Socketの接続でどれくらい違うか

イメージ
NginxからPHP-FPMの接続とPHP-FPMからMariaDBの接続をTCP/IPとSocketで比較してみた。環境: CentOS 6.7, nginx 1.8.0, PHP 5.6.15, MariaDB 10.0.22基本的な概念は下記記事が分かりやすい。nginx - 調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話 - QiitaリクエストはWindows上のab.exe(Apache Bench)からMac上のVMware Fusionの仮想マシン(CentOS)にあるWordPressに対して行う。まずはPHP-FPMもMariaDBもTCP/IP接続で計測C:> .\ab.exe -n 50 -c 5 http://dev.hoge.or.jp/1回目:14.03 [#/sec]
2回目:14.00 [#/sec]
3回目:19.92 [#/sec]
平均: 15.98 [#/sec]PHP-FPMへの接続をUNIX Socketに変えてみる。
PHP-FPMの設定
# less /etc/php-fpm.d/www.conf;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/www.sockNginxの設定
# less /etc/nginx/conf.d/hoge.conf#fastcgi_pass  127.0.0.1:9000;
fastcgi_pass   unix:/var/run/php-fpm/www.sock;サービス再起動
# /etc/rc.d/init.d/php-fpm restart
# /etc/rc.d/init.d/nginx restartsockファイルをnginxから読み取れるように権限を変更しないと「502 Bad Gateway」になる
# chown nginx.www /var/run/php-fpm/www.sock計測実行1回目:18.35 [#/sec]
2回目:17.64 [#/sec]
3回目:14.01 [#/sec]
平均: 16.66 [#/sec]
ちょっとだけ速くなった。次はMariaDBへの接続をUNIX Socketに変えてみる。YUM経由でインストールした場合は/var/lib/mysql/mysql.sockがデフォルトらしい。…

アプリを別のアカウントへ移行(譲渡)

イメージ
Androidアプリ、iPhoneアプリを別アカウントへ移行させたときの覚書。目次Androidアプリを移行iOSアプリを譲渡1.Androidアプリを移行公式ヘルプを参考に別のデベロッパー アカウントへのアプリの移行 - Google Play デベロッパー ヘルプ「デベロッパー コンソールの登録に使用した取引 ID」が少し分かりにくい。Googleペイメントでデベロッパー登録したときの取引ID。別料金もかからずすぐに反映された。2.iOSアプリを譲渡下記サイトが参考になる。iTunes - App Storeに上がっているアプリを譲渡する方法 - Qiita。。。一週間経っても移行先のアカウントにアプリが表示されないため、サポートに問い合わせてみた。その後2回ぐらいサポートに督促のメールを送って、申請から約1ヵ月後に移行先アカウントにアプリが表示された。メンバーセンターのApp IDsも移行される。「Provisioning Profiles」は新規作成する。別料金はかからなかった。< Related Posts >Titaniumアプリでプッシュ通知(Push Notification)【iOS版】Titaniumで作成したアプリをApp Storeに申請してみた

titaniumでビルドしたAPKファイルを解凍して中身をチェック

イメージ
titaniumでビルドしたAPKの中身がどうなっているか調査したときの覚書。環境: Titanium SDK 3.5.1.GA参考サイトAndroid apk の解析 - Qiitaandroid リバースエンジニアリングのメモ | 開発メモ@uehiapkファイルはzip形式でアーカイブされているだけなので、unzipで解凍できる。
$ mkdir temp
$ cd temp
$ cp ../project/build/android/bin/hoge.apk ./
$ unzip hoge.apkassetsディレクトリに画像やフォントファイルがそのまま出力されている。ソースコードはclasses.dexに入っているらしい。これを変換するツールをダウンロードする。dexからjarに変換するdex2jar
pxb1988/dex2jar | GitHubそのjarをclassに変換するjad
JAD Java Decompiler Download Mirrorダウンロードしたdex2jarを解凍。実行可能に
$ unzip dex2jar-2.0.zip
$ chmod +x dex2jar-2.0/*.sh実行
$ ./dex2jar-2.0/d2j-dex2jar.sh classes.dexエラーException in thread "main" java.lang.UnsupportedClassVersionError: com/googlecode/dex2jar/tools/Jar2Dex : Unsupported major.minor version 51.0JDK 1.7でないとダメみたい。前の記事などを参考にJDK 1.7にして再実行。
$ ./dex2jar-2.0/d2j-dex2jar.sh classes.dexdex2jar classes.dex -> ./classes-dex2jar.jarjarを展開
$ jar -x < classes-dex2jar.jarダウンロードしたjadを解凍して実行可能に
$ unzip jad158g.mac.intel.zip
$ chmod +x jad変換実行
$ ./jad -d output -r -s java **/*.classoutputディレクトリに読める…

【Titanium】JDK 1.7だとエラーになるのでJDK 1.6をインストール

イメージ
Titaniumの開発でAndroidデバイスにインストールして動作確認しようとしたらエラーになったときの覚書。環境:Mac OS X El Capitan 10.11.1, Titanium SDK 5.0.2.GAエラーメッセージ
$ appc ti build -p android -T device[ERROR] Titanium requires JDK 1.6 when building on Mac OS X.
[ERROR] You can download it from http://appcelerator.com/jdk-osx
[ERROR] If you still see this message, then you may need to set the JAVA_HOME to help Titanium locate the JDK.
[ERROR] To see which JDKs Titanium finds, run "appc ti info --types jdk --output json".参考になったフォーラムの投稿記事Titanium requires JDK 1.6 when building on Mac OS X | Community Q&A結局JDKをインストールするしかないみたい。公式サイトからダウンロードするJava for OS X 2015-001インストールされた場所を確認
$ ls /Library/Java/JavaVirtualMachines/1.6.0.jdk       jdk1.7.0_80.jdk1.7と切り替えたいので下記記事が参考になった。MacでのJAVA_HOME設定 - Qiitajava6に切り替えてみる。
$ export JAVA_HOME=`/usr/libexec/java_home -v 1.6`確認
$ echo $JAVA_HOME/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Hometitaniumコマンドを使って確認
$ ti info --types jdkデフォルトで1.6を使うように設定しておく
$ less ~/.bash_profile# Use JDK 1.6
ex…

TV SlideViewの代替アプリ「sMedia TV Suite」を試す

イメージ
TV SlideViewのプラグインZenFone 2 Laserに未対応で「お出かけ転送」出来ないので、代わりのDTCP-IP対応アプリを探したときの覚書。自宅の環境nasne(ナスネ)BDZ-EW510 | ブルーレイディスクレコーダー | ソニーAtermWG1800HP | 製品一覧 | AtermStationまずは昔使っていたTwonky Beamを試してみた(700円)。転送途中でなぜかWifiが切断される。
→ あとでルーターの設定とかいじってたら直った。他にもDTCP-IP対応アプリがあったので購入してみた。撮りためたTV番組を視聴 sMedio TV Suite - Google Play の Android アプリ3つとも使ってみて、簡単な比較表を作ってみた。TV SlideViewTwonky BeamsMedio TV Suite値段500円700円900円動画操作CMスキップ
(たまに失敗する)30秒スキップ
10秒戻し30秒スキップ
10秒戻し
スキップが安定しないお出かけ転送レコーダーがSony製ということもあり転送が安定してる
転送はバックグラウンドで行うので他の作業ができるBDZ-EW510から転送した動画の音飛びがひどい
nasneとの連携は問題なし
転送中はアプリを切り替えてはダメBDZ-EW510との接続がうまくいかないことが多い
nasneとの連携は問題なし
転送中はアプリを切り替えてはダメSDカード保存××○使い勝手使いやすいシンプルで分かりやすい無駄なページが多くて使いにくい感想録画番組を削除する目的で使用中悪くはない「SDカード保存」が決めてでこれを使っているsMedio TV SuiteのUI改善を期待< Related Posts >ASUS ZenFone 2 Laserを購入Aterm MR03LN+激安SIMで自宅LAN構築。もう回線工事とかいらないWindows 8 + nasne + REGZA TV + Android + iPadで快適テレビ生活

PhpStorm10.0でTitanium開発用コード補完設定

イメージ
PhpStorm 10.0にアップグレードしてTitanium用コード補完を設定したときの覚書。環境(WindowsからMac上のソースコードにアクセス)Windows: PhpStorm 10.0, Node.js 4.2.1
Mac: Node.js 0.10.37目次設定からダウンロードできない tsdtypingsをインストール PhpStorm側で設定 Globalを個別に設定1.設定からダウンロードできないPhpStormのSettings → Languages & Frameworks → JavaScript → Librariesから「Download...」しようとしてもtitaniumがなくなっている。。。最近はTSDというTypeScirptで書かれた書式設定用パッケージマネージャーを使うらしい。Home | DefinitelyTypedDefinitelyTyped/tsd | GitHub2.tsdtypingsをインストールMacのコンソール上でtsdをインストール
$ sudo npm install tsd -gtitanium用書式設定を検索
$ tsd query titaniumインストール
$ tsd install titanium --savetsd.jsonとtypingsディレクトリが作成された。package.jsonとnode_modulesディレクトリの関係と同じ。<2016/03/22 追記>
tsdがdeprecatedになったのでtypingsに変更
$ sudo npm remove tsd --global
$ sudo npm install typings --global検索
$ typings search --name titanium既存のtsdからアップグレード
$ rm -rf typings
$ typings init --upgrade
$ typings install
$ rm tsd.json3.PhpStorm側で設定Librariesの設定画面で「Add...」からtypingsディレクトリを選択する。エディタ内でTiとか打ってコード補完されるか確認4.Globalを個別に設定ただL()がUndefinedだと怒られる。前は設定で直った気がするけど、今回はダメな…

ASUS ZenFone 2 Laserを購入

イメージ
Nexus5が壊れたので、代替機はどれがいいものかと調査したときの覚書。Nexus5は約19ヵ月で壊れたので、月々2,094円の計算。Nexus5Xも気になるけど高い!!(¥59,300~)考えた結果、格安スマホを買うことにした開発でゴリゴリ使うから寿命が短くなりがち 1年半ぐらいで買い替えた方がよさそう AndroidもOSとして落ち着いてきたので、最新を追わなくても大丈夫そう 欲しいと思う端末がない 格安スマホの実力を試してみたい購入候補にあがった端末ASUS ZenFone 2 Laser | 価格.com(¥28,766~)FREETEL SAMURAI MIYABI | 価格.com(¥20,340~)HUAWEI P8lite | 価格.com(¥27,700~)ZenFone 2 Laserにした理由ASUSが一番信頼できそう端末自体はそんなに違いはないみたい。使ってみた感想使うアプリはNexus5と変わらないし、サクサク感を含めて使い勝手は変わらない 電源ボタンが端末の上部、音量ボタンが背面にあるのは間違えて押さなくていいかも 電源ボタンを押さなくてもダブルタップでスリープ解除できるのが便利 録画した番組をスマホ転送して見ていたけど、TV SlideViewのプラグインがZenFone2に対応してなくて「お出かけ転送」できない。これが一番痛い誤算あとでDTCP-IP対応のアプリ探す。ちなみに通話用のガラケー(F-01C)は5年ぐらい使っているけど、まだ現役でこれからも使う予定。< 2016/03/03 Modified >F-01CのSIMをマイクロSIMに変えて、ZenFone 2 Laserの2番目SIMとして装着してみた。通常は使えないが、「設定」→「モバイルネットワーク」→ 「優先ネットワークタイプ」を「2G」にすると使えるようになる。そうすると格安SIM(IIJmio)が使えなくなる。通常は「2G」に設定しておいて、Wifi環境がないところでネットワークを使いたい場合は「2G/3G/4G」に変更する使い方で運用中。Docomo側で制御しているらしい。そのうち使えなくなるかもしれない。価格.com - 『FOMA SIMって動かないのでしょうか?』 ASUS ZenFone 2 Laser SIMフリー のクチコミ…

Nexus 5が故障 → 電池交換 → ダメ

イメージ
1年半前に買ったNexus5が突然電源が切れて、起動しなくなったので、電池交換してみたときの覚書。現象電源ボタン長押ししても起動しない 電源ケーブルを指すと一瞬「Google」の文字が表示された後、すぐ再起動がかかる。これがずっとループする 電源ケーブルを指してループしているときに、音量ボタンの下を長押ししているとセーフモードに入りそうな画面になるがすぐ再起動がかかってループちなみに数日前にAndroid 6にアップデートした。Googleストアサポートに電話してみた。Google ストア サポートへの電話 - Google Store ヘルプ最初の番号を押してカテゴリー分けされる所で戸惑う。確か
1.購入に関する問い合わせ → 3.端末の故障に関する問い合わせ
という順番で押した気がする。状況を説明すると、付属の充電ケーブルを使ってほしいとか言われる。こちらはバッテリーが原因だと思うので交換出来ないかと聞いてみるとGoogle ストア サポートでバッテリー交換はできない LGのサポートに電話して、修理もしくはバッテリーの交換になる サポート期間の1年を過ぎているので有償になるという回答だった。予想はしていたので「そうですよね」で電話は終了。自分でバッテリー交換してみることにした。参考サイト1年以上使用した「Nexus 5」のバッテリーを自分で交換してみました - GIGAZINEAmazonで購入したものたちLi-Ion Polymer Battery 3.8V BL-T9 (for Google Nexus 5 LG D820 D821)ピーツール(P.Tool) 精密細工用工具 両頭ヘラ型 04673バッテリーを購入してから到着まで4日かかった。店舗の住所を確認すればよかった。すでに持ってたもの45in1 精密ドライバーセット裏カバーを外すのに失敗して、一箇所ツメをグリグリして切断してしまった。。。あとは参考サイトに従って交換は無事完了。。。。が、電源を押してみても起動せず。電源ケーブルを挿してみても最初の症状と同じ。原因はバッテリーではないみたい。この届いたバッテリーが壊れていない保証はないけど。諦めて、新しいスマホを買うことにした。バッテリーの到着が遅れて焦ったけど、Google ChromeにLINEの拡張機能を入れといて助かった。< Rel…

一眼レフカメラデビュー。「ニコン D5500」を買った

イメージ
仕事の撮影は他の人にお願いしていたけど、カメラのスキルも覚えようと一眼レフカメラを買った。買ったのは「ニコン D5500」これに決めた理由自撮りも出来るバリアングルタッチパネル 手頃な価格(コストパフォーマンス) 軽量キャノンかニコンかで迷ったときは下記記事が参考になる。中立の立場で考えるNikon or Canonの比較と選び方 - NAVER まとめ価格.comでみると本体のみよりレンズキットの方が安かった。71,622円で購入。ニコン D5500 18-55 VR II レンズキット 価格比較 | 価格.com付属のレンズと購入した単焦点レンズニコン AF-S DX NIKKOR 18-55mm f/3.5-5.6G VR II 価格比較 | 価格.comニコン AF-S NIKKOR 35mm f/1.8G ED 価格比較 | 価格.comその他購入した関連グッズNikon ニュートラルカラーフィルターNC 58mm NC-58Transcend SDHCカード 32GB Class10 UHS-I対応 (最大転送速度90MB/s) 無期限保証 TS32GSDHC10U1E (FFP)Transcend USB 3.0 Super Speed カードリーダー (SD/SDHC UHS-I/SDXC UHS-I/microSDXC UHS-I 対応) ブラック 2年保証 TS-RDF5KNikon FLX スリングバッグ ブラック フレックスシリーズ 14.1L ブラック FLXSGBK今すぐ使えるかんたんmini Nikon D5500 基本&応用 撮影ガイド [Kindle版]本体も含め合計金額は132,997円。< 2016/02/25 Modified >
その後追加購入した関連グッズ。ニコン AF-S DX NIKKOR 10-24mm f/3.5-4.5G ED 価格比較 | 価格.comKenko レンズフィルター PRO1D プロテクター (W) 77mm レンズ保護用 252772 | Amazon.co.jpVelbon 携帯用一脚 ウルトラスティック スーパー8 8段 大型30mm 脚のみ アルミ製 408334 | Amazon.co.jpニッシンデジタル i40 ニコン用 【正規品】【ダイレクト販売限定モデ…

グループウェア「Aipo」を別サーバーに移行

イメージ
移行作業をしたときの覚書。ちなみにAipoのインストール・導入は初めて。環境移行元: CentOS 5.10, Aipo 7.0.2.0
移行先: CentOS 6.7, Aipo 7.0.2.0参考インストール手順 - オープンソース|無料グループウェア「アイポ」目次移行先に必要なライブラリをインストール 同じバージョンのAipoを移行先にインストール 移行元からデータを移行 移行先サーバーでリストア nginxにリバースプロキシの設定1.移行先に必要なライブラリをインストール移行先のサーバーで必要なライブラリをインストールする。
# yum install gcc nmap lsof unzip readline-devel zlib-devel sudo2.同じバージョンのAipoを移行先にインストール公式サイトのダウンロードから移行元と同じバージョンをダウンロードしてくる。解凍して/usr/localに配置
# tar -xzvf aipo7020aja_linux64.tar.gz
# cd aipo7020aja_linux
# tar -xzvf aipo7020.tar.gz
# mv aipo /usr/local/インストール実行
# cd /usr/local/aipo
# sh ./bin/installer.shファイヤーウォール設定
# system-config-firewall-tuiポート番号: 81
プロトコル: tcpスタートしてみる
# ./bin/startup.shfound temp directory
Using CATALINA_BASE:   /usr/local/aipo/tomcat
Using CATALINA_HOME:   /usr/local/aipo/tomcat
Using CATALINA_TMPDIR: /usr/local/aipo/tomcat/temp
Using JRE_HOME:        /usr/local/aipo/./jre
Using CLASSPATH:       /usr/local/aipo/tomcat/bin/bootstrap.jar
Starting Aipo Version 7.0.2.0
Aipo URL: http://192.168.1.86:81/aipo/http://…

CentOS7にDockerをインストール

イメージ
Dockerを理解しつつインストールして試したときの覚書。環境: CentOS 7.1, docker 1.7.1-108目次やりたいこと Dockerとは CentOS7上にDockerをインストール コンテナを起動1.やりたいことDockerで開発環境を構築 Google Container Engine(GKE)にDockerをアップロード 本番環境のバージョンアップはDockerを切り替えるだけで、サーバーメンテナンス不要に GitLab, Jenkins(Drone), Redmineとうまいこと連携して幸せに2.DockerとはまずはDockerを理解するところから。私が読んだ本はこちら。Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] [Kindle版]3.CentOS7にDockerをインストールDockerエンジン(DockerサーバーとDockerクライアント)をインストール
# yum install docker確認
# docker versionClient version: 1.7.1
Client API version: 1.19
Package Version (client): docker-1.7.1-108.el7.centos.x86_64
Go version (client): go1.4.2
Git commit (client): 3043001/1.7.1
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Package Version (server): docker-1.7.1-108.el7.centos.x86_64
Go version (server): go1.4.2
Git commit (server): 3043001/1.7.1
OS/Arch (server): linux/amd64サービスの起動と有効化
# systemctl start docker
# systemctl enable docker確認
# systemctl -t service「docker-storage-setup.service」がfailedになっているので実行してみる。
# docker-storag…

【Titanium】ModuleのGUIDを変えてビルド

イメージ
Titaniumの開発でGitHubにあるモジュールをcloneしてzipファイルをそのままコピーしてビルドしたら下記エラーになった時の覚書。環境: Titanium SDK 3.5.1.GAエラーメッセージUnlicensed module(s) detected. You must be a subscriber to use one or more of the modules included with this project.サポートBBSに回答があった。モジュールの追加エラー | Don't Fall - Titanium Mobileユーザー会サポートBBSモジュールのguidを変更してビルドするといいらしいのでやってみた。まずはgit cloneするところから。
$ cd Documents/Titanium_Studio_Workspace/
$ git clone https://github.com/iamyellow/TiKeyboardListener.gitモジュールのguidを変更する
$ cd TiKeyboardListener/UUIDを生成
$ uuidgenD9D4FF49-EEBD-4485-A973-91F013DF2401それを貼り付け
$ vi manifest#guid: 48556ddf-0d85-4e4e-afc0-c430bd449826
guid: D9D4FF49-EEBD-4485-A973-91F013DF2401SDKのバージョンも修正
$ vi titanium.xcconfigTITANIUM_SDK_VERSION = 3.5.1.GATitanium Studioを開いてFile → Import... → 「Existing Folder as New Project」からモジュールとしてインポート。プロジェクトを右クリック → Publish → Package - iOS Moduleから使用するプロジェクトを選択(Mobile App Project)して「Finish」< Related Posts >TitaniumアプリでPush Notification【Android版】

さくらのメールボックスのメールをGmailで送受信

イメージ
自前メールサーバーから「さくらのメールボックス」へ移行したときの覚書。「hoge.sakura.ne.jp」がさくらのメールボックス上のドメイン名だとする。目次MXレコードの設定 さくらのメールボックス管理画面でアカウント作成 GmailからSMTP設定して送信できるようにする1.MXレコードの設定ドメインの管理はValue-Domain(バリュードメイン)で管理しているのでDNSの設定からMXレコードを追加するmx hoge.sakura.ne.jp. 10
txt @ v=spf1 include:_spf.google.com a:www1234.sakura.ne.jp ~allspfは管理画面の「サーバー情報の表示」にあるホスト名を登録する。「mail.hoge.co.jp」を「hoge.sakura.ne.jp」の別名にする場合cname mail hoge.sakura.co.jp.最後のドットが必要2.さくらのメールボックス管理画面でアカウント作成「メールアドレスの管理」からアカウントを作成。この時に「メール転送」項目に転送先Gmailを追加して、「転送専用にする」にチェック。転送されるかメールを送って確認。ウェブメールにログインして個別に設定することも可能。https://secure.sakura.ad.jp/rscontrol/?webmail=13.GmailからSMTP設定して送信できるようにするGmailの設定 → アカウントとインポート → メールアドレスの追加「エイリアスとして扱います」のチェックを外す。確認のメールが送信される。< Related Posts >Gmail(Google Apps)経由でメールを送信するPostfixのSMTP設定[Google Apps]DNSのSPFとDKIMを設定してSecurityを高める(送信Domain認証)

【CentOS6】YUM(Remi)経由でPHP5.4からPHP5.6に移行

イメージ
PHP5.4のサポートが切れるのでPHP5.6にアップグレードしたときの覚書。環境: CentOS 6.7, PHP 5.4.44目次現状の確認とバックアップ PHP 5.6にアップグレード 日本語形態素解析「MeCab」を再インストール1.現状の確認とバックアップPHP 5.5と5.6の変更点を確認PHP: PHP 5.4.x から PHP 5.5.x への移行 - ManualPHP: PHP 5.5.x から PHP 5.6.x への移行 - Manualインストールされているパッケージを一覧表示
# yum list installed | grep phpphp.x86_64                5.4.44-1.el6.remi      @remi
php-cli.x86_64            5.4.44-1.el6.remi      @remi
php-common.x86_64         5.4.44-1.el6.remi      @remi
php-devel.x86_64          5.4.44-1.el6.remi      @remi
php-fpm.x86_64            5.4.44-1.el6.remi      @remi
php-gd.x86_64             5.4.44-1.el6.remi      @remi
php-mbstring.x86_64       5.4.44-1.el6.remi      @remi
php-mcrypt.x86_64         5.4.44-1.el6.remi      @remi
php-mysqlnd.x86_64        5.4.44-1.el6.remi      @remi
php-pdo.x86_64            5.4.44-1.el6.remi      @remi
php-pear.noarch           1:1.9.5-13.el6.remi    @remi
php-pecl-igbinary.x86_64  1.2.1-1.el6.remi.5.4   @remi
php-pecl-memcache.x86_64  3.0.8-2.el6.remi.5.4   @remi
php-pecl-m…

【Node.js】非同期処理をasyncからPromise(bluebird)に乗り換えるか

イメージ
ES6から非同期処理の仕組みが強化されたので調査したときの覚書。今まではasync.jsを使っていた。全く問題なかったけど、速度的には遅い方らしい。Why I am switching to promises目次Promise Generator 今後どう書いていくかまずはES6で標準入りしたPromiseとGeneratorを理解するところから。1.Promise下記サイトが分かりやすい。Chapter.1 - Promiseとは何か | JavaScript Promiseの本Promiseは非同期処理を抽象化したオブジェクトとそれを操作する仕組みの事をいいます。今までコールバックしていたのをPromiseを通して操作すると一貫した書き方が出来るようになる。Node.jsエンジニアなら2014年内に知っておきたいPromise入門 | Tokyo Otaku Mode BlogPromiseをラッピングして使いやすくしているライブラリがbluebird。よく使うasync.parallel()はPromise.all()で置き換えることが出来る。bluebird/API.md at master · petkaantonov/bluebird | GitHub2.Generator処理を任意の時点で止めて再開できるフロー制御の仕組み。「function*」でGeneratorであることを宣言。「yield」キーワードで止める箇所を指定。非同期関数をyieldで宣言して、順次実行するのに便利。Generatorを利用したフロー制御のライブラリがco。サンプルプログラムとかは下記記事を参考に。Node.js 0.12 では yield が使えるのでコールバック地獄にサヨナラできる話 - てっく煮ブログ3.今後どう書いていくか個人的にGeneratorの「function*」「yield」という見慣れないキーワードを書くのに抵抗があるので、Promise中心でいく予定。既に試してみた方の記事もあるので参考に。Node.js - 最近のjs非同期処理 PromiseとGeneratorの共存 - Qiita< 2015/08/21 Modified >
Promiseで並列処理するときにタスクごとPromiseオブジェクトを返さないといけない。これが今ま…

Titaniumでlodashを使う

イメージ
Titaniumで開発するときは外部ライブラリを使わずネイティブなJavaScriptの書き方をしていたけど、Alloyはunderscore.js使っているし、新規開発はlodashを使おうと設定したときの覚書。ちなみにAlloyを使わずにレガシーな書き方をしてる。環境: OS X 10.10.4, Titanium SDK 4.1.0.GA参考UnderscoreとLodashが統合に向けて議論 | InfoQlodash custom builds1.lodashをダウンロード、インストール今後のバージョンアップを簡単にするためにlodashコマンドをインストール
$ cd /path/to/project/
$ sudo npm install -g lodash-cliコマンド確認
$ lodash --help「modularize」にしようか迷ったけど、とりあえず一つのファイルの方が管理しやすいので「modern」でインストール。
$ lodash modern --production --output Resources/lib/lodash.jsvar _ = require('lib/lodash');2.PhpStrom用設定なぜかPhpStormでunresolvedのWarningが出るので、npmとしても追加する。
$ npm install lodash --save-devnode_modulesを「library home」に設定。Settings -> Languages & Frameworks -> JavaScript -> Libraiesで「lodash-DefinitelyTyped」を追加しても「unresolved」は消えなかった。複雑な処理はAPI(サーバー)側でやっているので、そんなにlodashの出番がない。。。< Related Posts >今年のTitanium向けに書いた記事まとめとアプリ紹介2014版【Titanium】thisとparentとchildrenを使った書き方

CentOS6にfontcustomをInstallしてWebフォントを作成

イメージ
IE8のサポートが2016/01/12に終了するし、受注したホームページ案件にWeb(アイコン)フォントを使用したときの覚書。WebフォントはIE9以上でないと表示できない。簡単に流用出来てしまうし、手間と効果を考えるとホームページ程度なら画像で十分な気もする。環境: CentOS 6.6, fontforge-20090622, fontcustom-1.3.8目次fontcustomをインストールSVGをフォントに変換Twitter Bootstrapと併用する1.fontcustomをインストールgemを実行するのでRubyが必要。前の記事を参考に。SE奮闘記: GitをSourceからBuildしてRubyの最新版をInstallあとはGitHub上のREADME通りに。FontCustom/fontcustom | GitHubフォント作成プログラムfontforgeをインストール
# cd /opt/software/
# yum install fontforgewoffに変換用プログラムをインストール
# wget http://people.mozilla.com/~jkew/woff/woff-code-latest.zip
# unzip woff-code-latest.zip -d sfnt2woff && cd sfnt2woff && make && sudo mv sfnt2woff /usr/local/bin/gem経由でfontcustomをインストール
# gem install fontcustom確認
# fontcustom --versionfontcustom-1.3.8
2.SVGをフォントに変換デザイナーが作成したイラストレーターファイルからSVGとして書き出す。出力時のオプション。変換コマンド実行
# /path/to/project/fonts/
# fontcustom compile svg/ --name=icons --output=iconsCSSも出力してくれるので使いやすい。3.Twitter Bootstrapと併用するBootstrapのLESSを読み込んでいるので、glyphiconを拡張する書き方にした。参考Language Features | Less…

子育て支援ウェブサービス

イメージ
teniteoたなごころを開発しているので、気になったサービスの覚書。WBSなどテレビで紹介されてた。参考知らないと損!子育てのヒントになる便利サイト6個 - WooRis(ウーリス)WooRis(ウーリス)タスカジ(https://taskaji.jp/)働いているママと働きたいママを結ぶ「家事シェア」サービス。1時間1,500円の安さ。フィリピンの人が多いらしい。アプリ:なし
※ウェブがスマホ対応
おかん(http://okan.jp/)毎月真空パックされたおかずを郵送してくれる。アプリ:なし個人的に利用しているけど、メニューが変わり映えしないし、味付けも濃いので飽きてきた。
エニタイムズ(https://anytimes.co.jp/)「困った」と「できる」を繋ぐお仕事仲介サービス。値段は自由に設定可能。アプリ:あり
ベアーズ(http://www.happy-bears.com/)家事代行サービスの大手。しっかりと教育された専任スタッフが家事代行してくれる。アプリ:なし
cookpadベビー(http://www.happy-mama.com/)育児系情報サイト。2015年5月からクックパッドに移管されて、レシピとの連携が大幅強化。「はっぴーママ」は育児タウン誌アプリ:なし
アズママ(http://asmama.jp/)登録した近所の人と子育てを助けあう。謝金は500円~700円。利用者感で直接やり取り。仲介手数料なし。アプリ:なし
< Related Posts >子育て情報サイト「teniteo」アプリをアップデート

npm install --globalを毎回実行するのが面倒くさい

イメージ
nvmでiojsを追っていると頻繁にnpm install --globalを実行するのが面倒くさい。設定ファイルから簡単にインストール出来ないかと調査したときの覚書。環境: nvm 0.25.4下記サイトで議論されている。node.js - Install dependencies globally and locally using package.json - Stack OverflowAdd "globalDependencies" option in package.json for installing global dependencies. · Issue #2949 · npm/npm | GitHubpackage.jsonに書くのは推奨されてないみたいなので自分用のシェルスクリプトを書くことにした。# su - node
$ vi npm-global.sh#! /bin/sh# Install Node Packages
npm install -g grunt-cli node-dev pm2 npmlist# Show Installed List
echo
echo 'Completed!!'
echo
npm -g list --depth=0$ chmod +x npm-global.sh
$ ./npm-global.sh必要なものが増えたら書き足していく。issueで「nvm reinstall-packages」を使えばいいという議論があるので、そのうち出来るようになっていると思う。Npm global modules · Issue #668 · creationix/nvm | GitHub< Related Posts >nvmをUpgradeしてio.jsをInstall

WP-CLIをInstallしてWordPressのVersion管理

イメージ
WordPressのインストール、アップデートを自動化したくて調査したときの覚書。環境: CentOS 6.6, PHP 5.4.42, WordPress 4.2.2WordPressをコマンドラインで管理する方法はいくつかある。ライブラリ説明WP-CLIPHP Archive(PHAR)という形式で配布されている。YeoPressyeomanというウェブアプリ向けのツール管理ソフトのWordPressジェネレーター。npmっぽく管理できるGitGitHubにWordPressのリポジトリがあるので、ブランチをチェックアウトして運用する。プラグインの単体テストもやる予定なので、WP-CLIをインストールしてみた。参考Unit Tests for WordPress Plugins - Setting Up Our Testing Suite - Pippins Plugins目次WP-CLIをインストールWordPressをインストール、アップデートプラグインの一覧とアンインストールテーマの一覧と削除初期インストール時のwpコマンドまとめ1.WP-CLIをインストール公式サイトを参考に。Command line interface for WordPress | WP-CLI# curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# chmod +x wp-cli.phar
# mv wp-cli.phar /usr/local/bin/wprootでwp --infoを打つとエラーになるので、ユーザーを変更して確認
# su - node
$ cd /path/to/wordpress/
$ wp --infoPHP binary:     /usr/bin/php
PHP version:    5.4.42
php.ini used:   /etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 0.19.22.WordPressをインストール、アップデート公式サイトもしくはwp helpでコマ…

CoreOS入門。VMware FusionでCoreOSを起動してみる

イメージ
dockerを調査するためにCoreOSをインストールしてみたときの覚書。環境: VMware Fusion 7.1.2CoreOSはLinux Kernel 4.0なのでVMware Fusionでは対応してないと思ったら、公式にVMwareに対応した仮想マシンを配布しているのでダウンロードするだけで試せる。Running CoreOS on VMware | CoreOS目次CoreOSとは 仮想マシンをダウンロード 起動してSSH経由でアクセス1.CoreOSとはCoreOSはLinuxディストリビューションの一つ。詳しくは下記参照CoreOS OverviewCoreOS 入門 - Qiita特徴パッケージ管理(yum, apt)の代わりにdockerで全てのユーザーサービス(パッケージ)を管理 複数台でのクラスタ構成をOSがサポート(CoreOS clusterと呼ぶ)。fleetを通して管理 CoreOS cluster上のサービスはホストのetcdを通して繋がる。データベースの接続先などetcdに問い合わせるとクラスタ内のどこかにあるアドレスを返す。 自動アップデートが出来る。反映させるために再起動は必要。クラスタ構成しているならサービスの切り替えなどは自動でやってくれる2.仮想マシンをダウンロード公式ページからダウンロードCoreOS Release NotesStable → Browse Images → coreos_production_vmware_insecure.zip3.起動してSSH経由でアクセス解凍して、vmxファイルをダブルクリックするだけで起動する。起動後のコンソール画面にIPアドレスが表示されているので、SSHでアクセスする。SSHの秘密鍵は同封されている「insecure_ssh_key」を指定する。今日のところはここまで。いろいろな単語が出てくるけど、それぞれの違いと役割がまだわかっていない。docker, etcd, fleed, fannel, Kubernetes参考サイトOpen Container Projectが発足:DockerとCoreOSの「コンテナ戦争」が終了、勝者はだれなのか - @ITIntroducing flannel: An etcd backed overlay network…

Titanium + Socket.IO(WebSocket)について調査

イメージ
TitaniumでWebSocketを活用したリアルタイムアプリを作りたくて調査している時の覚書。TiWSというTitaniumモジュールは管理する人が変わりながらメンテナンスはされているみたい。omorandi/tiws | GitHubSocket.io 1.0には対応していないみたい。Compatibility Socket.io 1.0 · Issue #9 · omorandi/tiwsSocket.IOにはiOS, Android用のクライアントライブラリが公開されているので、これらをTitaniumモジュールとしてラッピングしたいsocketio/socket.io-client-swift | GitHubnkzawa/socket.io-client.java | GitHubTitaniumモジュールでSwiftはまだ使えない?Titanium 4.0からはSwiftでも大丈夫になった感がある。[TIMOB-18844] iOS: Swift is not supported for Extensions - Appcelerator JIRAこの前Google NextでFirebaseの話を聞いたので、こちらも気になったりしてる。Firebase - Build Extraordinary Apps準リアルタイムなバックエンド開発を支援するGoogleのFirebaseTitanium - Firebaseを使ってリアルタイムサービス - Qiita< Related Posts >Google Container Engineについて調査TitaniumでWebSocketを使いたくてtiwsをビルドするアプリ向けのサーバーAPIは「REST」 or 「WebSocket」?

git(GitLab)ユーザーのrubyプロセスが100%に近くなる

イメージ
ある日突然git fetchが失敗するので調べたときの覚書。環境: CentOS 6.6, GitLab 7.11.4 → 7.12.0Mac上でgitコマンドを打つと下記エラー
$ git fetch originremote: Counting objects: 48, done.
remote: fatal: unable to create thread: Resource temporarily unavailable
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack headerあれ?と思ってもう一度実行
$ git fetch origin[FATAL] failed to allocate memory
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.SSH接続で既に失敗する。サーバー側でSSHデーモンを再起動しようとすると「fork: メモリを確保できません」とエラーになった。topコマンドを打つとgitユーザーがrubyコマンドを一生懸命実行していてcpu使用率が100%になっている。試しにGitLabサービスを止めてみるとCPU100%状態が収まったので、GitLabが原因だと判明。
# gitlab-ctl stopもう一度GtiLabを実行しながらログを確認。
# gitlab-ctl start
# tail -f /var/log/gitlab/unicorn/unicorn_stderr.log/opt/gitlab/embedded/service/gitlab-rails/config/initializ…