puppeteer 13.0.1

puppeteer 13.0.1がリリースされました。

今回のリリースノートは以下のとおり。

Bug Fixes

・disable a test failing on Firefox

・make sure ElementHandle.waitForSelector is evaluated in the right context

・predicate arguments for waitForFunction

https://github.com/puppeteer/puppeteer/releases/tag/v13.0.1

基本的にバグ修正です。もしも13.0.0で問題が起きている場合にはアップデートしましょう。

puppeteer 13.0.0

puppeteer 13.0.0がリリースされました。

今回のリリースノートは以下のとおり。

BREAKING CHANGES

・typo in ‘already-handled’ constant of the request interception API

Features

・expose HTTPRequest intercept resolution state and clarify docs
・implement Element.waitForSelector

Bug Fixes

・handle multiple/duplicate Fetch.requestPaused events
・revert “feat(typescript): allow using puppeteer without dom lib”
・typo in ‘already-handled’ constant of the request interception API

https://github.com/puppeteer/puppeteer/releases/tag/v13.0.0

目立った変更はありませんが request interception に関するドキュメントがアップデートされてます。

request interceptionとは

puppeteerの強力な機能の1つとして、HTTP requestをinterceptすることができます。具体的には以下のようなコードで、’request’メッセージをonで拾います。この例ではGoogle Analyticsへのリクエストをブロックしています。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setRequestInterception(true);
  page.on('request', (request) => {
    if (/www\.google-analytics\.com/.test(request.url())) {
      return request.abort();
    }
    return request.continue();
  });
  await page.goto('https://example.com');
  await browser.close();
})();

これまではこのような記述でよかったのですが、Cooperative Interception Modeが実装されたことにより、少し書き換えが必要になりました。具体的には以下のように変わります。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setRequestInterception(true);
  page.on('request', (request) => {
    if (/www\.google-analytics\.com/.test(request.url())) {
      return request.abort('failed', 0);
    }
    return request.continue(request.continueRequestOverrides(), 0);
  });
  await page.goto('https://example.com');
  await browser.close();
})();

Cooperative Interception Modeとは

page.on(‘request’)はイベントリスナーですので、同じ’request’メッセージをlistenするイベントリスナーを複数定義することができます。ところがNodeJSは非同期です。そうすると、どのイベントリスナーから順番に実行すればいいのか分からなくなります。

上の例ではGoogle Analyticsをブロックするように書きました。でも、もしかしたらその前にGoogle Analyticsに対して処理するイベントリスナーを定義したいかもしれません。そうなると、どの順番で実行すればいいか保証されなくなってしまいます。

そこで、Cooperative Interception Modeが実装されました。従来の abort() や continue() の第2引数にpriorityを設定できるようになりました。これにより、プライオリティが高い順番にイベントリスナーが処理されるようになります。

なお、引数が指定されていない場合はLegacy Interception Modeとして実行されます。普通の用途では’request’メッセージに対するイベントリスナーは1つしか定義しないことがほとんどだと思いますので、基本的には第1引数、第2引数を設定することをお勧めします。

FreeBSD 12.3-RELEASE

FreeBSD 12系の最新リリース 12.3-RELEASE がリリースされました。

FreeBSD 12.2-RELEASEを運用している環境では、以下のコマンドで簡単にアップグレードできます。make worldをするまでもなくバイナリアップデートできるようになったのは大変便利ですね。

# sudo freebsd-update -r 12.3-RELEASE upgrade
# sudo freebsd-update install
# sudo reboot

ところで12.3-RELEASEからの変更点ではないのですが、リリースノートに興味深い記述がありました。

Starting with FreeBSD-13.0, the default CPUTYPE for the i386 architecture will change from 486 to 686.

https://www.freebsd.org/releases/12.3R/relnotes/

つまり、今後は686以降のCPUでしか動作しないということです。まあ、今時486/586の環境はないに等しいので確かに問題ないアップデートだと思います。そういえば、何年か前に386から486に変わったということがありましたね。あの頃も今時386はないだろう、みたいに思ったことを思い出しました。

ちなみになぜ686に変えるのかというと、上記のリンクから説明分を読んでもらえば分かりますが、686以前のCPUではkernelでエミュレートできない機能があるからです。昨今は64bitバイナリが主流で32bitバイナリを使うことも減りました。その64bitバイナリも486では動かない、といった事情もある訳です。

ダメ着:寒い季節のテレワーク

テレワークしてますか?

コロナ感染が広がって以降、日本でもテレワークが一般化したように思う。

爆発的な感染が減った昨今、テレワークから出社に戻す企業も増えてきているようだが、自分のようなIT職の場合はそのままテレワークのままのところも多い。むしろ、オフィスを縮小してしまっていたり、もはや満員電車による出勤や、始業時間5分前よりも早く起きることができない身体になってしまった人もいるだろう。

ところが、夏と冬はテレワークにとっては実は大敵である。それは室温だ。

オフィスはそれなりに快適な(寒がりや暑がりがいる場合は別)気温に固定されているのだが、自宅の場合はそうはいかない。いや、エアコンなり暖房なりをきちんとつければいいのだが、オフィス等にある業務用…というかオフィスビルの集合管理の空調設備と、一般家庭のエアコンではやはり質が違う。顕著なのが乾燥と室内の温度ムラだ。冬場は特に乾燥がひどい。そして頭ばかりぼーっとして、足は寒い、みたいなことにもなりがちである。

そんな状態でテレワークをするのは結構きびしい。エアコンを酷使しないでも快適な気温で仕事をしたいものだ。そこで考えたのは、暖房設備をあまり使わずとも暖かく過ごすことができる方法である。

テレワークにはゲーミングウェア

IT職のテレワークは主にパソコンに向かっての作業が中心だ。デスクから動くことは稀で、基本的にキーボードとマウスの操作しかしない。この動作、何かと同じではないだろうか? ゲーマーと同じだ。つまり、ゲーマーが暖かく過ごせる格好は、IT職がテレワークで快適に過ごせる格好と同じなのだ。(暴言)

そこで目をつけたのが ダメ着 だ。

「着る毛布」というか「歩ける寝袋」みたいな感じをイメージするといい。8000円弱とそんなに高いものでもないので、物は試しと買ってみたのだが…これがびっくりするほど暖かい。それなりに気密性のあるマンション(室温17〜19度)であれば、ぶっちゃけ寝間着の上にダメ着をきた状態でも暖房なしで過ごすことができる。つまり、始業の直前に起きたとしてもダメ着を上に着るだけですぐに仕事を開始できるのだ。やばい、これは便利すぎる。

難点を上げるならば、やはりトイレに行くのが少し面倒である。一応脱がずに行けるようなチャックが用意されているが、自分の身体にちょうど合うくらいのサイズだと少し難しい。もしも快適にトイレに行きたいなら、一回り大きいサイズを買うのをお勧めする。あと、ダメ着のまま寝ることもお勧めしない。ぶっちゃけ寝間着として使うには少し暑く、朝になったら汗をかいていることになる。

最後にもう1つ。これを着たままうっかりZoom会議に出ないように気を付けよう。