しおメモ

雑多な技術系ブログです。ニッチな内容が多いです。

macのtz databaseが消えたら

一昨日あたり、帰ってきてPCを開いたらシェルの時刻がUTCになってたのですが、原因を調べたところ、Asiaのtz databaseが丸々消えていました(なぜ🤔??)

現象

ls /var/db/timezone/zoneinfo/Asia

何もない(´・ω・`)

/var/db/timezone/zoneinfoからファイルが消えてしまっているので、設定の「日付と時刻」から項目自体は選択できますが、実際には反映されなくなります。
再起動した時にはUTCやロサンゼルス時間など異なる時刻になります。

応急処置

応急処置ですが、/usr/share/zoneinfo.defaultの方にも、おそらくBSD用のものですが、相応のファイルがあるので、こちらをコピーしてきます。

sudo cp /usr/share/zoneinfo.default/Asia/* /var/db/timezone/zoneinfo/Asia

そして、/etc/localtimeシンボリックリンクを貼ります。

sudo ln -sf /var/db/timezone/zoneinfo/Asia/Tokyo /etc/localtime

これで一応は、再起動しても大丈夫です。

帰れないプロジェクトをgitから察知する

あけましておめでとうございます。新年からブラック()なネタです。

基本

git log --pretty='%ai %an' | sort -u -k1,1 | sort -k2 -r | head -20

日ごとに、最終コミットの日時を抽出して、ソートしてワースト20を出力します。

こんな感じ👇

2018-11-16 23:31:59 +0900 Scior
2018-12-09 23:24:22 +0900 Scior
2018-11-14 23:20:11 +0900 Scior
2018-12-13 23:18:00 +0900 Scior
2018-11-13 23:12:08 +0900 Scior
2018-11-30 23:11:14 +0900 Scior
2018-11-12 23:08:47 +0900 Scior

月,年ごと

git log --pretty='%ai %an' | grep 2018-11 | sort -u -k1,1 | sort -k2 -r
git log --pretty='%ai %an' | grep 2018 | sort -u -k1,1 | sort -k2 -r

grepでフィルタリングして、月ごと年ごとに抽出します。

土日出勤

git log --pretty='%aD %an' | grep ^S | sort -u -k1,2 | sort -k4 -r

フォーマットを変えると、SatとSunなので、grep ^Sで拾えます。

残業王決定

git log --pretty='%ai %an' | sort -u -k1,1 | awk '{print($4)}' | sort | uniq -c | sort -r

最後まで残っている回数の多い人を上から表示します。

最後に

健康が一番なので、ヤバいPJからは身を守りましょう💪

DispatchQueueによる非同期処理を見直す

他言語から入ると、一見取っつきづらいDispatchQueueですが、だいぶ浸透してきた気がします。
一方で、簡単にマルチスレッドで非同期処理ができるようになった結果、処理フローの制御がしづらくなったり、 知らないうちに、CPUやメモリリソースを異常に消費したりなど、副次的な問題が出てくることがあります。

それらの問題に対する、解決策を考えてみます。

  • TL;DR
  • GCD復習
  • 問題
  • 方針
    • 本当にasyncが必要なのか考える
    • main.asyncに気をつける
    • QoSを指定する
    • DispatchGroupも使う
  • ダメそうだったら
続きを読む