今更だけどvimperatorが便利すぎる.

dでタブを消したときにtabかescを押さないと
フォーカスがvimperatorを離れているような気がする.
そこだけ改善されたらいいのだけど,どこかに情報ないかしら.*1
以下,.vimperatorrcと入れてるプラグイン

[更新:2009/04/19]

echo "Loading...."

set titlestring=Fx3
set guioptions=
set hlsearch

set visualbell

set wildoptions=auto
set complete=sl
set focuscontent
set ignorecase
set ui.key.generalAccessKey=0
set verbose=1
set history=5000
set hintmatching=custom

let g:ex_ime_mode = "inactive"
let g:textarea_ime_mode = "inactive"

let g:hintsio="iO"
let g:hintchars="HJKLASDFGYUIOPQWERTNMZXCVB"

colorscheme sweets

noremap j 20j
noremap k 20k

noremap <C-j> gt
noremap <C-k> gT

cnoremap <C-j> <Tab>
cnoremap <C-k> <S-Tab>

map <C-C> :copy titleAndURL<CR>
map c :copy<Space>
map s :gsearch<Space>

" copy.js
javascript <<EOM
liberator.globalVariables.copy_templates = [
 { label: 'titleAndURL',    value: '%TITLE%\n%URL%' },
 { label: 'title',          value: '%TITLE%', map: ',y' },
 { label: 'url',            value: '%URL%' },
 { label: 'anchor',         value: '<a href="%URL%">%TITLE%</a>' },
 { label: 'selanchor',      value: '<a href="%URL%" title="%TITLE%">%SEL%</a>' },
 { label: 'htmlblockquote', value: '<blockquote cite="%URL%" title="%TITLE%">%HTMLSEL%</blockquote>' },
 { label: 'ASIN',           value: 'copy ASIN code from Amazon', custom: function() content.document.getElementById('ASIN').value},
 { label: 'hatena',         value: '[%URL%:title=%TITLE%]' },
];
EOM

" Google Reader
autocmd LocationChange .* js modes.passAllKeys = false
autocmd LocationChange www\\.google\\.(co\\.jp|com)/reader js modes.passAllKeys = true

" disable accesskey
" javascript <<EOM
" liberator.options.setPref(’ui.key.generalAccessKey’, 0);
" EOM

" Gmail
js <<EOF
autocommands.add('LocationChange',/mail\.google\.com\/(mail|a)\//,[
  'js plugins.feedKey.setup(',
  '"c / y j k n p o u e x s r a # [ ] z ? gi gs gt gd ga gc".split(/ +/).map(function(i) [i, "4" + i])',
  ');'
].join(''));
EOF

echo "done"
" vim: set ft=vimperator:
  • 入れたplugin
    • char-hints-mod.js
    • commandBookmarklet.js
    • copy.js
    • feedSomeKeys.js
    • googlesuggest.js
  • 入れたtheme
    • sweets

*1:ぐぐれかすですね,わかります

読む本,読んでいる本,読んだ本

ナラタージュ

9月のサークル合宿で行われる読書会の課題本.
Amazonであらすじを確認.甘い甘い,青い春の物語のよう.
こういう小説って背中のあたりがかゆくなる.
甘ったるいのは苦手なので,さっさと買ってさくっと読みたい.*1

ナラタージュ

ナラタージュ

サイ本

今更ながら,JavaScript絶賛入門中.
サイ本をひたすら読んでは,コードを書いている.
いつも通り「こう書けるんじゃないかな?」と思ったコードが書けたり書けなかったり.
もう慣れしかないですね.あとは,愛.

JavaScript 第5版

JavaScript 第5版

はがれん20巻

読んだ後に読まなくても良かったかなと思った.
その理由として,

  • この先に「転」があることがわかると,「承」になかなか価値を見いだせないからなのか
  • 単純に,読んで満足してしまったからなのか

よくわからない.でも,はがれんは良い作品です.
誇って輸出していい作品だと俺は思う.

鋼の錬金術師 20 (ガンガンコミックス)

鋼の錬金術師 20 (ガンガンコミックス)

*1:とか言いつつ,読んで切なくなってほろりときたりするんだろうなぁ

あっづい

連日の猛暑がすんごいですね.
大阪の家の僕の部屋には,エアコンがないのです;
そのため,扇風機で頑張っていましたが,
この暑さは集中力をそぎ落とすほどの力がある;

なんとかならないものかと,Google先生にお伺いを立ててみました.

どうやらキュウリを食べるのがいいらしい!(無知
キュウリかじりながらビールですかねこりゃ.

Pythonでのエンコーディングの設定

Pythonで,日本語を用いる場合や文字列処理を行う場合には,エンコーディングの設定めも

Pythonのsite-packagesの場所確認方法

site-packagesの場所はOSやPython のインストー ル場所によって異なるのでまずは場所の確認.
シェル上から以下のコマンドを実行する.

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

Pythonのエンコーディング

site-packagesディレクトリ以下にsitecustomize.pyというファイルを作成する.
sitecustomize.pyの内容は、UTF-8の場合には下記のようにする.

import
sys
sys.setdefaultencoding('utf-8')

エンコード設定を行わない場合のエラー

Pythonをインストールした初期設定のままだと,'ascii'などが内部エンコーディングに使用される.

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinalnot in range(128)

辞書でvalueからkeyを引く

valueが数値のとき,
「valueがもっとも小さいものから5つkeyが知りたい」
「valueがもっとも大きいものから5つkeyが知りたい」
という場合.*1

testdic = {'hoge':5, 'fuga':50, 'piyo':25}
testlist = zip(testdic.keys(), testdic.values())
#[('fuga', 50), ('piyo', 25), ('hoge', 5)]
testlist.sort(lambda a, b: cmp(a[1], b[1]))
#[('hoge', 5), ('piyo', 25), ('fuga', 50)]

もっと簡単にもかけるようです.(コメントでアドバイスいただきました)

testdic = {'hoge':5, 'fuga':50, 'piyo':25}
testlist = testdic.items()
#[('fuga', 50), ('piyo', 25), ('hoge', 5)]
testlist.sort(key=lambda a: a[1])
#[('hoge', 5), ('piyo', 25), ('fuga', 50)]

(うーん,items()とかいつも使っているのに,不覚...)

あとはスライシングするとか.

for k, v in testlist[:2]:
    print k

とかとか.
たまーにvalueからkeyを引きたいんだけど,
どうしようと思うときがあるのでめもめも.

*1:任意のvalueをもつkeyが複数有る場合は知らない

virtual-pythonとsetuptools

id:cubicdaiyaに「日記をいつ書くんだ」と言われ,
毎回「来月になったら本気出す!」と言っているid:aircastleことワサビこと木浦でございます.*1
突然ですが,大学でvirtual-pythonを入れて作業をしなければならないことになりました.
virtual-pythonだけではなくて,setuptoolsも入れることになったので,インストールの覚え書きです.
なお,ここでは手元のMacBookでテストを行ったことについて書きます.

virtual-python

virtual-pythonとは

virtual-pythonはサーバなどにインストールされたpython環境を
ホームディレクトリ内などに構築するためのものです.
「どういう場合に必要なんだ!」という人のために説明を書くと,
例えばレンタルサーバなどがあります.
レンタルサーバでsetuptoolsを使おうとすると,
権限の関係でpackageをインストールできなかったりします.
こういう場合には,自分のホームディレクトリ内などに,
python環境を作り,ホームディレクトリ内のpython環境を用いてsetuptoolを実行すれば,
ホームディレクトリ内の特定フォルダにpython packageをインストールすることが可能です.
なので,ここに書くことはさくらインターネットなどにも,まま応用可能です.

インストール方法

先にコマンドを書いてしまうと下記の通りです.

%pwd
/Users/wasabi/
%wget http://peak.telecommunity.com/dist/virtual-python.py
%mkdir python
%python2.5 virtual-python.py --prefix=/Users/wasabi/python

複数バージョンのpythonをインストールしていてなおかつ,
特定のバージョンに対してvirtual-pythonをインストールしたい場合は,
virtual-python.pyを実行するpythonコマンドを明確に指定しましょう.
ここでは,上記の通り,python2.5コマンドを用いて実行します.

デフォルトエンコーディングの設定

これでインストールができたので,デフォルトエンコーディングの設定を行っておきます.
ホームディレクトリ以下のpython環境のsite-packagesの中にsitecustomize.pyというファイルを作ります.

%pwd
/Users/wasabi
%cd python/lib/python2.5/site-packages
%touch sitecustomize.py
%emacs sitecustomize.py

sitecustomize.pyには以下のように書きます.

import sys
sys.setdefaultencoding('utf-8')

日本語を用いた処理などを行わないのであれば,この設定は必要有りません.

作った環境についての詳しいこと
%ls -R ~/python

などとすると,ディレクトリ構造がわかります.
binフォルダには,各種コマンドがインストールされ,
libフォルダには各種ライブラリがインストールされていることがわかります.

setuptools

setuptoolsとは

setuptoolsはpythonでのパッケージ管理システムです.
setuptoolsをインストールすれば,easy_installというコマンドができ,
pythonで作られた便利なパッケージをpythonから利用することが可能です.

インストールの前に!

setuptoolsのインストールをする前に,以下の2つを設定する必要があります.

  • setuptoolsを用いてパッケージをインストールする場所
  • setuptoolsを用いてインストールしたコマンドを入れる場所

これらを.pydistutils.cfgとして設定します.*2

%pwd
/Users/wasabi/
%touch .pydistutils.cfg
%emacs .pydistutils.cfg

このファイル内に設定を行います.
virtual-pythonを用いて設定したのはホームディレクトリのpythonフォルダでしたね.
このフォルダの下のほうには先に示したようにsite-packagesフォルダがあります.
また,binフォルダの中にコマンドが入っているので,
ここにsetuptoolsでインストールしたコマンドを入れるのがよいでしょう.
というわけで,.pydistutils.cfgには以下のように設定してみました.

[install]
install_lib = ~/python/lib/python2.5/site-packages
install_scripts = ~/python/bin
インストール

やっとこれでsetuptoolsのインストールができます.

%pwd
/Users/wasabi
%wget http://peak.telecommunity.com/dist/ez_setup.py
%~/python/bin/python ez_setup.py

これで,setuptoolsのインストールができました.
~/python/bin以下にeasy_installがあればインストールは成功です.

%~/python/bin/easy_install simplejson

などとして,simplejsonがインストールできるかどうか確認しましょう.

%~/python/bin/python

として,インタラクティブシェルからimport simplejsonができることも確認しておきましょう.
最後にPATHの設定をして,終了です.

*1:あ,ちなみにはてなアルバイターになりました.

*2:設定をしなくてもインストールは可能かもしれません.Macの場合にはこの設定をしたほうがよいでしょう.詳しくはhttp://peak.telecommunity.com/DevCenter/EasyInstall

screenの設定

MacBook内のApacheTracを動かそうとしてはまっている山葵です。
Tracのこともおいおい書きたいのですが、今回はScreenについてです。

Screenとは

UNIXLINUXでは単一のコンソールだけでは、足りないことがあります。
コンソール上でパッケージ管理システムでインストール作業などを行っている場合に
他の作業などを行いたい場合にはAlt+→などで他のコンソール画面を呼び出すこともできますが。
X上でのktermなどではそれができません。
screenはこのような場合に、単一のコンソール上で仮想画面を複数操作するためのソフトウェアです。

インストール方法

すでに、さくらインターネットへのインストール方法は書きました。
BSD、Linuxでのインストール方法は以下のとおり。
あ、うろ覚えなので間違ってるかもです(ぇ

  1. FreeBSD,OpenBSD
# port install screen
  1. Debian,Ubuntu
# aptitude install screen
  1. Fedora,CentOS
# yum install screen

で、実際の設定について

設定ファイルはホームディレクトリ(~/)に.screenrcを作成しましょう。

エンコーディング

まず、使用する文字コードの指定をします。
文字コードには、euc、jis、sjisutf-8などがあります。

defencodig utf-8
Prefixキーの設定

次にPrefixキーの設定を行います。
Screen起動後に、Screenの操作を行うためには、そのことをscreenに教えてあげるために
Prefixキーを打つ必要があります。
初期設定ではPrefixキーは!^Aa(Control+a)に割り当てられていますが、
僕はEmacsユーザなので、このキーをscreenに取られると困ることが多々あるので、
他のPrefixキーを割り当てます。
例えば、Control+zとか。

escape ^Zz
スタートアップメニューの削除

Screen起動後に端末に表示されるメッセージの表示がうざい人は消しましょう。

startup_message off
デタッチ

現在利用中のScreenを中断することをデタッチ(中断)、
再開することをアタッチ(再開)と呼びます。
不安定な端末などをScreen上に表示している場合などには、
端末が突然終了する場合もあり、そのような場合には自動的に端末を中断状態にしたいです。

autodetach on

現在実行しているscreenから抜けるには、C-z dとタイプします。
デタッチしたscreenにもう一度アタッチすることで前の状態に戻る。

アタッチ

一度抜けたscreenを再度起動するには以下のコマンドを実行する。

$ screen -x (screenのプロセス番号)

screenプロセスが1つしかない場合は、プロセス番号は省略可能です。

プロセス番号の確認

端末のプロセス番号の確認方法

$ screen -ls
コピーモード

C-z [ とタイプすると、screenはコピーモードになります。
viなキーバインドでカーソル移動が可能である。
なお、Emacsキーバインドを用いるには下記の設定を記述する。

markkeys h=^b:l=^f:$=^e:^d=^v:^D=^V

スペースキーを押せばコピーの始点が記憶され、二度目で終点が記憶されてコピーモードを抜ける。
C-z [ でコピーモードを抜けます。

Emacs key bind

bind 2 split などとするとデフォルトの
ウインドウ切り替えコマンドを上書きしてしまう場合がある

bind x eval 'echo "2: split / 1: only / 0: remove / o: focus r: resize"' 'command -c REGION'
bind -c REGION 2 split
bind -c REGION 1 only
bind -c REGION 0 remove
bind -c REGION o focus
bind -c REGION r eval 'echo "j: -1 / k: +1 / other: quit"' 'command -c RESIZE'
bind -c RESIZE = eval 'resize ='  'command -c RESIZE'
bind -c RESIZE J eval 'resize +5' 'command -c RESIZE'
bind -c RESIZE K eval 'resize -5' 'command -c RESIZE'
bind -c RESIZE j eval 'resize +1' 'command -c RESIZE'
bind -c RESIZE k eval 'resize -1' 'command -c RESIZE'

# 本当はevalとかについても詳しく書くべきなのだろうなぁ。

logging

Screenでのコマンド履歴を保存します。
logで保存のon、offを指定し、logfileでlogfileの場所を指定する。
(以下は僕のMacBookの場合です。)

log on
deflog on
logfile "/Users/hogehoge/log/screen-%Y%m%d-%n.log"
コマンド履歴

コマンドの履歴の保存行数を示す。

defscrollback 3000
ビジュアルベル

Screenではビープ音を鳴らす代わりに、端末下部にメッセージを表示します。
うざい人は消しましょう。

vbell off
端末下部のステータスラインに情報を表示する

ステータスラインに情報を表示すること設定も可能です。
ここでは、見つけたものをいくつか。

  • ステータスラインに端末一覧と時刻を表示する。
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
  • ステータスラインに端末一覧と時刻を表示する。
hardstatus alwayslastline "%{= rw} %H %{= wk}%-Lw%{= bw}%n%f* %t%{= wk}%+Lw %{= wk}%=%{= gk} %y/%m/%d %c "
  • ステータスラインに端末一覧のみを表示する。
hardstatus alwayslastline "%w"

表示方法については、おぼえがき@tips for GNU screenが詳しいです。

コピペ用

# エンコーディング
defencodig utf-8

## Prefixキーの設定
escape ^Zz

# スタートアップメニューの削除
startup_message off

# プロセス番号の確認
## $ screen -ls

# オートデタッチ
autodetach on

# コピーモード
# C-z [ とタイプすると、screenはコピーモードになる。
# viなキーバインドでカーソル移動可能
# スペースキーを1度押せばmark set 二度目でコピー。
# C-z [ でコピーモードを抜ける。
# emacs keybind for copy mode
markkeys h=^b:l=^f:$=^e:^d=^v:^D=^V

# Emacs key bind
# bind 2 split などとするとデフォルトの
# ウインドウ切り替えコマンドを上書きしてしまう場合がある
bind x eval 'echo "2: split / 1: only / 0: remove / o: focus r: resize"' 'command -c REGION'
bind -c REGION 2 split
bind -c REGION 1 only
bind -c REGION 0 remove
bind -c REGION o focus
bind -c REGION r eval 'echo "j: -1 / k: +1 / other: quit"' 'command -c RESIZE'
bind -c RESIZE = eval 'resize ='  'command -c RESIZE'
bind -c RESIZE J eval 'resize +5' 'command -c RESIZE'
bind -c RESIZE K eval 'resize -5' 'command -c RESIZE'
bind -c RESIZE j eval 'resize +1' 'command -c RESIZE'
bind -c RESIZE k eval 'resize -1' 'command -c RESIZE'

# logging
log on
deflog on
logfile "/Users/hogehoge/log/screen-%Y%m%d-%n.log"
 
# copy/scrollback mode (C-t esc)で戻れるhistory bufferを増やす。
defscrollback 3000

# ビジュアルベルをoffにする。 
vbell off

# 画面下に時刻&スクリーン一覧を表示する。
# hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"

# 色つき。
hardstatus alwayslastline "%{= rw} %H %{= wk}%-Lw%{= bw}%n%f* %t%{= wk}%+Lw %{= wk}%=%{= gk} %y/%m/%d %c "

# 画面下にスクリーン一覧を表示する。
# hardstatus alwayslastline "%w"