Skip to content

Instantly share code, notes, and snippets.

View doorgan's full-sized avatar
🐍
Snek

Dorgan doorgan

🐍
Snek
View GitHub Profile

Mini validations lib

Section

defmodule Dataset do
@doorgan
doorgan / main.ex
Last active April 10, 2021 16:31
Typed struct macro
defmodule Main do
import TypedStruct
typedstruct do
field :id, integer(), enforced?: true
field :body, String.t(), default: "Foo"
field :count, integer()
field :metadata, map(), default: %{foo: :bar}, redacted?: true
end
@doorgan
doorgan / typed-vuex.ts
Last active March 14, 2021 03:00
Typed vuex mapState
import { mapState as originalMapState } from "vuex";
// Utilities to map the record fields to their function return types
// See https://github.com/microsoft/TypeScript/issues/15763#issuecomment-364205392
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type MappedOutputs<T> = {
[P in keyof T]: () => ReturnType<T[P]>; // This is a lambda so it fulfills vuex's contract
};
type MapperRecord<S> = Record<string, (store: S) => any>;
@doorgan
doorgan / app.js
Created February 25, 2021 19:08
LiveElement helper
// ...
import { define, LiveElement } from "./live_element";
define("foo", {
mounted() {
console.log("MOUNTED:", this.el);
},
});
@doorgan
doorgan / tabs.txt
Last active January 31, 2021 05:20
Kerry Eurodyne yach song bass tab
Part 1
G|-11------------14---16--|-9-------9--------7---9----|-11--11--11--12--11---9----|
D|------------------------|---------------------------|---------------------------|
A|-----------14-----------|-9-------9-----------------|-10------------------------|
D|-9----------------------|---------------------------|---------------------------|
G|-9----7----9----7----|-11------------14---16--|-9-------9--------7---9----|-11--11--11--12--11---9----|
D|---------------------|------------------------|---------------------------|---------------------------|
@doorgan
doorgan / output
Last active June 3, 2020 04:19
myers difference to git format
# Account settings
- put("/account/meta", MetaController, :update)
- post("/account/avatar", MetaController, :upload_avatar)
post("/account/cover", MetaController, :upload_cover)
+ put("/account/settings", SettingController, :update)
+ post("/account/reset_pass", UserController, :reset_pass)
# Mod specific routes
# TODO move to an admin protected scope
post("/moderation/ban", ModerationController, :ban_user)
@doorgan
doorgan / examples.js
Last active June 1, 2020 07:12
Daggy's typed unions
// @ts-check
import union from "./union.js"
const Option = union("Option", {
Some: ["value"],
None: []
});
const val = Option.Some(5)
Limit (cost=1.28..2065.14 rows=51 width=648) (actual time=0.187..3411.776 rows=1 loops=1)
Output: f0.id, f0.user_id, f0.post_id, p1.id, p1.body, p1.user_id, p1.nesting_level, p1.replies_count, p1.shares_count, p1.parent_id, p1.related_to_id, p1.old_attachment, p1.deleted_at, p1.inserted_at, p1.updated_at, p2.id, p2.body, p2.user_id, p2.nesting_level, p2.replies_count, p2.shares_count, p2.parent_id, p2.related_to_id, p2.old_attachment, p2.deleted_at, p2.inserted_at, p2.updated_at
Buffers: shared hit=390937 read=186905
-> Nested Loop Left Join (cost=1.28..780542.45 rows=19288 width=648) (actual time=0.186..3411.775 rows=1 loops=1)
Output: f0.id, f0.user_id, f0.post_id, p1.id, p1.body, p1.user_id, p1.nesting_level, p1.replies_count, p1.shares_count, p1.parent_id, p1.related_to_id, p1.old_attachment, p1.deleted_at, p1.inserted_at, p1.updated_at, p2.id, p2.body, p2.user_id, p2.nesting_level, p2.replies_count, p2.shares_count, p2.parent_id, p2.related_to_id, p2.old_attachment, p2.deleted_at, p2.ins
@doorgan
doorgan / repo.ex
Last active November 27, 2020 14:47
Ecto preload n items per entity in a list
defmodule MyApp.Repo do
use Ecto.Repo, otp_app: :my_app, adapter: Ecto.Adapters.Postgres
import Ecto.Query
alias __MODULE__
@doc """
Preloads *n* items per entity for the given association, similar to an `INNER JOIN LATERAL`,
but using window functions.