2011年2月25日金曜日

コンピュータの名著・古典100冊

前回のエントリでは、
「最近、コンピュータやソフトウェアについて体系的に勉強したいなと思っています。」
と書きました。
しかし、いざ自分で勉強しようと思っても、どの本を自習用教材にすれば良いのかで迷いました。
また、初心者でもがんばれば読破できて(適度な難易度で)、単なるハウツー本やバズワード系流行り本ではない本(内容に普遍性がある本)を探すのは難しいなと思っていました。

ところが先日、たまたま近所の図書館で良い本に巡り会いました。

コンピュータの名著・古典100冊 という本なのですが、その名の通り、コンピュータサイエンスにおける名著を紹介するブックガイドです。

この本の素晴らしいところは、コンピュータサイエンスの技術的な側面だけではなく、歴史や人物や思想といったジャンルも含めた11個のカテゴリーに分けて、それぞれの名著を紹介しているところです。
参考までに11個のカテゴリを載せておきます。

1.歴史
2.人物・企業
3.ドキュメンタリー
4.思想
5.数学/アルゴリズム
6.コンピュータサイエンス
7.アーキテクチャ/OS/データベース
8.コンパイラ/言語
9.プログラミング
10.ソフトウェア開発
11.インターネット

加えて、選定基準の1つが「10年ぐらい経っても古くならない本」ということで、流行に左右されない本を紹介しているところも良いです。

というわけで、IT業界で働く全ての方にこの本はおすすめです。
まずは、自分の関わっているジャンルの名著から読んでいき、必要に応じて他のジャンルにも進んでいくのはどうでしょうか?
各章末にはゲストライターによるコラムも収録されていて、その部分だけでも楽しく読むことができると思います。



ちなみにこの本は、2006年に改訂されています。
2003年に出た初版本とは、基本的に推薦されている本は同じなのですが、コラムを寄稿されている方のメンバーが変更になっています。
個人的には、西和彦さん、まつもとゆきひろさん、斉藤秀夫さんが寄稿されている初版本
が好きだったりします。

2011年2月5日土曜日

わが友 石頭計算機(My good friend the stone brain computer)

最近、コンピュータやソフトウェアについて体系的に勉強したいなと思っています。
私は大学の専攻が情報処理系ではなく、基本的には仕事を通じて+独学で勉強してきたので、部分的に知識が抜けているし、それをダマシダマシ切り抜けて仕事をしてきたとわかっていたので、いつかは基礎からきちんと勉強したいなと思っていました。
でも、なんとなく実行に移せずにいました。
正直、何の勉強から始めたらいいのかがわからなかったということもありました。

ところが先日、あるきっかけで、安野光雅著の「わが友 石頭計算機」という絵本?の存在を知りました。
色々なサイトでレビューを見てみると、コンピュータ(計算機)についてとても分かりやすく説明されていて、どうやら凄い本らしいということがわかりました。
絵本ということもあって、これだったら初心者でもいけそうと思い、早速購入して読んでみました。
ちなみにこの本は、絶版になっていたので、ちょっと奮発してコレクター商品を中古で購入しました。
(改訂版が「石頭コンピューター」というタイトルで出ているようですが、少し内容が異なるそうです。)

内容は
・はあどうえあ
・そふとうえあ
・ろぼっと
という3部構成になっています。

まず、1691年に、Dr.ストーンブレーンによって書かれた本の翻訳という設定がいきなり面白いです。
それから、計算機がどのようにして2進数で足し算を行っているのか?について、ししおどしを用いて図解しているのですが、非常に分かりやすかったです。
そもそも、計算機が引き算を足し算で行っているという事実(補数の概念)も目からウロコでした。
ソフトウェアのバグを魔女裁判に例えて説明するあたりも素晴らしいです。
全体を通して、理解することが難しいことを、挿絵を用いながら上手に説明されていてビックリします。

とにかく、決して色褪せることのない名著です。
老若男女、文系、理系問わず、ぜひ読んで欲しい絵本です。

安野光雅さんは個人的に大好きな絵本作家の方で、他にも紹介したい絵本が沢山ありますが、また別の機会にポストしたいと思います。



2011年2月2日水曜日

WinSCPと改行コード

最近改行コードネタが多いのですが、WinSCPと改行コードの問題について書きます。

私は普段、WinSCPというソフトを使って自分のPC(Windows)で作成したファイルをLinuxサーバに転送しています。

先日、あるファイルがWindowsの改行コードのままサーバに転送されていることがわかりました。
(参考までに、WindowsとLinuxでは改行コード(EOL)の種類が異なります。WindowsはCRLF、UNIX系OSはLFです。この違いのために、問題が発生することがあります。)

原因を調べるために色々実験したところ、以下のことがわかりました。

1.ファイルをサーバに転送する時のWinSCPの動作

・ASCIIモードの場合
改行コードはUNIX形式に変換され転送される。
WinSCPのデフォルトの設定では、ファイルの拡張子を見て、自動的にASCIIモードに切り替わる。

・バイナリモードの場合
改行コードの変換は行われず、Windows形式のままサーバに転送される。
WinSCPのデフォルトの設定では、ファイルの拡張子を見て、自動的にバイナリモードに切り替わる。


2.サーバー上のファイルをWinSCPから直接編集して保存した場合の動作

デフォルトのエディタで編集した場合は、バイナリモードで転送される。
つまり、改行コードの変換は行われず、Windows形式のままサーバに転送される。
外部エディタを設定している場合、強制的にASCIIモードで転送するよう設定することが可能。


以上の結果から、改行コードをきちんと変換するためのWinSCPの設定は、以下のようになります。

1.[オプション]->[環境設定]->[転送]で「以下のファイルはテキストモード」のところに、必要な拡張子を追加します。

ここに設定されている拡張子のファイルは、テキストファイルとみなされて、自動的にASCIIモードで転送されます。
確実にテキストファイルであることが分かっている拡張子はきちんと追加しておき、確実にASCIIモードで転送されるようにしておきましょう。
参考までに、自分の場合以下の拡張子を追加しました。
*.yml; *.yaml; *.conf; *.pm; *.tt; *.sql; *.t; *.py; *.js; *.json;


2.[オプション]->[環境設定]->[エディタ]画面で必ず外部エディタを登録しておく。
また、「外部エディタでのファイル編集時には強制的にテキスト転送モードにする」にはチェックを入れておく。
なお、追加したエディタは最優先にしておきましょう。

こうすることで、サーバー上のファイルをWinSCPから直接編集して保存する際は、必ずASCIIモードで転送されるようになります。


3.[オプション]->[環境設定]を開き、左の[環境]->[パネル]メニューを選択し、「ダブルクリック時に実行する操作」は「編集」を選択します。


参考にしたURL:
http://www.affrc.go.jp/ja/info/scs/guide/ssh/ascii_mode.html

2011年2月1日火曜日

Subversion導入時の注意点(改行コード、実行権限) その2

前回のエントリでは、Subversionで発生した改行コードおよび実行権限の問題について、その対処方法を書きました。
今回のエントリでは、そもそもそういった問題が発生しないためには何をすればよかったのか?について書きたいと思います。

前回のおさらいになりますが、最終的な結論として、

・実行ビットが必要なファイルには、svn:executable 属性を設定
・テキストファイルには、svn:eol-style 属性に native という値を設定

を行えば、問題は回避できるということでした。

ただ、これらの設定を毎回手動で行うのは面倒ですし、うっかり忘れたりすることも考えられます。
でもご安心ください。
リポジトリにファイルを追加するときに、これらの属性設定を自動的に行う機能がSubversionクライアントには備わっていました。

例として、次のような条件で自動的に属性を設定したいと仮定します。

・拡張子がplというファイルには実行権限を設定
・拡張子がplおよびpmというファイルはテキストファイルなので、OSに依存しない改行コードに正規化

この場合、次の内容をSubversionクライアントの設定ファイルに書いておくと、次回のaddからはファイルの拡張子を見て、自動的に属性を設定してくれます。

enable-auto-props = yes

[auto-props]
*.pl = svn:eol-style=native;svn:executable
*.pm = svn:eol-style=native


この例では *.pl と *.pm だけでしたが、実際はもっと色々な拡張子に対応したものになるかと思います。
こちらのサイトには、様々な拡張子を網羅した、とても良い設定例が載っていますので、ここの設定をベースにして、自分の環境用にアレンジするのが良いと思います。

なお、設定ファイルの場所は、Subversionクライアントによって異なります。
参考までに、私が使ったことのあるものだと以下の場所になります。

・Linuxのsvnコマンドの場合
~/.subversion/config というファイルが設定ファイルになります。

・WindowsのTortoiseSVNの場合
右クリック→TortoiseSVN→Settingsを開き、Generalの「Subversion configuration file」の「Edit」ボタンをクリックすると設定ファイルが開きます。


というわけで結論:
これからSubversionを導入して、ファイルのバージョン管理を行うプロジェクトは、
一番最初に全てのメンバーに対して、プロジェクトで採用する設定ファイルを共有しておく。
その後は特に何も心配しなくてもOK。



不幸にも、私の場合のように、すでにSubversionを導入済みで、後から問題に気づいてからこの設定を行った場合は話が面倒です。
なぜなら、残念なことに、すでにリポジトリ上に存在するファイルに対しては、この設定は意味を持ちません。
あくまでも今後add(リポジトリへのファイルの追加)する時に意味を持ちます。
つまり、すでにリポジトリに存在するファイルについては、スクリプトなどを使って、前回のエントリで紹介したような属性設定の操作(svn psコマンド)を必要な全てのファイルに対して行う必要があります。

さらに不幸なことに、1つのファイルの中に異なる形式の改行コードが混在するファイルがリポジトリにうっかりCommitされている場合は、svn:eol-style=native 属性を後から設定したくても以下のようなエラーが発生して設定できません。

$ svn ps svn:eol-style 'native' foo.txt
svn: File 'foo.txt' has inconsistent newlines


というわけで、不幸にも私のような状況になってしまった方は、
・改行コードの統一
・属性の設定
という作業を必要な全てのファイルに対して、スクリプトなりを使って頑張ってやるしかないということになります。
幸い、先程紹介したサイトに、スクリプトのサンプルが載っていました。
それを参考に、このエントリで書いた設定例の設定をリポジトリ上のファイルにも適用したい場合には、どういったスクリプトを実行すればよいのかを書きます。

# 改行コードの統一
$ find . -type f -name \*.pl -print0 | xargs -0 perl -i -pe "s/\r\n/\n/"
$ find . -type f -name \*.pm -print0 | xargs -0 perl -i -pe "s/\r\n/\n/"

# 属性の設定
$ find . -type f -name \*.pl -print0 | xargs -0 svn propset svn:eol-style native
$ find . -type f -name \*.pl -print0 | xargs -0 svn propset svn:executable ''
$ find . -type f -name \*.pm -print0 | xargs -0 svn propset svn:eol-style native


これ以上、この問題の餌食になる人が出ないことを祈ります。。。
皆様も本当に気をつけてください。

参考にしたURL:
http://openlab.dino.co.jp/2008/10/15/212603361.html