Posts

Tiny Boston Cars

Image
For the past few years I’ve been fully immersed in the tech startup scene in Boston, working long hours at a medical tech startup. Briefly, we’re calling ourselves a medical data company. I’m looking forward to a more public marketing effort, so that someone else can figure out a clever, concise way to explain what we do. I struggle to find the words to convey the scope and depth of what we’re doing to even my technically inclined friends. The struggle to do so is a worthy one, what is programming if not translating human-meat-space desires into precise, uncaring machine language? Ideally we’d be able to push our thought stuff lossless-ly both down and up the org chart. I entertain this fantasy only because the whole of our startup can still fit into a single office, I’ll get learned soon enough.
The point of creating and writing this blog was to exercise that muscle; compressing, manipulating, editing technical topics into as plain english as possible. It turns out that among the sea …

#btvruby Conference Redux

The deadline for submitting talks to the 2014 #btvruby Conference was this past Monday (Mar 17th).  It feels a bit early to be talking about an event that's happening in August, but then again we're nearly a third of the way there. Since attending the conference last year, a number of things have changed in my life. Among others, I've moved out of state and been working at a startup in the Boston area. I haven't written a line of Ruby in at least 6 months, having instead spent all available mental resources very busily adapting and learning for the new job. Despite this, I'm still hoping to attend in early August.

The specifics of the conference have long since faded from memory. My own notes, which I thought were structured in such a way as to be easily adapted into a blog post, have proven to be completely incomprehensible. Each paragraph is less legible than the last, a zeno's paradox of increasingly terse recollection. The final talk notes contains a mere t…

Ruby Conference #btv

Attending the 2013 Burlington Ruby Conference, it occurred to me that I really ought to start a blog. Not a blog entry mind you, but an entire blog. The keynote speaker (@markbates) began the event with a talk on "Getting Better", both a launching point for Beatles references and for the sort of feel-good, anything's-possible vibe you really want when leading into a day of watching people speak in a dark room. As developers, we're not lacking in opportunities to learn and practice our craft. GitHub got the proper mention, as well as participation in conferences and local users groups. Blogging presents another avenue, an excuse to hone your more interesting solutions and solicit feedback from a wider audience.

Hey, that's a cool idea.

A moment passes; a thought bubbles up from my subconscious... Didn't I have a blog once?

As far as Vermont is concerned, Burlington is a hot bed of growing tech companies. Dealer.com continues to expand ferociously, with a whole…

Unit Testing Qt Applications

Last month I resolved to take a crack at test driven development with Qt. The notion of automated testing was first introduced to me by a friend, who was working in a QA role. These conversations stuck mostly in the conceptual realm, never quite landing for me. At least not in a way that would empower me to sit down and begin writing unit tests for real code. In my more recent forays into Rails, and this Qt project, the source of this disconnect became more clear.

I really like the Rails methodology of testing. Here are several directories corresponding to different types of tests, here's some assertions, and hey we've configured a test database for you to use, so lets go! Seeing these concepts in an immediately usable context does wonders. To an application developer, it's useful to divide the world into unit tests, and the rest. A unit test takes the smallest independent unit of a code base (e.g. a class in C++), and tests the consequences of any notable combination of i…

Forcing a re-link in complex Qt builds

Got a Qt project with one or more sub-projects compiled as static libraries? (i.e. you have a top level project with several subdirs, one of which is the app, the others being libraries the app depends on) If so, you've probably noticed you either need to do a Rebuild-All in Qt Creator, or make an innocuous modification somewhere in the app project, to see changes made in the static libraries appear in the compiled application. If not, then that last sentence made absolutely no sense to you. Sorry.

In my particular case, I was setting up a project in such a way as to allow unit testing. The recommended way to do this (which I'll go into greater depth with in a later post), is to have the bulk of your application code compiled into a static library, leaving main.cpp to be compiled in it's own project as an app linking to the library. When starting a build in Qt Creator, it won't re-link the static library, meaning changes to the code won't appear in the built applic…

Qt and the Peril of Multi-platform Deployment

Every once in a while when developing w/ Qt, I'll get caught unawares by some gnarly platform specific bug. This blog, while a bit out of date and coming from a very different time in the life of the Qt Project, expresses a frustration I strongly sympathize with. By writing a single API which wraps around native functionality, you're depending on not only the native framework to be bug-free, but the Qt framework as well.

At my lovely place of employment, we're continuing to use the Qt 4.8.x releases in our product. Every feature release we've migrated to (4.4 and up) has introduced new and surprising regressions, often specific to a single platform, for which we have patched fixes into the libraries we distribute. It will likely be some time before we work up the gumption to tackle moving to Qt 5.

When we moved to Qt 4.7, we also attempted to migrate from Carbon to Cocoa. OSX has two native APIs, which you must choose between when compiling Qt: Carbon the legacy C API,…

Adventures in Hybrid Application Edge Cases

Let's talk about hybrid applications for a moment. I'm unsure how widely the term is used elsewhere, but in Qt parlance it refers to an application which mixes web and native content. This pattern, for lack of a better word, is seen with some frequency in iOS applications (e.g. GMail and, until recently, Facebook). In the mobile world, it's an attractive proposition to implement your app once in HTML5, yet deploy what appears to be a native app on any number of platforms. Sounds a lot like the promise of a certain C++ framework...

What then, is the attraction for a desktop application developer such as myself? In the case of my esteemed and wonderful employer, you may have existing web applications (3rd party or otherwise) whose functionality you want to include in your own. This is accomplished through the use of QtWebKit, a Qt implementation of the browser engine used by Safari and Chrome. Simply add a QWebView to your Qt application and point it at the URL of your choic…