hogashi.*

日記から何から

 Go 入門したいけど A Tour of Go とかも挫折しまくってる、しかし入門はしたいって会話をして、歯を食いしばって入門している。昔ほど新しいものがすんなり頭に入ってこなくなってしまっている気がする。

 インストール方法はどれがいいのかわかっていない。 brew でも入りそうだけど、何かの拍子に .pkg で入れていたので、同じようにして最新の 1.17.8 にした。(後々 Download and install - The Go Programming Language に気づいたけど、見覚えがあるページだったので、これを見てそうしたのかも。)

 簡単な cli ツールをつくって入門するつもりでいて、 Go CLIツールを作る とかを見ると GitHub - spf13/cobra: A Commander for modern Go CLI interactions がいいという話が出るので使ってみようと思って、 README を眺めると installing とか usage とかがあって便利。
 しかし installing で go get -u したり usage を一通り読んで main.go と root.go をつくったたりしたところで、 VSCode で何か怒られている感じだった。

could not import github.com/spf13/cobra (cannot find package "github.com/spf13/cobra" in any of 
	/usr/local/go/src/github.com/spf13/cobra (from $GOROOT)
	/Users/hogashi/go/src/github.com/spf13/cobra (from $GOPATH)) compiler(BrokenImport)

 自身の cmd/ も import できないらしかったけど、それは ~/go/src にないからということだったので、 ~/ghq から自身を移して参照できるようになった (ghq.root に ~/go/src を追加したけど ghq list に出なくて困っている)。これでも cobra は引き続き参照できていない。

 ところでどうやって実行するのかと思って How To Write Packages in Go | DigitalOcean とかを見ると go run main.go っぽいことがわかってやってみたけど、 go.mod がないので help を読んでねとのことだった。

$ go run main.go 
main.go:4:2: no required module provides package github.com/hogashi/trim-head-space-cli/cmd: go.mod file not found in current directory or any parent directory; see 'go help modules'
$ go help modules
Modules are how Go manages dependencies.

A module is a collection of packages that are released, versioned, and
distributed together. Modules may be downloaded directly from version control
repositories or from module proxy servers.

For a series of tutorials on modules, see
https://golang.org/doc/tutorial/create-module.
(後略)

 Tutorial: Get started with Go - The Go Programming Language を見ると、まさに一通りパッケージをつくって動かすチュートリアルが載っていた。 go mod init すると go mod tidy してくれって出て便利。しかし cobra は見つけられているものの自身を見つけるのに (というか download に?) 失敗していそう。download しているとすれば github からだと思うけど、まだ何も push してないからかなと思ったけど、ここまでのファイルを push しても (すでにダウンロードしてしまっているからか) ダメだった。

$ go mod tidy
go: finding module for package github.com/spf13/cobra
go: finding module for package github.com/hogashi/trim-head-space-cli/cmd
go: downloading github.com/hogashi/trim-head-space-cli v0.0.0-20220305043848-94d507708df9
go: found github.com/spf13/cobra in github.com/spf13/cobra v1.3.0
go: finding module for package github.com/hogashi/trim-head-space-cli/cmd
hogashi/trim-head-space-cli imports
        github.com/hogashi/trim-head-space-cli/cmd: module github.com/hogashi/trim-head-space-cli@latest found (v0.0.0-20220305043848-94d507708df9), but does not contain package github.com/hogashi/trim-head-space-cli/cmd

 go help mod tidy とかしたけどキャッシュを使わないみたいなオプションはなさそう。 ~/go/pkg/mod/ にあったのを発見したので消してみた (ディレクトリの権限が 555 になってて sudo しないと消せなかったけどそういうものなのかな……) けどダメで、 ~/go/pkg/mod/cache にもあるのを発見して消したけどダメだった。多分こんなことはしないはずだから何か手立てがあると思うんだけどわからない。

 十分素朴だろうと思っていたけど、もっと素朴に、自身のパッケージを import しないようなものを書いてみたら良い気はして、一旦全部消して自前でやることにした。

 なんとなく書けたし go run . できたので push して go install してみようとしたら、 go.mod の path がおかしいと言われていそう。

$ go install github.com/hogashi/replace-head-space-cli@latest
go: downloading github.com/hogashi/replace-head-space-cli v0.0.0-20220305065459-102f3c0c0505
go install: github.com/hogashi/replace-head-space-cli@latest: github.com/hogashi/replace-head-space-cli@v0.0.0-20220305065459-102f3c0c0505: parsing go.mod:
	module declares its path as: hogashi/replace-head-space-cli
	        but was required as: github.com/hogashi/replace-head-space-cli

 上のほうで見てたチュートリアルにならって hogashi/replace-head-space-cli ってしてたけど、 go mod init で勝手に書かれる内容に直して push した。もののまだダメで、 go clean とかあるらしいことがわかってやってみたけど依然としてダメそう。どこにキャッシュされているのか、あるいは直す場所が違うのかわからない。

 バージョン番号をちゃんとつけたらひとまず新しいものを取得できるはずと思って、 Publishing Go Modules - The Go Programming Language を見て git tag をつけて go install したら、 latest ではダメ (依然として v0.0.0 を取得してそう) だったけど、 v0.1.0 を明に指定したらちゃんとインストールできた。自前の cli ツールがインストールできるようになって便利。

 つくったのはこれで、行頭の空白文字 (タブと全角空白) を半角空白にそろえるツール。

github.com

 何かの拍子に一瞬目が見えなくなった話題を見かけて、ちなみに今目が見えなくなったらどうするといいのか、と考えていた。固定電話もなく、携帯電話はスマートフォンとなった今、覚えている電話番号にも手で電話を掛けることは困難そう。音声入力はあるけど、普段 Google Assistant は英語の設定にして使っているので、日本語の名前が入った電話帳を呼び出すのは難しいかもしれない。 PC の前に座っていたら、キーボードは手で叩けるけど、家族や友人につながる連絡手段は LINE かメールくらいだから、 Gmail が開けて tab で移動とかしてなんとかメールを出せたらなんとかなるかも (メールで返信されると見れないけど、電話を掛けてもらえば取れはしそう)。よく開くツールであるところの Twitter や Slack を開けても、誰かに何かしてもらえることは少なそう (会社の Slack なら人事の方などに伝わってなんとかなるかも)。
 災害への備えという話題はよく聞くし、大事さは (それなりにでも) わかっているけど、体の不調の中でも得る情報の大部分を担う目を失ったときにどうするかわかっていないことがわかった。雑に「目が見えなくなったら」とかで検索しても、備え的なページはあまり登場しなさそう。早めに医者にかかってくださいみたいなサイトはあるので、素朴に救急車を呼べるといいのかな、とも思うけど、 Google Assistant で緊急通報はできないらしいので、目を閉じてロック画面から手で緊急通報する練習をしておけるといいかもしれない。しかし実際にかかってしまうと困るわけなので、精度を高めるのは難しそう(ネットワークを切ればあるいはできるかも?)。

通話できる相手
重要: 緊急通報は行えません。

Google アシスタント デバイスで電話をかける - Android - Google アシスタント ヘルプ

 携帯も PC も画面を黄色めにして(色温度を下げて?)暮らしていて、眼鏡にもブルーライトカットで黄味がかかっている。携帯で写真を撮ったりすると、眼鏡を通した被写体、携帯の画面に出る写真、家に帰って PC で見た写真など、被写体を裸眼で見るとき以外は黄色めにものを見ていることになる。ただそれに慣れると、実際の色がこれくらいだろうというのはわかってきて、日々の暮らしでは特に支障がない。たまに、これは実際の色をちゃんと見たい!となることはあって、そういうときだけ画面を元に戻すのだけど、本当に慣れきっていたらそういうことは思わないはずで、裸眼でものを見ることもあるからか、黄色めを基準にした相対値ではない、絶対値で色を認識しているようで面白い。

 

雑談の肴になるものがあると気楽に話せる気がする

 よっしゃ雑談するぞ、と思って人と面と向かうと何も思い浮かばない、ということがよくあって、雑談難しいですねって言っていたのだけど、普段自分が自然と雑談していた場面を考えると、雑談以外にやることがあって、たとえば手元にお酒があって飲んでるとか、話しながらゲームやってるみたいなことが多かった。大学の研究室でみんなで飲むときは、 Google Maps国土地理院の地図を開いた PC をプロジェクタで映して、住んでる場所の地形の話とか、電車の通り方の話とか、こないだこの辺歩いてさ〜とかみたいな話をしていて、そこから自然と普段の暮らしや最近の出来事の話につながるという感じだった。

 多分個人的に人に対して世間話を切り出すのが苦手で、脈絡を異常に気にしているからだと思うのだけど、お酒やらゲームやらをきっかけに、そういえば、と切り出すのが話しやすいなと思ってきた。あと話が続かなくて気まずい、みたいなこともあると思ってて、雑談しかやることがないと、ただ何もしてないみたいになって気まずいのだけど、ゲームとかしてるとそっちをやっていたらよくて、なんか思いついたらまた話したら良い、というので気楽な気がする。

 というのを前からなんとなく思っていたんだけど、ちまちま聞き直してる rebuild.fm Rebuild: 300: Note-Taking Nirvana (omo) で、ブログを書いて見てもらったのを前振りにして雑談するという話を聞いて、似た感じかもなと思ってきたのだった。

 ということは、今日はこのページ見ながらなんか喋りますか〜とか、お互いゲームやりながら話そうぜとか、そういう体勢で雑談すると、わざとそうしてるという気持ちはありつつも、それなりにうまく話が弾む気がするし、お互いしばらく黙っても、それぞれが何か見てるターンということで気楽な気がする。地図はやはりおすすめで、お互いが知ってる土地とか行きたい国とかを見て、存在する店や地形、ストリートビューの景色とかを眺めながら、思ったことを訥々と喋ったりすると、それだけでかなり面白い。

CSSで3番目以降を:nth-child(n + 3)で書く

 CSS には :nth-child() - CSS: Cascading Style Sheets | MDN という疑似クラスがあって、何番目の兄弟かを指定できる。 :nth-child(3) とかやると 3番目、みたいな感じで、 1 始まりになっている。

li:nth-child(3) {
  background-color: gold;
  font-size: 2em;
}
  • 恵比寿
  • 大黒天
  • 福禄寿
  • 毘沙門天
  • 布袋
  • 寿老人
  • 弁財天

 これの書き方に :nth-child(2n + 1) みたいなものがあって、こうすると奇数番目だけ指定できる。これは 2n だけじゃなくて、たとえば 5n にすれば 5個おきになる。

li:nth-child(2n + 1) {
  background-color: gold;
  font-size: 2em;
}
  • 恵比寿
  • 大黒天
  • 福禄寿
  • 毘沙門天
  • 布袋
  • 寿老人
  • 弁財天

 そして :nth-child(n + 3) とかすると、 1個おき (3個オフセット) ということで、 3番目以降全部を指定できる。

li:nth-child(n + 3) {
  background-color: gold;
  font-size: 2em;
}
  • 恵比寿
  • 大黒天
  • 福禄寿
  • 毘沙門天
  • 布袋
  • 寿老人
  • 弁財天

 これは面白くて、 :nth-child(-n + 3) とか書くと 1〜3番目だけを指定できる (n が 0 から増えていくので、マイナスをつけておくと、 3 からどんどん減っていく、という感じ)。

li:nth-child(-n + 3) {
  background-color: gold;
  font-size: 2em;
}
  • 恵比寿
  • 大黒天
  • 福禄寿
  • 毘沙門天
  • 布袋
  • 寿老人
  • 弁財天

 注意として、この場合は最初の 3つになるので、 n + 3 の結果を反転させたい場合は -n + 2 と書く必要がある (例でいうと n + 3 でも -n + 3 でも福禄寿が大きい)。

 ブラウザがこういうのをどうやって計算してるのか (特に n とか書いたときいつまで計算したらいいかどう判断してるのかとか) が気になる。