(rubikitch loves (Emacs Ruby CUI Books)) このページをアンテナに追加 RSSフィード

2011-11-18

[]ネットブックと母艦を同期させる

それでは、ネットブックと母艦のデータを同期させる方法を説明します。

2つのパソコンデータを一致させておくことで、
一方が他方のファイル上書き保存してしまう
危険性がなくなります。

2台以上のパソコンを使っている人ならば
おそらく、上書き保存をしてしまって
途方に暮れたことがあると思います。

ここでお話する同期を取る方法さえしっかりやっておけば、
こんな問題とはおさらばすることができます。

パソコンデータを同期させるにはunisonというツールを使います。

rsyncに似ているのですが、unisonは双方のパソコンデータ更新されていても対応できる強味があります。

それではunisonを使って同期させるための手順を示します。

とりあえず母艦はLinuxネットブックWindowsだと想定しますが、
手順自体にはOSは関係ありません。

1. 母艦に同期用のネットワークカードを接続する
2. 母艦とネットブッククロスLANケーブルで接続する
3. 母艦のIPアドレスを設定する(例:192.168.1.1)
4. ネットブックIPアドレスを設定する(例:192.168.1.4)
5. 母艦にsshd(sshサーバ)を立ち上げる
6. ネットブックsshクライアント(plink)をインストール・設定する
7. ネットブック側でpageantを使ってパスフレーズ入力なしでssh接続できるようにする
8. 母艦にunisonをインストールする
9. 母艦とネットブックそれぞれに同期させるディレクトリを作成する(例:~/sync, d:\sync)
10. ネットブック側にd:\sync\binディレクトリを作成し、PATHを通しておく
11. ネットブックにunisonをインストールする
12. ネットブックにunisonを動かすバッチファイル(シェルスクリプト)を作成し、d:\unison\bin\usync.batと保存する
13. ネットブックを立ち上げたら毎回sshパスフレーズ入力する
14. ネットブックからusyncを実行して母艦と同期する

この手順により、ネットブックからunisonを動かすことで、
母艦と同期することができるようになります。

母艦とネットブックを直接接続するには、LANカードクロスケーブルで接続することに注意してください。

LANケーブルといっても、見た目はストレート
ケーブルと変わらないので紛らわしいです。

そのため、LANケーブルを購入するときは
クロスと明記してあるものを選んでください。

クロスケーブルの場合は、端に「X」という
文字が書いてあることがあります。

IPアドレスの設定については、環境に
よって異なるので各自調べてください。

母艦側にはsshdを立ち上げておいてください。

なお、Windows用のsshクライアントとしては、
puttyコマンドライン版であるplinkを使うのが無難です。

puttyhttp://www.chiark.greenend.org.uk/~sgtatham/putty/ で入手できます。

http://net-newbie.com/putty.html を参考にして
putty(plink)をインストールして、公開鍵・秘密鍵を
登録しておいてください。

そして、「"C:\Program Files\putty\pageant.exe" "C:\Program Files\putty\id_rsa.ppk"」を
実行するようにスタートアップフォルダショートカットを
作っておいてください。

これでネットブックが立ち上がるたびにパスフレーズ入力するようになり、同期のたびにパスフレーズ入力
する必要がなくなります。

ssh環境が整ったら、母艦・ネットブックともに
unisonをインストールします。

Linux側は「apt-get install unison」等で
インストールしてください。

Windows側は http://alan.petitepomme.net/unison/index.html から
unisonのバイナリダウンロードします。

この際注意する必要があるのは、
母艦と同じバージョンでないと
unisonは動かない点です。

母艦がバージョン2.27.72ならば、
Windows側も2.27.72をインストール
する必要があるということです。

もしかしたら、TEENY(72の部分)は
一致していなくても動くかもしれません。

unisonの実行ファイルは 
D:\sync\bin\unison.win32-textui.exe 
に保存しておきます。

その後はWindows側に以下のバッチファイルを作成します。

http://www.rubyist.net/~rubikitch/archive/usync.bat.txt

これを d:\sync\bin\usync.bat として保存します。

以下の設定になっているので、
変数の値を適宜書き換えてください。


set UNISON_PATH="D:\sync\bin\unison.win32-textui.exe"
set PLINK_PATH="C:\Program Files\putty\plink.exe"
set SSH_USER=me
set SSH_HOST=192.168.1.1
set SSH_PORT=22
set SSH_KEYFILE="C:\Program Files\putty\id_rsa.ppk"
set LOCAL_ROOT=D:\sync
set REMOTE_ROOT=/home/me/sync


なお、sshは公開鍵を使っているので、
SSH_PASSWORDは無視してかまいません。

バッチファイルを修正したら、コマンドプロンプトからusyncと打つことで、
母艦の~/syncとネットブックのd:\syncの内容が一致します。

次は、ネットブックEmacsインストールし、環境構築を行う話をします。

2011-04-26

[]Yokohama.vimへ行ってきました!

24日、Yokohama.vim #1へ行ってきました。

Yokohama.vim #1 を開催しました - Guyon Diary

意外なことに、これが勉強会初参加です。 しかも、自分のフィールドであるEmacsRubyではなくて、アウェイなVim勉強会

いろいろ事故ってしまい、遅刻してしまいました。本当にごめんなさい。

それにしても、みんなノートパソコンを持ってきていて、僕は持っていないので肩身が狭かったです。 そのうち安価ネットブックを手に入れたいところです。

感想はみんな書いているし、多忙なので、僕はやや短めで(笑)

テーブルシャッフル

VimLevelにあわせてテーブルシャッフルを行いました。 VimLevelの順番に後ろにみんなが並ぶのです。 こーゆーのは初体験で意外におもしろかったです。 高レベルの人はとても少なく、初心者・初級者が多かったです。

僕はhjklとかiaxrあたりが使えるVimLevel1です。 モード切り替えという考え方が好きで苦にならないのでVimLevel 1-2です。

しかし、いろいろカオスになってしまったのでシャッフルはなしになりました。

Shougoさんの発表

なんと、同じテーブルにShougoさんが! これはうれしかったです。

内容は、彼が使っているVimプラグインの紹介です。 「レベルが高いVim使いは、ほぼ自作プラグインで埋めつくされている」ということがわかりました。 まあ、僕もたくさんの自作elispを使っているので、気持ちはよくわかります。

僕とShougoさんの対談 「EmacsVim〜二人の異端児による次世代エディタ裏話〜」

これは僕のセッションでShougoさんとの対談です。 勉強会に初登場して、しかもセッション持つとか、あまりそういう人はいないと思います(笑) Vimmerにとっては「あんただれ?」という感じだったかもしれませんが、空気読まずに対談を開始。

タイトルは「EmacsVim〜二人の異端児による次世代エディタ裏話〜」です。 EmacsVimという対極にいる二人が、独自エディタ論を熱く語りあうのがコンセプトです。 正直、かなりディープでコアでアブない対談なので、ついていける人がどれくらいいるかわかりませんが(^^; それでも、Vimプラグインelispを書く人にとっては、聞き逃せない対談なのは間違いありません。

Shougoさんは、数々のVimプラグインを作っており、VimEmacs的に使っている人です。 unite.vimは僕のanything.elをかなり参考にしており、ここまで真似できるのかというほどのクオリティで、びっくりしました。 また、僕が使っているeshellも参考にvimshellを開発していたりと、Vimでやりたい放題しています。

前日から、対談の筋書きをしっかり練って、台本を見ながらの対談です。 予定では45分でしたが、お互い熱く語りあって、大幅にオーバーし、70分になってしまいました(^^;

僕もShougoさんもエディタに関する考え方はものすごい似ていていました。 「エディタOSだ」という言葉にはとても共感できます。 僕も文字入力はほぼすべてEmacs統合しているので、X Window Systemでの日本語入力は設定していません。 お互い、既存の腐ったインターフェース概念をぶち壊し、新たなモノを設計する「創造破壊」をやっています。

みんなの前で対談をするとか、初めてなので、正直、最初は右も左もわからない状態でした。 しかし、僕のアドバイザーが効果的な対談の作法を教えてくださったおかげで、対談は成功しました。 アドバイザー感謝です。

moozさんとの交流

対談後に id:mooz さんと少しお話をしました。 Firefox界のanything.elであるKeySnailを実演してくれました。 anything-c-moccurみたいなこともできたりとか、すごかったです。 flashからフォーカスを奪い返すことができたりするので、第2ブラウザChromeからFirefoxに乗り換えようかなと思いました。 是非とも使いたいです。 ちなみに第1ブラウザw3mです、はい(笑)

VimEmacsユーザ交流セッション

交流セッションでは、同じ机にShougoさんがいたので、かなり盛り上がりました。

お題1:Vim(もしくはEmacs)を使ってない自分はすごく損をしている?

もちろん、大損ですね。 Emacsを使っていない僕なんて、考えられません。

お題2: 春から"プログラマー"になる人はどんなEditorを使うといいか?(VimまたはEmacsまたはその他Editorをお勧めする理由)

先輩やメンターが使っているものが鉄板です。 意志の強い人、あえて茨の道へ行きたい人は、VimEmacsをどうぞ(笑) 年配の人と仲良くなりたい人にもVimEmacsがいいでしょう。

ちなみに僕はEmacsへの憧れからEmacs道へ進みました。

お題3:VimまたはEmacsで開発をしている方の開発からリリースまでの手順や使用しているツールが知りたい

ヒューマンエラー防止のために自動化は不可欠だと思います。

ちなみに僕のelispリリース手順はS式ハイパーリンクです。 こんな式をファイルの末尾に書いて、リリースするときはそこでC-x C-e! Gitpushし、EmacsWiki公開、Twitter告知すべてやります。

;; (progn (magit-push) (emacswiki-post "anything-complete.el"))

お題4: フリーディスカッション(質問にひたすら応えるターン)

ここはgdgd雑談

vimgolf

ノートパソコン持ってないので他の人がやっているのを見るくらいしか(涙) やはり勉強会ノートパソコンは必須ですね。

その後

帰りは、横浜の街をぶらぶら歩いていました。 横浜とかめったに行かないので、どうせだから探索しました。 探索とか好きなので。

そしたら、どこかの百貨店で巨大な駄菓子屋がありました。 子供のころ見かけた懐しい駄菓子がいっぱい、あの頃のままでいまだに生産されていたのが驚きでした。 会社つぶれてなくてよかったと思い、買いあさり、食べまくりました。

駄菓子は、久々に食べるとおいしいと感じるものですが、今食べたら昔ほどの感動はありませんでした。 数年前に食べたときは、それなりにおいしいと感じたものですが。 今の食生活玄米菜食で糖分もかなり減らしているので、味に違和感がありました。 着色料などの添加物もけっこう入っていますし。 甘いのはめちゃくちゃ甘いです。

これを機に駄菓子はもう食べないでしょう。 しかし、一時とはいえ昔の感情を振り返ることができたのでよかったです。

2011-04-01

[]Linuxと決別します!

ども、るびきちです。

この度、14年間使ってきたLinuxから決別することにしました。
今日からWindowsを使うことにしました。

なぜ、突然このような決断を、と思ったでしょう。
自分でいろいろいじれるLinuxは今でも大好きです。
車にたとえたら、マニュアル車ですから。

しかし、いくら自分Linux大好きといっても、世の中はまだWindows全盛です。
便利なツールがあっても、Windowsでしか使えなくて、齒痒い思いをすることもたびたびありました。

Windowsといえば、たしかにウィルスは怖いです。
しっかりWindows Updateをして、きちんとウィルス対策ソフトを導入します。
もちろん怪しいサイトからダウンロードすることはしませんし。

今更Windowsに転向するのは茨の道だと思っています。
慣れない操作体系ですから。

しかし、考えてみれば、EmacsRubyWindowsで動きます。
シェルといえば、コマンドプロンプトは糞でしかないが、最強のシェルであるeshellがあります。
わざわざLinuxにこだわる理由はもはやありません。
様々な便利ツールが存在するWindowsがすばらしいに決まっています。

そして、Windows転向の最大の理由は、初心者の気持ちを思い出すためです。
今までLinuxEmacsというニッチな世界にいてましたが、原点回帰したいのです。
今、Windows初心者として再スタートを切ることには意味があると考えています。
なるべくマニアックな操作体系をもたずに、「ふつう」の環境で操作することに努めます。
そうすることで、一般人と同じ目線で物事を考えられるようになります。

今からDebian GNU/Linuxを消して部屋に置いてあるWindows XPをインストールします。

今までありがとう、そして、さようなら、LinuxLinuxが恋しくなったらcoLinuxという形で共存させますね。

<2011-04-19 火> 騙されてる人多すぎワロタwww

Twitterでまんまと騙されてる人がいるみたいだけど、これエイプリル・フールですよ。 日付見てみなさいよ。 僕、嘘つくの下手だと思っているので、騙されている人がこれだけいたのは意外でした。

ただ、初心者の気持ちを忘れないことはとても大切なことなので、新たなPCを購入したときには、vmware上でWindowsを動かすと思います。

2011-03-23

[]インテルのオンボードグラフィックでDebian squeezeのX Window Systemを動かす5つのステップ

<2011-03-23 水> 更新!本家から最新版を取ってくる必要があります。

先月、Debian GNU/Linux squeezeがリリースされました。 もちろん僕もアップグレードしました。

この話は、おそらくUbuntu ユーザにも関係があるかもしれません。

Debian GNU/Linux squeezeにアップグレードしたとき、一番困ったのがX Window Systemの設定でした。 インテルのオンボードグラフィックでは xserver-xorg-video-intel というXサーバを使うのですが、これがフリーズするのです。 フリーズが解決したと思ったら、今度は描画速度がめちゃくちゃ遅いという。 特に端末の描画速度がやばいほど遅く、イライラしていました。

しょうがないから xserver-xorg-video-fbdev を使っていたのですが、今度はmplayerで -vo xv が使えず、動画の拡大再生が遅くなる問題が起きました。 解決策がわからないまま1ヶ月もの間もがき苦しんでいました。 特にカーネル2.6.38は3/15に出たばかりなので、それ以前では解決できなかったのかもしれません。*1

今、やっとの思いで xserver-xorg-video-intel を普通に使えるようになりました。 そのためのステップは、

  1. /etc/modprobe.d/i915-kms.conf を書き換える
  2. カーネルを 2.6.38 にアップグレードする
  3. xserver-xorg-video-intelの最新版を取ってくる
  4. /etc/X11/xorg.confを書き換える
  5. startxを実行する(xdmの人は実行しなくてもよい)*2

/etc/modprobe.d/i915-kms.confを書き換える

/etc/modprobe.d/i915-kms.confを以下のように書き換えます。 これでKMSが有効になります。 Linuxを立ち上げたときに、すでに解像度が広くなっていたら、設定済と思われます。

options i915 modeset=1

もしこの設定をしても解像度が広くならなければ、~/.bash_profileや~/.zprofileに以下の行を書き加えます。

sudo modprobe i915 modeset=1

カーネルを2.6.38にアップグレードする

僕の環境では、xserver-xorg-video-intelは、2.6.37までのカーネルだとフリーズしていました。 それが、2.6.38にアップグレードすることでフリーズはなくなりました。

The Linux Kernel Archives

展開した後、「make oldconfig」を実行すれば、現在の設定を引き継ぐことができます。 あのミラクルパッチも入っているので、アップグレードすると幸せになれます。 デフォルトではNoになっているので、Yesを選んでください。

CONFIG_SCHED_AUTOGROUP=y

具体的なコマンドはこんな感じです。

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2; tar xjf linux-2.6.38.tar.bz2; cd linux-2.6.38
$ make oldconfig
$ sudo nice make-kpkg clean; sudo nice make-kpkg --initrd --revision=001 kernel_image kernel_headers
$ sudo dpkg -i ../linux-headers-2.6.38-rc7_001_i386.deb ../linux-image-2.6.38_001_i386.deb 

xserver-xorg-video-intelの最新版を取ってくる

ここまででフリーズは解決しましたが、今度は描画速度の問題を解決します。 Debian squeezeの xserver-xorg-video-intel はDRIが無効になっています。 このせいで描画速度がガタ落ちなのです。

これは最新版 xserver-xorg-video-intel を本家から取ってコンパイルくることで解決します。 最新版では、たとえグラボが固まっても復帰してくれます。

コンパイルのためのヘッダファイルは一括して取ってこれます。

コンパイル後、squeezeにインストールされているファイルを強引に置き換えます。

$ sudo apt-get build-dep xserver-xorg-video-intel
$ wget http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/snapshot/xf86-video-intel-2.14.901.tar.bz2
$ tar xjf xf86-video-intel-2.14.901.tar.bz2
$ cd xf86-video-intel-2.14.901
$ sh autogen.sh
$ make
$ cd src
$ sudo cp legacy/i810/xvmc/.libs/libI810XvMC.so.1.0.0  /usr/lib/libI810XvMC.so.1.0.0
$ sudo cp xvmc/.libs/libIntelXvMC.so.1.0.0 /usr/lib/libIntelXvMC.so.1.0.0
$ sudo cp .libs/intel_drv.so /usr/lib/xorg/modules/drivers/intel_drv.so 

/etc/X11/xorg.confを書き換える

僕のxorg.confを貼り付けておきます。 この設定にしてから、まだ固まったことはありません。

Section "Device"
Identifier "Configured Video Device"
Driver "intel"
# これを入れないと固まる
Option "Shadow" "True"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
EndSection

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
# 速度優先のため16bppにしている
DefaultDepth	16
	SubSection "Display"
		Depth		16
		Modes		"1920x1080"
	EndSubSection
	SubSection "Display"
		Depth		24
		Modes		"1920x1080"
	EndSubSection
	SubSection "Display"
		Depth		32
		Modes		"1920x1080"
	EndSubSection
EndSection

DRIが有効になっているならば、以下のように表示されるはずです。 無効のときは「direct rendering: Failed」と出てきます。

$ grep 'direct render' /var/log/Xorg.0.log
(II) intel(0): direct rendering: DRI2 Enabled

その結果

xengineの値が8000→24000と大幅に上がり、描画はかなり速くなりました。めでたしめでたし。

*1:2.6.38rc7を試しましたが、OSそのものがフリーズする問題があり、使えませんでした。

*2:startxを実行している人は少数派?

2010-11-19

[][][]アプリケーション拡張機能なしでキーボード操作を快適にする方法

キーボード環境を快適にするには

作業効率を高めるには、キーボード環境を整えることが重要です。 ブラインドタッチをする人にとっては、ホームポジションからあまり手を離さないで操作できることが増えれば快適になります。 キーボード操作が好きな人は、本当に必要なとき以外はマウスを使うことを嫌がりますし、ホームポジションから手を離すことも嫌がります。

僕は、ウィンドウマネージャーはratpoison、キー割り当てはxmodmapを使っています。

CtrlとCapsLock入れ替え

快適にするために、最低限やっておくこととしては、CtrlとCapsLockを入れ替えておくことです。 キーボード操作が中心になると、Ctrlの使用頻度はかなり高いので、これは必須となります。 入れ替えておくと、Aの左にCtrlが来るので、かなりCtrlが押しやすくなります。 xmodmapの設定ファイルに以下の設定をしておきます。 今では、xorg.confを設定する方法もあるらしいです。

remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

Aの左は小指を酷使して嫌という人は、変換、無変換キーをCtrlに割り当てるという手もあります。 僕の場合、 変荷重キーボードを買ったので 、 Aの左がCtrlでも疲れません。 変荷重キーボードは、小指のように力が弱い指については、弱く押しても入力できるようになっています。

半角・全角キーをESCに割り当てる

半角・全角キーをESCに割り当てるのも地味に役立ちます。 そして、遠くにある元のESCキーは余ったファンクションキーに割り当てておくとあとで機能を割り当てられます。 ファンクションキーはF35まで定義されているので、F13以降から適当に割り当ててください。

!Esc = WWW
keycode 9 = F24
!半角/全角
keycode 49 = Escape

F24に割り当てたEscキーは、ホームポジションから遠すぎるので、タイピング中に使う機能には割り当てることはおすすめできません。 僕は、BGMの一時停止機能に割り当ててあります。

ショートカットキーを機能を割り当てる

特にLinux環境だと、ショートカットキー(単にキーということにする)に自由に機能を割り当てることができるようになっています。 キー割り当ては、ウィンドウマネージャーレベル、アプリケーションレベルでできます。

ウィンドウマネージャーレベルでは、今どんなアプリケーションを操作していても有効です。 対して、アプリケーションレベルでは、そのアプリケーション固有の機能を割り当てます。 ここで注意が必要なことは、ウィンドウマネージャーレベルのキーが優先することです。 すでにウィンドウマネージャーレベルで割り当てられたキーは、アプリケーションでは使えません。 ウィンドウマネージャーレベルで割り当てたキーを忘れてしまうことがあるので、アプリケーションとかぶらないようにすることが大事です。

僕の場合は、ウィンドウマネージャーレベルでのキーはホームポジションから遠めにしてあります。 たとえば、F24(xmodmapでESCをF24に割り当て済み)に「/bin/echo pause > ~/mplayer.fifo」を割り当てるには ~/.ratpoisonrc にこう指定します。

definekey top F24 exec /bin/echo pause > ~/mplayer.fifo

ちなみにこのコマンドはMPlayerで一時停止を行うコマンドです。 予め「mkfifo ~/mplayer.fifo」で作成しておき、 ~/.mplayer/config に「input=file=/r/mplayer.fifo」という行を加えておく必要があります。

Super、Hyperキーを使う

すでにアプリケーションにはたくさんの機能が割り当てているので、Shift、Ctrl、Altの修飾キーでは足りなくなってきます。

悲観する必要はありません。 実はX Window Systemでは、SuperとHyper修飾キーも使えます。 しかし、それらはキーボードには存在しません。 ではどうするか、それはxmodmapでキーに割り当てておくことです。

僕の場合、無変換キーをAltに割り当て、AltキーをHyperに割り当てています。 Altはそこそこ使用頻度が高いのでより押しやすい位置に移動したのです。 そして、元のAltキーにHyperを割り当てました。

! 131 = 無変換
remove mod1 = Alt_L
keysym Alt_L = Hyper_L
add mod3 = Hyper_L
keycode 131 = Alt_L
add mod1 = Alt_L

この設定をしてからXを再起動すればHyperが有効になります。

Hyperはどんなアプリケーションにも割り当てられていない*1ので、自分の好き勝手に割り当てることができます。 EmacsでHyper-q(元のAlt-q)を押したとき「H-q is undefined」と出てくれば、正しく設定されています。 Hyper修飾子は「H-」です。

SuperはデフォルトでWindowsキーに割り当てられているらしいです。 僕は使っていません。 ホームポジションからあまりにも押しづらく、使いものにならないからです。

特定の操作で別のキーを押したことにする

ショートカットキーといえば、キーに機能を割り当てるものと思いがちです。 実は特定のキーを押したときに、別のキーを押したのと同じ効果を得ることもできます。

たとえば、多くのアプリケーションではPageUpやPageDownにはスクロールなどの機能が割り当ててあります。 しかしこれらのキーは遠すぎます。 そこでもっと楽な操作でこれらのキーを押したのと同じ効果を得るようにするのです。 そうすることで、あらゆるアプリケーションの操作が快適になります。 ブラウザでもEmacsでもホームポジションから手を離さずにキーボードでスクロールできます。

すでにHyperキーを設定している場合、ratpoisonでは以下の設定をします。

definekey top H-s meta Prior
definekey top H-d meta Next
definekey top H-a meta Home
definekey top H-f meta End

この設定で、H-sとH-dでPageUpとPageDownとなります。 ついでに、HomeとEndもそれぞれH-aとH-fに割り当てましょう。 こうすることで、スクロールで使われる特殊キーが左手のホームポジションに集約されます。

常にH-dとH-aでスクロールする習慣がつくと、EmacsではC-vとM-vは使わなくなります。 そうなるとC-vとM-vは別の機能に割り当てることも可能になります。

*1:少なくとも僕は知らない。