トップ «前の日記(2014-03-20) 最新 次の日記(2014-03-29)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2014-03-23

_ Dart

アスキーの鈴木さんからプログラミング言語Dartを頂いた。

また新しい言語か、と思いながらパラパラ見てみると、なんか雰囲気が良いので少しまじめに読んでみた。

JavaScriptとJavaとC#の良いとこどりと書いてあるが、特徴は次のところだろう。

・関数の記述はC#やJavaのラムダ式のように楽ちん。例)(x, y) => x * y

・EclipseベースのIDEが最初から用意されている

・型名の明示が可能(finalのような修飾子もあるし、リストとマップにはジェネリクスも利用できる)なので、型チェックを最初からされるのが好きな開発者でもOK(TODO:varで宣言した変数に限り、JavaScript並の自動型変換がある(便利ではあるけど諸刃の剣なのでそこを宣言で制御できるのなら良いと思った)かどうかは、ぱらぱら読んだだけだとわからなかった)

・クラスベースだが、必ずしもクラスを使う必要はない。インターフェイスもクラスで代替

・WebSocket、HTTPリクエスト、RESTfulなAPIとかそのあたりは用意万端。

・JavaScriptトランスレータが用意されているので、普通のWebブラウザでクライアントコードを実行できる

・シングルスレッドだけどisolateという(ファイバー相当なのかな)実行単位を持つ。

・サーバーでの実行も可能(Node.jsの置き換えを狙っている雰囲気がある)

JavaScriptの置き換えを狙っていて、そのためのソフトウェアエコシステムを揃えているのが特徴ということなのだろう。あとは、HerokuがいきなりDartで開発できれば良いのだろうけど、当然のようにビルドパッケージが用意されていた

といった具合。

プログラミング言語Dart(Chris Buckett/あんどうやすし/粟納裕貴/勝又雅史/川俣千恵子/植田大貴/井関正也/水野あゆみ)

なかなか面白そうだ。

_ これでお仕舞いもやしもん

もやしもんの最終巻を買って読んだ。

いやー、もう買わなくてもいいかなぁと思いながらもなんだかんだと読み続けて、最後はかっちりとしめてきた。というか、菌が顕現してこそのもやしもんだなぁと他愛もなく感動してしまったよ。

もやしもん(13)<完> (イブニングKC)(石川 雅之)

いいよーという麹菌の言葉に思わず涙。(けいぞう、も良かったね)

実に良い終りだった。

_ 取っ掛かりを網羅したUNIX入門書

アスキーの鈴木さんから、DART本と同時に、はじめてUNIXで仕事する人が読む本もいただいた。こちらは普通に読んだ。

これは良い本だった。UNIXとのおつきあいがあまり無い人には強くお勧めしたい。

が、ちょっと勘違いすると、とんでも本扱いされる危険もありそうなので、この本の良さについて説明する必要がある気がする。

はじめてUNIXで仕事をする人が読む本(木本雅彦/松山直道/稲島大輔/株式会社創夢)

まず、この本のすぐにわかる特徴は2点ある。

網羅性の高さと、本の薄さだ。

木村さんが第三部の目次を掲げてなんか良さそうと書いている。目次を見るとLANとWANの違いから、OSI参照モデル、IP(V4,V6)、TCPとUDP、アプリケーションプロトコル、そしてセキュリティまで網羅しているからすさまじいのだが、おそらく勘違いしている。

第三部はここまで網羅しているのに、ページ数は50ページに満たないのだ。

ソフトウェアライセンス(第11章)も、「ライセンスを考慮する理由」と「オープンソースライセンス」の2つの節から構成されているから、おお、と思うと合わせて2ページだ。

そもそも全体が250ページに満たない。1バイトでカウントできる情報量しか持たないのだ。

この本の特徴は、まさにそこにある。網羅性の高さと本自体が持つ情報量の少なさだ。

網羅性が高いのに情報量が少ないというと、辞書や事典を想像すると良いかも知れない。

この本は、事典ではないが、UNIXというOSを構成している(多少は文化も含む)あらゆる構成要素を

・生活環境(Life with UNIXみたいだ)

・プログラミング環境

・ネットワーク技術

の3つの切り口からその特徴を示し、その特徴を構成する各要素について概略を示したものだ。

事典ではないから、先頭から最後まで読むことを前提としているし、そういう書き方をしている。しかし、個々の内容を掘り下げるつもりはあまり無いらしい。とはいえ、vim、Emacs、shellや、RCS、Subversion、GITについてはコマンドを含む使い方を示している。なぜRCSと思うが、それによりCVSを説明する必要がなくなるからだろうし、ちょっと掘ったディレクトリに自分のためのバージョン管理をするにはRCSで十分なこともあるからかも知れない(この~を教えておけば~'はその応用だから不要というのが全体のトーンに近い)。

入門書にはおそらく2種類ある。

1つは魚の釣り型の具体的な説明をした本だ。その本を読めば、(たとえばたまたま取り上げられている題材がカサゴの磯釣りなら)カサゴの磯釣りについては熟知できるだろう。しかし、そこから釣堀でマスを釣るための方法まで敷衍して考えられるか、冬に湖にワカサギを釣りに行くための方法を得られるかはわからない。普通は無理だろう。

もう1つは、釣竿の種類、糸の種類、釣り場の種類、どういう魚が釣りに向いていて(逆に網に向いていて)、餌にはどういう種類があり、交通手段として海であれば~、川であれば~、というユニバーサルな入門書だ。書くためには幅広い知識、経験、取捨選択のセンス、いろいろなものが要求されるため難しく、しかもすぐに直接的な役にも立たない。明日カサゴの磯釣りに行きたい人に与えてもだめだろう。

完全に後者の本なのだ。ここに網羅された情報を叩き込んでおけば、それが必要となったときに、こういう場合には~を使えばできるはずだとわかる(わからなくても何か思い当る程度でも良いのだよ)ので、あとは検索するなり、特化した本を入手するなりすれば良い。まさに仕事をするために全体像を俯瞰し、特徴を知ることができる。

そのため、なんで今更こんなものが? という要素技術が出てくることがある。例えばOSI参照モデルだし、RCSだし、Telnetだ。

ほぼ間違いなく、OSI参照モデルのインスタンスを仕事で使うことは無いだろう(銀行関係とかだと無いわけではないと思うが)。

しかし、ネットワークの多層化された構成モデルを頭に入れておくことは仕事で使うには必要かも知れない。そして多層化モデルとしてOSI参照モデルはうまくできているのだから、その階層について概略が説明されていることは大いに意味がある。

ちょっと違うが、背景知識の有無というのは問題が発生したときにとても重要となる。

たとえば、HTTPSでクライアント側のテストを手伝っていて、うまく疎通確認ができないという問題があるとする。サーバー側のWebアプリケーションのデバッグトレースにひっからないし、そもそもアクセスログにも出てこない。そこでクライアントからのリクエストが出ていないようだとサーバー側は言う。いや、送っているはずだ、とクライアント側は言う。

そこでルータではないか、ロードバランサーではないか、と始まるのだが、そこを疑う前にまず内部を疑う必要があるのでは? とネットワークのプロトコルスタックの絵が見えていれば考えることができる。SSLのレイヤー(SSのレイヤーとは書けないし、難しいな)で接続を拒否している可能性が高いからだ。

よく、つながらないけどpingしたら応答が返るんですよというようなほとんど役に立たない(ゼロではない)情報がついた報告があったりするけど、どうして全体でものごと考えないのかと小一時間系なことが起きるのが仕事というものだ。そこはとりあえずtelnetでポート25を叩いてみろとか。でもtelnetを知らない人はそういう発想自体ができない(本書でも軽くtelnetの応用例としてポート23以外を叩くことにも触れている)。

つまりこの本には表面的にしか物事を読めない人にアピールするネガティブな要素として

・掘り下げがない

・(telnetとかRCSとかOSI参照モデルなど)古い情報が多い

・使わないエディタや古臭いコマンドの使い方にページが割かれている

・これを読んでもLinuxのインストールはできない

というようなことがあり、おそらくアマゾンには上記の特徴をあげつらった星1つが得意満面に出てくるだろう。

しかし、少しでも物事を掘り下げて考えられる人間にとっては、まず編集とファイルを操作する最低限のコマンドについては具体的に説明があり(必要であれば、古いUNIXでも使えるように古典的なコマンド/方法を示し)、さらに専門的な内容に知識のパスをつけられるように全体像をつかめるようにしてある。

つまり、古典的な入門書の名著と呼ばれるものを、現代で再実装した内容となっている。

志が高い良い本だ。

追記)達人出版会からも販売された

本日のツッコミ(全6件) [ツッコミを入れる]
_ あんどうやすし (2014-03-24 10:25)

Dart本、まだ私の手元にはないんですが、もう刷り上がってるんですね。<br><br>「型チェックを無視する」のは実行モードをproduction modeにすればできますが、varを禁止するのは規約で縛るくらいしか手がなさそうです。

_ arton (2014-03-24 14:59)

翻訳ありがとうございました。速いですね! それにしても私のほうが先に受ってしまうとは。<br>varは逆で、そう宣言すればJavaScriptの変数として、型を自動的に変換してくれるのかな、という疑問でした。

_ あんどうやすし (2014-03-25 16:53)

var型の変数にはJavaScript同様に任意の型のオブジェクトを代入できます。はじめのうちはvarを使って速度重視で開発を進めて安定してきたら型宣言を追加するとか、クラスのプロパティやメソッドの戻り値や引数はドキュメントとして型宣言を付けつつローカル変数はvarにするとか、そういう使い分けを言語開発者陣は想定しているようです。

_ arton (2014-03-25 20:14)

書き方が悪くて申し訳なかったですが、<br>int a = 3; とした場合に、(ここまで読み込んでいないけど)a + "3" としたら型エラーになると想像できるけど、<br>var a = 3; としたら、a + "3" が6になるかなぁという疑問でした(C#だと当然型エラーとなるわけですが、JavaScriptのvarだと勝手にコアースするので同じかなぁと)。

_ あんどうやすし (2014-03-26 09:19)

あ、なるほど。今試してみたら型エラーになりました。dart2jsでJSに変換したコードも見てみましたが、そちらでもエラーになるようです。

_ arton (2014-03-26 11:18)

ありがとうございます。(例がJavaScriptでもC#でも"33"になるので良くなかったですね。+ではなく-と書くべきでした)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|

ジェズイットを見習え