Skip to content

Instantly share code, notes, and snippets.

Avatar
🎣
gone fishing

Evadne Wu evadne

🎣
gone fishing
View GitHub Profile
@evadne
evadne / messages.ex
Last active Oct 11, 2020
Stream Iterator
View messages.ex
defmodule StreamIterator.Messages do
@moduledoc """
The Stream Iterator can be used to consume items from an Elixir Stream incrementally.
## Examples
### Infinite Streams
When used on infinite streams such as the ones returned by `Stream.cycle/1`, the Stream
Iterator will always return the next item.
@evadne
evadne / gettext-sanitise.exs
Created Oct 13, 2019
Sanitise Gettext (Elixir) output for version control
View gettext-sanitise.exs
# For all .POT files
# Parse PO to internal format
# Remove comments
# Remove duplicate references
# Sort terms by key
# Dump out data
# Bodge data with regex
# Remove leading #: for long reference
# Write file
@evadne
evadne / service_discovery.ex
Created Sep 12, 2019
ExAws add-on for AWS Service Discovery
View service_discovery.ex
defmodule ExAws.ServiceDiscovery do
@moduledoc """
Minimal module to issue AWS Cloud Map requests with ExAws, which
is used by clustering mechanisms.
"""
alias ExAws.Operation.JSON
@version "2017-03-14"
@namespace "Route53AutoNaming_v20170314"
@evadne
evadne / script.sh
Created Apr 28, 2019
Properly invoke Sublime Text from WSL
View script.sh
function subl () {
SublimePath="/mnt/c/Program Files/Sublime Text 3/subl.exe"
TargetPath=$(readlink -f $1)
HomePath="/home/evadne"
ProjectsPath=$(readlink -f $HomePath/projects)
SublimeProjectsPath=$(readlink -f $HomePath/sublime)
echo "Editing $TargetPath"
case $TargetPath/ in
$ProjectsPath/*)
View .gitignore
out.txt
out-sorted.txt
words.txt
@evadne
evadne / 01-multistage-build.sh
Last active May 30, 2022
Build & Cache multi-stage Docker images (with Build Specification for AWS CodeBuild)
View 01-multistage-build.sh
# the general idea
ImageTag="git"
FilePath="/Dockerfile"
RepoURI="123456789012.dkr.ecr.eu-west-1.amazonaws.com/repo"
Stages=$(cat $FilePath | grep -oP '^FROM .+ (AS|as) \K(.+)$')
CacheArgs=$(for Stage in $Stages; do echo "--cache-from $RepoURI:cache-$Stage"; done | paste -sd ' ')
BuildArgs="--file $FilePath $CacheArgs"
for Stage in $Stages; do docker pull $RepoURI:cache-$Stage || true; done
for Stage in $Stages; do docker build $BuildArgs --tag $RepoURI:cache-$Stage --target $Stage . || break; done
docker build $BuildArgs --tag $RepoURI:$ImageTag .
@evadne
evadne / gist:440558b18228ca657ef22b465793a0c3
Last active Sep 6, 2022
Using SchemaCrawler on PostgreSQL databases
View gist:440558b18228ca657ef22b465793a0c3
@evadne
evadne / srcds_rcon.ex
Created Nov 12, 2018
Source RCON client in Elixir (using gen_tcp)
View srcds_rcon.ex
defmodule HuddleGateway.External.SourceRemoteControl do
@moduledoc """
A simple gen_tcp based implementation of a Source RCON client
- [Source RCON Protocol](https://developer.valvesoftware.com/wiki/Source_RCON_Protocol)
By calling `connect/2`, you can obtain an open TCP socket,
which can then be used with `auth/3` or `exec/3`.
"""
@evadne
evadne / environment.ex
Created Nov 11, 2018
Environment Variable based Config Provider
View environment.ex
defmodule Huddle.Environment do
use GenServer
@config_entries [
{:huddle_web, HuddleWeb.Endpoint, ~w(http port)a, {:system, "PORT"}}
]
def start_link(args) do
GenServer.start_link(__MODULE__, args)
end
@evadne
evadne / xmastree.ex
Last active Dec 16, 2019
Christmas Trees in Elixir
View xmastree.ex
defmodule Tree do
def print(n) do
for i <- 1 .. n do
p(n - i, " ")
p(i * 2 - 1, "*")
w("\n")
end
p(n - 1, " ")
w("|\n")
end