Skip to content

Instantly share code, notes, and snippets.

Matt Widmann mgwidmann

  • Washington DC
Block or report user

Report or block mgwidmann

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@mgwidmann
mgwidmann / day1.go
Last active Dec 3, 2019
2019 AOC - golang
View day1.go
package main
import "fmt"
var allMasses []int = []int{
147308, 51605, 71317, 110882, 92545, 126856, 104937, 92433, 107850, 119538, 82733, 52216, 105704, 123682, 105919, 136265, 100540, 84245, 72006, 111652, 85116, 85841, 71374, 144196, 125493, 113529, 64637, 87489, 138161, 120897, 53384, 83310,
120672, 126144, 107681, 101369, 77469, 141056, 140426, 114920, 124454, 130867, 64611, 104813, 138808, 114234, 148654, 59031, 91367, 83316, 106192, 127495, 139980, 119024, 149567, 57007, 61075, 65637, 75293, 61670, 104044, 77230, 80201,
137094, 99733, 50801, 68922, 148404, 79980, 62716, 67666, 72694, 81951, 108427, 111721, 55532, 94442, 88562, 101088, 111656, 111649, 92085, 91730, 114744, 59355, 55842, 100926, 146370, 147829, 62160, 91447, 115745, 141815, 106837, 68151,
89077, 60357, 89856, 75040, 139131,
}
@mgwidmann
mgwidmann / task_async_stream.ex
Last active Feb 14, 2019
Example usage of Task.async_stream/3
View task_async_stream.ex
# 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
@mgwidmann
mgwidmann / wat.scala
Last active Mar 6, 2018
Scala's violations of the principle of least surprise
View wat.scala
{} + "" == "()" // 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 = {
View get_max_profit.rb
# 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 / ecto_polymorphism.ex
Last active May 23, 2019
Ecto Polymorphism
View ecto_polymorphism.ex
defmodule Ecto.Polymorphic do
defmacro __using__(_) do
quote do
require Ecto.Schema
import Ecto.Schema, except: [belongs_to: 2, belongs_to: 3]
import unquote(__MODULE__)
end
end
@mgwidmann
mgwidmann / with_and_dialyzer.ex
Created Jun 23, 2016
Showing an example of using the with keyword & usage/output of dialyzer
View with_and_dialyzer.ex
# 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
View on_definition.ex
$ mix new policy_enforcement_playground
$ cd policy_enforcement_playground
# Make a new file lib/authorization.ex
defmodule Authorization do
def authorize_first_thing(_user, resource) do
# Do some authorization here, modifying what gets returned based on the
# authorization level of the user
resource
end
@mgwidmann
mgwidmann / twitter_stream.ex
Last active Oct 21, 2019
Infinite Streams with Elixir
View twitter_stream.ex
# Elixir has lazily evaluated enumerable objects that allow you
# to work with enumerable objects like lists either only as needed
# or infinitely.
# Start up iex to play around
$ iex
# Typical enumeration is done eagerly where the result is computed ASAP
iex> Enum.map(1..10, fn i -> i * 2 end)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
@mgwidmann
mgwidmann / supervisor.ex
Last active Jul 30, 2018
Overview of the Supervision system
View supervisor.ex
# The golden trinity of Erlang is the secret sauce behind what makes
# Elixir a strong choice for any backend application and/or system.
# https://tkowal.wordpress.com/2015/10/20/failing-fast-and-slow-in-erlang-and-elixir/
# The supervision and worker system, commonly referred to as OTP (Open
# Telecom Platform, which has nothing to do with telephony), is what
# gives Erlang/Elixir applications them a robust "self-healing" type
# property that makes them extremely fault tolerant.
@mgwidmann
mgwidmann / hotcode.ex
Last active Oct 4, 2018
Hot code swapping
View hotcode.ex
# To show hot code uploading, we first need to build a simple phoenix project so we can see it happen in real time.
# Start by making a new phoenix project
$ mix phoenix.new hotcode
# Go into the directory
$ cd hotcode
# Add exrm dependency to mix.exs file
{:exrm, "~> 1.0.3"}
You can’t perform that action at this time.