node-canvas で scale したとき textBaseline が狂うのをなおした
関連エントリー
- NMEA ログから衛星のスカイビューを生成する 既にある NMEA のログから、どの衛星が強く受信できているかをプロットしてみる。 ファイルを指定して png を書き出すコードを node...
- メモ書き:KiCAD + pcb2gcode で pcbmilling とりあえずメモだけ Eagle の場合は pcb-gcode を使えばよかったが、これは Eagle の ULP で書かれているので KiC...
- 2D 描画でも WebGL を使うべきか? スペクトラムウォーターフォール最速決定戦 上のように、スペクトラムのウォーターフォール表示ではよく下に1行追記して全体を上にスクロールさせていくみたいな見せかたをするが、全体の再描画...
- 歪みゲージ(ロードセル)と HX711 を使って重量計測する (Arduino) Aliexpress で歪みゲージ (ロードセル 1kg) と、HX711 のモジュールを買ったので試してみました。 歪みゲージのつかいかた...
- WebAudio ComplexFirFilterNode AudioWorklet ComplexAnalyserNode (WebAudio) を作った (IQ信号のFFT) | tech - 氾濫原 に続き、WebAss...
KiCAD の回路図ファイルを CUI で SVG に変換したり、そのままブラウザで見たりする kicad-utils
デモとレポジトリ
回路図ビューワ。開いてすぐ Load from url すると、github で公開されている回路図を読みこんで表示するようになっている。
CUI
npx で実行できるようにしてみた。以下のようにすると同名の .svg ファイルを生成する。
npx -p kicad-utils sch2svg path/to/file.sch
経緯
github などに KiCAD の回路図ファイルをアップロードしても実際に閲覧するためにはダウンロードして KiCAD で開くという作業が必要で、これがなかなか面倒くさい。KiCAD は同時に1つしかプロジェクトを開けないので、他の作業をしてるときに別の回路図を開く気が起きない。というかそもそもダウンロードが面倒くさい。
たとえば回路図を複数人で開発するなり、レビューするなりしようと思うとかなり面倒なコンテキストスイッチが発生する。特に github のレビューフローに慣れている人間は github 上で見れないなら見ないので良くない。
他にも理由はあるけどおおむね以上のようなことが主因で、とりあえず CUI で回路図を png や SVG に変換できるツールが欲しいと思った。
実装言語としても検討した結果、使い慣れており応用例が広いブラウザ上で動くことを念頭に TypeScript とした。
実装
最初は KiCAD 自体のファイルを再利用 (emscriptenなど) することを考えたが、全体的に wxWidgets 依存があって無闇にハマりそうと感じた。
その過程で実装を読むと移植してもそれほど工数がかからないのではないかという感じがしたため、TypeScript でフル実装を書く方針とした。
まずコンポーネントライブラリ (.lib) ファイルのパーサーと canvas API を利用するプロッター(レンダラー) を書いた。
次の回路図 (.sch) ファイルのパーサーと対応するプロッターを書いた。この途中で SVG で出力するプロッター実装も書いた。プロッターレイヤーで、canvas 出力と SVG 出力を抽象化していて、これは KiCAD の実装と同様。
というか、できるだけミニマルな実装を書こうと思ったが、そうすると対応が不完全になりがちなのと頭を使いすぎるので、本体変更に比較的追従しやすいようにコードがほぼ1:1対応するような移植を行なった。とはいえもともと C++ なので TS であまりにも不自然なAPIは変更してる。
所感
完成度的にはまだ 70% ぐらい。SheetPin など全く実装してないものもある。色もない。とりあえず見るという目的にはある程度使えるかなというところ。
Chrome 拡張化して github 上に直接表示できるようにしたい。
元ファイルが行指向のフォーマットのため、diff をとって変更したコンポーネントやワイヤに色をつけるみたいなことも頑張ればできそう。
その他
いろいろ鑑みて webpack を初めて導入してみたが設定が辛かった。
関連エントリー
- KiCAD の回路図ファイルを見るツール (続き) KiCAD の回路図ファイルを CUI で SVG に変換したり、そのままブラウザで見たりする kicad-utils | tech - 氾...
- KiCAD で複数ボードプロジェクトを運用する 背景 KiCAD は1つのプロジェクトにつき1つのボードしか作れない。小さな基板であれば1つの基板にVカットを入れるでいいが、どうしても複数...
- Inkscape で作図したファイルを KiCAD の pcbnew で読みこむ Inkscape 側で Save a Copy... の画面で Desktop Cutting Plotter (AutoCAD DXF R...
- SVGフォントのグリフを個別のSVG画像に変換する [tech] JavaScript の必要ないソーシャルボタン | Fri, Apr 15. 2016 - 氾濫原 これを作るとき、最初のう...
- JS+SVGで液晶画面風の表示をつくる 液晶風の画面は決まった形をオン・オフするだけなので、canvas にコードで描くのは大変なだけで無駄が多い。かといってセグメントを1つ1つ画...
KiCAD の回路図ファイルを見るツール (続き)
KiCAD の回路図ファイルを CUI で SVG に変換したり、そのままブラウザで見たりする kicad-utils | tech - 氾濫原 の続き。KiCAD の回路図ファイルをブラウザから直接見れるようにしている。
だいぶよくなってきた。完成度85%ぐらいかな?
- 色がついた
- 文字レンダリングを KiCAD 同様にストロークフォントを自力描画するように
- これをやらないと SVG などでフォントメトリクスを正確に知る方法がないため文字位置がどうしてもずれてしまう
- ウェブのビューワーでクエリパラメータを受けるようになった
- ブックマークレット経由で即座にプレビューできるようになった
ブックマークレット
index ページから設定できる。
Open with Schematic Viewer をブックマークに追加した状態で github などにある回路図ファイルが入ったディレクトリ (例: KiwiSDR) で実行するとビューワーでひらける。
未解決の問題
回路図ファイルで、コンポーネントの名前や値を表示するときにずれることがある。
この問題はいまいちよくわからない。元のコードを読んでもかなりややこしいことをしてて、何がしたいコードなのかわからない。.sch を編集するときは、.lib 内で定義したラベル類は再配置可能なので、それのためにコードが入ってるのだが、どこ基準で再配置されているのかよくわからない。
今のところの理解ではコンポーネントの中心とラベルの中心が相対的になるように配置する、だと思ってるんだけど、そういうつもりの実装を書いてもうまくいかない。
普通にボックス計算が間違えていたので修正したらなおったっぽい
.lib ファイルが指定されてないときの挙動
- ...-cache.lib には使っているコンポーネント類がすべてコピーされていると期待しているが、そうではないことがある。
- ...-cache.lib を配布してないケースがある (KiCAD のヘルプではこれは配布しなくていいことになっている)
最初の問題はよくわからない。あんまり発生しないけどちゃんと調べてない。-cache.lib の生成タイミングがそもそもわかってない。
.lib ファイルを同梱してない .sch の場合、基本的には忠実に再現することはできない。デフォルトで https://github.com/KiCad/kicad-library の最新を読むようにする、とかはできそうだけど、互換性が保たれている保証はない気がする。
...-cache.lib は基本的には配布物に含めたほうがいいと思うんだけど、どうなんだろう。
関連エントリー
- KiCAD の回路図ファイルを CUI で SVG に変換したり、そのままブラウザで見たりする kicad-utils デモとレポジトリ 回路図ビューワ。開いてすぐ Load from url すると、github で公開されている回路図を読みこんで表示するよ...
- KiCAD で already running, Continue?. と言われ続ける場合 複数起動しているわけでもないのにこれを言われる場合、ロックファイルが残っている。 rm -rf ~/Library/Caches/kicad...
- KiCAD で複数ボードプロジェクトを運用する 背景 KiCAD は1つのプロジェクトにつき1つのボードしか作れない。小さな基板であれば1つの基板にVカットを入れるでいいが、どうしても複数...
- Inkscape で作図したファイルを KiCAD の pcbnew で読みこむ Inkscape 側で Save a Copy... の画面で Desktop Cutting Plotter (AutoCAD DXF R...
- h2o の casper を一時的に無効にする h2o の casper (cache-aware server-push) を有効にしていると、force reload したときでも p...
ブルーベリージャム
ブルーベリージャム。生のブルーベリー1kg、上白糖600g レモン汁70ml、10分ぐらい煮た。
昨年も実は作ったんだけど、レモン汁を入れなかったせいか固まらなかった。今年は砂糖多めにしてレモン入れたからか固まった模様。
特に砂糖の種類に気をかけなかったけど、上白糖だとちょっと甘さがしつこい気がする。
関連エントリー
- 歪みゲージ(ロードセル)と HX711 を使って重量計測する (Arduino) Aliexpress で歪みゲージ (ロードセル 1kg) と、HX711 のモジュールを買ったので試してみました。 歪みゲージのつかいかた...
- 保育園に行ったら保育園が開いてなかった 二重の意味で(出勤も保育園も)はぁ嫌だなあと思いながら保育園に行ったら、保育園が開いていなかった。意味がわからなかったけどとにかく開いていな...
- アリとの戦い 今年もやってきたアリの侵入との戦い。ひとまず一定の効果にいたったので記す。 穴という穴を塞ぐ 結局、アリが侵入する場所をつきとめて対策するの...
- オープンラックはもう買わない。棚柱がベスト 2x4 アジャスタ(突っ張り) + 棚柱が最高 棚柱 チャンネルサポートとかガチャ柱とかいうもの。店舗やオフィスでよく使われている。 2x4...
- KDDI MUSEUM むちゃくちゃ普通のオフィスビルの中にあるので入るのに緊張する。 アートギャラリーとミュージアムがある。それぞれ別途予約必要だけど、入館料(3...
✖
そういえばbuilderscon tokyo 2017に参加してました。今回はスピーカーやらず (応募してない)、個人スポンサーだけです。(応募しなかったのは日記を読みかえしても特に話せる内容がなかったからで、特に他の事情はない)
ただ2日目の午前中に調子悪くなって帰ってしまった。そして14時から19時ぐらいまで寝てたので、起きたらベストスピーカーとか決まってた感じだった。
やっぱ3Dプリンタで作る1次元セル・オートマトン、階差機関、アナログコンピュータ - builderscon tokyo 2017が面白かったかな〜。階差機関ってものをそもそも知らなかったのと、温故知新を流行り(3Dプリンタ)に絡ませるみたいな感じが良かった。
あと非公開だった前夜祭が面白かった。撤退技術ということで、トラブルとかうまくいかなかったという話が中心で、しかも実働サービスでのことが主軸だったけど、こういうのは語り口を間違えばなかなかやっかいなはずだと思うので、登壇するのは大変勇気がいることだなあと思った。
あとは会場でコード書くと捗るのでずっとコード書いてた。
関連エントリー
- builderscon tokyo 2016 で「 Bluetooth キーボードの作りかた」を喋りました ありがとうございました。 聞いたトークで印象に残ったもの OSS は Windows で動いてこそ楽しい - builderscon tok...
- builderscon tokyo 2018 前夜祭「自作 BLE キーボードのその後」で発表しました ↑ に一応資料をあげときます。めっちゃ酔っぱらってこのエントリを書いております。 mbed 環境は Arduino の次あるいはプログラマな...
- builderscon tokyo 2016 でしゃべります 16:40〜 自作キーボードの話を1時間ぐらいする予定です。なんか1日の最後なのでゆるめでやりたいという気持ちはあります。 おおむね、事前の...
- YAPC::Asia Tokyo 2015 - 「WebAudio で入門する 信号処理」「(LT) コミュ力あげてこ」 WebAudio で入門する 信号処理 メインセッションは、いつも20分枠に応募して、かなり説明をはしょりまくってもギリギリ、という感じだっ...
- Maker Faire Tokyo 2018 いった なんとなく発見があったらいいなぁぐらいで土曜日に行ってきた。 発見と面白かったのは以下らへん SONY が思いのほか SPRESENSE を...
大内宿
福島の会津のほうにある大内宿。会津若松と日光を繋ぐ街道の宿場だったところ。古い街並みが残っていて珍しい (一旦近代化でトタン屋根になったりしたようだが復元したらしい)
5時ぐらいに着いたのでお店などは閉まっていた。奥の高台から街全体が見渡せる。神社がちょっと離れたところにあったが時間がないので行けなかった。
関連エントリー
- 安房国の一宮めぐり 千葉県館山付近。館山駅から路線バスで移動する必要がある。館山駅まではバスタ新宿から高速バスで移動した。アクアライン経由なのでこれが最速ルート...
- 江戸東京たてもの園 / 小金井市文化財センター / 東京農工大学 科学博物館 小金井公園の中にある。この公園自体がかなり良い環境。ここで昼から酒のんだら良すぎてアル中になりそう。 高橋是清邸 中に入れる (上がれる) ...
- ✖ 博多に行く機会があったので、合間を縫って周辺神社に行ってきました。それほど時間が余ると思っていなかったので、まともなカメラを持っていかず、全...
- 神宮参り 伊勢参りしてきた。 熱田神宮 伊勢にいく前に名古屋の熱田神宮へ。熱田神宮の御神体は草薙剣 (天叢雲剣)とされていて、これはヤマタノオロチの尻...
塔のへつり
塔のような形の変な岩がいくつも連なっている地形のところ。一部に吊り橋が渡してある。水面近くの窪みの連なりは岩をめぐるために人力で掘ったものらしいが、吊り橋付近以外は現在は歩けないようになっていた。
というか歩けるところも柵とかはなくて、すぐ下が川なのでかなり怖い。奥のほうに小さいお堂がある。
関連エントリー
- 子供用の椅子の買いかえ Stokke ストッケ ベビーチェア ハイチェア 本体 トリップトラップ 食卓 赤ちゃん 椅子 ウォールナットブラウン cho45 Stok...
- 優生学はどう否定されるか、多様性はなぜ必要か 行動遺伝学に関する本を読んでから自分の中でちょっとモヤモヤした点を整理した。 優生学ってのは現代だとタブーとして扱われている。しかしこれは部...
- 安房国の一宮めぐり 千葉県館山付近。館山駅から路線バスで移動する必要がある。館山駅まではバスタ新宿から高速バスで移動した。アクアライン経由なのでこれが最速ルート...
- 台風19号 1Fに住んでいて、ハザードマップでは最悪2mの浸水、ということは事前に調べてあった。土曜日10時ごろには既に、浸水地域に対してエリアメールで...
- アンテナアナライザーをケースに収めた 簡単かつ安く高精度なアンテナアナライザーを自作したい | tech - 氾濫原 簡単かつ安く高精度なアンテナアナライザーを自作したい (2)...
minimist でサブコマンド付きコマンドを実装する
node.js 用のコマンドラインパーサである minimist は必要最低限かつわかりやすくていいですね。
しかもサブコマンド用のオプションも用意されているので、ある程度複雑でも耐えられます。
以下がサブコマンドを実装したもののサンプルコードです。ポイントは親コマンド側では stopEarly を指定して、サブコマンド用の引数を解釈させないところです。
そのうえであらためてサブコマンド用の引数を minimist にかけることで必要な機能が実現できます。良いですね。
#!/usr/bin/env node
import * as minimist from "minimist";
const commands : { [key: string]: (argv: any[]) => void } = {
foobar : function (_argv: any[]) {
const argv = minimist(_argv, {
boolean: true,
alias: {
"o": "output",
"h": "help",
}
});
console.log(argv);
}
};
const argv = minimist(process.argv.slice(2), {
stopEarly: true, // do not parse subcommand args
boolean: true,
alias: {
"h": "help",
}
});
const subcommand = argv._.shift() as string;
if (!subcommand || argv.help) {
console.log('Options:');
console.log(' -h --help: show help');
console.log('Sub commands:');
process.exit(argv.help ? 0 : 1);
}
const func = commands[subcommand];
if (!func) {
console.warn(`Unknown subcommand ${subcommand}`);
process.exit(1);
}
func(argv._);
関連エントリー
- ブログシステムの HTML 生成を効率化 そろそろやることなくなったので minify などをやることにしました。 ただ、ブログシステムの出力の最後ほうでページごとに全体を mini...
- mbed USBSerial を WebUSB から扱うには mbed USBDevice ライブラリの中に USB CDC で動く USBSerial クラスが実装されている。これを Web USB ...
- Benchmark.js の結果表示を改善する Benchmark.js ちゃんと使えるので良いのですが、計測を頑張っている割に結果表示が貧弱というのが悲しいところです。 なので Perl...
- Node.js の fs モジュールだけで GPIO の割込みを扱うには? 以下のようにすれば動くことが確認できた。 select や poll を明示的に呼び出すことができないが、edge を設定しさえすれば fs...
- Math.random を seed 付きに置き換える こういう感じのコードをコピペする。本体は xorshift128、seed から初期値を xorshift32 で設定する (seed をそ...
✖
急激な体調不良
月曜日20時ぐらいに急激に全身倦怠感が起こり、だんだん体が重く、21時には寝はじめたがこのときはもうほとんど動く気がしないぐらいだった。寒気というほどではないけど体が冷えている感じがしたので布団をかぶって寝た。
23時ぐらいに起きたがかなり熱があるという感じ、体温計ではからなかったが38℃ぐらいだろうというだるさ。寒気は全くなくて暑かったので水を飲んだり窓をあけたりした。
窓をあけると外からタバコ臭が入ってきたりして不愉快なので閉めて冷房にしたりまた窓をあけたりした。タバコ臭まきちらす人間は今すぐに苦しみながら死んでほしい。
朝方あたりに体温計ではかると37℃前後。火曜日はまだ頭がぼーっとする感じでだるかったが、水曜日は普通。
関連エントリー
- ✖ オフィスにいるとだんだん体調が悪くなる。15時ぐらいからだんだんひどくなってくる。熱があるかはわからないが(たぶんない)、全身倦怠感がひどい...
- 体調不良 金曜日の夕方ぐらいから全身倦怠感と頭痛がはじまり、微熱(37度台)に。熱は土曜日中ぐらいで下がったが頭痛は治らず、今(月曜日)でもまだ痛い。...
- 体調不良 金曜あたり頭がぼーっとするなぁと思っていたら、土曜日午後あたりから急激に身体もだるくなってひたすら寝ていた。
- ✖ 子供の風邪からうつって(?)風邪っぽくなりつらかった。子供自体も熱が下がったと思って喜んでたらまた上がったりというのを数度繰替えし、精神的に...
- 先週がとにかくひどかった 日曜日の夕方ぐらいから、かなり体調が悪化して熱が出てきた。 子供も午後から熱が出て高熱に。 月曜日の朝、子供がけいれんを起こし救急車を呼ぶ ...
骨折してる
右の小指の中手骨を骨折してる。先週の水曜日の9時ごろ子どもを保育園に送ったあと家でやらかしたが、折れてるとまでは思わず普通に出社してしまった。しかしどうも痛みがひかない気がしたので念のためにと整形外科にいったら折れてた。
しかしこの、最初にいった整形外科がどうにもこうにもで、とにかくひどくて、まぁ治療内容自体がひどくおかしいとまでは思わなかったけど、夢にでるぐらいには不信感があったので、ちょっと継続して診療してもらうことはできないと思い、土曜日に別の整形外科にいった。
固定方法が少々変わったのでぎりぎり仕事できる感じぐらいにはなったが、まだまったく治癒してないのでどうなるかわからない。
関連エントリー
- 骨折してからの手の様子 0日〜7日ぐらいは腫れていて、シーネがキツいぐらいだった。手全体が若干痛いぐらい。痛み止めはいらないかなというレベル。一応処方されたのでボル...
- ✖ オフィスにいるとだんだん体調が悪くなる。15時ぐらいからだんだんひどくなってくる。熱があるかはわからないが(たぶんない)、全身倦怠感がひどい...
- 断続的に体調不良 先週火曜日は体調不良で休んだが、子供も熱を出してひきとることになったので、結局完全には休めなかった。 鼻炎と喉がすこし痛いぐらいなので耳鼻科...
- 先週がとにかくひどかった 日曜日の夕方ぐらいから、かなり体調が悪化して熱が出てきた。 子供も午後から熱が出て高熱に。 月曜日の朝、子供がけいれんを起こし救急車を呼ぶ ...
- 体調不良 帰宅してから急激に体調が悪化し、悪寒がひどくて眠れないぐらいに。体温を計る余裕がなかったけど、38度〜 ぐらいは出ていた気がする。1時間ぐら...
グランズレメディってなんなのか
靴の消臭に使われる商品にグランズレメディというのがありますが、商品説明の雰囲気的に主成分はただのミョウバンではないか?と思ったので、ちょっと調べた記録です。というのも焼きミョウバンは洗濯物の消臭のために常備していて大量に保有しているので、応用範囲が広いと嬉しいからです。
とりあえず成分を検索すると商品説明には書いてないものの、公式に「ミョウバン、タルク、酸化亜鉛」が主成分であると書いてありました。
特許について
グランズレメディの商品説明には特許番号が書いてあります。NZ.No. 225231 だそうです。この番号は見るからにニュージーランドでの特許番号なので、日本では関係ありません。
実際ニュージーランド特許局で調べると http://app.iponz.govt.nz/app/Extra/IP/Mutual/Browse.aspx?sid=636391773731325565 これですが、2009年に特許切れしており、実際英語版のページだと特許に関する言及はありません。
ということで、ドキュメントを見れば実は組成があきらかです。
パーセンテージは重量。
- basic components (50%)
- alum (硫酸アルミニウム) 20〜45%
- zinc oxide (酸化亜鉛) 20〜45%
- zinc undecylenate (ウンデシレン酸亜鉛) 20〜45%
- boric acid (ホウ酸) 0.1%〜1%
- talc (50%)
特許文なので読みにくいですがこんな感じのようです。basic components が消臭成分で、使いやすさのため talc によってさらさらになるように希薄されているようです。
冒頭でただのミョウバンではないかと書きましたがさすがにそんなことはなく、いくつかの抗菌・殺菌薬を組合せているようです。
タルク(食添) 500g cho45
酸化亜鉛・ウンデシレン酸亜鉛は入手性がよくないみたいなので、とくにこだわらないならミョウバン+タルクを半々で混ぜれば十分な気もします。
関連エントリー
- ミョウバン使ったら洗濯機の臭いが消滅して快適 標題の通りだけど、洗濯の際、柔軟剤としてミョウバンを使って仕上げると消臭に劇的に効果があった。 【焼ミョウバン】硫酸アルミニウムカリウム(乾...
- 空気清浄機の加湿が臭うとかなんとか 加湿器の除菌タイム 液体タイプ 無香料 給水タンク内の除菌・ヌメリ防止専用除菌剤 500ml cho45 除菌タイム ★ 4.0 / 5.0...
- ベランダに設置した UHV-6 (モービルホイップ) の現状 現状を参考程度メモっておく。 Comet UHV-6 HF/50/144/430MHzマルチバンド UHV6 cho45 コメット ★ 4....
- キッチンの棚 DIY 面倒なので塗装なし カットはホームセンターでやってもらったので特に苦労なし。 自転車のトレーラーで運んだ。910mm ぐらいなら内側におさめ...
- 年末だし子供関係で買ったものを一括でレビューするぞ!!! 驚異の防臭袋 BOS(ボス)Sサイズ大容量200枚入り 赤ちゃん用 おむつ 処理袋 (袋カラー:ピンク) cho45 BOS ★ 5.0 /...























