迷いの国のxxx HYPER

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告
|

閏年

昨日、PS3の障害が発生し、「使わないで下さい!」ってニュースになってました。
後で見てみたら、「2010年を閏年と間違っていたために発生した」障害だったそうで‥。

まてまてまて。
どうやったら2010年が閏年になるんだ?

プログラム関係の仕事をされている人なら、
多分一度くらい、日付関係で悩んだことあるんじゃないかと思いますが、
最近は組み込みのdatetimeライブラリ使ったりするから、
もうあんまり悩むこともないのかもしれませんが。
PS3の場合は自作したんだろうとは思いますが。

閏年の定義って、一般的には、

1.4で割り切れる
2.1に該当するが、100でも割り切れる場合は閏年ではない
3.2に該当するが、400で割り切れる場合は閏年

という条件、つまり、
当該年をyearとすると、

if(true == ((0 == year%4 && 0 != year%100) || 0 == year%400))

とか、そんな感じの条件文になる筈。

しかし、そもそも2010年は、4で割り切れない。
100でも、400でも割り切れない。
全然閏年じゃない。

PS3は2006年11月発売なので、
もし、「偶数年を閏年」と勘違いしていたのだとすると、
2007、2008、2009、2010と経過して、

2008年は閏年で正解、
2010年を閏年と誤認

となって、今回のケースと合致するけれど、
テストとかもしていると思うし‥

ただ、テストケースを、
「閏年でない」2007年と、
「閏年」2008年で実施した場合、
どちらもクリアするから、偶数年を閏年にしたのかなぁ。
でもありえないなぁ‥。


そういえば、前、地震計のトラブルで、
続きを読む
スポンサーサイト
プログラム
| コメント:2 | トラックバック:0 |

SQL Server Compact 3.5 その3

何となく再開したSQL Server Compact 3.5の調査。

オンラインブックがあるらしいということで、
Microsoft SQL Server Compact 3.5 オンライン ブックおよびサンプル
から「SSCEBOL-JPN.msi」をダウンロードして、インストール。
インストール後、[スタート]-[プログラム]-[Microsoft SQL Server Compact3.5]
からオンラインブックを起動出来ました。

オンラインブックを見て行くと、次のような記述が。
NorthwindOleDb は、SQL Server Compact 3.5 データベースの
作成と対話に必要な OLE DB の使い方を紹介した
Visual C++ for Devices のサンプル アプリケーションです。
このアプリケーションは、OLE DB を使用してデータベースを作成し、
テーブルを作成したら、SQL ステートメントを使用してデータを挿入し、
最後に IRowsetSeek を使用してデータベースからデータを取り出します。

NorthwindOleDb ネイティブ サンプルは、
SQL Server Compact ダウンロード サイトからダウンロードできます。
サンプルのインストール場所は
%Program Files%Microsoft SQL Server Compact Editionv3.5Samples
です。


ネイティブのサンプルコード欲しい!
と思って、ダウンロードサイトに行ってみたのですが、
サンプルコードらしきものは見当たらず‥。

%Program Files%Microsoft SQL Server Compact Editionv3.5Samples
には、「Northwind.sdf」っていうファイルのみ。
このファイル自体はSQL Server Compact 3.5用のDBファイルなのですが、
これにアクセスするネイティブのサンプルコードがどこにも見当たらないのです。

うーん。この先どうしようかな‥。
プログラム
| コメント:3 | トラックバック:0 |

SQL Server Compact 3.5 その2

取り敢えずVisual Studio 2008 Professional Edition (90 日間評価版)
をダウンロードしました。
ダウンロード完了したファイルは
「VS2008ProEdition90dayTrialJPNX1435988.iso」

‥これってDVDに焼いて使えってことですか?
うちのへっぽこノートPCはDVD焼けません。

仕方がないので、CD/DVDのイメージファイルを仮想的にマウントする
フリーのソフトを使ってこのイメージファイルを読み込みました。

長時間かかりましたが、無事Visual Studio 2008がインストールされました。
ついでにVisual Studio 2008 SP1もインストール。

そのまま「%Program Files%Microsoft SQL Server Compact Editionv3.5」
フォルダを見てみると、ちゃんと「include」フォルダが出来ていました。

今後、Visual C++ Express Editionにてコーディングしていきます。
90日後にはこの「include」フォルダもなくなってしまうのでしょうか‥。
プログラム
| コメント:0 | トラックバック:0 |

駄目駄目プログラマの独り言‥3 SQL Server Compact Edition 3.5

マルチメディアタイマの件は閑話休題‥。
ごめんなさい。
ていうか、誰も見ていないから大丈夫です。

SQL Server Compact Edition 3.5を
C++で使ってみたいと思い、調査を開始しました。

現在の環境はVisual C++ 2008 Express Editionのみです。

SQL Server Compact Edition 3.5のRuntimeをインストールしましたが、
必要なヘッダファイルが足らないことがわかりました。
現在までの手順は次の通りです。

 ?Visual C++ 2008 Express Editionをインストールする
 ?SQL Server Compact Edition 3.5 Runtimeをダウンロードする
 ?ダウンロードしたファイルSSCERuntime-JPN-x86.msiを実行する
 ?次のファイルパスが「存在しない」ことを確認する
  「%Program Files%\Microsoft SQL Server Compact Edition\v3.5\Include」
  (「%Program Files%\Microsoft SQL Server Compact Edition\v3.5」はある)

 SQL Server Compact Edition 3.5のReadMeをよく読むと、
 SQL Server Compact 3.5 ヘッダー ファイル (ネイティブ開発用) は
 「SSCEVSTools-JPN.msi」に含まれていることがわかりました。
 このファイルをマイクロソフトのダウンロードセンターで検索したのですが、
 見つかりませんでした。

 この「SSCEVSTools-JPN.msi」は「Visual Studio 2008 SP1」の
 中にあるという情報がありましたので、
 Visual Studio 2008 Professional Edition (90 日間評価版)をダウンロードし、
 試してみることにします。

 結果は近日中に記載したいと思います。
プログラム
| コメント:2 | トラックバック:0 |

駄目駄目プログラマの独り言‥2

今日はマルチメディアタイマについて。

一応免責しておきます。
このブログの記述を利用したことによって何らかの損害が生じても、当方は一切の責任を負いません。御了解の上、自らの責任に於いてお使い戴きますようお願いいたします‥

現在、Windows Vista HP SP1で動かすアプリ作成に関わっています。
開発環境はVisual C++ 2005がメイン。
マルチメディアタイマを使っているのですが、
その中で見つけたことなどを簡単に記述します。

・タイマーのセット
 timeSetEventを使います。
 次のような型になっています。

MMRESULT timeSetEvent(
UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
DWORD_PTR dwUser,
UINT fuEvent
);


 第1引数:uDelay
  イベント遅延させる値をミリ秒で設定します。
  ここに指定できる値の範囲が限られています。
  範囲の最大値・最小値は、timeGetDevCapsで取得できるようです。
  ちなみに現在の開発環境・動作環境では、
  uDelay = 1000*1000(1000秒)
  までは指定できましたが、
  1001*1000を指定すると、エラーが返却されました。

 第2引数:uResolution
  タイマイベントの分解能を指定します。

 第3引数:lpTimeProc
  指定した時間が経過した後に呼び出すコールバック関数のポインタを
  設定します。
  ※第5引数のオプションで、コールバックではなくイベントセットに
   することが出来るようです。
   その場合、第3引数は、セットするイベントのハンドラへのポインタと
   解釈されるそうです。

 第4引数:dwUser
  コールバック関数に渡したいパラメータのポインタ

 第5引数:fuEvent
  タイプを指定します。
  ?TIME_ONESHOT/TIME_PERIODIC
   →TIME_ONESHOTを指定すると、コールバックは経過時間後1回呼ばれます
    TIME_PERIODICを指定すると、コールバックは経過時間ごとに呼ばれます
  ?TIME_CALLBACK_FUNCTION/
   TIME_CALLBACK_EVENT_SET/
   TIME_CALLBACK_EVENT_PULSE
   →TIME_CALLBACK_EVENT_SETまたはTIME_CALLBACK_EVENT_PULSEを指定すると
    コールバック関数ではなく、setEvent関数が呼ばれます。
  ?TIME_KILL_SYNCHRONOUS
   →「timeKillEvnetが呼ばれた後にコールバック関数が呼ばれることを
    防ぐ」そうです。

  それぞれの定義値はmmsystem.hに宣言されています。
  fuEventには?、?、?の論理和を設定することが出来ます。
  定義値は次の通りです。

#define TIME_ONESHOT			0x0000
#define TIME_PERIODIC 0x0001

#define TIME_CALLBACK_FUNCTION 0x0000
#define TIME_CALLBACK_EVENT_SET 0x0010
#define TIME_CALLBACK_EVENT_PULSE 0x0020

#define TIME_KILL_SYNCHRONOUS 0x0100



ソースの例やTIME_KILL_SYNCHRONOUSを使用した際に
起こったこと度を追々紹介していければと思います。

まだまだ新米プログラマです。
みなさまの暖かいご助言やご指摘を戴けると嬉しいです。
プログラム
| コメント:0 | トラックバック:0 |
| ホーム |次のページ>>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。