月: 2023年5月

猫がキーボードを踏む問題

ブログで書いたことがあるかどうか覚えてないけど、知人友人には周知のようにかれこれ7年くらい猫を飼っている。そして2020年から例にもれず在宅勤務をはじめている。最初はその必要があってのことだが、そのうちにフルリモートの会社に転職してしまったので、ずーっと在宅勤務している。

猫はジャレたくなると仕事中の机によく来る。とりわけうちの猫は好奇心が強く、ミーティング(ビデオ会議)をしていたり話していたりすると机のところによく来る。同僚は「こいつ、いっつも猫を抱えながら仕事してるなー」と思ってることでしょうが、違うんですほんとミーティングのときだけで大部分の時間はうちの適当なところで寝てるんですよ。

まあそれはいい。そんな言いわけもほんとは別にしなくてもいい。いっつも猫をなでながらミーティングしてるのは間違いないし。

ところで、先日猫を飼っている友人から「こないだのポッドキャスト、猫の声が入ってましたね」と言われて、ああそうだね、遠くでニャーと鳴くこともあるよね……という話をしていてどうも話が噛み合わないと思ったら、このノイズみたいな音は猫がゴロゴロ鳴く音だ!と気づいたという非常に猫上級者の発言であった。でもポッドキャストで話しているときもミーティングと同じで席の前にやってきてジャマをするので、そのときの鳴き声だと思う。閑話休題。

それで在宅勤務も3年たったわけなんで慣れたものなんだけど、なぜかどうも最近になって猫が頻繁にキーボードを踏むようになってきた。

仕事にはノートPCを使っている(会社支給のものがそれなので)。でもまぁ実際には外部モニタ、外部キーボード、外部マウスをつかってもっぱらそちらで操作している。ノートPCはそれでも開いて机の片隅に置いてあり、たまに何かのウィンドウを置いたり、ミーティング時のカメラとして利用している。うちは夫婦で共働きなので机を横に並べて配置していて、ちょうど机のあいだの側にノートPCがある、という配置。

この配置はかなり以前からそのままなのだが、最近になって猫がノートPCの内部キーボードを踏むようになった。猫がふたつの机のあいだを行き来することがよくあり、その通りみちとして踏んでいく。ふつうに作業していたりミーティングをしていたりすると、とんでもないキーを押したりしないか不安があるし、話していたら猫をしかるのもむずかしい。

どうして最近になって発生した事象なのかはよくわからない。これまでもこういう配置だったし、そこまで微妙な位置のちがいが原因という気もしないのだけど。ともあれ、さすがにミーティングに支障をきたすようになってきたので、対策を考えることにした。

自明な対策としては机の反対側の隅に動かすということが考えられる。でもケーブルのポートの位置(とくにHDMIポートの位置)の関係でやりづらいのでこれは却下。

次に自明な対策として、とりあえずノートPCを閉じることにした。自分は作業中(妻はミーティング中)などであればこれで良い。ノートPCにはUbuntuが入っているのだけど、デスクトップLinuxって気軽に閉じても大丈夫なのかなと不安になったが、意外と安定して動いている。最近のLinuxはえらいね。

これならキーボードが露出しないから踏まれなくなるけれど、ミーティング用のカメラがほかにないので、究極的な解決策にはならない。ミーティングではどうしてもノートPCは開かないといけないのだ、いまのところは。ではどうしよう。

というわけで思いついた解決策は2つ。ひとつは外部ウェブカムを買ってきてミーティングにそれを使うこと。もうひとつはノートPCスタンドみたいなのを買ってきてその上に載せること。

実は妻も同じようにノートPC+外部モニタ+外部キーボード+外部マウスという構成で、ノートPCも机同士の境界側に置いているのに、キーボードを踏む被害が起きていないのだ。それは妻がノートPCスタンドを使ってるからではないか、と思ったのだ。こういうやつね。

値段を比較してみたらさすがにスタンドのほうが安いので、設置してみた。いいかんじだ。

子が寝たあとで設置したので部屋は妙に暗い

それでスタンド初日の今日。妻は出勤日だったのであれだけど、やはり猫はやってきて机のあいだをいったりきたりしてきた。が、ノートPCはさすがに高い位置にあってジャマなだけなので、踏むことなく済んだ。成功だ。副次的効果として、ノートPCが高い位置にあって画面がみやすくなって、それもいい感じだ。いやそれは副次的ではないな。

wordpressのtwitter連携

https://www.itmedia.co.jp/news/articles/2305/02/news087.html

https://jetpack.com/blog/the-end-of-twitter-auto-sharing/

twitter連携、もういいかと思って手動で切ったけどAPI有料化につき自然消滅だったのか。そのへんもお金とるんだねぇ。そんなことをしても得にならないような気がするけど、まあそういう方針ということなので仕方ないね。

Automatticはmastodon連携のほうを頑張ってください。いつ来るかなあ。

Rustその後

本記事、ちょっと前に書いたけど公開しわすれていた。

Rust、まぁなんとなくわかってきた。データ構造のコードはそれなりに練習になった。

  • unsafeなしのsingle-linked-listをBoxを使って書いた。やってみたらそれほど難しくない。あとイテレータは戻る必要がないので実は簡単。なんでdouble-linked-listにする必要あるんだろう? cursorというAPIは戻れるようになっているが、これはexperimentalとのことで手元では実装していない。実装するならzipperを使うことになると思うが可能ではありそう。ただzipperの構造はちょっと複雑かもしれない
  • そもそも連結リストだけど途中に要素を差し込んだり途中の要素を削除したりすることもないので、複雑さはそこまででもなかった
    • removeとかあるけど、リストに対してインデックスの数値を渡してO(n)で削除するインタフェースになっている。連結リストの存在意義とは……?
  • 作ったリストを2つ使ってqueueを書いた。Chris Okasakiの本に書いてあるやつ。これはかなり簡単
  • 興がのってきたので binomial heap と fibonacci heap も書いてみて、テストをいろいろ書いてみたりした。なかなか楽しい。うまいことしてベンチマークを書いて計算量が理論どおりになっているかを調べたいところだが

オーナーシップ、copy/move、moveによる無効化はいまだに戸惑うし、ルールはわかりづらいように思える。とくにstructのフィールドの一部をもちだしたいときのエラーメッセージが「copyにしましょう」だったりするのがわかりづらい。意図せずコピーしているケースもありそう。

moveが実際にどのようなオペレーションになるかがまだよくわかっていない。ローカル変数同士、ヒープ変数同士であれば変数の指し示す対象を切り替えるだけの操作で済む気もするが、実際にはコピーになっていて意外と高コストだったりしないんだろうか? もっともほとんどのmoveではshallow copyなので、そこまで遅いことはないのかもしれない。

まぁC++でもクラスや構造体はmoveできるが、std::unique_ptrを使うほうがよくあるし、Boxなどを使うほうが普通なのかもしれん。

そろそろデータ構造のおさらいだけじゃなくて、何かツール的なものを作ってみたい。さてなにを作ろうかね。