Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View m93a's full-sized avatar
omw to start a commune

Michal m93a

omw to start a commune
View GitHub Profile
m93a / keybindings.json
Created April 9, 2024 13:01
Toggle visibility and focus of the VS Code Outline view
"key": "ctrl+alt+o",
"command": "runCommands",
"args": {
"commands": [
m93a /
Created April 3, 2024 08:21
a nushell script for adding flatpak apps to path
#!/usr/bin/env nu
const p = ~/.bin/flatpak
rm -rf $p
mkdir $p
flatpak list --columns=application
| lines
| where (str contains "Platform" | not $in)
| where (str contains "Gtk3theme" | not $in)
| each {|v| [$"($p)/($v)", $"#!/usr/bin/sh\nflatpak run ($v)"]}
function x
nohup fish -c "$argv &" > /dev/null && exit
function x_complete
set arg (commandline -ct)
complete -C$arg
complete --command x --arguments '(x_complete)'

Clamped Value

Idealized syntax:

component ClampedValue {
  in min: number;
  in max: number;
  out value = clamp(min, prev value ?? 0, max);
# taken from
export def 'set difference' [s2: list] {
# nushell doesn't have a hash table so quadratic time complexity
let s1 = ($in | sort | uniq)
let s2 = ($s2 | sort | uniq)
$s1 | where {|x| not ($x in $s2)}
export def 'set intersection' [s2: list] {
m93a /
Last active February 28, 2024 11:48

wheatpaste / comlink / compost


  • Window::{postMessage, on:message, on:messageerror, on:error}
  • Worker::{postMessage, on:message, on:messageerror, on:error, terminate}
  • BroadcastChannel::{postMessage, on:message, on:messageerror, close}
  • SharedWorker::{port}
  • MessageEvent::{ports}
  • MessagePort::{postMessage, on:message, on:messageerror}
  • DedicatedWorkerGlobalScope::{postMessage, on:message, on:messageerror}
m93a / VDSD
Last active February 4, 2024 00:39
Voltage-driven Supply & Demand Management

Voltage-driven Supply & Demand Management

Designing your system

  1. Determine the maximum current $I_{max}$ of the wires supporting your grid.
  2. Determine the maximum voltage drop $V_{drop}$ between two devices on your grid.
  3. Choose the level difference $V_{diff} > 2 V_{drop}$ and the top voltage $V_{top}$.
    • If you're intending to upgrade your grid to allow for higher transmitted power in the future, increasing $V_{top}$ is the easiest way to do it. Therefore it is recommended to choose a reasonable ceiling $V_{max} > V_{top}$ and select all the equipment so that it supports voltages up to $V_{max}$.
  4. Count the priority levels of sources and sinks that you want to use. A typical setup would be:
    1. (sink) Dummy load; (source) Energy harvesting
  5. (sink) Low efficiency energy storage
"$schema": "",
"blocks": [
"alignment": "left",
"segments": [
"foreground": "red",
"style": "plain",
"template": "<i><d>n</d></i> ",
export async function* asyncCombine<S, T>(
a: AsyncIterable<S>,
b: AsyncIterable<T>,
): AsyncIterable<[S | undefined, T | undefined]> {
let aVal: S | undefined;
let bVal: T | undefined;
let aDone = false;
let bDone = false;
const aIter = a[Symbol.asyncIterator]();