2013年5月30日木曜日

Xperia SX フォント変更つづき

フォント変更がよくわからなすぎてないた

とりあえず、あずきフォント様のうずらフォントを導入。

欧文太字(Roboto-Bold)にあずきフォントをセットしようとすると
なんか再起動ループに突入してモウヤダってなったので、
とりあえず日本語フォントだけ変更しました。

あっ、あとなぜかSPモードメールのメール作成が出来なくなった。
たぶん、日本語フォントに太字を設定してるとダメとかだと思います。

それからこちらのサイトを参考に、データ通信のメニューに「WCDMAのみ」を追加。
これで隠しコマンドアプリは不要ですね。

近いうちに電源ボタン長押しの再起動メニューを導入したい。

であー

2013年5月28日火曜日

Xperia SX root化とその後

フォントをadb pushする際に綴りを間違えてexernal_sd/fontsとかやって、
「あれー何でpushされてないんだろう」とかやった間抜けな雨です。

さらにその後綴りを修正してpushし直したら今度はexetrnal_sd/fontsになって、
最後にゴミフォルダを削除する際に似たような名前が3つ並んで激しく緊張した雨です。

おまけにpushするフォントの名前をDroisSans.ttfにしちゃって再起動ループに突入した雨です。

とりあえず、まず申し上げたいのはCWMの便利さ。
再起動ループになっても起動できるし、その状態でsystemもマウントできるんで、
多少テキトー設定しても何とでもなっちゃう素晴らしさ。製作者様には感謝です。
絶対入れてくださいネッ!

2013年5月27日月曜日

SO-05Dのカスタマイズ

root化後、何やったか忘れないようにメモ。

①Superuser→SuperSU
パズドラ対策です。/system/app/の中にsuperuser.apkがあるとパズドラ起動しないんで、
SuperSUに乗り換えました。

②カメラ音の削除
/system/media/audio/ui/camera_click.oggのリネーム。
前回書いたことです。

③CWMインストール→バックアップ。
念のためです。

④AdAwayのインストール
広告うざいよねー。

⑤SetCPUのインストール
なんか有名らしいし、スリープ時のバッテリー消費減らせるなら助かる。

⑤フォント変更
作業中に再起動ループに突入したのでリストア→③からやりなおし。
その後、日本語フォントの変更はできたんだけど英語フォントの変更で何度か固まった。
とりあえず今日は遅いのでいったん断念。
(ちなみに日本語フォントは、system/fontsにフォント入れて権限設定して、
vender/etc/fallback_fonts.xmlいじったら変わった)

⑥カメラ音の変更
ファイルをリネームする方法はスマートじゃない気がしたので、
ファイル名は元に戻してbuild.propを編集し、シャッター音をオフにできるように修正。
カメラアプリの設定で「シャッター音」ON/OFFが切り替えられるようになります。
OFFにすればSS撮影時にも連動して音ならなくなります。

(追記)
寝る前にsd speed increaseも入れた。
明日からは逆に無効化する作業です。こっちのが怖いなぁ。

2013年5月26日日曜日

SO-05Dのスクリーンショットを無音化したかった

Android4.0でスクリーンショット機能が標準でサポートされたのはいいんですが、
マナーモードにしていても「パシャッ」ってなるのが非常にウザかったので、
この音を無音にするために、いくつかSS撮影アプリを試してみました。

試したのは、
ありし日の気分(改)様2010年9月の記事に記載されているScreenGrab、
Playストアにある「Screen Capture No Rooting」「Screenshot Ultimate」の3つ。

自分はヘッポコなので詳しくはわからないですが、めっちゃザックリ言うと
「androidの権限では/dev/graphics/fb0からframebufferを取得できないが
shell権限なら何とか可能なので、shell権限でサービスを起動して
framebufferをアプリにバイパスする」
みたいな感じっぽいです。

ただ、ScreenGrab以外のアプリについてはshellで実行するファイルのインストール先が
/data/local/になってるんですが、自分の端末は/data/local/のアクセス権がない。
なんかtmpにシンボリックリンクして権限変更させる穴の修正でそうなったようです。

また、ScreenGrabも試しましたがframebufferの取得がうまくいきませんでした。
調べたところ「FBIOGET_FSCREENINFO Bad file descriptor」みたいなこと言われてるので、
たぶん端末の問題なんでしょう。

で、キューブ実験室様の記事を参考に結局root化しちゃいました。
root化してしまえばこっちのもの、ESファイルエクスプローラーで
/system/media/audio/ui/camera_click.oggを別の名前にリネームして終了。
無事カメラ音が消えました。

あ、あとこの方法でroot化するとsuperuser.apkが入るのでパズドラ動かなくなりますね。
動かすためにはSuperuserからSuperSUに乗り換える必要があります。

さて、せっかくroot化したんでいろいろとカスタマイズしよっかなw

ではではー

2013年5月25日土曜日

SyntaxHighlighterを導入してみた

ぱっと思いつくネタがないので、とりあえずネタは使い古されたラムダ式。
クリックするとボタンのテキストを変更します。
        public Form1()
        {
            InitializeComponent();

            button1.Click += (s, e) =>
            {
                Button button = s as Button;
                button.Text = "Hello";
            };
        }
お仕事の成果物でこの書き方するのは個人的にはどうかと思いますが、
不具合の原因調査とか、お家で作る小さなプログラムであれば
デザイナからイベントハンドラ登録して~、とかってするよりこっちのほうが楽かもですね。
これなら、いらなくなったら丸ごと消せますし。

特に不具合調査時にデザイナから試しにイベント登録してブレーク置いて…とかやってる時に、
あとでそのイベントいらなくなったときに単純にイベントだけ消してビルドエラーが!
みたいなことをやったのは自分だけではないはずです。 …よね?

2013年5月24日金曜日

DataGridViewの先頭行が勝手に消える

初のまともな投稿は.NETネタ。

何かと問題が多いWindows FormsのDataGridViewですが、こいつのせいでまた迷惑こうむりました。
現象としては「先頭行が勝手に消える」というもの。


サンプルコードをば。
まずは、新規プロジェクトを追加し、フォームに適当なBindingSourceとDataGridViewを追加します。
また、コード側にはNameプロパティとAgeプロパティを持ったPersonクラスを作っておきます。
で、BindingSourceのDataSourceをPersonクラスにして、DataGridViewのDataSourceはBindingSourceにする。
この状態で実行すると、フォームにはName列とAge列がある行追加可能なDataGridViewが表示されるはず。


ここでButtonを1個追加し、クリック処理に下記のような処理を記述します。

        private void button1_Click(object sender, EventArgs e)
        {
            bindingSource1.DataSource = new List<Person>();

            dataGridView1.Focus();
            dataGridView1.AllowUserToAddRows = false;

            bindingSource1.DataSource = new List<Person>()
            {
                new Person(){Name = "一郎", Age = 10},
                new Person(){Name = "次郎", Age = 9},
            };
        }

これで、ボタンを押すと画面のグリッドに一郎さんと次郎さんが表示され、行追加が不可能になります。

…が。なぜか次郎さんを選択した瞬間に一郎さんが消えてしまいます。

これ、キモになる条件は
①BindingSourceを使ってデータ連結されている新規行追加可能なグリッドで、
②データソースに空のリストが設定されている状態で、
③データグリッドにフォーカスを当て、そのままフォーカスを外さずに、
④データグリッドのAllowUserToAddRowsプロパティをfalseに変更し、
⑤その後、データソースに空ではないリストを設定した場合
という感じです。

ざっくりとした理屈ですが、新規行追加状態のグリッドにフォーカス当たると、
グリッドの内部的なステータスが「新規行追加中」になります。
その状態で新規行追加を封じることによって、内部ステータスと実際の状態の間に不整合が発生し、
あとで一郎さんのRowValidatingが発生した際に、新規行の登録をキャンセルしたものとみなされて行が消える、
というのがおおまかな流れのようです。

ちなみにデータソースにList<T>ではなくBindingList<T>を使用していた場合はこの現象発生しません。
まあ、BindingSource使うならBindingList<T>使えってことなんでしょうかね。


DataGridViewはちょっと条件が揃うと急に謎な動きをして未だに怖いですね。
WPFのDataGridよりはだいぶマシだと思いますがw
fc2で3か月坊主くらいになったblogを再開しようと思い立った。
トップ絵はパズドラあるあるです。
よろしくお願いします。