日記
今までWindowsキー+Rで「ファイル名を指定して実行」を出して、そこから補完を使いつつC:\Home\Projectsと打ってProjectsフォルダを開いていたのですが、パスを通したフォルダにProjectsフォルダへのショートカットをProjectsという名前で置いておけば、projectsって打つだけでいいことに気づきました。さらに一度打てば補完候補に入るので次からは「[Win]+R p↓[Enter]」でよくなります。便利。
新しい方のプロフィールがGoogleで上の方に上がってこないので、ちょっとMTをいじることにします。いじりました。個別エントリーのタイトルコールの直後にリンクを入れました。
きっかけはFirefox上でブックマークレットを動かしたことだと思うのだけど、Windowsが謎の挙動をしたので電源ボタンで終了するハメになりました。なんだかタスクマネージャで見るとハングアップしているアプリケーションが(元は1つだったはずなのに)2つずつ表示される…という謎の状況。画像を保存しようとPrintScreenを押してもペイントに貼り付けられないし…。謎。同じことをしても再現しない。Firefoxやブックマークレットは悪くなさそう。
__ ネットワークプログラミングのお勉強、二日目。 recvはデータが全くないときに呼んでしまうとデータがくるまで待機してしまうらしい。 それが原因でサーバ側でタイムアウトされていたのが昨日うまく行かなかった原因。 Manpage of RECV。 MSG_DONTWAITを指定してやればいいのかな。
むむ、socketモジュールにあるはずのMSG_DONTWAITがない。値(64)を直接指定してrecvするとerror: (10045, 'Operation not supported')と言われる。もしかしてWindowsのソケットでは非ブロッキングモードでのrecvが出来ないとか?
__ 7.3.1 ポーリングオブジェクト。これを使うのかな。
pollもWindowsにはないのかな。
select.select([self.socket], [], [], 0)かな。
おー、初めてテストケースで緑色のバーが出た。
__ Dancing Sudoku by Daniel SeilerにDancing LinksでSudokuを解くJavaのコードがあるじゃまいか。自分で実装する手間が省けた。これを使おうっと。
__ うーん。「ソケットが切れていたらつなぎに行く」っていうwhileループはどういうタイミングでbreakするべきなのだろう??
5つ同時接続しないといけないのでスレッドに入れてみたら、IDLEの表示するところでこけたような気配。 画像。 えーと。どうしよう。
状態遷移図をイテレータで実装したのだけど、イテレータを順繰りに実行するイテレータって用意されていたかなぁ。
うーむ。せっかく状態遷移図stmを作成して
for x in stm:
sleep(0.1)
で状態遷移図に従ってぐるぐる動くようにしたのになぁ…。
あ、そうかスレッドでうまく動かないなら別プロセスで動かせばいいのか。
__ うまく動かない。
コマンドラインで動かしているときは、コマンドプロンプトからフォーカスを外した方が実行速度が速い。キー入力をチェックしなくてよくなるからかな?
__ 疲れた…。 Dancing Links アルゴリズムは動かせるコードを見つけたので後は1500行程度を読解するだけ。明日やろう。ネットワークプログラミングの方は終了したり再起動したりしているとテストケースを全部通れるようになったのでVERBOSEモードでじっくり観察しながら何が原因で引っかかっているのかをチェックする必要があるだろう。
__ ラボの高いはずの椅子で腰が痛くなるのはなぜかと思ってたら、座面が低すぎるからじゃないかと指摘されました。なるほど。高くしたらちょっと楽になったかも。
__ 帰宅。暑い。暑い。暑い。
おびなたのはてな日記 - スケールが違うから YouTube - 500 kV Disconnect Switch。すごい。人と比べるとさらにすごい。上に上がるのは熱のせい?
__ 夜はカフェインを含んだお茶を飲みたくないけど、暑いので麦茶を沸かして冷めるまで待つのも嫌。かといって野菜ジュースばっかり飲んでるとカロリーが心配。そう思っていたらテレビで「水代わりに青汁を飲んでます」というフレーズが。これか!
__ Googleすごいなぁ。「○○駅周辺の賃貸」なんてGoogleマップ検索もできるのか。
末広町は赤坂見附に乗り換えなしでいけて、徒歩で秋葉原にも行けるということが判明。価格が適当ならここがいいかも。
__ 参考にしようと思ったDancingLinksのコードがrottenなので書き換えたくなったのだけど、せっかく書き換えるんなら何%早くなったという満足感に浸りたいのでプロファイラを導入。@IT:Java 連載 Eclipse徹底活用(6)のは3.1に入れても動かないかと思ったらProfilerプラグイン - EclipseWikiによればパッチがあるとのこと。
フィードバック
WinSockではWSAAsyncSelectを使う事で非同期の通信ができるようになりますよ。
by NishioPythonを使わないといけない理由があったので調べていたらselectというライブラリがありました。たぶんWindowsの場合はWSAAsyncSelectを呼び出しているのでしょう。