Skip to content

Instantly share code, notes, and snippets.

View ftes's full-sized avatar

Fredrik Teschke ftes

View GitHub Profile
@ftes
ftes / exercises.md
Created March 14, 2023 06:39
Software Developer Bootcamp
@ftes
ftes / dijkstra.livemd
Created December 12, 2022 19:42
Elixir Dijkstra's Shortest Path Algorithm

dijkstra

Mix.install(
  [
    {:kino, "~> 0.7.0"},
    {:vega_lite, "~> 0.1.6"},
    {:kino_vega_lite, "~> 0.1.7"}
@ftes
ftes / FormWebComponent.jsx
Created September 5, 2022 15:29
Phoenix LiveView Form + HeadlessUI
export default class ComboboxFormWebcomponent extends HTMLElement {
connectedCallback() {
// ...
const inputId = this.getAttribute("input-id")
this.inputEl = document.getElementById(inputId)
this.inputEl.addEventListener("change", this.onValueChange)
this.render()
}
disconnectedCallback() {
@ftes
ftes / PushEventHook.js
Created September 5, 2022 07:00
Phoenix LiveView + HeadlessUI
const PushEventHook = {
mounted() {
const target = this.el.attributes["phx-target"]?.value
this.el.__pushEvent = (event, value, onReply = () => {}) =>
target
? this.pushEventTo(target, event, value, onReply)
: this.pushEvent(event, value, onReply)
}
}
@ftes
ftes / projection.ex
Created November 5, 2021 09:32
Reset all commanded read model projections via macro and module attribute
defmodule Mixins.Projection do
defmacro __using__(params) do
table = Keyword.get(params, :table) || raise "Missing param :table"
Module.register_attribute(__CALLER__.module, :table, persist: true)
Module.put_attribute(__CALLER__.module, :table, table)
quote do
use Ecto.Schema
end
end
@ftes
ftes / grid_with_drag_and_drop.ex
Created October 3, 2021 19:51
Drag 'n drop on the PETAL(S) stack
if @dragged.target == :live_view do
"hook.pushEvent('#{@dragged.name}', {from, to});"
else
"hook.pushEventTo('#{@dragged.target}', '#{@dragged.name}', {from, to});"
end
@ftes
ftes / page_live.ex
Last active October 4, 2021 14:18
Drag'n'drop on the PETAL(S) stack
defmodule PetalsDragNDropWeb.PageLive do
# ...
@impl true
def render(assigns) do
~F"""
...
<GridWithDragAndDrop
dragged="letter_dragged"
@ftes
ftes / grid_with_drag_and_drop.html
Last active October 4, 2021 14:17
Drag and drop on the PETAL(S) stack
<div
x-data="{dragging: false}"
:hook="GridWithDragAndDrop"
>
{#for %{x: x, y: y} = item <- @data}
<div
id={item[:id]}
draggable="true"
...
>
@ftes
ftes / page_live.ex
Created October 1, 2021 21:51
alpine.js + liveview
defmodule PetalsDragNDropWeb.PageLive do
use PetalsDragNDropWeb, :live_view
data world, :string, default: "world!"
@impl true
def render(assigns) do
~F"""
<div
id="page"
@ftes
ftes / configuration.yaml.env
Created January 12, 2020 22:11
zigbee2mqtt dynamic configuration.yaml with env variable substitution (e.g. for dynamic configuration via balena.io cloud)
# Environment variables are escaped by the envsubst entrypoint
homeassistant: false
permit_join: $ZIGBEE2MQTT_PERMIT_JOIN
mqtt:
base_topic: zigbee2mqtt
server: 'mqtt://mqtt'
serial:
port: $ZIGBEE2MQTT_SERIAL_PORT