Home > Archives > 2005年07月

2005年07月

デュエル地獄難ひ

パッドのボタンがへこみっぱなしになってるし…

本屋で見つけて思わず買ってしまった: Hacking:美しき策謀―脆弱性攻撃の理論と実際.printf のフォーマット文字列でいろいろできるとか書かれているけど今までまったく気にしたこと無かったなぁ.ちゃんと勉強しておかなければ.

論文あがってこないなぁ

締め切り一週間前だけど論文が… 今回もやっぱり lazy evaluation か.

パインぱんを見て

とりあえず面白いので買って食べることにした.そして包装をあける際に考えたこと: 一字抜いたらやばいよなぁ.食べた感想としては,まあふつうのぱんだなぁと.

研究室での一言

「ゲームをやる人間はゲーマー.そんじゃモナドをやる人間は… モナー」 「d はどこへ行ったんだ」とか以外に反応が大きかった一言であった.

結局台風は…

東にそれたおかげでたいした雨にもならずに過ぎ去っていった.騒いだ割には被害が無くてよかったような残念なような.

そろそろ台風が

この前地震が来たと思ったら今度は台風とのことで.やはり気象の新刊が出たせいなのかなぁと考えてみたり.とりあえず,外は暴風雨だし貫徹したのでそろそろ寝ようかなぁ.

いい加減に頭にきたかなぁ

数々のエラーを回避してようやくシンタックスの正しいコードを作れたと思ったらコンパイラが最終フェーズで segment violation とか言って落ちる始末… 無理でしょ,このコンパイラでプログラム書くの.おとなしく金を払ったほうがいい気がしてきた今日この頃.

STL の一部を自作せよ

コンパイラが SGI の STL を満足にコンパイルできないのでしょうがなく string, pair, vector を自分で実装することに.vector は面倒なので arraylist にして実装,サイズは倍々にしか大きくなりません.string は char* のラッパクラスで pair はただのペアと.はじめからこうしておいたほうが速かったと本気で思う今日この頃.とはいえ,まだまだテンプレート周りでエラーでまくりだなぁ.

STL のコンパイルを目指して

あほなコンパイラで SGI の STL をコンパイルしようと奮闘中.static_cast が無いから手前で用意してみたり,関数ポインタを返す関数がうまく解釈されないのでいろいろ書き方を変えてみたり.しまいにゃ「この関数使ってないから消してしまえ」で消しまくってみたり.いろいろやってみたけど何となくコンパイルは無理な気がしてきた…

地震キター

ついに関東地方に震度5弱の地震が… そろそろやばいのかなぁ?

とりあえず,ゆれた直後に取った行動:震度確認のために日本気象協会の地震情報ページを見る -> 震度5弱を確認.2ch ラノベ板の気象精霊スレを見る -> 災害のあとはよく伸びるw というか,今回の地震はぷらくてぃか4が出たからか?

今年もルパンスペシャル

何となくストーリーが微妙かなぁと.前のケネディ暗殺みたいに昔の事件ネタを使うのは良いけど今回のUFOネタはまったく機能してないような…

スパコンのC++コンパイラ

実験でプログラムを動かすのにスパコンを使おうとしているのだが,用意されているC++コンパイラが使えない.関数TemplateでTemplate変数に値を使えない.static_cast がない.iostream.h だし.namespace なんて知りません.

...

おとなしくFORTRAN使えってことですか?

扇風機

エアコンつけっぱなしもなんなので,扇風機を引っ張り出して組み立ててみた.おかげで部屋の気温が30度を超えても結構涼しい.扇風機も捨てたもんじゃないなと思う今日この頃.

輪講発表の資料作り

輪講発表の24時間前くらいには作り始めましょう…

論文が…

Parallel Dynamic Programming の論文を読んでいるのだが… ローカル計算後の縮約作業が複雑すぎ.他への応用というか一般化はほとんどできなさそう.

円を描くってむずい

何となく円を描く.いろんな高さから見た図を.出来上がるとどこかいびつ.円を描くって難しいなぁ…

そろそろ輪講の準備をば

しようと思っていたのに… 自転車で遠出して疲れやる気が無いため寝てすごす.やばいかもねぇ.

免許更新

視力の心配をしつつ今日しか行くタイミングが無いので更新に行って来た.予想通り右目が危険な感じだったが,上下左右の穴判定だったので無事通過.めでたく5年後までメガネを新調しなくてよさげ.

願書提出

大学の目の前の郵便局にて大学宛に書留で願書を郵送,830円なり.あほなことしてるなぁ…

続Template

友人曰く,gcc はテンプレート展開が遅いとのことで,VC++のコンパイラにて挑戦.しかし,なにやら何かがオーバーフローしたとかでコンパイルに失敗.しょうがないからインスタンス化されるTemplateのかずを減らすように全体を書き直し.

とりあえずジェネレータできたやつ.これでも5時間1.3Gメモリで終わらない… やっぱTemplateでやるのは無謀だったのだろうか? 問題解決のひとつの方法は,最下位桁で分けて分割コンパイルすればいいのだけど… 何かそれも負けだよなぁと考える今日この頃.

そろそろ免許の更新をば

更新しなければならないが視力がやばそう.ためしに Web 上で見つけた Flashの視力測定できるやつで試してしると… 光度を落としているとはいえ,右目で0.3がはっきりしない.めがねを作るのもったいないしなぁ,どうにか一時的にでも視力回復しないもんだろうか? とりあえずブルーベリーでも食べとくか.

Minix本

輪読で読む<http://www.amazon.co.jp/exec/obidos/ASIN/4894710471/>Minix本がやっとこさ届いた.明日発表担当なのでさっさと読まねば.それにしても後ろほぼ半分がソースコードって… すげぇなぁ.

Template で覆面算

覆面算のすべての条件分岐を Template で処理してしまうプログラムを考えた.ソースを書くのが面倒なのでソースジェネレータを書いて生成することに.とりあえず,ジェネレータできたソースをおいておくとして… Pen4 2.6C で8時間たってもコンパイルが終わらない… メモリもすでに 1G 食ってるし.このソースをコンパイルできる環境ってどこかにあるのだろうか? ちなみに,X*Y = ZZ という 4 進数での覆面算のプログラムは以下のとおり(答えなし)

#include <iostream>
using namespace std;
template <bool judge, typename T, typename F>
struct Selector{ typedef T val; };
 
template <typename T, typename F>
struct Selector<false, T, F>{   typedef F val; };
 
struct Nothing{ inline static void calc(){}};
 
template<unsigned int x, unsigned int y>
struct Printer{
  inline static void calc(){
    cout << x << " * " << y << " = " << x * y << endl;
    cout << y << " * " << x << " = " << x * y << endl;
  }
};
 
template<int x0, int y0>
struct Judge{
  const static bool val = ((x0==y0))&&((x0==y0))&& (x0!=0);};
 
template<int n, unsigned int x, unsigned int y, int x0, int x1, int x2, int x3>
struct Perms{   inline static void calc(){}};
 
template<unsigned int x, unsigned int y, int x0, int x1, int x2, int x3>
struct Perms<0, x, y, x0, x1, x2, x3>{
  inline static void calc(){
    Selector<true, Perms<1, x | (x0<< 0), y, x0, x1, x2, x3>, Nothing >::val::calc();
    Selector<true, Perms<1, x | (x1<< 0), y, x1, x0, x2, x3>, Nothing >::val::calc();
    Selector<true, Perms<1, x | (x2<< 0), y, x2, x1, x0, x3>, Nothing >::val::calc();
    Selector<true, Perms<1, x | (x3<< 0), y, x3, x1, x2, x0>, Nothing >::val::calc();
  }
};
template<unsigned int x, unsigned int y, int x0, int x1, int x2, int x3>
struct Perms<1, x, y, x0, x1, x2, x3>{
  inline static void calc(){
    Selector<(x0 > x1), Perms<2, x, y | (x1 << 0), x0, x1, x2, x3>, Nothing >::val::calc();
    Selector<(x0 > x2), Perms<2, x, y | (x2 << 0), x0, x2, x1, x3>, Nothing >::val::calc();
    Selector<(x0 > x3), Perms<2, x, y | (x3 << 0), x0, x3, x2, x1>, Nothing >::val::calc();
  }
};
template<unsigned int x, unsigned int y, int x0, int x1, int x2, int x3>
struct Perms<2, x, y, x0, x1, x2, x3>{
  inline static void calc(){
    Selector<(((x*y) >> 0)& 0x3) == x2, Perms<3, x, y, x0, x1, x2, x3>, Nothing >::val::calc();
    Selector<(((x*y) >> 0)& 0x3) == x3, Perms<3, x, y, x0, x1, x3, x2>, Nothing >::val::calc();
  }
};
template<unsigned int x, unsigned int y, int x0, int x1, int x2, int x3>
struct Perms<3, x, y, x0, x1, x2, x3>{
  inline static void calc(){
    Selector<Judge<(((x*y)>>2)&0x3), x3>::val, Printer<x,y>,Nothing>::val::calc();
  }
};
int main(int argc, char *argv[])
{
  cout << hex;
  Perms< 0, 0, 0, 0, 1, 2, 3>::calc();
}

Template でPermutation前計算

順列を生成して出力するプログラムをかんがえる.んで,コンパイル時に順列を全生成して,その結果のみを出力するプログラムが最速である.なので,Template で順列を全生成して出力するプログラムを作ってみた.

とりあえず,ソースジェネレータ作られたソースをおいてみる… コンパイルが激遅い… ちなみに,生成された 3 の permutation のコードはこんなもん.

#include <iostream>
using namespace std;
template<int n, int x0, int x1, int x2>
struct Perms{   inline static void calc(){}
};
 
template<int x0, int x1, int x2>
struct Perms<0, x0, x1, x2>{
    inline static void calc(){
        Perms<1, x0, x1, x2>::calc();
        Perms<1, x1, x0, x2>::calc();
        Perms<1, x2, x1, x0>::calc();
    }
};
 
template<int x0, int x1, int x2>
struct Perms<1, x0, x1, x2>{
    inline static void calc(){
        Perms<2, x0, x1, x2>::calc();
        Perms<2, x0, x2, x1>::calc();
    }
};
 
template<int x0, int x1, int x2>
struct Perms<2, x0, x1, x2>{
    inline static void calc(){
        Perms<3, x0, x1, x2>::calc();
    }
};
 
template<int x0, int x1, int x2>
struct Perms<3, x0, x1, x2>{
    inline static void calc(){
        cout  << x0 << x1 << x2<<endl;
    }
};
 
int main(int argc, char *argv[])
{
    cout << hex;
    Perms< 0, 0, 1, 2>::calc();
}

Template で条件分岐

Template でプログラム中の条件分岐を全てやってしまうことはできないだろうか? 最近こんなことを考えていたのだが,if 文だけなら何とかなるなぁと思ってみた.各処理ブロックをTemplate にして,必要な変数を全て Template 引数にして,条件分岐に Selector を使って条件に応じて適した Template クラスの calc() メソッドを呼ばせると.このとき,else 節がいらない場合には, Nothing という何もしない Template を使うと.たとえば,x が y より小さいときだけ出力する場合には,こんなかたちでできるはず.

template <bool judge, typename T, typename F>
struct Selector{ typedef T val; };
 
template <typename T, typename F>
struct Selector<false, T, F>{   typedef F val; };
 
struct Nothing{ inline static void calc(){}};
 
template<unsigned int x, unsigned int y>
struct Printer{
  inline static void calc(){
    cout << x << " < " << y << endl;
  }
};
 
template<unsigned int x, unsigned int y>
struct MinThenPrint<x, y >{
  inline static void calc(){
    Selector<(x < y), Printer<x,y>,Nothing>::val::calc();
  }
};

XHTML のContentType を正す

XHTML の拡張子を .html にしておいたら,サーバが text/html の type を返していた.これだと Another HTML-lint gateway で点が悪くなってしまうので .htaccess でローカルに指定を追加.これで 100点になった.めでたし.ついでに Content Negotiation で英語と日本語のページを自動で切り替えるように指定追加.でも httpd.conf で Options の上書きが禁止されてるので意味が無い…

AddType "application/xhtml+xml; charset=UTF-8" .html
 
AddLanguage jp .jp
AddLanguage en .en
LanguagePriority jp en
 
Options +MultiViews

TeX で書いた式を画像に落とす

TexPoint でやっていることをスクリプトにまとめてみた.tex2img.tex で画像に落としたい式とかを書いて下のスクリプトを実行するれば,tex -> dvi -> ps -> bmp(png) と画像が出来上がるという仕組み.pLaTeX, Ghostscript が必要になる.

#!/bin/bash
 
BASE="tex2img"
TEXFILE="$BASE.tex"
DVIFILE="$BASE.dvi"
PSFILE="$BASE.ps"
BBFILE="$BASE.bb"
RES="1200"
 
#DEVICE="pngmono"
#OUTFILE="$BASE.png"
 
DEVICE="bmpmono"
OUTFILE="$BASE.bmp"
 
TEXCOM="platex $TEXFILE"
PSCOM="dvipsk -D $RES -E -o $PSFILE $DVIFILE"
BBCOM="gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=bbox $PSFILE"
 
echo "Running $TEXCOM"
$TEXCOM
 
echo "Running $PSCOM"
$PSCOM
 
echo "Running $BBCOM"
$BBCOM > $BBFILE 2>&1
BB=`cat $BBFILE | grep '%%BoundingBox:'`
echo "Found bounding box $BB"
 
BX=`echo $BB | awk '//{print $2}'`
BY=`echo $BB | awk '//{print $3}'`
BX2=`echo $BB | awk '//{print $4}'`
BY2=`echo $BB | awk '//{print $5}'`
 
X=`expr $BX2 '-' $BX`
X=`expr $X '*' 300`
X=`expr $X '/' 18`
Y=`expr $BY2 '-' $BY`
Y=`expr $Y '*' 300`
Y=`expr $Y '/' 18`
 
IMGCOM="gswin32c  -q -dNOPAUSE -dBATCH -sDEVICE=$DEVICE -r$RES -sOutputFile=$OUTFILE -g${X}x${Y} -c -$BX -$BY translate  -q $PSFILE"
 
echo "Running $IMGCOM"
$IMGCOM

ファイルにして置いておこう.

screen をもう一度

すぐ忘れるので screen の使いそうなコマンドまとめ.コマンドは ^A のあとに

?         ヘルプ表示
 
^C or c   新しいスクリーン作成
^N or n   次のスクリーンへ移動
^P or p   前のスクリーンへ移動
^A or sp  前回作業したスクリーンへ移動
0 ~ 9    スクリーン番号 0 ~ 9 へ移動
"         スクリーンを選択して移動
^W or w   スクリーン一覧
 
S         フレーム分割
^I or tab 次のフレームへ移動
X         今のフレーム削除
Q         今のフレーム以外を削除
 
[         コピー
]         ペースト
 
d         デタッチ(screen -r で復帰)

いいかげん覚えたいなぁ.

発表時間考えろよな

講義が輪講形式で一回に複数人が担当して論文を読む.今日の担当者は私を含めて5人で,私は最後を担当する予定だった.しかし,担当の論文は少々数学的にとっつきにくい内容だったため,前半の人間の発表が持ち時間の倍以上(30分超え)になったり.んで,一人前がもう時間が無いにもかかわらずたらたらたらたら...... 時間がねーんだからさっさとしゃべれ! 本質的でない部分は飛ばして説明しろ! だいたいにしてPCがプロジェクタに正常につながるかどうかを先にチェックしとけ! (ここで正常につながっていたらその5分間に私の発表を終えられた) 結局時間切れとなり,彼らのおかげで私の発表は来週に持ち越されることに.来週の頭に私が発表しても誰も先週のことは覚えているわけが無い.最後の結論部分だけを来週に回してもまったく持って無意味な発表にしかならない.

これまでの他人の発表を見ていれば時間が厳しくなることは分かっていたのだから,発表時間を考えてスライド作って発表時間もある程度フレキシブルにするべきだ.もうちょっと頭使おうよ.まったく.

Webカメラ

なんとなく Web カメラを購入してパソコンにつけてみた.MSN Messenger とか文字で説明できないことが説明できるのはありがたい.とりあえず,これに玄箱とかくっつけて監視カメラにして遊んでみようかなぁ.

テンプレート版の if

テンプレートでプログラムするための部品として if に相当する Select なるものがある.これを使うと then 節と else 節の一方のみの評価ができるので安全.ためしに Collatz 予想のやつで遊んでみた.

template<bool, typename T, typename F>
struct Select{
    typedef T val;
};
template<typename T, typename F>
struct Select<false, T, F>{
    typedef F val;
};
template <int n>
struct Collatz {
    const static int val = Select<(n&1)==0, Collatz<n/2>, Collatz<3*n+1> >::val::val + 1;
};
template <>
struct Collatz<1> {
    const static int val = 0;
};
int main(int argc, char *argv[])
{
    cout << Collatz<3>::val << endl;
    return 0;
}

ICPC本番

本日は ICPC 国内予選本番だった.今年は6問全てが解くことのできる問題だったので,6問解けば確実の5問を早く解いたものの勝ちと予想された.結果としてはほぼ予想通りで,6問解いたのが1位で5問を解いたのが残りの二枠を埋めた.うちらのチームは最大で4問しかといてなかったので,打ち上げは残念会に.しかし,B3チームがかなり優秀だと分かったので来年こそは通過してもらいたいなぁ.

Home > Archives > 2005年07月

Search
Feeds

Page Top