Androidを英語設定にしたまま日本語をきれいなフォントで表示する
2016/05/26 追記
シンタックスハイライトとか要らんやろみたいなあたりをどうにかしたり常識の記述をどうにかした.読み直すとパーミッションnoobだったためなのか,chmod 777とかやってて完全にガバガバなのでもう少しどうにかならんかったのかという感じです.つか書いてからもう2年弱経ってるので信用しないほうが良いです.
追記ここまで.
お元気でしょうか
私は死んでます
久しぶりにこういう記事書くので緊張している
そもそも
英語を勉強している人に携帯を英語表記に設定している人が多かったのでまねしようとしたら,日本語フォントが中華フォントになった
しかし,Androidに対する知見が少ないために,元のフォントに戻す方法を知らなかったので調べた
手順
前提
- root権限取得済み
- adb shellを使える状態
- 2014/11/11現在の情報 今後xmlファイルの内容が変更される可能性がある
環境として Galaxy Nexus(SC-04D)/ParanoidAndroid 4.6-BETA6 を用いた.
前座
Androidがフォントの読み込む際,優先順位は
/system/etc/fallback_font.xml
に記述されている順である.
システム言語が英語に設定されている場合,最下部には
<family> <fileset> <file>DroidSansFallback.ttf</file> </fileset> </family> <family> <fileset> <file lang="ja">MTLmr3m.ttf</file> </fileset> </family>
と書いてある.通常,日本語設定では
<file lang="ja">MTLmr3m.ttf</file>
が読まれ,日本語はきれいなモトヤLマルベリ3等幅でレンダリングされる.
しかし,英語設定の場合ではその上の
<file>DroidSansFallback.ttf</file>
が読まれ,クソみたいなフォントでレンダリングされる.
今回はこの記述を改変する.
リマウント
通常ではAndroidの/systemは以下のパーミッションでマウントされる.
$ ls -l ... drwxr-xr-x root root <タイムスタンプ> system ...
そこで,
$ su # mount -o rw,remount -t ext4 /dev/block/foobar/system /system
これで/systemをいじれるようになった.
なお,ファイルシステムおよびfoobarの部分は引数なしのmountで確認できる.
この状態で放置するのはかなり恐ろしいことのような気がする.インターネット接続を切断しておいたほうが良いかもしれない.
ファイルいじり
目標のファイルは/system/etcにある.
# chmod 777 /system/etc
を叩いて/system/etcを読み書きできるようにする.モード指定は755でも差支えないだろう.
ちなみにadb shellでは文字列によるモード指定は使えないようである.*1
次に目標のファイルをPC上に持ってくる.別のコマンドプロンプトで
>adb pull /system/etc/fallback_fonts.xml
を叩けば,adbを動かしているフォルダ(この環境ではsdk/platform-tools)にファイルがコピーされる.
これをエディタで開いて最下部を見ると,冒頭で書いたようになっている.
<family> <fileset> <file>DroidSansFallback.ttf</file> </fileset> </family> <family> <fileset> <file lang="ja">MTLmr3m.ttf</file> </fileset> </family>
これを,
<family> <fileset> <file>MTLmr3m.ttf</file> </fileset> </family> <family> <fileset> <file>DroidSansFallback.ttf</file> </fileset> </family> <family> <fileset> <file lang="ja">MTLmr3m.ttf</file> </fileset> </family>
とすれば,モトヤマルベリがDroidSansFallbackよりも先に読み込まれる.
後片付け
先ほど編集したファイルを元の場所に戻す.コマンドプロンプトで,
>adb push fallback_fonts.xml /system/etc
とした後,ファイルの属性を整える.
# chmod 644 /system/etc/fallback_fonts.xml # chown root.root /system/etc/fallback_fonts.xml
/system/etcも元に戻す.
# chmod 755 /system/etc
再起動
# sync # reboot
終了
調べるのにめっちゃ時間がかかった
2年位前まではfallback_fontsは言語の種類だけあったらしい(言語設定によって変わっていた?)が,今は一つのファイルに集約されているので混乱した
ちなみにキャリア公式のロムなら/system/vendor/の中にもあるらしく,そこも書き換えなければならないらしいのでめんどい
ここまでするならむしろ普通に英語勉強したほうが良い
PCK2014
パソコン甲子園出場者のみなさん,お疲れ様でした
本選出場者のみなさん,頑張ってください
俺はもう疲れたよ...
5問目がボーダーかと思ってたら実は4問目がボーダーだったみたいですね
1問目 問題印刷中に解法を言われてマジで焦る
というか開始3分位でacceptもらってる団体どういうことだよ
2問目 えっこれはなんかえらく簡単ですね
3問目 あっ!この問題過去問でやったことある!→WA1回
ここまで10分
4問目 なぜかWA.飛ばす→ 最後の一時間をすべて注ぐものの完全にダメ
5問目以降 !!??!?????
相方が3ヶ月前までプログラミングの初心者だったのに,当日には1問目を見た瞬間に解法を言ってくれるくらいに成長していたので最強
俺は結局探索を身につけられなかったので雑魚
おかげで5問目以降すべてできなかった感じになった
しかしなぜ4問目でWAが出るんだ...ここで解けていたら激本戦出場ユウテワンチャンアルッショコレ状態だったんだが
実力不足が否めない
おわり
文字列処理できない雑魚
それは私のことだ
C++のコードでは暗黙にusing namespace stdです,あとmain関数は省略
おおよそここから引用しました*1
復習
Cで文字列を扱うとき
#include "stdio" char s[100]; scanf("%s", s);
のようにする
使えそうな関数
stringではいろいろ関数が使える
ここでは競技プロコンで使えそうなやつを列挙
#include <string> string str = "hoge"; int a = 0; bool b; a = str.length(); //aに文字列の文字数を格納 a = str.size(); //上と宣言まで同じ 使い分けはよくわからない b = str.empty(); //空の文字列かどうかを判定 str.reserve(new_size); //文字列をnew_sizeに変更(new_sizeはsize_type型)
ちなみにsize_type型ってのは大抵size_t(unsignded int)らしい*2
文字列から数値への変換はいろいろありすぎて書くのが面倒くさい
<cstdlib>のatoiとか<sstream>のisstringstreamとかいろいろあるらしいが詳しい使い方はよくわかりません*3
おわり
なんかしらんが最近他の高専の方々とつながりができた,たのしい
夏ですね
おはようございません
パソコン甲子園予選が2週間後に迫る中,みなさんいかがお過ごしでしょうか
模擬予選をしたが4問しか解けずこれで大丈夫なのかという感じ
今年が地元(から半径30km以内)で浴衣JKを見られる最後のチャンスだったけど見られなさそうだしつらすぎる
浴衣JKを地元(の近く)で見られる最後のチャンスだ
— hoge (@Gedyra) 2014, 8月 28
浴衣JKで私と水郷祭に一緒に行ってくれるという奇特な方はいらっしゃいませんでしょうか
— hoge (@Gedyra) 2014, 8月 28
やっぱみんな交通費が大変とのことですね
— hoge (@Gedyra) 2014, 8月 28
どう考えても後者の日本語がヤバイ
引っ込み思案を治したい
コーディング速度を鍛えたい
以上
あ,マーニー最高でした 原作ほしいです
9/2追記
いろいろあったが浴衣JKと祭りに行けた
まあとにかく浴衣JKと祭りを歩くという目標は達成できました、ありがとうございました
— hoge (@Gedyra) 2014, 8月 30
初めてのPythonと動的型付けについて
テスト中だがPythonやってみようと思った
python、簡単な処理書くのだとCとかより全然楽だし最高
— hoge (@Gedyra) 2014, 8月 2
C言語でHello worldしようとすると
//C言語 #include <stdio.h> void main { printf("Hello, World!"); }
という感じだけど、Pythonなら
#Python print "Hello,World!"
これだけでいいらしい
この手軽さは非常に良い、The スクリプト言語という感じ
ところがどっこい
Cは静的型付け、Pythonは動的型付けだったのだ!
いままでずっと静的型付け言語ばかりを触っていたために、動的型付けの書き方に慣れない
wikipediaによれば動的型付けとは、
プログラミング言語で書かれたプログラムにおいて、変数や、サブルーチンの引数や返り値などの値について、その型を、コンパイル時などそのプログラムの実行よりも前にあらかじめ決めるということをせず、実行時の実際の値による、という型システムの性質のことである。*1
らしい
たとえば、
//変数hogeに標準入力から整数を代入 int hoge; scanf("%d", &hoge);
みたいなことするときに、Pythonだと
#変数hogeに標準入力から”何か”を代入 hoge = raw_input()
になる
変数hogeの型はプログラムの実行中に決まるので、上ではraw_input関数からの戻り値によって変化する
つまり、raw_inputから値が来るまでは、hogeは文字列である可能性もあるし、数値である可能性もある
ということは、コーディング中に常に変数がどんな型をとっているのかを意識しないといけない気がする
そもそも変数の型が最初から決まってないのが非常にむず痒い、宣言がないだけでコンパイルできなさそうな気さえしてくる*2
しかし宣言文が無いことでコード自体は短くなるし、これに慣れればコーディングも短い時間でできるような気がしなくもない(憶測)