Technical Difficulties from on Top of the Mountain
  Interesting sources of information
Through Radical Congruency I wandered over to which is the online archive of Washington State history. Normally, history is not a very exciting subject, but this site is great because it combines the signficant with the interesting (not always the same thing).

Some of the posts I was compelled to read were:

Van Over had recently heard a recording of a piano being destroyed by sledge hammers. Finding the aural experience disappointing led to the speculation (most likely fueled by certain psychoactive chemicals) about dropping a piano from a building, or better yet, a helicopter, and what that drop might sound like.

Larry tracked down an old upright piano, moved it to his farm, and contracted a helicopter service out of Boeing Field. The pilot didn't quite get the point, but having successfully not dropped pianos before, he saw no special problem in doing the opposite. As Larry later recalled, "There were a number of Newton's laws that the pilot neglected to consider."

Instead of the 300 participants he expected, the pilot estimated at least 10 times as many people filled the countryside below. At that moment, Larry got that special, tinny taste in his mouth indicating that his mental altimeter had exceeded the helicopter's. "No way, no way, no way," the pilot muttered with mounting conviction ... "They're not going to get out of the way."

"They'll move, man, they'll move," Larry pleaded with that persuasive power only true evangelists and zonked-out lunatics can muster. "Trust me, man, it'll be like the Red Sea all over again!"

The crowd was not disappointed and let loose a collective "Far out!" as it surged toward the remains of the piano. By the time Larry pushed his way to the piano's impact crater, not a stick, wire, ivory, or scrap of felt remained. "They devoured it," he recalled.

... somebody said, "Hey, let's do that again," and so was born the idea for the Sky River Rock Festival and Lighter Than Air Fair, which took place later that year.

This is the kind of history that keeps me reading more and more.
  Having money by not spending it
Many younger people today have a problem with money. They think the problem is that they don't have enough of it, but I don't think that's where the issue is. Its how they spend it. (Notice I didn't say what they spend it on.)

Now I come from a downright stingy family to begin with. We thinned our milk with powdered milk because it was cheaper, I got hand-me-down clothes from my cousins (being the oldest in the family didn't save me there), and my mom would wear my boots when I grew out of them cause they still had some life left in them and they fit ok if she wore five pair of socks. But the defining moment wasn't family related, it was an article in Time magazine back in the 70s.

In this article, Time explained that income levels had risen to the point that the average wage earner was going to earn one million dollars in his lifetime (which to a thirteen year old seems like an awfully lot of money). It then when on to break down where that money was going to go and it featured this nice big pie chart graphic showing the major categories. The number one expense, and it was a biggie (more than a quarter), was interest expenses. Now this was back before credit cards were big, so it was mostly house mortgage, car financing, and a little for paying off higher education.

What I realized that afternoon, while sitting on the floor reading that article, was that all I had to do to be richer than others was to not give away 30% of my lifelong earnings to banks for the privilege of using their money. To a thirteen year old, interest seems like the worst thing to spend money on--it doesn't buy anything of substance. As I got older, I understood that in some cases time is money, but to a consumer in almost all cases, interest is really about impatience and self inflicted slavery.

Here's my spending rules that keep me out of debt (except a mortgage representing 25% of the value of my house), and that gets me through the low times as well as the high:

Basically, by not buying something immediately I save myself from buying at least 20% of the things that I see that it turns out I really don't need or even want. By saving up for something, I get even more stingy about buying other things, and by researching an item I sometimes find that my first selection wasn't the best choice or might not have done what I thought I wanted to do with it. Finally, by being prepared, well researched, and having cash on hand; I can actually pounce on sales/good deals when the come along (with the ability to truly determine if they really are a good deal).

This approach can seem like putting things off needlessly, and my behaviours do often annoy my wife, but she finally saw a brief glimpse of the wisdom in these ways when we went to buy our most recent vehicle. We were going to replace an aging 1996 pontiac grand am which I had bought used for my wife and she had never really liked. But it was also starting to show signs of wear (with 80k+ miles on it) and our family had grown to the point where we could really use something bigger.

At first she was looking at SUV like things (which I was looking at station wagon like things), and then she was looking at true monster vehicles (like a Chevy Surburban), when I finally realized what we needed was a minivan. So then we canvased all the various automakers and I really got stuck on the Toyota, but JM wanted it tricked out with all the gadgets. Unfortunately this adds more than $20k to the base price of the van, but I knew that if I fought her directly on this she wouldn't be happy with whatever she ended up with; and I'd be looking at buying yet another car in less than five years. Finally she arranged a test drive and dragged me and the kids down to the dealership to try it out.

This being Flagstaff, they only had one van there (a more reasonably priced mid-range model), and after test driving it (which wasn't really necessary), I took JM off to the side and told her that if she was happy with that model, then we could afford to just buy it and not have to dicker further with financing and trying to figure out where the money for a new car was going to come from. She thought about it for a few minutes, and decided she wanted that van. At that point we went back inside and motioned for our sales droid and the sales manager to come over for a minute. I explained that the van that they had out on the lot was not exactly what we had been looking for, but that if they were willing to take $1,800 off the price (which included some dealer added crap and also took into account that some fool at the dealership had driven the thing down to Phoenix and back and put over 600 miles on the odometer), then we were willing to pay cash right then and there and buy the car.

Our sales droid was astonished at our offer. This was the new 2004 Sienna (Toyota) model that was a complete redesign of their van based on the lead designer test driving the previous model across the united states (going through every state), and these things were flying off lots. These things were winning awards left and right, and some dealers were selling their stock $1,000-2,000 over sticker. Our sales droid was even more astonished when the sales manager came back a few minutes later and countered with $1,600 off. I accepted, and JM was in her new van about twenty minutes later. Preparation paid off and the transaction demonstrated once again that cash is king.

Trackback: Joe Ganley Writing code since 1979

  The real way to get a job
I've never actually gotten a job with my resume or an interview. It very rarely works. Interviewers try all the questions, but anybody who wants to play that game can prep for the interview (with help from sites mentioned before) and get through it without really revealing their suitability for the position.

I've always gotten a job because of something I've done. I got my first job at Xerox by asking for a pen. Marvin and I were at Usenix in 1990, the year it was in Long Beach. I had a full conference pass by volunteering to babysit the terminal room during the graveyard shift. Back then it was fairly small and exclusive: Stallman would setup shop over in one corner and play the guru, while others would collect in corners to argue about monolithic kernals versus modular architectures and SYSV vs BSD. It was in between the sessions we were collecting stuff from the exhibitors, when we got to a job shop group. The Pencom booth required that you fill out a survey in order to get the pen (or whatever it was that they were giving away), so we did and we moved on to the next booth without a second thought.

About two months later I get a call (which is unusual because nobody ever called me back then), and its a Pencom headhunter, and he's trying to fill an opening at Xerox, and I had put down graphics on my survey. Now what I had been thinking when I put down graphics was 3D graphics, because I was trying to establish Video Bits and break into the animation market with my raytracer. But it turns out, that before I was sucked into the graphics lab in college, I was a heavy TeX user (almost a TeXpert) and also played around with page description languages like HP-GL and Postscript. I had even sat in on a presentation about Interpress (a Xerox page description language) at Siggraph 89. So I told the Pencom guy I'd give the manager at Xerox a call.

So I got on the phone with John Halbur and after establishing that I knew something about b-splines, font dictionaries, rasterization, and C programming; I mentioned that I had also put together a crib sheet index for TeX that was floating around usenet. See the TeX Manual has an automatical generated index that cross references every page a command is listed on. But if you just want to know how to use the command, you end up flipping through the book checking every reference until you finally come to the one that tells you something. With my index, if you wanted to know how to use \hangindent it would send you straight to p. 102 where it was actually described, skiping several other pages. John had actually seen this thing, and with that I established my credibility and he was ready to hire me on the spot. I told him I should probably get the paperwork started with Pencom, but that I'd be happy to come in the next day.

Thus started a two and half year project converting quadric curves from AGFA Compugraphic into something the home-grown font tools from Xerox would like, all in the name of supporting PCL5 emulation. And pretty much every project since that has started in a similar way, through a personal reference, or some piece of free code that we've put out, or some answer I gave on a usenet news group, etc etc.

  Keeping in the race
Because I am independently employeed, I have to look out for myself, including looking for the next project while finishing the current one. One thing I keep up with is various career newsletters which offer information ranging from mildly helpful to the truely bizarre. One such newsletter, CrossRoads from NetTemps provides a sample mix of the broad range of articles you get from this industry. It points out to me why the hiring business is so broken, and why its not going to get better any time soon.

One article, The Top 10 Questions Most Often Asked by Interviewers, takes a bunch of "loaded" questions that the industry has sold to HR people as the way to really find out about employees before hiring them, and then explains to potential interviewees what to say to respond to the questions correctly. For example:

What did you like best and least about your previous job?
Translation: Checking your administration and management skills.

Have you ever had trouble learning a new method or procedure? How did you deal with that situation?
Translation: Investigating your learning ability.

Now, being the smart-ass that I am sometimes, I'd probably answer the first question honestly: "worst:The office had a card-key system that was required to get in and out but unlocked automatically, except that one monday holiday it unlocked when no one was at work--I thought it was pretty stupid. best: the refridgerator stocked with snacks, drinks and quick meals was really handy."

Ok, what did you learn about my administration and management skills there?

The list was pretty stupid overall, but then another article came out about a very loaded subject for most of us: What Are Your Weaknesses? It starts out on great footing right away by explaining:

When interviewers ask this question they really don't care what your weaknesses are. They care about how you handle this question and what your response indicates about you.
So basically, its a pop pysch test. Great. I wonder how HR reconsiles these kinds of practises against corporate values like Honesty and Integrity. But all is not lost (or else I wouldn't be reading these newsletters). Occationally there's articles of real value, like Questions You Ask During the Interview and Nan Russell's Creating Your Own Luck. Nan talks about loosing her job, and taking a minimum-wage interim position that led to to a management position four weeks later and ultimate a VP position after several additional promotions over the next five years.

Since I'm a programmer and not interested in a management track, I can't just plug into any corporation and look to get noticed and move up, but that doesn't mean there aren't a lot of opportunities out there. Some industrious people would get involved in an open source project, others might try a startup; but the real opportunity lies in doing volunteer work. There you have a real chance to prove yourself. See a potential employeer isn't impressed nearly so much by you demonstrating that you're able to work on something you're interested in. He wants to know you can work on something customers are interested in. Volunteer work gives you the chance to do that, while also gaining experience with technologies you may not have been previously familiar with. It also provides for additional contact and great references if you do a good job. And there are no end of churchs, non-profits, community organizations, etc. that could use some help; though its not always going to be as exciting as you wanted--but the real life never is.

While I was thinking about all this, the Alumni Experience came out with a great article on this, Volunteering Leads to Employment, which includes some great tips on how to get started and some rules for making sure the experience is successful.

  The midnight itch
Its almost a curse, now that I know the web is full of useful information, I've got to go find it. Or at least some of it. Here's how I described it over on midnightmachinery.
Why is it that ever since I build a fire in the woodstove with the window in the front where you could sit and watch the bright yellow and pale blue flames dance for hours that I have had this unshakable urge to heat up, cool down, melt, cut, bend and creating anything and everything out of any material I could get my hands on.


And its not just enough to do it, I've got to keep researching, finding out more, learning about tungsten (with its high melting point), nanosteel (still only 40% of the strength steel is theoretically capable of), stirling engines, nickel tetracarbonyl, ranque-hilsch vortex tubes, aerogels and it goes on and on.

And now I need twice the income I did before, because besides the beautiful LCD panel (IBM T221) I have my eyes on, now I need a TIG welder as well. Oh, did I mention my plans to build a solar heliostat for melting steel?

So that kind of sums up what's been going on besides working and chasing the kids around.
  Visiting my old home town without leaving the house
I grew up in Oakland, CA and when someone mentioned it in the log with a hyperlink I thought I would take a look. Sure enough there's downtown Oakland and Lake Merit (home of the storybook playland). Through the Parks and Recreations links I was even able to find the old Redwood Heights Recreation Center which was just around the corner from my house on Elinora Ave (my house was at 4559 Elinora Ave).

This was a great place for arts, crafts, movies, splashing in the sprinklers, neighboorhood-wide BBQs and many fond memorys from long ago. I'm glad its still around and providing the same great experiences to kids these days.

  What cell-like handoff?
I've been using a 802.16 like product for about three years to get internet access at my house out here in the boonies via a 802.11b wifi card with chipped roms and a very tight beam antenna aimed 17 miles away at the tower on the mountain. Point to multi-point is a much different beast than baseless collision detecting catch-as-catch-can generic wifi.

Its been interesting participating in what has essentially been a three year experiment by one vendor to improve their proprietary solution (I think there were two firmware downloads yesterday, to what ends I have no idea). Back in the beginning it really sucked, only 2mbit total channel bandwidth and zero-nines reliability. Downtime was frequently hours, and occasionally days. Things are much more reliable now thanks to weatherproof antennas up on the mountain (good thinking for a facility at 11,000 feet) and every server box has hardware watchdogs and remote resets. The employees at Niles Radio got tired of driving the snow cat up the back of the mountain at 4pm in a snow storm when a box got stuck (a regular occurrence).

Still, I'm glad 802.16 (and 802.16a) is finally coming out and I would switch to it if it weren't for the possibly that DSL is going to finally reach out here in the forest. 2.4GHz has gotten awfully crowded and I have more faith in an industry standard than the experiment in process from a vendor I've never heard of. I find it funny however, that people are worried about making it support roaming "like cell phones do".

The original 802.16 specification did not specifically support mobility of client devices. It does have an adaptive PHY layer that can shift modulation schemes on a client-by-client and frame-by-frame basis. Given low ground speeds, this adaptation alone might be sufficient to sustain some mobility. However, there is no provision at all for cell-like handoff in the 802.16/a specs; a single base station is assumed at all times
First of all, battery life for a portable transmitter/receiver that has to reach up to 40km away is going to be pitiful unless we're talking about plugging into your car, but the comparison with cell phone service is flawed on the other side: assuming that data services from cellular providers can roam.

I don't know about GPRS, but I have used Sprint's CDMA data service in a mobile application: I spent two and a half hours on Amtrak from Chicago to Champaign doing web and chat on my laptop with a friend's hotwired handset. About once every 20 minutes the signal would drop off to zero and I'd get disconnected. I then had to "redial" and connect to another tower which was at full strength.

If that's the competition, then I don't think 802.16 (or 16a) has anything to worry about it.

  Melted metal and burnt skin
I really like TIG welding. I started out really hating it, because its probably the worst of all four types of welding in that there are a bunch of different variables to mess with. If you have several of them wrong, there's no simple iterative process of messing with one and seeing improvement. But that's only the half of it. It took like an hour and a half just to get the machine setup right.

This is after reading the manual -- twice.
Now the manual is pretty worthless, but so is the layout of the panel. Tell me if it occurs to you what the settings should be here:

Just so you know I'm just not daft, the shop teacher was dragged into this setup after I had spun my wheels about 10 minutes and we both started taking things apart, checking gas feed lines, cords, switching remote pedals. It was only after my second machine and third petal that I started randomly flipping switches and got the gas to start flowing (ok, so the gas solenoid isn't stuck), and then noticed that the gas shut off after 10-15 seconds. It then occured to me that it was going through its post-flow time (at which point I turned down the post flow knob and hit the pedal again which started the gas and then stopped it after a few seconds).

Now I'm normally pretty quick to debug things (anything from code to car engines). Its just that this time to test it, the machine has to be live, and if you hit the pedal you have 250A at 90V live on the stick (you hope), with the added bonus of high frequency that will allow it to spark out through the air much farther than usual. So I'm a little more cautious and slower to run through tests. For instance I will turn off the machine any time I'm opening up the bottom access panel, taking apart pieces or connecting/disconnecting cables and hoses. I find it amazing that I got the thing to work at all.

So finally I had the machine doing what it was supposed to be doing (I think), then I turned my attention to the TIG gun. Now there are seven pieces that you have to put together on the working end of a TIG gun: the handle, the gaskets, the back cap (stub, short, medium, or long), the collet & collet body (0.020, 0.040, 1/16, 3/32, 1/8, or 5/32), the Alumina Nozzle (1/4, 5/16, 3/8, 7/16, 1/2, 5/8), and the tungsten electrode (pure, 1% or 2% thoriated, ceriated, zirconiated, or lanthanated). They all have to match each other and the job at hand.

A nice illustration, but no--I didn't have water cooling. That's only for the big jobs.

I was going to start with thin sheet metal (ok, 16 gauge is not thin for sheet metal, but its thinner than 1/8" plate), so I wanted a small electrode. I dug through the box and found a ton of 3/32" (pure and 2%), a few 1/8, a box labeled 1/16 but obviously holding 3/32 or larger, and after picking up two dozen pure tungsten electrodes off the floor because their container wasn't shut right, I finally found one box with some actual 1/16" in it. I then dug through the parts for collets and collet bodies that matched and grabbed a #7 nozzle. I took everything over to the welding station and assembled it, but the collet just wasn't grabbing on to the electrode. Hmmm. Back to the box of parts, and this time I assembled my pieces on a spare torch to make sure they worked together. Ok, good. Now back to the welding machine and transfer all the parts. Worked there too. Ok, next I had to pull the electrode back out and go get the grinder.

Welding tips must be properly sized for the job, type of metal, and amount of current. The tip angle will affect how the arc forms, spreads and penetrates, so its good to get it right. And you've got to grind it the right way. You can't grind it from the side (radially) or towards the tip. You've got to run the end longitudinally, head-on to the spinning of the wheel (where it tends to push it back towards you). Also, you want to make sure you're in a weld ventilated area and don't breath any of the dust from grinding--thorium is radioactive. I tended to end up with flat faces on the sides of my tip which gave me some flairing, but I did ok.

There's an entire sub-industry that just makes grinders for tungsten electrodes. These things can run up to several thousand dollars (more than most of the welding machines I've been looking at). Still, if you're doing automated (robotic) TIG tube of pipe welding, you need repeatability in your tip preparation, so I suppose there's a use for these.

So after running line after line, and making a mess but not really a good weld, I'd show it to the teacher and he'd suggest that I turn up the gas flow, or switch tip sizes, or turn down the power, or go slower. Finally he came over and watched, fiddled with the knobs and make suggestions, but we still weren't quite there; so he took the torch himself and ran it a bunch until he finally got a decent result and then said, "There. Use those settings." So I got about an hour of real TIG welding in. Then right before class was over I pulled out some quarter inch plate squares I got at the scrap yard and started working on a cube. Doing thicker stuff is actually easier than the thin stuff. The tip doesn't need to be as pointed and you just crank the amperage way up. Doing corner welds doesn't have to have filler so I was just ripping along, melting the two edges of 1/4" plates till they merged together. Great fun, but I ran out of time before I finished so I'll have to work on it some more next week.

My final mistake wasn't apparent until the next day when my wife asked me if I had been out in the sun. Since I normally hide all day in the basement, it is rare that I get any sun at all. My skin complection is usually closer to albino troll, but today I had a bright red spot on my neck. I had just purchased a new helmet, since I had figured out that I didn't need an auto-shade which are very expensive anyways. What I really needed was something that was light and that I could adjust to flip down easily, so when I was at the welding shop I asked them for the lightest helmet they had and got that along with some gloves that were too thin and some thin 0.023" wire for the MIG welder (which I didn't get around to trying). Well, since I hadn't broken in my helmet completely, it didn't always flip down all the way and I ended up frying a two inch patch around the collar of my shirt. The stinging should stop by next week, but hopefully I'll remember to button up my jacket up all the way to the top and flip the helmet all the way down before welding.

An introduction to TIG welding.
How to prepare tungsten electrodes.
TIG torch parts from Mister TIG.

  Helping out others in the blogsphere
Hugh MacLeod is a unique voice in the blogging world, because he mostly creates his own content (cartoons), and then like me, actually puts time into talking about his take on certain things that interest him or are important to him. His cartoons are edgy and funny (in that NY sort of scene), and he uses them as both a product and as a draw to his soap box.

Besides pitching a environmentally friendly limo service in hollyweird, he spends some of his time talking about a film that one of his best friends made: Young Adam, featuring Ewan McGregor and Tilda Swinton. It opened today in major cities in the US (NY, Chicago, LA, Denver, Dallas ...) which means the closest theater for me would be about 500 miles away, but if you're in the big city, looking for some '50s Scottish drama, then this is the film for you.

The impressive thing is that Hugh came up with a list of questions for Tilda, and from her responses you can tell she put some time and thought into them, and not just because he's friends with the Director. People take pride in their work, and when you ask questions or connect with them on a topic that's important to them, they'll likely take the time from their busy lives to interact with you. Its something that web logs and social networks are trying to tap into, but have only scratched the surface of. We are at the dawn of interesting times.

Hugh's call for help, and Young Adam's link emporium.
Main movie promotion page, with links for trailers and such.
The Wall Street Journal review of the film.

  Doing dangerous things in the fire
A couple years ago I was staring throw the glass in the front of my woodstove, and thinking that those wispy blue flames coming up off the coals were probably very hot. This led to a dumb idea--maybe I could melt stuff in there.

My first thought was to melt metal without too much thought to what kind of metal I might melt. My neighbor is a welder for the county, so after mentioning it to him, he brought me some metal shavings from work, which were naturally steel. Now a woodstove is made out of a close relative of steel, namely cast iron. So if that flame inside was going to be hot enough to melt steel, the structural integrity of the woodstove was going to be in serious trouble. Luckily it doesn't get nearly that hot.

How hot does it get? Well, the thermometer on the outside of the side of the stove routinely gets up to 600F, and the thermometer on the flue can easily get to 900F if I run the stove wide open (lots of air, lots of flame straight up the chimney), and the thermometer above the catalytic converter will run 1,000-1,100F pretty regularly. (No, the stove doesn't have any more thermometers, just the three.) So it easily is above 1,000F inside the stove. Could be 1,500F or even 2,000F when I really have it blasting.

So after doing a bunch of reading on the net and taking the night school metal working class, I now know that I could easily melt aluminum in the stove. I might be able to melt copper, and is an outside possibility for melting brass. (Brass melts somewhere around 2,200-2,300F) I also found out that once you've burned the wood to the point that its turned into coals, all the volatiles are gone, and you just have charcoal left which is giving off carbon monoxide (which burns and turns into carbon dioxide). So if I was really motivated, I could go look up the flame temperature for CO/air, and I'd know what my maximum temperature was.

My first task was finding something to melt the metal in (since I didn't want to have it dripping around in the stove). A crucible is the ideal thing, but they normally cost money, and I didn't have the materials and tools sitting around to make my own. On several of the backyard melting sites people were using steel kitchen utensils (pots, ladles, measuring cups) so I was thinking maybe a baking tray of some sort (which would make neat sized ingots if I could melt enough metal. I finally decided on a bread pan.

No I did not get the bread pan from the kitchen, my wife would not be pleased with me melting her bakeware. I picked one up for 49 cents at the salvation army--a great place for items to experiment with.
The problem with aluminum is that it oxidizes really easily, and it also burns really easily. I've basically turned several pieces of tinfoil into ash at this point. I don't have many copper scraps, and the only brass I have is some empty 22 shell casings. So I needed something else to melt.

Last night I was sorting the recycling, plastics and metal cans go into the general pickup bin while junk mail catalogs and glass each have to be separate out and taking down to the main facility bins. We don't really use that much glass, so I hadn't emptied that bin in about three years, but I got to thinking--hey, maybe I can melt the glass.

So once I had a good fire going and burned down to coals, I stuck a few pieces of glass in my bread tin and loaded it up into the fire. First I just let it heat up a bit, then I added some air through the bottom ash grate to get it going hotter. The pan started to show red spots, but the glass wasn't melting. I gave it a little while longer and the pan started glowing enough that it lit up the glass from below--pretty cool, but it still wasn't melting. I took a closer look and I saw that where the glass was sitting on the pan it was darker than the rest ot the metal, so maybe it hadn't warmed up yet. So I kept it going for a few minutes more, peaking in through the window. I was beginning to give up hope, when the rim of one jar started sagging. Yes, it was finally melting. I let it go a little while longer and then pulled the pan out of the fire which is pretty hard to do since I don't have crucible tongs or any other high temperature pliars--basically I have to use the fire poker and ash shovel.

The coolest thing was watching this cool down. The pan itself is pretty thin, like 16 or 18 gauge sheet metal, so it cools down pretty fast. But where the lump of glass was sitting, it wasn't cooling down right away, so very quickly I got this red spot of hot metal, covered and distorted by a lump of glass, surrounded by black. Should have gotten a picture. I took the whole mess outside to let it cool down overnight. We'll check out how it turned out in more detail tomorrow.

  More things to fix in C++
C++ has a lot of great things in it, but even if you decide not to define your own new operator and do other horrible hacks like that, there's still plenty of times you end up bumping into the edges of the standard.

One great feature is method overloading: having the same method name with different argument types.

class   my_holder {
  void add(int) ;
  void add(const char *) ;
} ;
So I was expecting everything to work fine when I used multiple inheritance, where each class had the same method name, but with different arguments:
class a {
  void add(int) ;
} ;
class b {
  void add(const char *) ;
} ;

class combine: public a, public b { } ;

  combine test ;
  test.add(1) ;
But it didn't work. Instead I got:
testopero.cpp: In function `int main (int, char **)':
testopero.cpp:22: request for member `add' is ambiguous
testopero.cpp:7: candidates are: void a::add (int)
testopero.cpp:10:                void b::add (const char *)
Hmmm. Can't decide between add(int) and add(const char *). Gee, I can. Can you? Check the reference guides just to see if there's some other magic code I need,

Nope, they say, "Don't do it." Thanks a lot.

I know those C++ compilers are already pretty messy (mostly thanks to the ability to compute square-roots at compile time with templates), but could we at least make them figure out which method to call when using multiple inheritance? I would really appreciate it.

The complete 20 line test program if you want to stretch your compiler:


class   a { public: void    add(int) ; } ;
class   b { public: void    add(const char *) ; } ;

void    a::add(int aint) { printf("+ %d\n", aint) ; }
void    b::add(const char * astr) { printf("+ %s\n", astr) ; }

class   combine : public a, public b { } ;

int main(int, char **)
    int ival= 1 ;
    char s[10]= "hello" ;
    combine test ;

    test.add(ival) ;
    test.add(s) ;
  Getting more reliable access
It looks like I may be able to get DSL soon which is really cool. I have high speed access, but its wireless and so is prone to problems. Like right now I'm trying to listen to streaming radio (Classic Techno) but every two minutes it stops and then has to rebuffer the stream. Besides interrupting the music, it also moves keyboard focus which is really annoying. Other times it the link will block up for about four minutes (usually right after I've come back from a break and just started using the net again). And then there are the major outages where a box get stuck once or twice a month and either gets reset after an hour by some watchdog circuit, or is down until I can get John on the cell phone and get him to drive the snow cat back up the mountain to the towers and fix whatever went wrong. Its just not something you can count on, which gets to be a problem when your trying to do an IM, a remote debug, or VoIP.

Finally Qwest has upgraded the fiber drop that services this are of town (our lines don't go back to a central switch, they're terminated in the field in a big fiber demux). It turns out I should be able to get service immediately. However, I know it won't just be a matter of turning it on for the phone company, because despite them giving me three pair service wire for direct burial (the line that runs from the street to the house), they only ran one pair down the pole, so they're going to have to roll a truck out our dirt road and run another pair (or two) of wires down the poll.

Of course once they get the lines to my outside junction box, I'm all set. I've got eight pairs of CAT-5 running from the outside service junction back to the basement punchdown block where I have all the ethernet and phone lines in the house running to. Someday its going to be this organized thing, but for now all the cables pour out of the conduit, spilling all over the floor and shelves. I've taken a very skattershot approach to terminating them as well. I've only put ends on the wires I've needed so far, so about 60% of the house is wired and the rest is still just raw cable. Its one of those projects I still have to "git to".

If I do get service, I'll probably stick with the radio connection as well. Maybe scale back on rate level. Because 1) I know that DSL isn't going to be perfectly reliable and 2) the backchannel rate on radio is symmetric (so right now I have both 640k uplink and downlink). Between the two, I should be in pretty good shape.

A Local Loop Tour

  Scaled gets a new toy
Besides racing for space, Scaled obviously has other things on their mind (like military contracts), as they've just ordered a new toy:

Now this mill doesn't look that big in the picture, but the working area underneith is 50 feet by 20 feet. This thing could mill a good sized yacht out of a block of aluminum if it wanted too. The announcement includes an interesting plea for work:

We will continue to utilize our existing machine for the foreseeable future, and with the huge increase in throughput offered by this new machine, we are actively seeking new business for our machining center. Please contact us with your requirements.
Good luck to them.
  Banging my head on the interface
Its the little things that really mess me up, and put me in a real good mood. Like consistent capitalization. Personally, I'd be happy if I never had to press the shift key while programming, but when I do, don't make me go look up which variation I need each time I go to use it.

For example, I was working with a class called Client and it had a property:

    SessionID   m_sessionID ;
And then it had a get() accessor for it. All well and good, so I added some code into my project:
  printf("init: session=%s\n", clientptr-> getSessionID().c_str()) ;
But it didn't work. Why? Because it was getSessionId(), not getSessionID(). Id? Id? Don't they like make video games or something? (massive thrashing ensues)

OK, fine. I'll get the session idd id. You know, if it was get_session_id() I wouldn't be having this problem. Oh well, at least its not lpszSessionID().

  Why is this crashing
I know that not all of linux is rock solid/ready for prime time. Its understandable that certain programs or libraries just haven't seen enough use yet and still have errors hiding in the corners. Its not serious, someone needs to report these and/or fix them, but most of the time its not the end of the world. Security issues get the top priority of course, but most utilities and shell tools do not present that kind of vulnerability. Still, when it comes to utilities that have been around for more than 20 years, I sort of figure they should be pretty well tested by now.

Today I was scanning through some XML files, trying to find examples of a particular feature. Unfortunately these files had inline image data (base64), so listing the lines would be insane, and searching in VI was proving problematic as well. So I checked out grep and it has a -o flag which is just supposed to show the snipit that matches the pattern. Great, lets try it:

% grep -i -o url *
test1.xml: url
Segmentation fault
Grep crashed. Not a fluke either, was able to crash it on numerous tests. Oh for the good old days, before GNU decided they had to rewrite everything just so they could claim they wrote linux. BSD was so much more stable, or at least the features that it had, usually worked, because if they didn't, you could email the guy who wrote them and complain until he patched it to get you to shut up.
  Imitation Dr Pepper, not better, just cheaper
For a while there with double coupons and sales, I could get a 12pack of Dr. Pepper for about $2 which is pretty good. The grocery stores house brand is usually more. And lets not forget the stockpiling of 100+ 2L bottles of 2002 with the 55 cent coupons on them, well ok, maybe we should. I drink too much soda, mostly Dr. Pepper, and while I'm cutting back (really), I still have a serious acquisition situation.

Recently the deals on brand name soda have been rather pathetic: $3.77/12pack -- you save 23 cents, so I've been looking at the generic brands. But the brands are not created equal, and so after a bad Walmart experience, I've learned to sample a small batch before bringing out the forklift.

Derek's incomplete taste tests of alternate brands:

Mr Pibb MAXXPepsi Not really a house brand, but shows up in restaurants a lot. A drinkable replacement.
Dr ThunderWalmartsimply awful, yuk. has a nasty bite and metallic taste, get it out of here.
Dr SkipperSafewayBest house brand alternative so far. Very close in taste, just slightly sweeter.
Dr KKroger / FrysPassable, a little less aggressive than safeway. Not mixable!
Dr BoldAlbertsons Drinkable, but not as true as the others. Like someone slipped too much cola or vanilla or something else into the mix. Kind of a shasta cola/dr pepper hybrid.

The real solution would be to buy the gallon jugs of Dr. Pepper syrup (no, I'm not going to drink it straight) that used to be on the shelf at Smart&Final, and learn how to mix soda myself. A soda water fountain shouldn't be that hard to put together (and I need the CO2 for welding anyways), and maybe I could scrounge pieces at the local vending distributor. But that's not going to happen for a while, so I'll just have to continue the quest for the cheapest drinks in a can. Besides, I can melt the aluminum when I'm done.

A long list of alternatives: Dr Pepper and the Impostors
or the collection of over 120 different pepper cans.
and then there's Not Quite What the Doctor Ordered, the fake drpepper site, including images, ratings and more.

  Forgotten machine names
I setup a machine two weeks ago, and like most times, I named it based on the first odd name that came to mind after the question came up. Its not the most interesting naming scheme either, but up till now its worked out alright and I don't really have to name machines that often.

In the past I've had machines named erehwon (that's nowhere backwards), zarkoff (from flash gordon), rhubarb, io and po, fuel (an SGI octane), handspring, ultra and extreme (Sun Ultrasparcs), rhubarb, gumby, and various others. There wasn't any rhyme or reason, but the names were pretty easy to remember and to type.

This time I picked a name that's short and easy to type, but for the life of me I can't remember it. I have to keep going back and looking at the prompt in an open window, or bring up the /etc/hosts file on another machine. I don't know what is so hard to remember about hmmm, what was it again? digs around ... here it is, grub. It seems like a perfectly good name, but for the life of me I can't keep track of it for more than five minutes.

If this keeps up I'm going to have to rename the machine (which isn't a pretty process).

I wonder what kind of google ads I'm going to get after this post.

  Scramjets take to the air successfully
With some excitement I read about NASA preparing to test the modified X-43 last week (the original was to be tested back in 2001, but dumped into the ocean before firing the engine due to bad handling of the control surfaces during rocket boost). Well, it launched and flew wonderfully which is great. The researchers now have data which is going to keep them busy for years, and hopefully we'll see additional tests, and maybe even a manned version.

takeoff of test craft attached to a B52 booster rocket firing to lift the test craft to 98,000 feet

Why is the X-43 so exciting? Its not a space ship or anything. Its a hypersonic jet, with the first successfully fired SCRAMJET (outside of a wind tunnel). Ok, what's a SCRAMJET? Come on, I knew what a SCRAMJET was back when I was 12 (and that was quite a while ago). I could even draw the design of one. Its a supersonic version of a RAMJET. Which is what? Ok, ok, lets start at the beginning.

Back in the 1930s the first jet engines were created separately by both Frank Whittle and Hans von Ohain. However, it was only as war was breaking out in Europe that they were built. Unlike a conventional airplane, which uses a regular internal combustion engine to turn a propeller; the jet combined the source of energy directly with the end result: a fan first compressed the air which was then combined with fuel and ignited, which all blew out the back end, turning a compressor and then shooting out the exhaust port. While propeller driven planes work great at slow speeds, jets are much more efficient when trying to go fast (especially when trying to go faster than the speed of sound). Unfortunately, it is a somewhat complicated machine.

In addition to the design with the compressor (or fans for multiple stage versions) and turbine, others worked at simplifying the mechanics involved. This led to other designs, such as the pulse jet and the ramjet. The ramjet worked by compressing the air stream, then expanding it into a combustion chamber, then letting the exhaust flow out the rear. This engine has no moving parts, but requires that the air be flowing in (and thus the jet be moving) at a quite high speeds before it will actually fire and produce thrust.

A modified form of the ramjet is actually very common on military jets: the afterburner. There gasses are already moving very fast coming out of the first stage engine, and when mixed with additional fuel, can produce additional thrust: providing extra power for take-off, acceleration, and top speeds well beyond the speed of sound.

Unfortunately, both the conventional jet and the ramjet suffered from one critical design problem in the quest for high speeds. They both had to slow the airflow down to sub-sonic rates in the combustion chamber. Now that didn't prevent the plane from going supersonic, but there are limits to the expansion and compression ratios you can put the airflow through and still get decent results. The fastest jets today go between MACH 2 and MACH 3, and the fastest test RAMJET missile went MACH 5.4.

The scramjet is designed to go hypersonic (really fast) and even the combustion chamber works with supersonic gas flows. Everything is designed for the shockwaves and other weirdness' that happen at that speed. Of course this engine is even worse than the RAMJET for its starting speed requirements. Something else has to get you going several times the speed of sound just to get it started. But then it will kick in and really push you out there. The X-43A test target was MACH 7, which it hit without a hitch. With hydrogen fuel (which is what the test craft used), these engines should be able to go beyond MACH 20 (which is 14,823 MPH or 21,750 feet per second).

Only forty years and $250 million to get this far. Of course people were talking about space planes using this engine thirty years ago like it was just around the corner. It was even used as the basis for a 1983 space based retread of the old Airport disaster genre, Starflight One, which starred Lee Majors and Lauren Hutton.

I guess forty years is actually pretty fast for this kind of development. Its also pretty exciting for NASA, combined with its Mars images and press about proposed moon and manned Mars missions. NASA is not the boring--nothing happening here--agency it used to be. Still I think its still going to be quite a while before we something like this:

Press release on the X-43A flight from Dryden Flight Research Center, Nasa X43 Mission Page
A history of the jet engine, Wikipedia: jet engines
Aviation History's basic theory of a modern jet engine as part of its general aircraft engine theory.
A history of engine research from the McCook Field Airforce Research Labratory
An introduction to the tradeoffs of RAMJETs, SCRAMJETs, and pulse jet engines from a french conference (mostly english).
The X-15 RAMJET powered NASA test aircraft.

  Bought government hiding behind rhetoric
While Canada just blew off the RIAA and pointed out that having files accessible over the network isn't piracy (like having a photocopier in a library); our US government remains the well bought lapdog of the music industry. Its working on a new law, the Piracy Deterrence and Education Act of 2004 (hr 4077) which makes sharing copyrighted material punishable by three to ten years in prison.

Despite how stupid this sounds, just on the surface, the lawmakers dig an even deeper hole for themselves, defending the proposed law with the following:

A main reason for the bill is to curb the increased occurrence of child pornography on peer-to-peer sharing, say subcommittee members.
Huh? Is this just a smokescreen for a worthless law on the basis that you can't argue against their noble goal? Or is it an excuse to bring the FBI in? They further justify their actions with the following report:
The measure cites a General Accounting Office study that finds "when searching the most popular peer-to-peer service for keywords known to be associated with child pornography, 42 percent of the returns were associated with images of child pornography."
And this is related to copyrights how? Just to make it worse, the American Library Association points out in its analysis that:
The bill does not distinguish between unauthorized copying that is legal from unauthorized copying that is illegal.
I haven't seen idiocy like this since the Communications Decency Act of 1996 which was unconstitutional before it was even signed, and Congress knew it, but they said, "we need to be doing something about the problem."

Copyright Policies Clash, PC World

This thing is so wrong, I used the ALA site to send a letter to my congressman (Rick Renzi):

This law erodes existing rights and brings the FBI into an already nasty situation. The FBI is not an educational organization. The RIAA is attempting to make sharing music second only to terrorism. There are far worse crimes going on today than the sharing of music files. While I am against piracy, I am also against harassment of people who record TV shows and share the tapes with their friends or time shift music on digital radio.

Kids have always shared music and made copies on tapes. I used to tape music off the radio when I was 14 (having close to no income at the time). Now I have a massive CD, Laser Disk, and DVD collection. I still check materials (CDs and DVDs) out of the library first, as the quality of product put out by the industry varies quite a bit. This is just another example of legitimate uses for file sharing.

Lets not criminalize my kids when they get older and start listening to music. Lets not hide behind the rhetoric of kiddie p*rn either, that stuff is already illegal and has no legitimate copyright owner.

Please vote no against HR2517 HR4077 if it comes up for general vote.

Life in the middle of nowhere, remote programming to try and support it, startups, children, and some tinkering when I get a chance.

January 2004 / February 2004 / March 2004 / April 2004 / May 2004 / June 2004 / July 2004 / August 2004 / September 2004 / October 2004 / November 2004 / December 2004 / January 2005 / February 2005 / March 2005 / April 2005 / May 2005 / June 2005 / July 2005 / August 2005 / September 2005 / October 2005 / November 2005 / December 2005 / January 2006 / February 2006 / March 2006 / April 2006 / May 2006 / June 2006 / July 2006 / August 2006 / September 2006 / October 2006 / November 2006 / December 2006 / January 2007 / February 2007 / March 2007 / April 2007 / June 2007 / July 2007 / August 2007 / September 2007 / October 2007 / November 2007 / December 2007 / January 2008 / May 2008 / June 2008 / August 2008 / February 2009 / August 2009 / February 2010 / February 2011 / March 2011 / October 2011 / March 2012 / July 2013 / August 2013 / September 2013 / October 2013 / November 2013 / December 2013 / December 2014 / February 2015 / March 2015 / July 2016 / September 2016 / December 2016 /

Paul Graham's Essays
You may not want to write in Lisp, but his advise on software, life and business is always worth listening to.
How to save the world
Dave Pollard working on changing the world .. one partially baked idea at a time.
Eric Snowdeal IV - born 15 weeks too soon, now living a normal baby life.
Land and Hold Short
The life of a pilot.

The best of?
Jan '04
The second best villain of all times.

Feb '04
Oops I dropped by satellite.
New Jets create excitement in the air.
The audience is not listening.

Mar '04
Neat chemicals you don't want to mess with.
The Lack of Practise Effect

Apr '04
Scramjets take to the air
Doing dangerous things in the fire.
The Real Way to get a job

May '04
Checking out cool tools (with the kids)
A master geek (Ink Tank flashback)
How to play with your kids

Powered by Blogger