]]>http://dronecolony.com/2014/01/04/linderhof-palace/feed/0Starting Fresh (Again, Like Before)http://dronecolony.com/2013/09/01/starting-fresh-again-like-before/
http://dronecolony.com/2013/09/01/starting-fresh-again-like-before/#commentsSun, 01 Sep 2013 16:58:55 +0000http://dronecolony.com/?p=246In 2001, my friends Misha and Matt, whom I had worked with in my tenure at Insync, reached out to me with an idea they had for a network security firm. This was fortuitous timing, as my position at Questia at the time was hanging on by a thread, with the third round of layoffs looming. We talked for a while about some technologies I had been designing to solve similar problems, and from this Alert Logic, inc. was born. We struggled for the first several years, our plans were complex and the market wasn’t yet ready to hear them: SaaS was a term not yet on most firms’ radar (and when it was, it was about how you shouldn’t let your data live elsewhere), the idea of being both an MSSP and a core tech play was still laughable to most, and our plans for white-labeling through hosting providers kept hitting the same snag: we were too small for the big hosting providers. But, the team persevered, we built new technologies, we hired analysts, we did everything we could to keep the business growing. There were certainly times we all wondered whether we were going to make it, but then the traction kept coming and both the revenue and the team grew at an accelerating rate. I, along with the rest of the team, put everything I had into the business – every waking hour seemed to involve Alert Logic. The focus was always on success — often to the detriment of interpersonal relationships and our social lives, but to be fair: starting a company is a lot like being a parent, you’re not going to let anyone get between you and your child’s well-being.

In 2010, I had a little side-project going on. I was determined to create the first open-source hardware company in the photographic motion control industry. It was a hobby that had taken over a full third of my loft at the time — I had a small machine and electronics shop right next to my living room. I took a sabbatical from Alert Logic to set everything up, and Dynamic Perception was born with Jay. At the same time, Alert Logic was growing even more fervently, and when I came back from sabbatical I had to give some serious thought about where the best place for me was. I have always been best at reaching into new markets and doing whatever it takes build a product that people like, and prove the value in that market. I found that opportunity again at Alert Logic, and moved from Chief Architect to Principle Architect in the Emerging Products team. This, to most people would be a downward move, but it let me focus on what mattered to me: running hard and building brand new products. After completing the demonstration version of the automated IDS for AWS product, I stepped back to think about where I should go from here…

With nearly 150 great employees and more amazing development talent than I had ever seen before at Alert Logic, I realized that my child was now on firm footing, and becoming its own thing — no longer in need of constant attention from me, and I had another one growing at the same time at Dynamic Perception. So, closing off an amazing decade of creation and hard work, I left AL to focus full-time on DP. In the past few years, Alert Logic doubled in size and revenue, and DP grew fast and hard as well. Both have come to be household names in their respective markets. In August, the deal had been done with Welsh Carson to acquire a majority stake in Alert Logic. Also in August, another deal was struck: my interest in Dynamic Perception was being acquired by my partner, Jay. You could say this was an exceptional summer for me (and you’d be right).

Why the latter deal, you might ask? One of the things I learned most about during the past few years is how difficult the electronics development process can be, especially for those with little to no experience. I have a very real desire to make this process easier, more fruitful, and more rewarding. To this end, I’ve chosen to focus on building a new set of products and services for makers to help get over the many hurdles I’ve had to cross, to learn and create faster, and to make projects that are better and safer for their users. Our first announcements about product will come close to the holidays, but we’re already hard at work. I hope to do my part to help make Houston a focus of the electronics industry and an even more important location in the maker movement than it is now.

So, here’s to fresh starts, again!

]]>http://dronecolony.com/2013/09/01/starting-fresh-again-like-before/feed/2On Supermarket Cuts and Dynamic CSS in Qt Appshttp://dronecolony.com/2013/08/11/on-supermarket-cuts-and-dynamic-css-in-qt-apps/
http://dronecolony.com/2013/08/11/on-supermarket-cuts-and-dynamic-css-in-qt-apps/#respondSun, 11 Aug 2013 16:42:35 +0000http://dronecolony.com/?p=241I always prefer to buy whole or large cuts of fish over the pre-made steaks and filets at the grocers. Living on the Gulf Coast makes this easy, I can always head down to the piers at Galveston, and find something nice at the fish markets. (Or, just take the kayak out and come home with very fresh redfish, flounder, or trout from the marshes.) The reason is simple: I pay bulk prices and then can choose how I want to prepare the meat. The grocer only occasionally has the cuts I want – imagine the look on the barely trained fishmongers face when you ask her what she did with all of the saltwater quail? I mean, I know those redfish filets came from somewhere…

In the same vein, it’s important to give your power users choice. Like the grocer who doesn’t impress me when they charge $25/lb for a yellowfin steak that’s half sinew, your design decisions may be perfect for most users, but give someone who uses your app every day the shivers. Once you make a decision to use cascading style sheets in your Qt application, why not let your users have some control over them? Sure, most won’t touch the CSS themes, but some may – and a contributing user is the best kind you can have. Imagine that you could have a color-blind theme with no additional effort, or someone could contribute day/night themes.

We take a bit of load-time hit to use dynamic CSS themes stored on-disk, but to be fair – on most modern systems it’s not going to be noticeable to the user. When I built Graffik, I chose to make themes organized into a folder inside of the application folder, and make them user-editable. The user can also change the theme while the app is running, and choose which theme looks best for them. I’ve broken out the QtDynamicThemer class which enables this separately, to make it easier to find and use, but it’s pretty straight-forward:

One-time themeing (for short-lived items like dialogs) – we can just set a dynamic style sheet from the ctor:

(Of course, we use a singleton as the class needs to read the disk to see what themes are available. In this case, a singleton lets us read the disk once at startup for all instances.)

Using the Themer Class

The core Themer class expects a directory in the application path, which you can specify at compile (or run) time via the themePath() method. Each named theme will exist as a subdirectory within the theme directory, with the directory name being the same as the theme name. For example:

themes/
Theme1/
Theme2/

Within each directory lives the theme files, with one file for each named object. A named object is any independent theme setup you want to create, you can do this on a per-widget basis (“fooWidget“), or on a whole class of widgets – it’s up to you. The name of the object will be passed to the getStyleSheet() method. You can specify OS-specific theme files as well, see the docs for more information on this. A normal setup might look like:

themes/
Theme1/
foo.css
foo_win.css
bar.css
bar_osx.css
bar_win.css

Automating Theme File Deployment in Your Project File

Of course, having a bunch of theme files to copy around can be a pain in the butt at build and deployment time. I like to use a project include file to automate this. Essentially, create a subdirectory in your project to hold all of the theme files, and then add a .pri file in there that uses a QMAKE_EXTRA_TARGET directive to copy the files to the correct location in your build/deploy process. Take a look at Graffik’s themes.pri file for an example of one way to do this.

That’s it – it’s a simple class, with simple usage, but by combining it with a CSS-styled application, you can give your users more control, and easily provide varying themes yourself. Not to mention, it’ll let your designers skin your application without mucking with your classes. *wink*

]]>http://dronecolony.com/2013/05/16/park-path/feed/0Customized QDial with QSS Supporthttp://dronecolony.com/2012/12/11/customized-qdial-with-qss-support/
http://dronecolony.com/2012/12/11/customized-qdial-with-qss-support/#commentsTue, 11 Dec 2012 18:05:18 +0000http://dronecolony.com/?p=229Googling “customize QDial” will generate a lot of results telling you to sub-class QDial and create your own paintEvent. Of course, there are precious few examples floating around of exactly how to do that, namely rotating and scaling images. As I had to create a customized QDial recently, I thought I’d share the class I wrote for doing it, which allows each dial to be skinned via QSS, making it play nicely with Qt Designer (hint: promote your QDial to this class). The QDial to the right here serves as an excellent example of what you can do.

]]>http://dronecolony.com/2012/12/11/customized-qdial-with-qss-support/feed/15An Intelligent, Auxiliary Controller for Offroad Vehicleshttp://dronecolony.com/2012/07/14/auxplus-an-intelligent-auxiliary-controller-for-offroad-vehicles/
http://dronecolony.com/2012/07/14/auxplus-an-intelligent-auxiliary-controller-for-offroad-vehicles/#respondSat, 14 Jul 2012 15:18:12 +0000http://droneone.wpengine.com/?p=221Control up to five auxiliary accessories in the vehicle (up to 15A each, or 45A total) using standard, replaceable Bosch-style relays. Control via remote control interface (Linux) over RS485 or via standard switches. Atmega328p processor and custom bootloader makes it possible to program via Arduino IDE over RS-485 bus. Uses the MoCoBus libraries I developed for Dynamic Perception for rapid protocol development. GUI written in Qt. Will release all files and code open-source when done.

Additional Features:

Battery Voltage Monitoring

Self-Regulating Temperature with DC fan control

Optical isolation between relays and CPU

Fail-safe aux control with mechanical switches

All relays in off-state during power-up

]]>http://dronecolony.com/2012/07/14/auxplus-an-intelligent-auxiliary-controller-for-offroad-vehicles/feed/0Automating Qt Help Compilation from Project Fileshttp://dronecolony.com/2012/06/20/automating-qt-help-compilation-from-project-files/
http://dronecolony.com/2012/06/20/automating-qt-help-compilation-from-project-files/#respondWed, 20 Jun 2012 15:54:53 +0000http://droneone.wpengine.com/?p=219It always bugs me that while the UI and moc generation is automatic and doesn’t require much effort to make happen in Qt Creator, the help file generation has no such automation that I can find built-in to the IDE. Here’s what I add to my project file to compile the different help files and put them where they need to be for the built program to access.

]]>http://dronecolony.com/2012/06/20/automating-qt-help-compilation-from-project-files/feed/0Backyard Gardeninghttp://dronecolony.com/2012/05/20/backyard-gardening/
http://dronecolony.com/2012/05/20/backyard-gardening/#respondSun, 20 May 2012 19:38:40 +0000http://droneone.wpengine.com/?p=178What available space on our lot the bungalow and the requisite set-back in the front doesn’t fill, our separate garage in the rear and its associated large parking pad (an effect of having the garage at a 90-degree angle to the driveway) consumes. Of course, we do have a small grass area, only about 15’x16′. Having been in the house for nearly three years without having made any appreciable changes to the outside, we’ve set about converting this small patch of dirt into both a garden and an entertainment/lounging area.

The first step in the process has been to create two raised bed areas, one along the fenceline as a primary garden, and another along the house with a trellis for berries and climbing vines. Both boxes have been completed and the main garden box is getting well-established after only a few weeks. The vines box still needs its trellis made and to have vines planted. When completed the backyard will also have a water garden, one potted fruit tree, a paved seating area and a center firebox for entertaining.

All boxes were designed with both looks and simplicity in mind. Whitewood 2x4s are utilized, and the only cuts required are for the end-pieces to cut them to shape. For the main garden box, the height chosen was 5 2x4s and the width approximately 2 3/4 feet. Resulting in approximately 25 cubic feet of useful contained soil. No fastening hardware is used, instead the panels are assembled using expanding glue and pipe clamps. Having irregular jointing from the standard edges on the 2×4 studs, and a rough application of custom-mixed stain with a single coat gives the boxes a bit of a rustic edge, while still having a clearly decorative intent. Three heavy coats of spar urethane inside and out provide a lot of protection for facing the weather. Due to the gaps in the rough joints, an interior liner of weed fabric is used to keep the soil from spilling out of the larger gaps.

The main box follows a basic square-foot style gardening tactic, with 14 divided sections – 12 at 12″x16″, and two at 18″x16″. This high-density method takes a little more work, but can produce a lot more, and a larger variety of, crop in the same amount of area. The two larger sections are currently used for the biggest plants: our heirloom tomatoes and purple pole beans. Other plants include: jalapeno peppers, three kinds of basil, sage, rosemary, carrots, beets, arugula, soybeans, lavender, thyme, chives, bell peppers, and micro greens. Three areas are reserved for micro greens and as this is a thing we love to constantly eat, they are planted to ensure a nearly-constant harvest once they take off. At 25 days to harvest, each plot is planted one week after the next, and re-planted when harvested. Our first batch of seeds didn’t perform well, so we just re-planted with a new batch of seeds this weekend. We’re hoping the timing on this will keep us in fresh bits of salad well into the winter. The pole beans have been our most aggressive grower, in just two and a half weeks since planting seeds, they have grown up to several feet above their 3′ poles.

Of course, urban gardening is not without its pests: our basil and thyme have been hit the hardest. The basil by large caterpillars and small grasshoppers, and the thyme by snails. We have a large rue plant to attract the black swallowtail caterpillars, but as of late there haven’t been any. We can’t identify this caterpillar eating our basil, so we’re presuming it to be a large moth. Lids of beer set out are starting to do their job with the snails, but I doubt we’ll make much of a dent.

We love mint too, but it has no place in a container garden with other plants – it tends to grow wild and out of control. So, our peppermint is happily getting along in a large pot.

As we get more done in the backyard, we’ll post photos and how we did it. In the mean-time, here are a few garden photos:

]]>http://dronecolony.com/2012/05/20/backyard-gardening/feed/0Welcome Backhttp://dronecolony.com/2012/05/20/welcome-back/
http://dronecolony.com/2012/05/20/welcome-back/#respondSun, 20 May 2012 18:23:07 +0000http://droneone.wpengine.com/?p=177After a long hiatus from blogging and managing my personal website in general, I’ve decided to start again. Previously, I had two blogs (roamingdrone.wordpress.com, shutterdrone.wordpress.com) and one website (dronecolony.com). Here, you’ll find both blogs combined into one, and the new blog now replaces the old website. I hope that you’ll find the content here engaging, or at least a worthwhile distraction. Thanks for coming by!
]]>http://dronecolony.com/2012/05/20/welcome-back/feed/0Desert Oasishttp://dronecolony.com/2010/04/10/desert-oasis/
http://dronecolony.com/2010/04/10/desert-oasis/#respondSat, 10 Apr 2010 17:55:49 +0000http://shutterdrone.wordpress.com/?p=93