I am a software engineer and problem solver. I co-own
Breadboard, a business process automation company,
and Terra Mango, a location-based strategy game.
I’m a “full stack” developer. I’ve been programming professionally for about 10 years.
I currently do everything from managing 4 other developers, server/network configuration, speccing and architecture, data modeling,
business logic, UI, UX, QA, to being a hallway usability tester. There isn’t much related to creating that I don’t enjoy doing.
I’m a husband, father of 2, have 6 siblings, enjoying traveling, and can solve a Rubik’s Cube in under 2
minutes. I play bass, guitar, piano, and a little drums. I’m a terrible singer. I drive a 90’s BMW M3 because I enjoy fixing things.
I love teaching and sharing what I’ve learned. I want to write more.
My wife makes things, too. I made her a website: Mascara and Macchiatos, which you might like if you are into fashion and/or mom-blogging. I'm also her photographer, which is a hobby I really enjoy.
I created the soon-to-be-launched game Terra Mango with my team at Breadboard.
I also developed software to streamline tax preparation and filing at Strombeck Consulting CPAs, letting computers do the grunt work and allowing people to make better educated decisions.
Before that I ran a web design and development company named Pixel Coach for 4 years.
2019 Update: things have changed since I originally wrote this article, and some of this information is not entirely accurate; for instance, there are "Taker" fees now. Much of the process is below will still work, for the most part. Hey! Don't invest more than you can afford to lose.…
This post has a couple of intentions: for myself to better understand my own philosophies, and to encourage discourse around them. to convince junior-level developers, and perhaps those who suffer from Imposter Syndrome, to stop worrying and just do it. And like the title suggests, I’m wrong about all…
In JavaScript, the grave accent, `, aka the back-tick character, allows the use of Template Literals, a new feature first introduced in Firefox 34 in late 2014. Today, about 77% of browsers have native support for the feature. Template Literals allow the use of string interpolation and multi-line strings in JavaScript.…
It's been well over a year since was Cashify shut down, so I'm way overdue for a postmortem. Cashify was an Android app that allowed users to exchange their Google Play credits for actual USD (sent to the user's Dwolla account). I've already written in detail about building it and…
Sorry about the dramatic title; I really doubt that input sanitization has killed anything. TL;DR: Don't sanitize password inputs. TL;RA*: Can you spot the bugs in the following code? /** * Sanitizes the given input by removing "<", and ">" characters. */ function sanitizeUserInput ( input ) { return input.replace( /</g, "&…
For XLSM files: Open the XLSM file with 7-Zip (right click -> 7-Zip -> Open archive). Copy the xl/vbaProject.bas file out of the file (you can drag and drop from 7-Zip), don't close 7-Zip Open the vbaProject.bas file with HexEdit Search for "DPB=" and replace it with…
The point of this post is so I don't forget how to solve this in the future. Every once in a while I receive the error message: "The target principal name is incorrect. Cannot generate SSPI context." when trying to connect to a SQL Server instance on another machine on…
Update: this project now has its own GitHub repo: https://github.com/davidmurdoch/ga-localstorage TL;DR: Click here to make the web faster. Oh, and share on Twitter, too! TL;RA: In 2010 I postulated on Stack Overflow that it may be possible to use Google Analytics without the baggage…
I recently released my first android app, Cashify. This post is a reflection on my experience building an Android app for the first time. If you want to know what the app does visit its Google Play page (and download it). Android Studio Lately, my daily IDE has been Visual…
Stoyan Stefanov at phpied.com explained how to do non-onload-blocking async JS. TL;DR: window.onload can now fire before your async script loads and we don't trigger the browser's loading indicators (except in Opera). I loved the method; but thought we could take it a bit further. I…