Home > Archives > 2006年03月

2006年03月

ぐりちゃれ決勝

とりあえず自分のスロットを消費完了.決勝問題のサイズが大きく read 関数で一度に読みきれなかったため転送ミスで間違った答え連発… これに気づいて修正するのに30分を無駄にしてしまった.けどまあ,そのあとは順調に答えが出たので今回のプログラムはそれなりにうまく出来ていたらしい.結局全部で500台1000CPUぐらいは占有して計算できたので去年に比べればだいぶ進歩したかなと.戦略を間違えたのでいい答えが出たかはよくわからんが,とにかくあとは結果まち.

pthread のキャンセルポイント

usleep がキャンセルポイントになっているであろうと思い込んでいたら実はキャンセルポイントになっていない環境があることに気づいた.ということで,pthread_testcancel() をループ中に叩き込みまくる羽目に.美しくないプログラムだなぁ.

GridChallenge 間に合うか?

とりあえず,プログラムの連続稼動はあきらめて各問題で再起動させることにして… あとはファイルサイズがどの程度か気になるけど全員に読ませることにして… 仕掛けは出来上がったので後はグリッド上でテストしよう.どうでもいいけど障害多すぎて練習時間削られてるのは非常に痛い.

引越しの邪魔をせんように

とりあえず昼に行ったら業者が作業中だったので買い物に行くことにした.カルーアを求めて上野の吉池へ行って 700ml 1200円で購入し,ついでにプレゼントとして岡山櫻室町の日本酒で漬けたうめ酒を新宿タカシマヤで1000円で購入.酒を買うだけにおもいっきり山手線を横断してるような…

今日も引越し作業

全然手伝わない人って何考えてるんだろうと疑問に思う.思考形態がよくわからない.とりあえずどのような思考をして手伝わないという結果に至ったのかを問うてみたい.どうでもいいけど廃棄物の仕分けが必要なら面倒そうだなぁ…

ケーブルは

綺麗に引き回しましょう.移設が大変なので.昔の人に送る言葉.

HHK Professional 2

新しいのが出たので無刻印墨を買ってみた.余計な印字が無くてよい感じ.でも Windows の操作には向かないのでキーバインドを変更するソフトがほしいかも…

genericタイプの配列 in Java

知らずに引っかかってしまったが,ここらへんの記述によると generic の配列は作れないそうな.代わりに Vector を使えばいいのだけど Java の Vector はアクセスが面倒…

学位記

無事に修士がもらえたのでめでたしめでたし.学位記の入れ物(?)が学士のときと比べてグレードダウンしてたのが少々気になるが…

スピンジャンプオンリーで

迷いの森手前の城をクリア可能なことが実機で確認できた.とはいえ,最後の3回連続ジャンプはマリオ20人あたり1回しか成功しなかったけど…

変なコード?

g++ (GCC) 3.3.5-20050130 (Gentoo 3.3.5.20050130-r1, ssp-3.3.5.20050130-1, pie-8.7.7.1) で以下のコードがエラー無くコンパイルされた.3.4.4 とか VC++ (VS.NET 2005) ではコンパイルできなかったのに…

#include <iostream>
#include <string>
 int main(int argc, char *argv[])
{
    for({std::cout << "Hello?" << std::endl; std::cout << "world?" << std::endl; } 0 ; 0) { std::cout << "loop?" << std::endl; }
    return 0;
}

誤字など

「ユビキタス」を「ユキビタス」と言う人間がどの程度いるのだろうかと google で検索したら 誤字等の館 というものが引っかかった.結構面白いかも.

Haskell の導出インスタンス

data と newtype の宣言で deriving つけたらインスタンスが自動生成されることを始めて知った… Eq、Ord、Enum、 Bounded、Show、 Read に対して使えるようでかなり手間が省ける.

あまり見ない C++ コード

ひとつ目.switch の後に { } がない(switch の意味が無いが…).return でカンマ区切りの式.throw がカンマ区切りをともなってネスト.

#include <iostream>
int main(int argc, char *argv[])
{
    try {
        switch(argc) case 1 : return std::cout << "no argument!" << std::endl, 0, throw (1,throw 9,2), 1;
    } catch (int k) {
        std::cout << "cought exception: " << k << std::endl;
    }
    return 0;
}

どうやらこのコードでは 9 が投げられるらしい.

二つ目.Pointer to Member Function: .* and ->*

#include <iostream>
struct Base {
    virtual void f() {
        std::cout << "Base! " << std::endl;
    }
};
struct DerivedA : public Base {
    int k;
    DerivedA(int kk) : k(kk) {};
    void f() {  // オーバーライド
        std::cout << "DerivedA with k = " << k << std::endl;
    }
};
struct DerivedB : public Base {
};
int main(int argc, char *argv[])
{
    DerivedA *pobjA, objA(5);
    DerivedA objA2(3);
    DerivedB objB;
  
    typedef void (Base::*f_type)();
    f_type f_base = &Base::f;
   
    pobjA = &objA;
    (objA2.*f_base)();
    (pobjA->*f_base)();
    (objB.*f_base)();
}

なんに使えるのかよくわからないが,とりあえずちゃんとオーバライドした関数も呼ばれる.

C++のコメントを抜き出す by Haskell

C++ のソースからコメントだけを抜き出したい衝動に駆られたのでおもむろに Haskell で実装.やはり簡単なプログラムの実装は Haskell のほうが簡単だ…

 -- Extract C++ comments from stdin
import List
import System
 
 -- for C-style comments, i.e. /* comments... */
judgeC (t,c) (c1,c2,c3) 
    = if t==0 && c2=='/' && c3=='*' then (1,0) 
      else if t==1 && c1=='*' && c2=='/' && c > 2 then (0,0) 
           else (t,c+1)
 
 -- for C++-style comments, i.e. /* comments... */ or // comment... \n
judgeCXX (t,c) (c1,c2,c3) 
    = if t==0 && c2=='/' && c3=='/' then (2,0) 
      else if t==2 && c2=='\n' then (0,0) 
           else judgeC (t,c) (c1,c2,c3) 
 
unfilterComments x judge =
    let dx = (zip3 (" "++init x) x (tail x++" ")) 
        cms = scanl judge (0,0) dx
        cms' = zipWith (\(c1,_) (c2,_) -> c1 > 0 || c2 > 0) cms (tail cms)
    in map (\(x,c) -> x) (filter (\(_,c) -> c) (zip x cms'))
 
main = getArgs >>= 
       (\args -> getContents >>=
        (\x -> putStr (unfilterComments x
                       (if not (args ==[]) && head args == "-c" 
                        then judgeC else judgeCXX))))

どうでもよいけど微妙な驚き

Haskell の多倍長演算の中身は GMP だったのねと.GHC をコンパイルして初めて気づいた.ほんと,どうでもいいことだ…

とりあえず autoreconf -vfi で

結論として何も考えずに autoreconf -vfi しておけばよいと.新しいファイルに置き換えられてありがたい.あとは改行コードの一括変換とか無いかなぁと,--foreign をオプションに渡すにはどうしたらよいのだろうかと.ま,ここら辺は気が向いたらまた考えるとしよう.

まぬある: Automake Autoconf

OpenC++ のコンパイル

OpenC++Core だと Metaclass のロード部分が省略されてしまっているのでバッククォートを使った PTree の簡単な生成が出来ない.Metaclassをスタティックにリンクしてロード部分を自前で書いたうえで ClassWalker を変更すればどうにかできそうだがそれも面倒なので OpenC++ のコンパイルに再びチャレンジ.とりあえず CVS からとってこれなかったので snapshot で我慢するとして,試行錯誤の末にようやくコンパイルできた.

opencxx-20050912.tar.gz を展開後,configure スクリプトを作ってコンパイルするまでの流れ:改行コードを直して, AM_INIT_AUTOMAKE の引数を直してNEWS ファイルを作って(automake と libtools の古いファイルを消して(-f つけて上書きのほうがよいか)),libtools のファイルを生成して,スクリプト生成(aclocal; autoheader; automake -a; autoconf),コンパイル (./configure; make).

まあ,automake に --foreign つけたら NEWS がいらなかったり,そもそも bootstrap スクリプトを動かせ libtoolize 以下は自動でやってくれるのだが… というか,改行コードの修正後に bootstrap で呼び出す automake と libtoolize に -f つけるだけってのが一番楽か.最終的に,autoreconf -vif と実行するのが一番スマートだということに気づいた

とりあえず以下の環境で確認:(GNU automake) 1.9.6,(GNU Autoconf) 2.59,(GNU libtool) 1.5.22,gcc 3.3.5

自前でやるときのマンドは以下のとおり.

tar xfvz opencxx-20050912.tar.gz
cd opencxx
for fname in `find . -regex '.*\.\(am\|in\|m4\|sh\)'` bootstrap; do mv $fname $fname.old && (nkf --unix $fname.old > $fname); done
mv configure.in configure.in.old && (sed -e 's/AM_INIT_AUTOMAKE($PACKAGE, $VERSION)/AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)/' configure.in.old > configure.in)
mv opencxx/main-con.cc opencxx/main-con.cc.old && (sed -e 's/static char thisVersion\[\] = VERSION;/static char thisVersion\[\] = PACKAGE_VERSION;/' opencxx/main-con.cc.old > opencxx/main-con.cc)
mv occ2.in occ2.in.old && (sed -e 's/\*\.cc|\*\.mc)/\*\.cc|\*\.mc|\*\.cpp)/' occ2.in.old > occ2.in)
touch NEWS
autoreconf -vif 
./configure
make

autoreconf を使わなくても以下のコマンドで代用できると.

#rm -Rf missing install-sh mkinstalldirs libltdl depcomp
libtoolize --ltdl --copy -f
aclocal
autoheader
automake -a --include-deps --copy -f
autoconf

とりあえず,examples が動くかどうかを確認してうまくいけば次の仕事に移れるかも…

Libtool

適当に Web を眺めつつ libtool の使い方をとりあえず覚える.とにかく libtoolize で必要なファイルを生成しておいて AC_PROG_LIBTOOL を configure.in に書けばいいと.古いファイルの上書きに --force をつけて,サブディレクトリに libltdl を持ってくるために --ltdl をつけて,必要なファイルをリンクでなくコピーで持ってくるために --copy をつけときゃいいと.

ということで結局 libtoolize --ltdl --copy --force をして,このあとに aclocal; autoheader; automake -a; autoconf でいけばOKらしい.

参考: http://www.geocities.jp/fut_nis/html/libtool-ja/

Autotool

とりあえず,configure.in と Makefile.am を用意して aclocal; autoheader; automake -a; autoconf という流れでやればいいことは理解した.memo

configure.in とかの改行コードが CR+LF で引っかかったり AM_INIT_AUTOMAKE の書き方が古くて(?)怒られたりしたがどうにか configure の生成が出来た….次は Libtool だ,先は長い.

以下参考にしたところ.

http://www.h7.dion.ne.jp/~matsu/feature/automake/index.html

http://larse-gtk.hp.infoseek.co.jp/automake.html

http://home.catv.ne.jp/pp/ginoue/gnu/autoconf.html

http://www.ncfreak.com/research/magazine/No.004/autoconf.html

bash の履歴

忘れるので書いておく.基本的に Emacs のバインド.

バインド切り替えは set -o emacs とか set -o vi とか.

Ctrl-r でコマンド履歴から後ろ向きにインクリメンタルサーチ

Ctrl-s でコマンド履歴から後ろ向きにインクリメンタルサーチ

Meta-. で履歴の直前のコマンドの最後の引数を入力

Meta-Ctrl-y で直前のコマンドの先頭の引数を入力

Meta-Ctrl-e で変数とかの展開

他にもキーボードマクロが定義できたりするらしいが覚えられん.

微妙な本

autoconf の本を探しに生協の書籍部にいったらハッカーになるための必読書103選とかいう本があったので覗いてみたが… 複数の人間が同じ本を推薦してるのがあってそれをダブルカウントしてるし.ハッカーの定義がよくわからんし挙げられている本もよくわからんのがあるし.何のための本なのだろう?

確定申告

申告書を作ったにもかかわらず提出を度忘れしていたことに気づき急いで提出.とりあえず8千円損しないですんだ… が,「還付申告ができるのはその年の翌年の1月1日から5年間です」ということで還付の場合は別に確定申告の期間を過ぎても何のペナルティも無いということに気づいた.

automake autoconf

使い方がよくわからない.configure スクリプトを生成できない.CVS snapshot からコンパイルできない.使い方本気で覚えようかなぁ?

OpenC++ Core

OpenC++ のパーサ部分(frontend)だけ欲しいと思っていたら丁度良く OpenC++Core なるものがあった.とりあえず普通にコンパイルできてテストのソースも読むことができてるので自前でパーサを作る必要が無くなって一安心.ただ,シェルスクリプトやテストの出力比較用ファイルが CR+LF の改行になっているのはいただけない… CVSから最新版を落とそうとしたらタイムアウトしたのも残念…

ロボコン

まったく知らなかったのだが中学生のロボコンがいつの間にやらやられていたことに気づいた.主催はNHKでは無く,全日本中学校技術・家庭科研究会というところらしい.よくわからない団体だが,とりあえずスナップショットぐらい載せてほしいと思わなく無い.とにかくWebでの情報提示は多いほうがよいと思ふ.

んで,本家のロボコンのほうは東海北陸の連中がぜんぜん受賞できておらず最近は弱くなったものだなぁと思ったのだがうちの連中はうちの連中で2チームとも地区大会一回戦目で富山高専に負けるとはなさけなひ.ま,自分がでたときも一回戦目で負けたので人のこといないけど… ルールの傾向とかが変わってきたのだろうか? とりあえず再放送するなら見てみたい.というか受信料払ってやるから再放送しろと.

工作

デッドスペースの有効利用のために棚というか台を探していたのだが適当なサイズのものが見つからないので木材を買ってきて自前で作ることに.久々にドライバー回したりピンバイスまわしたりで手にまめができたりしたけどとりあえず丁度ほしかったサイズのものが出来上がったのでよしとしよう.どうでもいいけど電鋸とかボール盤とかほしい…

春眠暁を覚えず

って要するに,春になると花粉症と風邪で外にでれないほどだるくて寝るしかないってことだよねと.

今日のボケ

頭がぼーっとしているとは思ったがベットと弁当を電話で聞き違えるとは… いかんなぁ.COINSのドキュメントも微妙だし… せめてまともなPDFがほしい.

COINS

コンパイラインフラストラクチャとのことでダウンロードして覗いてみた.JavaのオブジェクトまわりをどうやってHIRにエンコードしているのだろうかと気になったのだが,どうやらJavaのフロントエンドはテスト版でしかなくまだリリースには含まれていないらしい.やはり SUIF のOO拡張を参考にするしかないのだろうか? これはこれでC++への書き戻しができるかどうかわからないけれど.

朝日+銀閣

とりあえず真っ赤な朝日を見れたのでよかったなと.琵琶湖に反射して道ができていたのもなかなか.んで,PPL終わったら銀閣寺へ八つ橋を買いに出かけてから帰宅.苔の種類は覚えるには多すぎだったり,よく見かける苔が邪魔者扱いされていたり… とにかく建物より苔がメインだということは理解した(?).そして八つ橋は「元祖八つ橋西尾」で購入.見慣れた三角では無く長方形なのが面白い.今日はうまく買えたからよかったが,その場での手作りなので売り切れもあるそうな.ま,次回があったらまた利用しようかと思ふ.

ショートプレゼンとポスター

今日は自分の発表があったので少々疲れたが… おいしいワインで少々復活.にしても発表時間が5分だと聞いていたのに4分ぐらいで終わらせてくれと言われ微妙に4分オーバー.ま,みんな似たり寄ったりだったのでよしとしよう.そして,MetaPostでせっかく作ったのに普通のプリントアウトをしたポスターは少々しょぼかった.次からはまともな印刷をできるだけしてみよう…

琵琶湖まで

雄琴温泉に入りにいく.そしておいしいワインとチーズを食べる.その合間にPPLの発表を聞いてきましたとさ.ただ飯の量がちょっと多かったような…

MetaPostで draw のデフォルトオプションを指定

drawoptions(withpen pencircle scaled 2); とか書いておくとそれが付加されて描画されるらしい.んで,GNUPlot の MetaPost 出力がこれを多用するためにグラフを他のところに Picture として使おうとするときには drawoptions(); でオプションをクリアしとかないと大変なことになる.

デバイスコンテキストの解放

1つのビットマップオブジェクトを同時に複数のデバイスコンテキストで選択することはできない.なので,複数のビットマップをサイクリックに BitBlt したいときに,毎回新しい(コンパチの)デバイスコンテキスト作ってから解放せずにほっとくと,次回からそのビットマップが描画できなくなる.このようなバグを埋め込んでしまった場合にそれを解決しようとする試みは人それぞれだと思うところだが,毎回新しくビットマップをロードしてハンドル作りまくるのはどうかと… これをやるとリソースか関係でむちゃくちゃになるのでとりあえず作ったものは解放しましょうと言いたい.

とは言え今後自分がはまらないとも限らんので記録として書いておくことにしよう.

とりあえず寝る

みなさまお疲れ様でしたと.

Informal Workshop

とりあえず一日目終了&自分の発表終了.時間オーバーするかと思ってたけど終わってみれば35分程度の発表で丁度良いぐらい.ただまあ,その分質問時間が長くて答えをまったく用意してなかった部分に質問をくらったり.特に理由無くやった部分に対して理由を述べよとかいわれたときにはどうの答えようも無く… 結局のところ面白そうなのでやっただけなので "just for fun" という発言で終了.結構便利な言葉だなと思った今日この頃.ついでに英語の語尾が変に上がらないように気をつけましょう.自分ではわからんのだが…

Home > Archives > 2006年03月

Search
Feeds

Page Top