Skip to content

Instantly share code, notes, and snippets.

@FallenMax
FallenMax / spotify.applescript
Created September 2, 2022 03:13
some spotify applescript, use skhd to control spotify with shortcut
-- activate
tell application "Spotify"
activate
end tell
-- next track
tell application "Spotify"
@FallenMax
FallenMax / sort_json.js
Created October 25, 2021 07:48
sort json
{
const sort = (json)=>{
if(json == null) return null
if(Array.isArray(json)) return json.map(sort)
if(typeof json === 'object') {
let sorted = {}
Object.keys(json).sort().forEach(key => {
sorted[key] = sort(json[key])
})
return sorted
@FallenMax
FallenMax / prune_images.sh
Last active March 20, 2021 09:59
remove orphan images from markdown files generated by Typora
#!/usr/bin/env bash
# does $1 contains $2?
#
# $1: array
# $2: element to test
function array_contains() {
# local IFS=$'\n'
local array=($1)
local i
export class EventEmitter<T> {
handlers = [] as ((payload: T) => void)[]
addHandler(cb: (payload: T) => void) {
if (this.handlers.indexOf(cb) === -1) {
this.handlers.push(cb)
}
}
removeHandler(cb: (payload: T) => void) {
const index = this.handlers.indexOf(cb)
if (index !== -1) {
(()=>{
const defaultWindowVars = new Set(["Object", "Function", "Array", "Number", "parseFloat", "parseInt", "Infinity", "NaN", "undefined", "Boolean", "String", "Symbol", "Date", "Promise", "RegExp", "Error", "EvalError", "RangeError", "ReferenceError", "SyntaxError", "TypeError", "URIError", "JSON", "Math", "console", "Intl", "ArrayBuffer", "Uint8Array", "Int8Array", "Uint16Array", "Int16Array", "Uint32Array", "Int32Array", "Float32Array", "Float64Array", "Uint8ClampedArray", "BigUint64Array", "BigInt64Array", "DataView", "Map", "BigInt", "Set", "WeakMap", "WeakSet", "Proxy", "Reflect", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "escape", "unescape", "eval", "isFinite", "isNaN", "ByteLengthQueuingStrategy", "CountQueuingStrategy", "webkitRTCPeerConnection", "webkitMediaStream", "WebSocket", "WebGLContextEvent", "WaveShaperNode", "TextEncoderStream", "TextEncoder", "TextDecoderStream", "TextDecoder", "SyncManager", "SubtleCrypto", "StorageEvent", "Storage", "StereoPannerNode",
@FallenMax
FallenMax / filter-extensions.js
Created June 1, 2017 06:45
find chrome extensions with >10 5-stars
(function(){
const list = $$('.webstore-test-wall-tile')
const bad = list.filter(item =>
Number(item.querySelector('.q-N-nd').textContent.replace(/[\(\)]/g, '')) < 10
)
@FallenMax
FallenMax / stream.ts
Last active June 7, 2018 10:02
simple observable
interface StreamListener<T> {
(value: T): void
}
interface StreamDependent<T> {
updateDependent(val: T): void
flushDependent(): void
}
// dirty workaround as typescript does not support callable class for now