コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2006年8月15日 >>> 2006年8月2日
link もっと後

2006年8月15日

ドコモミーティング、仕事内容がちょっと変わったので、今週末までは忙しくなりそうです。

明日から横須賀に出張です。
前回の出張は、ドラムバッグ(こんな感じ)を使いました。底板がなくなっていて、横須賀まで持って行くのに苦労しましたよ。底板がないまま持ち上げると、中央部分の重さを支えきれず三日月状に変形してしまうのです。それが歩く度に足にまとわりついてきて、もー邪魔で邪魔で。あれは参ったな。

今回はスーツケースがある(つーか、今日買った)ので安心です。引っ張って歩けるって素晴らしい!プラスチック製は高いから、ナイロン製にしちゃったんですが、雨が心配です…。

編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月14日

研究室でCDを使った簡易分光器の話をしたら、榮樂氏が興味津々なご様子。家に帰ってから、久しぶりに押し入れから引っ張り出してきました。あらためて見るとしょぼさが際だってます。でもまあ、こういう類の工作は作ってるときが一番ノリノリで楽しいのさ。
以下は簡易分光器の写真です。クリックすると拡大します。

簡易分光器

もう一つ。この分光器で見えるスペクトルを頑張って撮影しました。左が蛍光灯で、右が太陽光です。あまり上手く写りませんでした…。
蛍光灯はHgの輝線スペクトルかなんかが出てるなあ、って感じ。太陽光はもやーっとした感じです。以下の写真はクリックすると拡大します。

蛍光灯のスペクトル   太陽光のスペクトル

写真は全て携帯で撮ったのですが、かなりザラザラになってしまいました。N902iSって感度が高いのか?とりあえず、F506iのように激しく手ぶれしないからOK牧場。

劇場版ドラえもん(とその原作の大長編ドラえもん)って何作あるんだろうと思って、頑張って調べて、以下のような表を作ったが、実はWikipediaや劇場版ドラえもんの公式サイト同じことがもっと詳しく書いてあった。くやしい。

気を取り直して表を見ると、子供の時に「なんでドラえもんの映画っていつもやってるんだ。」なんてぼんやりと思っていた疑問が気のせいではなく、本当に毎年新作が出ているだけだったことに気づきました。これほど定期的に上映しているとは知りませんでした。
ということは毎年一本は映画の原作考えるってこと?すげー。藤子・F・不二雄さんは偉大ですね。

大長編ドラえもん一覧(括弧内は劇場版の放映年)

01. (1980年)のび太の恐竜
02. (1981年)のび太の宇宙開拓史
03. (1982年)のび太の大魔境
04. (1983年)のび太の海底鬼岩城
05. (1984年)のび太の魔界大冒険
06. (1985年)のび太の宇宙小戦争
07. (1986年)のび太と鉄人兵団
08. (1987年)のび太と竜の騎士
    (1988年)のび太のパラレル西遊記(漫画の原作なし)
09. (1989年)のび太の日本誕生
10. (1990年)のび太とアニマル惑星
11. (1991年)のび太のドラビアンナイト
12. (1992年)のび太と雲の王国
13. (1993年)のび太とブリキの迷宮(ラビリンス)
14. (1994年)のび太と夢幻三剣士
15. (1995年)のび太の創世日記
16. (1996年)のび太と銀河超特急(エクスプレス)
17. (1997年)のび太のねじ巻き都市(シティー)冒険記
18. (1998年)のび太の南海大冒険
19. (1999年)のび太の宇宙漂流記
20. (2000年)のび太の太陽王伝説
21. (2001年)のび太と翼の勇者たち
22. (2002年)のび太とロボット王国
23. (2003年)のび太とふしぎ風使い
24. (2004年)のび太のワンニャン時空伝
編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月13日

カネボウフーズのフワリンカというお菓子が、去年の8月くらいに発売されました。ガムとソフトキャンディの2タイプあって、食べると体から良いにおいがするそうです。ガムならバラ、ソフトキャンディならバニラの香りです。
こりゃ面白そう、とコンビニを探したんですがあるのはガムばかりで、ソフトキャンディがありませんでした。ガムを試したけど、自分自身の匂いの変化は感じないので、効果があるんだかないんだか良くわからなくて、がっかりでした。

そんなこんなで、一年ほど忘れていたんですが、今日桜のドラッグ寺島でフワリンカのソフトキャンディを偶然発見。寺島ナイスじゃ。
去年を思い出して嬉しくなって、つい4つも買ってしまいました。ガムのときの過ちを生かして、今度は誰かと会うときに食べようと思います。

ここのところ大抵、夜はドコモ関連のお仕事をせかせかやっています。気づいたら朝になっていて、昼夜逆転生活enjoy中だぜー。締め切りは14日なんですが、もう絶対に間に合わないので寝ます。おやすみ。

編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月12日

塚田氏の髪染めを手伝いました。なにぶん初めてなもので、染まり方がむらになってないと良いんですが…。染髪料を混合したあと、白からどんどん紫色に変色していく様がちょっとキモかった。

染めている合間に、Windows Live Messenger iアプリ版を試しました。FOMA 900i以降に対応しているそうです。ちーっとばかり打つのが面倒くさいですが、携帯音楽プレーヤやゲームと違って音が出ないから、電車の中で使っても迷惑にならないのが良い点です。
アプリの性質上、頻繁に通信するので、Messengerを今後も使うぜって方はパケホーダイをお勧めします。後で請求書見て驚いても知らんぞ。

夜はトリックスター+を塚田氏とプレイしたあと、二人でゆきむら亭でラーメンを食しました。塚田氏は明日コミケに行くんだと言っていました。

編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月7日

timeBeginPeriod() APIの挙動

昔書いた記事の供養です。2006/04/15加筆修正したもので、現在もこの情報が正しいかどうかは不明です。

Windows APIに、マルチメディアタイマーの最小分解能を指定するtimeBeginPeriod() という関数があります。使ってみたところ、こやつはかなり挙動不審です。本ページに気づいた点をまとめました。またタイマーと分解能について、解説を加筆いたしました。ご参考になれば幸いです。

※当方の環境はWindows 2000 SP4 with VC++ 6.0 SP5です。Windows 9x系はカーネル等が根本的に異なるため、この限りではありません。

Windowsのタイマー

Windowsには2種類のタイマーがあります。

  • SetTimer() APIによる標準タイマー
  • timeSetEvent() APIによるマルチメディアタイマー

です。同様に、システム時刻の取得にもいくつかの手法があります。

  • time() ライブラリ関数
  • GetTickCount() APIによるシステム稼働時間(msオーダ)
  • timeGetTime() APIによる最大1msの分解能を持つカウンタ
  • QueryPerformanceCounter() APIで取得できる3MHz程度の高分解能カウンタ

などがあります。カウンタの値が現在時刻など特定の意味を持つとは限らず、差分として用いることにだけ意味があるカウンタ(高分解能カウンタがそう)もあります。自分のシステムで、現在時刻と一致したからといって他のシステムでも同じとは限りません。ここではそれぞれのAPIの詳細を述べることはしません。

分解能について

先ほど述べたtimeGetTime() APIで得られる値はms単位ですが、分解能を変更することができます。分解能というのはなんでしょうか?もう少し説明しましょう。アナログ(デジタルでも構いませんが)時計を思い浮かべてください。

このとき分解能は時計の針が一度にどれだけ進むかに相当します。分解能を細かくすると、1秒に一度1/60度だけ進む律儀な時計になり、分解能を荒くすると、5秒に一度1/12(= 5/60) 度だけ進むルーズな時計になります。

分解能の適正な値は用途によって異なります。普段の生活では腕時計(1秒の分解能)で十分ですが、短距離走のタイムを計るときに腕時計は使いません。短距離走は1秒以下のタイムで勝負が決しますが、1秒以下の値を指せない腕時計では秒以下のタイムが計れないからです。用途に合った分解能を持つ時計、例えばストップウォッチ(分解能10ms程度)を用います。

同様にコンピュータのタイマーも用途に合った分解能を用います。常に最も分解能の細かいカウンタを用いても良いですが、ストップウォッチが高価なように高分解能のカウンタには制約がある場合があります。例えばWindowsの高分解能カウンターは非常に大きな値を返すため、少し処理が複雑です。適材適所が良いでしょう。

高分解能にこだわる理由

分解能が荒いとゲーム製作で非常に難儀します。60fpsにおいて、1フレームが消費する時間は16.67msです。Windows 2000では初期値の分解能が10msのため、16ms待ちたくてSleep(16) としても20ms待ってしまいます。Sleep(n) がきちんとn[ms] で返ってこなければ60fpsより低い、あるいは高いフレーム数になってしまいます。

高分解能カウンタをスピンウェイト(全力でポーリングして監視する方法)は最も正確ですが、ゲームの処理を終えて時間が余ったとしても、時間の経過を待つ作業でCPU資源を浪費するため、省電力などの観点から見てもあまりよろしくありません。時間が過ぎるのを待つだけの処理なのですから、Sleep() 関数を呼び他のプロセスに実行権を譲りCPU負荷を減らすのが道理です。

timeBeginPeriod() の不思議な挙動

冒頭で述べたとおりtimeGetTime() の分解能は最大で1msですが、Windows 2000では分解能の初期値は10msです。変更するにはtimeBeginPeriod() APIを用います。timeBeginPeriod() を呼び出せば、当然分解能が変更されます。

実験していると不思議なことが2つあって、1つ目はtimeBeginPeriod() を呼び出す前から、分解能の初期値が1msになっていることで、2つ目は副スレッドからtimeBeginPeriod() を呼び出してもtimeBeginPeriod() が機能していないようにみえることです。

調べるとMSN Messenger 6.1が起動していると最小分解能が変化することがわかりました。あるプロセスでtimeBeginPeriod() を呼ぶと他のプロセスに影響するのではないでしょうか?

実験結果 - 他プロセスとの関係

自作のtimeBeginPeriod() を呼ぶプログラムで実験すると、timeBeginPeriod() は最も細かい分解能を「システム全体に」適用することがわかります。

あるプロセスがtimeBeginPeriod() を呼び出し最小分解能を指定した後、他のプロセスがtimeBeginPeriod() を使用すると最小分解能はその値に上書きされます。後に起動したプロセスが終了しても最小分解能は元に戻りません。最小分解能を1msに設定して、その後5msに設定しても分解能が変化しません。

例外として10ms以上の値を指定すると、他のプロセスに最小分解能を上書きされなくなります。しかし最小分解能は10ms固定になります。

もしtimeEndPeriod() を呼ばずに終了する「行儀の悪い」プログラムがあったときは、プロセスが終了すればtimeEndPeriod() を呼んだときと同様に分解能の変更が無効化されます。

全くtimeBeginPeriod() を呼び出さないプロセスの場合は、他プロセスがtimeBeginPeriod() の呼び出しの影響を受け分解能が変化しますが、timeBeginPeriod() 呼んでいた他のプロセスが全て終了すると初期値の10msに戻ります。

実験結果 - マルチスレッド環境における振る舞い

プロセスに複数のスレッドがある場合、メインスレッドからtimeBeginPeriod() を呼ばないと効果がないようです。関数の帰り値は分解能の変更に成功したと報告しますが、最小分解能は変化しません。

ちなみにこの現象は、後述するプログラムでは確認できません。ごめんなさい。

実験結果 - timeEndPeriod() APIの効力

同一プロセス、同一スレッド内でtimeEndPeriod() を呼び出した場合「だけ」最小分解能の指定が解除されます。この条件下ではネストした指定も可能です。例えばbegin(3) begin(2) begin(1) end(2) end(1) とすると、内側にある1msの設定と2msの設定が解除されて、3msの設定に戻ります。

しかし他にtimeBeginPeriod() を利用するプロセスが1つでも存在すると、timeEndPeriod() は機能しません。

結論

最小分解能が変化すると困る場合は、指定できる最も細かい分解能(timeGetDevCaps() APIで取得できます)以外の値は指定しないほうが良いでしょう。途中で他のプロセスに影響されて変わってしまうかもしれません。

Windowsでどこまで計れるか?

脱線話ですが、Windows上で得られる最高の分解能が気になる方もいるかと思います。

おそらくWindows 2000において最も細かい分解能を持つのは高分解能カウンタです。周波数は約3.5MHzで、分解能に直せば300ns程度です。ただしここまで細かい間隔だと、CPUが十分に速くないと取りこぼしてしまいそうです。

近年のOSはカーネルが任意の地点で実行権を取り上げて他のプロセスに渡せる(プリエンプティブ)ため、Windowsは正確なリアルタイム処理には向きません。UNIXなども同様の理由でリアルタイム処理には用いません。しかし最近は組み込み機器向けにリアルタイム処理に対応したLinuxが登場しています。

それとですね……書いた後で気づきましたが、PSX Alternative! にも当ページと同様の実験が紹介されていました。実験方法は違います(向こうはSleep(1) にかかる時間を見ている)が、やはり同様にtimeBeginPeriod() はおかしいと指摘していました。

検証方法

検証方法と用いたプログラムは以下の通りです。

ビジーループしてtimeGetTime() で取得できるカウンターの差分が最小分解能と一致しているか確かめます。最小分解能は高々1msであること、ループに1ms以上かからないことを仮定しています。

検証用プログラム

// mmtimer.c

#include <stdio.h>
#include <windows.h>

int main()
{
  unsigned long mmt, mmt_b;

  timeBeginPeriod(1);
  mmt = mmt_b = 0;
  while (true) {
    mmt = timeGetTime();
    if (mmt != mmt_b)
      printf("%d ms\n", mmt - mmt_b);

    mmt_b = mmt;
  }

  timeEndPeriod(1);
  return 0;
}

結果は以下のとおりです。

実行結果
%./mmtimer↓
・
・
1 ms↓
1 ms↓
1 ms↓
1 ms↓
1 ms↓
・
・

値の変化が1msであることがわかると思います。

おまけ

昔書いたメモを発掘したので、これも供養しておきます。

QueryPerformanceCounter() とQueryPerformanceFrequency() の使い方

LARGE_INTEGER freq;
LARGE_INTEGER st, ed;

QueryPerformanceFrequency(&freq);

QueryPerformanceCounter(&st);
Sleep(100);
QueryPerformanceCounter(&ed);

簡単なAPIではありますが、動作チェックはしていませんのでご注意ください。

編集者:すずき(2023/07/08 22:09)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月6日

立命(高校)のみんなと食事&カラオケ。少なくとも半年空いてるので、毎回すごーく久しぶりに会った気がします。高校卒業からだいぶ経つけど、みんな良い意味で変わってないよ。ずっとこうやって集まりたいね。

昨日の日記で泣くとか泣かないとか書いて思い出した。私はけっこう涙もろくて、特に一人で感動モノ見ると泣けて仕方ないです。仕方なさ過ぎて、頬を涙が伝います。
映画なんかでもOKですが、短い文章の方が良いかも。これって普段のイメージ(って自分じゃわからんけど)からすると当然?意外?

編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月5日

母方の祖母のお見舞いに行きました。ペースメーカーを埋めると聞いていて不安でしたが、結局埋めないそうです。微妙な状態なんでしょうけど、医者が要らんって言うなら要らんのでしょう。

テレビでSWING GIRLSをやっていたので、鑑賞。おかっぱの人(パーカッション)がすげー。ジャズってサックスがカッコいいねえ。

実家でボーっとしててと、ふと思った。働き始めるとまとまった休みはないから、今年の冬って北海道に長期間帰省できる最後の機会じゃね?今年の冬は感慨深いものになるはず……ってのはちと大げさか?
別れは悲しいものですが、私は死別でもなければあまり気にならないかも。卒業式とかお別れ会で全く泣かないタイプです。

編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月4日

母と妹が出かけたので、父方のばーさまと一緒に留守番でした。昼頃、ばーさまが財布がないとか言って、家捜しを始め、しまいには父(つまりばーさまの息子)に盗られたとか言い始める。なんだかな…。

ついに半年分のジャンプを全部読み終えたぞお。長かった。

編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月3日

母はコンピュータ関連の話に理解があるので、ルータや無線LAN環境の購入許可がさらっと得られました。おかげで実家のネットワーク環境がかなり充実しております。
今日も、妹の転入届を出しに札幌市北区役所へ行くついでに、ベスト電器で無線LANルータを買ってきました。これできしめんみたいなLANケーブルとおさらばです。

さらに聞いたらADSLを1.5Mbpsタイプから8Mbpsタイプに(4〜5Mbpsしか出ないかも?)する許可も得られたのですが、契約書が見つからなくて契約変更できず。それほど必要性も感じないからまあいいか。

編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年8月2日

ゲド戦記を見に行きました。小難しいし、急展開すぎてよくわかんないなあ…。見に行く前に期待しすぎたのかなあ…。

ボクシングWBAライトフライ級、あの判定は素人目にも贔屓しすぎに映りました。でも負けちゃうとTBSが既に組んである大晦日の防衛戦とか、地元でやる優勝パレードがパアになりますから、大人の事情で勝たせないといかんのよね。
マスコミのいい食い物ってやつでしょうか。願わくば次の防衛戦でボッコボコにされて使い捨て、なんてことにならないことを。

編集者:すずき(2006/11/19 16:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2006年8月15日 >>> 2006年8月2日
link もっと後

管理用メニュー

link 記事を新規作成

<2006>
<<<08>>>
--12345
6789101112
13141516171819
20212223242526
2728293031--

最近のコメント5件

  • link 21年3月13日
    すずきさん (03/05 15:13)
    「あー、このプログラムがまずいんですね。ご...」
  • link 21年3月13日
    emkさん (03/05 12:44)
    「キャストでvolatileを外してアクセ...」
  • link 24年1月24日
    すずきさん (02/19 18:37)
    「簡単にできる方法はPowerShellの...」
  • link 24年1月24日
    KKKさん (02/19 02:30)
    「追伸です。\nネットで調べたらマイクロソ...」
  • link 24年1月24日
    KKKさん (02/19 02:25)
    「私もエラーで困ってます\n手動での回復パ...」

最近の記事3件

  • link 24年3月25日
    すずき (03/26 03:20)
    「[Might and Magic Book One TASのその後] 目次: Might and Magicファミコン版以前(...」
  • link 21年10月4日
    すずき (03/26 03:14)
    「[Might and Magicファミコン版 - まとめリンク] 目次: Might and Magicファミコン版TASに挑...」
  • link 24年3月19日
    すずき (03/20 02:52)
    「[モジュラージャックの規格] 古くは電話線で、今だとEthernetで良く見かけるモジュラージャックというコネクタとレセプタク...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 03/26 03:20