Skip to content

Instantly share code, notes, and snippets.

just setting up my gthb...

Sam Breed wookiehangover

just setting up my gthb...
View GitHub Profile

useExtendedStyles() hook

This hook is used to modify an object of Tailwind classNames.


import { useExtendedStyles } from '@sutterhill/hooks'

const defaultStyles = {

Buy List

  • Six 8' 2x6's (or at least 48 board-feet)
  • One 8' 2x4
  • 1 box 4" screws
  • 1 box 2 1/2 screws
  • Water proof stain + brush
  • (optional) chicken wire to cover 3'x5'

Cut List

  • Six 60" 2x6 for the sides
View Astro SSR
  • Dynamic HTML comes from individual bundles compiled for every server rendered page.
    • The contents of each astro template determine if a page is static or dynamic:
      • Static pages output complete HTML documents at build time
      • Dynamic pages output ES Modules that are run on a server
    • Each bundle should be and ES Module that exports a standard interface with methods for creating
      • HTML payloads
        • an entire document for full page requests
        • a partial document for incremental updates
      • a JSON payload with the props for the template
  • Individual bundles makes for an ideal target for serverless functions and makes a path for hybrid CDN + SSR deployments
wookiehangover / mac-keys.txt
Created Aug 11, 2018
autohotkey config for Mac OS-like keyboard friendliness
View mac-keys.txt
; --------------------------------------------------------------
; Application specific
; --------------------------------------------------------------
; Google Chrome
#IfWinActive, ahk_class Chrome_WidgetWin_1
; Show Web Developer Tools with cmd + alt + i
#!i::Send {F12}
View json-map.js
'use strict'
class JSONMap extends Map {
constructor (value) {
let mapArgs = []
if (value) {
for (let k of Object.keys(value)) {
mapArgs.push([ k, value[k] ])
wookiehangover / gdax-stream.js
Last active May 11, 2017
GDAX WebSocket Rolling Stats
View gdax-stream.js
'use strict'
const Gdax = require('gdax')
const h = require('highland')
const streamStatistics = require('stream-statistics')
const websocket = new Gdax.WebsocketClient(['BTC-USD'])
const tickerStream = exports.tickerStream = (s = websocket) =>
h('message', s)
.stopOnError(() =>

First steps

Better instructions here, obvs:

Install the dnscrypt-client and connect to one of the public nodes. I chose []. You can "trust" these because they issue keypairs or something(?) but, caveat emptor.

But roll with the thick client because it's convenient and you'll get to see what you're in for... which is pretty boring if you're not running dig or nslookup all the time to see where your DNS entries are coming from. But then again, it's pretty boring. But at least they're encrypted?

Paranoid mode: DNSCrypt server

wookiehangover / items.json
Created Mar 19, 2015
View items.json
"status": "backlog",
"product": {
"archived": false,
"id": 1,
"name": ""
"progress": {
"accepted_at": "2013-06-14T22:52:07+00:00",

Sprintly Cookies

22 cookies total, not counting cookies on external domains.

3rd Party Services

Cookies created on the created by external services, mostly for analytics.

  • __utma, __utmb, __utmc, __utmv, __utmz, _ga, _ga_UA-27543638-4, _gat_UA-27543638-4 are all used for Google Analytics
wookiehangover / gist:200d8679f3f19bbfd6c3
Last active Aug 29, 2015
tv code review – part 1
View gist:200d8679f3f19bbfd6c3


8: too many arguments, make this take a configuration object

10: why not attach view to the app object here?