2012年7月4日水曜日

Android 4.1 Jelly BeanでのAA表示

Android 4.1 Jelly Beanではフォント指定の仕組みが再び変更され、基本的に日本語フォントについてはfallback_fonnts-ja.xmlが参照されるようになった。

今回は、system_fonts.xmlでのフォント指定、fallback_fonts-ja.xmlでのフォント指定、fallback_fonts.xmlでのフォント指定について、それぞれ特徴的なフォントを指定することで、どのような場面でどのフォントが参照されるのかを調べてみることにした。


fallback_fonts-ja.xmlではモトヤLマルベリ、system_fonts.xmlでは04B-31、fallback_fonts.xmlではモフ字 1.3を参照することにした。


結果:
基本的な動作として、まず最初にsystem_fonts.xmlが参照される。一般的には、system_fonts.xmlの先頭に記述したfamilyが使用され、ブラウザ等でフォント名が指定されている場合は、その名前に対応したfamilyをsystem_fonts.xmlから探す。システムフォントの中でも通知領域にはsans-serif-lightとして指定したフォントがが用いられる他、sans-serif-condensed(次幅の狭いゴシック体)などが標準的に利用できるように設定されている。
system_fonts.xml内で指定されたフォントの中に、使用したい文字データが含まれていなかった場合にはじめてfallback_fonts-ja.xmlが参照される。私が実験した限りでは、fallback_fonts.xmlが参照されることは無かったため、設定している言語によって参照するxmlを変更し、表示するフォントを変えるための仕組みが実装されたということだろう。

結論:
system_fonts.xmlの先頭でfontfamilyをSystem等としてシステムフォントを設定、同様にMS PゴシックにKuma_LiteやTextar等の携帯端末向けAA対応フォント(PCとはフォントレンダラーの仕組みが異なるため、携帯向けのAA対応フォントでないと表示が崩れる)を設定し、その他のゴシック体のグループにも日本語フォントを指定しておくと良いだろう。通知領域のフォントはよく目にするので、sans-serif-lightもarial等のグループに一緒に含めておくと、フォントの統一感が向上する。
fallback_fonts-ja.xmlでは、MTL3mr.ttfの部分に使用したい日本語のフォントを指定すれば良い。
もちろんアクセス権の設定を忘れずに。

以下に私の設定例を示す。

system_fonts.xml
(前略)
<familyset>

    <family>
        <nameset>
            <name>system</name>
        </nameset>
        <fileset>
            <file>DroidSansJapanese.ttf</file>
            <file>DroidSansJapanese-Bold.ttf</file>
            <file>Roboto-Italic.ttf</file>
            <file>Roboto-BoldItalic.ttf</file>
        </fileset>
    </family>

    <family>
        <nameset>
            <name>MS Pゴシック</name>
            <name>MS PGothic</name>
        </nameset>
        <fileset>
            <file>textar.ttf</file>
        </fileset>
    </family>

    <family>
        <nameset>
            <name>sans-serif</name>
            <name>arial</name>
            <name>helvetica</name>
            <name>tahoma</name>
            <name>verdana</name>
            <name>sans-serif-light</name>
        </nameset>
        <fileset>
            <file>DroidSansJapanese.ttf</file>
            <file>DroidSansJapanese-Bold.ttf</file>
            <file>Roboto-Italic.ttf</file>
            <file>Roboto-BoldItalic.ttf</file>
        </fileset>
    </family>
(以下略)

fallback_fonts-ja.xml
            <file>MTLmr3m.ttf</file>
の部分を
            <file>DroidSansJapanese.ttf</file>
            <file>DroidSansJapanese-Bold.ttf</file>
            <file>Roboto-Italic.ttf</file>
            <file>Roboto-BoldItalic.ttf</file>
で置き換え。

fallback_fonts.xml
編集しない

尚、textar.ttfはGoogle Code -Textar Fontから、DroidSansJapanese.ttf及びDroidSansJapanese-Bold.ttfはANDROIDLOVER.NETのMyupdate-v1.4-JB.zipを利用している。フォントの変更方法についてはANDROIDLOVER.NETを参照して欲しい。多謝。

2012年6月8日金曜日

今更始めるEvernote -Clearlyによるスクラップブック式活用法-

最近Evernoteを積極的に使うようになった。人によってEvernoteの使い方は様々だろうが、私は今まで何度か使ったものの、あまりピンと来ず、その度に放置していた。クライアントもインストールしてはアンインストールを繰り返してきた(EvernoteのWindows向けクライアントはそれなりに容量を食う)。

この情況を大きく変えてくれたのがGoogle Chrome向けの拡張機能であるClearlyだ。
Clearlyによって整形された記事
Clearlyは上図のように記事を整形して、見やすくしてくれる。私は背景を暗めにし、文字と背景のコントラストを下げる設定にしている。また、フォントも自由に設定することができる。記事によってはうまく整形出来ないことも少なくないが、十分に便利な機能だ。

また、Clearlyの機能はこれだけではない。画像右にあるEvernoteのアイコンをクリックするか、設定したショートカットキーによって記事をEvernoteにクリップすることができる(記事の整形にもショートカットキーを設定できる)。

結局、私はEvernoteを利用するにあたって、気負い過ぎていたのだろう。何か活用法を見出して有効活用しなくてはいけない、それが出来ないのなら使っていても仕方がない、という感情があったのだろう。その点この方法なら気軽に利用することができる(その分無料ユーザは容量超過の危険性が上がってしまうが)。

この利用方法は、Evernoteをスクラップブックとして活用する利用法だ。Google リーダーによる記事の収集、Pocketによる後で読む、という情報収集の方法に、いつかまた読みたくなりそうな記事を検索するための方法を加えることができる。数ヶ月たってからまた記事を読みたくなったのに、記事のタイトルが思い出せない、という時にEvernoteを使って検索すれば、記事を引き出すことができる(はずだ。実際に効果が分かるようになるにはもう少し利用し続ける必要がある)。
Evernoteというサービスが終了してしまうとノートが失われてしまう、というリスクがある点には留意する必要があるが、それは他のあらゆるサービスについて同じことが言えるだろう。

結論として言えることは、Evernoteはまさしくノートである、ということだ。電子デバイスを用いた様々な活用方の提案が成されているものの、その活用法が持つ主要な側面はまさしく「Evernote」の名前通りであることが殆どだ。

「Evernoteを使うといいよ!という記事を今まで沢山みてきたけど結局全然使いこなせていない」という人がこの記事を読んで便利に活用してくれるようになれば幸いである。

2012年6月6日水曜日

私とGalaxy Nexus

実は先日Galaxy Nexusを購入した。契約としては、SoftBankのHTC Desireから違約金を支払ってのMNPによるドコモとの新規契約となる。私自身が最新のNexusブランドの端末を所有したかった事と、安かった事が理由だ。

心配だったPenTile配列の液晶や、大きすぎる4.65インチの液晶も、慣れてしまうと全く気にならない。前者については、よく見れば画面左端が緑色であることが分かるものの、Nexus Sとは異なり普段使っていて気になるほどは目立たない(とは言ってもPenTile配列でない液晶と比較すると普段の目の疲れは異なるだろうが)し、後者についてはLMT Launcher(要root)を利用すれば画面下部へ指を伸ばさなくても基本機能のボタンにアクセスできる様になる(連打はできなくなる)。

以前の記事でも書いたように、ICSのGUIに関しては気に入らない部分が多々あるが、慣れれば操作自体は十分に可能だ(依然として不満ではあるが)。

普段はAndroid Open Kang Project(通称AOKP)とカスタムカーネルのGlaDOSを組み合わせて使っている。最近は消費電力が気になるためLeankernelへの乗り換えを検討中だ。

ところで5月28日にGalaxy Nexusを落下させてしまい、液晶を破損させてしまった。幸いドコモのケータイ補償 お届サービスに加入していたため、5250円で修理してくれる上に代替機として同じGalaxy Nexusを借りることができた。
フロントパネルにひびが入ったGalaxy Nexus
電話をかけてから一日で代替機が届き、あまりの早さに驚かれされた。

最近はLumia 900やWindows 8タブレット、新しいiPad等気になる製品が多い。ThinkPad X1 Carbonもとても欲しい。物欲ぐぬぬ…

2012年2月8日水曜日

Ice Cream SandwichのGUIが好きになれない理由

Ice Cream Sandwich(以下ICS)ではUIが大きく刷新され、見た目は随分美しくなり、使い勝手も大きく変更された。しかし、私的には変更されたUIのダメな所が目立って見えてしまう。確かにアニメーション等の細部を見ればエレガントなのかもしれないが、根本的なGUIの設計がスマートフォンの利用形態に適していないように思う。その理由を2つ、以下に挙げる。

1. 再編成された下部のボタン

ICSでは、画面下部のボタンが4ボタンから3ボタンに再編成され、そのボタン構成は大きく変動した。今まで、画面下部には「戻る」、「メニュー」、「検索」、「ホーム」の4つのボタン(端末によっては検索ボタンが省略されていることもある)が配置されていたが、ICSからはこれが「戻る」、「ホーム」、[最近使ったアプリ]の3つになった。
この再編成ははっきり言って私はよくないと思う。2.3以前ではホームのロングタップによって最近使ったアプリの機能を呼び出していたので、それを鑑みれば完全に機能の削減しか行われていないと言える。Googleは、この機能の削減について、「使用可能な機能を常に画面上に表示しておきたい(参照)」ということを理由としているが、この主張にはどうも納得がいかない。
ICSのホームアプリは、初回起動時に、画面中央下のボタンを押すとアプリケーションの一覧が表示されること、アプリの起動方法等をチュートリアルとして表示してくれる。ICSでは、本体下部のボタンも画面内に表示されるのだから、ホームをロングタップすることで最近使ったアプリの機能を呼び出せることを明示すればよいだけの話である。
メニューを非表示にした理由は、これらの機能がアクションバー内部に組み込まれたからであるが、アクションバー自体がそもそもスマートフォンにおける小さな画面内に常に表示されるというナンセンスさを孕んでいる。これについては第2項で後述する。
端末の横幅を考えれば、4つのボタンを配置するのはベストのバランスであるように思う。押し間違いが生じたり、押しにくくなったり、あるいは機能について混乱が生じない限り、ボタンの数は多ければ多い程良いと私は考える。

2. アクションバーのナンセンスさ

メニューボタンはアプリにより表示位置が異なり、右上や右下に表示される。
Honeycomb以降、Googleはユーザに分かりやすいように、使用できる機能を常に画面内に表示する、というスタンスを示した。ユーザに分かりやすいインタフェースを作ろう、というGoogleの姿勢はおおいに評価できるものであるが、アクションバーの実装ははっきり言って気に入らない。
まず、アクションバーは画面の表示領域を狭める。これは、画面の広いタブレットならまだしも、画面の狭い(あるいは、できるだけ表示領域を広くしたい)スマートフォンにおいては致命的と言える。使用できる機能を常に画面内に表示したいならば、メニューボタンに対する動作が設定されたアプリケーションではメニューボタンを表示し、メニューボタンに対する動作が設定されていないアプリケーションではこれを非表示にすればよいだけの話である。
次に、アクションバーはメニューにより呼び出されるボタン類と異なり、基本的にアイコンのみの表示であり、テキストが表示されない。このため、アプリケーションによってはそのアイコンが何を意味するのか全く分からない。Gmailのアクションバーにある既読にする、はまだしも、アーカイブ等、誰が最初に見てすぐに分かるだろうか?(そしてアーカイブを押すと警告なしにアーカイブされてしまい、元に戻すのが面倒である)。更に言えば、アクションバーのボタンは既存のメニューで表示されるボタンよりも小さく押しづらい。
最後に、アクションバーの分断問題が挙げられる。これは、HoneycombとGingerbreadを統合する上で、画面の狭さをカバーするために採られたAndroidのAPIの実装上の問題であるが、これにより、アプリケーションによって、アクションバーが分断されていたりここにさらに補足、メニューボタンが画面右上にあるために非常に押しづらい、などの問題が生じる。画面が大型化する傾向にあるスマートフォンにおいて、片手で操作する上で画面上部にあるボタン、というのは非常に押しづらい。タスクバーの引き下げ等、大雑把な操作で良いものは問題ないが、小さなボタンのタップは困難を極める。

Android版Google Chrome「Chrome Beta」レビュー

殆どTwitterのまとめですが、一応記事をば。

Chrome Betaではブックマークを同期するとパソコンのブックマーク、その他のブックマーク、モバイルのブックマークの3つのブックマークに分けて表示されます。非常によく考えられた実装ですね。

パソコンで開いていたタブも同期できます。こちらは新新規タブの右下からアクセス出来、直接タブが同期される訳ではありません。先ほどのブックマークとよく開くページも併せて複数の機能が新規タブに統合されています。
どうやらChromeがコンピュータごとに同期しているようで、各々のChromeで現在開いているタブにアクセスできる機能のようです。PC側でスリープした場合は維持されますが終了した場合はここに表示はされません。

タブはカードのスタックというメタファで表現され、一番上や下でさらにフリックするとカードが上下に傾き、横にフリックするとタブを閉じます。そこ、webOSとか言わない!全体がICSのGUIと統一されていますね。

メニューには一通りの機能が集約されています。ヘルプは背景のページに、その他の端末はタブの同期機能にアクセスします。でも戻る・進む・ブックマークは再下段に実装すべきだったのではないかなぁ…

検索エンジンはGoogle、Yahoo!、Bingから。残念ながらフルスクリーンの機能はありません。非常に優れたGUIのページ内検索機能を内蔵しています。

Chrome Betaにおいて、AAはずれこそ殆どしませんが、ページ幅の扱いの関係からしばしば激しく改行が入ってしまう上、フルスクリーン機能も無いので、AA表示には向かないと言えるでしょう。AndroidでのAA表示にはFirefoxが向いています。
フォントサイズは極小でもあまり小さくならないので結局AA表示は困難です。

又、ICS以降の各種ブラウザの挙動同様 file://.* で端末内のファイルにアクセスできますが、ディレクトリを表示できない点も同様です。PC版のChromeではディレクトリにアクセスできるのでここは何とかしてほしいところです。

ページの保存機能は(たぶん)ありませんが、PC側でDev チャンネル版ChromeとChrome to Mobileを組み合わせることでウェブページのスナップショットを送信し、オフラインでも見ることができます。私はChrome to Phoneをアンインストールして乗り換えました。

2012年1月4日水曜日

Ice Cream Sandwichのフォント指定とAA対応

ICSからはxmlによるフォントの設定が可能になったので、今回はNexus Sを例にICSにおけるフォントの導入についてまとめる。今回は、MS Pゴシックをmonaya.ttfに置換し、通常の日本語文字にはモトヤフォントを用いることにする。
まずはSDKを導入する。Android SDK revision 16ではいつのまにかfastbootが復活していたので、必要なコンポーネントは最新のAPIのSDK Platform(これにモトヤフォントが含まれる。持っている場合は不要)、Tools->Android SDK Platform-tools(adbやfastboot)、Google USB Driver package(ドライバ)の3つを揃えれば良い。SDKの他に必要な物はClockworkMod Recooveryとmonaya.ttfの2つ(ぐぐって手に入れてください)。
ここから先はドライバの導入とパスの通しが終了していることを前提に記事を書くので、それが済んでいない人は過去記事を参照して頂きたい。
まず、フォントを指定するxmlファイルを取得する。管理者権限不要の任意のディレクトリをカレントディレクトリにし、ClockworkMod Recovery側でsystemをmountしたら、
  • adb pull /system/etc/system_fonts.xml system_fonts.xml
  • adb pull /system/etc/fallback_fonts.xml fallback_fonts.xml
と入力し、フォントを指定するxmlを取得する。
取得したxmlをUTF-8とUNIXフォーマットの改行コードを出力できるテキストエディタ(notepad++等)を用いて編集する。fallback_fonts.xmlでは先に書いたフォントが優先的に使用されるので、MTLc3m.ttfをxmlの文法にそって指定すればよい。system_fonts.xmlでは、MS Pゴシックの置換を行うように指定するので、以下のような記述をxmlの文法に沿って記述してやればよい。


    <family>
        <nameset>
            <name>MS Pゴシック</name>
            <name>MS PGothic</name>
        </nameset>
        <fileset>
            <file>monaya.ttf</file>
        </fileset>
    </family>
こうすることでMS Pゴシックをmonaya.ttfで置き換えて表示することができる。今のところ、Android上ではAA対応フォントも微妙にずれてしまうので、monaya.ttfが最もずれないで表示することができるフォントのようだ。
xmlの編集ができたら、フォントは/system/fonts/に、xmlは/system/etc/に送ってやる。

  • adb shell
  • cd system/etc
  • mv fallback_fonts.xml fallback_fonts.xml.old
  • mv system_fonts.xml system_fonts.xml.old
  • exit
  • adb push fallback_fonts.xml /system/etc
  • adb push system_fonts.xml /system/etc
  • adb push monaya.ttf /system/fonts
  • adb push MTLc3m.ttf /system/fonts
  • adb shell
  • cd system/etc
  • chmod 644 fallback_fonts.xml
  • chmod 644 system_fonts.xml
  • cd ../fonts
  • chmod 644 monaya.ttf
  • chmod 644 MTLc3m.ttf
  • exit
これでMS Pゴシックはmonaya.ttfに、その他の日本語+αはモトヤフォントに変更される。あやまって文鎮化させたり不具合が起きても自己責任で。最後になるが、AA対応フォントがその文字に対応していても、うまく表示できない文字が存在するようだ(※)。謎である。

2011/01/04追記
※FirefoxやOperaでは正常に表示されるため、Android内蔵ブラウザのレンダラーが抱える問題のようです。Operaでは文字幅こそ正常なものの、一部のフォントが別のフォントで置き換わっている(ように見える。少なくともFirefoxとは異なるレンダリング結果)症状や、勝手にメールアドレスとして解釈してしまうようです。一方Firefoxはそのようなことはないものの現行版では全画面表示が行えません(ステータスバーを非表示にできません)。一長一短ですね。
デフォルトブラウザ
Firefox
Opera
正しい表示(Google Chrome 16 Windows版)
デフォルトブラウザ
Firefox
Opera
正しい表示(Google Chrome 16 Windows版)
上記画像は誠に勝手ながら◆20L.ujnjAg氏の作品「【fallout】 人工物は善なる存在になりたいようです」を使わせていただいています。多謝。

2011年12月31日土曜日

Nexus SがUSB接続を認識しなくなってから復旧までの作業

Androidマーケット100億DL記念10円セールもあり、なんとなくアンインストールしていなかったアプリケーションのリストラも含めて完全に初期化しました。
今回生じた不具合(Nexus S側の不具合か私側が起こした問題かは不明)は、Android側、PC側共にUSB接続を認識しなくなるというもの。通常起動中は充電こそするものの、PC側もAndroid側も正常接続はおろか接続していることすら認識しなくなってしまいました。ちなみに起動中は認識しませんが、bootloaderでのfastbootコマンドやClockworkmod Recoveryでのadbコマンドは通るので、ハードウェアの故障ではなくソフトエラーであることはほぼ確定できました。
ここからDLしてきたClockworkMod Recovery 5.0.2.0をflashして
  • wipe data/factory reset
  • wipe cache partition
  • wipe dalvik-cache
  • wipe battery stats
を全て行いましたが、それでも治りませんでした。何度か色々な方法を試してみた所、一度だけ復活しましたが、いつの間にかまた認識しなくなってしまいました。
実は(分かっている人は分かっていると思いますが)これだけでは完全な初期化はできていません。完全な消去を行うには以下の手順を実行する必要があります(参考URL)。
  • wipe data/facvoery reset
  • format /system
  • format /boot
完全消去を行ったら、ここからDLしてきたzipをinstallしましょう。zipはClockwork Mod Recoveryを起動した状態でadbコマンドから送信することができます(adbコマンドの使い方はオプションコマンド無しでadbコマンドを実行することで確認可能)。/sdcardをmountした状態で行うのがベターでしょう。それなりに時間がかかる(数分程度)ので、慌てず騒がずゆっくり待ちましょう。
以上の手順で/sdcard下のディレクトリ以外のデータは失われたものの、復旧することができました。初期化されたクリーンな状態のガジェットに触ると何とも言えずニタニタしてしまいますね。

それではみなさん、良いお年を。