Skip to content

Instantly share code, notes, and snippets.

View kawaz's full-sized avatar
🏠
Working from home

Yoshiaki Kawazu kawaz

🏠
Working from home
View GitHub Profile
@kawaz
kawaz / README.md
Last active October 20, 2021 04:12
docker/docker-compose を nerdctl に置き換えるラッパースクリプト。Mac環境での lima のセットアップ補助も兼ねてる。

Introduction

Docker Desktop は有料化云々については元々リポジトリとして便利に使わせて貰ってて課金済みだったしどうでもよくて。それよりも Docker Desktop for Mac が重くて消費電力馬鹿食いするのに辟易したので、この機に lima を試してみることにした。

そしたら導入は簡単だし Docker Desktop に比べてかなり負荷も軽い(アイドル時にアクティブモニタで見るとCPU3%程度)し、面倒かなと思ってたポートフォワードについても lima が勝手に自動ポートフォワードしてくれるので QEMU 内で動いてるコンテナ内のサーバプロセスへのポート開けとかの作業は一切不要で普通に localhost でアクセス出来ちゃうし超便利だった。て事でまだ30分くらいしかさわってないけど気に入ったので Docker Desktop はサクサク消す事にした。

更に最初は nerdctl って打つのに慣れない(明日には忘れてるはず)ので今まで通り docker/docker-compose のコマンドで lime nerdctl がたたけるようにするラッパーコマンドを作っておいた。これは未来の自分が lima や nerdctl の導入や使い方について忘れたときの備忘録も兼ねている。

lima の細かい設定についてはここでは書いてない。というか何もしてない状態で今のところ特に不満は無い。ホストのリソースをどれくらい使って良いかとか変えたくなったら ~/.lima/ 内の設定を弄ったりすれば良いと思うが必要になったときにググればよい。

Setup

@kawaz
kawaz / analyzeCode.js
Last active December 7, 2024 01:27
javascriptのcodePointAtとcharCodeAtの使い方や文字数の数え方などの練習
const toCodeUnit = s => s.split("").map(u => `\\u${u.charCodeAt(0).toString(16).toUpperCase().padStart(4, 0)}`).join("")
const toCodePoint = s => [...s].map(p => `\\u{${p.codePointAt(0).toString(16).toUpperCase()}}`).join("")
const splitToVisualChars = s => [...s].reduce((c, p, i, a) => {
let description = p
if (p == "\u200D") {
// ZERO WITH JOINER
description = "ZWJ"
} else if ("\u{180B}" <= p && p <= "\u{180D}") {
// モンゴル文字専用のモンゴル自由字形選択子(3個)
description = `FVS${p.codePointAt(0) - 0x180B + 1}`
@kawaz
kawaz / csprng.js
Last active November 30, 2023 20:06
ブラウザのJavascriptで暗号論的にセキュアな疑似乱数を使って指定範囲の整数の乱数を得る方法。
/**
* a以上b以下の整数の乱数を生成する
* @param {number|bigint} a
* @param {number|bigint} b
* @returns {number|bigint}
*/
function getRandomIntBetween(a, b) {
if (b < a) {
// [a, b] = [b, a]
const t = a; a = b; b = t;
@kawaz
kawaz / tools.js
Last active October 31, 2023 08:21
よく使うJSの便利関数的な奴 tools.js
// タイムアウト付き setInterval
const setIntervalTimeout = (f, interval = 200, timeout = 5000, immediate = false) => {
immediate && setTimeout(f, 0)
const i = setInterval(f, interval)
const t = setTimeout(() => clearInterval(i), timeout)
return () => { clearInterval(i); clearTimeout(t) }
}
// タイムアウト付き setInterval の強化版(タブがバックグラウンドになってもサボらない)
const setIntervalTimeoutSuper = (f, interval = 200, timeout = 5000, immediate = false) => {
try {
@kawaz
kawaz / superInterval.js
Last active June 5, 2024 08:41
タブがバックグラウンドになってもサボらない setInterval
const superInterval = (cb, interval=1000, ...args) => {
try {
const code = `self.addEventListener('message', msg=>{setInterval(()=>self.postMessage(null), msg.data)})`
const w = new Worker(`data:text/javascript;base64,${btoa(code)}`)
w.onmessage = () => cb(...args)
w.postMessage(interval)
return {stop:()=>w.terminate()}
} catch(_){
// 実装の問題またはCSPによる拒否などで Worker が使えなければ普通の setInterval を使う
const id = setInterval(cb, interval, ...args)
@kawaz
kawaz / binconv.js
Last active October 3, 2024 07:44
javascript string text(utf8) base64 hex tool
const binconv = (()=>{
// base64 <-> binary
const atob = window.atob
const btoa = window.btoa
// binary <-> Uint8Array
const btou8 = b => new Uint8Array([].map.call(b,c=>c.charCodeAt(0))) //new Uint8Array([...b].map(c=>c.charCodeAt(0)))
const u8tob = u8 => String.fromCharCode.apply(null,u8) //String.fromCharCode(...u8)
// string <-> Uint8Array
@kawaz
kawaz / README.md
Last active July 6, 2021 06:50
ジョブカン勤怠の画面の使いづらいところを個人的に勝手に直すユーザスクリプト jobcan.user.js

インストール

TamperMonkey拡張をインストール済みのブラウザで以下URLを開くとユーザスクリプトのインストール承認画面が出てくると思う。 https://gist.githubusercontent.com/kawaz/8f08bbc218ab16b92f5e018801cec668/raw/jobcan.user.js

機能

  • 日付セレクタの -年-月-日 の『日』のセレクタに曜日表示をつけ足す
  • 打刻一覧テーブルで「修正レコードが全て承認された」という前提で以下の色つけなどをする
    • 『開始-終了』のペアが分かりやすいよう青のグラデーション背景にする
    • 『開始』で終わってる場合は赤くする(エラーなので
  • 削除レコードはグレーにする
@kawaz
kawaz / install-docker-compose.sh
Last active June 9, 2020 00:46
install docker-compose
#!/bin/bash
set -e
set -o pipefail
[[ -x /usr/bin/docker-compose ]] && exit
if ! [[ -f /usr/bin/docker-compose ]]; then
t=$(mktemp)
curl -sLo "$t" "$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r '.assets[].browser_download_url' | grep "/docker-compose-$(uname -s)-$(uname -m)$")"
chmod 755 "$t"
mv "$t" /usr/local/bin/docker-compose
@kawaz
kawaz / install-daemontools.sh
Last active May 21, 2020 05:32
install daemontools (AmazonLinux2,CentOS7, etc...)
#!/bin/bash
set -e
set -o pipefail
cd "$(mktemp -d)"
trap "rm -rf $PWD" EXIT
# install daemontools
curl -s https://cr.yp.to/daemontools/daemontools-0.76.tar.gz | tar xz
cd ./admin/daemontools-0.76/
@kawaz
kawaz / parallel.js
Last active May 28, 2020 04:31
Promiseの配列を {ok:true, value} か {ok:false, err} の配列にする関数。Promise.all とか Promise.race だとどれか一つのPromiseがrejectとかされた時点で全部中断されちゃうのが使いにくい時があるので。→ ES2020に入ってくる Promise.allSettled() がほぼ同じ感じの関数になるので今後はそっちを使う事を推奨。
parallel = promises => Promise.all(promises.map(p=>new Promise(done=>{try{p.then(value=>done({ok:true,value})).catch(err=>done({ok:false,err}))}catch(err){done({ok:false,err})}})))