yak shaving life

遠回りこそが最短の道

スマホが蛾物故割れた

今朝子供達を保育園に送っていったあと、チョコザップでも行こうかなと思ってスマホを取り出したら、はい。落としました。地面に。アスファルトに。

さて、皆様マーフィーの法則というのを知っておられますでしょうか。

https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%83%95%E3%82%A3%E3%83%BC%E3%81%AE%E6%B3%95%E5%89%87

これは簡単にいうと「トーストを落としたら必ずバターを塗った面が下になってしまう」というものであり、つまり「スマホアスファルトに落としたら必ず画面が下になってしまう」ということでもあるのです。はい。もうお分かりですね。画面が、バッキバキに、なりました。そして全く何も表示できなくなりました。絶望…。

というわけで朝から絶望の淵に叩き落とされてしまったものの、帰宅してPixelの修理業者を調べたところ近くの駅に正規店があったので速攻で持ち込んで画面修理してもらったら直りました。都会(?)に住んでてよかった。無駄な出費がかさんでしまったが…。

即日直ったのは本当にラッキーで良かったのだが、スマホぶっ壊れ期間は結構精神にキてしまっており、普段どれほどスマホに依存しているのかを痛感することになった。スマホがいきなりぶっ壊れたことにより、

  • Suicaが使えないのでバスの支払いができない(超久しぶりに現金で払った)
  • LINEができない(PCでログインしてたので助かったが、外ではできない)
  • 電話ができない(古い機種にSIMを入れ替えてみたがなぜか動作しなかった)
  • 毎日何気なくみているニュースやSNSが見れなくてなんかそわそわする
  • もしこのまま直らなかった場合新しい機種を買うことになるが、金融機関のアプリなど重要なアプリをうまく引き継ぎできるかが不安
  • クラウドにバックアップをとっていない重要な何か(何?)が復旧できるか心配
  • 買い替えになった場合何をどういうチャネルで買うかなどを吟味したいけど早く買い替えないと不便というトレードオフが嫌

などなど様々な大変さがあった。「いきなりスマホがぶっ壊れても大丈夫か」というのを普段から時々意識して、色々準備しておいたほうがいいなと思った。防災対策みたいなもんですね。

買ったばかりのMacでasdfとRuby 3.3.0をインストールする時エラーになった

Macを新調したので、とりあえずasdfRubyをインストールしようと思ったらなんかエラーになって微妙に時間がかかったのでメモ。なおM3 MacBook Air 13インチ。

  • asdfのインストールとRuby pluginのインストールはサクッと終わった
  • Rubyのlatestをインストールしようとしたらエラー。Xcodeのライセンスにagreeしてなかった。ので、sudo xcodebuild -licenseしてagreeした
  • なんかpsych周りでビルドエラーになってるっぽい感じだったので適当にググって、結果的にはbrew install zlib openssl@1.1 readline libyamlしたら通った。(追記あり:実際にはopenssl@1.1は不要な模様)

結構脳死でやってしまったが、このバージョンでもopenssl 1.1って必要なんだっけ…?readlineとlibyamlだけ入れれば良かったような気もするが、まあ動いたからいいか。

参考:

github.com

追記

openssl@1.1をアンインストールしてruby 3.2.0をインストールしてみたが特に問題なかったので、やはり必要なさそう。ちゃんと調べてからやればよかった。手抜きよくない。

Macの日付がズレて困った


ある日急にMacbook Proの日付がズレた。2ヶ月くらい前の日付になっている。時刻もずれてよく分からない時間になっている。why?

この状態だとChromeすらもうまく動かないので支障がありすぎる。のでどうやったら直るのか他の端末でググって色々試してみた。ちなみに時刻がずれたのはM2 Macbook Pro

Date & Time 設定

Macの System Settings > General > Date & Time を確認。"Set time and date automatically" はONになっているし、Source は Apple (time.asia.apple.com) になっている。特に問題はなさそう。

他の項目もちゃんと設定されているように見える。しかし日付と時刻はズレている。どういうことなの…

NTPサーバをtime.google.comやntp.nict.jpに変えてみたりもしたけど何も変わらない。うーむ。

timedをkillする

timedのプロセスを落とせば直るという記事があったので試した。ps -ef | grep timedして見つけたpidをkill。

しかし時刻のずれは直らず。

sntpコマンドを打つ

sntpコマンドを打つことで強制的にNTPサーバと同期させれば一時的に正しい日付になった。sudo sntp -sS ntp.nict.jp みたいな感じ。しかし、System Settingで自動的に設定するとまたズレる。うーんなぜ?

その他

なんかplistの項目を削除するみたいなのも気がするけど忘れてしまった。とにかく何をやっても自動的に設定にすると時刻がズレてしまうのを解決できなかった。

結局どうしたか

毎朝sntpコマンドを打って正しい時刻にしてから仕事を始めるという生活を1ヶ月くらい送っていた。まあコマンド一発打つだけだしそんなに不便でもない…と思いきや、スリープから復帰するとずれたりするので意外とコマンドを打つ回数が多く地味にストレスだった。

そんな折、ふと「あれ、今日sntpしてないな…?」と気づいた。どうやら時刻は正しいようだ。System Settingを色々いじっても何をやっても時刻は正しいまま。つまり、直った…?なぜ?いつ??ナニモワカラナイけど勝手に直ってました。それから数ヶ月経つけどずっと問題なし。

一体なんだったんだ…。

参考リンク(なし)

数ヶ月前のことで、大してメモもとっていなかったので参考リンク不明。でも「Mac 日付 ズレる」とかでググって出てきた記事を適当に参考にした。

結論

Macで時刻がズレて辛い人がいたら、時間が解決してくれる可能性があるので諦めないでください。OS初期化とかしなくてもそのうち直る…かもしれません。

Playwrightで addCookies したら Invalid cookie fields エラーが出て落ちてしまう

…ということがあり、結構な時間ハマってしまった。

Playwrightの使い方が間違っているのかと思い、BrowserContextのAPIドキュメントを読んだりGitHubのIssuesを検索したりしたが何がダメなのか分からず、これはもしかしてPlaywright特有の問題じゃないのではというところに至った。ここまでが長かった。

というわけでPlaywrightに関係ないところも含めて調べていたらStackoverflowで以下を発見。

stackoverflow.com

…というわけで、Cookievalue; が入っていたのが理由だった。ブラウザから適当にコピペをしていたせいで、別のCookieの定義が一つのvalueに入ってしまっていた。valueA; cookie_name2=valueB みたいな感じ。それぞれ別のオブジェクトとして定義したら(当然セミコロンは含まれないため)動くようになった。

Cookie Valueセミコロンを入れてはいけないというのは今まであまり考えたことがなかったなあ。なお、どうしてもセミコロンを入れたい場合はencodeURIComponent()すればよいとのこと。

ちなみに、Invalid cookie fieldsChromiumが出しているエラーメッセージのようだった。ここに早く気がついていれば…。

Karabiner-Elements 14.13.0 にアップデートしたら動かなくなった

M2 MacBook Pro, macOSはVentura 13.4。

Karabiner-Elements 14.13.0 にアップデートしたら、macOS restart required みたいなポップアップが出たので再起動した。でも同じメッセージが出続けるのでインストラクションに従ってkeyboard driverのdeactivateとかやったけど解消されない。

しばらく調べたが有用っぽい情報はこれしか見つけられなかった。

github.com

ログ見たりもしたけど結局理由はわからないし、早く解決したかったので一旦アンインストールして14.12.0を入れ直したらまた動くようになった。30分は無駄にしたな…。

ソフトウェアアップデートって大変。

M2 Macでmysql2をbundle installしたらエラー

Gemfileにgem "mysql2"とだけ書いてbundle installしたらld: library not found for -lzstd的なエラーが出た。普段PostgreSQLばかり使っているのでちょっと面食らったが、適当にググって解決したのでメモ。

前提

まず https://github.com/brianmario/mysql2?tab=readme-ov-file#mac-os-xにしたがってopenssl入れたり$ bundle config --local build.mysql2 -- --with-openssl-dir=$(brew --prefix openssl@1.1)してからbundle installした。MySQL自体はHomebrewで既に入れてあった。で、件のエラー。

Rubyバージョンは3.2.2で、asdfで入れたもの。macOSはVentura 13.4。チップはApple M2 Pro。MySQLバージョンは8.2.0_1。

解決まで

調べると色々な記事が出てきたが、issueがあったので主にここを見る。色々試した結果、結局export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/したらbundle installできるようになった。

環境構築って大変。

Datadog AgentのCPU使用率が50%超えたらトレースを送ってくれなくなるのは仕様。でも設定変更できる

タイトルが全てという感じではあるが一応本文に詳細を書く。

一時期Datadog APMのTraceがあまり取れていない時期があり、Injection Rateがかなり低くなっていた(当時は任意の期間のInjestion Rateを見ることができた。2023年7月現在はなぜか見れない。不便)。そしてdropの理由のところにCPU usageがどうのこうのみたいに書いてあったので色々調べた。具体的には以下のような経過を辿った。

  • ドキュメントを頑張って読み漁ったが全く関連する記述が見当たらない
  • datadog-agentのリポジトリでコードを読み漁っていたら怪しい設定値(max_cpu_percent)を見つけた。
  • このコードコメント以外に全く説明がないし、かといってどういう風に使われているかまでコードを追うパワーも気力もなかったのでサポートに質問してみた
    • 「これは(Webアプリのコンテナではなく)datadog agentのコンテナのCPU使用率がこの値に達したらトレース送るのストップするという意味?(意訳)」と質問したら、「そうそうそれそれ〜(超意訳)」と返ってきた
  • この値を0にしたらトレース取れない問題は解消した

というわけで、デフォルトではdd-agentのコンテナのCPU利用率が50%になるとトレースを送ってくれなくなるので注意が必要。しかもドキュメントに全然書いてないので気をつけろ。

…しかし、この設定が存在する意味が正直わからない。普通に考えたらdd-agentのコンテナはdd-agentだけが動くんだからもっとCPU使ってもいいんでは?それにクラウドだったらovercommitとかもあるし100%超えるなんてザラ。というわけで基本的にこの設定は0(制限なし)にしておくのがいいと思います。DatadogにクラスタのCPU食い潰されちゃう可能性があるなんて怖い!という人は100にしとけばいいんじゃないかな。とにかくデフォルト値が50の意味が分からない。誰か理由知ってたら教えてください。

追記

公式ドキュメントに記述を発見した。(以前はなかった気がする)

docs.datadoghq.com

追記の追記

Datadog Agent 7.43.0から、コンテナ環境ではこの制約はデフォルトでdisabledされたらしい。よかったよかった。k8s環境ではもうちょい前からオフになってたとのこと。みなさんagentのバージョンあげましょう。

github.com