ピンヘッダのレイアウトツールに 幅狭の DIP IC のラベルを作る機能を足した。印刷して貼るだけで配線ミスが減らせるので便利

特に DIP IC の場合、文字を入れるスペースが殆どないので、自分に必要な要素だけ厳選して作る必要があって、簡単に別バージョンを作れたほうがいいと思う。ブラウザ上でやって実寸 PDF すぐ印刷できるのはかなり便利だと思う。

  1. トップ
  2. tech
  3. IC のピン配置ラベルを作る

Path::Class と Path::Tiny はほぼ同じことができるモジュールで、どっちを使っても特に変わりはないんですが「やっぱこっち〜」って感じで変えるとハマるような差異があり、今回ハマりましたのでご紹介します。

Path::Class->tempdir, Path::Tiny->tempdir

いずれのモジュールにも、tempdir というメソッドがあり、これはいずれも全く同じ引数をとり、File::Temp を使ってテンポラリディレクトリを掘ってパスオブジェクトを返すだけのメソッドです。

しかし内部で使っている File::Temp のメソッドが少々違うため、CLEANUP まわりの挙動が以下のように異ります。

  • Path::Class は File::Temp::tempdir() を使っている
    • CLEANUP => 0 がデフォルト (デフォルトで削除されない)
    • CLEANUP => 1 を指定した場合 Perl プロセス終了時にファイルが削除される
  • Path::Tiny は File::Temp->newdir() を使っている
    • CLEANUP => 1 がデフォルト (デフォルトで削除される)
    • 返ってきたオブジェクトが DESTROY されるときにファイルが削除される

File::Temp の挙動

  • File::Temp::tempdir() は文字列を返す
  • File::Temp->newdir() はオブジェクトを返す
    • 内部的には File::Temp::tempdir() を呼んでる
    • DESTROY が設定されている

ハマる例

普通ハマらないんですが、アホなことしてるとハマります。

  • Path::Class->tempdir を使っていて、Path::Tiny に変えた場合、その後の処理でファイルが存在していない場合がある
  • Path::Tiny->tempdir を使っていて、Path::Class に変えた場合、ファイルが削除されない場合がある
  1. トップ
  2. tech
  3. File::Temp, Path::Class, Path::Tiny

印刷してピンヘッダにハメれば、どれがどのピンだかわかりやすくなるというツールを作った。PDF (A4) を出力するので、あとは印刷してカッターで切りとれば 100mil のピンヘッダにぴったりあう。

一行目の # からはじまる行がタイトルになり、あとは適当にそれっぽくピン番号と名前のペアを書いていく。名前の語尾に # をつけると反転する。

ほんとはフォントも変えれるようにしたかったんだけど、ブラウザ上で任意のフォントを確実に指定する方法がなくてあきらめた。

作るまで

いろいろな方法があるが、結局 PDF を JS で生成している。jsPDF というライブラリをつかっているので比較的楽に書けた。

他に検討した方法は以下の通り

HTML/CSS

できるならこれが一番良い方法だと思ったが、いまいちクロスブラウザでうまくいくか微妙なのでやめた。table を印刷しようとするとプリントするときだけ width/height が効かなくなったり、つらい。

Canvas

実寸で印刷しようと思うと結局めんどうなのでやめた。

SVG

ハマりそうなのでやめた。

  1. トップ
  2. tech
  3. ピンヘッダのレイアウトを実寸で印刷するツール