Skip to content

Instantly share code, notes, and snippets.

Avatar

Matt Raykowski mattraykowski

View GitHub Profile
@mattraykowski
mattraykowski / gist:fe9ef8d84128ad6d38726e915549386f
Created Mar 31, 2020
Sprint Estimation Technique: Five Finger Death Punch
View gist:fe9ef8d84128ad6d38726e915549386f
The "Five Finger Death Punch" is meant to be an uncomplicated estimation system (as opposed to using Fib.)
The estimates are pretty simple:
1. Trivial, single resource, clearly defined 'definition of done'. Likely less than a day.
2. This is usually a day-long task with multiple variables affecting its complexity:
Involved, single resource, defined definition of done but not be clear.
Trivial, multiple resources, definition of done may or may not be clear.
3. This is a multi-day effect involving multiple resources or lacking a clear definition of done.
Complex, multiple resources and definition of done may not be clear.
View StationList.vue
<template>
<div>
<p class="menu-label">Latest Callsigns</p>
<input class="input" type="text" placeholder="Filter stations..." v-model="stationFilter">
<div class="station-list">
<button
v-for="callsign in stations"
:key="callsign"
@click="focusMarker(callsign)"
class="button is-small station-list-item"
View CharacterSheet.elm
module Data.CharacterSheet exposing (Die(..), Attributes, CharacterSheet, setName, setProfession, setAgilityDie)
type Die
= D4
| D6
| D8
| D10
| D12
View UserDropdown.js
// If you make the dropdown specific to users then you can provide a lot of
// reasonable default behavior with very little need to override the provided
// behavior. You'll, obviously, need to provide an array of users and an onSelect
// function in both scenarios. But here you only need to modify the other properties
// if you have a special use-case in your UI. For example you don't want to display
// the display name but instead the username. You want to change what it matches when
// typing ahead, etc.
import React from 'react';
import { compose, withState, withHandlers } from 'recompose';
import PropTypes from 'prop-types';
View games.ex
defmodule Vassal.Game do
# ... bunch of stuff ..
@doc false
def changeset(%Game{} = game, attrs) do
game
|> cast(attrs, [:name, :year, :players, :length, :series, :description])
|> cast_assoc(:publisher)
|> cast_assoc(:era)
|> cast_assoc(:topic)
View gist:9acc43f5aaf0d28a6b89b198c35fad14
// this.
return {
...state,
loading: true,
thing: {
...state.thing,
name: payload
},
}
View gist:73c1cc7e6dc7f67f7fed7925217f5615
import { Record, List } from 'immutable';
const State = Record({
posts: List(),
collapsedComments: List(),
activeCategoryFilter: 'hot'
});
export default function(state = State(), action) {
View patch.module.js
export const types {
FETCH_PATCH: 'FETCH_PATCH',
SET_PATCH: 'SET_PATCH',
SET_PATCH_ERROR: 'SET_PATCH_ERROR',
};
export const actions = {
fetchPatch: () => ({ type: types.FETCH_PATCH }),
setPatch: patch => ({ type: types.SET_PATCH, payload: patch }),
setPatchError: error => ([ type: types.SET_PATCH_ERROR, payload: error }),
View thing.saga.js
export function* fetchAllTheThingsTask() {
const {forms, categories } = yield all({
forms: call(fetchForms),
categories: call(fetchCategories),
});
const other = convertThings(forms, categories);
yield all([
put(actions.setForms(forms));
put(actions.setCategories(categories));
View user.builder.js
export class UserBuilder {
constructor() {
this.user = {
name: '',
avatar: '',
// etc
};
}
stub() {