bouzuya.hatenablog.com

ぼうずやのにっき

bouzuya/screenshot-testing-js のリポジトリをつくった

bouzuya/screenshot-testing-jsリポジトリをつくった。 2018-01-03 に書いた Puppeteer と bouzuya/node-compare-images を組み合わせた何かになる予定だ。まだ TypeScript のプロジェクトを初期化した程度だ。

screenshot-testing-js は screenshot-based testing のためのなにかをつくる予定だ。それは visual testing あるいは css regression testing などとも呼ばれる。どう呼ぶのが一般的なのか知らない。 screenshot の差分から CSS を含む崩れのテストをする。それができるなにかだ。

今後つくっていく挙動をメモしておく。 approve / capture / compare のコマンドを実行できるようにする。 approve は capture した画像を承認 (期待する画像として保存) する。 capture はヘッドレスブラウザを操作し screenshot を撮る。 compare は approve したものと capture したものを比較し、差分画像を含むレポートを生成する。

以前、実験的に書いたものは JavaScript なのと、公開出来ない情報を含んでしまっているので書き直ししている。 API の変更もするつもりだ。参考にしつつ、という感じ。


アジャイルコーチングはほとんど進んでいない。


のどが痛い。せきがすこし出る。呼吸はマシになったようにも思えるが、慣れただけかもしれない。

初日から衝突している。いろいろある。衝突は避けてもやもやするより避けずにさっさと片付けるほうが性に合っている。相手にもよるがうまくいくときは良い方法だと思う。

昼に弁当・ピザ・寿司を食べる。味噌汁が切れた。

bouzuya/node-compare-images をつくった / クリスマスプレゼント

bouzuya/node-compare-images (npm:@bouzuya/compare-images) の 0.1.0 をつくった。

node-compare-images は画像を比較するための NPM パッケージだ。 bouzuya/resemble からアンチエイリアス無視や色無視などの機能を削っている。将来的には色無視くらいは足してもいいかなと思っている。

ひとまず必要最低限のものが出来た。 2017-12-30 で書いた流れに戻って、 Puppeteer と node-compare-images を組み合わせた何かをつくるつもりだ。


アジャイルコーチングは 60% あたりまで進んだ。今日は後述のとおり、あまり進んでいない。


16 時間以上も寝ている。のどの痛みのほか、全身がだるい。とにかく寝た。明日から仕事だ。

荷物の受け取りをした。荷物はスマホカバーとドライヤーで、これは妻へのクリスマスプレゼント (?) だ。もう年を越してしまっており、いまさらなのだけど……。

アジャイルコーチングを半分ほど読んだ / 風邪

アジャイルコーチングを半分ほど読んだ。見出しが本文の要約になっていないものが多かったりする。基本的に各章の最後のチェックリストだけ読めば十分な気がしてきた。


bouzuya/resemble 。未使用の箇所を削った 1 commit だけ。

ignoreAntialiasing: true にすると ignoreColors: false になるのがよく分からない。逆も同じ。 元 (Huddle/Resemble.js) の API では .ignoreAntialiasing().ignoreColors() のように呼べるのだけど、内部的にはフラグを書き換えてしまうので、おかしくなるような……。

https://github.com/Huddle/Resemble.js/blob/c66498193cdb6da27111ad26ac6515079eb8c88b/resemble.js#L676-L702

ignoreAntialiasing: function(){


  tolerance.red = 32;
  tolerance.green = 32;
  tolerance.blue = 32;
  tolerance.alpha = 32;
  tolerance.minBrightness = 64;
  tolerance.maxBrightness = 96;


  ignoreAntialiasing = true;
  ignoreColors = false;


  if(hasMethod) { param(); }
  return self;
},
ignoreColors: function(){


  tolerance.alpha = 16;
  tolerance.minBrightness = 16;
  tolerance.maxBrightness = 240;


  ignoreAntialiasing = false;
  ignoreColors = true;


  if(hasMethod) { param(); }
  return self;
},

tolerance 自体は書き換わっているので微妙に違うのだけど、フラグが入っていないのでおそらくうまく動かないと思うんだけど……。

こういうのを見ていて大変もやもやする。いっそアンチエイリアスの処理などごっそり消してみようかな。


はんだごてをはじめ、いろいろポチっている。届くのが楽しみだ。

のどが痛み、鼻水が止まらない。ぜんそくの発作に近い状態で息苦しい。早めに寝る。

色空間で混乱する / アジャイルコーチングを読みはじめた / あいさつ

bouzuya/resemble0.3 * r + 0.59 * g + 0.11 * b について調べている。いろいろ出てきてよく分からない。

これに付けられていた元の名前は getBrightness だ。色を無視したときの比較や、グレースケールのピクセルの RGB の各値などで使われている。

最初 HSL の L: Lightness かと思って、ぼくは getLightness に名前を変えていたのだけど、どうも怪しい。英語版の Wikipedia の HSL and HSV によると L にもいくつかの算出方法があるらしい。 I / V / L / Y'601 が挙げられている。

0.3 * r + 0.59 * g + 0.11 * b は Y'601 に近い式のようだ。 Y'601 は ITU-R BT.601 における Y' ということらしい。 0.299 * r + 0.587 * g + 0.144 * b がより精度の高いもののようだ。よく分からないが、 RGB のそれぞれに対しての重み付けは I や L に比べて人間の感覚に寄せるためのものだろう。

この Y は YUV 色空間から来ているようだ。Wikipedia の色空間 にいろいろな色空間が出てくる。おなじみの RGB 以外にも sRGB "Adobe RGB" P3 Lab CMY HSV HSB HLS HSL YUV ……いろいろ出てくる。ちょっと混乱している。

脱線している。


アジャイルコーチングを読みはじめた。冬休みのうちに、つまり 2018-01-03 までに読み終えたい。


自宅で年を越した。今日はあいさつへ。予定からして 2017 ほど忙しくない。 2017 はインフルエンザにかかって 2017-01 のほとんどがボロボロだった。

妻の親戚にあいさつする。お昼に肉などをしっかり食べる。そのあとも別の場所でおせちが……。そんなに食べられない。親戚には小さい子も居て、スプラトゥーン 2 をしていた。アナログゲームをいくつか持っていったのだけど、出番はなかった。

帰り道に初もうでをする。おみくじは小吉。うーん。

2017-W52 & 2017-12 & 2017 ふりかえり

2017-W52 と 2017-12 そして 2017 をふりかえる。ふりかえりが重なると困る。


2017-W52 をふりかえる。

2017-W52 の目標 とその記事

目標。

記事。

映画および旅行は予定どおりに。いろいろ荒い気はするけど、そこそこ楽しめたよ、スター・ウォーズ。旅行と言うには近すぎた気はするけど、良かったよ、有馬温泉

Puppeteer の件は 2017-12-30 に書いたとおり、途上。代わりではないけど node-resemble-js を書き直した bouzuya/resemble をつくっている。

つくったもの

2017-12-25/2017-12-31

その他

体重が過去最高値をまた更新してしまった。 2017-12-31 に。運動しよう。

買って良かったもの悪かったもの (2017-12-29) に書いていないのだけど、先々週に空気清浄機を買ったんだよね。部屋がほこりっぽいように思ったので。ちなみに効果があるのか動かしていてもよく分からないので順位に変動はない。

2017-12-30 に書いた冬休みの宿題である『 UI デザイナーのための Sketch 入門&実践ガイド』。無事に読み終えた。

2018-W01 の目標

  • Puppeteer および Resemble.js をつかったものをつくる

2017-12 をふりかえる。

2017-12 の目標

  • ☑ 『型システム入門』を読む

週別のふりかえり

つくったもの

2017-12-01/2017-12-31

その他

ゲーム。

映画。映画館がふたつ、家でもそこそこ観ている。

おでかけ。

勉強会。なし。

読書。図書館の利用は予約図書を受け取れていないために止まっている。重い本を読むので精一杯だった。

  • 『型システム入門』 (2017-12-24)
  • 『 UI デザイナーのための Sketch 入門&実践ガイド』 (2017-12-31)

総括。

2017-12 は『型システム入門』か。

年間目標の帳尻合わせではあるが、がんばって読んだ。「読んだ」といえるほど理解していないので「目を通した」くらいだろうか。今年はアドベントカレンダーにも参加せず、読み進めることに専念した。つくることも控えめになってしまった。ただ、仮にも最後まで進めたので、そこは良しとしよう。

恒例の温泉旅行は有馬に。ルミナリエも例年通りに。映画も観ることができた。このあたりは予定通りだ。

読みかけの『純粋関数型データ構造』やプライベートブラウジング判定の件や Puppeteer & Resemble.js のアレなどの中途半端なものが多い。それでも 2017-12 はなかなか充実していたように思える。

VISA プリペイドの入手や Patreon の登録などもまた展開があるかもしれない。

2018-01 の目標

  • アジャイルコーチング』を読む
  • 『新しいシェルプログラミングの教科書』を読む
  • Puppeteer & Resemble.js で何かつくる

2017 をふりかえる。

2017 ふりかえりと 2018 の目標

月ごとのふりかえり

かったもの

2017-12-30 に書いた。

みたもの

映画館は 4 本。ここに含まれていないものだと、よゐクラとか RWBY などがある。 RWBY の続きを観たい。

よんだもの

図書館を利用した。

つくったもの

2017-01

2017-02

2017-03

2017-04

2017-05

2017-06

2017-07

2017-08

2017-09

2017-10

2017-11

2017-12

2017 のできごと

2018-01/2018-03 の方針など

  • やってみてふりかえることで変えていく
  • 毎日プログラミングをする (プログラムをつくる)
    • 楽しいことは良いことで、プログラミングは楽しいことだ
    • つくるとものが残り、ものが残ればやったことが分かる
    • すべてをつくる必要はない、うまく使うことも大切だ
    • 使うときは理解する
    • つくることで理解できることもある
  • 四半期 (Q) ・月 (M) ・週 (W) でふりかえりを書く
    • 良くなっているか分かるために書く
    • 年 (Y) でのふりかえりは廃止する
    • 予定と実績を確認する
  • 時間・健康・お金を大切にする
    • すべてのもとになる
    • 映画・ゲーム・漫画による時間の浪費を避ける
    • 食事・運動・睡眠といった生活を規則的にする
    • お金はよく考えて使う
  • やってみる
    • 積読を減らす
    • 型システム入門をまた読む
    • 3 の倍数週で坊主にする
    • キーボードを自作する

bouzuya/resemble 0.0.1 をつくった

bouzuya/resemble (npm:@bouzuya/resemble) の 0.0.1 をつくった。まだつくっている。

resemble は画像の解析・比較のための npm パッケージだ。 TypeScript で書かれている。 Huddle/Resemble.js (npm:resemblejs) から派生した lksv/node-resemble.js (npm:node-resemble-js) を基にしたリポジトリだ。このプロジェクトは 2017-W52 の目標 の「 Puppeteer および Resemble.js をつかったものをつくる」の一部だ。

Resemble.js は大元になった画像の解析・比較のための npm パッケージだ。内部で canvas を使っている。 node-resemble.js は Resemble.js から canvas への依存を削除し、かわりに lukeapage/pngjs (npm:pngjs) および eugeneware/jpeg-js (npm:jpeg-js) を使用したものだ。

経緯は Visual (screenshot-based) Testing の手段の模索からだ。はじめ garris/BackstopJS (npm:backstopjs) を試していた。挙動を把握するために puppeteer と Resemble.js を使ってそれと似たようなものをつくった。この過程で BackstopJS の依存から node-resemble.js を知った。寄り道的に node-resemble.js のソースコードを眺めたら、不安になったので書き直している。大きな流れとしてはこんなところだ。

書き直しの過程は 2017-12-25 にも書いた。言語を TypeScript へ変えて、明示的状態をなるべく減らしている。その都合で API も大きく変えている。処理自体は (バグっぽいものも含めて) ほとんどそのままだ。コピーが増えているので、速度は落ちているかもしれない。

もうすこし進めて、色の算出・画像の読み書き・画像の比較で分離したいと考えている。脱線がはかどっている。

また書く。


冬休みの宿題として『 UI デザイナーのための Sketch 入門&実践ガイド』を読もうとしている。途中まで読んだが、メニューや画面項目の解説は退屈だ。

2017 に買って良かったもの悪かったもの

2017 に買って良かったもの悪かったものを書く。

「買」や「購入」で grep してみると、いろいろ出てくる。もちろん blog.bouzuya.net に書いていないものもある。

ぼくの中で 1 位は確定している。食洗機 NP-TCM4 (2017-03-18) だ。据え置き型の 3 人程度向けの小型の食洗機だ。明らかに生活を変えた。

ひとつには食器にかける時間が減った。食洗機に詰める時間はあるものの、手で洗うよりは短い。浮いた時間はだいたい妻との食後の一杯(のお茶)にあてられている。「そんなことに……」とバカにされるかもしれないが幸福度が高い。また、手で洗わないので洗剤による手荒れや冬場のひび割れなどもない。ほかにも熱湯消毒されており清潔感がある。あとは、一回の運転でまかなえる食器が決っているので、多少の食器の増減を無視できるようになり食器戦略 (?) が変わったりもする。

ときどき取れにくい汚れもあるし、乾燥しきれなかったり、容量が小さい点は不満だ。それでも手で洗うことに比べれば……という印象だ。工事費込み 60,000 円だったが、気持ちの上ではもう十分に回収できている。

2 位は迷うところだが、キーボードにしようか。 Let's Split を入れたいところだけど、あえて ErgoDox EZ を挙げたい。

いま、ぼくは家でも会社でも Let's Split を使っている。配列は Gist に置いている (2017-09-13) 。特徴としては使用キー数を minidox と同じ 36 キーに押さえている点 (厳密には RESET キーのためだけに 37 キーだけど、なくても使えるので無視している) 。

あえて普段使いから降格した ErgoDox EZ を挙げるのは、こういうキーボードの世界へ踏み出させてくれた点や、その導入 (購入) の手軽さからだ。安くはない。それでも $325 USD (ぼくの購入時点では 35,000 円程度) でこの世界に踏み出せる。

QMK firmware でキー配列を触るのは楽しすぎる。上記のような変態配列でも、挿すだけで安定して動く。「ソフトウェアでやればいい」は、ぼくの従来の見解だけど、実態としては不安定だ。 Mac OS X の OS バージョンアップで Karabiner が使えなくなったのは良い例だ。

3 位はプレイ時間で見て Factorio だろう。時間と遊べた時間で見たコスパでは圧倒的だ。ただ購入前の予想通りに時間泥棒だった。後悔しているし、 2018 は 2016 同様にゲームを控えることを決意させてくれた。

Factorio は工場をつくるゲームだ。未知の惑星を開拓し、資源を採掘し、加工する。それらをベルトコンベアやロボットアームなどを使って、ひたすら自動化する。どんどんボトルネック (主に手作業) を減らして効率化し、複雑な加工をしていく。 RTS における内政パートが続くようなイメージだろうか。

とにかくうまく組めば勝手に動く工場 (製造ライン) が楽しい。

一方で闇を感じる部分もある。このゲームではエイリアン的な生き物が襲ってくる。敵の見た目はともかく、実際のところ、このゲームにおける主人公は侵略者・破壊者でしかない。彼らが襲ってくる理由は主人公の活動による汚染だ。汚染を抑える木は伐採するともう植えることができない。失われた資源も返ってこない。なるべくクリーンにすることはできる。しかし、 Factorio は基本的に資源の略奪・原生生物の殺戮・巣の破壊を繰り返すゲームだ。

悪かったもの。長くなってきたので、こちらはすこしだけ。一部の無印製品だ。

特にバスタオルがいまひとつだった。たまたまかもしれないが、厚手のバスタオルはにおいがしみついてすぐにダメになってしまった。以前の (無印ではない) バスタオルを 4 年ちかく使ったので、 3 ヶ月も持たなかった無印のものは残念だ。もう新しいものを買ってしまった。

あと収納のポリプロピレンケースは安定して供給されている点で良いし、良いものに含めようかとも思っていた。しかし、このところ思った以上に変形すると気がついた。使っているうちに曲がっていく。仕切りなどの補強するものがないとまずいのだろうか、設置場所の温度が悪いのだろうか。どんどん曲がっていく。代替を見つけたい。