Today アクセスカウンター Yesterday アクセスカウンター

買った本

この間ちょっと Haskell の記事を書いたら,やたらめったらチヤホヤされて気分が良かったので,「よーし,おじさん,もっとモテ系言語を勉強しちゃうぞー ☆」と.「入門 Haskell」や 「みんなの Python」を買って,ブログの読者層の期待に答えようかと goto 紀伊国屋;

… 何を血迷ったか,気が付いたら「Write Great Code」「Linkers & Loaders」「デーモン君のソース探検」を買っている自分がいました.

# ひじょーに読みたかった 「デバッガの理論と実装」は無かった.というか,デバッガの本自体が一冊も無かった.「binary hacks」に期待しよう.なんたって,僕のヒーロー,高林さんと浜地さんが書いている.

# うはっ.今発見した.鵜飼文敏語録がかっこよすぎる.一瞬で惚れたファンになった.「機械に使われたいのか、機械を使いたいのか、どっちなんだ?」他には 「プログラムはどう動くのか? 〜 ELFの黒魔術をかいまみる」など.

λ …

まぁ,いいんだ.その 2 冊は生協に平積みされてあることが確認済みだから,いつか平日に買おう.そっちの方がお得だし.土日は開いてないのだ.

んー,札幌に来てから,いくらなんでも本買いすぎのような… 滝沢村にいたころは,近所にはコンビニしかなかったからなぁ.大学の図書館で我慢してた.

しかし,どうも図書館で借りた本というのは,知識まで借り物になってしまう気がして,あまり好きではないのである.気軽に引きたい時に引けないし.いつも借りられるとも限らない.手元に置いておくと安心できるというのも一番大きいかもしれない.良い本というものは,暇な時にパラパラとめくるたびに新たな発見や現在の問題に対するヒントを与えてくれるものなのである.

# そういうカッコいい主張は,ちゃんと自分の腕で稼いでいる人間が言うもんだというツッコミは無しの方向で何卒シクヨロ (奨学金借金まみれ穀潰し管理人).

最近買った本は,どれもこれも定番中の定番というか.持ってて損は無い本ばかりだから,まぁ良しとしておこう.いつでも気軽に大きな本屋に行けるというのは素晴らしい.Amazon は受け取りが面倒過ぎるのである.

一回実家に帰るたびに,数万かかるからなぁ.帰らない代わりに本を買うと言う親不孝っぷり全開息子なのである.

今月のオープンソースマガジンの連載陣がやたら豪華で,ちょっと立ち読みでは無理な分量だったので買おうかと思っていたのをすっかり忘れてきた.でも雑誌に 1500 円はちょっと高いよなぁ.980 円だったら買うけど.半年購読したら,中田先生の 「コンパイラの構成と最適化」が買えちゃうよ (僕の中で,高くて難しー専門書の代名詞).

# 今なら 「compilers」かも.14000 円かぁ… 世の中には,教養としてこのレベルの本をさらっと買っちゃうような人達もいるんだよなぁ.

vi を作ろう ☆

なぜか Emacs Lisp の実装を眺めていたら,

ueno's codeblog : Emacs の内部を解説した文書
acs のソースを読んで:ソース読み会について

テキストエディタを作ってみたくなった.すごく単純なので良いから.

んで,昔の vi のソースでも眺めてみたいなと思ったけど,ちょうどよさげなのが見つからず.しかたないので,スクラッチから書いてみようと思った.

機能 : hjkl (移動) と i (挿入) と w (保存)と q (終了) だけに限定.

内部データ構造 : 文字列は簡単化のため char のクソ長い配列で持つ .表示は puts,保存は fputs 相当の関数を使って一発 (最悪の仕様).

さて… 仕様は決まったものの,どうやって実装すれば良いんだ ? 全くわからん分野だ.見当もつかない.

突然 ncurses の素晴らしさに気付いた.

とりあえず,hjkl で移動して,q で終了するプログラム.コンパイルは,普通の Linux とかの環境ならば

$ gcc -Wall hjklq.c -lncurses

とかで OK なはず.駄目だったら,libncurses5-dev (libncursesw5-dev という,UTF-8 などに対応しているステキライブラリもあるそうだ) とかを apt-get したりすると良いかも.

#include<ncurses.h>
int main() {
int x,y;
char c;

initscr(); // 画面の初期化
noecho(); // 入力をエコーしないようにする

// COLS (列) と LINES (行) はグローバル変数
for(x = COLS/2, y = LINES/2;;){

move(y, x); // カーソルの移動.左上が 0, 0 右下が COLS-1, LINES-1

switch(c = getch()) { // キーボードから一文字取得
case 'q' :
endwin(); // 画面の終了処理
return 0;
case 'l' : if(x < COLS - 1)x++;break;
case 'h' : if(0 < x)x--;break;
case 'j' : if(y < LINES - 1)y++;break;
case 'k' : if(0 < y)y--;break;
default :;
}
}
}


参考サイト :

ファイヤープロジェクト : C 言語 : 端末制御

Cursesによる対話的なプログラム作成
(参考というか,ほぼここの 100 % パクりである)

って,レポートも書かないで何をやっているんだ俺は.現実逃避終了.

(続くかもしれない)

ftpfs : Plan9 の ftp クライアント

一応 ftp で ThinkPad から Debian に入れるようになった.

やり方は,前回書いたシェルスクリプト

## ftp通信用モジュールのロード(FTPの通過および応答を許可)
/sbin/iptables -t filter -A FORWARD -i eth0 -p tcp --dport 21 -j ACCEPT
/sbin/iptables -t filter -A INPUT -i eth1 -p tcp --dport 21 -j ACCEPT
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp

とかかいて,テキトーな ftpd を Debina にインストールして起動するだけ.

今回は,なぜか

Starting ftp server: proftpd - IPv6 getaddrinfo 'localhost.localdomain' error: Name or service not known

とかエラーメッセージが出て,proftpd が使用できなかったので,vsftpd とかいうやつを使ってみた.(参考サイト : Redhat9.0 : vsftpdの設定 vsftpdを試してみる)

# apt-get install vsftpd

んで,デフォルトでは anonymous FTP サーバーとして動いているから,「530 This FTP server is anonymous only.」とか言われて蹴られてしまうので /etc/vsftpd.conf とかの

# Uncomment this to allow local users to log in.
# ローカルユーザがログインできるようにするなら yes にする
# local_enable=YES

のところのコメントアウトを外して,Debian のユーザがログインできるようにしておく (一応 hosts.allow とかも設定しておく.どうせ LAN 内限定だから, vsftpd : ALL : ALLOW とか超テキトーな設定だ).

あとは,/etc/init.d/vsftpd restart して,Plan9 から

term% ftpfs 192.168.0.1
220 (vsFTPd 2.0.5)
331 Please specify the password.
230 Login successful.
215 UNIX Type: L8
257 "/home/aloha"

とか,(とりあえず今のところは…) IP 直打ちで入る.

そうすると,/n/ftp 以下に,ホームディレクトリが「bind」される.


そしてこいつこそが Plan9 の真骨頂,every thing is file system です !

なんと,普通の FTP クライアントとは全く異なり,普通にマウントされたファイルシステムと同様にシェルが使えて, cd だの ls だの cat だの grep だのができる.ローカルとリモートの区別は全く付かない.素晴らしすぎる.

Plan9日記 2006-03-06 なんでもファイルサーバ

もしかして Debian でファイル作ると,即座に反映されたり,Plan9 でファイル作ったりもできるのかな ? と思ったけど,良く考えたら ftp の権限だからそんなことできるわけがない.

ということは,ということはだ.もし sshd かなんかを Debian で立ち上げておいて,Plan9 側からログインしたら,夢のような世界が広がるのではないだろうか (今は鍵の取得とかいろいろ面倒だからやらないけど,そのうち試してみよう.どうせ LAN 内限定だから,僕的には telnet で全然かまわないのだけど).

やばいよ分散 OS やばい.とにかくみんな,分散 OS のヤバさをもっと知るべきだと思います.

まぁ,確かに Plan9 は無いものの方が多い (ウェブブラウザすら無い) わけですが,逆に考えるんだ ! Linux や Windows にできることは,Plan9 ができる必要は無い.

とかく世の中,あれが無いこれが無いと否定面ばかり強調されがちですが,逆じゃないか ? とか,そんなことを思った秋の夜であります.

これはプログラミング言語とかでも同じなのかもしれない.Java や PHP (さらには COBOL/Fortran)にできることは,そいつらに任せておけば良い.RoR などのフレームワークが 「今の」 開発プロセスに適合するというのならば,バシバシ使って生産性を上げれば良い.民間にできることは民間に.そしてそいつらではできないこと,新しい時代を切り開くことこそが,新しい言語やパラダイムには求められているのである.

とかいっているような僕は,たぶん一生プロのプラグマティックプログラマーにはなれないなぁとか思った.

Linus の考え方は,技術論としては共感できるし,こういう姿勢は好きだけど,もし僕が運用している人だったらたまったもんではないなと.

ちょっと動かしてみたいだけなのに,バージョンごとに操作が変わったり互換性が無くなったりするから,マヌアルを読まないといけない.俺はいちいち説明書とか読む気にはなれない典型的日本人だし,常用するかしないかもわからないものに精通する暇もやる気もあんまり無いし,最悪,マニュアルすらあてにならない.

今回,いろんなところにはまって (いまだに,/etc/init.d/iptables が無い…) いろいろ心底うんざりした.

そういう意味では,全く変化しない,互換性完璧,というのも,価値としては重要なのではないかと.とかく変化や新しさが好まれる時代ですが.

だから僕は,中途半端に妥協と継ぎ剥ぎ的拡張を重ねてく言語が嫌いなんだな.C++/Java P 言語の一族とか.徹底した切捨てや割り切りがあって,もはや生きた化石みたいな言語,例えば C とか LISP みたいな言語が好きなのである (もちろん,研究は別よ).いろいろ矛盾しているけど.

# だから,たぶん僕は,いろんな体系や制限や拡張が乱立する型理論が絡む言語はあんまり好きじゃないんだよなぁ… 確かにいろいろ便利で役に立つかもしれないけど,型理論って,もはや理論のための理論になってしまっているというか… 当初の目的が失われている気がするよ. そもそも目的が無いのかもしれませんが.バグを数理的に撲滅する ? バグって何さ ? プログラムはいつも 100 % 正しい.バグは人間の心に存在する.結局は,プログラムのバグではなく,人間の心,仕様をデバッグしなければならない.そしてそれが本丸であり,仕様のデバッグの困難さに比べたら,プログラムの意味論的な不整合をハジくなんてのは枝葉に過ぎない.正しい仕様,正しい変換,正しいプログラム.この 3 つをシームレスに繋げる理論と枠組こそが重要だと思うのだけど… なんで世間はあさっての方向ばかり向いているのだろう.僕には理解できないよ (もちろん,王道は難しいからなんだけど.冒険なんてしないで,狭い世界で過去の成果をこねくり廻している方が楽だからね).とかいう話はどうでもいい.

(一つの記事に二つの相反する主張を入れる間違ったディベート管理人)
プロフィール
  • Author:あろは (alohakun)
  • 京都のデバッガベンダーに勤めるアラサー会社員。

    本ブログの内容は,あくまでも個人的な感想や意見であり,会社の意見を代表するものでは一切ありません.

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map
FC2カウンター
ブロとも申請フォーム

この人とブロともになる

最近のコメント
リンク
最近のトラックバック
人生の残り日数
日本人男性の平均寿命は 28700日.
RSSフィード
カテゴリー
  1. RSSリーダー