t_wの輪郭

リンク日記RSS
あれ

あれ

2024/10/1 17:19:00

明治神宮のフードコートの醤油ラーメンがなんか脳にこびりついて離れない。食べたい。

特徴のない醤油ラーメンだったと思うんだけど、なんか良い印象が残り続けてる。

あれ
あれ

あれ

2024/9/30 16:18:00

治安の悪い群体


ネット上の炎上の予測って、台風の予測みたいな雰囲気あるかも


ネットを漂う粒子となりて


熱と圧力の伝播が台風を形づくり、怒りと情報の伝播が炎上を形づくっている

あれ
あれ

あれ

2024/9/30 10:36:00

DuckDB supports the dot syntax for function chaining. This allows the function call fn(arg1, arg2, arg3, ...) to be rewritten as arg1.fn(arg2, arg3, ...). For example, take the following use of the replace function:

SELECT replace(goose_name, 'goose', 'duck') AS duck_name
FROM unnest(['African goose', 'Faroese goose', 'Hungarian goose', 'Pomeranian goose']) breed(goose_name);

This can be rewritten as follows:

SELECT goose_name.replace('goose', 'duck') AS duck_name
FROM unnest(['African goose', 'Faroese goose', 'Hungarian goose', 'Pomeranian goose']) breed(goose_name);

Uniform Function Call Syntaxだ!!

あれ
あれ

あれ

2024/9/29 14:32:00

一週間前に書いてたコードの内容を忘れた。見ても脳が拒否反応を起こしているのを感じる。

「sherpa-onnx-node」で音声認識をしようとして諦めた痕跡がある。


おらってやったら、なんか音声認識ができるようになったっぽい。なんやねん。

あれ
あれ

SQLでひらがなをカタカナに変換するやつ

2024/9/29 11:57:00
WITH hira_to_kata as MATERIALIZED (
					SELECT hira, kata
					FROM (
						SELECT 'あ' as hira, 'ア' as kata
						UNION SELECT 'い' as hira, 'イ' as kata
						UNION SELECT 'う' as hira, 'ウ' as kata
						UNION SELECT 'え' as hira, 'エ' as kata
						UNION SELECT 'お' as hira, 'オ' as kata
						UNION SELECT 'か' as hira, 'カ' as kata
						UNION SELECT 'き' as hira, 'キ' as kata
						UNION SELECT 'く' as hira, 'ク' as kata
						UNION SELECT 'け' as hira, 'ケ' as kata
						UNION SELECT 'こ' as hira, 'コ' as kata
						UNION SELECT 'さ' as hira, 'サ' as kata
						UNION SELECT 'し' as hira, 'シ' as kata
						UNION SELECT 'す' as hira, 'ス' as kata
						UNION SELECT 'せ' as hira, 'セ' as kata
						UNION SELECT 'そ' as hira, 'ソ' as kata
						UNION SELECT 'た' as hira, 'タ' as kata
						UNION SELECT 'ち' as hira, 'チ' as kata
						UNION SELECT 'つ' as hira, 'ツ' as kata
						UNION SELECT 'て' as hira, 'テ' as kata
						UNION SELECT 'と' as hira, 'ト' as kata
						UNION SELECT 'な' as hira, 'ナ' as kata
						UNION SELECT 'に' as hira, 'ニ' as kata
						UNION SELECT 'ぬ' as hira, 'ヌ' as kata
						UNION SELECT 'ね' as hira, 'ネ' as kata
						UNION SELECT 'の' as hira, 'ノ' as kata
						UNION SELECT 'は' as hira, 'ハ' as kata
						UNION SELECT 'ひ' as hira, 'ヒ' as kata
						UNION SELECT 'ふ' as hira, 'フ' as kata
						UNION SELECT 'へ' as hira, 'ヘ' as kata
						UNION SELECT 'ほ' as hira, 'ホ' as kata
						UNION SELECT 'ま' as hira, 'マ' as kata
						UNION SELECT 'み' as hira, 'ミ' as kata
						UNION SELECT 'む' as hira, 'ム' as kata
						UNION SELECT 'め' as hira, 'メ' as kata
						UNION SELECT 'も' as hira, 'モ' as kata
						UNION SELECT 'や' as hira, 'ヤ' as kata
						UNION SELECT 'ゆ' as hira, 'ユ' as kata
						UNION SELECT 'よ' as hira, 'ヨ' as kata
						UNION SELECT 'ら' as hira, 'ラ' as kata
						UNION SELECT 'り' as hira, 'リ' as kata
						UNION SELECT 'る' as hira, 'ル' as kata
						UNION SELECT 'れ' as hira, 'レ' as kata
						UNION SELECT 'ろ' as hira, 'ロ' as kata
						UNION SELECT 'わ' as hira, 'ワ' as kata
						UNION SELECT 'を' as hira, 'ヲ' as kata
						UNION SELECT 'ん' as hira, 'ン' as kata
						UNION SELECT 'ー' as hira, 'ー' as kata

						UNION SELECT 'が' as hira, 'ガ' as kata
						UNION SELECT 'ぎ' as hira, 'ギ' as kata
						UNION SELECT 'ぐ' as hira, 'グ' as kata
						UNION SELECT 'げ' as hira, 'ゲ' as kata
						UNION SELECT 'ご' as hira, 'ゴ' as kata

						UNION SELECT 'ざ' as hira, 'ザ' as kata
						UNION SELECT 'じ' as hira, 'ジ' as kata
						UNION SELECT 'ず' as hira, 'ズ' as kata
						UNION SELECT 'ぜ' as hira, 'ゼ' as kata
						UNION SELECT 'ぞ' as hira, 'ゾ' as kata

						UNION SELECT 'だ' as hira, 'ダ' as kata
						UNION SELECT 'ぢ' as hira, 'ヂ' as kata
						UNION SELECT 'づ' as hira, 'ヅ' as kata
						UNION SELECT 'で' as hira, 'デ' as kata
						UNION SELECT 'ど' as hira, 'ド' as kata

						UNION SELECT 'ば' as hira, 'バ' as kata
						UNION SELECT 'び' as hira, 'ビ' as kata
						UNION SELECT 'ぶ' as hira, 'ブ' as kata
						UNION SELECT 'べ' as hira, 'ベ' as kata
						UNION SELECT 'ぼ' as hira, 'ボ' as kata

						UNION SELECT 'ぱ' as hira, 'パ' as kata
						UNION SELECT 'ぴ' as hira, 'ピ' as kata
						UNION SELECT 'ぷ' as hira, 'プ' as kata
						UNION SELECT 'ぺ' as hira, 'ペ' as kata
						UNION SELECT 'ぽ' as hira, 'ポ' as kata
					)
				),

使い方はこうでござる。
いや、まあ、うん、普通にプログラム書けってかんじだ。

WITH RECURSIVE kata as (
					SELECT
						'' as kata,
						0 as index

					UNION

					SELECT
						CONCAT(kata.kata, hira_to_kata.kata) as kata,
						kata.index + 1 as index
					FROM given, kata, hira_to_kata
					WHERE true
						AND given.text[kata.index + 1] = hira_to_kata.hira
				)

SELECT kata
			FROM kata, given
			WHERE true
				AND kata.index = LENGTH(given.text)
あれ
あれ

あれ

2024/9/29 7:35:00

こいつを実行するとな、

WITH RECURSIVE
	given AS NOT MATERIALIZED (
		SELECT ? as text
	),
	token AS MATERIALIZED (
		SELECT
			LENGTH(given.text) AS tail,
			0 as head,
			RIGHT(LEFT(given.text, tail-head), tail) AS chunk,
		FROM
			given
		
		UNION

		SELECT
			token.tail - 1 AS tail,
			0 as head,
			RIGHT(LEFT(token.chunk, tail-head), tail) AS chunk,
		FROM
			token
		WHERE
			tail > 0

	)
SELECT * FROM token;

こうなるんじゃ

[
  {
    tail: 4n,
    head: 0,
    chunk: "test",
  }, {
    tail: 3n,
    head: 0,
    chunk: "test",
  }, {
    tail: 2n,
    head: 0,
    chunk: "tes",
  }, {
    tail: 1n,
    head: 0,
    chunk: "te",
  }, {
    tail: 0n,
    head: 0,
    chunk: "t",
  }
]

素直にプログラミング言語でfor文をまわす方が簡単じゃな。

あれ
あれ

あれ

2024/9/29 7:09:00

SKKサーバーに文節機能つけたろwwwww

SQLで分かち書きしたろwwwww

WITH RECURSIVE hoge AS MATERIALIZED濫用部になってる。


「SQLで分かち書きしようとする人、全員バカです」になってる。大変すぎる。

あれ
あれ
あれ
あれ

skk_server.ts

2024/9/28 17:53:00
import { db_get } from "@/db";
import { decode, encode } from "./euc_jp";

Bun.listen({
	hostname: "localhost",
	port: 1178,
	socket: {
		async data(socket, data) {
			console.log(`${data} from ${socket.remoteAddress}`);
			if (data.toString() === "2") {
				socket.write("test/1  ");
				return;
			}
			if (data.toString()[0] === "1") {
				console.time();
				console.log([...data]);
				const points = [
					...(function* () {
						for (let i = 1; i < data.length - 1; i += 2) {
							yield (data[i] << 8) | data[i + 1];
						}
					})(),
				];
				console.log(points);
				const kana = decode(points);
				console.log(kana);
				const body_string = (await henkan(kana)).join("/");
				console.log({ body_string });
				const sample = encode(`1/${body_string}/\n`);
				console.log({ sample });
				socket.write(sample);
				console.timeEnd();
			}
		}, // message received from client
		open(socket) {
			console.log("open");
		}, // socket opened
		close(socket) {}, // socket closed
		drain(socket) {}, // socket ready for more data
		error(socket, error) {}, // error handler
	},
});

async function henkan(kana: string) {
	const uri = "t_w-rinkaku.duckdb";
	console.log("get db");
	const db = await db_get(uri);
	if (!db) {
		throw "no db";
	}

	console.log("query");
	const result = await db.all(
		`
            WITH kana_posts as (SELECT * FROM Post WHERE title LIKE ? ORDER BY LENGTH(title) ASC LIMIT 100)
            
            SELECT Post.title
            FROM Post, kana_posts, PostRelation
            WHERE
                (PostRelation.fg = kana_posts.kno)
                AND PostRelation.bg = Post.kno
                AND Post.title != ''
                AND Post.title != 'あれ'
                AND length(kana_posts.title) >= length(Post.title)
            ORDER BY LENGTH(Post.title) ASC
            LIMIT 1000;
	    `,
		`${kana}%`,
	);

	console.log(result);
	return result.map((post) => post.title);
}

console.log("Listening port is 1178");
あれ
あれ
あれ