動かざることバグの如し

近づきたいよ 君の理想に

Rspecでバリデーションエラーのテスト書く時は細かく書け

今まで以下のように書いてたんだけど、これだと必ずしも想定していたバリデーションエラーによってテストが成功していたとは言えなかった。

expect(post).not_to be_valid

バリデーションエラーをRspecで完全一致でテストする場合は以下

expect(post.errors.details).to eq({ title: [{ error: :blank }] })

複数バリデーションエラーが発生しててそのうちの1個含んでいればいいみたいな緩い場合は以下

expect(post.errors).to be_of_kind(:title, :blank)

MacOSでNTPサーバーと同期できない問題

症状

MacOSの日付がズレすぎていてNTPサーバーと同期できない。

手動で正しい日付を設定するも、NTPを有効にするとまた古い日付に戻ってしまう。。。。

解決策

❯ sntp ntp.nict.jp
+0.045303 +/- 0.009303 ntp.nict.jp 133.243.238.164

❯ sudo rm /var/db/timed/com.apple.timed.plist

❯ sudo sntp -sS ntp.nict.jp
+0.045330 +/- 0.009363 ntp.nict.jp 133.243.238.244

❯ ps -ef | grep timed
  266   135     1   0 Sat06PM ??         0:03.97 /usr/libexec/timed
  501 56678 56177   0  1:23AM ttys006    0:00.00 grep --color=auto timed

❯ sudo kill 135

❯ sudo sntp -sS ntp.nict.jp
+0.035891 +/- 0.009336 ntp.nict.jp 133.243.238.164

参考リンク

Rails独自の型をActiveModel::Type::Valueを継承して作成する

環境

やりたいこと

RailsActiveModel::Attributesは本当に便利で ActiveRecordでもDBに紐づかないモデルのActiveModelでも重宝している

ActiveModel::Attributes が最高すぎるんだよな。 #Rails - Qiita

ただ標準で用意されている型の種類が少なく、オリジナルの型を作りたいと思った。

class Post
  include ActiveModel::Model
  include ActiveModel::Attributes
  attribute :category
end

やり方

ActiveModel::Type::Valueを継承したクラスを作成する

config/initializers/my_attribute.rbを作成して以下

例えばカンマ区切りの文字列の場合は自動で区切って配列化してくれる型を作りたいとする

class ArrayOrSingle < ActiveModel::Type::Value
  def cast_value(value)
    if value.is_a?(String) && value.include?(",")
      value.split(",")
    else
      value
    end
  end
end

ActiveModel::Type.register(:array_or_single, ArrayOrSingle)

あとは array_or_single を指定するだけ

class Post
  include ActiveModel::Model
  include ActiveModel::Attributes

  attribute :category, :array_or_single
end

確認

irb(main):003> Post.new(category: "diary").category
=> "diary"
irb(main):014> Post.new(category: "diary,cat").category
=> ["diary", "cat"]

参考リンク

curlでレスポンスヘッダーだけ表示させたい

環境

コマンド

curl -D - -s  -o /dev/null https://turai.work/
HTTP/2 200 
server: GitHub.com
content-type: text/html; charset=utf-8
last-modified: Sat, 10 Feb 2024 03:16:49 GMT
access-control-allow-origin: *
etag: "65c6eaa1-2a4"
expires: Thu, 15 Feb 2024 15:41:47 GMT
cache-control: max-age=600
x-proxy-cache: MISS
x-github-request-id: C156:D7C00:576E26:5B511C:65CE2E62
accept-ranges: bytes
date: Thu, 15 Feb 2024 15:34:05 GMT
via: 1.1 varnish
age: 138
x-served-by: cache-nrt-rjtf7700027-NRT
x-cache: HIT
x-cache-hits: 1
x-timer: S1708011245.076461,VS0,VE1
vary: Accept-Encoding
x-fastly-request-id: 338345ae2b807466a480b2dc413b92b7cd8ab26b
content-length: 676

エイリアスに設定した

alias curl_header='curl -D - -s -o /dev/null'

MacOSでmozcをビルドしてインストール

環境

手順

基本的には 公式README の通りに行えばOK

ビルドするために必要なものをインストール

pip install requests

brew install bazel

ダウンロード

git clone --depth 1 https://github.com/google/mozc.git
cd mozc/src
python build_tools/update_deps.py

いざビルド

python build_tools/build_qt.py --release --confirm_license

MOZC_QT_PATH=${PWD}/third_party/qt bazel build package --config oss_macos -c opt

すげー時間かかる 3421が最大値っぽい

[3,032 / 3,421] 8 actions, 7 running