No Such Blog or Diary
朝っぱらから研究室へ
- 2005-09-29 (Thu)
- 一般
お昼を買って研究室に行くのが最近の行動なのだが今日は朝っぱらから行くことにした.案の定,誰もいやしない.昼まで作業してたけど誰もきやしない.きたのはルータの調子を見に来た方のみ(ハングアップしてたからリブートしただけ...).ま,作業はその分進んだからいいけどね.
- Comments: 0
- TrackBack (Close): -
LZSS
いろいろなところで使われている LZSS の実装は多種多様である.なので,ありそうなパターンに対応できるようにソースを書いてみた.速度は度外視.あとで最適化すればいいし.圧縮部分の検索ルーチンをもう少し大きなハッシュにしたほうが速いだろうか? ま,どうでもいいか.つーことで,そーすをおいておく.
- Comments: 0
- TrackBack (Close): -
Java の quine program
Java で自分自身を出力する quine program を書いてみた.
結果はこんなん:
class Self { static String s="class Self {%n%tstatic String s=%c%s%c;%n%tpublic static void main(String [] args) {%n%t%tString ss=s.replaceAll(new String(new byte []{37, 110}), new String(new byte []{10}));%n%t%tss=ss.replaceAll(new String(new byte []{37, 116}), new String(new byte []{9}));%n%t%tss=ss.replaceAll(new String(new byte []{37, 99}), new String(new byte []{34}));%n%t%tss=ss.replaceAll(new String(new byte []{37, 115}), s);%n%t%tSystem.out.print(ss);%n%t}%n}%n"; public static void main(String [] args) { String ss=s.replaceAll(new String(new byte []{37, 110}), new String(new byte []{10})); ss=ss.replaceAll(new String(new byte []{37, 116}), new String(new byte []{9})); ss=ss.replaceAll(new String(new byte []{37, 99}), new String(new byte []{34})); ss=ss.replaceAll(new String(new byte []{37, 115}), s); System.out.print(ss); } }
ほとんど printf をエミュレートするような形で... 美しくないなぁ.%n, %c, %t, %s を改行,ダブルクオート,タブ,自身の文字列で置換すると.ついでなので(ある程度)任意のプログラムを読み込んで quine program にしてしまうプログラムも作ったので置いておこう.
- Comments: 0
- TrackBack (Close): -
The Underhanded C Contest のコード
コンテストの規定は画像処理プログラムを書いて, fingerprint を実行するたびに異なるように入れろと.さたに,その fingerprint に意味はなくてもいいけどあるほうがよいと.んで,受賞した単に減色するだけのプログラムを見たけど... まったく普通のプログラムにしか見えん.種明かしとしてはスタックフレームにローカル変数の値が残ることを利用して連続しているらしい.うーん,こんな方法思いつかんなぁ.もっと柔軟にならねば.
- Comments: 0
- TrackBack (Close): -
停電にて
- 2005-09-25 (Sun)
- 一般
研究室の入っている建物が停電.当然ながら研究室のサーバ群はとめられている.ということで, cvs のコミットができないから今のうちに修正を入れようと思ったが... よく考えたら update すらできないんじゃん orz.他の人の修正を反映せず何かやるのは危険なので今日は作業がすすまない.だめだこりゃ.
- Comments: 0
- TrackBack (Close): -
Singletonパターンのあほなおち
Singleton パターンではインスタンスを一つ作ってそれを使いまわす.そのために,そのインスタンスを取得する関数でインスタンスを作ってあるかを調べ,あったらそれをかえす,なければ新しく作るという動作をさせるのが一番楽.で,コンストラクタはプライベートにしておくと.
しかしながらとあるプログラマは次のようなコードを書いて,うまく動かないと騒いでいた.
AClass* AClass::getInstance(){ static bool isFirst = false; if(!isFirst){ instance = new AClass(); } return instance; }
isFirst が false のままだし... あなたインスタンス取得するたびに新しいの作るんですか? Singleton とか言ってたのにインスタンスはひとつじゃないんですね.そもそも isFirst などというフラグを持たずに if(!instance) と書いていれば間違いがなかったものを.
とりあえず今後の参考のためにこの事実を記しておこう.ちなみに彼はコンストラクタすらもプライベートでなかったという... (まあ,このソース以外では正しいコードを書いていたそうだが.)
- Comments: 0
- TrackBack (Close): -