2007年01月26日
工程について
雑感
うちは基本ウォーターフォールなんだけど、
デザインとドキュメンテーションが混在してるなって思った。
どっちも大事だけど、やるなら
要求分析とか機能分析とか
↓
デザイン→実装→テスト→ドキュメンテーション では?って思った。
実装の前に設計書を一字一句修正するのは異常だよ。
まぁ、この辺、全部開発工程ともいえるんで、並行作業してりゃいいのかもな。
結局、実装ができない人間が設計はすんなって自己完結だ。
以上
2007年01月25日
ばぐ
リリース(内部)した後に、自分で気づくバグって不快だね。
2文字打つだけなのに。
やっぱ単体テストは自動化しないとなぁ。。。
2007年01月24日
vi
※プログラマむけ
Cygwin環境を整備してた。
今一度、CUIの利便性を考えてみる。
最近、エディタをvi(vim) に移行気味。 ( CygWin -> CygTerm + TeraTerm 環境下)
昔(大学の頃)は、こんな気持ち悪い操作絶対習得しない!って思ってたけど、
一度、使わざるをえない状況になってみると、その操作性が手放せなくなってしまう。
①シェルに切り替わった時の操作がスムーズ。
全部コマンドってのは、要するにいちいちソフトの場所探さなくていいってこと。
ランチャは設定めんどくさいし。
②ctagsがかなり使いやすい(秀丸+htags でもいいんだけど、まだ惜しい感じ)
③マウスがいらない。キー入力も最低限。
これが究極だとは思う。数行削除するのに、いちいちドラッグしなくてもいいとか。(数字+dd)
ペーストも p だけだし。Ctrl との組み合わせ操作もいらん。
④正規表現に強い
まだ、サクラや秀丸のくせが抜けないけど、検索・置換の強さといったら・・・
⑤速い
補足として、Cの構文のカラー表示もすんなり対応できたのが導入のきっかけかな。
折りたたみとかは、GUI(秀丸)のほうが使いやすい気がした。
でも、一番の理由はUNIXいじらなきゃいけない時に対応できないとまずいから。
しかし、なんで俺はIDE開発してないんだろう・・・。
あと、xyzzyとか試してみたいけど、viになれてからのemcas系は結構しんどそうだな
2006年08月18日
日付計算
アルゴリズムに悩み中。
ものすごく簡単なことなんだけど、計算オーダーの少なさと設計のシンプルさを重点したくて
概要:基準の日付、日数の差を指定した時の日付を知りたい。
入力: 日付、日数差(出来れば負も)←この数値はかなりでかい。
出力: 日付
※ 日付は { 年、月、日 } で構成。
ただ、これだけなんだけど、毎年ぐるぐるとうるう年計算して差を縮めるしか思いつかない・・・。
誰か、綺麗なモジュール設計を自慢してくれませんか?
(今、思いついたのは400年or100年or4年離れているか、で計算が有力・・・)
投稿者 toki : 00:20 | コメント (2) | トラックバック
日付計算
アルゴリズムに悩み中。
ものすごく簡単なことなんだけど、計算オーダーの少なさと設計のシンプルさを重点したくて
概要:基準の日付、日数の差を指定した時の日付を知りたい。
入力: 日付、日数差(出来れば負も)←この数値はかなりでかい。
出力: 日付
※ 日付は { 年、月、日 } で構成。
ただ、これだけなんだけど、毎年ぐるぐるとうるう年計算して差を縮めるしか思いつかない・・・。
誰か、綺麗なモジュール設計を自慢してくれませんか?
(今、思いついたのは400年or100年or4年離れているか、で計算が有力・・・)
投稿者 toki : 00:20 | コメント (2) | トラックバック
日付計算
アルゴリズムに悩み中。
ものすごく簡単なことなんだけど、計算オーダーの少なさと設計のシンプルさを重点したくて
概要:基準の日付、日数の差を指定した時の日付を知りたい。
入力: 日付、日数差(出来れば負も)←この数値はかなりでかい。
出力: 日付
※ 日付は { 年、月、日 } で構成。
ただ、これだけなんだけど、毎年ぐるぐるとうるう年計算して差を縮めるしか思いつかない・・・。
誰か、綺麗なモジュール設計を自慢してくれませんか?
(今、思いついたのは400年or100年or4年離れているか、で計算が有力・・・)
投稿者 toki : 00:20 | コメント (2) | トラックバック
2006年02月01日
移動履歴マッピング
久々にプライベートPG。といってもほとんどコピペ。
以前、vodafoneのステーションというサービスを利用し、OpenGLを使った移動履歴表示ソフトを作成したことがある。
Google Maps API というサービスをご存知でしょうか?あのGoogleの地図のAPIが公開されていて、簡単に自分のサイトで利用できるのです。
んで、位置情報とグーグルAPIを足し合わせてみました。
今の通勤路
昔の通学路1
昔の通学路2
↑ ユーザ:ここの管理者の姓 / パスワード:ここの管理者の名
まだ工数2.5hくらいなのでプロトタイプもいいところです。
でも、なんかおもしろいこと出来そう。
以上
投稿者 toki : 00:39 | コメント (1) | トラックバック
2005年12月06日
可変引数
標準ライブラリを暗記してるとかそういうわけじゃないが、今更C言語の文法にひっかかるとは思わなかった。
「可変個の引数」
printfの第二引数以降のあれです。
int printf(const char *format, ...);
ドット三つで表記します。ただし、必ず仮引数の最後で。
いくらでも引数をいれていくことができるわけです。
使い方は、
va_list list; /* va_list型の変数を用意*/
va_start( list, format ); /* ... の直前の引数をいれる */
として初期化をし、
va_arg(list, int); /* (次の)引数をint型で取り出す */
最後に、
va_end( list ); /* 可変個の引数リスト 使用終了 */
と記述する。
それぞれマクロなんだけど、なにしてるのやら。。。
printfとかはスイッチ文とかで型を決めてるんですかね。
こんなことを知ってるとprintfのトッリキーな使い方とか出来るかも。
職場でログをはくのに使ってましたのさ。
投稿者 toki : 23:42 | コメント (0) | トラックバック
2005年02月15日
('A`).dll
[4:30:55] Toki の発言:
うらなう
[4:30:58] Toki の発言:
運勢 : ('A`)
投稿者 toki : 04:31 | コメント (2) | トラックバック
2005年01月25日
処理速度
画像処理でちょっと重い処理があるんだけど,
関数で遠まわしに呼ぶようにしたら,30%くらい速くなった.
なんで!?計測する場所は変わらないのに,ダイアログボックスやメニューで呼び出すとそれぞれ時間が変わってくる.なんだよこれ!Windowsのせいか!?
わけわからん・・・。
投稿者 toki : 22:10 | コメント (0) | トラックバック
2005年01月05日
Regnessem Plugin...
ChataとRegnessemのプラグインつくったりしてんだけど、
本企画と別に名前変更メニュー追加とかしてみた。
こういうのって便利だと思うんだけどどう?
あ,のせてよかった?
投稿者 toki : 12:52 | コメント (2) | トラックバック
2004年12月28日
[C#.NET]時間計測
時間計測の仕方が大体わかった。
DateTime.Now.Ticksで、現在時刻を0.0000001秒単位のlongで返すみたい。
だから↓みたいに書けばよいかな。
long lt = DateTime.Now.Ticks;
~処理~
double dt = (DateTime.Now.Ticks - lt)/10000000.0;
MessageBox.Show(dt.ToString() + "秒");
投稿者 toki : 01:56 | コメント (0) | トラックバック
2004年12月27日
動画再生とか
なんとなく、C#.NETのフォームエディタで作ってたらさまになってきました。
というかVBだよなぁ。使ったことないけど雰囲気は。
勝手にメソッド書いてくれるし、ほとんどイベントに対して一行ずつコード増やしていくくらい。
いやぁ、これはC++&DirectShowで書いたらクエリインタフェースとか訳わかんない作業をひたすらしなきゃいけないんだよなぁ。
時間の計測とファイル選択ができればほぼ完成。素晴らしい。
ほんとは黒い四角で動画が再生されてんだけど、MediaPlayerとかプリントスクリーンしても写らないんだよねぇ。
投稿者 toki : 23:58 | コメント (0) | トラックバック
2004年12月26日
動画再生プログラミング
動画の再生をするのに、DirectShowのCOMやらなんやら難しい概念を利用しないと出来ないかと挫折気味でしたが、.NETなら簡単にできるっぽい。
Media Player コントロール。コード一行で埋め込めるとか・・・。
こういったときの開発効率って重要だよな。もちろん、中身の実装を知っていたほうがいいんだろうけど。
Visual C# による .NET Framework プログラミング入門
とりあえずSpokeでも早めに買っておこうか・・・
投稿者 toki : 15:43 | コメント (0) | トラックバック
2004年12月12日
wsprintf と sprintf
数値を書式付の文字列に置き換えるのに便利なwsprintfとsprintfですが、どう違うんだっけ!?ってよく迷ってしまいます。
wsprintf
・Win32API
・UNICODEに対応
・浮動少数は表現できない!
sprintf
・標準ライブラリ
・浮動少数OK
基本的にwsprintfはUNICODEが扱えるsprintfの簡易版ということでよいのかな。
投稿者 toki : 09:48 | コメント (0) | トラックバック
2004年10月27日
LocationMap : Station地図表示アプリ
私はvodafoneユーザなんですが、ステーションってご存知でしょうか?
まぁ簡単に言うと地域密着型情報発信って感じかな。
一番近い基地局から情報がどんどん送られてくるわけですが、そのときに基地局の簡易住所みたいのも手に入って、大体の現在地を得ることができるんですよ。まぁGPS携帯に比べれば精度は比較にならないほど低いですが。
そんな地点情報をログにとってくれるJavaアプリがあって、
それが、場所撮り(仮称)
なんですけど、数日前から使ってみたんです。データはtxt形式でメモリカードに保存されるんです。
ちょっと生データみてみると、時刻、経度、緯度、地点名が入ってました。経度緯度までわかってんなら地図まで表示しろよって思ったんですが・・・
そんなことを帰宅途中に考えていたら、OpenGLで書いちゃいました。
俺の通学路です。
ほんと大したこと書いてないのでソース載せてもいいくらい。
ただ、なにに苦労したかって・・・白地図の入手と今更ながらテクスチャの貼り付けに9割。
24bit BMPのくせになんかビット情報がうまく取得できてなかったり。
ようわからん。
もー色々時間余裕ないのにこういうこと思いつくとやってしまう・・・だめぽ。
追記。。。国土地理院の地図をフリーソフトつかって入手してんだけど、その明記が必要なようなので。
上記の地図には「白地図KenMap」を用いました。
白地図 KenMap Ver8.0 2004/11/01
国土地理院承認 平14総複 第149号 (2002/07/12)
http://www5b.biglobe.ne.jp/~t-kamada/
投稿者 toki : 00:50 | コメント (1) | トラックバック
2004年10月08日
Shading
OpenGLでシェイディング、つまり陰影付けなんだけど、パラメータが多くてちょっとやっかい。
どうやら物体の色は、光源と材質のパラメータによってきまるみたいです。
まぁそりゃ当たり前だけど、光と色ってのがあまり直感的につくれないんだよね。
光っていえば色と強さくらいしかない気がするけど、光の種類というものが存在する。
GL_AMBIENT 環境光。光が直接あたらない部分の照度 えっ(^-^; て思うけど、まぁ室内とかであちこち反射して当たる光を擬似的に表現。
GL_DIFFUSE 拡散光。光があたり、拡散する光。見る角度を変えても変わらない。
GL_SPECULAR 鏡面光。光があたり、反射する光。見る角度によって明るさが変わる。
GL_POSITION 光源の位置
GL_SPOT_DIRECTION 光源の方向
GL_SPOT_EXPONENT 輝度の分布(?)
GL_SPOT_CUTOFF 最大放射角度。スポットの範囲かな
GL_CONSTANT_ATTENUATION 一定減衰
GL_LINEAR_ATTENUATION 線形減衰
GL_QUADRATIC_ATTENUATION 二次減衰
んでもって物体の材質は
GL_AMBIENT 環境光
GL_DIFFUSE 拡散光
GL_SPECULAR 鏡面光
GL_EMISSION 放射輝度
GL_SHININESS 鏡面光の指数
GL_AMBIENT_AND_DIFFUSE 環境光と拡散光
GL_COLOR_INDEXES 環境光、拡散光、鏡面光のカラー指標
光源と材質両方で、光を指定しなきゃいけないのです。もちろん厳密に計算しようと思えばいくらでも理論はでているんだけど、それをPCに計算させるのは無謀。だから、まぁこんな風に誤魔化してつくるしかないわけ。
おそらく、光のパラメータと材質のパラメータの乗算っぽい計算で、拡散やら反射の色が決まってくるみたい。材質が暗くても、0でなければ強い光をあてることで明るくなる。
投稿者 toki : 23:08 | コメント (0) | トラックバック
2004年08月16日
ビットマップ
WindowsAPIの関数は本当にごちゃごちゃしている・・・
描画に関する関数にしても、似たような名前が多くて、かなり混乱します。
で、わかる範囲でまとめていこうかと・・・
・DC→DC
BitBlt()
StretchBlt() // 伸縮
設定:StretchBltMode()
TransparentBlt() // 透過色の設定
AlphaBrend() // 半透明処理
PlgBlt() // 回転(平行四辺形への転送)
・DCの生成
CreateComaptibleDC()
削除:DeleteDC()
・DDB(HBITMAP)の生成
CreateBitmap()
CreateBitmapIndirect() // BITMAP構造体を利用
(↑通常は、1ピクセル1ビットのモノクロビットマップの作成)
CreateCompatibleBitmap() // DC互換ビットマップ
・DCとDDBの関連付け
SelectObject()
⇔DeleteObject()
・ファイル(リソース)→DDB
LoadImage()
LoadBitmap() // リソース
・DIB→表示(DC)
SetDIBitsToDevice()
StretchDIBits() // 伸縮
・DIB→DDB
CreateDIBitmap()
値セット:SetDIBits()
・DDB→DIB
GetDIBits()
(情報は失われている可能性がある)
・ピクセル→表示(DC)
SetPixel()
・DIB と DDB の相互参照
CreateDIBSection() // ??
投稿者 toki : 22:03 | コメント (0) | トラックバック
2004年08月11日
Hello C# World.
C#の開発環境って、やっぱ VS .Netとか買わなきゃいけないのかな~とか思ってたけど、コンパイラだけなら標準でついているらしい!
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
というフォルダの csc.exe がそれ。もしなければ、WindowsUpdateの.Net Framework 1.1 とかいうのをインストールすれば無料で手に入るっぽい。
ってことでやってみよ~。
class Hello { static void Main() { System.Console.WriteLine("Hello C# World !"); } }
まぁHelloWorldコード。 Hello.cs として保存しましょう。んで、さっきのフォルダを環境変数のパスに通して、
csc Hello.cs
とすれば、exeファイルが出来上がるので実行してみましょう。
ついでにWindowsプログラミングも。
using System; using System.Drawing; using System.Windows.Forms; public class WinForm : System.Windows.Forms.Form { private Label label1; public WinForm(){ label1 = new Label(); SuspendLayout(); label1.Location = new Point(50, 30); label1.Size = new Size(260, 30); label1.Text = "Hello C# Windows World !"; ClientSize = new Size(380, 100); Controls.Add(label1); Text = "Hello C# Windows World !"; ResumeLayout(false); } [STAThread] static void Main() { Application.Run(new WinForm()); } }
ただし、さっきと同じようにコンパイルすると、コンソールが表示されるので、
csc /target:winexe HelloWin.cs
ってな風にやっとくと良い。

こんな風に表示されるはず。
投稿者 toki : 13:13 | コメント (2) | トラックバック
2004年08月03日
ビットマップの表示
MFCでは外部のビットマップファイルを読み込むものが用意されてないし、DIB形式の表示すらない。
ってことで自分でDIB形式の構造体を用意して、DIBを表示するAPIを呼び出す必要があります。
1. ファイル読込
CFILE使ってオープンする場合。
pDib = (BYTE*)new char[file.GetLength()];
file.Read(pDib, file.GetLength());
pBmfh = (LPBITMAPFILEHEADER)pDib;
pBmih = (LPBITMAPINFOHEADER)(pDib + sizeof(BITMAPFILEHEADER));
pData = pDib + pBmfh->bfOffBits;
2. 表示
表示するAPIは他にもあるけど、hdcの取得にはGetSafeHdc()を使いましょう。
::StretchDIBits(pDC->GetSafeHdc(),
0, 0, pBmih->biWidth, pBmih->biHeight,
0, 0, pBmih->biWidth, pBmih->biHeight,
pData, (LPBITMAPINFO)pBmih, DIB_RGB_COLORS, SRCCOPY);
投稿者 toki : 22:01 | コメント (0) | トラックバック
2004年07月27日
Win32APIでツールバ~
を作ろうとしてんだけど,激しくめんどくさい。
特にMFCをやったすぐ後にAPIを使いはじめたというのもあり...
ツールバーはメニューと違って,子ウインドウとして扱われるんですよ.(コントロールと考えれば当然?)だから今までつくってたクライアント領域をツールバー分ずらさなきゃいけないわけなんですよ...でもそれは気持ち悪いから,描画部分も子ウインドウとして定義したほうがいいような...MDIなんかつくろうとしたら一体どんなコードになるんだ...おそろしや...
ウインドウプロシージャはどんどん肥大化してるし...(分割すべきなの??)
かといって,MFC使ったところで機能貧弱→API呼び出すのも汚いと思うんですよね.全然OOPにならないし.
オブジェクト指向でやるなら,元からWinMainもクラスになってるC#(というか.NET)使ったほうがいいの??
でもそれこそ周りの誰も読めないコードになるんだろうな...
on_
そのうち,ちゃんとカテゴリで覚書きつづろうかな