[UPDATE8]iBooksのルックアップ辞書を英和・和英にする方法

iBooksのルックアップ辞書機能は便利ですが、英語書籍はデフォルト設定で英英辞書を参照されてしまいます。これを英和・和英辞書にする方法を紹介します。
※iBooks1.1.2/iOS4.2.1で確認しています。
※iBooks1.2/iOS4.2.1で確認しています。
※iBooks1.2.1/iOS4.3.1で確認しています。
※iBooks1.2.2/iOS4.3.1で確認しています。
※iBooks1.3/iOS4.3.3で確認しています。
※iBooks1.3.2/iOS5.0で確認しています。
※iBooks1.5/iOS5.0.1で確認しています。
※iBooks2.0/iOS5.0.1で確認しています。
※iBooks2.1/iOS5.1で確認しています。

1. 母艦Mac/PCにiPhone ExplorerとProperty List Editorをインストール
こちら iPhoneアプリの言語メニューを個別に英語表記にする方法 を参考にインストールします。

2. iBooksに英語書籍と日本語書籍を同期
初期状態のiPhoneには辞書データがインストールされておらず、ルックアップ辞書機能の初回使用時にダウンロードされます。英語書籍はiBookstoreから”Winnie-the-Pooh”などをダウンロードし、日本語書籍はネット上で検索するとEPUB形式のサンプルが見つかりますのでiTunes経由でiPhoneに移します。英語書籍は英英辞書等のデータ、日本語書籍は英和・和英辞書や国語辞典等のデータをダウンロードをするために使います。

英語書籍でダウンロードできる辞書
 New Oxford American Dictionary
 Oxford American Writer’s Thesaurus
 Apple Dictionary

01ibooks-dic-select.png
02ibooks-dic-select.png
03ibooks-dic-select.png

日本語書籍でダウンロードできる辞書
 大辞泉
 プログレッシブ英和和英辞典
 類語例解辞典

04ibooks-dic-select.png

05ibooks-dic-select.png

06ibooks-dic-select.png

3. iPhoneから辞書優先設定ファイルを取得
iPhoneを母艦に接続してiPhone Explorerを起動し、Apps>iBooks.appにある”BKDictionaryManager_LanguageToOrder.plist”をドラッグ&ドロップで母艦のデスクトップ等にコピーします。このファイルを編集し同じ場所に戻しますのでiPhone側のファイルはバックアップとして”BKDictionaryManager_LanguageToOrder_org.plist”のようにファイル名を変更しておきます。

08ibooks-dic-select.png

4. plistでルックアップ辞書の優先順位を変更
Property List EditorからBKDictionaryManager_LanguageToOrder.plistを開きます。

09ibooks-dic-select.png

デフォルトのルックアップ辞書の優先順位は、”Winnie-the-Pooh”のような英語書籍は”en”以下のとおり、New Oxford American Dictionary > Oxford American Writer’s Thesaurus > アップル用語辞典 の順に設定されていることがわかります。

en以下に英和辞書はありませんので、一番最初にルックアップされるよう割り込ませればよいわけです。英和・和英辞書である”com.apple.dictionary.PEJ-PJE”を”com.apple.dictionary.NOAD”の上に追加して保存します。

10ibooks-dic-select.png

5. 辞書優先設定ファイルをiPhone側にコピー
優先順位を変更した”BKDictionaryManager_LanguageToOrder.plist”をiPhone側にコピーして戻します。

11ibooks-dic-select.png

6. iBooksを起動
マルチタスキング機能でバックグラウンドにサスペンド状態となっている場合は完全に終了させてからiBooksを起動します。ルックアップされる辞書が英英から英和に変更されているはずです。

12ibooks-dic-select.png

デフォルト状態への復元する場合は…
iPhone Explorerを使って、iBooksの”BKDictionaryManager_LanguageToOrder.plist”を削除し、バックアップしていた”BKDictionaryManager_LanguageToOrder_org.plist”をファイル名を変更して”BKDictionaryManager_LanguageToOrder.plist”に戻して、アプリを再起動します。
※アプリを削除して再インストールしても復元できますが、アプリの設定内容やデータが初期化されますので注意してください。

この方法での辞書変更をiPad2でも確認しました
iPad2にてカスタマイズした”BKDictionaryManager_LanguageToOrder.plist”で優先辞書の設定変更が有効であることを確認しました。

iBooks PEJ Dictionary

iPhoneアプリのメニュー・ラベルの文字列を変更する方法

iPhoneアプリでメニューのラベル文字列を変更したいと思ったことはないでしょうか?たとえば、ツイッター・クライアントの1つである”Twittelator”ではタイムラインのことを英語で”Friends”、日本語で”フレンド”と表記していますが、個人的には違和感があります。これを”タイムライン”と修正することができます。

注意喚起情報
この方法はいわゆる脱獄(JailBreak)は不要ですが、操作方法を誤ると当該アプリのデータまたは設定内容が失われる可能性がありますので注意してください。
脱獄と違ってシステム領域には影響しないので文鎮化することはまずないでしょう。

始める前に母艦に準備するソフトウェア
iPhone Explorer(フリーウェア)を http://www.macroplant.com/iphoneexplorer/ からダウンロードし母艦にインストールします。

Property List Editorをインストールします。TwittelatorのLocalizable.stringsはバイナリフォーマットのためテキストエディタだと編集できませんので専用エディタが必要になります。テキストエディタで編集できる場合もありますが、plistを修正する場合はこの専用エディタを使った方がよいでしょう。

Mac版 – Apple: PlistEdit Pro 1.5
Windows版 – plist Editor for Windows (Freeware)

  1. iPhoneを母艦に接続します
    iPod touch、iPadでは確認していませんが同じ方法で変更できると思います。

  2. iPhoneからLocalizable.stringsを母艦側にコピーします
    iPhone Explorerを起動し、Apps>Twittelator.app>Japanese.lprojから”Localizable.strings”をドラッグ&ドロップで母艦にコピーします。iPhone側のLocalizable.stringsはファイル名を変更し、”Localizable_org.strings”のように元に戻せるようにバックアップを置いておきます。

  3. Property List Editorで編集します
    母艦にコピーした”Localizable.strings”を開きます。ファイルの拡張子は”.strings”ですが中身はplistと同じなのでそのままで問題ありません。Win版もMac版のいずれのProperty List Editorも検索機能を実装しているので、変更したい文字列を簡単に探すことができます。今回の例では「フレンド」という文字列で検索し「タイムライン」に変更し、保存します。

    MacのProperty List Editor

    Windows7のProperty List Editor

  4. iPhone ExplorerでiPhone側に戻します
    母艦で編集した”Localizable.strings”をiPhone Explorerを使ってiPhone側の同じ場所に戻します。

  5. アプリを起動します
    修正が反映されていない場合は、iOSのマルチタスキング機能によりバックグラウンドでサスペンド状態になっている可能性がありますので、プルプル削除で完全に終了させてからアプリを起動します。

    修正前

    修正後

    デフォルト状態への復元する場合は…
    iPhone Explorerを使って、該当するアプリの”Localizable.strings”を削除し、バックアップしていた”Localizable_org.strings”をファイル名を変更して”Localizable.strings”に戻して、アプリを再起動します。元に戻らない場合はバックグラウンドでサスペンド状態になっている可能性がありますので完全に終了してから起動します。
    ※アプリを削除して再インストールしても復元できますが、アプリの設定内容やデータが初期化されますので注意してください。

    留意事項
    アプリのアップデートを適用した場合は上記内容は初期化されます。
    参考:代助のブログ「iPhoneアプリの言語メニューを個別に英語表記にする方法」

iPhoneアプリの言語メニューを個別に英語表記にする方法

iPhoneアプリでメニューの英語表記の方がいいなぁと思うことはないでしょうか?たとえば英語メニュー表記の海外製アプリがその後のアップデートで日本語表記をサポートされることがありますが、英語メニューに慣れてしまって、ローカライズされて逆に違和感がある場合があります。まれに日本語サポートのためフォントサイズの統一感が損なわれてしまっている場合もあります。

iPhone本体の言語設定を英語にすればよいのですが、そうすると全てが英語表記になってしまいますので、特定のアプリだけを英語のままにしておきたい、そんな方法がありました。

注意喚起情報
この方法はいわゆる脱獄(JailBreak)は不要ですが、操作方法を誤ると当該アプリのデータまたは設定内容が失われる可能性がありますので注意してください。
脱獄と違ってシステム領域には影響しないので文鎮化することはまずないでしょう。

  1. iPhone Explorerをダウンロード・インストールする
    iPhone Explorer(フリーウェア): http://www.macroplant.com/iphoneexplorer/

    MacやWindowsの母艦からiPhoneをストレージのようにファイルのコピーや削除、ファイル名を変更したり、その他にも画像をプレビューしたりするなど様々な機能が実装されています。

  2. iPhoneを母艦に接続する
    iPhoneを母艦に接続しiPhone Explorer起動します。デバイス名が表示されます。

  3. アプリの日本語化ディレクトリ名を変更する
    対象のアプリを開き、”Japanese.lproj”の名前を”Japanese_temp.lproj”のように変更します。日本語に戻したい場合はディレクトリ名を元に戻します。

  4. アプリを起動します
    アプリを起動し、メニュー表記が英語になっているはずです。もし、日本語のままの場合はマルチタスキング機能でバックグラウンドにスタンバイしている可能性もありますので、プルプルさせて削除してから起動してください。

    修正前の日本語表記メニュー

    修正後の英語表記メニュー

留意事項
アプリのアップデートがあると上書きされますので上記の変更は初期化されます。

[UPDATE1]iOSアップデート時のエラー1013について

iPhone4をiOS4.1からiOS4.2.1にしようとしたところ”エラー1013″が出てアップデートできない状態に陥りました。Googleで検索してみると回避方法は「Windowsマシンで実行する」「/etc/hostsにある74.208.10.249 gs.apple.comを削除またはコメントアウトする」の2つがあるようです。顛末を備忘録として残します。

アップデート対象
iPhone4 32GB 国内モデル
iOS4.1
PownageToolのカスタムIPSWにてJailBreak済み

失敗した環境
MacBook MB404J/A (Early 2008)、MacBook Air 11-inch (MC506J/A)
 Mac OS X 10.6.5
 iTunes10.1、USB直挿し、純正USBケーブル
 リカバリーモード
 DFUモード

成功した環境
ASUSのネットブック
 Windows 7 Home Premium 64bit
 iTunes10.1、USB直挿し、純正USBケーブル
iPhone4のバックアップデータ含め、iTunesのデータ全般がMacBookにあります。そのためWindowsマシンでOSだけアップデートしたあと、キャリアのアクティベーション前にMacBookに接続し直し、復元作業を継続しました。

/etc/hosts編集による解決方法
iPhone3GSをiOS4.2.1にアップデートする際に同じエラー1013が発生しました。Mac上で”/etc/hosts”ファイルに記載されている”74.208.10.249 gs.apple.com”がある場合は、コメントアウト(先頭に#を追加)する方法でも同エラーを回避することが出来ました。TinuUmbrellaをインストールするとこの1行が追記され、そのままだとAppleではなく、Cydiaサーバーに向いてしまうためこのエラーが出てしまいます。なお、編集するにはroot権限が必要になり、ターミナル上からviエディタを使用しました。不安な方はバックアップコピーしてから編集した方がいいと思います。

アップデート完了後は念のためコメントアウトを外して元に戻しました。

続きを読む [UPDATE1]iOSアップデート時のエラー1013について

[UPDATE4]iOS4.2.1の仮脱獄(tethered jailbreak)てどんなもの?

Appleから待望のiOS4.2.1がリリースされ、ほぼ同時にDev-Teamからはredsn0w 0.9.6b4の脱獄ツールがリリースされました。iPod touch 3GをiOS4.2.1にアップデートして、仮脱獄(tethered JailBreak)を試してみました。

注意喚起情報
JailBreakされたiPhone/iPad/iPod touchはメーカー保証対象外となるため動作不良や故障に陥ってもサポートを受けることができません。万一の際には保証期間内であっても有償となってしまいます。また、JailBreakはアップル社のセキュアな環境を無効化することになるため、外部からの侵入によってウィルスに感染し動作が不安定になったり、個人情報等が流出してしまう可能性(危険)を伴うものです。これらのリスクを理解出来ない、または自ら当該リスクに対処することができない場合はJailBreakしないようにしてください。

JailBreakとその危険性についてはこちらのサイトで詳細に説明されていますので是非確認してください。
をぢの日記【iPhone_JB】Jailbreakによるリスクと問題について

仮脱獄(tethered JailBreak)は、完全に脱獄した状態ではないために、その状態と区別され、リブートするたびに母艦側のredsn0wの助けを借りてカスタムブートローダーをiPod touchのメモリにアップロードする必要があることから「紐付き(tethered)」という意味でそう呼ばれています。iPod touch 3GとiPhone4、iPad WIFI+3G(US版)で確認していますが、未確認ですがおそらくiPod touch 4G、iPhone4も同様のはずです。

実は、今回は、前回のiPod touch 3GやiPhone3GSの新ROMであった「仮脱獄」とは異なります。前回の仮脱獄はリブートまたは電源オフの状態から起動するとスクリーン上にiTunesのアイコンとUSBケーブルが表示され、母艦からexploitを送り込むまでは起動自体ができない状態でした。今回はリブートまたは電源オフからでも母艦なしに正常に起動しますが、非JailBreak状態となります。JailBreak状態にするために母艦に接続してredsn0wを使う必要があります。そのため仮脱獄であることには変わりありません。

ただし、不意にリブートしたり、させてしまっても非JailBreak状態にて起動させることができるので、前回の仮脱獄とは精神的な負担がずいぶんと違う気がします。前回と同じ「仮脱獄」という言葉が適当ではないような気がしますが、それらしい単語が思い浮かばないので、とりあえず「仮脱獄」と呼ぶことにします。
参考:仮脱獄ってなんぞ? iPod touch第3世代編【動画あり】

—2010年11月24日追記—
Dev-Team BlogにUpdate #2として追記された箇所が非常に重要なので注意してください。つまり、起動時の重要なプログラム(SpringBoadやCommCenter等)をフックするようなTweaksをインストールした場合に、非JB環境ではそれらが正しく動作せず起動できない(りんごループ)可能性があります。 もちろん母艦側からredsn0wで”Just boot tethered right now”すれば起動するようですが。明確に影響のないアプリやtweaksを見分けられるユーザにとっては回避できる事象ですが、そうでないユーザは注意が必要です。

—2010年11月25日追記—
SBSettingsをインストールした状態でリブートし非JB環境での起動を試みましたが、MobileSubstrate.dylibやCydiaSubstrate.framework以下のファイルがロード出来ずに起動できませんでした(りんごマークの状態)。この状態から起動するには母艦からのアシストが必要になります。

—2010年11月27日追記—
tethered jailbreakのiPhone/iPod touchを再起動すると非JB状態になりJBアプリやtweakは動作しませんが、母艦からDiskAidなどのファイルエクスプローラ系アプリで全root領域を確認する(読み書き可)ことが可能でした。OpenSSHはさすがに立ち上がってないのでアクセスできませんでした。

MobileSubstrate系のアプリやtweakを入れていると再起動してもりんごマークの状態でうんともすんとも言わない状態になりますが、この状態では母艦からのアクセス(DiskAid、OpenSSH)もできませんでした。

準備するもの
・iOS4.2.1にアップデートしたiPod touch 3G、iPhone4
・redsn0w 0.9.6b4
・iPod3,1_4.2.1_8C148_Restore.ipsw、iPhone3,1_4.2.1_8C148_Restore.ipsw

JailBreak手順
iPod touch 3Gを母艦に接続し、redsn0wを起動します。

“Browse”ボタンをクリックして、”iPod3,1_4.2.1_8C148_Restore.ipsw”を読み込みます。redsn0wが正しいfirmwareかどうかを確認し、問題なければ”IPSW successfully identified.”と表示しますので、”Next>”ボタンをクリックします。

iPod touch 3Gに送り込むJailBreakデータを作っています。

初回にJailBreakする場合は、”Install Cydia”をチェックし、バッテリー残量を%表示させたい場合は”Enable battery percentage”にもチェックして、”Next>”ボタンをクリックします。 iPhone4、iPadは標準で表示可能なため”Enable battery percentage”の項目はありません。

iPod touch 3GをDFUモードにしてJailBreakに必要なexploitを送り込むための準備をします。iPod touch 3Gを母艦に接続した状態で電源をオフにします。”Next>”をクリックすると、DFUモードにするためのインストラクションが開始しますので、次からの手順を覚えてから先に進んだほうがスムーズに成功できると思います。

電源ボタンを3秒間押し、電源ボタンはそのまま押し続けホームボタンも同時に10秒間押します。そして電源ボタンから手を離します。インストラクションでは15秒ですが、自動的にその先に進めばホームボタンからも手を離して大丈夫です。あとは、iPod touch側の作業のみのため”Finish”ボタンを押しても問題ありません。

DFUモードに入れなかった場合は次のようなメッセージが出て、もう一度やり直すことができます。

JailBreakのためのプログラムをiPod touch 3Gに送り込んだ後のiPod touch 3Gの様子です。

初回のJailBreak作業が完了するとホームスクリーンにCydiaのアイコンが表示されますが、タップしても反応しません。もう一度、redsn0wで、今度は”Just boot tethered right now”を選択して、DFUモードからexploitを送り込む必要があります(最後の画面のインストラクションのとおり)。

無事完了すると以下のとおりCydiaのアイコンが正しく表示され、Cydiaにアクセスすることができるようになります。

JailBreak状態からリブートすると非JailBreak状態となり、その後、redsn0wを使ってJailBreak状態に戻すところの動画です。

iPad WIFI+3G(US版)のJailBreakもiPod touchやiPhoneと同様です。CydiaがiPad用にカスタマイズされていましたので何枚かスクリーンショットをご紹介します。

1回目のredsn0wではCydiaアイコンは白い状態

2回目のredsn0wで”Just boot tethered right now”を実行すると完了

最初のCydiaアイコンをタップするとfilesystemをイニシャライズして終了

次のCydia実行でユーザレベルを選択。選択ウィンドウがiPad専用のUIに変更されている

US版ユーザお待ちかねの例のもの

続きを読む [UPDATE4]iOS4.2.1の仮脱獄(tethered jailbreak)てどんなもの?

電子マネーSuicaをスマートフォンに…失敗の巻

iPhoneやAndroidはいろいろと便利ですが、電子マネーが搭載されていない。ガラケー並にとは言わないまでも、ちょっとした買い物や電車、地下鉄でスマートフォンをかざして「ピッ」と済ませたい。そんなことを願っている人は多いと思います。ちょっとトライしたのですが残念ながら失敗しました。再チャレンジするときの備忘録として残しておきます。


DSC00117

実は、既にiPhone4では成功事例があります。Twitter仲間の ThugStyle4ever">@ThugStyle4ever さんのつぶやきを中心にまとめた “カード型電子マネー分解とiPhoneおサイフ化” で確認してみてください。

わたしの場合は、手元にあるAndroid端末のHTC Desire、Nexus One、XPERIA X10 miniで試してみましたがうまくいきませんでした。国内メーカーの本格参入によりFelica搭載機種も発売されますし、これ以上チャレンジしてもしょうがないと諦めました。

Android端末はiPhoneと違ってバックパネルが簡単に外せますので、iPhoneより簡単かと思ったのですが、思わぬ落とし穴がありました。

  1. iPhoneのようにバックパネルがバスタブ型ではないため、分解して取り出したトークンをそのまま収納するための十分なスペースが確保できない。
  2. 分解した回路のコイル部分が断線してしまうと修復できない。どうしても接触不良が起きてしまう。
  3. Desireのバックパネルはそれ自体が読み取り機の電磁波を遮断してしまうようで、Desireの内側に干渉防止シールを施しても意味がない。
  4. バックパネルは簡単に取り外せるが、バッテリーの反磁界ノイズをモロに受けるようで、DesireとNexus Oneは干渉防止シールを施しても効果がなかった。

結論

  • 電子マネーのトークンのコイル断線すると修復するのは困難。
  • 設置はバッテリーから離れた液晶のフロントパネル側。

まず、分解する電子マネーSuicaを用意します。関東ではJR、私鉄、地下鉄、バスにも利用可能で、買い物もできます。さすがにクレジット付で実験するのはチャレンジングですから、チャージは特定のコンビニ等に限定されてしまいますが無記名式で十分です。


DSC00066

分解の際には読み取り機のPaSoRiがあったので便利でした。切り刻みながら、「まだ反応するか」どうかを確認して作業を進めます。分解にはモデラーズナイフを使用しました。


DSC00075

DSC00086

一皮剥けると、コイルが透けて見えるようになります。最初から上下左右の余白部分をカットしてからだと楽になると思いますが、購入した状態では目印はないので難しいかもしれません。

SONYの文字が見えます
DSC00090

DSC00096

サイコロの5の目の部分を開口し、マイナスドライバーを突っ込んでペリペリと剥がしていきます。このとき、SONYも文字が読める方が表ですので、こちらから作業したほうが良いと思います。そのままのサイズでは大きいので半分に切断します。ちょうどSunhayatoのエクステンション基板があったので使いました。


DSC00108

DSC00113

PaSoRiで認識はするのですが、接触不良のためか認識したりしなかったり。導電テープでもダメですし、ハンダものらず、2000番のサンドペーパーで皮膜を削ってみても結果は変わりませんでした。こうなった時点でAndroidに内蔵するのは非常に微妙だったわけですが…



DesireとNexus Oneは”フラックス・ピット・モバイル for iPhone 3G & 4″を使用し、干渉エラーを抑え込もうとしましたがダメでした。バッテリーがむき出しの状態だとトークンとの間に入れても効果は出ないようです。XPERIA X10 miniはバッテリーがむき出しの状態ではないためこのシートを貼り、トークンをバックパネルの裏に絶縁テープで固定し、バックパネルを閉じてPaSoRiで試したところ認識に成功しました。ただし、接触不良が解消できないため、認識したり、しなかったりととても実用的ではありません。残念ながらここで計画は断念しました。


DSC00128

DSC00162

   

[UPDATE4]XPERIA X10 miniがいい意味で期待を裏切ってくれた

日本では発売されていないXPERIA X10 miniを秋葉原の店頭で見かけてTwitterでつぶやいたところ、数時間後にはポチっと。日本で発売されているXPERIAには全く興味が湧かなかったのですが、あの小さなボディに一目惚れ。キーボード付きのmini proもあったのですが、メインで使う予定もないので安い方にしました。円高効果もありeBayでは送料込みで2万円強。注文から3日で届いてしまいました。

購入後、Eclair(Android 2.1)にバージョンアップし、root化したので備忘録としてまとめました。


IMG_0985

まず驚いたのはそのボディの小ささ。店頭でガラス越しに見るよりも、実際手にとってみるとその予想以上の小ささです。やや厚みはありますが、片手にすっぽり収まるサイズ。値段の割に安っぽさがないことも感心しました。また、ディスプレーはQVGAですし使いにづらいだろうと思っていましたが、文字入力を英字QWERTYキーボードにしてもそれほど不便には感じません。5Mピクセルのカメラも十分。あとは意外にサクサク動いてくれて、本当に良い意味で期待を裏切ってくれました。

先日、公開されたXPERIA X10 miniのAndroid2.1アップデートを早速実行します。面倒なことにWindowsマシンがないとアップデートできません。バックアップする程度の情報もないので、以下のサイトからアップデートプログラムをダウンロードしてWindows7マシンで実行しました。画面の指示に従い、開始時にはバックキーや電源ボタンを操作が必要です。
Sony Ericsson – Support – Softwaredownloads – Detail – Updateservice – XPERIA X10 mini

XPERIA X10 mini – Eclair(Android2.1)の画面
HTC DesireやNexus Oneとは違い、フリックでメイン画面とサブ画面を切り替える操作方法が独特ですし、トラックボールがないのが最初戸惑いましたが、使いにくいというほどではないです。Eclair(Android2.1)にアップデート後の画像を何枚か。


ロック画面

画面の上下をフリックかセンターボタンで移動します。
上をサブ画面、下をメイン画面と呼んでいます(個人的に)
四隅のアイコンメニューはよく使うアプリなどに変更が可能です

ミュージックプレーヤー(サブ画面)

TimeScapeでTwitterのタイムラインを表示(サブ画面)

アプリ一覧表示(メイン画面)を左右にフリックして移動

標準ブラウザ(ピンチイン・アウトで拡大縮小可能)

Twitter for Androidのタイムライン

Twitter for Andoridは厳しいかもです。メインメニューの下の部分がスクロールせず切れてしまっています。また、OpenWnn/FlickSupportでBigKeyboardがONになっていると入力する文字が見えなかったりします。


  

XPERIA X10 miniのrootを取る
マーケットに”z4root”という無料アプリで簡単にできます。ダウンロードして実行し、”root”ボタンをタップするだけです。完了すると自動でリブートがかかるので、母艦側からadb shell経由でsuを実行し、X10 mini側でSuperuserで許可します。busyboxは/system/binにコピーされていました。





rootは取ってみたけれど
XPERIA X10 miniにはブートローダやリカバリーイメージがない様子。カスタムROMはないのかなとか思ったり。root権限が必要なShootMeを入れてみましたが、撮れたスクリーンショットはこのような悲惨な結果に。。。QVGAに対応していないのか設定漏れなのか。
※その後、Googleで検索したりTwitterでご指摘いただいたのですが、ShootMeはどうもX10 miniのEclair(Android2.1)アップデートで動作しなくなったのではないかと思います。

ShootMeは起動できたけれど

撮れたスクリンショットのノイズが…

Android通信端末の奥深さというか、幅の広さを感じました。iPhoneは単一デバイスでOSもひとつですが、Android端末は様々なハードがありOSに独自の味付けをしたROMが用意されています。こうした多様性を楽しむのもAndroidの魅力なのかも知れません。すっかり気に入ってしまったX10 mini。今後もいろいろとカスタマイズの備忘録として追記していく予定です。

スクリーンキャプチャはDrocap2のアップデートで解消
ShootMe 0.7.5ではXPERIA X10 mini Eclairがサポートされておりませんが、Dropcap2の2.09へのアップデートによりX10 mini Eclairでもスクリーンショットが撮れるようになりました。Drocap2は通知バーからも実行できるので非常に便利です。

Drocap2で撮ったスクリーンショット

OS2.1でJITを入れ替えてみたけど?
JIT(Just In Timeの略)はFroyo(Android2.2)から搭載され、アプリの動作が高速化すると言われています(Android 2.2 “Froyo”、JITコンパイラで大幅に高速化)。Eclair(Android2.1)なX10 miniにも入れ替える方法が紹介(Xperia X10 mini / mini proでJIT入れ替えをしてみる)されていましたので試してみました。簡単にできたのですが、ベンチで測定したところ微妙な感じです。今のところそれほど効果は感じられません。でも、Nexus OneやHTC DesireのAndroid2.1と同程度なので想像よりはハイスペックだったかもしれません。うれしい誤算です。

入れ替え前

入れ替え後

Desire風にカスタマイズしてみた
Android端末はDesireがメインなので、XPERIAのホーム画面の操作はなかなか慣れません。Desire風にカスタマイズしてみました。ロック画面はWidgetLocker(有料USD1.99)で変更します。これがなかなかスグレモノです。ロック解除のボタンを指定したり、スライダーのテーマを選択できたり、スクリーンのタイムアウト時間を設定したりと、かなり細かく設定できます。また、ロック画面にはWidgetを配置することが可能です。

ホーム画面のカスタマイズはADW.Launcherというアプリを使用しています。マーケットで検索すると、このランチャーで使用できるテーマ”ADWTheme”がたくさん出てきて、このアプリにたどり着くのが大変でした。iPhoneやGalaxyといったテーマも用意されていて楽しそうです。XPERIAは下画面がiPhoneのようにメニューアイコンを横スクロールさせ、上の画面にWidgetを配置する仕掛けになっていますが、これまで馴染んだDesire風にしてみました。

WidgetLockerでカスタマイズしたロック画面

ADW.Launcherでカスタマイズしたホーム画面

ADW.Launcherはホーム画面をランドスケープでも表示可能

  

続きを読む [UPDATE4]XPERIA X10 miniがいい意味で期待を裏切ってくれた

[UPDATE2]多看 (Duokan) が Kindle3に魔法をかける

多看といわれるKindle2/3で動作する中国語OSを試してみました。名前だけは以前から知っていたのですが単純にKindle3を中国語化するハックという程度の認識しかありませんでしたが、実際使用してみるととにかくすごい機能が盛りだくさんでした。チャイナパワーはスゴイですね。

多看(Duokan) for Kindle3 のホーム画面

読み方はわかりませんが、英語では”Duokan”なので、「ドゥオカン」と発音するのでしょうか。サイトが中国語のために機能や不具合、アップデート内容、豊富な機能を理解するのなかなか難しいですが、英語に翻訳してくれているサイトもあるのでそちらを参考にできます。インストールは簡単にできますがアップデータを使ったハックのため、不具合が生じて文鎮化する可能性もありますので興味のある方は下記のサイトを参考にして自己責任で試してみてください。

このハックはNiLuJe氏らの実績あるハックと異なり環境構築や文鎮化防止対策の程度がはっきりしません。いまのところアンインストーラーも実装されていないようでリスクは高いです(起動ログの下に追記)。シリアル接続環境がない方、あるいはusbNetworkハックでコマンドラインから修正することができない方は自重された方がよいと思います。

オフィシャルサイト:http://www.duokan.com
英語の翻訳サイト:Duokan is now available with an english GUI
英語のFAQ:Duokan FAQ

メニューは英語表記に変更が可能ですから、英語に変更します。驚いた機能は表示可能なフォーマットにEPUB、DOC形式が追加されていたこと。実際に試してみましたが、画像データがややポジションがズレる場所もありますが、内容を確認する程度なら全く問題ありませんでした。フォントサイズはもちろん、濃さも調節可能です。中国語なら読み上げも可能です。日本語TTSを入れてしまえば日本語での読み上げも可能なのかもしれません。

もうひとつ。PDFファイルの余白トリミングが可能なことです。電子書籍への関心の高まりから、書籍を裁断してスキャンして電子ブックリーダーに取り込む、いわゆる「自炊」する方が増えているようですが、Kindle3で表示させる場合は、原稿の余白のトリミングが課題だったりします。

キーボードの”Aa”を押した際のメニュー

ターゲットマークを左上→右下の順番で決定してトリミングできる

インストールするとノーマルのKindleとのデュアルブートが可能になります。中国語でとっつきにくいのですがこれはアツイですね。スクリーンセーバーやフォントの変更も可能なようですし、いろいろといじりがいありそうです。参考までに本体をリブートしてから多看を起動した際のログは以下のとおりです。

—-begin—-
Welcome to Kindle!
kindle login: root
Password:
#################################################
# N O T I C E * N O T I C E * N O T I C E #
#################################################
Rootfs is mounted read-only. Invoke mntroot rw to
switch back to a writable rootfs.
#################################################
[root@kindle root]# reboot
WARNING: could not determine runlevel – doing soft reboot
(it’s better to use shutdown instead of reboot from the command line)
Broadcast message from root (ttymxc/0) (Wed Nov 10 10:54:17 2010):
The system is going down for reboot NOW!
Broadcast message from root (ttymxc/0) (Wed Nov 10 10:54:17 2010):
The system is going down for reboot NOW!
INIT: Switching to runlevel: 6
INIT: Sending processes the TERM signal
INIT: Sending processes the KILL signasystem: I K04framework:def:stopping booklet framework
system: I start.sh:stop:signal=15,exitval=143:CVM stopped using SIGTERM
system: I K06browserd:def:Stopping Browser Daemon
system: I K10cron:def:stopping crond
start-stop-daemon: lseek: Invalid argument
Stopping lipc-daemon: system: I K10tmd:def:Stopping Transfer Manager Daemon
system: I K15audio:def:stopping audio server
system: I K17ttsd:def:stopping TTS daemon
system: I K19userstore:def:Found BOOTUP flag file
system: I K20volumd:def:stopping Volume daemon
system: I K25phd:def:Stopping Phone-Home Daemon
system: I K30cmd:def:stopping CMD daemon
system: I K30wifid:def:stopping wifid
Stopping Power Management Daemon: stopped /usr/bin/wpa_supplicant (pid 10926)
system: W wpa_supplicant:def:wpa supplicant stopped
system: I wifi:def:WiFi Device mac = 28:EF:01:44:C9:C4
Platform set to SHASTA_NATIVEMMC-SDIO
Platform Setup Script is: /opt/ar6k/host/support/platformscripts/plat_SHASTA_NATIVEMMC-SDIO.sh
Image path: /sbin
..unloading all
system: I wifi:def:loadAR6000 finished, args=(unloadall)
system: I K76mcsd:def:stopping MCS server
Stopping Process Monitoring Daemon: system: I K85dbus:def:stopping system message bus
system: I K90video:def:stopping eInk HAL lifeguard
system: I K98sdtime_stop:sdtime:time=6970:shutdown time in milliseconds
system: I K99syslog-ng:def:stopping syslog-ng
system: I mntroot:def:Making root filesystem read-only
system: I tinyrot:def::Rotating file /var/log/messages with max size 256
system: I loginfo:devhw:boardID=SP1B:Shasta PVT device – rev 1
system: I loginfo:devhwphy::USB PHY built by unknown
system: I loginfo:devsworig::Original System Software Version: 111-shasta0.7-053672
Sun Oct 10 13:48:23 PDT 2010
system: I loginfo:devswota::OTA Kindle 3.0.3 (~~otaVersion~~)
lipc-get-prop[12130]: E lipc:con::Connection error(Failed to connect to socket /var/run/dbus/system_bus_socket: Co)
lipc-get-prop[12130]: C def:dbusi::Failed to init dbus
lipc-get-prop[12130]: E def:open::Failed to open LIPC
com.lab126.wan failed to open lipc for localTimeOffset event
system: E loginfo:ltofailunknowerror:cannot retrieve local time offset – unknown error
/usr/sbin/tinyrot : Signaling syslog
killall: syslog-ng: no process killed
system: W tinyrot:def:Failed to HUP syslog
killall: syslog-ng: no process killed
/usr/sbin/tinyrot : Calculating total size /var/local/log/messages_*.gz
/usr/sbin/tinyrot : Total size of /var/local/log/messages_*.gz is 148kb
Rebooting in 1 second…
Restarting system.
EXT3-fs error (device mmcblk0p1): ext3_find_entry: reading directory #12184 offset 0
EXT3-fs error (device mmcblk0p1): ext3_find_entry: reading directory #12184 offset 1
U-Boot 1.3.0-rc3-lab126 (Jul 31 2010 – 01:08:40)
CPU: Freescale i.MX35 at 532 MHz
Board: MX35 Luigi [ POR]
WDOG_WCR = 0xff31
WDOG_WMCR = 0x0
Board Id: SP1B000000000000
S/N: B008XXXXXXXXXXXX
DRAM: 256 MB
Using default environment
In: serial
Out: serial
Err: serial
No ethernet found.
i.MX35 CPU board version 2.0
Net: No ethernet found.
Hit any key to stop autoboot: 0
## Booting image at 87f40400 …
Image Name: Linux-2.6.26-rt-lab126
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2150840 Bytes = 2.1 MB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum … OK
Loading Kernel Image … OK
Starting kernel …
Uncompressing Linux……………………………………………………………………………………
boot: W def:rbt:reset=watchdog:
2.6.26-rt-lab126 #5 Sun Oct 10 13:46:42 PDT 2010 armv6l
INFO:Using default keypad setting. (not passing “kb_rev” to module)
INFO:Loaded module /lib/modules/mxc_keyb.ko (22508 bytes)
Press [ENTER] for recovery menu… 0 /INFO:Partition table verified for /dev/mmcblk0
INFO:Checking for updates… (auto-pilot mode)
/dev/mmcblk0p4:
CHS=4/16/101575 size=3328409600 bytes
flag type first last lba first lba size
Partition p1:
0x00 0x0b 16 16 6500784
CHS: 0/1/1 –

Partition p2:
Partition p3:
Partition p4:
INFO:Setup loop device /dev/loop0 for /dev/mmcblk0p4 + 8192
INFO:No update*.bin found; no update needed.
INFO:no updates found.
BOOTING DEFAULT.
argc == 9
argv[0]: “kinit”
argv[1]: “console=ttymxc0,115200”
argv[2]: “mem=256M”
argv[3]: “panic=10”
argv[4]: “root=/dev/mmcblk0p1”
argv[5]: “ro”
argv[6]: “ip=none”
argv[7]: “quiet”
argv[8]: “lpj=2555904”
Running ipconfig
argc == 4
argv[0]: “IP-Config”
argv[1]: “-i”
argv[2]: “Linux kinit”
argv[3]: “ip=none”
IP-Config: no devices to configure
kinit: do_mounts
kinit: name_to_dev_t(/dev/mmcblk0p1) = dev(179,1)
kinit: root_dev = dev(179,1)
kinit: /dev/root appears to be a ext3 filesystem
kinit: trying to mount /dev/root on /root with type ext3
kinit: Mounted root (ext3 filesystem) readonly.
Checking for init: /sbin/init
Checking for init: /bin/init
Checking for init: /etc/init
Checking for init: /sbin/init.sysvinit
INIT: version 2.86 booting
system: I rcS:def:starting /etc/rcS.d/S02kdb
system: I S02kdb:def:Setting boot device to mmcblk0
kdb set: ‘system/driver/filesystem/DEV_ROOT’
system: I rcS:def:starting /etc/rcS.d/S03udev
system: I S03udev:def:setting up virtual fs for hotplug event handling
system: I S03udev:def:starting the hotplug events dispatcher
system: I S03udev:def:synthesizing initial hotplug events
lipc-send-event[380]: E lipc:con::Connection error(Failed to connect to socket /var/run/dbus/system_bus_socket: No)
lipc-send-event[380]: C def:dbusi::Failed to init dbus
lipc-send-event[380]: E def:open::Failed to open LIPC
lipc-send-event[380]: E def:fail:source=com.lab126.hal, event=usbPlugIn:Sending event failed
lipc-send-event[481]: E lipc:con::Connection error(Failed to connect to socket /var/run/dbus/system_bus_socket: No)
lipc-send-event[481]: C def:dbusi::Failed to init dbus
lipc-send-event[481]: E def:open::Failed to open LIPC
lipc-send-event[481]: E def:fail:source=com.lab126.hal, event=audioHS:Sending event failed
system: I rcS:def:starting /etc/rcS.d/S04rootfsresize
system: I S04rootfsresize:def:No rootfs on /dev/mmcblk0p1 resizing needed
system: I rcS:def:starting /etc/rcS.d/S10filesystems
system: I rcS:def:starting /etc/rcS.d/S10hostname
system: I rcS:def:starting /etc/rcS.d/S10network
system: I S10hostname:def:setting device hostname
system: I S10filesystems:def:mounting filesystems
system: I S10network:def:initializing network configuration
system: I S10network:def:Installed Firewall
system: I rcS:def:starting /etc/rcS.d/S11chpriority
system: I rcS:def:starting /etc/rcS.d/S11video
Unknown HZ value! (76) Assume 100.
system: W S11chpriority:def:Cannot set priority for IRQ-7
system: I S11video:def:initializing eInk HAL for system use
system: I S11video:def:eink_debug=0
system: I S11video:def:Controller set to broads
system: I rcS:def:starting /etc/rcS.d/S20syslog-ng
system: I S20syslog-ng:def:starting syslog-ng
system: I rcS:def:starting /etc/rcS.d/S21init_time
system: I S21init_time:initboot:time=17220:boot time after init in milliseconds
system: I rcS:def:starting /etc/rcS.d/S45modules
system: I S45modules:def:loading module mwan
system: I S45modules:def:loading module g_file_storage
system: I S45modules:def:loading module fuse
system: I S45modules:def:loading module uinput
system: I S45modules:def:loading module mxc_keyb
system: I S45modules:def:loading module fiveway
system: I S45modules:def:loading module volume
system: I rcS:def:starting /etc/rcS.d/S50system
mount: mount point /proc/bus/usb does not exist
system: I rcS:def:starting /etc/rcS.d/S55scroll
system: I S55scroll:def:skipping; no luigi-based work to do here
system: I rcS:def:starting /etc/rcS.d/S70ethernet
system: I rcS:def:starting /etc/rcS.d/S70userstore
system: I S70ethernet:def:not enet
system: I S70ethernet:def:not usbnet
system: I S70userstore:def:Found SHUTDOWN flag file
system: I rcS:def:starting /etc/rcS.d/S79switch
Show menu
2
Run Kindle System
system: I mntroot:def:Making root filesystem writeable
mv: cannot rename ‘/etc/rc5.d/S96rundk’: No such file or directory
system: I mntroot:def:Making root filesystem read-only
Run Prog
Press a Key . Key Code : 16 .
Run DK program
system: I mntroot:def:Making root filesystem writeable
system: I mntroot:def:Making root filesystem read-only
system: I rcS:def:starting /etc/rcS.d/S90video
system: I S90video:def:initializing eInk HAL for rootfs use
INIT: Entering runlevel: 2
system: I lifeguard:def:starting eInk HAL lifeguard
system: I S40diags:def:not starting Diagnostic Services
system: I S40diags:def:/mnt/base-us/ENABLE_DIAGS does not exist, forcing diagnostic disable
system: I S50battcheck:def:running
Wed Nov 10 10:55:48 2010 INFO:battery voltage: 4127 mV
Wed Nov 10 10:55:48 2010 INFO:battery charge: 97%
system: I S50battcheck:def:current voltage = 4127mV
Wed Nov 10 10:55:48 2010 INFO:battery charge: 97%
Wed Nov 10 10:55:48 2010 INFO:battery voltage: 4127 mV
Wed Nov 10 10:55:48 2010 INFO:battery current: -113 mA
system: I S50battcheck:def:gasgauge capacity=97% volts=4127 mV current=-113 mA
system: I S50battcheck:def:Waiting for 3460mV or 4%
system: I S50battcheck:def:battery sufficient, booting to normal runlevel
INIT: Switching to runlevel: 5
INIT: Sending processes the TERM signal
system: I wifi:def:WiFi Device mac = 28:EF:01:44:C9:C4
Platform set to SHASTA_NATIVEMMC-SDIO
Platform Setup Script is: /opt/ar6k/host/support/platformscripts/plat_SHASTA_NATIVEMMC-SDIO.sh
Image path: /sbin
No debug record limit set
Load Board Data from /opt/ar6k/target/AR6002/hw2.0/bin/lab126_15dBm_nodiv_WWR_CTL.bin
Updating MAC address
BMI Set App Start (address: 0x913950)
BMI Bit-Wise (OR) modify Register (address: 0x500410, orig:0x8, new: 0x9, mask:0x1)
BMI Write compressed Memory (address: 0x502070, filename: /opt/ar6k/target/AR6002/hw2.0/bin/athwlan.bin.z77)
BMI Write Memory (address: 0x52d6d0, filename: /opt/ar6k/target/AR6002/hw2.0/bin/data.patch.hw2_0.bin)
BMI Write Memory (address: 0x500418, value: 0x52d6d0)
BMI Done
system: I wifi:def:loadAR6000 finished, args=()
system: I wpa_supplicant:def:wpa supplicant started
system: I S30network:def:initializing network configuration
system: I S30network:def:Installed Firewall
system: I S60dbus:def:starting system message bus
Starting Process Monitoring Daemon: Retrieved 127 keys for system/daemon/pmond/
Starting Power Management Daemon: system: I S70cmd:def:starting CMD daemon
system: I S70wifid:def:starting wifid
system: I S75phd:def:Starting Phone-Home Daemon
system: I S76mcsd:def:starting MCS server
system: I S80volumd:def:starting Volume daemon
system: I S85audio:def:initializing audio driver defaults
No state is present for card mx35luigi
system: I S85audio:def:starting audio server
system: I S87ttsd:def:starting TTS daemon
Battery Level: 97%
Wed Nov 10 10:55:59 2010 INFO:battery charge: 97%
system: I S90tmd:def:Starting Transfer Manager Daemon
system: I S90cron:def:starting crond
Starting lipc-daemon: wlan0 (WE) : Wireless Event too big (33)
system: I S94browserd:def:Starting Browser Daemon
system: I S95framework:def:starting booklet framework
Update DK
cp: cannot remove ‘/etc/init.d/usb_switch’: Read-only file system
system: I S95framework:def:logging reset type: soft
Run DK
Run DK
rm: cannot remove ‘/dev/viewinfodat1.txt’: No such file or directory
rm: cannot remove ‘/dev/viewinfodat.txt’: No such file or directory
do while /DK_System/ebook
killall: ebook: no process killed
start.sh: starting framework
1
system: I S96boot_finished:def:Boot finished script running
system: I S96boot_finished:symboot:time=46620:boot time before framework starts, in milliseconds
system: I mntroot:def:Making root filesystem writeable
system: I S99usbnet:def:usbnet is disabled
system: I mntroot:def:Making root filesystem read-only
DebugOff
switch usb state
use usb as storage
system: I mntroot:def:Making root filesystem read-only
sh: 0: unknown operand
Welcome to Kindle!
kindle login: system: I framework:def:stopping booklet framework
system: I start.sh:stop:signal=15,exitval=143:CVM stopped using SIGTERM
/mnt/base-us/DK_System/system/key/keymap.k
rm: cannot remove ‘/mnt/base-us/DK_Mbp/download.dat’: No such file or directory
REGISTER ????ニエ??
REGISTER ???????
Play thread running…
he chen prepare to out
Synth thread begin wait…
sh: syntax error: “(” unexpected
program: No such file or directory
program: No such file or directory
rm: cannot remove ‘/dev/activeevent’: No such file or directory
rm: cannot remove ‘/dev/usbevent’: No such file or directory
—-end—-

アンインストール方法について
中国語サイトが理解出来ないため、英語FAQでアンインストール方法を確認しますと、USBストレージにある”DK_System”、”DK_Documents”、”DK_Pictures”を削除してKindleをリブートするだけとあります。しかし、インストーラーを見ると、”/etc/rcS.d”、”/etc/rc5.d/”以下に起動スクリプトを追加していますので、クリーン・アンインストールするには、これらのディレクトリにある”S79switch”、”s96rundk”、”rundk.sh”、”S95dkupdate”も削除しなければなりません。これはシリアル接続環境、またはJailBreakしてusbNetworkハックを使うしかありません。

これらの起動スクリプトの中身をすべて確認したわけではありませんが、USBストレージにあるDuokan関連ディレクトリ以下のファイルだけを参照しているようですから、実質的にはこれらのスクリプトが残ってしまっても、関連ファイルが削除されていますのでKindle起動時には呼ばれても空回りするだけのため、問題が起こることはまずないと思います。もちろん、Kindle Software Versionのアップデート等で構成が変更になると影響が出る可能性は十分考えられますが。

動作環境
Kindle3 WIFI Software Version 3.0.3
Jailbreak Version 0.4 by NiLuJe
Duokan for Kindle3 Version 0.5.13.6613 (2010/11/06)

続きを読む [UPDATE2]多看 (Duokan) が Kindle3に魔法をかける