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 / main.cf に追記
Last active September 21, 2024 03:23
postfixからAmazon SESに雑にメールをリレーさせる設定テンプレ
# ローカルで発生したメールを全部SESにリレーして送信する
sender_canonical_maps=regexp:/etc/postfix/sender_canonical_maps.regexp
sender_dependent_relayhost_maps=hash:/etc/postfix/sender_dependent_relayhost_maps regexp:/etc/postfix/sender_dependent_relayhost_maps.regexp
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/smtp_sasl_password_maps regexp:/etc/postfix/smtp_sasl_password_maps.regexp
smtp_sasl_security_options=noanonymous
smtp_sender_dependent_authentication=yes
@kawaz
kawaz / setValue.js
Last active August 8, 2024 05:41
React等が利用されているとinputやtextareaのvalueに値をセットしてもWEBアプリ側に変更が伝わらないことがあるが、それを上手くやる。
// React等が利用されているサイトでは value プロパティに値をセットしてもWEBアプリに変更が伝わらないことがあるが、それを上手くやる。
const setValue = (target, value, immediate=false) => {
const f = ()=>{
// valueプロパティがフレームワーク側で差し替えられてるケースの対応として、ネイティブパーツのsetterを直接使って値を書き換えるのが確実
const valueDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), "value")
if(valueDescriptor && valueDescriptor.set) {
valueDescriptor.set.call(target, value)
} else {
target.value = value
}
@kawaz
kawaz / オドロチドロフローチャート.md
Last active February 29, 2024 04:42
風来のシレン6のオドロ/チドロを利用した銀剥がしチャート。錆よけの腕輪があれば安心して銀剥がしができる。錆よけがない場合も印消しより先に銀剥がしがくるから錆よけが無くても銀はがしはできる、ただし全ての銀をはがし終えたら速やかに装備を外すか処理しないと印が消され始めるので注意。
graph TD;
    subgraph 結果
        R0[何もなし]
        R1[強化値ダウン]
        R2[銀剥がし]
        R3[メッキ印消し]
        R4[印消し]
    end
@kawaz
kawaz / README.md
Last active December 29, 2023 07:58
jscodeshift の使い方メモ。

jscodeshift の使い方メモ。

Usage

↓こんな感じに実行すると、before/after のようにピンポイントでいい感じに修正されたコードが出てくる。みたいな感じに使える。

# -d を外すと元のファイルが修正される
bunx jscodeshift -t modify-video-provider.ts sample.js -d -p
@kawaz
kawaz / archive_file.sh
Created December 14, 2023 04:02
ファイルを日付ディレクトリやインスタンスIDを付けた名前にしつつ移動またはコピーするスクリプト。ログをEFSに集約したりする等に使うことを想定している。
#!/bin/bash
# テンプレート変数を用意
declare -A TEMPLATE_KV=()
while read -r k v; do
k=${k//-/_}; k=${k//:/}; k=${k^^}
TEMPLATE_KV["$k"]="$v"
done < <(ec2-metadata -i -t -h -o -z -p -v)
TEMPLATE_KV[REGION]=$(perl -pe's/[a-z]$//' <<< "${TEMPLATE_KV[PLACEMENT]}")
@kawaz
kawaz / speech.js
Last active December 12, 2023 08:03
読み上げAPIのテスト
// 日本語の声をランダムに1つ選ぶ
const voices = speechSynthesis.getVoices().filter(v=>/^ja-/.test(v.lang))
const voice = voices[Math.floor(voices.length*100000*Math.random())%voices.length]
const ssu = new SpeechSynthesisUtterance()
ssu.lang = 'ja-JP' // 言語
ssu.voice = voice // 発話に使用する音声(未設定の場合lang設定を見て適切な音声が選ばれる
ssu.volume = 1 // 発話の音量 0~1、default=1
ssu.rate = 1 // 発話の速度 0.1~10、default=1
ssu.pitch = 1 // 発話の音程 0~2、default=1
@kawaz
kawaz / list-route53-records.sh
Created December 11, 2023 04:07
Route53の全ゾーンの全レコードセットを取得するスクリプト
#!/bin/bash
set -e -o pipefail
# HostedZone[].Id を保存
aws route53 list-hosted-zones | jq .HostedZones[].Id -r | tee HostedZoneIds.txt
# 全HostedZoneのRecordSetを取得
while read id; do
aws route53 list-resource-record-sets --hosted-zone-id "$id"
done <HostedZoneIds.txt | tee rs.json.tmp
@kawaz
kawaz / flock-example1.sh
Created September 19, 2023 05:04
シェルスクリプトでflockを使って2重起動防止をする方法(sh,bash,zsh,lock,)
#!/bin/bash
# コピペで使えてシンプルなやつ (動的なファイルディスクリプタ)
# 2重起動防止
exec {lock}<"$0"; flock -n "$lock" || {
echo "this script is already running" >&2
exit 1
}
echo "なにかの処理"
@kawaz
kawaz / movingAverageFilter.js
Last active August 31, 2024 04:42
データ列に対してmapすると移動平均が得られるフィルタ関数。chartjs が移動平均線の描画に対応してないっぽいが、これを噛ましてやれば自力で移動平均用のデータ列が作れる。
const movingAverageFilter = (ws=3) => {
if(!Number.isInteger(ws) || ws < 1) {
throw new Error(`Invalid window size. ws must be >=1. You entered: ws=${ws}.`)
}
let win = []
let sum = 0
let pos = 0
let tail = 0
return (head) => {
sum = sum + head - tail
@kawaz
kawaz / beep.js
Last active September 5, 2023 02:44
Web Audio API を使って beep 音を鳴らすサンプル。
const beep = (duration=200, frequency=440, gain=1.0) => new Promise((resolve, reject) => {
try {
const audioCtx = new AudioContext()
const oscNode = new OscillatorNode(audioCtx, {frequency, type:"square"})
const gainNode = new GainNode(audioCtx, {gain})
oscNode.onended = resolve
oscNode.connect(gainNode).connect(audioCtx.destination)
oscNode.start(audioCtx.currentTime)
oscNode.stop(audioCtx.currentTime + duration / 1000)
} catch(err){