Perlの最近の記事

前回の記事 では
とっても簡単なじゃんけんアプリを作ってみました。
今回は 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 https://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は こちら になります。