意識
- 過去を忘れて今に集中する
音楽から学んだこと
- 忘れないうちに書いておく
- 本当に細かいところをいかに上手に作るのか、というのがとても大切だということを学んだ
- 一つ一つは地味過ぎて、「それなところにこだわってるんですか?」というようなことでも、積み重なると雲泥の差になる
- リードのアーティキュレーション、和音の積み方、音の長さ、切れ方、リリースの感じ、音の強弱
- 素人はただ打ち込んで細かいところの調整をしないから素人くさい音になる
- 神は細部に宿ると言うけど、音楽ではそれが本当に大切だと感じた
- で、それを開発にも応用できるんじゃないかと思って、そういう意識で作ってみようと思って開発に戻ってきた
- 最近ボーカルの人が歌うときのアーティキュレーションについて話てたけど、
- めちゃめちゃ細かいところを意識してやっていることがわかった
- 以前は音程があってればいいだろと思ってたけど、それだけじゃなくて
- 裏声なのか地声なのかその間なのか、歌詞の本当に細かいところで声を使い分けたり
- 本当に歌が上手い人は、そういう細かいところに気をつけて売ったってるんだなと
学び
Vim
- ciq
- c-j c-e
- c-k c-y
Emacs
- ⌥→: 単語ごとにカーソルを移動(vim での
w
に似てる) - ⌥⌫: 単語ごとに削除
Domain Modeling Made Functional - Scott Wlaschin - KanDDDinsky 2019
- ドメインコードは、プログラミングの “Jargon” を含まない、現実世界のドメインモデルのコード表現
- ドメインモデリングのツールとしての型
- 電話番号やメールアドレスを、ただの数字、文字列として定義するのではなく、
type PhoneNumber = number
としてモデル化する- 電話番号は確かに数字ではあるが、だからといって2倍したり足し算ができたりはしない
- つまり、コンピューター的にはただの数値ではあるが、モデルの世界ではそれは計算可能な数値ではなく”電話番号”という電話をかけるための数値
- バリューオブジェクトとはそういうことか
TypeScript ではこれはエラーがでない
type PhoneNumber = number
type JustNumber = number
const num: JustNumber = 10
// PhoneNumber に JustNumber を入れてもエラーは出ない
const phone: PhoneNumber = num
⇒ Branded Type
Improve Runtime Type Safety with Branded Types in TypeScript
declare const __brand: unique symbol;
type Brand<B> = { [__brand]: B };
export type Branded<T, B> = T & Brand<B>;
type PhoneNumber = Branded<number, "PhoneNumber">;
type JustNumber = Branded<number, "JustNumber">;
const num: JustNumber = 10 as JustNumber;
// エラー
const phone: PhoneNumber = num;
// これもエラー
const phone: PhoneNumber = num as PhoneNumber;
- また、電話番号はただの
number
ではなくフォーマットを持っている- 数字の長さ、ハイフン区切り、国の識別番号
- だから、
PhoneNumber
な変数を作る際に、バリデーションをする
const createPhoneNumber = (n: number) => ...
ベジェ曲線
- ベジェ曲線の練習
- 点は東西南北の極点に置く
- ハンドルは水平に伸ばす
- ハンドルの長さはなるべく同じくらいの長さになるように
- ハンドルで曲線を変えようとするだけでなく、頂点の位置を変えることによって曲がり方を変える
Bézier Curves and Type Design: A Tutorial
- セクション 7
- カーブの方向が変わるところではポイントを打つ
- それぞれのカーブは一方向のみにカーブするようにする