Skip to content

Instantly share code, notes, and snippets.

View CrowdHailer's full-sized avatar

Peter Saxton CrowdHailer

View GitHub Profile
@CrowdHailer
CrowdHailer / experiments.rs
Created May 6, 2020 14:02
Trying to make a type safe parser
import gleam/should
pub type Parser(r) {
Pop(Parser(fn(String) -> r))
End(r)
}
fn apply(parser: Parser(fn(String) -> r), value: String) -> Parser(r) {
// fn apply(parser) {
case parser {
./_build/default/rel/hello_world/bin/hello_world console
Exec: /usr/local/lib/erlang/erts-10.7.1/bin/erlexec -boot /opt/app/_build/default/rel/hello_world/releases/0.1.0/hello_world -mode embedded -boot_var ERTS_LIB_DIR /usr/local/lib/erlang/lib -config /opt/app/_build/default/rel/hello_world/releases/0.1.0/sys.config -args_file /opt/app/_build/default/rel/hello_world/releases/0.1.0/vm.args -- console
Root: /opt/app/_build/default/rel/hello_world
/opt/app/_build/default/rel/hello_world
Erlang/OTP 22 [erts-10.7.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:30] [hipe]
=CRASH REPORT==== 3-May-2020::13:00:58.045666 ===
crasher:
initial call: application_master:init/4
pid: <0.327.0>
pub type Worker(m) {
Pid
}
pub type WorkerMessage(m) {
Down
Message(m)
}
pub type Worker(m) {
@CrowdHailer
CrowdHailer / sign.js
Last active May 29, 2023 06:19
Web crypto to erlang/Elixir
// NEEDS TO RUN IN SECURE (HTTPS) CONTEXT.
async function run() {
// New key pair
var keyPair = await window.crypto.subtle.generateKey(
{
name: "ECDSA",
namedCurve: "P-521"
},
true,
["sign", "verify"]
@CrowdHailer
CrowdHailer / lib.rs
Created December 17, 2018 20:53
actors.rs
mod actor {
extern crate typemap;
#[derive(Debug)]
pub struct Envelop<For: Actor> {
// TODO make fields private
pub address: For::Id,
pub message: For::Message
}
@CrowdHailer
CrowdHailer / lib.rs
Last active December 6, 2018 18:29
Raxx in Rust
pub mod raxx {
#[derive(Debug)]
pub enum Method {GET, POST}
#[derive(Debug)]
pub struct Request {
pub method: Method
}
#[derive(Debug, PartialEq)]
pub struct Response {
@CrowdHailer
CrowdHailer / actor.js
Last active March 23, 2021 10:43
Implementing actors in JavaScript.
// Turns out this was not too difficult.
// By using the event loop as a global mail box ordering is even guaranteed for messages between only two actors.
// TODO would like to try and put one actor in a web worker to get some real parallism
// TODO would like to handle errors and have the concept of a deceased actor while a reference to an actor still exists. Probably involves creating an actor system like in Scala. Eurgh.
var actor = {
send: function(message) {
var self = this;
console.log("sending to:", self);
setTimeout(function(){
@CrowdHailer
CrowdHailer / clock.ex
Created September 30, 2015 15:04
Creating boundary modules for elixir applications. These have their implementation set during the configuration step. In this example we switch clock between system clock and a dummy clock
# This module represents a behaviour and when used picks from the Application configuration which implementation will be used
defmodule Clock do
@callback now() :: Integer.t
defmacro __using__([]) do
module = Application.get_env(:my_app, :Clock)
quote do
alias unquote(module), as: Clock
end
@CrowdHailer
CrowdHailer / user.exs
Created September 18, 2015 14:20
Creating stateful module in elixir
# Using the erlang mechanism of tuple modules it is possible to create a "stateful module".
# This concept of a stateful module is discussed in "Programming erlang" Second edition.
defmodule User do
defstruct name: nil, admin: false, internal: "kinda private"
def new(name, options \\ []) do
dependencies = struct(%__MODULE__{name: name}, options)
{__MODULE__, dependencies}
@CrowdHailer
CrowdHailer / create_post.rb
Created August 15, 2015 12:17
Enforcing an interface in Ruby
class CreatePost
# An interactor to create a post.
# Initialize with a request object that implements the request interface for this interactor.
def initialize(request)
RequestInterface.required_on! request
@user = {:title => request.title}
end
def result