Skip to content

Instantly share code, notes, and snippets.

View joshuaclayton's full-sized avatar

Josh Clayton joshuaclayton

View GitHub Profile
@joshuaclayton
joshuaclayton / ci.yml
Created July 6, 2022 21:17
GitHub action for a vanilla Rails app with linting and auto-formatting
name: CI
on: [push]
jobs:
tests:
name: Tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres:12
@joshuaclayton
joshuaclayton / Procfile.dev
Created April 10, 2021 01:29
Rails Procfile.dev for Tailwind + live reloading of views
web: bundle exec puma -C config/puma.rb
webpack: bin/webpack-dev-server
livereload: watchexec -w app/views touch app/javascript/packs/application.js
diff --git a/src/attributes.rs b/src/attributes.rs
index e1641b2..a03d803 100644
--- a/src/attributes.rs
+++ b/src/attributes.rs
@@ -38,7 +38,9 @@ fn evaluate_attribute_value_components<'a>(
.iter()
.map(|v| match v {
AttributeValueComponent::RawValue(value) => value.to_string(),
- AttributeValueComponent::InterpolatedValue(values) => context.interpret(values),
+ AttributeValueComponent::InterpolatedValue(values) => {
WITH weeks AS (
SELECT generate_series('2008-12-29'::date, now(), '7 days'::interval)::date AS week
)
SELECT
j.id AS category_id,
weeks.week,
COALESCE(SUM(t.amount), 0) AS weekly_spend,
COALESCE(MIN(t.amount), 0) AS minimum_spend,
COALESCE(MAX(t.amount), 0) AS maximum_spend,
COUNT(t.amount) AS transaction_count,
@joshuaclayton
joshuaclayton / date_calculations.rs
Last active August 28, 2020 01:20
Grouping values by date
use chrono::prelude::*;
// weeks
pub fn beginning_of_week(date: &NaiveDate) -> Option<NaiveDate> {
if date.weekday() == Weekday::Sun {
Some(date.clone())
} else {
NaiveDate::from_isoywd_opt(date.iso_week().year(), date.iso_week().week(), Weekday::Sun)
.map(|d| d - chrono::Duration::weeks(1))
@joshuaclayton
joshuaclayton / hash_flattener.rb
Created July 5, 2018 19:48
Flatten deeply-nested hashes
def recursive_flatten(input, keys = [], acc = {})
input.keys.each do |k|
result_key = keys + [k]
if input[k].is_a?(Hash)
recursive_flatten(input[k], keys + [k], acc)
elsif input[k].is_a?(Array) && input[k].any? {|v| v.is_a?(Hash) }
input[k].each_with_index do |array_value, index|
result_key_with_index = keys + [k, "[#{index}]"]
module Time.DateConversions
(
T.Day
-- current day from system
, today
-- average
, averageDaysBetween
-- beginning of period

This is a rough draft (which works!) handling file composition for vim-projectionist.

Each of the *.json files live in ~/.projections, and projections lives somewhere in your $PATH. This uses jq to combine multiple JSON files into one. With navigation.zsh, we hook into cding into a directory, run projections, and if there's a 0 exit code, overwrite the output to .projections.json, which vim-projectionist then uses.

I've updated my ~/.gitignore to ignore .projections.json, so I'm not concerned about things messing up git.

--langdef=coffee
--langmap=coffee:.coffee
--regex-coffee=/(^|=[ \t])*class ([A-Za-z]+\.)*([A-Za-z]+)( extends [A-Za-z_.]+)?$/\3/c,class/
--regex-coffee=/^[ \t]*(module\.)?(exports\.)?@?([A-Za-z_.]+):.*[-=]>.*$/\3/m,method/
--regex-coffee=/^[ \t]*(module\.)?(exports\.)?([A-Za-z_.]+)[ \t]+=.*[-=]>.*$/\3/f,function/
--regex-coffee=/^[ \t]*([A-Za-z_.]+)[ \t]+=[^->\n]*$/\1/v,variable/
--regex-coffee=/^[ \t]*@([A-Za-z_.]+)[ \t]+=[^->\n]*$/\1/f,field/
--regex-coffee=/^[ \t]*@([A-Za-z_.]+):[^->\n]*$/\1/f,static field/
--regex-coffee=/^[ \t]*([A-Za-z_.]+):[^->\n]*$/\1/f,field/
-- ghc -O --make BenchGroupBy.hs && ./BenchGroupBy --output bench_group.html&& open bench_group.html
import Criterion.Main
import Control.Arrow ((&&&))
import qualified Data.List as L
import Data.Function
main = defaultMain [
bgroup "group" [ bench "old" $ nf oldGroupBy numbers
, bench "new" $ nf newGroupBy numbers
]