Skip to content

Instantly share code, notes, and snippets.

View mathie's full-sized avatar

Graeme Mathieson mathie

View GitHub Profile
@mathie
mathie / todo-wishlist.md
Created February 13, 2014 11:16
My ideal task management system

My Ideal Task Management System

I’m not asking for much, really. I just want a task management system that provides me with the mechanisms I think I need in order to organise my life. Most of these are based on features I currently use in OmniFocus, and those I’ve wished were there at one time or another. In no particular order, they are:

  • An inbox which easily allows me to capture new tasks without thinking about organising them. I should be able to enter items into the inbox through a global shortcut on Mac OS X (ctrl-alt-space being my current one) and through a seamless interface on iOS (an obvious, always-available button in-app and importing Reminders from the native iOS app, so that I get Siri integration). And I should be able to capture emails into the inbox in such a way that it’s straightforward to get back to the original email (for replying).

  • It should be straightforward to work through the Inbox, moving individual tasks into the right place inside existing projects, or creating new pro

@mathie
mathie / keybase.md
Created December 20, 2014 12:30
Keybase proof

Keybase proof

I hereby claim:

  • I am mathie on github.
  • I am mathie (https://keybase.io/mathie) on keybase.
  • I have a public key whose fingerprint is CF61 9DD5 6116 D3CD 4380 C1AE 8F7E 58DD 002D C29B

To claim this, I am signing this object:

@mathie
mathie / proposal.md
Last active August 29, 2015 14:14
OSCON 2015 Proposal

OSCON 2015 Proposal

Title

You type "google.com" into your browser bar and press enter: what happens next?

Description

b We'll take a deep dive down the stack, into how the Internet works to magically make Google's home page appear in our web browser. Topics will range from URL parsing & DNS resolution, through HTTP, TCP, IP & routing, and all the way back up to browser rendering.

@mathie
mathie / brainstorm.md
Created February 8, 2015 19:24
A Sneak Peek at the Internet

“Morning” Pages

I was thinking last night when I was trying to get to sleep -- it's definitely taking me longer to get to sleep than it has been before I delayed the Chlorpromazine ’till bedtime — about topics I could write on for this book on How the Internet Works. There's DNS, of course, which I can wax lyrical about, and is an important part of how the browser determines which server to talk to in the first place. I was trying to think of other protocols to use. What protocols do people typically use these days that aren't HTTP? Lots of people still use mail clients, so I could talk about IMAP and SMTP, explain a little about how they work, having already dived through the stack while talking about HTTP. Last night I was struggling to think of another protocol that's familiar to end users. Virtually everything is tunnelled through an HTTP interface these days! Heck, even IMAP and SMTP is a bit of a stretch when everyone uses Gmail in their web browser! I could stretch a bit and talk about instant messa

@mathie
mathie / gist:7cca66994db9bcaefc1f
Created February 26, 2015 06:02
Atom Helper sample
Sampling process 61502 for 3 seconds with 1 millisecond of run time between samples
Sampling completed, processing symbols...
Analysis of sampling Atom Helper (pid 61502) every 1 millisecond
Process: Atom Helper [61502]
Path: /Applications/Atom.app/Contents/Frameworks/Atom Helper.app/Contents/MacOS/Atom Helper
Load Address: 0x10a572000
Identifier: com.github.atom.helper
Version: 0.182.0 (0.182.0)
Code Type: X86-64
Parent Process: Atom [61234]
@mathie
mathie / gist:d1742725372493b3af9a
Created February 26, 2015 06:09
Atom Sample (safe mode)
Sampling process 80294 for 3 seconds with 1 millisecond of run time between samples
Sampling completed, processing symbols...
Analysis of sampling Atom Helper (pid 80294) every 1 millisecond
Process: Atom Helper [80294]
Path: /Applications/Atom.app/Contents/Frameworks/Atom Helper.app/Contents/MacOS/Atom Helper
Load Address: 0x10826f000
Identifier: com.github.atom.helper
Version: 0.182.0 (0.182.0)
Code Type: X86-64
Parent Process: Atom [80254]
# Replaces accented characters with their ascii equivalents.
def transliterate(string)
Iconv.iconv('ascii//ignore//translit', 'utf-8', string).to_s
end
# The iconv transliteration code doesn't function correctly
# on some platforms, but it's very fast where it does function.
if "foo" != Inflector.transliterate("föö")
def transliterate(string)
string.mb_chars.normalize(:kd). # Decompose accented characters
mathie@Tullibardine ~ (master) $ irb
>> class Foo
>> def bar
>> "bar"
>> end
>> end
=> nil
>> Foo.new.bar
=> "bar"
>> class Foo

This is pretty much off the top of my head right now. If it doesn't sound entirely crazy, please get back to me and I'll refine it!

"It's not the code, stupid!"

In all the businesses I've been involved in, as an employee, a consultant and even my own business, one thing I've consistently seen, which ... surprises the engineer in my heart: technical issues rarely cause show stopping problems. Most often, it boils down to people. I'd like to tell a few (true, but carefully sanitised) stories about start ups I've been involved in, some of the non-technical issues they've had and what I've learned from them. Then, hopefully, the folks listening to the talk don't have to make the same mistakes I've made. :-)

Couple of specific examples:

  • If your management team doesn't get along, it's just not going to work. (This will be an interesting one to anonymise, but it's a fun story!)
class Neat < ActiveRecord::Base
class << self
def new(params = {})
if self == Search
if params.with_indifferent_access.include?(:evil_quota)
Evil.new(params)
elsif params.include?(:doom_level)
Doomed.new(params)
else
super