Groonga 5.0.0 on ARMをaptで簡単にインストールするには

はじめに

Groonga 5.0.0がリリースされたので、手元にころがっているarmhfっぽいボードにGroongaをインストールしてみることにした。

ちょっと古めの記事ならQiitaにある。

groonga - Grooga on ARM - Qiita

4.0.8でビルドを試したやつは以下にころがっている。けれどもdpkgで個別にインストールするのはつらい。

http://packages.groonga.org/tmp/armhf/unstable/

というわけで、実機でパッケージを適当にビルドしつつ、Groongaのリポジトリ用のスクリプトをごにょごにょしてaptリポジトリを用意してみた。

aptで簡単にインストールしてみよう

まずはkeyringをインストールする。

wget http://packages.groonga.org/debian/pool/unstable/main/g/groonga-keyring/groonga-keyring_2012.05.29-1_all.deb
sudo dpkg -i http://packages.groonga.org/debian/pool/unstable/main/g/groonga-keyring/groonga-keyring_2012.05.29-1_all.deb

次にapt-lineを追加する。

% cat /etc/apt/sources.list.d/groonga.list
deb http://packages.groonga.org/armhf/debian/ unstable main
deb-src http://packages.groonga.org/armhf/debian/ unstable main

あとは普通にaptでインストールするだけ。

sudo apt-get update
sudo apt-get install groonga

まだお試しなので、unstableのみ。 これはdebian公式のほうが5.0.0に追従するまでのあくまで繋ぎです。

OpenStreetMapに対応したSphinxの拡張を書いてみた

はじめに

週末ちまちまとOverview — Sphinx 1.2.3 documentationの拡張を書いていた。

動機はドキュメントに地図を埋め込みたかったから。探してみたら先人はいるものですでにそのような拡張はあった。sphinxcontrib-googlemapsがそれ。

sphinxcontrib-googlemaps 0.1.0 : Python Package Index

あるのだが、次の点が不足していた。

  • オフラインでも地図を参照したい
  • ミリ秒表記も受け付けて欲しい
  • マーカーとか矩形とか円とかもたくさん表示したい
  • 埋め込んだドキュメントを配布したい

googlemapsを改造するのもありだけど、ドキュメントの配布の点でちょっとひっかかる。 というわけで、別案としてOpenStreetMapを採用してみるか、ということになった。

OpenStreetMap

leaflet.jsを使う

OSMではleaflet.jsを使うのが主流のようである。

Leaflet - a JavaScript library for mobile-friendly maps

ただ、ラベルまわりはちょっとそのままだといま一つ感があったので、

Leaflet/Leaflet.label · GitHub を使うことにした。こちらのほうがラベルの表示は好みというのがその理由。

sphinxcontrib-openstreetmap

というわけであれこれ試行錯誤しつつopensteetmapディレクティブを実装した。このディレクティブはこんな感じで使う。

.. openstreetmap:: Example Taiyaki in rectangle
   :id: taiyaki_in_rectangle
   :location: 35.7119,139.7983
   :zoom: 15

   "たいやき探索範囲", rectangle: 35.7185,139.7912,35.7065,139.8069
   "根津のたいやき", location: 35.720253,139.762573
   (以下略)

矩形を描画してみたりもできるようにした。こんな感じ。

f:id:kenhys:20150113025524p:plain

駅から500mの円を描いたりもできる。こんな感じに。

f:id:kenhys:20150113025532p:plain

オフライン対応については、だいたいこのくらいのタイルを事前に取得しておけばいいよね、くらいでやっているので力技感あるけどひとまず目的は達成できた気がしている。

kenhys/sphinxcontrib-openstreetmap · GitHub

まだ、記法とか固まってないし、あれこれ足りないものがある。 そこそこ使えるようになってきたら、いずれはsphinxcontribにもっていきたい。

Desire HDでリカバリを変更する方法

はじめに

Desire HD(001HT)というもう発売されてから4年が経過したスマートフォンがあります。 これまで4EXT Developmentというリカバリを使っていたのですが、あんまりメンテされてない感があるのと、Android 5.xのカスタムROMを導入する際にぼちぼち失敗する話が漏れ聞こえてきたので、リカバリを変更することにしました。

rulesを書き換えよう

まずは、fastbootに切り替えます。

% adb reboot bootloader

次にデバイスを認識しているか確かめます。

% fastboot devices
no permissions  fastboot

残念、認識していません。

いざfastbootで繋ぐのに、認識されなかったので以下のようにrulesを変更しました。

% 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″
# fastboot mode
SUBSYSTEM==”usb”, ATTRS{idVendor}==”0bb4″, ATTRS{idProduct}==”0ff0″, MODE=”0666″
# hboot mode
SUBSYSTEM==”usb”, ATTRS{idVendor}==”0bb4″, ATTRS{idProduct}==”0c94″, MODE=”0666″

みえているっぽい。

% sudo `which fastboot` devices
HT0B5RXXXXXX  fastboot

リカバリを焼こう

あとは、fastboot flash recoveryでお好みのリカバリにすればOK。

% sudo `which fastboot` flash recovery work/android/desirehd/openrecovery-TWRP-ace-2.8.1.1-unofficial.img
sending 'recovery' (7470 KB)...
OKAY [  1.255s]
writing 'recovery'...
OKAY [  1.094s]
finished. total time: 2.349s

まとめ

今回は、Desire HDでリカバリを変更する方法をいまさらまとめてみました。 何をやっているんでしょうね。

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ドキュメント から。