あれ
明治神宮のフードコートの醤油ラーメンがなんか脳にこびりついて離れない。食べたい。
特徴のない醤油ラーメンだったと思うんだけど、なんか良い印象が残り続けてる。
明治神宮のフードコートの醤油ラーメンがなんか脳にこびりついて離れない。食べたい。
特徴のない醤油ラーメンだったと思うんだけど、なんか良い印象が残り続けてる。
治安の悪い群体
ネット上の炎上の予測って、台風の予測みたいな雰囲気あるかも
ネットを漂う粒子となりて
熱と圧力の伝播が台風を形づくり、怒りと情報の伝播が炎上を形づくっている
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だ!!
一週間前に書いてたコードの内容を忘れた。見ても脳が拒否反応を起こしているのを感じる。
「sherpa-onnx-node」で音声認識をしようとして諦めた痕跡がある。
おらってやったら、なんか音声認識ができるようになったっぽい。なんやねん。
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)
こいつを実行するとな、
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文をまわす方が簡単じゃな。
SKKサーバーに文節機能つけたろwwwww
SQLで分かち書きしたろwwwww
WITH RECURSIVE hoge AS MATERIALIZED濫用部になってる。
「SQLで分かち書きしようとする人、全員バカです」になってる。大変すぎる。
2024-09-28 22:37
SKKサーバーを建てたい
2024/9/29 0:56:13
疎通までいけた!!
https://misskey.io/notes/9ypwew1qzm9l06u3
2024/9/29 2:47:31
SKKサーバーと通信して漢字かな変換まで行けた!
「ごままよ」が「ゴママヨ」に変換できる!
https://misskey.io/notes/9yq0e0t37u8w09x9
次に転職するときには、4.5時間でSKKサーバーを作れるってスキルセットに書くか。
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");
Next.jsって意外と検索ボリュームが少ないな。
https://trends.google.co.jp/trends/explore?date=all&q=Next.js,Angular,React,Vue&hl=ja
npm trendsでの結果の方が私の肌感覚と一致する
https://npmtrends.com/@angular/[email protected]/qwik-city-vs-astro-vs-next-vs-react-vs-remix-vs-svelte-vs-vite-vs-vue
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だ!!
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)
こいつを実行するとな、
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文をまわす方が簡単じゃな。
SKKサーバーに文節機能つけたろwwwww
SQLで分かち書きしたろwwwww
WITH RECURSIVE hoge AS MATERIALIZED濫用部になってる。
「SQLで分かち書きしようとする人、全員バカです」になってる。大変すぎる。
2024-09-28 22:37
SKKサーバーを建てたい
2024/9/29 0:56:13
疎通までいけた!!
https://misskey.io/notes/9ypwew1qzm9l06u3
2024/9/29 2:47:31
SKKサーバーと通信して漢字かな変換まで行けた!
「ごままよ」が「ゴママヨ」に変換できる!
https://misskey.io/notes/9yq0e0t37u8w09x9
次に転職するときには、4.5時間でSKKサーバーを作れるってスキルセットに書くか。
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");
Next.jsって意外と検索ボリュームが少ないな。
https://trends.google.co.jp/trends/explore?date=all&q=Next.js,Angular,React,Vue&hl=ja
npm trendsでの結果の方が私の肌感覚と一致する
https://npmtrends.com/@angular/[email protected]/qwik-city-vs-astro-vs-next-vs-react-vs-remix-vs-svelte-vs-vite-vs-vue