[ book ] Mad Science――炎と煙と轟音の科学実験54
| 固定リンク | コメント (0) | トラックバック (0)
3 日ほど沖縄に行っていました。旅先ではネットに繋げなかったのですが、本を読んだり自然を観察することができました。 些細なことですが仮説を立ててそれを観察で確かめたりと、久し振りの、数年ぶりのゆっくりとした充実した時間だったと思います。 そこで実感したのは時間に追われる生活を送っていては知性は伸ばせないし、ろくなことを想起できないということでしょう。 欲を言えば、ヤンバルや西表で生物相を観察してみたかったです。動物園でイリオモテヤマネコなでなでもしたかったな (*/▽\*)
さて、持っていった本は「ビッグバン宇宙論」。読みたかったのですが、仕事方面で学ぶことが多くてまとまった時間をとることができなかった わたしの原点ともいえる理学分野のお話です。邦題からは暗号としか思えない数式と計算だらけの難しい本を連想してしまうと思いますが、実際の 内容は原題 "BIG BANG - The Most Important Scientific Discovery of All Time and Why You Neet to Know About it" が表している通りのものです。
「宇宙がどうなっているのか」この問いに人間は紀元前から挑み、いくつもの考えが生まれました。 広く受け入れられた考えもありますし、「常識的にありえない」と一蹴された考えもあります。 この本では、その考えがどうして生まれたのか、どうして当時否定されてしまったのかといったことと、 それぞれの説を考えた人たち -- 望遠鏡を自作したマッチョな貴族のおじさんとかメイドさん、アインシュタインの苦悩 -- のエピソードが書かれています。 この本の上巻を読めば宇宙論は突飛なものではなく、他の分野と同じように日常から生まれたものだということがわかるでしょう。
しかし、本書が優れているのは「科学者として一番大切なものは何か」を簡潔にそして説得力のある形で示していることと、 それにどのようにして向き合えばいいのかも具体的に書かれていることでしょう。科学者として疑問に向き合うにはどうすればいいのか、 データをどのようにみればいいのか。そして、打ち砕かれる説と生き残る説はどこが違うのか。
宇宙とは関係がない分野を研究している、または目指している場合でも本書から得られることは大きいと思う。 学生、あるいは研究者として続けていくことに疑問を感じた時に読んでほしいタイトル。
もちろん、本書には宇宙に関する様々な疑問の答えとその考え方もわかりやすく解説されている。 月の大きさはどうやって求められるのか。宇宙に行くこともできない紀元前に地球の赤道距離をどうやって求めたのか。 地球から太陽までの距離はどうやって求められたのか。すんごい遠くにある星 -- たとえばシリウス -- までの距離ってどうやって求めるのか。 宇宙の大きさってどうやって考えるの? こんな疑問を持ったことがあるなら楽しめるでしょう。
| 固定リンク | コメント (0) | トラックバック (0)
目次を見て購入決定。IronPython と CPython の違い ( 互換性 ) といった基本的なことはもちろん目次にあります。また、プログラムで頭を抱えることが多いのが文字コード問題ですがこれに関するページも。加えて、追加されたばかりの WPF を使ったプログラムを IronPython で作る方法も書かれているみたい。
詳細目次がどこにも載っていないので書いてみる( ´・ω・`)
( * ) : 開発コード名 Avalon
| 固定リンク | コメント (0) | トラックバック (0)
プログラミング Microsoft .NET Framework 第二版が発売されたそうです。原題は CLR via C#。.NET プラットフォームで開発をするなら必読といわれている本の改訂版だ。.NET Framework 1.x のときは .NET プラットフォームには魅力を感じなくてスルーしていたんだけど、.NET Framework2.0 になっていろんな言語が .NET プラットフォームに移植されている。
IronPython を使っていることもあり、.NET って便利なプラットフォームかもしれないと思うようになったので買うことに。どんな感じで中間コードが実行されていくのかという仮想マシンの動作にも興味がわいたのも理由のひとつ。
Amazon.com の書評によると次のようなことが書いてあるらしい。
How To 的な知識はどうでもいいんだけど、ソースコードがどのようにして中間コードにコンパイルされて、仮想マシンが中間コードをどのように実行しているのかはかなり興味がある。こういった知識は IronPython とか cPython と連動させたときに役に立つんじゃないかと予想している。
さっそく水曜日の夜に予約したんだけど、、、、
今朝ステータスページを見てみたら売り切れてました _| ̄|○il|!
| 固定リンク | コメント (0) | トラックバック (0)
日本でも Python が広まってきたようでうれしいですね。
さて、実践 Python という Python 入門書が出版されたようなので 読み始めてみました。まだ序盤ですが、Python が純粋な OOP 言語 と紹介されていることと、エラーが多めな点を除けばいいんじゃないかと思います。
Learning Python と 実践 Python のどちらがいいのかというのは 読了まで待つとして、気づいたエラーとその訂正でも書いていこうかと思います。 わたしもまだ読んでいる途中ですので気付いたものから書いていきます。
友人から教えてもらって判明したのですが、このページが Google の Web 検索でかからないとか。
なんでも、先日の朝方までは "実践Python" で検索すると出てきたのに
いまでは全く引っかからないとか ( ほかのページは引っかかるようですが ) 。
う~ん、ここは Blog なので Blog サーチじゃないと出てこないとか?そんなところじゃないかな?
2006/12/11 AM11:05
このページが Google 八部にされていることを確認しました。
Google に URL 再登録を頼んでみましたが・・・。再度削除された場合、これに関して別エントリを書こうと思います。Google に削除要求を送ったと考えられるのは、4 つくらいあるわけだけどね。わたしは卑劣で姑息な手段が大嫌いだ。さて、どう書いてくれようか。
2006/12/11 17:42
Google に申請した再登録手続きの結果が反映された様子。現在、復帰しています。
さて、どうなるでしょうかね。
誤 | 正 |
P19 configure--help |
configure --help ( configure と --help の間に半角スペース) |
P50 Python のサンプルコード [x *10 for x in xs if not x % 2] |
[even for even in range( 1, 11 ) if even % 2 == 0] ( 関数にする必要はないんじゃないかと ) |
P71 図6-2-1-1 文字の抽出 ( 正のインデックス ) |
文字の抽出 ( 負数を使った indexing ) 右端から数えて n 番目というときは負数を使った indexing |
P78 サンプルコード a.center( len( b ) + 4 ) |
a.center( len( a ) + 4 ) len( b ) の場合エラーになります。たぶん len( a ) |
P98 サンプルコード7-2-9-1 for x, s in zip( a, b ): print x, s ↑インデントがない |
for (x, s) in zip( a, b ): print x, s |
P113 サンプルコード 8-1-3-1 >>> len((1, 2, 3)) # タブルの長さ |
# タプルの長さ tuple ( タプル ) ですよ。 (^_^ ; |
P113 表 8-1-3-1 |
リストメソッド は集合演算を行うことで確認できます。 wrapper_descriptor も含めるならいくつか増えますね。 コードは次のとおり。 list_method = set( [method for method in dir( [] ) if eval( "callable( list.%s )" % method )] ) for seq_obj in ("''", "u''", "()"): exec "list_method -= set( dir( %s ) )" % seq_obj print list( list_method ) |
P121 pop はリストの末尾要素を削除します。引数はとらずに、 リストの末尾要素を捨ててしまうのです |
list.pop() は引数とれますがな。pop() が切り出すのは末尾要素とは限りません。
help( list.pop ) でヘルプ参照してください。 list.pop() に引数を与えると次のようになります。 >>> ascend = range( 10 ) # 0~9までの整数のリスト >>> [ascend.pop( 0 ), ascend.pop( 5 )] [0, 6] >>> ascend [1, 2, 3, 4, 5, 7, 8, 9] # 切り出した要素はなくなってる 正しくは ( help() の要約だけど )↓ 「pop() は指定されたインデックスの要素を返す( return する ) と同時に、 その要素を元のリストから削除します。デフォルトではリストの最後の要素が対象です。 存在しないインデックスを指定された場合は IndexError 例外を発生させます。」 |
P137 サンプルコード 9-1-5-2 >>> print z # None ふぁ返される |
# None が返される 笑わせてもらいました (^-^;; |
P157 10-1-6 >> オブジェクトのメソッド オブジェクトの属性のうち、オブジェクトにピリオド「.」を続けることで アクセスすることができるものを「メソッド」といいます。 |
・・・・・・(;´Д`) ピリオドを続けることでアクセスすることができるものが 必ずメソッドであるとはいえません。文字列や数値の時もあります。 メソッドとは何らかの機能を持った callable なものです。 |
P165 11-3-3 複数の値を返す 複数の戻り値を変数と利用するためには、戻り値と同じ数の変数を用意して、 関数の代入を行います。 |
Python では return に続けて複数のオブジェクトを指定した場合、
それらはひとつのタプルの中にまとめられて返されることになっています。
したがって、当然のことですが、ひとつの変数で受け取ることも可能です。 >>> def multiple_value_func(): ... return "hoge", "fuge", "piyo" ... >>> cargo = multiple_value_func() >>> cargo ('hoge', 'fuge', 'piyo') return の後ろに指定したオブジェクトの数と同じ変数を用意しなければならないのは、 unpacked assignment を行ってタプルの要素をそれぞれの変数に代入するときだけです。 さらに、関数の代入とは次のようなものです。 >>> cargo = multiple_value_func #() がないことに注目 >>> cargo <function multiple_value_func at 0x1871456c> 関数を呼び出した場合には戻り値が変数に入りますが、 関数を代入した場合には関数への参照が変数に入ります。 関数の呼び出しと代入はまったく違うものです。 |
P172 構文 def 関数名( 引数リスト ): "文字列"   関数ブロック def 関数名( 引数リスト ): """文字列""" 関数ブロック |
def 関数名( 引数リスト ): 文字列リテラル 関数ブロック 関数ブロック内は、コメントや doc ストリングであっても インデントが必要になります。 |
P183 図 12-1-2-1 def class1() "This is sample class." pass |
class sample_class1( object ): "This is a sample class." pass クラスの定義は def ではなく class キーワードで開始します。 また、class ステートメントの末尾にはコロンが必要です。 |
P185 構文 12-1-5-1 dir 関数 dir( ジュールオブジェクト ) |
dir( モジュールオブジェクト ) なお、dir() はモジュールオブジェクト以外にも使うことができます。 |
P188 構文 12-1-9-1 if __name__ == '__main__': 実行する関数・オブジェクト サンプルコード 12-1-9-1 runAsProg.py if __name__ == '__main__': main() |
if __name__ == "__main__": 実行する関数・オブジェクト if __name__ == "__main__": main() 構文・サンプルコードともにインデントが不正です。 サンプルコードが間違っているので図 12-1-9-1 もおかしいです。 サンプルコードを実行すると IndentationError が返ってきます。 |
P193 コラム itertools モジュール lzip, imap, ifilter 関数 |
izip ですね。 itertools モジュールが持つ callable オブジェクトは次の式で確認できます。 [method for method in dir( itertools ) if eval( "callable( itertools.%s ) == True" % method )] |
P197 12-4-2 パッケージをインポートする インポートされたパッケージは、Python のオブジェクトとしてはモジュールとまったく module 型であることがわかります。 |
インポートされたパッケージは、Python のオブジェクトとしてはモジュールとまったく同じ module 型であることがわかります。 |
P203 13-1-4 クラスを定義する クラスの定義するには class ステートメントにより行います。( 中略 ) そしてコロン「:」を続けた後、通常は改行をインデンテーションを行ってから |
クラスの定義をするには class ステートメントを使います。( 中略 ) そしてコロン「:」を続けた後、通常は改行をしてインデンテーションを行ってから |
P218 サンプルコード 13-4-5-1 >>> len( c ) 10 |
>>> len( c ) 5 |
P219 サンプルコード 13-4-6-1 >>> class Container( object ): . . . def __init__( self, start, end ): . . . self.start = start . . . self.end = end . . . def __len__( self ): . . . return self.end ミ self.start + 1 |
>>> class Container( object ): . . . def __init__( self, start, end ): . . . self.start = self.start . . . self.end = end . . . . . . def __len__( self ): . . . return self.end - self.start + 1 ミ ってなんでしょう?そんな演算子なかった気が・・・ あと Iterator メソッドの定義にある self.pos = start では NameError がでますね。ここはインスタンスが持っている start 、つまり self.start を代入するようにしなければなりません。 |
P304 ctypes パッケージの解説 Python のオブジェクトとして直接利用できる協力な機能です。 |
強力な機能です。 |
ついでに Tips 的なものをば( ´・ω・`)
P120 リストの要素追加 append() も map() と組み合わせると複数の要素を追加できます。 None が入ったリストが標準出力に帰ってきますが orz >>> test_list = [] >>> map( test_list.append, list( "hoge" ) ) [None, None, None, None] >>> test_list ['h', 'o', 'g', 'e'] |
P123 リスト演算の違い x = x + [1] と x += [1] の違いは ID を調べることで確認できます。 x = x + [1] の場合 >>> a = [] >>> old_id = id( a ) >>> a = a + [1] >>> new_id = id( a ) >>> old_id == new_id False x += [1] の場合 >>> a = [] >>> old_id = id( a ) >>> a += [1] >>> new_id = id( a ) >>> old_id == new_id True |
P126 タプルの順序を反転する list.sort() に reverse フラグがあるように組み込み関数 sorted() にも reverse フラグがあります。これを利用してもタプルの要素の並び順を反転できます。 >>> ascend_tuple = tuple( range( 10 ) ) >>> descend_tuple = tuple( sorted( ascend_tuple, reverse=True ) ) >>> descend_tuple (9, 8, 7, 6, 5, 4, 3, 2, 1, 0) |
| 固定リンク | コメント (0) | トラックバック (0)
Write Great Code vol.1 understanding the machine
に続いて、
Write Great Code vol.2 Thinking Low-level, Writing High-level
も翻訳されたようです。
プログラムを書いていると、レイヤーの低い部分の知識が助けになることが結構あります。 実装しているとき以外にも、新しいプログラミング言語の勉強をしているときもそう。 今ではほとんどのプログラマは自分で実装することがないかもしれない、そんな知識だけど 持っていると助かることが多いんです。
OS とかよりももっと低い部分の知識。というより OS がどーだこーだの知識よりよっぽど大事ですよ。 OS の知識なんてバージョンアップとかパッチに伴う仕様変更で使い物にならなくなるものも少なくないからね。 OS が変わったら役に立たなくなる道具と、OS に関係なく役に立ってくれる道具があったとしたら、 どっちが "trivial" でどっちが "important" なんだろう。
Write Great Code で書かれているのは、OS が変わっても役に立ってくれる貴重な知識だと思う。 新しく出版される vol.2 ではコンパイラが生成するネイティブコードに焦点が当てられている。 Java や .NET のようにビルドするときは中間コードを生成するような言語でも、実行するときには 仮想マシンがネイティブコードにコンパイルしながら処理を進めていく。結局はどこかで ネイティブコードにコンパイルされるわけで、高級言語で書いた statement の違いがネイティブコードに どんな変化を与えるのか、パフォーマンスや安定性に与える影響はどうなのかということを 知っておくことはどこかで役に立つと思う。
Amazon.co.jp ではまだ予約扱いになっていますが、発送予定日は 12/2 ということなので早速予約しました。 ( * これを書いているのは 12/1 ですが、注文は 11/30 にしています。)
Write Great Code vol.2 のほかにヒトの変異 --人体の遺伝的多様性についてと The Art of Innovation
も購入しました。早く到着しないかな。
| 固定リンク | コメント (0) | トラックバック (0)
ヤバい経済学 ( 通称 Freakonomics ) 読了。
世の中にある、多くの人がこうに違いないと信じきってしまっていること -- Steven D. Levitt は通念と呼ぶ -- や、普段あまり気に留めないことを違う角度から見るとどうなるか。実に鋭い考察だ。
たとえば、1990年代初めのアメリカでは犯罪がどんどん増えていた。1980年からの犯罪発生回数をグラフにするとうなぎのぼりといってもいいほどだった。1995年には、犯罪はもっともっと増えるといわれていたが・・・。2000年になるとがっくりと減ってしまった。この理由については、「景気がよくなったから」とか「画期的な犯罪取締り」といった説が広く受け入れられている。しかし、著者はこれに一石を投じたのだ。「データはそんなことは反映していない。もっと別の理由があるのだ」と。わたしはまず驚き、そして納得した。
Don't Politic, Use Data.
本書ではこの姿勢が貫かれている。 "Don't Politic, Use Data." は Google が掲げるイノベーションのための9箇条にもあるデータドリブンの原則をうたったものだが、研究者にとっても必須といえる「お約束」だ。しかし、いざ実践するとなると非常に難しい。妥当性のあるデータを見つけるのも一苦労だし、膨大なデータの山をどの角度から見たらいいものかといつも悩む。
ヤバい経済学を日々のあれこれに応用するとき、少なくとも1つ、いつも底のほうに流れているものがある。それは ( 中略 ) 筋の通った考え方をするということだ。そのために必要なのは、新しい見方をする、新しい理解の仕方をする、新しい測り方をする、そんなことだ。という著者のデータの集め方、視点の角度の付け方はとても参考になる。
( 終章より抜粋 )
なお、原著は経済学の教科書としても使われるようになり、その補助として Freakonomics Study Guides まで書かれています。筆者 Steven D. Levitt の Web サイトはこちら。 Freakonomics Study Guides は こちら。
| 固定リンク | コメント (0) | トラックバック (1)
まず、最初に感じたのは O'Reilly にしてはかなり読みづらい、というか unconcise な英文だということだ。 Twisted Essentials のような clear かつ concise な英文も珍しいが、ここまで unconcise な英文も珍しい。これほど酷い英文は O'Reilly では初めてのことだった。
構成に関してもちょいと難がある。たとえば recipe1.9 を理解する鍵の部分の解説が recipe1.10 に書かれているのだ。技術解説書籍なのだから、普通は逆の構成だろう。「recipe1.10 を理解する鍵は前述の recipe1.9 で既に解説したので、わからない場合は戻ってみてね」ならわかる。しかし、recipe1.9 では満足な解説もなく(というか実行例しか書いてない)、鍵となる部分の開設は後述するとの断りもないとは酷すぎる。レシピは実際のコーディングでも役に立つものがあるだけに残念だ。
幸いにして Python Cookbook 2nd Ed. は複数の著者の共著となっているので、他の Chapter はそれほど酷くないかもしれない。書籍で Python ではどうやって実装するのかというレシピを載せたものは本書くらいしかない。残りの Chapter は読みやすいことを祈るばかり。
| 固定リンク | コメント (0) | トラックバック (0)
本の進行は、序文で書かれているように、最初から順番に読んでいけば Python の基礎を習得できるようになっています。ちゃんと理解してから 次のステップに進むようにすれば、前に戻ったりする必要もありませんし、 指示で序盤のうちから本の後ろの方に飛ばされることもありません。 この構成はとてもよかったと思います。
しかし、O'Reilly にしては訳の質があまり高くないなぁというのが正直なところ。 ちょっと首をかしげる箇所があったので原著と照らし合わせたのですが、 誤訳と思われる場所が数箇所ありました。
さらに、訳者が不用意に手を加えていたのもマイナスだと思う。 原著では "21.4.3.1 User-Defined Iterators" となっているところが 訳では単に「イテレータ」とだけ書いてあって、イテレータそのものの 説明であるかのように思えるなどやはり何箇所か首をかしげる箇所がありました。
PS.
アドバイスを下さった皆様方、ありがとうございました m(_ _)m
| 固定リンク | コメント (0) | トラックバック (0)
| 固定リンク | コメント (0) | トラックバック (0)