関西Emacsに行ってきた(MELPAの話をしてきた件)
関西Emacsでpackage.elやMELPA、またMELPAに無いpackageを登録してもらうにはといったことについて話してきました。
https://docs.google.com/presentation/d/1L8bdlfRtU6JflE7Znz4ExGRUGQgdqQxPPD8BAH5LsFU/edit?usp=sharing
感じたことを思いつくままに列挙
- MELPAはみんな使っていると思っていたがそうでもない。参加者の半数ほど。
- 半数は特にpackage managementを自分でやっていたり、package.elの限界を知った上でel-getを使ったりしている模様
- 開発者が必ずしもpackage作成を自分でやりたいと思っているわけではない。
- 20名超の参加者の内、MELPA recipe作成者は3人ほど
- 開発者は依存するものは自分の環境に入れているので依存を細かく確認するモチベーションが起こりにくいのかもしれない。
- 万人がpackage.elのinteractiveなpackage management bufferを使いたいと思っているわけではない。init.elに(package-install 'git-gutter)のような文を列挙し一挙にinstallしたいuserもいる。
- すでにinstallしているpackageを(package-install '...)するとerrorが出てしまうのでflag(名前は失念しました)を用いてpackage-installするかどうか判断させるinit.elを書く必要がある
とはいうものの
「最大多数の最大幸福」という点ではMELPAとpackage.elかなという気がします。
参加者のみなさんに感謝します。
evilがあるのでemacsつこてください
vim advent calendarの110日目を大幅に遅刻し申し訳ありません。
さらに申し訳ないことにvimではなくemacsの話です。
evilというemacs lisp packageを皆さんご存知でしょうか。
evilはvip.elから連なるvi(m)の操作性をエミュレートするelispの最新進化型です。
vip, viper, vimpulse ときてevilです。
名前がかっこいいですね。
evilの何がいいのか
emacsがmodal(vimのhjkl移動ができたりする)になります。
またevilはvi(m)の操作性をエミュレートしつつもemacsの機能とうまく共存
できるようになっています。
これを
- 両方おいしいとこどりですばらしいと思うか
- 中途半端と思うか
は別れるところでしょう。
ですがとりあえず
どちらにも一度試してみてもらいたいです。
modalなemacs
evilはvimの機能のエミュレートをその主目的としているわけではなく
emacsが持つ本来の機能との親和性に重きを置いているようです。
下記は私の設定の一部です。
(evil-mode 1)
(define-key evil-normal-state-map " " 'dired-jump)
(define-key evil-normal-state-map ";" 'evil-ex)
(define-key evil-normal-state-map "\C-n" 'helm-mini)
(define-key evil-insert-state-map "\C-h" 'delete-backward-char)
(define-key evil-insert-state-map "\C-j" 'tcode-activate-input-method)
(define-key evil-insert-state-map "\C-l" 'evil-normal-state)
(define-key evil-insert-state-map "\C-k" 'tcode-inactivate-input-method-recenter)
- define-key evil-normal-state-map は vim での nnoremap に
- define-key evil-insert-state-map は vim での inoremap に
- 最後がemacsのコマンドに
対応していると考えてください。
normal-stateのようにmodeでなくstateという語を使っているのは
emacsには元々メジャーモード、マイナーモードという概念があり、この用途で既に用いられているためかと思います。
normal, insert, motion, visual, operatorといったstateに加え
(evil-ex-define-cmd "on[ly]" 'delete-other-windows)
のようにvimのexコマンド的にemacsのコマンドを呼ぶことも可能です。
私は vim-likeなmodalなemacs + emacsのコマンドの組み合わせ を非常に便利と思っています。
emacsのコマンドはemacs lispの名前空間がフラットなため、必ず名前の先頭にプレフィックスが付いています。
このため、vimと異なり用いたい(emacsの)コマンドを適当なキーワードですぐに見つけることができます。
機能が見つけられれば前述のようにそれを適当なmode(state)に割り当てます。
modalになることでキーバインドにマップできるコマンド数が増えるだけでなく、キー押下の負担も軽減されます。
「mode(state)概念の導入と、emacsの機能(コマンド)の共存」
これをevilでぜひ味わってみてください。
ipython notebookを特攻の拓する
install
sudo easy_install pip
pip install ipython --user
pip install tornado --user
pip install pyzmq --install-option="--zmq=bundled" --user
ipython notebook
使う
browserで http://localhost:8888 を開く
おわりに
see you next 放送 bye bye
Vimのkeymap feature (果てはVimでのT-codeを支援するtcvime.vimとその最近追加された便利機能について) - Vim Advent Calendar 2012 24日目
Vim Advent Calendar 2012 の 24 日目の記事です。
keymap という feature について
Vimにはkeymapというfeatureがありこれを有効にしてcompileされていると
例えば
:set keymap=dvorak
とすることでinsert mode時にdvorak配列で入力できるようになります。
(keymapを定義している.vim files は **/share/vim/vim73/keymap/ 下あたりにあります。)
他に標準添付されているkeymapで日本人が使えそうなkeymapとなるとkana.vimがあります。
:set keymap=kana
とすると insert mode では **/share/vim/vim73/keymap/kana.vim で定義されているようにかな入力ができます。
素のkeymapに戻したい場合
:set keymap=
とします。
「ひらがな、カタカナのみのJapanese communicationでOKさ!」ってんならこれだけでIMいらずで助かるのですがおそらくそれは無理でしょう。漢字を入力する方式が必要になってきます。
keymap の機能を活用し漢字を入力する
日本語を扱う上で便利な設定やスクリプトが追加されているKaoriyaさん版のVimでは
シフトJIS文字を挿入するkeymapが追加されています。
https://github.com/splhack/macvim/tree/master/plugins/kaoriya/keymap
この中には
といった漢直入力用keymap filesがあります。
ここではこの2つのkeymap filesの内のT-codeの方(tcode_cp932.vim)を使ってみます。
これらを導入した環境ではこれまで同様
:set keymap=tcode_cp932
とすることでinsert mode時にT-codeのkeymapが有効になり、T-codeをすべて記憶していれば大体の漢字は変換無しで入力することが可能になります。
ただここでujihisaさんのように「よし俺は根性でT-codeをすべて覚えるぞ」というのはおすすめしません。
T-code使いのすべてがT-codeを覚えているわけではなく、まずT-code入力支援の仕組みを活用しています。
そこでtcvime.vimですよ
ここでtcvime.vimの登場です。
https://github.com/kanchoku/tcvime
tcvimeの導入により、「漢字変換機能」と「変換を用いた漢字のT-codeを表示してくれる」機能が使えるようになります。
これらの機能を使い、頻繁に用いる漢字を少しずつ覚えていくことがおすすめです。(ひらがなは覚える必要があります。)
tcvime.vimの導入方法、ひらがなの覚え方などは https://gist.github.com/4076375 をご参照ください。
最近追加された便利機能
tc2同様の後置型交ぜ書き変換、さらにはVimの補完ポップアップメニューで変換候補の表示、moreさらには変換で確定した文字列のヘルプ表の自動表示
例えば「ゆづか姫」と打ちたいとする
「ひめ」だけ変換したいので、ここで「28」とうつ(いまのpointから2文字前の文字が変換対象となる、さっきのgistの設定なら)
Vimの補完ポップアップメニューで変換候補が選択できる。「姫」で確定すると...
tcvimeのhelp用bufferに「姫」の部首合成変換のための文字の組み合わせ「女+臣」が自動で表示される。 ちなみに
- 姫はT-code標準の2strokeではsupportされていない文字。
- 臣もT-code標準の2strokeではsupportされていない文字なので姫は普通に交ぜ書き変換した方がよい。
- というかT-coderも部首合成変換はほとんど使ってないと思われる
複数文字のhelp表表示機能、visual modeからのhelp表表示機能
例えば「西田」という漢字を交ぜ書き変換し、help表bufferを消した後でまた見たくなったとする。
visual modeで「西田」を選択後、(tcvimeのdefaultでは)C-k ?を入力
おわりに
時代はT-code
たった1行のコード(というか2つのcommand)でひたすらアイドル水着画像をあつめる - Vimperator Advent Calendar 2012 17日目
たった10行のコードでひたすらアイドル水着画像をあつめる の「画像の一覧を取得する」節までをvimpでやるとなると、
:open http://matome.naver.jp/odai/2135350364969742801
:echo [img.src for (img of content.document.wrappedJSObject.images)]
になります。
せっかくbrowserにいるので「ブラウザに表示する」節以降までやりきるべきかとは思いますが持病のEDがひどくそこまでやりきれませんでした。
とんずらー!
謝辞
PythonのList comprehensionみたいな書き方は@teramakoさんにVimperator - Lingrで教えてもらいました。あざす。
Ubuntu preciseでの10GbEとinfinibandのiperf結果 - Debian/Ubuntu JP Advent Calendar 2012 8日目(2巡目)
Debian/Ubuntu JP Advent Calendar 2012 8日目担当、日本目光会のkozo2です。 昨日は岩松さん @iwamatsu の apt-forktracer を使ってパッケージをチェックする でした。 今日は、Ubuntu precise以降での10GbEとinfinibandの導入方法とその速度のiperf結果をお伝えします。
10GbEの導入方法とiperf結果
10GbEのcardを挿せば、特にdriverとかそれ用の設定は必要無く普通に認識されてるかと思います。
lspci |grep Gigabit
それらしきEthernet controller
ls -l /sys/class/net/eth-/device/driver
lrwxrwxrwx 1 root root 0 Nov 16 18:04 /sys/class/net/eth-/device/driver -> ../../../../bus/pci/drivers/ixgbe
下記は3つのクライアントからiperfした結果です。 高性能なクライアントほど速度が出てるようでした。
iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local ---.---.---.--- port 5001 connected with ---.---.---.--- port -----
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 3.69 GBytes 3.16 Gbits/sec
[ 5] local ---.---.---.--- port 5001 connected with ---.---.---.--- port -----
[ 5] 0.0-10.0 sec 6.99 GBytes 6.03 Gbits/sec
[ 4] local ---.---.---.--- port 5001 connected with ---.---.---.--- port -----
[ 4] 0.0-10.0 sec 4.20 GBytes 3.60 Gbits/sec
infinibandの導入方法とiperf結果
これもipoibを使う分には、precise以降のkernelであればinfinibandのcardを挿し下記の commandを実行するだけでib interfaceの設定ができるようになります。
sudo apt-get install opensm
modprobe mlx4_ib
modprobe ib_umad
modprobe ib_uverbs
modprobe ib_ipoib
lspci |grep InfiniBand
03:00.0 InfiniBand: Mellanox Technologies MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE] (rev b0)
ls -l /sys/class/net/ib0/device/driver
lrwxrwxrwx 1 root root 0 Dec 8 04:42 /sys/class/net/ib0/device/driver -> ../../../../bus/pci/drivers/mlx4_core
こっちでも3つのクライアントからiperfしてみました。ただしこっちのクライ アントはすべて同スペックです。単純には比べられないのですが10GbEのクラ イアントより性能は劣ると思います。
iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local ---.---.---.--- port 5001 connected with ---.---.---.--- port -----
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 3.38 GBytes 2.90 Gbits/sec
[ 5] local ---.---.---.--- port 5001 connected with ---.---.---.--- port -----
[ 5] 0.0-10.0 sec 3.40 GBytes 2.92 Gbits/sec
[ 4] local ---.---.---.--- port 5001 connected with ---.---.---.--- port -----
[ 4] 0.0-10.0 sec 3.40 GBytes 2.92 Gbits/sec
おわりに
これだけ見る限りでは10Gの方が速いみたいですが、どうなんですかね
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)と統合しているのが特徴です。
その他挙げますと
- 同期用storageダータplanでは300M
- オープンソース
って感じですが、とりあえず 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.
と入力すると、下記のような補完が候補が出ます。
また
:js ZoteroPane.
のあとに to と入力することで下記のように補完候補が絞られるのがわかるでしょう。
ここで
: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