iOS Safariでvideo要素に設定した動画が表示されない
<input type="file”>で同じファイルを選択できるようにする - なんでもノート に続きtipsの4個目。video要素のsrc属性を動的に変更したとき、iOS Safariで動画が表示されない事象に遭遇した。結論としてはvideo要素のsrc属性を動的に変更した場合は、load()メソッドを呼ぶ必要があった。以下、React + TypeScriptのサンプルコード。CodeSandboxを使ってみた(初めて使った)。12行目をコメントアウトすると選択した動画が表示されなくなる(はず)。
<input type="file”>で同じファイルを選択できるようにする
<video>に読み込んだ動画の秒数を取得する - なんでもノート に続きtipsの3個目。でファイルを選択し、再度同じファイルを選択しても1度目のvalueが残ってしまっているため、changeイベントが発火しない。対応方法は2つある。1つ目は1度目のchangeイベントの処理の最後にvalueに空文字列を設定する方法。以下、React + TypeScriptのサンプルコード。
const ref = React.useRef<HTMLInputElement>(null); const onChange = (e: React.ChangeEvent<HTMLInputElement>) => { // ここに処理を書く if (ref.current) { ref.current.value =""; } } // …(略)… <input ref={ref} type="file" onChange={onChange} />
2つ目はclickイベントでvalueに空文字列を設定する方法。以下、React + TypeScriptのサンプルコード。
const ref = React.useRef<HTMLInputElement>(null); const onClick = () => { if (ref.current) { ref.current.value =""; } } const onChange = (e: React.ChangeEvent<HTMLInputElement>) => { // ここに処理を書く } // …(略)… <input ref={ref} type="file" onClick={onClick} onChange={onChange} />
<video>に読み込んだ動画の秒数を取得する
<input type="file">で選択したファイルのサイズを取得する - なんでもノート に続きtips2個目。video要素に読み込んだ動画の秒数を取得する方法。durationchangeイベント発生時にdurationから読み取れる。以下、React + TypeScriptのサンプルコード。
import React, { useRef } from "react"; // …(略)… const ref = useRef<HTMLVideoElement>(null); const onChangeVideoDuration = () => { if (ref.current) { const videoDuration = ref.current.duration; console.log(videoDuration); } } // 任意のタイミングでsrcを変更する const onXXX = () => { if (ref.current) { ref.current.src = "sample.mp4"; ref.current.addEventListener("durationchange", onChangeVideoDuration, { once: true }); } } // …(略)… <video ref={ref} />
<input type="file">で選択したファイルのサイズを取得する
最近使ったtipsを1つずつブログにまとめておこうと思う。1つ目はで選択したファイルのサイズを取得する方法。以下、React + TypeScriptでのサンプルコード。
const onChangeFile = (e: React.ChangeEvent<HTMLInputElement>) => { const fileSize = e.target?.files?.[0]?.size; console.log(fileSize + " Bytes"); } // …(中略)… <input type="file" onChange={onChangeFile} />
技術書を電子書籍から紙書籍に戻した
最後にブログを書いてから3ヶ月も経ってしまった。3ヶ月の間に色々あったがおいおい書いていきたい。
タイトル通り、電子書籍で買っていた技術書を紙書籍で買うようにした。6月から紙書籍を買っている。
電子書籍を買い始めたのは2018年の8月ごろなので、かれこれ4年近くなる。電子書籍を買い始めた理由は2つだったと思う。1つ目は紙の本を外に持ち歩くのは重かったから、2つ目は当時ミニマリストに憧れていたからだったとと思う。
そして最近、電子書籍が売ってない紙の本を読む機会があった。久しぶりの紙の本はとても読みやすく、すぐに読み終えてしまった。技術書も紙にすればもっと読めるんじゃないかと思い、紙で買うことにした。
結果、10日間くらいで2冊も読みきれてしまった。ちなみに呼んだのは以下の2冊。
なぜかは言語化できないのだが、紙の書籍の方が電子書籍より読みやすいと感じた。また、物理的に存在することによる読まなくてはというプレッシャーを感じるので自然と手が伸びた。
一方で場所を取る、どこでも読めるわけではないというデメリットがあり、それらの点については電子書籍の方が優っている。
しかし、総合的に見てインプットの質が上がり、量も増えそうなので技術書は紙で買おうと思う。
Docker ComposeでMySQLを動かしてみた
Docker ComposeでMySQLを動かしてみたのでメモ。
- リポジトリ:https://github.com/azujuuuuuun/try-docker-mysql
- image: https://hub.docker.com/_/mysql
- 環境変数は
.env
ファイルで設定している - ボリュームでMySQLのデータと設定ファイルをマウント
- MySQLの設定ファイルにはデフォルトの認証プラグインを設定している
docker-compose up
で空のデータベースが出来上がった