底辺SE奮闘記

年収300万SEブログ

【Laravel12】BitbucketPipeline上のテストだけ、Inertia page component file [***] does not exist.で失敗する。

結論

Laravel12にはconfig/inertia.phpが存在しないが、作成し下記のコードを記述

<?php
return [
    'testing' => [
        'ensure_pages_exist' => true,
        'page_paths' => [
            resource_path('js/pages'), // たぶんここのpagesの大文字小文字の関係でエラーが出ているため、自身の環境に合わせて変更する。
        ],
        'page_extensions' => ['js', 'jsx', 'svelte', 'ts', 'tsx', 'vue'],
    ],
];

【AUTOMATIC1111 / stable-diffusion-webui】Intel MacでのHandRefiner時エラーを無理やり修正

現象

Intel MacでStableDiffusionWebUIのHandRefinerを実行しようすると下記エラーが発生し、手の修正が行われない。

NotImplementedError: Could not run 'aten::empty.memory_format' with arguments from the 'SparseMPS' backend. This could be because the operator doesn't exist for this backend, or was omitted during the selective/custom build process (if using custom build).

注意 Attention

正当な方法はおそらくWebUIおよびControlNetのバージョンアップです。

ControlNetの最新のリポジトリを確認すると、下記コードと違うようでしたのでたぶん修正されているのではないでしょうか(確認していません)。バージョンアップで様子見するのがおそらく一番良いです。

下記修正を採用される際は自己責任でお願いします。

なお、下記修正はControlNet内のコードを直接編集するため、ControlNetのバージョンアップをするとリセットされます。

環境

スペック
ハード MacBook Pro 16-inch 2019
CPU 2.6 GHz 6コアIntel Core i7
グラフィック AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB
メモリ 16 GB 2667 MHz DDR4
OS macOS Ventura 13.3.1
Python 3.10.8
Stable Difussion WebUI v1.6.0
sd-webui-controlnet 更新日:2024-01-29 08:15:41

修正

extensions/sd-webui-controlnet/scripts/processor.pyの835行目付近HandRefinerModelクラスのinitメソッドを下記のように修正します。

class HandRefinerModel:
    def __init__(self):
        self.model = None
        self.device = devices.get_device_for("controlnet")
        # 下記を追記
        if self.device.type == "mps" :
            self.device = torch.device("cpu")

    # __init__ ここまで
    def load_model(self):
        # 後続のコード...

【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>
    </>
}