An abbreviated pause for reflection.
Ideally when you write a blog post about your baby, in this case Saleae, you really need to be excited and proud of her. The last few days I haven’t felt one way long enough to get anything down :)
In one, very real sense its kind of our moment of triumph – Woo Hoo! Cross Platform Software is Released! And yet you find yourself sometimes seriously wondering if the last two years of your life might have been much better served by staying pure Windows and releasing a flurry of awesome new products instead. Maybe it’s the sort of thing you do after you’re already successful and you can put an engineering team on it. Good question. But anyway here we are! And while we’re much farther away from having an awesome lineup of products than I’d like to be, when we do get there, our cross-platform position places a nice wide trench of sweat and tears between us and any competitor who wants to be cross-platform too.
I love that Logic runs on Mac now. I love Apple, and it’s great to finally be able to able to put up a picture of Logic running great on Mac. The software doesn’t look as good as I’d like yet, and lacks some key integration with OS X (it’s coming), but it would be difficult to argue that it’s not a really solid first step.
And now we’ve got a great offering for all the Linux shops out there. Woo hoo! Looks like embedded tools are increasingly going cross-platform (Xilinx comes to mind) and it’ll be great to be able to serve those guys now.
Another thing that’s cool is that I think it’s fairly safe to say that I’m unequivocally a Sr. software engineer now. This was not a walk in the park by any stretch. And I’m not sure that even now it would be very easy for me to do again. There’s a certain level of complexity at which you absolutely have to have a full-time, dedicated team with separation of concerns or it’s just not going to happen.
We’ve had the software in private beta for… I think ~1.5 years. Yah, that’s ridiculous. There were so many false starts and wrong paths… “Oh crap, if we do it this way we’ll just have to redo it again to support product X”. We had an initial version working and then decided that we had to switch to another cross-platform framework. Our initial revisions of the data pipeline (which were quite fast) had to be scrapped because they would have only worked with data in the format Logic currently provides. And being lead developer, and at the same time also the guy responsible for everything else that could possibly go wrong on the good ship Saleae wasn’t helpful either.
My friend Minh, who helped me on the weekends for at least a year (and for a pretty meager pay rate too) – was absolutely instrumental in making this happen. He knows a lot more about hard core c++ than I did at the time. And also how to compile on different platforms, about binary comparability, and all that fun stuff. That’s the thing about c++ — past a certain amount of complexity, you really better know how it works under the hood. I guess that’s true about .NET too, although it seems like you don’t hit that wall nearly as quickly.
Quick shout out to Stack Overflow – that site is hands down awesome, it saved my butt a lot. I have yet to post my own question, although recently I’ve been meaning to ask something about gcc.
By brother Mark spent his last summer in college (BSEE) out here with me hammering out code. He now knows more about c++, boost, stdc++, etc than I did 2 years ago. As usual, we figured we could finish it up (to the point it’s at now, basically) and launch our 2nd product by the end of the summer, with time at the end to go to Hawaii. Well needless to say that didn’t happen. =) But I think by the end of the year we’ll be about at that point. I’m really excited about the possibility that he might come out here most of next semester, as he only has one class. We kick some engineering ass working together.
The software needs more polish and bug fixes before it’s really solid, and I can’t wait for it to be really solid – meaning it doesn’t ever crash (or very rarely) – and doesn’t do anything stupid. Getting good crash reports back from the application in native code is not yet an art I have fully mastered, so that’s on the list as well. The code is littered with asserts, but some of the remaining issues are dreaded segmentation faults. But we do have enough log data give us a good shot at reproducing the issues.
I counted the other day, and the active code base consists of 236 files, half of which are headers. I don’t know how many lines of code, I looked briefly for something that could compute that (i.e. take out comments, lines with only brackets, empty lines, etc) but didn’t find much.
Over the past two years we haven’t made much progress on the Windows version (ol’ 1.0.33) of the software. Just a few odds and ends. In my mind, it didn’t make sense to continue working on a codebase that we we’re going to replace. (Not that it was – or is – clear that that’s what we should have been doing). I think it’s a testament to the original software that despite not doing much with it, Logic continued to sell well enough to keep the lights on, and right up until this release continued to get praise from users. Not to say that all users we’re happy to be told that “we’re working on it” and “feature X will be incorporated after the launch of our cross-platform software”. And so that’s certainly one of the prices that was paid. We certainly listened, and I personally felt a bit sick inside every time I had to tell someone that x, y, or z isn’t something that Logic can do, but that “it’s on our list”. It’s a very long, very good list =)
Another key to this story has been John Montey. John steadfastly handles all the shipping and most of the non-technical customer issues, and anything else that comes up, which is plenty. He’s in Massachusetts now, which is why we’re shipping from there now. John’s set up an office out there and we moved out of the 2nd office we had over here. If John wasn’t with us, we would not be launching the software, no question. His ability to keep issues off my plate is the only possible way that this code is as far as it is now.
I turned 30 in March. I was supposed to have made it by now. What can you do be keep working on it. It’ll happen as long as we can produce great products that customers love. You might ask, in that case, why logic analyzers? — to which I would answer, touché.
Oh, I was really excited about this at the time – so as the code base got larger and larger, compile times were getting unmanageably long. First of all, it was a happy day when I discovered there’s a special command switch – not in the settings — you can give VS2008 to have it compile files simultaneously if you have more than one core. (VS2010 may do this by default, I don’t know). This doubled our compile speeds, but still was not acceptable. At the beginning of the summer I put together a new workstation with parts from Newegg, the first computer I actually put together since college days. i7, 2.8GHz with hyper threading; 4 physical cores, 8 presented to the OS; and I think, anecdotally, that hyper threading is actually really beneficial for simultaneously compiling. And an 80GB Intel SSD. It’s a scream machine. I can rebuild the entire project in a couple minutes now. Recently I noticed that it wasn’t all that expensive for a 2-processor mobo – now that would really be awesome.
Logic gets a new design
Logic has a new form factor now. It’s milled out of a single piece of aluminum, so there’s no more seams. I’ve finally pinned down some metal finishing vendors who are reliable and do the finish I want (there are seriously only 2 or 3 in the US that have this process – and it was not at all easy to figure out what that process even was) so the Logics going out today have an unprecedented level of fit and finish.
The bottom of the device is an over molded, injection-molded part with our logo inlayed. I’m not entirely happy with it but it’s pretty good – and you never see it anyway. It needs to be grippier, mainly. But to do that we’d have make another tool (to increase the adhesion with a different junction design), and with our current cash flow that’s not high on the list.
There were a couple of reasons for the redesign. Mainly, I wanted to make the thing in the US, because we were having all sorts of issues getting these things made by our current vendor, and my efforts to quote it elsewhere in China, even with vendors I already knew and trusted, ultimately didn’t work out — mainly (in retrospect) because I didn’t really know how to specify the surface finish. (it would be much easier now) But anyway, I also wanted more control over the surface finish, so that meant doing that in the states too. Also, the old design was a major pain to assemble. You don’t think about how many seconds something takes until you’ve actually had to do some operation 500 times on a deadline. And, lastly, I needed to try and reduce the machining costs if this thing was going to be made in the states. So I talked with our machine shop (American Prototype) and ultimately I designed the cost down to something that was reasonable. Much more than the price before, but the reliability and quality are impeccable. Total machine time per part is about 9.5 minutes over 4 different setups and 7 different tools. The majority of the operation runs at 75in/minute; 8500 RPM using a 0.375in diameter solid carbide end mill. Sound cool? That’s because it is.
It’s pretty cool that the new Apple TV looks like a scaled up Logic :)
We also have a new carry-case for Logic, pretty much the same but has our logo on it – I really like it. Actually we’ve had this for a long time, just haven’t mentioned it before.
I followed, with much jubilation, as SpaceX put their Falcon 9 rocket into orbit on the first try. The sure willpower, and genius, and against-all-odds determination that Elon and co. exhibit are just stunning – and a real inspiration.
Well, that’s about it for now. I’ll have another update when we release the next product. Shouldn’t be too long! (famous last words…)