2010年04月29日 12:53

4月29日のトマト

Image348.jpg
カテゴリ:植物成長記録
2010/04/29 Thu 12:53 | Comment(0) | TrackBack(0) | 植物成長記録 | このブログの読者になる | 更新情報をチェックする

2010年04月25日 23:45

13デイズ - 昨年秋に読み終わった本

ティム ロリンズ,デヴィッド セルフ
角川書店
発売日:2000-11

2009年秋に読み終わった本

アポロ13を読むとたいがい次は13デイズを読む。だいぶ昔に買った本だが、買ったのもアポロ13とほぼ同時期だった気がする。

1962年10月のキューバを巡るアメリカとソ連の核戦争寸前までに達した極限の対立を、アメリカ政府内の視点から描いている。アメリカ軍部は全面戦争を主張し、当時の若きケネディ大統領とその弟らによってぎりぎりの状況で核戦争を回避する。

アポロ計画ももともとケネディ大統領が計画をスタートさせている。従って、アポロ13と13デイズの共通点は、ケネディ大統領と「13」。
タグ:
カテゴリ:丈夫な本棚
2010/04/25 Sun 23:45 | Comment(0) | TrackBack(0) | 丈夫な本棚 | このブログの読者になる | 更新情報をチェックする

2010年04月19日 01:08

アポロ13 - 昨年秋に読み終わった本

ジム ラベル,ジェフリー クルーガー
新潮社
発売日:1995-06

2009年秋に読み終わった本

1970年に3回目の有人月着陸を目指して行われた飛行だったが、途中で酸素タンクが爆発して、月着陸を中止して地球に戻ってきた話。著書の一人のジムラベルはこのときの船長。

司令船と月着陸船を連結して月まで飛行するわけだが、酸素タンク爆発で司令船にあった生命維持のための酸素・水・電力がほとんどなくなってしまい、着陸船にあったわずかな酸素で命をつないだ。着陸船はもともと月周回軌道に到達してから使うはずだったのだが、月地球往復の旅程のほとんどを着陸船で過ごすことになった。暖房やコンピュータなどほとんど全ての機材の電源を落として、3人の飛行士は凍えながら無事帰還。機材の電源を落としてしまうのは、着陸時にちゃんと無事起動できるかどうかほとんど賭であった。暖房のない過酷な環境で、寒くてほとんど眠れない中、4日間にわたり、コンピュータのシャットダウン、手動でのエンジン始動・軌道修正やら、着陸前のコンピュータ軌道、とかいっぱいやることがあって、しかもどれもまちがいたら命がないという状況を無事乗り越えてしまった。

この本は何回も読んでるし、映画も何回も見ている。
タグ:
カテゴリ:丈夫な本棚
2010/04/19 Mon 01:08 | Comment(0) | TrackBack(0) | 丈夫な本棚 | このブログの読者になる | 更新情報をチェックする

2010年04月18日 23:34

Scalaのメモ その5 JavaのListをScalaのListに変換

Scalaのメモその4の続き。

Javaの任意のクラスを利用できるので、リストは、ScalaのListArrayでなくても java.util.List も利用できる。ただ、ScalaのListArrayのほうが便利なので、java.util.List はやむを得ない場合のみの方がよさそう。

リストをforループに回すときは、mapメソッドやforeachメソッドを備えている必要があり、java.util.List はそのままではforループでは回せない。なので、java.util.List からScalaの scala.collection.jcl.BufferWrapper という型に変換してくれる scala.collection.jcl.Conversions.convertList メソッドを利用する。

scala.collection.jcl.BufferWrapperscala.Iterable というtraitを継承していて、それがmapメソッドやforeachメソッドを実装している。traitってのはJavaにない概念でまだあまり理解できていない。

scala.collection.jcl.Conversions.convertListimport文に書いておけば、暗黙の型変換というのが適用されて、特に何も考えなくても、forループで使えるようになる。暗黙の型変換ってのもJavaにない概念だ。型がマッチするように勝手にメソッド呼び出しを追加してくれるものらしい。

以下の2つの例は同じ意味になる。
import scala.collection.jcl.Conversions.convertList;

val list = new java.util.ArrayList[String]();
list.add("abc");
list.add("def");
for(word <- list){
	println(word);
}
val list = new java.util.ArrayList[String]();
list.add("abc");
list.add("def");
for(word <- scala.collection.jcl.Conversions.convertList(list)){
	println(word);
}
タグ:scala
カテゴリ:テック
2010/04/18 Sun 23:34 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2010年04月18日 17:35

4月18日のトマト

Image347.jpg
忘れてはならないのは、このブログのタイトルが植物の成長の記録であったこと。

よく見ると小さな実がなってます。
タグ:トマト
カテゴリ:植物成長記録
2010/04/18 Sun 17:35 | Comment(0) | TrackBack(0) | 植物成長記録 | このブログの読者になる | 更新情報をチェックする

2010年04月13日 00:09

Scalaインタープリタのエラー scala.tools.nsc.MissingRequirementError その2

ScalaのインタープリタをJavaのプログラムから利用しようと、scala.tools.nsc.Interpreterinterpret を呼び出すと出てくる以下のエラー。

scala.tools.nsc.MissingRequirementError: object scala not found.
  at scala.tools.nsc.symtab.Definitions$definitions$.getModuleOrClass(Definitions.scala:514)

Scalaがクラスファイルを見つけられるように、jarファイルのありかをScalaに教えてあげないといけないらしい。Scalaのclasspathの解説に説明があった。

英語なので全部は読めていないのだが、要するにScalaにクラスパスを教えなきゃいけない。jarファイルのありかはそもそもJava起動時に教えているので、なんでエラーが出るのかは不明だが(Eclipseから起動しているからなのか)、解決方法としては、Java起動時のコマンドラインオプションに -Dscala.home="C:\scala-2.8.0.Beta1-prerelease" を付ける方法もあるが、以下のコードでもできた。こっちの方法だとScala関連だけでなく、そのほかのライブラリやユーザ定義のクラスを呼び出そうとしたときのエラーも解決できる。

scala.tools.nsc.Settings settings = new scala.tools.nsc.Settings();
settings.classpath().value_$eq(System.getProperty("java.class.path"));
scala.tools.nsc.Interpreter interpreter = new scala.tools.nsc.Interpreter(settings, out);
interpreter.interpret(sourceCode);

value_$eq という変な名前のメソッドは、Scalaでは value_= という名前のメソッドで、valueというプロパティのセッターのようなものになる。

クラスファイルはクラスローダが探してくれるのになぜScalaに改めてクラスパスを教えなきゃいけないかというと、ここからは推測だが、Scalaはpackage名の途中でもそれがpackage名だと分かる必要があるから。

例えば、import org._ と書けば、名前がorg.で始まるパッケージが存在することをScalaは確認する必要がある。jarファイルの中を探索すればorgというディレクトリがあってその中にさらにディレクトリがあるので、orgがパッケージ名の一部だと分かる。orgというパッケージもクラスもあるわけではないので、jarファイルを見ない限り import org._ の妥当性を検証できない。もちろん org.w3c.dom.Element というクラス名を見れば、そのクラスはクラスローダで読み込めるので、結果としてorgがパッケージ名の一部だと分かるが、Scalaの場合は、それをクラスを読み込む前に分かるようにしなければいけない。Javaの場合は、パッケージのインポートはパッケージのフルネームかクラス名のフルネームで指定する必要があるので、このようなことがない。

この認識で合ってるかな。
タグ:scala java
カテゴリ:テック
2010/04/13 Tue 00:09 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2010年04月10日 01:11

Scalaインタープリタのエラー scala.tools.nsc.MissingRequirementError: object scala not found.

ScalaのインタープリタをJavaのプログラムから利用しようと、scala.tools.nsc.Interpreterinterpret を呼び出すと、以下のようなエラーが出た。

scala.tools.nsc.MissingRequirementError: object scala not found.
  at scala.tools.nsc.symtab.Definitions$definitions$.getModuleOrClass(Definitions.scala:514)

2.7.7 では出ず、2.8.0.Beta1 で出た。Scalaのバグなのか仕様なのかわからないが、とりあえず、Java起動時のコマンドラインオプションに -Dscala.home="C:\scala-2.8.0.Beta1-prerelease" というように、Javaのプロパティを設定すると解決した。(Windowsの場合)

参考:Scala のインタープリタをJavaから呼び出すには

2010/04/13追記
もっといい解決方法
タグ:scala java
カテゴリ:テック
2010/04/10 Sat 01:11 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。