[ カテゴリー » PC関連 ]

冗長なのは分かってるけど

ぴったり当てはまる例が思いつかないので従業員管理の場合。一人の情報を受け渡すために、以下の構造体を定義したとします。
struct Employee
{
  int SerialNumber;  // 従業員番号
  char* OfficeRoomNumber;  // 会社での部屋番号
  char* Name;  // 氏名
  char* Address;  // 住所
  int Age;  // 年齢
}
会社では一人にひとつの部屋を割り当てるとした場合、SerialNumberとOfficeRoomNumberの両方が従業員に対して一意の情報となれます。ここで従業員を登録するために
void SetEmployee(Employee* anEmployee);
を定義。関数を呼ばれたときには引数の内容をデータベースに記録するというもの。ここまでは良かった。次にデータベースから削除するために、この関数に引数を追加、
void SetEmployee(Employee* anEmployee, int add);
「add==0ならanEmployee->OfficeRoomNumberと合致するものを削除」と仕様書に明記されました。私なら新関数RemoveEmployeeとか定義しそうですが、まぁ決めた人の都合です。

まだここまではOK。ところが後になって、引数anEmployee->SerialNumberだけ正しい情報を入れてadd=0で関数を呼ぶ例が出てきました。どっちも一意な情報なのでデータの削除にはこれだけあれば十分と思ったのでしょうが、呼ばれる方はそういう意図は知りません。当然誤動作します。

余計な情報まで含む構造体を引数として使うと定義が曖昧になり、本来必要な情報を入れずに関数が呼ばれる可能性があります。一人でプログラムを組む場合は事情が理解できているので問題とすら思わないかもしれませんが、チームでプログラムを作るときは面倒でも引数は必要十分にしたほうが良さそうです。

結局関数にさらに引数を追加、
void SetEmployee(int SerialNumber, Employee* anEmployee, int add);
SerialNumberが必要な情報だよと関数の定義レベルで明示するように私のほうで変更。案の定「構造体に入ってる情報をなぜ引数にも入れているのか」と質問が来ました。

ちなみに「関数を定義した人」=「仕様書を書いた人」=「SerialNumberだけ正しい情報を入れた人」=「質問してきた人」だったりします。まったく…

以上、今日のお仕事でした。

[2010/6/15 追記] 結局SetEmployee(Employee* newEmployee), RemoveEmployee(int SerialNumber)の2関数体制に変更

— posted by mu at 11:30 am   commentComment [0]  pingTrackBack [0]

PCでmsec時間測定

最初に話を聞いたのはGW前、具体的な内容は伏せるとして要望された内容は

数秒間隔でOn/Offを繰り返すスイッチがあるので、その間隔をパソコンを使ってmsec単位で測定したい。
とあるスポーツに関連するのですが、1/1000秒で時間を計るなんてF1等レーシングカーくらいしか聞いたことないなぁ。使用するスイッチもチャタリングの入りそうなものになりそう。依頼主もその辺の事情は理解してくれていてあまり正確にmsecにこだわらなくて良いとは言ってくれてますが、一応形的にはmsecにしたいところ。またパソコンは持ち運びが容易でないと何かと不便なのでノートPCも考慮に入れる必要があり、拡張ボードもかなり制限される。

ちなみにWindowsが提供するmsec単位の時間関数を使うという答えは残念ながら×。時間関数の精度はともかくとして、Windowsの仕組み上スイッチがOn/Offされた瞬間(もしくはそこから毎回安定した遅延で)時間関数を呼び出すことはかなり難しいから。HDDアクセスが入ったり、CPUの負荷状態が変わってスレッド切り替えに変化が生じると、msec平気でばらつきそうです。

以下検討の過程
カメレオンUSB+ロジアナキット
依頼主が考えていたのはカメレオンUSBLink +ロジアナキットでサンプリングレートをkHzオーダーにして計るというもの。USBでデータ転送するのでノートPCでもOK。 私も最初この方法で調べてたのですが、ひとつ疑問が。「ロジアナキットって、何分も連続してデータ取れるの?」なんか構造を見る限り、ロジアナキットのボード上にあるメモリに書き込んでいって、たまったらUSBで転送。転送中はデータ取得できないんじゃないかと。機能にしては安いとはいえ1万円以上するこの回路、買ってやっぱりだめでしたではお金がもったいない。
サウンドカード
連続データ取得が期待できる。WindowsはそれこそHDDの許す限り録音をやり続けるし、サンプリングレートも44.1kHzあれば十分、ノートPCにだって標準で付いている。世の中にはサウンドカードを利用したオシロスコープLink もある。スイッチのOn/Offを録音信号レベルに置き換えて入力すれば、Windows側はDirectSoundでデータを取り込んでいけばいい。が、これもサウンドカードは低周波をまともな波形で取れないLink という欠点が発覚。チャタリングの素性次第では何とかなるかもしれませんが。
再びカメレオンUSB
今度はカメレオンUSB単体。高速で連続データ取得Link する実例もあるので、できないわけじゃない。ただその場合カメレオンUSBで使われているアルテラ用のプログラムを書く必要があり、そんなの使ったことないorz どうせ勉強しなければいけないなら、PICでもAVRでも変わりないなと。
というわけで、現在ストロベリーリナックスのAVR AT90USB162を使ったボードLink を検討しています。こいつの利点としては
  • 開発環境がCで無料で入手可能
  • CDC(USBをCOMポートに見せかける機能)のサンプルコードLink が入手可能。COMポートなら.NET FrameworkとのつなぎにUnmanaged C++を使わなくても良さそう。
  • このボード単体でUSBからプログラムの書き込み可能。ブートローダ機能で何度でも書き込み可能状態に戻せる。
さぁて、うまくできるかなぁと。

[2010/6/25 追記] 続きLink

— posted by mu at 11:17 pm   commentComment [0]  pingTrackBack [0]

SQL Server ExpressのUser Instanceを使用可能にする

日本に帰ってくるととたんに更新しなくなりました(- -;) ここに書けないネタをやってるとかもあるのですがw

開発機を新しくすることになり、SQL Server 2005 Expressをインストールしたら、User Instanceを使うときにUser instanceが有効になってないと言われまして orz

答えはコマンドラインから、
sqlcmd -S localhost¥sqlexpress
1> exec sp_configure 'user instances enabled','1'
2> go
Configuration option 'user instances enabled' changed from 0 to 1. Run the RECONFIGURE statement to install.
1> reconfigure
2> go
1> exit

完全に備忘録です。これ、旧開発機でもやったんだよなぁ、多分…

[参考]

— posted by mu at 09:27 pm   commentComment [0]  pingTrackBack [0]

2010年はSemifinalist Fantasia

今年のアイレムLink のエイプリルフールは、え~っと、せみふぁいなりすとふぁんたじあ? FFLink もじるにしてもくどすぎw どうせならQualify (余計分からなくなる)

Semifinalist Fantasiaはアイレムが10年かけて開発してきたゲームで、それが開発中止となったため売却先を求めてそのゲームの紹介ページに誘導されるというもの。

R-Typeシリーズネタ、スペランカーネタ、どきどきシリーズネタ、分けの分からない生物やアイテムネタ、エンディングムービーでビル爆破と今年も満遍なくアイレムパターンをちりばめてきてました。

去年同様PS3で参加できるミニゲーム(なのか?)もありましたが、PS3持ってないw 池袋で体験できたらしいですが、今はシリコンバレーにいるから無理w日本に居ても行くかよ Webサイト見た限りでは、去年見たようなやぐらがあるのですが…

今年は約80MBLink と増加傾向。そのうち100MB越えそうだ。動画のサイズが全体の半分を占めるというのもここ2~3年の傾向から外れず。もう少し新機軸が欲しい気もするけど、今年のお色気役マーメイドの腹痛シーンが去年のダークリリーより出来がいいので許すw

— posted by mu at 11:59 pm   commentComment [0]  pingTrackBack [0]

Windows7やっと来た

blog20100323-Windows7

Acerサポートに連絡したらLink あれよあれよと事が進み、先日の3連休前にWindows7アップグレードキットが到着。Acerサポートからは発送を確認したというところまで面倒見てもらい、感謝感謝。こんなことならもっと早く連絡すればとも思うけど、ここまで遅くなったからしっかり対応してくれたのかもしれない。

2~3時間で終わるとあったアップデートに20時間以上かかって終わらなかった(*1)りと多少のトラブルはありましたが、Windows Vista SP3と言う人もいるくらいのOSなので、Vistaからのアップグレードには別段問題なく。いやAspire M7720が配達された直後にHDDのバックアップを取ってあり今回これに戻して(つまり出荷状態にして)アップグレードをかけたので、問題あったら困るのですが。

写真の画面右上の方にある青いウィンドウは、Windows Home ServerLink のセットアップ。今まで玄箱/Linuxをホームサーバとしてきたのですが、
  • ケミコンが壊れたのでLink 秋葉原に買いに行ったが、完全に容量・電圧・大きさが一致するものは入手困難らしい
  • 非Windowsでは現時点地デジに対する選択肢が狭い
  • Acer easyStoreが安売りしてた
  • Linuxに飽きたw
の理由で思わず買ってしまった次第。購入価格からすれば文句なしの製品なのですが、CPUがAtomというのが唯一の不満。来週からシリコンバレーに出張と分かっていればCore2系のCPUが積めるHP MediaSmart EX4xxLink を買ったのにorz

(*1) HDD内にあるファイルのチェックに異常なまでの時間をかけていた。再起動してやり直そうとしたらWindows Updateがかかったので、ダウンロード済みの未適用更新があるとこうなるのかもしれない。

— posted by mu at 11:11 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0263 sec.
prev
2024.5
next
      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