Monday, October 24, 2005
Dayton-Cincinnati Code Camp Registration Live!!
Great Online Sci-Fi Resource
Baen books, home of books by incredible authors like Kieth Laumer, Larry Niven, Jerry Pournelle, David Drake, and 15 or 20 other wonderful scribes, has a passle of their classic books available online for FREE.
Check out their library here, and be sure to read Eric Flint’s thoughts about online piracy and why Baen has put so many great titles up. The draconian fools in the recording industry ought to pay attention to Flint’s thoughts that “ Any cure which relies on tighter regulation of the market — especially the kind of extreme measures being advocated by some people — is far worse than the disease.” Maybe they’d stop prosecuting 12 year olds for downloading music and open up a better economic model. And maybe monkeys will fly out …
Nevermind.
In any case, check out the library. They’ve also got downloads for various readers, which makes it even better!
I’d run across this some years ago, but had forgotten about it until I saw a reference on Instapundit today.
Thursday, October 20, 2005
Political Blogging: The Coburn Anti-Pork Amendment
Now Playing: Dire Straits -- Alchemy
I'm hoping Mark Knopfler's amazing guitar can somewhat calm my rage.More on NHibernate and Nullables
NHibernate has their v1.0 release out. Incorporating that with James’s Nullables2 (for support of native .NET 2.0 C# Nullable types) is a snap. Download the 1.0 release files, drop the DLLs from the project’s bin directory into NHibernate.Nullables2\NHibernate Files\ and rebuild the Nullables2 solution. Move the NHibernate.Nullables2.dll and the regular NHibernate DLLs wherever you need them in your projects.
By the way, to get green lights in NUnit, you’ll need to reference Nullables2 in both the project where you’re doing your data access and the project holding your unit tests. Otherwise you’ll end up with NHibernate.MappingException errors stating that “could not interpret type” with the specific NullableType called out.
Now Playing: Off Kilter — Celtic Armadillo. Five guys in combat boots and kilts mix bagpipes, drums, bass, guitar and keyboards. We saw these guys at Disney World’s Epcot center where they put on a terrific show. They do plenty of traditional Irish music, but they’ve got some contemporary things too. Alive is an absolutely killer track. The only downer on this CD is that it seems like a pretty amaturish production — there are a couple tracks which run over each other. That really pisses me off because I had to shell out $20 for the disk. Bah!
Wednesday, October 19, 2005
NHibernate Associations
Looking for good documentation in NHibernate’s help files on associations (relationships between objects) ? Here’s what you’ll find in the 1.0.0.0 NHibernate Documentation file, right after the text that says “Association mappings are often the most difficult thing to get right. In this section we'll go through the canonical cases one by one, starting with unidirectional mappings…”
Nice, huh? Check out the Hibernate dox, even though Hibernate’s a Java project. The concepts seem to be pretty clear and I’m hoping I’ll be able to translate things to NHibernate without too much trouble.
Now Playing: The Corrs — In Blue. I was looking for Celtic pop. This may be a little too dance music-ish for me, but the harmonies seem nice.
NHibernate Tricks: Locating the Mapping Files
The various examples I’ve seen of NHibernate all had the mapping files (*.hbm.xml) in the same location as the business entities (BEs) they map.
That kind of sucks for trying to abstract out your data access. Storage-specific stuff shouldn’t be co-located with your BEs, it should be in a storage-specific project. Like a Data Access Layer project.
No problem. Create or move your map files in your DAL project. Make sure the map files are embedded resources, not content. (Check the “Build Action” field in the file’s properties.) Ensure the DAL project references NHibernate.dll — but you figured that out already since you’d have had beaucoup problemos with your “using” statements, so why am I beating a dead horse?
Now mod the constructor of the class you’re using to do all your data access, adding in a statement to add the DAL assembly to NHibernate’s Configuration. Here’s what I’ve got for my PersonTypeDA class:
public PersonTypeDA()
{
Configuration cfg = new Configuration();
cfg.AddAssembly("nUGSoft.DAL");
factory = cfg.BuildSessionFactory();
}
You’re now telling NHibernate to look at the current assembly where you’ve embedded the mapping files for your BEs. The single statement cfg.AddAssembly("nUGSoft.DAL"); loads all maps in the assembly, so you don’t need to worry about trying to keep straight which BEs are referencing which others are referencing which others are referencing which others… Nevermind. You get the picture.
Poof! Everything’s happy, and you’ve got your persistence-specific stuff separated out where it belongs.
Shiny.
Now Playing: Neutral Milk Hotel — In the Aeroplane Over The Sea. Nifty stuff with lots of very different musical instruments (flugelhorns!), odd lyrics. Lots of fun. I told James it was kind of like goat meat. Interesting once, but I’m not sure how often I’ll eat it. Wait, that was either Rage Against The Machine or System of a Down. Nevermind. But it was a cool analogy all the same.
Tuesday, October 18, 2005
Rhapsody: Terrific Music Service!
I’ve been griping about all the money James has been costing me via his music recommendations. Now he’s gone and made a recco which will not only save me significant bucks, but allows me to check out scads music I haven’t had the opportunity to before: Rhapsody online music.
Rhapsody’s “Unlimited” service costs $10 per month, but gives you unlimited browsing of their huge online library — something like over 1 million songs. I think their UI is a bit sucky, and it’s a performance hog on my older, slower PC (1.3Ghz, 512MB RAM), but the service itself is incredible.
In the three days since I signed up I’ve been scattered all over the music dartboard: Springsteen’s Born to Run and The Rising, The Who’s Quadrophenia and The Kids Are Alright, Dengue Fever (Cambodian rock), The Clash’s Give ‘em Enough Rope, Knickelback, Sigur Ros, The Kinks, Drive By Truckers, Coldplay, and about 20 other interesting things I can’t remember. (One of my gripes is the lack of a useful history indicator in Rhapsody’s UI.)
This really is great stuff, because for $10 per month I’m able to chase down all kinds of stuff I never would have looked at before.
The final drag is that they’ve got nada, zilch, zero Tubes in their library.
Philistines.
<disclaimer>I get no money or any comp from these folks. They’ve no clue who I am. I just like the service!</disclaimer>
Wednesday, October 12, 2005
Manly Man Blogging: Burley New Mower
Being a stay at home Dad who takes care of the vast majority of cooking, kid transportation, diapers, and laundry, I fight for every instance where I can assert (defend) my Male Role Modelness. Today is just such a glorious day.
I now have in my shed one of these beauties. It’s actually a used older model, but still basically the same masculinity-loaded piece of machinery. 9.5 horsepower motor. Enough noise to require ear protectors. (Which is a bummer, since I normally listen to my iPod while mowing.) A real gearbox with four forward and one reverse speeds.
It will also cut much higher than my soon to be retired mower. This is nice because I try to keep my lawn fairly long as part of my mostly-organic lawn program.
Best of all? A 33” cutting path via two, count ‘em, two blades. My lawn usually takes me 65 – 75 minutes to mow with the old mower, and I pushed that thing fast as a workout. Using my new toy today it took me 30 minutes. 30 friggin minutes! And that was with having to figure out how to efficiently get this monster around the flowerbeds and trees throughout the yard, plus the usual distractions of my daughter showing me how well she’s learning her cartwheels. (A distraction, but what a good one!)
There are a couple downsides to this. First, it’s a monster to get around corners and curves in the yard, but mowing the lawn’s one of the few regular exercise events I get, so that’s not a bad thing. Secondly, because it’s such a monster, I won’t be able to shovel off mowing to my kids until they’re a few years older than I was planning on. (Six isn’t too young for my daughter to use a mower, is it?)
Now Playing: Franz Ferdinand — Franz Ferdinand. Another great recommendation from James. He’s really starting to annoy me with his recommendations for music. I’m blowing much of my discretionary budget (fun money) on stuff he’s pointing me to, curse him.
NHibernate Update
Still slogging away at NHibernate, still learning many good lessons.
First off, start with a small data model. Get that working, then add in other related chunks. This will save you many headaches while you get NHibernate’s complex mapping properly created.
The project I’m working on has a moderately complex data model:
12 tables, 11 of which have various relationships. NHibernate requires that you have all dependent relationships mapped out before it will work properly. This means you can’t just wire up a few of these entities, say Person, PersonType, and PersonTypeLink, and press on. You need to get <bag> or <set> elements defined in your maps for all relationships, not just the ones you’re interested in.
I’m most of the way through getting all entities mapped; however, if I had to do it over again, I’d literally drop tables I wasn’t concerned with, get maps and tests running on a subset, then proceed with wiring in other related tables. For example, following on the group I listed above (Person, PersonType, and PersonTypeLink), I’d drop everything else, get maps and tests working on those three. Then I might add in Post and PostType, followed by Subscription, SubscriptionLink, and SubscriptionFormat. Next would come Location, Event, and Attendance. Then I’d have Newsletter as the last table — an easy one with no links as dessert.
In one sense, this is sort of what I’ve done. I went so far as to create another database and built in tables one by one with the appropriate references (but none of the “fluff” fields), then I used ObjectMapper to generate classes and NHibernate’s mapping XML. This let me check what I was getting from ObjectMapper when reverse-engineering my existing table and classes. (ObjectMapper calls that “syncronization.”)
Two more semi-major modifications have to happen to my business entities:
1) I have to add members to store other business entities for tracking relationships (one-to-many, many-to-many). NHibernate works with both a Parent and Child object at the same time, so it gets/sets them via a Property. I really didn’t want to add this weight to my business entities, plus this ties the entities somewhat to NHibernate’s concept of operations.
2) I have to implement GetHashCode() for all my business entities, or at least any entity based on a link table with composite IDs. NHibernate needs GetHashCode() for its various Dictionary and List functions. Implementing GetHashCode() is fraught with peril, and I’ll have to carefully think how to get this done correctly. (Read Wagner’s Effective C# for problems with GetHashCode().) I’m not looking forward to this because it’s a difficult piece of work and it looks like it’s a showstopper until I get it done right. Bother.
One of the most irritating things about NHibernate has been some less than clear error messages. I beat my head on the table for a few hours trying to figure out why a completely sane map file was generating schema errors telling me that the <id> element wasn’t a valid child of the <class> element, and that a <discriminator> element was expected. (Discriminator elements let NHibernate, well, discriminate between different types of an entity, such as when you’ve got a Person table which holds Professor and Student entities, but is keyed off of a PersonType field. See Justin Gehtland’s article on the ServerSide for details.) My Person table didn’t store different types of Person entities, it just referenced a link table to store that information — and I’d already mapped that table. Those schema errors finally cleared up when I got all inter-related tables mapped, so it wasn’t really a schema issue, it was one entity missing dependent relationships. Arrggghhh.
I like NHibernate’s concept, and I like the clarity of its use once you’re past the initial stages. Setup and knowledge building stinks, though. I’m nearly done with this mapping (finally!), and I’m looking forward to pressing on with getting some actual implementation done on my system.
Now Playing: The Killers — Hot Fuss. Nice stuff, funky sound, good beat. No clue what they’re singing half the time, though. Hopefully they’re not singing the praises of Howard Dean, Ann Coulter, or some similar idiot. <shudder>
Tuesday, October 11, 2005
SiteMeter Global Map: Cool Stuff
I use SiteMeter for stats on this blog. I’ve always joked that my blog’s read only my Mom and some guy in Pakistan who accidentally subscribed to my feed. SiteMeter’s statistics are a great way to prove/disprove that assertion.
One absolutely shiny thing about SiteMeter: their global map. The map shows you where in the world folks are hitting your site/blog/whatever from. The map below shows more folks than my Mom are indeed visiting my blog — unless Mom’s doing a Where In The World Is Matt Lauer or similar gig.
Clicking on any dot will bring up a page showing all kinds of cool info on who stopped by your site. You get referring URLs, browser specifics, lots of cool stuff.
SiteMeter’s basic stats (which I use) are free.
<disclaimer>I don’t get any bucks from SiteMeter. I just think their service is cool. Amazing what powerful stuff is available on the web for free.</disclaimer>
Now Playing: Screaming Future Axe Murderers — Xylophone and Pennywhistle Insanity. Good thing it’s nearly bedtime for my kids. Then this music will stop and I can relax with a cup of this and get some more work done on NHibernate.
Dayton-Cincy Code Camp
NHibernate Tools: ObjectMapper
I’ve been mostly asleep since Saturday evening trying to get over some grunge my son brought home from Sunday school daycare last week. Ugh. Thankfully I got mostly over it before my wife had to leave on her regular biz travels, so I’m semi-coherent and able to try and knock off some more things with NHibernate and the project I’m working on. (Dude, you’re not coherent when you’re in good health! — ed.)
James pointed me to ObjectMapper as a tool which might help me resolve some NHibernate mapping issues I’ve run into with many-to-many relationships. ObjectMapper gives you the power to do various reverse-engineering tasks: from database to model, from assembly to classes, from classes to tables. All of that, in either direction. Pretty slick.
ObjectMapper won’t let you work backwards from existing .NET 2.0 assemblies, but that’s not a show-stopper. I’ve been working from my existing database model, generating up to classes and then having ObjectMapper generate mapping files for NHibernate. One hitch to using NHibernate and ObjectMapper is that you need to get all the relationships done at once before you start using any access points. I’m working on a DB schema with 12 inter-related tables. (No, they don’t all tie to each other in a spaghetti-like mess!)
I think you can get around this by leaving out the <bag> or <set> elements you use to define inter-entity relationships; however, now I’m running into odd schema errors with <id> elements being out of place. I’ll blog on that solution once I figure it out.
NHibernate seems like a great thing, but it’s certainly a huge PITA to get up and running. Unclear documentation and rudimentary examples aren’t a big help.
Now Playing: Sheryl Crow — Steve McQueen. It’s only three songs, but Steve McQueen has a killer beat to it. I first heard this at a 3D remote control helicopter competition at the National Remote Control Modeler’s Museum in Muncie, IN. A female pilot fired up this music, launched her ‘copter, and did amazing tricks for about five minutes — with the ‘copter rarely climbing more than five or ten feet above the ground. I was there with my Dad and daughter, so this short disc brings back great memories.
Friday, October 07, 2005
More on NHibernate: Good Explanatory Article
NHibernate’s documentation, as politely as I can put it, leaves a lot to be desired. Maybe folks who are more smarter than I am can decypher the information, but I’m finding it nearly useless for figuring out how to get some functionality working.
Justin Gehtland wrote a great NHibernate article on TheServerSide.NET. Good diagrams, pretty clear explanations. This article cleared up the discriminator element’s function — the NHibernate dox were useless blabber. The discussion of one-to-many and many-to-one relationships is also good.
Now Playing: The Fabulous Thunderbirds — Walk That Walk, Talk That Talk. I really dig whatever label you want to put on this genre. Rockabilly, Texas Rock, Just Plain Good Tunes. I’ll count The Mavericks in this same arena, although their lyrics are usually just a couple short bits repeated over and over. In any case, the T-Birds are good stuff.
More on NUnit Config Files
Charlie Poole, the Master of All Things NUnit, gives the Real Truth on how NUnit finds config files for tests. Clear and concise. Read and understand it if you're using NUnit. His trick for checking whether or not you're reading config files is a great one.
Now Playing: Warren Zevon -- The Best of Warren Zevon: A Quiet Normal Life. Werewolves of London, Send Lawyers, Guns and Money, and Roland the Headless Thompson Gunner, all on one album. What more could you ask for?
Thursday, October 06, 2005
Byte Array Indexers and Properties
I ran into a neat problem this afternoon while trying to use a byte array indexer to set an array cell to a particular value via a business entity property. I say it was a “neat problem” because things didn’t work like I’d expected, but I was able to quickly figure out what the issue was. It would have been a “#@%">“#@%*&!!! problem” if the lightbulb wouldn’t have turned on quickly.
My biz entity has a byte array for storing photos, with a few checks on the setter to ensure we’re not trying to store too large an image:
private byte[] _photo = null;
public byte[] Photo
{ get { return _photo; } set
{ if (value != null)
{ if (value.Length > NS_MAX_IMAGE_SIZE)
{ throw new ArgumentOutOfRangeException("value", value, "Image size too large"); }
} //Clone array, not assign since Arrays are reference types
_photo = (byte[])value.Clone();
_isModified = true;
}
}
The “neat problem” popped up as I was writing a test to check the Equals() method when one of the two entities being compared had its Photo property as null. I create one BE with Photo as null, then set the other to a non-null by storing in a single byte:
right.Photo[0] = 0xF;
Well, that got me a NullException error, so I stepped through trying to figure out why the null checks in the property’s setter weren’t behaving as I expected. Stepping into the assignment above ( right.Photo[0] = 0xF; ) jumped me into the Property’s getter, not the setter.
‘Tis a puzzlement, to quote King Mongkut.
Wait. Slap forehead. I’m using an indexer to set a cell of the byte array. That means the statement needs to work on the actual byte array, so of course the getter is used to return the array before the value’s set. Duh.
Now I’m creating a new byte array with the appropriate value and using the property’s setter. Works much better and it was a “neat” problem to work through. (Quickly, thankfully!)
Now Playing: Guster — Lost and Gone Forever. Maybe even better than Keep it Together, an album which I love.
Wednesday, October 05, 2005
Setting up a Non-Profit Organization
We’re moving the Dayton .NET Developers Group to non-profit status to make it a bit more attractive for other organizations, individuals, and companies to donate goods or services to us. (Most straight cash support can be written off a business’s marketing effort expenses.) Bob Sledge, our group’s new Treasurer, has been finding lots of great reference links.
Here, in no particular order, are some great helpful links:
- http://www.lawyeratlarge.com/Common/Previews/NonPro.html — Looks to be an online copy of a book that wasn’t ever published. Long, extensive details on Non-Profit status.
- http://smallbusiness.findlaw.com/business-structures/non-profit.html — Lots of summary information, a FAQ, and other resources.
- http://www.hurwitassociates.com/l_start_forming.html — Generic overview on starting a non-profit.
- http://www.hurwitassociates.com/l_s_initial_oh.html — Steps on filing in Ohio. A great basic overview of the steps involved.
- http://www.irs.gov/pub/irs-pdf/p557.pdf — The IRS pub covering tax-exempt status.
- http://www.irs.gov/pub/irs-pdf/p4220.pdf — More details on applying for tax-exempt status as a 501(c)(3) organization.
http://www.irs.gov/pub/irs-pdf/p4221.pdf — Compliance guidelines for keeping your tax-exempt status and avoiding IRS goons showing up at your doorstep. - http://www.sos.state.oh.us/sos/businessservices/nonProf.aspx?Section=111 — Ohio’s Secretary of State’s office website: creating an Ohio Non-profit.
- http://serform2.sos.state.oh.us/servlet/page?_pageid=56,62&_dad=porthope&_schema=PORTHOPE — Search page for Ohio corps where you can find examples of other NP organizations’ Articles of Incorporation.
I’ll post up other bits and pieces as we continue down this road.
Now Playing: Beck — Odelay. I saw these guys on Letterman the other night and thought they were pretty cool. I also nabbed “Black Tambourine” which they played on Letterman. Pretty funny to have found these folks on that show — I never, and I mean never watch Letterman since I’m either at my computer working or heading for much needed sleep. Dunno if I’ll like this music in a month or so, but it’s different and cool right now.
Sunday, October 02, 2005
Technorati -- Maybe I Just Don't Get It
I’ve had a link on my blog to Technorati for nearly the entire (short) period my blog’s been alive. A couple months ago, my Technorati listing finally got over one page length of sites linking to my blog. Unfortunately, I’ve never been able to see more than the first page of links.
I get this lame error “Sorry, we couldn't complete your search because we're experiencing a high volume of requests right now. Please try again in a minute or add this search to your watchlist to track conversation” every time I try to go to the second or third page of links. Every time. No matter when I try it, no matter how many times.
Maybe I’m just lame (highly possible), but what’s the big deal about Technorati if their basic searches won’t get you a decent result set?
More on NHibernate and Nullables
Dayton - Cincinnati Code Camp!
James Avery and I are planning a Code Camp for Saturday, January 21st, 2006. We’re still working on a venue, but it will be in the Union Centre area of West Chester, Ohio. We’re still working out details, but we’re looking at a one day Camp running from 9am to 6pm, maybe a bit later. Sessions will be 60 minutes long and will be code-centric. We’re not looking for marketing folks to come in and show us a bunch of Powerpoint slides.
Here’s the cool thing: YOU get to decide what’s on the agenda. We’ll get submissions from various presenters, consolidate the list, and pass it on to folks who might attend. Attendees will vote on the sessions they’d like to see and we’ll assemble a final agenda from the winners.
We’re looking for presentations on a wide range of topics, even outside the .NET arena. Topics folks from Dayton have expressed interest in include:
- XP/Agile development
- Enterprise Architect / Data Modelling and UML
- Security in .NET
- C#/VB.NET Essentials
- Multi-Tier Architecture
- Web services fundamentals / in-depth
- Win forms vs ASP.NET
- Sharepoint/biz talk
- Enterprise library
- Compact Framework/mobile
- .NET & Active directory
- Using SQL DBs
- Source control
- Productive use of VS and other tools
- XML
Other areas which would be of interest:
- Development in Ruby
- Mono
- Toss something in and we’ll consider it!
Be sure to check James’s blog for topics the Cincy folks are interested in.
Interested in attending? Monitor my blog or James’s for more details.
Interested in submitting some presentations? E-mail me at jim-A.T-IterativeRose-D.O.T-com-REMOVEME with the following information:
- Topic Name
- Description (Abstract)
- Target Audience
Presenters may submit a maximum of five sessions and will be limited to a maximum of two actual presentations. Yes, yes, I said the attendees get to select what topics they want, but we’re shooting for a nice diverse agenda.
Be sure to monitor our blogs for more details. James and I are both pretty excited about putting this together!
Saturday, October 01, 2005
Recipe Blogging: Fall Tomato Salad
We’ve got an abundance of wonderful cherry tomatoes in our tomato thicket. (Mexican Midget tomatos from Seed Savers.) Yes, I wrote that correctly. We have a thicket of tomatoes courtesy of a large number of volunteer plants which took off. I just sort of point them to the fence and over a few poles I had up for our beans and peas. They go nuts and give us billions of wonderful cherry tomatoes.
I love tossing these tomatoes in with some just-cooked orzo pasta, a bit of minced garlic, some parsley, and some top-notch extra virgin olive oil. It’s a killer dish, plus it’s quick and easy to make.
Fall Tomato Orzo Salad
1.5 c. cherry tomatoes
1 c. orzo pasta
1 small clove garlic, minced
3 – 6 Tbs best-quality extra virgin olive oil
2 Tbs minced parsley
Parmesan cheese
- Bring a fairly large pot of water to boil. Add a good pinch of salt to the water, then boil the orzo until just cooked, about five minutes.
- While the orzo’s cooking, mince the garlic using a bit of salt (helps get the oils out). Scrape into a nice serving bowl and add the olive oil, parsley, and tomatoes.
- When the orzo’s done, drain it well and stir into the bowl while still piping hot. Dust with parmesan cheese.
Notes:
I love garlic, but don’t get carried away with it in this salad. You want just a hint of it, not a 2x4 in the chops.
Friday, September 30, 2005
YANSR (Yet Another Serenity Review)
I just got back from watching Serenity.
Holy s#|t. George Lucas weaps in shame and wishes he had one eighth the writing skills Joss Whedon has on his worst day.
I detest simple story lines where everyone lives happily ever after at the end of a movie where no character’s had to sacrifice and everything’s wrapped up in a pretty package. Life isn’t that way. Life is wonderful, but it often sucks. Badly. People get hurt, people die, loose ends remain untied at the end of the day.
Serenity certainly doesn’t fall into that lame rut, and I loved the movie for its dark themes and sacrifices. I really enjoyed doing literary analysis on good movies and books back when I was finishing up my degree in night school. I loved comparing and contrasting various stories with the classical hero theme: a journey, arrogance, doubt, sacrifice, redemption, mercy.
Serenity has all these elements wrapped into it in spades, plus there’s a great amount of humor. One of the bloggers I linked in my previous Serenity post made the great observation that Whedon’s not afraid to let one liners fall flat, just like they do in real life. The audience, admittedly a bunch of Firefly fanatics, repeatedly roared throughout the entire movie, and even broke out into applause a couple times after good lines.
Whedon maintained the depth in all his characters, something I loved about the series. The interplay between all of them is terrific, although Jayne is much more assertive and stands up to Mal more than he did in the series — where he on occasion showed outright fear of Mal when Mal’s game face was on. Z�e’s character also has some key questions for Mal at critical junctures, something which brings about Mal’s crisis of doubt. Characters this rich are tough to find in any story.
Other “trivial” stuff about the movie: The action is great and fun. There’s a large amount of violence, but I’d say the gore isn’t bad at all. The violence fits right into an appropriate context, so it doesn’t bother me. As noted on other blogs, some of the special effects are a bit weak, but I didn’t care. The cinematography is simply incredible. I love that Whedon kept the same flavor as the TV series with zooms (“The cheese factor” as Tim Minear said in the Making Of spot on the DVD set), bouncing/jiggling shots, and even some cool flares popping into the screen.
Serenity is by far the best movie in any genre I’ve seen in a long, long time.
<SPOILER_ALERT>
Sue me for saying it, but I’m glad to see Ron Glass’s character, Shepard Book, killed off. Book was a great idea, but I always cringed when Whedon had Glass trying to pull off something pious or deep in faith. In the Firefly DVD set’s Objects in Space commentary, Whedon talks about his lack of faith. I always felt the religious aspect of Book’s character came off very weakly, and I cringed at several points during the series when Ron Glass, a Buddhist, tried to pull off a priestly homily. Don’t get me wrong, I really enjoyed Book’s character on most occasions, but boy, did I hate those instances where his lines just fell completely flat because neither Whedon or Glass had a clue of where the character should have been coming from.
Wash’s death hit hard, but man o’ man, was it incredibly well pulled off. Z�e’s shock and loss (and the audience’s!) run head long into Mal’s game face hardass insistence on keeping moving to get the mission done. Whedon carries the audience and suviving crew through the climactic crisis in the same numbed, get-the-job-done-and-survive fashion, then leaves everyone with a bit of breathing space to let the shock settle in. It’s simply an amazing section of work that left me, uh, amazed.
</SPOILER_ALERT>
Now Playing: Crosby, Stills, Nash, and Young — American Dream. Screw those pompous foreigners with their anti-American pandering. I like my anti-American music home grown where the artists at least have a grasp of what life here really is. (Or sort of have, should have, might have.) This isn’t CSNY at their best, but I absolutely love In the Name of Love, That Girl, and This Old House.
Thursday, September 29, 2005
NetGear Router & FTP Problems
My new Netgear firewall/router/dsl modem was not cooperating with FTP sessions at all. I couldn’t reliably publish pages for our user group or my LLC. FrontPage couldn’t list any pages on the remote system, FTP timed out, ncftp via Cygwin wasn’t any better.
Sucky.
A quick bounce to Netgear’s product page showed that my “new” router is actually a fairly old model and the firmware was waaaay out of date. A quick download of the new firmware followed by a quick flash of the new version and Poof! Everything’s shiny and working fine. (Frontpage still sucks, though.)
Now Playing: The Who — Who’s Next (Remastered). Killer stuff. ‘Nuff said.
Wednesday, September 28, 2005
NHibernate and .NET 2.0 Nullables (Ooops)
On occasion one makes a really, really dumbass mistake. My previous post on NHibernate and .NET 2.0 Nullables was just such a beast. Encapsulation’s a great thing, as long as you can get the right forms of data to the right places.
The only problem? My altered business entity had no way for NHibernate to stuff in those goofy custom nullable types — NHibernate accesses everything via properties, and I’d changed the public interfaces to the .NET Nullables, not the NHibernateContrib custom ones. Sure the tests ran fine, but they weren’t using the NHibernate Nullables.
Duh.
Back to the drawing board. One alternative is to create a service layer using an Adapter pattern which sits below the data access layer. That service layer would be responsible for converting “real” BEs to ones using NHibernate’s custom type. I fooled around with a quick bit of work on that. Here’s a quick diagram of what I came up with, although note I’m not doing Test Driven Development and haven’t implemented anything yet.
Frankly, it’s late and I’m off for bed, so there’s no more getting done on this tonight!
Now Playing: Buena Vista Social Club (soundtrack). Great stuff for frazzled brains.
Serenity Blogs
If you haven’t heard, the folks pushing Serenity (the movie follow on to the incredible series Firefly) opened early screenings to bloggers. (This after having had three sets of early viewings nationwide for diehard fans.) Of course, I live in Dayton where no such cool thing would ever happen.
Still, I can enjoy some of the blog reviews here, here, here, here, here, and here.
This one here is a particularly interesting summary of the culture surrounding Serenity/Firefly. Makes for good reading.
Now Playing: The B-52s — The B-52s. My wife hates the B-52s, so I have to listen to them when she’s not around. I’m brainwashing both my kids to love them. It’s OK because she’ll get me back by playing lots of Nirvana for them.
Tuesday, September 27, 2005
Current Reading
July, August, and September were stuffed with me reading scads of technical books. Among the titles I blasted through were, in no particular order:
- Lean Software Development
- Effective C#
- Expert .NET Delivery With NAnt and CruiseControl.NET
- Visual Studio Hacks
- Writing Portable Code
- The .NET Developer’s Guide to Windows Security
- 19 Deadly Sins of Software Programming
Add to that frequent references to Building Applications and Components with Visual Basic.NET, Programming .NET Components, and Design Patterns.
Needless to say, I was pretty groggy after all that. A break was in order, so I’ve spent the last ten or so days plowing through Halderman’s Forever series: Forever War, Forever Peace, and Forever Freedom, plus re-reading Drake’s Counting the Cost. (I’d given up on trying to re-read Anderson’s Harvest of Stars. The story was OK, but I just couldn’t get over the hideously campy dialog. Sorry.) Also toss in a re-read of Scalzi’s fantastic Old Man’s War just so I could remain positive about the guy after his odd rants on Katrina and poverty.
Now, to steal a line from The Holy Grail, I’m feeling much better. I think I’ll go for a walk. Or at least get back to trying to get some decent writing and coding done, not to mention trying to get back into the study grove so I can knock off another MCSD test which I’ve been procrastinating for far too long…
Now Playing: Little Feat – Let It Roll. Amazing how iTunes’s “Shuffle” feature will remind you about some great music you’d lost track of for a whole lot of years.
Sunday, September 25, 2005
Top 50 Sci-Fi Shows
Friday, September 23, 2005
Great Patterns WebCast
Talk about a timely find: Our Developers Group’s last meeting had Martin Shoemaker talking about Architecture Patterns in C#. Today I finally got around to looking at this month’s webcasts on the MSDN DVD. Whoopee! I found that Craig Utley has a terrific webcast on Pattern Based Development using the .NET Framework.
It’s a 90 minute webcast and he gets into some great detail. I’m only at the 40 minute point, but he’s gotten into great detail on Singleton patterns, even dealing with multi-threading issues.
You can find a copy of the webcast here. It’s worth the download!
One note: the first 20 minutes are fairly introductory to patterns, so skip past that if you’re familiar with the background of patterns, the Gang of Four, and how Microsoft is working hard at pushing patterns and practices.
Thursday, September 22, 2005
Selling the Agile Concept to Customers
Ben Carey’s written a terrific post inspired from the “Advances in Agile” session he had at PDC. Ben gives some great insight on how to deal with Statements of Work (SOWs) and companies which budget for Big UpFront Design (BUFD) or alternatively Big Design Up Front (BDUF). Check out his thoughts on how to deal with this.
For an alternative view, read Joel Spolsky’s opinion of doing BDUF. Alternatively to Joel’s alternative, these folks say Joel’s not doing BDUF, he’s doing EDUF (Enough Design Up Front).
Recipe Blogging: Ginger Oil Chicken
Several years ago a good friend took me out to Full Kee restaurant at Baileys Crossroads in Alexandria, VA. We had an amazing meal there, part of which was a dish called scallion oil chicken. It was a chicken perfectly poached in a lightly aromatic broth, then served with some finely minced ginger macerated in some oil. The chicken was cut into bite-sized pieces which you nabbed with chopsticks and dabbed into the oil. It was just amazing stuff: wonderful, subtle flavors, and an incredible texture brought about by cooking the chicken to exactly the right point.
I’ve thought about the dish occasionally, but never gave a shot at reproducing it — until Tuesday night. This isn’t exactly what I had at Full Kee, but I hope it’s in the spirit of the recipe. My family sure loved it. I call my variant “Ginger Oil Chicken” simply because I could never figure out exactly where Full Kee used scallion oil in their recipe.
This recipe’s all about simplicity and subtlety. Find as fresh a chicken as possible, preferrably free-range or organic. Don’t get carried away with the aromatics in the poaching liquid. Don’t gussy things up with soy sauce, hoisin, or any number of other things which are wonderful in other contexts. Keep it simple and reap the benefits!
Ginger Oil Chicken
1 fresh chicken, 3 – 4 lbs. (Use free range or organic if you can find it.)
2 carrots, scrubbed and split
2 stalks celery, cleaned
1 medium onion, skinned and cut in quarters
3 star anise
1 stick cinnamon, broken
4 – 6 cloves
2 coins ginger
Dipping Oil
2 Tbs finely minced ginger, including the skin (See Notes)
pinch kosher or sea salt
1/3 c. canola oil
- At least one hour before serving, prepare the dipping oil. Finely mince the ginger and scrape into a small bowl. Mix in the salt and let sit for ten minutes. Pour in the canola oil, stir well. Set aside to steep as you cook the chicken.
- Cut the skin between the thigh and body of the chicken. Season the body cavity of the chicken with salt and pepper, then put in a few pieces of carrot, onion, and celery. Place the chicken in a large pot. Add the remaining vegetables, star anise, cinnamon, cloves, and ginger. Cover with 1” of water and place on the stove over high heat. Bring to a simmer.
- Cover the pot, lower the heat and keep at a bare simmer. Simmer for 45 minutes. (A bare simmer here is critical to keep the chicken from getting too rubbery as it cooks.) Turn off the heat and let sit for another 15 minutes. Cut into the thigh and breast to check for doneness. If the chicken’s cooked through, remove it from the pot and drain. If not, bring back to a simmer and simmer another 15 minutes.
- Remove the chicken from the pot and drain well. Remove the vegetables from the body cavity. Using shears, a heavy chef’s knife, or better yet cleaver (I ain’t got one. Boo hoo.), cut the chicken into bite-sized pieces. Place on a serving platter.
- Serve the chicken with the oil. Folks should lightly dip their pieces in the oil, getting a bit of ginger in addition to the oil.
NOTES:
I actually used five-spice powder in place of the cinnamon, cloves, and ginger; however, that powder stuck to the skin of the chicken, rendering it rather ugly. Five-spice is based on star anise, fennel, ginger, cloves, and cinnamon and I’m pretty confident of my recommendation.
Make sure to include the skin when you’re mincing up the ginger. Yes, yes, normally it’s shaved off, but it lends an interesting complexity in this context. Do please scrub off the ginger first, though!
Now Playing: Jason Mraz, Mr. A-Z. This isn’t anywhere near as good as his Curbside Prophet albumn which I absolutely love. As a matter of fact, I’d say this albumn sucks, or I would say that if I hadn’t paid $12 on iTunes for it. Bummer.
USB Issues Under XP
I’m running an ASUS P4P800 Deluxe motherboard in the system I built at home. I installed XP Pro a couple weeks ago after having run Win2K for awhile. XP wouldn’t recognize the USB ports as 2.0 and would only work with the sucky 1.0 slooooowwww format. I put off investigating until now, and it turns out it was an idiotically quick fix.
Open up Device Manager, scroll down to the USB controller — whoops! what’s that yellow question mark showing up?
Seems the USB controller wasn’t recognized during installation. A quick right-click to select “Update” fixed things — after I let XP search for drivers. The USB controller is now (correctly!) recognized as an Intel 8280 controller and I’m back up with the more better more better USB 2.0. Whew.
Should have put the nail in that coffin earlier!
Wednesday, September 21, 2005
Newegg Rocks!
Yesterday I was whining about my crappy Linksys router dying. I spent an hour or so trying to get sessions surviving long enough to get a new firewall router ordered through Newegg. (They don’t take orders over the phone, only via their site.)
Thankfully I was finally able to get an order placed at about 5:30 Eastern. Newegg’s got a “rush” option on their orders which will hopefully get your order out the door that day — as long as you get the order placed by noon Pacific. I checked the rush option just in case; it was worth the $3 for a gamble.
Surprise, surprise, the new router and an external disk for backup showed up here today. That’s just incredible work on Newegg’s part.
I’m finishing up preparation work for our .NET Developers Group meeting tonight, so I can’t play with my new toys. Maybe after I get back home.
Again, I’m awfully impressed with Newegg’s terrific delivery times. Way cool!
Blog for Federal Developers
Tuesday, September 20, 2005
My Lousy Linksys Firewall Router
I’ve had a Linksys DSL firewall router (BESFX41 is the model, and no, I won’t link to the piece of junk) for three years now and I’ve had to replace it three times. It’s an annual occurance, and it appears to be that time of the year again. I’m having to power cycle the damned thing about every 20 minutes to keep it working long enough for me to research its replacement. Criminy, what does it take for a company to build a moderately reliable device which lasts more than 12 months?
I’m not a fan of Belkin stuff, so now I’m looking at some of D-Link’s DSL firewall routers. I’ve not had any experience with D-Link equipment, but Jerry Pournelle seems to be a big fan of them and I think he knows a thing or three about solid home networking.
I’m also not looking at any wireless routers simply because I’m a paranoid security freak. Besides, I don’t have a wireless laptop so it doesn’t matter anyway. I can always get wireless at some point down the road.
In the meantime, leave me a comment if you’ve got suggestions on firewall routers to use or avoid. Minimum requirements for me: four ports, stateful packet inspection, DHCP server.
Saturday, September 17, 2005
I'm Published! (Sort of)
I’ve been asked to write occasional posts for James Avery’s Visual Studio Hacks website. The first article, on Morrison Schwartz’s SharpTools, was just posted today.
If you’re a Visual Studio user and you haven’t read James’s book, well, go read it!
(BTW, I posted a review of James’s book on Slashdot. Give the review and its comments a read. Slashdotters are always loads of fun with their comments. Or not…)
Recipe Blogging: Cinnamon Ice Cream
First off, if you’re not familiar with Penzey’s Spices do yourself a big favor and head over there for a looksee. I’ve been using spices, herbs, and whatnot from Penzey’s for years. They’re just plain amazing.
This ice cream is something I came up with four or so years ago as a side to a roasted pineapple (I’ll post that some other time). It’s wonderful stuff, and really worth the effort to search out good vanilla beans and cinnamon. Did I mention Penzey’s is a great place for spices?
Cinnamon Ice Cream
3 c. Half-and-half
2 sticks cinnamon, broken
1 vanilla bean, split and seeds scraped out
1/2 tsp. cinnamon powder
3 egg yolks
3/4 c. sugar
- Pour the half-and-half into a heavy saucepan. Add both cinnamons, the vanilla seeds and the scraped bean husk. Bring to a simmer over medium-high heat, stirring frequently to avoid scalding. Remove from heat, cover, and let steep for 30 minutes.
- In a medium bowl, whisk the egg yolks and sugar together until the eggs are pale yellow and form a ribbon when you drizzle the egg/sugar mix back into the bowl. Set the bowl in a towel rolled into a ring. (This keeps the bowl from scooting all over the place during the mixing which is about to occur.) Bring the half-and-half back to a simmer, then very slowly pour 1/2 c. of the hot cream into the egg mix, stirring constantly. After this initial bit is mixed in, slowly pour in the rest of the cream, whisking constantly. Pour the mix back into the saucepan.
- Return the saucepan to medium heat and continuously stir the custard. Cook until it just begins to thicken — at the point where it leaves a clear strip when you draw your finger across the back of the spoon or spatula you’re using to stir. Remove from the heat and pour through a strainer into a bowl set in an ice bath.
- Cover with plastic wrap, pushing down onto the surface of the custard, and chill overnight. This overnight resting is critical to the outcome of the ice cream. The stuff will be very good if you skip this and go straight to freezing, but it will be wonderful if you’re able to do this the night before. The additional resting time gives the proteins and other smart-sounding stuff time to bind. I don’t know what really happens, I just know I followed Alton Brown’s suggestion from years ago on FoodTV and it makes a helluva difference in the final texture.
- Process as usual in whatever ice cream maker you’ve got. We’ve got an old Krups which has served us very well over the years.
Pictures:
Here’s a shot of the eggs at ribbon stage:
Here’s the custard after it’s been cooked just enough:
Thursday, September 15, 2005
Development Philosophy and Long-Winded Software Pundits
Wednesday, September 14, 2005
NHibernate and .NET 2.0 Nullables
UPDATE: I screwed up on this post. See a correction here.
NHibernate is an object persistence system, enabling you to bypass oodles of data access layer and SQL code, directly storing objects in a database. It’s a pretty slick concept, and I’ve been fooling around with getting some business entities stored via NHibernate.
The first problem I’ve run into is .NET 2.0 Nullables. The BEs I’m working on use Nullables for various members, and NHibernate was most vexed with them since NHibernate only works for the 1.1 Framework. However, all’s not lost. Thankfully there’s a potential answer. NHibernateContrib is modeled much like nAntContrib — a spot for handy tools which haven’t made it into the “real” release yet. One of the tools in that project is support for Nullables. Whoopee.
Ooops. Not so fast. The Nullables in NHibernateContrib are a custom type. The examples show changing your BE’s public properties to these custom types. That’s not so cool since it scatters a custom type throughout your code. I’d rather stick with the native .NET 2.0 types.
No problem. I can encapsulate everything inside the BE without too much trouble.
Here’s what one of my properties looks like before the change:
public
Nullable<int> PersonID{
get { return _personID; }
set
{
if (value != null)
{
if (value < 0)
{
throw new ArgumentOutOfRangeException("value", value,
"ID value < 0");
}
}
_personID = value;
_isModified = true;
}
}
My test for checking null functionality looks like so:
[Test]public void CheckNullIDInputs()
{
PersonEntity pEnt = new PersonEntity();
pEnt.PersonID = null;
Assert.AreEqual(0, Nullable.Compare(null, pEnt.PersonID));
}
I got the BE’s property changed, but it took a bit of extra work since the Nullable types from NHibernateContrib use NullableType.Default for returning a particular null, i.e. NullableBoolean.Default.
Here’s what the BE property code looks like after my edits, with all tests running green:
public
Nullable<int> PersonID{
get {
// return _personID wasn't working correctly without this
// HasValue test due to apparent issues with how the
// NullableInt32 type is handled when it's Default.
if (_personID.HasValue)
{
return (int?)_personID;
}
else
{
return null;
}
}
set
{
if (value != null)
{
if (value < 0)
{
throw new ArgumentOutOfRangeException("value", value,
"ID value < 0");
}
_personID = (NullableInt32)value;
}
else
{
_personID = NullableInt32.Default;
}
_isModified = true;
}
}
So now everything’s green and shiny with my BE tests. Now to press on and see about getting them successfully in the database!
Longhorn Install == Molasses
or maybe watching paint dry.
I’m putting Longhorn on a Virtual PC in order to try and nab the Consolas font out of it. The install’s been running an hour now and it’s only ~ 50% done. zzzzzzzzzzzzzz. Things don’t appear to be hung because there’s still activity showing on the drive and the progress bar appears to be progressing, but boy, is this sloooooow.
nUnit Minor Diety Now Blogging
Sunday, September 11, 2005
9/11 Memorial
Saturday, September 10, 2005
Great Potential Addin for VS.NET!
Here’s something I’ve been dreaming of: viAddin at GotDotNet. “Native vi emulation in Visual Studio .NET,” says the description. Wow, boy have I missed those vi command strokes!
Oh, wait. There’s been zero file checkins and zero releases. Rat farts. Guess I’ll have to wait.
Maybe the folks at Vim will get their great editor wickered up so I can use it inside VS.NET!
(Seriously, folks, I love Vim [not vi] and have done quite a bit of development with it. There’s no better lightweight POTE [Plain Ol’ Text Editor] around, especially if you’re looking to do quick regular expression hacks of a file. Yes, I know, I’m a sick person.)
Wednesday, September 07, 2005
Recipe Blogging: Jim's Heretic Fusion BBQ Sauce
I call this “Heretic” barbecue sauce after my “Heretic Chili,” which is pretty much guaranteed to aggravate any chili purist. There are plenty of BBQ purists around too, and I’m sure some would be beaked about this. Tough. I really like the play of sweet and sour in this sauce, plus I enjoy the depth from the Chinese ingredients.
Jim’s Heretic Fusion BBQ Sauce
2 slices bacon, finely chopped
1/2 medium onion, finely chopped
2 cloves garlic, minced
1 small can (4oz?) tomato paste
3 Tbs hoisin sauce (Chinese sweet soy bean paste)
1/4 c. black Chinese vinegar
1/4 c. cider vinegar
2 c. port (See Notes)
1 c. apple jelly
3 Tbs honey
- In a tall saucepan over medium heat, saut�e the bacon until it begins to render its fat. Raise the heat to medium-high and add the onion and garlic. Saut�e for 3 – 5 minutes until the onion is starting to caramelize and turn brown.
- Add the tomato paste and hoisin sauce. Stir frequently and cook for 2 – 3 minutes. (This caramelizes the tomato paste and hoisin sauce, really popping their flavors out.)
- Add the two vinegars, port, jelly, and honey. Lower heat and simmer for about 30 minutes.
NOTES:
- Port: Avoid the dreck Gallo bottles as port. Look for something like Sandeman’s Reserve, Warre’s Warrior, or Graham’s Six Grapes. You only need part of the bottle for this sauce, so you’ll have plenty of nice port to sip on after you’re done grilling.
- Usage: This sauce is killer on pork chops and great on burgers and chicken. I wouldn’t get BBQ sauce anywhere near a steak just because I like my steak pretty basic so I can enjoy the flavor of the unadulterated beef. Dunno how well it would work with goat. Let me know if you try it.
UPDATE: Vlad in the comments mentioned using balsamic vinegar in place of the Chinese vinegar. This really is a terrific substitution if you can’t find Chinese vinegar. I’d meant to write exactly that in my original post but forgot. Be sure you use a condiment grade balsamic — don’t waste your precious “real” stuff! Check out this recipe post from the past for more info on balsamic vinegar.
Tuesday, September 06, 2005
The Only Good Katrina Blogging
Housecleaning: Blogroll Update
For those of you still awake and reading my blog out there, I’ve updated my Blogroll off in the right margin. No deletions, a few additions. I still read Ben, James, Christian, Clemens, and the other folks I had previously. I’ve added Hanselman, Sara Ford, James’ Visual Studio Hacks, and a couple other geek sites. (What, you wanted hyperlinks in this post? Go click on the sidebar you sluggards!)
For society stuff, check out John Scalzi’s Whatever. Great stuff from a helluva author, although I’m disagreeing with him rather strongly on his post-Katrina content.
I still don’t waste time with Sullivan, Alterman, or Right-Thinking From the Left Coast. So there.
UPDATE: Looks like some spambot found this post for comment spam. Dipshits. I'm shutting off comments for this post. Hopefully the SOBs will forget about me for other posts. Bastards.Saturday, September 03, 2005
Hurricane Blogging
I’ve kept quiet about the catastrophe in New Orleans and along the gulf coast simply because there’s already enough being posted in the blogosphere already. Do your own searching for idiotic, asinine commentary about who’s to blame — there’s plenty of stupid rants from all sides of the political/social spectrum. There’s plenty of blame to go around. (The one comment I’ll allow myself is that you should read this post on the buses of New Orleans before you go solely blaming the feds and Bush’s administration for the horrors in the Superdome and the convention center.)
Better yet, focus on something positive, like donating money and/or time to help those in need. Instapundit has a huge list of charities focusing on hurricane relief, as does NZ Bear. Bear’s also got a idea: log your contribution to show how much the blogosphere is contributing to helping relief efforts.
Thursday, September 01, 2005
Agile Podcasts
I’ve posted a review at Slashdot on Tom and Mary Poppendeicks’ Lean Software Development. There’s been the usual mix of comments: many useless, many snarky (I even got called “clueless” and “dangerous” for my review!), and a few gems mixed in with the rest of the crap.
One of the gems was a pointer to podcasts on Agile topics from iTunes, plus an entire site dedicated to Agile podcasts. As Keanu Reeves would say, “Whoa!”
The iTunes podcasts aren’t searchable from the iTunes Music Store browse/search bar. You have to log onto the Music Store, then hit the “Podcasts” link on the left sidebar. A podcast-specific searchbar there lets you search for the “real” stuff.
Right now I’m listening to Mary P.’s interview from the Agile 2005 conference. Great stuff!
Wednesday, August 31, 2005
Swanson's Unwritten Rules of Management
William Swanson, CEO of Raytheon, has written a great little book of management rules. You can get it from Raytheon for free and it’s worth filling out the web form to request it.
The pocket-sized, spiral bound book has plenty of gems not just for improving your leadership, but for improving professional relationships.
A couple of my favorites:
Rule 5: Presentation rule: when something appears on a slide presentation, assume the world knows about it and deal with it accordingly. I’d say this extends to any form of communication, especially e-mail. Don’t expect your e-mails to remain private. Save your ranting and disparaging, negative comments for private, face to face communications. Sending out unprofessional mails, or mails containing sensitive content, is flat out foolish and you’re risking showing your ass big time. Trust me, I learned this lesson the hard way years ago. (Luckily the stupid comments I sent out were about a co-worker I actually had a good relationship with. A face-to-face apology wasn’t easy, but smoothed things over.)
Rule 32: A person who is nice to you but rude to the waiter – or to others – is not a nice person. Be very, very wary of folks who speak sugar to you but snub others they perceive as lower than them. These folks are usually carrying a large knife to stick in your back.
And my personal favorite, one I’ve believed strongly in for years:
Rule 1: Learn to say, “I don’t know.” I have never felt uneasy saying “I don’t know,” because that’s immediately followed by “but I’ll find the answer.” I detest people who blab on in meetings trying to contribute to make themselves look better when they’re really making themselves out like fools. I’ve had the misfortune to work for a couple managers (not leaders) like this. I was happy to leave those jobs. “I don’t know” is a powerful phrase because it shows confidence in yourself. That’s right, confidence. I’m not bothered by admitting I don’t know something. So there.
Grab this book and give it a read. It’s powerful stuff.
(I stumbled across a reference to this book on a blog some months back. I don’t remember whose blog it was, so I can’t give credit. Sorry.)
Sunday, August 28, 2005
GDBN Saved My Bacon
Thursday, August 25, 2005
Great Parenting Book
I’d meant to write about this when I read the book last year, but never got around to it. (Uhh… Besides, I wasn’t blogging then.) Confessions of a Slacker Mom by Muffy Mead-Ferro really is a terrific read for just about any parent. What makes it such a great read is that, despite its title, it’s not a snarky, sarcastic commentary on the sad state of parenting these days. Rather it’s a calmly written short book full of stories on what used to be common sense parenting.
It’s something Dr. John Rosemond might have before he went mental and turned into a mean, scathing columnist. (Chill, Dude!)
A review on Amazon.com sums the book up pretty well. Paraphrasing now: Don’t waste so much time and money on useless crap, don’t spoil your kids, have a life of your own, and listen to your instincts.
There’s another point not listed by that reviewer: Don’t overprotect your kids. It’s good for them to figure out the world has sharp edges. Cuts, bruises, and the occasional broken bone, while heart-breaking, aren’t fatal. My buddy Josh and I were talking last night on some childhood incidents. One tale involved a bike jump off a levee of the Sacramento river and ended up with that kid getting a nasty concussion. That kid went on to accomplish a thing or or two. Another story included a broken tree branch, a long concrete screw, and a trip to the emergency room for stiches 1/2” away from the eyeball. The recipient of those stiches has since moved on to pretty good things as well, so I’d say a few knocks don’t have horrible, awful long-term effects.
In any case, the book’s really a good read for current and future parents. Chill folks, you don’t need that baby wipe warmer.
Tuesday, August 23, 2005
More Flickr Photos
Monday, August 22, 2005
An Odd Take on C#'s "Struggle"
Sunday, August 21, 2005
Good Debugging Tale
Great Developer/Architect/Testing Blog Article List
Microsoft Doesn't Listen, Part II
I'm All About World Domination
Great Snippet Tool
Know When To Bail
Neat Geek Event Aggregator
Wednesday, August 10, 2005
Going Dark
Great nUnitASP Overview
Real World Site Migration
Monday, August 08, 2005
Neat Article on Firefly and Freedom
Wednesday, August 03, 2005
More VS2005B2 Editor Woes
Agile Learning Opportunity
Tuesday, August 02, 2005
VS2005B2 Woes -- an Ugly Fix
Application Data\Microsoft\VisualStudio\8.0 in your home directory.
That sucks because you lose your window settings and some other layout stuff and it's a PITA to reload that every time. It's not quite so much a PITA if you save a copy of that folder off somewhere immediately after entering a new VS2005B2 session. You can then use a batch file to delete the corrupted profile folder and copy a fresh one back over, like so:
rmdir /s /q "C:\Documents and Settings\Jim Admin\Application Data\Microsoft\VisualStudio\8.0\"
xcopy /s /e "C:\Documents and Settings\Jim Admin\My Documents\VS 8.0 Backup Settings" "C:\Documents and Settings\Jim Admin\Application Data\Microsoft\VisualStudio\8.0\"
Note the trailing slash on the target folder -- saves a prompt asking if the target's a folder or file.
This all goes pretty quickly, especially if you're using SlickRun for quickly launching such utils.