Skip to content

Instantly share code, notes, and snippets.

View tpai's full-sized avatar
🌴
On vacation in Spain

Tony Pai tpai

🌴
On vacation in Spain
View GitHub Profile
@tpai
tpai / pitr.sh
Last active July 13, 2024 12:33 — forked from LS80/pitr.sh
Demo PostgreSQL 13 Point-in-time Recovery with Docker
#!/bin/bash
VERSION=13
function cleanup() {
docker rm -f master replica >&/dev/null
rm -Rf $(pwd)/data $(pwd)/wal_archive
}
function wait_until_ready() {
@tpai
tpai / obs.css
Last active June 19, 2022 03:06
OBS YouTube chatroom style with Traditional Chinese font
@charset "UTF-8";
@import url("https://fonts.googleapis.com/css?family=Noto+Sans+TC:400,500&display=swap");
body {
background-color: transparent !important;
font-family: "Noto Sans TC", sans-serif !important;
overflow-y: hidden !important;
}
@tpai
tpai / bamboofox-ctf.js
Created January 20, 2021 01:36
javascript ctf
const express = require("express");
const cookieParser = require('cookie-parser')
var crypto = require('crypto');
const secret = require("./secret.json");
const app = express();
app.use(cookieParser(secret.FLAG));
let canvas = {
...Array(128).fill(null).map(() => new Array(128).fill("#FFFFFF"))
const dayjs = require("dayjs");
module.exports = {
watchFundingTrades: async (ws, { symbol }, cb) => {
ws.onFundingTradeEntry({ symbol }, trade => {
const params = getParams(trade);
const { datetime, rate, apy, period, amount } = params;
console.log(
`${datetime}\t${rate.toFixed(6)}\t${apy.toFixed(
6
var root = document.querySelector('#v-game-countdown').nextSibling;
var rootObserver = new MutationObserver((mutations) => mutations.map(mutation => {
[].slice.call(document.querySelectorAll('.v-game-target img')).map((target) => {
target.click();
});
}));
rootObserver.observe(root, {
childList: true
});
const root = document.querySelector('#kolor-kolor');
const rootObserver = new MutationObserver((mutations) => mutations.map(mutation => {
[].slice.call(document.querySelectorAll('#kolor-options li a')).map((option) => {
if (option.style.backgroundColor === mutation.target.style.backgroundColor) {
option.click();
}
});
}));
rootObserver.observe(root, {
attributes: true,
const updateTitleAPI = fetch(url, {
method: 'PUT',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: { title }
}).then(res => res.json());
const updateTitle = title => ({ type: UPDATE_TITLE, payload: title });
const updateTitle = title => {
return async dispatch => {
dispatch({ type: UPDATE_TITLE });
try {
const res = await fetch(url, {
method: 'PUT',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
@tpai
tpai / pokemon.md
Last active September 14, 2018 09:40
pokemon index
[{"id":1,"jp":"フシギダネ","en":"Bulbasaur","tw":"妙蛙種子"},{"id":2,"jp":"フシギソウ","en":"Ivysaur","tw":"妙蛙草"},{"id":3,"jp":"フシギバナ","en":"Venusaur","tw":"妙蛙花"},{"id":4,"jp":"ヒトカゲ","en":"Charmander","tw":"小火龍"},{"id":5,"jp":"リザード","en":"Charmeleon","tw":"火恐龍"},{"id":6,"jp":"リザードン","en":"Charizard","tw":"噴火龍"},{"id":7,"jp":"ゼニガメ","en":"Squirtle","tw":"傑尼龜"},{"id":8,"jp":"カメール","en":"Wartortle","tw":"卡咪龜"},{"id":9,"jp":"カメックス","en":"Blastoise","tw":"水箭龜"},{"id":10,"jp":"キャタピー","en":"Caterpie","tw":"綠毛蟲"},{"id":11,"jp":"トランセル","en":"Metapod","tw":"鐵甲蛹"},{"id":12,"jp":"バタフリー","en":"Butterfree","tw":"巴大蝴"},{"id":13,"jp":"ビードル","en":"Weedle","tw":"獨角蟲"},{"id":14,"jp":"コクーン","en":"Kakuna","tw":"鐵殼昆"},{"id":15,"jp":"スピアー","en":"Beedrill","tw":"大針蜂"},{"id":16,"jp":"ポッポ","en":"Pidgey","tw":"波波"},{"id":17,"jp":"ピジョン","en":"Pidgeotto","tw":"比比鳥"},{"id":18,"jp":"ピジョット","en":"Pidgeot","tw":"比鵰"},{"id":19,"jp":"コラッタ","en":"Rattata","tw":"小拉達"},{"id":20,"jp":"ラッタ","en":"Raticate","tw":"拉達"},{"id":21,"jp":"オニスズメ","en":"Spearow","
日期 不重複瀏覽量
6/2 41,227
6/3 303,348
6/4 193,096
6/5 77,828
6/6 32,123
6/7 16,969
6/8 9,360