2024年10月時点WebP画像対応のOSブラウザのメモ

2024年10月時点WebP画像対応のOSブラウザのメモ

2024年10月時点WebP画像対応のOSブラウザのメモ
基本ほぼブラウザが対応してきているので大手サイトなどでも問題無いレベルになってきている。

モバイル

モバイルの対応がおそいところだと、Safariの対応が2020年9月で4年以上経過している
その他モバイルはだいぶ前なので問題なさげ

デスクトップ

デスクトップもSafariが maxOS11 Big Sur のSafari14〜サポートリリースが2020年6月と4年以上経過している
その他ブラウザもだいぶ前からなの問題なさげ

参考URL
https://caniuse.com/?search=webp

2024年サファリのシェアまとめ

safari-share

PHPStormでUI(プロジェクトビュー)などの文字サイズの変更方法

PHPStormでUI(プロジェクトビュー)などの文字サイズの変更方法

  • 設定ウィンドウを開く(Cmd+,)
    • Appearance & behavior
      • Appearance
        • Use custom font にチェック、Sizeを選択
Screenshot

Illustratorイラストレーターで画面がちらつくと時の対応(Mac Studio Apple M2 Max)

Illustratorイラストレーターで画面がちらつくと時の対応(Mac Studio Apple M2 Max)

イラレを使ってると原因不明の画面のチラつきあり
画面の拡大、図形の移動などアクションを起こすたびに発生、何もしないと発生しない

対処

イラレを終了、再起動後に、ウィンドウの緑ボタン(全画面ボタン)をクリックで収まる。
発生のトリガーは不明。なんとなくイラレのウィンドウが全画面になっていない際に発生しているような気もする。

環境

  • Mac Studio Apple M2 Max
  • DELL 28 4K (USB-C)
  • LG 28 4K (USB-C)

透明動画をWEBサイトに埋め込む方法2024年10月時点

透明動画をWEBサイトに埋め込む方法2024年10月時点

以下の流れ、

  1. After Effects で透明の動画作成
  2. Media Encoder でアルファチャンネル付きのmov(コーデック:AppleProRes)でレンダリング
  3. ffmpegを使ってwebm(コーデック:vp9)に変換
  4. composerを使ってmov(コーデック:H265)に変換
  5. videoタグで埋め込み

前提知識

  • safari → mov(コーデック:H265)を利用
    • MacOSではAppleProRes再生可だが、iOSではH265でないとだめなため工程4が必要
  • その他 → webm(コーデック:vp9)を利用

1.After Effects で透明の動画作成

コンポジションの背景を透明にしてアニメーション作成

Screenshot

01

Media Encoder のキューに追加

Screenshot

02

2.Media Encoder でアルファチャンネル付きのmovでレンダリング

書き出し形式で “QuickTime” “Alphaを含むAppleProRes4444XQ”を選択してエンコード→mov(コーデック:AppleProRes4444XQ)ができる

Screenshot

03

3.ffmpegを使ってwebm(コーデック:vp9)に変換

ffmpeg -i video.mov -c:v libvpx-vp9 video.webm

4.composerを使ってmov(コーデック:H265)に変換

※composerはMacの有料ソフト、他にフリーなソフトなどもありそうだけど、未検証

4.videoタグで埋め込み

<!-- ※movから先に書く -->
<video muted playsinline autoplay loop width="1080" height="1080">
    <!-- Safari用 -->
    <source src="./video.mov" type="video/quicktime" />
    <!-- その他用 -->
    <source src="./video.webm" type="video/webm" />
</video>

Macで不要(不可視)ファイルを除いてZipする

Macで不要(不可視)ファイルを除いてZipする

例)dataフォルダをdata.zipに圧縮
//ディレクトリを圧縮
$ zip data.zip -r data/ -x "*.DS_Store"
//解答確認
$ unzip data.zip -d test
$ find ./test/data

GoogleAnalytics GA4でカスタムイベントのレポートを作る

GoogleAnalytics GA4でカスタムイベントのレポートを作る

ライブラリを選択

Screenshot

新しいコレクションを作成

任意のコレクション名をつけて、レポートをドラッグ

レポートはイベントのレポート画面で、フィルタなどで絞り込んで新しい名前で保存しておく

コレクションを公開して完了

レイテンシの改善やったこと

レイテンシの改善やったこと

  • LANケーブルを一新CAT6のあまり細すぎないものに変更
  • デバイスマネージャーからネットワークドライバの更新
  • イーサネットのプロパティー
    • QoSパケットスケジューラー 無効
    • Microsoft Network Adapter Multiplexor Protocol : 無効
    • IPV4,V6のDNS変更(googleパブリックDNS)
    • 構成
      • Interrupt Moderation : Disable
      • Speed & Duplex : 最大
      • Receive Buffer : 最大

      – transmit Buffer : 最大

  • TCP Optimizer : カスタムを選択+NetwordAdapterは有線を選択
  • コマンドプロンプトでMTUの設定

MySQLのstrictモードをセッション中解除する

MySQLのstrictモードをセッション中解除する

SET SESSION sql_mode = 'STRICT_TRANS_TABLES'

Laravel FormRequest2段階のバリデーション(パスした後でもう一つチェック

Laravel FormRequest2段階のバリデーション(パスした後でもう一つチェック)をする方法

    protected function passedValidation() //FormRequestのpassedValidationをoverride
    {
        //POSTの場合のみ処理
        //validatorを作成しfail時にValidationExceptionをthrowする
        if (request()->method == Request::METHOD_POST) {

            $validator = Validator::make($this->all(),[
                    'input_name' => [new OriginalRule()]
            ]);
            if ($validator->fails()) {
                throw(new ValidationException($validator))
                ->errorBag($this->errorBag)
                        ->redirectTo($this->getRedirectUrl());
            }
        }
    }

LaravelでCSVのインポート時のバリデーションをFromRequestで完結する方法

LaravelでCSVのインポート時のバリデーションをFromRequestで完結する方法

外部からデータを入れる際のゲートとしてFormRequestにまとめたかった
FormRequestのバリデーション前にCSVを取り込んでパラメータに加えて上げればうまくできた。

//実装例

class ProductRequest extends FormRequest
{

    //バリデーション実行まえにCSVを読み込んでパラメータにセットする。
    protected function prepareForValidation()
    {
        //既存のパラメータを取得しておく
        $params = $this->all();

        //アップロードファイルからエンコードを推定
        $upload = $this->file('csv');
        $detectEncoding = mb_detect_encoding($upload->getContent(), ['SJIS-win', 'SJIS', 'UTF-8'], true);

        //SplFileObjectにしてから読み込んで行く(ExcelCSVのセル内改行など処理etc)
        $csv = new \SplFileObject($upload->path());
        $csv->setFlags(
            \SplFileObject::READ_CSV |
            \SplFileObject::READ_AHEAD |
            \SplFileObject::SKIP_EMPTY |
            \SplFileObject::DROP_NEW_LINE
        );
        $collection = collect();
        foreach ($csv as $value) {
            $collection->add(mb_convert_encoding($value, "UTF-8", $detectEncoding));
        }
        
        //読み込んだデータからパラメータをセット
        $params['header'] = $collection->shift();
        $params['data'] = [];
        $headerNames = ['id','name','price'];
        foreach($collection as $idx1 => $row){
            foreach ($headerNames as $idx2 => $name) {
                $params['data'][$idx1][$name] = $row[$idx2];
            }
        };
        $this->merge($params);
    }


    public function rules(): array
    {
        if (request()->method == Request::METHOD_GET) {
            $rules = [];
        } else {
            $rules = [
                'csv' => ['required', 'mimes:csv', 'mimetypes:text/plain,text/csv'],
                'header' => ['required', 'regex:/^id,name,price$/'],
                'data.*.id' => ['required'],
                'data.*.name'=>['required'],
                'data.*.price'=>['required'],
            ];
        }
        return $rules;
    }

    public function attributes()
    {
        return [
            'csv' => 'CSVファイル',
            'header' => 'ヘッダー行',
            'data.*.id' => '商品ID',
            'data.*.name'=>'商品名',
            'data.*.price'=>'価格',
        ];
    }

}

Page 1 of 46

Powered by WordPress & Theme by Anders Norén