Overwriting existing binding of keysym の警告から逃げた話

Kinesis Advanced にしたあたりから、ずっと以下の警告が journald に出ててキー入力が遅延して困ってて

gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 32 with keysym 32 (keycode b).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 34 with keysym 34 (keycode d).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 35 with keysym 35 (keycode e).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 36 with keysym 36 (keycode f).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 33 with keysym 33 (keycode c).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 37 with keysym 37 (keycode 10).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 39 with keysym 39 (keycode 12).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 38 with keysym 38 (keycode 11).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 39 with keysym 39 (keycode 12).
gnome-shell[492029]: Window manager warning: Overwriting existing binding of keysym 31 with keysym 31 (keycode a).

多分以下のあたりと同じ原因だろうなとは思ってたんだけど、ずっと放置してて

さすがに辛くなってきたから以下にしたら遅延はなくなった。

gsettings reset org.gnome.libgnomekbd.keyboard options
gsettings reset org.gnome.desktop.input-sources xkb-options

この警告を出してるのは https://gitlab.gnome.org/GNOME/mutter/-/blob/master/src/core/keybindings.c#L593 のあたり。

この先

Kinesis 使ってる限りはキーリマッパーなくても良いのだけど、ラップトップのキーボードを使うときとかにちょっと困る。xkeysnail は X11 依存があって wayland だと動かない。あまり豪華なキーリマッパーは個人的にはいらないので、uinput を使ってそれっぽく動くのを作ればよいのかなと思っている。https://github.com/zhanghai/pykeymacs あたりが参考になるかも。もしくは libinput をフックする https://github.com/buzztaiki/scroll-emulation の方向性。

追記

ぜんぜん倒せてなくて、設定オフにして gnome-shell を restart するとしばらくは遅延しなくなるだけっぽかった。原因わかんね。

さらに追記

fcitx-skk をやめて fcitx-mozc に変えたら警告がでなくなった。fcitx-skk に何かある。

Git で Jenkins のバックアップをしてみる

先日突然会社で使ってる Jenkins が起動しなくなってしまいました。さすがにもう二度とそんな思いはしたくないので、バックアップを取ることにしました。
Backup Plugin - Jenkins - Jenkins Wiki を使ってもいいんですが、git 使えば差分バックアップになるし、好きな時点に戻せて素敵なんじゃないかと思って git を使ってバックアップを取ることにしてみました。

この記事はその時のメモみたいなものです。

リポジトリの作成

まずは git のリポジトリを作ります。せっかくなのでスクリプトコンソールを使ってみます。スクリプトコンソールを開いて、以下を実行します。

dir = System.properties["JENKINS_HOME"]
def git = { Object[] cmd ->
  println new ProcessBuilder(["git"] + cmd.toList() as String[]).directory(new File(dir)).start().text
}
git "init"
git "config", "user.name", "Jenkins Backup"
git "config", "user.email", "jenkins@${InetAddress.localHost.hostName}"
new File("${dir}/.gitignore").text = """\
*.log
*.log.?
*.log.??
jobs/*/workspace
jobs/*/builds
"""
git "add", "--all"
git "commit", "-m", "Initial commit"

これで /var/lib/jenkins に git のリポジトリができます。除外対象は workspace, builds とログファイルにしました。

バックアップの設定

次に Hudson環境のバックアップ - ふぞろいのGENGOたち を参考にして、Exclusive Execution Plugin を入れて backup job を作ります。job は以下のように設定します。

  • ビルドトリガ: 定期的に実行
    • スケジュール: @daily
  • ビルド環境:
    • ビルドを排他的に実行: ON
#!/bin/sh
cd $JENKINS_HOME
git add --all && git commit -m "$BUILD_TAG"
git gc

以上で準備完了です。あとはためしにビルド実行をしてみて、青くなればめでたしめでたしです。

直接 git を操作するとき

Jenkins をパッケージで入れている場合、多分Jenkins は jenkins ユーザのものになっていると思います。スクリプトコンソールで作ったリポジトリも jenkins ユーザーで作られているので、以下のように、sudo でユーザを指定してあげれば大丈夫だと思います。

sudo -u jenkins git ...

最後に

登録も自動化したければ jenkins-cli を使って groovy, install-plugin, create-job コマンドあたりを使えばできるはずです。
commit するだけではなくて、どこか別のサーバに push とかすれば、ミラーリングもできて完璧ですね。

Emacs23 の VC で svn1.7 を使えるようにしてみた

svn1.7 が去年の暮れくらいに出ました。多分目玉は WC-NG です。svn status とかがこれのおかげでかなり速くなりました。

そんな svn1.7 なんですが、Emacs23 の vc-svn が対応してません。Working Copy が別ものになってしまったので、うまく動いてくれないのです。Emacs24 なら対応してるんですが、まだメインで使ってるのは Emacs23 です。

というわけで Emacs23 の vc-svn を svn1.7 に対応させる vc-svn17.el を作ってみました。Emacs24 で使っても影響がないようになってます。

使い方は https://raw.github.com/buzztaiki/vc-svn17-el/master/vc-svn17.el から vc-svn17.el をインストールして、require するだけです。

svn1.7 を使っている奇特な人は使ってみてください。

Emacsをちょっとだけ自分色に染める (Emacs Advent Calendar jp: 2011)


この記事は Emacs Advent Calendar jp: 2011 : ATND の9日目です。遅くなってごめんなさい!
去年にひき続いて標準で少しEmacsを便利にする小技を。

Emacsを使ってて普段使ってるmodeにちょっとだけ色を足したいとか思うことはないですか?そんなときは font-lock-add-keywords を使えば好きな色を足すことができちゃいます。

使い方は簡単。例えばこんな風にすると

(font-lock-add-keywords
 'c-mode
 '(("!" . font-lock-warning-face)))

c-modeで「!」が赤くなります。数字にも色を付けて、hogeをキーワードの色にしたければこんな風に。

(font-lock-add-keywords
 'c-mode
 '(("!" . font-lock-warning-face)
   ("hoge" . font-lock-keyword-face)
   ("[0-9]+" . font-lock-constant-face)))

そうするとこうなります。

ただこの font-lock-add-keywords には弱点があって。間違った設定とかにしてしまうと、ハイライトを壊して元に戻せなくなってしまうのです。

というわけで、font-lock-user-keywords というものを作って使ってます。この子なら壊したときにも簡単に戻すことができるから安心です。

(defun font-lock-user-keywords (mode &optional keywords)
  "Add user highlighting to KEYWORDS to MODE.
See `font-lock-add-keywords' and `font-lock-defaults'."
  (unless mode
    (error "mode should be non-nil "))
  (font-lock-remove-keywords mode (get mode 'font-lock-user-keywords))
  (font-lock-add-keywords mode keywords)
  (put mode 'font-lock-user-keywords keywords))

設定するときは font-lock-add-keywords と同じように使うだけ。リセットするときは (font-lock-user-keywords 'c-mode) として呼んであげれば元に戻ってくれます。ただ、font-lock-add-keywords で足したものは戻らないのでそこは注意して使ってくださいね。

明日は [twitter:@ta2_o2p] さんです。それでは。

ArielとAmazon

「Ariel Advent Calendar 2011」2日目です。昨日は [twitter:@kiris] の 「ありえるえりあ勉強会の開き方 | ありえるえりあ」 でした。Emacs番長とか書いてあったけど、よく意味がわからないです。

最近すごいことに気づきました。
ArielとAmazonのロゴってそっくりです。

これがAriel

これがAmazon

ならべてみます。そっくりですね!

このへんがそっくりです!

入れ替えても全然違和感ないですね。

両方ともAの字が入ってるのもポイント高いと思います。
あとNikeあたりとも似てるきがしてます。NikeとはEの字が一致してるのもいいですね。けどまだ試してません。だれか試してください。

明日ははてなの [twitter:@nitro_idiot] が何か書いてくれるそうです。