I had originally intended to spend this post discussing Ceedling, and Unity testing, but now I won’t. Why? Over the weekend, I was reading the API guide for Arduino libraries, and realized they’re heavily focused on object-oriented programming. Synthduino was written in a functional style (it’s C) – while I’d used a basic struct to hold together a note’s frequency and duration, all the calls where global functions that accepted either a note or one of its members as a parameter. This was contrary to the API.

 

I did research, trying to find a good unit testing suite for C++. Turns out I’d somehow missed what should have been a top result: Google Test (aka gTest). I had gotten distracted by the Wikipedia list of suites, and gone through there. If only…
Anyway, I’ve spent the last 2-3 days rewriting Synthduino in C++, with classes, and rewriting the test suites. Fortunately, the logic and test data is the same, so I’ve got that going for me. Once I’ve spent more time with Google Test, I’ll try to do a better comparison between it and Ceedling/Unity.

Now that I’m starting the New Year, I’ve settled into an organization system that works pretty well for me. I thought I’d at least record it here if anyone’s interested, including my future self who may look back on this system as an unmitigated disaster and wonder what I was thinking.

WEEKLY PLANNER

The first part is a weekly planner I carry around – yes, a hard-copy. It’s a little booklet folded down to 3.5 x 6, which I’ve found is a good size to fit in my pockets. It has 2 pages for notes, then a list of long-term goals I have (with weekly milestones), and upcoming events. The main point is a daily planner section in the middle (I make a new one each week). On the left page is all of my daily tasks, and the right side is a daily schedule. I update it diligently, and record my hourly usage (if i have time, I’ll upload a sample page).

The last page is a review section, where I total up how many hours I spent each day on tasks, and then write a review of the week, noting room for improvement, and so on. It also faces my 6 month goals, “this month” goals, and weekly goals (which also appear at the top of each daily task list, so I make sure my daily tasks align).

KANBANFLOW

I use the Pomodoro technique to stay productive. Last year, I was only using my planner, but was not NEARLY as productive as I would have liked. The pomodoro technique keeps me accountable, and assuages my guilt over doing things for fun (I’m a little obsessive about productivity). I work for 25 minutes, then take a 5 minute break. Every fourth break is 15 minutes.
I also use the kanban system, with each column being a day of the week (though the first is “today”, followed by “done”, and the last 2 columns are “next week” and “later”). I sort the cards by the order I need to do them and get started. The cards match tasks on the daily agenda in my weekly planner.
Kanban flow combines a pomodoro timer with a Kanban board, so it’s great. I’m still working on totaling numbers, but my average productivity has probably increased 8-10x so far this year!

OpenProject

Finally, to track work for software projects, I use OpenProject. It’s open source,  enjoy it, have contributed to it (okay, I fixed a grammar mistake…), and it’s been very useful. I put a lot of detail in the user stories and tasks, and then reference the work package # in my planner and Kanban board.

That’s my org technique. Time will tell (or has already told, future self) how it works. I imagine I’ll continue refining it, though – every week so far since mid-May 2014 I’ve made some minor tweak or another.

For the last few years, I’ve been running a server out of my house – Linux, running on my old laptop (an old Dell Inspiron 1150 – currently ~$40 on Ebay). It’s hosted git repos, I’ve used it for email, filesharing, a wireless print server, etc. It’s been fun. It’s also hosted some web applications I’ve written for people.

In August, after having to update IP addresses several times due to my internet provider changing it, I decided it was time to migrate to a full rig, and to use some of the domains I’ve bought over the years (including this one). While I briefly toyed with the idea of just directing the DNS servers to my 10-year-old laptop, I decided to take the plunge and do “real” hosting online. Managing hardware hasn’t been as fun.

After looking around at various choices, I settled on Amazon Web Services. They offer a “Free tier“,  which provides, among other things, 750 hours monthly usage, 5 gigs of storage, and one “elastic IP” address. That last one lets the DNS servers find your server even if the specific IP address may change (it’s regenerated every time you launch a new server). You get a permanent IP that Amazon maps to the instance-specific one.

I’ve been using it now for about 6 weeks. Other than some confusion over extra billing charges, which although it was my fault, Amazon comped me a full month extra usage to cover it, it’s been smooth sailing. The documentation is great, and includes step-by-step walkthroughs for everything from starting it up to installing WordPress. It’s easy to get up and going. And it’s SO MUCH FUN to have a ‘real’ server on the ‘real’ internet with a ‘real’ domain name.

I’ll talk more about specific perks, as well as issues I’ve found, later on.