Neo Inspiration

Feed Rss

LZTDを作る際に必要になったので
(というか一番のヤマだった)
いくつか問題残ってますが、自分はこの方法でやりました。

1:適当にサーバを用意する(自分はVirtualBoxでやりました)

2:https://github.com/asogor/thrift-as3
  ここからソースを落としてきてコンパイル

3:EvernoteのApiをダウンロードして、thiftのソースを thriftコマンドでgenerateする
自分のバージョンだと
evernote-api-1.16\src\thrift
に5個の.thriftファイルがあったので、それを全部
thrift -gen as3 **.thrift みたいにする。

このうちType.thriftとかはエラーで落ちるので、
(原因は64ビットを割り当てる型がAS3にないためらしい)
それを検索して全部32ビットに置き換える
⇒割とめんどくさい&後で色々修正しないといけない。

4:3で出来たソースと、thrift-as3の /lib/as3/src/org/apache/thrift にある asファイルの塊を
まとめてFLEXにインポートして使用する

ただこのままだとi64で読み込むところは全部落ちるので、色々と修正しないといけない。
i64は evernoteでは timestamp型がほとんどなので、(たとえばNote の created,updatedなど)
うまく修正しないと全部空っぽになったりするので注意。
(一応自分は http://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/crypto/rsa/BigInteger.as?r=3
 ここのらBiginteger型を参考にして、64ビット分操作するような感じで動かしました)

EvernoteのチェックボックスでのTodo管理がしっくりこなかったので、
Airでインターフェースを作ってみました。
まだβ版ってことですが、とりあえずリリースです。

http://refeed.in/lztd

ダウンロードページに書いてありますが、以下概要など

概要

○基本的にはただのTodo管理ツールです
○データの保存先がEvernoteになっています。
○Evernoteのアカウントが必須です。
○Adobe Airがインストールされている必要があります。
○無料です

機能

○todoをEvernoteに保存
○タイトル、1行コメント、その他データをtodo形式で保存
○todoの削除(終了フラグをつけるだけでデータ削除ではないです)
○重要度の設定
○重要度でソート(昇順/降順)
○日付でソート(昇順/降順)
○ダブルクリック一時的に一番上にtodoをもってくる
○右クリックでタイトルをクリップボードへ
○タイトルと1行コメント以外のデータの個別閲覧
○やりづらいですが、一応右と下のバーをドラッグすれば大きさも変更可能

その他個人的メモなど

Adobe Air + FlexでThriftにアクセスする際、
as3にはない、i64型がうまくおさまってなくて、
一応Bigintを強引に扱う形で補完したけど、
送信がうまくいっていない

データの編集機能がまだない

インターフェースがかっこわるいorz

フォントをメイリオで指定しているので、入ってないとしょぼいフォントになる

なお機能追加要望にはお答えできませんが、
バグなどは以下コメント欄に頂ければ修正できる範囲でします。

画面のスクリーンショットをとるAirツールがいっぱいありますが、
あれどうやってるだろう?って思ったら結構簡単だったので。

ソースはこんなかんじ。


private function saveScreenshot(myHtml:HTML):void {
    var myScreenshotData:BitmapData;
    myScreenshotData = new BitmapData(myHtml.htmlLoader.contentWidth,myHtml.htmlLoader.contentHeight);
    myScreenshotData.draw(myHtml); //引数のオブジェクトのスクリーンショットを作成

    var pngEnc:PNGEncoder = new PNGEncoder();
    var pngBta:ByteArray = pngEnc.encode(myScreenshotData); //取得したスクリーンショットをPNGに
    var saveFile:File = myUploadDir.resolvePath(String("test.png"));
    var fs:FileStream = new FileStream();
    fs.open(saveFile,FileMode.WRITE);
    fs.writeBytes(pngBta,0,pngBta.length); //PNGファイルを書き込む
    fs.close();

}

ためしに mx:HTML でやってみました。
mx:HTML にhtmlを読み込んで、それをBitmapData.draw() で変換し、
あとはそれをpngにエンコードして保存するだけ。

実際は mx:HTML をリサイズできるようにして、
それに合わせて取得できるようにすれば、あの枠だけ表示させて
それをドラッグして大きさを決めてスクリーンショット
ってやつができるはずです。

ちなみにサイズを指定が

    myScreenshotData = new BitmapData(myHtml.htmlLoader.contentWidth,myHtml.htmlLoader.contentHeight);

となっていますが、これはスクロールして一番最後までいったとこまで取得するために、こうしてます。
htmlLoader.contentWidth と htmlLoader.contentHeight はHTMLの高さです。
これを普通に myHtml.width myHtml.height にすれば今表示されてる部分だけになります。
ちなみに contentHeight は2880 なので、それ以上の横幅、高さをもつHTMLの場合は
切れてしまいます。

Flexリファレンス:HTMLLoader

毎年恒例の1年のシメ的なものを。

おもしろい1年の振り返り方ということで
ウェブ履歴を見て色々考え事をします。

ログインして ウェブ履歴にアクセスしてください。
*履歴ONにしてないとだめだったかも。

去年:総検索回数:13629
今年:総検索回数:10888

1月: 803
2月: 762
3月: 352
4月: 1107
5月: 719
6月: 774
7月: 1303
8月: 990
9月: 1021
10月:917
11月:1208
12月:932

去年は7月から検索回数が激減してましたが、
今年はさらに減ってる!
別アカウントに切替とかってわけじゃないんだけど
単純に、知ってることが増えて検索しないでも出来ることが増えたのかな。

ちなみに検索時間は
10-12時と 15-18時の 間が飛びぬけて多く、
仕事の集中時間的にもここらへんとマッチするかんじです。

クリックしたTOP3のドメインは

1位:ja.wikipedia.org
2位:d.hatena.ne.jp
3位:livedocs.adobe.com

今年はだいぶFlex触ったので、そのせいかな。
wiki がTOPっていうのはちょっと解せませんが。

ってことで来年はさらに検索回数を減らして、(4ケタにして!)
自分の脳みその中に知識をためていきたいと思います。

よいお年を!

Airでなんか作るときにローカルにXMLの設定ファイル的なものを
外だしして適宜変更したいみたいな時にFlexでは

myRequest = new URLRequest(targetUrl);
myLoader = new URLLoader(myRequest);
myLoader.addEventListener(Event.COMPLETE,myXMLData);

public function myXMLData(evt:Event):void {
    var myXML:XML = XML(evt.target.result);
}

みたいにしてたんですが、
もっといい方法がありました。

<mx:Model id="mySetting" source="setting.xml"/>

MXMLにこれだけ追加すればOK。
これで mySetting.title とかいう風にXMLを直接オブジェクトで操作することができます。

ただリファレンスにも書いてあるように色々と注意点はありそうです。
http://livedocs.adobe.com/flex/3_jp/langref/mxml/model.html

ここで、source はデータモデルの外部ソース(ファイルなど)を指定します。
外部ソースには、静的データおよびデータバインディング式を含めることができます。
source プロパティで参照されるファイルは、クライアントコンピュータではなくサーバーに存在します。
コンパイラはソース値を読み取り、ソースをアプリケーションにコンパイルします。
source 値は実行時には読み取られません。

たぶんコンパイルしたファイルと同じサーバに置いておく必要があり、かつ実行時に動的に変更かけるとおかしくなるのかな?
ちょっとそこまでは試していませんが、注意はしないといけないかと。