文字化けでハマったら

日本語のエンコーディングがからむプログラムを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

参考: bundle config | Bundler日本語ドキュメント | Ruby STUDIO

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

自分のバージョンはこれ。

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に任せています。

type-windows.xmlについて

無事インストールが完了してpngの生成ができたので、元記事にあった type-windows.xmlによる type-ghostscript.xmlの置き換えは行っていません。
ghostscriptやPDFの扱いに問題が出るのかな?

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するなら

asin:B00BVXIHCS

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の設定

Windows 8 上にPerl環境を作成したときのメモ。

Perlのインストール

Windows用のPerlとしては、ActivePerlとStrawberryPerlがある。
今回は、gcc等のコンパイラを含み、CPANのインストールが楽だというStrawberryPerlを利用する。

http://strawberryperl.com/

インストーラの実行については割愛。

インストーラが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のダブルクオーテーションの前の^記号は、取り除かなくてはいけない。

この設定を行ったら、新しいコマンドプロンプトを立ち上げて、以降の設定はそこで行う。

cpanmを使ったインストール

cpanmで、例えばConfig::Pitをインストールする場合、コマンドは「
cpanm Config::Pit」となるが、Windowsの場合、いくつかの依存モジュールのインストールに失敗するため、--forceオプションを付加する。

>cpanm Config::Pit --force

同様に、Googleスプレッドシートのモジュールが必要ならば、 Net::Google::Spreadsheets をインストールすればよい。
インストールプロセスの詳細を見る場合には、--verboseオプションを利用できる。

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('');