Skip to content

Instantly share code, notes, and snippets.

View sonhanguyen's full-sized avatar

Harry sonhanguyen

  • Melbourne, Australia
View GitHub Profile
@sonhanguyen
sonhanguyen / cloudSettings
Last active July 11, 2017 11:58
Visual Studio code settings
{"lastUpload":"2017-07-02T02:01:08.109Z","extensionVersion":"v2.8.1"}
@sonhanguyen
sonhanguyen / jest-webpack-loader.js
Last active May 13, 2017 16:50
make jest behave using (webpack) loader-runner
const deasync = require('deasync')
const runLoaders = deasync(require('loader-runner').runLoaders)
const { module: { rules } } = config = require('./webpack.base')
const fs = require('fs')
const resolveLoader = req => {
let loader = req
req = ~req.indexOf`?`
if (req) {
const index = ~req
@sonhanguyen
sonhanguyen / cloudSettings
Last active November 12, 2017 04:09 — forked from itkq/filter.rb
Alfred Vivaldi workflow
{"lastUpload":"2017-10-30T13:54:53.487Z","extensionVersion":"v2.8.3"}
@sonhanguyen
sonhanguyen / mixin_delegate_decorator.ts
Last active October 31, 2022 13:44
kotlin's style delegate in typescript
function delegateTo(prop: string) {
const { __proto__ } = this
Object.setPrototypeOf(this,
new Proxy({}, {
get: (target, name) => {
target = this[prop]
if (name === prop) return target
if (name in __proto__) return __proto__[name]
return target ? target[name] : undefined
/*
## NexusFolder.ahk
##
## Switch default filemanager by launching this script without
## commandline parameters. If you send a file or folder as a
@sonhanguyen
sonhanguyen / mobX.md
Last active October 6, 2022 01:50
use revealjs to view

MobX


  • What it is
  • Why do we need it
  • How do we use it
  • How it works


@sonhanguyen
sonhanguyen / userChrome.css
Last active December 6, 2021 05:03
side panel style for using with Tree Tabs
#!/usr/bin/env bash {} /*
cd ~/.mozilla/firefox || cd ~/Library/Application\ Support/Firefox*
source <(grep Default= profiles.ini)
mkdir $Default/chrome
tee $Default/chrome/userChrome.css <<EOF
/*#region Firefox */
#browser,
@sonhanguyen
sonhanguyen / Default.bttpreset
Created July 20, 2019 02:35
Better touch tool setup for window management
{
"BTTPresetName" : "Default",
"BTTGeneralSettings" : {
"disableScrollingIf3" : true,
"BTTPasteWhenTriggeringClipboardAgain" : true,
"BTTForceNormalClickPressure5F" : 200,
"disableScrollingIf2" : true,
"BTTDidRegisterForUpdateStats" : "3.140",
"BTTShowControlStrip" : true,
"BTTShowControlStripItem" : true,
@sonhanguyen
sonhanguyen / cache.js
Last active September 24, 2024 00:17
File system-based memoization
/**
* @template [T=any]
* @property {{ (_: T): Promise<void>} & { pending?: Promise<T> }} put
*/
class CacheIOError extends Error {
constructor(cause, context) {
Object.assign(this, context, { cause })
}
}
@sonhanguyen
sonhanguyen / cache.py
Last active October 17, 2020 03:03
A filesystem-based memoization decorator
import os
import collections
import pickle
import json
import urllib.parse
import re
from functools import wraps
from typing import Callable, Any
from dataclasses import dataclass, fields