2004-12-29

Single Round Match 255 at TopCoder



Single Round Match (SRM) Schedule at TopCoder


TopCoderのSingle Round Match 225(SRM)に初参戦。
問題はスコア別に,250点,500点,1000点と3個ある。制限時間は75分かな? で,実際に出た問題は次のようなもの。


250点
電子メールに付ける署名を生成するメソッドを作れというもの。名前と装飾文字と,どのように装飾文字を配置するかというコマンドを指定されて,そのとおりの署名文字列を返す。

500点
与えられた文字列の1部を別の与えられた文字列に置き換えるというもの。これが意外にはまった。

1000点
文字列のメッセージを画像データに見立てた数字の配列に埋め込むというもの。初歩的なステガノグラフィですね。


一応,コーディングが終わってサブミットしたのは250と500だけ。1000の問題は問題文を読んでる間に時間切れになってしまった。

SRMの進行は四つのフェーズに分かれている。


  • 1.Coding Phase
      問題が出されて,そのプログラムをコーディングする。このフェーズが終わったらプログラムは投稿できない。

  • 2.Intermission
      システム側の準備時間。ちょっと休憩といったとこかな。

  • 3.Challenge Phase
      ここが一番きびしいところ。別の参加者のコードを読んでバグがありそうなものを見つける。人のコードをテストして,実際にエラーが発生したらその問題のスコアを0にされちゃう。ただしエラーが発生しなかったらテストをした人のほうが減点されるという諸刃の刃。

  • 4.System Test Phase
      システム側が参加者のプログラムをテストするフェーズ。ここで間違いが判明したら,その問題のスコアは0になる。

チャレンジフェーズで500点の問題を落とされました(泣。

今回のSRMでRatingが997になりました。Ratingは大きいほど良いみたいだけど,どうやって決まるのか不明。

次のSRMは1月5日6:00AM(日本時間で1月5日23:00)。さて次はチャレンジで落とされないようにがんばるぞ!



2004-12-27

TopCoder

TopCoder

最近,TopCoderというサイトで遊んでます。TopCoderはオンラインでプログラミングコンテストを開催するサービスを提供しているサイト。Googleが開催したプログラミングコンテストの"Google Code Jam"もここでやってた。

TopCoder で使用できる言語は,Java,C++,C#,VB.NETの4言語。コンテスト参加者は専用のJavaアプリ "CompetitionArena"を使ってコードを投稿する。このソフトが良く出来ていて,ちょっとしたテストファースト開発環境になっている。

プログラムの問題は,パズル的なものが多い。C MAGAZINEの巻末にあるみたいなの。問題文が英語なのがつらいよー。

ここの記事によると,近いうちにPerlも使用言語に追加されるかもしれないとのこと。これが本当になったら,そのうち同じスクリプト言語としてGroovyも追加されないかな。

ここでは定期的に競技会が開かれてる。次回は日本時間で12月29日AM10:00から。参加登録はその前に済ます必要あり。久しぶりに参加しようっと。



ここの練習問題をやってたら,いつの間にかクリスマスが終わってました(泣

2004-12-23

Groovy Beta 8 is released - Confluence

Groovy Beta 8 is released - Confluence

いつのまにやらBeta8がリリース。
主な改良点としては

・エラーメッセージが明瞭に(重要)
・JDK5.0に対応

ってとこですか。


まだ試してないけど,エラーメッセージが分かりやすくなるってのは重要。
Groovyに慣れないうちにスタックトレースなんか長々と出されても分かんないもんね。

2004-12-02

Groovy



Javaをベースにした新しいスクリプト言語Groovyが発表された。
ちょっと触ってみたところ,GroovyはPerl+Javaって感じな面白い言語。
これから遊ぼうっと。

関連リンク
Groovy - Home
Groovy公式サイト
Groovyのダウンロードページ
現在の最新版はVer1.0 beta 7
Groovyに触ってみよう
@ITの解説記事
Groovy - Java用スクリプト言語
海外雑誌のGroovy解説記事の翻訳

サーバサイドJava

Java言語をやり始めてから4年になる。
当時発表されたばかりのNTT Docomo携帯で動くiアプリを作りたかったからだ。
iアプリのほかにAI型のオセロゲームなんかも作っていた。
なのでクライアントサイドで動くJavaについてはまぁまぁ知っている。

しかしサーバサイドで動くJava(JSP,サーブレット,EJB)などについてはほとんど知らない。
エンタープライズ向けのシステムでは,サーバサイドJavaが主役だ。
Webアプリなんかも作ってみたい。
ということでサーバサイドJavaについて勉強することにした。


基礎からわかるサーバー・サイドJava―Javaサーブレット、JSP、JavaBeans、EJBによるWebアプリケーション開発

上記の本はいろいろ調べてみた中で一番バランスが良いかなーと思う。
専門的になりすぎず,実践的でサーバサイドJavaのメカニズムも分かる。
普通のJavaプログラムから出発して,JSP,サーブレット,EJBと段階的にプログラムを発展させていくので分かりやすい。

これから上記の本(略して"基礎サジャ")で学んだ内容をまとめていく予定。


2004-11-20

ベイジアンネット

Javaでベイジアンネットワークを扱うライブラリを探している。
自分のソフトにベイズ統計の処理を組み込む必要があるので。

ベイジアンネット(Bayesian Network)っていうのは,条件付確率の因果関係をグラフィカルな有向非循環グラフ構造で表したもの。有向ってのはリンクが矢印で向きがついてるという意味で,非循環とはグラフ構造にループがないってこと。

ベイジアンネットは,トマス・ベイズさんが発案したベイズ理論をもとにしている。詳しくは以下を参照。

グーグル、インテル、MSが注目するベイズ理論 - CNET
 一般向け解説。ベイズさんの顔が拝める。

君はベイジアン・ネットワークを知っているか? - @IT
 
研究の最前線についての解説アリ。MS Officeのイルカ君の悲劇も紹介。


ベイジアンネットのライブラリだけど,自分は今までMSBNを使ってました。

Microsoft Bayesian Network Editor
 マイクロソフトリサーチのAdaptive Systems and Interaction Groupが作ったもの

こ れはWindowsのCOMを使ってます。Windows + Visual Studioなら,わりと使いやすい。ベイジアンネットのデータをXMLで出力してくれる。ライブラリだけじゃなくてベイジアンネットの編集アプリもつい てるので(っていうかそっちがメイン),デバッグもやりやすい。関係ないけど研究のときにこれのおかげですごい助かった。Microsoftありがとう!


しかしJavaでやるならJava純正が良いだろうってことで次のようなのを見つけました。

Bayesian Network tools in Java (BNJ)
 オープンソースプロジェクト。sourceforgeで開発中。これが一番有望かな。

Classifier4J
 こちらもオープンソース。テキスト分類のソフトウェアで,Javaによるベイジアンネットライブラリを使っている。

JavaBayes, Bayesian Networks in Java
カーネギーメロン大学の人が作ってるライブラリ。ロゴが面白いな。

Netica-J, for Programming Bayesian Networks in JAVA
 こっちはJava純正じゃないけど,JavaでベイジアンネットエンジンにアクセスできるAPI。
 フリーバージョンはモデルサイズの制限がつく。


他のライブラリはまた今度。っていうか探してたらこんなリストを見つけたよ! 俺探す必要ないじゃん。

Manageability - Open Source Probabilistic Networks Written In Java
 Javaによるオープンソースの確率ネットワークソフトのリスト。充実してるし解説もしっかり書いてある。

Software Packages for Graphical Models / Bayesian Networks
 ベイジアンネットの各種パッケージの比較。比較項目が専門的で役に立ちそう。

Google Directory
 グーグルディレクトリのマシンラーニングソフトウェアのページ。


これから少しずつ試していきます。

Google Deskbar Help

Google Deskbar Help

Google DeskbarのAPIが公開された模様。

上のページではこれを使ったPlug-inの例として,
  • ハードディスクのプレイリストを検索・演奏
  • テキストボックスで数式計算
  • デスクバーからインスタントメッセージを送信
なんてのを挙げてます。

3番目の「インスタントメッセージ送信」ってのが怪しい。
Googleがインスタントメッセンジャを作ってるって噂があったけど,それを意識してんのかな。1番目の「ハードディスクのプレイリスト」を検索ってのもGoogle Desktop Searchとの連携を考えてるんでしょう。
なんか知らぬ間にGoogleに囲い込まれてる感じ。

自分はDeskbarは結構気に入っているので,こういう遊べるSDKがリリースされるのはうれしい。だけど.NET Framework使わなきゃならないんだよね。.NETは良く知らないけど,これを期に勉強しなきゃだな。

関連リンク
Google Takes Another Step Toward Becoming Development Environment



Blogはじめました

Blogってのをはじめてみました。
基本的に自分用のメモしか置かないんで,他の人にはつまらないかも。