Category Archives: Technology

Googleの2-step verificationが日本に対応した

Googleの2-step verificationでバックアップオプションとしてようやく日本の電話番号が使えるようになった。

2-step verificationではパスワードの他にワンタイムパスワードを入力するのだけど、そのワンタイムパスワードを受け取る手段としてGoogle AuthenticatorやSMSが存在した。普段はGoogle Authenticatorで十分なのだが、Google Authenticatorはインストールしているスマートフォンをうっかり初期化とかしてしまった際に、ワンタイムパスワードを生成できなくなって困ってしまうことが何度かあった。

そういったことを防止するために、SMSによるBackupが存在しているのだが、今までは日本の番号は対応していなかった。
それが、ようやく対応したみたい。

Google 2-setp verification supports Japanese number!

ただ、現状Google Calendarなどと同じようにキャリアメールしか対応してない。
スマホが普及して、かつSMSの相互運用がスタートしたので、そろそろSMSでも送ってくれてもいいのではないかと思う。
(ただキャリアメールでなく、電話でコードを受け取ることもできるので運用上は問題はなさそう)

非Deodex環境 [SO-02C] でセルスタンバイ問題を解決する

AndroidでMVNOなデータSIMを使うと電界強度(アンテナピクト)が表示されなかったり、セルスタンバイで圏外時間が100%になってしまって電池の消費が激しくなるという問題があったのだけど、それを解決する方法をブローヴちゃん: Android + b-mobile データ専用 SIM で電界強度を表示するで発見したので、試してみました。

上記のページだとdeodexされた環境で逆アセンブルして変更という手法がとられていたけど、手元にあるXperia Acroは非deodex環境だったので、deodex化せずに変更したみたので書いてみた。

注意: rooted環境じゃないとそもそもこのHackは適用できません。いつものことですが、失敗したら確実に文鎮化します。

用意するもの

手順

  1. 実機から/system/frameworkを抜いてきます。
    $ adb pull /system/framework framework
  2. framework.odexframework.jarを作業ディレクトリにコピーします
    $ mkdir workspace
    $ cp framework/framework.odex workspace/
    $ cp framework/framework.jar workspace/
  3. framework.odexを逆アセンブルします
    $ baksmali --api-level 10 -d ../framework -c:core-junit.odex -x framework.odex

    -c:オプションには逆アセンブルに必要なクラスを適宜追加します。Xperia acro(SO-02C)ではオプションを指定しなかった場合、

    $ baksmali --api-level 10 -d ../framework -x framework.odex
    Error occured while loading boot class path files. Aborting.
    org.jf.dexlib.Code.Analysis.ClassPath$ClassNotFoundException: Could not find superclass Ljunit/framework/TestCase;
    at org.jf.dexlib.Code.Analysis.ClassPath$ClassDef.loadSuperclass(ClassPath.java:830)
    at org.jf.dexlib.Code.Analysis.ClassPath$ClassDef.(ClassPath.java:683)
    at org.jf.dexlib.Code.Analysis.ClassPath.loadClassDef(ClassPath.java:280)
    at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:163)
    at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110)
    at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:104)
    at org.jf.baksmali.main.main(main.java:293)
    Error while loading class Landroid/test/AndroidTestCase; from file framework.odex
    Error while loading ClassPath class Landroid/test/AndroidTestCase;

    こんな感じのエラーが出ました。(この場合AndroidTestCaseが足りないのでcore-junit.odexを追加します。)

  4. アンテナピクトの扱いを変更する
    逆コンパイルしたクラスファイルを編集します。基本的にはブローヴちゃんさんの手順通りですが、展開したoutフォルダにあるcom/android/internal/telephony/gsm/GsmServiceStateTracker.smaliを編集します。
    Xperia Acroでは以下のように変更するとうまくいきました。

    :pswitch_data_22
    .packed-switch 0x0
    :pswitch_20
    :pswitch_1f
    :pswitch_1f
    :pswitch_1f
    :pswitch_20
    :pswitch_1f
    :pswitch_5
    :pswitch_5
    :pswitch_5
    :pswitch_5
    :pswitch_20
    :pswitch_5
    :pswitch_1f
    :pswitch_1f
    :pswitch_20
    .end packed-switch

    ちなみに変更後と変更前でパッチを作りました。
    http://nunnun.jp/src/so-02c/GsmServiceStateTracker.smali.patch
    パッチとGsmServiceStateTracker.smaliを同一ディレクトリにおいた状態で、

    $ patch GsmServiceStateTracker.smali < GsmServiceStateTracker.smali.patch

    で適用できます。

  5. 編集したframework.odexをアセンブルします
    先ほど逆アセンブルを実行した作業ディレクトリに戻って、smaliを実行します。

    $ smali -o classes.dex out

    うまくいくとclasses.dexが作成されているはずです

  6. framework.jarを展開します
    jarファイルはzipファイルなので展開します

    $ unzip framework.jar -d framework_jar
    Archive:  framework.jar
    creating: framework_jar/META-INF/
    inflating: framework_jar/META-INF/MANIFEST.MF
    inflating: framework_jar/preloaded-classes
  7. classes.dexを追加します
    先ほどframework.jarを展開したディレクトリにコピーします。

    $ cp classes.dex framework_jar/
    $ ls -l framework_jar/
    total 14336
    drwxr-xr-x  3 hiro  staff      102 10 10 01:44 META-INF
    -rw-r--r--  1 hiro  staff  7269368  1 12 21:40 classes.dex
    -rw-r--r--@ 1 hiro  staff    65580 10 10 01:19 preloaded-classes
  8. framework.jarを再度生成します
    先ほどの逆でzipで固めます。

    $ zip ../framework.jar.new META-INF preloaded-classes classes.dex
    adding: META-INF/ (stored 0%)
    adding: preloaded-classes (deflated 82%)
    adding: classes.dex (deflated 56%)

    これでPC側での作業はおわり。

  9. 実機に必要なファイルをコピーします
    どこでもいいのですが、/data/local/tmpとかに新しく生成したframework.jar.newとダウンロードしたdexopt-wrapperを転送して、dexopt-wrapperを実行可能にします。

    $ adb push framework.jar.new /data/local/tmp/framework.jar.new
    2047 KB/s (3185980 bytes in 1.519s)
    $ adb push dexopt-wrapper /data/local/tmp/
    609 KB/s (5512 bytes in 0.008s)
    $ adb shell chmod 755 /data/local/tmp/dexopt-wrapper
  10. dexopt-wrapperを使ってjarをodexに変換する
    $ adb shell
    $ cd /data/local/tmp
    $ ls
    dexopt-wrapper
    framework.jar.new
    $ ./dexopt-wrapper framework.jar.new framework.odex
    --- BEGIN 'framework.jar.new' (bootstrap=0) ---
    --- waiting for verify+opt, pid=7612
    --- would reduce privs here
    --- END 'framework.jar.new' (success) ---
    $
  11. 署名をコピーする
    このままだと動かないのでオリジナルのframework.odexから署名部分だけコピーしてきます。

    $ adb shell
    $ cd /data/local/tmp
    $ busybox dd if=/system/framework/framework.odex of=framework.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
    20+0 records in
    20+0 records out
    20 bytes (20B) copied, 0.004334 seconds, 4.5KB/s
    $ ls -l
    -rw-r--r-- shell    shell     7384328 2012-01-12 21:53 framework.odex
    -rwxr-xr-x shell    shell        5512 2009-05-30 23:15 dexopt-wrapper
    -rw-rw-rw- shell    shell     3185980 2012-01-12 21:42 framework.jar.new

    注意 必ずbusyboxddを使ってください。間違えると、conv option disabledというエラーが返ります。

  12. framework.odexを置き換える
    これはrecoveryとかで実施した方が安全です。
    /systemをrwで再マウントして、

    # cp /data/local/tmp/framework.odex /system/framework/framework.odex.new
    # mv /system/framework/framework.odex /system/framework/framework.odex.bak
    # mv /system/framework/framework.odex.new /system/framework/framework.odex
    # sync

    とかします。

やると意外と面倒でした。
いちおう元のframework.odexとパッチを当てて署名したframework.odexの差分を取ったパッチを作りました。

  • framework.odex.patch
    元のframework.odex MD5 (framework.odex) = 7b474a8d99ab92d4286d422cd6e1d511
    パッチ適用後: MD5 (framework_new.odex) = e3ea45b180e9e71bf39d665e4ca8b1ac
    こんな感じで適用できるはずです。
    $ bspatch framework.odex.bak framework.odex.new framework.odex.patch

間違っているところとかあったら指摘よろしくお願いします。

Kindle Fireでの日本語入力 [続] / Japanese Input on Kindle Fire

前回settings.dbを弄ることで日本語入力を可能にする方法を書いたが、実はもっと簡単な方法があったので備忘録的に書きたいのと、英語で教えて欲しいとリクエストがあったので、英語でも簡単にまとめてみます。

Here is the instructions that enables Japanese input method on Amazon Kindle Fire.

準備 / Before hack

rootを取ります。rootの取り方はいくらでもググれば出てくるので割愛します。過去の記事を参考にしていただいてもかまいませんが、情報が古い可能性は十分にあります。

Make sure you can access your kindle as root privileges, if not you can find a way to get root access to your kindle fire. After getting root privileges, install Android Market App into your kindle fire. You can also find a way to install Android Market on the internet.

IMEのインストール / Installing Japanese Input Method

Android Marketで好きなIMEをインストールします。ATOKなりGoogle日本語入力なりSimejiなりインストールしてください。

Install Japanese Input Method from Android Market. For example, you can install ATOK, Google Japanese Input (Google日本語入力) and Simeji. ATOK is a paid application but others are free.

IMEを有効化する / Enabling IME

ここまでは前回と同じです。前回はここでsettings.dbを弄りましたがハードルが高いので、”ime”というコマンドをadb shellでたたくことで同じことが可能ですので試してみます。

Let’s enable Japanese Input Method on your kindle fire. As previrous artcle, I introduced a way to enable Japanese input method by changing settings.db however that way is bit difficult so that this time we’re using another method using “ime” command on adb shell.

hiro$ adb shell
$ su
# ime list -s
com.android.inputmethod.latin/.LatinIME
com.justsystems.atokmobile.service/.AtokInputMethodService

adb shellにてKindle Fireにアクセスした後、suコマンドにてroot権限に昇格します。昇格後、ime listと打つとインストールされているIMEが一覧になって出力されます。

その後 ime enable と ime set を利用してIMEを有効化します。

After logged in your kindle fire using adb shell from your console, type “su” to access as root. Then you could see installed IME(Input Method Editor) using “ime list” command.

Finally you can enable and select IME using “ime enable” and “ime set” command.

# ime enable com.justsystems.atokmobile.service/.AtokInputMethodService
Input method com.justsystems.atokmobile.service/.AtokInputMethodService: already enabled
# ime set com.justsystems.atokmobile.service/.AtokInputMethodService
Input method com.justsystems.atokmobile.service/.AtokInputMethodService selected

何か不足している点などありましたら、指摘していただけると助かります。

Amazon Kindle Fireで日本語を入力する / ATOK,simejiをインストールする

[2012年1月7日追記: より簡単な方法と英語でのやり方をアップしました。/ You can find english instructions ]

Kindle Fireが届きました!

199ドルにしては非常に出来が良いです。液晶もきれいだし、思っていたよりも軽いし、裏がゴムっぽくて持ちやすくていいです。

Kindle FireはAndroidベースの端末ですでにrootをとる方法も確立されているので、Hackして遊ぶにも最適です。(というか僕はHack目的で買いました笑)標準で日本語フォントも中華フォントだけど入ってるのでとりあえず困らずに使えます。 ただ、日本語入力ができるか心配でしたが、ATOKをインストール・そして日本語入力をさせることができたので、忘れないようにメモしておきます。

私は以下の手順で可能にできましたが、あくまで自己責任でお願いします。これによりKindle fireの保証はなくなりますし、これによってKindle Fireが故障した場合でも私は一切の責任を負いかねます。あらかじめご理解ください。

Enabled Japanese Input Method on Kindle Fire

rootを取る

すでに英語でやる方法はいろんなところに出回っているので、別に必要ないのですが、簡単に日本語でもまとめておきます。(adbの使い方とか他のAndroid端末でも共通していることはgoogleで検索してください)

準備

僕がやったときはWindowsでrootを取る方法しかなかったので(というかそれを最初に見つけてしまったのでWindowsでやった)とりあえずWindowsが動く環境を用意します。x64でもx86でも動くと思います。

WindowsマシンにAndroid SDKをセットアップします。そのときにかならずGoogle Driverをインストールしてください。インストールしたら、Driverのinfをいじります。android_winusb.inf を開いて、Kindle FireのIDを追加します。ファイルの中に[Google.NTx86][Google.NTamd64]のセクションがあると思うので、その先頭に以下の行を追加して保存します。

;Kindle Fire
%SingleAdbInterface% = USB_Install, USB\VID_1949&PID_0006
%CompositeAdbInterface% = USB_Install, USB\VID_1949&PID_0006&MI_01

また、adbにKindle fireがAndroidデバイスであることを認識させるために、ホームディレクトリ直下の.androidフォルダのadb_usb.iniに以下の行を追加します。(ファイルが無かったら追加してください)

0x1949

これで準備は完了

rootを取ろう

rootはSuperOneClickを使って一瞬でとれます。
[APP]SuperOneClick v2.2 (now with zergRush and su 3.0) – xda-developers
起動してrootを押せば終わりです。SuperOneClickの使い方はいろいろ解説があると思うので、適当に探してみてください。

ATOKもしくはsimejiをインストールする

Kindle fireはAndroid MarketやGmailなどのgoogle appsが入っていません。インストールする方法はありますので、興味があるひとは以下のリンクとかを参考にしてみてください。
[G-Apps][GUIDE] Google Apps on the Kindle Fire – Simpler Market Instructions – xda-developers

Android Marketが使えればATOKやsimejiをAndroid Marketからインストールします。Android Marketをインストールしていない人は手持ちの他のAndroidから抜き出してきます。(なんか野良simeji公開されなくなってしまっていますね。) たぶんここが一番ハードルが高いかも。。

無事インストールできたら、ATOKもしくはsimejiを有効にします。
通常であれば、設定→言語とキーボード から有効にすればおわりなのですが、Kindle Fireのキーボードの設定はKindleキーボードの設定しかないので設定できません。

Kindle Fire Keyboard Settings

これではATOKを有効にできないので、直接設定をいじります。

Input Methodを有効にする

今度はMacで作業します。(WindowsでもLinuxでもできますが、MacでやったのでMacで書いてます)
先ほどと同じように~/.android/adb_usb.ini0x1949を追加します。

Androidの言語とキーボードの設定は、/data/data/com.android.providers.settings/databases/settings.dbに入っているので、それを抜き出して編集します。

hiro$ adb shell
$ su
# cp /data/data/com.android.providers.settings/databases/settings.db /sdcard/settings.db
# exit
$ exit
hiro$ adb pull /sdcard/settings.db .
2486 KB/s (24576 bytes in 0.009s)

抜き出したらSqliteで変更を加えます。まず現状の設定を抜き出します。

hiro$ sqlite3 settings.db
SQLite version 3.7.5
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from secure where name like "enabled_input_methods";
69|enabled_input_methods|com.android.inputmethod.latin/.LatinIME

続いてATOKもしくはsimejiをenabled_input_methodsに追加します。ATOKおよびsimejiのpackage名は以下なので参考にしてください。

  • ATOK
    com.justsystems.atokmobile.service/.AtokInputMethodService
  • simeji
    com.adamrocker.android.input.simeji/.OpenWnnSimeji

sqlite> INSERT INTO "secure" VALUES(null,'enabled_input_methods','com.android.inputmethod.latin/.LatinIME:com.adamrocker.android.input.simeji/.OpenWnnSimeji:com.justsystems.atokmobile.service/.AtokInputMethodService');

上の例はATOKおよびsimeji両方を有効にした場合です。実行したら再度select * from secure where name like "enabled_input_methods";を実行してATOKやsimejiが入っているか確認してください。確認したらCtrl+Dで終了させます。

最後に変更を加えたsettings.dbをKindle fireに戻し、Kindle Fireを再起動します。

hiro$ adb push settings.db /sdcard/settings.db
1810 KB/s (24576 bytes in 0.013s)
hiro$ adb shell
$ su
# cp /sdcard/settings.db /data/data/com.android.providers.settings/databases/settings.db
# chown system.system /data/data/com.android.providers.settings/databases/settings.db
# chmod 660 /data/data/com.android.providers.settings/databases/settings.db
# exit
$ exit

再起動したら、どこかの入力フィールドを長押しするとInput Methodを選ぶ画面が出ますので、選択するとATOKもしくはsimejiが候補に出てきますので選択するとKindle fireで日本語が入力できるようになります!

Kindle Fire Input Method Select Screen

かなり適当にまとめてますので、抜け落ちている点などありましたら指摘していただけると幸いです。

Xperia Acro SO-02C用のtun.ko

ついでにXperia Acro用のtun.koもコンパイルしてみた。
Android 2.3.4 [2.6.32.9-pref] 向けです。
IS11Sもたぶんいけるはず

コンパイル方法は
AndroidのKernel Moduleをコンパイルする
をみてください。

コンパイル済みファイルはこちら
http://nunnun.jp/acro/tun.ko-acro-4.0.1.C.1.9.zip 

AndroidのKernel Moduleをコンパイルする

SoftBankの回線をただ解約するのはもったいないので、WiMaxが付いてて各方面で絶賛投げ売り中のauのHTC EVOたんを入手したよ!(若干ネタが古い感はするーする!)

さてRootも無事取って、Cisco AnyConnect (VPNクライアント)をインストールして接続しようとしたら、”tun.ko”がないからむりぽって言われたので、tun.koをカーネルソースからコンパイルしてみることにした。

もともとOpenVPN用のモジュールなので、インストールするとOpenVPNも使えるようになるはずです。(もちろんカーネルモジュールだけじゃ動かないので他のファイルも必要です!)

最初OSXでやろうとしたんだけど、なんか面倒っぽかったのでLinux上でやってます。僕はたまたま手元にCentOSがあったのでCentOSでやったけど、きっとDebianとかでも動くはずです。

コンパイル済みのtun.koも準備しました。
http://nunnun.jp/evo/tun.ko-2.6.35.10-g04a0907.zip
/system/lib/modulesに入れれば動くはずです。 

用意するもの

手順

  1. ダウンロードしたファイルを展開する
    ホームディレクトリにandroidというフォルダを作ってそこに展開することにします。(別に場所はどこでも平気です)
    $ mkdir android
    $ cd android
    $ wget http://dl.google.com/android/android-sdk_r15-linux.tgz
    $ wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2
    $ wget http://dl4.htc.com/RomCode/Source_and_Binaries/supersonic-2.6.35-gb-MR.tar.gz
    $ tar zxvf android-sdk_r15-linux.tgz
    $ tar xvf android-ndk-r5c-linux-x86.tar.bz2
    $ tar zxvf supersonic-2.6.35-gb-MR.tar.gz

  2. デバイス(HTC EVO WiMAX)からカーネルコンフィグを抜きます
    デバイスがPCに接続された状態で、config.gzを抽出し、展開します。
    $ adb pull /proc/config.gz .
    $ gunzip config.gz
    $ mv config .config

    別のマシンから抜いてくる場合は、config.gzを抜いてそれを作業ディレクトリに転送し、展開します。

  3. Configを書き換える
    デフォルトではコンパイルしないことになっているTUNモジュールをコンパイルするために、展開した.configを書き換えます。vimなりemacsで開いて
    # CONFIG_TUN is not set
    という行を探します。探したらその行の下に、
    CONFIG_TUN=m
    という行を追加し、保存します。保存後、.configファイルをカーネルを展開した supersonic_GB_MR フォルダにコピーします。
    $ cp .config supersonic_GB_MR

  4. Makefileを変更する
    コンパイルして生成されるカーネルモジュールとデバイスで動いているカーネルのバージョンを合わせるために、Makefileを変更します。
    まず、 デバイスを接続したマシン上で、
    $ adb shell uname -a
    Linux localhost 2.6.35.10-g04a0907 #1 PREEMPT Tue Aug 30 13:49:12 CST 2011 armv7l GNU/Linux

    を実行します。実行するとカーネルのバージョンがわかります。この場合2.6.35.10-g04a0907がバージョンです。
    その後、Makefileを変更します。カーネルを展開した  supersonic_GB_MR フォルダにMakefileがあるのでそれをvimなりemacsなりで開いて、
    EXTRAVERSION =
    という行を探して、先ほどのバージョンのマイナーバージョン以下(つまり2.6.35以下)を追加します。この場合、EXTRAVERSIONの行は、
    EXTRAVERSION = .10-g04a0907
    となります。

  5. コンパイルする!
    準備が終わったので、早速コンパイルしてみる。カーネルを展開したディレクトリに移動して、makeする。
    ただ、環境変数をちゃんと設定しないと動かない。こんな感じ
    $ export ARCH=arm
    $ export CROSS_COMPILE=arm-eabi-
    $ export PATH=$PATH:~/android/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/

    環境変数を設定したら、makeする。

    $ make modules

    なんかエラーが出た場合は何かが足りない。aptitudeとかyumで探してぶち込む。無事コンパイルが終わると、drivers/net/ ディレクトリに tun.ko というカーネルモジュールが生成されているはず。fileすると、

    $ file drivers/net/tun.ko
    drivers/net/tun.ko: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped

    こんな感じに出るはず。

  6. デバイスに転送する
    コンパイルしたカーネルモジュールをデバイスに転送して、/system/lib/modules に配置します。
    デバイスをつないだマシンから、以下のように操作します。
    $ adb push tun.ko /sdcard/tun.ko
    $ adb shell su -c "mount -o rw,remount /system /system"
    $ adb shell su -c "cp /sdcard/tun.ko /system/lib/modules"
    $ adb shell su -c "insmod /system/lib/modules/tun.ko"
    $ adb shell su -c "mount -o ro,remount /system /system"

    いずれもエラーが出ずに処理が終われば正常です。エラーが出る場合はroot権限がとれていてsuがインストールされているか確認してください。

以上。最初NDKを最新のもので試したのだけど、付いてきたクロスコンパイラがarm-linux-androideabi-4.4.3で、これだと

# insmod tun.ko
insmod: init_module 'tun.ko' failed (Exec format error)

と言われてしまってモジュールを読み込めなかった。なんかARMのGCC 4.0特有の問題みたい。

フランス・スペインの携帯電話事情

土曜日から仕事でフランス・スペインに行くので、現地でiPhoneとかを使いたいのでどのキャリアのプリペイドSIMが使えそうか調べてみたので、忘れないようにメモ。

基本的な方針として、

  • 電話はおそらく発信しないので、ドコモのSIMでローミングを使用する。
  • データはローミングでは死ぬほど高いので、プリペイドを現地で調達する。
  • おそらくiPad向けにプリペイドを提供しているはずなので、それを探す。

スペイン

スペインはいくつかキャリアあるのだけど、前にいったときに使ったことがあるMovistarで調べてみた。

iPadは取り扱っているが、どうやらプリペイドプランは提供していないみたい。
Movistar – iPad

仕方がないので普通のプリペイドプランをあさってみる。
http://www.tarifas.movistar.es/particulares/voz/tarjetamas#contratar

通話: 22.8 cent euro / min
データ: 1.5 Euro / 10MB

これだとちょっと高い。10MBとか一瞬で使っちゃうし。というわけでプリペイドに使えるプランを探してみる。

あったあった。
Bono Mensual Internet en el Móvil Prepago
これだと20MB/month 6 Euro。まぁこれも一瞬だよね。

ほかにはないかと探してみる。
Bono Internet Trimestral
これは1GB/3months 59 Euro ちょっと高いけど、まぁ足りる。

今回は1週間ぐらいいるから、実際どうなんだろう。

フランス

フランスもいくつかキャリアあるけど、SFRかOrange。SFRはiPhone 3G向けならプリペイドデータプランがあるが、それ以外はないのでOrangeを調べてみる。

mobicarteっていうのがプリペイドの意味。

ここに書いてあった。
http://paygsimwithdata.wikia.com/wiki/France 

OrangeのWebサイトからわかる情報は
200MB / 6 Euro
http://mobile.orange.fr/content/ge/high/v2_offre_boutique/options/options.html

ただ、SIMつかって操作すればUnlimitedがつかえると、上のページには書いてあったので調査してみる。

まぁいずれの国にしても今回行くところが結構地方なので、まずSIMカードを調達するのが大変かも。
かえってきたらまたレビュー書きます。 

Google Authenticatorで2段階認証を行う [Debian]

Google AuthenticatorとはよくVPNつなぐときとかに使うRSAトークンをiPhoneやAndroid, BlackBerryで実装してしまおうというプロジェクト。


[Untitled by UUMickey, on Flickr under licensed Creative Commons Attribution, Noncommercial, Share Alike]
↑こんなやつ。

もともとは、Googleの2段階認証の為に実装されたものなのだけど、Unixでユーザ認証に使うPamモジュールも公開されているのでコンパイルすれば使える。そこで、Debian Squeezeにインストールしました。

ちなみに元々のGoogleで2段階認証を使ってみたのですが、2段階認証に対応しているサービス・クライアントが少なくApplication Passwordを乱発することになり結果的に非常に使い勝手が悪くなってしまったので、結局パスワード認証に戻しました。

だいたいの手順は、

PamModuleInstructions – google-authenticator
http://code.google.com/p/google-authenticator/wiki/PamModuleInstructions

こちらに書いてありますが、自分でもセットアップした方法忘れそうなのでメモ。

Google Authenticatorを取得する

ソースから取得するしかないみたいなので、
http://code.google.com/p/google-authenticator/source/checkout
ここからソースを取得します。

$ hg clone https://google-authenticator.googlecode.com/hg/ google-authenticator

ソースを取得したら、makeします。libpamなどのパッケージが必要な場合があるのでそうしたらaptでインストールします。

$ cd google-authenticator/libpam/
~/src/google-authenticator/libpam$ make

正しく make されていたら make install します。

PAMの設定をする

Debian SqueezeはPAMは pam-auth-update というコマンドを使ってPAMをアップデートするので、pam-configs 用のファイルを準備します。

“O Nuno”: Use Google Authenticator to login to a Linux PC
http://nunoassimassim.blogspot.com/2011/01/use-google-authenticator-to-login-to.html

ここから、google-enough と google-all を取得して /usr/share/pam-configs/ に置きます。

おいたら pam-auth-update を実行して google-all か google-enough にチェックを入れます。(enoughはpam的にはsufficientなので、あんまり意味ないので個人的にはallにしています。)

注意: google-all を選択して、ここでログアウトするとログインできなくなります。(SSHでPubkey認証とかなら平気ですがパスワード認証とかだと死にます)

SSHのチャレンジレスポンス認証をオンにする

これをオンにしないとSSHでは使えません。 /etc/ssh/sshd_config に

ChallengeResponseAuthentication yes

を記述します

Google Authenticatorをセットアップする

ドングルとなるデバイスにGoogle Authenticatorをインストールします。

ここまで終えたら、Google Authenticatorを使用したいアカウントで

$ google-authenticator

と実行します。実行すると、

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/administrator@aquila%3Fsecret%3DKHTY47WLAJDGMUXT
Your new secret key is: KHTY47WLAJDGMUXT
Your verification code is 472653
Your emergency scratch codes are:
18356824
29003846
55379944
61293021
32637075
Do you want me to update your "~/.google_authenticator" file (y/n)

こんな感じで出てきますので、URLをブラウザに貼り付けるなりsecret keyを端末に入れるなりします。

入力が完了したら、こんな画面になります。

ログインを試してみる

鍵なしのクライアントからログインを試みる(もしくはsudoとかでもいいです)と、

hiro@aquila:~$ sudo su -l root
Verification code:
[sudo] password for hiro: 

こんな感じで2段階認証を求められます。

ちゃんちゃん。NFSでホームディレクトリを共有してたりすると1回設定すれば他のマシンでも同じトークンを使用できるので便利です。 

Twitterでユーザの距離を測るツールを作った

最近プログラミングしたい気分真っ盛りなので、Twitterでフォローしている・されているユーザの距離を測るツールを作りました。

User Distance
http://distance.hirotaka.org/

過去2ヶ月程度にやりとりしたTweetを解析して、ユーザとフォローしている・されているユーザの距離を測定します。距離なのだけど、数字が大きい方が関係性が高いです。(数学苦手でうまくモデル化できてません。Follow, Mentionとかの数を集計して、重みをつけたスコアを対数取っているだけの適当モデルです・・。どなたか数学得意な人お知恵を貸していただけると助かります)

裏でクローリングしているので、使い始めだと直近数時間のTweetしか解析できないので、精度が悪いかもしれません。クロールされるのを待ってください・・。

実は似たような事をするAPIが有料であるのだけど、クエリー制限とかあったので作ってしまえと作ってしまいました。

Twitter Strong Links – Infochimps API
http://api.infochimps.com/describe/soc/net/tw/strong_links

ちなみにInfochimpsの結果はそれなりに精度高め。だけどちょっとあれ?っていう結果もあるからまぁ同じくらいかなと個人的には勝手に納得してる。

あとデザインとか全くできない・・・。(やる気もない説)

[続・続] DoCoMo + FaceTime

Carrier Bundleの編集が大変だというコメントをいただきましたので、debパッケージおよびCydiaのレポジトリを作成いたしました。

debパッケージの挙動およびその結果生じる損害などは一切保証いたしません。あくまでも実験目的でお使いください。また下のパッケージはすべてiOS 4.2.1にのみ対応しております。その他のバージョンでは動作いたしません。

レポジトリは http://nunnun.jp/repos/ です。

mopera.netおよび128k APNに関しては動作は一応確認しましたが、日本通信のSIMは持っていない為確認ができません。
またAPNをいじる場合、carrier.plistをいずれにしても編集する必要があります。