ダッシュで奪取

ゲーム、読書、人生

中学校の数学を復習した

前回 kyoruni.hatenablog.com

中学校3年ぶんの数学を学び直しました。使った書籍はこちらです。

個人的に一番の収穫だったのは(上記の本に書いてあったことではありませんが)、「式の展開に使う公式を覚えていなかったら、普通に分配法則で展開すればよい」「2次方程式について、解の公式を覚えていなくても平方完成で解ける」ことでしょうか。※平方完成という言葉は今回初めて知りました。どこかでやっていた……?記憶がない

今までの自分は、わからない → 解答・解説を見る → 解説には「解の公式を使って、○○」と書いてある → 「解の公式とやらを覚えていないから、この問題は解けないな」と完全に諦めてしまっていました。式の展開とか因数分解もそうでした。公式がわからないと終わりだと思い込んでいたんですよね。

公式を使うより時間も手間もかかるかもしれませんが、公式を覚えるよりは、操作の手順を覚えるほうが個人的には楽でした。諦めて飛ばしていた問題が自分の力で解けるのはすごい楽しかったです。この体験を中学生のときにしていたら、数学への苦手意識をこんなに持つこともなかったのかなぁ

次は高校1年生の範囲に進みます。そろそろ完全初見の範囲になってくるのでちょっと不安です!

『Software Design 2023年11月号』を読んだ

第1特集 理想のコンテナイメージを作る

  • Dockerfile内のCOPYしたファイルをRUNでrmしていても、レイヤーに残っていることがある
    • マルチステージビルドすると、最後にできたイメージ以外は削除されるので対策になる
  • イメージのタグ指定
    • 厳密にやるなら、v1.0などタグ指定するのではなくハッシュ値を指定したほうがよい
    • Docker Hubなどでは、同じタグに複数プッシュできる…同じバージョンでも、中身が違う可能性もある
      • そうなのか……!
  • ツールの紹介
    • Trivy
      • スキャンツール
      • 拡張機能としても提供されている
    • Hadolint
      • Dockerfileのバリデータ
      • VSCodeの拡張機能も提供されている
    • Dive
      • イメージやレイヤの中身を、lsやtreeのように確認できる
      • 何かのアーカイブファイルが残っていたりしないか見たりする

第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 ファイルのもので二重にデータベース作成しようとして怒られるので注意
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を削除した場合データもまるごと消えるので、ちゃんとした開発で使うときはマイグレーションの仕組みを作った方がよさそう(今回は立ち上げたかっただけなのでやらない)

参考URL