Skip to content

Instantly share code, notes, and snippets.

@scudelletti
scudelletti / child.json
Created October 12, 2021 07:55
child.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "child.json",
"type": "integer"
}
@scudelletti
scudelletti / JSONSumTypeHaskell.hs
Last active March 16, 2021 08:40
Encode/Decode Sum Types manually using Aeson (Haskell) - No Generic
{-# LANGUAGE OverloadedStrings #-}
module Stuff where
import Data.Aeson
import Data.ByteString.Lazy.Char8 as BC
data FooBar = Foo | Bar deriving (Eq, Show)
instance ToJSON FooBar where
-- In a hypothetical scenario where:
-- * I have packs of beverages
-- * Each pack belongs to a Brand (Coke or Pepsi) and contains a Product
-- * Each product belongs to a Brand (Coke or Pepsi)
-- * A Coke pack filled with Coke cans is correct
-- * A Coke pack filled with Pepsi cans is incorrect
--
-- Is there a way that I can make the type system check that for me during compilation time?
-- I know I could have smart constructors that would build the correct pack with the correct content but I'd like to know if there are other and smarter -- ways of achieving it.
@scudelletti
scudelletti / import_and_extend.exs
Created October 25, 2018 15:58
Delegates methods to "imported" module on Elixir
defmodule Father do
def sing() do
IO.puts "Lalalalalala"
end
def song(a, b) do
turn_bass_on()
IO.puts "Lelelelelele #{a} #{b}"
end
@scudelletti
scudelletti / pir.ino
Created October 2, 2018 11:46
PIR Sensor
// http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-hc-sr501-motion-sensor-tutorial/
int ledPin = 13;
int pirPin = 2;
int default_remaining = 30;
int remaining = 0;
int val = 0;
void setup() {
pinMode(ledPin, OUTPUT);
@scudelletti
scudelletti / export_env.sh
Created April 13, 2018 14:47
Export Env Variables stored on /etc/environment
# Loan Env Variables
while read line; do
export $(echo $line | sed 's/"//g')
done < /etc/environment
@scudelletti
scudelletti / numbers_in_lambda_calculus.lisp
Last active December 10, 2018 10:21
Numbers in Lambda Calculus - Following Destroy All Software approach
;; Church Numbers
(setq zero (lambda (f) (lambda (x) x)))
(setq one (lambda (f) (lambda (x) (funcall f x))))
(setq two (lambda (f) (lambda (x) (funcall f (funcall f x)))))
;; Manual Calc
(funcall (funcall zero (lambda (x) (+ 1 x))) 0)
(funcall (funcall one (lambda (x) (+ 1 x))) 0)
(funcall (funcall two (lambda (x) (+ 1 x))) 0)
@scudelletti
scudelletti / Dockerfile
Last active June 21, 2017 16:26
Run GUI Linux Apps through Docker with xQuartz on MacOS
# How to Use
# open -a XQuartz
# socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
# docker build . -t ds-xclock
# docker run -e DISPLAY=YOUR_LOCAL_IP_HERE:0 -it ds-xclock
#
# Useful Links:
# https://github.com/moby/moby/issues/8710
# http://kartoza.com/en/blog/how-to-run-a-linux-gui-application-on-osx-using-docker/
@scudelletti
scudelletti / class_definition_in_specs.rb
Created May 27, 2016 07:21
How to avoid global constant in the specs
require 'spec_helper'
describe "Wow Coins" do
let(:klasz_class) do
Class.new do
attr_reader :title
def initialize(properties)
@title = properties[:title]
end
@scudelletti
scudelletti / ssh_config
Last active April 22, 2016 10:27
Forward port on SSH
Host *.staging.something.com
User someuser
ForwardAgent yes
LocalForward localhost:43306 localhost:3306
LocalForward localhost:49200 localhost:9200
LocalForward localhost:49001 localhost:9001