miau's blog?

«Prev | 1 | 2 | 3 | 4 | Next»

2005年 8月 21日 (日曜日)

Batch files

- Work on miau's blog?
仕事でバッチファイル(DOS バッチ)いじる必要があったんですが、いくつかハマってたのでそのあたりの話でも。
[Read More!]
11:44:26 - miau - No comments - No Trackbacks - Permalink

2005年 7月 31日 (日曜日)

Perl とか PHP とか

- Work on miau's blog?
ここ一週間くらい缶詰になって、Web アプリケーション作ってましたので、こまごましたネタを色々と。
今回も長いので注意。
[Read More!]
04:37:28 - miau - No comments - No Trackbacks - Permalink

2005年 7月 06日 (水曜日)

Excel VBA まわり

- Work on miau's blog?
久々に仕事で使ったので、いくつか。
[Read More!]
08:02:55 - miau - No comments - No Trackbacks - Permalink

2005年 5月 29日 (日曜日)

GetTempName

- Work on miau's blog?
VBScript の GetTempName メソッド

一時ファイルまたは一時フォルダの名前をランダムに生成して返します。

ということで、今回ランダムなファイルを作るのに使ってたんですが。
たまに同じファイル名が生成されることがあるようですね。

なんらかのロジックで重複しないようになってると思ったんですが・・・考えられる原因として、

・Dual CPU なマシンだから本来起きないはずの「本当に同一時刻」における処理になった

あるいは

・GetTempName は TemporaryFolder 内でのファイルとして使われるのが前提で、TemporaryFolder に存在しないファイル名を返すだけ

とか?完全に推測ですが。


とりあえず、


Dim fso
Dim ts

Set fso =CreateObject("Scripting.FileSystemObject")

On Error Resume Next

Set ts = fso.CreateTextFile(fso.GetTempName(), False)

Do While IsEmpty(fs)
If Err.Number <> 58 Then '「既に同名のファイルが存在しています。」以外
WScript.Echo Err.Description & vbCrLf
Err.Clear
Exit Function
End If

Set ts = fso.CreateTextFile(fso.GetTempName(), False)
Loop

みたいな形で回避。

ちなみにこのせいで周囲巻き込んで徹夜。
もっと詳しい説明ほしかった。


そういえば CreateTextFile メソッド

overwrite 
省略可能です。既存ファイルの場合に上書きするかどうかを示すブール値を指定します。
上書きする場合は真 (true) を、上書きしない場合は偽 (false) を指定します。
省略した場合は、既存ファイルは上書きされません。

も間違ってたっぽくて、ここでもハマった。
しっかりしてー。>msdn
22:38:25 - miau - No comments - No Trackbacks - Permalink

aiWM Web Tester その2

- Work on miau's blog?
以前のアイテムで、aiWM Web Tester を使ったという話は書きましたが。
今回複数ページに似たような修正を加える必要が出てきまして。
自動化に適してたので再挑戦してみました。
[Read More!]
21:40:36 - miau - 4 comments - No Trackbacks - Permalink

2005年 5月 17日 (火曜日)

VC++ でたまにあるエラー

- Work on miau's blog?
関数やメソッド内で大きな配列を宣言すると、プログラム実行直後にいきなり落ちることが。

デバッグすると、CHKSTK.ASM の


probepages:
sub ecx,_PAGESIZE_ ; yes, move down a page
sub eax,_PAGESIZE_ ; adjust request and...

test dword ptr [ecx],eax ; ...probe it

なんて行で落ちている様子。

謎なのでググってみると・・・

GAH! WTF? - GameDev.Net Discussion Forums


your overflowing your stack, check your functions maybe one has a huge
array defined or something (place it on the heap [global] or malloc it).
Or try a complete rebuild.

なるほど。スタックオーバーフローと。
対処法はいろいろ書いてるけど、とりあえず一番楽&可読性高いかなということで static 変数にしておきました。
07:04:13 - miau - No comments - No Trackbacks - Permalink

ビルド番号のオートインクリメント(VC++)

- Work on miau's blog?
Borland C++ Builder には「ビルド実行するたびにビルド番号を増やす」みたいなオプションがあった気がするけど、VC++ 6.0 にはそういう機能はないらしい。
ということで、自動ビルド番号増加 アドインを導入。

未登録だと起動のたびに確認メッセージがでたりしますが、機能制限があるわけではないので良心的(?)
Visual SourceSafe とうまく連携すればもっとうまく管理できるのかもしれませんが、まあとりあえず。
06:21:48 - miau - No comments - No Trackbacks - Permalink

2005年 5月 02日 (月曜日)

VBScript でのデバッグ

- Work on miau's blog?
戻り値を MsgBox() とかで画面に出してたんですけど、文字数に制限があるんですね。
1 byte 文字で 1024 文字までとかなんとか。

こういう場合は WScript.Echo を使え、と。
で、ファイルに吐きたければcscript hoge.vbs > hoge.out とか?

このへんも不慣れだなぁ・・・。
04:23:29 - miau - No comments - No Trackbacks - Permalink

VC++ 反省

- Work on miau's blog?
前項で「DLL のソースが〜」とか書きました。
ここで「DLL のソースがあるんなら、Debug モードで DLL をビルドしなおして、ステップ実行でデバッグしたほうが早いんじゃない?」と思った方もいるかとおもいますが・・・まったくもってその通りです。

それができなかった理由として、
・作ってるのが ActiveX だったので、そういうことはできないと思ってた
・呼び出し元が VBScript だったので、そういうことはできないと(以下略)
・DLL のソースが全て揃っているという認識がなかった
というのがあるわけで。

さらに分析すると、
・VC++ に不慣れすぎた
・ActiveX の動作原理がわかってなかった
・VC++ デバッガの動作原理がわかってなかった
・ドキュメントとファイルが雑然としている
あたりが原因と言えそうです。
最初の2つに関しては、この休みですこし鍛えておきたいところ。

ちなみに、VBScript から呼び出す場合のデバッグ方法は、

プロジェクト→設定→デバッグ で、
・デバッグ セッションの実行可能ファイル: C:\WINNT\system32\wscript.exe
・プログラムの引数: <対象の VBS ファイル>
とでもしておくといいらしい。
04:15:20 - miau - No comments - No Trackbacks - Permalink

仕事で hack っぽいことを

- Work on miau's blog?
現在手伝い中のシステムは、

PHP→ASP→ActiveX→DLL→EXE

なんてやたら複雑な造りになってて、DLL と EXE ってのは旧システムを作った会社から提供されています。
で、今回私が作ってるのは ActiveX の部分で。
DLL のドキュメントはあるものの、基本的にブラックボックスなので、妙な手を使って調査する機会が多かったりして。

そのへんのネタです。
[Read More!]
03:42:43 - miau - No comments - No Trackbacks - Permalink

2005年 4月 30日 (土曜日)

SQL をで行を横展開

- Work on miau's blog?
たとえば、こんなテーブルがあったとして。

SELECT * FROM CustomerFamily

cust_id family_id name
==========================
1 1 波平
1 2 フネ
1 3 カツオ
2 1 マスオ
2 2 サザエ
2 3 タラオ


それをこんな感じで抽出したい場合。


cust_id family1 family2 family3
==================================
1 波平 フネ カツオ
2 マスオ サザエ タラオ


まぁ、正攻法では CURSOR 使ってぐるぐる回すことになるんでしょうけど、DataGrid とか使いたい場合はそうはいかないわけで。
[Read More!]
00:45:51 - miau - 2 comments - No Trackbacks - Permalink

2005年 4月 25日 (月曜日)

セッション

- Work on miau's blog?
仕事中、「JavaScript の window.open() で新しいウィンドウを開いた場合、セッションは維持されるのか?」なんて質問された。
「維持されると思うけど、どうなんだろ?」ということで、ググってみると・・・

[PHP-users 9085] 複数のセッションIDをもたせる方法(was Re: 同一ブラウザの...)

とりあえずブラウザに依存すると。
別ウィンドウでも確実にセッションを維持したいのであれば、php.ini を変更して URL に埋め込むのが楽そうだけど・・・セキュリティどうとかで文句言われることもあるんだろうな。

結局適宜使い分けましょう、っていうありがちな結論か。
00:39:54 - miau - No comments - No Trackbacks - Permalink

2005年 4月 21日 (木曜日)

VC++ で ADO とか

- Work on miau's blog?
VC++ から DB にアクセスする必要が出てきたんですけど、よく考えたら私が VC++ 使ってたのは学生のころで、DB アクセスなんてやったことないんでした。
ODBC よりは OLE DB 使ったほうがいいんだろうなー。

とか考えつついろいろ調べてると、msdn に ADO 用の Visual C++ Extensions なんてものを発見。
# 実際はローカルの msdn 見てたので多少記述違ったりするんですけど
扱いやすいうえにパフォーマンスも優れてるんなら試すしか、ということで試してみました。

が、いろいろ問題が。
まず、サンプルとして載ってる icrsint.h が Visual Studio 付属のものと違う。
それを直しても、妙な定数使ってるもんでコンパイルが通らない。
あと、いちいち RecordSet 用のクラス作るのが面倒な気がしてきた。
(まぁちゃんとオブジェクト指向やってないのも問題なんですけど)


仕方ないので、エクステンション未使用でアクセスすることに。
Using ADO in VC++ あたりを参考にすれば、結構あっさり使えます。
"msado15.dll" を絶対パス指定に変えたのと、sstream.h を sstream に書き換えた以外は特に問題なし。

ADOを利用する - javabasic000 も参考になった。
COleVariant も慣れるとそれほど面倒だと感じなくなるな・・・
03:17:00 - miau - No comments - No Trackbacks - Permalink

2005年 4月 20日 (水曜日)

DLL とか ActiveX とか

- Work on miau's blog?
なんかまたヘルプで別のプロジェクトの作業やってるわけですけど、VC++ でオートメーション DLL を作れ、とのこと。
VC++ は入社後ほとんど触ってないし、かなりヤバめ。

そんな感じでここ一週間くらい色々ハマってたのでメモ。 [Read More!]
03:10:19 - miau - No comments - No Trackbacks - Permalink

2005年 4月 12日 (火曜日)

トラブル対応

- Work on miau's blog?
今日トラブル対応ということで客先に行ってたんですが、自分の作業っぷりがあまりにヘッポコだったので反省がてら書いてみます。 [Read More!]
21:33:29 - miau - No comments - No Trackbacks - Permalink
«Prev | 1 | 2 | 3 | 4 | Next»