ブログ・ア・ラ・クレーム

技術的なメモとかライフログとか。

Auto Network Switcher その後

Google Play にて公開中の拙作アプリ「Auto Network Switcher」ですが、ユーザさんから色々コメントを頂き、改善出来そうな点が幾つか発見出来ている状態です。
とりあえず、以下の点は修正したいなと思っております。

  • 電波強度を加味したネットワーク機能のON/OFF
    • 「n分電波が弱かったら機内モードに移行」のような感じ
  • オプションの細分化
    • 現在、WiFi - 3G - 機内モードの全遷移のチェック間隔を同じ値で指定していますが、これをそれぞれ指定可能にします
  • その他
    • スリープモードになっている時間など、ネットワーク状況以外での機能ON/OFFを試してみる?


私生活と根本的な実装の見直しのため、次回アップデートはしばらく先になりそうです。。。
その間、なにか改善点等ございましたら、是非コメントをお寄せ下さい。

OProfile の解析結果出力時にハマった

Linux のカーネルレベルのイベントを含むプロファイリングが可能なツールであるOProfile を使用していたのだが,途中,opreport コマンドによる解析結果出力時に,以下のメッセージが吐かれ詰まったりしていた.

opreport error: Invalid sample file, bad magic number: ...

前のプロファイリング時に使用されたファイルが残ったりしている模様?
以下のようにすればOKのようだ.

$ opcontrol --deinit
$ rm /root/.oprofile/daemonrc 
$ rm -rf /var/lib/oprofile/samples/current

参考: http://old.nabble.com/opreport-error-td23882836.html

iOS版Vim でコードリーディングがしたかった

僕はどうにも、ディスプレイ上に投影されたコードを読むのが苦手なのです。

昔は、コードをまず印刷し紙の上で処理を追っていた程までには。

しかしながら、印刷してコードを読むのは、手間がかかるし場所を取るし、加えて紙の無駄遣いにも繋がります。

 

さてはて、それはともかく。 

今年、新年早々にApp Store にてiOS向けVim が公開されたりしました。

http://applidium.com/en/applications/vim/

 

無料で使用可能で、ソフトウェアキーボードでの入力もそれなりに出来そう。

これなら、iPad 上のVim でどこでも気軽に、それこそ布団に籠りながらひそひそとコード読めるのでは!等と思ったので、必要最低限の手順を踏まえつつ試してみました。

 

 

読むコードをデバイスに転送

iOS版Vim では、iOSとPC間のファイル共有に対応しています。

基本的に、既存ファイルを喰わせる方法はこのファイル共有しか無い模様?

 

iTunes の、iOSデバイス周りの設定にて、Appタブのファイル共有欄から、デバイスに転送するファイルを追加できます。

下の画像は、linux カーネルのata ドライバ周りのソースコードを追加してみた図。

ディレクトリを掘って構造的に管理・・くらいはしたいんだけど、やり方が分からない。

f:id:syu_cream:20120408042107p:plain

 

デバイス側でファイルを読む

普通にVim アプリを起動し、:e でファイルを喰わせればよい。

追加したファイルのブラウジングをしたい場合、:e . などコマンドを打つ。

 f:id:syu_cream:20120408150339p:plain

 

コードリーディングする上での、iOSデバイス向けの留意事項

:help ios で、iOSデバイス独自の振る舞いが確認できる。

主な点では、ESC がバックスラッシュとして入力できたり。

また、上下スクロールは二本指で上下する操作で可能。(MacBook のトラックパッドのような感じ)

f:id:syu_cream:20120408040240j:plain

 

で、実際iOS版Vim でコードリーディングするのは・・・

正直面倒そうです。

ソフトウェアキーボードバリバリ使用するとか、iPad 上でやるには直感的で無いかなと。(Apple Wireless Keyboard 使えば、大分使用し易そうですが)

読むコードの転送も難ありでしょう。Dropbox 経由でファイル転送出来れば楽なのですがうーん。

少々お値段が張りますが、iOS向けテキストエディタアプリ「Textatic」の方がDropbox 経由でのファイル転送が可能だったり良いかも知れません。。。

はてなブログはじまります。

http://d.hatena.ne.jp/syu_cream/

 

から、そろそろ引っ越してこようと思います。

技術的な備忘録や読んだ論文の雑感、果てはライフログまでつらつらと記述していこうと予定しています。

Android で、WiFi やBluetooth を有効にしたまま機内モードに移行する

機内モードへ移行する時は、例えば以下のようにするわけだが、機内モードに移行する際、WiFiBluetooth 通信もOFFになる。

Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1);
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", true);
context.sendBroadcast(intent);

機内モードへ移行する際、WiFiBluetooth の有効状態を変更させたくない場合、以下の様にAIRPLANE_MODE_RADIOSの設定を書換える。

Settings.System.putString(context.getContentResolver(), Settings.System.AIRPLANE_MODE_RADIOS, "cell");

WiFiBluetooth の有効状態を変更させるようにする場合、以下の様にAIRPLANE_MODE_RADIOSの設定を書換えれば元に戻せる。

Settings.System.putString(context.getContentResolver(), Settings.System.AIRPLANE_MODE_RADIOS, "cell,wifi,bluetooth");

Auto Network Switcher 0.5 アップデート

ネットワーク接続を自動的にON/OFFするAndroidアプリ「Auto Network Switcher」を0.4.1 へアップデートしました。

https://market.android.com/details?id=jp.syucream.ans&feature=search_result


更新箇所は以下の通り

  • WANに繋がるWiFi 接続が可能になったとき、自動的に機内モードに移行するオプションを追加

WiFi通信を主に使用し、たまに3G通信を行う様な場合に、使えるオプションかも知れません。
機内モードになっている時間が長くなるので、通話を行う様な端末では有効にしない方が良いかもしれません。。。
データ通信用端末で有効にすると、少し有用になるかもしれません。

Perl Packager でスクリプトを集約

久々にPerl でちょっとしたスクリプトを書いたのですが、実際にスクリプトを使ってもらう方がエンジニアでは無い為「cpan でモジュールインストールとかよく分からない」などという事が。
思うところもある場面だったので、pp(Perl Packager)でスクリプトと依存モジュールをまとめて一つのスクリプトに集約してみました。

基本的に以下の手順でOK

$ pp -p source.pl
$ par.pl -b -Opacked.pl a.par # 集約されたpacked.pl が生成される
$ perl packed.pl # 普通にスクリプトを実行可能

pp は基本的にモジュールの依存関係を判別してくれるらしい・・けどどうもお漏らししているっぽい。
そういう時は、-M[モジュール名]の形式で、手動でモジュール名を指定してあげると良い

$ pp -p source.pl
$ par.pl -MJSON::XS -b -Opacked.pl a.par # JSON::XS を組み込む

しかしどうも生成されたスクリプトの実行に失敗する。
サンプルのJSON::XS はCで書かれているためか。pure perl なモジュールじゃないと厳しそうだ。
とりあえず僕の遭遇した例では、特に性能を要求される場面では無かったし、どのような環境で動かすか決定していなかった為下手にバイナリくっ付けられても嬉しくない可能性があった為、pure perl なJSONモジュールで代替した。

$ pp -p source.pl
$ par.pl -MJSON -MJSON::backportPP -b -Opacked.pl a.par