Saturday, December 09, 2006

The magic of Python

One of my customers sells novelty toys. Cool gizmos to play with. They advertise on infomercials which are done by as third party. Buyers call the third party to place orders, and the orders are later sent to my customer in a comma separated values (csv) file. These orders then need to be loaded into their accounting system and sent to the credit card processing gateway; however, the csv file from the call center is not in a format that matches the csv file needed by the accounting system or credit card gateway.

Since Microsoft Excel will read and write csv files, I wrote a fairly large macro to read the file from the call center and rearrange the values into the formats the other systems wanted. I was pretty happy, until I noticed two items where Excel "helped" me.

  1. Credit card expiration dates are recorded as 03/09 meaning end of March, 2009. Excel sees that and says, "That looks like a date, but not quite all the digits are there." So it guesses that you are really talking about 03/09/2006 (this year), so now when I say output the date as MM/YY or 03/06, the credit card is already expired. I can correct this by telling Excel to out put the date as MM/DD. A hack to be sure, but it works until 2032.

  2. When Excel encounters numbers over 9,999,999,999 it decides to represent them in scientific notation. These numbers can be reformatted to display correctly but after 15 digits, Excel starts dropping digits off. So lets pretend your credit card number is 16 digits long (most are) like 1234 5678 9012 3456. Excel reads it as 1.234567 E+15, when I reformat it, the credit card number becomes 1234567890123450, losing the last digit -- a check digit by the way.
I'd like it if Microsoft gave me a don't-help-me-mode. Which they do, it is called Visual Studio. But someplace in between do-it-all and mess-the-data-up-right-away would be nice. What I'd really like is to have Excel read these values as sequences of characters instead of numbers. In fact, if I surround any value with =" value ", no matter what is in there, Excel treats it as a string when it reads it with no second guessing, and no "help."

Once the file was open by Excel it was too late. So I needed to find a way to put those =" " characters into the csv beforehand. I considered writing a small .net program, but then I thought about Python and did a quick google search.

From that search I ended with this.
# -*- coding: cp1252 -*-
import sys
import csv

args = sys.argv
inputCsv = args[1] + '.csv'
outputCsv = args[1] + '-post.csv'

reader = csv.reader(open(inputCsv, "rb"))
writer = csv.writer(open(outputCsv, "wb"))
for row in reader:
row[20] = '="' + row[20] + '"'

Which comes down to:
Open the input csv, and create an output csv, for each row in the file, wrap the 20 item with =" value ". That was easy. I should have written the whole thing in Python.

Thursday, October 12, 2006

Is the internet censored?

Today one of my friends sent me a link to a video that poured weak fuel on the 9/11 conspiracy theory. I won't post a link to it here. I don't want to add to the link count and drive up the videos ranking. I was offended by the intellectual insults that flowed during the opening moments I could tolerate sitting through. Thin and contortionistic logic -- stuff that my 12 year old son would have countered with ease -- was passed as "facts." No, this was not the video that Popular Mechanics already completely discredited, but it was of the same genera.

Then I stumbled across this article by Robert Cox. Interesting proposition. Will a capitalist system self-censor opinions other than those of the owners? His "web 2.0" reference is a head-fake since that title is normally associated with more dynamic ajax driven sites, but the questions he brings up should be pondered.

Saturday, September 30, 2006

Aviation sectionals update

Just an update on my earlier post. Boeing is closing down connixion. I talked to a representitive about it, and they plan to just unplug it. No selling off assets, Just unplugging. So much potential -- soon to be gone.

Monday, September 25, 2006

Why I Fly (chapter 10)

All my stories start with a lead-in something like “A long time ago in a galx…” No wait, that’s a different story. More like this: Earlier this summer we went to Oregon to visit my sister in Lincoln City. On the way down we stopped at the Tacoma Museum of Glass, Fort Vancouver, Pearson Air Park and Museum, and Evergreen Aviation Museum. And yes, I see the trend developing here. We had a nice visit with my sister, and on the way home we stopped at the Tillamook Cheese Factory.

In the process of going to the cheese factory, we drove right past the Tillamook Air Museum. I knew it was the right thing to do, mostly because my wife, Sandra, had been such a good sport about the other airplane museums, and she wanted to see the cheese factory. Turns out the cheese factory is pretty cool and we got some pretty good pepperjack cheese out of the deal, so in the end I was happy we went.

This Sunday it was a severe-clear day. Early fall, just a hint of trees changing colors here and there, and short-sleeve weather. Great weather for flying. About 10:am we finally got out the door and headed to the airport to climb aboard the trusty steed. After moving a car-seat from the van to the plane, loading up with the requisite in-flight entertainment (a bag of books and toys for the kids), and picking up my clearance, we were off the ground about 10:45.

The flight was really uneventful. Blue above, green below. The islands and peninsulas of the Puget Sound created patterns in the blue green water surrounding them. The mountains on the left rose with their peaceful majesty along the Cascades. The Olympic Range on the right faded into the rolling fir covered hills of the Costal Range. The Capitol building in Olympia sat nestled next to the bay. The rolling hills giving way to the Columbia River, and the long span bridge at Astoria. Soon we were paralleling the coast over Seaside and Cannon Beach, looking down on Haystack Rock, and then descending over Tillamook Bay to land.

Just after noon we touched down at Tillamook, and then we touched down again, and again (ok, not one of my better landings). The runway end yielded to a serpentine strip of blacktop that lead to the museum where we shut down and went inside for lunch.

The airplane collection is good. In the hangar they have a pretty good selection of WW-II aircraft, and a couple of surprises were an F-14 Tomcat (of Top-Gun fame), an A-7 Corsair, and a MiG-15. But the real star of the museum was the building housing the collection. This is a wooden structure that is nearly a football field wide (297 ft), nearly a fifth of a mile long (1,072 ft) and 15 stories high (192 ft). And is all open free span in the inside. It is the largest wooden free-span structure in the world. The airplane collection takes up about half of the available space. The building was built to house eight or nine of the 17 blimps that were used to patrol the west coast during WW-II. There were two built, and the first took nine months. The second was put up in 29 days. Wow.

After wandering around the airplanes, taking in the sights of the trains nearby, and talking to the pilot selling rides in his open cockpit biplane, we made one last potty stop and buckled back into the plane.

We took off to the north staying a couple thousand feet over the city where we crossed over the cheese factory. We then climbed up to 4,500 feet, our cruising altitude for the ride home.

We ran our course backwards to the Hood Canal Floating Bridge, then turned right and headed across the Puget Sound. But instead of going to the airport, we made a couple of turns around my youngest son’s gymnastics building in Mountlake Terrace, and then headed north and set up for our landing. (much better this time).

By 5:15 we were home, and getting ready for the busy week ahead.

Today, my son is pretty excited. He tells me that one of his friends from school was at the Cheese Factory at the same time we were at the Air Museum. (no, they did no see us fly over.) Sandra smiled at me and said “They got home at 10:00 last night.”

A good adventure, beautiful scenery, a brush with history, and back home for an evening movie. And that is just one more reason why I fly.

Friday, September 15, 2006

Replacing the Ford F-250 Super Duty Side Mirrors.

I was picking up my son the other day when my neighbor called. She said that my truck rolled down the hill by itself and backed into some brush next to her driveway.

IMG_1532When I got there, the truck was embedded firmly into the brush, still locked up. Oddly the drivers-side mirror was folded against the side of the truck. After a brief inspection, I unlocked the truck and drove it back to it's parking space.

IMG_1555Shortly after, I found the culprit -- the end had come off the parking brake cable where it attaches to the pedal. By the way, the Department of Transportation keeps track of such events. If you have a brake failure of any sort, you should report it.

The sudden stop is what caused the mirror to fold up, and in the jolt, a small IMG_1554 clip broke. It looks like about 15 cents worth of plastic -- but I'd been willing to pay a couple bucks for it. But you cannot buy just the clip, you must buy the whole $235.00 mirror assembly. I tried junk yards, but none locally had one.

So here is how to replace a mirror.

  1. IMG_1552IMG_1553Get out your tools. I used a flat head screwdriver, a Phillips screwdriver, a 1/4 inch drive ratchet, socket driver, extention, and sockets sized 7/32, 9/32, and 7/16.

  2. Roll down the window.

  3. IMG_1551Remove mirror nut cover. This is just pressed into place. Grasp firmly and pull it straight out from the window. Set the cover off to the side.

  4. Remove grommets and cut openings in the adhesive padding.

  5. IMG_1549IMG_1550Remove the Switch panel from the armrest. Grasp near the front and pry it up and back. There is a tab on the back that catches under the rest of the armrest. Disconnect the wiring junctions from the switch panel. Set the panel off to the side.

  6. IMG_1547IMG_1548Pry the reflector off of the lower corner of the door -– I used a flathead screwdriver -- exposing the bolt. Set the reflector off to the side. Remove the 9/32 bolt and set it off to the side.

  7. IMG_1546Remove the 9/32 bolt from the rear of the switch panel opening and set it off to the side.

  8. Grasp the door panel and lift it straight up and off the door. Be careful of the lock tab that pokes out the top to make sure you don'’t get hung up on it. Set the door panel off to the side.

  9. IMG_1542Remove the door speaker. If there is not a quick disconnect for the wiring stick the speaker magnet to the door.

  10. IMG_1539Reach in through the speaker opening and disconnect the mirror power control wires. I found it is easer if I pull it off the mount in the door first.

  11. Remove the four 7/16 nuts holding the mirror on to the door (they are behind the holes you cut and the grommets you removed). If you take them out from the bottom up, the mirror will be supported better until the last one is removed. As you remove the final nut, reach through the open window to support the mirror so it does not fall.

  12. Carefully extract the wiring from the opening in the door.

  13. Set the old mirror aside.

    There are no nuts in the mirror kit, so if you drop the nuts into the door, you will need to do the two steps below to be able to get them out. If you do not, you can skip the next 2 optional steps.

  14. IMG_1541(optional) Loosen the plastic cover on the lower rear of the door by removing the 2 Phillips screws

  15. (optional) CAREFULLY peel the adhesive padding up exposing the openings in the lower portion of the door.

Preparing to reinstall the new mirror.
  1. IMG_1538Install the adapter. Ford decided that using a single type of connector was too simple, so when you install the new mirror, it has a different connector on it than the old one. So you have to start by installing the adapter.

  2. Zip-strip the adapter to the other wires in the door to keep it from falling into the window track.

  3. Reverse the step above.

Saturday, July 29, 2006

Exchange 2003 SP2 intelligent Message Filter (IMF) does not work.

I decided to write this blog, not as a gripe against Microsoft Exchange 2003 SP2 upgrade, instead as a way to find the quick links to the fix.

Here is the history. Prior to Exchange 2003 SP2, there was a plug-in that attempted to identify Unsolicited Commercial Email (UCE), commonly known as SPAM. Since it was so popular, MS decided to bundle it with SP2. However, the SP2 installer DOES NOT honor the existing IMF configuration. By default about half of it is configured, but there is one setting that is poorly documented, and difficult to find, which says that a server is to "Apply Intelligent Message Filter."

This is especially bad on a Small Business Server (SBS) where the gateway and the Exchange server are one in the same. It should just do it for you.

Every time I install Exchange 2003 SP2 I end up searching around for this setting and taking up extra time to find it.

So here is how to fix it.

Saturday, June 10, 2006

Aviation Sectionals meet Google maps.

There is an interesting observation about google tools. The observation is that google is merely reinventing things that already exits.
  • Google's core product, search had existed long before they did it.
  • Online comparison shopping could be done at several sites before Froogle showed up.
  • email was a commodity before gmail.
  • Instant messaging with voice was provided by the masses before talk.
  • and how many sites provided mapping services before the arrival of Google maps?
But based on the popularity of these services, it is apparent that Google just did them better, showing that innovation is not the invention of something new, it is improving something we already do.

Like Google has done for the internet, Garmin has brought innovation to the aviation masses. General aviation is benefiting extensively from Garmin's work. GPS for instance is not a new technology, it is fundamentally, LORAN improved. We are also seeing the merger of computers and instrumentation to give us cockpit resources such as moving map displays that vastly increase our situational awareness, as well as integrated flight systems. Again, these have existed for many years, but Garmin has made them standard equiptment in most new aircraft.

One area in which we are just starting to see this innovation is charting and flight planning. A local company Seattle Avionics is driving out their version of an electronic flight bag.

But the innovation I find most fascinating is the delivery of the charts. In the bad ol' days, I would go to the airport and buy the paper charts. Some of these would expire every six months, others ever 56 days, and I would be back to the store to buy more. The 56 day expiration cycle is particularity annoying. While I appreciate the dynamic nature of the airspace around me, not all of it would change in the 56 day cycle. But the charts are sold in packs. For example, I fly primarily in the state of Washington, which is part of the NW-1 pack, which also includes Oregon, Idaho, Montana, and Wyoming. So every 56 days I get ALL of the charts for all 5 states, and I throw the old ones in the recycling. Yuck.

Sure there are options to subscribe only to the changes, but now I'm sitting down every eight weeks to sort through 400 or so pages to replace the 20 or so that have been changed.

But now places like Airnav and AOPA (membership required) let me just download the chart or two that I need for the flight I am headed off to fly. It requires a bit more thinking to make sure I also include any alternates I may require, but this still reduces my paper burn.

Sectionals are needed in the airplane, and I still end up buying one every six months, but now there are several online services that combine the ease of Google maps with aviation Sectionals, and throw in the current weather to boot! Next, I need satellite based TCP/IP for my laptop, or airplane panel mount display, to allow me to use these resources real time in the cockpit. Can I get connexion in my GA aircraft?

Wednesday, May 31, 2006

Is it Just me?

Lately I have been taking multi-engine flight lessons. Mostly this is about thinking faster and learning to manage the more complicated systems that come along with having two engines. But there is a huge focus on how the airplane works if one of the engines stops running. The essence of it is the running engine creates more thrust than the dead engine (duh!), and that since the engines are not aligned with the center of the airplane, the thrust becomes asymmetric, and attempts to rotate the airplane around the dead engine. This asymmetric thrust can be countered by aerodynamic forces, as long as there is enough airflow over the rudder.

This point is important due to a simple statistical fact: Private pilots (not airliners or corporate jet pilots) are more likely to kill themselves per hour flown in a multi-engine airplane than a single engine airplane. The reason for this appears to be mismanagement of airspeed once an engine is lost, and the resulting loss of directional control. The popular wisecrack is that the second engine is on the airplane to get you to the scene of the accident.

Anyway, multi-engine aircraft tend to be larger, heavier, and fly faster, so to manage the extra energy that comes with the added speed and mass, you have to be a think further ahead of the airplane, and the controls are a bit more truck-like down near landing, turning an unprepared landing into an arm-wrestling match.

This had my arrivals to the runway seeming more like we were shot down than landing. My patient and persistent instructor has been coaching me through this rough patch. Last night he cleared off his schedule so I could get in some extra time with him. The bulk of the problem seems to due to my lack of reliance on the trim. Getting ahead of the landing and getting more trim to reduce backpressure on the yoke is making a pleasant improvement.

So I wanted to honor him by making sure I was available and ready to fly, which brings me to the real point of this story. I’ve wanted to set my truck up to able to tow trailers that are owned by my family. In particular, a trailer that is large enough to carry my Kubota tractor and has optional side boards for hauling less “neat” loads, such as dirt or debris.

My truck has a hitch, and a small four-connector plug on the back, which runs lights and turn signals – but nothing more. I’ve been trying to add a heavy-duty connector, which will support trailer brakes as well.

Since a standard pickup truck does not have air hoses for running airbrakes like on semi-trucks, they use a varying electrical current to energize electric magnets that engage the brakes. Over the years there have been different systems to manage the electrical current, but the current system is to install a device that electronically measures changes in momentum, and then uses that to derive a braking force to be applied to the trailer. These small boxes mount on the dashboard of the truck and connect in to the wiring harness that runs to the back of the truck.

My truck came with this harness pre-installed; putting in the electric brake unit was simple. The harness on the other end was also preinstalled (thus the existing four-connector plug), but the extra wires were capped off waiting for the seven-connector plug to be installed.

The standard seven-connector plug has a center post with six flat connectors arranged so they look like they form a circle around the center. Kind of like this:

/ o \ AsciiArt Strikes again!
\ _ /

These connectors are the standard connector found on most every pickup-truck that is used to tow campers or utility trailers. Except ones my dad made. I often miss my dad who died in 1998, but in this case, I do not miss his penchant for using the most heavy-duty thing he could find. Dad discovered the connectors on semi-trucks were very similar but used round connectors instead, providing more secure connections. If they were good enough for truckers they must be better, and that’s what Dad wanted.

Of course there was no standard connection arrangement for these (remember semis use airbrakes instead of electrical brakes?) so Dad invented his own pin-out for his application. Somewhere along the line a standard connection was established, but Dad never retrofitted his trucks or trailers to be compliant. After all, he was the only one towing them, right?

When I bought the brake unit at Advanced Toys for Trucks, I also bought a seven-way connector and a bracket to mount it on my truck. But the connector was not the one Dad used, and the bracket was to be bolted to the underside of my bumper did not extend down far enough to get past the chrome cover on the bumper. So now I had the wrong connector, and the wrong bracket. Great.

Back to Advance Toys for Trucks where they have the right connector, but they think it is odd that I want one (just shut up and sell me what I want, and take my money). But not the right bracket.

Later I was out in the neighborhood of Bickford, the dealer that sold me my truck (for the most part, I respect these guys), and I noticed that many of the used trucks there had both the seven-way and four-way connectors. So I ordered a bracket like that and the parts guy said, “this must be the one, it is the only one they list.”

But the one that showed up was the wrong one.

This morning before time to go flying, I wanted to get the right bracket. I went to a Ford dealer closer to my house to try to get the different part. There I was told that no such part existed, and that I should try a specialty trailer store. The specialty store told me they could fabricate one for $90 an hour, plus material. Heck, I can make one myself for that price; I am unemployed with lots of time after all. But as I am getting back in my car, I notice the truck next to mine has the bracket on it that I am looking for, and it was clearly made by Ford to fit on the truck bumper.

That set me on a mission. Back to Bickford, this bracket clearly exists. I march back up to the parts counter, and tell them again what I am looking for, and present them with the bracket that was wrong. I explain to the parts guy that there is a whole row of used trucks out on their lot that has the bracket I want, and he looks at me like I have two heads. I explain that I will gladly walk him out to the eight acres of trucks outside to show him the bracket, but he asserts that he is the only guy working the counter and cannot leave, but if I tell him what year the truck is he can try to find it.

The bracket is on 1999, 2000, 2001, 2002, 2003, and 2004 trucks. This is pretty clear that it is a standard part. Back to the parts guy, where he says “Oh. I have one of those in stock.” ARRRRRG!

So on my third trip to the store, one to place the order, one to pick it up, and one to get the right one that was there all along and pay the restocking fee, I got my bracket. Why, oh why, does this have to be so hard?

But I made it to my flying lesson on time, and we had a very successful outing. Chuck failed the engine on me a couple of times; the weirdest one was as I was turning to land.

When I got home, It took me about 15 minutes re-drill the bracket to accept the new connector and mount it to my truck, and then run over to my mom’s house to pick up the trailer. So now I have the trailer at my house!

Tuesday, March 28, 2006

Dave Asks "Why?"

In response to a post Dave made a while back.

Bear with me. In the novel Piercing the Darkness, one of the main characters, Sally, realizes that she is attempting to navigate her life based on a allegorical “map” which has no landmarks, no borders, no prominent terrain features, no paths, nor roads.

Using this map, she is unable to determine her location. She is unable to tell if she is on the right path, near the good, or near the bad. In fact she is unable to determine which direction she is headed or if her current location is even represented by the map.

The allegory relates directly to the question you ask. Many people are bothered by the vagaries of relativism, or even the breadth of moral acceptance offered by liberalism, leaving them in the same predicament as Sally above, not knowing where they are and if they are headed the direction they want to go.

Fundamentalism offers them a moral map that has boundaries, landmarks, and directions. Whether you agree with it or not it creates a structure in which to live, providing guidance to the unguided. I believe the attraction to fundamentalism is the attraction to knowing where you stand and where you are headed.

Sunday, February 19, 2006

A Tale of Two Tech Supports

Coming from the computer hardware and software industry, I know problems occur. What separates companies is how they respond to these problems. Here’s my recent experience with The Good, The Bad, and The Ugly. The latter two being the same.

The Good.

Shortly after I deployed a new SBS server at my job, I arrived Friday morning to hear it squealing – there was an alarm was going off inside of it. This is the main server that runs most all of my companies business (a drawback to SBS) and it was still running, so I did not want to shut it down. I spent enough time with it to realize that one of the drives in the SATA RAID-5 set had failed. Since the remaining 3 drives could continue to function, I left it alone until the weekend when I could shut it down and try to further diagnose and attempt to correct the problem.

On Sunday evening I got the machine shutdown and torn apart to the point where I was pretty confident that I knew the drive had failed. So I called Dell. Dreading what I would have to go through on the weekend to get help, I cringed as I dialed the number.

What I got was a wonderful surprise. The tech rep that answered the phone asked how he could help. I explained the situation to him. I expected him to request me to run some new diagnostic, or rerun some old ones. Instead he said, "Would you like me to send a technician out with the new drive?"

Excuse me? That was it? You trust me, and accept that it is broken, and are now willing to replace it, and send someone out to fix it? I had purchased no special warrantee, or service contract, and granted it was only a couple months after the server had been installed, but I was impressed.

Tuesday morning UPS showed up with my new hard drive, and shortly after that, the server was running normally again with a full RAID-5 compliment. Dell Rocks.

The Bad.

End of last year I bought an iPod shuffle. I had a specific use in mind for it. I needed something my kids could use to play some CD’s but I did not want the CD to get damaged, and the shuffle has limited knobs and buttons to break, so I figured it would be a good match. At then end of it's first battery charge, it stopped working. I plugged it in to the USB port to recharge.

I also opened iTunes, which of course had a software update. I figured if I was going to let the iPod charge, I had plenty of time to update the software. Stupid. The computer was unable to recognize the iPod.

I thought it may have been due to the software upgrade, therefore I uninstalled the update and restored the original. No joy.

Then things got really bad. My wife has an old Win2k pro machine. Thinking that maybe it required a fresh install, I loaded the original software on her machine. It NEVER restarted. Not in normal boot up, not in safe mode. Nothing. Dead. Zilch.

I reloaded it with a fresh version of XP (and installed a zippy new hard drive / 29160 controller combo!) but still not able to locate the iPod. I'm pretty much convinced the iPod is dead.

The Ugly.

I go into the store at 1:30 Saturday. I go to talk to the "genius" on duty. But I’ll need a reservation, which is available at 2:45. I’ve got the 2 youngest kids with me, and I know a four year old is not going to do well in the computer store for an hour and a half. So I go straight to the register for an exchange. Here I am told to talk to Erica out on the floor who will reload it. Apparently my attempt to reload it on a Windows machine was not valid. The reload had to be done from an iBook. Erica plugs it into her machine and says, "It’s broken"

I know that.

"You have to talk to a genius."

Why? I want to return this one.

"You can’t return it, it has been more than two weeks."

Ok, return is the wrong word. I want to exchange it.

"To exchange it you have to talk to a genius."

Why? Won’t they just tell me it is broken and exchange it?

"Probably. Make an appointment for 2:45 OK?"

No. It is not OK. What genius thought of this? Can't you just help me?

"No I cannot. That’s the way it works. OK?"

Still not OK. I know it is broke, you know it is broke, the genius will say it is broke, and at 2:50 I'll walk out with an exchange. Why wait an hour and a quarter to help me. This is stupid. Can I leave it with you and come back on another day to get the new one?

"No, we cannot be responsible for stuff you leave here. If you want the exchange, you have to talk to the genius, OK?"

STILL NOT OK! But apparently there is no other reasonable option. I'll be back a 2:45.

I left the store with the broken iPod. Wandered around the mall for an hour bought the kids a pretzel, and came back at 2:45 to meet with genius Jessie. He plugged the iPod into his iBook, watched it for about 30 seconds and said, "It’s broken."

Thanks genius.

"I'll get you a new one."

At 2:55 I left the store for the last time with my iPod. If I never have to go into an Apple store again, it will be too soon. Apple Sucks.

Notice that in the first case, it took five days to get the problem fixed. three were wasted by me, and two were in shipping, but it took less than a minute to get the support rep to help me. The second was fixed in two days. One wasted by me. and it took an hour and a half to get a support rep that could help me. Two broken parts, one easy fix. One stupid fix.

Friday, February 03, 2006

The latest of my deliverables at Regal Air.

As many of you know, I have been working at Regal Air, at Paine Field in Everett WA. The great thing about this gig is that it is three miles from my house, I get to hang out with my airplane, have lunch with my flying buddies, and work on new ratings. As a result, I am well into my certified flight instructor license, building time towards a multi-engine license, and am current to fly in instrument conditions.

At the same time, I get to work on computers and write some code. Two things I consider myself pretty good at. I've achieved quite a bit from install and deployment of SBS 2003, to providing wireless access to customers while keeping our corporate environment separate, to enabling online scheduling of aircraft and instructors, to the upgrade and installation of several new workstations.

But today marks my latest achievement -- well not just mine, there have been a couple of other people working on it with me. Please click on over to and take a look at what we have to offer. And if you find something you like, I'll make sure is gets shipped out to you.

Balance and perspective are important

Dave nails another one.

Unfortunately this research shows the reasons why living in Seattle will make you liberal, and living in Colorado Springs will make you conservative. Extremism and the resulting biases are environmental.

I was thinking about this in the context of the hullabaloo (is that a word?) over intelligent design and evolution. By going to court to effectively silence the ID crowds, the evolution theorists are creating their own legally enforced "deliberation with like-minded peers." It occurred to me earlier that the way to silence or to counter a false science is not to censor one side, but rather exposure of both sides to what can be known. We didn't get past "the earth is flat," "tomatoes are poison," and "waltzing causes plague" by censoring people and calling them names, but rather by opening up society to more information.

But having the information available is not all it takes. Much like the book buying illustration shows, there is also research to show that the explosion of information sources deepens the divide as well. People who are leaning in one direction or the other gravitate toward information sources that reinforce their views, and shun those that counter their view.

I second Dave's conclusion. Find idiots, and talk to them! You will make the world a better place.