Skip to content

Instantly share code, notes, and snippets.

View idiotWu's full-sized avatar

Daofeng Wu idiotWu

  • Tokyo, Japan
  • 07:27 (UTC +09:00)
View GitHub Profile
@idiotWu
idiotWu / history.js
Last active October 7, 2022 18:47
undo/redo with prototype chains
class HistoryManager {
constructor(initialState) {
this.state = { ...initialState };
this.history = [initialState];
this.index = 0;
}
push(changes) {
this.state = Object.create(this.state, Object.getOwnPropertyDescriptors(changes));
this.history.length = this.index + 1; // discard further redos
@idiotWu
idiotWu / use-signal.js
Last active December 31, 2022 05:56
useSignal() Hook
const initialState = {
activated: false,
resolve: () => {},
};
function useSignal() {
const [state, setState] = useState(initialState);
function init() {
return new Promise((resolve) => {
@idiotWu
idiotWu / re-react-hook.js
Last active September 19, 2021 07:03
Reimplement react hooks
const hookMap = new WeakMap();
let currentContext = null;
let currentIndex = 0;
function load(component) {
if (!hookMap.has(component)) {
hookMap.set(component, []);
}
const magnitude = {
'十': 1e1,
'百': 1e2,
'千': 1e3,
'万': 1e4,
'亿': 1e8,
};
const num = {};
@idiotWu
idiotWu / u-jap.tex
Created June 9, 2020 12:32
biblatex で日本語文献をサポート
% 日本語文献サポート
\AtEveryBibitem{
% langid={Japanese} で識別
\iffieldequalstr{langid}{Japanese} {
% コンマで区切り
\DeclareDelimFormat{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\multinamedelim
}
% 名前を「姓 名」の順に
@idiotWu
idiotWu / gist:db9a1c629200c04999283df90fab88cf
Created May 1, 2020 04:04 — forked from kyontan/gist:7678042
游書体を加えたCSS font-family
/* ヒラギノ角ゴ */
font-family: "ヒラギノ角ゴ Pro", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, "MS Pゴシック", "MS PGothic", sans-serif;
/* ヒラギノ明朝 */
font-family: "ヒラギノ明朝 Pro", "Hiragino Mincho Pro", "MS P明朝", "MS PMincho", serif;
/* From: 游明朝体・游ゴシック体のCSSでの利用 - Qiita [キータ]
* http://qiita.com/shinnn/items/5be7e8106189311559c1
*/
@idiotWu
idiotWu / engine.c
Last active June 4, 2019 16:39
Simple timeline-based animation engine
/**
* Timeline based animation engine
*
* t
* ------+------------------------------------------> timeline
* +-----|-+
* | A | | <- animation{}
* +-----|-+
* +--|------+
* | | A |
@idiotWu
idiotWu / otsuka.js
Last active December 18, 2018 05:36
const src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiew
@idiotWu
idiotWu / nyan.js
Last active November 29, 2018 11:09
class Nyan {
constructor(speed = 3) {
this.x = 0;
this.y = 0;
this.max_x = 0;
this.max_y = 0;
this.vx = this.vy = speed;
const img = this.img = new Image();
img.src = 'http://www.nyan.cat/images/thumbs/balloon.gif';
@idiotWu
idiotWu / Nyanaba.user.js
Last active November 28, 2018 12:45
nyan your reports
// ==UserScript==
// @name Nyanaba
// @namespace https://manaba.kic.kagoshima-u.ac.jp
// @version 0.1
// @description nyan your reports
// @author Dolphin Wood
// @match https://manaba.kic.kagoshima-u.ac.jp/ct/home
// @noframes
// ==/UserScript==