中学校の数学を復習した
中学校3年ぶんの数学を学び直しました。使った書籍はこちらです。
個人的に一番の収穫だったのは(上記の本に書いてあったことではありませんが)、「式の展開に使う公式を覚えていなかったら、普通に分配法則で展開すればよい」「2次方程式について、解の公式を覚えていなくても平方完成で解ける」ことでしょうか。※平方完成という言葉は今回初めて知りました。どこかでやっていた……?記憶がない
今までの自分は、わからない → 解答・解説を見る → 解説には「解の公式を使って、○○」と書いてある → 「解の公式とやらを覚えていないから、この問題は解けないな」と完全に諦めてしまっていました。式の展開とか因数分解もそうでした。公式がわからないと終わりだと思い込んでいたんですよね。
公式を使うより時間も手間もかかるかもしれませんが、公式を覚えるよりは、操作の手順を覚えるほうが個人的には楽でした。諦めて飛ばしていた問題が自分の力で解けるのはすごい楽しかったです。この体験を中学生のときにしていたら、数学への苦手意識をこんなに持つこともなかったのかなぁ
次は高校1年生の範囲に進みます。そろそろ完全初見の範囲になってくるのでちょっと不安です!
『Software Design 2023年11月号』を読んだ
第1特集 理想のコンテナイメージを作る
- Dockerfile内のCOPYしたファイルをRUNでrmしていても、レイヤーに残っていることがある
- マルチステージビルドすると、最後にできたイメージ以外は削除されるので対策になる
- イメージのタグ指定
- 厳密にやるなら、v1.0などタグ指定するのではなくハッシュ値を指定したほうがよい
- Docker Hubなどでは、同じタグに複数プッシュできる…同じバージョンでも、中身が違う可能性もある
- そうなのか……!
- ツールの紹介
- Trivy
- スキャンツール
- 拡張機能としても提供されている
- Hadolint
- Dockerfileのバリデータ
- VSCodeの拡張機能も提供されている
- Dive
- イメージやレイヤの中身を、lsやtreeのように確認できる
- 何かのアーカイブファイルが残っていたりしないか見たりする
- Trivy
第2特集 個人開発成功の必須条件
- 収益を得たいという気持ちがないため、not for meかなと思った
特別企画 追悼 Bram Moolenaar
- NeoVimが生まれたきっかけや、Bram氏の人となり・エピソードなど
- 例:会議の場所に全然現れず心配していたら、vimリポジトリに新しいコミットが追加された
- おもしろかった
ITエンジニア必須の最新用語解説(179)Bun
- Node.jsの代替として開発された新しいランタイムのこと
なるほど納得Go言語(10)Goにおけるエラー処理(後編)
- エラーはログ出力に埋め込まれて使われることが多い
- エラー文字列は大文字でなく、小文字で始めるのがベター
【Docker】MySQLコンテナのデータベースに初期データを入れたかった
やりたいこと
- ローカルで立ち上げたMySQLコンテナ内のデータベースに、初期データを作りたい
前提
- 公式イメージ(mysql:8.1.0)を使用
- Docker Compose使用
やったこと
/docker-entrypoint-initdb.d/
内の.sql
ファイルはコンテナ初回立ち上げ時に実行されるので、ここにCREATE TABLEやINSERT INTOする.sql
ファイルを入れておく
compose.yaml
- 自分の場合は
./mysql/ddl
配下に.sql
ファイルを入れたので、./mysql/ddl
と/docker-entrypoint-initdb.d/
をマウントした - ファイルは実行してほしい順の連番で作る
- アルファベット順ぽいけど、数字の連番なら確実なのでそうする
- 01_create_database.sql, 02_create_table.sql, 03_insert_data.sql ...
- 環境変数 MYSQL_DATABASEを指定していればその名前のデータベースが自動で作成されるので、CREATE DATABASEは別になくてもよい
- CREATE文は
CREATE DATABASE IF NOT EXISTS
にしておかないと、環境変数に指定したもの +.sql
ファイルのもので二重にデータベース作成しようとして怒られるので注意
- CREATE文は
version: '3.8' services: mysql: build: ./mysql/ tty: true restart: always ports: - "${MYSQL_PORT}:${MYSQL_PORT}" command: --default-authentication-plugin=mysql_native_password volumes: - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf - ./mysql/ddl/:/docker-entrypoint-initdb.d/ - mysql-data:/var/lib/mysql environment: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_HOST: ${MYSQL_HOST} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_PORT: ${MYSQL_PORT} TZ: ${TZ} volumes: mysql-data:
実際のファイルたちは↓にあります github.com
メモ
- テーブルや投入データに変更があった場合は手動で実行する or イメージ消す or volume削除する……の対処が必要
- イメージやvolumeを削除した場合データもまるごと消えるので、ちゃんとした開発で使うときはマイグレーションの仕組みを作った方がよさそう(今回は立ち上げたかっただけなのでやらない)