/var/log/hdk.log

2014 年 5 月


01 (木)

%1 もくようび

近くの某大学に行ってイギリスから来ている教授に説明するお仕事。 英語難しい。 スペルがアメリカ英語だし、発音も若干アメリカ英語よりだし、イギリスの人にとってはだいぶ、でも所詮片言英語だからそんなことは問題にはならないか。

夜は吉祥寺。

2014/05/01 のコメントを読む・書く


02 (金)

%1 かぶ

株式の株。 先月は結構変動したが、大学の先生が設立した会社が上場したのでそれと (ただし単元未満)、再上場した西武のを買ってみた。 今日見てみたらそれらは無難な感じになっている。

そんなことより、某 SNS ゲーム会社の評価額がだいぶ下がってしまっていて、残念な感じなのだが、よく見たら買付日は去年の 4 月で、買ってから 1 年が経過していたという事実に驚いた。 決算後にちょっと下がったところを買って、短期間しか持たないつもりだったが、いつの間にか決算も終わっていたのである。 '`,、('∀`) '`,、

冷静に考えれば、やはり消費税増税に伴って株価が下がったと見ることもできるのだけど、今のところは案外下がってないという感じがある。 ふつうに考えれば、中央銀行がきちんと仕事をし続けていればまた上がっていくはずなので、マスコミ等周囲がわけのわからない批判をかき立てなければいいのだけど。

先週だっけ、「相棒シリーズ X DAY」という映画がテレビで放送されてて、後半だけ少し見たのだが、その内容が、X DAY とやらに預金封鎖が起きてだったかな、それで、株と円と国債が暴落するとかそういう話が出てきて、そんなことが起きうるのか不思議であった。 株価か下がるというのは需要が供給を下回ればそうで、まぁ大勢が売ればそういうことになるが、売れるということは買っている人がいるということでもあり、早く売りたいから安い値で売っちゃうとかそういうことである。 国内の株式を売ると円が手に入る。 国債もたぶん似たような話だろうと思う。 円は? やはり需要が供給を下回ると下がるということである。 現在はインフレターゲットが決められているので、需要が減ると、供給も減らされることになり、暴落はしないが、もしインフレターゲットがなくて、供給を変化させなければ、需要が減ることで暴落というのもあるのかも。 大勢が円を売る? 誰に売って何を手に入れるのか? 株を買えば株価が上がるし (これは株価が下がることと矛盾する)、土地を買えば地価が上がるし、外国通貨を買えば外国通貨が上がるし、国債を買えば以下略。 通貨とそれ以外のすべてが一方的に暴落するなんて、どう考えても変な話である。

2014/05/02 のコメントを読む・書く


03 (土)

%1 フルフェイスヘルメット

今持っているのは安物のシステムヘルメットというやつなのだが (ジェットのシールドのかわりにフルフェイスのシールド・あご部分を動かせるようにしたようなもの)、初めて買ったということもあって選び方がいい加減だったので少々不満がある。

シールドは買おうと思えば買えるはずだが、有名メーカーのとは違ってお店で見かけない。 それに残る 2 点の不満もあるので、どうせなら有名メーカーの普通のフルフェイスに買い換えようかと。 そんなわけでバイク用品店に行き試着開始... うーん!

みたいな。 まさかめがねがこんなに問題になるとは。 というところで、アライのプロショップ的な表示を見つけた。 説明を読むと、適正サイズの案内の他、めがねが入りやすいように調整ができるとのこと。 なんと!? というわけでお話を伺った。

そんな感じなのだが、めがねのかけやすさの印象として、チークパッドをちょっと削ればアライの XL (61-62cm) でいけるのではないかと思っている。 そのままでもぶれないが、フェイスマスクをつければより確実かも知れない、というか、たぶんカートに乗る時にはフェイスマスクをつける。(汗かいたりするので。) クッションがへたってくるとアレかも知れない。

後は、色かデザインをどうするかだな。 柄物もいいけどねぇ、完全にデザインだけで値段が 3 割増しというのもなぁ。 それだったら高いモデル買えるじゃんみたいな。

2014/05/03 のコメントを読む・書く


04 (日)

%1 ヘルメット買った

結局アライの安いフルフェイス。 めがねはあごひもを締める前にヘルメットを少し上にあげた状態でかけるとうまく耳にかけられることがわかり、このアライのモデルならば特にチークパッドの加工をしなくてもよさそうだということになった。

原付で買いに行ったので、箱は持ち帰るのが面倒なので捨ててもらって、シールドに貼ってあるシールをはがして、かぶって帰った。 実際に走行すると、今まで使っていたものとの違いが見えてくる。

ギシギシ音については意識していろいろ動かしてみれば買う前に気づけるけど、今まで使っていたものは初めて買ったものだったのでそこまで意識していなかった。 雑音や風の音については、いくらお店でかぶってみてもわかりようがないので、純粋に、アライのこの価格帯ならこんなものなんだぁというのを実感した状態。 軽さはあんまり実感がわかないのだが、カートで思いっきり横 G をかければ実感できそうな気がする。

2014/05/04 のコメントを読む・書く


05 (月)

%1 朝の地震

何となく意識がある状態で、つくばにいた時によく経験したような地鳴りの感じとともに地震があった。 いやな感じだが揺れはたいしたことがなくてよかった。 千代田区が震度 5 弱だったそうだが、震度 5 弱までは家がつぶれたり大きな棚が倒れたりすることはまずないと思うので、あぁ大丈夫だねっていう感じで。 ただし、けが人はいたらしい。

まぁそのおかげで 5 時台にいったん目が覚めてしまい、寝直したら次に起きたのは 11 時過ぎだった。

%2 映画「テルマエ・ロマエ II」

久々のイオンモール。 こどもの日というだけあってかなり混雑していた。 「テルマエ・ロマエ II」はチケットを買う前から残少の表示で、座席指定も平日なら誰も座らない A〜C 列まで大部分が埋まっていた。 すごいね!

なお、料金は (おそらく) ハッピーマンデーというサービスで 1,100 円。 毎月 1 日も 1,100 円っぽい。 ついでなので株主優待について聞いてみたところ、今日は一律 1,100 円だが、普段なら 1,000 円で見られるとのことで、かなりお得感がある。 そう言っていた気がするが、今日は 5 日だから何とか感謝デーとかそういう系もあるのかな、公式 web サイト等に記載がないのでよくわからん。 まぁ何にしても、持ってるなら見せれば損はないと思う。 なお、株主優待は今日はドリンクまたはポップコーンがサービスということで、引換券をもらった。

あ、肝心の内容のほうは、序盤からだいぶ飛ばしてる感があったが楽しかった。 映画に出てくる観衆が興奮している対象の変化がおもしろい。 あと、「外人」役の主役達の顔立ちをまじまじと見てしまった。 確かにみんな彫りが深い。

そうそう、本編の前の CM にもテルマエ・ロマエつながりのものがあって、笑った。

%3 道路

出かけたのは夕方で、祝日だからけっこう混雑しているかと思ったが、それほどでもなかった。 一部裏道を使ったから早かったという部分もあるが、それにしてもスムーズだった気がする。

帰りもスムーズに帰ろうとしていたら飲酒検問にあった。 何台かに一回止めるみたいで、止められた。 はぁー、ってやって、警官がだまってるんで、いいですか? って言ったらいいですよって。

2014/05/05 のコメントを読む・書く


06 (火)

%1 祝日

まったり。

すし食べたいと思って、くら寿司にいった。 こんでて 50 分待ちなどとでていたが、お一人様効果により 15〜20 分待ち程度で済んだ。 なんかお皿にカバーのようなものがされていたり、お皿を突っ込む口があったり、注文したものが目の前までかっとんでくるようになってたりと、前に来たときとちょっと変わったような気がする。

%2

きのうイオンモール内の本屋さんで OpenGL 関連の本を見かけて、3,500 円とかだったので躊躇して買わなかったのだがもう一度立ち読みしてみてよさそうなら買ってみようかなと思った。 ので、近所の本屋をまわったのだが、ない。 そもそもコンピューター系の本の品揃えが少ない。 まわってみた中では稲城のショッピングセンター内の本屋さんが一番マシだったが、きのうのイオンモールの本屋さんのほうがずっといい。

このあたりって、というか、東京って車で行きやすい大型書店はあんまりないのかも。 書店で地図を検索しても駅前にあるのが多いし、それらも規模は駅の規模と比例するというか、そのへんの小さな駅に行くくらいならイオンモールのほうがずっといいというか、天気さえよければ、原付で吉祥寺まで行けば十分な規模の本屋がありそう。 それも駐輪場があいてればだけどね。 中央線沿線にはいくつかありそうだが、中央線使うとそれだけで結構お金が、交通費がかかっちゃうので、目当ての物があるのかもわからない状態ではちょっとねぇ。 大きな本屋さんには駐車場がついているというイメージがあるのは、鹿児島での経験からなのか、つくばでの経験からなのか、両方か。

あと、古本系のブックオフとブックセンターいとうがやたらいっぱい見つかる。 そうなんだよなー、古本とコミックなら車で行きやすい場所で普通に買える気がする。

2014/05/06 のコメントを読む・書く


07 (水)

%1 大型書店

どうやら車で行ける大型書店でよさそうなのは多摩センターにあるようだ。 駐車場代が 2,000 円買い物すると 2 時間無料とかでものすごくいまいちに見えるけど、近くに 90 分無料とかの駐車場がついてるショッピングセンターがあるから、悪くない。 とはいっても外を歩くから天気が悪い日はいまいちだな。 うん。

仕事帰りに吉祥寺のジュンク堂というところに寄ってみた。 確かに広い。 品揃えもいい。 人も多くない。 この雰囲気、そういえば Denver にある有名なでかい本屋さんも雰囲気はこんな感じだった。 聞くところによると、池袋の本店の広さはこんなもんじゃないらしい。 へぇー。

OpenGL の本を、って思ってたけど WebGL の本まで何冊もあった。 どっちを触るべきかは悩みどころ。 どうせ軽いお遊びのつもりだし開発環境はあるのでどっちでもいいんだけど。 パラパラめくって好みにあいそうな本とあわなそうな本の目星をつけておいて帰宅、インターネットで評判を調べてもう一度行くことにしよう。 とりあえずの印象としては、翻訳ものがいいかもというところ。

2014/05/07 のコメントを読む・書く


08 (木)

%1 WebGL 本

WebGL の知識をバランスよくカバーした入門書「実践プログラミングWebGL」書評 - WebOS Goodies

この書評を鵜呑みにして、「実践プログラミング WebGL」と「OpenGL+GLSL による 3D-CG アニメーション」を買ってきたのであった。 とりあえず前者の 1 章と、2 章の最初のほうを読んでみた。 大変わかりやすくていい感じ。WebGL は OpenGL ES 2.0 と関係があって、それでシェーダーというのを使わざるを得ないというのが、どうも普通の OpenGL プログラミングとは違うところっぽい。 そのシェーダーとやらには、vertex と fragment の 2 種類があるということ。 翻訳はまぁとびきり良い品質ではないと感じるけど、説明が論理的で理解しやすい。

シェーダーと行列がどうやら密接に結びついているらしいが、先を読んでいないので想像すると、シェーダーの計算は逐次的な CPU で行うにはかなり重たい計算で、GPU はそれを並列にこなすことができるように設計されていて、そういう並列処理に適した表現が行列による演算なのではないかなと。 例えば点を移動するとして、x+=1;y+=2;z+=3; のように C のプログラムで記述すれば、これは (C コンパイラーによる強力な最適化がなければ) 逐次的に 3 回の足し算を行うことになるが、これを行列演算で書けば、4x4 の行列と 4x1 の行列のかけ算 1 回で実現できることになる。GPU はこういう演算をあらゆる頂点に対して行うのであるから、単純な行列演算を並列にたくさん行えるような回路が構成されているのだろう。

そうそう、1 章の線形代数、ベクトルのノルムについての説明が抜けていると思う。 内積の説明でだまってノルムが出てくるような。

%2 そういえば

こういうのを読んでいると、「はじめて読む 486」を買ってもらった頃のことを思い出した。 もう 18 年近く前になるのか、どうやら夏休みに買ってもらったっぽい。 当時はまだ WWW で情報を入手する機会がなかったので、それは今とは違うんだけど、プロテクトモードという「聞いたことはあるし使っているプログラムも知っているけど自分では扱えなかった」ものを触る方法の説明、いや、方法だけではなくて、そんなものが生まれた背景まで書かれているのは、非常に興味深かったし、EMS ドライバーや、マルチプログラミングの詳細が見えてくるのは楽しかったものである。 なお、何を思ったか「はじめて読む 486」のサンプルプログラムを改造して、IBM JX 用の某ゲームを PC-98 の仮想 8086 モードで実行したのはその 1 年後あたりのようである。

今回は WebGL や OpenGL について、やはり「聞いたことはあるし使っているプログラムも知っているけど自分では扱えなかった」ということがいえるかも。

2014/05/08 のコメントを読む・書く


09 (金)

%1 GPGPU

GPU で並列計算をしようというやつ、WebGL でもできないことはないようで、キーワードは GPGPU だ。 ひとつ思いついたのは canvas に描いたものは読み取ることができるなぁとは思っていたのだが、どうも WebGL の API に readPixels というのがあって、これを使えばいいらしい。

%2 Ray Tracing

Ray tracing も WebGL でやっている人がいるようだ。 下の water ray tracing demo は ThinkPad X201 の Intel Corporation Core Processor Integrated Graphics Controller ではさすがに重すぎるようだが、AMD A10-6700 APU だと余裕。 簡単なデモではあるけど、ray tracing というと 80386 16MHz 時代にめっちゃ時間かかってたことを覚えているので、30fps くらいでぐりぐり動くのはなかなかすばらしいと思う。

2014/05/09 のコメントを読む・書く


10 (土)

%1 N クイーン問題の解を数えるプログラム

以前 Emscripten の性能を調べたときは、すずき氏のプログラムを何も考えずに流用したが、ちょっと自分で書いてみたくなった。 やはり最初は再帰を用いるのが簡単だが、ビット演算になおすのを考えていたら、再帰を使わないシンプルなプログラムが書けた。

print(hoge(13));

function hoge(n)
{
    var i,j,k,z,y=0,s=0,a=new Int32Array(n);
    a[0]=1<<(n-1);
    do{
	i=j=k=a[y];for(z=y;z-->0;)if(a[z]&(i|(j<<=1)|(k>>=1)))break;
	if(z<0){if(y+1==n)s++;else a[++y]=1<<n;}
	do if(a[y]>>=1)break;while(y-->0);
    }while(y>=0);
    return s;
}

hoge 関数がそれで、引数は N の値で、解の数を返す。 最初の print は SpiderMonkey でのテスト用。 単純にすべて数え上げるので、時間はかかる。 再帰はしないし、メモリーを使うのは N 個の要素を持つ配列といくつかの変数なので、メモリー消費量は極めて少ない。

試しに置いてみて駒が取られないかどうかをいちいちチェックするやり方だが、ポイントは、解においてはすべての行 (または列) にひとつずつ駒が置かれることになるので、端から順に埋めていけばよいということ。 それまでに置かれた他の駒に取られないかどうかを埋める時に探索するならば、探索はそれまでに埋めた範囲についてのみ行えばよく、また、端から順ということは、ひとつの行 (または列) に複数を置く可能性がないので、同じ行 (または列) の探索もする必要がなくなり、その結果、8 方向に移動可能な駒であるが、3 方向のみの探索で済む。 ビット演算にしたことで端っこを気にする必要がなくなり (盤面をはみ出した位置にはそもそもビットを立てないことと、32 ビットを超えると 0 になることを利用)、より簡単になった。

これを GPU の力を借りてなんていうくだらないことを少し考えていたんだけど、並列処理ってやっぱり難しいね。

%2 タッチ DVD

結局 TV アニメ「タッチ」の DVD を買っちゃった。 新品。 しかしフランスからの輸入版。 安さに釣られた。 映像が NTSC ではなく PAL らしいのだが、パソコンでの視聴は可能。PSX に入れたらなぜかディスクを認識しないが、前に GT4 も認識しなかったりしたドライブなので、PAL なら正しい挙動なのか、単にドライブがいかれているのかよくわからない。 ヘッドクリーニングはしてみたんだけど。 リージョンコードは日本とフランスは同じなので特に悩む必要はない。

最初入れたらフランス語音声しかなくて焦った。 日本語は別のディスクになってた。 つまりこれ全部でディスク何枚あるんだ? 画質がちょっと悪いというか、色が変な気がする。 画面の上下に本来見えるべきではなさそうな段差のついた部分が見える。 日本語音声でも「フランス語」と出る。 オプションでフランス語字幕を出すことができるが、第 26 話を再生したらなぜか強制的にフランス語字幕が出てきて笑った。

2014/05/10 のコメントを読む・書く


11 (日)

%1 きのうの

気づいた人は気づいたと思うけど、実は今朝気づいたんだけど、ビット演算じゃなくすればメモリー使用量はさらに減らすことができて、すなわち、Int32Array を Uint8Array にでもして、1<<n を n+1 にでもすればいいんだけど、おもしろいことに、遅くなる。a[z] の条件比較が 3 回の compare になること、それが毎回配列 a の要素を参照していることが関係あるのかないのか、よくわからないがおもしろい現象である。 っていうか JavaScript インタープリターの最適化も相当なもので、for ループを変な ;z-->0; とするより ,z--;z>=0;z-- のほうが速かったりして。

C に書き直して試すとやっぱ速いんだが、y+1==n に unlikely つけたら逆効果なのは興味深かった。likely のほうが微妙に速いとか、あれ、そうなの? みたいな感じ。 あとやっぱり無駄な break; より一発 goto のほうがよい。

%2 レンタルカート

藤野。4 回乗ってベストは 38.877 秒。

%3 探偵は BAR にいる 2

テレビでやってた映画。 見たやつかとおもったら違った。 いい感じのノリで見ていたのだが、勘違いにより最後の 6 分を録画しそこねたため、最後のほんの少しを見損ねた。 はぁー、前にも似たようなことやったなー。

2014/05/11 のコメントを読む・書く


12 (月)

%1 N クイーン問題の続き

この前書いたのは性能を完全に無視した極めて単純な形。 上から下に埋めると見るとして、上向きの 3 方向について駒が置かれているかをいちいち判断しながら進める方式。 なんとなく遅そうである。

これをひっくり返し、上から下に埋めるのはいいとして、下向きの 3 方向について駒が置けないよと印をつけながら進める方式が考えられる。 最適化の余地はこっちのほうがあるのではないかと考える。 そんなふうに考えて書いてみたのがこれ。

function hoge(n)
{
    var i,j,k,w,x,z,y=0,s=0,a=new Int32Array(n),b=new Int32Array(n*n);
    a[0]=1<<(n-1);
    w=(1<<n)-1;
    do{
	i=a[y];
	x=b[y*n+y];
	if(!(x&i)){
	    if(y+1==n)s++;
	    else{
		j=k=i;
		for(z=y+1;z<n;z++)
		    if(((b[z*n+y+1]=b[z*n+y]|i|(j<<=1)|(k>>=1))&w)==w)
			break;
		if(z==n){
		    y++;
		    a[y]=1<<n;
		}
	    }
	}else if((x&(i-1))==i-1)a[y]=0;
	do if(a[y]>>=1)break;while(y-->0);
    }while(y>=0);
    return s;
}

とりあえず、どこにも置けなくなったら下には進めないという処理と、これから調べようとしている部分がすべて置けないとわかったら上に戻る処理を入れてある。 これだけでも確かに速い。 これをいろいろ考えてチューニング。 ビットシフトを反対にする。 下から順にチェックするなら、簡単な演算により、ビットを見つけることができるから、1 ビットずつ順に見ていく必要がなくなる。 それをうまく活用していくと、a 配列もいらなくなり、ずいぶん高速化できた。 最後に、鏡像を利用した最適化も適用し、一応こんなもんかなぁ。

function hoge(n)
{
    var i,j,k,v,w,x,z,y=0,s=[],b=new Int32Array(n<<5);
    n&=31;
    w=(1<<n)-1;
    for(i=n>>1;i<n;i++)s[i]=0;
    v=n>>1;
    i=1<<v;
    x=i-1;
    do{
	do{
	    if(!(x&i)){
		x|=i;
		if(y+1==n)s[v]++;
		else{
		    j=k=i;
		    for(z=y+1;z<n;z++)
			if(((b[(z<<5)+y+1]=b[(z<<5)+y]|i|(j<<=1)|(k>>=1))&w)
			   ==w)
			    break;
		    if(z==n){
			b[(y<<5)+y]=x;
			y++;
			x=b[(y<<5)+y];
			i=(x^(x+1))&(x+1);
			continue;
		    }
		}
	    }
	    i=(x^(x+1))&(x+1);
	}while(i&w);
	while(y-->0){
	    x=b[(y<<5)+y];
	    i=(x^(x+1))&(x+1);
	    if(i&w)break;
	}
	if(y==0)v++;
    }while(y>=0);
    j=0;
    for(i=(n+1)>>1;i<n;i++)j+=s[i];
    j*=2;
    if(n&1)j+=s[n>>1];
    return j;
}

2014/05/12 のコメントを読む・書く


13 (火)

%1 続き

今になってやっと、すずき氏のプログラムを理解した。 ビットの 0・1 の用途が逆なのと、左下・下・右下の 3 方向のビットマスクを別々に持ち続けることで、毎回下までのマスクを作るループを回さなくてよいというのが特徴。 ふむふむ。 なるほどよくできてる。

それを理解できたところできのうのプログラムを改良する。

function hoge(n)
{
    var i,v,w,x,y=0,s=[0,0],b=new Int32Array(n);
    var c=new Int32Array(n),d=new Int32Array(n),e=new Int32Array(n);
    for(w=(1<<n)-1,e[0]=(1<<(n>>1))-1,v=n&1;y>=0;y--){
	for(x=e[y];(i=(x^(x+1))&(x+1))&w;){
	    x|=i;
	    if(y+1==n){s[v]++;continue;}
	    e[y]=x;
	    x=(b[y+1]=b[y]|i)|(c[y+1]=(c[y]|i)<<1)|(d[y+1]=(d[y]|i)>>1);
	    y++;
	}
	if(y==1)v=0;
    }
    return s[0]*2+s[1];
}

結局かなりシンプルな二重ループに仕上がったみたい。 本当にシンプルかというとアレだけど、再帰を使っていない部分でのトリッキーさはある。 単に書き方がトリッキーなだけかも。

こういう風になってくると、SIMD とか何とかでベクトル演算で何個か並列に処理をこなすというのもできそうな気がしてくる。 処理が単純なだけに、メモリーのアクセス性能の影響とかあまり出なさそうだから (全部キャッシュされそう)、純粋に演算性能の差が見られるかもね。

%2 原付

朝しっかり出遅れて原付で出たら雨だった。 小雨くらいだったとは思うが雨だった。 新しいヘルメットは雨の中でも快適であった。 ヘルメットの軽さも実感がわいてきたというか、頭を振ったときの首まわりへの負担が小さくなっている気がする。

オドメーターが 8,000km になった。 もうすぐなりそうだというのに気づいていたので、ちょうどいいタイミングで住宅街の細い道に入って写真撮影。

8,000km

2014/05/13 のコメントを読む・書く


14 (水)

%1 展示会

今年は去年までとは別の展示会で、横浜より近くなったのはいいけど朝イチで行くのはやっぱり楽ではない。 意外だったのは職場の最寄り駅で降りる人がかなり多くて、これはもしかして某大企業に 8:45 頃までに出社する人達だろうかと。

%2 乗り換え改札

乗換駅までの乗車券を入れる→乗換先の駅に入場するために IC 乗車券をタッチする、というのがうまくいった。 以前失敗したことがあったので、通勤ラッシュの中やるのはちょっと緊張した。 失敗したときは単なる読み取りエラーだったのかなぁ。

2014/05/14 のコメントを読む・書く


15 (木)

%1 展示会 2

今日は午後というか後半担当。 なんか知ってる方が何名もいらっしゃった。 そんな日だった。

夕方が去年までの展示会より遅い。 帰りの列車が通勤ラッシュっぽい感じで、各駅停車を選んでいったらいつもの仕事帰りぐらいの時間になってた。 山手線ってやつはやっぱりこむんだなっていう。

%2 乗り換え改札

乗換先の乗車券を入れる→乗換駅までの運賃を精算し出場するために IC 乗車券をタッチする、というのもうまくいった。 これはあんまりやったことない、いや、完全に初めてかも知れない。 だって乗換先の乗車券を持ってるってのがね、普通はないパターン。

%3 一周乗車券

以前 Twitter で見かけた写真に発駅と着駅が同一の JR 東日本の片道乗車券があった。 調べてみるとよく一周乗車券とよばれていたりするものらしく、窓口できちんと経路を指定すれば買えるものらしい。

例によって 101km 以上の区間で条件がそろうなら途中下車が可能。 発着が大都市近郊区間であっても、区間外に出る経路を選べば途中下車可能だが、東京近郊区間は大変広く、東北本線の黒磯駅、常磐線のいわき駅、中央本線の塩尻駅、東海道本線の熱海駅などが含まれており、東京近郊で一周 & 途中下車しようと思うとかなり遠くまで行く必要があるようである。 他に特定都区市内とやらでなんか小難しい決まりがあるようだが、東京都区内の駅の改札を通ることがなければ気にする必要はなさそう。

でもそんなわけなので、大都市近郊区間の格安大回り乗車と比べるとなかなか挑戦しづらい感じである。 あと都心なら都区内パスというのもあって、一日乗車券的なもので都区内フリーエリアのどこでも乗り降りできる。

2014/05/15 のコメントを読む・書く


16 (金)

%1 展示会 3

朝から。 おとといよりはやかったせいか電車混雑。 途中駅で人は減ったけど、先のほうで人転落か何かあったらしくて遅延が増える。 最後はめんどくさくなってお金に物を言わせて必殺技を...

うちあげ終わって 21 時、らくらくコースを選択して快速電車の始発をめざすと 22 時前、なぜかとてもすいていたので乗車し、金曜日のこの時間帯ってこんなにすいてるのかなと不思議に思いつつ順調に着駅に向かっていたところ、某駅で車掌室のほうから不穏なピーピー音が聞こえ、車掌が無線機のようなもので何か連絡を受けているのが見えた。 ひとつ先の駅で人転落のため安全確認を行うとかいって一時運転見合わせ。 それにおよそ 8 分を要し、おまけにその先のんびりになってしまって遅延が増えた。 各駅停車も同じくらい見合わせていたけど、こういうときは各駅停車に行ってしまうほうが (終点が近かったので) いいようだ。

%2 あさっては

「第 17 回渋谷・鹿児島おはら祭」 の日らしいのだが、展示会ですっかり疲れてしまったので、今年は見に行く気力さえ残ってない感じがする。 足腰が痛い。

2014/05/16 のコメントを読む・書く


17 (土)

%1 エンジンオイル交換

原付のエンジンオイル交換。 くさい。

抜いたオイルは見た感じ 500ml くらいしかないような気がする。 そもそも前回交換したとききちんと 600ml 入れたかと言われると自信はない。

例によって少し静かになることを期待、というか、なったかな、近所をまわった程度ではよくわからん。 振動の多い単気筒エンジンだからこそ、振動が小さくなるのは人にも車体にもメリットがある。 もとのエンジンオイルは、距離的にはあと 3 倍程度は使えたはずだが、まぁいい。 この原付、実際に 8,000km になってみると、買った時点で 10,000km を超えていた可能性が否定できない気がしはじめていて、でもエンジンに関しては、定期的にエンジンオイル交換と量チェックさえしておけば大丈夫といわれるスーパーカブのエンジンなので、そこだけ気をつけるようにしようと。

%2 WebGL

例の WebGL の本を適当に一通り読んだ。 新鮮だったのは 4 章で、最初のほうのサンプルがやたらシンプルで複雑な 3D 図形が書けそうにはとても思えなかったところ、そんな疑問は解決した。

特に OpenGL や Direct3D などに難しそうな印象を持っていたのは、15 年以上前に少し手を出してみた 3D グラフィックス関連のプログラムの難しさからだったのかも知れない。 とある本に載っていた立方体を描く BASIC プログラム。 本には小難しい座標変換の方法が説明されていて、とにかく実行するとそれらしき立方体が表示できて、角度をくるくると変えると立方体が回って、それはそれでいい感じだったのだが、面を塗りつぶそうとするととたんにやっかいになった、というのは、LINE ステートメントと PAINT ステートメントを駆使して塗りつぶすまではよかったものの、隠れていてほしい部分が表に出てきてしまうという問題があった。 見えない部分を描かない方法的なものも説明はあったのだが理解できなかったし、簡単にできる方法があるのではないかと考えたがわからなかった。 その後 3DMark などいろんなかっこいい 3D コンピューターグラフィックスのデモやゲームを見てきて、ハードウェアは 3D の世界のデータと視点等を入力すればきれいに描画してくれるのかというような、そんな気がしていたが、OpenGL の基本的なサンプルなどは三角形が出るだけで、その間の溝が埋まらないような感じがしていたんだと思う。

WebGL に関して、新鮮だったというのは、座標についてで、例えば BASIC では左上隅が (0,0)、右下隅が (639,199) というような座標がデフォルトでは使われていて、はみ出した部分は見えないというものだったが、実は WebGL もそれに関してはたいした差はなくて、見える範囲の X, Y 座標は -1〜1 の浮動小数点を常に使っている。 なんとこの範囲を変えることはできないっぽくて、頂点シェーダーから座標を渡すときにこれに合わせて計算して調整するようである。 奥行きがあるじゃないかと考えるものだが、奥行きは見える範囲が -1〜0 なだけで、平面となる画面上の X, Y 座標には影響を与えない。 奥行きは、深度バッファーによるチェックを有効にしていれば、もっとも手前のものが残されるというだけで、有効にしていなければ、最後に描いたものが手前に表示される。 もし、奥のものが小さく見えるというのを表現したければ、頂点の位置の計算にそういう計算を含めるらしい。 その計算式はおそらく BASIC でやっていたこととたいして変わらない。 というふうに見ていくと、WebGL や OpenGL というのは、3D に向いているのは間違いないが、基本的な部分は 2D でできているとも言える。 あと、GPU は、塗りつぶされた面の各ピクセルについて、深度バッファーを利用して見えない部分を隠す処理ができるので、以前 BASIC で難しかった話については、簡単に解決する。

フラグメントというのがピクセルみたいなものだと、しかしそれは 3D の世界で行われるものだと思っていたが、前述のとおり奥行きは画面上の X, Y 座標に影響を与えないのだから、おそらく、X, Y 座標を用いて多角形を描く場合の、各ピクセルに相当する部分をフラグメントとしているというか、Z 座標も計算はされることになるがそれは varying 変数を求めるのと同じ意味ではないか。

2014/05/17 のコメントを読む・書く


18 (日)

%1 給油

161 円/l。 燃費計算 17.7km/l。 燃費表示 18.6km/l。

%2 WebGL

きのうまでに得た知識を使って、適当にアナログ時計を作ってみた。

WebGL Clock

適当なので context lost とか処理してないし、ソースコードもサンプルを改造した感じでかっこよくないんだけど、とにかく、以下のようなことをやった。

まぁたいしたプログラムではないけど、特にシェーダーに関して、実際に自分で書いてみることで、float 型と int 型を直接比較しようとするとエラーになるとか、mat4() の書き方とか、int() とか、C と似ているところ、違うところを体験できて、これはこれで勉強にはなった。

2014/05/18 のコメントを読む・書く


19 (月)

%1 オイル

念のため原付の下を覗いてみたらエンジンオイルがしたたり落ちようとしている & 落ちた跡が。 あわてて六角棒レンチを引っ張り出し増し締め。 明らかに回った。 適当に締めてこんなもんかと思っていたのがゆるかったようだ。 気づいてよかった。

%2 window.requestAnimationFrame()

HTML5 の JavaScript でアニメーションしましょうというときに、setTimeout の代わりに使いましょうとされているのが window.requestAnimationFrame()。 これは描画ができるタイミングでコールバックがよばれますということで、通常はフレームレートでの呼び出しが行われるが、負荷が高くフレームレートでの描画ができないときには、フレームレートよりも低い頻度で呼び出されたり、描画の必要がないとき (別のタブがアクティブになっているときなど) にはそもそも呼び出されないようにされたりといった気配り仕様になっているものである。

ということなのだが、世間一般にはフレームレート = 60 フレーム/秒、というのが一般的であり、setTimeout で 1/60 秒を指定する代わりなどとも説明されている。 果たしてそうなのか、ということで、テストプログラムを作った。

fps

タイトルにレートと時刻情報を表示する。 時刻情報は引数に渡されてくるミリ秒単位の数値を分・秒に変換したものである。 タイトルというところがみそで、タブを切り替えるなどして様子を観察することができる。

そんなわけで、ブラウン管ディスプレイなど、リフレッシュレートが 60Hz より高い環境においても、問題なく使えそうなことが判明した。

%3 イオングループ

株主優待目当てで所有している株式のうち 3 種類がイオングループなのであった。 株主総会の招集通知の冊子のデザインがそっくり。

それぞれ別々の優待内容になっているところがおもしろい。 今回の統合のニュースがそのとおりに実現されるとすると、マックスバリュ関東はイオンの優待のままなのか、カスミでも優待が使えるようになったりするのか。 ワーナーマイカルがイオンシネマになったのは、ワーナーマイカルをよく使っていたこともあって知っていたし、この前は優待を使ってジュースが飲めた。

来週のイオンの株主総会、場所は幕張メッセらしい。 その近くには、超巨大な「イオンモール幕張新都心」がある。 どれだけ広いのか一度行ってみようと思っているのだが、よくそんな巨大なのをたてて利益が出せるよなぁと。

2014/05/19 のコメントを読む・書く


20 (火)

%1 Lua

世の中には Lua というスクリプト言語があるらしくて、ぱっと見は Ruby 的な雰囲気で書けるんだが (if〜end などの制御構造で end を多用するところが似ている)、C のプログラムから簡単に呼び出せる & C のプログラムを簡単に呼び出せるというのがポイントらしい。 へぇ。 性能も悪くないみたいなので、例の N クイーン問題か何か、プログラムを移植してみるのがいいか。JavaScript より速いというのがにわかに信じがたいが、可読性の低い asm.js と比較するのは酷か。

C と連携しやすいというところを少し調べてみると、C の関数ポインターを簡単に登録できるようになっているのと、Lua に簡単なスタックがあって、それを利用して C から Lua の関数の引数を引っ張り出せるようになっている。 この様子なら、たぶん C から C を呼び出すのでさえも、Lua を経由して行うことができるものと思われる。 そういう特性はなかなか興味深いところで、某 VMM にも、呼び出し先のルーチンが特権レベル 0 か特権レベル 3 かを区別することなく使えるメッセージインターフェイスをこしらえたが、なんかそういう用途にも応用できそうな雰囲気がある。

2014/05/20 のコメントを読む・書く


21 (水)

%1

夕方頃まで雨。 朝はバスのダイヤがだいぶ乱れていることを知って、まぁ出るのも遅かったんだけど、鉄道で。 加速のときに車輪が滑ったかなーと思う瞬間が少しだけあった。 カーブのところが滑りやすいのかな。 古くさい抵抗制御だから本気で滑ると大電流流れて結構まずいことになるのかな。 どう見ても空転検知なんてなさそうだしな。

%2 Calling Lua from C

ドキュメント等を見ながら適当に書くと動く。

$ cat a.c
#if 0
exec \
cc `pkg-config --cflags lua5.2` a.c `pkg-config --libs lua5.2`
#endif
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

static char *hoge = "print('hoge'..1+2+3+4+5);";

main ()
{
  lua_State *L;

  L = luaL_newstate ();
  luaL_openlibs (L);
  printf ("%d\n", luaL_dostring (L, hoge));
  lua_close (L);
}
$ sh a.c
$ ./a.out 
hoge15
0

なるほど簡単である。luaL ってのが打ちにくくてつい小文字で打ってしまうが、the auxiliary library と呼ばれるライブラリーの関数等にこのプリフィックスがついているらしい。 ヘッダーファイルのファイル名の lauxlib.h もまた、思わず打ち間違えそうな名前である。

2014/05/21 のコメントを読む・書く


22 (木)

%1 雨?

朝天気予報を見たら、夕方頃雨が来るかも的な雰囲気の予報だったので、念のため傘を持っていった。 しかし、とてもいい天気で、傘を持っている人は見かけなかった。

午前中、雷の音がしたこともあったが、昼食の時には晴れていてとてもいい天気。 まったく雨が降る気配はなかった。

午後は日が暮れる前に雨が来たっぽくて、外を見ると道路に濡れた跡が見えた。 夕方には黒い雲がやってきていて、これは雨が来るかもね、という感じだったが、結局降らなかったようだ。

そんなわけで、傘を持っていったかいがあって、傘を開く必要はなかった。 天気予報なんていい加減だよね。 というよりは、今日みたいなのは場所によって違いすぎて、このへんの天気予報は割と外れやすいのではないかと思う。 アメダスの今日の降水量を見ると、

っていう感じで地域差が激しい。WWW の天気予報サイトでは細かい地域指定ができるようになっているのが多いが、個人的な印象としては細かい地域指定をしてもあまり変わらない気がしていて、例えば東京府中市と千代田区を比べてもほとんど同じみたいな感じで、千代田区では当たってるのかも知れないがこっちは外れるんだよ、みたいな、そんな感じがしている。 レンタルカートでよく行く藤野や飯能も同じような傾向がある気がする。

%2 Coroutine

Lua では coroutine というのが使える。 これはプリエンプションのないスレッドのようなもので、いや、やっぱスレッドとはちょっと違うんだけど、とにかく、関数の途中でその状態を保持したまま呼び出し元に戻ったり、その状態から再開できるという代物。 おまけにそのときに値の受け渡しもできるというからおもしろい。

何がいいって、PC のエミュレーターとか書いていると、例えば VRAM の内容を読み出してそれにパレットを反映させて表示内容を確定する処理は一連の流れとして書きたい。 しかし、画面の走査途中にパレットを意図的に変化させるようなプログラムを正しく動作させたいとなると、表示内容を確定する処理と命令を実行するタイミングの同期をうまく取りながら処理を進めなければならない。 そういうのを coroutine なし・スレッドなしで書こうとすると、例えば、表示内容を確定する処理を途中で中断できるようにするには、for のループカウンターのような変数までも状態として保持できるようにしなければならず、コードがかなり読みにくくなる。 逆に、命令を実行する処理を途中で中断できるようにする考え方もあり得るが、さらに難しいだろう。 スレッドを使う手はあるのだが、かなり細かく同期を取ることになりそうなので (例えば 10 クロックの命令実行後に 1 ピクセルの画面表示処理、など)、あまり並列に動作することがなく、オーバーヘッドが厳しいのではないかと思っている。 まぁ coroutine も同期無しの連続処理よりはオーバーヘッドがあるだろうけどね。

2014/05/22 のコメントを読む・書く


23 (金)

%1 複々線

中央本線の複々線区間がやたらわかりにくい気がしていたけど、どうやら JR 東日本の都心の複々線全般がわかりにくいらしいことに気が付いてきた。 まず、東京〜新宿〜塩尻〜名古屋の路線名である中央本線の、東京都内の駅である東京〜高尾の旅客線について。

思いつく限りでもこんな感じで訳がわからないのだが、都心にはこんなもんじゃない路線が存在するようだ。

まず、上に出てきた総武本線というのは、東京〜銚子の路線名らしい。 じゃあ御茶ノ水に来ているのは何かと言うと、総武本線の支線なんだとか。 あまりなじみがないので間違えているかも知れないけど。

中央線ユーザーからすると総武線と聞くと御茶ノ水・秋葉原なイメージがあるが、総武線 (快速) はそれとは関係のない路線ということか。 今度は横須賀線というのが出てきたが、これがまたやっかいで、大船〜久里浜の路線名なんだけど、運転系統としては東京からの系統のことを横須賀線と呼んでいるらしい。 東京〜大船は東海道本線というやつである。 それで、詳細を書いてみようかと思ったけど、ここにもまた支線があり、おまけに湘南新宿ラインで新宿方面への直通運転、さらに湘南新宿ラインから埼京線なんてのも出てきて、どんどん話が発展してしまうのでやめておく。 他に、東北本線絡みで高崎線や常磐線もあって、これもかなりややこしい。

詳しくは路線図を見て、いや、路線図見てもさっぱりわからんよねぇ。 路線図では、例えば中央本線や総武本線の表現は使われず、中央・総武線 (各駅停車) が三鷹から千葉まで行くみたいな表記をされちゃってるから、どこどこに行きたいというときに見るのはいいけど、どこからが別の路線なのかとか、日頃の疑問を解決するのには向いてない気がする。

2014/05/23 のコメントを読む・書く


24 (土)

%1 銀行 ATM

IC キャッシュカードで一日あたりの限度額が増えているはず。 これで別の口座にお金を移すのが楽になったはずだ。 今日は、移す分の 50 万円と生活費のプラスアルファをおろしてみよう、と、ピッピッと入力したらだめだった。 よく見ると一度におろせるのは一万円札が最大 50 枚、千円札が最大 100 枚とあった。 それならプラスアルファが千円札ならいいんだろうと思ったがだめだった。 万を押した後は数字の入力すらさせてもらえない。 もちろん、一日あたりの限度額は増えているから、2 回にわけて操作すれば OK だった。 ふうん。

%2 3DMark2000

何となく 3DMark2000 のデモ画面のことを思い出し、人が歩いてきてそれが消えてそれでどうなるんだっけなーみたいな感じで、YouTube で検索したら出てきて、これだー、と。 音楽がかっこいい。 前半と後半の音楽が何となくちゃんとつながっていて、後半どんどん盛り上がってきて、静かになってエンディング、ってのがなんか実によくできてると思う。 映像も何かにインスパイアされたというよりは全体的に意味不明だけどきれいな感じでよい。

3DMark 2000 Demo FullHD (1080p) - YouTube

いま 3DMark2000 をダウンロードしようと思ってもなにやら怪しげなサイトしか出てこない。 うーん。 それで手元の CD-R をあさったら、昔データの運搬に使っていた CD-R に残っていた。 さっそく VirtualBox のゲスト OS の Windows 2000 に入れてみようと思ったが、インストールはできるけど起動しない。Guest Additions が古いせいかと思ってアップデートするときに理由が発覚。Windows 2000 では VirtualBox の Direct3D サポートがインストールできないようだ。 ふうん。

VirtualBox のゲスト OS に Windows 8.1 Preview が残っていたのでそれで試した。 もう期限が切れているらしくて 1 時間で再起動するとか出てきたが、デモは短いのでとりあえず試してみたら、動いた。 動いたが、さすがにかくつくというか、全体的にフレームレートが低い。 あと、音がずれる。 音がちょっと速いような気がする。 不思議な感じ。

AMD C-60 な Windows PC では問題なく動作した。 ふだん使っている 1,024x768 のフルカラーでも極めてスムーズな表示。 まぁよく考えたら 3DMark2000 って SOTEC M350V (PentiumIII Katmai, Voodoo3) でも動いてたくらいだから、省エネ構成とはいえ、当時と比較すれば CPU も GPU も遙かに性能がいいし全く問題ないんだろうな。

やっぱ 3DMark2001 を動かしたいところだが、SE じゃない初期版も CD-R から発掘したので試したんだけどやっぱり動かなかった。

%3 The Other Woman (2009)

テレビでやってた映画。 邦題はなぜか「水曜日のエミリア」。

適当に見てたから間違ってるかも知れないけど、内容的には主人公が子供のいる男と不倫して継母になったものの子供の実の母 (医者) とごたごたあって、新たに生まれた子供は 3 日で死んで、その死因が云々。 主人公の両親までもが離婚だか再婚だかちょっとややこしい。 なんか感動系っぽかったけど波瀾万丈な人物設定の複雑さがかえって現実味を出しているような、そんな感じがした。

2014/05/24 のコメントを読む・書く


25 (日)

%1 レンタルカート

藤野。 耐久レースとワンコイン走行。 耐久レースで 70 分ほど走行し、ワンコインのレンタル走行は 5 分 6 回乗ったので、大変疲れた。

今日は気温も高めで、相模湖あたりは八王子のアメダスが一番近いのかな、それを見るとやはり午前中から摂氏 25 度に達していたらしく、午後も日が照ったり雲に隠れたりで少し変動はするものの、カート走行すると結構暑かった。

2014/05/25 のコメントを読む・書く


26 (月)

%1 乗り換え改札の謎

磁気乗車券 + IC 乗車券の乗り換えに失敗したぞ! どうも挙動をみるかぎり、一部の改札機で磁気乗車券 + IC 乗車券による通過ができないように設定されてるとしか思えない。 というのは、通過できる改札機であれば、磁気乗車券を投入したとき、IC 乗車券読み取り部が青く光ってたのがいったん消えた後再びすぐに光って待っているのだが、通過できない改札機では、消えたままで待っている。 光っていないところに一生懸命タッチしたところで読み取ってはくれない。 でもすぐに拒否るのではなく、もう一枚の磁気乗車券の投入を待っているようにみえる。

よくみたら何か表示がされているのかもしれないが、混乱の元なのでそういう意味不明な区別はやめてほしいね。 とりあえず、車いす対応の幅の広い改札のところは通れるということは覚えた。 あとは、何か表示をさがすか、順番に試すしかあるまい。

%2 筋肉痛

やばい。 手首、腕、太もも、ふくらはぎ、など、いろんなところが筋肉痛。 姿勢によって腰やらおしりやらが痛いのは筋肉痛なのか他の痛みなのかよくわからない。 おかしいなぁ、合計でほんの 100 分そこそこしか乗ってないはず... 100 分!? 普通のレンタル走行だと 20 回分か。 うーむw

夜はひさびさに温泉に行って電気風呂入ったりいろいろしてきた。 マッサージ浴と書かれたところに足を突っ込んでいるのが結構気持ちよかった。 外は冷たい雨が降ってて寒かった。

2014/05/26 のコメントを読む・書く


27 (火)

%1

乗り換え改札の改札機をじろじろ見てみたが特に差異はない。 どういうこっちゃ。

電車の抵抗制御の進段のタイミング、よく電流値がある値になったら次の抵抗にというのだが、電流値じゃなくて電力値じゃないのかなと思った。 電圧は 1,500V と言われるが、乗務員室にある電圧計を見ている限りは、変電所から離れている地点における発進・加速時はぐいぐい下がって 1,300V くらいになってる。 で、そういうときに限って、電流計がいつもよりかなり高い値を指している気がする。 変電所の近くでは電圧はほとんど変化せず、電流計も 0.6kA 以下あたりを保っている感じ。

若干の勾配があるため、上りと下りで電車の加速パターンが違う。 たとえば駅を出てポイント通過するまで 30〜40km/h そこそこなのはだいたい一緒だが、上り方向なら直列最終あたりをキープしたまま通過、下り方向でポイントまで距離があるところは並列まで加速してからノッチオフで通過、みたいな。 あと、最高時速が 80km/h ちょっとらしくて、駅間の長い区間は、上り方向ではノコギリ運転か、並列最終で 80km/h 弱をキープとかだが、下り方向だと惰性で速度が出てしまうので途中でブレーキが使われることも。

%2 F1 モナコ GP

ライコネンがけっこういいところ走ってたのに、SC 中にぶつけられるとはね。 でも SC 中の衝突事故って何かペナルティーとかなかったっけ? どうなってるんだろう。

今年の F1 はギヤ比の変更が年 1 回しかできないので、モナコでも他のサーキットと同じギヤ比での走行である。 ときどき出ていたオンボードカメラの映像を見ても、シフトチェンジが例年ほど頻繁ではないような感じだった。 おそらく 8 速までは使ってなかったんじゃないかな。 ハイブリッドだから、ギヤ比変えなくても去年までよりはタイムの落ち具合は小さいのかも。

今年のフェラーリ、アロンソとライコネンってセッティングが全然違っていそうで、それについてのエンジニアのコメントが見てみたいものである。 このままライコネンがさらに調子をあげてくるようなら、アロンソの開発能力が疑われるところかも知れないが、果たして。

2014/05/27 のコメントを読む・書く


28 (水)

%1 株主総会

初めて参加してみた株主総会。 イオンの。

幕張メッセのホールを一カ所使っているんだけど、受付には行列ができていてさすが大企業。 商品券等が入った袋とペットボトルのお茶 (トップバリュ) をもらえた。 座席は 1,000 席を超える数が用意されているようだった。 へぇー。 報道関係の人も来ているようだった。

これは今回に限ったことだと期待するが、取締役のインサイダー取引関連のお詫びから始まった。 それでまぁ数字の説明、カスミがどうだとかウエルシアがどうだとか、ウエルシア関連で寺島の名前も出てきて元茨城県民にはやたらなじみ深い名前が続く。 あと海外進出が云々、ビデオが流れてそのへんの紹介。 で質疑応答なんだが当然といえば当然なんだろうけど結構長いんだな。 簡潔にわかりやすく質問をする人と、何がなんだかよくわからないような質問をする人がいて、あと、質問は 2 つまでというのにやたら長く突っ込もうとする人もいて、会議長が厳しく制する (?) 場面も。 売買単位数分の株式を権利確定日に持っていれば、一丁前に質問する権利はあるから、いろんな人がいるわけで大変なこった。

その後イオン歴史館というのを見て、前身のジャスコ上場が 40 年前だとかで、その前がまた結構古いようだ。 へぇー。

幕張メッセ内 1 幕張メッセ内 2 会場案内 バスでイオンモールへ向かう株主達 イオンのビル

人の少ない幕張メッセがなんだかコンピューターグラフィックスの練習課題のようでおもしろくて写真を撮った。 イオンのビル、でっかいからこれが本社だろうと思って写真を撮ったが違った。 イオンの建物がいくつあるんだここは。

%2 イオンモール幕張新都心

駐車場が「システムメンテナンスのため」無料開放というので、株主総会の間もありがたく使わせてもらった。

まー巨大というほかないようなショッピングモール。 グランドモールとかいうところで食事をとり、買い物をして、今日だけ使える割引券類を消化。 んでアクティブモールというところに行ってみようと思ったが、なんか遠そうな気がして車を出して移動してみたらちょうどよかったっていうのがでかさを物語っている。 幕張メッセのホールを端から端まで歩くとだいぶ時間がかかるが、それと同じだけ歩いてもグランドモールを歩くのが精一杯で、他に 3 つくらいモールがあるというような感じのでかさだ。 モール間の移動用の無料バスも時々出ているようだが、わかる気がする。 コストコが本当に小さく見える。

アクティブモールなんて、スポーツオーソリティーというスポーツ用品店が大部分を占めている。 普通ショッピングモールというと通路とテナントを思い浮かべると思うんだけど、テナントが全部同じスポーツ用品店で、通路沿いにレジがあるようなイメージ。 別に通路が店なわけじゃないんだけど、商品持ったまま通路歩いてもいいってことだろうなこれは。

%3 行き帰り

行きは高速を使って東関東道の手前まで。 一般道で側道に出るのが早かったかもというのが反省点だが、次にここに来るのはいつの日か。

帰りは首都高まで一般道で行ったら渋滞で時間が掛かった。 首都高に乗ればあとはまっすぐ帰るだけ、と思ってたら、箱崎ジャンクションを目指していたはずが、間違えて箱崎インターチェンジでおりてしまった。 もったいないけど仕方がない。 そこから一般道で帰った。

%4 N クイーン問題の話

xmm やら何やらを使うと速くできるんじゃないかと思っているんだが、とりあえず、AMD64 のアセンブリ言語で書いた。

ソースコード

AMD64 は IA-32 より汎用レジスターが多くて楽だ。or を何回もやっているあたりを xmm とか使ってまとめて書けないかと思っていて、少し調べてみたが xmm を使うための準備に手間取ると意味なさそうだよなぁとか思っている。 あるいは xmm で 4 並列くらいで実行できたらおもしろいのだけど。 これを呼び出す C のプログラムは以下のように書けばよい。

main ()
{
  printf ("%d\n", hoge (15));
}

2014/05/28 のコメントを読む・書く


29 (木)

%1 N クイーン問題の話のつづき

xmm に手を出してはみたが、やはり使い方がはまっていないらしくかなり遅い。16 バイトを一度に読み書きできるのは有効かと思ったが、逆効果だった。

それで、きのうのプログラムをさらにチューンする。 真ん中の列の処理をレジスターを使ってわけていたのを、プログラム自体をわけることでレジスターを一個あけ、条件分岐を単純化。 さらに、新たなレジスターを数個使用して、メモリー書き込み回数の低減を実現。

ソースコード 2

そんなわけなんだけど、例によって今時の CPU の複雑さが見えてきてしまった。 なぜか無駄な処理を入れると速くなるとか、足し算命令の場所をひとつずらすだけで速くなったり遅くなったりするとか (おそらくパイプラインに影響があるのだろう)、コードを穴の開くほど見つめても理解できない性能差が現れている。 計算内容が比較的単純なだけに悔しいところではあるが、バイト数を縮めるのとは訳が違って、勘と経験はあまりあてにならない。

このプログラムは AMD A10-6700 でそこそこいい感じの実行時間になるようにある程度調整したものである。 コンパイラーの仕事には感心すると同時に、最新のコンパイラーでもここまでのチューニングはできていないだろうなという思いもある。 おそらくパフォーマンスカウンターとかそういうのを使えばもっと細かく最適化できると思うが、試行錯誤ではなかなか難しい。

2014/05/29 のコメントを読む・書く


30 (金)

%1 負けたっ

最新のコンパイラーでもここまでのチューニングはできていないだろうな、と、きのうは書いたんだけど、アセンブリ言語とほぼ同じアルゴリズムのコードを C で書いてみたら、すみませんでした負けましたw

実行時間 (N=15):

はぁー。 さすがに -march=native は半端ない。 最初配列を構造体にして書いていて、ようするにそれはアセンブリ言語版とまったく同じデータ構造を使うことになってしまったのだが、それだとここまで速くなかった。 その構造体が 16 バイト長というのがやっかいで、アドレッシングで 16 倍という指定ができないから、アセンブリ言語版は 16 で加減算することによって 16 倍指定を回避していたのだ。 もしやと思って構造体をバラバラにして普通の配列に変えてみたらこの結果だ。 逆アセンブルしてみてみたら、prefetch などの CPU に対する重要なヒントの他、アドレス調整用と思われるいくつかのメモリーオペランド付きの nop や、きのう挑戦しかけて断念した SIMD、さらには blcic という AMD 固有の (Intel にはない) 命令まで使われている。 そういえばそんな命令マニュアルにあったっけ。 はぁー。

コンパイラーのすごいところは、変数名など何も関係が無く、ループの書き方さえもどうでもよくて、変数がどこでどう使われているかを調べ上げた上、効率が良くなるようなプログラムに落としていくところで、そのおかげで、多少順番を入れ替えたり書き方を変えたりしても性能が変化しない。 楽で速い。 移植性も抜群。Emscripten を使えば 1.5 倍の時間で動く JavaScript (asm.js) も作れる。 すばらしい。 はぁー。

%2 映画

テレビでやってた映画「藁の楯」。 読めない。 テレビ欄の宣伝文句は「日本映画史上かつてないスケールのアクション大作」ということだが、そうなのかな。 まーでも大沢たかおとか藤原竜也とか、出演者がすばらしく、やくざより怖い警部補って感じだった。

2014/05/30 のコメントを読む・書く


31 (土)

%1 あっつい日

原付乗ってひょいと出かけたら暑いのなんのって。 しかも武蔵境営業所は売り切れで狛江まで行ったから疲れた。

京王線地下化で陸橋の撤去工事中の場所があって、その近くの交差点はちょっと流れがよくないようだ。 半年くらいはうまく迂回したほうがよさそう。 この暑いのに渋滞は勘弁。 原付だったから引き返すのは楽だったけど。

自宅で今季初冷房使用。 外は摂氏 30 度超。

%2 PC-98 ゲーム

昔 PC-98 の DOS で何度か遊んだシューティングゲームを思い出し、エミュレーターで起動してみた。Promisence Soft の StormySpace というゲームだった。T98-Next だと画面がぐちゃぐちゃになってまともに遊べず、Virtual98 だと何とか遊べるが遅すぎる。 うーん。

他にも当時のゲームで遊べなくなっているのがあるかも知れない。PC-98 エミュレーターももう長いこと調べてないので、最近はもっといいのがあるかも知れないけど。

%3 Iron Man

テレビでやってた映画。 邦題「アイアンマン」。 題名は、鉄の人、あるいは、鉄の男というような意味の英語。

ロボコップ的な雰囲気の金属製のロボットスーツでたたかう映画、かと思っていたがちょっと違った。 主人公は天才的な技術を持った女たらしの社長というような感じの設定で、その主人公が悪者につかまり追いつめられて、超強いロボットスーツを作る的な流れ。 もちろんフィクションなのでいろいろと非現実的なところは多いけど、そこから正義のために悪に立ち向かうというようなストーリーが思ってたよりいい感じだった。 最後はロボコップと似ているかな。 いや、似てないんだけどね、なんかこう、主人公が最高に盛り上げて終わる的なところが。

2014/05/31 のコメントを読む・書く


Powered by Tomsoft Diary System 1.7.4

/var/log/hdk.log コメント一覧

トップ / 日記索引 / 日記 (2014 年 5 月)

Hideki EIRAKU