Androidのデモをする時はAndroid Screen Monitorが超オススメ

tm_twitter_apiの紹介デモで使ったら一部の方から感心していただいたのでご紹介。

プレゼンの途中でスマートフォンの画面を見せたい時、iPhoneだったらiPhoneエミュレーターで見せればいいのですけど、Andoroidの場合、エミュレーターが遅すぎるので、実質的に使い物になりません。だからといってちっちゃなスマートフォンの画面をそのまま見せたってお客さんには見えないので、結構困りますよね。

そういうときに、Android Screen Monitor がオススメです。画面をリアルタイムで PC 上に表示してくれるツールで、これを使えば実機でアプリを動かしている様子をPC経由でプロジェクタに表示することが出来ます。

Android Screen Monitor-3.png

iPhoneエミュレーターと並べてデモをすると、後ろから見ている方にはほとんど区別がつかないみたいで、昨日のプレゼンのあとも、「あの超早いAndroidエミュレーターは何ですか?」と聞かれましたw

JAVAで書かれているので、AndroidSDKを導入済みの方であれば、ダウンロードしてパスの通った位置に置いて「java -jar asm.jar 」で動くはず。公式サイトを見るとより詳しい導入方法が書かれています。

TitaniumMobile用Twitterライブラリtm_twitter_api

sxchu_1087539_11462380_friends.jpg
TitaniumMobileでTwitterを扱うときに便利なtm_twitter_apiの新バージョンを公開しました。

mogya/tm_twitter_api – GitHub

  • Androidでも動くようになりました!
  • twitterのUIが変わって動かなくなっていたので、新しいUIで動くようにしました

いずれも他の方が書いたパッチを取り込んだものです。オープンソースって素晴らしいですね。


使い方

Ti.include("lib/twitter_api.js");
//initialization
Ti.App.twitterApi = new TwitterApi({
consumerKey:'YOUR CONSUMER KEY of twitter API',
consumerSecret:'YOUR SECRET of twitter API'
});
var twitterApi = Ti.App.twitterApi;
twitterApi.init();

こんな感じで初期化します。CONSUMER KEYとSECRETは、Twitterの開発者ページでアプリ登録したときにもらえるものです。
twitter_app_page.png

twitterApi.init(); を初めて呼び出したときは、ユーザーさんにOAuthのための画面が掲示されます。ユーザーさんがアカウント名とパスワードを入れると、TwitterがPINコードというのを返してきますが、これはtm_twitter_apiが勝手に読み込んで認証処理が終了します。
initがすんだら、twitterのAPIを呼び出すことができます。とりあえずつぶやいてみましょう。

//status update
twitterApi.statuses_update({
onSuccess: function(responce){},
onError: function(error){},
parameters:{status: 'yah! this is my first tweet from twitter_api.js! '}
});

 つぶやくときは、Twitterのstatuses/updateというAPIをつかうので、tm_twitter_apiでは、twitterApi.statuses_update関数を呼び出します。
うまくいったときはonSuccess、なにか問題が起きたときはonErrorのコードが呼び出されます。
つぶやきの内容など、APIに渡す引数はハッシュparametersにいれて渡します。
この構造は、全てのAPIに共通です。

//get tweets
twitterApi.statuses_home_timeline({
onSuccess: function(tweets){
for(var i=0;i<tweets.length;i++){
var tweet = tweets[i];
// now you can use tweet.user.name, tweet.text, etc..
}
},
});

つぶやきを取得するコードです。onSuccessでtweetsという引数が渡されてくるので、これをループで回すと、つぶやきを取得することができます。

AndroidはGaraxySしか試せてないので、タブレット端末とかだと変わった動きをするかもしれません。どんなことになったか教えていただけると嬉しいです。
もちろんパッチも歓迎です(笑)

WEBサービスを考える時に知っておくべき名前の法則

ZAPAnet総合情報局zapaさんが、
SHARPのガラパゴスについて

「ガラパゴスがヒットしたのは、ガンダムと同じように「ガ」行の力強さと、ポケモンと同じように「パ」行の響きの良さを組み合わせた単語だったから」

って説明されています。それならzapaさんはガッパさんにしてはどうかと提案したのですけど、却下されてしまいました。とても残念です。

さて、そういう音の持つ力について、女たちはなぜ「口コミ」の魔力にハマるのかという本に具体的に説明されていました。

  • 「男の子はみんな無意識のうちにB,G,D,Zの濁音4音に興奮する」(ゴジラ、ガメラ、ゼットン、ガンダム、ゲッターロボ)
  • P音は、口腔内の空気を軽く破裂させる、ブレイクスルー系の破裂音。赤ちゃんが意識的に出す最初の無声子音でもあり、陽気さ、気持ちよさ、子供っぽさ、軽さ、遊び心などの印象がある。
  • 赤ちゃんは生まれてすぐ、無意識のうちに「M(g)M(g)」と発音しながらおっぱいを飲む。この体験から、Mの音は「母性」と強い関係を持つ(ママ、マミー、マザー)。マリリンモンローという名前はこの点でとても良くできている。
  • 10代から20代の若い女の子はS音の爽やかさが大好き。サッカーの中村俊輔選手がナカムラ選手じゃなくてシュンスケと呼ばれるのは、俊敏で、颯爽としたミッドフィルダーのイメージになるから。
  • 一方、40代から50代の男性はS音が嫌い。中村俊輔を彼氏としておとうさんに紹介する時は、「シュンスケ君」じゃなくて「ナカムラ君」と紹介するほうがうまくいくかもしれない。

シュンスケと呼ばれるのは中村憲剛選手がいるからだし、初対面の人を名字じゃなくて名前で紹介されたらそりゃあ怒るというか困るだろう、という気がします。
sxchu_1295183_soccer.jpg

でも、G音は男の子が大好きという説明は、zapaさんのガンダムの説明とずれてませんし、小学生をターゲットにしたポケモンがP音で始まるのも、上に引用したP音の解説で説明することが出来ます。
それだったら、もっと他のこともこの本の理論で説明できるかもしれません。面白そうなのでやってみました。

グーグルがヤフーほど一般うけしない理由

グーグルとヤフーを比べると、Yahoo!には女性、若年層が多く、Googleには男性が多いという調査結果が出ています。

グーグルは、Gで始まって、さらにもう一個Gが含まれています。これに対して、ヤフーのYは「口腔全体をやわらかく使って出す、安らぎの子音」なのだそうです。つまり、グーグルがヤフーほど一般に浸透しない理由の一つは、グーグルにGの音が多すぎるからなのかもしれません。
もしグーグルがヤフーに対抗することを考えられるのでしたら、音のバランスがいいライブドアを買収して日本向けのサービス名にしてしまうというのがいいかもしれません。

グルーポンとポンパレの将来を予測する

グルーポンとポンパレ、どちらも「ポン」を含んでいます。当然クーポンから来ているのだと思いますが、楽しい雰囲気をだすのに役立っていますね。

一方、グルーポンは男の子大好きGの音で始まるのに対して、ポンパレはPを重ねた名前になっています。
このまま行くと、グルーポンはグーグル同様に男性ユーザーが多くなってしまうかもしれません。クーポンを使ってくれるユーザー層を考えてGの音を外したのだとしたら、リクルートさんはさすがという他ないですね。

[php]error_logが使えない環境でログをとる方法

sxchu_752518stop.jpg

※今日のお話は、最初から最後まで、知っている人にとっては当たり前すぎて困るレベルのお話です。

 phpでは、error_logという関数でログを出すことが出来て、一般にこれはApacheのエラーログに出力されるので、これを使うとなんだか動かないスクリプトの動きを追うことが出来ます。

ところが、一部のレンタルサーバで、PHPは使えるんだけどログを見せていただけない環境が存在します。全部見せてくれない環境はさすがに少ないですけど、例えばサブドメインを使っていると駄目とか、共用SSLを使っていると駄目とか。
こういう場合に、しょうがないので自前ログを用意する手順。

1.絶対パスを確認

ログを書き出す場所を決めるために、まずはディレクトリ構成を知る必要があります。
log.phpとか適当な名前のファイルに、こういうスクリプトを書いて走らせてみればだいたい分かります。

<?php
echo "cwd:".getcwd();
?>

「/home/mogya/public_html/」的なものが得られるはず。これだったら、/home/mogya/debug_log あたりにログを出力するようにすれば良さそうですね。

2.ログ出力関数

<?php
function dbg_log($str){
$filepath = "/home/mogya/debug_log";
$fp = fopen($filepath, "a+");
fputs( $fp, $str."\n" );
fclose($fp);
}
?>

ログを出力したいファイルの頭あたりにこんなのを書いておいて、error_log()の代わりにdbg_log()を書けば、変数の中身なり何なりを出力して動きを追うことが出来る。
環境によっては/home/mogya/debug_log に書き込めないことがあり得るので、その場合はFTPで適当なファイルをあげておいて、アクセス権を777にしてしまえば書き込めるようになる。

PHPでファイルに文字を書くだけなんだから当たり前の話なんだけど、毎回思い出すのが面倒なので書いてみた。
セキュリティとか深刻に考えたスクリプトじゃないので、終わったら消すことが前提です。


パソコンの前にいたまま被災地に救援物資を送る方法

2011-03-27 22:12:40 追記。ブログが更新されていて、「ダンボールに梱包して中には1種類のみを入れて発送して下さい。」「ダンボールの表面に大きな文字で「Japan元気塾救援物資」と記載して、「中身」の記載をお願いします」などの注意書きが追加されています。こうなると、ネットショップの中の人と相談したり、一回受け取って処理してから発送しないといけないかもしれない。

  • 楽天かAmazonなどの通販をつかって、被災地で必要そうな物資をさがします。主食の方がいいらしいです。理由はあとで説明しますが、数万円くらいの金額でまとまって買っても大丈夫そうな商品が望ましいでしょう。
  • 宛先を、このブログの人にします。
    緊急連絡|加藤秀視オフィシャルブログ by Ameba
  • 決済が完了したら、ショップの中の人が商品(救援物資)を詰めて元気塾に発送してくれます
  • 元気塾の中の人がとりまとめて現地まで持って行ってくれます

注意)物資があふれたらブログで中断の連絡が出ると思うので、発送する前に一度確認してくださいね。

とりあえず自分も、魚を買って送ってみた。

以下、もうちょっとちゃんとした説明。ずいぶんラクチンなこのボランティアが結局何をしていることになるのか、本当にこれでいいのかなど。


Q: 被災地に個人レベルで物資を送っていいの?
A: 普通はダメです。知り合いの家に送るのならともかく、現地の対策本部などに個人で物資を送るのは現に慎むべきです。一万人が段ボール一個送ったら、現地には、中身不明、大きさも揃っていない一万個の段ボールが届きます。現地にこれを仕分ける能力はないので、個人が送った段ボールはひたすら現地の空間を圧迫する迷惑にしかならない、というのが阪神大震災での教訓です。

Q: じゃあダメじゃん
A: この方法は、現地に直接送るのではなくて、いったん栃木県の会社事務所に物資を集めています。ここで仕分けて現地に4tトラックで持って行っているので、現地には必要な物資だけが届くことが期待できます。

Q: 何送るのがいい?
A: 自分が送った魚はまだ在庫があるそうです。【6枚セット】温めるだけで骨ごと食べれる魚のひもの まるごとくん」
元気塾の人のブログによると「水、レトルトパック、缶づめ、カップラーメン、お餅、梅干し、たくわん類、ナメタケなど瓶に入ってるものなど、日持ちするものを募集中です。
お菓子やフルーツより主食になるものをお願いします。
」とのこと。
自分、阪神大震災の時、送られてきた物資を仕分けるボランティアをしていました。この経験からいわせていただくと、ご飯一個缶詰一個とかを箱に詰めて送られると仕分ける手間がかかるので、缶詰100個とか段ボールいっぱいのレトルトご飯とか、数がまとまっている物の方がありがたかったです。通販なら、箱詰めもショップでやってくれるし、同じ物をたくさん買いやすいから今回通販をお勧めしている次第。

Q: 元気塾って信用できるの?
A: 最終的には送る人が判断することです。自分の場合、普段ならこのブログの見た目はあんまり信用しないタイプなのですけどw、現地の写真もあがってますし、過去のブログやtwitterを見てもおかしな事になってないので、今回は信用できると判断しました。救援物資をだましとっても持てあますだけですし。

Q: パソコンの前で座ったままかよ!ボランティアってのはなぁ!
A: そういう元気のある方はぜひ現地へどうぞ。助けあいジャパン ボランティア情報ステーション。でも、このラクチンな方法だと

  • 最悪余っても栃木県に溜まるだけなので被災地に迷惑をかけない
  • 近所のスーパーで品薄騒ぎを引き起こさない
  • インターネット上で経済がより回るようになる
  • パソコンの前から離れられない人でもできるボランティア

というメリットがあると考えています。もし賛同していただける方は、テキトーな商品を買って元気塾まで送ってあげてくださいませ。

追記:一応本人に、通販から送って迷惑じゃないかどうか聞いてみた。特に困ってなさそうです。Twitter / @Japan元気塾塾長    加藤秀視: 迷惑じゃありませんよ。有り難う
ございます。 RT @ …

震災関連のサービスを作る時参考になりそうなページまとめ

エンジニア!

今回の震災に関連して、プログラマが役に立てることを!ということで、WEBサービスとか、スマートフォン向けアプリケーションがたくさん作られています。
プログラマは、「こんなものがあったらいいのに」と思った時、すぐにそれを作り出すことが出来る素敵な職業ですので、この災難に対しても、その腕を発揮するのはとってもいいことだと思います。

これから作る人や、別に震災向けのサービスじゃないんだけど、既存のサイトに関連機能を組み込みたい、という人のために、震災に関連するアプリ/サービスを作るために使えそうなAPI、データを公開しているページを集めました。

電力使用量に関する情報を得られるAPIなど

計画停電に関する情報を得られるAPIなど

その他、参考に出来そうなサイト

  • 計画停電時間検索。クリエイティブコモンズでperlスクリプトを公開。Wikiなど使って複数の開発者が協業中。PHP版も。

随時更新予定。他にもAPIを作った方、ここに載っていないAPIやデータをご存じの方はぜひコメントしてくださいませ。

Titaniumのインクルードパスを指定する方法私案

(2011-06-07 21:29:06追記)この記事で書かれている現象はTitanium Mobile SDK 1.7で修正されます。しかも、予測とは違う仕様になったので、この記事に書かれているサンプルコードは動かなくなります。詳しくはTi.includeの不具合が1.7で修正される模様 – もぎゃろぐを見てくださいませ。
(追記終わり)

 TitaniumMobileでとっても困っていることが一つあって、Ti.include(‘lib/a.js’) って書いた時、iPhoneだと Resources/lib/a.js を見に行ってくれるんだけど、Androidだと Resources/lib/lib/a.js を見に行ってしまう。

#2585 Include paths for iphone and android are not based on the same starting point – Titanium Mobile – appcelerator

 
かなり困る問題なのに1.6.0でも直らないそうで、みんな困った末にこんな黒魔術が発見されました。

以下のように指定するとどの場所にあるファイルでTi.includeしても確実にファイルをインクルードできる。
Ti.include(“../../../../../../../../../lib/bookmark.js”)
TitaniumのインクルードパスをResourcesからの相対パスで指定する方法 | ひげろぐ

sxc.hu.657889.jpg

さすがにこれはちょっと(汗) ひげろぐの人が考えた訳じゃないし、考えた人だって困った末に編み出したのだとは思いますが、なんか鼻から悪魔とか出てきそうでムズムズします。

いろいろ試した末にたどり着いた別案。

var path_lib = 'lib/';
if (Ti.Platform==null || Ti.Platform.osname=='android'){
path_lib = '';
}
Ti.include(path_lib+'a.js');

Ti.Platformを確認しているのは、Android環境でTi.Platform環境がnullになることがあるから。

Appcelerator Developer Center – continuous 1.5.0 on android … ti.Platform.name crash

黒魔術よりはすっきりすると思うのですが、将来的に不具合が修正されたり、Andoirod以外の環境が出てきた場合にはコードを修正しないといけなくなる可能性が高いので、これはこれで問題があります。なんかもっといい案があればぜひ教えてください。

任意の書類をShotNoteで取り込めるクリアファイル

2012-11-28 追記
キングジムさんからちゃんとした商品が発売されました。
新製品チェック:クリアファイルの書類をスマホでデジタル化──キングジム「ショットドックス」 – ITmedia ニュース
クリアーファイルに収納した書類をスマホで簡単に持ち出し!「ショットドックス」発売 | ニュース | 「ファイル」と「テプラ」のキングジム

(追記終わり)


ShotNoteというデジタル&アナログな商品がキングジムさんから発売されました。

SHOT NOTE - KING JIM CO., LTD.

手書きメモをスッキリデジタル化「ショットノート」 | KINGJIM
ASCII.jp:デジタル&アナログの新感覚文具「ショットノート」

メモ用紙の四隅にマーカーが印刷されているので、専用アプリで取ると自動的に台形補正&日付のOCRをしてくれる、というものです。EverNoteに送れるのも嬉しい。

クリアファイルで作る薄くて軽いホワイトボードの人としては、これはクリアファイルで作るべきじゃないかと思いました。

・・・できた。
P1000661.JPG

こういうふうにして使います。
P1000662.JPG

これさえあれば、任意の紙に書いたメモをShotNoteで撮影して取り込むことが出来ます。超便利。

OAuth認証してツイートしてタイムラインを取得できるiPhoneアプリを10分で

TwitterのOAuth認証してつぶやいてタイムラインを取得できるiPhoneアプリを10分で作るというのを、昨日のスマートフォン勉強会@関西#13で実演してきました。

真っ白な状態のアプリに、OAuth認証を導入して、TextAreaで自由につぶやけるようにして、タイムラインを取得して表示するところまでで9:21。
動画の下、360pの左にあるCCボタンを押すと、解説が出るようになります。

先日公開したoAuthAdapter修正版を取り込んだtm_twitter_apiというのを使っています。

あと、補完機能は、emacsとAuto Complete Modeに自作の辞書を組み合わせたもの。10分で作る動画の場合、タイプミスしてビルドエラーが出ると撮り直しなので、補完機能はとても便利ですね。

コード:gist: 802605 – 10min twitter client- GitHub
USteram録画:古川大輔(mogya)「10分で作るtwitterクライアント」 スマートフォン勉強会関西#13

(2011-02-04 追記)
emacs autocompleteの辞書は、k1LoW/emacs-titanium – GitHubにあります。自分は、これを元にgist: 810559 – emacs titanium dictionary- GitHubを作って使っていました。