Skip to content

Instantly share code, notes, and snippets.

@peerreynders
peerreynders / pushbutton.ex
Created January 3, 2019 20:53
Erlang gen_statem module documentation "handle_event_function" callback mode example "translated" to Elixir
# file: pushbutton.ex
# Translated from: http://erlang.org/doc/man/gen_statem.html#example
# callback mode: :handle_event_function
# i.e. one callback function handle_event/4 for all states
#
defmodule Pushbutton do
@behaviour :gen_statem
# The registered server name
defp name(),
@peerreynders
peerreynders / code_lock.ex
Created January 3, 2019 20:57
Erlang gen_statem OTP design principles "state_functions" callback mode revised example "translated" to Elixir
# file: code_lock.ex
# Translated from: http://erlang.org/doc/design_principles/statem.html#example-revisited
# callback mode: :state_functions
#
defmodule CodeLockCommon do
# Admittedly gratuitous use of a macro
#
def handle_event(:cast, {:down, button}, data) do
{:keep_state, Map.put(data, :button, button)}
end
@peerreynders
peerreynders / code_lock.ex
Created January 3, 2019 21:02
Erlang gen_statem OTP design principles "handle_event_function" callback mode revised example "translated" to Elixir
# file: code_lock.ex
# Translated from: http://erlang.org/doc/design_principles/statem.html#example-revisited
# callback mode: :handle_event_function
#
defmodule CodeLock do
@behaviour :gen_statem
@name :code_lock_2
def start_link(code),
do: :gen_statem.start_link({:local, @name}, __MODULE__, code, [])
@peerreynders
peerreynders / index.html
Created March 24, 2019 18:37
Web Components in Action v5; Chapter 2 Your First Web Component: MyCustomTag using in page template element
<html lang="en">
<!-- file: index.html -->
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Chapter 2: Your First Web Component</title>
<style>
my-custom-tag {
background-color: blue;
padding: 20px;
display: inline-block;
@peerreynders
peerreynders / index.html
Last active March 30, 2019 00:54
Web Components in Action v6: 5.2.1 Creating a Musical Instrument with Web Components and JS Modules
<html>
<head>
<!--
file: index.html
https://livebook.manning.com/#!/book/web-components-in-action/chapter-5/v-6/comment-487548
https://github.com/bengfarrell/webcomponentsinaction
-->
<title>Web Harp</title>
<link href="./main.css" type="text/css" rel="stylesheet">
<link href="./csshake.min.css" type="text/css" rel="stylesheet">
@peerreynders
peerreynders / index.html
Last active April 2, 2019 18:39
Web Components in Action v6: 7.5.1 Slots without a Name (p.156)
<html>
<head>
<!--
file: index.html
Web Components in Action MEAP v6
https://livebook.manning.com/#!/book/web-components-in-action/chapter-7/v-6/comment-487676
original: https://github.com/bengfarrell/webcomponentsinaction/blob/master/chapter7/7.5-slotsandtemplates/unnamedslots.html
#1:
prevent undefined custom element FOUC (flash of unstyled content)
@peerreynders
peerreynders / biz-card.mjs
Last active April 2, 2019 18:39
Web Components in Action v6: 7.5 Entering the Shadow DOM with Slots (p.152)
// file: components/biz-card/biz-card.mjs
import { patchContentMap } from '../../helpers/templateLoader.mjs'
/*
#1:
See patchContentMap call below which creates
static get _contentMap
static set _templateUri
#2:
@peerreynders
peerreynders / index.html
Created April 5, 2019 13:07
Web Components in Action v6; Listing 10.10 Using CSS Variables in a Web Component’s Shadow DOM
<!DOCTYPE html>
<html>
<head lang="en">
<!--
file: index.html
Web Components in Action MEAP v6
original: https://github.com/bengfarrell/webcomponentsinaction/blob/master/chapter10/10.2-cssvariables/shadow.html
#1
Defining a default value in case the custom property is not defined
@peerreynders
peerreynders / colorpicker_karma-test.mjs
Created April 14, 2019 20:53
Web Components in Action v7; 13.3 Comparing to a Standard Test Setup with Karma - minimal with modules
/* file: components/wcia-color-picker/test/karma-test.mjs
original: https://github.com/bengfarrell/webcomponentsinaction/blob/master/chapter12and13/components/colorpicker/test/karma-test.js
*/
import _dontCare from '../src/wcia-color-picker.mjs'
const makePicker = (function() {
const pickerSize = 500
const thumbCenterOffset = 5/2 + 3 // width/2 + left border
const markup =`
<wcia-color-picker
@peerreynders
peerreynders / another_handler.ex
Created July 29, 2019 00:29
Replacing GenEvent with DynamicSupervisor + GenServer
# file: lib/em_demo/some_handler.ex
#
defmodule EmDemo.AnotherHandler do
use GenServer
@impl true
def init([to_pid, token] = arg) do
IO.puts("#{__MODULE__}: init(#{inspect(arg)})")
{:ok, {to_pid, token}}
end