Landscape トップページ | < 前の月 2006-04 2006-05 次の月 2006-06 >

Landscape - エンジニアのメモ 2006-05

月ごとの記事一覧
2007年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2006年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2005年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2004年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2003年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2002年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
日ごとのページ
2006-05/ 1日 2日 3日 4日 5日 6日 7日 8日 9日 10日 11日 12日 13日 14日 15日 16日 17日 18日 19日 20日 21日 22日 23日 24日 25日 26日 27日 28日 29日 30日 31日

2006-05-30 (Tue)

* 至上命題ではなく至上命令

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

「至上命題」は誤用。正しくは「至上命令」。ただ、「至上命題」でも間違いとは言い切れない。

- エンジニアの至上命令

仕事場で配られた資料の中に、以下の一文があった。

開発依頼者の要求を正しくシステムに反映させるということは、どのシステムにおいても、エンジニアの至上命令と考えます。

上記の文を読んでふと思った。「至上命令」って言葉はあるの? 最優先の課題ということを表現したいならば、「至上命題」なのでは? そう思って、独特の表現で有名な金田一京助の「新明解国語辞典 第四版」を引くと、至上命題という言葉が載っていない。

一方、至上命令は「至上」のところに載っている。

しじょう 【至上】
他のすべてのものの上位に位置する(ものと考える)こと。「―の喜び・芸術―主義」

【―命令】
そのときどうしても従わなければならない命令。「操業の安定は企業の―だ」

もしかして、至上命題という言葉は存在しないの? ただ、「命題」の二つめの意味として「課題」という意味は載っている。

【命題】
課せられた・(自らに課した) 問題。「―の解明に当たる」

両方組み合わせて考えると、「至上命題」でも意味は通る。でも、どうなんだろう? もしかして「至上命題」は間違いなの? 一応ウェブを検索してみると、「至上命題」は「至上命令」の誤用と説明しているサイトがいくつかあった。そうなんだ。知らなかった。たぶん私も間違って使ったことがあるだろうなあ。

- 至上命題と至上命令の使い分け

個人的には、「至上命題」だと自発的な感じが強いし、問題の本質に迫っている印象を受ける。一方、「至上命令」だと、単に命令されてやらされているという意味合いが「至上命題」よりも強い感じがする。それぞれ別の意味の語というとらえ方だ。

「至上命題」が広く誤用されている言葉ならばそのうち辞書に載るだろう。独壇場 (どくだんじょう) と独擅場 (どくせんじょう) みたいにね。あ、でも読み方の変化は比較的辞書に載りやすい気がするけど、意味の変化は載りにくいんだよなあ。たとえば「確信犯」。故意にやっている犯罪という意味は載っていない。あとは、「姑息」。一時しのぎという本来の意味は載っているが、卑怯という意味は載っていない。

2006-05-28 (Sun)

* 伝票からの仕訳日計表の作成と総勘定元帳への転記

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [簿記]

簿記における伝票の処理と、総勘定元帳への転記の手順についてのメモ。要するに、どうやって伝票を処理して、それを間違いなく帳簿に反映させるかという手順。

- 仕訳日計表の作成と総勘定元帳への転記の手順

1. 伝票を集計。
2. 集計内容を仕訳日計表にまとめる。
3. まとめた内容を総勘定元帳や補助簿に転記する。

以下、各手順について。

- 伝票を集計

伝票の仕訳を書き出す。伝票の内容が単純な場合は仕訳を書き出さなくても良い。しかし、たとえば「なお、当店は仕入と売上はすべて掛でおこなっている」などと前提がある場合は、買掛金と売掛金が絡んでくる。仕訳日計表の作成時の見落しを避けるため、仕訳を書き出した方がいい。

- 日計表にまとめる

勘定科目と金額と元丁のページ番号を仕訳日計表に書き出す。日計表に記入する順番については、とくに明確に決められていない模様。私は総勘定元帳の各勘定科目のページ番号順や出現順で記入している。日計表の借方と貸方の合計は一致する。

- 総勘定元帳や補助簿に転記

まとめた内容を総勘定元帳や補助簿に転記する。

仕訳日計表の右肩のにページ番号があるので、これを仕丁欄に記入する。日付欄のうち、日にちの部分は同上記号 (〃) を使っても良い。摘要欄では使わない。得意先元帳 (売掛金元帳。得意先別の入出金を記入する。) や、仕入先元帳 (買掛金元帳) などがあれば、それらにも転記する。

- 伝票、仕訳日計表、総勘定元帳の文法 (?) と意味を覚え、作成の手順を身につける

伝票、仕訳日計表、総勘定元帳のどこに何が書いてあって、それぞれどんな意味なのかを理解すれば、簿記における伝票や仕訳日計表の問題はかなり簡単。取引は非常にシンプルなので仕訳も簡単。複雑な有価証券や決算整理仕訳もない。

ただ、最初は非常に取っつきが悪い。問題集の解答の仕訳日計表や総勘定元帳を見ても、そこにたどり着くための過程がよくわからない。理解するためには、解説を読んで一つ一つトレースしていく必要がある。要するにデバッガでステップ実行する必要があるってことだ。ここら辺はテキストで学ぶよりも、人に教わった方がいいところだなあ。

2006-05-26 (Fri)

* 三国志大戦サウンドトラックの発売が決定

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ゲーム] [音楽] [三国志大戦]

セガのネットワーク対戦型シミュレーションゲーム「三国志大戦」のサウンドトラックが発売されるとのこと。購入するかどうかかなり迷っている。

三国志大戦 オリジナル サウンドトラック

三国志大戦1と三国志大戦2の曲を収録し、全25曲入り。発売日は2006年6月29日 (木) で、価格は税込み2800円。上記のセガダイレクトのサイトで曲目リストがあるが、正直どれがどれだかよくわからない。1. Main Title とか 15. Victory とかはわかるけど、Rave Racer みたいに曲名がでるわけじゃないので、名前と曲が一致しない。曲名もこの CD 用に付けたんだろうしね。8. Single Combat って、ひょっとして一騎打ちのこと? それとも一人プレイ用モードの曲?

実際にゲームセンターで聴いた三国志大戦1の曲はリズム重視で、中華風の味は楽器の音色とメロディにちょっとだけ入ってる感じ。でも、トランスやドラムンベースに分類するほどではない。全体としては、戦闘を連想させる力強さを感じさせる曲だ。

トレーディングカードを使った操作システムといい、ネットワークで通信対戦できる機能といい、三国志大戦はかなりいいゲーム。今はかなり疎遠になってしまったが、最近メジャーバージョンアップした三国志大戦2もリリースされた。時間ができたら、また見に行こうかな。

2006-05-24 (Wed)

* タスクマネージャのネットワークのタブを常にアクティブにする

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Windows] [ネットワーク]

Windows のタスクマネージャの「ネットワーク」タブで、「タブを常にアクティブにする(T)」を選択しておけば、タスクマネージャ起動直後から計測している状態にできる。

- タスクマネージャのネットワークタブは一度選択してからでないと計測がおこなわれない

タスクマネージャは、マシンのリソースの使用状況や起動中のプロセスを表示するツールだ。WidnowsXP や Windows Server 2003 では、タスクマネージャに機能追加が行われて、「ネットワーク」というタブが追加された。「ネットワーク」タブではマシンのネットワークインターフェイスのトラフィックを表示することができるようになった。

しかし、「ネットワーク」タブには不便な点がある。タスクマネージャを起動した後、一度「ネットワーク」タブを選択してからでないと計測を開始しないのだ。計測には負荷がかかるからこういう仕様なんだろうが、手間がかかる。可能なら、タスクマネージャ起動直後から計測をしていてほしい。

最近、この不便さを解消する設定項目を見つけた。

- タスクマネージャのネットワークタブを常にアクティブにして、常に計測状態にする

タスクマネージャのネットワークタブを常にアクティブにして、タスクマネージャ起動直後から計測状態にする方法。

1. タスクマネージャの「ネットワーク」タブを開く。
2. オプション(O) の「タブを常にアクティブにする(T)」を選択する。

たったこれだけ。

- 「オプション」の項目が動的に変化することに気づかなかった

なぜこんな簡単な手順に気づかなかったか。その理由は、タスクマネージャのオプションを選んだときに表示される項目は、現在表示しているタブによって動的に変化するからだ。

また、タスクマネージャのユーザーインターフェイスは表示系の設定は「表示 (V)」で、その他の設定は「オプション(O)」で設定するため、私にはわかりにくかった。また、ある程度使い慣れたツールなので、まさかそんなオプションがあるとは思わなかったということもある。

ユーザーインターフェイスの設計ってやっぱり難しいなあ。今回の場合、どうなっていれば私は迷わなかったんだろう? 一覧性のあるオプション設定画面でもあれば良かったのかな。

2006-05-22 (Mon)

* Solaris で一枚の NIC に複数の IP アドレスを設定する

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ネットワーク]

Solaris で一枚の NIC に複数の IP アドレスを設定する方法のメモ。論理的インターフェイスとか、仮想インターフェイスと呼んだりするもの。

- 対象マシンと OS

対象はいつもの Solaris 2.6 マシン。2006-05-11 の「Squid と Squirm でリダイレクタ付き SSL リバースプロキシ」で、SSL 用に IP アドレスを追加する必要が出たので設定。

$ uname -a
SunOS lodis 5.6 Generic_105181-32 sun4u sparc SUNW,Ultra-1

ネットワークインターフェイス (NIC) の情報は以下の通り。でも、これだけだと何もわからないなあ。

$ dmesg

(略)

SUNW,hme0: FEPS (Rev Id = 22) Found
SUNW,hme0 at sbus0: SBus0 slot 0xe offset 0x8c00000 and slot 0xe offset 0x8c02000 and slot 0xe offset 0x8c04000 and slot 0xe offset 0x8c06000 and slot 0xe offset 0x8c07000 Onboard device sparc9 ipl 6
SUNW,hme0 is /sbus@1f,0/SUNW,hme@e,8c00000
SUNW,hme0: Using Internal Transceiver
SUNW,hme0: 100 Mbps full-duplex Link Up

作業前に ifconfig して現在の状況を確認。

$ /sbin/ifconfig -a
lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232
        inet 127.0.0.1 netmask ff000000
hme0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500
        inet 10.64.128.202 netmask ffffff00 broadcast 10.64.128.255

- 論理インターフェイスの追加

まず、ホスト名定義ファイルを /etc に追加。ファイル名の書式は hostname.IF:N で、IF にインターフェイス名、N に 1 から始まる番号を入れる。私の環境だったら以下のようにした。

# echo ivalice >/etc/hostname.hme0:1

その後、ifconfig インターフェイスの作成と有効化。ブロードキャストアドレスはサブネットマスクから計算してくれるようなので明示的には指定していない。

# ifconfig hme0:1 10.64.128.204 netmask 255.255.255.0 up

ifconifg して確認。できてるできてる。

# ifconfig -a
lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232
        inet 127.0.0.1 netmask ff000000
hme0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500
        inet 10.64.128.202 netmask ffffff00 broadcast 10.64.128.255
        ether 8:0:20:86:c3:47
hme0:1: flags=843<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 10.64.128.204 netmask ffffff00 broadcast 10.64.128.255

再起動後もこのインターフェイスが必要なので、起動スクリプトに追加しておきたい。でも、Solaris ではどこが適切なんだろう? ランレベル3のときに起動する Squid のためだけのインターフェイスなので、/etc/init.d に追加して /etc/rc3.d にシンボリックリンクを作ってもいいのだが、どちらかというとシステム系の設定だから、別のところがいいんだろうなあ。調査中。

- 論理インターフェイスの無効化

インターフェイスを無効化するには down を付けて ifconfig する。

# ifconfig hme0:1 0 down

確認すると、インターフェイスが無くなっている。これでよしと。

# ifconfig -a
lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232
        inet 127.0.0.1 netmask ff000000
hme0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500
        inet 10.64.128.202 netmask ffffff00 broadcast 10.64.128.255
        ether 64:64:64:64:64:64

- man ifconfig

参考にした ifconfig の man page。

LOGICAL INTERFACES
    Solaris TCP/IP allows  multiple  logical  interfaces  to  be
    associated with a physical network interface.  This allows a
    single machine to be assigned multiple  IP  addresses,  even
    though  it  may  have  only one network interface.  Physical
    network  interfaces  have  names  of  the  form  driver-name
    physical-unit-number, while logical interfaces have names of
    the  form  driver-name  physical-unit-number:logical-unit-
    number.  A physical interface is configured into the system
    using the plumb sub-command.  For example:

          ifconfig le0 plumb

    Logical interfaces do not need to be "plumbed".  Once a phy-
    sical interface has been "plumbed", logical interfaces asso-
    ciated with the physical interface can be configured by nam-
    ing  them  in  subsequent  ifconfig commands.  However, only
    root can create or delete a logical interface.  For example,
    when executed by root the command:

          ifconfig le0:1

    allocates a logical interface associated with  the  physical
    interface  le0  and  reports its status.  When executed by a
    non-privileged user, ifconfig will report the status of  the
    interface  if it already exists, or give an error message if
    it does not exist.

    A  logical  interface  can  be  configured  with  parameters
    (address,  netmask,  and  so on) different from the physical
    interface with which it is associated.  Logical  interfaces
    that  are associated with the same physical interface can be
    given different parameters as well.  Each logical  interface
    must be associated with a physical interface.  So, for exam-
    ple, the logical interface  le0:1  can  only  be  configured
    after the physical interface le0 has been plumbed.

    To delete a logical interface,  simply  name  the  interface
    specifying  an  address of 0, after ensuring that the inter-
    face has been marked as "down".  For example, the command:

          ifconfig le0:1 0 down

    will delete the logical interface le0:1.

- 失敗

調査の過程で /etc/hostname.IF:N ファイルを作らず、かつサブネットマスクを指定せず、そのうえ N に2を指定してテキトーに ifconfig してみた。

# ifconfig hostname.hme0:2 10.64.128.204 up

すると、ターミナルが反応しなくなった。ネットワークが全部切断されてるようだ。このテストマシンはキーボードもディスプレイも接続していないので、対処する方法がない。仕方ないので電源をプチって切りました。ごめんなさいごめんなさい。

2006-05-20 (Sat)

* ねるねるねるね のアスキーアート

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [2ch] [アスキーアート]

ベルフーズ (現カネボウフーズ) のお菓子「ねるねるねるね」の CM のアスキーアート。

241 :名無しサンプリング@48kHz [sage] :2006/04/16(日) 09:54:44 ID:F1iPKsly
ねるねるねるねは・・イッヒッヒッヒッヒ

練れば練るほど色が変わって
こうやってつけて


            *
         *_▲_*
ウマイ━━━*━ヘ(゚∀゚)ヘ━*━━━━!!!!  チャーラッチャラー!!


練っておいしいねるねるね〜るねっ♪

CM に出ていた魔女のお婆さんを再現してる感じはあまりしないね。魔女の帽子くらいかな。でも、* でバックの電飾を表現してるところが好き。

「うまい!」の効果音は人によって表現が千差万別だろう。私の場合は「てー れって れー」かな。ファミ通の4コマでユウジローがそう表現してたのが伝染った。

よりオリジナルに近い見た目でアスキーアートを鑑賞するには、以下をクリックしてください。フォントの種類や行間の指定などを解除できます。
スタイルシート解除の Bookmarklet (クリックして実行)

2006-05-19 (Fri)

* clover / 葉月ゆら レビュー

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [音楽]

葉月ゆらさんのセカンドアルバム clover のレビュー。

- 葉月ゆら セカンドアルバム clover

CloverClover

葉月ゆら
発売日: 2006/01/27


amazon で詳しく見る

clover は、インディーズでたくさん活動している葉月ゆら (はつき ゆら) さんのセカンドアルバム。

読書記録 ChangeLog のうぞよとさんが http://dkiroku.com/2005-05-23-41.html で11曲目の「こねこのぜんしん」の Flash をメモしていて、そこから葉月ゆらさんの公式サイト「カルチェラタン * Quartier Latin」 http://hatukiyura.sakura.ne.jp/ を知った。

公式サイトで楽曲をたくさん試聴しているうちに CD がほしくなった。で、2005年の11月頃にちょうどファーストアルバム「Honey Bee」 の再販とセカンドアルバム「clover」のリリースを同時にやるという告知がなされた。ちょっと悩んだけど、圧縮された mp3 じゃない音源で聴きたいし、いい音楽を作る人にはお金を払っておきたいと思い、2枚まとめて通販で注文した。

葉月ゆらさんのアルバムは今でこそ amazon で簡単に買えるけど、最初は通販だけだった。決済もクレジットカードじゃなくて銀行振り込みでちょっと面倒。もっとも、その分初回限定のセル画ジャケット仕様盤を手に入れることができた。CD はリッピングしてからはしまいっぱなしなので、このメモを書くまでセル画ジャケットはあんまり気にしてなかったけど。

全17曲で演奏時間合計は 43:55 だ。曲数のわりに合計時間が短めなのは、一曲一曲が非常に短い音源が多いから。ちなみにファーストアルバムの Honey Bee は17曲で 56:52 だ。

ちなみに 3rd アルバム「はつ恋」も予約受付中とのこと。ただ、amazon にはまだ登録されていないようだ。

- 音質は良くないけど、曲はとてもいい

まず、はっきり言ってこのアルバムの音質は良くない。PC のアナログ入力で録音してそれをそのまま使ってるためか、ラインノイズなどが曲全体に乗ってしまっているものがある。ただ、全部の曲で音質が良くないわけじゃない。主に短めの弾き語りのような音源がそうなっているというだけ。具体的には以下の作品。これらの音源は収録されていることに意義があると思うので、それほど問題ではないと思う。

3曲目 ゆりかごの歌
4曲目 夏男
5曲目 乙女の嘆き
11曲目 こねこのぜんしん
12曲目 こねこのおやくそく
13曲目 こねこのはつこい
17曲目 ふり〜だむ!

あと、アルバム全体としてマスタリングしてないような感じで、音量重視の曲とそうではない曲が混じっているので、聴感上の音量差が激しいときがある。

でも、曲と歌声にはそれを補って余りあるパワーが感じられる。「音響」を聴くのではなく「音楽」を聴くようにすれば、このアルバムは十分楽しめる。細かいノイズなどは気にしない。

いい楽曲を提供してくれる人も付いているようだし、現在成長過程のアーティストなんだから、あまり細かいことは気にせずどんどん新しいことにチャレンジして、引き出しを増やしていくのがいい。

- 1曲目 アルタイル

ロック系でパワフルな曲。さびで「光の河 冷たい闇」で一度切って、「の中でも あなたが名前を」と繋がるところが気持ちいい。

- 2曲目 輪舞

笛の音と鈴の音がきれい。聖剣伝説なイメージ。

- 3曲目 ゆりかごの歌

詞は北原白秋。聴いてるときは「何番まであるんだ!」と思ってライナーノートを見ると、4番までしかなかった。ライナーノートには編曲と演奏がクレジットされてるけど、無伴奏だよね、これ。単なる誤記かな。ちょっとノイズが多め。

- 4曲目 夏男

呪いでもかけてそうな「お前は許せない 古田くんのうち」に笑った。

- 6曲目 「ワタシノヒミツ」

このアルバムで一、二を争う良曲。効果音のような音がたくさん入っていて楽しい。おもちゃ箱のような感じ。作曲は「スパーイ大作」さん。スパイ大作戦じゃなくて、「スパーイだいさく」さん。いい名前だ。さん付けで呼ばないと駄洒落にならないところがイイ。

- 7曲目 恋のパレット

ファンシーでちょっと不思議な構成の曲。この曲だけはボーカルに強めのエフェクトがかかってて、控えめになってる。注意していないと他のパートに気を取られて、歌詞が聞こえてこない。

- 8曲目 clover

アルバムタイトルでもある曲。春って感じがきれいにまとまってる。

- 9曲目 アマリリス

キュートな歌声。リズムのラインが非常に頑張っていて、歌声に負けてない。コンピュータで作ったって感じがするんだけど、それが逆にいい。作曲と演奏は BLUEHAWAII さん。7曲目の「恋のパレット」もこの方の曲。共通点を感じる。

原曲はフランス民謡(?) かな。その昔習ったときは「アマリリス」か「月の光」という名前だったと思う。

- 10曲目 ベランダの薔薇

あ、これ北原白秋だったんだ。北原白秋 / 白金ノ独楽「薔薇二曲」よりとライナーノートに書いてある。とても短いのであっという間に終わってしまう。

- 11曲目 こねこのぜんしん

「葉月ゆら」を知るきっかけになった曲。「世の中甘くないにゃー…。」がいい。

- 13曲目 こねこのはつこい

最初と最後にシューベルトの軍隊行進曲のフレーズ (チャレンジャーって言った方がわかりやすい?) がちょっと入ってる。
しかし、この初恋は実らないだろうなあ。

- 14曲目 Under The ROSE

この曲を聴いたら、今は亡きカルビーの辛い系ポテトチップス「エスニカン」が食べたくなった。

- 15曲目 浸想

Northern Brastorm さん作曲のバラード。長めの前奏で聞けるピアノがいい。6曲目の「ワタシノヒミツ」と同じくらい好き。浜崎あゆみの雰囲気がある。

- 17曲目 ふり〜だむ!

ネットラジオ「ゆらじお」のオープニングのジングル。ちゃんとライナーノートに歌詞が載っているのが笑える。面白すぎ。ちなみに、歌詞は全部ひらがな。QUEEN の JAZZ というアルバムを買ったとき、MUSTAPHA という曲の歌詞が載っていなくて残念な思いをしたことがあるけど、ふり〜だむ! ではそんな思いをしなくて済んだ。よかったよかった。

2006-05-18 (Thu)

* 銀行勘定調整表の作成方法と仕訳

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [簿記]

銀行勘定調整表の作成方法と仕訳のメモ。

- 銀行勘定調整表の意義

帳簿上の当座預金勘定の残高と、実際に銀行から発行された当座預金の残高証明書の残高が一致しないことがある。

銀行勘定調整表 (ぎんこうかんじょう ちょうせいひょう) とは、残高の不一致の原因を特定し、それぞれ正しい残高となるように調整するために作成する表である。

また、銀行勘定調整表に基づいて、必要な取引については修正仕訳をして帳簿を修正する。時間の経過とともに解決するものについては修正仕訳を必要としない。

- 帳簿上の当座預金勘定の残高と当座預金の残高証明書の残高が一致しない理由

帳簿上の当座預金勘定の残高と当座預金の残高証明書の残高が一致しない理由は6つある。

- 理由1 誤記入

誤記入 (ごきにゅう) とは、その名の通り当座預金への入金や出金の金額を間違って記帳している場合のこと。

企業側の帳簿が間違っていることが原因であるため、修正仕訳が必要。

- 理由2 未取立小切手

未取立小切手 (みとりたてこぎって) とは、他人が振り出した小切手を銀行に預け入れて取立を依頼したにもかかわらず、銀行がまだ取り立てていない場合のこと。

時間的なずれが原因であり、時間の経過とともに銀行による取立が完了し当座預金の残高は増加するので、修正仕訳を必要としない。

- 理由3 未取付小切手

未取付小切手 (みとりつけこぎって) とは、小切手を振り出したがまだ銀行に提示されていない場合のこと。

時間的なずれが原因であり、時間の経過とともに小切手が提示されて当座預金の残高は現象するので、修正仕訳を必要としない。

- 理由4 未渡小切手

未渡小切手 (みわたしこぎって) とは、小切手を振り出したが相手先にまだ渡していない場合のこと。

小切手を渡していないため時間の経過とともに小切手が決済されることはないので、修正仕訳を必要とする。

- 理由5 入出金連絡未通知

入出金連絡未通知 (にゅうしゅっきん れんらく みつうち) とは、当座預金に対して入出金があったにもかかわらず、銀行から連絡がないために記帳していない場合のこと。

入出金の記帳がなされていないことが原因であるため、修正仕訳が必要。

- 理由6 時間外預け入れ

時間外預け入れとは、銀行の営業時間が終わってから、夜間金庫などで預け入れた場合のこと。企業の帳簿上では当日の入金として記帳するが、銀行側では翌営業日の入金となるため残高が一致しない。

時間的なずれが原因であり、翌営業日には銀行により入金処理がなされて残高が一致するので、修正仕訳を必要としない。

- ACID 属性と簿記の仕組み

現実世界では厳密な ACID (Atomic, Consistent, Isolated, Durable) 属性を保証するのは困難だ。その現実世界で、簿記がどうやってそれらを補償しているのか、何を許容し何を問題としているのか、といった点が銀行勘定調整表という仕組みに現れていて面白いと感じた。企業と銀行の間で分散トランザクションとかが使えれば、多少はマシになるんだろうけど。

2006-05-17 (Wed)

* Windows の DEP は物理アドレス拡張 (PAE) を自動的に有効にする

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [PC] [Windows]

私の PC はマイコンピュータのプロパティを開くと「物理アドレス拡張」という表示がある。

- 物理アドレス拡張 (PAE - Physical Address Extension)

物理アドレス拡張 (PAE - Physical Address Extension) は、4GB 以上の物理メモリを搭載しているマシンでメモリを正常に認識するために利用する機能だ。確か boot.ini などで OS の起動オプションとして指定して有効にする。

しかし、私のマシンは 2GB しかメモリを搭載していない。私の PC は 2005-06-18 の「Athlon64 マシンを自作する」で作った AMD Athlon64 3000+ CPU と 2GB メモリというスペックだ。PAE は必要ないはずなのに、なぜ有効になっているのだろう?

- DEP (データ実行防止機能 Data Execution Prevention) が PAE を有効にする

調べたら原因がわかった。DEP が有効だと、それに連動して PAE が自動的に有効になるとのこと。

物理アドレス拡張 (PAE : Physical Address Extension) の概要
http://www.microsoft.com/technet/prodtechnol/windowsserver20 ...
非実行ページ保護機能をサポートするプロセッサを搭載しているコンピュータ上で DEP が有効なときは、Windows Server 2003 Service Pack 1 (SP1) および Windows XP Service Pack 2 (SP2) を実行するコンピュータ上で PAE が自動的に有効になります。

2006-01-24 の「Windows のデータ実行防止 (DEP) 機能の適用を除外する」でも DEP のせいで Skepe じゃなくて Skype が動かないという現象があった。DEP についてはそのうち一通り調べておこう。

2006-05-16 (Tue)

* Squid の X-Cache ヘッダを消す

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Squid] [http]

Squid が付与する HTTP レスポンスヘッダの X-Cache や X-Squid-Error を消す方法。

squid.confg に以下を追加する。squid/2.5.STABLE13 ではこれで当該ヘッダの出力を抑制することができた。

header_access X-Cache deny all
header_access X-Squid-Error deny all

Squid をリバースプロキシとして使用していて、内部のコンテンツサーバのホスト名などがクライアントに返ってしまうのを避けたい場合に使える。別に消す必要もないかなあと思ったが、サービスに直接影響のない情報は外部に出さないのが基本だし、とりあえず設定しておくことにした。でも、それでいて X-Powered-By: ASP.NET とか X-AspNet-Version: 2.0.50727 などといったヘッダは平気で出力してたりする。一貫性のない私。

2006-05-14 (Sun)

* 利益準備金の計算方法

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [簿記]

利益処分における利益準備金の計算方法。商法では、利益の処分先として支出する金額の10%を積み立てることを義務づけている。

- 利益準備金の計算

まず以下の式で利益準備金積立予定額を算出する。
利益準備金積立予定額 = (配当金 + 役員賞与) / 10

金額1 として、(利益準備金 + 資本準備金 + 上記で計算した利益準備金積立予定額) を計算。
金額2 として、(資本金 / 4) を計算する。

条件判定。
(金額1 < 金額2) のとき、利益準備金積立予定額をそのまま利益準備金として計上する。

(金額2 < 金額1) のとき、以下の計算式で利益準備金の額を計算する。
利益準備金 = (資本金 / 4) - (決算日時点の利益準備金 + 資本準備金)

- 余談

(金額1 == 金額2) のときはどうするの? 上記の式って if だけで else がない条件分岐だよね。結果は同じになるの? ちょっと計算してみるか。

2006-05-13 (Sat)

* ラフロイグ10年 シングルモルトウイスキーを飲む

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: []

アイラ島のシングルモルトウイスキーのラフロイグ10年 (Laphroaig 10 Years Old) を飲む。

私にはストレートだとちょっとアルコールが勝ちすぎるので水割り。お酒を同量の水で割った、いわゆるトゥワイスアップで頂いた。氷は無し。グラスはリーデルのシングルモルトウイスキー。量はグラス底面から3cmくらい。

スモーキーな香りの中に、正露丸みたいな香りがある。でもそんなに強くはないので、それだけが香りを支配するということはない。
口に含むとまず甘みを感じる。その後アルコールの辛い味。
余韻は強くない。

ラフロイグは甘みが美味しい。バランスがとれていて良い酒だ。値段は750ml で3千円弱くらいだったかな。

2006-05-12 (Fri)

* FF12 の壁紙をダウンロード

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ゲーム] [FF12]

スクウェア・エニックスのサイト「ファイナルファンタジーXII ファンゾーン」で、FF12 の壁紙8枚とスクリーンセーバー2種を期間限定で配布している。ダウンロードにはユーザー登録が必要。

ファイナルファンタジーXII ファンゾーン
http://member.square-enix.com/jp/ff12/


FF12 のパッケージイラストだけをあしらった壁紙を仕事場の PC に設定した。

ヴェインとラーサーのソリドール家壁紙も悪くないけど、仕事場の PC で使うならパッケージイラストの方が落ち着いた感じがする。アーシェの壁紙はなんで花びら舞ってるんだろう? バッシュの壁紙を見たときは昇竜拳かと思った。勝ち鬨をあげてるのかな。

2006-05-11 (Thu)

* Squid と Squirm でリダイレクタ付き SSL リバースプロキシ

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Squid] [ネットワーク]

業務で SSL 対応のリバースプロキシを作ることになった。Squid とリダイレクタの Squirm を使って実現しようとしたが、Squirm 1.0betaB が POST メソッドに対応していないために別の構成をとることとなった。

- Squid を使って SSL リバースプロキシ

今回の案件で使うリバースプロキシソフトウェアの第一候補は Squid (スキッド) だ。他の担当者が作りかけていたということと、Squid なら組織内で利用している実績があって運用のノウハウ比較的もあるというのが理由。

第二候補は Apache 2.2 系 + mod_proxy だ。しかし、運用するマシンも OS も古いし、Apache を使ったリバースプロキシの運用ノウハウはあまりないため、Squid では役者不足の時だけお出まし願う予定。第三候補は Pound だが、これもノウハウがないので今回の案件ではまず使わないだろう。ちなみに運用マシンは Solaris 2.6。現在テスト中のマシンのスペックは以下の通り。

$ uname -a
SunOS sonic64 5.6 Generic_105181-32 sun4u sparc SUNW,Ultra-1

$ dmesg

cpu0: SUNW,UltraSPARC (upaid 0 impl 0x10 ver 0x40 clock 200 MHz)
SunOS Release 5.6 Version Generic_105181-32 [UNIX(R) System V Release 4.0]
Copyright (c) 1983-1997, Sun Microsystems, Inc.
mem = 131072K (0x8000000)
avail mem = 125919232

SSL の部分は透過的な SSL アクセラレータを別途利用する予定なので、Squid はとくに何もしない。

Squid は前の担当者がインストールしていた squid-2.5.STABLE12 を使う。安定版の最新は 2006年3月12日リリースの squid-2.5.STABLE13 だが、とくに問題がなければ squid-2.5.STABLE12 のまま運用に乗せる予定。

- Squid + Squirm でリダイレクタ付きリバースプロキシ

いろいろな事情を検討した結果、外向けのドメインは一つにしておきたい。しかし、リバースプロキシは複数のドメインにリクエストを中継したい。

つまり、以下のように外向けの URL のパス部分を基準に中継先を決めるようにしたい。

example.jp/sonic64/ へのリクエストは sonic64.intranet.example.jp にリダイレクト。
example.jp/landscape/ へのリクエストは landscape.intranet.example.jp にリダイレクト。

この要件は Squid 単体では実現できないので、リダイレクタと呼ぶサブシステムと Squid を連携させて成し遂げる。今回はリダイレクタには Squirm (スクワーム) を使うことにした。採用の理由は解説しているウェブサイトがあったことと、ライセンスが GPL だから。Perl か C でリダイレクタを書いても良いんだけど、広く使われているものがあるならそっちの方がいい。

- Squirm のコンパイルとインストール

Squirm - A redirector for Squid
http://squirm.foote.com.au/

上記サイトから squirm-1.0betaB.tar をダウンロード。tar ball を展開した後は、サイトに書かれていた説明に従ってコンパイルとインストールを進める。

cd regex
./configure
make clean
make
cp -p regex.o regex.h ..
cd ..
make

なんだか結構手間がかかるなあ。「configure script の動作について知って欲しいから」みたいなことが上記サイトに書かれてたけど、そういうことなのか。

正規表現ライブラリのコンパイルと make は終わった。しかし、いざ make install しようとしたらエラー。

# make install
install -m 755 -o root -g root -d /usr/local/squirm \
                /usr/local/squirm/bin
usage: install [options] file [dir1 ...]
make: *** [install] Error 2

install のオプションがおかしいの? 私は make はよく知らないんだけど、これはコマンドラインの指定の仕方がおかしいってエラーだよね。Squirm のサイトに書かれてる記述が変なのかな。それとも、私が使ってる make がおかしいのかな。そういえば、私の使っている make って GNU make じゃなくて Solaris の特別な make なの? 確認してみる。

以下の出力を見る限り、ごく普通の GNU make のようだ。

$ make -v
GNU Make version 3.78.1, by Richard Stallman and Roland McGrath.
Built for sparc-sun-solaris2.6

仕方がない。結局 make install がやってることって、ファイルのコピーとパーミッションの設定とかでしょう? というわけで、とりあえず手作業で /usr/local/squirm へファイルをコピーしてパーミッションを設定した。strip はやったんだっけ? まあとりあえずはどちらでもいいや。

- squirm.conf と squid.conf を設定して動作確認

squirm.conf に以下を設定。

regex  ^http://.*?/ivalice/(.*) http://ivalice.intranet.example.jp/\1
regex  ^http://.*?/landscape/(.*) http://landscape.intranet.example.jp/\1

squid.conf には以下のリダイレクタのための設定を追加。
redirect_program /usr/local/squirm/bin/squirm
redirect_children 10

Squid 起動。とりあえず何パターンかのリダイレクトを試してみたが、うまく動いているようだ。

しかし、ASP.NET + IIS 6.0 を動かしているサーバにリダイレクトしたときの挙動を確認しようとしたときに問題発生。どうも HTTP の POST メソッドによるリクエストがリダイレクトされていない模様。リダイレクタに処理が渡らず、Squid だけで処理しているように見える。これは Squid が悪いのか? Squirm が悪いのか?

- Squirm は POST をリダイレクトしない

Squirm のソースを確認してみた。あー、なるほど。対応しているのは GET メソッドだけで、POST メソッドによるリクエストは受け付けないようになってる。Squid というより Squirm の仕様なのか。

squirm-1.0betaB の squirm.c の load_in_buff()
  /* all methods must be GET */
  if((strcmp(in_buff->method, "") == 0) ||
    (strcmp(in_buff->method, "GET"))) {
#ifdef DEBUG
    log(LOG_DEBUG, "in_buff.method not \"GET\"\n",
    in_buff->src_address);
#endif
    return 1;
  }

となると、Apache + mod_proxy を使うか、あとはリバース先のサーバ構成を変えるか、自分でリダイレクタを書くか。うーん。

いろいろ検討した結果、URL のパス部分を基準にした振り分けは要件として必須でないということになり、リダイレクタを使う必要はなくなった。つまり、Squid だけでよいということだ。

- Squirm は バージョン 1.26 が最新

今ふと Squirm のサイトを見ると、なんだかページの上の方に「Squirm は 1.26 が最新だよ。でも、ドキュメント書く暇がないよ。」みたいなことが書いてある。気づかなかった。

Note: This web page documents version 1.0-BetaB. There is, in fact, a newer version: squirm-1.26, but I haven't documented it yet. This new version has some new features:

new squirm.conf file allows different redirection lists based upon different sets of source network addresses in CIDR notation.
Automagic accelerator string generation.
It compiles with a simple 'make'
A few other minor features.
Use your systems regex library

1.0BetaB から一気にバージョンが進んで 1.26 になってるわけだから、もしかして POST メソッドにも対応してるかもしれない。もう必要なくなったけど、一応 tar ball をダウンロードしてソースだけは見てみよう。

squirm 1.26 の squrim.c
/* match_method() returns 1 on match, 0 for no-match */
int match_method(char *method, int accept) {

  lower_case(method);

  /* match all first */
  if (accept == ALL) {
    return 1;
  }

  /* and then the most common */
  if (strcmp(method,"get") == 0) {
    return ((GET & accept) != 0 ? 1 : 0);
  }
  if (strcmp(method,"put") == 0) {
    return ((PUT & accept) != 0 ? 1 : 0);
  }
  if (strcmp(method,"post") == 0) {
    return ((POST & accept) != 0 ? 1 : 0);
  }
  if (strcmp(method,"head") == 0) {
    return ((HEAD & accept) != 0 ? 1 : 0);
  }
  return 0;
}

上記を見る限り、Squirm 1.26 なら HTTP POST メソッドにも対応してるようだ。もしかしたら、対応しているように見せかけて、別のところでリダイレクトせずに素通ししてるかもしれないけど、さすがにそんなことはなさそう。POST 対応してるなら最初からこれ使えば良かったね。

2006-05-10 (Wed)

* 現在実行中のメソッド名を取得する MethodBase.GetCurrentMethod()

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [.net] [C#]

.NET で現在実行中のメソッド名を取得するには、System.Reflection.MethodBase.GetCurrentMethod().Name を使う。

- トレース出力のために現在実行中のメソッド名を取得したい

アプリケーションの実行状態の追跡のため、メソッドの頭でメソッド名やそのときの時刻などをトレース出力したい。

トレースしたいメソッドが3個くらいしかなければ、以下のようにメソッド名を直書きしてもいいけど、タイプミスしたり、リファクタリングしてメソッド名が変わったときに修正する手間がかかってしまうのは困る。

Trace.WriteLine(DateTime.Now.ToString() + " PlayVideoClip");

メソッド名はリフレクションを使って取得できるので、とりあえず System.Reflection.MethodBase.GetCurrentMethod().Name を使うことにした。

Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name);

using System.Reflection; しておけば MethodBase.GetCurrentMethod().Name で済むけど、トレースしたいところにペタペタとコピー & ペーストすることを考えて、完全な名前で書いた。

うーん。でも、そもそもこれをコピー & ペーストする手間が煩雑で困るな。今回はこれで良かったけど、今後もコピペを繰り返すのは美しくないなあ。

メソッドにコンストラクタやデストラクタみたいな仕組みがあって、そこでトレース出力できるといいのに。ASP.NET のパイプライン処理モデルみたいな仕組みがメソッド自体に備わってるような感じ。ちょっと仕組みが大げさだから無いような気もするけど、調べてみよう。

2006-05-09 (Tue)

* 減価償却の意味と計算方法

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [簿記]

減価償却 (げんかしょうきゃく) の意味と計算方法のメモ。

- 減価償却とは

減価償却とは、固定資産の価値の減少を決算期ごとに計上するためのしくみ。

建物や車両運搬具などの有形固定資産は時間の経過により価値が減少する。そのため、決算期ごとに減少分を費用として計上し、資産から減じる処理をする。ただし、土地と建設中の建物は時間と共に価値が減少するという性質を持っていないので、減価償却はしない。

減価償却費の算出方法にはいくつかの方式がある。

- 定率法による減価償却費の計算

定率法とは、毎期ごとに一定の割合で減価償却費を算出する方式。期が進むごとに少しずつ減価償却費は減少していく。

減価償却費 = 期末未償却残高 * 償却率

- 定額法による減価償却費の計算

定額法とは、毎期ごとに一定額を減価償却費を算出する方式。

減価償却費 = (取得原価 - 残存価額) / 耐用年数

取得原価とは、固定資産の購入価額と手数料や引き取り運賃などの付随費用の合計。
残存価額とは、耐用年数を過ぎた固定資産の見積処分価額。

- 生産高比例法による減価償却費の計算

生産高比例法とは、利用した量に応じて減価償却費を算出する方式。飛行機の飛行距離や車の走行距離等で使う。

減価償却費 = (取得原価 - 残存価額) * (その期に使用した量 / 総利用可能量)

2006-05-08 (Mon)

* FF12 のモブ ヤズマットの出会い方と攻略

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ゲーム] [FF12]

ファイナルファンタジー12のモブ (討伐対象の危険モンスター) のヤズマットの出会い方と攻略法のメモ。

- ヤズマットの依頼情報

「No.45 最期の戦い、師よ安らかに眠れ!」。依頼人はモンブラン。王都ラバナスタの市街地北部にあるクラン「セントリオ」の主宰。ヤズマットのランクは X。× (バツ) ではなくてエックスだ。依頼人はモンブランだが、緊急討伐依頼ではない。クランの設立の目的はこのモブを倒すことにあるとのこと。すなわち宿敵ということだ。

ヤズマットはモンブランたちモーグリ6兄弟の師匠の仇だという。モンブランの師匠は、ヤズマットと一週間に及ぶ戦いの結果、力尽きてしまった。幸せだったモンブランの生活を壊したのがヤズマットとのことだ。

私のヤズマット討伐時のレベルは67・・・と言いたいところだが、実はまだ倒していない。レベル67でヤズマットに戦いを挑んだが、7時間に及ぶ激闘の末、全滅してしまった。もちろん近いうちに再度討伐に向かう予定。

追記。ついに討伐した。詳細は 2006-06-18 「ヤズマット討伐完了」を参照。討伐時レベルは67だった。

- ヤズマットとの出会い方

ヤズマットはヤクト・ナルドアにあるリドルアナ大瀑布の「コロセウム」にいる。

モンブランに依頼されたときは、ヤズマットの居場所は不明とのことだった。

セントリオのマッケンロー
ヤズマットを倒したいのだね。
……残念だが、私にヤツの居場所はわからない。

軽い気持ちでいるようなら、
たとえ見つけても近寄るべきじゃない。
ヤツは計りしれない力を持っているからね。

上記のようにマッケンロー翁でもヤズマットの居場所はわからない。でも、それならなんで「計りしれない力をもっている」とか知ってるの? などと考えたが、まあモンブランからいろいろと聞かされているんだろうと納得することにした。

私がヤズマットに遭遇したのは、レアモンスター狩りとハントカタログのコンプリートのために各地を訪れていたときだ。コロセウムのエリアに入ると、闘技場の中心部分は遙か先にも関わらず、それを埋めるような巨大なモンスターが見えていた。まさか、と思って近づくと、それがヤズマットだった。

- ヤズマットと戦う

ヤズマットは強い。

まず、HP が異常に多い。2006-05-06 の「FF12 の魔神竜の出会い方と攻略 修験の扉の開け方」で討伐した魔神竜も非常に HP が多かったが、それを遙かに上回る。実際に戦ってみて与えたダメージから推し量るに、ヤズマットの HP は1000万を優に超えると思う。

しかも、ライフゲージが20% (10個くらい) になると 2006-03-26 「FF12 のモブ キャロットの出会い方と攻略」で書いたキャロットと同じく「驚異」を使ってレベルを倍にしてしまい、守りが堅くなる。その上ライフゲージが10% (5個くらい) にまで少なくなると凶悪な攻撃を連発するようになるために回復に戦力を割かざるを得ず、ダメージを与えられるペースが極端に落ちる。それを含めると、感覚的には1800万くらいの HP だろうか。こちらの攻撃一発で2000から9999しかヤズマットにダメージを与えられないので、魔神竜戦以上の長期戦は必至だ。

幸いなことにヤズマット戦は魔神竜戦と同じく途中での退却が可能で、ヤズマットの HP はセーブしてもリセットされることなく引き継がれる。つまり、コツコツとダメージを与えていけば、いつかは倒せるはず。

ヤズマットは強力な風属性の範囲攻撃の「サイクロン」と、相手を即死させる「必殺」という技を持つ。いつかは倒せるといっても、それは相手の攻撃を耐えつつダメージを与え続けれられればの話だ。前半は比較的楽にダメージを与えられるのだが、ヤズマットの攻勢が厳しくなる後半は回復に追われてダメージを与えることもままならない。これらの攻撃に耐えられる程度の HP、装備、ガンビットが必要だ。

もう一つ注意すべき点として、ヤズマットのリフレガがある。ヤズマット自分自身にではなくプレイヤーのパーティに使ってくる。つまり、回復魔法や補助魔法を自分たちに使えなくなるということだ。間違って回復魔法がヤズマットにかかると、ただでさえ多い HP が回復してしまう。

以下の魔法や特殊技はレジストされた。
バヒール
スロウガ
ブライガ
スリプガ
コンフュ
アキレス

いろいろ試した結果、ステータス異常を転移させる「貼付」と、防御力を下げる「防御破壊」が通用することはわかった。しかし、どちらも決め手とはならなかった。なぜなら、これらを使うことで戦闘を早く終わらせることはできるかもしれないが、戦闘不能や全滅の確率を下げられるわけではないからだ。

まず、HP が下がり続けるステータス異常「スリップ」を「貼付」してみたものの、どうも効果がないようだ。貼付はできるがスリップそのものはレジストされている様な感じだ。防御破壊もほとんど使わなかった。レベル67の私のパーティにとっては、より多くのダメージを与えることはあまり重要ではないし、一時撤退して再戦したときに下がった防御力が引き継がれるかどうかわからないからだ。

- ヤズマットから盗む

ヴァンに盗めるアイテムが良くなるアクセサリ「盗賊のカフス」を装備させてヤズマットから盗んだら、「聖の石」を得られた。・・・・・・。最強の敵なんだから、もっとすごいアイテムを持っててほしいなあ。せめてエリクサーくらいはね。

- ヤズマットの弱点属性は闇

ガンビット「闇に弱い敵」が反応。だからといって闇属性の裏魔法「ダーガ」などを連発するほど MP に余裕はない。長期戦となるため、極力 MP は回復魔法と補助魔法に費やすことなるからだ。そもそもダーガのダメージは5000程度で少なすぎる。

弱点を突くなら、闇属性の弾ダークショットを使うのがよいだろう。詳細は「ヤズマット戦の装備」で述べる。

- ヤズマット戦の装備

ヤズマット戦に必要と思われるものを列挙。

絶対必要な回復アイテムは、クロノスの涙、フェニックスの尾、金の針。挙げた順にそれぞれ買えるだけ買う。数万ギルもあればおつりが来る。99個ずつ買ってしまうのが良い。回復アイテム切れで退却とか全滅するのは悔しいでしょう?

アクセサリ「バブルチェーン」を戦闘に参加する人数分。できれば6つ。後半になると、バトルメンバー3人が一気に戦闘不能になることもあるため。

軽装備のポンチョ。風属性のダメージをを半減する。範囲攻撃「サイクロン」への対策。これも戦闘に参加する人数分。王都ラバナスタの「パナミスの防具ショップ」で売っている。私は属性攻撃に対し半減や吸収効果のある防具は、極力売らずに取っておくことにしている。その私のコレクションの中で風属性となっていた防具はこのポンチョだけだった。もしかしたら見落としている可能性もあるので、あとで各地の防具屋をまわってもっと強力な風属性の防具がないかを確認する予定だ。追記。店を回ってみたが、ポンチョ以外に風属性に耐性のある防具はなかった。防御力が弱くて心許ないがこれだけが頼りだ。

あとは、あるとよい物。

ヤズマットの弱点属性の「闇」は武器で突くのが良い。私は銃「フォーマルハウト」に闇属性の弾ダークショットを組み合わせた。この組み合わせならば、ブレイブによって攻撃力が上がった状態のヴァンで 8000から9999のダメージを与えられる。後半の「驚異」によるレベル倍増後には多少落ちるが、それでも6000程度のダメージをコンスタントに与えられる。ちなみにダークショットは 2006-04-08 の「FF12 のモブ ピスコディーモンの出会い方と攻略」の報酬。

両手忍刀の「おろち」も試したが、攻撃力が72と低い。これを使うくらいなら、攻撃力118の両手剣アルテマウェポンで攻撃した方がダメージが多い。より上位と思われる両手忍刀の「柳生の漆黒」はライセンスは取得したが武器が手元にない。アルテマウェポン並に攻撃力が高ければ使えるかもしれない。

弱点属性が闇となっている一方で、ヤズマットは聖属性を吸収してしまう。聖剣エクスカリバーやホーリーランスなどは使えない。

結局、前半戦ではヴァンがフォーマルハウト + ダークショット、バッシュが両手剣アルテマウェポン、アーシェが片手剣ブレイクブレイド + アイスシールドまたはデモンズシールドという組み合わせとなった。

ただ、これらの装備も途中で変更した。まず、盾を装備してもほとんど直接攻撃を回避していないことから、盾は無意味だと気づいた。また、メンバーのステータスに応じて役割を考え直した。

その結果、ヴァンは両手刀のマサムネ、バッシュが両手剣アルテマウェポン、アーシェがフォーマルハウトとダークショットを装備した。HP が高いヴァンとバッシュが直接攻撃担当、HP で劣るアーシェが遠隔攻撃担当。ヴァンの方がバッシュよりも魔力が高いのでマサムネはヴァンが装備した。

- ヤズマットの攻撃への対策


まず、バブルチェーンは必須。戦闘中ずっと着用することになるだろう。戦闘不能になって白魔法アレイズで復活したときに、最初からバブル状態で HP が2倍になり、かつ HP が満タンになるためだ。復帰してからバブルをかけていると、その間にやられる恐れもあるし。

ただ、ヤズマットはストップ効果のあるホワイトブレスを吐いてくる。私はヤズマットの HP が50%になるくらいまでは、ストップをレジストするアクセサリ「パワーリスト」をバッシュに装備させておいた。万が一全員ストップしてしまうと恐いから。

通常攻撃とひっかき。
こちらの防御力とヤズマットが「驚異」使用後かどうかで異なるが、だいたい2000から6000程度のダメージ。基本的にケアルガで対処。リフレガを使ってくるようになったら、HP の回復は諦めてアレイズとフェニックスの尾による戦闘不能からの回復だけに切り替える。

サイクロン。
風属性の範囲攻撃。軽装備「ポンチョ」で半減できる。ただ、ポンチョは防御力が12と無いに等しいので、ヤズマットがサイクロンを構えた瞬間に全員で一斉に衣替し、終わったらマクシミリアンなどもとの防具に戻す。後半戦ではこの衣替えが遅れると命取りになるので、サイクロンを連発されるようになってからはコンフィグでバトルスピードを遅めに設定した。煩雑だが、生き残るためには仕方ない。追記。バトルスピードは必ずしも遅い方がよいとは限らない。ヤズマットは攻撃の待機時間が異常に短いので、むしろ「速い」にしたほうが相対的にバトルメンバーが速く行動できるように感じた。ただ、サイクロン発動までの時間は短くなるので、衣替えし損なうことが多いならば「遅い」の方がいいかもしれない。

必殺。
食らうと即戦闘不能になる。ヤズマットの HP が8割を切ったころ、必殺ばっかり10回連続でやってくる時期があった。3人とも壁際に追いつめられた時だった。移動したら攻撃パターンが変わったので、どうも特定の位置関係のときにこういう現象が起きるようだ。必殺を食らいたくないならば、なるべくコロセウムの中心で戦った方がいい。

ホワイトブレス。
ストップ効果のある範囲攻撃。2006-04-04 の「FF12 のモブ ファーヴニルの出会い方と攻略」で書いたファーヴニル戦と異なり、今回は裏魔法デコイによる囮作戦は使えない。他の攻撃によるダメージが大きすぎ、囮役が戦闘不能になることが多いからだ。ホワイトブレスへの対策は特にない。強いて挙げれば、メンバーのうち一人は銃を使うようにしてバトルメンバーが固まらないようにすることと、片手剣を使うメンバーに氷属性を半減するアイスシールドを装備させることくらいだろうか。

- 私のヤズマット戦の記録

私のヤズマット戦の経過のメモ。上記の各種のメモは、以下の試行錯誤を元に作っている。

戦闘開始。
魔神竜と同じく、ものすごいライフゲージだな。これは長期戦になるなあ。まず白魔法デスペルでヤズマットのプロテスを解呪。そして「盗む」。なんだ、「聖の石」か・・・。では攻撃開始。あれ? 魔神竜に比べてライフゲージの減少量が異常に少ないぞ。もしかしてこれは魔神竜の10倍以上 HP があるんじゃないのか? 弱点調査。「闇に弱い敵」のガンビットが反応。

1時間経過。
だいたい10%くらいヤズマットの HP を減らせた。すなわち残り90%。ということは、討伐まであと10時間? これは時間がかかるなあ。弱点の闇属性を突くように装備とガンビットを調整。急遽ヴァンに銃のライセンスを取らせ、フォーマルハウト + ダークショットでスナイパーをやってもらうことにした。ヴァンだけが画面に入るようにカメラの位置を調整すると、なんだか別のゲームを見ているようだ。

2時間経過。
ヤズマットの残りのライフゲージは55%。この一時間の間、「必殺」のコンボになってしまったときなどに二度ほどコントローラーを操作したが、それ以外は、すべてガンビット任せ。ダメージ効率を上げるためにガンビットを調整。スナイパー役のヴァンだけは、ブレイブなどの補助魔法のターゲットを自分だけにした。この分だとあと二時間もすれば倒せそうな雰囲気。「加ダメージチャージ」による MP 回復が強力に効いているのも良い傾向。ケアルガを惜しげもなく使える。

2時間半経過。
残り体力は50%程度。モニターをオンにしてみると、「リーダーを変更してください」の表示で戦闘が止まっていた。「必殺」コンボでリーダーのヴァンが戦闘不能になってしまったようだ。

3時間経過。
またしてもリーダー変更のウインドウ。うーん、安定しないなあ。どうも加ダメージチャージで回復する MP の量が減ってきているようだ。以前ならば、ヴァンが一発銃を撃てば30ポイントの MP が回復していたが、今となっては7ポイントしか回復しない。これでは十分なケアルガやアレイズのための魔力を確保できない。ミストが薄くなっているんだろうか?

4時間経過。
ライフゲージは16個、30%くらい。戦闘開始時に40個ほど持っていた「クロノスの涙」を使い切った。とりあえずこれ以上やっても放置できないし、一時退却することにした。瀕死になったヤズマットがさらに凶悪な攻撃をしてきたら困るし。たぶん魔神竜と同じく、退却してもヤズマットの HP は回復しないだろう。回復してたら泣く。また、サイクロンのダメージががきつく感じてきた。手元の防具を見ると、軽装備のポンチョが風属性の半減効果を持っている。でも、防御力が弱いし、一個しか持っていない。しかし背に腹は替えられないので、サイクロン発動時に HP が低いメンバーに装備させてみる。無いよりはずっといいけど、衣替えの手間がかかるなあ。

回復アイテムを調達するために戦線を一時離脱。
ついでにポンチョを買ってこよう。どこで売ってるんだろう? かなり防御力が低いから、初期の頃に訪れた街だろうな。王都ラバナスタか空中都市ビュエルバあたりだろうか? そう考えてラバナスタの「パナミスの防具ショップ」に行ったところ、一つ1000ギルで売っていた。即購入。あとクロノスの涙、フェニックスの尾、金の針を99個になるように購入。この状態でセーブ。

再戦。
良かった、ヤズマットの HP はさっきのままだ。ミニマップの下に Round2 の表示。ん? ヤズマットにプロテス、シェル、ヘイスト、ブレイブ、リジェネがかかってるよ。さっさとデスペルで解呪。

5時間経過。
残り25%程度。

5時間半経過。
のこり20%程度。ゲージの数で言うと10個。
ヤズマットはここで「驚異」を使ってきて、レベルが倍になった。えー、勝てるのか、これ。サイクロン一発が6000から8000くらい食らうようになってる。かなりつらい。ガンビット変更。アレイズを回復の中心に据えた。そしてケアルガ、プロテガ、ヘイスガ、ブレイブをオフ。キャロット戦と同じく、捨て身で行く戦術。と思ったけど、ヤズマットの攻撃力はまだ即死レベルではないようなので、ケアルガだけをオン。サイクロンを構えたときにポンチョに装備を切り替えてダメージ半減を試みたが、それでも4000ポイント以上のダメージ。キツい。

6時間経過。
残り10%程度。ゲージは7個。比較的安定している感じ。

6時間40分経過。
残り10%。ゲージは5個。サイクロン発動時にポンチョが必要なメンバーを判別できるようになった。

6時間50分。
ヤズマットがリフレガを使ってきた。ヤズマット自身にではなく、私のパーティをターゲットとして。これでは自分たちにケアルガは使えない。白魔法ストナも金の針に切り替え。

7時間12分。
ヤズマットが緑魔法リジェネを使ってきた。こんなに HP が多くて長期戦になってるのに、時間とともに HP を回復されてはかなわない。すかさずガンビットにリジェネ対策として白魔法デスペルを組み込む。勇者たちに「いてつくはどう」を放つ大魔王ゾーマの気持ちが少しだけ理解できた。

7時間37分。
サイクロンを連発され、バトルメンバーが全滅。リザーブメンバーがフェニックスの尾による蘇生を試みるも、通常攻撃を連続して食らう。LV 13程度のリザーブメンバーは当然即戦闘不能になった。為す術もなく全滅。なんてことだ。もういちど装備とガンビットを見直して再戦する予定。きっと何か方法があるはず。必ず討ち取ってやる。

追記。
2006-06-18 の「ヤズマット討伐完了」に再戦の記録を書いた。

- ヤズマット討伐の報酬

ヤズマット討伐時の獲得ライセンスポイントは表示されなかった。あまりに戦闘が長かったことと、討伐成功の喜びのあまり、ステータス画面で増加分を計算することさえ忘れていた。

依頼人のモンブランからは報酬として以下を受け取った。

30000ギル。
神殺しの紋章。

神殺しの紋章は「おたから」。早速売却してみたけどなにも起こらない。売却価格は1ギルだし、これって売っちゃダメなのかな?
報酬の品よりも、てくてくパタパタと集まったモーグリ6兄弟からそれぞれお礼を言われたのがうれしい。6兄弟は、クラン「セントリオ」のリーダーのモンブラン、シュトラールのノノ、ダルマスカ西門のモグシー屋のソルベ、ハーディ、ダルマスカ南門のモグシー屋ホルン。ハーディって何やってる人だっけ? 大工?

クランレポートの空賊の隠れ家には、ヤズマットをエンゲージした証として「マスターハンター」が追加された。

2006-05-07 (Sun)

* アプリケーションを終了させるには Environment.Exit()

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [.net] [C#]

C# でアプリケーションを終了させるには System.Environment.Exit() を使う。

Environment.Exit(0);

Exit メソッドの引数にアプリケーションの終了コードを指定できる。これは 2005-01-20 「C# でアプリケーションの終了コードを返す」でも書いた。正常終了なら 0 を指定するのが慣例。それ以外の場合はアプリケーションの作りによって値の使い方は千差万別。呼び出し側にエラーを伝えるために、エラーに応じて細かく番号を決めておくこともある。一方、エラーはみんな終了コード1と割り切って定義することもある。

System.Windows.Forms.Application.Exit() というのもあるが、これはメッセージループを止めるだけでそれ以外の処理は続行してしまう。

今回はこれに関する失敗をした。業務エラー発生時にダイアログを出して WinForm アプリケーションを終わらせようとしたけど、Application.Exit() を使ってしまったために処理が続行されてしまった。テストしてすぐに気づいたけどね。

2006-05-06 (Sat)

* FF12 の魔神竜の出会い方と攻略 修験の扉の開け方

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ゲーム] [FF12]

ファイナルファンタジー12のモブ (討伐対象の危険モンスター) の魔神竜の出会い方と攻略法、魔神竜のいるエリアに入るための「修験の扉」を開ける方法、さらにその先の扉の鍵の入手法のメモ。

- 魔神竜の依頼情報

クランレポートによると、魔神竜は最も邪悪な竜として地獄の王とも呼ばれる伝説の魔竜とのこと。私は友達から FF12 にも神竜がいるよと聞いていたが、神竜ではなく魔神竜だった。

魔神竜はモブではなくボスモンスター扱いとなっているため、依頼人はいない。ただ、セントリオにいるクランメンバーが言っていた「ヤツの話をモンブランから聞き出すには、モブになっていない強敵を倒す必要があるぞ。」というのは、この魔神竜のことだ。つまり、最後のモブ討伐依頼を受けるには、この魔神竜を倒す必要がある。

私の魔神竜討伐時のレベルは67。ちょっとガンビットと装備を調整するだけで楽に戦えた。

- 魔神竜との出会い方

魔神竜はアルケイディア地方にあるソーヘン地下宮殿の「怒れる神と対する広間」にいる。

「怒れる神と対する広間」には「定めを受け入れる路」の西側にある「修験の扉」から向かうのだが、封印が施されているため、まずこれを解かなければならない。また、修験の扉の封印を解いたとしても、「怒れる神と対する広間」にも鍵付きの扉がある。魔神竜と戦うためには、この扉のカギも手に入れなければならない。

- 修験の扉を開ける

「定めを受け入れる路」には、修験の扉の開け方についてのヒントがいくつか書かれている。

修験の扉

「反して修験の扉を開かんとする者よ。
朝日と共に歩み刻を数えし者よ。
その歩みを終えし時、修験の扉は汝を抱かん。」

上記の文を読んだだけだと何をしたらよいかわかりにくいが、実際に地下宮殿に行ってみると「定めを受け入れる路」には「古の扉」と「刻の扉」が配置されているので、上記の文の意味を理解するできる。つまり、朝日の方角である東から時計回りに「刻の扉」を開いていけばよいということだ。

私の場合、天をあおぐ部屋のゲートクリスタルから転移してきたので、「暗き光と対する広間」から「定めを受け入れる路」に入り、「古の扉」だけを空けて東側 (時計で言う3時の方向) に抜け、一度「時の水洞」まで行ってからあらためて「定めを受け入れる路」の東側に戻り、時計回りに刻の扉を開けていった。

すべての刻の扉を順番通りに開くと、修験の扉が開いたというメッセージが表示される。

- 修験の扉の先にある鍵付きの扉

修験の扉の先には、また鍵付きの扉がある。最初はこれの開け方がわからず、しばらくの間放置していた。しかし、レアモンスター狩りと未踏マップ埋めをしている間にこの扉の鍵を得ることができた。

鍵を得た場所は、アルケイディア地方のセロビ台地の北東にある「北部段丘」。ここの「10番風車」を調べると、機工士モーグリと竜の研究家と会える。チョコボに乗ったままだと調べられないので注意。

彼らと話すと「ぼろぼろのカギ」を得られるが、モブ No.21 「取られた荷物を取り返せ!」でヴィラールを討伐していることが条件となっているようだ。取り返した荷物に付いていた「竜のウロコ」を研究家にあげると代わりに鍵をくれる。

竜の研究家

そうだ、おぬしに礼をせねばならん。
……このカギを受け取ってくれい。
究極の竜を封じ込めたといわれる扉のカギじゃよ。

アルケイディア地方の南には竜が眠っているという伝説がある。竜の研究家がくれた鍵。そして、アルケイディア地方の南にあるソーヘン地下宮殿の鍵付きの扉。というわけで行ってみると、扉が開いた。そしてそこにいたのは魔神竜だった。

- 魔神竜と戦う

魔神竜との戦いはかなりの長期戦になる。その理由は、魔神竜が持つ膨大な HP (ヒットポイント) にある。

魔神竜と対峙したとき、その異常なライフゲージがまず目を引く。通常は横一本として表示されているライフゲージがまず上下二本構成になっていて、下段のライフゲージは細かい点として表現されている。「まさかこれって」・・・と思って少し戦ってみるとビンゴ。上段は通常のライフゲージで、下段は上段が0になると一つ減るという仕組みだった。数字の一の位と十の位みたいなものだ。要するに、あまりに HP がありすぎるので、その膨大な HP を二段構成のライフゲージで表現しているということだ。

クランレポートのハントカタログ No.374 「ウルタンエンサ族」には、巨大なドラゴンと戦う生物兵器を開発したエンジニアの話が書かれていた。そのドラゴンとはは、間違いなく魔神竜のことだろうな。「こっちの攻撃は当たっているのだが、全くダメージを受けているように見えない」というのは、あまりに HP が多すぎるということなんだろう。

これだけのライフゲージがあるので、当然のことながら戦闘は長期化する。戦闘開始から討伐まで1時間と5分かかった。もっとも、最初の5分から10分くらいで装備とガンビットの調整が終わり、あとは戦況を静観するだけだった。その間はウェブを見たり、お茶を飲んだり、読書するなどしていた。

こちらの攻撃では、攻撃力アップの緑魔法「ブレイブ」をかけた状態で2000から5000程度のダメージを魔神竜に与えられる。長期戦を有利に運ぶためにいろいろ試したが、すべて効果がなかった。

黒魔法クラウダ。
追加効果のスリップを狙ったが、何発当たってもスリップにならない。下位魔法のバイオもダメ。

緑魔法タクシク。
猛毒を狙ったが、ミスばかり。あげくレジストされた。

そのほか、ブライガ、コンフュ、スロウガ、バヒールなどもレジストされた。

- 魔神竜戦は中断可能?

魔神竜と戦っている最中、ミニマップに扉を示すサインが出ていたので行ってみたところ、部屋から出ることができた。もういちど入ってみると、魔神竜の膨大な HP はリセットされておらず、退出したときのままだった。ソーヘン地下宮殿から移動したり、セーブしたときに HP がどうなっているかは不明。というか、もう一度最初からになるのは嫌なので試せない。

ちなみに、一度退出して再入場すると画面には Round 2 と表示されていた。何回退出したかはちゃんとカウントしているらしい。色気を出さずに Round1 で魔神竜を倒していれば、何かもらえたのかもしれない。

- 魔神竜から盗む

ヴァンに盗めるアイテムが良くなるアクセサリ「盗賊のカフス」を装備させて魔神竜から盗んだら、「闇の石」を得られた。もっといい物持っててほしいな。

- 魔神竜戦の装備とガンビット

魔神竜との戦いでは、攻撃、防御、補助、回復をずっと続けられるようにガンビットと装備を調えることが必要。

回復役のアーシェのガンビットは以下の通り。

味方一人 >>アレイズ
HP<50% の味方 >>ケアルガ
MP<10%の自分 >>チャージ
最もHPが低い敵 >>たたかう

上記に加え、プロテガ、ヘイスガ、ブレイブ、「ストップ」対策のクロノスの涙、バブル、エスナを組み込む。好みでシェルガを加えてもいい。ケアルガの発動条件は、もっとも魔力が高いキャラから優先的に発動するようにし、重ねがけして無駄打ちしてしまうのを防ぐために、極力同じ発動条件にしない。

攻撃役のヴァンとバッシュもほぼ同じガンビット。ただし、ケアルガの発動条件はヴァンだけ40%にしてある。バッシュとアーシェのケアルガ発動条件が同じになってしまうが、アーシェのケアルガ発動条件を60%にしているとちょっと回復が過剰になってしまうので10%ほど下げた結果だ。また、プロテガやヘイスガの重ねがけを防ぐために、バッシュとアーシェとヴァンで異なる優先順位に変えたりもした。

装備はアクセサリだけバブルチェーンに交換する。あとはほぼ通常の雑魚敵戦用と変わらない。バブルチェーンがなければ、裏魔法バブルを使うだけだ。

- 魔神竜の弱点属性は聖

ガンビット「聖に弱い敵」が反応。しかしここで白魔法「ホーリー」を連発するのはあまり良くない。長期戦なので、極力 MP は回復魔法と補助系魔法のために残しておきたいからだ。また、高位の魔法はエフェクトの発動待ちになることが多く、通常攻撃にくらべて効率が悪くなることがある。

そういった意味では、聖属性の武器で攻撃する方がよいのだが、2006-05-04 の「FF12 のモブ 神 (闇神) の出会い方と攻略」でも書いたように、私は聖剣エクスカリバーもホーリーランスも持っていない。仕方がないのでアルテマウェポンなどで斬りまくった。

- 魔神竜の攻撃への対策


まず、長期戦が予想されるので裏魔法バブルかアクセサリ「バブルチェーン」を使って HP が2倍になるようにしておく。

バブル状態ならば HP が8000から9500程度になり、白魔法ケアルガを HP<50% 程度で発動するようにしておくことで戦闘不能は避けられる。ケアルガ一回の回復量は、術者にもよるが5000から8000程度になるからだ。

今回も裏魔法「デコイ」による囮作戦は使わない。ケアルガの性能が良いことと、魔神竜の攻撃はのダメージが多くないため、攻撃がある程度分散された方が戦いやすいからだ。

通常攻撃。
緑魔法プロテスをかけた状態で1600程度のダメージ。

ジャッジメント。
ムービー付きの全体攻撃。邪悪な存在でもさすがに神様だけあって、審判を下してくる。ダメージは3000から4000程度。見た目から推察するに火属性なのかもしれない。ケアルガで対処。

ペトロブレス。
範囲攻撃で1500程度のダメージ。「石化中」のステータス異常を伴う。ダメージは緑魔法シェルガをかけた状態の値だが、シェルガってペトロブレスに効果があるかどうかは不明。シェル系で防げるのは魔法だけかもしれない。

ファイガ、ブリザガ、ウォタガ、ダーガ。
一般的な黒魔法も使ってくる。闇属性のダーガはデモンズシールドを装備していれば吸収できる。それ以外はケアルガで十分対処可能。

アンチ。
対象の HP と MP を入れ替える魔法。一見嫌らしい攻撃だが、実はこれがありがたい。長期戦ではどうしても MP が不足しがちになるのだが、このアンチのおかげで MP の欠乏を一気に解消できるからだ。後半では「MP 少なくなってきたなー、アンチまだかなー」と待つようになるくらい。特殊技「HP MP」を使っても同じ効果がえられるので、そっちを使えばいいんだけどね。もちろん、アンチを受けたらすぐさまケアルガによる回復をしないと戦闘不能になるおそれがある。

- 魔神竜討伐の報酬

魔神竜討伐時の獲得ライセンスポイントは表示されなかった。その巨体に隠れてしまったのかな。討伐後のステータス表示画面では150LP 分増えていた。

魔神竜はモブではないので依頼人は存在しないが、ボス扱いなのでラバナスタのクラン「セントリオ」主宰のモンブランから以下のごほうびがもらえた。

50000ギル

そして何よりのご褒美は、45体目のモブ「ヤズマット」の依頼が発生したことだ。ヤズマットは地上最強のモンスターだという。戦うのが今から楽しみだ。

2006-05-05 (Fri)

* FF12 のサブイベントと隠し要素

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ゲーム] [FF12]

ファイナルファンタジー12を最後まで楽しみ尽くしたい。いろいろとやっていないイベントや要素がある気がするので、それをやることにする。

2006-05-04 の「FF12 のモブ 神 (闇神) の出会い方と攻略」で44体のモブを全部やっつけたけど、その後の依頼が発生しない。モンブラン、45体目の依頼情報を教えて! と思って話しかけても、「とくに依頼はないクポー」とか言ってる。神竜とかオメガとかいるんでしょう? なにか足りないのかな?

仕方がない。いろいろやり残してることもあるし、そっちを先にやることにしよう。とりあえずやり残していることを列挙。

- 神竜を倒す

なんか今回もいるらしい。今回の FF はファーヴニルやリンドヴルムなど、竜が豊作だな。ところで神竜って神龍って書くんだっけ? でも、それってシェンロン?

追記。
2006-05-06 の「FF12 の魔神竜の出会い方と攻略 修験の扉の開け方」で魔神竜を倒した。

- オメガを倒す

オメガもいるらしい。でもそれ以上のことは知らない。魔法剣も「みだれうち」もないんだけど、勝てるのかな。

- 地図を全部埋める

マップの暗いところを全部埋める。セロビ台地とかフォーン海岸、大砂海オグル・エンサのあたりには、足を踏み入れたことさえないエリアもある。こんなんでも「イヴァリース・ウォーカー」の証をもらえちゃうのって、なんだか世の中間違ってないか?

- ガラムサイズ水路の水門

あの地下水路はホワイトムースとかオルトロスでもうおなかいっぱい。水門の鍵は手に入れたし、手紙を解読すればいいんだろうけど、なんだか行く気になれなかった。

- ガリフの里ジャハラの風水師

ヘネ魔石鉱の奥に連れてってくれない。ときどき話しに行ってるのだけど、「まだ早いのだよ」とか言われる。レベル上げなきゃいけないのかな? レベル52の頃に幻妖の森からちょっとだけ入れるエリアで奥の敵であろうと思われる「アビス」と戦ったけど、確かに強かった。

- モスフォーラ山地の浮き草

結局あの浮き草は何だったんだろう? 行っていないエリアもあるなあ。チョコボが怪しい? 何かレアなアイテムでもあるのかな?

- ソーヘン地下宮殿の伝説の竜

「アルケイディアに行くだけなら関係ないよ」とか言われたやつ。ここに神竜がいるのかな? ナルビナ砦の帝国軍兵士も、アルケイディスには竜の伝説があるって言ってたしなあ。

追記。
ソーヘン地下宮殿の伝説の竜は、2006-05-06 の「FF12 の魔神竜の出会い方と攻略 修験の扉の開け方」で討伐した。

- 死都ナブディスのメダル

ダラン爺のところにいるロッケンモウに依頼されたメダル集め。かなり昔に頼まれたことなので、どのメダルが足りないんだかわからなくなった。モブのデスサイズはやっつけたし、隠し店も行ったしなあ。ここって何かいいものあるのかな。何しろ死都だしなあ。

- 古代都市ギルヴェガンのクリスタルグランデの深層

グレネードだかなんだかのボム系の敵に追いかけ回され、泣く泣く帰ってきたギルヴェガン。あそこキライ。セーブポイントも遠いし。でも、ここは何かいい物がありそうな雰囲気。何てったって古代都市だしね。

- 召喚獣を集める

配下に加えた召喚獣はいまのところ7体。魔神ベリアス、死の天使ザルエラ、憤怒の霊帝アドラメレク、暗黒の雲ファムフリート、密告者シュミハザ、統制者ハシュマリム、背徳の皇帝マティウス。もっとたくさんいると思う。でも、どこにいるんだろう? 他のイベントと連動してる? 古代都市ギルヴェガンも怪しい。

- 黒魔法コラプス、白魔法フルケアを取る

コラプスとフルケアってどこにあるの?

白魔法ケアルガがかなり使えるので、フルケアはあってもなくてもいい物なのかな? でも 全員の HP 全回復でステータス異常も全部回復だったらちょっとほしいかも。ケアルガもアーシェ以外のキャラが使うと、とくにバブル使用時に回復力の不足を感じるときがあるしね。

コラプスはどんな魔法なんだろう? イメージ的にはダークシュナイダーが使ってた超原子崩壊励起 (ジオダ=スプリード) みたいな感じ? あ、でも確か 2006-05-04 の「FF12 のモブ 神 (闇神) の出会い方と攻略」で討伐した闇神がコラプス使ってたけど、そんな感じじゃなかったような気がする。今まで集めるだけで使ったことがない「コラプスの魔片」で確かめてみるか。

- レアモンスター狩り

フォーン海岸のハントループに参加したのがつい最近だったから、レアモンスターはほとんど狩ってない。運に左右されるだろうし、コンプするのは大変だろうなあ。先は長い! (安駄婆)

- クランレポートのハントカタログを埋める

ハントカタログは地道に戦っていけばコンプリートできそう。がんばるぞ。

2006-05-04 (Thu)

* FF12 のモブ 神 (闇神) の出会い方と攻略

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ゲーム] [FF12]

ファイナルファンタジー12のモブ (討伐対象の危険モンスター) の神 (闇神) の出会い方と攻略法のメモ。

- 神 (闇神) の依頼情報

「No.44 神か悪魔か」。緊急討伐依頼扱いのモブ。依頼人はモンブラン。王都ラバナスタの市街地北部にあるクラン「セントリオ」の主宰。神 (闇神) のランクは S。

クランレポートによると、神は正式名称を闇神という。命運を予測する陰陽道を究めし者が、巨大な闇の力により邪悪化した姿とのこと。

私の神 (闇神) 討伐時のレベルは67。楽々だった。ガンビットも雑魚敵用から変更する必要もないくらい。でも、S ランクにしては結構強いという印象を受けた。

- 神 (闇神) との出会い方

神 (闇神) はヤクト・ナルドアにある大灯台の「地下層/行き先不明」にいる。ここに行くまでは非常に長かった。

「行き先不明」に行くには、大灯台1Fの「始原の層 外郭」にある天道器を使う。ただし、天道器ははじめは「暗影の層」にしか行けない。大灯台地下層の「暗影の層」、「闇昏の層」、「陰裏の層」、これら3つの層のそれぞれの外郭にある「黒き台座」に「黒の珠」を奉納して、闇を払う必要がある。それぞれの層の黒き台座に奉納を終えると、天道器で次の層に行けるようにという仕組みだ。

必要な黒の珠の数はどれくらいか数えてないが、3層合計で100個くらいあれば十分だと思う。暗影の層などにある「黒の珠の凝集」などは10個くらいの黒の珠が一気に手に入る。これらをうまく利用して集めていく。

結構雑魚敵が強かったりする。とくに外郭よりも内郭の敵に徒党を組まれたときがやばい。レベル60くらいのときは、アバドンやデッドリーボーンの集団とスプラッシュに大挙して押し寄せられて全滅しそうになり、命からがら天道器に乗り込んで退却したこともあった。

聖属性に弱い敵がたくさんいるので、聖属性の武器を持ってると楽かもしれない。たとえば、聖剣エクスカリバーとか、ホーリーランスとか。あ、これらがほんとに聖属性かどうかは、持ってなかったので私は知らない。

途中で「エリクサーちょうだい」とエリクサーをねだってくるマジックポットや、ボスモンスターのフェニックスがいたりすることもあるので注意。マジックポットは攻撃すると強力な黒魔法「フレア」で反撃してくるので手を出さない方がいい。扉によってエリアが隔てられている場合は、「盗む」で盗み役の人がマジックポットからエリクサーを盗み、その瞬間に扉を開くという方法でエリクサーを盗んで逃げることもできる。

- 闘神ではなく闇神

初めて会ったとき、神ではなく闇神と表示されたので、あれ? 神じゃなくて闇神なの? と思った。依頼人のモンブランは呼び名はどうでもいいと思っているらしい。討伐後に報告に行ったら以下のようなことを言われた。

クポッ、クポポポポッ! 神を倒したクポ!?
え、神じゃなくて闇神だったクポ?
細かいことはどっちでもいいクポ!

ところで、読みは「やみがみ」でいいんだよね? 闇って音読みあるのかな? 辞書引いたけど見つけられなかった。

ちなみに、私は途中まで闇神じゃなくて闘神 (とうしん) だと思ってた。「門構え」で始まって「神」で終わる単語のうち、私の語彙の最上位にあるのは「闘神」だったためだ。幽遊白書の闘神の雷禅という名が心に残ってるということも理由の一つかな。というわけで、モンブランと話すまでずっと闘神だと思ってた。

モンブランと話してるうちに、なんか字面が変だなあと思ってよく見たら闘神じゃなくて闇神だと書いてあることに気づいた。

今ちょうどテレビかプレイステーション2の調子が悪いために、DELL の20.1インチ液晶ディスプレイ UltraSharp 2001 HAS に PS2 を S端子接続しているので気づくことができた。さすがに細かい部分まで潰れずに表示される。いつも使っている29インチのテレビに S端子接続していたときはビュエルパなのかビュエルバなのか判別に困ったこともあるけど、UltraSharp 2001 HAS ならくっきり見える。

- 神 (闇神) と戦う


神 (闇神) はしもべを召喚して使役してくる。召喚開始からしもべを倒すまでの間、神 (闇神) はこちらの攻撃を魔法障壁と完全マバリアと白の風で完全に防いでいるので、まずしもべから片づける。ちなみに「白の風」はステータス異常防御結界。初めて見た。FF5 の青魔法「ホワイトウインド」は回復魔法だったけど、今回はそうじゃないんだね。

しもべは四神になぞらえたモンスター。基本的に過去に大灯台で戦ったことのある敵ばかり。しかも「盗む」をしても何も持ってないという有様。一体目のしもべはパンデモニウム (玄武)、二体目はシャーリート (青竜)、三体目はフェンリル (白虎)、四体目はフェニックス (鳳凰)。

闇神自体はそんなに強くはない。しもべと闇神の攻撃が重なるときついときもあるけど、基本的に白魔法ケアルガによる回復のガンビットをセットしておけば十分。発動条件は HP<60% か HP<70% くらいでいいかな。

あとは MP<10%の自分>>チャージ のガンビットさえあれば倒せる。バブルによる HP 倍増や裏魔法「デコイ」による囮戦法は必要なかった。

ヴァンに盗めるアイテムが良くなるアクセサリ「盗賊のカフス」を装備させて闇神から盗んだら、「くさった肉」を得られた。えー、これだけ? いや、神様なんだしせめて「邪神の肉」とか持っていてほしかった。でも何で肉なんだ? Fresh meat! とか言ってくる Diablo のブッチャーさんと関係があったりする?

ちなみに闇神戦で装備していた武器は以下の通り。
ヴァン ゴールドアックス。盾はデモンズシールド。
アーシェ ブレイクブレイド。盾はデモンズシールド。
バッシュ アルテマウェポン。盾は両手剣のためなし。

今考えると、闇神は強力な魔法攻撃をしてくるので、デモンズシールドよりも魔法防御力の高い「イージスの盾」の方が良かったかも。そういうことをあんまり考えなくても勝てちゃったからなあ。

- 神 (闇神) の弱点属性は聖

ガンビット「聖に弱い敵」が反応。ホーリーが効くようだけど、長いアニメーションの発動待ちになってしまうことがあるので、バシバシ直接攻撃してる方が早かった気がする。何しろレベル67だったもんなあ。

以下、召喚されたしもべの弱点。

パンデモニウムにはガンビット「風に弱い敵」が反応。でも、黒魔法エアロガを使うより殴った方が早い。
シャーリートにはガンビット「火に弱い敵」が反応。これも黒魔法ファイガを使うより殴った方が早い。
フェンリルにはガンビット「聖に弱い敵」が反応。またまた白魔法ホーリーを使うより殴った方が早い。
フェニックスの弱点は未調査というか、ガンビットが反応しなかった。でも、バリアチェンジして弱点が変わる。わざわざ弱点を増やしてるの? というわけで、やっぱり殴った方が早い。

というわけで、肉弾戦最強。

- 神 (闇神) の攻撃への対策

陰陽道を究めているだけあって、多くの上級魔法を使ってくる。コラプス、ホーリー、ショック、スリップ、デスペガ、ドンムブガ、フィアガ、アンチ。

意外とアンチがいやらしい。HP と MP を入れ替えるという効果があるが、これで一時的に HP が一気に減らされて、そこを狙われて戦闘不能になることがあった。ホーリーなどがきつければ、聖属性を吸収する「白の仮面」とか「賢者の指輪」などを使うのがいいと思うが、そこまでする必要はなかった。

シャイニングレイ。
ダメージは1400から2200程度なので、ケアルガ一発で対策完了。

ダークネス。
どんな技だったか忘れた。脅威でも何でもなかったような気がする。

- 神 (闇神) 討伐の報酬

神 (闇神) 討伐時の獲得ライセンスポイントは表示されなかった。ただ、戦闘前に496ポイントだった LP が戦闘終了後には619にまで増えていた。しもべ4体と闇神で123ポイントってことか。

依頼人からは報酬として以下を受け取った。

20000ギル。
ラストエリクサー 2つ。

報酬は意外と少ないかなあ。もっとレアな武器とかほしいんだけど・・・。

ところで、クランレポートのモブリストでは、神 (闇神) に対して「退治」という表現が使われている。No.14 のボーパルバニーとギルガメだけ「倒す」という表現で、他はみんな「討伐」なのになぜこれだけ・・・と思ったら、No.20 のダークスティールも「退治」という表現が使われていた。なんで? 闇の住人をやっつけたときは「退治」と呼ぶものなのかな。

2006-05-03 (Wed)

* C# と DirectX で動画を再生する

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [.net] [C#] [Windows]

2006-04-27 「C# でスクリーンセーバーを作る」の続き。C# から DirectX を使って MPEG2 の動画を再生する。

- DirectX SDK のダウンロード

動画再生部分は DirectX を使って作ることにしたので、DirectX SDK をダウンロードした。サイズが390.2MB もあるので、気長に。

DirectX SDK - (April 2006)
http://www.microsoft.com/downloads/details.aspx?FamilyId=7AB ...

ダウンロードしたファイルを実行。インストーラではいつも通り「次へ」を連打してインストール完了。

- Microsoft.DirectX.AudioVideoPlayback で動画を再生

動画再生部分は Microsoft.DirectX.AudioVideoPlayback を使って簡単に作れた。

string path = GetNextClipPath();
fileIndex++;
if (videoClip == null) {
    videoClip = new Video(path);
} else {
    videoClip.Ending -= this.ClipEnded;
    videoClip.Open(path);
}
videoClip.Ending += new System.EventHandler(this.ClipEnded);
videoClip.Owner = this;
videoClip.Fullscreen = false;
Bounds = new Rectangle(0, 20, 1280, 960);
videoClip.Play();

これをベースとしている Visual Studio 2005 のスクリーンセーバースタートキットに組み込めば、動画を再生するスクリーンセーバーのできあがり。とっても簡単だ。

プログラムに名前を付けよう。スタートキットがデフォルトで付ける ScreenSaver1.exe だと味気ないし、「画面のプロパティ」で選択するときも何か名前が表示されてほしいし。とくに思いつかなかったので、とりあえず SaveTheQueen (セーブザクイーン) にした。FF12 に出てきた剣の名前が元ねただ。FF9 にも出てきたかな? もともと 2006-04-20 の「FF12 のムービーをリッピング (ripping) して再生」でリップしたファイルを再生するスクリーンセーバーを作るのが目的だから、save という単語が入っていて、FF っぽい名前であればなんでも良かった。

- SaveTheQueen のソース

後の私も含めて、誰かの参考になるかもしれないので、メインフォームとオプションフォームのコードを全部載せておく。私の環境以外を考慮していないコードだし、エラー処理やオプションの処理も入ってない。たとえばビデオクリップのパスに対して FileExists() もしてない。

ソース一式とバイナリをパッケージしたものはそのうち作ろうかな。Suversion から 自動でチェックアウトしてビルドして ClickOnce としてパッケージするようにしよう。

ScreenSaverForm.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Microsoft.DirectX.AudioVideoPlayback;

namespace SaveTheQueen {
    partial class ScreenSaverForm : Form {

        private bool isActive = false;
        private Point mouseLocation;
        private Video videoClip;
        private DefaultTraceListener dtl;

        /// <summary>
        /// 再生するリスト上の現在位置。始点は0。
        /// </summary>
        private int fileIndex = 0;

        public ScreenSaverForm() {
            Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            dtl = (DefaultTraceListener)Trace.Listeners["Default"];
            dtl.LogFileName = @"c:\trace.txt";

            InitializeComponent();
            SetupScreenSaver();
            PlayVideoClip();
        }

        private void SetupScreenSaver() {
            Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            // ダブル バッファを使用して、表示パフォーマンスを改善します。
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);

            // マウスをキャプチャします。
            this.Capture = true;

            // アプリケーションを全画面表示モードに設定して、マウスを表示しません。
            Cursor.Hide();
            // Bounds = Screen.PrimaryScreen.Bounds;
            ShowInTaskbar = false;
            DoubleBuffered = true;

            ResumeVideoClip();
        }

        /// <summary>
        /// 現在再生しているビデオクリップの情報を保存します。
        /// </summary>
        private void SaveVideoClip() {
            Properties.Settings.Default.LastClipIndex = fileIndex - 1;
            Properties.Settings.Default.LastClipPosision = videoClip.CurrentPosition;
            Properties.Settings.Default.Save();
        }

        /// <summary>
        /// 前回終了時に再生していたビデオクリップの情報を復元します。
        /// </summary>
        private void ResumeVideoClip() {
            int lastClipIndex = Properties.Settings.Default.LastClipIndex;
            if (0 <= lastClipIndex && lastClipIndex < Properties.Settings.Default.videoClipPath.Length) {
                fileIndex = lastClipIndex;
            }
      }

        private void PlayVideoClip() {
            Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name );

            string path = GetNextClipPath();
            fileIndex++;
            if (videoClip == null) {
                videoClip = new Video(path);
            } else {
                videoClip.Ending -= this.ClipEnded;
                videoClip.Open(path);
            }
            videoClip.Ending += new System.EventHandler(this.ClipEnded);
            videoClip.Owner = this;
            videoClip.Fullscreen = false;
            // WindowState = FormWindowState.Normal;
            Bounds = new Rectangle(0, 20, 1280, 960);
            videoClip.Play();
        }

        private void ClipEnded(object sender, System.EventArgs e) {
            Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            PlayVideoClip();
        }

        private string GetNextClipPath() {
            Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            if (Properties.Settings.Default.videoClipPath.Length == 0) {
                return "";
            }
            if (Properties.Settings.Default.videoClipPath.Length - 1 < fileIndex) {
                fileIndex = 0;
            }
            if (fileIndex < 0) {
                fileIndex = Properties.Settings.Default.videoClipPath.Length - 1;
            }

            string path = Properties.Settings.Default.videoClipPath[fileIndex];
            Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + path);

            return path;
        }

        private void ScreenSaverForm_MouseMove(object sender, MouseEventArgs e) {
            Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            // IsActive および MouseLocation を、このイベントが最初に呼び出されるときにのみ設定します。
            if (!isActive) {
                mouseLocation = MousePosition;
                isActive = true;
            } else {
                // 最初の呼び出し以来マウスが著しく移動した場合、閉じます。
                if ((Math.Abs(MousePosition.X - mouseLocation.X) > 10) ||
                    (Math.Abs(MousePosition.Y - mouseLocation.Y) > 10)) {
                    Close();
                }
            }
        }

        private void ScreenSaverForm_KeyDown(object sender, KeyEventArgs e) {
            Trace.WriteLine(DateTime.Now.ToString() + System.Reflection.MethodBase.GetCurrentMethod().Name);

            if (e.KeyData == Keys.F) {
                // 次のクリップ
                PlayVideoClip();
            } else if (e.KeyData == Keys.B) {
                // 前のクリップ
                fileIndex -= 2;
                PlayVideoClip();
            } else if (e.KeyData == Keys.R) {
                // 現在再生中のクリップを頭からもう一度再生
                fileIndex--;
                PlayVideoClip();
            } else {
                Close();
            }
        }

        private void ScreenSaverForm_MouseDown(object sender, MouseEventArgs e) {
            Trace.WriteLine(DateTime.Now.ToString() + System.Reflection.MethodBase.GetCurrentMethod().Name);

            Close();
        }

        private void ScreenSaverForm_FormClosing(object sender, FormClosingEventArgs e) {
            Trace.WriteLine(DateTime.Now.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            if (videoClip != null) {
                SaveVideoClip();
                videoClip.Dispose();
                videoClip = null;
            }
        }
    }
}

ダブルバッファなどはベースとしたスクリーンセーバースタートキットに最初から入ってたもの。効果のほどは不明。コメントアウトしても問題なく再生できてたし。CPU 負荷や GPU の負荷が違うのかな。タスクマネージャで見てたけど、コメントアウトしても負荷が十分に低かったので違いがわからなかった。

OptionsForm.cs
using System;
using System.Configuration;
using System.Drawing;
using System.Windows.Forms;


namespace SaveTheQueen {
    partial class OptionsForm : Form {
        public OptionsForm() {
            InitializeComponent();

            // 現在の設定からテキスト ボックスを読み込みます。
            try {
                backgroundImageFolderTextBox.Lines = Properties.Settings.Default.videoClipPath;
            //  rssFeedTextBox.Text = Properties.Settings.Default.RssFeedUri;
            } catch {
                MessageBox.Show("スクリーン セーバーの設定での読み取り中に問題が発生しました。");
            }
        }

        // [適用] ボタンが最後に押されてから変更が行われた場合にのみ、
        // [適用] ボタンをアクティブな状態に更新します。
        private void UpdateApply() {
            /*
            if (Properties.Settings.Default.BackgroundImagePath != backgroundImageFolderTextBox.Text
                  || Properties.Settings.Default.RssFeedUri != rssFeedTextBox.Text)
                applyButton.Enabled = true;
            else
                applyButton.Enabled = false;
            */
        }

        // [適用] ボタンが最後に押されてからの、すべての変更を適用します。
        private void ApplyChanges() {
            Properties.Settings.Default.videoClipPath = backgroundImageFolderTextBox.Lines;
            Properties.Settings.Default.Save();
        }

        private void btnOK_Click(object sender, EventArgs e) {
            try {
                ApplyChanges();
            } catch (ConfigurationException) {
                MessageBox.Show("設定を保存できませんでした。スクリーン セーバーと同じディレクトリ内に .config ファイルがあることを確認してください。", "設定を保存できませんでした。", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } finally {
                Close();
            }
        }

        private void btnCancel_Click(object sender, EventArgs e) {
            Close();
        }

        private void btnApply_Click(object sender, EventArgs e) {
            ApplyChanges();
            applyButton.Enabled = false;
        }

        // ユーザー指定された URI が有効な RSS フィードにポイントするかどうかを確認します。
        private void validateButton_Click(object sender, EventArgs e) {
            try {
                // RssFeed.FromUri(rssFeedTextBox.Text);
            } catch {
                MessageBox.Show("有効な RSS フィードではありません。", "有効な RSS フィードではありません。", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            MessageBox.Show("有効な RSS フィードです。", "有効な RSS フィードです。", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }

        private void browseButton_Click(object sender, EventArgs e) {
            // [ファイルを開く] ダイアログを開いて、イメージを選択します。

            DialogResult result = backgroundImageFolderBrowser.ShowDialog();
            if (result == DialogResult.OK) {
                backgroundImageFolderTextBox.Text = backgroundImageFolderBrowser.SelectedPath;
                UpdateApply();
            }
        }

        private void rssFeedTextBox_TextChanged(object sender, EventArgs e) {
            UpdateApply();
        }

        private void backgroundImageFolderTextBox_TextChanged(object sender, EventArgs e) {
            UpdateApply();
        }

        private void backgroundImageOpenFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e) {

        }

        private void backgroundImageFolderBrowser_HelpRequest(object sender, EventArgs e) {

        }

        private void button1_Click(object sender, EventArgs e) {
            DialogResult result = videClipOpenFileDialog.ShowDialog();
            if (result == DialogResult.OK) {
                backgroundImageFolderTextBox.Lines = videClipOpenFileDialog.FileNames;
                UpdateApply();
            }
        }

        private void rssGroupBox_Enter(object sender, EventArgs e) {

        }
    }
}

OptionsForm.cs は不要なコードを消してないので冗長。

C#でムービースクリーンセーバー
http://d.hatena.ne.jp/bellbind/20060428/1146200768
ムービースクリーンセーバーを作ったってはなしだけど、作るのに必要な情報は入って無いんで自分で調べて書いてみた。

  public SimpleScreenSaver() {
    this.FormBorderStyle = FormBorderStyle.None;
    this.WindowState = FormWindowState.Maximized;
    this.KeyDown += new KeyEventHandler(this.MyKeyDown);
    this.MouseDown += new MouseEventHandler(this.MyMouseDown);
    this.Load += new EventHandler(this.MyLoad);
    this.ClientSize = new Size(640, 480);
    this.player = new Video("movie.avi");
    this.player.Owner = this;
  }

(略)

cscでのビルドには/r:Microsoft.DirectX.AudioVideoPlayback.dllが必要だけど、これはc:\WINDOWS\Microsoft.NET\DirectX for Managed Code\*\以下にあるのでそれを使う。

私もとりえあず再生さえできれば良かったので AudioVideoPlayback を使いました。

あれ? もしかして DirectX の dll って最初からインストールされてたのかな? わざわざ SDK をダウンロードする必要ってなかった? まあ、スクリーンセーバーを作るためだけにわざわざ Visual Studio 2005 をインストールしてるわけだから、DirextX SDK を追加で入れるくらい誤差みたいなものということで。それにそもそも .NET Framework 2.0 をインストールする必要がある。スクリーンセーバーのためだけに .NET Framework 2.0 を要求するって結構すごいよなあ。

本当はもっといろいろ DirectX の機能を使ってみようかと思った。ビデオクリップの解像度にあわせてディスプレイの解像度を変更したり、マルチディスプレイ環境では再生するディスプレイを選択できるようにしたりとかね。でも、結局液晶ディスプレイで再生してるので、解像度を落としても dot-by-dot で再生できるわけじゃなく、スケーリングが入るので美しさは変わらない。高い解像度のままでも CPU や GPU の負荷もとくに問題にならなかった。マルチディスプレイ対応については、「あったらいいな」くらいで必須じゃない。というわけで今の私の環境ではあんまり意味がなくなったので見送った。

2006-05-01 (Mon)

* POSIX::floor() を使うと計算が合わない

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Perl]

Perl で大きな数字を扱うと、計算結果があわないという相談を受けた。

- Perl の丸め誤差?

349347958500 * 466593284000 / 699889926000 という計算が 232898639000 にならずに 232898638999 になるという。

そもそもすごい桁数。3000億 * 4000億って、これ何の計算なの? と聞くと、金額計算のプログラムで、巨大数値入力テストでのエラーケースだという。なるほど、納得。

- ソースコードを確認

ちゃんとソースを持ってきてくれていたので、該当箇所を探してみる。あった。って、floor って関数を呼んでるのね。Perl というかこれが悪いんじゃないの? これってどの名前空間のメソッド? と思って先頭行の use を探してみるとそれらしきものがあった。

use POSIX qw(math_h)

POSIX って、POSIX 規格のモジュール? となると、これって POSIX の仕様?

- 実行環境を確認

テスト環境のターミナルを使わせてくれたので環境を確認。

Welcome to Linux 2.2.16.

valeria:~> uname -a
Linux valeria 2.2.16 #2 Mon Aug 14 23:19:26 JST 2000 i686 unknown

相談してきた人は管理者ではないので、ディストリビューションは不明。TurboLinux なのかな? それにしてもなかなかに古いなあ。まあ、特定環境で使うものだし、仕方がないでしょう。

valeria:~> perl -v

This is perl, version 5.005_02 built for i486-linux

Copyright 1987-1998, Larry Wall

Japanization patch 4 by Yasushi Saito, 1996

Modified by Hirofumi Watanabe, 1996-1998
jperl5.005_02-981225
EUC version

Perl も古い。5.005_03 じゃなくて 5.005_02 か。おや? Hirofumi Watanabe って Ruby の ML などでみかける わたなべ ひろふみ さん?

- コマンドラインから試す

Perl って比較的簡単にコマンドラインから試せるから好き。

valeria:~> perl -MPOSIX -le 'print floor(349347958500 * 466593284000 / 699889926000)'
232898638999

あー、確かに 232898639000 よりも少なくなるね。

valeria:~> perl -MPOSIX -le 'print 349347958500 * 466593284000 / 699889926000'
232898639000

floor() を使わなければ OK と。

valeria:~> perl -le 'print floor(349347958500 * 466593284000 / 699889926000)'
Undefined subroutine &main::floor called at -e line 1.

もちろん、標準の名前空間に floor() が無いことも確認。

調べてみると、POSIX::floor は C のライブラリを呼んでるだけということがわかった。POSIX 規格の関数を実装したライブラリだというなら、そうだろうなあ。結局そこの仕様を調べないと原因も対処も確定しない。

相談してきた人によると、どうするかは今後検討するとのこと。相談者はもともと別件でこのプログラムを修正していた。テストケースを増やしたところ、このエラーを見つけることができたとのこと。テスト重要。

- 追記

上記のメモをご覧になった方から、解説と Perl および C のサンプルコードをメールで頂いた。ありがとうございます。その結果理解したことをメモ。

1. 今回の計算は「丸め誤差」ではなく、オーバーフローが原因。
2. 今回の計算は、IEEE754 に則った倍精度浮動小数点数で表現できる範囲を
超えている。
3. Perl は倍精度浮動小数点数で計算している。
4. Perl であれば Math::BigFloat を使うとより高い精度で計算ができる。

この分野って過去に情報処理技術者試験のために学んだくらいで、普段全く使わない。1の補数とか2の補数とか、少ないビットで大きい数を表すとかね。

追記をしていても、自分の中でも消化し切れてない感じがある。「オーバーフローしている」のに、なぜ「正しい計算結果が出ている (ように見える)」のかがよくわからない。たまたまそういう結果になるような数値を使って計算したから? 「下二桁が00だから、その部分を除いて考えると倍精度浮動小数点数の表現範囲に収まる」と思いかけたけど、明らかに足りないし。少しずつ勉強していこう。

- 追記2

以下でも解説を頂いた。ありがとうございます。
http://www.kt.rim.or.jp/~kbk/zakkicho/zakkicho11.html#D20060 ...
これにしたがってprintの整形ルーチンが四捨五入して数値を丸めているので一見合っているかのように見えるだけ。それに対してfloorで丸めると切り捨てになるので、桁あふれが起きて生じた小数部分の分、答えが違うということになる。

メールで頂いた解説と上記 URL の説明を読み、実際に自分で試してみてやっと理解することができた。
オーバーフローの結果失われた数字が小さかったことと、四捨五入がオーバーフローして失われた分を偶然回復するような動きとなったために、結果として正しい計算ができたように見えたということだ。

すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。