文字化けでハマったら
日本語のエンコーディングがからむプログラムをperlで書かないというのが一番の対策ではないかと思うが、そうは行かないときはこれを読む。
Encodeモジュール - 日本語などのマルチバイト文字列を適切に処理する - Perl入門ゼミ
にひりずむ::しんぷる - Devel::Peek
WindowsでRMagickをbundle install
基本的なオプションの書き方はgemのときと同じですが、bundle install コマンドでは--with-opt-libなりincludeなりを指定することができません。
bundle configコマンドを使って、パッケージ単位の個別のビルド設定を保存します。
set IMPATH="c:\Program Files\ImageMagick-6.9.1-Q16" bundle config build.rmagick --with-opt-include=\"%IMPATH%\include\" --with-opt-lib=\"%IMPATH%\" bundle install --path=vendor/bundle
WindowsでRMagickをインストール
RMagick を Windows にインストールする方法 - 君の瞳はまるでルビー - Ruby 関連まとめサイト を参考に、chocolateyを使ってなるべく簡単にします。
Chocolateyのインストール
管理者モードのコマンドプロンプトから、以下のコマンドを実行します。
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
念のため、本家サイトでコマンドを確認した方がいいでしょう。
Rubyとdevkitのインストール
同じく管理者モードのコマンドプロンプトから、以下のコマンドを実行します。
cinst -y ruby ruby2.devkit
devkitの初期化もやってくれます。
自分の手元のバージョンは以下のとおり。(Rubyのバージョンが若干古い)
- ruby 2.1.6
- ruby2.devkit 4.7.2.2013022402
ImageMagickのインストール
これも管理者モードのコマンドプロンプトからcinstを実行しますが、C/C++のヘッダをインストールするため、オプションをつけます。
> cinst -y imagemagick -PackageParameters InstallDevelopmentHeaders=true
自分のバージョンはこれ。
- imagemagick 6.9.1.10
- imagemagick.app 6.9.1.10
RMagickのインストール
元記事の環境変数設定をしない代わりに、--with-opt-includeオプションと--with-opt-libオプションをつけます。
オプションのパスを、\"でくるむのがミソです。
set IMPATH="c:\Program Files\ImageMagick-6.9.1-Q16" gem i rmagick -- --with-opt-include=\"%IMPATH%\include\" --with-opt-lib=\"%IMPATH%\"
IMPATHは、cinstしたImageMagickのバージョンによって変えてください。
無事にインストールできましたか?
手元バージョンはこれ。
- rmagick (2.15.3)
gemがビルドに失敗する原因が、例によってProgram Filesの空白のせいなので、ImageMagickをcドライブのルート直下に置くなどすればもっと楽かもしれませんが、なるべくchocolateyに任せています。
Google Apps Script にまぶした Sugar.js は苦い
甘いJavaScriptプログラミングを求めて GAS に Sugar.js の導入を目論んだわけです。
サーバサイドでは、案外難なく使えるものです。
スクリプトファイルプロジェクト Sugar を作成し、スクリプトファイルSugar.gsを追加、そこにSugar.js をコピペして版を作成すればライブラリが完成。
あとはプログラム側で Sugarのプロジェクトキーをライブラリに登録するだけで動いてしまう。アマイ!
ところがクライアントサイドではそうもいかなかった。
さっきのSugar プロジェクトに、いつものようにHTMLファイルとして Sugar.js.html を作成して、scriptタグの間にSugar.js をコピペ、コード.gs に読み込み用のコードを追加します。
function include(output) { output.append( HtmlService.createHtmlOutputFromFile('sugar.js').getContent()); }
しかし、テストプログラムを実行すると無常のTypeErrorで動かない。
いわく、
TypeError: Cannot define property: SugarMethods, object is not extensible.
これはつまり、cajaではねられてしまうのですね。うーん、苦い。
Underscore.js ならばすんなり使えます。
G Suite Developers Blog: Using open-source libraries in Apps Script
激安9インチカーモニターでRaspiするなら
6500円! 送料1500円と電源として1300円くらいのACアダプタ買ったんで、結局9千円ちょっとかかりましたが、それでも安いもんです。
普通につなぐとVGAの解像度を800x480に引き伸ばすので表示がキタナイ。
そこで、config.txtの修正で解像度を指定してやります。
# uncomment to force a specific HDMI mode (this will force VGA) hdmi_cvt 800 480 60 6 0 0 0 hdmi_group=2 hdmi_mode=87
若干画面小さいですが、ドットクッキリヤッター!
ついでにここも修正すると、音声が出ます。
# uncomment to force a HDMI mode rather than DVI. This can make audio work in # DMT (computer monitor) modes hdmi_drive=2
StrawberryPerlとcpanmの設定
Perlのインストール
Windows用のPerlとしては、ActivePerlとStrawberryPerlがある。
今回は、gcc等のコンパイラを含み、CPANのインストールが楽だというStrawberryPerlを利用する。
インストーラの実行については割愛。
インストーラがStrawberryPerlのPATHも追加するが、SourceTreeが先にインストールされていた場合、うまくStrawberryPerlが呼び出せないことがある。
環境変数PATHを手動で変更して、C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin を先頭にすることで解決できる(はず……SourceTreeがPerlを呼ぶときに、混乱が起こるかもしれない)。
cpanmをローカルで使う
StrawberryPerlにはすでにcpanmとlocal::libが組み込まれている。
そこで、local::libを使ってモジュールをユーザーローカルの環境にインストールするように設定する。
>cpanm local::lib local::lib is up to date. (2.000004)
perl -Mlocal::lib を実行すると、Windowsに設定するべき環境変数のリストを見られる。
>perl -Mlocal::lib @if not "%PATH%"=="" set PATH=C:\Users\thegoodbadugly\perl5\bin;%PATH% @if "%PATH%"=="" @set PATH=C:\Users\thegoodbadugly\perl5\bin @if not "%PERL5LIB%"=="" set PERL5LIB=C:\Users\thegoodbadugly\perl5\lib\perl5;%PERL5LIB% @if "%PERL5LIB%"=="" @set PERL5LIB=C:\Users\thegoodbadugly\perl5\lib\perl5 @if not "%PERL_LOCAL_LIB_ROOT%"=="" set PERL_LOCAL_LIB_ROOT=C:\Users\thegoodbadugly\perl5;%PERL_LOCAL_LIB_ROOT% @if "%PERL_LOCAL_LIB_ROOT%"=="" @set PERL_LOCAL_LIB_ROOT=C:\Users\thegoodbadugly\perl5 @set PERL_MB_OPT=--install_base ^"C:\\Users\\thegoodbadugly\\perl5^" @set PERL_MM_OPT=INSTALL_BASE=C:\\\\Users\\\\thegoodbadugly\\\\perl5
(注意!)thegoodbaduglyの部分はユーザー名になるので、ここからコピペしてはいけない。
これをリダイレクトすればバッチファイルとして使えそうだが、Windowsではコントロールパネルのシステムの詳細からひとつひとつ設定することになる。
変数=値とすると、以下の四つの環境変数の設定が必要になる。
PERL5LIB=C:\Users\thegoodbadugly\perl5\lib\perl5 PERL_LOCAL_LIB_ROOT=C:\Users\thegoodbadugly\perl5 PERL_MB_OPT=--install_base "C:\\Users\\thegoodbadugly\\perl5" PERL_MM_OPT=INSTALL_BASE=C:\\\\Users\\\\thegoodbadugly\\\\perl5
(もう一度注意!)thegoodbaduglyの部分はユーザー名になるので、ここからコピペしてはいけない。
(もう一つ注意!)PERL_MB_OPTのダブルクオーテーションの前の^記号は、取り除かなくてはいけない。
この設定を行ったら、新しいコマンドプロンプトを立ち上げて、以降の設定はそこで行う。
checkboxの値を取るには
フォームに同じ名前(name)のチェックボックスを並べて、値を連結したい時がある。
$('[name="samename"]:checked')
とすると、チェックのついたチェックボックスを取得できるが、これは配列であるため val() や text() などの関数は持っていない。
そこでまず、mapを回して、各チェックボックスからvalueプロパティを引く。
$('[name="samename"]:checked').get().map( function(checkbox) { return checkbox.value; } );
map の前に get() をはさんで、jQueryの配列をJavaScript標準のArrayに変換している。
この結果を連結すれば完成。
var 連結チェック値 = $('[name="samename"]:checked').get().map( function(checkbox) { return checkbox.value; } ).join('');