Skip to content

Instantly share code, notes, and snippets.

View mgwidmann's full-sized avatar

Matt Widmann mgwidmann

View GitHub Profile
angular.module('utils.watcher_hider', [])
.service 'WatcherHider', ['$log', ($log)->
($scope)->
@scope = $scope
# Don't try this at home kids...
listeners = []
watches = []
@$watch = (name_or_fn, watcher_fn)=>
@mgwidmann
mgwidmann / ElmDemo.elm
Created December 11, 2015 18:54
Elm Demo
module ElmDemo where
import Graphics.Element exposing (..)
import Graphics.Collage exposing (..)
import Color exposing (..)
import Time
import Text
import Window
-- MODEL
module ElmDemoRefactored where
import Graphics.Element exposing (..)
import Graphics.Collage exposing (..)
import Color exposing (..)
import Time
import Text
import Window
-- MODEL
@mgwidmann
mgwidmann / ElmDemo.elm
Created January 12, 2016 15:46
Basic SVG drawing in Elm
module ElmDemo where
import Graphics.Element exposing (..)
import Graphics.Collage exposing (..)
import Color exposing (..)
import Time
import Text
import Window
-- MODEL
@mgwidmann
mgwidmann / bartender.ex
Created March 4, 2016 02:55
Simple example showcasing the power of pattern matching.
# Lets create a bartender in the same way you would in a imperative language.
defmodule Bartender do
def serve(user, drink) do
if user.age >= 21 do
IO.puts "The bartender slides #{user.name} a #{drink}."
else
IO.puts "Sorry #{user.name}, you'll have to wait #{21 - user.age} more year(s)."
end
end
end
@mgwidmann
mgwidmann / with_and_dialyzer.ex
Created June 23, 2016 20:08
Showing an example of using the with keyword & usage/output of dialyzer
# Assuming we have some code like this
defmodule Processor do
# A lot of code uses the following format, and its a good way to write code
# However, when we have potential failures at each step things get complicated
def process(user, meta) do
user
|> verify_authenticity(meta[:credentials])
|> process_payment(meta[:charges])
|> issue_resource
|> generate_response
# prices = [11, 7, 5, 8, 10, 9]
# => 5
# ALGO 1: BRUTE FORCE
# for each map to profit, find biggest number
# 11 => [-4, -6, -3, -1, -2]
# 7 => [-2, 1, 3, 2]
# 5 => [3, 5, 4]
# 8 => [2, 1]
# 10 => [-1]
#
@mgwidmann
mgwidmann / wat.scala
Last active March 6, 2018 17:33
Scala's violations of the principle of least surprise
{} + "" == "()" // true
pow(2, 31).intValue + 1 > 0 // false
Set(1,2,3).sameElements(Set(3,2,1)) // false
Some(null).get // No exception :(, Some(null) should result in a None IMO
// Option objects might be null!!!
def safeOption(shouldBeSafe : Option[String]) : String = {
@mgwidmann
mgwidmann / greeter.ex
Last active December 20, 2018 17:34
Simple distributed greeting system
# machine 1
# start up with `iex --name m1@127.0.0.1 --cookie greeter`
# This isn't really necessary but it won't hurt anything
Node.connect :"m1@127.0.0.1"
# All `Node.connect/1` calls can go to the same machine and every machine
# in the cluster will automatically be connected.
# machine 2
# start up with `iex --name m2@127.0.0.1 --cookie greeter`
@mgwidmann
mgwidmann / task_async_stream.ex
Last active February 14, 2019 05:24
Example usage of Task.async_stream/3
# Take all numbers from 0 to 50 million and sum every number from 0 to that number and sum those numbers
:timer.tc fn ->
1..50_000_000
|> Enum.map(& Enum.sum(0..&1))
|> Enum.sum()
end
# Takes almost 2 minutes to run and returns the value 20,833,345,833,335,000,000
# => {108521694, 20833334583333350000000}
# Using task async stream, this can be done concurrently easily by just