Latest Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

はてな

はてなダイアリを開設しました。
こちらになります。

メイン環境がメイン環境のため、今度からははてながメインになりますので、よろしくお願いします。

gentoo on macbook

最近自分がSE(システムエンジニア)には全く向いていないことが改めて発覚しました。
向いていないと思っているのはとりあえず自分だけなのですが。

SEよりだったらまだ運用とかネットワークエンジニアの方がマシです。SEは自分にとって全く面白みがないですし、逆に技術が衰えていく。

とまぁ最近の仕事はひたすらネガティブかつSEと今の現場が嫌いになる一方なので、今の現場(某有名企業)の商品を見るのも嫌になる前にさっさと出て行きたいのですが、仕事なのでしょうがないかなぁ。


そんな最近の自分が行っているのは、タイトル通りMacへGentoo Linuxを入れようとがんばっているところです。
何がやりたいかっていうと、rxvt-unicodeの背景透過ができなかったのは、本当にMacのX11が原因だったのか、というのが知りたいだけです(ぇ
まぁそれ以外にも理由が・・・無いのですが、とりあえず本格的なLinuxとして触っております。ドキュメントの充実ぶりは他の追随を全く許さないほど素晴らしいです。

が。なぜかnvidia-driversが入れられず、そしてemrege --newuse worldとかやったらemergeがことごとくこけたり、果てgrubまで逝かれたりと、中々トラブりまくっております。

これもLinuxの醍醐味、と言い聞かせ、何度目かになる再インストールを行ってます。再インストールの最中に、自分でしたmake.confの設定が間違っているのを発見してorzしたり。

まぁあれですね。某有名企業の社内システムのSEやってるより、こっちの方がよっぽど自分のためになります。ほんと。

gentooを無事入れられたら、再び報告しようかと思います。

頑張ってみたけど諦めた悲しい結末。

日曜から今日にかけて、Leoperd標準のTerminal.appではなく、rxvt-unicodeというターミナルを利用するための色々試行錯誤しました。

まずは何がやりたかったかというと。

・最近はEmacsとTerminal.appしか触ってないため、Terminal.appの細かいところが気になった。
・Macのはずなのにキーボードのみでほとんど生活してる。
・Macのはずなのに文字しかみていない。
・ratpoisonというWMがあるらしいことを聞いて気になった。

というわけで(?)、Macにratpoisonを入れて、ついでにrxvt-unicodeを入れてしまおうということを思いつきました。

ちなみにどっちもMacPortsから入れられます。しかし、rxvt-unicodeに関しては、背景透過がやりたかったので、ソースから直接makeすることにしました。
はまった場所など、失敗の軌跡を残していくとも言う。



先に、Xquartsで検索して、最新のXQuartsをダウンロードしておいてください。じゃないと多分動きません。

まずは、rxvt-unicodeの配布ページからソースをDLします。
現時点での最新版はrxvt-unicode-9.06です。

で、任意のディレクトリにダウンロードしたら、


bunzip2 rxvt-unicode-9.06.tar.bz2
tar xvf rxvt-unicode-9.06.tar
cd rxvt-unicode-9.06

として、展開したディレクトリに入ります。

rxvt-unicodeは、(私的に)非常に設定すべきオプションが多いです。なので、ここに書いてあるのは、あくまで私の環境で上手くいったときのものです。
ちなみにパッチを当てると、256色利用できるようになります。

筆者の環境:
Mac OS X 10.5.6
LANG環境変数:ja_JP.UTF-8


patch -p1 < doc/urxvt-8-2-256color.patch
./configure --enable-everything --prefix=/usr/local/stow/urxvt \
--with-codesets=jp --without-codesets --enable-xterm-colors=256 --enable-transparency
make
cd src/
sudo make install

このcd src/がミソで、他の方は知りませんが少なくとも私は一度srcディレクトリに移動してからmake installしないとダメでした。

※--prefix=/usr/local/stow/urxvtとしてますが、ここは任意にしてください。

とりあえずここまでが下準備です。rxvt-unicodeは、X Window Systemで動くので、.Xdefaultsを指定する必要があります。

.Xdefaults

URxvt.saveLines:10000
URxvt.termName: rxvt-256unicode
URxvt.transparent:true
URxvt.inheritPixmap:true
URxvt.tintColor: darkgreen
URxvt.foreground: white
URxvt.background: darkgreen
URxvt.cursorColor: white
URxvt.shading: 30
URxvt.fading: 25
URxvt.preeditType: root
URxvt.scrollBar_right: true
URxvt.depth: 32

URxvt*Xft*antialias: True
URxvt.font:\
xft:Bitstream Vera Sans Mono:size=10, \
xft:Hiragino Maru Gothic Pro:size=10, \
xft:LiHei Pro, \
xft:STHeiti, \
xft:Apple Gothic
URxvt.boldFont:\
xft:Bitstream Vera Sans Mono:bold, \
xft:Hiragino Maru Gothic Pro:bold, \
xft:LiHei Pro:bold, \
xft:STHeiti:bold, \
xft:Apple Gothic:bold
URxvt.italicFont:\
xft:Bitstream Vera Sans Mono:italic, \
xft:Hiragino Maru Gothic Pro:italic, \
xft:LiHei Pro:italic, \
xft:STHeiti:italic, \
xft:Apple Gothic:italic
URxvt.boldItalicFont:\
xft:Bitstream Vera Sans Mono:bold:italic, \
xft:Hiragino Maru Gothic Pro:bold:italic, \
xft:LiHei Pro:bold:italic, \
xft:STHeiti:bold:italic, \
xft:Apple Gothic:bold:italic

とりあえずはこれで日本語も表示できました。特に私はフォント関係に手を入れてないので、特に問題ないと思います。

しかしこれだけではなく、次にホームディレクトリに.xinitrcというファイルを用意する必要があります。

私の.xinitrcを晒しておきます。

#!/bin/sh
# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/X11/lib/X11/xinit/.Xresources
sysmodmap=/usr/X11/lib/X11/xinit/.Xmodmap

# merge in defaults and keymaps

if [ -f $sysresources ]; then

if [ -x /usr/bin/cpp ] ; then
xrdb -merge $sysresources
else
xrdb -nocpp -merge $sysresources
fi

fi

if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi

if [ -f "$userresources" ]; then
if [ -x /usr/bin/cpp ] ; then
xrdb -merge "$userresources"
else
xrdb -nocpp -merge "$userresources"
fi

fi

if [ -f "$usermodmap" ]; then
xmodmap "$usermodmap"
fi

# start some nice programs
/usr/local/bin/urxvtd -q -f -o
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8

# if [ -d /usr/X11/lib/X11/xinit/xinitrc.d ] ; then
# for f in /usr/X11/lib/X11/xinit/xinitrc.d/*.sh ; do
# [ -x "$f" ] && . "$f"
# done
# unset f
# fi

exec /usr/local/bin/stumpwm

# xclock -geometry 50x50-1+1 &
# xterm -geometry 80x50+494+51 &
# xterm -geometry 80x20+494-0 &
# exec xterm -geometry 80x66+0+0 -name login


頭の方と、コメントアウトされている部分は、/usr/X11/lib/X11/xinit/xinitrcからコピーしてきたものです。

それ以外は私の方で追加したものです。
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8

この二行が無いと、日本語がめっちゃ化けます。

/usr/local/bin/urxvtd -q -f -o

ですが、urxv-unicode をデーモンとして起動するためのものです。これを起動しておくと、urxvtcというプログラムが利用可能になり、すばらしく軽くなります。

さて、とりあえずはここまでいったら、X11.appを起動し、urxvtを呼びだすと起動するはずです。
私の場合、

exec /usr/local/bin/stumpwm

という一行で、stumpwmというWMを起動しています。これはratpoisonの作者が作った別のWMで、ratpoisonとほぼ同じ操作性を持っていて、かつratpoisonを上回る拡張性を持っています。
しかしここではこれ以上の紹介はしません。だってほとんど使いこんでないんだもん。

さて、無事起動したとは思うんですが、私の環境では、背景画像は設定できても、背景の透過がどうやってもできませんでした。
configureの引数が悪いのか、それともMac OS XのX11.appがすでにダメダメなのか。

どなたかやり方を知っていれば是非教えていただきたいです。ホント。

with文とexpectations

最近は帰りが遅い&長距離通勤が相まって

帰る→風呂(シャワーともいう)→飯(コッペパン)→寝る

というなんともいえないパターンが多くなってきています。おかげで疲れが溜まって仕方がない。早く今の現場からは逃げたいのですが、仕事ですからそうも言ってられません。

そんな平日ですが、休日にはいつものとおりプログラミングをしてました。休日くらいしか
相変わらずpythonのみですけど。
とりあえず、以前から自分で作って利用しているpythonで作成したexpectationsをちょいと弄ってみました。
弄る前のexpectationsは↓のような形でした。
    import expectations as e

@e.exp("hoge")
def test():
return "hoge"

@e.exp("literal")
def testlex2():
return "lite" + "ral"

e.run(e.expect(1, 0 + 1),
e.expect(e.Type(str), "hoge"))

で、今回行った改良?で、↑を↓のように書けるようにもしました。
    import expectations as e

with e.expectation():
@e.exp("hoge")
def test():
return "hoge"

@e.exp("literal")
def testlex2():
return "lite" + "ral"

@e.exp(1)
def test():
return 0 + 1

@e.exp_type(str)
def test():
return "hoge"


with文というものの存在は知ってましたが、実際に利用してみた感じです。中々悪くないような気もします。ちなみにネストはできませんし、どんなに些細なものでも定義しないとならないのはちょっとあれなんですが、同じ名前の関数を何度定義しても問題ないです。

後、この他にexpectationの評価開始前と開始後にそれぞれ実行できる関数を設定できるようにもしました。

んー、自分で単体テストをするときにはこの程度で十分なんですが、なんかもうワンステップアップしてみたい気もします。それ以前に本来の目的の方は全然進んでないのはどういうことかと言いたくもなりますが。
最近自分にはWeb系(CGIとかの)が合わないんじゃないかという気がしてきました。仕事なら別ですが、趣味の範囲として。
ローカルでなんかごそごそ作ってる方が楽しいんですよね。どうにもCGIとかだと、本質と関係ない部分で考えることが多すぎて、本質にたどり着く前に飽きてしまうパターンがたびたび。
今度からなんかローカルで楽しいもの作ろうかと思います。うむ。

pythonとモジュール

pythonでなんかを作っていて一番悩ましいのは、パッケージ中でその一段階上のパッケージのモジュールに依存している、という場合の対処だと思う。

例えば、hogeというパッケージにhuga、foobar、fooというモジュールがあって、hugaはfoobarに依存しているとした場合、huga.pyの最初の方は次のようになる。

import hoge.foobar



これ自体は別に問題ない(hogeパッケージがあるディレクトリから実行する場合など)。
ただ、これを単体でテストしようとしたとき、実行場所は大抵そのモジュールのあるディレクトリ直下で行われるものだと思う。

そうなると、前述の import hoge.foobar というのは好ましくない。sys.pathを弄っていない場合、カレントディレクトリから階層を辿ろうとするため、本当は
import hoge.foobar -> hoge/foobar.py
を参照するように思っていても、実際には
import hoge.foobar -> hoge/hoge/foobar.py
というように参照してしまい、大抵はImportErrorで落ちる。(自分の場合だけかもしらんけど)

これをどのように解決するか、というのが自分にとっては面倒かつ頭の痛い問題となっていて、どうにもいい解決方法が見つからない。
エントリポイントでsys.pathに必要なパスを全て突っ込んでしまうのがいいんだろうか?とも思うが、結局単独で実行させたりするとき(if __name__ == "__main__")なんかに困る。

自作モジュールに依存していなければいいんだけど、そんなことしないわけにもいかないし。
なんか汎用的にできるような仕組みをご存知の方、どうか教えてください。
有名なオープンソースのコードを読め、というのはご勘弁ください。

追記:関係ないですが仕事先の端末が変わりました。XP→2000にダウングレードしてしまいましたが、Cygwinを入れたため快適度合いは増しました。

Appendix

プロフィール

Author:derui
FC2ブログへようこそ!

Twitter on FC2

最近の記事

FC2カウンター

ブログ内検索

FC2ブログ