Blog Closed

This blog has moved to Github. This page will not be updated and is not open for comments. Please go to the new site for updated content.

Thursday, July 31, 2008

Enter the Asus Eee PC

Today was the worst day of work I've had so far. It was a pretty misfortunate day that I hope does not represent how the rest of my tenure at Ionx will go.

I was informed yesterday that we were going to be bringing in a contractor to help do some development work on the company website. Since the website--which serves as a tracker for our GPS-enabled device-- is a key component of the long-term business strategy, it only made sense to get some more hands working on it. I could have helped myself, but ASP.NET is not in my core area of expertise and the learning curve would have been higher then necessary. The problem is that we didn't have a spare computer for the contractor to use. We decided that the best approach was to give the contractor the PC that I had been using (which was used before I got it, and wasn't in great shape software-wise), and buy a new laptop for me to use.

Let me diverge here to talk about the computer set-ups that the other engineers are using. Most of them have laptops, all of them have large flat-screen LCD monitors. Some engineers have two or even three such monitors. I'm very used to my 1-screen setup at home, so I'm not dying to get lots of extra monitors put on my desk. My desk is relatively small anyway, and would become crowded if I added too many.

So yesterday I got a list of all the software our new contractor would need, and started setting up my computer for him. I got software installed, uninstalled some stuff that I had been using, created the new user account, and moved the PC over to the new desk. A new laptop was coming, and the contractor would be here early.

When I came in this morning, I was greeted by a sight so preposterous that I could barely believe it: On my desk was a shiney new Asus Eee PC. Just shy of 9 inches of economically-priced hardware. "What is this?" I asked, flabbergasted. "It's your new laptop." Good. They told me not to worry, I would get a bigger monitor, a keyboard and a mouse.

The day went slowly, tediously. The Eee boasts a 900 Mhz Intel Celeron and 1Gb of RAM, but it's performance was not what I would have expected from those numbers. It suffered from intermittent pauses of 5 to 10 seconds where the entire computer would freeze and become unresponsive. Installing even the bare essentials (Perl, FireFox, Notepad++ and the necessary ODBC drivers) took a good portion out of my morning.

And every single person in the company had to stop by and take a gander at my precious little misfortune. "It's so small!", "Look at how small the screen is!", "Where did you get that, a box of Cracker Jacks?". It's like I had nothing better to do then play tour guide.

To say that my productivity was quartered is possibly an understatment. A trackpad is a poor excuse for a mouse. The little keyboard was far too small for my fingers (and my fingers aren't large by any stretch), and everything I typed was riddled with typos. It is, in short, not a computer that I can be doing any real work on. I did manage to find an old keyboard, and a wireless mouse that didn't have any batteries. Maybe, tomorrow things might go a little better.

The boss was changing his mind all day. First he said this was just a "test", and that I would be getting a regular laptop in a while. Later, he said that I would be keeping the Eee until the contractor left and I could reclaim my old computer (in about 6 weeks). Later still, he mentioned to somebody else that he was looking to buy a new computer "and maybe give it to Andrew W, if there isn't another need for it". I'm going to have to make it clear that it's just not a computer I can be expected to do any serious work on.

Now, I don't want to sound all negative about the Eee, it's a neat little piece of engineering and I might like to buy one for myself one day. It's light and very portable, and it's a capable 32-bit computing platform. If I had my own I would definitely replace the default Windows XP with Linux, but that's a small point (I would do that to any new computer). However, and this is worth repeating, it isn't a computer that I can do 40 hour work weeks on. It isn't a computer to sit at a desk under florescent lighting and crank out code.

Hopefully tomorrow goes better, hopefully this computer is just a (very) short term ordeal.

Wednesday, July 30, 2008

Keeps on going on

Things at work are going well. I've been informed today that I would be getting new business cards. This prompted a few moments of trying to figure out some important details: what, exactly, is my job title? What is my desk phone number? I mean, I know my phone's extension, but I didn't know what the number was to reach it from the outside. Now, I know. I asked my boss what my job title was, to which she replied, "I dont know, what would you like it to be? What is mine? I'm probably a senior software engineer, I guess". Well, I guess that makes me a "Software Engineer" then, which is fine by me.

I've also been informed that I'm going to be getting a new laptop and widescreen monitor. This is a little bit depressing, because it's taken me so much time to get my current computer set up properly. Of course, I won't complain about having a big second monitor, a single screen is barely enough to contain my productivity (or stimulate my interest).

Had lunch with Johnny today. He's uncharacteristically busy now, summer is normally a down-time for him. Apparently, and this is a correlation that I would never have made myself, people who are feeling the effects of the down-economy are spending more time in their own lawns and gardens, and less time traveling for vacation. Hence, Johnny has been busy making people's gardens more picturesque. He's also been doing a lot of cool work on Wikiversity too, something that I am envious of. I rarely have any time to log on and wind down with a little Wiki with work and Parrot eating up all my time.

I'm hoping that once Dana and I move in together I will be able to use my weekends more productively. I certainly have a lot of projects on the back burner that I would love to pour more attention into.

Johnny and I went to Mino, the nice little sushi joint in my neighborhood. They always have nice specials, and reasonable prices, so it's a big bonus. I was half expecting to see Geoff and Kara there, since they are both home now and Kara was talking about it yesterday. However, I find out today that they went to Capos instead. Capos is an awesome little italian deli that makes fantastic hoagies. After exchanging stories, I was envious of their lunches, and they were envious of mine. A delicious hoagie and a little tiramisu would sure hit the spot, but I don't want to be spending so much money on lunches. Sometimes I just need to buckle-down and brownbag it.

My Parrot progress hasn't been going as well as I would like, and I am having severe doubts that I will be able to "finish" my collector by the end of the GSOC program. chromatic has said he's satisfied with my work despite my inability to finish. It was a hard project, and maybe the expectation was never that I would get it all done on time anyway. I'm still working on it, but progress is obviously going slower that my time is taken up with a "real job".

Friday, July 25, 2008


Nine Inch Nails is doing something awesome, for those of you who don't keep up on these kinds of things. They've released an album, The Slip, which is made available for free download on their website:

You go there, go through some brief registration (which is both painless and easy), and then download one of a set of possible alternatives: MP3 files, Wave files, etc. It's all free, you don't even have to pay for the bandwidth. However, NIN has also released a series of physical versions, a limited-edition CD and an unlimited vinyl set. I say the CDs are "limited edition", but with a production ceiling of 250,000 units, it's not a pressing limit.

Today, having some time to spare before Dana gets off work, I went in to Barnes & Noble to hunt myself down a copy. I walk in to the store, up the escalator to the CD section, and to the "Pop/Rock" N shelf. There it was, one copy sitting right on the front of the stack. As of about 4:30 today, I am the proud owner of The Slip #25527 / 250000. Score one for me. It's not just a CD, but a DVD of live performances of the songs, a booklet with lyrics and artwork, and a set of cool stickers too. It's a great package, and I recommend any NIN fans go pick it up if you haven't already.

The neat thing about this all is that the album is released under the CC-BY-NC-SA license. It's not a license we use at Wikibooks, or a license that is used at Wikipedia either (the NC part, which stands for "Non-Commercial" is against the Wikimedia licensing rules), but it's still a very cool free license. The license notice is even printed in the CD booklet, to make sure people know about it. I can copy the songs and share them with all my friends. I can burn another copy of the CD if I want one, or if my brother wants one, or if anybody wants one. I can download the files and edit them to my liking, and post my remixes up for public download too (I probably won't, but it's liberating to think I could).

NIN has gone against every rule the recording industry holds dear: They released an album for free, encouraged downloading, sharing, mixing, and posting, and are still making money off it. If they sell all 250,000 copies to collectors for about 20$ a peice, they've made 4 million bucks. 4 million dollars is not a bad profit from a free album. Of course, this presupposes that they sell all the copies (and also ignores any possible profits they could make from the vinyl sets) but it's an interesting ballpark number.

We could be looking at the future of the music industry. If you like what you see, support the effort and make the music execs take notice.

Thursday, July 24, 2008

Asynchronous Race Conditions

We've been having a serious problem with the reliability of our satellite communications for the last week. Our target is a 95% success rate (preferrably much higher), but for the past week we've been hovering between 80% and 90%. A few abysmal tests have even wondered down into the high 70s. These results come from us running stock hardware and stock software directly from the satellite transmitter manufacturer. Why we were seeing such poor rates was a huge mystery. When you're dealing with wireless communications in general, and satellite communications more specifically, there are a number of problems that you have to contend with, any one of which can ruin your results:
  1. Line of sight. If there is a lot of garbage between you and the satellite (buildings, trees, powerlines, mountains, etc) your signal quality is going to degrade. Less signal = less reliability.
  2. Noise and interference. Ever hear of multipathing? Multipathing is when data from the satellite, which is being broadcast over a wide area, the signal can bounce off various objects. Multiple versions of the signal, some slightly distorted and delayed, can add together and interfere with each other at the receiver. On top of this effect, you have to deal with all sorts of other interference from objects which are supposed to emit signals (think cell phones and radio stations) to those that really aren't supposed to (think HVAC units)
  3. Transmit power. An electromagnetic wave traveling through free space decreases in signal power proportional to the cube root of the distance travelled. Satellites are hella far away. If your little doodad can't muster the mustard, your signal is going to be lost in space.
  4. Protocol issues. What's your transmit frequency? bit rate? bandwidth? What's your transmission protocol? Data collision policy? Coding scheme? Interleaving? Do you have encryption? What form of modulation are you using? Error correction? Get one thing wrong, and it's bye-bye message.
So we have all these possible problems, plus the potential that any number of things could be wrong with our hardware, the batteries, etc. In short, it's debugging hell. So we start tracing through the terminal logs, to see when messages are supposed to be transmitted. From there, we can pull the satellite's receive logs and compare notes. However, we find a trend today that we haven't seen in the past week of debugging: It appears that some messages aren't being transmitted in the first place! We've got huge data logs, and I write up a few quick Perl scripts to chew threw them (more on that tomorrow, probably). Sure enough, Perl tells me what we had all started to suspect: Some messages were simply not being transmitted. Of those that were being transmitted, the satellite was successfully picking up over 99%. This is good, because it rules out the entire "network cloud" and our hardware: The problem was a software problem.

Here's a sample of the type of program that we were running. It is a short test script with very little real-world application, and it was given to us directly from the manufacturer for testing purposes. The software platform is highly asynchronous, and performs a lot of tasks automatically for us.
  1. Enqueue a simple "hello world" message
  2. Enqueue a message with the GPS-derived location of the terminal
  3. When all messages in the queue are sent and the queue becomes empty, shut down.
This script looks simple, innocuous. It should send two messages and then shut down the device. What we were seeing, however, was that sometimes the second message wasn't being sent. A look through the logs showed us that the message wasn't being queued before the device went to sleep. why? Like I said before, the underlying platform is highly asynchronous. With that in mind, here's what's happening:
  1. We create and enqueue the first "hello world" message
  2. The transmitter takes the message out of the queue and sends it before the GPS message can be added to the queue
  3. Seeing that the queue has become empty (as per our instructions) the device shuts down without sending the second message. Wash, rinse, repeat.
Asynchronous systems aren't particularly popular among programmers precisely because they are so tricky, hard to trace, hard to design, and hard to understand. It's a topic that I tried to stress with my students (back when I still had students) and has been an area where I've purposefully tried to concentrate my studies. If I had been more familiar with the platform, I would have known about these types of issues and may have been able to spot this particular problem earlier. I'm still learning, however, and won't be caught off guard next time. It's good to have consultants come in to help us with these things, because I can get answers to valuable questions like this.

In short: If you're an engineer or a programmer and aren't familar with asynchronous systems, preemptive multithreading systems, or race conditions, do yourself a favor and spend some time to read up on it.

Wednesday, July 23, 2008

The Science of Politics

Long day for me today. We had a consultant come in from out of town ("out of country" is more accurate but less rythmic) and he didn't get to our building until damn near 3pm. So, to make good use of his time, we had to stay late. We only have him to help solve our problems until tomorrow morning, so we are pressed to utilize the opportunity.

On the TV behind me are the talking heads of Obama and McCain, badmouthing each other and talking about "The Surge". The surge, as people will undoubtedly remember, was Bush's last-ditch effort to save the abysmal Iraq war effort, and probably put a good spin on things for the Republicans before elections started. Obama says the surge has failed, McCain says it's a success, and both are insulting each other's opinions on the matter.

The problem is that the surge neither succeeded nor failed. It wasn't part of some comprehensive plan, there was no intended goal and no criteria that defined what "success" or "failure" were. To McCain, what would you have to see right now to decide the surge failed? To Obama, what would you need to see to say that it succeeded? The problem is that both men are going to define it differently because there were no benchmarks laid out beforehand.

When we do an experiment at work, we have numbers and thresholds and goals. We use controls, although we can't run a second war without a surge to compare (note to Bush: this is not a dare). We set specific numbers: We want to see SNR increase by 2 dB, we want QoS reliability to improve by 5%, we want to cut power consumption by 20%, etc. We didn't have goals with the surge, therefore it is impossible to declare it a failure or a success. We can talk about whether it met our personal expectations, or whether we think it's cost to benefit ratio was desirable, or any of other qualitative comparisons, but they don't strictly mean anything.

Monday, July 21, 2008

All of 9 hours

Worked a long day today, stayed for 9 consecutive hours. I did eat lunch, but it took about 5 minutes and I did it at my desk. Today was an interesting day. One of the first projects I had when I started was updating a number of our test terminals to use an updated firmware. However, with the new firmwares installed, terminal performance decreased drastically.

Our terminals collect sensor data and send it in discrete (and highly compact) messages to a satellite. The satellite then transmits the data back down to earth at a datacenter, where the message is stored until we retrieve it. This is an oversimplification, of course, but isn't too badly inaccurate. Our system performance is mostly a reliability metric, and we count how many messages aren't sent that should have been. For the past week, our quality of service performance has been lousy: only 70-90%. 70% might not seem bad, but many of our systems will only send out one message every few days, and missing a message is clearly unacceptable. Ideally, we like to be much much closer to the 100% mark. For the past week we've been doing a lot of tests to try to resolve the issues, including testing firmware (the old firmware actually performed worse now then it did two weeks ago), hardware (including making several invasive, exploratory alterations), and software. We've been collecting data like crazy trying to make sense of everything.

So we have a conference call today between our engineers and those of the satellite company, and they lay a revelation on us: Their network traffic has increased dramatically in the past few days, and network congestion might be causing at least a 20% failure rate. All our data, all our tests, all our problems, might be resolved by a simple network capacity increase (something that is far outside our responsibilities).

In the world of software, it's generally accepted as a rule that if you find a problem, the problem lies in your code, not in the OS or the relevant libraries. This is not to say that libraries and operating systems never have bugs, they certainly do and sometimes they're terrible. However, I know that the odds are that any bugs exist in my development software, not in the production platform.

Following this logic, it never really occured to us that the underlying platform might be the cause of so many failures. Quite the contrary, we assumed it was something going wrong on our end, and ripped a lot of things apart looking for the solution. Everything from modifying antenna geometry and searching for cold solder joints (we actually found a few), to orienting the terminal in different ways with respect to the satellte (which actually does have an effect). In our mad search to resolve the major problem, we found and fixed several smaller problems in our device. By tomorrow, we should know if network congestion is indeed the culprit.

For tonight, I'm going to put my head down and try to get some serious work done on Parrot. I've got an extra hour tomorrow, and I am going to try to get some serious work done then as well. I feel like I'm getting close to a working system, I just need to put in a little bit of extra elbow grease to get there.

Friday, July 18, 2008

First Week

The first week of work ended about 30 minutes ago. I stayed a little bit later then usual today to help Steve (on of the senior engineers that I work with) to modify some of our satellite doodads for the weekend.

What Ionx does, in short, is to create little wireless sensor networks that can be retrofit onto existing railcars. These sensors measure stress and strain, wear and tear. They have GPS locators too. All this data about the railcars is collected and beamed to some kind of communications satellite, and can be looked up (possibly for some kind of subscription fee or something I think) by our clients. Because these devices are intended to be bolted onto a rail car, and because railcars can go to all sorts of remote places, our devices need to be pretty robust and reliable. For this, we do a lot of testing. "Testing"--at least at this stage of the game--involves loading the devices with the necessary software, turning it on, and setting it outside for a while. Each device can be configured to report back to us at intervals between about 10 minutes and 6 hours. Actually, we can set reporting frequency to be as little as once every 30 days, but that's hardly useful for testing. What I was doing at the end of the day today was setting up a series of test units for their operations over the weekend.

All in all, it was a pretty good week and I'm enjoying the job pretty much. None of the work I do really relates to the topics that came up in my interview (C, programming, etc), but it is fun to learn new things.

Tomorrow we're heading out to Dana's sister's house to pick up some accutrements for her wedding dress. She and her sister are likely heading out to do some craft shopping too, and I'm not sure yet what I'm going to do with myself while they are gone. I'll likely bring my laptop, just in case.

Sunday, Dana's set up our first appartment-shopping appointment. We're looking, probably in the 1000$ range initially. I would like it if our rent wasn't too large a percentage of our income, so that we can save money for an eventual down payment on a house. As far as I am concerned, lack of a down payment is the only reason we aren't house shopping right now. Talking to Jason today, he suggested that there might be grants or programs or leniencies afforded to first-time home buyers such as ourselves. It's an area where I need to do a little research it seems.

Anyway, the weekend is nigh, so it's time for me to get off the computer.

Tuesday, July 15, 2008

second day at work

Coming home tonight, both my parents asked exactly the same thing: "How was day two at work?". Besides the almost absurd probably that both would use the same idiosyncrasy, it is really not an interesting question in the least. My response? "Alright". Really, that's the way I describe it because it's the most fitting.

I spent some time filling out the requisite paperwork: I-9, employment agreement, W-4, direct deposit. I listed Dana as my emergency contact. In reality, if there is an emergency and I do go to the hospital, it would probably be better to call my mom (since she works there and could be on sight immediately). Whatever, the decision is made. I also took my lunch late and logged onto the parrot design meeting while I ate. I was able, also, to get some GPS-related work done at the same time. Plus one for multitasking.

Conspicuously missing from the paperwork I filled out was an NDA. There was some small wording about nondisclosure in the employment agreement, but not a comprehensive document like I have seen at other companies. However, one good thing to report is that the IP restrictions are less orwellian then I had been lead to believe. The company takes control of related IP that I create while an employee, not all unrelated IP as I had feared. This is good.

My review yesterday of Vista and the various Microsoft-written tools I was using was almost glowing compared to some other press they have gotten. My opinion today, however, is much less so. Yesterday I mentioned that UAC wasn't that big a bother. Today, I've completely disabled it. Security center? I've disabled all alerts and reminders. Microsoft Groove? I've disabled all alerts. I spent much of the day logged in as administrator just so I could do the basic things that I needed to do. I can understand the need to protect a computer, but you should be protecting it against attackers, not against the user sitting at the screen. Conceivably, I'm using the computer because I actually have things I want to do, not because I want to interact with security dialogs in a competitive manner.

I had a logfile that I wanted to extract some data from, so naturally I thought to myself "hey, this would be a snap in perl!". So I go to ActiveState's website, download perl, and run the installer. No, we can't do that, the computer administrator has apparently set policies preventing me from performing this installation. That's funny, since I'm the system administrator and I've never set any such policy. In fact, when I go look, I can't even figure out where I would have to go to disable it. So, I do a google search and instead of finding a helpful tutorial discussing the solution to this particular problem I find a series of forum posts from people bitching about exactly the same problem. That, in short, is depressing. My computer is protecting itself against me installing the software I need for my work. I wonder who is going to protect my computer from me and my baseball bat.

I don't want to bash Microsoft unduely, but I dont think it's wrong for me to jump on the ever-popular "vista wasn't their best effort" bandwagon. I will say that, despite the annoying alerts, Groove is actually a cool product. I personally might prefer Pidgin and SVN, but I can be a bit of a minimalist. Plus, if we had those tools instead, I might be the only person in the building using them. I wish SVN had a linux-based GUI that was as featured as Groove is. RapidSVN has some glaring feature ommisions, and SVN Workbench has all it's text set black by default which makes it unreadable in my white-on-black theme. Groove is a nice peice of integration though, and I do recommend that other teams look into it.

I've done a little bit of work on a firmware installer, wrote up a nice little log parser (which, as predicted, took less then 30 seconds in perl), and worked to diagnose a timing problem. All together, a very productive second day. Tomorrow I'm going to try to be there by 8 and out by 4. That will give me plenty of productive afternoon for Parroting.

Monday, July 14, 2008

Welcome to the real world

Today was my first day working a "real job" at Ionx, and I have to say it was everything a first day should be. Starting also today was a senior software engineer, Rachael (I don't know spelling, so forgive me if this is wrong) who did her M.S. at RPI, spent time teaching at a community college, was a consultant, and worked someplace on embedded sensor systems (not necessarily in that order). Rachael's job is to do some work in the area of low-power doodads, and porting APIs from one low-power doodad to another, or whatever. I, on the other hand, am doing some integration and testing work for satellite jibba-jabbas.

I know, of course, a little bit more then I'm letting on here. I haven't signed any NDA yet, but I heard somebody mention that I need to and I don't want to poison the well on my very first day. If, after signing the NDA I find myself able to share a few things, I might very well do that.

I got set up on the company email system early in the day, but by the end of the day the configuration tool was still telling me that my version of Outlook is unsupported. I started the day with Microsoft Office 2007 Home and Student installed on my work computer (nobody quite knew how or when that version got installed), and downgraded quickly to Office XP Professional. The email didn't work in either version, which makes me wonder what versions, exactly, this stupid configuration tool is possibly targetting. To top it off, some of the data files I am playing with are Excel-based, and the 2007 version was helpfully opening some of the older files in "Read-Only Compatability Mode". When my job involves modifying Excel-based configuration files (Don't even get me started on the poor choice of medium), "Read-Only" isn't such a great thing.

Another tool that is in use at the office is Microsoft Groove; a program that appears, on the face of it, to be another clone of AOL's mighty instant messenger. I'm sure it has more features and functionality, but I didn't realize until 4:30ish that the 2007-version of Groove installed on my computer (again, inexplicably) was newer then the versions used on other computers, and was helpfully set to ignore invitations and communications that come from older versions of the software. Maybe I've been living in the opensource world a little bit too much, but when productivity software is set, by default, to be incompatible with other people's software versions, it doesn't seem to do much to improve productivity. In fact, I would go so far as to say that these kinds of "features" are little more then detractions from the power, capability, and value of the software. I would expect expensive and professionally-developed software to be more interoperable, more flexible, more helpful, and more useful then the free alternatives. In my first day on the job, this has proven quickly not to be the case.

My work computer came pre-installed with Windows Vista (I guess they got a great bulk deal on Microsoft products), which makes today the first day I have been a Windows Vista user. I have to say that it wasn't the disgusting travesty of a software experience that some people have promised. There were a few hangups here and there, but overall it was a decent computing experience. By the second hour I was quickly glazing over all the obnoxious UAC messages. This is probably bad for computer security in the long term (auotmatically clicking "Ok" to every message that pops up sort of defeats the whole purpose), but I didn't find it to be a huge drain on my productivity. There are a few specific problems I did have:
  1. How do you change a file's extension? I spent about 15 minutes trying to change a mis-named file to have the .xls extension (so I could try to open it directly in the wrong version of Excel) before giving up in disgust. I tried everything that I could remember to try from my days on XP, and nothing yielded fruit. I went in to the console and tried to rename the file: Access Denied. The solution that I came up with is to email the file to my other computer (a Linux machine), rename the file there, and email it back. I'm sure there has to be an easier way, but I couldn't find it.
  2. Uninstalling programs is obnoxious. I click to uninstal a program and am greeted with a dialog box "Are you sure you want to uninstall this?" I click yes, only to be presented with a UAC dialog box informing me that somebody (maybe me) is trying to unstall the program in question. Is this okay? Yes. Finally, when the uninstall dialog pops up, it asks me a third time "Are you sure you want to proceed?" I'll tell you the same thing I told the other two fellas: yes. For the first time, uninstalling AOL or RealPlayer is just slightly more annoying then keeping them.
Overall, the first day was good. I have high hopes for this job, and think it could turn out to be pretty cool.

Sunday, July 13, 2008

A new Job

There have been a lot of things going on, and I haven't been updating this blog often enough. However, there is some good news: I finally got a job. Starting tomorrow, I'm an employee of West-Chester based Ionx. They're a very young little company (started in April) and doing some cool sensor-related stuff for rail cars. My job title is "Software Engineer", and I'm probably going to be doing some low-level programming/debugging/configuring work on the new sensor doodads they're developing.

The job seemed to be a pretty good fit for my background and skillset. There's going to be some C and assembly-level debugging and code work (which I consider to be my forte), but there is also going to be some higher-level scripting work for various controllers and sensors. Again, I don't know all the details (and even when I do, I likely won't be at liberty to talk about them here), so Monday will be a big learning experience.

Of course, this is going to cut into my time to work on Parrot, and I was hoping I would be a lot further along in that project before I got a "real job". But progress has been slow (and grueling), so I haven't hit the milestones I was hoping for. This is not the end, however, I do intend to continue my work on Parrot during the evenings, and I intend to be an active contributor there long after the summer has ended.

Dana and I went out shopping this weekend, and I bought a whole smattering of "business casual" clothes in anticipation. I don't even know really what "business casual" is, but at least now I have plenty of options to choose from. It's my experience that most engineers don't seem to conform to a strict dress code, but things are also very different at different companies. The people at the MathWorks were generally better-dressed (from what little I saw) then those at Agilent, for instance. Of course, who knows what I saw or how accurate a depiction that is.

I'll probably post again tomorrow after my first day is over.

Wednesday, July 9, 2008

Weekly update

Crash! Boom! The power's out. It was the first lightning strike, or at least the first one that I heard. One lightning bolt and takes out my power like a goddamn sniper. What's funny is that I might not have noticed at all, sitting here in this dark house all afternoon, except that the house computer turned off. My laptop, as poor as it's battery life is, kept trucking along like normal.

It's been a long week since I last updated this blog. Most days I feel like I have nothing to say, and all of a sudden I worry that there won't be enough space in a single post to hold it all. Yesterday I got called in for a last-minute interview with a new company down in West Chester. Despite lack of preparation time, and extremely high humidity, I think the interview went well. I'm hoping for a call back soon with some positive news. Even if I decide later that I don't want to go to the party, I still want to know that I've been invited.

I ordered three books in from amazon. Dana said I could spend 40$ on books, and I made every cent of that count. The first, "Perl 6 and Parrot Essentials" details some of the early Parrot project and the Perl 6 design effort. Much of the information has long since become outdated (a fact that probably explains the $1.90 price tag that I paid for it), but I still find it to be an interesting little read with a lot of insight into the design process. Another book, "Unix Network Programming" is an old one that I've wanted for a long time. Eventually, I'm going to have a relatively large bookshelf of unix-related programming tomes, although the rest will have to wait until other days.

I've taken some advice I got from Dana and WebMD, and I've been stretching out my shins regularly. Took a few days off from running, but I've been stretching a few times each day. We think the diagnosis is shin splints, so I've been doing what I can to mitigate that problem. Last night I went out running for the first time in a week or so. I took regular breaks to stop and stretch out, I walked when my legs needed a rest, and I was able to get in a nice long workout without the shin pains that have characterized some previous runs. That's a good start, and I'm planning to go out and repeat the process tonight.

My work on Parrot has been good but slow. There are a number of bugs that I've been trying to fix, some of which are tricky, esoteric, and obnoxious. On the bright side, I'm getting a great holistic view of the Parrot system, because I'm having to backtrace through it all. This bug hunting is hard and tedious work, but I'm sticking through it because I want to see this project succeed. Plus, I'm learning how to use GDB better, and that's awesome.

The rest of the week will likely be spent on Parrot, with my time occasionally punctuated with spirts of yard work. We felled a tree yesterday, and I am slowly hacking it to peices and moving it to the corner of the yard, where nature will make it disappear. It's good exercise, I think, and it helps me to get some sunlight that I sorely need for vitamin D production.

This weekend we're at Dana's place. No idea what the schedule holds after that.

Wednesday, July 2, 2008

Update on all things

I haven't posted in a while, haven't really been in the mood to do it. I got the call a few days ago, and I didn't get the job. Bummer. It wouldn't have been such a hard blow if I hadn't gone up to MA and seen how cool of a place it was. However, during the technical interview it was becoming apparent that they were looking for somebody with a different core competency then I have. Prior to the interview, I was told on more then one occasion to "brush up on your C programming". I did this, and was disappointed when I was only asked two simple C questions out of about 50 questions total. Because of my resume, the interviewer said he was going to ask me a few questions on embedded software too: What is an RTOS and what is an ISR. Even though I am disappointed in the rejection, I take solace in the fact that I would not have been pursuing my specific interests as closely as I might be able to in a different setting.

In all, I have absolutely nothing negative to say about The MathWorks. The interview was quick and seamless. The whole process was efficient, they were responsive and helpful, and I got the final decision in less then a week. It took Agilent months to call me back to say they had gone with another candidate, long after I had already assumed the result myself. I do recommend that all engineers who have used MATLAB and would like to be part of a cool software company should put in applications.

Geoff headed off to the airport no less then 10 minutes ago. His flight leaves tonight at 7pm, although they have to drive to New York, dropping Kara off on the way, find the airport, and make it through security. He's gone now for about a month, is home for a whole two days, and is off again to Mexico for the semester. It is going to be a cool experience, but it's a lot to do in a short period of time.

I've been focusing my energies on my work this week. The key to me getting any job at this point may depend on me producing a quality peice of software for my portfolio, and networking with the like-minded people that I'm meeting through this experience.

Progress on my GC project has been rapid and dramatic this week, my extra level of focus and determination is paying off. It mostly builds (except for some memory-intensive libraries), and I'm passing most of the test suite (about 7000/7700 tests). This is a huge improvement over my progress last week, where I was bearely building anything, and passing only half the tests (3800/7700 tests, about). It's worth keeping in mind that a large portion of the tests are system configuration tests, build tools tests, and coding standards tests which don't require parrot to be functional at all. So, passing 3800 tests from the suite is akin to saying that Parrot isn't passing hardly any tests whatsoever. The bugs that I'm tracking down now are nasty little critters though, and I can only hope that some of them ever get resolved.

Debugging is the real measure of a programmer. Anybody can write code, but not everybody can make wrong code right. Even if I do fix problems, there is always the pressure to fix the problems correctly with a mind to efficiency and maintainability. These requirements are often contradictory, however, and a good engineer must find the perfect balance between them.

There's a lot of work for me to do today, including more blogging in different fora, more work on my GC project, some cleanup to do before the weekend, and a new cable box to install (the old one fried, I suspect heat-death). So, without further adieu...