It was quite disturbing.
I was mowing the lawn and ran over a baby rabbit with the lawn mower. I didn't see it in the tallish grass and it didn't move as I approached.
Ironically, I probably saved the life of the same rabbit three weeks ago when I mowed the lawn and noticed 6-7 of them huddled in a depression in the lawn and moved them to a safer area of the yard.
It was still alive and squirming after I ran over it with the mower. I was struck with a deep sense of grief (seriously) and couldn't decide what to do. I was thinking maybe drown it or put it under my car tire and back over it and give it a quick death. But even that was painful to think about. My heart really sank for a minute there. I really couldn't imagine taking its life in any way, but at the same time, I knew that it probably wouldn't survive; a sense of panic washed over me.
Luckily, my mom was around. She says it was dead when she picked it up. But I suspect she killed it to end the suffering.
I really don't ever recall being in a situation like this before and I hope never to be again.
I love this reply from Jerry Brown, the mayor of Oakland, in Time magazine this week:
It's a good thing. There is a certainty, a finality about it. I was very conscious that it was a vow, and I liked that. It's part of a higher order. In a frivolous age, it has a depth that is very welcome.
There's a great story about Gilbert Arenas, the Washington Wizard's guard, on CNNSI today (I'll paste because it's in a long-ish article):
It's a little before midnight when Wizards guard Gilbert Arenas enters the practice facility at Washington's Verizon Center. Tossing aside his gray sweat suit, he walks to the right baseline and puts up a shot. Swish. Collecting his own rebound he takes a step to his left and fires again. Swish. Slowly, he makes his way toward the foul line ... and stops shooting. Not yet, he says to himself. "I'm protesting the free throw line," says Arenas. "I'm disappointed in it. I want the free throw line to know, 'Hey, I'm not happy with you right now.'"
The sight of Arenas working out late is hardly unusual; after a wee-hours shooting session before Washington's playoff opener, he slept in the players' lounge. But now he has no games to prepare for. Two-plus weeks have passed since he went from deadeye to disappointment, his stellar first-round effort against the Cavaliers (34.0 points per game) undone by two missed free throws at the end of Game 6, setting up Damon Jones' series-winning corner jumper. Famously obsessive, the 24-year-old Arenas brooded about the foul shots into the night. "I just sat on my couch wondering what the hell just happened," he says. "Right then I knew I had to get back out there. You just can't let something like that linger."
Arenas was back in the gym the morning following the loss to Cleveland. And the day after that, and the next day and every day since, lifting weights and shooting jumpers -- but avoiding the free throw line until he feels ready for it. The Wizards' trainers have pleaded with Arenas to take a week off, as he had originally planned. Instead he has added laps in a nearby swimming pool to his regimen. Let your body recover, they cajoled. Instead he purchased a mountain bike to build his endurance on the 100-mile trails that wind through Washington.
I think we all have a little bit of this type of determination and passion within ourselves towards some goal that drives us, but sometimes, the vision of that goal and the drive to achieve it becomes muddied and diminished by the drudgery of crap that we have to wade through on a daily basis. Other times, we let little setbacks pull us off the path and we use these as excuses to say to ourselves, "hey, I can't do this".
The goal seems too distant and far too high to surmount. But in the end, the most valiant (and reasonable) effort that one can make is to put one's best towards achieving even a small portion of what one sets out to do.
I read a great reply by Shirin Ebadi, an Iranian human rights activist, in Time magazine a week ago; when asked about her favorite Koranic verse, she replied:
There is a verse that says God swears by time. Anything you gain in life, you pay for with your time. Time is the most important thing that has been given to man. This inspires me because it reminds me how short our time here is.
My friend Joe recently (finally) cancelled his subscription to World of Warcraft so that he could focus on his graduate studies more. I think sometimes we tend to forget just how short our mortal time is and as such, we tend to forget where our efforts are misplaced.
But look who's talking; I somewhat feel like a hypocrite since there are times when I'm terrible at managing my time and focusing my passion and drive to build awesome applications. I admit that it's been quite a while since I've felt that drive, but it's always been that way with me; it comes and goes from time to time...now if I could only reign in the essence of that feeling...
My eyes just teared up (no, really...I'm still kinda all emotional inside) watching the Nintendo E3 press conference intro video...wow, incredibly moving.
Update: Man, the tears keep coming...I dunno...such a fanboy I guess. Glorious day!
I'm not going to go into a detailed review with performance specs and what not (they're floating around the web already, no?), but just a quick take.
Purchased the notebook last week from Geared2Play (you can find details in this thread: http://forum.notebookreview.com/showthread.php?t=52014).
Price was right and service from G2P was good (wife said the man on the line (Eddie?) was friendly and knowledgeable).
Notebook was shipped Friday and I received it today in the afternoon with a great deal of anticipation.
First of all, the W5F is gorgeous in person. Incredibly sexy and attention grabbing. Coming from an S1A previosly, the W5F is an increase in weight (S1A was incredibly light, though). However, the weight is put to good use; whereas the S1A would creak under torsional stress, the W5F is solid. This is one of the most solid notebooks I've felt in a long time. No creaking; very rigid chasis.
The screen was a big surprise. The S1A really suffered in this respect as the screen was of very poor quality in terms of brightness and dot pitch. The W5F screen is beautiful. Incredibly vivid and sharp. The pictures came out a bit grainy due to the high ISO, but trust me, the screen is incredibly sharp and the contrast is excellent. I have to admit that the widescreen format makes it seem like the screen real estate is much larger than it actually is.
Haven't tried out many of the features yet as it will be wiped and OS reinstalled (wife needs to use it at work (elementary school) on a domain). The bluetooth worked out of the box with a bit of setup (hint: to get the mouse to connect, press and hold the reset button at the bottom). The mouse was a great addition, Bluetooth no less. Unlike the S1A, W5F does not ship with a carrying case. Not a big deal as we have tons at home
Setting up the network was a trial. It was pretty confusing (see the screenshots below) as I could get a signal and an IP from the router, but I couldn't access the network (no ping response from the router even). I had to fiddle around and reboot the machine to get it to work. The Intel software didn't help much (see screen).
(Some shots are grainy from high ISO)
Waited for UPS all day for this!
A box inside the box...
Yet another box....
Finally, the goods!
Size comparison to V3 Razr.
Not as slim as the S1A, but S1A had a modular CD-R/W drive.
Orange light is badass.
Keyboard has excellent texture and feedback. The touchpad texture is nice too (although it'll probably wear off after a while I assume).
Screen is very nice; much better than anticipated.
Very nice "soft" LED lights. The touchpad is actually textured (those little gray dots are bumps).
Incredibly vivid; the green shows the contrast much better.
Viewing angle is not bad! Much better than S1A and even better than my Chembook (Compal).
From the other side...
Vertical viewing angle suffers a bit, but acceptable.
Uh....what "Wireless On" option???
Widescreen looks good.
Open from the side.
All in all? Better than expected. I had high hopes (rightfully so for a $1700 notebook), but this notebook (so far) has exceeded them. Beautiful looks, snappy performance (primarily office usage and web browsing), decent weight, and great build quality.
Turns out that it requires "HTML Help 2 Compiler" or "VSHIK".
Having used the previous version of NDoc, I first turned to my VS2005 install CD to see if the help utilities were included but not installed by default (but I swear I looked through that thing when I installed it specifically for help utilities).
Not there :-S
Will report on how NDoc 2 is coming along...
Update: First run looks good. The HxS output format is still a bit confusing to me...will have to dig into that.
I was tired of working with tools that used XmlSchemaImporter and XmlCodeExporter (XSD.exe and WSCF) to generate code from XSD files. I'm sure I'm not the only one, as there are other developers that are awaiting a .Net 2.0 version of the tool as well.
Unfortunately, the execellent XsdObjectGen.exe tool hasn't been updated to take advantage of .Net 2.0 features like generics and partial classes (the most significant change).
After looking at Dingo a bit (already open source and using a templating method as well) and searching for other options, I came to the conclusion that the only sensible thing to do would be to fix the codebase for XsdObjectGen.exe and rewrite the code generation logic. Dingo was a bit too dense for its own good and there really weren't any other alternatives that I could find.
Took me about 45 minutes to get it up and running with generic lists. I emailed Dan Rogers to see if it would be acceptable to post this code and/or the compiled binaries and executable (same exact command line parameters). I know that the generated code refers to an EULA.doc, but I checked the installation directory and found no such document. So we'll see how that turns out...
So I've been working with Enterprise Library 2.0 (EL2) Logging Application Block recently and I've come across some quirks that are puzzling me.
First, I've been using log4net for most of my logging in the past. Recently, I've taken a look at NLog due to the fact that log4net is currently under "incubation" and has been inactive for a loooong time. The developers are still active as shown by the activity in the the mailing lists, but otherwise, the codebase has been kinda sitting there for quite some time (until recently) with no date on when it'll exit incubation.
Anyways, after checking out some performance numbers on EL2 vs. log4net, I was sold. Easy configuration via the configuration GUI, easy to understand, tons of documentation, and it's first party Microsoft (easy to get team members and managers to buy into it).
So here I am working with it today and setting up my test code to automatically regenerate the database before each run and my application code crashes when the logging fails (exception). I had mis-typed the path for one of my SQL files and the database wasn't created for the logging block, but still, I don't think that the right thing for EL2 to do is to allow that logging error to bubble up to the application code. With log4net, if the connection to the log database is broken, the AdoNetAppender will simply fail but not cause the rest of the application code to fail. [Update: can't reproduce it, but I know this is what cause the error since as soon as the database was there, it was happy, but it's running fine now even without a database. Ugh, totally puzzling...]
Weird design choice. I guess it's useful to know that your logging block is failing. But what the heck, isn't that why there are multiple listeners so that if one fails, you have a fallback (i.e. log all critical errors to database, event log, and flat file)?
Secondly, as I'm looking at the database scripts for creating the procedures and database tables for logging included with the EL2 source code, I'm puzzled by the design choice.
Take a look at the code for adding a category:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
CREATE PROCEDURE [dbo].[AddCategory] -- Add the parameters for the function here @CategoryName nvarchar(64), @LogID INT AS BEGIN SET NOCOUNT ON; DECLARE @CatID INT SELECT @CatID = CategoryID FROM Category WHERE CategoryName = @CategoryName IF @CatID IS NULL BEGIN INSERT INTO Category (CategoryName) VALUES(@CategoryName) SELECT @CatID = @@IDENTITY END EXEC InsertCategoryLog @CatID, @LogID RETURN @CatID END
First of all, why are the categories stored in a seperate table? My guess is that the designers wanted to save some space in the log entry row by taking out the category from the log entry??? I can't seem to come up with another good reason for it since it's not like the categories in the category table are associated with an application identifier (and they must all be unique category names). Profiler tells me that it requires at least 14 reads to write one entry into the log.
Not only that, the code to execute adding the category and adding the log entry are two seperate calls from the client since the WriteLog procedure doesn't receive category information. I'm going to go out on a limb and say that the only reason that EL2 logging is able to outperform log4net is due to .Net 2.0 related optimizations.
So I think it's back to log4net for me. I don't know how the rest of the team will take it, but it seems to be a better choice.
Well, my pineapple died recently.
Yes, that's right, pineapple. Sometime last year, I decided to start growing a pineapple plant after I picked up a weird interest in growing tropical plants (fruits in particular).
Why pineapples? Well, I found out from various sites online that the pineapple has an amazingly rich history. Plus, I love the taste of pineapple :-) Besides, I figured it would be easier to try to raise a potted plant as opposed to, say a mango tree.
So I found some directions online on how to grow a pineapple and started to grow one from the healthiest crown I could find.
At first I was a bit skeptical as to how hardy the plant would be after reading the directions. As it turns out, though, pineapples are amazingly hardy with regards to water and temperatures. The plant survived sub-70 degree weather in my townhouse and office during the winter and wasn't any worse for wear. But alas, it was not hardy enough for sub-50 degree temps. I recently moved and since the weather was getting nicer, I started to keep the pineapple outside. A couple of nights ago, I forgot to bring it inside only to wake up in the morning to find frost (!!!) on my car window. Frost == dead pineapple :-S
It lived for over a year; not bad. Quite an attractive plant, too. I started to grow two more yesterday; we'll see how these two go.
On an unrelated note, I'm starting to suffer with "only" 1GB of RAM on my notebook (unfortunately, the max it can accept). With VS.Net 2005 and ReSharper 2.0b running on a small project, it's taking up roughly 350 MB of memory. To complicate matters, all of the 2005 apps (VS, SQL Management Studio, etc.) are such resource hogs, that there is noticeable lag when I use any of them. I've had to shut down SQL Server for the most part (unless I really need it) and a lot of other services as well.
Merom can't come soon enough...
Came across a great blog while looking for images of praying mantids.