Skip to content

Instantly share code, notes, and snippets.

View mmyoji's full-sized avatar
🙃

mmyoji mmyoji

🙃
View GitHub Profile
@mmyoji
mmyoji / compare.txt
Created March 28, 2023 10:00
preact vs react
preact 4.2kB (minified + gzipped)
@preact/compat 0.2kB (minified + gzipped)
react 2.5kB (minified + gzipped)
react-dom 42.0kB (minified + gzipped)
vite (react-ts): built index-xxx.js 143.55kB (gzip: 46.17kB)
vite (react-ts w/ @preact/compat) built index-xxx.js 24.24kB (gzip: 9.36kB)
vite (preact-ts): built index-xxx.js 13.53kB (gzip: 5.48kB)
@mmyoji
mmyoji / query.sql
Last active July 1, 2022 02:14
[SQLime] test relation query result
SELECT users.*, posts.*
FROM users
INNER JOIN posts ON posts.user_id = users.id;
@mmyoji
mmyoji / nodejs-hashing-password.ts
Last active June 17, 2022 06:40
Generate encrypted password and verify it with Node.js standard library
# see: https://nodejs.org/api/crypto.html#cryptoscryptpassword-salt-keylen-options-callback
import { scrypt as _scrypt } from "node:crypto";
import { promisify } from "node:util";
const scrypt = promisify(_scrypt);
// e.g.) crypto.ramdomUUID().replace(/-/g, "")
const SALT = "random chars at least 16 bytes";
@mmyoji
mmyoji / limit-concurrency.ts
Last active April 4, 2022 09:02
Run concurrent tasks with limit in TypeScript
type TaskFn<T> = () => Promise<T>;
// see: https://maximorlov.com/parallel-tasks-with-pure-javascript/
async function limit<T>(tasks: TaskFn<T>[], concurrency: number) {
const results: (T | Error)[] = [];
async function run(iterator: IterableIterator<[number, TaskFn<T>]>) {
for (const [index, task] of iterator) {
try {
results[index] = await task();
@mmyoji
mmyoji / xor-use-cases.ts
Last active October 15, 2021 03:39
XOR use cases
// https://florian.github.io/xor-trick/
function swap(a: number, b: number): [number, number] {
a ^= b;
b ^= a;
a ^= b;
return [a, b];
}
/**
@mmyoji
mmyoji / index.js
Last active October 15, 2021 01:40
Show string diff before / after style #nodejs
import "colors";
import * as Diff from "diff";
const one = "こんにちは、きょうはいい天気ですね。";
const other = "こんばんは。今日は良い天気だね。";
const diff = Diff.diffChars(one, other);
function log(word) {
@mmyoji
mmyoji / query.sql
Last active October 6, 2021 02:19
[SQLime] Check INNER JOIN
SELECT *
FROM orgs
INNER JOIN users
ON users.org_id = orgs.id
AND users.active = true
INNER JOIN users_tasks
ON users_tasks.user_id = users.id
AND users_tasks.status = "active"
INNER JOIN tasks
ON tasks.id = users_tasks.task_id
@mmyoji
mmyoji / main.ts
Created October 2, 2021 06:31
Meta programming in TypeScript
class User {
name: string;
age: number;
#createdAt: Date;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
@mmyoji
mmyoji / 0_setup.ts
Last active October 1, 2021 08:40
[Blog][Node.js] stream.Readable
interface Post {
title: string;
}
interface FetchPostsArgs {
skip: number;
limit: number;
}
const BATCH_SIZE = 2;
@mmyoji
mmyoji / index.ts
Created September 27, 2021 04:09
[Node.js] TmpFile class
// src/index.ts
async function main() {
const tmpFile = new TmpFile();
const data = { name: "foo", age: 30 };
await tmpFile.write("users/1.json", JSON.stringify(data));
console.log(await tmpFile.read("users/1.json"));