2009年11月26日木曜日

AdobeAIRの透明なウィンドウはLinuxでは邪魔者になる罠

AdobeAIRでGrowl風の通知ウィンドウとして、複数作成して表示したい!という事がしたい。

で、はじめはmx:Windowでいくつも画面を作って表示していたのですが、画面を閉じる際に結構CPUを食う状態になってしまった。
で、その対策として、一つの透明画面を作って、ぺたぺたとウィンドウっぽい表示のパネルを貼るように替えました。
透明な画面が前にあったとしても、後ろに見える画面をクリックすると、その後ろの画面が操作できるので。
そうすると、当然ですがCPUの消費も押さえられてよかったーよかったーと思っていたのですが....

Mac,Windowsの動きは上記なのですが、Linuxでは違う事に気づく。
Linuxの場合、透明の画面が前にあると、後ろに見える画面の操作が出来なくなってしまう。

フルスクリーンのものをつくっちゃうと、全く操作不能の状態になった! って感じになってしまいます。

この差についての記述はみつけられていないのですが、
Adobe AIR 1.5 * Managings WindowのalwaysInFront についての説明の所で以下の記述が。
On the Linux operating system, different window managers enforce different rules regarding the window display order:

・On some window managers, utility windows are always displayed in front of normal windows.
・On some window managers, a full screen window with alwaysInFront set to true is always displayed in front of other windows that also have alwaysInFront set to true.


なかなか手強い...
複数Windowを作成する方式にまた戻して、CPUを食わない方法を探るのがよいのか...と悩み中。
• • •

2009年11月19日木曜日

TwitterとFriendfeedでクライアントアプリケーション名を出すまで

api経由でTwitterやFriendfeedのクライアントを作った時、せっかくなので送信元を自分のアプリケーション名にしたいですよね。
こんな感じに
Twitterの時

FriendFeedの時

[SoraUsagi]経由でポストされた状態になってます! なんにもしてないと [API]って表示されます。
ここに名前を出す方法を以下にまとめ。


アプリケーションを登録

まずは、各サービスにアプリケーションを登録します。
Twitterはこちら
FriendFeedはこちら

空うさぎは、AdobeAIRのデスクトップクライアントなので、application typeをclient、access typeをread&writeにします。
登録すると、Consumer keyと、Consumer secret が貰えます。
これがアプリケーションのキーセットになります。見えないように注意しましょう(公開SVNにコミットしないように!)


OAuthで認証する

Twitter,FriendFeedともにOAuthとBasic認証の両方が使えます。
ですが、Basic認証だと自分のアプリケーション名を表示することができません。
さらに、FriendFeedの場合は、API v2 を使う必要があります。v1ではできません。

ActionScriptの場合、oauth-as3というライブラリがあります。
Twitterの場合は一点をのぞいてほぼそのまま使えると思います。一点とは、下記記述ののSTEP1の注意点のこと。


TwitterのOAuth

□STEP1

http://twitter.com/oauth/request_token にConsumer key/secret を使ってアクセスし、oauth_tokenをもらいます。

送信が必要な情報は以下。

oauth_callback=oob
oauth_consumer_key={アプリケーションのConsumer key}
oauth_nonce=Math.round( Math.random() * 10000 ).toString();
oauth_signature_method=HMAC-SHA1
oauth_timestamp=Math.round( new Date().getTime() / 1000 ).toString();
oauth_version=1.0

var signedURI:String = {上記の認証パラメータの値エンコードしたもの};
var sigBase:String = "GET" + {URLをエンコードしたもの} + signedURI;
var hmac:HMAC = Crypto.getHMAC("sha1");
var accessTokenSecret = "";
var key:ByteArray = Hex.toArray(Hex.fromString(encodeURIComponent({アプリケーションのConsumer secret}) + "&" + encodeURIComponent(accessTokenSecret)));
var data:ByteArray = Hex.toArray(Hex.fromString(sigBase));
var sha:String = Base64.encodeByteArray(hmac.compute(key, data));
var signedURI:String += "&oauth_signature=" + encodeURIComponent(sha);

これでできた singedURLをURLにしてGETで取得。
結果で返ってきた、oauth_token を STEP2で使います。

!!注意点!!
encodeURIComponentって書いてますが、これはActionScriptのメソッド。
ですがこれだと通らない文字がでてくるので、UTF8に変換してエンコードが必要です。
Extended UTF-8 in OAuth ActionScript libraryのサイトを参考にしました。


□STEP2

http://twitter.com/oauth/access_token?oauth_token={oauth_tokenをエンコードしたもの}
のURLでブラウザを開きます。
ActionScriptの場合は、navigateToURLでひらけばOK。

ブラウザが開くと、PINコードとして7桁の数字が表示されます。

□STEP3

http://twitter.com/oauth/authorize にPINコードを使ってアクセスし、accessTokenをもらいます。
STEP1での認証用パラメータに以下を追加した形になります。

oauth_token={STEP2の結果}
oauth_verifier={PINコード}

上手く認証が通れば、以下の結果が返ってきます。
oauth_token
oauth_token_secret
screen_name

これで認証処理はおしまい。
認証が必要なAPIには、ここで取得した、oauth_token, oauth_token_secret を使ってアクセスしていきます。
その際はSTEP1での認証用パラメータに以下を追加します。
oauth_token={STEP3の結果}

oauth_token_secret は、KEYを作り出すときのaccessTokenSecretへ設定。
送信したい情報は認証用パラメータに追加した形でsignします。
その際は、KEY名でソートかけた方がいいみたいです。


FriendFeedのOAuth

FriendFeedの場合はPINでのワークフローが無いです。
そのため、STEP3から始めればOKですが、認証用のパラメータはTwitterの時に比べて、以下を変更します。
oauth_callback=oob を削除。
ff_username={FriendFeedのユーザ名} を追加。
ff_password={FriendFeedのパスワード} を追加。

URL は https://friendfeed.com/account/oauth/ia_access_token に。
(WEBアプリの場合はURLとか変わると思う)

上手く認証が通れば
oauth_token
oauth_token_secret
username
が返ってきます。


色々手続きが面倒ですが、ユーザのoauth_token/oauth_token_secretが万が一漏れても、アプリケーションのConsumer key, secretが分からないとなんにもできない状態になるので、アプリケーションの作り手としてはちょっと安心。
• • •

空うさぎ v0.9.4.3リリースしました

先日リリースしたばかりの空うさぎですが、先ほど新しいバージョンをリリースしました。
お使いの方は、アプリを再起動してアップデートお願いします!お願いします!

修正箇所はOAuth認証時に、送信エラーが発生してしまうという件。
ActionScriptで、encodeURIComponentを通しただけではダメだったというのが原因でした。
こちらのサイトを参考にさせて頂きました。

OAuth認証も落ち着いたところで、TwitterとFriendFeedのOAuth認証についてエントリを次回書いてみます。
• • •

2009年11月17日火曜日

空うさぎ v0.9.4.1リリースしました

空うさぎ v0.9.4.1をリリースしました。

今回のリリースの目玉は、OAuth対応です。
OAuth/Basic認証 の両方が選べるようになっていますが、OAuthがオススメ。
なんてたって、OAuthでエントリを書くと、TwitterのWEBページなどから見れる送信元が、「from api」ではなくて 「 from SoraUsagi 」
ってでるようになるんですよー。こんなちょっとした事が凄く嬉しいっす。

でもたまに認証エラーでエントリのポストが失敗する事が。発生する原因がよく分からなくて解決できていません。すいません。。
失敗しても、少したってから(1分くらい?) 送信しなおすといけたりします。
API制限でもないような感じ。
というのも、エントリの取得ではエラーは出ないし、長時間使った後...とかってパターンがあるわけでもない。
日によって頻度も違うので、サーバーのせいな気もします。
なんかご存知の方教えて下さい><

あとの修正点は
- 設定のimport/exportを追加(メニュー)
- エントリのpost画面に何日前のものかを表示
- RSSのエントリでTwitterのものであれば返信可能に
なんかがあります。

FriendFeedはAPIv2を使うように切り替えました。
v2でないとOAuthが対応していないので。(多分..勘違いでなければ...)
v2の場合、エントリのメッセージがTEXTでなくて、HTML形式で返ってくる。
そのため...ハッシュタグとか、人の名前などがリンクつくようになってます。

なかなかv1.0になれない空うさぎでして、未だにどしどし修正しちゃってもいるので、不安定なところがあるかもしれません。
なんかあったら #sora_usagi のハッシュタグでつぶやいてくれたら、見つけ出すのでよろしくお願いします!

さて、空うさぎですが、密かに(?) MA5に応募してました。
作品#116 空うさぎ
今回は、300を超える応募があったそうで、受賞っちゅーのはまぁ望みなさそうですが、このページをみて使ってくれる人が増えると嬉しいなぁー。

P.S.
「からうさぎ」じゃーないですよー。「そらうさぎ」ですよー。
• • •

2009年11月13日金曜日

グーグル的思考

最近、電車の中でグーグル的思考-ジェフ・ジャービスという本を読んでます。家にぽろっと落ちていたので(笑

内容は、
「マスマーケットなんてもうない。今あるのは巨大なニッチだ」
「ユーザに主導権をもたせろ」
....という内容で、Googleだけでなくいろんな企業の実例がでてきます。

この本は、"そこまでGoogleを誉めて、おかしいんじゃないの?" というスタンスで読んじゃいけない。
「Google」という言葉を出せば、本の売り上げが上がることを知っていて、著者が言いたいことをGoogleを絡ませてわざと書いているんだ ってスタンスで読むのがいいと思う。
内容は結構面白い。電車でも寝ずに読めるような気さくな内容です。

Googleはいろんなサービスを無料で提供して、一見どこでお金を回収しているんだろう?と思うけど、広告で巨大な収入をあげているのは有名なお話。
よくよく見てみると、サービスの内容はどれも先につながっていて、最終的には「情報を多く持っているから、収入も得やすい」という形態になっているんですよね。
んでもって、その「情報」はユーザに主導権を持たせるから継続的に、大量に入手できる。。と。

最近、ヌーラボでもCacooというWeb上で図の作成ができるサービスが立ち上がったんですが、"マネタイズはどうなんの?" というつぶやきもちらほら聞こえる。
たしかに、収入がないと会社としてはやっていけないし。

そんな中、このブログにたどりついた検索キーワードをみてみると、最近、「ヌーラボ」という言葉でたどり着いた人が増えているのに気付きました。
会社に興味を持ってもらえる=その会社が作っている有料製品にも興味を持ってもらえる...なんてこともあるんでしょうねー。

つーことで最近感じたのは、

無料のままずっとがんばってもらいたいツールがあった場合...

・会社で何かのツールを購入の検討をする場合、お勧めするのはそのサービスを運営している会社にしてみる
・そのサービスのブクマをはって、検索上位に引っかかってあげるようにする


とかすることによって、自分が使いたいツールはずっと無料のまま頑張ってくれる可能性もあるのかもなぁ~と。...はい、自分でお金は払いたくないって話(笑)

ちなみに、Cacooは FAQをみると、
2010年半ばにプレミアムプランの提供を予定しています。
ってあるのですが、今の無料のところがどうなるのか(制限かかったりする?)はよく知らないです。
状況次第なんだろうなぁーー。
• • •

2009年11月9日月曜日

Cacooで書いた画像をブログに貼り付け

Cacooが正式リリースされました!
読み方は 「かくー」。

このブログでも貼りたいなぁ~って思ってGoogleGadgetとかみようとしていたんですが、ブログに貼り付けるぐらいであれば、iFrameで私は十分でしたw

こんな感じ!


貼り方

1.caccoで画像を保存時に、公開設定にします。
2.図の一覧画面で、「リンク」のボタンを押して「図ビューアの埋め込みコード」が表示されるのでコピー。

3.表示したいところでコピーしたコードを貼り付け!

ちょっと図解したいなぁーって時には手軽に使えていいですねー。
• • •

TwitterのAPI制限

Rate limit exceeded. Clients may not make more than 150 requests per hour.

またもや引っかかってしまった。
• • •

2009年11月2日月曜日

空うさぎ リリースと新しいサイトオープン


空うさぎ v0.9.3.3.3をリリースしました。
バージョン番号がやたら長い(笑)

RSSの読込、リスト表示のフィルタが出来るようになっています。
会社で使うときには、仕事で使っているBTSのRSSフィードを入れたりすると便利なので使ってみて下さい。

それと同時に、新しいサイトに移行しました!
http://sora-usagi.appspot.com/
使用方法はまた情報量が少ないので、これから随時更新していきます〜

次は通知ウィンドウをイジろうかと思っています。
  • 通知ウィンドウをクリップして、ドラッグで移動できるようにする。
  • 通知ウィンドウから返信などのアクションが出来るようにする。

とかできたら便利そうだなぁーと。

あと、データの永続化。うむー、やっぱりした方がいいのかなぁ...と悩み中。

...と、なかなか v1.0にできない空うさぎですが、これからもお願いします!
• • •