週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ICFPCのvisualiserをjavascript + canvasで再生産してみました。firefox 3.0.10とGoogle Chrome Linux 3.0.190.2で検証。IEは無理です。Safari 4 winとfirefox 3.0は遅くて、Chromeかfirefox 3.5ならまともに動きます。

  • 3003
  • データが大きいのでブラウザクラッシャ注意! 4001

手元に本番提出データがなかったので実験用のデータを適当に使っています。まだtargetが12個あると思っていたときのデータです。

正直重すぎます。軌跡を書くところだけが重いのでここを再利用できると良いのですが。

javascriptなんて殆どまともに書いてないのできっちりと罠にかかりました。

  • context.beginPath(), moveTo, lineTo, closePathまでやってfillを忘れる。
  • closePathの役目はglEndではない。終点と始点とを繋げる。
  • 関数を呼ぶ代わりに関数を渡してしまう。その逆も。
  • javascriptを編集してからリロードをかけると時々firebugが発狂。
  • functionのスコープ。これは知っていたので回避。
    • 別のタブであらためてロードすると大丈夫だったり。
  • 配列をfor in で回ろうとする。
  • onmousedownで渡されるイベントからクリックされた場所を探す方法。
  • onmousedown, onmousemove, onmouseupだけじゃなくてonmouseoutも使うとよい。
  • cssはコピペ。

ネット上にものすごい勢いで情報があるので、調べながらやってもそれほど難しくはありませんでした。スクロールバーなど一部は明らかにやっつけですが。

ICFP PC 2009にチームIntercamlで参加していました。フリーズ前に6位程度。

チームメンバー

言語はC++/C/Java。どこにIntercalcamlがあるのでしょうか。

「去年よりは」問題が楽な気がします。火星人いないし。ちゃんと楽しめたし差もある程度付いたのでよし。marathon matchなどもう少し期間の長いコンテストだともっと完璧に解かれたりするのでしょうか。

  • 基本Hohmann遷移。これが最も楽で燃料も使わないはずです。ChunがHohmann遷移を濫用したコードを書いて、それをベースに使っていました。
    • 他の遷移もいろいろ考えてみたものの楕円の交差とかちょっと理解できない。
  • 楕円運動が面倒。
    • 長径と遠点までの距離とを誤解。
    • それは初等関数では表わせない。
      • 今考えると二分探索とか手法はあったはず。
    • 「ランダウによるとwikipediaの式であってる。」

戦略としては、まず衛星の動きを円運動に制限して、その状態で相手を待ちます。300x系では、自分の動きを円運動に修正して、相手の近点に接する円に遷移して、それから相手と同じ楕円に遷移。400x系は相手と同じ楕円に入る必要がないのでもうすこしフリーダムにできます。

そのほか

  • visualizer超重要。
    • この技術身に付けるべきだな...
  • nyaさんのVMオブジェクトが非常に秀逸でした。
  • 最後のほうはちょっとoverfittingが心配です。これ本当にverificationで点数取れるのでしょうか。
  • 最後のパラメータプログラム内で自動調整してないのだけどこれじゃ駄目..?

configure the trackpoint @ thinkwikiに従います。次のファイルを作って再起動するだけ。

$ cat /etc/hal/fdi/policy/mouse-wheel.fdi
<match key="info.product" string="TPPS/2 IBM TrackPoint">
 <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
 <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
 <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
 <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
 <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
 <merge key="input.x11_options.EmulateWheelTimeout" type="string">200</merge>
</match>

XとYはなんとなく順序を変えてみました。

以下悪戦苦闘録。

Thinkpadのトラックポイントを使えるようにするより。xorg.confのInputDevice Sectionに書き足せばよいらしいです。しかし確認したところ、私のマシンのxorg.confにはそのSectionがありません。書きたせばよいのか?

とりあえずxorg.conf inputdevice trackpointとかで探しました。Thinkpad x200にdebianには違う方法が紹介されています。ただそれはxorg7.4以上じゃないとできないらしい。わたしのは?

$ dpkg --list | grep ' xorg '
ii  xorg                                       1:7.4~5ubuntu18                           X.Org X Window System

丁度7.4でした。なるほど。

ついでに別のubuntu機(8.04からupdateしてきたもの)のxorg.confを確認。InputDeviceの項目が次のようにコメントアウトされていました。

 # commented out by update-manager, HAL is now used
 #Section "InputDevice"

ここから冒頭の設定につながります。

設定次第ではfirefoxの横スクロールで前のページに移動してしまうらしい(例えばこの例)ですが、私の場合は普通に左にスクロールしてくれました。

Windows 7 RCにvmware server 2.0を導入してみました。とりあえず備忘録。

  • ダウンロード。ユーザ登録を要求されます。
    • 昔server 1.0で登録したアカウントは使えませんでした。よって新たに登録。面倒。
  • インストール。fqdnを要求されたのでてきとうに返答。
  • 管理コンソールにログイン。賛否両論のあるウェブベースのインターフェスです。
    • ショートカットが、上で答えたhttps://てきとうなfqdn:8333/ui/に接続しようとするので繋がりません。
    • 手動でlocalhostに変更して、さらに証明されてないhttpsを強行突破します。
  • username/passwordの要求が来ます。文脈がなく何のアカウントかわかりませんでした。調べるとホストのユーザアカウントだと分かり、入力。

ここまでで管理コンソールに来ます。ローカルなのに微妙にレスポンスが悪いです。とりあえずdebian lennyを載せたvmを作ってみました。以下はまりどころ。

  • CDとしてisoファイルが設定できません。
    • datastoreの中においてあるものしか認識しない様子。'virtual machines'の下に置くか、あるいはiso用のdatastoreを登録すればよい。私は後者を採用。
  • VMできた。power on. しかし何も起きない? コンソールはどこから出るのか。
    • 個々のvmのメニューからコンソールを開くとよい。するとvmware consoleと追加active X(firefoxだと違うかも)をインストールするよう指示が出る。
      • Chromeだと出ない。ハマリ。
  • コンソールが出たらおとなしくインストール。

インストール画面まで出て、その後ちゃんとネットワークが繋がれば一安心です。私はこのあと一度トラブってvmが起動しなくなりましたが。再度vmを作って回避しました。

今のところはちゃんと動いています。今はsshを設定してputtyから入り、手持ちのgit repository内のプログラムがちゃんと動くか確かめています。このくらいのことは余裕。グラフィックは全く調べていません。

ところで、vmのネットワークデバイスをbridge接続にしてしまったのでIPアドレスが固定にできません。あるいは、別のネットワークに繋ぐとアドレスを変える必要が出たりします。IPアドレスが不定だとsshがしにくくて厄介です。どうしたものか。必要な時以外はNATに変えたほうがよいかもしれません。

あとメモ.

  • vmware server2のvmコンソールを直接起動することができます。これがあればブラウザ経由でアクセスする必要がありません。
    • sshを走らせるので正直コンソールすら不要ですが。
  • vmware server 2のweb accessを停止しておくとtomcatが走らないのでだいぶ計算資源が節約できます。上の方法などでコンソールしか起動しない場合はこれでok.
    • vmware serverのサービス全体を手動起動にするというもっと積極的な選択肢もあります。これを殺すとvmに繋ぐ度にサービスを順に立ち上げないといけないので不便そうですが。一度バッチファイルにしてしまえば楽かな。

急に無線が繋らなくなり、しばらくしたら何となく直りました。

経緯

  • 昨日(木曜) aptitude updateおよび safe-upgradeをかけた。そのときにカーネルのバージョンが上がり、再起動を要求された。
  • 再起動したら無線が立ちあがらなくなった。
  • とりあえず放置するも、今朝も無線が起動せず。
    • 何回か再起動をしてもまったく回復しません。

症状はこんなところです。

# ifup wlan0
SIOCSIFFLAGS: Resource temporarily unavailable
Could not set interface 'wlan0' UP
SIOCSIFFLAGS: Resource temporarily unavailable
SIOCSIFFLAGS: Resource temporarily unavailable
Failed to bring up wlan0.

$ dmsg
(snip)
[   11.684379] ath5k_pci 0000:02:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[   11.684393] ath5k_pci 0000:02:00.0: setting latency timer to 64
[   11.684450] ath5k_pci 0000:02:00.0: registered as 'phy0'
[   11.759647] phy0: Selected rate control algorithm 'pid'
[   11.857792] iTCO_vendor_support: vendor-support=0
[   11.903647] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.05
[   11.903782] iTCO_wdt: Found a ICH7-M or ICH7-U TCO device (Version=2, TCOBASE
=0x0460)
[   11.903858] iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
[   11.947271] ath5k phy0: Atheros AR5414 chip found (MAC: 0xa3, PHY: 0x61)
[   12.107628] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22

(snip)

[   26.245198] ath5k phy0: noise floor calibration timeout (2412MHz)
[   26.245381] ath5k phy0: noise floor calibration timeout (2427MHz)
[   26.590719] ath5k phy0: gain calibration timeout (2427MHz)
[   26.590724] ath5k phy0: can't reset hardware (-11)
[   26.590728] wlan0: Failed to config new SSID to the low-level driver
[   26.935193] ath5k phy0: gain calibration timeout (2427MHz)
[   26.935199] ath5k phy0: can't reset hardware (-11)
[   26.935203] wlan0: Failed to config new BSSID to the low-level driver
[   32.312588] ath5k phy0: gain calibration timeout (2412MHz)
[   32.312595] ath5k phy0: can't reset hardware (-11)
[   32.312599] phy0: failed to set freq to 2412 MHz for scan
[   32.657112] ath5k phy0: gain calibration timeout (2417MHz)
[   32.657116] ath5k phy0: can't reset hardware (-11)

(snip)

どうも起動時に何か障害が起きているようです。ついでに、ath5k_pciというジョブがずっとCPUを100 %食っています。どうみてもおかしいです。

きっかけがアップデートなので、とりあえずカーネルのバージョンを下げてみます。バージョンは2.6.28-11から2.6.28-13に上がっていたので、とりあえず11に戻してみました。

直りました。

dmsgにあったエラーも無くなっています。それ以外は一致。これはレポートをしないといけない予感です。どこに投げればよいのか。

とりあえず最新カーネルで再度立ちあげて、不具合を確認してみます。

最新カーネルでも直りました。何故直ったし。上の通りエラーメッセージの他に変化が無いので何が悪かったのかわかりません。

とりあえずネットワークは使えるので、こうして記事を投稿しています。