9/4(水)
仕事中にめまいがした。最初は理由がよくわからなかったが、しばらくすると覚えのある感覚だと気づいた。カフェイン中毒だ。
修論の忙しい時期にも発生していた。僕は仕事中に大量の緑茶を飲むのだが、これからは麦茶にする。別にカフェインが必要で摂取していたわけではないので。
ああ、こうして健康タグの記事が増えていくのだろう…
タグといえば、このブログのカテゴリやタグの使い方がこれで良いのかというのは考えている。普通これらはどう使うものなのだろう。
教えちゃお
9/4(水)
仕事中にめまいがした。最初は理由がよくわからなかったが、しばらくすると覚えのある感覚だと気づいた。カフェイン中毒だ。
修論の忙しい時期にも発生していた。僕は仕事中に大量の緑茶を飲むのだが、これからは麦茶にする。別にカフェインが必要で摂取していたわけではないので。
ああ、こうして健康タグの記事が増えていくのだろう…
タグといえば、このブログのカテゴリやタグの使い方がこれで良いのかというのは考えている。普通これらはどう使うものなのだろう。
未来のある時点に向かって準備しなくてはいけないものが出現したのでなんとなく落ち着かない気分だ。大学にいる頃からこの感覚がひどく苦手で、会社員になるとだいぶ緩和されていたのだが、やはり人生そう甘くはない。毎日死の準備をしながら生きていこうな。
Scalaのクラスはcase classにするとapplyメソッドが自動で生えるのだが、これと合わせてコンパニオンオブジェクトで自前のapplyも実装するとコンパイラがどっちを使うか判断できなくて怒る。
sealed abstract case classという手もあるらしいが、インスタンス化したいクラスなのでこの手は使えない。結局どうにも出来なかったのでcase classにすることをやめた。それほど恩恵を受けていたわけでもないし。
※この記事は『ほろよい もも』を飲んで書かれた。
月の始めに強い意志で(ほぼ)定時退社。制度上定時はないが自分で11時から20時を勤務時間と決めている。
いろいろな事情でSlackのワークスペースが増えてきたのでLinux用のアプリケーションをインストールしたのだが、ワークスペースにログインできずにいる。ブラウザでログインした後アプリケーションに処理が移らない。
仕事でTypeScriptをやってはいるが、趣味開発で初めて裸のtscコマンドによるコンパイルをやった。コンパイルのバージョンがどうなっているのかよくわからない。前者も後者もコンパイルは通るのに前者しか動かなかったりする。
import * as Hoge from "hoge"; import Hoge from "hoge";
完全に酒に酔って意味不明ムーブ繰り出してる。間違ってaccess tokenをpushしてしまったので定石どおりリポジトリ削除→再作成→pushをやったのだが、修正をaddしないままcommit --amendしていたので無意味だった。やり直し。
普段仕事ではTypeScriptを書いているので
const x: "kinoko" | "takenoko" = "kinoko";
みたいなの(Union型という)に見慣れていた。
趣味ではScalaを書いており、同じようなものを書きたくなった。具体的にはActiviryPubのActor Typesを表現するためにApplication, Group, Organization, Person, Serviceのどれかの値(いずれも文字列)をとるという型を作りたかった。
しかし調べてみるとScalaにUnion型はない。自分でパッと思いついたのはcase classだ。ドワンゴのScalaテキストに近い用例が載っている。下にそれを引用する。
sealed abstract class DayOfWeek
case object Sunday extends DayOfWeek
case object Monday extends DayOfWeek
case object Tuesday extends DayOfWeek
case object Wednesday extends DayOfWeek
case object Thursday extends DayOfWeek
case object Friday extends DayOfWeek
case object Saturday extends DayOfWeek
sealed
修飾子をスーパークラス/トレイトに付けることによって、その(直接の)サブクラス/トレイトは同じファイル内にしか定義できない
ので、パターンマッチするときにコンパイラがいい感じにチェックしてくれるというメリットがある。
上記を参考にこんな感じで実装してみた。欲しいのは文字列なので、toStringをoverrideしてクラス名をそのまま取得できるようにした。
objectにするとgetClass.getNameの末尾に$がついてしまうのでinitしている。最後の1文字を除去するというメソッドがある多機能さ、いかにもScalaっぽい。あるいはcase objectじゃなくてcase classにすればこんな小細工は不要だが、パラメータリストが必要になるという面倒臭さがある。どうあるべきなのか、自信ニキは教えてほしい。
もう一つ、これは同僚に教えてもらったものだが、Enum型を使う方法もある。
こちらは採用しなかったのであまり深入りしていない。もしかしたらこっちのほうが良かったかもしれない。いや、いま猛烈にそんな気がしている(表現したいのが単なる文字列なので)。
それにしても大事なのはググり力だ。僕が「Scala ユニオン型」で検索してもいい情報は得られなかったが、「代数的データ型」という言葉を知っていればこの記事に辿り着けただろう。思うに、体系的な勉強は裏切らないのだ。
型の道は深く険しい…
書きました / “株式会社ドワンゴを退職します(6年7か月ぶり2回目) - Kwappa談話室” https://t.co/ucMHUdSWjt
— かっぱ (@kwappa) August 30, 2019
記憶が正しければkwappaさんは僕が最初に会ったドワンゴのエンジニアだ。インターンの面接だったので2017年6月頃だったか。ベテランで年上で上司であることを忘れてしまうような話しやすい雰囲気の方で、それはそうである必要性を認識して努力されていたのだと思う。僕にとってのドワンゴのエンジニアの気質の体現者だ。
株式会社ドワンゴを退職します(5年2ヶ月ぶり1回目) https://t.co/5S9CskbMAJ
— kinoppyd (@GhostBrain) August 30, 2019
おそらく僕は認知されていないが、僕はkinoppydさんを認知している。なぜならSlackで存在感を放ちイベントを主催していたからだ。詳しくは言えないが社員同士がお互いの仕事を理解し仲良くなれる(?)ようなイベントを開いてくださった。それは入社して5ヶ月になる僕が持ち始めた問題意識と重なる。
kwappaさんやkinoppydさんが退職し技術コミュニケーション室がなくなっても、当たり前のように彼らの作った良い文化が継承され育っていくことが望ましいし、僕もその一助になりたい。
突然キーボードの調子がおかしくなり、文字入力が出来なかったり、キーを1つ押すだけでアプリケーションが終了したりするようになった。しばらくは原因がわからず、Vivaldiのバージョンアップが悪かったのかと思ってChromeを起動してみたり、PCを再起動してみたりしていた。
次にキーボードが壊れたのかと思い、サブのキーボードならどうだろうと思って探したら、原因に気づいた。サブのキーボードが繋ぎっぱなしになっていて、その上に荷物が載っていた。常時ShiftかCtrlが押された状態になっていたのだろう。
くだらない話だ。
8/29
月末なので労働時間調整のために早く退勤した。時間が出来たのでDota2を3ゲームやったが全部負けた。自分一人の力ではどうしようもないと感じる負け方だったので辛い。
Scala+Play FrameWorkで作っているアプリケーションでDBの初期化のためにEvolutionsを使おうとしていたのだが
Unexpected exception[JdbcSQLSyntaxErrorException: Table "PLAY_EVOLUTIONS" not found;
というエラーがでてどうやっても解決できなかったので諦めた。情報がなさすぎる。
Evolutionsを使わなくても、適当なクラスのコンストラクタでcreate tableすれば済む話だった。ちゃんと公開するときはDBは別で作ればいいし。
タイミングの妙で退勤が遅くなる日が続いてしまい、それでも毎日やりたいことはやるとすると睡眠時間にシワ寄せがくる。会社員になってから睡眠時間が短くても(5時間程度)でも日中は支障なく活動できるのだが、やはりダメージはあって集中力が落ちていたり軽い空腹でめまいが起きたりする。
ここ数日は冷やし中華を作っていた。麺を茹でてツナ缶・カット野菜を雑に乗せるだけでいい感じになる。
ああ、この先の人生、どんどん健康タグの出番が増えていくのだろう。
Macは日本語入力と英語入力にそれぞれキーが割り振られており、そのキーを押せばその入力メソッドになることが保証される。一方でUbuntuはデフォルトだと一つのキーを押すことで切り替わる。これだと今どちらの入力メソッドが有効になっているかわからない。
入力メソッドの設定→全体の設定→Show Advanced Options
「入力メソッドをオンに」/「入力メソッドをオフに」にそれぞれ好きなキーを設定する。僕はMac風にスペースキーの左右のキーを当てた。使ってなかったし。
使ってない、使いみちのわからないキー、あるよね。