底辺SE奮闘記

年収300万SEブログ

【Supabase】supabase functions deployに「failed to start docker container」で失敗する件

現象

Dockerを起動しているのに、

npx supabase functions deploy

を実行してもデプロイができない。なんなら下記のようなエラーが表示される。

failed to start docker container: Error response from daemon: failed to initialize logging driver: dial tcp 127.0.0.1:54328: connect: connection refused

解法

色々調べたところ、私の場合はconfig.tomlの下記部分が悪かったようです。

# 143行目付近
[analytics]
enabled = true

これをfalseにすることでエラーがなくデプロイできるようになりました。めでたしめでたし。

【Supabase】ローカル環境のEdge FunctionsからDatabaseに接続できなかった件

マニュアルを読んでいる方達ならこんなので詰まることはないのですが...

現象

ローカル環境のSupabase Edge Functionsから同じくローカル環境のSupabase Databaseに接続しようとすると下記エラーが出る。

{"message": "TypeError: error sending request for url (http://127.0.0.1:54321/rest/v1/xxxxx?select=*): error trying to connect: tcp connect error: Connection refused (os error 111)"},

環境

・Supabase 1.153.4

結論 1

Supabaseが用意してくれている環境変数(Deno.env.get("SUPABASE_URL")及びDeno.env.get("SUPABASE_ANON_KEY"))をちゃんと使いましょう。

以下、最低限の接続コード。

import { createClient } from 'https://esm.sh/@supabase/supabase-js@2'

Deno.serve(async (req) => {

    const supabase = createClient(
        Deno.env.get("SUPABASE_URL"),
        Deno.env.get("SUPABASE_ANON_KEY"),
    )

    const { data, error } = await supabase
    .from('hoge_table')
    .select("*")

    return new Response(
        JSON.stringify(data),
        { headers: { "Content-Type": "application/json" } },
    )
})

結論 2

何かしらで環境変数が利用できない場合は、SUPABASE_URLを下記3種類を試して、繋がるやつを利用しましょう(開発者の環境によって正解が異なる)。

【VisualStudioCode / PlantUML】Warningを放置してたらプレビューが表示されなくなった件

いつもお世話になっている下記プラグイン

marketplace.visualstudio.com

プレビュー時でも、レンダリング時でも下記Warningがずっと出ていました。

Warning: the fonts "Times" and "Times" are not available for the Java logical font "Serif", which may have unexpected appearance or behavior. Re-enable the "Times" font to remove this warning.

これを放置していたら、2024年4月3日現在、プレビュー機能が完全に死んでしまいました(なぜかpng吐き出しなどは引き続き可能)。

焦りましたが、下記Warningが示す通り、Timeフォントをネットから探し出してきてインストールしたら、問題は解決しました。

【lllyasviel / stable-diffusion-webui-forge】Intel Mac 動作報告

github.com

先日から話題のlllyasviel 氏の stable-diffusion-webui-forge ですが、

いつもの Intel Mac(下記参照)で動作確認をしました。

uma-no-kawa.hateblo.jp

結論

Intel Macでは特に速度面等での恩恵は得られませんでした

むしろ最適化したWebUIの方がやや早い気がしました(起動オプション調査不足)。

なお、起動オプションは初期状態のままではメモリ不足エラーがでますので、最低でも下記のような状態に変更必須でした。

export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --all-in-fp16 --use-cpu interrogate"

表にまとめます。

要素 所感
起動 WebUIと比べるととても早い。拡張機能の数の差かも
速度 WebUIと同速かやや遅い
生成サイズ 1024 * 1024 不可(--always-offload-from-vram 付与状態込)

何か見つけたらまた追記します。

【React / iOS】useStateで増減するinput要素にフォーカスを当ててキーボードも表示させる

困りごと

ReactでuseState管理されているinput要素が増えた時に、その増えたinput要素にフォーカスを当てたい、というニーズは結構あるように思います。

Androidは比較的素直かと思いますが、(少なくともiOS16.6の)iOSSafariではフォーカスは当たるものの、仮想キーボードが表示されないという困った現象が発生します。

それを解消を目指します。

検証環境

問題があるコード

import React, { useEffect, useRef, useState } from "react";

/** サンプル用アイテム */
interface Item {
    id : number
    name : string
}

const App = () => {

    const [items, setItems] = useState<Item[]>([])

    useEffect(() => {
        // アイテムが増えたらフォーカスする(減少にも反応するがそこは良しなに)
        const element = document.getElementById("input-" + items.length)
        if (element) {
            element.focus()
        }
    }, [items])

    /** 追加ボタンクリックイベント */
    const onClickButton = () => {
        setItems(old => {
            return [...old, {
                id : old.length + 1,
                name : "Hoge"
            }]
        })
    }

    return <>
        {items.map(item => {
            return <div key={item.id}>
                <input id={"input-" + item.id} type="text"></input>
            </div>
        })}
        <button onClick={onClickButton} type="button">追加</button>
    </>
}

iOSで閲覧するとわかると思いますが、フォーカスは当たるもの仮想キーボードが表示されません。

作戦

ダミーのテキストフィールドに一瞬フォーカスを当てて、フォーカスを当てたい要素に改めてフォーカスを当てる。

ダミーテキストフィールドを上手く隠せたらよかったのですが、display:noneにするとそもそもフォーカスが取れなくなるので、そこは辛いところ。

width,heightを1pxにするなど上手く隠すか、最初から表示されている何か別のテキストフィールドをダミーテキストと使うと良いかと思います。

キーボードが表示されるコード

import React, { useEffect, useRef, useState } from "react";

/** サンプル用アイテム */
interface Item {
    id : number
    name : string
}

const App = () => {

    const [items, setItems] = useState<Item[]>([])

    useEffect(() => {
        // アイテムが増えたらフォーカスする(減少にも反応するがそこは良しなに)
        const element = document.getElementById("input-" + items.length)
        if (element) {
            element.focus()
        }
    }, [items])

    /** 追加ボタンクリックイベント */
    const onClickButton = () => {
        setItems(old => {
            // 加筆文
            if (refDummyInput.current) {
                refDummyInput.current.focus()
            }
            // 加筆文 ここまで
            return [...old, {
                id : old.length + 1,
                name : "Hoge"
            }]
        })
    }

    // 加筆部分
    const refDummyInput = useRef<HTMLInputElement>(null)

    return <>
        {/* 加筆部分 */}
        <div>
            <input type="text" placeholder="ダミー" ref={refDummyInput}></input>
        </div>
        {/* 加筆部分 ここまで */}
        {items.map(item => {
            return <div key={item.id}>
                <input id={"input-" + item.id} type="text"></input>
            </div>
        })}
        <button onClick={onClickButton} type="button">追加</button>
    </>
}

【Storybook7 / msw】import {"rest"} from "msw"でエラーが発生するも直す話

時期的に今しか起こらないエラーかもしれませんが、メモとして残します。

新規インストールしたStorybook7に、公式ドキュメントにしたがってmsw-storybook-addonを導入しようとしました。

公式ドキュメントにはこうありました。

npm i msw msw-storybook-addon -D

今現在(2023/11/02)、上記コマンドを実行するとmswが2系でインストールされてしまうため、正常に動作しません。

ですので、下記のようにします。

npm i msw@^1.3.2 msw-storybook-addon -D

以下、最低限のmsw実行のためのコード

preview.js

import {initialize, mswLoader} from "msw-storybook-addon" // 追加

initialize() // 追加

export const parameters = {
  actions: { argTypesRegex: "^on[A-Z].*" },
  controls: {
    matchers: {
      color: /(background|color)$/i,
      date: /Date$/,
    },
  },
  layout :"fullscreen"
}

export const loaders = [mswLoader] // 追加

HogeHoge.stories.tsx

import { HogeHoge } from "./HogeHoge"
import { StoryObj } from "@storybook/react";
import { rest } from "msw" // 追加

export default {
    title : "ほげほげ",
    component: HogeHoge,
};

type Story = StoryObj<typeof HogeHoge>;

export const Base : Story = {
    parameters : {
        // 追加
        msw : {
            handlers : [
                rest.get("/api/hogehoge", (req, res, ctx) => {
                    return res(
                        ctx.json({
                            items : [{
                                id : 100,
                                name : "hoge"
                            }, {
                                id : 200,
                                name : "fuga"
                            }]
                        })
                    )
                })
            ]
        }
    }
}

【AUTOMATIC1111 / stable-diffusion-webui v1.4.1】Intel Mac 最適化

20230817現状、個人的に最速で生成される状態をメモ

環境

環境はこちらと同じなので参照されたし。

uma-no-kawa.hateblo.jp

対応

下記ファイルを修正。

webui-macos-env.sh

14行目付近のCOMMANDLINE_ARGSを変更する。

export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --opt-split-attention-v1 --opt-sub-quad-attention --use-cpu interrogate"