Skip to content

Instantly share code, notes, and snippets.

View mmyoji's full-sized avatar
🙃

mmyoji mmyoji

🙃
View GitHub Profile
@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 / 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 / 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 / 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 / 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 / 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 / note.ts
Last active April 21, 2023 03:50
Note: "Domain Modeling Made Functional"
// Chapter 6
type NonEmptyArray<T> = [T, ...T[]];
@mmyoji
mmyoji / avoid-throw-function.ts
Last active April 21, 2023 03:48
Avoid throw function
// Suppose we have following code:
class APIError extends Error {}
function throwAPIError(message: string) {
// complicated logic...
throw new APIError(message);
}
@mmyoji
mmyoji / cloudfront-path-based-routing.yaml
Created April 21, 2023 09:28
Path based routing w/ CloudFront to S3/ALB
# https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesPathPattern
# maybe settings are like the following:
- OriginSettings:
- OriginDomain: MY-EXAMPLE-BUCKET.s3.ap-northeast-1.amazonaws.com
OriginPath: /static
- OriginDomain: example-load-balancer-1234567890.ap-northeast-1.alb.amazonaws.com
OriginPath: *
@mmyoji
mmyoji / change-charset-option1.sql
Last active April 28, 2023 23:44
Docker MySQL JP settings
mysql> SELECT * FROM information_schema.SCHEMATA WHERE schema_name = "test";
+--------------+-------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+-------------+----------------------------+------------------------+----------+
| def | test | latin1 | latin1_swedish_ci | NULL |
+--------------+-------------+----------------------------+------------------------+----------+
1 row in set (0.00 sec)
-- https://stackoverflow.com/a/6115705
mysql> ALTER DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;