なんだか、いろいろと限界っぽいので、今日は皮膚科に行ってきた。
自分の限界を決めてるのは自分。自分の限界を自分で決めるな。とか強がっちゃって、自力で直そうと思ってたんだけど、医者曰く、とても自力で直せるような代物じゃないらしい。なにかに感染してるとかなんとか。
思ったより重傷っぽい。といっても、薬飲んでれば1週間くらいでよくなるみたいだけど。日本の医学ってすげー。正直舐めてた。自分の症例がはっきりしただけでも安心感が違う。
なにか気になる事があったら、素直に病院に行ったほうがいいんだと思った。みんな、忙しかったりなんだりで、病院行かないから、突然死したりするんだろう。こわいこわい。
大量に処方された薬を見てると憂鬱なので、しばらく大人しくしてようかと思う。
最近、PHPなお仕事なんだけど、PHP用のvimの設定を何もしてないので、とても心細い。シンタックスハイライトくらいはデフォルトで用意されてるけど。
開発言語を変えると、エディタの設定も変えなきゃいけないから面倒だ。これは、vimに限らず、emacsでもeclipseでも同じはず。
極力エディタをカスタマイズしない派の人もいるみたいだけど、なんのために、拡張可能なエディタを使ってんだかわからない。メモ帳でも使ってろと言いたい。
サーバ管理を生業としている人は対象外だけど、複数の環境で作業する必要があるからカスタマイズしないという、よくある意見はスルー。そもそも、本番環境とかで開発するべきじゃないし、開発環境であれば、設定ファイルを共有する方法は、今ならいくらでもある。
シェルとエディタはカスタマイズしてなんぼ。どんどんカスタマイズするべきなんだよ。手に馴染むまで。そして、常に進化させる必要がある。現状に満足することはリスクだと思え。
ということで、まずは、PHPのシンタックスチェックを導入してみた。
ここで見つけて便利だなーと思ってたんだけど、しばらく使ってみて、いちいち手動で実行するのが面倒でたまらん。いつのまにか、こんなんじゃ満足できない体になってしまった。こういうのは、保存時に自動的にやるべき派なので、ちょっと修正した。.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にはいろいろ不満があるので、これについてはそのうちエントリ書くかも。
というわけで、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
しとけばいいと思うよ。
新しく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」のことも思い出してあげてくださいってこと。すでに前例があるじゃないか。野田さん、そして翻訳に関わった全ての人に、ありがとう。日本ってすげーんだぜ。
クライアント側で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は省略しても動作するっぽい。冗長なシンタックスシュガーっていう認識でいいの?こんなの始めて。
自然言語に似せたプログラミング言語ってのは、一般の人には易しいのかも知れないけど、プログラマにとってみたら苦痛だよな。
CodeReposでホスティングしてた、well-known-portスクリプトをGitHubに移した。別に他意はないんだけど、オープンソースで開発してるやつは、gitで全部管理したいなと。
それに、基本的にはみごプログラマだから、誰かと一緒にワイワイ開発する感じが苦手なのかも。GitHubの勝手にforkして、pull requestってスタイルが性に合ってるんだろうな。
スクリプトの説明は昔書いたエントリを参照。
コードはこちら。
Twitter面白い。ちょっと世界観が変わった気がする。ぼくは、文章を書くとき結構気を使うタイプで、メールにしろblogにしろ無駄に時間がかかってしまうんだけど、独り言なら気軽に呟けていいね。
ということで、サイドバーにTwitterのHTML Widgetを設置してみた。
FlashバージョンのカッコいいWidgetも配布されてるけど、どうにもblogのデザインと合わないので、HTMLのやつにしてみた。シンプルなのが好き。
しかし、作りかけで放置してるblogなので、Widgetひとつ追加するのも大変だ。それに、久々にArcさわってみたら結構忘れてた。Arc3もリリースされたし、Peepが一段落付いたらArcで遊ぼう。
ガツンと言うようなことじゃないので、ぼくは蚊の鳴くような声で答えたい。
書きながら考えるということと、その言語で考えるって視点が抜け落ちてる気がする。
「いまどきのフレームワークは進化しているから、言語による差なんて余りない。仮に、Javaのほうが二倍コードを書く必要があったとしても、開発の中でコードを書いている時間より考えている時間のほうが圧倒的に長いんだから、その辺は誤差でしょう。」
プロダクトレベル、もしくは、保守フェーズに入ってからは、コードは短くてシンプルな方がいいに決まってる。だけど、開発中の生産性に限って言えば、コードの量はそんなに問題じゃなくて、いかに思考を妨げないかが重要だ。
PythonistaはPythonで物事を考えるから、Javaで書こうと思ったら、一回頭の中でPythonからJavaへの翻訳作業が入る。他の言語の場合も同じだし、フレームワークの違いも思考の妨げに繋がる。
ここで言ってる翻訳ってのは、{}で括るの面倒くせーとか、行末のセミコロンうぜーとかいった、言語の文法とか書式についてではない。もっと思考の根底にあるなにかだ。
言葉ではうまく説明できないんだけど、C言語をやってきた人が、初めてJavaに触れたときに、オブジェクト指向ってなんだよっていう戸惑いを感じるようなものに近いと思う。Lisperなんてもっと大変。関数思考で考える人がJavaを書く時の苦労を想像してみて。
コードを書いている時間より考えている時間のほうが圧倒的に長いからこそ、この思考の妨げは生産性に大きく関係してくるはずだ。
なんか、すげー今更感漂うんだけど、とりあえず。
Twitterの紹介ビデオってよくできてるな。これ以上コミュニケーションの手段を増やしたくないとか思って敬遠してたけど、あのビデオ見て始めてみようかって気になった。
基本的にひきこもり体質なんだけど、外に出て行かないとな。太陽が眩しいぜ。
友人のブログなんだけど、読んでてちょっと考えさせられた。
うまく時間を味方につけるために実践していることやモチベーションを上げるためにやっていることががあったら教えてくださいな。
『時間を味方につける最善の方法は、時間を忘れてしまうことである。』
格言っぽく書いてみたけど、時間は無情にも過ぎ去って行くものだから、どうこうしようなんて間違ってんじゃないかと、結局は自分との戦いなんじゃないかって、今悟った。
時間管理術だとか、タイムハック的な情報は溢れかえっているけど、自分の能力を伸ばしたり、自分を管理することが一番大切なことなんじゃないかな。
まあ、理想論をぶちまけたところで、現実問題として時間はいくら有っても足りないのも事実。そもそも、現代人は忙し過ぎるんだけど。
だから、敢えて時間管理術の本を紹介してみる。ぼくの時間管理のアイデアはかなりこの本からヒントを貰った。とりあえず、おすすめ。
だけど、本当の意味で時間を管理しようと思ったら、タイムマシンでも発明するしかないよな。
もう、Peepは試してみただろうか?
やっと、閲覧モードでのスクロール機能を実装したので、これで実用に一歩近づいた。長いエントリも読めるという幸せ。
キーバインドはMuttを参考にした。
あとは、スター機能と、コマンドヘルプを実装して、バージョン1としてリリースしようかと思ってる。 で、今後の計画は、バージョン2ではローカルキャッシュとか通信部分を非同期化したりとか、パフォーマンスの改善を中心に進めて、 バージョン3で新機能盛りだくさんといったところか。
しかし、Terminalという、手になじんだ環境ってのもあるかも知れないけど、 間違いなく未読フィードの消化時間は速くなった気がする。
ぼくは、GoogleReaderのTUIフロントエンドである、ScoopっていうRSSリーダーを開発中だったんだけど、こんなのを見つけてしまった。
Scoop is an Adobe AIR powered RSS reader
うーん、ターゲットこそ違えど、ここまで同機能、同名のアプリが既に存在していたとは。ファーストリリースの日付を確認したところ、ぼくの方が後出しっぽいので、ここは謙虚に、Scoopの名前は譲ることにした。まあ、Adobe AIRアプリとcursesアプリじゃ、まったくの別物ではあるけど、紛らわしくて混乱しそうだからね。
ということで、Peepという名前でプロジェクトを再開した。
This software is a TUI front-end for Google Reader
プロジェクトの移行にともなって、納得がいかないコードを修正したり、全面的に書き直したりしていたので、ちょっと遅くなったけど、前回公開してた時の機能は一通り実装できたので、告知するよ。
日本語表示まわりを割とちゃんとしたりとか、Gridのスクロール機能なんかも実装したので、かなり安定度、実用度ともに増した気がする。
使い方は、基本的に前と同じなので、この辺を参考に。
使ってもらおうと思ったら、ちゃんとドキュメントも書かないとな。プロジェクトのページもつくりたい。
ビジネスジャンプで珍遊記2の連載が開始されてた。
娘々かわゆす...っておい、これは「まんゆうき」じゃねーか。つっこんだら負けなの?相変わらず、期待の裏切り方がはんぱねー。
最近、昔流行った漫画のリバイバル作品が多いけど、思いっきりぼくら世代がターゲットだよな。まあ、出版業界も大変だろうけど、今の若い人たちは漫画離れが始まっちゃってたりするのかな?そういうぼくもコンビニで立ち読みして済ませちゃうし、間違いなく売上げは落ちてるんだろうな。
なんにせよ、珍遊記は、ぼくらの青春そのものだ。画太郎先生ありがとう。
ふと気がつけば、ジャンプ、ヤングジャンプと来て、ビジネスジャンプを読む歳になったのか。大人になんかなりたくねぇ。
ここしばらく、ニートを通り過ぎて廃人になってた。無気力の境地に達しても悟りは開けないんだぜ。
ところで、arc-users.jpのドメインの期限が来たので更新した。相変わらず、jpドメイン高いな。
しかし、もう一年が過ぎたんだな。早いもんだ。なんとかせねばと思いつつ放置しっぱなしな自分が情けない。wikiとかCMSとか導入すりゃ、話は早いんだろうけど、どうせならArcで実装したシステムで運用したいなと思い続け、後回しになってるんだよな。
まあ、適当に頑張る。
まず最初に。ぼくの書き方がまずかったんだけど、これは何するもの?っていう問い合わせがあったので、それの回答。
scoopはターミナルで動作するRSS Reader。Google Readerのデータを取得して表示するので、Google Reader使ってる人は乗り換える事なく、気軽に使えるよ。試してみて。
ということで、タイトルの通り、ピン立てて、ぐぁーなやつ実装した。webbrowserモジュールっていうのがPythonの標準ライブラリであるので、簡単に実装できた。思いのほか便利で、すでにぼくは常用してる。スクロールはまだできないから、長文エントリは表示できないけど、外部ブラウザで開いて読める。
えーと、すでに使ってる人は、インストールしたディレクトリで、
git pull
して、最新取ってくれば有効になる。まだ使ってない人は、ここを参考にインストールして。
キーバインドは、
って感じ。OSでデフォルト指定してあるブラウザで開くと思う。
あと、ここで配布してる日本語化されたUbuntuのVMwareイメージでも動作することが確認できた。書き忘れてたけど、unicodeが有効になってるncursesが必要なので、Mac使ってる人は、MacPortsとかでインストールしたPython使った方がいいかもしれない。ターミナルの文字コードもutf-8で。
基本的に、まずは機能を充実させることを考えてるので、マルチプラットフォーム対応とかは後回しの予定。もちろん、バグレポートとかパッチは受け付ける。まあ、こんなRSS Readerを使おうとする人はギークに違いないから、自分でハック推奨。
http://github.com/ryuji/scoop/tree/master
今のところ、未読の新着エントリはなんとか読めるレベル。Feedの追加とかは、WebブラウザからGoogle Readerにログインして直接行う。
そのうち、マニュアルとかも整備しなきゃだけど、メモ替わりにここに書いとく。
依存ライブラリの関係で、GPL2
python2.5
たぶん、2.6でも動くと思うけど未検証。3系は未対応。
w3m
エントリの表示に使う。
git
GitHubで公開してるのでインストールに必要。
GitHubから取得。インストールしたいディレクトリの下で、下記コマンドを叩く。
git clone git://github.com/ryuji/scoop.git
あとは、パス通すなり、scoopにシンボリックリンク張るなり、お好きな感じで。
次に、設定ファイルの作成。とりあえず、サンプルを自分のホームディレクトリにコピーする。
cp scoop/scoop.rc ~/.scoop.rc
で、自分のGoogle Readerのemailとpasswordを設定する。
vi ~/.scoop.rc
[credential]
email = your_google_reader_account@gmail.com
password = your_google_reader_password
パーミッションは変えといた方が安心。
chmod 600 ~/.scoop.rc
% scoop --help
Usage: scoop [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-n, --notify notify unread entry count
-nオプションで、未読件数を出力。新着通知とかに使えるかと思って実装した。
オプションなしで実行すると、メインスクリーンが立ち上がる。モードの概念があって、今のところ、未読記事一覧モードと、記事閲覧モードが実装済み。それぞれのモードでのコマンドは下記参照。基本的には、viとかmuttのキーバインドに倣ってる。
未読記事一覧モード
記事閲覧モード
未読記事一覧で、一度に20件しか表示できない
今月中には対応予定。
基本的にスクロールできない
スクロールできないので、長いエントリは読めない。今月中には対応予定。
時刻表示がおかしい
JSTタイムゾーンのはずなのに、どう見てもGMTです、ほんとうに(ry。pytzとかかましてみたけど治らず。なんか、ライブラリで取得した時点で狂ってる気がする。
起動中にターミナルのサイズを変更したら死ぬ
なんとなく対応方法はわかるような気がするけど、これは仕様でもいいかな...
検証環境がマニアックなのは謝る。検証になってないかもな。
とりあえず、Google Readerの機能を実装していって、安定したら、TUIならではな感じの機能を模索していきたい。
blogシステムの開発の方はサボってるので、コメント機能とかないし、不具合とか要望とか、その他なにかあれば、ryuji@mgiken.comに直接メールで。励ましのお便り募集中。
Enjoy your terminal life!