ballはトモダチ、vimpはトモダチ (zoteroを例として) - Vimperator Advent Calendar 2012 8日目

Vimperator Advent Calendar 2012 8日目担当、日本目光会の kozo2 です。
今日は、 vimp 使い込みのために、文献管理pluginであるzoteroを例としてinteractiveにpluginのobjectを操作する方法を紹介します。

Zoteroとは

論文pdfなどのmeta dataを読み込みマイlibraryを作るのを手助けしてくれるfirefox addonです。
mendeleyのようなsocial機能は無いですがbrowser(firefox)と統合しているのが特徴です。
その他挙げますと

って感じですが、とりあえず http://www.zotero.org/download/ から Zotero for Firefox をインスコしてください。

なぜvimpはトモダチか

vimpというと

  • command lineで何でも操作できる
  • hit-a-hintでmouseいらず

ってのがpushされてる気がします。
しかし真価はinteractiveにjavascriptのobjectを補完機能付きでinspectできるところにあると思います。
それはPythonでのipythonのように。
vimp 使い込みにはこのjs objectと戯れることが肝要であります。
それはまるでsoccer ballと戯れる翼君の如し。

js objectにダイブ

vimp で任意のjavascriptを実行するにはcommand lineで

:js なんか

します。
Zoteroの場合であれば http://www.zotero.org/support/dev/client_coding/javascript_api に書かれている文をZoteroをonにした後に

:js

に続けて打っていくことでvimpがobjectをinspectしてくれinteractiveにplugin(Zotero)の情報を得られるのが実感できるでしょう。
例えばZoteroをonにした状態で

:js ZoteroPane.

と入力すると、下記のような補完が候補が出ます。

f:id:kozo2:20121209013522p:plain

また

:js ZoteroPane.

のあとに to と入力することで下記のように補完候補が絞られるのがわかるでしょう。

f:id:kozo2:20121209013743p:plain

ここで

:js ZoteroPane.toggleTab()

とすることでZoteroのtabがtoggleするのがわかるでしょう。
先ほどのZoteroのdocument http://www.zotero.org/support/dev/client_coding/javascript_api にはAn Easy Debugging Environmentとして

  • ExecuteJS
  • MozRepl

などが挙げられていますが、vimpの方が手軽かつ補完が強力な気がします。

その先は

あとはひたすらjs objectと戯れ、便利と思った文をpluginとしてまとめましょう。 pluginとしてまとめるには日本目光会会長の anekos さんによる function-template.js を見られることをおすすめします。
https://github.com/vimpr/vimperator-plugins/blob/master/function-template.js

Travis CIでDebian勉強会のTeXをbuildするようにしたった(ので活用してもらえるとうれしい) - Debian/Ubuntu JP Advent Calendar 2012 4日目

Debian/Ubuntu JP Advent Calendar 2012 4日目担当、日本目光会のkozo2です。
昨日は岩松さん @iwamatsu今時のバグレポート操作方法 でした。
今日は、日本のDebian勉強会について興味をもってもらう アンド DebianJPの方々のDebian勉強会の資料管理の負担を減らすために

  • Debian勉強会で毎回配付されている印刷資料のpdfを自分でbuildする方法
  • 印刷資料のgit repositoryのTeX fileのcompileをTravis CIで行って楽する方法

を紹介します。

日本のDebian勉強会と勉強会で配られている資料について

Debianに関する知識を共有したりしてキャッキャウフフする会、Debian勉強会 なるものが(私の知る限りでは)東京と大阪で毎月行われています。
この勉強会で行う発表の原稿はTeXで書かれており、そのTeX filesはgit repository (git://git.debian.org/git/tokyodebian/monthly-report.git) で 管理されています。
Debian, Ubuntuに興味のある方々にとって有益な情報がつまっているので一度 ご覧になられるとよいかと思っとりやす。

勉強会資料原稿TeXのbuildについて

git repositoryのcloneからbuildする方法については
http://kozo2.hatenablog.com/entry/2012/03/26/042317
で書きました。
これだけだと既出エントリの使いまわしなだけなので今回はこのbuildをTravis CIを使ってbuildするようにしてみました。
これでとりあえずbuildが通るか否かは確実にわかるので原稿を管理されているDebianJPの方々や原 稿筆者の方々的にはなかなかうれしいのではないかなと思った次第でございや す。

Travis CIについて

Travis CIってのはgithub中のrepositoryのcodeのbuild serviceをダータで提供 してくれるナウいweb serviceです。
buildしたいgit repositoryのrootに.travis.ymlというfile nameでbuild taskを書いてpushしておくと、その通りにTravis CI側のserverでbuildしてくれて browserでbuild logやbuildが成功したかどうかが確認できます。

今回やったこと

  1. git://git.debian.org/git/tokyodebian/monthly-report.git の cloneを https://github.com/kozo2/debianjp-monthly-report に特攻の拓した。
  2. https://github.com/kozo2/debianjp-monthly-reporthttps://github.com/kozo2/debianjp-monthly-report/blob/master/.travis.yml を特攻の拓した。
  3. あとは https://travis-ci.org/kozo2/debianjp-monthly-report 見るだけ。

Travis CIの設定

language: c
before_install:
 - sudo apt-get install ptex-bin okumura-clsfiles texlive-latex-extra lv
script:
 - cp git-pre-commit.sh .git/hooks/pre-commit
 - make debianmeetingresume201210-kansai.pdf
  • TeXってlanguageは無くmakeができりゃいいだけだったのですが、language は必須だったので適当にcって書いてます
  • すべてのbuildが通るかどうかmake allでこき使っときたいところですが、 logがはかれまくるせいでbrowser内の1pageでは確認できないのと、失敗して いる箇所の特定ができなかったのでmakeの対象を1fileにしています。(make allはこけてました)

TravisDebian/Ubuntu JP を救う

いまんとこ1資料のbuildが通るかを確認するのしかしてないのですが、もっといろいろできそうです。
TravisUbuntuのprecise環境のようなのでDebian/Ubuntu JPの方々にはウマーでしょう。
ダータですしいろいろ使わせて頂きやしょう。

明日は なかおけいすけ さんによる記事になりそうな雰囲気です。

関西Emacsにいってきた

いまHatena Blog見てそういえばEmacs温泉の詳細書くとか言って忘れてたらもうその次の関西Emacsでした。すんません。
今日は関西Emacsに参加してました。
その感想をつらつら書くとともに今日デモした @tkf さんのemacs-jediのいんすこ方法などを詳しく書きます。

@oarat さん

今日のハイライトだったかもしれん。
term+.elの紹介。
よさげに思う。とにかく使ってみてtwitterで思うところを言うていこうと思う。
term+.elの中でipythonがいい感じに使えるかどうか試そうと思う。

@syohex さん

websocket.elの紹介。
第六回 関西 Emacs勉強会に参加してきました。 を参照されたし。
web application frameworkにPerlのamon2というのを用いてはったのを今はRubysinatraにreplaceしようとしてくれているらしい。
それは歓迎すべきことであろう。

@kiyoka さん

pastehubの紹介。
demoのため自分の手元の環境いじってたためちゃんと聞いてなかった。申し訳ありません。
syohexさんのはてブエントリを参照されたし。

@uk_ar さん

githubのelisp projectにTravis CIを使う話。
自分はtestまともに書いたことないlevelなのでまったく実感できてない。
精進する必要がある。

おれ

以下demoしたemacs-jediのel-getを使わない いんすこ方法を書く。
MacとUbuntuではこれでうまく補完できることを確認した。Windowsでもできそうに思う。
jediについては mattnさんのblogエントリ を参照されたし。
これまでのEmacsPython補完libraryのdisりはやめておこう。とにかく(emacs-)jediはよいと思う。

emacs-jediのいんすこ方法(設定は後述する)

emacs-jediはkiwanamiさんproductを活用していて、設計がすっきりしている(ように思う)。
kiwanamiさんのproductのすばらしさがわかる。その点でも使用をおすすめしたい。

  • auto-complete
  • concurrent.el
  • epc.el
  • ctable.el

emacs-jediは上記のelispに依存していてこれらが必要である。
auto-complete以外は現時点ではmelpa packageには無いのでgithubからcloneする。
auto-completeはpackage.elでinstallするのがよいかと思う。

cd ~/.emacs.d
git clone git://github.com/tkf/emacs-jedi
git clone git://github.com/kiwanami/emacs-deferred
git clone git://github.com/kiwanami/emacs-epc
git clone git://github.com/kiwanami/emacs-ctable

jediのいんすこ方法

どうもtkfさんがvirtualenvの使用を想定されている模様アンドvirtualenv使って損ないのでvirtualenvを使おう。
pipとvirtualenvはsudoでinstallしてよいと思う。
easy_installは最近のMacでは最初から入っている。ubuntuではsudo aptitude install python-setuptoolsでよいのでは。

sudo easy_install pip
sudo pip install virtualenv

emacs-jediはdefaultではvirtualenvの環境をemacs-jedi自身のdirectory下にenvという名前で作ることを想定しているようだったので
git cloneしたemacs-jedi下にvirtualenv環境を作りここでPythonのjediとepcをinstallする。 この環境を任意の場所に設定する方法は知らない。

cd ~/.emacs.d/emacs-jedi
virtualenv env
source env/bin/activate
pip install jedi epc

emacs-jediの設定

(add-to-list 'load-path "~/.emacs.d/emacs-deferred")
(add-to-list 'load-path "~/.emacs.d/emacs-epc")
(add-to-list 'load-path "~/.emacs.d/emacs-ctable")
(add-to-list 'load-path "~/.emacs.d/emacs-jedi")
(require 'auto-complete-config)
(require 'python)
(require 'jedi)
(add-hook 'python-mode-hook 'jedi:ac-setup)
(define-key python-mode-map (kbd "<C-tab>") 'jedi:complete)

emacs-jediの使い方と評価値の補完

上記ではauto-completeを設定しているつもりだがいまいちauto-completeできてんのかよくわからなかった。
jedi:completeでの補完であれば動作を確証できる。
このjediのよいところはmattnさんが仰っているように単なるmoduleのfunctionの補完だけでなく、評価値の補完ができることと思う。
例えば

f:id:kozo2:20121021044703p:plain

のように。
しかし今日のdemoでこれを下記のpointで補完しようとすると補完できなかった。
調査してみようと思う。意見があれば頂きたい。

f:id:kozo2:20121021050629p:plain

おわりに

今回の関西Emacsも面白かった。 全発表者と、取りまとめをやってくださった@pecculさん、会場を使わせてくださった@uwabamiさん、参加者のみなさんに感謝したい。
またjediやemacs-jediの作者さんにも感謝したい。

jediは今自分がPythonのmeta programmingに興味をもっていることもあり面白そうに思うし、その構成がすっきりしているように思う。

またemacs-jediもこれまでのPythonemacs interfaceと比較しすっきりしているように思う。
kiwanamiさんのemacsのための要素技術とtkfさんのそれら要素技術を組み合わせるセンスがうまく融合しているのではなかろうか。

構成は以下の理解でよいのではないかと思う。

f:id:kozo2:20121021052058p:plain

それでは次回4月の関西Emacsでまた会いましょう。

Uniteとhelmのcommand対応表

もう少しあるかも

機能 Unite helm 備考
buffer and history selection Unite buffer file_mru helm-mini
tab selection Unite tab helm-elscreen
なんでも結果 with preview Unite * -auto-preview helmの結果を表示するbufferでC-z(helm-execute-persistent-action)
command selection Unite command helm-M-x
register selection Unite register helm-register
mark jump selection Unite jump helm-all-mark-rings
clipboard selection Unite history/yank helm-show-kill-ring 要Unite設定
locate result Unite locate helm-locate Unite source要追加
man selection Unite ref/man helm-man-woman Unite source要追加
gtags selection Unite gtags helm-gtags Unite source要追加
c,etags selection Unite tags helm-c-etags-select Unite source要追加
imenu selection Unite outline helm-(semantic-or-)imenu Unite source要追加
font selection Unite font helm-select-xfont Unite source要追加, -auto-previewはまだ無い
color theme selection Unite colorscheme ない Unite source要追加
grep selection Unite vimgrep helm-do-grep
ack selection Unite ack できるぽいが詳細未確認 Unite source要追加

Emacs温泉に行ってきた(概要編)

概要を語る

  • 最寄り駅に玉名以外にも新幹線の駅である新玉名があることをtweetから知るが時すでに遅し。熊本経由でlocal lineに乗るなどし2hours遅刻。
  • myuhe氏の発表終わりあたりに着く。無念。
  • syohex氏のwebsocket.el発表を聞く。詳細は氏のhatena diaryを参照せよ。
  • わいがevilの紹介をしたつもり。text objectがどういうものかなどいろいろわかってないのだがとにかくevilいいと思うとだけ言う。わかっとらんのにしゃべってすまぬ。
  • 歓談
  • めし
  • hack(cocoa emacsでのfont設定, code readingのためのtool[imenu, etags, e2wm, ne2wm], anythingとhelm日本人開発者達[kiwanami, myuhe, syohex]観点の思う所など) and 各自やるつもりのこと(わいはUniteとhelmのcommand対応表を作ると言うた[Emacs温泉というもののVimmerもいた])を言うなど。kiwanami氏のtweetを参照せよ、よくまとまっている。
  • 個人的にkiwanami氏のelispを入れなおし使いなおす。
  • nom4476氏の異次元orgさばきを見る。levelの違いにショックを受けるが後にこちらのlevelが低すぎるというよりはnom4476氏がこの筋では*本の指に入る方ということを知り、自分なりのorg usageについて思いなおす。
  • Emacs internalといった趣の話からVimSublime Text2の話をする。kiwanami氏はVinariseのheavy userであるらしい。
  • Vimmerが結構いるのでevilどうですかねと話すなど。あまりevilの受けはよくないようであった。乱暴に言うならば中途半端感があるようだ。
  • 盛り上がりまくりで寝ようとしない者が多数。わいはおっさんなので3時頃には寝たが部屋で寝てたのはわいだけであった。
  • 7:20起床, 7:30めし, 8時すぎ初めてプリキュアなるものを見る。
  • 「各自やるつもりのこと」で言っていたことの進み具合を話す。
  • 解散

詳細編はまた書く。

耳よりのEmacs設定情報です

(add-to-list 'load-path "~/.emacs.d/helm/")
(require 'helm-config)
(helm-mode 1)

(add-to-list 'load-path "~/.emacs.d/evil/")
(add-to-list 'load-path "~/.emacs.d/evil/lib/")
(require 'evil)
(evil-mode 1)

(global-set-key (kbd "C-h") 'delete-backward-char)

(define-key evil-normal-state-map "\C-n" 'helm-mini)
(define-key evil-normal-state-map " " 'dired-jump)
(define-key evil-motion-state-map ";" 'helm-M-x)
(define-key evil-insert-state-map "\C-l" 'evil-normal-state)
(define-key evil-insert-state-map "\C-k" 'kill-line)

(helm-)imenuでジャンプ後に他のwindowにジャンプ前のポイントを表示する

画面2画面分割のときのことしか考えてないがとりあえずこれできるとうれしい。

(defun helm-imenu-after-jump-show-recent-point ()
  (interactive)
  (other-window 1)
  (pop-global-mark)
  (other-window 1)
)
(setq imenu-after-jump-hook (lambda () (helm-imenu-after-jump-show-recent-point)))