2015年1月5日月曜日

Aipo と Google カレンダー連携 (5)

とりあえず出来たヽ(´ー`)ノ
以下,参考にしたサイトなど.

●GMail 受信インテントの受け取り方→ここ

●GMail にアクセス
最初は GMail API を使ってアクセスしようとしたが,Android 用のサンプルがなく断念.素直に IMAP アクセスにした.
IMAP アクセス は JavaMail でググれば大量にサンプルが出てくる.ただしライブラリは Android 用に修正したものでないとダメらしい.→ここ

JavaMail の GMail 拡張版は,うまく動作させることができなかった.→ここ

●JavaMail で GMail のゴミ箱に入れる
Aipo メールを処理した後,GMail のゴミ箱行きにする方法.→ここ

具体的なコード:
Folder inbox = store.getFolder( "Inbox" );
inbox.open( Folder.READ_WRITE );
int iMsgCount = inbox.getMessageCount();

Message messages[] = inbox.getMessages( 1, iMsgCount );
FetchProfile fp = new FetchProfile();
Folder trash = store.getFolder( "[Gmail]/ゴミ箱" );
inbox.fetch( messages, fp );

for( int i = 0; i < iMsgCount; ++i ){
    if( 捨てたいメール ){
        inbox.copyMessages( new Message[]{ messages[ i ] }, trash );
    }
}
[Gmail]/ゴミ箱 は多分 locale に依存するんだと思う.試しに [Gmail]/Trash をやってみたら怒られた.

●カレンダーの,イベント一覧取得,削除,追加する方法
これがかなりめんどくさかった(;´д⊂)
基本は,ここここなんだけど,このアプリは裏 (Service) でカレンダーデータにアクセスするため,getLoaderManager() が使えない.
ここみて適当に修正.

private static final int iIdxEventID    = 1;
private static final int iIdxTitle      = 2;

private CursorLoader m_Cursor;

private void AddTask(){
    // 現時刻~1年後後のイベントのみを取得
    String tz   = Time.TIMEZONE_UTC;
    Time time   = new Time( tz );
    time.setToNow();
    time.allDay = false;
    int begin   = Time.getJulianDay( time.toMillis( true ), 0 );
    time.year   += 1;
    int end     = Time.getJulianDay( time.toMillis( true ), 0 );

    Uri content_by_day_uri = CalendarContract.Instances.CONTENT_BY_DAY_URI;
    String[] instance_projection = new String[] {
        Instances._ID,
        Instances.EVENT_ID,
        Instances.TITLE,
    //  Instances.BEGIN,
    //  Instances.END,
    };
    String sort_order =
        Instances.BEGIN + " ASC, " + Instances.END + " DESC, "
            + Instances.TITLE + " ASC";
    
    Uri baseUri = buildQueryUri( begin, end, content_by_day_uri );
    
    m_Cursor = new CursorLoader(
        this, baseUri,
        instance_projection, null,
        null, sort_order
    );
    m_Cursor.registerListener( 0, this );
    m_Cursor.startLoading();
}

@Override
public void onLoadComplete( Loader loader, Cursor c ){
    Log.d( getClass().getSimpleName(), "onLoadFinished called." );
    ContentResolver cr = getContentResolver();
    
    if( c.moveToFirst()) do{
        if( 削除するイベント ){
            cr.delete(
                ContentUris.withAppendedId(Events.CONTENT_URI, c.getInt( iIdxEventID )),
                null, null
            );
        }
    }while( c.moveToNext());
    
    // イベントをカレンダーに追加
    // Tasks は ContentValues の配列
    for( ContentValues Task : Tasks ){
        cr.insert( CalendarContract.Events.CONTENT_URI, Task );
    }
    
    if (m_Cursor != null) {
        m_Cursor.unregisterListener(this);
        m_Cursor.cancelLoad();
        m_Cursor.stopLoading();
    }
}

private Uri buildQueryUri( int start, int end, Uri content_by_day_uri ){
    StringBuilder path = new StringBuilder();
    path.append( start );
    path.append( '/' );
    path.append( end );
    Uri uri = Uri.withAppendedPath( content_by_day_uri, path.toString());
    return uri;
}

Aipo と Google カレンダー連携 (4)

あけおめ.

=== これまでのお話 ===
・Aipo に入れたスケジュールを Google カレンダーに反映したかった (一方通行)
・Aipo にスケジュールを入れた時に投げられるメールをトリガに G カレンダーの API をキックして G カレンダーにスケジュールを追加するスクリプトを組んだ
・某所のセキュリティポリシーが変更され,G カレンダー API の URL がブロックされたっぽい←いまここ
=== ここまで ===

なんかもうイタチごっこの様相を呈してきた.
しかたがないので DD-WRT でサーバを立ち上げ,某所からの HTTP or SMTP アクセスをトリガにスケジュール追加するようなものを考えてみたが,残念ながら DD-WRT 用のまともなクロスコンパイル環境を構築できていない.(ちょっと複雑なものを DD-WRT で走らすとすぐに core dump する(;´д⊂))

なのでプラン B で,Aipo のスケジュール追加通知メールを GMail に転送し,Android 上でそのメールをトリガに G カレンダーに予定を追加するアプリを開発するプロジェクトを開始.
似たような既存アプリはもうありそうな気がするけど,Aipo はイベントの時間を修正するだけでメールをバンバン投げてくるので,そのままだと G カレンダーに大量にイベントが登録されてしまう.なので,同一のイベント名がある場合は古いイベントは削除するようにするのがミソで (スクリプトではこうやっていた),ここまでやってくれるアプリは多分無い.

フローとしてはこんな感じ.
1. 某所の Aipo のスケジュール追加メールを Android の GMail アカウントに転送
  以下,Android 端末での動作
2. GMail 受信インテントを受け取ってアプリが起動
3. IMAP で GMail の受信トレイを走査し,Aipo メールを取得
4. Aipo メールの内容に従ってカレンダーにイベントを追加する

とりあえずやっつけでアプリアイコンだけ作った.
Aipo のアイコンを Google のプロダクトっぽく色変えただけwww

2014年11月29日土曜日

クーラント漏れ修理

実は 9月に雁ヶ原に行った時に,ラジエータ付近から軽くクーラント漏れしてるのは発見してたけど,先週 1週間ぶりにエリに乗ろうとしてトランクを開けたら,クーラントのリザーバータンクが空www
フロント下を覗いてみたら,赤いクーラントまみれだった(;´д⊂)

自分のエリは (一番の漏れポイントである) ラジエータはすでに交換済みなので,おそらくラジエータホースのドレンプラグから漏れているんだろうと予想.でもホース交換で前カウル外し工賃だけで 4万飛ぶなぁ(;´д⊂)
と思ったら,インナーフェンダー外せばとりあえずドレンプラグにはアクセスできそうなのでやってみた.

で,ドレンプラグとご対面.
確かにドレンプラグ付近が濡れていたので,ドレンブラグをホースバンドで締めてみた.これでアイドル状態では漏れは止まったみたいだけど,とりあえず様子見.
追記: 1時間ほどのドライブでも漏れてなかったヽ(´ー`)ノ

ちなみにインナーフェンダーは前後分割されているうちの前だけ外せば ok だった.知らずに後ろ側も外したけど,後ろ側インナーにはリレー? ヒューズボックス? がリベット留めされていたので,切り離すのにちょっと手間取った.

2014年11月16日日曜日

ゴミからの華麗なる復活

スマフォを Zenfone5 に乗り換えたので,Desire と Galaxy Note はヤフオクで売却した.
そこで困るのが USB 充電器.今まで使ってた USB 充電器は Desire / Galaxy Note の付属品だから手元には残らないし,Zenfone5 の充電器は海外仕様だから使えない.

しゃーないから Amazon で買うか,と思ったが,ふと思い出したのが「本気でゴミを作ってしまった」ってやつ.データラインは切断してあるし,電源は PCI から取るように生かしてあったはず.

というわけで,D+/D- ラインを半田でショートさせて,4ポート USB 充電器の完成www

普通に PC の USB ポートで充電すりゃいいやん,とお思いのあなた.普通の USB ポートは 500mA しか電流を流さないけど,こいつは PCI から直に電源を取るのでそんな制限はない.
PCI バスが何アンペア流せるのか謎なんだけど,グラボが動いてたくらいなので 1A 位は余裕だろう…

2014年11月9日日曜日

root を取るまでがセットアップです

Zenfone5 (A501CG, WW 版) の root を取るまでの手順を忘備録として残しておく.

●USB ドライバ
ここの Android→USB からダウンロードして解凍しておく.
ドライバの場所を聞かれたら \Windows_XP_VISTA_7_8_8.1\Android を指定する.

●まずは KitKat に update する
Firmware は ここの Android→Firmware から WW 版の Firmware をダウンロード.
自分の Zenfone は V1.18.40.9 だったので,Version V1.18.40.10(WW) と Version V2.19.40.18(WW) を落として順に適用した.
Update の方法はここを参考に.
ハマったのは,「apply update from ADB」状態にする前に USB ケーブルを PC から抜いておかないと,何故か「apply update from ADB」に出来なかった.

●root 化
このツールが全部自動でやってくれる.
・まず Zenfone の USB デバッグを有効にする.
設定→端末情報→ソフトウェア情報→ビルド番号 をタップしまくると,「デベロッパーになりました」的なメッセージが表示される.その後設定→開発者向けオプション→USB デバッグ にチェック.
・Zenfone のホーム画面を出した状態で PC と USB 接続し,CheckBeforeAction.bat を実行すると,root 化できる状態かのチェックが走る.
Rebooting your phone, you can execute Root-ZenFone.bat now. って出たらチェック OK.
・Root-ZenFone.bat を実行すると自動で root 化をやってくれる.All done, enjoy your ROOTED ZenFone 5 :) って出たら完了.

日本のキャリア端末と違ってクソプリインアプリは格段に少ないんだけど,メーラーとかメッセンジャーとか複数かぶってるし,ASUS ナントカとかメーカー謹製アプリはあるんで,そういうのは pm disable してスッキリヽ(´ー`)ノ

2014年11月8日土曜日

Zenfone5 キタ━━━━(゚∀゚)━━━━ッ!!

Zenfone5 (A501CG RAM2GB Storage 16GB) が EXPANSYS から届いた.

EXPANSYS に 11/2 に発注して,(土日は休みなので) 11/5 に到着した.

総額 本体 \18,900 + 送料 \1,600 + 消費税 \700 = \21,200 で安う!!Σ( ̄□ ̄ι
もちろん下を見ればこれより安い端末はいくらでもあるだろうが,この質感,スペックでこの値段というのは大分頑張ってる方だと思う.

なお,充電器はやはり日本仕様ではなかった.orz 使えない充電器が増えていく…

Galaxy Note との大きさの比較,をやってみたかったけどカメラは GalaxyNote か Zenfone 5 しか持ってないので,GalaxyNote のカバーとの比較w
縦は GalaxyNote と変わらず,横は 1cm ほど Zenfone5 のほうが狭い.それがそのまま画面の大きさに跳ね返っているが,前向きに捉えればこのくらいの幅だと片手で持ちやすい.

で軽く使ってみた感想:
◎質感は非常に高い
◎サクサク感は必要十分.さすがは腐っても Intel
○カメラのエフェクトが豊富.個人的に欲しかった HDR 撮影もできる.
○弱点と言われているバッテリーの持ちは,GalaxyNote と同じか,若干持つくらい.なので全く不満なし.
△11n/a に未対応
△LTE 未対応.ただし自分は GalaxyNote でもバッテリ食いな LTE は OFF にして使ってたくらいなのでデメリットにはならない.
×DualSim だけど Docomo SIM(音声) と MVNO データ通信は同時に使えなかった.
厳密には,2G + 3G なら使えるそうなんだけど日本で 2G は意味なし

というわけで久々の Hit だった.

残念なのは,自分は周りと同じものを買うのが嫌な人なので,超マイナーな ASUS のスマフォは結構ニッチだと思って喜んでいたのに,楽天やら色んな所 の MVNO キャリアから販売されだした.
「それ楽天だよね?」とか言われたら超ショックwww
唯一の差別化ポイントは裏の Intel マークのみ…

2014年11月3日月曜日

スナドラ飽きたー!!

低価格なのに高品質と噂の ASUS Zenfone 5 が,この 11月から日本でも発売されるということを知って,wktk しながら待ってたけど,お目当ての A501CG (3G DualSim, Intel Atom) 版は発売されず.しかも A500KL (LTE 版) にしたって EXPANSYS から買ったほうが安いって(;´д⊂)

というわけで,EXPANSYS から A501CG をぽちっとして (税・送料抜き ¥18,900),今は到着待ち.
このご時世,猫も杓子も SnapDragon ばっかりなので飽きた!! というわけで Intel Atom 版を選んでみた.腐っても Intel なので上位機種の A500KL (LTE 版) のスナドラ 400 よりもベンチマークスコアが良い.

LTE 非対応だけど MVNO 使うんだったら関係ないし,GalaxyNote の時もバッテリ食いの LTE は off にしてたくらいだし.また DualSim なので音声端末と 2台持ちしなくて済むので,マジで MVNO にピッタリの端末だと思う.
# ただし sim 二枚同時待ち受けは出来ないと噂が…(;´д⊂)

6万の端末買わせてパケホとか無理やり入れさせて ¥5千/月とかいう商売は滅びたほうがいいと思っている人なんで,こういう Sim フリー端末 + MVNO がもっと発展していってほしいね.

2014年10月18日土曜日

安物買いの銭失いを体験してみた

何故か気温が低いと起動中に電源断・再起動・シャットダウンするようになって,5V 系の電圧をテスターで測ってみたら 4.5V を下回っている…
普通に考えたら電源が壊れたと判断するんだけど,電源は今年の 5月に変えたばかりだし,昔マザポのコンデンサがパンクした時も似たようなシャットダウン・再起動の現象が起こったし,軽い前兆はグラボ追加した時から起こってるし,原因をつかみあぐねていた.

で,(マザボとかに接続せずに) 電源だけで ON する方法があることがわかったので電源単体で通電してみたら,やはり 4.5V 付近を上下していた.
ということで 5ヶ月で玄人志向の電源が死んだこと確定(;´д⊂)

新しい電源はまた安いやつで良かったんだけど,玄人志向はさすがに避けて,あと KEIAN の通称動物電源は評判が悪すぎたので,SILVERSTONE SST-ST50F-ES を¥5,127 で購入.
ファンもほぼ無音で満足ヽ(´ー`)ノ

2014年9月15日月曜日

すり減らすまでが,アジアンタイヤです.

また雁ヶ原に行ってまいりました.
めちゃめちゃいい天気.日差しは強いが風は涼しくて気持ちいい.

今回の目的は
←これ 装着したアジアンタイヤをすり減らすことw

食い過ぎでも食わなさすぎでもない絶妙のグリップで適度に滑らすことが出来て,サイドターンが出来ない自分でもサブロクターンぽいことが出来て非常に面白かった.何より白煙モウモウにあげても心が全然傷まないwww
お遊びジムカーナにはほんとにピッタリのタイヤだと思う.

アジアンタイヤ 3兄弟w の皆さん,お疲れ様でした~

1日遊んだあとのタイヤ.
ブロック飛びもなく綺麗に減ってくれた.あと 2~3回は遊べそう.

実は前日にこれに履き替えて,当日初めてまともに運転 & 高速乗ったんで,振動とかエア漏れとか心配だったけど,高速でもそんな心配全く必要なかった.
ほんまコストパフォーマンス最強だわwww

2014年8月30日土曜日

ホイール塗装 & アジアンタイヤ装着

とりあえず前回の予告通りにホイールを塗った.

←ビフォー
\100均のスチールウールでブレーキダスト等の汚れ落とし & 脱脂 & 足付けを一気に行う作戦.

←アフター

今回使ったのはイサム塗料のエアーウレタン * 2本とソフト 99 ボデーペン * 2本.ホイール裏側は塗装が傷ついてもどうせ見えないので安いボデーペンで.各 2本だとビミョーに足りない感じで,万全を期すなら 3本ずつほしいところ.

で肝心の出来は,んー 70点くらいw
マットブラックはムラにならないと思い込んでいたのだが,エアーウレタンのマットブラックは違うようで,噴射距離によってつや消しの度合いが違うみたい.

リムテープは東洋マークなる会社のカジュアルテープ 10m×6mm (\388).楽天とかだとアーチ状に切り出したリムテープが \1,000 くらいで売ってるけど,こういう普通のテープでも 16inch くらいの丸みならなんの問題もなく貼れた.

でもってタイヤも装着.
銘柄はアジアンタイヤとしては定番過ぎてネタにもならない ナンカン NS-2.
ウケ狙いでもっと聞いたこともないメーカーのタイヤとかつけても良かったんだけど,いかんせん 195/50R16 は選択肢が非常に狭かった.
普段履きはしないので,速攻で倉庫に放り込んだw なので装着写真は無し.
あとは消しゴムのようにすり減らすだけwww

毎回,持ち込みでタイヤ安く組んでくれるところを探すのがコストダウンの肝だが,今回はこちらの記事が大変参考になった.要は,ヤフオクでタイヤ交換作業を出品 (?) しているので,近くのやつを選べば良い.今回は Teppen を利用させてもらった.
近くのタイヤ持込可の工賃は \2,000/本 を下回ることはなかったが,今回は 4本で \4,360 と大幅なコストダウンに成功ヽ(´ー`)ノ

------------------
以下自分用覚え書き:
項目 単価 数量 税率 小計
タイヤばらし 477 4 1.08 2061
タイヤ廃棄 334 4 1.08 1443
ソフト 99 ボディペンつや消し黒 924 2 1.08 1996
イサム塗料 エアーウレタン つや消し黒 1700 2 1 3400
↑送料 500 1 1 500
エアバルブ TR-412 69 4 1 276
↑送料 210 1 1 210
スチールウール 100 1 1.08 108
カジュアルテープ 388 1 1 388
↑送料 100 1 1 100
ホイール塗装合計       10481
ナンカン NS-2 195/50R16(送料込) 5010 2 1 10020
ナンカン NS-2 215/45R17(送料込) 5320 2 1 10640
タイヤ交換工賃 (前) 990 2 1 1980
タイヤ交換工賃 (後) 1190 2 1 2380
タイヤ交換合計       25020
総合計       35501

ノーマルホイール重量:
F: 8.2kg
R: 10.8kg