2012年4月アーカイブ

前回の記事 では
とっても簡単なじゃんけんアプリを作ってみました。
今回は wxFormBuilder というGUIビルダー、RADを使って
書き換えてみましょう。

じゃんけんアプリでは、 フレームパネルボタンサイザー をコードで組み立てていました。
wxFormBuilder を使えば、これらのデザインは
GUIビルダー側で行ないxrcファイルに保存、コード側ではxrcファイルを読み出しイベントハンドラを登録するだけになります。

DBやデータに基いてGUIの構成を細かく組み立てる場合はXRCは向きませんが、予め決まっている場合はコードで組み立てるより気楽だと思います。

まずは wxFormBuilder をインストールしましょう。
wxFormBuilder_v3.1.70.exe を入れてみます。

wxFormBuilderを起動したら、下のようにレイアウトします。

fbp1.jpg

レイアウトできたら、メインの設定を変更しましょう。
nameとfileを変更します。

fbp2.jpg

最後にXRCを書き出すためチェックを入れ、ボタンを押してそれぞれ janken.fbp, janken.xrc を保存しましょう。

fbp3.jpg

前回のjanken.plを変更し、janken_xrc.plとします。

次のコマンドで起動します。

  1. portableshell.bat
  2. perl janken_xrc.pl

上手く起動できたでしょうか。

janken_xrc.jpg

それぞれのシンプルなサンプルを動かしてみましたので、その起動速度のメモします。

体感時間なので当てになりませんが、次のような感じでした。

  • WxPerl 1秒未満
  • WxPython 1秒未満 (気持ちWxPerlより速いかも)
  • WxRuby 8秒ぐらい

使ったコードは次です。
Rubyのコードは wxRubyでGUIプログラミング をそのまま使わせていただきました。



コードが等化ではありません。
ですが、それぞれの各種サンプルを動かしてみたところ、上記の体感時間に関しては
だいたい当てはまる感じがしています。

サンプルは次を動かしてみました。

  • WxPerl http://search.cpan.org/perldoc?Wx::Demo
  • WxPython C:\Program Files\wxPython2.8 Docs and Demos\samples\
  • WxRuby C:\wxruby\samples

環境は Core 2 Duo 2.13G Macbook Air の VMWare Fusion の WindowsXP 上です。

帳票印刷を真面目にやろうとすると、色々問題が出てくると思います。

  • ExcelやAccessを使い、OLEでアクセスするも、Officeが入っていなくては使えない。
  • Crystal ReportsはVisual Studio 2010からバンドルされなくなった。
  • 商用ライブラリを利用するには、お金が掛かる。
  • 自分でレイアウトするにしてもレイアウトを計算して、デバイスコンテキストにレンダーするのが難しい、面倒。
  • rubyにはとっても良いものがあるようです! ThinReports

Webアプリのようにテンプレート言語でTableタグを含むHTMLを作成して
それをPDFに変換できたら良いのに・・・と思い付きました。

wkhtmltopdf はSafariやChromeで使用されている
HTMLレンダリングエンジン Webkit をCUIから扱えるようにパッケージングしたものです。
Windows環境では、wkhtmltopdf.exeとして用意されています。

Sumatra PDF PDF用のフリーソフトです。CUIからも使えます。印刷とプレビューに使用します。ダウンロードはポータブル版がオススメです。

それでは組み合わせてみましょう。

  1. Text::MicroTemplateを使って、HTMLを作成します。
  2. wkhtmltopdfを使って、HTMLをPDFへ変換します。
  3. Sumatra PDFを使って、PDFを印刷、又はプレビューします。

contrib以下にダウンロードしました。

tree.jpg

下記を chohyo.pl として保存します。

  1. portableshell.bat
  2. perl chohyo.pl

で、chohyo.htmlとchohyo.pdfを書き出します。

  1. perl chohyo.pl --preview

で、Sumatra PDFでchohyo.pdfを開きます。

  1. perl chohyo.pl --printer

で、Sumatra PDFでchohyo.pdfを印刷します。

chohyo.jpg

前回 はUrladerを使って
ソースの一群を.exeに纏めてみました。
これを実行すると、C:\Documents and Settings\<ユーザー名>\Application Data\urlader\Janken\i-<バージョン> には素のソースコードが展開されてしまいます。
今回は、Filter::Crypto::CryptFileを使ってjanken.plを難読化してみたいと思います。

以下を crypt.pl として保存してください。

  1. portableshell.bat
  2. perl crypt.pl

を実行すると、janken2.plという難読化されたファイルが出力されます。

これはこのまま perl janken2.pl として実行できます。

じゃんけん.plを exe にしてみる
pack_janken.pl内で、難読化したいファイルのみcrypt_fileを適用するようにしておけば
exeのパッケージング時に自動的に行なわれるようになると思います。

Filter::Cryptoで難読化したファイルは 復号化できないわけではない
のですが、実用上はこの程度で十分な場合もあると思います。

前回 は WxPerl で簡単な janken.pl を作成しました。
今回はperl環境をインストールしなくても簡単に実行できるように
単独のexeにしてみたいと思います。

方法いろいろ

色々な方法があると思います。

Urladerを使ってみる

ここではUrladerを使って exe にしてみます。
Urlader-1.0そのままだと、起動時に問題が出ますので、パッチを当ててインストールします。

  1. portableshell.bat
  2. cpan
  3. look Urlader
  4. lwp-request http://bokut.in/mt/2012/04/24/urlader-rt76135.patch | patch -p1
  5. perl Makefile.PL
  6. dmake
  7. dmake install
  8. exit

下記のパッケージングするためのスクリプトを pack_janken.pl として保存してください。
pack_janken.plの実行には List::Compare が必要ですので、こちらもインストールしてください。

pack_janken.plを実行してexeを作ってみましょう。

  1. portableshell.bat
  2. lwp-download http://urlader.schmorp.de/prebuilt/1.0/windows-x86 windows-x86
  3. perl pack_janken.pl

janken.exeが出きたら成功です。

C:\Jankenに

  • Perl環境
  • モジュール
  • janken.pl

をコピーし、実行できる環境を用意しました。
(この時点でC:\Jankenだけ持ち歩けば、実行できるようになりました)
UrladerでC:\Janken以下を janken.exe に固めます。

janken.exeをダブルクリックすると起動できると思いますが如何でしょうか。

これでStrawberry Perl環境やjanken.plを持ち歩かなくても、janken.exeだけ持ち歩けば
実行できるようになりました。

実行時は次のように動きます。

  1. C:\Documents and Settings\<ユーザー名>\Application Data\urlader\Janken\i-<バージョン> に固めたC:\Jankenを展開。
  2. 上記ディレクトリをカレントディレクトリとして、wperl.exe janken.plを実行。

展開されたディレクトリは削除されません。
2回目移行の実行時に再利用されるので、1回目に比べ起動時間がとても短かくなります。

なお作ったjanken.exeは こちら になります。

前回 の記事では WxPerl をインストールしました。
今回は凄く簡単なじゃんけんアプリを作ってみたいと思います。

下記をjanken.plとして保存してください。

  1. portableshell.bat
  2. perl janken.pl

janken.jpg

コマンドラインではなく、ダブルクリックで起動したい場合は
perl.exeと同じディレクトリにあるwperl.exeのショートカットを作り
プロパティで調節します。

wperl_shortcut.jpg

前回 はStrawberry PerlにCPANモジュールを入れてみました。
今回はGUIツールキットのCPANモジュール WxPerl をインストールして、メッセージボックスを出してみます。

WxPerlはC++で書かれたGUIツールキットの WxWidgets をPerlから使えるようにしたものです。
WxWidgetsはOSの標準的なGUIの見た目に近いという特徴があります。

  1. portableshell.bat
  2. cpan
  3. install Wx (長く時間が掛かるのがネックです・・・自分の環境では22分かかります。ActivePerlを使えば、数分で終わりますが、ここでは辛抱することにします。また Strawberry Perl Professionan にはWx, Moose, Catalyst, DBIx::Classなどヘビー級なものが全て含まれています。)
  4. exit
  5. perl -E "use Wx; Wx::MessageBox('Hello Wx')"

hello_wx.jpg

Strawberry PerlもActivePerlも CP932 で表せない日本語ファイルを扱うのには一工夫必要です。

ここでは Win32::Unicode を使ってみます。
作者様の詳しい 文章 がありますので、下ではサンプルを行なってみました。

備考

Windowsにはファイルを扱うためのAPIとして CreateFileA と CreateFileW が用意されています。
CreateFileAは渡されたファイル名を、通常CP932として扱かいます。(現在のコードページに依存)
CreateFileWは渡されたファイル名を、UTF-16LEとして扱います。

上記の例の「萌え♥.txt」はCP932では表せないので、最終的にCreateFileAが呼ばれる場合は問題が起きます。Strawberry PerlとActivePerlのopenがそうです。
Win32::Unicodeでは最終的にCreateFileWを呼ぶので正しく「萌え♥.txt」を扱えます。

他の処理系

  • Strawberry PerlとActivePerl
    openはCreateFileA、Win32::UnicodeはCreateFileW
  • CygwinのPerl
    openでCreateFileWが使えます。
  • Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
    open(u'萌え♥.txt', 'w') で正しく扱えました。
  • ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
    下記では正しく扱えないようです。
# -*- encoding: utf-8 -*-
file = File.open("萌え♥.txt", "w")

前回 はStrawberry Perlを入れてみました。
今回はCPANモジュールを入れてみましょう。

  1. portableshell.batをダブルクリックして、コマンドプロンプトを立ち上げる。
  2. cpan
  3. install <インストールしたいモジュール>

cpan_install.jpg

ここではWindowsで日本語ファイル名を扱かうのに欠かせないモジュール Win32::Unicode を入れてみました。

モジュールのインストールには少し時間が掛かります。
典型的には次のようなステップで処理が行なわれます。

  1. look Win32::Unicode (ファイルの取得、展開、展開先に移動)
  2. perl Makefile.PL (makefileの作成)
  3. dmake (makefileに従って、実行、コンパイル)
  4. dmake test (t/以下のファイルに記述されたテストを実行)
  5. dmake install (出来たファイルのインストール)

また、ActivePerlを使うと、ppmという完成済みのファイルが用意されていれば
GUIのフロントエンド「Perl Package Manager」からクリックするだけでインストールが出来ます。
こちらは、上記のステップを踏まないので、とても速く完了します。
日々更新されている 新しいバージョンのモジュールを
入れる場合はppmが用意されていない場合があるので、cpanで入れることになりますが
そうでない場合は「Perl Package Manager」はとても便利です。

ActivePerlと並んでWindowsで使えるPerl, Strawberry Perlを使ってみたいと思います。

Strawberry Perl

Strawberry Perlは次で公開されています。

最新版の Strawberry Perl Nov 2011 では、次の形式のものが用意されています。

種類

  • MSI installer exe形式ではない、msi形式のものです。
    ダブルクリックでインストーラを起動し、c:\strawberry\ 以下にインストールし スタートメニューにアイコンが登録されます。 環境変数のPATHに C:\strawberry\perl\bin が追加されます。

  • Portable edition zip形式のものです。インストーラーは使用せず、展開するだけです。
    展開するフォルダの場所は、ドライブやパスを問わず、どこにでも置けます。
    環境変数のPATHは、変更されません。
    付属の portableshell.bat を起動すると、PATHが設定されたコマンドプロンプトが立ち上がり そこから起動したPerlは @INC(モジュールを読み込むフォルダ) が自動的に調節されます。

  • ZIP edition 付属の relocation.pl.bat と update_env.pl.bat を使って、手動で任意の場所にインストール するものです。

  • MSM Strawberry Perl自体をパッケージングする工程はモジュールになっていて、自身で行うこともできます。
    上記のmsi形式をパッケージングする際に Perl::Dist::WiX によって作成されたmsmファイルです。
    自身でパッケージングする際にmsmファイルを使用することもできます。
    自身で作成したモジュールなどをバンドルして .msi 形式のインストーラーを作成したい場合などに便利です。

インストール

ここでは環境を汚さない Portable edition を使いたいと思います。
strawberry-perl-5.14.2.1-32bit-portable.zip をダウンロードして展開します。

portableshell.bat をダブルクリックして、コマンドプロンプトを立ち上げます。

perlを起動してみます。

perl -E "say 'Hello World'"

perl_say_hello.jpg

Windows で Perl が使用できるようになりました。
なお、アンインストールする際は、展開したフォルダ毎削除するだけです。