またちょっとしたシェルスクリプトを書いた

書いた中身は見せられないんだが、tmuxのペイン分割がとても便利だった。左上・左下・右の3つに分割し、それぞれvim, スクリプトを起動して標準出力を確認, その他必要な情報を集める汎用ペインとして使った。ペイン間の移動をvim式のキーバインディングにしているのも良い。

ただし、prefixキーをCtrl+Tにしているのがちょっとしんどい。自宅で使っているキーボードではCtrlは左下の端にあるので手を結構広げないとCtrl+Tが押せない。一方で会社で使っているMBPはCtrl+Tでも普通に押せる。自宅と家でキーバインドを変えると脳が混乱しそうなのでやりたくない。

今日は理想の日曜日だった。昨日は出かけて疲れたが、今日は自宅にこもって洗濯してひたすらアニメ見てシェルスクリプト書いて銭湯行って、日曜日かくあるべしという感じだった。

DDDDDDDDDD

DDD(ドメイン駆動設計)について『わかる!ドメイン駆動設計 ~もちこちゃんの大冒険~』を読みながら勉強している。言葉からはどういうものかイメージがつかなかったが、ビジネスをプログラムに落とし込むための考え方のようだ。エヴァンズの原典は長大でどのレビューを読んでも「他の本である程度理解してから」と書いてあったし、Kindle Cloud Readerで読めなかったので後回しにした。

抽象的な設計論の勉強と具体的な手を動かすタイプの勉強はどうやって進めていけばいいんだろう。一つずつ倒すのか、平行していくのか。

暑かったり寒かったり

気温は着実に上がりつつある。夏だ。一方でオフィスの僕の席は半袖だと少し寒い。空調が効きすぎるエリアだ。一度出勤したら退勤までオフィスを出ないので寒暖差が辛いということはないが、空調が効きすぎるせいでドライアイが促進されている可能性はありそうだ。

ちょっとしたシェルスクリプトを書いている。他人のプルリクエストをレビューするときに、PRをレビュー用のブランチにcheckoutするのがちょっとした手間になっている。エンジニアはちょっとした手間を放置せず楽になるように頑張る(?)べきだ。

PRのURLからPR番号を抽出さえできればいいのだが、シェルスクリプトは全然わかんないのでクソ酷いことになっている。正規表現もよくわかんない…

ディスプレイを足したい

※この記事は『キリン 新・一番搾り』を飲んで書かれた。

自宅はFHDとWQHDが1枚ずつ。前者は液タブで、後者は入力切替でテレビを見るためにも使っている。この構成だとテレビを見ているときは画面がFHD1枚しか使えない。それではあまりにも貧弱なのでFHDをもう1枚増やしたい。

今日ツクモを見てきた。FHDなら1万円代だ。EIZOのスーパーハイスペックでも4万いかない。だが問題はむしろ机だ。2枚のディスプレイにキーボード・マウスで机の大部分が占領されていて新しいデバイスを置くスペースがない。つまりまずこちらを拡張しないことには先に進めない。

最初は今の机を捨てて巨大な机に入れ替えようかと思ったが、高さの同じ小さい机を買い足して横に並べるという手もある。

問題はもう一つあって、僕は液晶のドット抜けが絶対許せない。WQHDを買ったときはツクモのドット抜け交換保証で1度交換している(店まで持参するのがしんどい)。またそういうガチャをやらなきゃいけないと思うと気が重い。それならいっそのことドット抜けがないことが保証されているEIZOの高級品でもいいかもしれない。EIZOはなんかすごい技術で目に優しいらしい(?)のでドライアイにも優しいかもしれないし。

ドライアイ対策といえば加湿器も欲しくてビックカメラを見たのだが、シーズンが外れているらしくほとんど置いてなかった。しかしオフィスに置くためには効果範囲や稼働音を見極めておきたいのと、amazonの加湿器は治安が悪い(上手い言い方が見つからないんだが、機能をやたらと商品名に並べていて、商品紹介の日本語が怪しく、低評価レビューに信じられないような事象が書かれているものが多い)ので怖い。どこか加湿器を置いている電気屋はないものか。

シャイな皆様

昨日の記事はだいたい2000PV。旬の話題で関係者の僕が書いているのでこのくらいの数字は予期していた。面白いのは、多くの人があの記事を読んでくれたのに、他の記事や僕のプロフィールを読んでくれた人はほとんどいないし、コメントに至っては0件ということだ。バズとはそういうものらしい。

皆様シャイでいらっしゃる。サクラを雇って最初に1つコメントを付けておけば大量にコメントがついていたのかも知れない。

最近は面白い技術遊びをしているのだが色々な事情があって表沙汰にできないのが残念。

散髪ガチャ

近所に安い床屋があることに気づいたのでそこで散髪をした。随分大胆に切られた気がする。1050円。順番待ちエリアにマンガがたくさん置いてあって、高校の帰りに古本屋でマンガを立ち読みしていたことを思い出した。そしてこち亀は圧倒的に面白い。

帰りにスーパーで焼きそばの材料を買ってきた。『おいしい焼きそば』を自称する焼きそばをカゴに入れながら、この商品名によって売上はどのくらい上がるのだろうかと考えていた。『おいしくない焼きそば』よりは売れるだろうか、いや、物珍しさの効果で『おいしくない』方が売れるだろうか。あるいは、おいしくない商品なら『おいしい』の方が売れるというような交互作用が存在するのだろうか。

その後は『30日でできる! OS自作入門』を読み始めた。フランクな文章で読みやすいのだが、実践を重視しているくせにWindowsでフロッピーディスクに焼いて動かすという地獄のような実行方法で、Ubuntuでやるならそこを適宜読み替えていかねばならないのが手間だ。幸い先人は多くいる。

ゆく人くる人

※この記事はビールを2本飲んで書かれた。

という気分になっているのだなあ。

mesoさんには2017年のインターンのときに初めてお会いした。中間発表会に遅れてきたとき、席は用意してあったのに入り口の近くの床に座っていた。当時人事部長という立場にありながら偉ぶらず人を緊張させない振る舞いとしてとても印象に残った。フランクな人柄と組織の中核としての毅然とした態度の両方を尊敬している。

kmizuさんは新卒Scala研修の講師だった。Scalaのことなら何でも知っている。言語の第一人者から教わることで、細かな仕様にも妥当性や事情があることがわかった。動けばいいやのアマチュアではなく、隅々まで理解し尽くしたプロとしての仕事を求められることを実感した。

お二人とも新天地でのご活躍を祈っています。

くる人は誰かって?それは僕です。

houseTemperatureプロジェクトの大詰め

自分の家の天気(気温・湿度・気圧)をRaspberry Piから5分ごとにサーバに送り、それを使っていろいろ遊ぶプロジェクト(github)もそろそろ大詰めだ。使用技術はScala + Play Framework。開発環境にもデプロイにもDockerを利用している。サーバはこのブログと同じさくらのVPSで、nginx-proxyによってサブドメインgyokuroへのアクセスを振り分けている。

ドキュメント

ベースURLはhttps://gyokuro.chao.tokyoで、現状公開しているリソースは以下のとおりだ。

例:
{"status":"200","data":{"time":"00:25:00","temperature":27.7,"humidity":76.7,"pressure":1001.6}}
例:
{"status":"200","data":[{"time":"00:00:00","temperature":27.6,"humidity":76.8,"pressure":1001.7},{"time":"00:05:00","temperature":27.6,"humidity":77,"pressure":1002},{"time":"00:10:00","temperature":27.8,"humidity":76.3,"pressure":1001.9},{"time":"00:20:00","temperature":27.8,"humidity":76.5,"pressure":1001.7},{"time":"00:25:00","temperature":27.7,"humidity":76.7,"pressure":1001.6}]}

iframe化の苦労

WordPressは自由なhtmlをウィジェットに追加できるので、iframeを使って/temperature/nowを常に表示しようと思った。しかしPlay FrameworkはデフォルトでX-Frame-Options: denyが設定されているのでiframeに表示されない。これはクリックジャッキング防止のためだ。クリックジャッキングというのは僕のサイトを透明なiframeにして他のサイトの上に重ねて表示させることで、僕のサイトの任意の箇所を不正にクリックさせる手口だ。

MDNにしたがってX-Frame-Options: allow-from https://example.com/を登録しようと思ったのだが、なんとChromeは対応していない。ブチギレてる。対応してないということで無視されているのでとりあえず動いてはいる。ユーザーがクリックできる箇所はないのでたぶんオッケー(ホンマか?)。

iframeが表示されるようになったはいいが、黒背景に黒文字で表示されていて読めなかった。WordPress側からiframe内のstyleを操作するのは無理っぽかったので上記の通りクエリパラメータで白文字化できるようにして対応した。

頑張って作ったので適当にAPIで遊んでみてください。グラフ化するやつ作ってほしい。

ちなみに現在の状況は27.8 ℃、76.1 %、1001.4 hPa。肌がべたつきやや不快だ。今夜から明朝にかけてすごい降るらしい。通勤はできるかな?

きのこの山/Scalaでアンパックもどき

きのこの山

きのこの山というお菓子を何かと比較する不遜な輩が多くいるようだ。

きのこの山はチョコレートとカリカリが分離している。万事において分離しているというのは大事なことだ。均質ではなく、高いエントロピーの中で異質なものが混じり合う中にこそグラデーションが生まれる。そしてグラデーションの中にこそ精妙な味わいが生まれてくる。

カレーをかき混ぜてはいけないし、丼料理をつゆだくにしてはいけないし、醤油にわさびを溶いてはいけない。それが俺の美意識。

Scalaでアンパックもどき

関数に複数の引数を渡すとき、コレクションをそのまま渡したいことがある。たとえばPythonであれば*を使ってアンパックできる。

Scalaでこれをやりたくで3分ググったところη-expansionを使った方法が見つかった。

(plus _)plusメソッドを関数に変換した後、さらにtupledメソッドによって1つのタプルを引数とする関数に変換している。

正確にはアンパックではないことに気づき、タイトルに「もどき」をつけた。