Skip to content

Instantly share code, notes, and snippets.

blueprint:
name: KNX - Light Actuator
description: Controll Home Assistant Light entities from KNX switches.
domain: automation
input:
target_light:
name: Light
description: The light that shall be controled.
selector:
target:
@somdoron
somdoron / idempotent.scala
Created May 18, 2021 19:03
Idempotency Postgres
def lock(idempotencyKey: String) = {
// Producing 64bit key which is required for postgres advisory lock
val key1 = MurmurHash3.productHash(idempotencyKey))
val key2 = MurmurHash3.productHash(idempotencyKey, seed)
sql"""SELECT pg_advisory_xact_lock($key1, $key2)""".query[Unit].unique
}
def fetch[T](idempotencyKey: String) =
readonlyTransaction {
(sql"""SELECT result
@somdoron
somdoron / DefaultKeyBinding.dict
Last active March 29, 2021 20:29
U0374 MacOS option+'
{
"~'" = ("insertText:", "ʹ");
}
@somdoron
somdoron / pulseaudiosink_dmenu
Last active October 16, 2019 14:59
pulseaudiosink_dmenu
#!/usr/bin/bash
# choose pulseaudio sink via rofi or dmenu
# changes default sink and moves all streams to that sink
sink=$(ponymix -t sink list|awk '/^sink/ {s=$1" "$2;getline;gsub(/^ +/,"",$0);print s" "$0}'|dmenu -p 'pulseaudio sink:'|grep -Po '[0-9]+(?=:)') &&
ponymix set-default -d $sink &&
for input in $(ponymix list -t sink-input|grep -Po '[0-9]+(?=:)');do
echo "$input -> $sink"
ponymix -t sink-input -d $input move $sink
#include "../include/zmq.h"
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
const char *bind_to;
int roundtrip_count;
size_t message_size;
@somdoron
somdoron / main.c
Last active March 19, 2019 13:07
match expression in c
void main() {
char* first =
match(char *, 1) {
when(1):
return "Drake";
when(2):
return "Charles";
otherwise:
return "";
end
module ZData = Zen.Types.Data
module Cost = Zen.Cost.Realized
Zen.Dictionary.add "returnAddress"B (ZData.Lock (ZFStar.fsToFstLock returnAddress)) Zen.Dictionary.empty
|> Cost.__force
|> ZData.DataDict
|> ZData.Dict
// as part of arrange windows
case C_VIEW:
{
int x = container.x;
int y = container.y;
update_gap_geometry(&x,&y,&width,&height);
container->width = width;
container->height = height;
open Zen.Types
open Zen.Vector
open Zen.Base
open Zen.Cost
open Zen.Asset
module E = Zen.Error
module ET = Zen.ErrorT
module Tx = Zen.TxSkeleton
open Zen.Types
open Zen.Vector
open Zen.Base
open Zen.Cost
open Zen.Asset
module ET = Zen.ErrorT
module OT = Zen.OptionT
module Tx = Zen.TxSkeleton