Windowsプログラミングの最近のブログ記事

さて今日はいろいろあって、IISやApacheの代わりになるサーバーソフトのお話です。

「動的なwebサービス(主にCGI)を手軽に構築する」事を目標に、いろいろ探して「04WebServer」という面白いソフトを見つけました。
「04WebServer」の環境構築までの忘備録です。

さてさて、

そもそも30分で構築と言っても、おそらくApacheやIISを使い慣れている人には大した話ではないかと思います。
ただ、「04WebServer」の凄いところは、"初見"で目標にしていたHTTP鯖+Perlが実質30分もかからずに稼働出来たところ。そこが個人的に高評価でした。設定がGUIで行えるというのが、魅力的です。
また、設定自体をXMLファイルとしてバックアップできるので、トラぶった時の復旧を考えてもすごく魅力的でした。

まずは必要なソフトをダウンロードします。
必要なファイルは2つ。04WebServer本体とWindows上でPerlを動かすためのActivePerlです。

04WebServer公式サイト - ダウンロード
Active Perl - ダウンロード(x86版推奨)

まず先にActive Perlをインストール。
インストールは全てデフォルトのままOKを進んでいくと完了。

04WebServerの設定も簡単。
まず、初めて起動した時点でHTTPサーバーはもう既に立ち上がっています。
言われるがままにサービスに登録して特別な設定は特に必要なし。

次にPerlを実行するフォルダを明確に指定します。
まず、ドキュメントルートの下に/cgi-bin/というフォルダをエクスプローラ上で作っておきます。
名前は何でもいいですが、cgi-binが一番なじみがあっていいかなと思います。

04WebServerの「ディレクトリ設定」より「新規」を押して、先ほど作ったcgi-binのフォルダに対してcgiの実行権を作成します。

01.png


設定は以下の通り
「SSI/CGIを許可」にチェックを付けるだけです。

03.png


次にサーバー設定の「CGI、SSIの設定」にて2段目のcgiのみ設定。
CGIコマンドにActivePerlの実行ファイル「perl.exe」のパスを指定して完了。

04.png

「サーバ再起動」を押すとcgi-bin内のcgiがもう実行可能になってます。
設置するだけで、フリーの掲示板CGIが一発で動きました!

04WebServerの背景など調べてみると、それ自体古くから作られているソフトのようですね。
もっと早く出会っていてもよさそうなソフトなのですが、どうも今年の8月に5年ぶりの大幅に更新されて大きく進化したとのことで、それで検索に引っかかりやすかったのかも。タイミング的にとても助かりました!

「10人規模で使う、社内向けのWebサービスならこのサーバーで必要十分なのでは」という仮説をもとに、まだ稼働して2日目なのですが、不具合等探しながら、しばらくこれで遊んでみようかなと思います。

3年ほど前に「Perlはダメだ。.NET最高!」って記事を書いたような気もするけど、気にしないーw(ぇ

さてさて、とりあえず公開できたExcel Walkerですが、次の段階を目指しています。
まず、一番に気になっているのは制御周期。
すでにお気づきの方もいらっしゃると思いますが。Excel Walkerの制御周期は5Hzです。
200msに一回しかポーズを送信していません。
サーボ側に角速度を計算させて帳尻を合わせています。

やはり制御周期を一定にかつ、ある程度リアルタイム性を確保したい。
現在、毎ループの待ちはSleep関数を用いているが処理を含まない待ち時間の指定のため、マシンスペックによる実行時間が一定ではありません。
なので200msのウェイトに180なんて数字を推奨しているのはこのためです。

まず、処理を含んだ待ち時間を設定するために下記のようにプログラムを変更します。

HSPだと"await"というとても便利な"待ち関数"があるのですが、VBにはそんなものはないので自分で作ります。

こちら(Visual Basic - Wait関数を作る)を参考にしました。

Declare Function timeGetTime Lib "winmm.dll" Alias "timeGetTime" () As Long

Private Sub Main()
    
    Dim starttime As Long
    Dim waittime As Long

    waittime = 10  '毎ループ10ms待つ設定

    'ループスタート直前の時間を記録
    starttime = timeGetTime()

    Do

        '//////////////////////////////
        '   ここにメインの処理を書く
        '//////////////////////////////

        '待ち
        Do While timeGetTime() - starttime < waittime
            DoEvents
        Loop

        '待ち終わった時点の時間を記録
        starttime = timeGetTime() 

        ' ---- この位置でロボットに命令送信!----

    Loop

End Sub

これで、テストしてみました。

time.png
(〇で囲んだ部分は実行開始からの計算回数を示します)

time2.jpg

手動で計測しているので計測にも誤差がありますが、ほぼ正確に10msecで待てています。
良い感じですね。

あとは制御周期の最適化。

まず、ジョイスティックの読み取り。
現状で、1回のスキャンにかかる時間は5.1msec(実測)
これは意外と速くてびっくりしました。

ロボットとの通信に関しては、115200bit/s(14400Byte/s)で設定しています。
1回の通信が20サーボ分、ロングパケットで110Byte
単純に110Byteで割ると、1秒間に130回ポーズを送信できる計算になる。

ただ、シリアル通信に関しては深いところまで理解していないので、単純にこんな計算でいいのかな?
オーバーヘッドとか考慮しないとイケナイ'何か'はないのだろうか…。
詳しい人教えてくださいm(__)m

というわけで、そこはよくわからないので余裕を見て制御周期を100Hzにしようと思う。
たまたまテストした10msの設定で行けるので採用!

しかし、Windowsはタイマが駄目とか、リアルタイムの制御には向いていないとか言われていますが、現状サーボの通信速度的にまだその境地に達していません。
どこまで行くとその壁にぶち当たるんだろう・・・。

こんなところで、今日はこの辺にしておこう。

エクセルでジョイスティックを使うに当たって、改めていろいろ検索してみたものの、「Excel VBA ジョイスティック」で検索すると、以前紹介させていただいた眠り猫さんのサイトしか情報がありません。

新しいジョイスティック(記事)に対応させるには、どうしてもXYZの3軸だけでなく、RVUの回転軸も読み込まなければなりません。

おそらく眠り猫さんのサンプルはJOYINFOを参照しているのでしょうが、6軸読み込むためにはJOYINFOEXが必要なので、今までのコードをあきらめ、自分でAPIを勉強し直すことにしました。

Amazonで買ってみたExcel VBAのゲーム製作本を買ってみてベースとなるJOYINFOの使い方はだいたい把握できました。1冊買って参考になったのは1ページだけでしたがw
またJOYINFOEXに関しては、DJEBEL375氏の「サイドワインダーからの値を取得」にあるコードで、だいたい把握できました。

ちなみに上記のJOYINFOEXのサンプルはVB4,6用のコードなのですが、幸い若干の修正だけでExcel2010に移植できました!

joy.png


というわけで、Excelで6軸のジョイスティックを用いてゲームを作りたい方、ロボットの制御をやりたい方向けに、一応、自分の作ったエクセルファイルも公開します。

ダウンロードはこちらから
(joystick_test_excel2010.zip)

注1:Excel2010で製作しています。(xlsm形式)
注2:お約束ですが、マクロとActiveXのセキュリティは適宜変更してください。
補足1:JOYINFO、JOYINFOEXどっちも使えます


今まで、ジョイスティック関連はHSPやVC++ではDirectXを使っていたので困ったことがなかったのですが、意外とAPIで呼び出すVBA用のコードが少なくてびっくりしました。

今回得た教訓、”Excel VBAはVBのリソースが使えるので、困ったときはVBで探しなさい”


参考にさせていただいた書籍・URL

Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応
近田 伸矢 谷 孝一 武藤 玄 USA【うさ】 影斬

インプレスジャパン 2009-03-06
売り上げランキング : 15659

Amazonで詳しく見る
by G-Tools
某掲示板で議論してて、Application.Waitで1秒以下のwaitが出来ないと思っている人が多いみたい。
たしかにWIN32 API使うのも手ですが、Application.Waitで良いのです。

ただ、自分も拾ってきたサンプルソースからの流用だったんで、忘備録としてメモ。

Public Sub Wait()

     ' 0.5秒wait
     Application.Wait [Now() + "0:00:00.5"]

End Sub

ポイントは[]で囲っている所。
囲わないと秒単位でしか測れませんが、囲うとミリ秒まで指定できます。
精度はAPIと同様(ホントかなぁ)らしいですが、Excel限定というのもミソ。

smtp.jpg

久々にHSPを起動してみました。

グループ内の定型フォーマットでのメールの一斉送信をやろうかなと。
webアプリで実装しようといろいろ考えていたのですが、どうもwebアプリ開発は腰が重い感じです。
結局ネイティブアプリでログをファイル共有すればいいじゃんってことで、突貫工事中。

SMTPの通信はいいサンプルを見つけたのでこちらを利用させてもらってます。

出来たら公開します。

実は昨日からはじめました。
Visual Web Developer 2008 Express Edition

今まで、Parlをかじり、C言語でCGIを動かし、PHPをかじって、RoRをかじったり、ASPをいじったりしてたんですが・・・。
どれも中途半端にやってました。

最近、会社の在庫検索をASPで書いてたところ、
従兄弟に「ASPの時代は終わったよ」
と言われてしまい、進められるがままに、Visual Web Developer 2008 Express Editionをインストールしました。
今まで、サーバーサイドのプログラムはメモ帳でしか書いたことがなかったので、総合開発環境でWebアプリを作るという感覚がはじめは馴染めなかったのですが・・・。

%96%B3%91%E8.jpg

使ってみると大学でバイトで使ってたVC++のMFCのプログラムと似たような感覚で、半分以上の作業がマウスで進んでいく。
あっという間に、ASPで作っていた検索フォームと同レベルのものが出来ました。

%96%B3%91%E82.jpg

更に言うと、ソート機能やページビューの機能がASPやPHPで書くと、ガチでソースを書かなければいけない部分がワンクリックで実装できてしまう簡単さ。

今まで、買ったPHPやらASPの本を本気で窓から投げたくなりましたww

ついでに、参考に買った本を紹介。


ひと目でわかるMicrosoft Visual Basic 2008 Webアプリケーション開発入門 (マイクロソフト公式解説書) (マイクロソフト公式解説書 Microsoft Visual Studi)ひと目でわかるMicrosoft Visual Basic 2008 Webアプリケーション開発入門 (マイクロソフト公式解説書) (マイクロソフト公式解説書 Microsoft Visual Studi)
ファンテック株式会社

日経BPソフトプレス 2008-05-22
売り上げランキング : 84213

Amazonで詳しく見る
by G-Tools


たぶんPHPやParlには戻れません。
ライブラリではRoRもいい感じだとは思いますがGUIとCUIの差で、.netの勝ちですかね。

これで無料なんて、恐るべし。

side.jpg

JOYPointerのこと。

先週障害者向けのソフトウェアを開発しているNPOの展示会に研究室の先輩が出ていたので参加させてもらった。

そこで、Dream Driveで過去に作ったJOYPointerについて、障害者向けポインティングデバイスとしての可能性を指摘された。

そして、「もっと宣伝しないと〜」と・・・。
というわけで、まずは、ページを更新。

http://dream-drive.net/down/joypointer.htm

2年ぶりに記事を書き直しました。
ソフト自体は更新してませんが、宣伝ページでイメージはやっぱ変わるなぁと思いました。


さて、JoyPointerに関して、改善点など受け付けるメールを広く求めたところいろいろな意見を頂きました。
2年ほどver3.20で放置していましたが、モチベーションが上がれば実装を考えているのでいちおう報告したいと思います。

改善できたら良い点

  • Shift / Ctrl / Esc のボタンの追加
  • 「ウィンドウを元の大きさに戻す」の追加
  • ファンクションキーへの対応(ラグナロクオンライン等のネトゲのアイテムボタン用)
  • ロック&アンロック機能(JoyPointerの有効・無効)
  • 設定ファイルのini化

要望があれば追加したい機能

  • ファイル操作系ショートカット(Deleteキー、カット&コピー&ペースト)への対応
  • プリントやアンドゥ・リドゥ・ファイルオープンなどのコマンドへの対応
  • 複数設定ファイルの切り替え

既知の問題点

  • WindowsVistaにおいて「ユーザーの承認が必要です」ダイアログが出るような操作をした場合に,JOY Pointerでの操作ができない。
    → 現状、改善方法がありません。開発環境がXpなので確認できません。

扱うキーの数が増えると、インターフェースも考え直さないといけませんね。

さすがに、時間的に厳しいところもあるのでモチベーションのためにもシェアウェアにしては?と言う意見もあるのですが、どんなもんでしょう。
とはいえ、障害者向けにWindowsをバリアフリー化したいと言う面もあるので有料化したくはないし・・・気が向いたら更新します。

WindowsVistaへの対応

公開しているアプリケーションソフト

・JOY Pointer 3.20
jp3.jpg

・オバ球STG2 〜引き際が大事!?〜
os2.jpg

・オバ球STG2スクリーンセイバー210P
scr.jpg

の3点において、こちらの環境で「WindowsVista Business (x86)」での起動を確認しました。
これは動作を保障するものではありませんが、いちおうx86(32ビット版)で動く目安になります。

なお、「オバ球STG2 〜引き際が大事!?」においては、OSの名称が不明となっていますが、製作当初でVistaはまだ発表されていませんでしたので、不明となっておりますが、「コレは仕様です。」w

ちなみに、JOY Pointer 3.20の総ダウンロード数が5,000件を超えました。
応援していただきありがとうございます。

カメラ画像の処理をOpenCVでやってましたが、WindowsでインターフェイスやるならMFCしかないっしょー。

ってことで、もともとVC++でやってたOpenCVをMFCに組み込んで、ウィンドウにはめ込んで見ました。

何が大変って、OpenCVで使用するIPL画像を変換してWindows上に配置するのは結構大変でした。
でも、これでOpenCVで画像処理しながら、インターフェイスはサクっと作れます。

二足歩行ロボットによる「自動追尾+自動バトル指揮システムの完成」にまた少し近づいた感じです。

まぁ、これもまたバイトで使ってる技術の応用なんですが・・・(笑
バイトで作ってるモノと、ちょうど作りたかったモノの方向性が結構似てるんでバイトも本気にw
でも、アイディアまでパクっちゃうと激しくマズイので、その辺は適宜削って掲載してます。

ただ、肝心のロボットが・・・。
マイコンの制御書いたり、画像処理やったり、やっぱりソフトが大好きなんだと実感。
でもこれじゃ機体の製作が間に合わない!!!
ROBO-ONE間に合うのか!?オレ・・・orz
誰か機体作って(笑)

今回入場にもお金取るみたいなんで、それならエントリーして中から見学しようかしら。
いやいや、そんなネガティブじゃいけないな!

OpenCVを使ってみた。

%96%B3%91%E82.GIF

ちょいとバイトの関係で画像処理やってます。

とりあえず、開発環境が揃ったんで、かたっぱしからインストールして、パスを通して、輪郭線のサンプルを走らせて見たところ。

IPL(Intel Image Processing Library)も、OpenCVも、Platform SDKも・・・etc、DirectX以外は初めて使うツールばっかりなんですが、なんとか環境作れました。
というか、実際走らせてみて思ったのはOpenCVが優秀だと言うこと。
単純な画像処理がほとんどライブラリになってて、こんなに簡単にできるんだ〜。
というのが第一印象でした。
とはいえ、分からない事だらけなので少しずつ勉強しようと思います。

いつか、ロボットの目にも使えたらいいな。

INIファイルの操作

最近、ちょっとしたつながりでプログラムのバイトをやってたりするのだが、INIファイルを操作する機会があって、今までてっきりfopenして操作するものとばかり思っていた。(さわったコトがなかった)
サンプルソースでもないものかと検索していてINIファイルをコンソールから操作するとき"windows.h"をインクルードするだけで使える命令があって便利だなぁと思った。

GetPrivateProfileInt - iniファイルから数値を取得する
GetPrivateProfileString - iniファイルから文字列を取得する
WritePrivateProfileString - iniファイルに文字列を書き込む
の3つ。これは便利。

そして、そんな事は置いておいてmicroSDカードを購入したのだけれど、あまりの小ささにビックリしました。
DSC01133.JPG

最近、ひぐらしデイブレイクってゲームをシンストールしてやってみようと思ったのだが、上手く表示されなかった。
どう考えてもこの環境で動かないはずがないと思ったら、どうやら学校の課題でDirectX3Dの設定をデバッグモードにしてたせいであることが分かった。

このデバッグモード、かなりのクセものでテクスチャが上手く貼れなかったり、ゴミが大量に乗ったりいろいろ障害が起こる。

課題中にも、テクスチャがなくなったり著しくFPSは下がるし、これでどうやってデバッグしろというのか、まったく謎なモードだと思った。

まぁ、たぶん、いろいろ設定する必要があるんだろうけど・・・ね。


どうせなんで、前に紹介した、授業の課題のぶーちょくんを公開www

ファイルをダウンロード

ぶさカワイイ??

学校の課題でDirectXを使ったサンプルの提出をしなくてはいけない。
ということで、とりあえずキャラが必要!と思って適当につくった。
モデルは机の上のぶーちょ君。なんか郵便局のキャラらしいのですが、元よりもっとぶちゃいくになっちゃったww

久々に雑誌社さんから掲載依頼のメールを頂きました。

『ネットプレイヤーマニアックス』
『オンラインソフトウェア大全(仮題)』
に掲載される模様。

『ネットプレイヤーマニアックス』のVol.8は2月上旬予定\
『オンラインソフトウェア大全(仮題)』は今年の夏〜秋に発売されるようです。

掲載されるソフトはやっぱりJOYPointer 3.20
夏までにはJOYPointer3-Funcを完成させようと思っています。
JOYPointer4とは別で3にファンクションキー周りを充実させてネトゲーに特化したJOYPointerになる予定です。

grp1220222932.png

HSP2.6でコンパイルしているJoyPointerのネックな点でパフォーマンススピードが挙げられるのですが、HSP3.0では、動作速度がかなり改善されているそうな。

最近、ネトゲにはまっている友達から是非ファンクションキーを追加してくれということで、数千行にわたるJoyPointerのコードを読み直してみたものの、追加することを想定していなかったためとてもじゃないが、追加できそうにない。

変更なら可能なのだが、どうせなら追加してよりいいソフトにしたい。

そこで、スピードもパフォーマンスも向上したアプリケーションを作ろう…と、思ってHSP3.0の仕様をみてみるとkeybd_event関数がaplkeyd関数、aplkey関数、aplkeyu関数に細分化されているもよう。

できれば、コードを書き直したいと思うのだが。

はたして、JoyPointer4は完成するのか・・・。

学校で再帰処理の勉強してて、今度オセロ作るらしい。

せっかく作ったソースを無駄にするのはなんなんで、それを利用してオセロゲームを作ろうと思う。
前に注目してたel.hを使ってみたいと思う。
http://ponk.jp/el/index.php?page=1

表示はとりあえず勉強してみたかったところ。
恥ずかしいんで今公開してるオセロとマインスイーパのソースは消そうと思う。

ていうか、コンテンツをまとめたいんだけど気力が・・・。
ちなみにこの画像の盤面はMS Excelで作ってたりww

DSC00378.JPG

参加賞が今月の中ごろ届きました。

前回はコルクのコースターで今回はシール3枚。
期待しすぎはよくないねww

リバーシ製作中!

学校のプログラミングの自由課題でオセロ(リバーシ)を作成中。

二年になったらオセロは必須課題で出るらしいのですが・・・


知らなかったんだよぅ・・・・・・orz

完成したらココにも上げますね。

システムは完成して、今A.I.を最強に……と、いいたいところだったんですが、アルゴリズムに限界を感じたんでとりあえず、普通に自分の思考をトレースしてます。

Profile

me.jpg
Name : みっちー
小学校で電子工作にハマり、高校時代はゲームプログラミング、大学時代にロボット製作へどっぷり浸かりました。
社会人になっても、なにかとものを作るのが大好きで、日々ネタと仲間を求めて活動中です。

Dream Drive!!

bana.png
http://dream-drive.net

趣味のロボットとプログラムを中心としたコンテンツのサイトです。

My Robots

kolink2.jpg
KO-LINK2
第2世代 並行リンク足ロボット

kolink.jpg
KO-LINK
並行リンク足ロボット

BusterGX.jpg
BusterGX (Ex Walker)
G-ROBOT + ROBO-XERO

kumaco.jpg
KUMACO
ぬいぐるみロボット

SARUBO.jpg
SARUBO
JX-SYSTEM搭載ぬいぐるみロボット

kokuten3.jpg
KOKUTEN 3
リアルタイム逆運動学制御ロボット

meros.jpg
MEROS
膝なしロボット
(胸部マトリックスLED搭載)
by Mechaniker

kokuten12.jpg
KOKUTEN 1&2
はじめてのロボット
by Mechaniker

協賛広告

最近のコメント

月別 アーカイブ

このアーカイブについて

このページには、過去に書かれたブログ記事のうちWindowsプログラミングカテゴリに属しているものが含まれています。

前のカテゴリはiPhone/iPadです。

次のカテゴリはガジェットetcです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。