お得な情報を2つ

1/21(火)

スマホFTJ161BはBluetoothを有効にしているとwifiが断続的にしか通信できなくなる。

Ubuntu18.04+GTX1060でKrita4.2.8を動かすとき、ドライバのバージョンは440だとキャンバスのグラフィックアクセラレーションが効かず、ズームや回転がカクカクになる。435に戻すと直った。

定番外し/F4C3

1/14(火)

今日は昼食を食べに外に出て、いつもの店のいつもは頼まないメニューを頼んでみたのだがやはりいつものメニューのほうが良かった。冒険はリスクを伴う。

今日もぼちぼちOS30日本を進めた。3日目が終了。HLTRETをループするだけの関数をアセンブリで書き、それをCで読み込んで実行するプログラムを書いてコンパイルする。そうしてできたファイルをバイナリエディタで読んでみると、ちゃんと末尾がF4, C3になっていて感動。

もう2時か。さすがに遅い。

『第19回 自作OSもくもく会』に参加した

1/12(日)

https://atnd.org/events/110955

界隈の方に誘われ、同僚とともに参加した。フロントエンドエンジニアの自分が自作OSをやってどうなるのか。まだ初めたばかりなのであまり大きなことは言えないが、低レイヤーでも高レイヤー(?)でも共通する考え方のようなものがあって、低レイヤーの知識を得ることによって物事をより抽象的に捉えられるようになるかもしれないな、という感触がある。

TypeScript Interfaces メモ

1/9(木)

http://www.typescriptlang.org/docs/handbook/interfaces.html

Introduction

  • TSはduck typingでありstructural subtypingである

Our First Interface

  • TSは要求されているプロパティがあるかだけをチェックする

Optional Properties

  • プロパティ名の後ろに?をつけるとoptionalになる

Readonly properties

  • プロパティ名の前にreadonlyをつけると書き換え不可になる
  • ReadonlyArray<T> というやつもあるぞ

Excess Property Checks

  • 要求されているプロパティがあるかだけをチェックする とoptionalを組み合わせると、optional propertyのプロパティ名のtypoが型エラーにならなくなる
  • でもtypoはバグとして検出したい…検出したくない?
  • なのでTSはプロパティ名を手書きする(リテラル)ときは特別に excess property checking をする
    • Object literal may only specify known properties, but 'hoge' does not exist in type 'Fuga'.
  • excess property checking を回避する方法
    • as
    • interfaceの方に [propName: string]: any; を足しておく
    • 一度変数に入れる

生姜湯と化したちゃお/LinuxでDetroit: Become Humanできそう

1/5(日)

ランチに少し歩いたところの家系ラーメンに。味が濃く、魚介の風味もあった。ライスはおかわりはできないので最初に大森で頼むべきだった。銭湯はしょうが湯。早い時間に行ったので混んでいてあまりゆっくりできなかった。

今日が正月休暇の最終日だ。今年は帰省もせず、のんびりとしていた。悪くはなかったが退屈でもあったので、同じ退屈なら帰省してもよかったかもしれない。

法律上今年度中にあと2日休暇を取らねばならない。それとは別に繰り越せない休暇も2日ある。適当な祝日に合わせてどこかでまた9連休を生成することになりそうだ。

LinuxでWindows向けのゲームをやりたいときはLutrisというソフトを使う。Lutrisがなんであるかというのを説明するのは難しいのだが(公式にはgaming platformを名乗っている)、ゲームごとにどのバージョンのwineをどんな設定で使うかというのを管理できるソフトだ。

Detroit: Become HumanのPC版が12月に出ていたらしい。ぜひプレイすべきと勧められていたのと、新年で安くなっていたので購入し、Lutrisでのプレイを試みた。ダイアログに求められるまま依存パッケージをインストールし、d9vkをセットアップした。その結果起動には成功した。FPSも良好だ。しかしWASD移動ができない。キー入力が死んでいるわけではないのだが、ゲーム中に移動だけができない。不思議だ。しかしもう一歩だ。

axios.getの型

1/3(金)

自宅の気温や湿度を表示するwebアプリをいろいろとリファクタリングしていた。APIを叩いたレスポンスには型の保証がないが、 axios.get にジェネリクスを与えておけばその型が来たという想定で書くことができていい感じだった。このコードで渡すジェネリクスを更に外から与えられるT型にしているのは、インフラ層でドメイン層で定義した型を使ってはいけないから(ホンマか?)。

moment.jsはめちゃ便利。JavaScriptの組み込みのURLオブジェクトはパスの結合が便利にできるかと思いきやそうでもない。ホストとパスの結合だけ。

droneで自動デプロイする

12/22(日)

masterにマージするだけでデプロイされてほしかったので。

結論

  • Docker Pipelineでビルドが通るか確認し、OKならSSH PipelineでサーバーにSSH接続してgit clone→docker build→docker runしている。
  • SSH Pipelineはデフォルトでは/tmp下に適当なディレクトリを作ってcloneしてstepを実行していくのだが、サーバーに置いている設定ファイルを使いたい都合でそのデフォルトの挙動を無効にし、cd /home/satoru/workして手動でcloneしている。
  • SSH認証関連の情報はdroneのsecretsに保存してある
    • セキュリティ上の理由で、デフォルトではPRをトリガーにPipelineが実行されるときはsecretsを読み込めないので注意

VPS上でdroneを動かした

12/21(土)

CI環境ほしいので作った。基本的にはこれを読みながら進めるだけ。

結論

  • 単純にドキュメンテーションのdocker runのオプションをdocker-compose.ymlの形式に落とし込んだだけ
  • .env.sampleを.envにコピーして中身を埋める
  • common_linkはVPS上で動かしているnginx-proxyに接続するためのものなので気にしなくていい