Home > Archives > 2008年01月

2008年01月

スレッドを特定のCPUコアに貼り付ける

Windows だと SetThreadAffinityMask で貼り付けたいコアに対応したビットだけ立てたビットマスクを指定すればよいらしい.でも,どのビットがどのコアに対応しているのかよくわからない.ビットマスクとかのフラットな構造でなく,CPUの接続の階層に従った構造体で指定できると楽なのだけど...

バカとテストと召喚獣 3.5 読了

予想の斜め上を行くバカがいいねぇ.腹筋鍛えられるよ.

くじびき勇者さま 6番札 読了

とりあえず,クロソイド曲線とかサイン半波長逓減曲線とかいう単語が出てくるラノベは他にないだろう.さすが理系.

今回,鉄道とおる&兵器いろいろできる&大統領誕生する,ということで世界の単位が順調に大きくなっているもよう.なんかシムシティの広域版みたいなもんを眺めている気がする.次巻は内燃機関+飛行機を期待したい.

ところでこのラノベ売れてるのか?

傘をやっと買ってくる

さんざ買い忘れていたのをやっとこさ買ってきた.これで明日雨が降っても大丈夫.やれやれ.

ひさびさにあなごる

Palindromic Quine を sed で 417bytes.

機械的に作っているのでなかなか縮まない.基本的には,「エスケープした文字列データをそのまま出力しなおす,エスケープ解除して出力する,今まで出力した部分の反転を出力する」,という3つの動作をするプログラムを書いて,そのプログラムをエスケープした文字列をそのプログラム自身に食わせれば望みのものが出来上がる.が,この3つの動作をするプログラムが100bytes近くかかっているので,全体で4倍の400bytes超えになってしまう.

もうちょっと頭使わないとだめかなぁ.中心のプログラムが palindrome ならデータ部分とあわせても3倍ですむのだが... むずい.ついでに,最後に必ず改行が出てしまうので,その分先頭に余計な改行が必要なのも...

そういえばそうだよなぁ

ADSLモデムについてるルータ機能の部分でルーティング情報の書き換えを忘れてたので無線側からの通信が一方通行になってた.とりあえずルーティング情報追加してlet'snoteの先にある無線に通信が届くようにした.こういうルーティングの仕方を GUI で設定できるようになると楽なんだけどなぁ.無理かねぇ.

Windows をルータにする

HKEY_LOCAL_MACHINE のSYSTEM\CurrentControlSet\Services\Tcpip\Parameters の IPEnableRouter (REG_DWORD) を 1 に書き換えるらしい.要再起動.あとは route -p add ... でルーティング情報を追加してやればいい.

ということで,暇している let's note W2D にLANカードさしてルータにして,その先に AirStation くっつけて無線部分を切り離した.さて,無線の通信ログでもとるとするか.

SunSpot を見る

SunSpotWorld が公式ページらしい.無線とセンサを積んだ小型コンピュータでJavaでプログラムを組めるらしい.だいぶ前から存在は知っていたけど実物を見るのは初めてで,とりあえずふたの開け方にコツがいることだけはよくわかった.うまくやらないと割れそう.

デモプログラムもいくつか見せてもらったけど「値段の高すぎる壊れやすいおもちゃ」という感じだったので,もう少しインパクトのある例があると宣伝しやすそうだなぁと.ま,そのネタを探しているというのが現状だろうけど,もう少し無線ネットワークを構築できることを強調する例がほしい.とはいえ,Java を使っているの組み込みのプログラムの勉強用には敷居が低くて丁度いい気がする.GC稼働中の最大遅延が13msというのが組み込みにとってどれくらい痛いのかは知らんけど.

とりあえず,半額になるなら買う.おもちゃとして何が出来るのかを追求してみたい気がするし.

傘がない

買おうと思ってて忘れてた.雨が降らないと思い出さないが雨が降ると買いにいけない.ある意味デッドロック.

VMware Server とか

VMware Player はフリーだけど仮想マシンの作成が出来ない.で,QEMUとかでHDDイメージ作ったり既存の vmx ファイルを書き換えたり溶かしてたのだが….よく考えたら同じくフリーである VMware Server なら仮想マシンの構成も出来るではないか.何で今までことに気づかなかったんだろう?

寒い…

雪振るかなと思ったけど降らなかった.残念.

FireFoxでリンクを一斉に開く

FireFoxのAll-in-One Gesturesでジェスチャの軌跡上にあるリンクを一斉に開く方法があるらしいのでメモ.時々変な操作してるとリンクが開かれることがあるので存在は知っていたがどうやるのか調べもしてなかった.とりあえずデフォルトなら奇跡の最後に「右→上→左」でいいらしい.

Project Euler をやってみる

Project Eulerの問題を頭からいくらかといてみた.基本 Haskell 使ってるけど時々スタックがオーバーフローしたり遅かったりするので C++ を織り交ぜる.多倍長の演算とかはHaskelがとても楽でいい.まだまだ最初のほうなのであまり面白い問題ないけど順番にやっていこう.

浄水器壊れる

切替レバーがイカレて浄水に切り換えられない… まあ古いからなぁ.とうことで夜中だけど浄水器買ってきて取り付けた.今度のは液晶画面にカートリッジの交換までのカウントダウンが表示されるらしい.ボタン電池で動いてるのだけどどうせなら水流で発電してほしいもんだ.

給料入る

先月の半月分も無事に振り込まれていた.それにしてもいろいろ引かれるもんだなぁ.

SRM 388 DIV 1

目が覚めたので久々に参加.でも250点問題を即効で解いただけ.500点問題は計算量の見積もりが面倒になって寝た.

250点問題:素因数分解に含まれる素数が与えられた数以下であるような数を数え上げる.素数テーブルを持って割っていくのみ.6分で解いたらしい.

500点問題:グラフを何回被覆できるかという問題だけど… 被服のための基底を生成したあたりで計算量の見積もりが面倒になってやめた.どうやらメモ化したバックトラックでよかったらしい.

1000点問題:指定したハミング距離をもつ指定桁の16進数のうち小さいほうから指定番目を返せと.エラー訂正のほうの理論使って簡単に出来ると面白いなぁ.

ACL をいじるには

NTFS の ACL を操作するためのコマンドが vista だと icacls.exe らしい.とりあえずこいつで全ファイルに Administrators のフルアクセス権つけてやれば administrator で操作できないファイルがなくなるわけか.cygwin でファイル作るといろいろと操作不能なファイルが出来てしまって困る.

ついでに,cygwin で ACL をいじるのは getfacl/setfacl らしい.でもいろいろとめんどいので CYGWIN="nontsec binmode" とかしてしまうのが早いのかもしれない.もしくは cygwin がファイル生成時に Administrators にフルアクセスつけてくれればいいのだけど… メーリングリストとか見る限り対応してくれなさげ.

藤枝東負けた…

試合見忘れたけど結果見てがっくり.大差で負けてしまったか.残念.

予想通り

ぼけてイヤホン洗濯した.ポケットに入れたときに洗濯しそうだなとは思っていたのだが.まあ,単純な構造なので問題ないと思っておく.

傘がないことに気づく

夏の時点で三本あったはずの傘が全くなくなっていることに気づいた.盗られたり置いてきたりで二本を失い最後の一本を実家においてきたもよう.とりあえず今日は外出できず.また雨が降らないうちに傘を買ってこよう.そして今日の飯はどうしましょ?

歯間ブラシで…

歯医者に歯間ブラシ勧められたので使ってみたが… 血が出てるよ,おい.まあ,歯間ブラシの説明書にも歯茎が弱ってると出血するけどそのうち平気になると書いてあるのだけど.どれくらいの出欠までオッケーなんだ? ま,しばらく続けてみるか.

部屋を完全密閉して湿度上げるか… 傷みそうだけど.

歯医者その6

これにて連続通院終了.三ヵ月後に検診に行けばよいと.

堰が…

なんかの拍子に止まらなくなる.とりあえずこの時期に他の人間に風邪をうつすのもあれなので帰って寝る.が,きっと喉の違和感ですぐにおきるに違いない.というか寝不足で悪循環…

WinDVR5 + PX-TV402U その2

昨日の続き.わけわからんから WinDVR 内部から WinIEPG.exe を呼んだ場合と外部から呼んだ場合とで何が違うのかを ProcessExplorer とか持ち出してきて比べてみた.結果,コマンドライン引数に違いはないが,環境変数に多少の違いを発見.どうやらレジストリの位置を指定するための環境変数を必要とするらしい.

ということで,そこらの環境変数設定をするように

set __@@0C025CFF_37A9_4908_9323_15FA0E0D5E06_4=Software\InterVideo\DVR5
set __@@82763207_AA34_44e6_A91B_19576293E78A_=Software\InterVideo\DVR5
"C:\Program Files\InterVideo\DVR5\WinIEPG.exe" %1

とかいうバッチファイル書いたら録画品質の一覧が出るようになった.とりあえず問題一つクリア.

それにしても風邪なおらんなぁ.

WinDVR5 + PX-TV402U

で,WinIEPG.exe の挙動がおかしい,というか仕様なのか? *.tvpi ファイルを開いたときに録画品質の選択肢が消える.そしてそのままスケジュールの追加をすると録画に失敗する.WinDVR の内部から起動した際には録画品質の選択肢が出現しているので… 選択肢を出現させる何らかの方法があると思うのだけど.よくわからん.そもそも確認のボタンを押さねばならん時点で使えん.自動予約に使いにくすぎる.さてどうするか?

それはさておき,藤枝東が決勝に進んだのはうれしいことだ.よい試合になるといいなぁ.

メールの転送を

PCで受信しているメールを携帯でも受信したい.ただしパケット代が高いので,スパムは転送しない,添付ファイルはファイル名だけわかればいい,本文もある程度の長さで切れてしまえ,という仕様にしたい.

今回とった手段は,ひとまず Gmail に転送してスパムを高確率で殺す,そいつをレンタルサーバの転送専用メールアカウントに転送する,さらにそのアカウントで添付ファイルや本文の短縮の加工を行い携帯側へ転送する,とかいう摩訶不思議なリレー.

で,調べてみたらレンタルサーバのメール振り分けは maildrop とかいうのでやっているらしく,転送設定は通常の .forward ではなく.mailfilter とかいうものを書くらしい.つーことで,.mailfilter を転送用メールアカウントのディレクトリに置いて,中身を次のように指定.パーミッションを 600 とかにしておかないと動いてくれないので困る.

cc "| ../../mail_forwarding.pl"

そんで,次の転送用のプログラム mail_forwarding.pl を適当に配置.いわゆる .eml が添付されてきたときには再帰的に展開して本文にくっつけてしまう.他はテキスト以外の添付は切り捨て.

#!/usr/bin/perl
 
use MIME::Parser;
use MIME::Words qw(:all);
use Jcode;
#use encoding "7bit-jis";
 
$forward_addr = 'hugahoge_tekitou@docomo.ne.jp';
$sendmail = '/usr/sbin/sendmail';
$length_limit = 512;
 
 
sub extract_body {
    my ($entity) = @_;
    my $body = $entity->bodyhandle;
    my $head = $entity->head;
    my $type = $head->mime_type();
    my $str = "";
    my $nm = $head->recommended_filename;
 
    #print "type = $type\n";
    if( $type eq "multipart/mixed") {
    #if($entity->is_multipart()) {
            my $count = $entity->parts;
            for(my $i = 0; $i < $count; $i++){
                    my ($st, $n) = extract_body($entity->parts($i));
                    if($n ne "") {
                if($nm ne "") { $nm .= ", "; }
                           $nm .= $n;
            }
                    if($st ne "") { 
                if($str ne "") { $str .= "===\n"; }
                $str .= $st;
             }
            }
    } elsif( $type eq "text/plain") {
        $str = $body->as_string;
    } elsif( $type eq "text/html") {
        $str = $body->as_string;
    } elsif( $type eq "message/rfc822") {
        # should be recursively decoded
        my $io = $body->open("r");
           my $et = $parser->parse($io);
        my ($st, $n) = extract_body($et);   
        $str = $st;
                   if($n ne "") {
            if($nm ne "") { $nm .= ", "; }
                       $nm .= $n;
        }
    } else {
    }    
    return ($str, $nm);
}
 
sub extract {
    my ($head, $attr) = @_;
    my $dat = $head->get($attr);
    my @decs = decode_mimewords($dat);
    my $ret = "";
    foreach $data (@decs){
        my ($target,$charset) = @$data;
        if($charset ne "") {
            Jcode::convert(\$target, $charset, 'jis');
        }
        $target =~ s/\n//g;
        $ret .= $target
    }
    return $ret;
}
 
sub stlip_bracket {
    my ($dat) = @_;
    $dat =~ s/(^|,)[^>]*<([^<>]*)>/\1\2/g;
    return $dat;
}
 
$parser = new MIME::Parser;
$parser->output_to_core(1);
$parser->extract_nested_messages(0); 
 
$entity = $parser->parse(\*STDIN) or die "parse failed\n";
$head = $entity->head;
$from = &extract($head, 'From');
$to   = &extract($head, 'To');
$cc   = &extract($head, 'CC');
$subj = &extract($head, 'Subject');
 
$from = stlip_bracket($from);
$to = stlip_bracket($to);
$cc = stlip_bracket($cc);
 
$body = "";
($body, $files) = extract_body($entity);    
 
$mes = "";
$mes .= "From: $from\n";
$mes .= "To: $to\n";
if($cc ne "")    { $mes .= "CC: $cc\n"; }
$mes .= "Subj: $subj\n";
if($files ne "") { $mes .= "File: $files\n"; }
$mes .= "$body";
 
if(length $body > $length_limit) {
    $body = substr($body, 0, $length_limit);
}
 
$modbody = $body.($to ne "" ? "\nTo: ".$to : "").($cc ne "" ? "\nCC: ".$cc : "").($files ne "" ? "\nFs: ".$files : "");
 
#$esub = encode_mimeword($subj);
$top = MIME::Entity->build(Type    =>"text/plain",
                           From    => $from, 
                           To      => $forward_addr,
               Data    => $modbody,
                           Subject => $subj,
               Encoding => "7bit",
               Charset => "ISO-2022-JP",
                          # Subject => $esub);
              # CC      => $cc,
              # Encoding =>"quoted-printable",
            );
 
#print $mes;
$top->print(\*STDOUT);
#exit(0);
 
open(MAIL, "| $sendmail -t") or die "seinding a mail failed";
$top->print(\*MAIL);
print MAIL "\n\n.\n";
 
#$top->head->replace('To', 'debug_output@hugahoge_tekitou.com');
#open(MAILLOG, "| $sendmail -t") or die "seinding a mail failed";
#$top->print(\*MAILLOG);
#print MAILLOG "\n\n.\n";
 
 
 

とりあえず動いてるけど HTML メールのときにタグをなくしてテキスト化したいなぁ.そして perl で書いたけど別の言語で書いたほうが楽だったかなぁ.perl なんて久々に使ったから perl として普通のプログラムなのか怪しいし.

復帰

体調がまともになって来たので実家を発つ.御殿場線混んでるし… あさぎり使いたかったなぁ.

それはさておき丁度よい家計簿をつけるためのソフトはないだろうか? Excel だと入力がめんどい.

引き続き寝正月

しつこい風邪だ.土曜日に雨にさらされてた&人多過ぎの場にいたのが効いているのだろうか? とりあえずFate/Zero 4 は読み終えたから次は空の境界でも読むか…

そういや藤枝東まだ勝ち進んでるなぁ.このまま優勝してくれるといいなぁ.

風邪

だめだこりゃ.ある意味寝正月.そして寝てても飯が出てくるのは非常にありがたい.

初詣へ

毎年恒例の初詣に行く.行き先は三島大社.時刻は一番すいているであろう午前四時.そして店番の巫女さんも一番少ない.

んで,手水舎→拝殿→御神籤&お守り売場と一回り.手水舎の作法は正しいのを知らんかったのだが,左手→右手→口(左手に水を受けて)→左手→柄とかいうのを神宮の人がテレビの中で説明してたっけ.拝殿でも二拝二拍手一拝が作法になっているのだとか.初詣後にテレビで見ても一年経ったら忘れそう.

それはさておき,毎度のごとく御神籤引いたら初の大吉を引き当てた.うれしい気もするけど,あとは下がるだけなのかもしれない.喉をやられて頭痛い状態だし…

Home > Archives > 2008年01月

Search
Feeds

Page Top