Archive for April, 2008

Ramblings, 22 April 2008

Tuesday, April 22nd, 2008

Time and effort

The time is flying by.

I think I’m gaining a sense for what is achievable in a given period of time. My usual strategy is to think “I need this done TODAY” and then burn very hard to get it done. I get my payoff at the end of the day and am temporarily satisfied. I don’t really ‘get’ longer-term planning, though.

For the last few weeks I’ve been working hard and consistently. I haven’t been getting the big payoff at the end of the day, but I have been satisfied with my effort. I think that’s more important in the long term. It does make me anxious that things will never be completed, though, so I’ve spent a little time writing a plan for how I’m going to get to the next major milestone - someone giving me money for a product. My Plan for Profitability, although profitability comes a long way down the track.

I’ll probaby do The Plan in another post. It doesn’t help that I haven’t written it yet, despite claims to the contrary in the preceding paragraph.

Bluetooth sensors

I had a fun little coincidence when, within 24 hours, I received two separate enquiries for temperature logging devices. Then another one for a sound sensor. Then some accelerometers. And I want heart rate and altitude monitoring.

So one of the ’software products’ will be data logging/Bluetooth/alarming widgets. It’s within my capabilities as an electronics geek and provides a nice alternative to software (though there is a lot of software inside anyway).

I did have a half-hearted attempt at an electronics design/manufacturing business a few years back. I can confidently say that back then, I was a noob. In a few years, I’ll probably look back at this time and say that I’m a noob. I do that anyway. I’m always smarter in the future.

Anyhow, I’ve slapped together a basic Bluetooth temperature sensor. The technical challenges at this point are:

  • Produce a smaller, cheaper, more battery-friendly design.
  • Work out how to provide more accurate temperature measurements. Sensor calibration is not a business that I want to get into.
  • Design an API for people to write software for the thing.
  • Work out if there are going to be any regulatory hurdles that I’ll have to jump through - EMI/EMC emissions, RoHS regulations, export controls and so on. Software is a lot easier - any chump can ship dangerous software anytime.

It’s fun. It is a lot more capital-intensive than software, but there’s a much greater variety of activities. And being able to hold a device in your hand and say, “I created this” is satisfying on a much deeper level than software.

More and more marketing

After my initial marketing binge at the start of the year, I haven’t done much (apart from this blog). I need to get on top of it again. It helps me work out where my efforts are best spent, and I need to get some consulting work happening. Not really need, I guess, but I’d feel a lot better if I didn’t have to dip into my savings to pay my bills.

I’ve been writing content for various websites, but I have a much lower tolerance for that than coding. I can manage six solid hours/day of coding. I can manage maybe one or two for writing marketing copy. Electronics design I can do more or less indefinitely, but it’s far less demanding than either of the two (most of the time is spent interfacing with the tools rather than mentally designing things. I still use pen and paper for most of it).

Planner

One of my initial ideas (on the right) was for a hierarchical todo list thing. I wrote a prototype that satisfied my needs and then lost interest. Most of the features that I had determined other people wanted were completely uninteresting to me. Plus, the concept was more or less stolen from AbstractSpoon’s ToDoList, so I felt a little bad about trying to charge money for his ideas.

So I’ve been using this hacked-together Python-and-wx-and-sqlite thingo for a year or so, now, and it suits my needs beautifully. I’m sure it will suit somebody else’s needs, so rather than try to commercialize it, I’m going to stick the code up somewhere and let you lot Have At It.

Eventually, anyway. Releasing free software is not on The Plan, so it will most likely get ignored for a while.

Status report, 15 April 2008

Tuesday, April 15th, 2008

There’s a lot of stuff on my plate right now. Everything is progressing reasonably well:

  • Client A is still causing trouble, but they appear satisfied for now.
  • The Mutex Labs website design is looking very good. I’ve also started writing content for it, so that should be up in the next couple of weeks.
  • I’ve started narrowing my focus for consulting work. I’m going to start out focusing on embedded C coding, particularly the Gumstix platform. I’ve been writing a list of things that I’m good at and would like to work with, so that should lead nicely to a list of capabilities for consulting work.
  • I’ve also been trawling local job sites to see what is going. There’s a surprisingly large amount of work available. The old pains of dealing with recruiter ads is showing - “must have xyz in the SDLC”, “must have 93 years of experience in brand new tech Y”, “must be an expert at buttering bread”. Stupid stuff like that. I’m trying a different tack this time and seeing if I can more or less bypass the ad and get people excited about the package that I bring, rather than just checking boxes on the ad. It’s going to be interesting to see if I can convince employers to let me work independently from my office rather than being a short-term full-time contractor.
  • Something that is working quite well for me is looking on freelancer sites like Elance and getting in contact with the people with work available. I’m generally not able to compete with overseas programmers, price-wise, but I can offer things like business relationships or I-build-it-you-license-it-from-me type of deals. That’s fine for me - I love building things and I want to work on my product portfolio. I have two hardware projects on the burner and a very interesting third in discussion.
  • I’ve even been working on SyncDroid! I’m in the middle of some really hairy multi-threading-uncertain-relationships code, but it’s coming along slowly. I think that once that’s out of the way I can start using it on a day-to-day basis. At some point I have to do a bunch of UI coding, but I’m avoiding that for now.

Something that I’m going to have to watch is not taking on too much at once. I love the feeling of a new project, but I fall down when it comes to actually completing them.

I’ve noticed that money appearing in my bank account improves my motivation quite a bit. This is probably the main factor that is encouraging me to look for work at all - just that nice reassurance every couple of weeks. I don’t need the money right now. I just need to know that if I want to, I can earn some cash. Conversely, big projects like SyncDroid are difficult for me to stay focused on because I don’t see any immediate payoff and won’t for a while.

Do I stay or do I go? Again!

Sunday, April 13th, 2008

I’ve been thinking about my current work situation a lot.

For the last month or so, my workload has been primarily Client A and MicroISV work to fill the gaps. Client A is getting very sloppy about paying invoices, typically running a week or two overdue. I need to forcibly remind them and usually resubmit the same invoice multiple times. They are a high-stress client, change their mind a lot and have frequent emergencies. Two years ago when I started with them they were paying what seemed like a lot of money. In that time I’ve taken a pay cut, suffered from high inflation and significantly improved my skill set, so I’m not being paid very well either.

So I think the time has come to let them go.

Of course, this is the ‘take the leap’ problem all over again. Do I try to make it on my own, or do I stick with a stable (ish) thing?

This time, I’m going to take a different approach. Rather than try to make it purely on the MicroISV, I’m also going to cultivate some consulting work. I’m eager for the human interaction, and seeing payments go into my account is a big motivator. I don’t need to be earning a lot overall, but I do want to keep my hourly rate at a fairly good level. What constitutes ‘good’ may shift with time, but I’m still comfortable for a few years even if I don’t earn anything.

Along the way, I should pick up some interesting contacts and ideas. Not that I’m short on ideas already - the challenge is in completing them before getting distracted by the next shiny new thing.

I’ll be without predictable income for the first time since I started working (seven years). I should take a proper holiday. It’ll be the first one since I started working, too.

I think this is the right direction for me to head in. And, as always, the worst that can happen is that I have to get a job.

Status report, 5 April 2008

Saturday, April 5th, 2008

Ah, how time makes fools of us all. From Jan 22:

I’m at a point in development where I can finally say I understand how the whole application is going to fit together. It’s very reassuring - there was always this uncertainty as to how the different modules were going to connect (in particular, how asynchronous events were going to move around.) Now that I have a model I’m happy with, it’s just a matter of ‘colouring in’ what’s left.

I’ve just returned to the SyncDroid code after a few months off and I have that “holy crap, what was I thinking?” feeling. The small-scale implementation is fine, but the object model sucks. I can’t figure out what should be talking to what. Comments that I’ve left in the code indicate that I did have a plan, but when the journaller code is making merge decisions and the merge code is storing data on the disk, it’s a sign that something has gone wrong.

So I’m refactoring it all. Again.

I have a new plan which looks suspiciously like the old one. I think the difference is that this time I have a better idea of how data flows through the system. I’m finding SyncDroid to be very difficult, conceptually - there are multiple threads and multiple priorities and databases coming and going all of the time. Alan G. Carter of The Programmers’ Stone speaks of the importance of juxtaposition in programming. This project has juxtaposition up the wazoo. There’s enough that I can’t hold it all in my head at once (yet) and so I’m struggling.

Perhaps it reflects the elementary difficulty of what I’m trying to do. Perhaps that’s why no-one has done it before. I’ve certainly never struggled so much to hold a mechanism in my head before, and in past lives I’ve programmed 64-way machines, massively parallel dynamic hardware, and then both in the same system.

Anyway. It’s coming along, slowly. The other thing that I’m noticing with Python is that the amount of behaviour you pack into a given volume of code is very high. My major contract client has me coding predominantly in C, so it’s quite jarring at times. It’s not a bad thing, but I often wonder how much more difficult this would be in C. I don’t worry so much about memory management - I’ve got that pretty well down - but more things like standard libraries and unexpected crashes. The nasty thing about C is that it’s so brittle - a single misused pointer will crash your entire program. Python won’t let you make that sort of mistake, and if you do anyway, it handles the mistakes far more elegantly.

I’ve also finished some C security work lately and have come to the conclusion that if you want to write secure software, don’t do it in C. In fact, let’s generalize that. Don’t ever use C. That’ll be the right choice most of the time. If someone asks you to code in C++, run for the hills. Or at least make sure you’re invoicing by the hour.

Maybe it’s time for a holiday. My 26th birthday is coming up soon and I feel very old.