mieki256's diary



2009/05/23() [n年前の日記]

#1 [prog] RubyとTcl/Tkとかインストール

_ActiveScriptRuby 1.8.7(p72) with-winsock2 (revise) をインストール。

One-Click Ruby Installer for Windows をインストールしようかどうかを悩んだり。 :

_Rubyist Magazine - Ruby ではじめるプログラミング 【第 1 回】 を読んだら One-Click Ruby Installer for Windows を薦めていたので、そちらをインストールしようかと思ったが。 _Watirを使ったRubyスクリプトをexerbを使ってexe化する - shimobayashiの日記 を読んだら exerb を使おうとしたときにハマるらしいので、どの版を入れるかで非常に悩んでしまったり。RubyをWindows環境下で使おうとすると、こういう問題が発生してくるので嫌いです。 *1

ActiveTclをインストール。 :

ひょっとして ActiveScriptRuby をインストールすればそのまま Ruby/Tk が使えるだろうか。と思ったけどそこまで甘くはなかった。tk*.dll がねえよ、と言われる。

ということで、ActiveTcl8.5.7.0.290198-win32-ix86-threaded.exe をDLして入れてみたり。

環境変数を何ら手作業で指定してないにも関わらず、Ruby/Tk が動いてくれたように見える。しかも ActiveTcl8.5 をインストールしてもOKの模様。8.4 以外はダメだったらどうしようと不安だったけれど、助かった。

さておき。以前は、Ruby/Tkを使えるように環境を整えたことで、Python + Tkinter が使えなくなるという不具合に見舞われたけど。今回は、Ruby/Tk も Python + Tkinter も共存できているように見える。

おそらく前回のソレは、環境変数 TCL_LIBRARY と TK_LIBRARY を設定しちゃったのがまずかったんだろうと予想。Ruby/Tkに関する巷の解説ページでは、その2つの環境変数を設定せよと書いてあるページがチラホラあるけれど。たぶんそれらのページを記述した方の環境では Python + Tkinter を使ってないから問題になっていないのだろう。あるいは単に古い情報・解説ページなのかもしれない。

環境変数 RUBY_TCL_DLL, RUBY_TK_DLL にDLLの存在するパスを設定せよ、と書いてあるページも見かけたのだけど、コレについては設定してないのに動いてるけどいいのだろうか。いや。該当ページを再度読んでみたら、「C:\hoge\Tcl\bin を環境変数pathに含めるか、もしくは〜」と書いてあった。ActiveTcl のインストール時、path に、インストールフォルダ\bin が追加されたから、ソレで解決しているのだな。

wxRubyもインストール。 :

_wxRubyでGUIプログラミング -- インストール を参考に、
gem install wxruby
と打ってみたり。数分?かかった頃に、「1つインストールしたよ」的なメッセージが。Rubygemsでインストールする場合はこれだけで済むらしい。素晴らしい。

_wxRubyでGUIプログラミング -- 使ってみる によると、
  • Rubygems を使ってインストールした際は各スクリプトに、require 'rubygems' を書かないといけない。
  • あるいは、環境変数 RUBYOPT に -rubygems を設定しておくことでも解決できる。
とあったので、後者の方向で。

*1: いやまあ、Pythonも、2.4.x、2.5.x、2.6.x、3.x のどれを入れたらいいんだ!てな問題があってアレな気もします。

#2 [prog] ZooZ.plなるPerl/Tk用GUIビルダーを使ってみた

_Perl/TkのGUIビルダー - Perl四方山話
_ZooZ.pl - A Perl/Tk GUI builder in pure Perl/Tk. - search.cpan.org

ActivePerl を使っているので、ppmでインストール。Tk::Toolbar も要求されるらしいのでソレもインストール。Perlインストールフォルダ/site/lib/ZooZ.pl あたりにインストールされているみたい。

どうやって呼び出せばいいのか、よくわからず。とりあえず、
Perlインストールフォルダ\bin\wperl.exe "Perlインストールフォルダ\site\lib\ZooZ.pl"
みたいなショートカットファイルを作成してみたけど…コレでいいのだろうか? もっと上手い手がありそうな気もするけど…。

基本的には、グリッド内に Widgets? Widget? を配置していく感じでレイアウトができるらしい。配置した Widgetをダブルクリックすると、Widgetのプロパティや配置の仕方を設定できたり、子Widgetのレイアウト画面に移行したりする模様。

プロジェクトとして保存できるのはもちろん、.pl や .pm の形式でエクスポート?ができる。

個人的な感想としては、結構判りやすく気軽にサクサクと作業ができそうな気がしたり。素晴らしい…。

ただ、全ての Widget をサポートしてるわけではないようで。自分で逐一エディタ上で Widget 指定を書いていくよりは、雛型になる .pl や .pm をこのツールで一旦作成して、後はそれら出力されたファイルをエディタでガシガシ修正してしまう、という使い方が良さそうにも思えたり。いや、ソレだと、後になってから Widget を増やしたい時に困ってしまうかもしれないけど。.pm にしておけば多少はそのへん違うのかしら。どうなんだろう。よくわかりません。

とりあえずスクリーンショットを。

ZooZ.pl_screenshot


全然関係ないけど、なんだかExcelっぽいというか、htmlのテーブルレイアウトっぽいというか。座標値で配置していくタイプのTk関連ツールを見かけた記憶が無いのですが、何故なんでしょうか。初心者(?)には座標値でペタペタ置いていくほうが判り易いのでは、という感もあるのだけど、実際はどうなんだろう。よくわかりません。

#3 [prog] ついでにWin32::GUI::Loftもインストールしてみたり。

上記のソレは Perl/Tk 用のツールだけど、どうも世の中には Win32::GUI とか Win32::GUI::Loft とかのWindowsに特化したGUI関連のソレがあるらしいと知りソレもインストールしてみたり。

ActivePerlなので、まずはppmで Win32::GUI (Win32-GUI) をインストール。

_The GUI Loft -- a Win32::GUI designer/builder for Windows User Interface creation in Perl から、Loft_binary.zip をDLして解凍。

.\TheGUILoft\PPM\AdHoc\ に入って、ppm install Win32-GUI-AdHoc.ppd をしたらエラーが出た。検索したところ、どうも Win32::GUIが先に入ってるとその手のエラーが出るらしく。エラーメッセージ中に「--force でやっちゃうかい?」てなことが書いてあったので、ppm install --force Win32-GUI-AdHoc.ppd みたいな。

.\TheGUILoft\PPM\Loft\ にも入って、pm install Win32-GUI-Loft.ppd をしたら、またエラーが出た。これも、ppm install --force Win32-GUI-Loft.ppd みたいな。

ちなみに、.\TheGUILoft\PPM\AdHoc\ にも、.\TheGUILoft\PPM\Loft\ にも、それぞれ install.bat が入っていて、その中で ppm を呼びだしているようなので、ソレを実行してインストールしてもいいのかもしれない。が、自分の場合ソレもエラーが出たので、前述のように --force つきで手打ちで指定。

解凍したフォルダを、そのままどこかしらに移動。TheGUILoft\tgl.exe を実行すると、それらしいツールが起動してくれた。

こちらのツールは、逐一座標値で張り付けていくタイプらしい。少し試してみたところ、一見するとこの方法のほうがとっつきやすいように思えたり。が、複数の Widget の位置合わせをしっかり厳密にやろうとするとかえって面倒な状態になることにも気付いた。一応、Ctrlキーを押しながら選択していけば複数選択できて、その状態でプロパティを編集すれば選択Widget全部に値が反映されるので、横の表示開始位置を揃えたり、各Widgetの横幅や縦幅を揃えたり等はさっくりできるのだけど。それぞれをきっちりと等間隔のスペースを設けて配置したい、といった要求には打つ手がない予感。「なんとなくそれっぽく配置してあればそれで構わないよ」なら全然オッケーだけど、「どうせなら綺麗に整然と並べたいな」と思い始めると途端にハマりそう。…なるほど、だから他ツールは、テーブルレイアウト的なソレでレイアウトする思想になっているのだなと今頃気づいたわけで。

さておき、保存をすると、拡張子が .gld のファイルが作成される。この .gld を読み込んでレイアウトするようなPerlスクリプトになるらしいのだが…。詳細な解説をしてくれていたらしい「いやな日記」さんのページが削除されてしまったようで、ココで行き詰ってしまった。どのblog記事を眺めても「いやな日記さんのページで詳しく解説してるから」とだけ書かれていて中身が不明なこの状況。インターネット上に存在する情報の脆さ・脆弱さ・不安定さまたしても痛感させられたりもして。やっぱり「消えると怖いのでコピペ」が、モラルどうこうでは否定されるかもしれないが実用性の面では姿勢として正しい気がする。世の中全ての人が自サイトを放置してくれるならコピペしなくても済むけれど、比較的技術者寄りの方ですらサクッと削除してしまうこの現状ではコピペによるバックアップも致し方がないのではないか。みたいな。

や。元々のサイトの英文ドキュメントを読めという話ですよね。ということで、 _Reference -- how to incorporate The GUI Loft windows into your Perl programs を読んで、
use strict;
use warnings;

use Win32::GUI;
use Win32 ();
use Win32::GUI::Loft::Design;

my $fileWindow = "launcher.gld";
my $objDesign = Win32::GUI::Loft::Design->newLoad($fileWindow) or die("Could not open window file ($fileWindow)");

my $win = $objDesign->buildWindow() or die("Could not build window ($fileWindow)");

$win->Show();

Win32::GUI::Dialog();
と書いてみたのだけど。下のような感じのメッセージが大量に表示された。
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:\home\prg\perl\test_win32_gui\test.pl line 8
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/Loft/Design.pm line 31
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/ToolbarWindow.pm line 23
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/BorderlessWindow.pm line 24
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/Loft/Cluster.pm line 21
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/AdHoc.pm line 31
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/Loft/Control/ListView.pm line 22
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/Loft/Control/TabStrip.pm line 23
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/TabStripGroup.pm line 25
'use Win32::GUI;' is currently exporting constants into the callers scope. This functionality is deprecated. Use 'use Win32::GUI();' or list your required exports explicitly instead. at C:/usr/local/Perl/site/lib/Win32/GUI/HyperLink.pm line 6
Use of uninitialized value in subroutine entry at C:/usr/local/Perl/site/lib/Win32/GUI/Loft/Control/ListView.pm line 294.
英語赤点の自分なので何を言われてるのかさっぱりだけど。たぶん、「use Win32::GUI; はよろしくねえな。use Win32::GUI(); を使いやがれ」と言われてる気がする。自信ないけど。 問題は、自分で書いたところだけではなく、Win32::GUI::Loft のモジュール?についてすら文句を言われていること。 これは根拠のない勝手な想像だけど、おそらく現状の Win32::GUI バージョン 1.06は、以前のバージョンとそのあたりの宣言(?)の仕方が違っていて、Win32::GUI::Loft 内の記述のアレコレはもう現状に合っていなくてこういうメッセージが出てくるのかなと。

検索したら、 _Re: [perl-win32-gui-users] Deprecated Constants でそこらへんの話が。やっぱり英文なのでさっぱりわからないけど、「見せかけでアレコレしても真の問題解決にならない」「モジュール作者がこのバグを直すべき」と書かれてる、のかな? わからんけど。 しかしこのメールが書かれてるのが2007年。 つまり Win32::GUI::Loft は、もう数年ほど誰もメンテナンスしてないし、今後バグが修正される見込みもないし、どう考えても今現在コレを使うのは時代遅れで問題ありまくり。という状態なのかもしれない。てな気分になってきたり。

_theguiloft : Message: Re: [The GUI Loft] slow loading in win32-gui v.1.05 でも「10秒ぐらい反応返ってこねえよコレ。Pen4 2GHzなのに」「その問題は俺も見たことあるわ。それが嫌でLoftは捨てた。TGLはイイ奴だったのにな…」みたいなことが書いてあるように見える。たぶん。英語赤点だから自信ないけど。

要するに、もうダメダメなんだな、このモジュール。ということで自分もアンインストール。

以上、1 日分です。

過去ログ表示

Prev - 2009/05 - 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

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project