皮膚科に行ってきた

なんだか、いろいろと限界っぽいので、今日は皮膚科に行ってきた。

自分の限界を決めてるのは自分。自分の限界を自分で決めるな。とか強がっちゃって、自力で直そうと思ってたんだけど、医者曰く、とても自力で直せるような代物じゃないらしい。なにかに感染してるとかなんとか。

思ったより重傷っぽい。といっても、薬飲んでれば1週間くらいでよくなるみたいだけど。日本の医学ってすげー。正直舐めてた。自分の症例がはっきりしただけでも安心感が違う。

なにか気になる事があったら、素直に病院に行ったほうがいいんだと思った。みんな、忙しかったりなんだりで、病院行かないから、突然死したりするんだろう。こわいこわい。

大量に処方された薬を見てると憂鬱なので、しばらく大人しくしてようかと思う。

vimでPHPのシンタックスチェック

最近、PHPなお仕事なんだけど、PHP用のvimの設定を何もしてないので、とても心細い。シンタックスハイライトくらいはデフォルトで用意されてるけど。

開発言語を変えると、エディタの設定も変えなきゃいけないから面倒だ。これは、vimに限らず、emacsでもeclipseでも同じはず。

極力エディタをカスタマイズしない派の人もいるみたいだけど、なんのために、拡張可能なエディタを使ってんだかわからない。メモ帳でも使ってろと言いたい。

サーバ管理を生業としている人は対象外だけど、複数の環境で作業する必要があるからカスタマイズしないという、よくある意見はスルー。そもそも、本番環境とかで開発するべきじゃないし、開発環境であれば、設定ファイルを共有する方法は、今ならいくらでもある。

シェルとエディタはカスタマイズしてなんぼ。どんどんカスタマイズするべきなんだよ。手に馴染むまで。そして、常に進化させる必要がある。現状に満足することはリスクだと思え。

ということで、まずは、PHPのシンタックスチェックを導入してみた。

vimでPHPを編集中、1秒で文法チェックする方法

ここで見つけて便利だなーと思ってたんだけど、しばらく使ってみて、いちいち手動で実行するのが面倒でたまらん。いつのまにか、こんなんじゃ満足できない体になってしまった。こういうのは、保存時に自動的にやるべき派なので、ちょっと修正した。.vimrcに追加すればok。

func PhpLint()
  let rslt = system('php -l '.bufname(''))
  if !strlen(matchstr(rslt, '^No syntax errors detected in .*$'))
    echo rslt
  endif
endfunc
au BufWritePost *.php :call PhpLint()

php -lを実行すると、シンタックスエラーがなくても、冗長なメッセージを吐きやがる。こういうのは、UNIXの哲学に反するし、ウザくてキライ。なので、エラーがあったときだけ通知するようにした。

systemで実行した外部プログラムの終了コードをチェックしたかったんだけど、やりかたがよくわからんかったので、とりあえず、文字列マッチングで対処。納得いかねーけど、まあ、目的のものはできた。

久しぶりに、vimスクリプト書いたけど、相変わらず、いい意味でキモイ。

MacPortsが許されるのは中学生までだよねー

タイトルは釣り。だって、言ってみたかったんだもん。

まあ、MacPortsにはいろいろ不満があるので、これについてはそのうちエントリ書くかも。

というわけで、Portage最強なわけだけど、流石に導入のハードル高すぎなので、ぼくが七夕の日に願いを込めてビルドしたやつをアップロードしといたので、よかったら使ってみて。

gentoo-prefix-mbp-13-inch-mid-2009-20090707.tar.gz

シンボリックリンクの都合とかあるので、ルート直下に展開する必要があるけど、Core 2 DuoなMacならたぶん使えるはず。

$ cd /
$ tar zxvf ~/Downloads/gentoo-prefix-mbp-13-inch-mid-2009-20090707.tar.gz

使い方は、ドキュメントの項目1.17になんかごにょごにょ書いてるけど、ログインシェルを/Gentoo/bin/bashとかにしちゃうのが一番簡単だと思う。

こんな感じで。

$ sudo echo "/Gentoo/bin/bash" >> /etc/shells
$ chsh
Shell: /Gentoo/bin/bash

ログインシェルの変更は、こことかが詳しい。

UK STUDIO - Macのログインシェルをzshに変更する

ぼくもzsh使ってるし、

$ emerge zsh

しとけばいいと思うよ。

Gentoo Prefix再び

新しくMacBook Pro 13-inchを購入したので、早速Gentoo Prefixを導入した。初の64bitマシンを手に入れたので、64bitでビルドしたぜ。これで、64bit Unix環境が手に入ったわけだ。

今回、セットアップしてると、Pythonの2.5から2.6への切り替えとか、findutils周りでエラー出た。どうも、bootstrap-prefix.shで導入されるPortage Treeが古いみたいで、事前にemerge --syncしてやることで、なんとかなった。

といっても、Gentoo PrefixのACCEPT_KEYWORDSはデフォルトが~x64-macosなので、unstableまっしぐら。タイミングによってはビルドできないんだよな。Gentooへの愛が試されるわけですね。わかります。

セットアップドキュメントの方も更新されてたみたいなので、またセットアップ用のスクリプトを置いとくよ。

#!/bin/bash

# Code Listing 1.1: Export EPREFIX variable
export EPREFIX="/Gentoo"

# Code Listing 1.2: Add Prefix paths to your PATH
export PATH="$EPREFIX/usr/bin:$EPREFIX/bin:$EPREFIX/tmp/usr/bin:$EPREFIX/tmp/bin:$PATH"
export CHOST="x86_64-apple-darwin9"

# Code Listing 1.3: Use the bootstrap script
curl -o /tmp/bootstrap-prefix.sh http://overlays.gentoo.org/proj/alt/browser/trunk/prefix-overlay/scripts/bootstrap-prefix.sh?format=txt
chmod 755 /tmp/bootstrap-prefix.sh
./bootstrap-prefix.sh $EPREFIX tree
./bootstrap-prefix.sh $EPREFIX/tmp make
./bootstrap-prefix.sh $EPREFIX/tmp wget
./bootstrap-prefix.sh $EPREFIX/tmp sed
./bootstrap-prefix.sh $EPREFIX/tmp python
./bootstrap-prefix.sh $EPREFIX/tmp coreutils6
./bootstrap-prefix.sh $EPREFIX/tmp findutils
./bootstrap-prefix.sh $EPREFIX/tmp tar15
./bootstrap-prefix.sh $EPREFIX/tmp patch9
./bootstrap-prefix.sh $EPREFIX/tmp grep
./bootstrap-prefix.sh $EPREFIX/tmp gawk
./bootstrap-prefix.sh $EPREFIX/tmp bash
./bootstrap-prefix.sh $EPREFIX portage

# Code Listing 1.4: Setup ld directions
export LDFLAGS="-Wl,-search_paths_first -L${EPREFIX}/usr/lib -L${EPREFIX}/lib"
export CPPFLAGS="-I${EPREFIX}/usr/include"
export CC="gcc -m64"
export CXX="g++ -m64"
export HOSTCC="gcc -m64"

# Code Listing 1.5: rehash in bash
hash -r

# ----- little hack -----
emerge --oneshot --nodeps rsync
emerge --sync
# -----------------------

# Code Listing 1.6: emerge sed and pax-utils
emerge --oneshot sed
emerge --oneshot pax-utils

# Code Listing 1.7: emerge bash and wget
emerge --oneshot --nodeps wget
emerge --oneshot bash

# Code Listing 1.8: emerge linker and compiler
emerge --oneshot --nodeps baselayout-prefix
emerge --oneshot --nodeps lzma-utils
emerge --oneshot --nodeps m4
emerge --oneshot --nodeps flex
emerge --oneshot --nodeps bison
emerge --oneshot --nodeps binutils-config
emerge --oneshot --nodeps binutils-apple
emerge --oneshot --nodeps gcc-config
emerge --oneshot --nodeps gcc-apple

# Code Listing 1.9: unset no longer needed environment variables
unseg LDFLAGS CPPFLAGS CHOST CC CXX HOSTCC

# Code Listing 1.10: emerge several tools
emerge --oneshot coreutils
emerge --oneshot findutils
emerge --oneshot tar
emerge --oneshot grep
emerge --oneshot patch
emerge --oneshot gawk
emerge --oneshot make
emerge --oneshot --nodeps file
emerge --oneshot --nodeps eselect

# Code Listing 1.11: emerge portage
env FEATURES="-collision-protect" emerge --oneshot portage

# Code Listing 1.12: remove tmp directory
rm -Rf $EPREFIX/tmp/*
hash -r

# Code Listing 1.13: Updating the tree
emerge --sync

# Code Listing 1.14: emerge system
emerge -u system

# Code Listing 1.15: Customising the Prefix installation - example
echo 'USE="unicode nls"' >> $EPREFIX/etc/make.conf
echo 'CFLAGS="-O2 -pipe -march=nocona"' >> $EPREFIX/etc/make.conf
echo 'CXXFLAGS="${CFLAGS}"' >> $EPREFIX/etc/make.conf
echo 'MAKEOPTS="-j4"' >> $EPREFIX/etc/make.conf

# Code Listing 1.16: doing the final system installation
emerge -e system

「シリコンバレーから将棋を観る」を日本語に訳そうぜ

本書の全部または一部を、英語はもちろん中国語でも韓国語でもスペイン語でもフランス語でも、どなたが何語に翻訳してウェブにアップすることも自由、とします(許諾の連絡も不要です)。

新著「シリコンバレーから将棋を観る」は、何語に翻訳してウェブにアップすることも自由、とします。 - My Life Between Silicon Valley and Japan

ということらしいので、「シリコンバレーから将棋を観る」を日本語に訳して公開しようぜ。

半分本気、半分冗談で言ってる。

翻訳という言葉の拡大解釈で、揚げ足取りなのはわかってる。ぶっちゃけ、複製しようぜってことだからな。

勢いでwikiでも立ち上げようかと思ったけど、今、個人的に社会的な立場が悪くなるのはヤバいのと、出版社の人たちに迷惑をかけるのは避けたいなと思って自重した。保身に走るなんざ、ぼくも大人になったもんだ。まあ、興味ないってのが本音だけど。

ところで、気になるのは、翻訳された物のライセンスはどうなるのかということ。本人がどういう意図でオープンソースって言ってるのか知らないけど、オープンソースって聞いたら、ライセンスのことを思い浮かべるのが普通。翻訳された物にオープンソースライセンスが適用されるのなら、それをもとに、再度日本語に訳すのは正当なはず。

でもなー、そもそも、オリジナルのソースが自由に手に入らない状態で、どうやって、派生して再頒布するんだよ。

仮に、ぼくが翻訳プロジェクトに参加しようと思ったら、本買わなくちゃいけないわけだよね、それっておかしいと思わない?梅田さん、なんかすげーこと言ってるぞ、みたいに聞こえるけど、ただの販促活動にしか思えない。

「どなたが何語に翻訳してウェブにアップすることも自由」とか言う前に、まず全文をそれにふさわしいライセンスの元で公開するべき。話はそれからだ。それを読んで、価値を見出し、海外に広めたいと思う日本人、もしくは、自国にも広めたいと思う外国人が現れたなら、自然と翻訳プロジェクトがはじまるだろう。「ウェブ上での人体実験」と称するなら、そこまでやって欲しかった。

結論として、ぼくが言いたいのは、「日本のWebは残念」だとか、「翻訳自由」だとか言う前に、「On Lisp」のことも思い出してあげてくださいってこと。すでに前例があるじゃないか。野田さん、そして翻訳に関わった全ての人に、ありがとう。日本ってすげーんだぜ。

『On Lisp』の日本語訳を始めたのは高校のとき」,弱冠21歳の翻訳者が明かす舞台裏

Terminalで新しいタブを開いてsshを実行するAppleScript

クライアント側でscreen使ってて、サーバ側でもscreen使ってると自分がどのマシンで作業しているのかわからなくなったりする。

有名な記事だけど、ここで紹介されてる、ssh_screenっていうzshの関数を定義しておくと、sshしたときに新しいウィンドウを開いて、そのウィンドウ名をログイン先のホスト名に設定してくれるから便利。なんだけど、ログイン先でもscreen使ってる場合、混乱が起きる。キーバインドの問題だ。

ネットを調べた感じだと、みんな、サーバ毎にscreenのキーバインドを変えることで対処してるみたい。でもぼくは、キーバインドを変えるってことにすごく抵抗があるわけ。

どうしたもんかと悩んでいたら閃いた。LeopardのTerminal.appはタブ機能があるじゃないかと。そこで、新しいタブを開いて、sshを実行してくれるAppleScriptを書いてみた。

インタプリタ?っぽく書いてるけど、事前にコンパイルとかした方がいいんだろうか?AppleScriptはよくわからん。

使い方は、

alias ssh="~/bin/tabbed-ssh"

とでもエイリアス切って、あとは、いつも通りのsshの使い方でok。

話は変わって、今回、AppleScriptを始めて書いたのだけど、これ難しいな。

do script with command cmd in selected tab of the front window

inとかtoとかofとか。まあ、ぼくの英語の前置詞の知識が乏しいんだけなんだけど。あと、theとか意味わかんねー。ちなみに、このtheは省略しても動作するっぽい。冗長なシンタックスシュガーっていう認識でいいの?こんなの始めて。

自然言語に似せたプログラミング言語ってのは、一般の人には易しいのかも知れないけど、プログラマにとってみたら苦痛だよな。

« Older Entries