Working with embedded systems a lot. I'll be making the rounds this year (Boston in September, San Diego in October, possibly more) if you'd like to get together. FCS and USPS being interesting prospects. Been looking into PC-104 as well. It's quite interesting what's actually out there and being deployed. Some of these systems are far more powerful than I would expect from your traditional SBC, and all the devices available for them are quite impressive. I think it is a natural place for Linux to be, for what that's worth. However, I think the usual Linux caveats apply.
Specifically, I've been reading a lot about Lynux and their LynxOS-178. I find myself thinking, what's so great about a Linux which has deviated from the GNU and Linux base (eg the kernel and the gnu utils, as well as any environment on top of that)? Sure, developing in Linux is a familiar environment, even a rich one. My original start in Linux (as a developer -- as a user it was on a 486) was on a PowerMac G3 in 1999. This was very rewarding, having the guts of the development exposed to me. However, the knife cut both ways. Whenever something broke, I was presented with an uncaring community ("Well, it works on x86, if you really want to run Linux, you'll have to use something more standard than PPC"), and no readily available documentation. People like BenH were very helpful when they had time, but largely, they were busy maintaining stuff. Hollis was great, too, and then IBM snapped him up.
So it seems to me that you get the Linux environment, but since you have strapped an RTOS layer on top of it, and you're running it on a PPC SBC strapped to the backside of a HMMWV, the prospects of available in-the-field hotfixes go away. Unless your vendor is caring. But then, what separates you from any other product? The choice for Linux is arbitrary at that point. But enough about the Linux thing.
I've been reading _TCP/IP Sockets in C#_ by David Makofske, Michael Donahoo, and Kenneth Calvert lately, along with the gamut of ORA books on C#. I'm glad to find that most of the concepts in C# aren't anywhere near as foreign as somebody coming from Unix would think them to be. If you know several languages, moving between them takes a little adjustment, but once you get the vocabulary down, it's just expressing what you want to do in a different.. vernacular.
Anyways, the book is both good and bad. The subtitle is "Practical Guide for Programmers." However, the first thirty or so pages actually describes how network sockets work. It then gives you a code example which doesn't (overtly) even use sockets. It's a simple System.Dns example. It then goes on to cover blocking socket operations for most of the book.
This is just not the way solid programmers write code. Sure, lots of people write blocking socket code, but that's not the model we should try to achieve.
The discussion just following that actually describes the usual for (;;) {} and while (1) {} constructs, which are also not even close to non-blocking. It then discusses select() and thread pools. These are seemingly difficult processes for programmers to understand. Again, I don't see why this is so hard. The available examples, however, seem to implement just that, and be quite proud about it. I find myself again wondering about the quality of our college system.
Lastly, it gets down to Asynchronous IO, as implemented in C#. It's remarkably similar to POE, which is nice. You have a BeginWrite, BeginRead, and EndWrite/EndRead pair, and corresponding callbacks. It's a little more wordy than the state machine POE creates, but that just means if I want my own state machine for network applications, I'll just have to abstract it away a little. I'm very glad to find that C# implements non blocking IO in a sane way, and has callbacks as well. But why in the hell do all the available examples use none of it? Why is it viewed to be such arcane magic by the rest of the community? The book does somersaults trying to explain what is a very simple concept. It's the implementation that's the hard part, and that's up to the user. Not the authors. Anyways. It looks like I'll actually be able to start writing some code. I intend to have an MPICH application written soonish so that I can begin talking with customers more extensively about our cluster software. It's important to me to have written applications on the substrate that they'll be working with. I have the added advantage of being able to contact internal resources regarding anything I find that is problematic.
life
I mentioned a week or so ago that my apartment had been filled by kerosene vapor. Following that, I sent a message to the manager of the building explaining that I had both computers (sources of electrostatic discharge) and firearms in my apartment. As such, I had hoped they could provide better ventilation next time they wanted to do that. She responded by telling me that it was a violation of the lease to have firearms in my home. I told her to pound sand, explaining that it was legal in the city, county, and state that I live in, and that I am more than adequately trained and licensed, by civilian and military organizations, as well as a member of the NRA and NRA-ILA. Sigh. I don't know why people can't just realize that in some parts of the world, guns are a part of life. I didn't provoke anyone, and I'm more than polite to all the staff in the building, and extremely cautious and safe with the firearms. There's no need for this petty conflict.
That having been said, we had a terrific time at Quantico Shooting Club this weekend. I was very surprised how easy it was to accurately place bullets on targets 300 yards downrange. Even with a .22-250, which is relatively prone to windage, we simply adjusted the scope and fired. After some initial calibration, all four of us were on target, with accuracy from a couple inches up to a foot. This is refreshing. I had previously done a lot of shooting at 25-50 yards, but nothing out to 300. That's pretty far. We're going to slowly ramp up to 1000 yards. Probably will require a heavier gun for that. We're thinking of getting a 300 Win Mag to augment our 308 Win. I'll also need to get a spotting scope which doesn't suck eventually. I paid about twenty times what I paid for the current spotting scope for my rifle scope. I'm seriously regretting that now.
Unfortunately, at the range, I managed to take a large chunk out of my right ring finger on a target stand. It was pretty gross and dirty, and in a field full of deer, rabbit, and other feces. It's been six years since I had a tetanus booster, so we trundled off to the ER to get a tetanus shot. Sigh. It's painful as hell. I wonder whether I'm just getting older, and that's why it's such a drag (muscle pain all over, general malaise), or whether they gave me a bigger shot, or what. I can't imagine how awful it must have been to die of tetanus. It's interesting that exactly a year ago, I was in the same hospital for meningitis. This caused some internal reflection on my time at AOL (which was pretty unhappy that I had the gall to catch meningitis from one of their employees and spend a week in the hospital for it). Also on some of the asynchronous IO code I wrote for them. Interesting how life seems to be composed of cycles of similar events.
We'll be going to Arlington Cemetery today to see Bryan Jack. I need the exercise -- mexican food last night, scrambled eggs for breakfast -- and I'm going to take some time practicing black & white on the newer Canon. Hopefully the light will be nice. It is also important to me that we do go back to Arlington and see the monuments and fresh plots for people home from Iraq. It, sometimes rather jarringly, puts the whole situation into perspective, and the importance of what I do for a living, as well as what everyone else involved is doing. Yes Alex (the other Alex), plans are still on track. The few rolls of b&w will be developed soon, and I'll be trying to work more with both b&w and tungsten film. Probably will wind up on flickr, depending on whether they're horrid or not.