eclipse + scala-2.8.0.RC3 + scalatest-1.2-for-scala-2.8.0.RC3-SN
以下のサイトを参考にしてeclipse + scala-2.8.0.RC3 + scalatest-1.0を試そうとしたんだけど、
http://groups.google.com/group/scalatest-users/web/running-scalatest-from-eclipse
こんなエラーがでてはまってた。
error while loading Spec, Scala signature Spec has wrong version expected: 5.0 found: 4.1
原因は、scala-2.8とscala-2.7にバイナリ互換がないから。
http://www.scala-lang.org/node/2124
試そうとしていたscalatest-1.0はscala-2.7でコンパイルされたものなのでscala-2.8では動かない。
解決にはscalatestをソースからscala-2.8でコンパイルする必要がある。
でもJavaの環境に不慣れで途方にくれていたら、以下の場所にscalatest-1.2-for-scala-2.8.0.RC3-SNAPSHOT.jarがあった。こっちを使うようにしたらちゃんとscalatestが動いた。
http://scala-tools.org/repo-snapshots/org/scalatest/scalatest/1.2-for-scala-2.8.0.RC3-SNAPSHOT
Ruby勉強会@札幌-12に参加してきました
Ruby勉強会@札幌-12に参加してきました。
はじめて参加しましたが、初心者にオープンな感じでとても楽しかったです。
内容も硬軟おりまぜてあるので、自分のレベルにあった話、高度な話の両方が聞けて、
お得感がすごいなと思いました。主催者のみなさん、ありがとうございました。
勉強したこと:
- 「初めてのRuby」の読み合わせ(第4章-4.2文字クラスあたりまで)
- RubyConfの報告 前田さん
- 多バイト文字列の検索アルゴリズム 石田さん
- DCIアーキテクチャについて 島田さん
- Ruby札幌 2009活動報告 島田さん
- Sapporo.rb parse.yコードリーディング告知 mrknさん
- 「ふりかえりのふりかえり」 Maraigueaさん
msvcr90d.dll not found
Visual Studio 2008 Express Editionでデバッグ版のDLLを作成して起動しようとするとmsvcr90d.dllが見つからないというエラーが発生するようになった。公式な解決方法はまだ見つかってないみたいなんだが、どうもファイルシステムがFAT32だと起こるようだ。私の環境だとMSDN Forumでthymiarasという人が投稿した以下の方法で回避できた。
プロジェクトの[プロパティ]->[マニュフェストツール]->[FAT32次善策の使用]を"はい"にする。
http://forums.microsoft.com/msdn/showpost.aspx?postid=2512846&siteid=1&sb=0&d=1&at=7&ft=11&tf=0&pageid=1
ちなみになんで私の環境のファイルシステムがFAT32になっているかとういうと、BootCampを利用してMacBook上でWindowsを動かしているからだ。ファイルシステムをFAT32にしておくとMac側から書き込みができて便利なのだ。
RubyでCSVを扱うときは配列をハッシュにすると便利な件
RubyでCSVを扱う場合は標準ライブラリのCSVか、FasterCSVを使うことが多いと思います。どちらのライブラリも以下のような感じでCSVの1行を配列にしてブロックに渡してくれます。
CSV.open("test.csv", 'r') do |row| p row # => ["Yamada", "30", "180"] p row[0] # => "Yamada" p row[1] # => "30" p row[2] # => "180" end
このときCSVのカラム数が少なければrow[0], row[1]のようにして配列のインデックスアクセスで十分なのですが、カラム数が多くなると、あのデータは何カラム目にあるだっけ? となることがよくあります。
そこでハッシュですよ。
例えば、CSVデータが名前、年齢、身長の順に並んでいるなら、以下のようにカラム名をキーとしたハッシュにすると便利です。
keys = [:name, :age, :height] CSV.open("test.csv", 'r') do |row| p hashed_row = Hash[*keys.zip(row).flatten] # => {:age=>"30", :height=>"180", :name=>"Yamada"} p hashed_row[:name] # => "Yamada" p hashed_row[:age] # => "30" p hashed_row[:height] # => "180" end
Unicodeの数値文字参照をUTF-8とかUTF-16に変換する
NKFの--numchar-inputオプションでできます。
例えばUnicodeの「あ」(U+3042)をUTF-8にエンコードした結果を知りたい場合は、
> echo -n 'あ' | nkf -w --numchar-input > hoge.txt
nkfの-wは入力をUTF-8に変換します。UTF-16に変換したい場合は、-w16にすればいいです。
echoの-nオプションは改行を出力しないようにするためのものです。
NKFの--numchar-inputオプションは、Unicodeの「叱」(U+20B9F)とかのサロゲートペアが必要なコードポイントもちゃんと変換できます。
NKFの-wオプションはwの後に続けて, 8, 16, B, L, 0を付加することで変換方法を選べます。
C++のマニピュレータはいらない子なの?
ひさしぶりにマニピュレータに触れる機会があった。プログラムの動作がおかしいので調べてみると、固定長じゃないとだめなフィールドにstd::setwで幅を指定していた。set::setwは表示幅を設定するもので、指定幅を超えた場合は切り詰めるんじゃなくてそのまま出力される。なので固定長フィールドが可変長になってしまっていたというものだった。固定長ならofstream::writeを使う。
std::setwの動作を確認しておこうと思ってググってみると、情報少なっ! Cだとちゃんとしたリフェレンスページがすぐ見つかるのに。C++って意外とWeb上のリファレンスが見つからなかったりする。そもそも「マニピュレータ」って。なんのひっかかりもない単語ですな。ちょっと口にだしてみるのが照れる感じもある。
C++のマニピュレータって人気ないなー。無視されているというか。実際私も使ってない。もっぱらprintf派。boost::formatがはやく標準になればいいのに。
MonoDevelopが起動後すぐにUnhandled Exceptionを投げてハングアップする
なぜかソリューションを選択しようとするとUnhandled Exceptionが発生して固まってしまう...
ググって以下の記述を発見。~/.config/MonoDevelopフォルダにあるファイルを全部削除すればOK。
Hello, I had this bug myself, and a long google session came up with the following simple step done from a command line:
rm -rf ~/.config/MonoDevelop
this causes MonoDevelop to reload its list of installed addins or something, did the trick for me at least! (be careful, rm -rf is pretty gnarly if you use it on the wrong directory, if you don't know already.)
http://www.nabble.com/MonoDevelop-doesn't-run---%22MonoDevelop-Deployment%22-exception-td16353720.html