Skip to content

Instantly share code, notes, and snippets.

View avdgaag's full-sized avatar

Arjan van der Gaag avdgaag

View GitHub Profile
@avdgaag
avdgaag / stream_csv.ex
Created July 13, 2017 09:28
Streaming CSV straight out of the database to the client using Elixir, Phoenix, Ecto and PostgreSQL.
def index(conn, _params) do
conn = conn
|> put_resp_content_type("text/csv")
|> put_resp_header("content-disposition", "attachment; filename=export.csv")
|> send_cunked(200)
Repo.transaction fn ->
Ecto.Adapters.SQL.stream(Repo, "COPY expensive_report TO STDOUT CSV HEADER")
|> Stream.map(&(chunk(conn, &1.rows)))
|> Stream.run
@avdgaag
avdgaag / things.sh
Last active January 20, 2023 17:50
Command-line read-only interface to your local Things database of to do items.
#!/bin/bash
#
# DESCRIPTION
#
# Simple read-only comand-line interface to your Things 2 database. Since
# Things uses a SQLite database (which should come pre-installed on your Mac)
# we can simply query it straight from the command line.
#
# We only do read operations since we don't want to mess up your data.
#
import Html.App as App
import Html exposing (..)
import Html.Attributes exposing (..)
import Http
import Task
import Json.Decode as Json exposing ((:=))
-- MODEL
type alias Model =
@avdgaag
avdgaag / gist:7427844
Created November 12, 2013 09:10
Git pre-commit hook to reject commits that contain Git conflict markers.
#!/bin/sh
# Add this to .git/hooks/pre-commit to reject any commits
# that contain Git conflict markers.
if git diff --cached --name-only --diff-filter=ACM | xargs grep -H -n -E '^(<|>|=|\|){7}' > /dev/null; then
echo "\033[31mWarning:\033[0m You have left some Git conflict markers in."
echo 'Your commit is bad and you should feel bad.'
echo
git diff --cached --name-only --diff-filter=ACM | xargs grep -H -n -E '^(<|>|=|\|){7}'
exit 1
@avdgaag
avdgaag / gist:6865420
Last active December 24, 2015 21:29
Run Rubocop using the project settings on modified files in your Git repository. Store this in `.git/hooks/pre-commit` to reject commits with style offsenses.
#!/bin/bash
git diff --cached --name-status --diff-filter=ACM | awk '/\.rb$/ { print $2 }' | xargs rubocop -f s
exit_code=$?
if [[ $exit_code != 0 ]] ; then
echo 'Your commit was rejected because Rubocop found style guide violations.'
echo 'Run `rake rubocop` to test your code and inspect the offenses Rubocop'
echo 'has found.'
echo
echo 'If you really, REALLY want to commit this code, skip your pre-commit'
echo 'hooks with `git commit --no-verify`.'
@avdgaag
avdgaag / post-checkout.sh
Created March 19, 2013 19:30
Git post-checkout hook that automatically updates your bundled gems (if applicable), re-generates your tags index using exuberant ctags, and tries to advise you about pending migrations.
#!/bin/sh
set -e
OLDREV=$1
NEWREV=$2
IS_BRANCH_CHECKOUT=$3
function has_changes_to() {
git diff --name-only "$OLDREV" "$NEWREV" -- "$1" | grep "$1" > /dev/null
@avdgaag
avdgaag / auto_reference_pt_ids.rb
Last active December 15, 2015 02:39
Auto-labeling Git commits with Pivotal Tracker IDs found in the current branch name. This script is meant to be used as a Git `commit-msg` hook. It expects a single argument, the location of the temporary file with the commit message the user entered, and it outputs that same message with maybe some extra labels added to it.
#!/usr/bin/env ruby
# ## Introduction
#
# Auto-labeling Git commits with issues tracker IDs found in the current
# branch name. This script is meant to be used as a Git commit-msg hook. It
# expects a single argument, the location of the temporary file with the commit
# message the user entered, and it outputs that same message with maybe some
# extra labels added to it.
#
# ## Example
@avdgaag
avdgaag / DojoS2E6.sh
Last active December 10, 2015 09:39
Shell one-liner to create a histogram from a log file.
export COL=$COLUMNS; awk -F '[ ()]|ms' '/\[CatalogItem\] Retrieved/ { c[int($8 / $6 / 100) * 100 + 50] += $6 } END { for(l in c) { print l, c[l] } }' production.log | awk 'BEGIN { max = 0 } { if($2 > max) max = $2; c[$1] = $2 } END { for(l in c) { printf("%5d %d\n", l, c[l] / max * (ENVIRON["COL"] - 7)) } }' | awk '{ r = ""; s = $2; while(s-- > 0) { r = r "#" }; printf("%6d %s\n", $1, r); }' | sort -n
@avdgaag
avdgaag / command.sh
Last active December 9, 2015 23:49 — forked from anonymous/gist:4346624
Shell one-liner using Ruby to create a histogram from a log file.
export COL=$COLUMNS ; grep '\[CatalogItem\] Retrieved' production.log | awk '{ print $6 $7 }' | ruby -ne 'BEGIN { puts ENV.inspect;$columns = ENV["COL"].to_i; $all = Hash.new { |h,k| h[k] = 0 } }; a, b = $_.split("(").map(&:to_f); next if a < 1; $all[((b/a/100).floor)] += a.to_i; END { max_value = $all.values.max; puts "\e[2J\e[f"; puts "Average request time".center($columns); print "\033[37m" ; puts "ms/req ±50ms".center($columns); print "\033[0m" ; puts ("─" * $columns); $all.keys.sort.each { |k| puts "#{(k * 100 + 50).to_s.rjust(6)}: \033[31m#{"▓" * ($all[k].to_f / max_value * ($columns - 8))}\033[0m"; }; puts "─" * $columns; print "\033[5m\033[35m" ; puts "(╯°□°)╯︵ ┻━┻ © Arjan & Ariejan".center($columns); print "\033[0m" }'
@avdgaag
avdgaag / gem_template.rb
Created September 29, 2012 10:53
Ruby script to generate a custom Ruby Gem structure, including all sorts of files for RSpec, Yard, Travis etc.
require 'fileutils'
NAME = ARGV[0]
MODULE_NAME = NAME.gsub(/(?:^|_)(.)/) { $1.upcase }
ROOT = File.join(FileUtils.pwd, NAME)
def in_dir(dir)
old_dir = FileUtils.pwd
FileUtils.cd dir
yield
FileUtils.cd old_dir