Skip to content

Instantly share code, notes, and snippets.

Avatar

Michael Bates mklbtz

View GitHub Profile
View parse-dont-validate.swift
// From: http://www.figure.ink/blog/2019/11/9/parse-dont-validate
// Original: https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/#2019-11-05-parse-don-t-validate-footnote-1-return
/* Haskell
head :: [a] -> a
head (x:_) = x
*/
func head<A>(_ array: [A]) -> A {
return array[0] // Crashes at runtime when array is empty.
}
@mklbtz
mklbtz / Swift.sublime-build
Last active August 21, 2019 19:37
Use Xcode to run Swift CLI, file regex included
View Swift.sublime-build
{
"selector": "source.swift",
"shell_cmd": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift \"${file}\"",
"file_regex": "^(.+\\.swift):([0-9]+):?([0-9]+)?:? (?:error|warning|note): (.*)$"
}
@mklbtz
mklbtz / displays.scpt
Created September 26, 2018 13:15
AppleScript that will open System Preferences and rotate displays to a preconfigured orientation
View displays.scpt
on launchDisplaysPane()
tell application "System Preferences"
activate
set displayPane to pane "com.apple.preference.displays"
set displayTab to anchor named "displaysDisplayTab" of displayPane
reveal displayTab
delay 0.5
end tell
end launchDisplaysPane
@mklbtz
mklbtz / Stopwatch.py
Last active October 8, 2018 16:08
Stopwatch - A simple class for taking time hacks.
View Stopwatch.py
from datetime import datetime, timedelta
import sys
class Stopwatch:
def __init__(self):
self._hacks = []
@property
def laps(self):
return len(self._hacks) - 1
@mklbtz
mklbtz / longings.py
Last active December 20, 2018 18:26
Things I already wish I had in Python
View longings.py
from __future__ import print_function
class NoneError(TypeError):
pass
class maybe:
"""
A two-state monad that represents the presents or absence of a value.
Think of it as a collection of zero or one values.
"""
@mklbtz
mklbtz / SketchSystems.spec
Last active June 1, 2018 16:00
No Opportunities*
View SketchSystems.spec
No Opportunities*
parts uploaded -> Estimate Requested
Estimate Requested
Reviewing Parts*
Unclean*
redact prints -> Reviewing Parts
upload dummies -> Reviewing Parts
all parts clean -> Clean
Clean
@mklbtz
mklbtz / README.md
Last active May 22, 2018 05:14
Some Unix-y command line tools written in Swift
View README.md

In the course of time, I found myself wanting to run RSpec automatically in response to file changes. I found a nice tool called fswatch to handle the file events, but I wanted a "smarter" pipeline. Following the Unix philosophy, I wrote a few tiny command line tools which I've provided the source to.

  • specname — maps a file in a rails project to its corresponding spec file.
  • debounce — makes sure multiple rapid saves don't trigger as many RSpec runs.
  • throttle — could be used to collect multiple file changes into one RSpec run, but I haven't figured that last part out yet.

The core functions are fully generic and have no dependencies on anything but Foundation, so they could be easily incorporated into a larger project if there's a use for them.

@mklbtz
mklbtz / Final-Tagless Views.rb
Created May 21, 2018 22:15
Demonstrating the "final tagless" approach to the "Expression Problem" in Ruby
View Final-Tagless Views.rb
class View
def self.image(url:)
Image.new.tap { |img| img.url = url }
end
def self.button(title:)
Button.new.tap { |btn| btn.title = title }
end
def self.stack(subviews)
@mklbtz
mklbtz / new-data-literal.md
Created March 24, 2018 19:13
SE Proposal: New literal for Data from contents of file
View new-data-literal.md

New literal for Data from contents of file

  • Proposal: SE-NNNN
  • Authors: Michael Bates
  • Review Manager: TBD
  • Status: Awaiting implementation

Introduction

In Swift today, literals give us the ability to embed files, images, and colors directly into our programs. This proposes a new literal that will embed the contents of a file as Data. The proposed syntax is…

@mklbtz
mklbtz / AbsoluteDirectory.rb
Last active October 13, 2017 15:46
A DSL for safely building file paths
View AbsoluteDirectory.rb
class AbsoluteDirectory < AbstractPath
def self.root
AbsoluteDirectory.new(nodes: [])
end
def initialize(nodes:)
raise "Last node cannot be a file, got (#{nodes.last.class})" if nodes.last&.file?
if nodes.first&.root?
super(nodes: nodes)
elsif nodes.first&.current?