It looks like he's not only realized that he needs one, he's actively complaining about Steve Jobs not giving him one.
Okay, maybe it's not that funny. Too late. I'm clicking "Publish."
I've had little time to blog and read blogs recently. I've found myself skimming entry titles quickly and skipping past the ones that are either (1) stupid or (2) uniformative. If you're using a cute title rather than one which summarizes your post, I'm unlikely to click and read it. You probably don't care, but I wanted to mention it.
Perhaps a reading of Microcontent guidelines is in order? I could have titled this post "RSS Stuff" and it would have been on-topic. But then you wouldn't have really known what the main theme of this post really was, would you? See what I mean? You'd have to read the post to figure out if you wanted to read the post. Time wasted.
Also...
I've installed the latest NNW beta. I can make it crash by attempting to refresh my bog info in the weblog editor window. Doh! Time for a new bug report. I was really hoping to use the category selection stuff for MoveableType.
UPDATE: Obviously that advice only applies to people who are writing for an audience and care about attacting their attention. But based on the feedback I've received, some folks thought I was expecting everyone do be smart about their titles. Riiiight. I'm not that dumb.
Not much to report. I headed down to Hollister today (after some schedule juggling) to fly. I had one of the 2-32s reserved for two hours. But it was foggy in the early AM so I waited until roughly 9am. I arrived just after 10am.
Drew went over my log book to verify that I had a 7 day solo sign-off and then called the tow pilot. In the meantime, I did the pre-flight checklist for glider 64E. We pulled the glider out near the runway, pulled out a coupe of runway lights, and chatted with the tow pilot.
In a few minutes I was on the runway and flying my first flight. All three flights were pretty uneventful. The weather was great. Clear, clam, and warm. The air above 1,000 feet was quite clear.
I released at roughly 5,000 feet on each flight and practiced a lot of low speed maneuvers, turns, and even attempted some thermaling. One one of the tows I practiced tow signals a bit too.
The most interesting part of each flight, of course was the landing. I found that the air started to get pretty bumpy below 800 feet, making my pattern a little sloppy. The good news is that my landings are improving. I touched down very close to the centerline at a reasonable place and stopped quickly without control problems.
It was a nice quiet day of flying. While nothing terribly noteworthy happened, the flights helped to get me used to flying alone and helped to build my confidence. I'll surely do this many more times in the coming weeks.
I hate it when crap like this happens.
A few months ago, I built a new server (with hardware from ASA Computers, highly recommended--I own three of their boxes) to serve as a backup/spare for family.zawodny.com (the machine that hosts my blog and about 40 domains). The new machine was called friends.zawodny.com and had similar but slightly newer hardware (1GHz CPU, 512MB RAM, 2 80GB Maxtor disks in a RAID-1 setup).
Well, yesterday things went all bad. One of the disks appears to have died (or is dying). Several services died, including SSH, so I couldn't get in. Luckily it sits in a WCNet rack.
So I called to see what they could do. Couldn't get a console login. Damn. The only other option is to reboot. So we tried that. It didn't come up.
To make a long story short, the machine has two IDE cables. Each is the primary (master) and has one of the drives on it. However, after fiddling around, we determined that it won't boot from either one. This really sucks.
With one of the drives, it does the "01 01 01 01 01 ..." at bootup. With the other, it boots to "LI" and stops.
The reason this really bothers me is that I tested all the failure modes before I shipped it off to get racked. I could have sworn that is should still be working--unless both disks happened to magically die at the same time.
Now I either need to pul the spare 30GB disk off my shelf, build an OS and ship it out. Or I need to get the whole machine shipped back here. I have time for neither right now.
Anyway, the lesson is simple. Next time around I'll just spend the extra bucks and get a 3Ware controller and be done with it.
Damn you, Murphy! This couldn't have happned to the machine that is just a few miles away from me in California? Noooo. It had to be one of the machines I have in Ohio.
So now I know why the ATM just sort of looked at me funny when I attempted to deposit a check from Brandt the other day.
Damn Microsoft "security."
Ugh.
January 28, 2003 (The INTERNET). The KDE Project today announced the immediate availability of KDE 3.1, a major feature upgrade to the third generation of the most advanced and powerful free desktop for Linux and other UNIXes. KDE 3.1 ships with a basic desktop, an integrated development environment and seventeen other packages (PIM, administration, network, edutainment, utilities, multimedia, games, artwork, web development and more). KDE's award-winning tools and applications are available in 47 languages.
Every once in a while, I run across a Perl module that scares me a little. The most recent one is X11::Protocol and friends.
That's right boys and girls! Protocl-level X11 programming in Perl.
/me smacks forehead
I'm not sure where she got this list, but Kasia sent me some condom horoscopes. Since I'm a Gemini, here's mine:
Geminis are known for their versatility, intellect and communications skills. Accordingly, Gemini condoms accommodate a variety of sexual positions and combinations. Gemini condoms are sold in multi-packs and come with a special audio chip. Naturally, they're available through mail order. Frequently, Gemini condoms sell two for the price of one. They always come in special pop up dispensers so that you don't have to work too hard. Gemini is the sign of the twins and Gemini condoms come in twin packs and are the preferred model for double headers. When you need to do it more than once, you need Gemini condoms.
Heh. How amusing. Perhaps I should post the whole list? Well, if she doesn't... maybe I will. Or I could just Google for the original source and link to it. But I'm feeling lazy, so I leave it as an excercise for the reader.
A friend of mine recently suggested that I might like Ani DiFranco's music. So I got a copy of her first CD, Ani DiFranco and am listening to it now. My friend was right, it's not bad. I'll probably have more to say after I've heard it a few times.
Anway, I was reading the back cover and ran across this: unauthorized duplication, while sometimes necessary, is never as good as the real thing.
Excellent. I like that attitude and the message it conveys.
On an unrelated note, I had fun flying today.
I headed down to Hollister this morning for another 2-hour training session with Jim. I wasn't sure what he'd want to do for my first post-solo instructional flight. He suggested we do two high (~4,000 foot) flights. On the first one, I'd practice aerotow signals during tow. Once off tow, I'd cover the altimeter, practice some steep (60 degree) turns, and perform a no-altimeter landing on runway 31. On the second flight, I'd fly the low tow position until just before the release. Then I'd cover the altimeter, practice some deep stalls (45 and 60 degrees nose up), practice unusual altitudes, and perform a no-altimeter RIGHT pattern and landing on runway 31.
The weather was quite nice. It was warming quickly and there was little wind (as usual). I asked Jim if we'd take off from runway 24 or 31. He left it up to me, so we took off from 24. I was already quite used to flying from 31 and hadn't taken off on 24 in a few weeks. So I figured it'd be good to get back in practice. Plus, it meant we didn't have to push the glider as far.
The takeoff went well. For the first time, there was no ground fog, so I got a very good view of the fields on the other side the hill at the end of runway 24. That's good to see in case I ever need to abort a takeoff and land in a field off the runway.
After we got up a couple thousand feet, Jim took the controls and demonstrated the slow down (yaw the glider) and speed up (rock the wings) tow signals. The tow pilot picked up on them and did as instructed. Then I got to try them. It was a little odd intentionally moving the glider like that on tow, but it was pretty easy to control. After that was done, he demonstrated the signal which means "glider cannot release" (move to the side (usually left) and rock the wings). The trouble is that the tow plane thought it was a steering turn, so he began to turn. Then I tried the maneuver three or four times, but every time the tow plane thought it was a steering turn, so I had to keep aborting and getting back in formation. Grr.
The tow plane eventually gave us the "release now" signal (rocked his wings) which I mis-interpreted, so Jim popped the release. (Oops. Duh.) Once clear of the tow plane, I flew a few gentle circles to look for other traffic. The Jim took the controls to demonstrate a 60 degree banked 720 degree turn. We started aimed at Pocheco (sp?) peak, turned twice, and rolled out aimed at the peak again.
After his demonstration, I performed two or three 60 degree turns and then tried a couple of 45 degree turns too. Jim was happy with my turns and then asked me how high we were. Since the altimeter was covered, I took a semi-educated guess and said we were around 2,600 feet. He then asked me how we looked in relation to the airport. At that point I realized that we had better head back at best L/D speed so that we'd have enough altitude to fly a normal pattern and land.
As we got closer to the airport, I felt a little low but not too bad. So I made my pattern entry and radio call. After turning downwind from cross-wind, I looked down at the runway and noticed two things: first I noticed that our angle to the runway looked good, but the second thing I noticed was that we were lower than I first expected. It felt like we were around 800 feet instead of the normal 1,200 feet. So I kept that in mind as the pattern progressed.
As we flew along the downwind leg, I got a little worried and angled toward the runway just a bit. But when I go ready to turn base, I realized that we didn't have much space for a real base leg. So I made a "base to final" call on the radio and did just that. After we rolled out on final, I pulled the brakes and began a normal descent. We descended and landed pretty well.
My tow on the second flight was a bit more interesting. After I got 10 feet off the runway, I held my position while the tow plane climbed above me until I was in the low tow position. Then I climbed to match the tow plane's ascent rate and tried to hold that position for the duration of the tow.
Flying in low tow was odd. It wasn't as hard as I expected, but it certainly was different. Since I was looking up at the plane the whole time, I didn't see the horizon very much. That made it a bit harder to tell when my wings were level, so I found myself oscillating back and forth a few times.
After we got up a few thousand feet, Jim asked me to try a few steering turns for low tow. That worked pretty well. As soon as I began the maneuver, I realized (and said) that it was just like a wake boxing maneuver. Knowing that I had done it many times before made it that much easier.
We released at 4,700 feet and I performed a gentle 720 degree turn to clear the area around and below us in preparation for our stalls. Before the stalls, Jim reminded me to cover the altimeter again.
Jim took the controls to demonstrate what he called a 45 degree deep stall. He began by diving to pick up speed (roughly 80mph) and then pulled the nose up steadily, looking off the wings to the horizon for angular reference. (It seemed quite a bit steeper than 45 degrees to me, and he later agreed that it must have been.) The glider stalled, the nose went down, and he recovered.
Then he asked me to perform a 60 degree deep stall, so I did. I recovered with about 80mph of airspeed, which is just about right. Then he asked for two 45 degree deep stalls. Both went well.
With the stalls out of the way, we played a new game. Jim would take the controls, ask me to close my eyes, and fly the glider for a bit. Then he'd ask me to open my eyes and correct whatever he'd done. The first time he had me in a 45 degree banked turn with the nose a little high. I recovered just fine. The second time, he kept the wings level, pulled the nose high (roughly 30 or 40 degrees), and said "open your eyes and recover." I opened my eyes and saw blue sky so I put the nose forward right away to prevent the stall. Jim, said "good!" and I was happy.
I figured that'd be it for the flight, but he then asked me to close my eyes again and fly the glider. As soon as I heard this, I knew what he was up to. He wanted to demonstrate how a loss of visual references will always mess up your flying. He'd ask me to turn left, level out, turn right, and so on. Eventually he asked me to open my eyes. I did and was surprised to see the glider in a moderate right turn when I thought it was flying straight. We did that exercise one more time. After several turns, he told me to level the glider and I said, "I can't level the glider, because I can't even tell you which way it's turning." He chuckled and said, "okay, open your eyes." I did and found myself in another right turn..
Lesson learned. Stay the hell out of clouds or anything else that will kill visibility.
After that, I headed back toward the airport because we seemed to be close to pattern altitude. Again, the altimeter was covered. This time, I was to fly a RIGHT pattern and land on runway 31. I entered from a 45 degree to downwind and flew the pattern. This time I was at a more reasonable height, so didn't have to worry much about altitude. As I finished the pattern, we noticed a light cross-wind, so my landing was a little sloppy. I had not flown a cross-wind takeoff or landing yet.
Jim said the pattern and landing was good, considering that I had zero cross-wind experience. His time with me was up, but I could tell he really wanted me to fly a bit more to get some cross-wind practice. The wind picked up a bit more (to roughly 5 knots). He noticed that Russell had arrived and said he'd go see if Russell would fly some cross-wind takeoffs and landings with me while he (Jim) flew with his 10:30am student.
I waited in the glider and after a few minutes noticed Russell heading over. We chatted for a bit, he pulled the glider out to the runway, and hopped in the back seat. We flew three cross-wind takeoff and landings (left closed traffic). The first landing was sloppy as I got used to controlling the glider more on descent and slipping when necessary. The second one was better. Russell suggested I float for a while and land long. That game me a good feel for tracking the centerline with more margin for error. The third landing improved upon the first two. I put the glider into a slip without even realizing what I was doing. I just happened. After we got on the ground, Russell told me that he was amused when, 15 feet above the ground, I commented that there didn't seem to be much of a cross-wind anymore. Apparently, if I had looked at the yaw string, I'd have noticed that there was a cross-wind and that I was slipping into it--just as I should have been.
We wanted to fly one more time but the cross-wind all but died while we were waiting for the tow plane to come over for hookup. So I called it quits for the day.
I found out that Jim had signed me off for a 7-day solo window, so I reserved one of the 2-32s for a couple hours Thursday morning. I also signed up for 2 hours next Sunday with Jim and the ASK-21. He said that he'd like to take me up in the ASK-21 next time. I think we're going to try some steep turns with full stick back. And he probably also wants to give me some experience in a different glider too.
It was intersting to fly with a different instructor (Russell) for a while. Each instructor has a different style, focuses on different aspects of flights, and so on. Hopefully I'll get to do that again sometime.
For anyone who cares, I finally wrote up the details of Friday's flights--just like I do for all my flights, over in my flying blog.
Today began like any other. I got up early and headed down to Hollister. And for the first time I found myself worrying more about the weather the closer I got. Usually the weather in the Bay Area is nasty but it clears up after I get past the Coyote valley.
When I got up this morning, I told myself that I wouldn't solo today. I knew that I needed to work on my landings and that's exactly what I intended to do.
I arrived and sat down with Jim to go over whatever he had in mind. However, after looking over my progress in my log book and in the student checklist he keeps, he decided that we didn't have a lot to discuss. Unfortunately, the tow pilot had gone for fuel so we couldn't fly for a while. So we chatted about benign spirals a bit. We were also keeping an eye on the fog and clouds that were really close to the airport. It was a bit worrisome, but they seemed to be staying clear of the airport.
We got glider six four echo ready to fly and pulled out to runway 31. Jim left the first flight up to me, so we towed up to 2,800 feet where I released. For the first time, I had to release while turning. Once we got up over 1,000 feet, the clouds were close enough that the tow plane really couldn't fly in a straight line for more than a minute.
After release, I just performed a few shallow and medium banked turns to steer clear of the clouds and get comfortable. After dropping about 1,000 feet of altitude, I headed for my entry point, started my landing checklist, and so on.
My first landing wasn't too bad, but I didn't maintain my speed very well and wasn't on the centerline until we were 2 feet off the ground. But it was better than last Sunday.
For the next two flights we went to 2,200 feet and did the same--avoided clouds and flew around a bit. The landings were better. Other than not increasing my speed when I opened the air brakes, I was feeling a bit better about landings.
The clouds where getting a bit closer so Jim asked me to fly left closed traffic for the fourth flight. I informed the tow plane and we were off. We released a bit high, roughly 1,400 feet on downwind. I didn't compensate as soon as I should have when turning base, so I had to run with full brakes almost the whole way down on final. But I flared and landed as planned.
When Jim got out of the glider to hook up the tow rope for the next flight, he did something I didn't expect. He took the back seat cushions out with him and began to secure the belts. It took me a minute to actually look back there and realize what he was doing. When I did, he started explaining "without me in the back seat, the glider will fly a bit differently..."
That's when I knew it was time--my time to fly the glider on my own. I was a little nervous but less than I thought I'd be. Since we had just practiced four landings I felt reasonably confident that I could do another. He told me to fly another closed pattern. I called the tow plane and said, "I'd like left closed traffic again... and this will be a first solo." The tow pilot said something like, "Roger, closed left traffic. And I'll go easy on you. Good luck."
I went thru my checklist and closed the canopy. Jim ran my wing. I was in the air sooner than I expected. He was right. Without someone in the back, it took off a lot sooner. It also wanted to climb a bit faster, so I had to roll the trim all the way forward to keep from climbing past the tow plane. The clouds were even closer and the air was getting a little bumpy so I got tossed around a bit and we had to dodge a cloud or two. I released at 1,200 feet on downwind, announced my position in the pattern, and began my landing checklist, just as I'd always practiced.
The tow pilot exited the pattern and announce his intention to re-enter on a long downwind in a couple minutes. Before I knew it, I was announce my base leg, turning, and asking myself how the approach looked--just like Jim would if he was there. I pulled out the brakes, turned on final, and lined up on the runway. I surprised myself by lining up way better than when Jim is normally watching me. I kept my speed up all the way to my flare and landed.
Jim came over to the glider to shake my hand and congratulate me on my first solo. We chatted for a minute while the tow plane came back over. Jim suggest that I go once more and hooked me up. So I did.
My second solo flight was better. I started out with the trim all the way forward this time and I didn't climb so far. I didn't over-control like I did on the first flight. Again, I released at 1,200 on downwind and did just what I had done last time. The only problem was that I noticed I was only flying 60mph at 20 feet above the runway. I should have been doing 70. Since I didn't want to put the nose down farther while that low, I pushed the brakes in a bit and floated for a while.
After landing, Jim commented that I seemed to be coming in a little hot so I explained what I had done. Made sense to him.
We pulled the glider off the runway and back toward the glider tie down area. Then we had some paperwork to do. I got my picture taken (still need to scan it), shirt cut, and so on.
All in all, it was a very good day. By convincing myself I wasn't going to solo, I managed to keep my mind off screwing up and actually got to solo.
Yeay!
Woohoo!
After 4 short flights to practice my landings, my instructor signed me off to solo today. I flew two short flights alone in the training glider.
More later in my flying blog after I've had time to write it all up this evening.
(Wow, I really can't spell. First posted this as "Fist Solo Flights." That's something completely different, I'd bet...)
Tomorrow's goal is simple: Don't do anything that might cause my instructor to take the controls.
I will fly the glider and show my instructor that I really do know what I'm doing.
Well Kasia posted about pics of her California visit and conveniently posted the only picture that I'm in before all the others. I'll do her one better and post all the pics I took during our visit to Monterey including the one she's in. (Finding it is left as an exercise for the reader.)
My pictures are available here for your viewing pleasure. Pay special attention to the picture of the Lover's Point Inn. What a fugly building.
Apparently my 3 year old Kodak DC-290 took better pics than her newer DC-4800. Neither of us is sure why. Apparently that's what happens when it is set for long distance shots on a gloomy day.
Anyway, her pics are supposed to appear here soon.
This has come up a lot recently. I have several messages in my INBOX where people as asking for my secret recipe for properly building MySQL with LinuxThreads on FreeBSD.
I don't have much time right now to explain how I derived this, but here's the relevant piece of the build script I use at work when producing FreeBSD binaries from the MySQL source tree...
This assumes that you've installed the LinuxThreads package from the ports tree. Sorry for the poor formatting, but this should really be one big line:
CFLAGS='-O -pipe -march=pentiumpro -D__USE_UNIX98 \ -D_REENTRANT -D_THREAD_SAFE -DHAVE_BROKEN_REALPATH \ -I/usr/local/include/pthread/linuxthreads' CXX=cc \ CC=cc CXXFLAGS='-O -pipe -march=pentiumpro \ -D__USE_UNIX98 -D_REENTRANT -D_THREAD_SAFE \ -DHAVE_BROKEN_REALPATH -I/usr/local/include/pthread/linuxthreads \ -felide-constructors -fno-rtti -fno-exceptions' ./configure \ --with-mit-threads=no '--with-comment=Yahoo SMP' \ --enable-assembler --with-innodb \ '--with-named-thread-libs=-DHAVE_GLIBC2_STYLE_GETHOSTBYNAME_R \ -D_THREAD_SAFE -DHAVE_BROKEN_REALPATH \ -I/usr/local/include/pthread/linuxthreads -L/usr/local/lib \ -llthread -llgcc_r' --prefix=$PREFIX --enable-thread-safe-client \ --with-server-suffix='-Yahoo-SMP' --with-libwrap --with-raid \ --with-extra-charsets=complex
The HAVE_BROKEN_REALPATH probably isn't necessary anymore, since the configure script should catch that. But it can't hurt to leave in. That's probably true of several options above.
It's ugly, but It Works For Me(tm) on various versions of FreeBSD 4.x.
I do not have access to a FreeBSD 5.0 box yet, so don't ask me about that. I don't know. Really.
Good luck.
Alright, it's time to invoke the Lazy Web again...
If you watned to gather some statistics about the usage and growth of blogging and aggregators, where would you get 'em? I'm talking about the kind of numbers that make a slightly pointy haired boss think twice about ignoring the blog world.
I'd be grateful to anyone who has seen some hard or even semi-hard numbers that might be useful.
Paul DuBois, the author of several MySQL books, has a couple articles up on his web site that will prove helpful to anyone looking to get started with MySQL and Ruby programming. First is Using the Ruby MySQL Module (PDF) and second is Using the Ruby DBI Module (PDF).
Good stuff.
I was recently involved in a discussion at work about blogs and message boards. I argued that blogs would likely replace message boards (such as those hosted by Yahoo) to a large degree in the not-too-distant future. I'm not referring to e-mail based services like Yahoo! Groups (formerly eGroups), but more tradtional message boards.
Someone asked me how that would happen.
This was my response.
How is difficult to say. But given the amount and pace of innovation in various cross-blog threading systems (summarized on Ben Hammersley's blog: http://www.benhammersley.com/archives/003862.html) I'm convinced that it will happen
And when you compare the average quality of the discourse on moderately trafficked blogs with that of a random Y! message board, it's hard to argue with blogs winning in the short term.
I still see a future for large centralized message boards, but realistically the more sticky, in-depth, hardcore stuff will probably continue to reside in specialized forums and a growing number of weblogs.
This is going to be a very big year for blog growth.
What do you think? Am I on crack?
Update: One of my co-workers has posted his views on the topic. I see where jr's coming from but don't entriely agree. In my view, the current state of blogging isn't all that different from home pages back in 1997 or maybe 1998. As the technology improves (it will) and people realize what the benefits really are, we'll see blogging evolve in several directions. I happen to think this is one of them.
I'd say more, but I'm tired and still have lots to do... like getting that presentation ready for tomorrow.
In their Safari review, PC Magazine says:
Most Mac fans have been surfing with Microsoft Internet Explorer 5.x, and the Mac browser market has been in a rut. In addition, IE, although well-designed, is notoriously slow in rendering pages.
Are they smoking something? According to my referer logs IE isn't terribly popular on the Mac. A lot more folks are using Chimera or Mozilla. And what is this "rut" they're referring to? Chimera, IE, Mozilla, iCab, Opera, OmniWeb, and now Safari are all available for the Mac.
I finally got around to setting up something I've wanted for a long, long time. You see, I have a few co-located machines runnning Debian GNU/Linux that handle e-mail, DNS, web, MySQL, and other services for roughly 30 domains including zawodny.com. But the e-mail has always been a bit of a pain.
Why? Because I send roughly half of my mail using mutt while logged directly into one of those machines. That's fine. However, the other half of the time I'm using something like Apple's Mail.app on the TiBook. When that happens, I have to worry about relaying issues.
Traditionally, I've just used Exim's host_accept_relay option, setting it to a list of hosts that I'll be using:
host_accept_relay = 192.168.1.2
The problem with doing that is dynamic addresses. My cable modem address changes now and then. And sometimes I'll plug the TiBook into a foreign network. Then I need to figure out what the address is, if there's NAT involved, and so on. It's a pain. There's a better way.
Fortunately, Exim (my preferred mail server) has two features which combine to solve the problem. First, you have SMTP AUTH (RFC 2554), which is the standard way of mail clients authenticating with a mail server for sending messages. The second piece of the puzzle is SSL support, so the entire session can be encrypted--including the authentication (username and password).
My goal was to configure Exim so that it would allow any authenticated user to use the server as a mail relay no matter where they connect from. Then I'd require all autentication to happen over an encrypted channel so that I'd never have to worry about passwords being sniffed. It turns out that this is surprisingly easy to do.
By reading chapters 35, 36, and 38 in the Exim manual, it was quite easy.
First, I made sure to install the Debian exim-tls package as a replacement for the normal exim package. (TLS stands for "transport layer security. In this case, OpenSSL is providing the TLS.)
shell$ sudo apt-get install exim-tls
To setup the SMTP authentication, I added this bit to the end of my /etc/exim/exim.conf file:
# AUTH stuff here fixed_plain: driver = plaintext public_name = PLAIN server_condition = ${if and {{eq{$2}{user}}{eq{$3}{pass}}}{yes}{no}} server_set_id = $2
Where "user" is the username I'm going to use and "pass" is the password. It's possible to use PAM, MySQL, text files, LDAP, or any number of other ways to do this so you can support many users. Right now this is for just me, so this works. Someday I'll improve it and allow others to make use of it.
Then I followed the example instructions for creating an SSL certificate and key. I installed them as /etc/exim/exim.key and /etc/exim/exim.cert.
Lastly, I updated a few more settings in my Exim configuration and then restarted Exim:
# Only localhost can relay by default host_accept_relay = localhost # Anyone can relay if they auth first. And auth must happen over SSL. host_auth_accept_relay = * # SSL/TLS cert and key tls_certificate = /etc/exim/exim.cert tls_privatekey = /etc/exim/exim.key # Advertise TLS to anyone tls_advertise_hosts = * # Require auth over SSL only. auth_over_tls_hosts = *
Then I told Mail.app to use password authentication and to use SSL for outgoing mail. That's it. It just works. The same should work for Netscape, Outlook, Eudora, etc.
I'm getting sick of Pac Bell (or SBC, as they're now called). Back in 2001, I had phone problems that required a visit. Their web site wasn't terribly helpful.
Guess what. Nothing has changed. Nothing at all. I went to their web site, hoping that I could report my phone problem (since I obviously can't call them). Once I got to the right place, I saw this.
WTF?! Why is it that I can inquire about a previously reported problem on their site, but I cannot report a new problem? This makes absolutely no sense to me. This feels soooo 1999.
It's a good thing I have a cell phone. I called them. I have to stay home from work tomorrow morning and wait for the repair tech to visit.
Screw SBC. Again.
Oh, I have a feeling that when they shut off my DirectTV DSL service last week, they killed my phone line too. Based on what people have told me ("your phone has just been ringing when I call--since the middle of last week.") it's been dead since last Tuesday. That's the day the DSL disconnect happened. I suppose I could just wait until this Tuesday when they're scheduled to hook me up to the new DSL service, but screw that. I'll make the tech come out on Monday to fix the phone and then again on Tuesday to fix the DSL. They screwed up... not me.
I had some unexpected "excitement" during my last flight this morning. Not the good kind. The kind that makes you really happy your flight instructor is in the back seat.
Note to cockpit designers: Different controls should look and feel different.
Note to self: Pay attention and remember what your instructor has been telling you. People are less likely to die this way.
Anyway, read all about it in my flying blog if you're into that kind of thing or just want the details on what went wrong.
Today was supposed to be all about landing practice. Jim didn't say so, but the impression I have is that he'll solo me after he's happy with my landings. He wants to see me consistently come in at a good angle and speed, flare at the right spot, and touch down at the right speed while being on the centerline.
Let me tell you, that's easier said than done. I had four flights this morning. The first two were to 2,000 feet. We towed to the east and released. I circled around a bit and watched the tow plane head to the airport. By then I was at roughly 1,700 feet and entered the crosswind leg for runway 31. Jim didn't say much during those flights and told me he wouldn't be saying much. I think he just wants to see what I do all on my own. He's getting a feel for my decision making in the cockpit.
We spent a fair amount of time on the ground discussing rope break procedures again, short patterns, and landing with a tail wind.
The first landing was a little low and fast. I caught myself flying 80mph in the pattern rather than 70mph, and that made me a bit low. I touched down right at the beginning of the runway (on the 31 numbers) instead of starting my flare at that point. The second landing was a little better but still not good.
With all the rope break discussions, I really expected him to pull the rope at 200 feet again on one of the first two flights.
The next two flights were simple circuit or pattern-only tows. We'd fly up off runway 31, turn crosswind, and then downwind. Roughly half way thru the downwind leg, we'd be at 1,000 feet and I'd pop the release. I'd done this a few times before, so I didn't think it'd be a big deal. And the first flight went relatively well.
The second (and last flight for the day) was a different story entirely. I managed to fuck up in a big way. When it was time to release, I did the typical manuver: climb about 30-50 feet, dive back down to get slack in the rope, and level off. This all happens very quickly. After you're level and there's slack in the rope, you pull the release and wait for the rope to fall away.
The release knob in the glider is right in front of the pilot. It's literally a knob that's just about the size of a golf ball. However, in the SGS 2-32 trainers, there's also and identical knob on the left side of the cockpit. It controls the dive brakes (or spoilers).
You can see where this is going.
I pulled the wrong one.
This is very bad for so many reasons. What happend (very quickly) was that the glider slowed down a lot, causing the slack in the tow line to vanish. That made the towplane pull the glider faster, which caused the glider to climb. Now the moment I pulled the knob, I realized something was very wrong and glanced down to figure out what the hell had happened.
That was my big mistake: looking away from the tow plane and worrying about what was going on inside the cockpit. In an emergency situation, a pilot's first responsibility and focus is simple: fly the plane and keep it flying. I didn't. We've talked about it many times on the ground, but when things happen that quickly and you haven't yet developed the instinct, you screw up.
I'm glad this happened with Jim in the back seat. He knew exactly what to do. He pulled the release the moment he saw the tow plane vanish below us and he also slammed the control stick forward all the way to keep up flying. That sent some stuff flying in the cockpit because it was an abrupt negative-G descent. As soon as I realized what he had done, I got control of the glider back and flew the rest of the pattern and landing.
I never really thought much about the fact that the release knob and the knob for the brakes are identical. That's horrible. Controls in the cockpit that do very different things should look and feel different. Ask and usability expert about that one. Worse yet, in all the "I once had a student that did..." stories Jim has told me, he never mentioned this particular problem. However, he's had this happen many times in the past. That makes me feel a little better. Not much, but a little.
Anyway, that was a lesson I'll never forget. Needless to say, I have not flown solo yet. On Friday's morning, we'll pick up where we left off--probably flying some 2,000 foot tows and just trying to perfect my landings.
I know this is all part of learning, but that doesn't stop me from feeling really stupid for having done it.
From 0xDECAFBAD:
Years ago, when I first started using email, I did indeed do this with procmail and other arcane beasties. Then, I found myself cursing that I couldn't do cross-folder searches very easily. Also, the filters and folders started making less sense as their structure represented only one possible scheme for finding what I was looking for, and I was needing many possible kinds of schemes over time. So, eventually it all ended up in one pile, and searches became my way of finding things.
I abandoned bookmarks for Google by the same principle. Now, my bookmarks consist completely of bookmarklets and a few stray links to local on-disk pages like Python documentation. In fact, I wishing that I could create bookmark folders that are fed by Google API powered persistent searches.
So, now I'm looking balefully upon my filesystem.
<AOL>Me too!</AOL> I really, really suck at organizing. I'd rather just search based on content, attributes, etc.
I recent joined the Soaring Society of America (SSA) now that I'm flying again.
Today I got an "offer" in the mail from Aviation Week and Space Technology (no link, for obvious reason). They'd like me to subscribe at a supposedly discounted rate.
Coincidence? Unlikely.
I'm at work right now, helping to upgrade the MySQL master in Finance from 3.23.xx to 4.0.9. All the slaves have been running 4.0.x for a while (currently 4.0.8) so it's about time we got the master updated.
This should be interesting...
Update: So far, so good. We're actually running 4.0.8 now on the master and all slaves.
This is excellent news:
Homer, Bart and the rest of The Simpsons gang will be sticking around the tube for a while as Fox announced Friday it has reupped the classic cartoon series for two more years. Dismissing talk that the show, now in its 14th season, has been played out, Fox's move guarantees the 'toon will run through an eye-popping 16th season and rack up at least 360 episodes.
I'm sure that my Tivo will take care of the rest. :-)
I'm having trobule posting blog entries. It seems that api.google.com has been having troubles for much of the night. So I'll just queue things up and try later. Grr.
I'd take the Google related stuff out of my templates, but the moment I do Google will fix the problem anyway.
Damn you, Murphy.
I'm not sure what the magic formula for innovation is. I've read books about it. Thought about it. Kept track of companies that seem to be good at it.
In an effort to assist everyone else who's been trying to figure out the secret, I offer tips for helping your employees to stay clear of innovation:
1. Explain to your employees that times are tough so innovation must go on the back burner.
2. Further explain that there's no reason to despair--a high-level executive will be spending a lot of his time working on an innovation plan for the company (whatever that means).
3. Let a lot of time pass and say nothing about it. Pretend that things are just fine.
4. In the meantime, do nothing to alter the company's fundamental cultural and organizational problems--you know, the ones that have been in the way of an open an innovative busniess the whole time.
5. When asked about the mysterious "innovation plan" at an all-company meeting, explain that the executive is still working on it. Really! He is! Divulge no more.
There you have it. Five easy steps to sucking the innovative life out of employees who used to care about that sort of thing.
This is just too damned funny. Maybe it's because I've known Derek for a while, or maybe because of how pathetic it makes AOL look. You really must read it.
I'm still laughing several minutes later. I'd have just hung up and called my credit card company.
I spent about 2.5 hours last night taking my pre-solo test and then another 2 hours reading regulations. It was a 70 question, take-home test that covers a whole bunch of the stuff that I need to know before HGC and the FAA will let me fly alone. It took longer than I expected but it was quite comprehensive. And I didn't need to lookup many of the answers.
This morning, I went to Hollister to meet with Jim so we could go over the test and related stuff. We spent 2 hours going over the test and discussing some of the FARs and, of course Jim quizzed me a lot.
The experience was very useful. We got to talk about more detailed rope break stuff, speed to fly in sink, and some other topics that we hadn't focused on very much. It served to reinforce what I already know and also point out what I need to focus some more time and energy on.
It was odd to spend a few hours at the airport and not fly. And the weather was soooo nice.
I'm scheduled to fly on Sunday morning and again the following Friday. Hopefully the weather is good and I do everything right. If so, there's a very good chance Jim will solo me. :-)
Well, it's official. Last Friday I switched to NetNewsWire Lite even after I managed to break it. I've found that AmpehtaDesk is a memory hog and I simply don't have the time to deal with upgrading, making sure that AmphetaOutlines works on it, and the various other things I'd like done.
Don't get me wrong, AmphetaDesk is great. I've written about it before and even patched it. It's good stuff. Really. I'll probably tinker with it again after the book is done.
Two good things have happened as a result of the switch. First, I don't read blogs at work anymore. That means I get more work done. Secondly, when I do read blogs I spend less time doing it. NNW, as a desktop app, is simply way faster than AmphetaDesk running on one of my co-located servers. It's the age-old fat client vs. thin client argument.
I just saw Brent's NetNewsWire Pro 1.0b9 announcement and read thru the changelog. He fixed my bug. Woohoo! Thanks Brent. (I actually spent an hour of Friday manually "importing" all 155 RSS feeds from my old subscriptions file.)
I'll be a paying customer for the release vesrsion of NNW Pro when it's out. It's a great product. In the meantime, I'll be sure to exercise the latest NNW Pro beta.
Sometime soon I'll have to describe the blog organization I'm using in NNW.
So I've had a 20GB Apple iPod for a couple weeks now. I've been using it on and off enough that I feel like I can offer my thoughts on the device.
On the plus side:
On the negative side:
The bottom line: It's a great device. I'll be giving my old Diamond Nomad Jukebox (6GB) to Kasia when she visits California next week. To paraphrase Ferris Beuller: if you have the means, I highly recommend it.
Hmm.
The Search Engine Watch Awards recognize outstanding achievements in web searching. The voting period for the 2002 awards has now opened, and we encourage you to cast your votes.
I wonder who's gonna win and who will not.
Oh, wait. No I don't.
Browsing Java documentation on Sun's Java site is incredibly frustrating because the site doesn't seem to support a basic operation I want: search.
Consider this example. I performed a Google search for java.util.Map.Entry and eneded up on this page. It has a lot of useful information on it. But now that I'm there, I was to search for something. I guess I have to go back to Google and start over. There's no search box on the page. WTF?!
Contrast this with any reference page on php.net, like this one (chosen at random). It's far more search friendly. There's a box right at the top of the page and a drop down box that helps me crontrol what I'm searching.
php.net docs: good.
Sun Java Docs: less good.
Oh, it's not just PHP. The MySQL folks get it too. Here's a randomly selected example from their docs. Notice the search box.
There's an excellent article on IBM DeveloperWorks that presents a performance analysis of the 2.4 and 2.5 kernel's hyperthreading support.
Good stuff. I look forward to the enhanced scheduler in 2.5. Perhaps it's one of the few reasons we need to consider using Linux rather than FreeBSD for MySQL at work. MySQL, of course, is heavily multi-threaded.
Hmm.
I've just made a strange discovery.
Apparently, it's a lot easier for me to write drafts for the book after I've had a drink or two. I wrote more in the last hour than I did on all of Saturday.
Perhaps this has something to do with the way alcohol affects the mind's inhibitions? After a few drinks it's often easier to talk to people because you're not as worried about how they'll react. You're not censoring yourself.
One of the things that slows me down most when writing (other than trying to get started at all) is the constant nagging in my mind about whether I'm saying what I really need to say, if I'm covering things in enough depth and so on.
Hmm. I wonder how this will all play out.
I'm terribly impressed with some of the folks at Apple. They get the power of weblogs in a very important way. Over in Dave Hyatt's weblog, he's been responding to various other weblog entries about their new Safari browser. For example, here he responds to one of Mark's complaints.
As a member of the Safari team, he introduced himself a few days ago on his weblog and has done an excellent job of responding and keeping the community informed.
I hope that other tech companies understand how important and revolutionary this is. Imagine, product team members actually communicating directly with the public rather than filtered thru the typical PR organizations and layers of administrative crapy.
I've been hesitant to do much of this in my weblog, not being sure how my employer would react. In the few cases I have, the response has been immensely positive. I'm sure that Dave has found this to be the case too.
John has noticed this too it seems. Yeah, he gets it.
I really hope this spreads. The world needs more of this.
I seem to have relapsed.
A few years ago, I had a habit of laying down "for a few minutes" only to wake up many hours later. While it felt very good, the experience was quite disruptive to a normal sleep/work cycle. Until recently, it hasn't been much of a problem.
But yesterday I managed to screw up a little. And today... Well, let's just say that I didn't go to bed until 3:30am. I woke up around 11am and had breakfast. Then I decided to brush up on some reading (FAA airspace regulations) while laying on my bed (mistake). I probably read for 30 minutes or so before I fell back asleep--and woke up at 4pm.
Ugh.
Getting back on track is going to be a challenge. If past experience is any guide, I can either do so gracefully over the course of 4-6 days, or I can sacrifice one day and do it a bit more abruptly.
You think I'd have learned by now. Don't lay back down when you've only been awake for a few hours. It almost always leads to something like this.
For several days last week, the cavernous convention halls here became battlefields in the copyright wars. On balance, the entertainment cartel didn't seem to be doing very well.
The iTrip is a cool iPod add-on.
I should have attended the bloggers dinner in SF last night. I didn't do nearly as much as I expected. That would have been more fun, I suspect.
Ben Hammersley says:
In what must be the fastest, most in-depth, distributed product review in history, Apple's new browser, Safari is being bashed about all over the blogosphere.
I think Apple has done a good job with Safari. It's a first public beta and I've only seen two big complaints: (1) the lack of tabs, and (2) the various CSS bugs that Mark has been finding. Let's give Apple some credit. They're building a cool iBrowser.
This is too cool. One of the nearby links in my GeoURL neighborhood is for the free WiFi at the Dana Street Roasting Company.
If I was a coffee drinker, I'd be all over that. As a blogger, I think that's great. What a neat application.
I've added a GeoURL meta tag to my blog's main index page and added it to their database. You can click the little green image to see who else is geographically near me.
What a fascinating way to literally find my blog neighbors.
Update: Coo! There is even an RSS feed for blogs near me.
Blogspace never ceases to amaze me.
I've decided to finally take advantage of the fact that I live near wine country. I got a bottle of Merlot from St. Supery (one of my favorite vineyards to visit in Napa) at the store a week or so ago. I've been having a glass with dinner at night. It's pretty good. They make a truely excellent desert wine too.
Yesterday I picked up a Cabernet Sauvingnon from Hess Vineyards. Amusingly, I drank a glass with a hamburger tonight. I don't know if that makes me a bad person, but I'm enjoying tasting a variety of wines. I like this one too.
It just occurred to me that the cell phone plan I've had for the last 2 years from Sprint is complete overkill for me. I've been paying roughly $35/month for way more minutes than I'd ever use. So I headed over to their web site to see what I could do about changing it. I was looking for a plan that gave me just a few minutes per month and charged me a lot more per minute for going over--figuring that I won't go over very often.
The selections on their web site were't impressive. The cheapest plan available was $30/month for way less stuff that I have now. So I called them up. And wouldn't ya know it. When you get them on the phone, there are several other unadvertised and much cheaper options available.
My new plan is $20/month and provides about 180 minutes per month. That's still more than I need, but at almost half the price it's much better. I almost went with the $10/month "vacation plan" they offer. It comes with 50 minutes per month and you pay $1/minute when you go over. That'd be perfect for me except that I cannot add on the paging service. And since I need some form of paging for work, it was best to just go with the $20 plan. I still get all the services their other plans have (loarge local calling area, voicemail, caller id, etc).
The best part is that there's no committment. Since I've been a Sprint customer for a while now (2 years or so), I can switch plans without any strings attached. If this one turns out to be too much, I could just ask work to get me a pager and pay $10/month for my cell. But I don't want to carry Yet Another Device.
That was time well spent.
As part of my personal switch and a desire to get a bit more organized (utilizing my Palm m105), I've been messing with Palm Desktop on the TiBook. It's actually a very nice piece of software, but I've been having sync problems. I'll update my TODO items on the Palm and then sync. None of the changes make it to the computer. So I add some calendar items on the TiBook and sync. None of them make it to the Palm.
Grr.
So I downloaded iSync and iCal from Apple and installed the iSync Palm conduit. Synced my iApps with the Palm. It worked on the first try. Changes seem to flow in both directions, as they should. This is most excellent. Not only do I have the ability to sync easily, I've added my iPod to the mix. This way I've covered if the Palm dies or the Mac dies or both. I'd just need to find another Mac somewhere.
Go Apple!
I stil need to keep the Palm Desktop around, of course. It knows how to completely backup the Palm.
Now, if only I can find a way to sync the phone book on my Motorol Timeport cell phone.
I took some time this afternoon to fill out the necessary paperwork and headed over to the FAA's San Jose Flight Standards District Office. Of course, I had to make a phone appointment because they keep the doors locked. You never know when a terrorist might walk in and try to fill out some paperwork. Or something like that.
Anyway, I met Matt (the FAA guy helping me out), he checked my ID and we headed upstairs. Once we got to the front desk, he checked my ID again and filled out a log book that said I was there, etc.
Once all the security bullshit was done, we went over the form and he gave it someone else to process. Meanwhile we chatted for a few minutes about gliders and stuff. Apparently the guy who was there before me was also a Hollister Gliding Club student there to get his certificate too.
All in all, I spent just about as much time on "security" as we did doing "real paperwork." But now I'm in possession of a piece of paper that says I can solo a glider when my instructor gives me permission to do so. It's valid for the next 2 years, but I really have no intention of going that long before I get a license.
Woohoo!
When I got out of the shower this morning, I was disappointed to find that it was raining outside. So I called down to Hollister to find out what the weather was like. Jim told me it looked flyable, so I headed down.
Along the way I noticed that the weather steadily improved as I approached Hollister. Once I got there, Jim and I spent a long time discussing spins and spiral dives. Most of the discussion was centered around spins. That was my first clue to what Jim had planned for me.
After discussing spins for quite a while, we prepared a glider 87R and then did something I've never done before: inspected parachutes. We probably spent 10 minutes or so discussing parachute usage and what to look for when inspecting one.
Before long, we pushed the glider out to the runway, put our parachutes on, and prepared for takeoff. The tow was uneventful and the air was relatively smooth. We aimed for some clouds that indicated wave lift but had difficulty finding anything sustainable. We flew around and above more clouds than I had ever been near in a glider. That alone was fun. We got off tow at 7,500 feet MSL near a mess of clouds and in weak lift.
I spent a few minutes circling, avoiding clouds, and watching the tow plane descend far enough to get back under the clouds and above the hills. Flying in circles allowed us to clear the air of any traffic near or below us. Once the tow plane was safely out of the way, Jim took the controls and demonstrated a spin.
The spin surprised me in many ways. The forces weren't dramatic, as I read. But I was impressed at what a stable maneuver it was. It was easy for me to count the revolutions. We spun four times before recovering.
After taking the controls back, I cleared the air and performed my first spin. It was interesting. My recovery was a bit slow. We hit 100mph pulling out of the dive, but it wasn't too bad. We spun four times.
My second spin was better. Again, I was able to count the revolutions. We spun three times before Jim asked me to recover. The second recovery was better. We only hit 90mph coming out of the dive. There was a very small cloud below us when the spin began, but it was above us when the recovery began. :-)
Jim wanted me to perform one more spin. So I dodged a few clouds and entered a spin to the right (the first two were left entry spins). He surprised me when he said "recover" after only one revolution. I recovered and we headed away from the hills. We were significantly lower (roughly 3,000 feet) at that point, so it was the smart thing to do.
Once out of the hills we had some altitude to play with, so Jim decided to demonstrate a maneuver we hadn't discussed. He rolled the glider into a steep 80 degree banked left turn. He kicked in a little extra left rudder and then pulled the stick all the way back. It was a spin entry from stalling steep turn. I didn't know what to expect, but I was very surprised by the maneuver. It was a dramatic demonstration of a less conventional spin entry.
Once we recovered from that Jim asked me to get us home. So I headed back toward the airport. There was a plane taking off, so I circled outside the pattern for a few hundred feet. Jim asked me to perform a no air-brake landing, so we entered the pattern a bit low (as we should have).
I made the necessary radio calls and flew a mostly normal pattern. I held off a bit on turning final. Once I did, I put the glider in a full forward slip and found out how much less effective the slip was compared to using air-brakes. I held the slip all the way until touchdown, making minor course corrections to stay on the centerline. Jim tells me I did a very good landing without air brakes. I was a little easier than I expected. The only difficult part was making the minor adjustments while holding the slip.
Back on the ground, we went over the flight a bit, did the necessary log book work, and so on. Then Jim presented me the the necessary forms to get a student pilot certificate. I guess I'm close enough to soloing that I need that little piece of paper.
We agreed to meet again next week to do ground preparation work. I have a lot of reading the FARs to get ready for next week. He also gave me a copy of the Hollister Gliding Club's Pre-Solo Test. Once I take (and pass) the test, complete some ground work, and make one more high altitude flight (spiral dive and unusual attitudes), I'll be ready to solo.
Wow. Spins were more fun and less stressful than I expected. And I'll be soloing soon. That should be a blast.
Well, while taking a break I decided to catch up on some blog reading. It seems that AmephetaDesk has freaked out. It uses hundreds of megabytes of RAM. So I fired up the latest version of NetNewsWire Lite to import my subscriptions. It fails. Well, it imports the first 33 but the other 90 or so are sliently discarded.
Grr.
Anyone know why? (Yes, I filed a bug reoprt.)
The file is here: http://jeremy.zawodny.com/tmp/bug.opml
This cracks me up.
I remember back in the mid-90s when Java first came out. I actually read the Java 1.0 language spec. The whole thing. It was cool. One of the folks who was telling me about it (just before I read the spec) endorsed it by saying "it's like a cleaner C++ with no pointers!" I've heard the "you don't make pointer mistakes in Java" bit a lot over the years.
Despite all that, I'm still able to convince Java to throw a java.lang.NullPointerException at me. Every time I get one (which is pretty often right now) I have to laugh just a bit because this is the a language without pointers.
Riiiiight.
Excellent. Another of my co-workers has caught the RSS bug. We chatted a bit about my experience in Y! Finance to help prepare him for the, uhm, "organizational challenges" he may face.
I hope it works out. I'm always looking for good airfares back to Ohio and points East.
Success! I understand a bit of the object/interface model I'm working with--at least enough to add some functionality and not have it blow up. It compiles and runs. I've sucessfully extended my first real Java code in a meaningful way.
I got a TrackBack ping that lead me to K's article about my and Java which I thought was interesting. (K is not to be confused with Kasia who has been called "K" on some occasions.)
Apparently the transition I'm going thru is expected--or at least not unusual. That's makes me feel a bit less dumb when I'm struggling with this stuff. The other reassuring experience is sitting down with the code architect and finding that his design and implementation now stumps him to a degree too--at least in a few places.
K recommends that I look at Eclipse (again) as an editor that will help me out. I may have to do that. A fair number of folks have suggested it.
The next part is what has me wondering out loud...
I'll venture to give yet another advice. When getting to design with Java, know your Anti Patterns. Patterns are important, but I've found most experienced developers already use them (even if they can't name them). Anti patterns, on the other hand, are a tar pit for even the most seasoned developer. And Java lends itself to grandious designs, full of anti-patterns.
Okay. I'm the first one to claim complete ignorance on the whole "design patterns" fad. I call it a fad because it seemed to come out of nowhere (as most fads do) and everyone was talking about it for a while. Now it's pretty quiet again. So whether or not it really is a fad, it seems like one to a person that never really paid any attention to it. (I just figured it was a lot of noise being generated by the C++/OO/XP crowd.)
I assumed that design patters was a formal way of teaching folks to design their stuff the right way. You know, "here's the way to implement a foo... and here's how you do a bar." Something one step (or level of abstraction) above STL or other popular component libraries.
But that's all me thinking out of my ass. Like I said, I never paid any attention. Why? I never saw a compelling reason to. I don't follow fads. And nobody ever presented a good "here's why you should learn this" argument. I just saw a lot of folks going after design patterns and getting all intellectual and impressed with themselves for being able to use a bunch of fancy new words for the things that probably weren't new at all.
And, well, they didn't teach "Patterns" in my computer science program. I wonder if they do now?
Anyway, now I find out there are Anti-Patterns. Okay, fair enough. They must be the opposite of Patterns. So I followed the link and read the page about Anti-Patterns.
It doesn't tell me anything. Well, maybe a little.
An AntiPattern is a pattern that tells how to go from a problem to a bad solution. (Contrast to an AmeliorationPattern, which is a pattern that tells how to go from a bad solution to a good solution.)
A good AntiPattern also tells you why the bad solution looks attractive (e.g. it actually works in some narrow context), why it turns out to be bad, and what positive patterns are applicable in its stead.
But beyond that it begins to feel really academic in a hurry.
Okay. So it's a collection of "you think you want to do this, but it's actually bad... here's why" stories and rules. Fine. Once you've learned the right way, you get to learn the wrong way too.
K's advice, then, is easy after you've gut thru all the OO babble. Learn the wrong ways to do things so that you can spot them. You shouldn't be re-inventing the same mistakes that others have.
That seems like good advice to me.
Ignorance is bliss. But not always. Sometimes it just makes you feel like you might have missed something important in all the hype.
So I've been working to understand the Java code I need to extend at work. And it's quite a bit of culture shock after being a Perl Hacker for the last... well, a long time. I've done Perl in some capacity now for over nine years.
Java folks love abstraction. Thanks to Kasia's blog entry on Interfaces, a bit of chatting with her, and reading up a bit, I now get interfaces. They're Java's answer to multiple inheritance. The provide a contract of sorts between various objects. And object that implements interface foo must provide (at least) all the methods defined in the interface. It's enforced at the language level. Very good.
The downside is that folks can get carried away, building so much structure that the real workings of a system end up obscured and hidden behind so many layers of indirection and abstraction. It makes my head hurt a bit. I've spent a bit of time manually drawing out some inheritance diagrams (anyone have a free tool to automate it) based on reading the code and associate javadocs.
I suspect that once I get my head wrapped around all the interfaces, I'll be far more productive and have a real understanding of the system's design.
The other thing I've noticed is that Java folks are big in infrastructure and re-usability. Really big. I'm starting to wonder if I'll ever see code that looks like someone wrote it to actually get some work done--without much regard for the random person who might want to sub-class it someday, maybe.
Don't get me wrong. This isn't bad, but it sure is different. It takes some getting used to. Instead of learning a new language and gradually putting it use, I'm forced to also learn several large frameworks along the way. It's a bit of a double hit. I feel like I've been thrust into a foreign country where I need to learn the language and function as a useful member of society--once with a lot of unwritten and complex rules that I just need to figure out.
Hey, I could have written about Apple's various MacWorld announcements but it seems like blogspace has that covered very well without me today.
I've been playing around a bit with MySQL 4.1's spatial indexes as I write chapter three (Indexes) for the book. Here's a quick demonstration in which I add three points to a table and then ask MySQL which points fall within the bounds of a couple polygons.
Before you play with this, you might want to read the OpenGIS spec. Since the MySQL docs don't yet cover this stuff, that's one of the better references.
First, create the table with a small blob field to contain the spatial data:
mysql> create table map_test -> ( -> name varchar(100) not null primary key, -> loc tinyblob, -> spatial index(loc) -> ); Query OK, 0 rows affected (0.00 sec)
And then add some points:
mysql> insert into map_test values ('One Two', point(1,2)); Query OK, 1 row affected (0.00 sec) mysql> insert into map_test values ('Two Two', point(2,2)); Query OK, 1 row affected (0.00 sec) mysql> insert into map_test values ('Two One', point(2,1)); Query OK, 1 row affected (0.00 sec)
Then ensure that it looks right in the table:
mysql> select name, AsText(loc) from map_test; +---------+-------------+ | name | AsText(loc) | +---------+-------------+ | One Two | POINT(1 2) | | Two Two | POINT(2 2) | | Two One | POINT(2 1) | +---------+-------------+ 3 rows in set (0.00 sec)
Finally, ask MySQL which points fall within a couple of polygons. (I'll omit the "mysql>" prompt to make sure things aren't too wide.)
SELECT name FROM map_test WHERE Contains(GeomFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0))'), loc) = 1; +---------+ | name | +---------+ | One Two | | Two Two | | Two One | +---------+ 3 rows in set (0.00 sec) SELECT name, AsText(loc) FROM map_test WHERE Contains(GeomFromText('POLYGON((0 0, 0 1, 1 1, 2 0, 0 0))'), loc) = 1; +---------+-------------+ | name | AsText(loc) | +---------+-------------+ | Two One | POINT(2 1) | +---------+-------------+ 1 row in set (0.00 sec)
Pretty cool, huh? That's really just the beginning. You can do much more impressive stuff with spatial indexes.
Wow. A Google search for "open source blog" ranks me pretty high. I'm not sure what to think of that. Makes you wonder how much they rank the incoming links compared to the page titles and h1/h2/h3 tags.
If nothing else, yeay for referer logs! :-)
In unrelated news, Sprnt's ever-flakey network is making it difficult to check my mail this morning. Grr.
As of today, I'm spending more time on my book and less time on almost everything else--including my blog.
I've set an agressive schedule for completing it and need to spend many hours each day on it from now until mid-April. If I do, it should be on shelves in time for the annual Open Source Convention.
I should really update the negelcted web site for the book, too. Maybe I could use MT to make it blog-like. Hmm.
It'll feel so good to be done with it. But there's a lot to get done yet.
Ray sent me a link to this craigslist posting.
The situation is simple. I am an intellectual property lawyer, 27, 5'8", slim, blue eyes, of an Irish/Italian origins. This morning I realized that my boyfriend of two years is having an affair. I want to dump him ASAP. The problem is we have a company event in NYC next week and I don't to show up just by myself. I need someone extremely smart and extremely charming to replace the bastard. We leave on Jan 8, return on Jan 12. We stay at the W. separate beds. All expenses covered.
Heh.
Update: It's a good thing I copied the text. The posting is already gone.
A funny thing happened today. During my first lesson this morning, my instructor demonstrated a spiral dive and recovery. Now there are a few important details I need to cover before you can appreciate what happened and why it was funny (to me, at least).
It was chilly out. I noticed the temperature was roughly 40 degrees when I arrived at the airport. So I'm guessing it was maybe 45 by the time we took off. Of course, in normal conditions, we loose about 3.5 degrees for every 1,000 feet we climb. So it's safe to say that it was chilly at 3,500 feet too. And since it was chilly, my nose was a bit, well... runny. Not a lot. Just a bit.
A spiral dive, unlike a spin, results in the glider's nose pointing farther and farther down all the while we're picking up speed quickly and the stick is all the way back. To recover, you need to roll the glider's wings back into a level position and then pull out of the resulting dive. During that pull-out, you can easily pull 3 to 4 Gs of force.
Now those of you who have put 2 and 2 together can already guess what happened...
When my instructor demonstrated the spiral dive and recovery, I was a bit unprepared for the G forces in the recovery. And, as you'll recall, my nose was a little runny.
Let's just say that as we pulled out of the drive, I felt something spring from my nose as if it was trying to get away in a hurry. It took a second for me to realize what happened, but when I did it amused the hell out of me for a minute or so.
Mental Note: Don't perform high-G maneuvers with a runny nose.
Sorry. I just had to share. Couldn't think of much else to blog today. There will be some new Java stuff next week, though. So stay tuned and I promise not to talk about buggers or anything. :-)
Today was flights 37-41. The first one was to 5,000 feet. The tow was smooth. I boxed the wake twice and it wasn't difficult at all. After release, Jim demonstrated stalling in a slip and in a skid. I got to try both. I was surprised by the speed we picked up during recovery. But that was nothing compared to the sprial dive demonstration. We pulled 3 or 3.5 Gs coming out of the spiral dive. It got to my stomach a bit. I'm sure it'll be easier next week when I have to perform the manuver. Before I knew it, we were at 2,000 feet and it was time to land. After finding out that Jim wanted me on runway 31 instead of 24 (which is what he told me on the ground), I got in the pattern and landed just fine. Since we were in N7531 again, he had to do the radio calls. Hopefully we'll fly 64E or 87R next week. I like them more anyway.
The second flight was to 1,000 feet. We released downwind in the pattern and I jumped right into to my landing checklist. (My release was a bit low, but not horrible.) The landing was good--I touched down just where I wanted. The other thing I noticed was that I'm sub-consciously picking up landmarks for my pattern on 31. I line up with a major road on downwind, turn near the big warehouse-looking building, and so on.
The third filght was my frist simulated rope break. Jim pulled the release right as we hit 200 feet. I put the nose down, performed a 180 degree left turn (45 degree bank, just as we discussed) and landed back on runway 13. I was surprised and how easy the manuver was. I expected the rope break to be more stressful. Granted, we had just talked about it and I knew he was giong to do it, but still.
The fourth flight was another simulated rope break. Jim didn't tell me what he had planned. When I asked (just before takeoff) his response was something like "well, stay with the tow plane as long as you can..." so I was suspicious. He pulled the release right about the time we reached 15 feet of altitude. The towplane hadn't even taken off yet. So I pulled the airbrakes, put the nose down, and landed on what remained of runway 31. My first "foreward rope break" went pretty well.
The fifth and final flight was another 200 foot rope break. Well, it was closer to 250 feet. Jim wanted it to be surprise and it almost was. I expected to be towing up a few thousand feet or maybe a rope break at 600 feet. But just before takeoff, the tow pilot made his radio call and I heard him say that he was going to tow us to 200 feet and we'd be returning on runway 13. Oops. He spoiled the surprise. The good news is that he break went just fine. Jim asked me to aim for a particular point farther down the runway, and I hit it pretty well.
All in all, it was a fun day. The rope breaks helped to build my confidence for low-altitude problems. And the slipping and skidding stalls were interesting. I just wish the spiral dive hadn't gotten to me so much. I just need a bit more work on my touchdown attitude. But I'm feeling really good with pattern and landings now.
I flew with Jim again today. Not a lot to say. The air was very calm. My first flight to 5,000 feet was very good. The tow was smooth and easy. I boxed the wake without trouble. We mostly practiced stalls (straight and turning) and then some forward slips.
The next two flights were to 2,500 feet so that I could practice turning slips and then get some pattern and langing practice. Other than one slight "bounce" things went reasonable well on the landings. Everything is good except for the actual touchdown. A little more practice needed there.
I flew in the only SGS 2-32 I hadn't flown in yet: N7531. It has a shorter stick and tighter trim control. And it had no battery, so Jim did all the radio work from his handheld.
I got up again tomorrow morning. I belive we're going to practice skids and what causes spins. Hopefully I'll fly in 87R or 64E where I can do the radio work during landings.
I found the article "What Should I Do With My Life?" in a recent issue of Fast Company rather compelling. The beginning of a new year seems like a good time to mention it. Others may be thinking the same things I have been.
I'm going to quote from it heavily because I think it says a lot of things that need to be said. But I'm not going to go into all the things that have been bothering me lately. That'll be later...
I'm convinced that business success in the future starts with the question, What should I do with my life? Yes, that's right. The most obvious and universal question on our plates as human beings is the most urgent and pragmatic approach to sustainable success in our organizations. People don't succeed by migrating to a "hot" industry ( one word: dotcom ) or by adopting a particular career-guiding mantra ( remember "horizontal careers"? ). They thrive by focusing on the question of who they really are -- and connecting that to work that they truly love ( and, in so doing, unleashing a productive and creative power that they never imagined ). Companies don't grow because they represent a particular sector or adopt the latest management approach. They win because they engage the hearts and minds of individuals who are dedicated to answering that life question.
All I can say about that is that it just seems right. Who would really argue with it? Not me.
The article goes on to mention something that I've noticed far too much of: people who clearly aren't living (and working) up to their potential for various reasons...
There are far too many smart, educated, talented people operating at quarter speed, unsure of their place in the world, contributing far too little to the productive engine of modern civilization. There are far too many people who look like they have their act together but have yet to make an impact. You know who you are. It comes down to a simple gut check: You either love what you do or you don't. Period.
But worse yet, I worry that I'm one of them. The notion of "operating at quarter speed" seem to describe me pretty well a lot of the time. That goes hand-in-hand with the next observation.
Those who are lit by that passion are the object of envy among their peers and the subject of intense curiosity. They are the source of good ideas. They make the extra effort. They demonstrate the commitment. They are the ones who, day by day, will rescue this drifting ship. And they will be rewarded. With money, sure, and responsibility, undoubtedly. But with something even better too: the kind of satisfaction that comes with knowing your place in the world. We are sitting on a huge potential boom in productivity -- if we could just get the square pegs out of the round holes.
It's really been a while since I felt compelled to make the extra effort. I'm sure sure if that's the result of changes in the last year or so. Maybe it's just frustration resulting from the organizational supidity and crap I've had to deal with recently.
Throughout the 1990s, my basic philosophy was this: Work=Boring, but Work+Speed+Risk=Cool. Speed and risk transformed the experience into something so stimulating, so exciting, so intense, that we began to believe that those qualities defined "good work." Now, betrayed by the reality of economic uncertainty and global instability, we're casting about for what really matters when it comes to work.
I can totally see where the Work+Speed+Risk=Cool equation comes from. I've been thinking it during much of my [short] working career so far.
On the issue of figuring out what job, role, or career is really the right one...
Your calling isn't something you inherently "know," some kind of destiny. Far from it. Almost all of the people I interviewed found their calling after great diffculty. They had made mistakes before getting it right. For instance, the catfish farmer used to be an investment banker, the truck driver had been an entertainment lawyer, a chef had been an academic, and the police officer was a Harvard MBA. Everyone discovered latent talents that weren't in their skill sets at age 25.
And...
Most of us don't get epiphanies. We only get a whisper -- a faint urge. That's it. That's the call. It's up to you to do the work of discovery, to connect it to an answer. Of course, there's never a single right answer. At some point, it feels right enough that you choose, and the energy formerly spent casting about is now devoted to making your choice fruitful.
That bothers me. A lot. I've always felt a little smarter than the pack when it came to selecting a career. Why? Back in college, I never changed my major. In fact, I've been reasonably sure of what I wanted to do for a long, long time. I just never considered anything else. I liked what I was doing.
Recently, however, some things have caused that to change. Some of my older passions and ideas have resurfaced and they're making me question what I'm doing now. (More on that some other time...)
So, why do we end up in the wrong situations?
The funny thing is that most people have good instincts about where they belong but make poor choices and waste productive years on the wrong work. Why we do this cuts to the heart of the question, What should I do with my life? These wrong turns hinge on a small number of basic assumptions that have ruled our working lives, career choices, and ambitions for the better part of two decades.
The first one, of course, is money:
It turns out that having the financial independence to walk away rarely triggers people to do just that. The reality is, making money is such hard work that it changes you. It takes twice as long as anyone plans for. It requires more sacrifices than anyone expects. You become so emotionally invested in that world -- and psychologically adapted to it -- that you don't really want to ditch it.
Yeah, I really want to get a house again. But it's hard. It's going to require a lot of time and sacrifice. Everytime I've considered doing something else (meaning: change jobs), I worry about the house dream. How will I ever afford a house if I take a lower paying job? Crap like that.
And on the value systems involved, something I hadn't considered...
One of the most common mistakes is not recognizing how these value systems will shape you. People think that they can insulate themselves, that they're different. They're not. The relevant question in looking at a job is not What will I do? but Who will I become? What belief system will you adopt, and what will take on heightened importance in your life? Because once you're rooted in a particular system -- whether it's medicine, New York City, Microsoft, or a startup -- it's often agonizingly difficult to unravel yourself from its values, practices, and rewards. Your money is good anywhere, but respect and status are only a local currency. They get heavily discounted when taken elsewhere. If you're successful at the wrong thing, the mix of praise and opportunity can lock you in forever.
Very good point: respect and status are only a local currency. I had never thought about it in those terms, but I always knew it. ("If I change jobs, how do I convince my new employer that I'm really good at [this] or [that]? This is all taken for granted now because people know me.")
Anyway, I enjoyed the article and feel like it's talking to me. Maybe it'll say something to you too.