ProxyJump'ing the Shark
ProxyJump lets you SSH between machines using intermediaries as proxies... Holy crap, where have you been all my life?
Software Development Processes and Digital Paperwork
An overview of my preferred software development processes and guidelines. Feel free to read, use, ignore these guidelines at your own behest. This is a living document, and will be updated sporadically...
My Optimization isn't Premature, it's just Right
If you're the kinda person who posts on StackOverflow "premature optimization is the root of all evil", please, for the love of Knuth. Stop doing that...
Installing Fedora 37 on a Raspberry Pi
Fedora 37 was released a month ago and brought official Raspberry Pi 4 support with it, but let's be real, the only reason anyone cares is because it's the only hat that actually fits over the Pi's big head...
Zsh Prompts... Anything is Better than "username@hostname"
The default Zsh terminal prompt on macOS is a bit of a snooze-fest. Let's spice it up a bit with some colours, some command information, some git info, and a cheeky dash of poop emojis...
It's Pants Plugins All the Way Down
Writing a great Pants plugin is all well and good, but if it erodes commit-after-commit, then really what was the point in the first place? Get a jump on your plugin's technical debt with more plugins...
Hello, Rust, My Old Friend
I've tried Rust out a handful of times, but could never stick with it - here's hoping the 5th time's a charm...
You Want Me in Your Pants
When you're using a build system named "Pants", you can't help but make terrible jokes and puns...
Bridging Wifi and Ethernet on a Raspberry Pi
If you have ethernet-only devices, you can quickly and easily use a Raspberry Pi to provide internet access to those poor, poor, ancient devices...
Your First Pants Plugin
If you've never written a plugin for PantsBuild but you really want to, this is definitely the post for you. If you've never heard of PantsBuild, you're in for a treat...
Coffee, Malboge, and Diamond Heists
Sherlock solves a diamond heist that revolves around a snippet of code written in a programming language designed to be impossible to use. Enter Malboge...
Macguff the Code Reviewer
I can only suspend my disbelief so much. Showing me code? You've gone too far...
Don't Just Block Sites… Re-Direct Them!
You sit down at your computer brimming with optimism about all the work you're about to crush to get ready for the big demo - but first, you just need to quickly reply to that guy on Twitter about why Angular is better than React… 10 hours later - you wish you could just block everything
Android's Data Binding isn't Dead...
Ever since the Android Architecture Components came out, I've been quietly nervous that they will slowly pull attention away from the amazing Data Binding library.
CES Was Kinda Meh...
I went to CES this year for the first time and I have to say that the experience was… a complete and resounding 'meh'.
Continuous Blogging: Not what it sounds like
Continuous blogging post 1 from Jan 22nd, 2018
Android JUnit Testing for Native Libraries
UnsatisfiedLinkError - the most recent bane of my Android existence. Native libraries can definitely be tested with JUnit, and I'm going to describe how.
SnapEDA Interview with Me Re: EE
An Engineering Spotlight from SnapEDA on my thoughts about hardware design and electronics CAD tooling. One word summary? "VERIFY!!!"
MBProgressHUD - You Spin My Head Right Round
MBProgressHUD is the solution to all of your progress dialogs, spinners, non-modal dialogs, and activity indicators - you just have to know how to use it.
Hardware's Single Responsibility Principle
The single responsibility principle isn't just for software developers, it's also for hardware designers. Learn it, and learn it well!
Android 7: Why Couldn't They Call It Nutella?
Android 7 (Nougat) is now reaching about 3% of the Android market share, so, I figured it would be a good time to cover some highlighted features.
Microcontroller Pricing - It's a Scam
"Total product cost doesn't equal BOM cost, and everything is negotiable." - This rant-like post about electronics pricing summarized in one simple sentence
How to pick a Microcontroller (for Beginners)
Revisiting some opinions on how to pick a microcontroller - as a followup to SnapEDA's post on the Top 10 Microcontrollers on their site.
Does Upwork Really Work?
Some tips, tricks, and strategies for how to optimize your Upwork experience - and more over, a few comments on expectation management.
SwiftyTeeth for iOS Early Access!
SwiftyTeeth is a simple, lightweight library intended to take away some of the cruft and tediousness of using the iOS BLE.
Living Dangerously with Android Permissions
When Android M came out, it changed how app permissions work. Permissions were granted at install time, however now they are granted at run-time. This sucks
Tracking Goals Like a Modern Caveman
I'm using a bit of technology for tracking goals, and there is a whiteboard involved, which feels like carving stone paintings into a wall in 2017...
Chaining Together a Morning Routine
Using the Don't Break the Chain technique to develop the first ever morning routine of my life. There are trials and tribulations, but so far, so good!
Revenge of the Tiny Habits!!!
Tiny Habits worked well in the short term, but failed me long term. It's time to try them out again, but this time... It's personal...
Visualizing Couchbase in Chrome with Stetho
Stetho-Couchbase is a plugin for Stetho to enable visualizing and debugging Android Couchbase databases with Chrome's web developer tools.
VPN Life: StrongSwan Song
Why StrongSwan? PPTP is bad, OpenVPN is good, L2TP/IPSec is probably good depending on how paranoid you are, and SSTP is good, but also bad.
VPN Life: Servers - Keep Them Hard
We're not quite at the point of installing the VPN. There are a few leftover tasks before our servers are hard enough, so let's finish them off...
VPN Life: Server Hardening
Let's talk about hardening your server... Oh, and before I start, 'server hardening' refers to improving the security on a server. Hopefully not a surprise.
Livin' the Thug... Err... VPN Life
It goes like this... Setup the VPN, test the VPN, sleep like a baby wearing a privacy Snuggie wrapped in a blanket of encryption.
Picking Good Clients by Android OS
The object of this post is to understand how to pick good clients based on their Android OS versions. Specifically, their OS requirements for apps.
Update Bluegiga Firmware in Swift
Objective C is a horrific programming language, so, I wrote a basic Swift implementation to perform over-the-air Bluegiga firmware updates.
Bluegiga Blueteeth OTA
It's been a bit under a year in the making, but I FINALLY got around to updating my BLE113 Android OTA app. Best part? I used my Blueteeth library!
The Lazy Way to Hash Passwords
The same problems crop up time and time again (doing fake agile development, incorrect testing procedures, weak passwords, etc...).
I'm Not A Hacker
I'm not a hacker. Not even close. I'm not good at this, it's just that the state of software and hardware security is this bad.
Stopping Brute Force PIN Attacks in BGScript
Here is a BGScript workaround to help prevent brute force cracking of a Bluetooth Low Energy device using PIN code-based security.
Bluetooth Low Energy Security
Security... What is it good for...? Absolutely nothing... Or at least, that's the impression I get from the Internet of Things nowadays.
Blueteeth for Android Released!
Blueteeth is a simple, lightweight library intended to take away some of the cruft and tediousness of using the Android BLE API.
Swift-ly Streaming Protocol Buffers
I think Android is MUCH better than iOS. Like, not even close... But so I don't ignore my iOS peoples, here is a Swift streaming Protobuf implementation.
Streaming Protobuf Puns Are COBS'olete
An alternative streaming protocol buffer implementation using consistent overhead byte stuffing (COBS) encoding, instead of length delimiting.
You Stream, I Stream, We All Stream For Protocol Buffers
I have a huge man crush on Google's Protocol Buffers, and I've finally come around to talking about writing those messages to a file or memory stream.
Get Your TronCon On
A quick overview of me landing in my old stomping grounds and giving a short presentation to a few hundred people at TronCon
4 Methods of Debugging Android Apps
"If debugging is the process of removing software bugs, then programming must be the process of putting them in." - Edsger Dijkstra
Changing Android's Locale Programmatically
A quick and easy way to change Android's locale without resorting to launching an intent. Also a good way to limit locale selection to just a small few.
File Logging in Android with Timber
Logging in production is terrible, however sometimes you still need to. Keep your fellow developers sane, and stick with file logging - not to the console
BGScript Pairing - A Less Hellish Experience
To anyone who says "just have the user un-pair from the Settings page" ... Umm... Have you met users before? Handle BLE Pairing correctly.
19 Startup Ideas Waiting To Be Stolen
In the spirit of free and open-source software, I've decided to open-source a bunch of lingering startup ideas that I would like to see come to fruition.
Losing My Marbles With Reactive Extensions
I was introduced to Reactive Extensions 3 years ago, I used them about 2.5 years ago, and I started to understand them about 2 years ago.
4 Apps to Save Your Company Time and Money
Stop wasting time and run your business properly with these 4 tools that will save your company time and money - Xero, Receipt Bank, Asana, Harvest FTW!
Bluetooth Classic, Apple, and The French
Performance tuning some Bluetooth Classic modules when working with Apple's iOS devices - and some rants about MFI and ST.
Object Animation in Android
Object animation is something that seems to be very common in Android apps, however, examples on the internet seem to skip out on some crucial information.
Android Libraries - The Catch... 64k Method Limit
The notorious 64k method limit in Android apps that ALWAYS pops up at the wrong time, how to discover it, and what to do about it
Installing Windows 10 on the Surface Pro 3
A post about the fastest way to install Windows 10 on the Surface Pro 3, so that if anyone else has to do this, they can skip the pain.
Updating Your Android Kiosk App
In a previous post, I discussed the concept of making a Kiosk App in Android using The next logical step is: How do I update my Kiosk?
Switching From Copper to Fibre
Some results from switching my internet from slow, out-dated copper - to new-fangled fibre optic cable.
Bluetooth... Bluetooths... Blueteeth?
A blog explaining some of my reasoning for wanting to write an Android library to help with Bluetooth communication - unsurprisingly called... Blueteeth!
Android Adventures - Going Retro One Last Time
A first-time Android developer finding his way through the crazy world of profile validation with only awesome Android libraries (Retro Lambda) by his side.
Android Adventures - Wax On, Wax Off
A first-time Android developer finding his way through the crazy world of polish (user interface) with only awesome Android wax by his side...
Android Adventures - Saarberus with Saaripar
A first-time Android developer finding his way through the crazy world of profile validation with only awesome Android libraries (Saaripar) by his side.
Android Adventures - Picasso es Su Casso
A first-time Android developer finding his way through the crazy world of image caching with only awesome Android libraries (Picasso) by his side.
Android Adventures - Finding the Right RetroFit
A first-time Android developer finding his way through the crazy world of source control and REST with only awesome Android libraries by his side.
BLEGUI Log Parsing and Filtering
A post about a log parsing and filtering tool I whipped up, which runs alongside BLEGUI and makes BGScript and BLE development much, much easier!
4 Rules to Picking Android Libraries
The top tip I can give any aspiring Android developer is simply... Someone has already made a library for that. There are Android libraries for EVERYTHING!
Android Kiosk Mode Without Root
Using screen pinning and device owners to set up a tablet in Android Kiosk mode. Does not require root, or paying money, or hacking the home button!
Git Busy Coding or Git Busy Dying
A small summary of how to use Git in teams that I'm in charge of. Builds upon the original GitFlow methodology, but I added a few concrete examples.
Summer of (Bluegiga) Code
My first post about my Summer of (Bluegiga) Code, where I will be releasing most/all of the utilities and helper apps I use in my Bluegiga development work
BGScript Random Number Generator
This is my implementation of a pseudo-random number generator in BGScript for the BLE112, BLE113, or BLE121LR modules - BGScript does not have RNGs
BLE113 OTA (Over-The-Air) Programming
Using BLEGUI, iOS, and Android applications to program the BLE113 OTA (over-the air), via BGScript.
Android NDK in Android Studio with SWIG
This post focuses on using C++ inside of Android applications with automatic SWIG wrapper generation and the Android NDK - all inside of Android Studio.
Job Fairs - Everything Else
Having been both a job seeker and an employee seeker at job fairs, I have a unique perspective on job fairs and have some helpful tips on landing that job.
Job Fairs - What to Wear
Having been both a job seeker and an employee seeker at job fairs, I have a unique perspective on job fairs and have some helpful tips on landing that job.
Continuous Integration for $5
As an alternative to Bamboo or Travis, I'm recommending trying out Jenkins for continuous integration, and if hosting is an issue, I have a $5 solution!
Installing Jira and Confluence on Azure (Again)
An -updated0 step-by-step process of installing Jira and Confluence on Microsoft's cloud-hosting platform, Azure. Now with Bash commands!
Cross-Platform Mobile Logging Macro
For regular Windows, Linux, and Mac development - finding a C++ logging tool is pretty easy. The same can't be said about mobile development.
From Dreamhost to Digital Ocean - WordPress
This is my primer on how to move a Wordpress site from Dreamhost to Digital Ocean, including some basic metrics resulting from the move.
Invensense IMUs - What to Know
I've spent a lot of time working with Invensense IMUs and found some very interesting quirks. I've written about them and their workarounds in this post.
Installing NodeJS in Vagrant on Windows
Vagrant rarely gives me any grief as a development environment, except for when I need NodeJS. I've written a provisioning script that fixes the problems.
Ballin' in Bali
I spent a couple of weeks in Bali, and I've written about some of my experiences during that time. I've also added a few tips and tricks!
Installing WordPress on Vagrant
A blog post about installing Wordpress on Vagrant - including all necessary provisioning scripts and configuration files.
Couchbase Lite Attachments in Picasso
Couchbase Lite for Android does not have file URLs for attachments, making it hard to load those images in Picasso, I have written a small workaround.
Python Web Framework on Dreamhost
Having gone through the pain of installing a Python web framework on Dreamhost shared servers, I thought it would be nice to write a quick 'getting started'
How to Build a Hardware Company from Scratch
Are you a startup looking to become a full-fledged hardware company? Read this primer to save yourself time/money and get your product to the market faster!
Installing Jira and Confluence on Azure (Part 1)
A step-by-step process of installing Jira and Confluence on Microsoft's cloud-hosting platform, Azure. The first part, anyways.
BGScript, BGLib, and BGAPI Explained
A brief explanation on the difference's between BlueGiga BLE112's programming and communication languages (BGScript, BGLib, BGAPI).
My List of Essential Programs and Tools
This is my list of essential programs to install on a new computer, both for day-to-day work and for my development environment.
20 Minutes to Hack KLM
My take on the sad state of password security of major loyalty card companies' websites. One is particularly mathematically easy to brute-force hack into.
WordPress to WAMP Tutorial - Databases
A tutorial on moving Wordpress to WAMP, so that you can keep a local copy of your blog or website. This post discusses the database and provides a summary.
BLE112 - Communicating with the MPU6050
Read on for a full working example of the BlueGiga BLE112 talking to the Invensense MPU6050, setting up and transferring accelerometer and gyro data.
Managing Multiple Chrome Proxy Profiles
My shortcut to dealing with multiple Chrome proxy profiles, without having to download 3rd party software. A Windows solution, that is easily portable.
BLE112 - Switching to BlueRadios
The BLE112's have been fun, but they've outlived their usefulness for my current application. In this post I discuss why I needed to get away from them.
BLED112 - Virtual COM Port Emulation Stops Working
What to do when the BLED112 virtual COM port emulation stops working. Short answer: You need to re-flash firmware on to the BLED112 dongle.
BLE112 - A UART and Watermark Example
A working example of using the BLE112's UART functionality with watermarks. It now takes into account some of the BLE112's 'peculiarities' with serial data.
BLE112 - How to Do I2C Reads and Writes
A quick primer on using the BLE112's I2C bus. It was a frustrating journey, but it finally works! I still have issues with multiple register reads though...
Round-Robin Business Intelligence (RRDs Explained)
A multi-part series on my trials and tribulations with using round-robin databases (RRD) for business intelligence purposes.
Traveling Around Europe for the First Time? (Part 2)
So, you're thinking about traveling around Europe? And you've never done it before? Read on for part 2 of my advice on going to Europe without a clue.
Creating a WordPress Theme
A post celebrating the go-live of my first WordPress theme. It's a Windows 8/Metro-styled website, and based on popularity, I might decide to publish it.
My Tableau Experience
My thoughts on the BI tool, Tableau, as well as my thoughts on the company that makes it and a nifty combination chart that I whipped up.
My Downwards Cooking Spiral
How my cooking life has changed ever since I left France, and what I've done about it. Also a few tips for improving French Onion Soup recipes.
Download YouTube Videos Without Installing Software
A quick tutorial how to download Youtube videos without needing to install 3rd party software. Great way to keep your favourite videos for offline viewing!
WordPress to WAMP Tutorial - File Transfer
A tutorial on moving Wordpress to WAMP, so that you can keep a local copy of your blog or website. This post discusses the setup and file transfer parts.
SSIS String Variables in Derived Columns
My solution/workaround to an SSIS failure that crops up from using string variables in derived columns without explicitly setting a string variable length.
Don't Break the Chain says Seinfeld
My experiences using the "Don't Break the Chain" productivity technique (commonly attributed to comedian Jerry Seinfeld). In short, it works!
My Life After Facebook (Part 2)
The repercussions and reactions of me leaving Facebook. If you're thinking about leaving, follow my advice first to guarantee a smooth transition.
Traveling Around Europe for the First Time?
So, you're thinking about traveling around Europe? And you've never done it before? Read on for my advice on transportation, lodging, and what to do there.
Refreshing Intellisense in SSMS
Does Intellisense fall out of date far too often for you? Here's a handy tip for quickly refreshing Intellisense in SQL Server Management Studio.
My 3 Tiny Habits
How BJ Fogg's Tiny Habits challenge worked for me, as well as the Tiny Habits that I've added to my everyday life.
My Life After Facebook
Why I finally decided to quit Facebook. Short answer? It became a little too creepy for me.