GEditのショートカットキーを変える

GEdit は標準ではショートカットキーが変えられませんが、EditShortcuts プラグインを入れる事で設定できるようになります。
 
http://empty.23inch.de/pmwiki.php/Main/EditShortcuts
 
tgzファイルをダウンロードし、中の INSTALL ファイルを参考に、
editshortcuts/ フォルダと editshortcut.gedit-plugin ファイルを ~/.gnome2/gedit/plugins にコピーしてインストールします。

cp -R editshortcut/ editshortcut.gedit-plugin ~/.gnome2/gedit/plugins

 
インストール後、プラグインを有効にするとツールメニューに”Edit Shortcuts”という項目が増え、そこから各種ショートカット設定ができるようになります。
 
たとえば、RedoキーがデフォルトでCtrl+Shift+Zなのを、WindowsのようにCtrl+Yに変更したい、という場合は

GEditWindowActions > EditRedo

をダブルクリックすると新規ショートカット設定ウィンドウが開くので、
Ctrl+Yを入力して適用ボタンを押す、といった感じです。

Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる

Xperia(2.1)で検証していて、別のXperia(1.6)で動かしたところこんなエラーが発生。

E/AndroidRuntime(10100): Uncaught handler: thread main exiting due to uncaught exception<br />
E/AndroidRuntime(10100): java.lang.RuntimeException: mBaselineAlignedChildIndex of LinearLayout set to an index that is out of bounds.<br />
E/AndroidRuntime(10100): 	at android.widget.LinearLayout.getBaseline(LinearLayout.java:151)<br />
E/AndroidRuntime(10100): 	at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:644)<br />
E/AndroidRuntime(10100): 	at android.widget.LinearLayout.onMeasure(LinearLayout.java:280)<br />
E/AndroidRuntime(10100): 	at android.view.View.measure(View.java:7755)<br />
E/AndroidRuntime(10100): 	at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:892)<br />
E/AndroidRuntime(10100): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)<br />
E/AndroidRuntime(10100): 	at android.widget.ScrollView.onMeasure(ScrollView.java:276)<br />
E/AndroidRuntime(10100): 	at android.view.View.measure(View.java:7755)<br />
E/AndroidRuntime(10100): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)<br />
E/AndroidRuntime(10100): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)<br />
E/AndroidRuntime(10100): 	at android.view.View.measure(View.java:7755)<br />
E/AndroidRuntime(10100): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)<br />
E/AndroidRuntime(10100): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)<br />
E/AndroidRuntime(10100): 	at android.view.View.measure(View.java:7755)<br />
E/AndroidRuntime(10100): 	at android.widget.LinearLayout.measureVertical(LinearLayout.java:464)<br />
E/AndroidRuntime(10100): 	at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)<br />
E/AndroidRuntime(10100): 	at android.view.View.measure(View.java:7755)<br />
E/AndroidRuntime(10100): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)<br />
E/AndroidRuntime(10100): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)<br />
E/AndroidRuntime(10100): 	at android.view.View.measure(View.java:7755)<br />
E/AndroidRuntime(10100): 	at android.view.ViewRoot.performTraversals(ViewRoot.java:748)<br />
E/AndroidRuntime(10100): 	at android.view.ViewRoot.handleMessage(ViewRoot.java:1614)<br />
E/AndroidRuntime(10100): 	at android.os.Handler.dispatchMessage(Handler.java:99)<br />
E/AndroidRuntime(10100): 	at android.os.Looper.loop(Looper.java:123)<br />
E/AndroidRuntime(10100): 	at android.app.ActivityThread.main(ActivityThread.java:4203)<br />
E/AndroidRuntime(10100): 	at java.lang.reflect.Method.invokeNative(Native Method)<br />
E/AndroidRuntime(10100): 	at java.lang.reflect.Method.invoke(Method.java:521)<br />
E/AndroidRuntime(10100): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)<br />
E/AndroidRuntime(10100): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)<br />
E/AndroidRuntime(10100): 	at dalvik.system.NativeStart.main(Native Method)<br />

どうも1.6の不具合らしく、LinearLayout, TableLayout あたりをaddView()なしで表示しようとするとこういうエラーになるようで…。
何も表示しないビュー(テキストなしのTextView)を該当のレイアウトにはめ込んだら問題なく動くようになりました。

参考:

Issue 3484 – Creating LinearLayout without child views programatically fails.(Android Issues)

Ubuntu の起動音を無音にする

ネットブックやノートにUbuntuを入れたのに、音が気になって公共機関で立ち上げられない、という事がないように無音化の手順を書いておきます(Ubuntu 10.10で動作確認)。
 
1.システム->設定->サウンドを開く。
2.サウンドのテーマを「Ubuntu」から「なし」に変更。
3.設定を閉じる。
4. 無音system-ready.ogg (下記参照)をダウンロードする。
4./usr/share/sounds/ubuntu/stereo/system-ready.ogg を無声音ファイルに差し替え

sudo mv /usr/share/sounds/ubuntu/stereo/system-ready.ogg{,.original}
sudo cp system-ready.ogg /usr/share/sounds/ubuntu/stereo/system-ready.ogg

 
■ system-ready.oggについて
音量の控えめなものなら何でもいいですが、完全に静音にしたい場合は下のファイルに差し替えてください。
 
無音system-ready.oggファイルをダウンロード
 
参考:
Re: Startup Sound (Tack-ack-ack)(Ubuntu Forum)

apk パッケージの AndroidManifest.xml を解析するには

.apk ファイルに含まれる AndroidManifest.xml はバイナリ形式になっているため、そのままでは設定を読むことが出来ません。
 
元のXMLに戻すのではなく、XMLの情報を読みたいだけであれば、Android SDKに付属している aapt (Android Asset Packaging Tool)というツールを使うことで可能です。
 

aapt l -a <apkファイル>

aaptプログラムはapk作成のためのツールです。
それぞれのバージョン毎に独立した実行ファイルになっていて、platforms 以下それぞれのSDKバージョンのフォルダ以下に存在しています。
(追記)以前は platforms以下に分かれて配置されていましたが、現在は platform-tools フォルダに統合されました。

android-sdk/platform-tools/aapt

実行すると以下のようなダンプが出力されます。
AndroidManifest.xml について書かれているのは “Android Manifest:”以下ですね。

res/drawable/icon.png
res/layout/items.xml
res/layout/main.xml
AndroidManifest.xml
resources.arsc
classes.dex
META-INF/MANIFEST.MF
META-INF/CERT.SF
META-INF/CERT.RSA
 
Resource table:
Package Groups (1)
Package Group 0 id=127 packageCount=1 name=com.example.foo
~中略~
Android manifest:
N: android=http://schemas.android.com/apk/res/android
  E: manifest (line=2)
    A: android:versionCode(0x0101021b)=(type 0x10)0x3
    A: android:versionName(0x0101021c)=”1.2″ (Raw: “1.2”)
    A: package=”com.example.foo” (Raw: “com.example.foo”)
    E: application (line=6)
      A: android:label(0x01010001)=@0x7f040000
      A: android:icon(0x01010002)=@0x7f020000
      E: activity (line=7)
        A: android:label(0x01010001)=@0x7f040000
        A: android:name(0x01010003)=”.Foo” (Raw: “.Foo”)
        E: intent-filter (line=9)
          E: action (line=10)
            A: android:name(0x01010003)=”android.intent.action.MAIN” (Raw: “android.intent.action.MAIN”)
          E: category (line=11)
            A: android:name(0x01010003)=”android.intent.category.LAUNCHER” (Raw: “android.intent.category.LAUNCHER”)
    E: uses-sdk (line=16)
      A: android:minSdkVersion(0x0101020c)=(type 0x10)0x3

インテントごとの実行権限など一通りの設定を参照することが出来ます。
その他にもリソースID情報などもapkに関係する様々な情報を得られます。
 
参考:
How to parse the AndroidManifest.xml file inside an .apk package(stackoverflow)
エンコードされたAndroidManifest.xmlをデコードする

Google Maps – スター付きアイテムの名前を編集するには

Googleマップにログインし、スターをつけると表示中の住所や建物名で保存され、地図上から変更する事は現在できません。ですが実体はGoogleブックマークなので、ブックマークの変更と同じ手順で編集することができます。
 
– スター機能について・・・
Google マップでのスター機能を使うと、地図上の任意の場所に星マークをつけて記録することができます。他の人から見られることはないので、お気に入りの店や待ち合わせ場所などの記録に便利です。車の駐車場所を忘れないために使っている方もいるようですね。

PostgreSQL で to_dec

to_hex() の逆関数は標準では提供されていません。
PL/pgSQL が使える環境であれば「Conversion between hex and dec numbers(16進数と10進数の変換)」(SQL Tricks)のページで定義している to_dec() 関数を使うのが便利です。

=# select to_hex(11);
    to_hex
   ——–
    b
   (1 row)
postgres=# create or replace function to_dec(text)
           returns integer as $$
           declare r int;
           begin
             execute E’select ”||$1|| E’\’::integer’ into r;
             return r;
           end
           $$ language plpgsql;
CREATE FUNCTION
postgres=# select to_dec(‘ff’);
 to_dec


—-
    255
(1 row)

 
別の方法として、16進数を1度ビット型に変換することでも10進数に変換できます(桁数が分かっている場合のみ)。
たとえば、2桁の16進数文字列 の hextext というカラムを10進数に変換した居場合は次のようになります。

SELECT (‘x’ || hextext)::bit(8)::integer — bit(桁数の4倍)

CSS の float を解除する 3つの方法

http://whisper.sakura.ne.jp/diary/2009/06/cssfloat.html
すぐ忘れるのでメモ。
空タグを使わない方法については float する対象をコンテナで囲むのは共通。
コンテナに対して clearfix (:afterに見えない要素を置いてそこでclearする)を使うか、
overflow:hidden をかけるかの2パターン。
 
参考:
floatのclearについて
図解で分かりやすいです。
clearは「floatの解除」ではない

Internet Explorer – PNG が表示されなくなった

IE8 を使っていて、Google トップページなどでPNG画像が表示されなくなってしまった。
原因を探っていて、そういえば QuickTime をアンインストールしたなと思い出し、ここからレジストリ設定ファイルを落としてきて修復したら直りました。