Skip to content

Instantly share code, notes, and snippets.

View tkshill's full-sized avatar
♥️
Trying

Kirk Shillingford tkshill

♥️
Trying
View GitHub Profile
@tkshill
tkshill / blog.md
Last active July 9, 2023 17:26
A Starter Guide To Open Source Maintenance
View blog.md

Introduction

This document serves as a way for this project's maintainers to document their process of getting their repository ready for the 2020 Hacktoberfest alongside the Virtual Coffee Hacktoberfest Initiative. We also hope this project continues beyond just Hacktoberfest, and so we thought it best to collect all the knowledge, resources and learnings we pick up along the way in one central place, both for our own reflection, as well as sometimes that others can use to create welcoming and valuable spaces for their own open source contributions.

While we will try as best as possible to create a body of knowledge that is accessible and understandable to everyone who finds it, we hope you understand that this may not always be as comprehensive, current or exact as you may want to be. The language will be more candid that you might find in your typical technical documentation, and YMMV _(Your

@tkshill
tkshill / Talks_I_Love.md
Last active April 28, 2023 16:50
7 tech talks I love (and Why)
View Talks_I_Love.md

When I just started learning to code I was very obsessed and spent far too much time watching software development videos. I was determined to become the Best Python Developer In The World (don't do this) and I would spend the wee hours of the morning watching programming video after programming video searching for more grains of insight (don't do this either). I wanted to learn the Best Way to write code; the most powerful, idiomatic, robust, resilient, elegant solutions.

That was, in retrospect, not a bad ideal. But the way I went about it may have been a bit silly.

Real working software design is about tradeoffs, and providing solutions, even when those solutions are not as elegant as we would like. And no amount of videos can replace trying your hand at solving a problem. Fortunately I learned this before it was too late.

But I wouldn't call my time spent watching my contemporaries fruitless. Good developers learn from other developers. Whether through videos, articles, courses, pair pr

@tkshill
tkshill / Readme.md
Last active April 26, 2023 01:11
Solving the Exercism Diamond problem using Haskell
View Readme.md

Diamond

The diamond kata takes as its input a letter, and outputs it in a diamond shape. Given a letter, it prints a diamond starting with 'A', with the supplied letter at the widest point.

Requirements

  • The first row contains one 'A'.
  • The last row contains one 'A'.
@tkshill
tkshill / minimal_connect_four.ts
Created March 6, 2023 18:16
Minimal version of connect 4 using Generators
View minimal_connect_four.ts
// ------------ GAME LOGIC ----------
type Player = "PlayerOne" | "PlayerTwo"
type Maybe<T> = T | null
type Board = Maybe<Player>[][]
type ActiveState = { turn: Player, gameBoard: Board }
type CompleteState = { winner: Maybe<Player>, gameBoard: Board }
type State = ActiveState | CompleteState
@tkshill
tkshill / fibonacci.ts
Created March 6, 2023 18:15
Comparing multiple Fibonacci iterators
View fibonacci.ts
const fib = (n: number): number => n === 0 ? 0 : n === 1 ? 1 : (fib(n - 1) + fib(n - 2))
console.log(Array.from(Array(21).keys()).map(fib))
const fibgen = function* (n: number) {
if (n < 0) throw RangeError("number cannot be negative")
if (!Number.isInteger(n)) throw TypeError("number should be an integer")
@tkshill
tkshill / connect_four.ts
Created October 20, 2022 14:25
connect four game logic implementation using js generators
View connect_four.ts
// ------------ GAME LOGIC ----------
/*
You can go Here to run it
https://www.typescriptlang.org/play?target=99&jsx=0&pretty=true&useUnknownInCatchVariables=true&ssl=1&ssc=1&pln=161&pc=54#code/PTAEFpK7NBxAggWQKKgDIHk4EkDCEM0AUMQC4CeADgKagAKANgIYU0BOoAvKAEROsOmAHY1eoAD58BbdgBUA7gHte5anSSsARjQA8cgHzdQcyaGEBXRozW1QAISXN2AE2OaKO3TI4GA2gC6gaSUdggAxmQAlgBuNADKZMxkdDwA3qBkFuzCAFwMLLIANKAA5swAtjSOzi75Na6gAL62dHhKFVSMNCmJyamgGQpRwqLs+R5ePuwGJeVVDXUOTo0toXR9KcYR0XGbdFLtnd29SSkh6gxKAM5R0UrCxn6WFTrsJS9vAa2gR1pKT3oNzuUQeJSBt3uwnBwKhMMhoOE31I4Qe1zIv0w6AAqkgAHLxYwAdmIqOE6NAACVMAB1Qk8ABspFJaIxIxBzEYi3qKzcXGIoEFoD8ADoxQh2OxWAAKPBY3EEgCUARFFWYVGlAH1uEYJVKKNLqXTFSKAGZRazSyzWRWKlGs0Ds6Kc-b5HaxBJnVICoUZLI5fL8QpCUS8OaVaq8-JOqKcxbNZkgUCcxigKiwxHXR2PZigGKcqJuVGvAEVCwUgAWzDioFRjAsFXJoB0ZAUNBojwADMnhG4GT23OwlAosy22x3QN3mL3QABWFnktnXABqBZcEJBD2M0r8dYb0NAQ4UAXyG6hip1PsFe8boF0mJx+MJADJn7WlPXbwYeN3X4fh6A36TqAf5HneVK0vEzJkhS6YIg8chKECKTCM6jB-Dc267h++4lEeJ5XPBwgXlwBhXqAO7kUKwrYZ+B74SUtG4f+CgQKAACMASMTe9EAeAoAAExccKPF4XxoAAMwBMJ1GybJSZxOw
@tkshill
tkshill / minesweeper.py
Created June 7, 2021 23:15
Python 3.10 with Typing and MyPy
View minesweeper.py
from typing import NewType, Literal, Union, Tuple
# Our standard grid is a 2d array of cells that are either a mine
# or not a mine
Mine = Literal["Mine"]
NotAMine = Literal["NotAMine"]
Cell = Union[Mine, NotAMine]
Grid = list[list[Cell]]
# Our annotated grid is a 2d array of cells that are either the number
@tkshill
tkshill / wordle.elm
Created March 8, 2022 20:56
Wordle clone in Elm
View wordle.elm
module Main exposing (Model, Msg(..), init, main, subscriptions, update, view)
import Browser
import Debug exposing (log)
import Html exposing (Html, button, div, input, span, text)
import Html.Attributes exposing (class, placeholder, style, value)
import Html.Events exposing (onClick, onInput)
import List.Extra as Liste
import Task
import Time
@tkshill
tkshill / Minesweeper.hs
Created April 19, 2021 00:48
Solving the exercism Minesweeper problem with Haskell
View Minesweeper.hs
module Minesweeper (annotate) where
import Data.Char (intToDigit)
import Data.List.Split (chunksOf)
annotate :: [String] -> [String]
annotate [] = []
annotate [[]] = [[]]
annotate board =
toBoard $ zipWith toOutput flatboard $ bombCounts board
@tkshill
tkshill / _medianarrow.scss
Created December 10, 2020 15:59
this file is fine... until i try to wrap the stuff in a media query
View _medianarrow.scss
/* MEDIA: only screen and (max-width: 42em), handheld ENDMEDIA */
@media only screen and (max-width: 42em) {
#outer {
background: #fff;
font-size: 0.875em;
position: relative;
}
h1, h2, h3 {
word-break: break-all;