Google Chrome 8.0.552.215リリースPDFファイルの閲覧が可能に
Google Chromeが8.0系になりました。PDFの閲覧機能が付きました。これでAdobe Reader等のPDFリーダーがインストールされてなくてもGoogle ChromeだけでPDFファイルの閲覧が可能になりました。しかもPDFファイルのリンクをクリックしてもHTMLのページを開いた感覚で高速に閲覧できて変な枠も付かないしいい感じです。とてもシンプルです。
PDFを開いてみるとこんな感じです。マウスを右下のほうにもって行くとアイコンが表示されます。
[< >]こんな感じのアイコンをクリックするとブラウザの横幅に合わせてPDFが拡大表示されます。
上下矢印のアイコンをクリックするとブラウザの上下幅内に収まるようにPDFを表示します。虫眼鏡のアイコンは普通に拡大縮小機能です。
PDF中の文字列もマウスでドラッグすると普通にコピー出来ます。
最近はFoxitからAdobe Readerに戻っていましたが、記念にAdobe Readerをアンインストールしてみた。
タグ : Google, Google Chrome, PDF, ブラウザ
GyaO!からGAS等を使ってダウンロードしたファイルの簡易ファイル破損チェックツールを作ってみた。
私はGyao!で良く動画を見ますが、その日見るものをGetASFStream(GAS)等を使ってあらかじめダウンロードしてからWindows Meida Player(WMP)で見る事が多いのですが、ダウンロードに失敗してファイルが破損している事がたまにあります。ダウンロードしてから見る理由は、フルスクリーンににして見たいというのが大きな理由ですがダウンロードしてからWMPで見るとPCのスペックや回線の混雑などにあまり影響されずにスムーズに見ることが出来るというのもあります。他にもWMPを使うと明るさや再生速度など色々変更できるというのあります。
で、GASで並列にいくつかダウンロードしているとGASが落ちたりしてファイルが破損してしまっている場合があって気づかずに見ていて途中で動画が終わったりという事があってそれではしらけてしまうので、簡易のチェックツールをつくってみました。
一応断っておくと簡易なのでたいしたチェックはできませんので多大な期待はしないでくださいw。
使い方
下のダウンロードからmbc.zipをダウンロードして解凍します。解凍するとmbc.exeとlibgcc_s_dw2-1.dllが出てくるので、GyaO!からダウンロードしア動画があるのと同じフォルダにコピーします。
そして、mbc.exeをマウスでダブルクリックするなりして実行するか、又は、コマンドプロンプトからmbcと入力して実行してください。実行すると下の様にチェックが行われます。ファイルが明確に壊れていると判断できた場合は頭に[BREAK]の文字がつきます。(今考えるとDamageの方が妥当だったなと思う。)
また、mbc.logというログファイルが作られて画面に表示された結果がそのログファイルにも格納されるので、テキストエディタなどで開いて確認する事が出来ます。コマンドプロンプトからではなく、mbc.exeをマウスでダブルクリックするなどして実行した場合はこのファイルをみて結果を確認してください。
F:\Downloads\Gyao>mbc
STATUS SIZE TIME ファイル名
[BREAK] 149036784 00:25:40 35563_aHGy6kBh33802.wmv
136428595 00:23:08 みどりのマキバオー 第21話 根性200%!!.w
136412589 00:23:07 みどりのマキバオー 第22話 ハハ キトク.wmv
[BREAK] 136424073 00:23:08 みどりのマキバオー 第23話 試練の雨! 朝日杯の
136412565 00:23:07 みどりのマキバオー 第24話 1600Mのサバイバ
136412661 00:23:07 みどりのマキバオー 第25話 三強激走!! 勝つの
46442082 00:08:02 もえがく★5 スペイン語編 第7話『小さなハートに
46410058 00:08:02 もえがく★5 フランス語編 第7話『小さなハートに
46394058 00:08:01 もえがく★5 中国語編 第7話『小さなハートに大き
46410094 00:08:03 もえがく★5 英語編 第7話『小さなハートに大きな
46410058 00:08:02 もえがく★5 韓国語編 第7話『小さなハートに大き
12501719 00:02:08 アニメDEマナーレッスン ~テーブルマナー編~ 日
13157755 00:02:18 アニメDEマナーレッスン ~テーブルマナー編~ 日
18230007 00:03:07 アニメDEマナーレッスン ~テーブルマナー編~ 日
11541653 00:02:00 アニメDEマナーレッスン ~テーブルマナー編~ 日
21174199 00:03:37 アニメDEマナーレッスン ~テーブルマナー編~ 日
132524415 00:23:42 ウィッチブレイド 第1話 「始」.wmv
133084535 00:23:42 ウィッチブレイド 第2話 「惑」.wmv
133276523 00:23:43 ウィッチブレイド 第3話 「抗」.wmv
[BREAK] 141752877 00:24:00 ガラスの仮面 第10話 たけくらべ 二人の美登利.
22021087 00:02:20 ガラスの仮面 第11話 春の嵐.wmv
22021087 00:01:54 ガラスの仮面 第12話 一人きりの舞台.wmv
141660959 00:23:59 ガラスの仮面 第9話 新しい美登利.wmv
136319026 00:23:32 少年陰陽師 第25話 禍気の渦に伊吹舞う.wmv
133486696 00:23:04 少年陰陽師 第26話 焔の刃を研ぎ澄ませ.wmv
134780439 00:23:08 破天荒遊戯 第10幕 君に贈ろう.wmv
137548541 00:23:22 破天荒遊戯 第9幕 ゆくさきをしらない 後編.wm
F:\Downloads\Gyao>
GASがダウンロード途中で落ちてファイルが破損した場合は大抵チェックできますが、完全にチェックできるわけではないのでチェック漏れもあります。例えば、上のガラスの仮面の第11話、第12話を見るとわかりますが、TIMEが極端に短く02:20と01:54となっています。これは何らかの原因でサーバーの応答がなくなった場合などにその長さの動画として保存されてしまう場合がありチェックツールではチェックできません。そのためにTIMEとSIZEを表示しているので他の動画と極端に値の違う場合の目視チェックの目安として利用してください。
F:\Downloads\Gyao>mbc
STATUS SIZE TIME ファイル名
[BREAK] 149036784 00:25:40 35563_aHGy6kBh33802.wmv
136428595 00:23:08 みどりのマキバオー 第21話 根性200%!!.w
136412589 00:23:07 みどりのマキバオー 第22話 ハハ キトク.wmv
136412529 00:23:08 みどりのマキバオー 第23話 試練の雨! 朝日杯の
136412565 00:23:07 みどりのマキバオー 第24話 1600Mのサバイバ
136412661 00:23:07 みどりのマキバオー 第25話 三強激走!! 勝つの
46442082 00:08:02 もえがく★5 スペイン語編 第7話『小さなハートに
46410058 00:08:02 もえがく★5 フランス語編 第7話『小さなハートに
46394058 00:08:01 もえがく★5 中国語編 第7話『小さなハートに大き
46410094 00:08:03 もえがく★5 英語編 第7話『小さなハートに大きな
46410058 00:08:02 もえがく★5 韓国語編 第7話『小さなハートに大き
12501719 00:02:08 アニメDEマナーレッスン ~テーブルマナー編~ 日
13157755 00:02:18 アニメDEマナーレッスン ~テーブルマナー編~ 日
18230007 00:03:07 アニメDEマナーレッスン ~テーブルマナー編~ 日
11541653 00:02:00 アニメDEマナーレッスン ~テーブルマナー編~ 日
21174199 00:03:37 アニメDEマナーレッスン ~テーブルマナー編~ 日
132524415 00:23:42 ウィッチブレイド 第1話 「始」.wmv
133084535 00:23:42 ウィッチブレイド 第2話 「惑」.wmv
133276523 00:23:43 ウィッチブレイド 第3話 「抗」.wmv
141740953 00:24:00 ガラスの仮面 第10話 たけくらべ 二人の美登利.
141900995 00:24:00 ガラスの仮面 第11話 春の嵐.wmv
136316881 00:23:59 ガラスの仮面 第12話 一人きりの舞台.wmv
141660959 00:23:59 ガラスの仮面 第9話 新しい美登利.wmv
136319026 00:23:32 少年陰陽師 第25話 禍気の渦に伊吹舞う.wmv
133486696 00:23:04 少年陰陽師 第26話 焔の刃を研ぎ澄ませ.wmv
134780439 00:23:08 破天荒遊戯 第10幕 君に贈ろう.wmv
137548541 00:23:22 破天荒遊戯 第9幕 ゆくさきをしらない 後編.wm
F:\Downloads\Gyao>
破損しているファイルをダウンロードして結果上のようになりました。
※一番上のファイルはテスト用にわざと破損させているファイルなので気にしないでください。
更新履歴
- 2010/12/18 /wmvとオプションを付けると拡張子の付いていないasfファイルに.wmvと拡張子を付ける機能を追加した。
ダウンロード
関連リンク
Webminのバージョン1.530がリリースされています
Webmin(ウェブミン)はWebベースのUNIX系システム管理ツールです。バージョン1.530が12月1日頃リリースされたようです。
利用している人はバージョンアップを忘れずにどうぞ。
タグ : Linux
【perlメモ】Text::MicroTemplateモジュールはやっぱり便利だった。
関連記事:【perlメモ】Text::MicroTemplateモジュールを使ってみる。 – KUMA TYPE
上の記事で、自分ひとりでプログラムを開発する分にはあんまりいらないかもと思っていたが使い慣れてくるとやっぱり使った方がいろいろ便利だという結論に至った。
どういう場合に便利なのか実例を挙げて説明したいと思う。
例えば最近作成したサイト『楽ツール』は、Text::MicroTemplateを使って作成している。今まで作ったものはソース内にHTMLをべた書きにして作っている。楽ツールのトップページと「最近チェックされた商品の一覧」のページではほぼ同じ処理で表示内容が違うだけなのでトップページのプログラムをコピーしてテンプレートを少し修正しただけで作ることが出来る。プログラム部分はほとんど弄る必要がない。
また、チェックボックスやラジオボタンなどの処理が凄く処理しやすくなる。HTMLソースの中に直接コードを書けるので見通しが凄く良い。関数にすればもっと見通しがよくなるだろう。今までだと、あらかじめチェックボックスのon/offの処理をHTMLの外でしておいて、その結果を変数に入れておいてチェックボックスのon/offの処理をする必要があった。複数ある場合はその分の変数を用意してHTMLの外でたくさんの処理をあらかじめしておかなければいけなかったのが無くなるのが大きい。チェックボックス分の変数または配列を用意しなくてよくなった。
変数の節約と見通しをよくするためにチェックボックスの処理ごとのHTMLを細切れにして変数を使いまわしたりしていた事もあったがそういうのもなくなるのはいい。
<tr>
<td nowrap>リンク方法</td>
<td>
<input type="radio" name="TARGET" value="1" <?= ($r->{TARGET} eq ‘1’)?’checked’:”; ?>> 別ページ
<input type="radio" name="TARGET" value="2" <?= ($r->{TARGET} eq ‘2’)?’checked’:”; ?>> 同じページ
</td>
<td>リンクをクリックしたときに別ページで開くか、同じページに開くかを指定する事が出来ます。</td>
</tr>
<tr>
<td nowrap>ボーダーサイズ</td>
<td>
<input type="radio" name="BORDER" value="0" <?= ($r->{BORDER} == 0)?’checked’:”; ?>> 0(無し)
<input type="radio" name="BORDER" value="1" <?= ($r->{BORDER} == 1)?’checked’:”; ?>> 1
<input type="radio" name="BORDER" value="2" <?= ($r->{BORDER} == 2)?’checked’:”; ?>> 2
<input type="radio" name="BORDER" value="3" <?= ($r->{BORDER} == 3)?’checked’:”; ?>> 3
<input type="radio" name="BORDER" value="4" <?= ($r->{BORDER} == 4)?’checked’:”; ?>> 4
<input type="radio" name="BORDER" value="5" <?= ($r->{BORDER} == 5)?’checked’:”; ?>> 5
</td>
<td>画像の周りの枠線の幅を指定します。</td>
</tr>
具体的に今までのやり方を書いておくと以下の様な感じになる。HTMLの上の部分でまとめてやるか、項目ごとに細切れにやるかで見通しや変数の使いまわしが出来るか等が変わってくるが、実際の処理部分と表示部分が分かれるので見通しがよくないのと見た目がエレガントではない。後で見たときにも見づらい。
my @check = ();
$check[$TARGET]=’checked’;
print <<"EOF";
<tr>
<td nowrap>リンク方法</td>
<td>
<input type="radio" name="TARGET" value="1" $check[1]> 別ページ
<input type="radio" name="TARGET" value="2" $check[2]> 同じページ
</td>
<td>リンクをクリックしたときに別ページで開くか、同じページに開くかを指定する事が出来ます。</td>
</tr>
EOF
@check = ();
$check[$BORDER]=’checked’;
print <<"EOF";
<tr>
<td nowrap>ボーダーサイズ</td>
<td>
<input type="radio" name="BORDER" value="0" $check[0]> 0(無し)
<input type="radio" name="BORDER" value="1" $check[1]> 1
<input type="radio" name="BORDER" value="2" $check[2]> 2
<input type="radio" name="BORDER" value="3" $check[3]> 3
<input type="radio" name="BORDER" value="4" $check[4]> 4
<input type="radio" name="BORDER" value="5" $check[5]> 5
</td>
<td>画像の周りの枠線の幅を指定します。</td>
</tr>
EOF
【CSSメモ】画像だけを中央に表示するには
sample01
ここではわかりやすく黒いボーターを表示したdivタグに囲まれた画像と文字列がある場合で、画像だけ中央寄せにしたい時どうすればいいか?
div.sample01,div.sample02,div.sample03{
margin-top:10px;
padding:10px;
width:200px;
height:200px;
border:1px solid #000000;
}
文字と画像の両方とも中央に寄せる場合は単純にtext-align:center;を指定すればいいが、画像だけの場合そうは行かない。
<div class="sample01">
<A HREF="http://blog.with2.net/link.php?620913" title="ブログランキング"><img src="https://blog.kumacchi.com/img/br_banner_rainbow.gif" alt="ブログランキング"></A><br>
あいうえおかきくけこさしすせそたちつうてとなにぬねのはふふへほまみむめもやゆよわをん
</div>
画像だけ中央に寄せるためにmargin-leftとmargin-rightにautoを指定する事を思いつくが、実際に設定してみてもこれはうまくいかない。
div.sample01 img{
margin-left:auto;
margin-right:auto;
}
それはなぜかというと、imgはインライン要素なので上記のスタイルシート設定は意味をなさない。(単にマージンを指定するのには使える。)
sample02
ではどうすればいいかのかと言うと、display属性を使って、imgをインライン属性からブロック属性に変更してあげればいい。
div.sample02 img{
margin-left:auto;
margin-right:auto;
display:block;
}
これで、中央に表示されるようになる。注意点としては、ブロック属性はdivタグなどを想像するとわかるように前後に改行がのでその分隙間が開く事になる。ブロック属性の改行とbrタグ分隙間が増えるのでbrタグを削除すればsample01と同じ改行幅になる。
sample03
<div class="sample03">
<p class="s2"><A HREF="http://blog.with2.net/link.php?620913" title="ブログランキング"><img src="https://blog.kumacchi.com/img/br_banner_rainbow.gif" alt="ブログランキング"></A></p>
あいうえおかきくけこさしすせそたちつうてとなにぬねのはふふへほまみむめもやゆよわをん
</div>
div.sample03 p.s2{
text-align:center;
}
もっと単純に、画像をブロック属性のタグで囲んでそこにtext-align:centerを設定するという方法もあるが、タグやスタイルシートの記述なと修正点が増加するし設定も煩雑な感じになる。
タグ : スタイルシート
【perlメモ】ActivePerl 5.8.8 Build 824とPAR-Packer-1.008でperlのexe化環境の構築
perlのスクリプトをexe化する方法があるのですが、割とハードルが高いのであまり知られて無いように思います。私も随分前からやってみたいと思っていましたが面倒で今までやったこと無かったのですが初めてやってみました。どういう場合に便利なのかというと、通常のexeファイルのプログラムの様に実行ファイルを渡せばそれだけで使えるようになるのでperl自体をインストールしていない人でもすぐに使えるわけです。配布するときに便利です。しかし、結構面倒で現在の処は誰でも気軽にexe化できる状態とはいえない様です。
初めてだったので実際ハマリまくって、一晩掛かりました。
あまり理解せずに環境と作ろうとしたのではまったのですが、ある程度理化していると楽になる項目をまとめておくと。
- perlのバージョンとビルドとPAR-Packer(以下PAR)のバージョンは合わせる必要がある。それ以外の場合は自分でコンパイルする必要がある。
基本はこちらのサイト「ぶたときどき真珠~深沢千尋のブログ~ ActivePerl 5.8.9でPARを使う」の記事を参考にして環境を構築した。ActivePerl5.8.8 Build 824を使ってexe化環境を作った人の記事が見つからなかったので成功するかわからなかったが色々手探りしながら環境を構築した。
色々モジュールを追加する必要があるが、基本的にはppmを使って行った。CPANモジュールなどをppmを使ってインストールする方法は以下の記事を参考にしてほしい。
ActivePerlにGDをインストールする – KUMA TYPE
- PAR-Packerはppmからもインストールできるが ActivePerl5.8.8 Build824用は見当たらなかった。一通り入れてMみたが、ぜんぜん動かなかった。
適当にインストールしても下のようなエラーが出て使えない。
「プロシージャエントリポイント Perl_sv_2iv_flagsがダイナミックリンクライブラリperl58.dllから見つかりませんでした。」
「プロシージャエントリポイント Perl_hv_common_key_lenがダイナミックリンクライブラリperl58.dllから見つかりませんでした。」 - ExtUtils-FakeConfigのインストール。ppmでVer.0.12をインストールした。
- MinGWをインストール
MinGW – Minimalist GNU for Windows – Browse Files at SourceForge.netからmingw-get-inst-20101030.exeをダウンロードしてインストール。[Next]>[Next]>[Next]>[I accept the agreement]>[Next]>[Next]>[Next]と進んで、[Select Components]の画面では下の二つにチェックを入れて[Next]>[Install]>[Finish]でインストール完了。 - 環境変数の追加
[スタート]>マイコンピュータを右クリック>[プロパティ]>[システムのプロパティ]の画面で[詳細設定]タブをクリック>[環境変数]をクリック>[環境変数]の画面で[システム環境変数]の変数[Path]を選択して[編集]をクリック>[変数値]の頭に「C:\MinGW\bin;C:\MinGW\msys\1.0\bin;」を追記>追記したら各画面の[OK]ボタンを押して閉じる。 - NMAKEがインストールされていなければインストール。
http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exeからダウンロードできる。ダウンロードしたファイルを実行すると自己展開されるので出てきたファイルをどこかPathの通っているところにコピーする。(C:\Windowsなど)
既にインストールしているかどうかはコマンドプロンプトでnmakeと打てばよい。下の画像の様にnmakeがパスが通ったところに存在すれば何らかの反応がある。 - PAR::Packerのダウンロード。
Browse and search CPAN : PAR::Packer[http://cpan.uwinnipeg.ca/module/PAR::Packer]
から、PAR-Packer-1.008.tar.gzをダウンロードする。適当な解凍ソフトで解凍(展開)する。解凍レンジで解凍できた。 - ファイルの修正。
現在も必要なのか不明だが参考サイトの記述にしたがって、script\par.plの753行目(require_modulesというサブルーチンの中)にrequire Win32 if $^O eq ‘MSWin32’;
という行を追加して下の様に変更した。require PAR::Filter::PodStrip;
require Win32 if $^O eq ‘MSWin32’;
require attributes;
eval { require Cwd }; - PAR::Packerのコンパイル。
以下の順序でコマンドを実行してコンパイルを行う。>perl Makefile.PL
>nmake
>nmake test
>nmake install
>perl -MConfig_m Makefile.PL
>nmake
>nmake test
>nmake install - perl Makefile.PLしたところ
C:\PAR-Packer-1.008>perl Makefile.PL
Set up gcc environment – 4.5.0
Checking if your kit is complete…
Looks good
Writing Makefile for the par.exe program
Writing Makefile for PAR::PackerC:\PAR-Packer-1.008>
- nmake したところ
C:\PAR-Packer-1.008>nmake
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.C:\Perl\bin\perl.exe "-Minc::Module::Install" -e "extract_par(q(PAR-Packer-1.008-MSWin32-x86-multi-thread-5.8.8.par))"
Set up gcc environment – 4.5.0
cp lib/App/Packer/PAR.pm blib\lib\App\Packer\PAR.pm
cp lib/PAR/Packer.pm blib\lib\PAR\Packer.pm
cp lib/PAR/Filter/Obfuscate.pm blib\lib\PAR\Filter\Obfuscate.pm
cp lib/PAR/Filter/PodStrip.pm blib\lib\PAR\Filter\PodStrip.pm
cp lib/PAR/StrippedPARL/Base.pm blib\lib\PAR\StrippedPARL\Base.pm
cp lib/PAR/Filter.pm blib\lib\PAR\Filter.pm
cp lib/PAR/Filter/PatchContent.pm blib\lib\PAR\Filter\PatchContent.pm
cp lib/PAR/StrippedPARL/Dynamic.pm blib\lib\PAR\StrippedPARL\Dynamic.pm
cp lib/PAR/Filter/Bytecode.pm blib\lib\PAR\Filter\Bytecode.pm
cp lib/pp.pm blib\lib\pp.pm
cp lib/PAR/Filter/Bleach.pm blib\lib\PAR\Filter\Bleach.pm
cp lib/PAR/StrippedPARL/Static.pm blib\lib\PAR\StrippedPARL\Static.pm
nmake -f Makefile all -nologo
C:\Perl\bin\perl.exe sha1.c.PL sha1.c
gcc -c -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HA
SH_SEED -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -DPERL_IMPLICIT_CONTEXT -DPERL
_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX -DHASATTRIBUTE -fno-strict-alia
sing -mms-bitfields -I"C:\Perl\lib\CORE" -DPARL_EXE=\"parl.exe\" -O2 main.c
C:\Perl\bin\perl.exe file2c.pl -s ..\script\par.pl -l my_par_pl.c load_m
y_par_pl
gcc -c -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HA
SH_SEED -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -DPERL_IMPLICIT_CONTEXT -DPERL
_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX -DHASATTRIBUTE -fno-strict-alia
sing -mms-bitfields -I"C:\Perl\lib\CORE" -DPARL_EXE=\"parl.exe\" -O2 my_par_pl
.c
g++ main.o my_par_pl.o win32.coff -s -L"C:\Perl\lib\CORE" C:\Perl\lib
\CORE\perl58.lib C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\li
b\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\
libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\lib
oleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libws2
_32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:
\MinGW\lib\libodbc32.a C:\MinGW\lib\libodbccp32.a C:\MinGW\lib\libmsvcrt.a -lper
l58 -o par.exe
C:\Perl\bin\perl.exe -e1
C:\Perl\bin\perl.exe file2c.pl -l -c 30000 par.exe my_par.c load_my_par
C:\Perl\bin\perl.exe file2c.pl -l -c 30000 -n perl58.dll C:\Perl\bin\perl58.dll my_libperl.c load_my_libperl
gcc -c -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HA
SH_SEED -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -DPERL_IMPLICIT_CONTEXT -DPERL
_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX -DHASATTRIBUTE -fno-strict-alia
sing -mms-bitfields -I"C:\Perl\lib\CORE" -DPARL_EXE=\"parl.exe\" -O2 static.c
g++ static.o -s -L"C:\Perl\lib\CORE" C:\Perl\lib\CORE\perl58.lib C:\M
inGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW
\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinG
W\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\l
ib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libws2_32.a C:\MinGW\lib\li
bmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.
a C:\MinGW\lib\libodbccp32.a C:\MinGW\lib\libmsvcrt.a -lperl58 win32.coff -o sta
tic.exe
C:\Perl\bin\perl.exe -e1
C:\Perl\bin\perl.exe parlsig.pl static.exe par.exe 1 30000
C:\Perl\bin\perl.exe run_with_inc.pl static.exe -I../blib/lib -q -B -O..\script\parl.exe
Set up gcc environment – 4.5.0
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.C:\Perl\bin\perl.exe -e "chmod(oct(‘0600’), ‘..\blib\lib\PAR\StrippedPARL\Static.pm’);"
C:\Perl\bin\perl.exe encode_append.pl static.exe ..\blib\lib\PAR\StrippedPARL\Static.pm
C:\Perl\bin\perl.exe -e "chmod(oct(‘0444’), ‘..\blib\lib\PAR\StrippedPARL\Static.pm’);"
C:\Perl\bin\perl.exe run_with_inc.pl par.exe -I../blib/lib -q -B -O..\script\parldyn.exe
Set up gcc environment – 4.5.0
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.C:\Perl\bin\perl.exe -e "chmod(oct(‘0600’), ‘..\blib\lib\PAR\StrippedPARL\Dynamic.pm’);"
C:\Perl\bin\perl.exe encode_append.pl par.exe ..\blib\lib\PAR\StrippedPARL\Dynamic.pm
C:\Perl\bin\perl.exe -e "chmod(oct(‘0444’), ‘..\blib\lib\PAR\StrippedPARL\Dynamic.pm’);"
cd ..
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/parldyn.exe blib\script\parldyn.exe
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/parl.exe blib\script\parl.exe
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/tkpp blib\script\tkpp
pl2bat.bat blib\script\tkpp
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/pp blib\script\pp
pl2bat.bat blib\script\pp
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/par.pl blib\script\par.pl
pl2bat.bat blib\script\par.plC:\PAR-Packer-1.008>
- nmake test
長いので省略 - nmake installの結果
C:\PAR-Packer-1.008>nmake install
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.C:\Perl\bin\perl.exe "-Minc::Module::Install" -e "extract_par(q(PAR-Packer-1.008-MSWin32-x86-multi-thread-5.8.8.par))"
Set up gcc environment – 4.5.0
nmake -f Makefile all -nologo
C:\Perl\bin\perl.exe -e "chmod(oct(‘0600’), ‘..\blib\lib\PAR\StrippedPARL\Static.pm’);"
C:\Perl\bin\perl.exe encode_append.pl static.exe ..\blib\lib\PAR\StrippedPARL\Static.pm
C:\Perl\bin\perl.exe -e "chmod(oct(‘0444’), ‘..\blib\lib\PAR\StrippedPARL\Static.pm’);"
C:\Perl\bin\perl.exe -e "chmod(oct(‘0600’), ‘..\blib\lib\PAR\StrippedPARL\Dynamic.pm’);"
C:\Perl\bin\perl.exe encode_append.pl par.exe ..\blib\lib\PAR\StrippedPARL\Dynamic.pm
C:\Perl\bin\perl.exe -e "chmod(oct(‘0444’), ‘..\blib\lib\PAR\StrippedPARL\Dynamic.pm’);"
cd ..
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/tkpp blib\script\tkpp
pl2bat.bat blib\script\tkpp
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/pp blib\script\pp
pl2bat.bat blib\script\pp
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/par.pl blib\script\par.pl
pl2bat.bat blib\script\par.pl
Installing C:\Perl\html\bin\par.html
Installing C:\Perl\html\bin\tkpp.html
Installing C:\Perl\html\site\lib\pp.html
Installing C:\Perl\html\site\lib\PAR\Filter.html
Installing C:\Perl\html\site\lib\PAR\Packer.html
Installing C:\Perl\html\site\lib\PAR\Filter\Bleach.html
Installing C:\Perl\html\site\lib\PAR\Filter\Bytecode.html
Installing C:\Perl\html\site\lib\PAR\Filter\Obfuscate.html
Installing C:\Perl\html\site\lib\PAR\Filter\PatchContent.html
Installing C:\Perl\html\site\lib\PAR\Filter\PodStrip.html
Installing C:\Perl\html\site\lib\PAR\StrippedPARL\Dynamic.html
Installing C:\Perl\html\site\lib\PAR\StrippedPARL\Static.html
Installing C:\Perl\site\lib\PAR\StrippedPARL\Dynamic.pm
Installing C:\Perl\site\lib\PAR\StrippedPARL\Static.pm
Installing C:\Perl\site\bin\parl.exe
Installing C:\Perl\site\bin\parldyn.exe
Appending installation info to C:\Perl\lib/perllocal.podC:\PAR-Packer-1.008>
- perl -MConfig_m Makefile.PLの結果
C:\PAR-Packer-1.008>perl -MConfig_m Makefile.PL
Set up gcc environment – 4.5.0
Writing Makefile for the par.exe program
Writing Makefile for PAR::PackerC:\PAR-Packer-1.008>
- nmakeの結果その2(失敗)
C:\PAR-Packer-1.008>nmake
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.C:\Perl\bin\perl.exe "-Minc::Module::Install" -e "extract_par(q(PAR-Packer-1.008-MSWin32-x86-multi-thread-5.8.8.par))"
Set up gcc environment – 4.5.0
nmake -f Makefile all -nologo
gcc -c -O2 -DWIN32 -DPERL_IMPLICIT_CONTEXT -DPERL_MSVCRT_READFIX -I"C:\Perl\lib\CORE" -DPARL_EXE=\"parl.exe\" -O2 main.c
In file included from utils.c:25:0,
from mktmpdir.h:84,
from mktmpdir.c:1,
from main.c:53:
env.c: In function ‘__findenv’:
env.c:56:16: warning: ‘win32_environ’ redeclared without dllimport attribute: previous dllimport ignored
g++ main.o my_par_pl.o win32.coff -s -s -L"C:\Perl\lib\CORE" C:\Perl\lib\CORE\libperl58.a C:\MinGW\lib\libmsvcrt.a C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libwsock32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a -llibperl58.a -o par.exe
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: cannot find -llibperl58.a
collect2: ld returned 1 exit status
NMAKE : fatal error U1077: ‘C:\WINDOWS\system32\cmd.exe’ : return code ‘0x1’
Stop.
NMAKE : fatal error U1077: ‘C:\WINDOWS\system32\cmd.exe’ : return code ‘0x2’
Stop.C:\PAR-Packer-1.008>
上記の様にエラーになってしまった。「cannot find -llibperl58.a」の部分がエラーメッセージの肝。色々調べたところこちらのサイト(MinGW で CPAN モジュールをコンパイル – miau's blog?)の記事が参考になった。上の方で「ExtUtils-FakeConfig」モジュールをppmでインストールしたがこれでlibperl58.aが作成されるはずだが、実際にはperl58.libという名前で作成されているらしいのでファイルが見つからないという事らしい。そういうわけで簡単にperl58.libをlibperl58.aという名前でコピーした。perl58.lib通常下のフォルダにあるはず。
C:\Perl\lib\CORE
単純にファイル名の違う内容の同じファイルが同じフォルダに二つあることになる。
しかし結果は同じエラーになった。 - nmake結果その3(成功)
14.の結果も結局同じエラーになったので結局Makefileを書き換えた。
PAR-Packer-1.008\myldr\Makefile
の11行目と12行目は以下の様になっている。PERL_LDFLAGS=-s -s -L"C:\Perl\lib\CORE" C:\MinGW\lib\libmsvcrt.a C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libwsock32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a -llibperl58.a
STATIC_LDFLAGS=-s -s -L"C:\Perl\lib\CORE" C:\MinGW\lib\libmsvcrt.a C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libwsock32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a -llibperl58.aこれを下の様に書き換えた。
PERL_LDFLAGS=-s -s -L"C:\Perl\lib\CORE" C:\MinGW\lib\libmsvcrt.a C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libwsock32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a -lperl58
STATIC_LDFLAGS=-s -s -L"C:\Perl\lib\CORE" C:\MinGW\lib\libmsvcrt.a C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libwsock32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a -lperl58結果、下の様にコンパイルに成功。
C:\PAR-Packer-1.008>nmake
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.C:\Perl\bin\perl.exe "-Minc::Module::Install" -e "extract_par(q(PAR-Packer-1.008-MSWin32-x86-multi-thread-5.8.8.par))"
Set up gcc environment – 4.5.0
nmake -f Makefile all -nologo
g++ main.o my_par_pl.o win32.coff -s -s -L"C:\Perl\lib\CORE" C:\MinGW\lib\libmsvcrt.a C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libwsock32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a -lperl58 -o par.exe
C:\Perl\bin\perl.exe -e1
C:\Perl\bin\perl.exe file2c.pl -l -c 30000 par.exe my_par.c load_my_par
C:\Perl\bin\perl.exe file2c.pl -l -c 30000 -n perl58.dll C:\Perl\bin\perl58.dll my_libperl.c load_my_libperl
gcc -c -O2 -DWIN32 -DPERL_IMPLICIT_CONTEXT -DPERL_MSVCRT_READFIX -I"C:\Perl\lib\CORE" -DPARL_EXE=\"parl.exe\" -O2 static.c
g++ static.o -s -s -L"C:\Perl\lib\CORE" C:\MinGW\lib\libmsvcrt.a C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libwsock32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a -lperl58 win32.coff -o static.exe
C:\Perl\bin\perl.exe -e1
C:\Perl\bin\perl.exe parlsig.pl static.exe par.exe 1 30000
C:\Perl\bin\perl.exe run_with_inc.pl static.exe -I../blib/lib -q -B -O..\script\parl.exe
Set up gcc environment – 4.5.0
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.C:\Perl\bin\perl.exe -e "chmod(oct(‘0600’), ‘..\blib\lib\PAR\StrippedPARL\Static.pm’);"
C:\Perl\bin\perl.exe encode_append.pl static.exe ..\blib\lib\PAR\StrippedPARL\Static.pm
C:\Perl\bin\perl.exe -e "chmod(oct(‘0444’), ‘..\blib\lib\PAR\StrippedPARL\Static.pm’);"
C:\Perl\bin\perl.exe run_with_inc.pl par.exe -I../blib/lib -q -B -O..\script\parldyn.exe
Set up gcc environment – 4.5.0
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.C:\Perl\bin\perl.exe -e "chmod(oct(‘0600’), ‘..\blib\lib\PAR\StrippedPARL\Dynamic.pm’);"
C:\Perl\bin\perl.exe encode_append.pl par.exe ..\blib\lib\PAR\StrippedPARL\Dynamic.pm
C:\Perl\bin\perl.exe -e "chmod(oct(‘0444’), ‘..\blib\lib\PAR\StrippedPARL\Dynamic.pm’);"
cd ..
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/parldyn.exe blib\script\parldyn.exe
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/parl.exe blib\script\parl.exe
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/tkpp blib\script\tkpp
pl2bat.bat blib\script\tkpp
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/pp blib\script\pp
pl2bat.bat blib\script\pp
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/par.pl blib\script\par.pl
pl2bat.bat blib\script\par.plC:\PAR-Packer-1.008>
- nmake testの結果。
長いので省略。結果は正常終了。 - nmke installの結果
C:\PAR-Packer-1.008>
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.C:\Perl\bin\perl.exe "-Minc::Module::Install" -e "extract_par(q(PAR-Packer-1.008-MSWin32-x86-multi-thread-5.8.8.par))"
Set up gcc environment – 4.5.0
nmake -f Makefile all -nologo
C:\Perl\bin\perl.exe -e "chmod(oct(‘0600’), ‘..\blib\lib\PAR\StrippedPARL\Static.pm’);"
C:\Perl\bin\perl.exe encode_append.pl static.exe ..\blib\lib\PAR\StrippedPARL\Static.pm
C:\Perl\bin\perl.exe -e "chmod(oct(‘0444’), ‘..\blib\lib\PAR\StrippedPARL\Static.pm’);"
C:\Perl\bin\perl.exe -e "chmod(oct(‘0600’), ‘..\blib\lib\PAR\StrippedPARL\Dynamic.pm’);"
C:\Perl\bin\perl.exe encode_append.pl par.exe ..\blib\lib\PAR\StrippedPARL\Dynamic.pm
C:\Perl\bin\perl.exe -e "chmod(oct(‘0444’), ‘..\blib\lib\PAR\StrippedPARL\Dynamic.pm’);"
cd ..
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/tkpp blib\script\tkpp
pl2bat.bat blib\script\tkpp
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/pp blib\script\pp
pl2bat.bat blib\script\pp
C:\Perl\bin\perl.exe "-Iinc" -MExtUtils::Command -e cp script/par.pl blib\script\par.pl
pl2bat.bat blib\script\par.pl
Installing C:\Perl\site\lib\PAR\StrippedPARL\Dynamic.pm
Installing C:\Perl\site\lib\PAR\StrippedPARL\Static.pm
Installing C:\Perl\site\bin\parl.exe
Installing C:\Perl\site\bin\parldyn.exe
Appending installation info to C:\Perl\lib/perllocal.podC:\PAR-Packer-1.008>
- ppを使ってみるテスト。
本当に簡単に1行のサンプルプログラムを書いた。
test.plprint "PAR Test\n";これをppコマンドを使って下の様にexe化する。
pp [-o 出力ファイル] <ソースファイル>> pp -o test.exe test.plppの使い方は下記のサイトを見ると良い。
・[PAR] perlをexe化 :: ぼくはまちちゃん!
・pp – search.cpan.org
実行結果C:\PAR-Packer-1.008>pp -o test.exe test.pl
Set up gcc environment – 4.5.0
Set up gcc environment – 4.5.0
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Set up gcc environment – 4.5.0
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.C:\PAR-Packer-1.008>test
PAR TestC:\PAR-Packer-1.008>
- 少し複雑なプログラムを組むとエラーになる。
パッケージをうまくパックできないとエラーになるらしい。
下の様にかなり最初は手間取った。exe化は出来たがいざ実行しようとすると下の様にエラーが発生する。上のエラーでは「Cant’t call method "desiredCompressionMethod" on an undefined」というエラーが発生しているが、エラーメッセージに表示されている「C:\Perl\site\lib\PAR\Packer.pm」の1128行目付近を見てみると[Archive::Zip]モジュールが必要そうなことがわかるのでppmからインストールする事で解決した。
上のエラーは「Can’t locate Image/ExifTool/Writer.pl」と出ているので、「Image::ExifTool」パッケージがパックできなかったのだろうと参考にしたサイトの記事などを見て> pp -M Image::ExifTool -o mbc.exe mbc.pl
などとしてみたがダメだった。
>pp -M"C:\Perl\site\lib\Image\ExifTool\Writer.pl" -o mbc.exe mbc.pl
上の様にしてみた場合も、出来たexeファイルを実行するとエラーになる。どうやらフルパスで書くとその書いたフルパスでテンポラリディレクトリが作られるためにフォルダを作成できずにエラーになるようだ。(C:\とかはフォルダ名に出来ないので)、結局色々試した結果。モジュールが.plファイルの場合。以下の様にする事で正常に実行できるようにモジュールを取り込めるようになった。フルパスで指定しないのがミソ。
>pp -M "Image/ExifTool/Writer.pl" -o mbc.exe mbc.pl
PARの環境構築で参考にさせていただいたサイト
- たときどき真珠~深沢千尋のブログ~ ActivePerl 5.8.9でPARを使う
- [PAR] perlをexe化 :: ぼくはまちちゃん!
- nDiki: ActivePerl 5.8.9 build 825 + MinGW 5.1.4 + PAR で Perl スクリ… (2009-02-22)
pp使い方で参考にさせていただいたサイト
問題解決時に参考にさせていただいたサイト
- OpenCOBOL – フォーラム
- MinGW で CPAN モジュールをコンパイル – miau's blog?
- pp (Perl Packager) で requireの代わりになるもの – BIGLOBEなんでも相談室
必要なソフト類の入手先
- downloads.activestate.com/ActivePerl/releases/
- Browse and search CPAN : PAR::Packer[http://cpan.uwinnipeg.ca/module/PAR::Packer]
- MinGW – Minimalist GNU for Windows – Browse Files at SourceForge.net
nmakeリファレンス
g++オプション
追記:2010/12/07
書き忘れてた事があったので追記。
実際に作成したexeファイルを他のパソコンに持っていって実行したところ「libgcc_s_dw2-1.dll」が無いといって怒られた。
「libgcc_s_dw2-1.dll」は通常「C:\MinGW\bin」に格納されているexeファイルと一緒に渡して同じフォルダにおいて実行すれば怒られる事は無い。
「libgcc_s_dw2-1.dll」自体はネットで検索すればSourceForge.JPなどでいくらでもダウンロードできるので配布時にはダウンロード先のページを明記するか検索して入手するように書いておけばいいだろう。
未確認だがexeファイルと一緒にDLLを添付する場合GNUライセンスになると思われる。この場合ソースを公開することになるのではないかと思うがPARの場合perlのソースとモジュール関係をパックしただけなのでソースコードを公開してるのと同じなので問題ないと考えていいのかな?
【ウェブアプリ】シンプルな楽天アフィリエイトタグを簡単に作成できる『楽ツール』というサイトを立ち上げた。
楽天アフィリエイトでアフィリエイトタグを作成する画面は高機能ですが、タグを作成する場合前回使った設定が残ってないので毎回自分好みの設定にする必要があります。面倒なので単純はアフィリエイトタグを作成するサイトを作ってみました。そもそものコンプセンとは『AMA-TOOLBOX』と同じで、自分用にシンプルなアフィリエイトタグを作成するウェブアプリがほしいので作成。ついでに一般にも公開という感じです。
現在の処以下のような楽天のアフィリエイトタグが作成可能です。
【小画像 タイプ】
小画像タイプのアフィリエイトタグです、回り込み指定などを指定できるので、このように、画像に文章が回りこむようなアフィリエイトタグを作成する事が出来ます。 以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。
【中画像 タイプ】
これは中画像タイプのアフィリエイトタグです。こちらも回り込み指定ができます。これは文章が画像の右を回り込むようになっています。 以下はテストの文字列。
以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。以下はテストの文字列。
【テキストリンク:商品名 タイプ】
【テキストリンク:キャッチコピー+商品名 タイプ】
【テキストリンク:商品コード タイプ】
【テキストリンク:ショップリンク タイプ】
【小画像+詳細 タイプ】
【中画像+詳細 タイプ】
【中画像+商品名 タイプ】
サイトの説明
使い方は簡単です。
検索キーワードを入力して検索。
検索結果のリストからアフィリエイトタグを作成したい商品のところにある[この商品のアフィリエイトタグを作成する]をクリック。
進んだ先の画面では商品の情報をみたり。
作成するアフィリエイトタグの設定を変更したり。
作成したタグを取得したり。
リンク先を確認したりする事が出来ます。
良かったら使ってみてください。
※今後も機能拡張や不具合の修正を行っていく予定です。タグはあまり細かく設定をしていないのでアフィリエイトタグの表示デザインがサイトの設定にひきづられますがその代わりスタイルシートがわかればで自分のサイトに合わせたデザインにする事が出来ます。アフィリエイトタグはrakutoolというクラスの付いたdivタグに囲まれているのでスタイルシートを利用すばrakutoolクラスを利用して細かく設定する事が出来ます。現在リンクの色はタグを貼り付けた先のサイトの設定に従うようになっていますが、以下の様にスタイルシートを定義すれば、リンクの色を変更したりと色々デザインを細かく変更できます。
div.rakutool a:link { text-decoration:none; color:#000080; }
div.rakutool a:visited { text-decoration:none; color:#000080; }
div.rakutool a:active { text-decoration:underline; color:#000080; }
div.rakutool a:hover { text-decoration:underline; color:#1e78ff; }
【ドラマ】『サードウォッチ シーズン1』の感想
GyaO!で海外ドラマ『サードウォッチ シーズン1』の第1話から第7話まで視聴下感想。1999年からアメリカで放映されたドラマ。
サード・ウォッチ シーズン1【吹替版】|無料動画 GyaO![ギャオ]|ドラマ・アジア
ストーリー
ニューヨークの消防士・救命救急士・警官達の日々の活躍や苦悩を描いたドラマ。登場人物が多く次から次へと事件やトラブルが絶えない。
感想
十年以上前の作品だとは思わなかったが面白い。息をする暇も無いほど次から次へと事件やトラブルが発生するので見ていて退屈しない。登場人物が多くてカオス状態で最初は誰が誰だかよくわからない。日本人が外国人の顔を見分けるのが苦手なのも関係していると思う。特にキムの元夫のジミーとキムの相棒のボビーの見分けが最初つかなかった。良く見ればわかるけどどっちも割りと特徴の無い顔なんだよね。字幕なら人物名が確実にわかるんだけど吹き替え版なのでWikipediaで人物名を確認してたら人物欄でネタばれが目に入ってしまった。書いた奴を超恨むw。超ショックなネタばれ。DVDのパッケージの写真写りみんな悪いね。
最近またコメントスパムが増えてきた
最近またコメントスパムが増えてきた。アドレスをさらしておきます。スパムの送信元はodnと中国から、中国はまあ定番としてodnも相変わらずスパマー御用達の様です。つぶれればいいのにw。
とりあえず、odnは1週間ほど前にも同一のアドレスからスパムしてきたので.htaccessにブロックするように下の定義を追加した。
deny from 219.66.21.152 #JP HDOfx-05p5-152.ppp11.odn.ad.jp
deny from 61.116.24.236 #JP HDOfx-06p1-236.ppp11.odn.ad.jp
deny from 220.160.0.0/11 #CN 66.103.178.220.broad.static.hf.ah.cndata.com
下はもっと具体的な.htaccessの例。
.htaccess
order allow,deny
allow from all
deny from 219.66.21.152 #JP HDOfx-05p5-152.ppp11.odn.ad.jp
deny from 61.116.24.236 #JP HDOfx-06p1-236.ppp11.odn.ad.jp
deny from 220.160.0.0/11 #CN 66.103.178.220.broad.static.hf.ah.cndata.com
【映画】『タワーリング・インフェルノ』の感想【おすすめ】
GyaO!で映画『タワーリング・インフェルノ』を視聴した感想。1974年のアメリカ映画。パニック超大作。主演はポール・ニューマンとスティーブ・マックイーンの二大スター共演。
タワーリング・インフェルノ|無料動画 GyaO![ギャオ]|映画
ストーリー
建築士のダグ・ロバーツ(ポール・ニューマン)は自身が設計した120階建ての超高層ビル、グラスタワーのお披露目パーティーの為休暇から戻ってきた。しかし、そのビルは設計どうりに造られておらず、電気の配線がショートしてボヤが発生する。ダグはパーティー会場の社長に客の避難を進言するが社長は村山元総理並みに事態を軽視してダグの言う事を聞かず大惨事へと発展する。ビルの保安部のからの要請で消防隊が急行するが高層建築物火災は消火が困難で事態は悪化の一途をたどる。ダグと消防隊長のマイク(スティーブ・マックイーン)は人命救助に奮闘する。
感想
面白かった。オススメというかパニックムービーの超大作で名作なので知らない方が珍しい作品。超久しぶりに見たけど全体のプロットは覚えているけど細かい部分は完全に忘れていたので楽しめた。ハラハラドキドキ感がすばらしい作品。ちゃんと人間のクズ役もいてクズッぷりも見事で素敵。そしてさまざまな人間模様ありーのといった感じ。よくあるパターンではあるが初めの方のシーンでダグが事務所に来たときに部下たちがどっと寄ってきて「ここはどうしますか?」「換気の調子が悪いのですが?」とか色々聞かれながら的確にダグが回答していくところとかダグを頼られる出来る人に見せる演出もいい感じ。そういうの好き。そういうわけで忘れた頃にまた見たくなる作品という事で超おすすめです。
評価: