画像圧縮ツール ImageOptim がすごい!iPhoneアプリのサイズ問題など

iPhoneアプリはサイズを20MB以下に収めないとユーザがインストールしようとした時にWiFiが必要になるので、開発者側としては何としても20MBに収めるためにうんうん悩むわけです。(いままさに)

ImageOptimでボタン一発

ImageOptim — better Save For Web でボタン一発でJPEG/PNGファイルのサイズを圧縮してくれます。

あんまりよくわかんない圧縮をするとiPhoneアプリでちゃんと表示されるか心配だったのですが、今のところ不具合はありませんし、Retinaディスプレイで見ても、人間の目では劣化が感じられない(気がする)ので問題なさそうです。(見る人が見ると分かるのかなぁ?)

こんな感じでアルファが多い画像は特に圧縮率が高いみたいです。ちなみに、Againでもう一回圧縮してもほとんど圧縮されませんでした。

結果

開発中のiPhoneアプリで使っている大小さまざまな250個のPNGファイルを圧縮したところ、合計で

6.9MB(7255213バイト) が 5.8MB(6096125バイト) になりました!約16%ダウン!

むちゃむちゃ圧縮できるわけではないですが、最後の仕上げにダイエットしておくと何かと良いかと思います。

追記

デフォルトでは有効になっていないPNGOUTを落としてきて設定で有効にしてから、再度、圧縮前のファイルに圧縮をかけてみたら、さらに圧縮できました!

6.9MB(7255213バイト) が 5.6MB(5858027バイト) になりました!約19%ダウン!

さいごに

ImageOptimは有名な画像圧縮ツール/コマンドがビルトインされているので(環境を整える必要がなくて)非常に便利なんですが、他にもオススメな画像圧縮ツールがあれば教えて下さいm(_ _)m

あと、画像圧縮以外にiPhoneアプリを軽量化するTipsなどあればばばばm(_ _)m

クレクレ君ですみません :P

MIT版App Inventorをローカルで動かしてみた。動いたよ!

このエントリーは 日本App Inventorユーザー会 Advent Calendar 2011 のエントリーです。

いよいよ、12月末で現在のGoogle版App Inventorはサービス停止します。既にアプリを作成している皆様は、App Inventorのプロジェクト一覧のページで「Download All Projects」をクリックして、大事なプロジェクトを全てダウンロードしておきましょう。

そして、MIT版App Inventorは2012年第1四半期にサービスを開始するとのことです。1月1日から利用できないのは残念ですが、少し待つと再び使えるようになりますので、ご安心ください。また、正式に発表されたらご連絡したいと思います。

ついにApp Inventor自体をダウンロードできるようになったよ!

MITに移管され、オープンソース化する予定のApp Inventorですが、実は、まだソースコードはダウンロードできませんが、バイナリはダウンロードできます。これで誰でもApp Inventor自体をダウンロードして動かすことができます。

今回は、ローカルで動かすところまでできたので手順を共有したいと思います。

App Inventorを動かすには

MITがApp Inventorを動かす方法を公開しています。
Running App Inventor services with the MIT JAR files (英語)

MITのドキュメントは英語なので、日本App Inventorユーザー会の方々が和訳してくださいました。
http://www.app-inventor.jp/shiryoushuu/transrate (日本語)

基本的に手順どおりでOKです。

手順メモ

ここから開発者向けなので丁寧さが下がりますがご了承ください。おそらく開発者の方ではないと難しいと思いますので。

Google App Engine SDK for Java

App InventorはApp Engineで動作するのでGoogle App Engine SDK for Javaが必要です。
http://code.google.com/intl/ja/appengine/downloads.html#Google_App_Engine_SDK_for_Java からダウンロード、解凍して、適当なフォルダに置いて、bin/にパスを通します。

App Inventorのバイナリをダウンロード

http://appinventoredu.mit.edu/download-jar-files から最新のファイルをダウンロードします。これは随時アップデートされるので、ページにも書いてありますが http://groups.google.com/group/mit-appinventor-jars にJoinしてアップデート情報をウォッチしておきましょう。

解凍すると以下の2つのファイルができます。

  • appinventor-Nov-24.tgz : App Engine用
  • for-BuildServer.tgz : ビルドサーバ用
ビルドサーバ用

for-BuildServer.tgzを解凍すると、

  • BuildServer.tar
  • launch-buildserver

が、できます。BuildServer.tarも解凍します。すると、lib/フォルダができます。
これで、

  • launch-buildserver
  • lib/

の状態になればOKです。
あとは、launch-buildserverを実行するだけです。

./launch-buildserver

ログがbuildserver-log.outというファイルに出力されるので見てみます。

tail -f buildserver-log.out

情報: Root resource classes found:
  class com.google.appinventor.buildserver.BuildServer
2011/12/17 22:23:12 com.sun.jersey.api.core.ScanningResourceConfig init
情報: No provider classes found.
2011/12/17 22:23:12 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
情報: Initiating Jersey application, version 'Jersey: 1.3 06/17/2010 05:04 PM'
2011/12/17 22:23:13 com.sun.grizzly.Controller logVersion
情報: Starting Grizzly Framework 1.9.18-i - Sat Dec 17 22:23:13 JST 2011
Visit: http://192.168.11.3:9990/buildserver
Server running

9990ポートで起動しているようです。(現状、ポートを変える方法は探したけどないみたいです。)

とりあえず、上のようにログがでていればOKです。

ちなみに、停止したいときは、それっぽいコマンドがないのでkillします。

App Engine側

appinventor-Nov-24.tgzを解凍すると、appinventor/war/というフォルダができます。このwar/フォルダがApp Engine用Webアプリのエントリポイントです。

以下のコマンドで実行します。

dev_appserver.sh appinventor/war/

Webブラウザから http://localhost:8080/ にアクセスすると、

そのままLog InでOKです。(ホワイトリストを設定している場合は、そのメールアドレスでログインしてください。)

利用規約(?)にacceptすると・・・

動いたー!ローカルでApp Inventorが動いてるー!

Google版App Inventorのプロジェクトファイルがアップロードできるか確認します。

ダウンロードしておいたzipファイルを選択して、OK!

うおー!ちゃんと引き継げてるー!おかえり!アリバイツイート!

さてさて、Blocks Editorを・・・

許可すると・・・

うおー!Blocks Editorも動いてるー!

では、さっそく実機で動くか確認を・・・

動いたー!Google版と同等に使えるようです!さすがMITさん!

ちなみに、App Inventorをローカルではなくサーバで運用するためには、上の手順書を参照してください。ホワイトリストぐらいはやっておいた方が良いかと思います。

てか、ソースコードまだー(ばんばん

ということで

App InventorのMIT移管は順調のようです。ほっと一安心。ただ、スタートが2012年第1四半期としか言われていないので1月1日からはしばらく使えなくなります。生まれ変わったApp Inventorが使えるようになるまでぐっと待ちましょう。

ちなみに、日本App Inventorユーザ会でMITがサービスを開始するまでの空白期間を自分たちのサーバで運用しようという活動をしています。

興味がある方は、以下をチェックしてみてください。

申し込みページ: https://sites.google.com/site/appinventorjp/noahs_arc_project
MLのディスカッション: https://groups.google.com/group/app-inventor-jp/browse_thread/thread/ff7491bee4be8380?hl=ja

それでは!

30分でつくれるAndroidアプリ Google App Inventorではじめよう!

30分でつくれるAndroidアプリ Google App Inventorではじめよう!

きっと不便を便利にするためにコードを書き始めた僕たちへ

このエントリはAndroid Advent Calendar 2011の裏エントリです。
Android Advent Calendar 2011は表25名、裏25名で書いているのですが、同日の表エントリではAndroid界のイケメンこと @ さんが表らしい素晴らしいエントリ きみはGalaxy Nexusを手に入れることができるか - そばとちゃんこの競演 を書いてます。

さて、本題。

不便を便利にする

Advent Calendarで何書こうかなぁと数日前から考えていた所、Tumblrで見かけて感銘を受けた言葉がこちら。(今見返してみたら2007年のエントリなんですね。強い言葉というのは時間が経っても魂を宿し続けるんだなぁと思った。)

世の中いろいろと不便なことが多くて、プログラマはそれを改善しようとしている。
世の中こんなにバグだらけなのに、バグほったらかしでゲーム作ってる場合じゃねえだろ、と思う。
電車の中で暇なのは不便なのでゲーム作ってくれてありがとうと思ったりもする。
でも基本的にはゲーム作ってる場合じゃねえだろ、って思う。

最速インターフェース研究会 :: つまらなくて役に立つ物を作るということ

今回はAndroid縛りなのでAndroidアプリについて置き換えて考えてみます。

不便を便利にするAndroidアプリといえば

ですよね。

Simeji

Simejiに関しては、こちらのインタビュー記事 Androidアプリケーション開発ストーリー - “変なソフト”として進化する人気Android日本語入力「Simeji」:ITpro が詳しいのでぜひ読んで頂きたいです。

IMoNi

IMoNiに関しては、こちら 『IMoNi』iモードメールアプリ~Androidでもiモードメールを使おう | andronavi スマホアプリが見つかる! が分かりやすいです。簡単に言うとSPモードメールが登場するまで@docomoのメールはブラウザでいちいち見に行かないとメールを受信して見られないという、とんでもない不便を便利にしたアプリです。SPモードメールが登場した後も「IMoNiの方が良い」という意見を見かけることも多かった上に、先日、Galaxy Nexusを買いに行った時にドコモショップのお姉さんに

とまで言われるようなアプリです。

Androidの黎明期を支え、今なお必須アプリとして多くの人の不便を便利にしているアプリだと思います。他にも多くの便利なアプリがあると思いますが、代表的なものということでご容赦ください。

黎明期を過ぎ、今やAndroidは4.0にまで進化しました。Android端末も普及しました。いまいちど振り返ってみてください。僕らのまわりは便利になったでしょうか?残念ながら多くの不便が残っていると思います。

ユーザに一番近い所で

僕らは様々な技術を持ち、様々なレイヤーで、様々なプログラムを書くことができます。その中でも何かの因果でAndroidに関わる僕らはユーザに一番近い所に立っているわけです。そして、きっと僕らプログラマは少しでも世の中をよりよくしたいと思っているはずです。ちょっと話はそれますが今年は「起業」や「スタートアップ」という言葉を目にすることが多かった気がします。彼らは「世界を変える」と言います。これもまた(スタートアップの事業内容によりますが)不便を便利にする延長線上にあるだけで、本質は同じだと思います。(繰り返しになりますが不便を便利にする以外のものも多いです。)

Android端末はユーザが毎日持ち歩き、常に触れるものです。ここに不便があることは悲しいことです。

しかし、企業からSimejiやIMoNiのようなAndroidアプリは登場しません。理由は分かりますよね。

そこで、僕らAndroidアプリ開発者の出番というわけです。上の図の「自分が不便に思うこと」が出発点で、それに共感する人の数が増えていくだけで、いきなり「世界を変える」必要なんてないと思います。少なくともAndroidアプリだけで世界は変わらないけどね!本気でそっちの道を行くならサービスレベルで考えないと(というのはまた別のお話)ということで。

何が言いたかったかたいうと「俺得アプリでおk」ということです。はい。

Androidのこれから

  • 進化のスピードが速い
  • 普及しているバージョンがバラバラ
  • 機種依存やメーカのバグにゲンナリ
  • 儲からない

本業でAndroidに携わっている人の中には、正直、疲弊している人も多いんじゃないでしょうか。

↓こんなんだしね。


"「全てのAndroid端末メーカを、生まれる前に消し去りたい。全ての宇宙、過去と未来の全てのAndroid端末メーカをこの手で。今日まで機種依存と戦ってきたみんなを、希望を信じたAndroiderを私は泣かせたくない。最後まで笑顔でいてほしい。さあ!叶えてよ、Google!!」" - @gabu (がぶ@台北)

でも、ごめんなさい。探したけれど、銀の弾丸はないんだ。本業で携わっている人は、このままバッドノウハウを蓄積して、品質の高いアプリケーションを書いてこそプロフェッショナルじゃないか(え

まー手間のかかる子ほど可愛いって言うじゃない?

ということで、来年も頑張ろうね☆(ゝω・)vキャピ

さいごに

きっと不便を便利にするためにコードを書き始めた僕たちへ
僕たちがやるべきことは、きっと目の前に転がっていて、別にそれはAndroidだけに限った話じゃないかもしれないよ?

Googleの中の人が作ったAndroidアプリioschedを参考にしよう!(とりあえずビルドまで)

Googleの中の人が作ったGoogle I/O用のAndroidアプリ ioschedオープンソースで公開されているのですが、Androidアプリを開発する時に非常に参考になるので(Table対応したバージョンから難解になったのがネックですが)紹介したいのですが、ビルドするまで少し作業が必要なのでダウンロードしてビルドするところまで手順をメモっておきます。

Mercurialをインストールする

ソースコードのチェックアウトページに行くと

hg clone https://code.google.com/p/iosched/

と書いてあって、svnやgitではなくhgなのでMercurialが必要みたいです。

ということで、brewでさくっと入れようかなーと思ったけど何か嫌な予感(今思えば今回に限ってなんで嫌な予感を感じたか不思議でしょうがないけど)がしてググったらbrewでMercurialを入れるのはメンドそうなので素直にパッケージをインストールしちゃいましょう。

ダウンロードはこちらからMacのバージョンに合ったファイルをダウンロードしてください。

ダウンロードしたzipファイルを解凍して、mpkgファイルをダブルクリックしてインストールしてください。

インストールできたら、ターミナルからhgと入力して以下のように出ればOKです。

$ hg
Mercurial - 分散構成管理ツール

基本コマンド:

 add        指定ファイルの追加登録予約
 annotate   ファイル行毎のリビジョン情報表示
 clone      既存リポジトリの複製
 commit     指定ファイルないし全ての変更内容のリポジトリへの記録
 diff       作業領域全体(ないし指定ファイル)の差分抽出
 export     1つ以上のリビジョンに対するヘッダおよび変更内容の出力
 forget     次回コミットにおける指定ファイルの登録除外
 init       指定されたディレクトリでの新規リポジトリの作成
 log        リポジトリ全体ないしファイルの変更履歴の表示
 merge      作業領域の内容と他のリビジョンのマージ
 pull       指定リポジトリからの変更履歴の取り込み
 push       指定リポジトリへの変更履歴の反映
 remove     次回コミットにおける指定ファイルの登録除外
 serve      独立したウェブサーバの実行開始
 status     作業領域のファイル操作状況の表示
 summary    作業領域状態の概要表示
 update     作業領域の内容更新(ないしリビジョンの切り替え)

全コマンドの一覧は "hg help" で、 コマンド詳細は "hg -v" で表示されます

今回はcloneするだけなので他のコマンドはとりあえず置いておきましょう。

ソースコードをチェックアウトする

適当なディレクトリで

hg clone https://code.google.com/p/iosched/

Eclipseでインポートする

ちょっとその前に確認

もし、最近ADTやAndroid SDKをアップデートしていない人は最新バージョンに上げておきましょう。4.0も出ましたし。

Updating the ADT Plugin でADTをアップデートしたら、

もし、4.0とか3.2とかインストールしていなければ、とりあえず全部入れておきましょう。


インポート

Androidプロジェクトを新規作成

Create project from existing sourceを選択、Project Nameが勝手に変わるのでioschedと入力、Nextボタンをクリック。

Android 3.2を選択して、Finishボタンをクリック。


android-support-v4.jarを追加する

最近のAndroidアプリは同一のソースコード(アプリ)でタブレットでもスマートフォンでも動くようにFragmentという仕組みを使って開発する必要がでてきたり、タブレットに対応する必要がないアプリでも来たるICS(Android 4.0)に備えて(もうSDKは出てますが)Fragmentに慣れておくべきとGoogleの中の人が仰られていたりで、別途、勉強する必要があるのですが、ここで説明しだすと量的に無理があるので今回はとりあえず飛ばして、ビルドするところまでいきましょう。

プロジェクトのlibsディレクトリにandroid-support-v4.jarというライブラリを置いてビルドパスを通す必要があります。

android-support-v4.jarはAndroid SDKのディレクトリのextras/android/compatibility/v4/にありますので、Eclipseのioschedプロジェクトのlibsディレクトリにコピーして、右クリック > Build Path > Add to Build Pathでビルドパスに追加します。

これでコンパイルエラーがだいぶ減るんですが、まだエラーが残ってます。

libGoogleAnalytics.jarを追加する

ioschedはGoogle Analytics SDK for Androidのサンプルコードも含んでいるらしく、そのライブラリが必要です。

http://code.google.com/intl/ja/mobile/analytics/download.html からGoogle Analytics SDK for Androidの GoogleAnalyticsAndroid_1.3.1.zip をダウンロードして、解凍するとlibGoogleAnalytics.jarがあります。

android-support-v4.jarと同様に、libGoogleAnalytics.jarをEclipseのioschedプロジェクトのlibsディレクトリにコピーして、右クリック > Build Path > Add to Build Pathでビルドパスに追加します。

これでコンパイルエラーがなくなりました。

実行する

あとはお手持ちのお好きな端末やエミュレータで実行してみてください。

スマートフォンだと

タブレットだと

こんな感じで、他のScheduleやSessionsなどもUIがスマートフォンタブレットで変わります。

あとは

ソースコードを読んでみましょう。Googleの中の人が作ったAndroidアプリのソースコードなんて、そうそう読むチャンスなんてないと思うので非常に貴重な経験と多くの発見ができると思います。冒頭でも書きましたがタブレット対応のために難解になったのがアレなんですが・・・
易しい所だと、res/配下のファイルの命名規則なんかは真似すると整理できていいと思います。layoutファイルはactivity_やfragment_やlist_item_などのプレフィックスを付けるとか。drawableの定義の仕方とか。小さな所から真似ていけばいいかなと思います。
ソースコードの方だと、パッケージ設計やクラス設計、継承の使い方とか。ダッシュボードUIの作り方とか。ActionBarの実装とか。

ICS(Android 4.0)でまた色々変わっちゃうとは思うのですがね(ぜぇぜぇ

おまけ

タブレット対応前のシンプルなioschedはどこにいった?

ググったらunderhilllabsさんが古いioschedをがっつりコピーしてgithubに突っ込んでいてくれてたおかげで発見できました。けれど、.svnがそのままコミットされていたりいろいろ残念な感じだったのでforkしてゴミを削除したりapi versionを修正したりしときました。

https://github.com/gabu/iosched2010 からcloneしてください。Android初めてという方は、こっちの方がタブレット対応する前のAndroid 2.1向けのシンプルなioschedとなっておりますのでソースコードも読みやすいかと思います。

ICS(Android 4.0)でどっちみちFragmentは避けて通れないという噂もあるけど(げふんげふん

ではでは!

Androidタブレットアプリ開発ガイド Android SDK 3対応 (Smart Mobile Developer)

Androidタブレットアプリ開発ガイド Android SDK 3対応 (Smart Mobile Developer)

  • 作者: 井形圭介,上中正統,尾古豊明,加藤勝也,小林慎治,瀬戸健二,高木基成,日高正博,夜子まま
  • 出版社/メーカー: 翔泳社
  • 発売日: 2011/09/16
  • メディア: 大型本
  • 購入: 4人 クリック: 156回
  • この商品を含むブログ (7件) を見る

Titanium+CoffeeScript+Guard+Vim環境できたよー!

20111011 追記

node.jsをインストールしないと.coffee内の日本語が.jsにコンパイルされた後に欠落する問題がありました。

brew install node.js

で、node.jsをインストールすることをおすすめします。
Homebrewは https://github.com/mxcl/homebrew/wiki/installation を参考に簡単にインストールできます。

もう生JSは触れない

Titaniumでロジックを書いていて生JSの非力さに絶望していたところ、CoffeeScriptのことを思い出して食わず嫌いで触ってなかったので試しにCoffeeScriptを触ってみたら壮絶良かったので、もうTitaniumもCoffeeScriptで書こうと思いました。

Guardで自動コンパイル

CoffeeScriptコンパイルすることでJavaScriptソースコードが吐き出されるので、いちいちコンパイルしなきゃいけないけど、そこは自動コンパイルしたいところ。

GuardでTitanium+CoffeeScriptの開発を快適に | ひげろぐを参考に、自動コンパイル環境が作れます。

Node.jsはいらない

よくCoffeeScriptをインストールするためにNode.jsをインストールしましょうというエントリーを見るけど、上記の方法であればNode.jsをインストールする必要はありません。

Growlで通知

Growlは既にインストールしていたのでgrowlnotifyだけ追加でインストールしたかったのだけどローカルでExtrasの下にあるというgrowlnotifyを探したんだけど見つからなかった(そもそも配布物にしか入ってない?)のでGrowl - DownloadsからGrowl-1.2.2.dmgをダウンロードして、ダブルクリックしてExtrasの下にありました。

もちろん、Growlをインストールしていない人はGrowl本体もインストールしましょう。

CoffeeScriptVimで書く

Titanium StudioはCoffeeScriptを書くことなんて想定してないわけで、Titanium StudioでCoffeeScriptを書くことは何のメリットもないので使いやすいエディタで書くのが吉だと思い、普段慣れているVimで書くことに。

Vimを最新に

しばらくVimをアップデートしてなかったのとvim-pathogenを使ってみたかったのでMac OSXでのvim環境整理。.vimrcやらオヌヌメPlug inやらまとめ。 - ( ꒪⌓꒪) ゆるよろ日記を参考にVimを入れなおすことに。

vim-pathogenを入れる

https://github.com/tpope/vim-pathogen のInstallationを参考にvim-pathogenを入れて、.vimrcに以下を追加

call pathogen#infect()

あとは、~/.vim/bundle以下にVimプラグインを入れるだけでOK。いやーこれでVimプラグインがすっきり整理できますねー。

vim-coffee-scriptを入れる

VimCoffeeScriptプラグインを教えて頂いたのでvim-coffee-scriptを入れる。

$ cd ~/.vim/bundle
$ git clone https://github.com/kchmck/vim-coffee-script.git

これでひとまずVimCoffeeScriptを書いて自動コンパイルする環境までできました。

だいぶいい感じ、だいぶいい感じなんだけどTitanium APIが長いので補完が欲しいところ...探しても探しても見つからなかったけどTwitterで教えて頂きました。ありがとうございます!

titanium-vimを入れる

ということで教えていただいたtitanium-vimを入れる。

$ cd ~/.vim/bundle
$ git clone https://github.com/pekepeke/titanium-vim.git

すると、おおおおおお、補完できるううう!!!


さらに自動補完させる

neocomplcacheというVimプラグインを入れると自動補完してくれるようになります。

$ cd ~/.vim/bundle
$ git clone https://github.com/Shougo/neocomplcache.git

設定は以下を参考に、設定項目が多いのですが一度目を通して把握しておくことをお勧めします。

yuroyoroさんの.vimrcも参考になります。

ちなみに、とにかく試したいという方は以下を.vimrcにどうぞ。

" neocomplcache settings
" http://vim-users.jp/2010/10/hack177/
" http://vim-users.jp/2010/11/hack185/
" http://vim-users.jp/2011/01/hack193/

" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1
" Use smartcase.
let g:neocomplcache_enable_smart_case = 1
" Use camel case completion.
let g:neocomplcache_enable_camel_case_completion = 1
" Use underbar completion.
let g:neocomplcache_enable_underbar_completion = 1
" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'

" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
    \ 'default' : '',
    \ 'vimshell' : $HOME.'/.vimshell_hist',
    \ 'scheme' : $HOME.'/.gosh_completions'
        \ }

" Define keyword.
if !exists('g:neocomplcache_keyword_patterns')
    let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns['default'] = '\h\w*'

" Plugin key-mappings.
imap <C-k>     <Plug>(neocomplcache_snippets_expand)
smap <C-k>     <Plug>(neocomplcache_snippets_expand)
inoremap <expr><C-g>     neocomplcache#undo_completion()
inoremap <expr><C-l>     neocomplcache#complete_common_string()

" SuperTab like snippets behavior.
"imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>"

" Recommended key-mappings.
" <CR>: close popup and save indent.
inoremap <expr><CR>  neocomplcache#smart_close_popup() . "\<CR>"
" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
" <C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><C-y>  neocomplcache#close_popup()
inoremap <expr><C-e>  neocomplcache#cancel_popup()

" AutoComplPop like behavior.
"let g:neocomplcache_enable_auto_select = 1

" Shell like behavior(not recommended).
"set completeopt+=longest
"let g:neocomplcache_enable_auto_select = 1
"let g:neocomplcache_disable_auto_complete = 1
"inoremap <expr><TAB>  pumvisible() ? "\<Down>" : "\<TAB>"
"inoremap <expr><CR>  neocomplcache#smart_close_popup() . "\<CR>"

" Enable omni completion.
autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags

" Enable heavy omni completion.
if !exists('g:neocomplcache_omni_patterns')
    let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
"autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete


すると、おおおおおお、自動補完できるううう!!!(画像使い回し)

これでVim+CoffeeScript+Guardで自動コンパイルされるので、Titanium Studioで実行してiOSシミュレータでテストできるわけですが、ビルド実行もコマンドラインでやりたいですよねー?

TitaniumプロジェクトのビルドとiOSシミュレータの起動をコマンドライン

以下のbuilder.pyがコマンドラインでビルドなどができるコマンドです。

$ /Library/Application\ Support/Titanium/mobilesdk/osx/1.7.2/iphone/builder.py
builder.py <command> <version> <project_dir> <appid> <name> [options]

available commands: 

  install       install the app to itunes for testing on iphone
  simulator     build and run on the iphone simulator
  distribute    build final distribution bundle
  xcode         build from within xcode
  run           build and run app from project folder

長いのでaliasを設定します。

vim ~/.zshrc
# Titanium builder
alias ti='/Library/Application\ Support/Titanium/mobilesdk/osx/1.7.2/iphone/builder.py'
source ~/.zshrc

で、Titaniumプロジェクトのルートディレクトリで以下のコマンドを実行すると、ビルドしてiOSシミュレータが起動します。

ti run .

ただ、この方法だとリビルドして再度iOSシミュレータで確認したい場合は、Ctrl-Cで終了して、再度コマンドを実行する必要があります。バックグラウンドで実行して、うんぬんかんぬんといろいろ挑戦していたのですが、ゾンビが残ったりして上手くいきませんでした。。。iOSシミュレータを再起動せずにリビルドしたアプリを確認できると嬉しいのですが、Titanium Studioでも同様にiOSシミュレータは再起動するのでiOSシミュレータ的に無理なのかな?教えて!エライ人!

あわせて読みたい

Vimテクニックバイブル ?作業効率をカイゼンする150の技

Vimテクニックバイブル ?作業効率をカイゼンする150の技

Titanium Mobileで開発するiPhone/Androidアプリ (Smart Mobile Developer)

Titanium Mobileで開発するiPhone/Androidアプリ (Smart Mobile Developer)

Titaniumはバージョンアップが速いのですが著者さんが精力的に補完稿PDFを以下で公開されています。また、wikiページのUIカタログ、APIカタログは、Titanium開発で非常に助かるページです。僕も開発しながらこのページをよく見ています。

http://code.google.com/p/titanium-mobile-doc-ja/

ということで、TitaniumでiOS/Androidアプリ開発はCoffeeScript+Guard+Vim環境でやっていくことにしました。もう生JSは触れない。

東海GTUG復活しました!

9/10(土)に東海GTUG復活第1回の勉強会を行いました。

Tokai GTUG Meetup #1 Google App Engine : ATND

第1回のテーマは、App Engineということでなんと!Googleの松尾さんが駆けつけてくれました。

GTUGとは?

GTUGとは、Google Technology User Groupの略で、Googleのサービスや技術、APIに興味のある開発者のコミュニティです。

本家サイトには以下のように書いてあります。

A GTUG is...

  • Run by passionate individuals in the developer community
  • A place to learn about Google's developer platforms and tools (code.google.com)
  • A place to see what local companies and developers are doing with these technologies
  • Focused on developers and educational technical content
  • Open to the public with a public membership
  • A place to meet cool and smart people in tech :)

最後の1文が素敵ですよね :)

GTUGは、世界83ヶ国に273個のGTUGがあり、日本には、東京、京都、東海、四国、中国、九州にGTUGがあります。それぞれ「東京GTUG」のように地名にGTUGをくっつけて呼びます。

そして、東海GTUGは存在はしていたものの実質活動停止状態だったので、「どげんかせんといかん」と思い、現マネージャーに確認を取って、東海GTUGのマネージャーになりました。

当日のふりかえり

Google App Engine入門者向け紹介」松尾さん

Google App Engineとは何なのかを非常に丁寧に紹介していただきました。クラウド(という言葉はバズワードなので好きではないのですが)や、そもそもスケールするシステムの勉強にもなったのではないかと思います。

Google App Engine Update」松尾さん

タイムリーなことにPreview卒業と新料金体系のお話を聞くことができました。いま話題の新料金体系による値上がり対策として一番簡単な方法について

「App Engineのデフォルトはパフォーマンス優先になっているので、Application SettingsでMax Idle Instancesのスライドバーを一番左(1)に、Min Pending Latencyのスライドバーを一番右(15s)に変更する。(デフォルトは両方が逆の設定になっている。)」
APIの呼び出しなどをチューニングして欲しい。」
「どうしても困る場合は問い合わせして欲しい。」

とのことでした。

詳しくは、shin1ogawaさんの 404 shin1のつぶやき ないわー Not Found: Google App Engineの新料金体系に向けた準備 #gaeja を御覧ください。shin1ogawaさん、有益な情報をありがとうございます!

補足すると、今回App Engineは、ただ料金が値上がりするわけではなく、Previewを卒業し正式Productになることに合わせた変更だということです。

また、App Engineの特徴は「料金」だけではなく、インフラエンジニアのコスト(人件費)を最小限にすることができる点にもあるといえます。

スタバのコーヒー3杯でGoogleのエンジニアがシスアドミンとして雇えます

「AppEngine これどうする?」中垣さん

App Engineで開発しているときに発生する問題と解決策を発表していただきました。個人的には「あるあるー」というものから、知らなかった話もたくさんありました。勉強になりました。中垣さん、ありがとうございました!

「パネルディスカッション or Q&A」

発表と並行してGoogle モデレーターを使ってQ&Aを募集していたので、贅沢にも松尾さんに全レスしてもらいました。当日のモデレータはこちら

勉強会終了

今回の勉強会の参加者のほとんどがApp Engineを使ったことがない人だったのですが、最後に松尾さんが「App Engineを使ってみたくなった人〜?」と聞いたところ、ほぼ全員の方に手をあげていただけるという大成功っぷりに、今回の勉強会をやってよかったなーと思うとともに、さすが松尾さんはトークが上手いなーという感想と松尾さんは人を惹きつける魅力的な人だなーとますます憧れの気持ちが強くなるという最後でした。

記念撮影

そして、懇親会へ。。。

App Engine Tシャツをいただきました!

なんと、松尾さんが東海GTUGの参加者へのプレゼントとして、App Engine Tシャツを持ってきてくださったので、懇親会でじゃんけん大会をしました。しかし、じゃんけんがすこぶる弱い僕はTシャツをゲットできず、おろおろしていたところ、松尾さんが翌日着る予定だった色違い(グレー)のApp Engine Tシャツをいただいてしまいました。本当にありがとうございます。松尾さん優しすぎるうう(;。;)

ということで僕だけグレーです。

懇親会では、お酒の席でしか聞けない深いイイ話をたくさん聞かせて頂きました。松尾さんありがとうございました!

さいごに

ということで、再スタートを切った東海GTUGですが、東海地方の皆様と一緒にGoogle技術をつまみにわいわい楽しく勉強できるコミュニティにしていきたいなーと思っております。
勉強会を開催するために面倒な部分はやりますので、どうぞコミュニティを活用してください。
何か思いついたら気軽にメーリングリストに投げてください。
さっそく、 @ さんが運営に加わってくださいました。ありがとうございます!

それでは!次回の東海GTUGも楽しみましょう!

Webサイト

東海GTUGのWebサイトはこちら。中垣さんがメンテしてくださいました。とても綺麗になりました!ありがとうございます!

App Inventorをインストールする方法

App Inventorを使うためには以下の2つをインストールする必要があります。

  • Java 6
  • App Inventor

Java 6をインストール

既にインストールされている場合は、特に必要な作業はありません。
Javaがインストールされているかは、こちらで確認できます。

インストールされていないか古いバージョンがインストールされている場合は、 http://java.com/ja/download/ からダウンロードして、インストールしてください。

App Inventorをインストール

お使いのPCのOSごとにインストーラーが違います。それぞれリンク先のDownloadからインストーラーをダウンロードして、インストールしてください。

とりあえず試す

とりあえず試したい人は、英語ですが本家のチュートリアルがおすすめです。

もしくは、僕のブログにも音声認識 + Twitterつぶやきアプリの作り方があります。試してみてください。

それでは!