The Best Interface is an Enchanted Object

The Best Interface is an Enchanted Object

Book Review: Let’s look at a pair of books that contain deep critiques of the world where more and more of our devices’ functionality is exposed only through interfaces on screens, and lay out a path to a more human-centered technological future filled with devices that engage us more richly in a wide variety of ways instead of asking us to keep poking at black glass rectangles with our stubby fingers.

read more

Designing Connected Products

Someday, you’ll be sitting at your desk, minding your own business.

Your boss, or a client, will come in and start explaining this cool new IoT project you’ll be working on. As you listen, the timeline splits:

In the Darkest Timeline, no one on your team knows about what’s discussed in this book. Your boss/client starts specifying requirements that sound cool to them, but are really bad ideas in ways that aren’t immediately evident. Your team builds the project as it was specified, and it fails in the marketplace because of mistakes that could have been avoided.

In the Prime Timeline, you’ve read this book.

read more

Smarter Debugging with Unified Logging & Activity Tracing

At WWDC this year Apple engineers gave a talk about their new Unified Logging and Activity Tracing APIs which is definitely worth checking out. I know logging isn’t exactly going to steal the headlines away from Siri integration or watchOS 3, but as a developer it’s a valuable debugging tool and the changes in these APIs look to save some significant time while debugging crashes and squashing bugs.

read more

Level Up Your Coding Skills With

A few months ago I stumbled across across an interesting open source project created by Katrina Owen called that provides a collection of programming practice problems in over 30 languages. On the surface, it’s a great resource for learning to code or learning a new language. I’ve found however that as you dig deeper it has much more to offer on a number of levels.

read more

Nanobot: A Tiny Little Twitterbot Framework

There’s been a lot of talk this year about bots and conversational interfaces becoming an increasingly important tool for software developers. A few years ago I wrote about a twitterbot that I created, and I’ve just pulled out all of the common logic into a Python framework that you can use to quickly create your own twitterbots by focusing on just the bits that make your bot unique.

Check out ‘nanobot’.

read more

Django Channels: From The Ground Up – Part 2

Last time, we decided to embark on a brave new adventure and give our Django framework a big upgrade with the inclusion of Django Channels. We got just far enough to get the development server running, but while this may be an *adequate* start, it’s better to develop against something like what we intend to deploy, right?

So, let’s go the rest of the way and get ready to develop against something that at least resembles a standard production-ready environment with Django Channels.

read more

Django Channels: From The Ground Up – Part 1

You stare mournfully into the mass of code you’ve inherited. At some point, it’s clear, the requirements called for the server to push information to the client, because there’s an unholy mix of Server-Side Events, long-polling, hidden iframes and even a Java applet in there, all supporting some level of long-term connectivity with the server. It’s almost fascinating in its barely functional hideousness, and you would be inclined to leave well enough alone… except for the *new* feature specifications you’ve been assigned, which require the client to be able to send data back to the server in response to the received events, in as close to real-time as you can get.

It’s time for a major overhaul.

read more

The State of Async/Await

A long time ago, asynchronous programming was an exotic practice. Not many people were doing it, and their code was punctuated with things like assembly language and processor interrupts. Less anciently, preemptive multitasking OS’s made asynchronous programming more accessible, albeit often still with arcane and unnatural boilerplate, not to mention hazards of sharing mutable data. (read more…)

read more

An RPC Framework for JUCE

Recently, I’ve been working on a project for a long-time client who came to us with a request that we haven’t seen in a while–we were tasked with taking their existing application written in C++ using the JUCE application framework into two separate...

read more

Empty Catch Blocks

A normal user is going to click your button.

The user won’t see any kind of error message, which is maybe what you intended, but on the other hand, the button will seem to do nothing. The user will have no way of knowing whether she did anything wrong. The user will try it several times out of desperation. Then the user will attempt to contact you… No, actually that part may never happen. Then the user will close your app and go to bed because there is no conceivable way to determine what’s wrong or even if there is something wrong, and it’s literally too much trouble to ask. You’ll never know there’s a problem until nine months later when the user has to call you about a completely unrelated matter…

read more

Learning Auto Layout for iOS, tvOS, and OS X

With the release of the iPhone SE and the iPad Pro, along with the expectation that iPad apps will include support for slide over and split screen mode it’s now clear that Auto Layout is here to stay. If you’re not already developing apps using Auto Layout and Size Classes now is a great time to learn more about them and prepare yourself for any updates to the APIs that Apple introduces at WWDC in June.

Fortunately there’s a lot of great resources to quickly get up to speed and learn the best way to support a variety of devices and size classes in your next app.

read more

Picasso vs. Cezanne: Experimental Innovation and Software Development

In 2006, Wired Magazine published an article entitled “What Kind of Genius Are you?” The article highlights the work of economist David Galenson (currently a professor at the University of Chicago). Galenson is famous for postulating that artists fall into two classes: Conceptualists and Experimentalists. Conceptualists innovate radically, rapidly, and usually at early ages. The Wired article calls Picasso the archetype of Conceptual Innovation. Picasso upended modern art by inventing Cubism in his early 20’s.

Why Refactor?

Refactoring is necessary. Especially on, though not limited to, large or complex projects developed over an extended period of time (say, more than 4 months). To understand refactoring, you must understand a few core concepts about software development:

It is a collaborative endeavor involving many technical roles (developers, testers, designers, database architects) and multiple business roles (the users, the project managers, client stakeholders, product managers, etc). A software project does not come from a single “pen” but from multiple authors, all writing the same book.