yak shaving life

遠回りこそが最短の道

買ったばかりの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

コードエディタ/IDEの個人的変遷


コードを書く時のエディタ、あるいはIDEに一家言あるというプログラマは少なくないと思う。

だけどまあ、そうでもない人というのもいるわけです。僕なんですけど。結局雰囲気で色々使ってきたけどどれひとつ極めてないので、そろそろどれか一つを真面目に極める…とまではいかなくても、ある程度詳しくなった方がいいのかな、などと思っている。

んで、今から何を選ぶのかといえば、選択肢は意外と少ないというか、VS CodeかJetBrains製品群のどちらかを選ぶのが自然だろう。今からVim/Emacsを極めます!というのも…まあ楽しそうではあるけど、マジョリティに寄せて行った方が色々便利そうなので。とりあえずVS Codeのドキュメントを読むところから始めるかなあ。

ところでタイトルにあるコードエディタ/IDEの個人的変遷を思い出してみると、なんだか色々触るには触ったなと思ったのでここに書いてみる。世のプログラマたちがどういうエディタ/IDEを使ってきて今どこに落ち着いてるかみたいなの、私興味あります。みんな書いてくんないかな。

変遷

メモ帳 (Windowsでhtmlタグをポチポチ書いてた)

Gedit(大学のマシンに入ってたのでこれでcshとか書いてた)

emacs(大学のマシンに(略))

xyzzyemacs慣れしてきたので家のノートPCでも使いたくなった)

Eclipse(研究用、C++emacsを全く使いこなせてないことに気づいたので導入)

Visual Studio(共同研究先の研究室でWindows借りた時に使わせてもらった、Eclipseとのあまりに違いに愕然とした)

NetBeans(自研究室に戻ってより良い無料IDEを探した結果、Eclipseより若干動作が軽い気がした)

Vim(ある程度慣れると当時のEclipse/Netbeansより100倍体験がよかった)

Eclipse(仕事始めてなんとなくIDEに戻った)

Sublime Text(軽さだけを求めていた、PHPくらいなら普通に書けた)

Vim(NERDTreeさえあればPHPくらい書けるという感じで久々に触ったら気持ちよかった。しばらくはこれ)

Atom(なんか良さそうに思えたのでしばらく使ってみたが、どんどん重くなって使い物にならなくなってしまった)

PhpStorm(Eclipseとのあまりの違いに(略

しばらくJetBrains製品... IntelliJ, RubyMine, GoLand, CLionなど

VS Code(話題になってたのでしばらく使ってた、あとフロントエンド用)

IntelliJJavaはこれじゃないと書ける気がしないし、やっぱJetbrainsは良い)

VS Code(お仕事でTS書くようになったので、WebStormよりこっちを選んでみた。皆使ってるし)

こんな感じ。

こう見ると相当ふらふらしてるな…これだけ色々使ってても特にいいことがないので、今後は全言語VS Codeで書けるようになりたいなあ。現実的なのかはよく分からないけど。