キーボード修理

イメージ
前回 調子が悪くなったと書きましたが、部品が手配できて時間が取れたので直しました。 茶軸のスイッチを購入 Cherryの茶軸は 10個で1,399- ということで購入。 本当は1個で充分なんだけど、仕方なく残りは予備部品として保管。 作業手順 キーボードの裏側ネジを3箇所外します。 左右と中央の丸シールの下。 左右はパッドを貼っているので、少しめくって外します。 (あとで綺麗に戻るので心配なしです) ケーブルが出ている方は、スッと外れ、手前(下側)は、内部に爪が有るので、ピックやカード、マイナスドライバなどで少し隙間を開けるようにして広げれば外れます。 自分は親指の爪で空きました。 今回は「E」が調子悪いので、該当のピン2箇所をハンダ吸いで綺麗に取り除いて、裏側から引き抜いて完了。 基板にしっかりとどのキーかがプリントされているので分かりやすいですねぇ 入手した新品の茶軸を差し込んでハンダ付けします。 この時点で動作確認が可能になるので、直したキーとその周辺が正しく入力できるのをチェック。 問題なく、無事に動作しました。 最後にカバーを取り付けて完了! 残ったのは9個の茶軸…。 今回の費用 Cherryの茶軸10個セット :1,399- キーキャップ引き抜き工具 : 475-  ちなみに10個セットには、簡易引き抜きがついてきますが、ちゃんとしたもののほうが楽に作業できます。(昔買ったのに、どこかに行ってしまったので再購入)  ということで、1900円ほどで完治しました。  手間賃考えると買ったほうが安いかも(笑)

Perl ScriptのEXE化で苦戦

exeの生成が必要

以前(随分前だけど)やったことが、あったので楽勝と思ったら、意外なところで躓いたのでちゃんと記録しておく。

基本的にスクリプト言語であるPerlのコードはテキストファイル。
Perlの実行環境さえあれば、ほぼ動く。
 LinuxやMacなら最初からperlが入っているので、何も考えることはない。
じゃ、windowsのように実行環境がない場合はどうするかというと、

  1. Perlを動かせるようにインストールする(ActivePerlで簡単に入る)
  2. exeファイルにして、実行する。(ファイルが巨大になる)
  3. 諦める
と、これくらいしか選択肢がない。

今回は、作成したスクリプトを、Perl実行環境のない端末で何台も動かすことになりそう。
でもって、それぞれの端末にPerlをインストールして、pmなどのライブラリを揃えてというのが、メンテナンス上大変になりそう。

となると、2.のexe化を検討するしかない。

環境準備1

まずは、新しいVMを用意して、ActivePerlのインストールから始める。
ActiveStateに行くと、ActivePerl-5.20.2.2002-MSWin32-x86-64int-299195.msi が最新らしい。随分とバージョンが上がってるなぁ…。

早速インストール→数分で完了。
コマンドプロンプトから、
cpan install PAR::Packer
で、exe化に必要なモジュールをインストール。
まっさらな状態からのインストールなので、若干時間がかかるけれど、無事終了…。
あれ?無事終了しない。Error吐いてる。


main.c: In function 'main':
main.c:121:23: warning: assignment discards 'const' qualifier from pointer target type [enabled by default]
windres -i winres/pp.rc -o ppresource.coff --input-format=rc --output-format=coff --target=pe-i386
'windres' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
dmake.exe:  Error code 129, while making 'ppresource.coff'
dmake.exe:  Error code 255, while making 'subdirs'
  RSCHUPP/PAR-Packer-1.026.tar.gz
  C:\Perl\site\bin\dmake.exe -- NOT OK


おや? 必要なコマンド類も入れてくれるはずなのに、windresが無いという。
面倒なので、PPM(perl package manager)で入れてみる。確かwindowsのはGUIになっていたはず。

環境準備2

PPMを起動し、PAR::Packerを入れると、すんなり終了。
初めからこうすればよかった。

作業ディレクトリで、サンプルを変換してみる。
hello.plを作成。(まぁ予想通りのプログラムですww)
pp -o hello.exe hello.pl
これでサクッと…。
いかない。ちゅうかエラー吐いているし。
Perl lib version (5.20.2) doesn't match executable 'perl.exe' version (5.20.1) at C:/Perl/lib/Config.pm line 62.
はぁ?
インストールしたPerlは、5.20.2なのに、実行用perlは5.20.1って…。
パッキング用は別に用意するんだけど、バージョンの不一致が起きているのか?
と解釈して、Config.pmを書き換えてみることに。

 62行目あたりのバージョンをチェックしている部分を 5.20.1に変更してみる。

すると、さっきとはエラーを吐くタイミングが少し変わったが、
Perl lib version (5.20.2) doesn't match executable 'perl.exe' version (5.20.2) at C:/Perl/lib/Config.pm line 62.
と、ますます訳の分からない表示に。

じゃ、古いActivePerlを入れれば動くんじゃね?と思って他のVersionを落としてくる。
5.22.0.2200
5.18.4.1805
が、提供されている。5.20.1は無いし…。試しに「5.18.4.1805」でやってみるが当然動作せず。
 ActivePerlを何度も入れなおす羽目に。

調べてみると、ActiveStatesのCommunity Forumに全く同じ書き込みがあった。
PAR::Packer could not pack script: version mismatch between perl lib (5.20.2) and perl.exe (5.20.1)
そこを読んでいくと、最後に

grahams
ActiveState Staff
 Mon, 2015-06-22 12:00
This appears to be an upstream bug in Par::Packer.
Modules should not need to be recompiled, and should be compatible with newer releases of the same major revision of Perl. It's not clear why Par::Packer complains here. The maintainer should have a better idea.
って書いてあるやん。
6月の段階で見つかっているのに、まだ治っていないのかよ…。
次のリリースにって言われても、今使いたいんだし。

別の方法を探ることにする。

環境準備3

Googleでしつこく探してみると、同じような状況の記録がありました。
Perlスクリプトの汎用化+GUI化+exe化=アプリ誕生!(3)
あぁ同じような手順を踏んでいます。

なんと、環境準備1の方法で無理やりクリアしたらしい。
といっても、ものすごく簡単な方法だった。
windresが、異なるフォルダにあるらしいので、これをコピーしてやれと。
探してみると C:\Perl\site\lib\auto\MinGW\bin に確かにwindres.exeがありました。

そこで、こいつをPATHの通っているC:\Perl\site\bin にコピーする。
最後に、再度cpan installをかけてみる。
Appending installation info to C:\Perl\lib/perllocal.pod
  RSCHUPP/PAR-Packer-1.026.tar.gz
  C:\Perl\site\bin\dmake.exe install  -- OK
やった!とりあえずエラー無しで導入まで完了した。

実際に動かしてみる

サンプル用のスクリプトを、exe化してみる。その時の結果が以下の通り。
18バイトだったスクリプトは、PERL本体とその他必要なライブラリ等を組み込んで約3MB程度になっています。

 まあ、今どきの環境であれば、たかだか「Hello」を表示するのに3MB程度使っても
問題はないよね?


一応、無事にexeにすることができるようになりました。

ふぅ、これで終わりじゃ無いんだよね。
実際のスクリプトを作成しないといけないわけで、やっとスタートですゎ。

コメント

このブログの人気の投稿

WPS Officeで日本語入力ができない

VirtualBoxでUSBから起動

Ubuntu24.04 でGUIが死んだ