2010年10月27日水曜日

BacklogのiPhoneアプリ作成中

BacklogのiPhoneアプリをちまちま作っています。
マルチアカウントを設定できて、表示するプロジェクトも任意に設定。
指定プロジェクトのみ一元化して表示。ブックマークを付ける事が出来る。という特徴のアプリになっています。
名前はまだありませんw

画面はこんな感じ。


↑では、会社で使っているBacklogアカウントと、空うさぎのBacklogアカウントを同時に表示しています。
まとめてみたかったので作ってみたのですが、やっぱりプロジェクト毎に見れる画面もあった方が嬉しいかも...と迷ってはいますw
足跡のマークを押すと、ブックマークされます。かわいいでしょ?!

コメントの登録は作成したのですが、課題の登録/更新はまだ出来ていません...
アイコンは、http://glyphish.com/ の freeのものをとりあえず使ってます。これは Creative Commonsライセンスなんですが、正式に使う事にした場合iPhoneアプリではどのようにするのは一般的なんだろう...

さてさて、このアプリは、始めてのiPhoneアプリなので、もぅめっちゃググりまくりで作ってます。
後々コードを見直すことがあった場合、もぅ恥ずかしいコードなんだろうなぁ....(笑

MA6に登録したかったのですが、もう間に合いそうにないので断念。無念。
代わりに空うさぎを再び登録しましたがw

ここまで作ったので、Storeに登録するまで頑張ろうかとー!
• • •

2010年10月3日日曜日

GDD2010にボランティア参加してきました

Google Developer Day2010@東京 が先週9/28に行われました。

今回、ボランティアとして、8/27のbootcamp 8/28のGDD に参加してきました。
bootcampでは受付を、GDDでは進行アシスタントを担当。

進行アシスタントは始めての経験でとても楽しかったです。
いた会場はB5-2。聞けたセッションはその部屋のものだけになってしまいましたが、一番前の特等席&机付き で聞く事ができました♪
...とはいえ、無線は飛び交うし、終了間際になったら時間も気にしなくてはいけないし、忘れ物を届けたり...とバタバタしてあまりゆっくり聞ける感じではありませんでしたがw

海外のスピーカーが多い部屋だったんですが、英語が話せたらもっと交流ができたのに..と残念。
Googleの海外のスピーカーの方は、終わり際に ありがとうと声をかけてくれたり、握手をしてくれたり..とスタッフへの配慮も忘れずしてくれるのに感動。さすがー。

無線で進行の方の話が聞こえてきて、動きを色々知る事ができました。
何か問題があった場合には、リーダーに無線が入るのですが、多分リーダーの方はすぐ聞いて動けるよう、他の作業はせずにその事に集中している感じでした。
人が多くないと難しい所もあるとは思いますが、それなりの規模だったら必ず必要だろうなぁと思いました。
あと、色々トラブルが発生していて、連携もうまくいっていない場面があったのですが、個々人がちゃんと判断して動いていく場面にも遭遇しました。

ただ、思ったのが、
Googleのイベントだけど、ITには特に強いイベント会社って訳ではないのだなぁ...と。
進行がオンスケで進むのは確かに一番重要かとは思うのですが、こぅいぅIT系のセッションは、ネットがつながる状態になっているか?というのも結構重要だと思います。
会場に来れない人は、USTやTwitterなどで状況を知る訳ですし、人数としても会場来る人よりも多いかもしれない。

そう思うと、GDDに限らず大きいイベントで無線がちゃんと入るイベントって結構少ない気がします。
無線の用意だけしてそれでOK!...とはだいたいならないですよねw

...とはいえ、私自身は、結局なにも出来ませんでしたが、無事に終了してよかったです。

最後に、ボランティアですが...
社会人として参加するのはやっぱり大変だなぁーと思いました。
当日だけなら、有給とってしまえばOKなのですが、それまでのボランティア講習会がナカナカ。3回程あったのですがその都度早退の届けを出すのはやっぱり白い目で見られそうです。。
会社として、このイベントのボランティアに参加するなら認めるよ、どう? と最初から言ってくれる ぐらいでないと難しいだろうなぁ

ボランティアの人は、大学生の人がやっぱり多かった。
「教授にいってこい」と言われてきた方がそこそこいました。大学生だから時間があるという訳ではなく、まぁ一緒だよなw と思いました。

ヌーラボは、そこらへんは融通が聞く会社なので(勝手に思っている?)、また機会があればやってみようかなぁーと思います。
...つーことで、人手が足りないときは声かけてください!

P.S. ひがさんと佐藤さんがスピーカー控え室にいないと無線でちょっとした騒ぎになっていましたよ(笑
• • •

TwitterUserStreamをAdobeAIRで使う

先日、TwitterのUserStreamが一般公開されましたね!
空うさぎでも早速取り込んでみました。

UserStreamはbeta期間を経て、今回の一般公開になったのですが、beta期間中はそのAPIを使ったツールは公開できないので、開発用空うさぎでのみ使用できるようにしていました。
一般公開になったタイミングですぐ反映できるね!と思っていたのですが、いざ公開されたものを見ると、https通信のみ許可されている形になっていました。

空うさぎは、AdobeAIRを使用しているのですが、AdobeAIRでhttpsのSecureなSocket通信をするには、
Flex4から採用された SecureSocketというものがあるようです。
Flex3(AdobeAIR1.5)を使用していたので、Flex4(AdobeAIR2.0)にアップしようとまずは試みたのですが...断念。
そんなにすんなり移行できるものではなかったようです。。

NativeApplication.nativeApplication.undo()
NativeApplication.nativeApplication.redo()
のメソッドは無くなっている。

UIについてもmxmlのネームスペースをすべて変更が必要。
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">

sのsparkコンポーネントにすると、無くなった(設定方法が変わった?)プロパティが数多くある。
mxにしてみても、無くなった(設定方法が変わった?)プロパティがちょいちょいある。
無理矢理やってみても、見た目が結構ガラっと変わってしまっていて、すんなり移行できない感。

traceを書いても、コンソールに表示されない。
FlashPlayerをデバッグ版にしたらみれる...という記事もありましたが、AIRだとどうなるかは見きれてません。。

その他、
Flex3で作成したアプリケーションを、Flex4でコンパイルしなおすと、違うアプリと認識されるようでした。
ApplicationDescriptor.xmlのxmlsネームスペースのバージョンを変えると違うアプリになってしまう?
何か方法があったのかもしれませんが...

ということで、AIR1.5で、作成する方向を探しました。
結論としては、as3cryptoのライブラリを使って無事にアクセス成功。

import com.hurlant.crypto.tls.TLSSocket;

public static const STREAM_PATH:String = "userstream.twitter.com";
public static const FILTER_URL:String = "/2/user.json";
private static const STREAM_PORT:int = 443;

public function connect():void {
var socket:TLSSocket = new TLSSocket();
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, handleData);
socket.connect(STREAM_PATH, STREAM_PORT);
}

private function connectHandler(event:Event):void {
var path:String = "GET " + FILTER_URL + " HTTP/1.1\r\n";
socket.writeUTFBytes(path);
socket.writeUTFBytes("Host: " + STREAM_PATH + "\r\n");

var oauthParameter:String = ...;
socket.writeUTFBytes("WWW-Authenticate: OAuth\r\n");
socket.writeUTFBytes("Authorization: " + oauthParameter + "\r\n");

socket.writeUTFBytes("\r\n");
socket.flush();
}

private function handleData(event:ProgressEvent):void{
var available:int = socket.bytesAvailable;
var value:String = socket.readUTFBytes(available);
trace(value);
}

こんな感じのイメージで。
• • •