Desire HDをつないでadbからアクセスできるようにするには

はじめに

Ubuntuを使っていたと思ったらなぜかルートファイルシステムがごっそりFedora 18になっていた、という愉快な経験を最近しました。 前向きにOSを再インストールすることにしたのはいい思い出です。(白目)

再インストールしたので、PCからスマートフォンにadbでアクセスするときの設定もやりなおしです。

Desire HD(001HT)という四年前の端末ですが、まだなんとかだましだまし使っています。

udev rulesの再設定

udevのrulesを書きます。 idProductについては、lsusbで調べます。

% cat /etc/udev/rules.d/51-htc-desire-hd.rules
# debug mode(recovery)
SUBSYSTEM==”usb”, ATTRS{idVendor}==”0bb4″, ATTRS{idProduct}==”0ca2″, MODE=”0666″
# normal mode
SUBSYSTEM==”usb”, ATTRS{idVendor}==”0bb4″, ATTRS{idProduct}==”0c91″, MODE=”0666″

通常時とリカバリではidProductが違うので注意が必要です。

adbの再起動

sudo adb kill-server
sudo adb start-server

接続確認その1

あとはadbで見えているか確認します。

% adb devices
List of devices attached
HT0B5RX04331    device

接続確認その2

adb reboot recoveryで今度はリカバリモードにします。

% ./platform-tools/adb devices
List of devices attached
HT0B5RX04331    recovery

どちらでもadbで見えていることが確認できました。 これで安心してカスタムROMを焼けますね。

awesomeのmasterをインストールするには

ソースコードを手に入れる

awesomeインストールしたばっかりですが、masterを試してみたらという悪魔の囁きが聞こえた気がしてぶちこんでみました。

それっぽいドキュメントがあるような気がしたが、そうでもなかった。 Building awesome - awesome

まずは、git clone。

git clone http://git.naquadah.org/git/awesome.git

必要なパッケージのインストールとmake

xcbのパッケージに依存しているので、開発パッケージをいろいろインストールしないといけない。

自分の場合は以下を追加でインストールする必要があった。

 sudo apt-get install libxcb-cursor-dev libxcb-icccm4-dev libxcb-keysyms1-dev libxcb-util0-dev libxcb-xinerama0-dev libxcb-xtest0-dev libxcb1-dev libxdg-basedir-dev

人によっては他にも要求されるかもしれない。依存関係を手っ取り早く調べるにはawesomeConfig.cmakeを眺めるといいでしょう。

あとはおもむろにmakeを実行するだけ。勝手にcmakeも含めて実行してくれます。

ひとつ注意するとしたら、ImageMagickを使うこと。GraphicsMagickは対応していないようなので。 アクティブな画像と非アクティブな状態の画像を生成しているんだけど、ImageMagickでしか対応していない-channel Aを使っているのです。

インストール後にやること

sudo make installで/usr/local以下にインストールされているはずなので、あとはシンボリックリンク祭り。

sudo ln -sf /usr/local/etc/xdg/awesome /etc/xdg/awesome
sudo ln -sf /usr/local/share/xsessions/awesome.desktop /usr/share/xsessions/awesome.desktop

これで再度ログインしなおすとmasterのawesomeを使うことができるようになる。

ただし、これまで3.4系を使っていたので、設定ファイルに互換性がなくなってしまっている。 ひとまずは、/etc/xdg/awesome/rc.luaを.config/awesome/rc.luaにコピーするといわゆるデフォルトの状態で起動できるはず。

はじめてのawesome

会社のブログの方ばっかでこっちは放置ぎみだったので久しぶりになんか書こうということでawesomeについて書くことにした。

awesomeとは

about - awesome window manager

ウィンドウマネージャのうちの一つ。Ubuntuにもパッケージがある。これを書いている段階ではUbuntu 14.04を使っているので、awesome 3.4.15がパッケージでインストールできるようになっている。

昔軽いWMを探して、 The Golem X11 Window Manager

とか ~tuomov – Software (Ion v1のころ?)とか似た傾向のWMを使っていたことがあったような気がしなくもない。

awesomeをインストール

普通にsudo apt-get install awesomeだけで、lightdmから選択できるようになっている。とても便利。 ただし、Windowsキーがあることが前提になっているっぽいので、そのあたりは適宜設定しないといけなかった。

カスタマイズあれこれ 

~/.config/awesome/rc.luaをいじくるのが定石。ここからが本番。 /etc/xdg/awesome/rc.luaからコピーしてカスタマイズしましょう。

ログイン直後にキーをきりかえたい

CtrlとCapsLockは入れ替えたい派です。そんなときは、setxkbdmap -option "ctrl:swapcaps" を実行しないといけない。 これはrc.luaに以下を記述するといい。

awful.util.spawn_with_shell("setxkbmap -option 'ctrl:swapcaps'")

Windowsキーの代わりを設定する

英語キーボードかつWindowsキーがないので、mod4を明示的にわりあてないといけない。 ひとまず、.Xmodmapで右Altをモディファイヤーとして設定することにした。

% cat ~/.config/awesome/.Xmodmap
remove mod1 = Alt_R
add mod4 = Alt_R

デフォルトのテーマを変更する

特にGTK+のテーマをこれまで設定していなかったせいか、クラシックぽくて古くさい。

Customizing GTK Apps - awesome

これの通りにClearlooksを設定した。

画面をロックするには

gnome-settings-daemonを起動すればこれまでどおりCtrl+Alt+Enterでロックできるが、なんか負けた気がするので代替案をさがしてみた。

xtrlockというのがあるようで、xtrlock -bでとりあえず画面をロックできる。 あとで、キーバインディングも設定しておこう。

ファイルマネージャ使いたい

まぁ、おとなしくmod4 + Rでnautilusを起動しよう。

常にウィンドウを最大化して使いたい

rc.luaにウィンドウの初期レイアウトを設定している箇所があるからそれをいじればいい。 デフォルトがfloatingになっている。まぁあとからmod4 + Spaceで変更できるからそんなに気にしなくてもいい。

layouts =
{
    awful.layout.suit.floating,
    awful.layout.suit.tile,
    awful.layout.suit.tile.left,
    awful.layout.suit.tile.bottom,
    ....

外部ディスプレイと組み合わせて使う

ノートPC + HDMI接続のディスプレイだと、なぜかノートPCのディスプレイが使えない状態に。 なんか設定してあげないといけないっぽいがまだ調べていない。 HDMIを引っこ抜くとノートPCのディスプレイが映らない状態なのがアレ。

使ってみた感想

これまでUbuntu 14.04のデフォルトで使っていたので、アイコンをぽちぽちクリックしてアプリを起動するのに慣れていたせいか、mod4 + Rで起動するスタイルはだいぶ新鮮。ただし、コマンドを覚えていないと起動すらできないという罠がある。スプレッドシートを編集するのにlocalcを知らないと、調べるはめに。(Debianメニューからたどれるけど。。。)

とはいえ、おおむねキーボードだけでもそこそこ快適に暮らせる。自分の場合はトラックポイントも併用しているし。

ただ、DBus-まわりはまだ設定が足りてないせいか、挙動が怪しい気がしているが、まだ切り分けができていない。 あとはウィジェットの設定が今ひとつわかりにくい気がしている。が、これは多分慣れとドキュメントをきちんと読みこなせていないせいだろう。

Groongaドキュメント読書会2の話

Groongaドキュメント読書会2 - Groonga | Doorkeeper に参加した。Groongaのオンラインドキュメントを順次みんなで読んでいくというもの。以下は参加したときに話題にあがったこととか、自分が知っている範囲ををつらつらと書いてみた。

自己紹介のターン

最初に参加者が自己紹介をした。新顔の人はこんな理由があって参加しました!という話をしていて、前回から継続している人は前回からあった出来事(別にGroongaに関係なく)について話をしたりした。これをやることでなごやかな雰囲気になったので、大分話しやすくなったんじゃなかろうか。参加者が6人と小規模だったのもあるかも。あ、お酒はほどほどに。あと失せ物には注意。既婚者はいろいろ大変。

実際にドキュメントを読む

今回は、2. インストール — Groonga v4.0.2ドキュメント から4.1. 基本的な操作 — Groonga v4.0.2ドキュメント まで。

やっているのは、ひとりずつドキュメントを区切って順番に読んで、理解したことを話すということ。 この形式だと理解があやふやだったりすると、(うまく説明できないので)ひっかかるところがわかりやすい。そういった箇所については、開発者が適宜補足したり、参加者がこれってどういうこと?と質問したりというので解決するすすめかただった。

2.2.2 Homebrew

Homebrewによるインストール手順のドキュメント。TokenMecabを使うには--with-mecabオプションの指定を忘れずに。--with-mecabが指定してあるとIPA辞書も一緒に入る。こうなっているのはみんながみんなMeCabのトークナイザーを必要としているわけではないから。ドキュメントでは触れていないけど、--enable-benchmarkという開発者向けのオプションもある。そういえば、以前brew editして--enable-debugしようとしたときにconfigureがコケる現象に遭遇したような気が。どうだったかな。

2.2.3 ソースからビルド

コア数の取得方法が他とちょっと違うのかという発見。

% make -j$(/usr/sbin/sysctl -n hw.ncpu)

2.3 Debian GNU/Linux

サーバー用途は3つパッケージがあるよ!という話。簡易HTTPサーバーでPOSTできなかったけど、最近できるようにする修正が入ったことなど。簡易HTTPサーバーは変なリクエストがきちゃうと困るので、nginxベースのHTTPサーバーがおすすめ。

あとMuninパッケージを入れると、CPU使用率とかスループットを見れるようになるよ、という話。

公式ドキュメントにはないけど、QiitaにMuninプラグインについて書いたのがある。

このへんは公式にマージしておかないと。

wheezyやjessieやsidはまぁ一緒なので以下略。

2.4.1 PPA

最近UbuntuではPPAを利用するようになった。(Debianはまだpackages.groonga.orgからインストールするやりかた)

2.5. CentOS — Groonga v4.0.2ドキュメント

  • × PRMパッケージ -> ○ RPMパッケージ 修正済み
  • groonga-tokenizer-mecabを入れると辞書も依存関係で勝手にインストールされるのでわざわざ自分でインストールしなくてもよいはず。 修正済み

2.6. Fedora — Groonga v4.0.2ドキュメント

  • × PRMパッケージ -> ○ RPMパッケージ 修正済み
  • Fedoraのノートの内容が古い。これは後で直す。
  • 辞書の依存関係の話も現状にあっていない

2.8.1.2 ライブラリ

  • KyTea キューティーと読む。なぜかこれまで自分はケーワイティーと読んでいた。
  • サジェスト用にlibeventとかが挙げられているのは、学習するためのサーバーでは例えば1文字入力されるたびにリクエストを受けるので、数多くのリクエストをさばかないといけない。というわけでlibeventとかが使われている。
  • zlibやLZOはカラムの圧縮用とあるけど、これを有効にするとメモリリークが発生してしまう問題があって現状使えない。
  • 2.8.2.1.2 --localestatedir localstatedirのtypo 修正済み

4.1.10 全文検索用の語彙表の作成

table_createでKEY_NORMALIZEフラグはもう非推奨。今は--normalizerをかわりに使う。というのもノーマライザーをプラグインとして追加できるようになったため。

4.1.14 表示範囲指定

selectコマンドはoffset引数とlimit引数を使って表示範囲を限定できる。 何も指定しないと10件のみ表示する。

さいごに

今回はインストールの部分が多くて、まあリリースは違ってもほとんど同じという箇所がかなり。とはいえ皆で読みなおしてみると、うっかりtypoしている箇所を見つけたり、日本語のてにをはがおかしかったり、内容が古くなっている箇所を見つけることができた。

丁度タイムリーにドキュメントに対する手厳しい指摘もあったことだし、この取り組みは決して悪くはないはず。

次回再開するときは、4.2. リモートアクセス — Groonga v4.0.2ドキュメント から。

はじめてのMySQL Workbenchプラグイン

はじめに

世の中にはMySQL Workbenchというものがあり、ビジュアルにごにょごにょできたりして便利らしいです。

なんかのきっかけでプラグインで拡張できると知りちょっといじってみることにしました。ぜんぜんMySQL Workbench使ったこと無いのに。

以下のバージョンを前提にしています。

なんとなくソースを落としてきてビルドしました。ビルドの詳細は割愛。

サンプルを実行する

まずは適当なサンプルプラグインを実行してみようと思い、ソースに含まれていたdoc/scripting_sample_grt.pyをインストールしてみました。

f:id:kenhys:20140508224836p:plain

きちんとインストールできていることをプラグインマネージャから確認できました。データベースに接続していると、Tools/UtilitiesメニューからFill Random Queryが実行できる、はずです。

しかし、試しに実行してみると見事に失敗します。

f:id:kenhys:20140508224827p:plain

activeQueryBufferがないとかエラー吐いているので、見なかったことにしましょう。世の中そんなこともあります。MySQL Bugsに報告済みの既知なやつかは確認していません。

Hello MySQL Workbench

ひとまず、これを参考にして、ダイアログを表示するサンプルを書いてみました。Hello World的なアレです。メッセージを表示して終了するだけです。

Luaでも拡張できるっぽいですが、ひとまずPythonでやってみました。

# coding:utf-8

from wb import *
import grt
import mforms

ModuleInfo = DefineModule(name= "HelloWorld", author= "HAYASHI Kentaro", version="1.0")

@ModuleInfo.plugin("org.gigo-ice.helloworld", caption= "Hello MySQL Workbench", input= [wbinputs.currentQueryBuffer()], pluginMenu= "SQL/Utilities")
@ModuleInfo.export(grt.INT, grt.classes.db_query_QueryBuffer)
def helloworld(qbuffer):
    result = mforms.Utilities.show_message(u"タイトル", 
                                           '''Hello MySQL Workbench''',
                                           u"オーケー",
                                           u"キャンセル",
                                           u"その他")
    if result == mforms.ResultCancel:
        return 0
    elif result == mforms.ResultOk:
        return 1
    elif result == mforms.ResultOther:
        return -1

これをhello_world_grt.pyとかに保存して、MySQL Workbenchからインストールするとこんな感じになります。

f:id:kenhys:20140508224846p:plain

実行してみましょう。

f:id:kenhys:20140508224850p:plain

きちんとダイアログを表示でき、ボタンを選択すると終了します。

おわりに

MySQL Workbenchではmformsというのが用意されていて、GUI部品もPythonであれこれ叩けるようになっているみたいです。便利そうな気がしてきましたね。

ちなみに、mysql-workbenchを起動するときは、--log-to-stderrをつけておきましょう。プラグインが認識されないとかプラグインが動かないとか、実行したらエラーになるとかいろいろわかります。

growl-for-linux 0.7.5に入ったAppIndicator対応の話

はじめに

growl-for-linuxに地味ながらAppIndicator対応がマージされました。0.7.5としてリリースされています。

pull requestを送ったのは先月の話ですが、せっかくだから記事を書いておきます。

なぜAppIndicator対応か

このAppIndicator対応が何者かというのはとても地味な話ではありますが、スクリーンショットを見ればあぁ、コレね、とすぐにわかると思います。要は通知エリアのお話です。

(http://unity.ubuntu.com/projects/appindicators/より)

なんだかずーっと前からあるじゃん、という話になりそうなんだけれども、これにはちょっとした事情があります。

Ubuntu 13.04ではUnity Notification Area (Systray) Whitelistが廃止されました。 これによってWhitelistを設定すれば動作していたアプリケーションは少なくとも通知エリアに関しては動作しなくなります。 (これまではWhitelistを設定するとGtkStatusIconを使っていてもいい感じに表示してくれていたので、いわば執行猶予中みたいなものでした。)

主要なアプリケーションは対応済みなので意外と気づかなかったかもしれませんが、growl-for-linuxはこの制限にひっかかってしまった、というわけです。

というわけで、GtkStatusIconを使っていたものをAppIndicatorに置き換える必要がでてきました。 ステータスアイコンから設定メニューを出しているので、そもそも表示されないと何もできないことになり、致命的なのです。

実際のAppIndicatorへの対応

こんな感じのことをやりました。

https://github.com/mattn/growl-for-linux/commit/a7dfa30158e3a315185f84b8fdf1959a24664c13

実際に表示している様子はこんな感じになります。

f:id:kenhys:20130724222108p:plain

オンオフを切り替えるメニューもつけています。

f:id:kenhys:20130724223029p:plain

SylpheedでHTMLメールを表示する htmlview.dll 0.4.0

SylpheedでHTMLメールを表示するためのプラグインにhtmlviewというものがあります。

こいつはWebKitGTK+を使っているので、そのままではWindows版のSylpheed用にコンパイルするには茨の道という状況でした。

0.4.0になって、WebKitGTK+だけではなく、GtkHTMLに対応しました。(Unix系OSならコンパイルできるというだけ)

とはいえ、公開されているそれなりに新しいGtkHTMLのコンパイル済みバイナリは、いずれも新しめのGTK+を要求するのでそのままでは使えないというとても残念な状況でした。 かといって、要求するGTK+のバージョンが古いものを使ってもまともにHTMLをレンダリングできないという致命的な弱点がありました。

そこで、GtkHTML 3.32.2をGTK+ 2.10向けにバックポートしてGtkHTMLを自前でビルドするというとても不毛なことにチャレンジしてみました。

その結果がこちら。

f:id:kenhys:20130227232651p:plain

手元に届くコミットメールの差分のHTMLメール程度であれば、それなりに表示できるようになりました。

普段はUbuntu環境なのでWebKitGTK+版としてコンパイルして使っているんですが、これでWindowsでもようやくそれっぽくHTMLメールを表示する環境ができたことになります。

まだきちんと整備してはいませんが、ダウンロードはこちらからどうぞ。

http://gigo-ice.org/tech/sylpheed/index.ja.html