[Perl] Win32GuiTest

2009/07/08Perl::MODimport

[Perl] Win32GuiTest

Windows操作を自動化してナニするためのmoduleです。

source codeからのbuildとinstall

まずはソースコードを拾ってきます。本家CPANのWin32::guitestからが良いでしょう。Ver.1.56が取得できます@2009年7月8日現在

サイトからもわかるように、VC++のコマンドラインバッチを走らせた後、下記のscriptを実行して、Makefileを生成させます。

perl makefile.pl

ここで、デフォルトのままですと、VC++のランタイムライブラリ(MSVCRT90.dll(VS2008ExpEdition))が必要になります。Active Perlのversionを合わせておくだけで、ほかのマシンにもmoduleを配るのであれば、ここでstatic linkを選択すべきです。

で、Makefile.PLを編集するのが妥当な気がするのですが、いまいちどうやってコンパイルオプションを引き出してきているのかがわかりませんでした。直接Makefileを編集することにします。

・変更前

CCFLAGS = -nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX
OPTIMIZE = -MD -Zi -DNDEBUG -O1

LDLOADLIBS =   oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib msvcrt.lib

・変更後

CCFLAGS = -nologo -GF -W3 -MT -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX
OPTIMIZE =  -Zi -DNDEBUG -O1

LDLOADLIBS =   oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib libcmt.lib

それぞれ位置はバラバラですが、シンボル名で検索すれば確実でしょう。編集が終わったら、makeします。

nmake

ちんたら文句言われますが、関数宣言してないとかそんなのですね。

実際にstatic linkされたか、dumpbinコマンドで確認しておきましょう。

>dumpbin /dependents blib\arch\auto\Win32\GuiTest\GuiTest.dll

Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file blib\arch\auto\Win32\GuiTest\GuiTest.dll

File Type: DLL

  Image has the following dependencies:

    perl510.dll
    KERNEL32.dll
    USER32.dll
    GDI32.dll

  Summary

        3000 .data
        5000 .rdata
        2000 .reloc
        1000 .rsrc
        1000 .shared
       1B000 .text

VCのdllは要求されていませんね。perlのdllを要求されていることから、少なくとも Perl 5.10以外では使えないことがわかります。Active Perlのversionを合わせておかないと、あとでppm installができません:)

次に、module testを行うわけですが、国際化対応していないのでNGになります。テストパターンは、Win32-GuiTest-1.56\tに入っています。関数電卓(calc)は、メニューやボタン名に漢字が使われるため、windowが見つからないといわれてしまいます。日本語仕様に合わせて修正しておきます。

・"02_calc.t"

#	MenuSelect("&View|&Scientific");
	MenuSelect("表示(&V)|関数電卓(&S)");

#	($hex) = FindWindowLike($calc, "Hex");
	($hex) = FindWindowLike($calc, "16 進");

#	($bin) = FindWindowLike($calc, "Bin");
	($bin) = FindWindowLike($calc, "2 進");

#	($oct) = FindWindowLike($calc, "Oct");
	($oct) = FindWindowLike($calc, "8 進");

#	($dec) = FindWindowLike($calc, "Dec");
	($dec) = FindWindowLike($calc, "10 進");

#	PushButton("Dec"); sleep 1;
	PushButton("10 進"); sleep 1;

#	PushButton("Hex"); sleep 1;
	PushButton("16 進"); sleep 1;

#	PushButton("Oct"); sleep 1;
	PushButton("8 進"); sleep 1;

#	PushButton("Bin"); sleep 1;
	PushButton("2 進"); sleep 1;

・"05_which.t"

# like(WhichExe("progman"),  qr/progman/i,  "progman");

Vista x64環境のせいか、これはスキップされます。

以上でテストはパスされるでしょう。それではインストールしてしまいましょう。

nmake install

配布用パッケージの作成

コマンドラインのzip/tarコマンドなどが必要になります。ない場合は、配布用ディレクトリの作成までで止めておき、windows標準の圧縮フォルダでzipファイルを作るという方法もあります。

nmake ppd
nmake distdir

Win32-GuiTest-1.56というディレクトリができているので、これをzipにします。

次に、Win32-GuiTestを開いて、下記のように修正します。

        <CODEBASE HREF="Win32-GuiTest-1.56.zip" />

ppdとzipとをセットで配布すればおkです。ただしActive perlのDocumentationでブラウズすることができません。htmlは入らない模様です。

使い方

build/install方法を書いてたら時間切れ…。目的を実現する前に力尽きるとは口惜しや・・・('A`


参考

[Perl] 基礎的な事項

2009/06/13Perl::基礎import

[Perl] 簡単な文法メモ

スカラー変数

汎用変数と思えばいいかな. 型定義は特に無い.(値/文字列/リファレンス(ポインタ))

my $hogehoge

初期化しない状態は未定義(undef)となります。値ならゼロ、文字列ならNULL扱いになります。演算時に評価されますが、use warningすると未初期化変数の演算といわれます。undefかどうかの判定は、下記の関数を利用することになります。

defined($hogehoge)

下記の比較演算子は使えません。

$hogehoge == undef $hogehoge eq undef

scope hogehoge;

スコープ'hogehoge'を定義する。

require Exporter;

@ISA, @classname::ISA = @qw(the_class):

SuperClassを定義します. this class IS-A the_class.もしくは、下記のように記述できます。

use the_class;
@thisclass::ISA = qw(the_class);
||>
↓
>||
use base qw(the_class);

配列操作

初期化
@hoge = ('hoge','hogehoge',...);
@hoge = ("hoge","hogehoge",...); ← 展開される
@hoge = qw ( hoge hogehoge ...); ← 展開される. 空白で区切られる.
参照
$hoge[0] # zero-origin
$#hoge   # indexの末尾が得られる
$hoge[-1] <=> $hoge[$#hoge]

ハッシュ操作

宣言

my %hash_name;
初期化
%hash = ( "key1" => value, "key2" => value);
または、一次元配列でkey,valueの順列。
%hash = (key1, value1, key2, value2)
%hash = (); # 空っぽになる. |ハッシュアクセス:
keys %hash # hashの持つキーを配列で取得する.
values %hash # 同, 値を配列で取得する.
exists $hash{'key'}; # そのキーが存在するか. 真/偽を返す. 未初期化と定義済みと判断可能.
delete $hash{key} # 指定したキー/値を削除する.

pack/unpack

syntax:

pack TEMPLATE, LIST
unpack TEMPLATE, LIST

templateの書式を以下に示します。

フォーマット 意味 フォーマット 意味
aASCII 文字列AASCII 文字列、足りない領域はスペース文字で埋める
bビット列 (昇ビット順)Bビット列 (降ビット順)
c符号付き char 値C符号なし char 値
d機種依存の倍精度浮動小数点数f機種依存の単精度浮動小数点数
h16進数文字列 (下位ビットが先)H16進数文字列 (上位ビットが先)
i符号付き int 値I符号なし int 値
l符号付き long 値L符号なし long 値
nネットワークバイト順序 (ビッグエンディアン) の short 値Nネットワークバイト順序 (ビッグエンディアン) の long 値
p文字列へのポインタP構造体 (固定長文字列) へのポインタ
s符号付き short 値S符号なし short 値
vVAXバイト 順序 (リトルエンディアン) の short 値VVAXバイト 順序 (リトルエンディアン) の long 値
uuuencode した文字列xヌル文字
X1バイト後退@絶対位置までヌル文字で埋める
  • フォーマット文字の後ろには、それを何回繰り返すかを示す数字COUNTを付けることができます。\COUNTに * を指定すると、残っているすべての要素を使います。
  • フォーマット文字(COUNTも含める)同士の間にはスペースを挟むことができます。
  • a、A、b、B、h、H以外のフォーマットは、第2引数LISTからCOUNTで指定された分の値を使います。
  • aやAというフォーマットに対してCOUNTを使うと、繰り返し数で示す長さの文字列となるように、\必要に応じてヌル文字かスペース文字を付け足します。
  • unpackするとき、Aは後続のスペース文字やヌル文字を取り除きますが、aはそのままにします。\同様に、bやBは、繰り返し数で示すビット長のビット列にパックします。
  • hやHは、そのニブル長のニブル列にパックします。
  • Pは、指定した長さの構造体へのポインタをパックします。
  • 実数 (floatとdouble) は、機種依存のフォーマットしかありません。\あるマシンで パックした浮動小数点数は、別のマシンでは読めない可能性があります。

split

区切り文字を指定して、stringを分割します。

@list = split(/\t/ , $var); // 区切りはTAB文字となっていることを見る.
@list = split(/[\t]/ , $var); // 区切りはTAB文字となっていることを見る.
 // 複数指定もできるが,区切り文字もリストに放り込まれる.

FileI/O

個人メモだから説明を端折ってもいいかな...\Cの標準関数 fopen/fclose みたいな感じで。出力は">"をつけて表す。

my @binhex;

 if ( ! open(fp, "<".$fname ) ) {
   printf("cannot open \"$fname\" \n");
   die ;
 }
 binmode( fp );
 while( read(fp, $buffer, $size_of_bytes) ){
   @binhex = unpack( "v32", $buffer ) ;        # divide little endian(short) x 32
 }


参考サイト

  • Smart Smartさん\非常にまとまっているサイト。Perl講座、HTML講座、JavaScript講座、SQL講座、注目技術・アクセス講座と幅広く展開されています。困った時は訪れるとよいかと思います。

Perl

2009/06/13Perlimport

[Perl] もくじ

便利なscript言語として、数年ほど前から、開発の補助ツールとしてPerlをかじっているけれども、備忘録を兼ねてメモを置いていくことにしました。

今までお世話になったWEBサイト様も多数ありましたが、自分のほしいものは自分でまとめておくに限りますしね。


環境としては、Windows x86またはx64 / Active Perl 5.10.0あたりを想定します。

2009/05/16(土)Core i7組み立て

PCパワーアップ

いわゆる散在というモノですが.
個人的な話題でしかないが,メモリアクセス速度が向上する,という話でマシンを買い増し/変えしてきている.今回も例に漏れず,でした.

CPUIntel Core i7 940 (2.93GHz QPI 4.8GT/sec L2:256Kx4 L3:8MB)
メモリ12GB (2GBx3x2) PATRIOT PVT36G1600LLK(PC3-12800-2GBx3/CL8.0)
マザーボードASUSTeK P6T (Intel X85 chipset)
グラフィックカードPalit Microsystems GeForce GTX 260 Sonic 216 SP 1792MB(NE3X262SFT3B4)
光学ドライブDVD multi drive(RICHO) / 使いまわし
ハードディスク320GB S-ATA 7200rpm (Seagate)
RAID 設定なし
電源Antec EA-650(650W ATX)

メモリ

メモリは安いなぁと思っていたら,予想通りOverClock品でした.説明書も見ずに取り付けてみると,DDR-1066で認識して疑問に思いました(笑).
先に検索して,PATRIOT memoryの公式フォーラムで質問が立っているのを見て納得.

さらにそこからリンクがあって,How To OC the i7なるスレへ.これは良い資料.

で,やはりOverClockすると発熱が凄い.素組みの状態で箱にも入れず,memtest86+をまわすと2周目でエラーが出ました.説明書にも,よく冷やさないと不都合が出ます,といった記述がありました.手で触れないほど熱くなるので,納得はするけれども,これは半導体としての寿命もあまり長くは無いような気が….

とりあえずケースに入れてソコソコの風を流してやることで,20時間ほどの連続テストにも耐えてくれました.手軽にover clockして使うてのはちょっとアレゲですが,DDR-1066で使うならさらに安いメモリがあったので,ここはメーカ保証が付いてくるというDDR-1600で使いますよ,と.ただし,チキンなので,DRAM電圧は1.64どまりで*1


グラフィックカード

P6Tとi7を買うついでにクリックしたもの.中古だけどなんとなく買ってしまった.メモリもクロックも1Gオーバー.正直使い切らないと思うw消費電力を知って衝撃だったけれどね.280Wてなによ(汁;

メーカのドライバは,ここからダウンロードしてくる.nVidiaリファレンスドライバだと調子が悪いことがあるようなことが書いてあるから要注意だ.



*1 : P6Tのマニュアル上は1.65Vで動作確認とされています.

OS(Windows XP 64bit edition)

ひとまずコレを入れてみる.HDDはちょっと古いSATAですが,まぁ,お試しってことで.運がよければイメージを吸って移動・・・・無理か.

インスコ順序は,少しマトモにやってみた.http://www.daw-pc.info/windows/inst.htm

  1. OSのクリーンインストール
  2. サービスパック、パッチ
  3. Intel チップセット・ソフトウェア・インストレーション・ユーティリティ\(通称INFやINFユーティリティと呼ばれているものです)
  4. DirectXのインストール
  5. 各デバイスのドライバ(ビデオカードを最初に入れるのが推奨らしい)

ちょっとミスってdirect Xをあとで入れてしまった.Windows Updateについては,LANドライバが入ってくれないと話にならんので今回はSP2のイメージを別PCで焼いて適用した.


Service Pack

x64 editionは,XP SP3を適用できないらしい.Windows Server 2003 R2 Service Pack 2を落としてくると良い.



体感速度

特にアプリケーションを入れて試していないので現状わからない.タスクマネージャの使用率に8つのグラフが出ることを確認して満足(ぉ

QuartusIIに関しては,64bit版はsubscriptionのみだったのか... これはシクったぜw

2009/02/19(木)[旅][潜水] 沖縄旅行 - day 5 : AOW2/2

[旅][潜水] 沖縄旅行 - day 5 : AOW2/2

(T/O)


沖縄旅行 - day 5 : AOW2/2

慶良間諸島へボートダイブの日.曇り空で時折お天道様が顔を出す,といった感じ.残念ながら,潜水中にはお天道様がカッと照らしてくれなかった模様?

  • 本島出発時点では少し晴れが見えていた\
    20090219_01.jpg
  • 途中雲ったり日が出たり…\
    20090219_02.jpg
  • 雲が流れて日が出たり隠れたり.ダイブ後に日が出てくるから困る('A`\
    20090219_03.jpg
  • この透明度は素晴らしい!.もぐっているときにこんだけ出てくれていればなぁ(笑)\
    20090219_04.jpg


ボートでの注意

酔い止めの薬は飲んで起きましょう.普段から船に乗っている海の男や女でなければ,飲んでおくに越したことは無いです.当日,3~4名がダウンしてますた('A`

せっかくのファンダイブやシュノーケル?だったのに,もったいない.

というか,Open Waterの講習も受けずにいきなりダイビングする気になれないんですが(汗
というのも,同期でファンダイブして...

動きすぎ→エア消費しすぎ→グループに迷惑

というコンボを出している話も聞いていたので.

とりあえず,酔い止め必須.コレ重要事項ね!


ダイブ009~渡嘉敷 野崎(AOW-deep)

深度25.1 m
潜水時間25 min.
気温24℃
海水温22℃
透明度20m
装備
ウェイト7.0
タンクアルミ10l
タンク圧190 → 30
総潜時間1005 → 1040
総潜水時間30 min.
remarkdeep diving.色の吸収(赤いフィンが黒っぽく見える),軽い窒素酔い体験

さすが慶良間.たくさんの魚が見られた.熱帯魚のようなカラフルなのがウヨウヨいて楽しい.水族館みたいにあたり一面というわけではなく,珊瑚のまわりやガケのあたり?に群れている.大型魚は特段場所を固定せずにうろついているかのようだった(捕食のために小型魚の近くに居るのかね)

  • ハナゴイ
  • グルクン(群れている青い魚)
  • アサドススメダイ
  • デバスズメダイ
  • マルスズメダイ
  • キホシスズメダイ
  • チンアナゴ(にょろにょろ.ムーミン?)
  • コブシメ(でかくてラグビーボールのようなイカ.まったり泳いでいるところが見られる.奇妙でおもしろい)

ほか


ダイブ010~座間味 唐馬(AOW-ボート)

深度14.0 m
潜水時間47 min.
気温24℃
海水温22℃
透明度20m
装備
ウェイト7.0
タンクアルミ10l
タンク圧180 → 50
総潜時間1133 → 1220
総潜水時間47 min.
remark009もだけど,ボート.テキスト内容の説明+α
  • カクレクマノミ
  • ジョーフィッシュ
  • ハダカハオコゼ
  • チンアナゴ
  • グルクン(大漁に!)
  • デバスズメダイ
  • タテジマキンチャクダイ(幼魚)渦巻き模様で大きくなると縦縞になる
  • ニジハタ

ほか


ダイブ011~座間味 七番崎(AOW-ボート)

深度13.5 m
潜水時間41 min.
気温24℃
海水温22℃
透明度20m~
装備
ウェイト7.0
タンクアルミ10l
タンク圧180 → 50
総潜時間1415 → 1456
総潜水時間47 min.
remarkファンダイブ

  • アオウミガメx3
  • ネムリブカ(←和名,ホワイトチップシャーク:小型のサメ.岩陰に2匹居た)
  • コブシメ
  • ハナゴイ
  • グルクン
  • ハナビラクマノミ
  • セジロクマノミ(名前のとおり,背中が白い)
  • ハマクマノミ


ドリフトダイビング(もどき)

ボートへのEXIT時に,沖で拾ってもらう(ドリフト)のも体験できた.波が高く,うまく位置を固定できない.というか,BCに空気入れすぎてた(笑\御迷惑をおかけしました m(__ )m

本島へ

行きはよいよい・・・

20090219_05.jpg

帰りはコレかよwwww

着替えを待っていてもらった状況だったので,キャビンから出られずに終わる.が,結果的に大助かり.沖合いは波が出てきて,凄い水しぶき.上部デッキに居た人らはずぶ濡れという話…南無.


marine club an

四日間お世話になりました!!関西圏出身であり,とても話しやすかったです(笑)

中の人近影\

20090219_06.jpg

店の宣伝をしておくということで,リンクを張ったりTBを送ったり*1してみましょう.ウチからたどっていくとしたら,オサーンが多いように思いますけれど(笑)

しっかりと教えてくださるのでお勧めですYO!!\ほかのショップの様子がわからないので,比較できませんが:)



*1 : たぶんこんな使い方でいいはず?.顔バレするなぁw

DFSギャラリア沖縄

ゆいレール おもろまち駅下車すぐにある,ブランドショップ.海から上がってきたボロボロの男が一人で行くには場違いすぎる場所でした.

お土産でも物色しようとよってみたけれど,高い!ブランド志向自重してくれ….GODIVAのチョコレートセットは\5K近い.しばらく悩んだけれど諦めた.その資金があれば夕食をおいしくいただけます….

疲れた体を引きずって,夕食を探して歩く...



夕食~糸まん

ガイドに乗るような店舗はダメぽいというイメージが印象づいたので,逢えて交通の便があまりよろしくない,個人経営ぽい店舗をチョイス.

これもガイドに載っていたわけですが...

(離島)のおばちゃんが作る郷土料理の店\(落花生の豆腐.沖縄名称失念)がとても美味しかった.手で常にコネ続けて作るモノらしい.ほか郷土料理でおなかが膨れる.

予算は\3k以上.平日のせいか,1組+数名程度の客で,店舗自体それほど広くなく,落ち着けた.

カウンター席で,先にいらした,お年を召した女性の方が気になった.女将さん?が,先生と呼んでいたので,芸大の先生と思っていたら,NHK天地人の冊子を持ってきて下すって,「この方よ」と耳打ちして下すった.

橘 芳慧 先生 

NHK総合番組「すずらん」、大河ドラマ「武蔵」、「功名が辻」、「天地人」、スペシャルドラマ「坂の上の雲」 などの振付・所作指導

著名な方と,ふと会えたりするのも面白いもんですね.特に晩御飯は複数で食べたほうが楽しいですネ.

履歴

24.Feb.2009

関連日記