Monday, May 30, 2005
YASR (Yet Another Sith Review) (But This One's Good)
Check out John Scalzi's thoughts on Revenge of the Sith. Scalzi's got some terrific thoughts on Lucas' impact on filmmaking, merchandizing, CGI, sound, and a host of other matters. Scalzi hits hard the many problems with episodes I-III, but not in a snarky way.
There's also some interesting thoughts on the future of the Star Wars juggernaut, including this terrific set of sentances finishing off Scalzi's post: "Lucas, who I think is well pleased to finally wash his hands of the Star Wars universe, is likely to have minimal involvement. That means there's an excellent chance some good writers and decent directors will creep back into the Star Wars universe and make it finally live up to its potential. A new hope, indeed."
Changes in Writing, or Media in General
John Scalzi's got a terrific post on how the publishing/writing business is changing, at least by his line of reasoning. According to Scalzi, revenue streams won't be primarily from selling printed matter, they'll be from ancillary lines such as blog ads, material sold from an author's site, etc.
Regarding publishers and editors, as General Shinseki said, "If you don't like change, you're going to like irrelevance even less."
Friday, May 27, 2005
Microsoft's Anti-Spyware B1
Anybody else have odd issues with MS's Anti-Spyware? I've felt it's been dragging down system performance, so I've been trying to run with it disabled in order to get some subjective comparisons. Right-click on the taskbar icon, select "Shutdown". A dialog appears with dire warnings that my system will be suceptible to spyware attacks and may even do something more horrific. [What, like register itself as a Howard Dean supporter? -- ed.]
Fine. Click "Yes" to confirm that I know what I'm doing (supposedly). The little icon goes away and everything looks fine and runs just ducky. Until... Some hours later, I notice Anti-Spyware's icon is back in the taskbar.
Hmmm... I had no notification it was starting back up, nor can I find any preferences or options which would explain to me why this is happening. This has happened several times on both of my systems.
Software that starts up on its own and sucks up resources even when you've told it to stay gone.
Wouldn't that be considered, well, SPYWARE???
I need to caveat this with the note that I've not done much checking into MSAS's configuration, nor have I even looked to see if there's an online forum or blog where I can go for more info on it. What, you want me to actually do some research before ranting? Hah!
Thursday, May 26, 2005
Great Guide for Great Presentations
Tom Peters has a terrific post on giving great presentations. There's a link to a PowerPoint slideshow in his post with 59 points on how to consistently make great pitches.
You absolutely need to know how to effectively communicate your ideas and goals, even if you never give a pitch to a group larger than your five member development team.
The two most important points to me are
#15: "No more than THREE key points! Come at them in several different ways."
and
#17: "Slides: NO CLUTTER!!!!!!!!!!!!!!!!!!!!! (no wee print/ charts/graphs)"
If you can only remember two things on how to form your next presentation/pitch/briefing, remember these two. I've sat through too many briefings and presentations where the speaker hadn't thought out a clear story -- we were overloaded with far too many important points.
Worse yet are the folks who think that more graphics == more clarity. Bullpuckey. The only thing you're doing is showing that you didn't take enough time to distill your point or issue down to the essence. Even worse, your audience may think you're trying to pull a smoke and mirrors act by splattering crap all over the screen.
As Glenn Reynolds would say, read the whole thing.
Wednesday, May 25, 2005
Peanut Butter Sandwiches in Systems & Software Development
Rico Mariani has a good post on statements "so obvious as to be uninteresting." How often have you run across marketing blabber BS which fits this bill? How about poorly-worded requirements? (OK, so you XP fanatics will just refactor the requirement.)
Oh yeah, the rest of his post on performance analysis is pretty damned useful too.
But I still dig the peanut butter sandwich part.
Torture Is...
having three boxes in the front hallway with parts for my new computer.
And not being able to put the toy together until I pass the first test for my MCSD. I'm forcing myself to wait until the afternoon of 6 June to start putting pieces together. Maybe I'd best not even open boxes to RTFM yet.
The horror.
For those interested, I've got an ASUS P4P800-E motherboard, P4 3.4E GHz (Prescott socket 478), 2GB RAM (1GB modules from Crucial), a 300GB Seagate Barracuda S-ATA 7200RPM drive, and an ATI Radeon 9800Pro video card. All that's going in an Antec Solution 1650 minitower case with TAC (Thermally Advanced Chassis) with a side vent right over the heat-producing monstrous processor.
I still need to pick up a Plextor PX-716 DVD+-RW drive and a KVM switch to flip between my existing system. The Radeon 9800 supports dual monitors, but I'm forcing myself to wait for a second monitor until I get a gig and a paycheck!
Monday, May 23, 2005
Clarifying Visual Studio 2005 Products
Are you confused about the numerous variants of Visual Studio 2005 and how it fits in with MSDN subscriptions? Check out these two posts from Rob Caron:
A Hitchhiker's Guide to Visual Studio 2005 Team System, Part I
A Hitchhiker’s Guide to Visual Studio 2005 Team System, Part II
There are a lot of changes coming about, and Rob's posts do a great job of explaining them. Lots of purty pictures make it more clearer for dumb folks like me.
Bottom line? Get an MSDN subscription now if you don't already have one. (Like me.)
(Via dasBlonde)
Sunday, May 22, 2005
Build Process: Visual Clues
A friend passed this on to me some time ago. It's a great way for linking CruiseControl's automated build cycle to a terrific visual feedback system.
Some folks have a bit too much spare time on their hands. (But I'd love to put this together!)
Friday, May 20, 2005
Terrific PDF Generating Tools
I stumbled across a great tool for generating PDF files from Office documents: GhostWord. This handy front end for GhostScript installs itself as a button in Word, Excel, Access, and PowerPoint. Click the button and you'll get a simple dialog. A couple sanity checks, one button and Poof! you've got a PDF file.
You'll need GhostScript 6.0 or higher, plus a PostScript printer driver. Note that I say driver, not a PostScript printer. Install the recommended driver (HP Color LaserJet 4500) and select "File" as its connection port.
I tried one simple resume Word document with moderate formatting, one basic PowerPoint, and one moderately complex Word document with an odd-sized paper setting and a few graphics. GhostWord worked terrific in all cases.
Best of all, it's FREE.
Wednesday, May 18, 2005
Disclaimer Template
Need a good disclaimer for your work, blog, or other important communication? Check out this one.
Tuesday, May 17, 2005
Playing With CSS and Paintshop
I spent part of yesterday and much of today fooling around with getting my LLC's website up and running. The graphics and colors are still quite rough, but hey, it's an iterative process.
Boy, there's nothing like trying to do something fancy with CSS to make you learn CSS. There are still some rough band-aids on the styling, but I am fairly pleased with the general layout. I still need to re-read sections of Meyer's Cascading Style Sheets: The Definitive Guide, 2nd Edition, particularly the details of how text flows. I'm not happy with the h1 and h2 blocks not resizing, but I couldn't figure out what I changed from when they were working. Rat farts. I'll dope it out soon.
I'm also not happy with some of the duplicated properties I've got scattered throughout the sheet, particularly those dealing with block and border sizes. I wish there was some way to declare constants and reference those values in the properties themselves. This is a bit too much like the awful "magic number" issue which crops up in far too much software code.
The rose graphic is an initial cut from a friend who's a real artist. I'm looking forward to seeing what her final work is. I'm paying her in home roasted coffee; she and her husband both seem very pleased with the barter deal -- and I'm sure I'm getting the best out of the deal by far.
Friday, May 13, 2005
Good Reading List
Jean Tessier's got a good list of books he's read with short, sweet reviews. It looks like there are some listed which are worth reading.
He's also created an open source project which sounds pretty dang interesting: Dependency Finder. It's in Java, but I wonder if there's a .NET port or something similar around. Note to self: Worth looking at later.
(From a post at Yahoo's Test Driven Development group.)
It Is Alive!
Woo hoo! The Ohio Secretary of State's office just confirmed my paperwork has been approved.
I'm now officially the owner of Iterative Rose Solutions, LLC. I've even got a logo, an idea I had a long time ago brought to life by a friend who actually does art stuff for a living. The piece is still evolving, but it's supposed to show a rose emerging in an iterative fashion. Clever, no.
Y'know, "owner" just doesn't have the right ring to it. Maybe my title should be "Supreme Ruler", or "President for Life".
Got a name, got a logo, got a biz plan. Now I just gots to get a gig, and I'm working on that!
Y'know, "owner" just doesn't have the right ring to it. Maybe my title should be "Supreme Ruler", or "President for Life".
Got a name, got a logo, got a biz plan. Now I just gots to get a gig, and I'm working on that!
Thursday, May 12, 2005
All's Really Not Quiet Here
I haven't posted anything in the last couple days simply because it's been a madhouse. I've been dashing about doing the usual FrazzledDad chores of running my daughter around, chasing my son around, chasing the cats around, etc., but I've also been spinning up something big in my life: a single-member limited liability corporation.
Yes, it's true: I'm now a small businessman. I'm going down this path simply because I think it offers me the best chance to get part-time work from home over the next 15 or so months. I think it also offers me a terrific vehicle to complete certifications and perhaps more education.
Paperwork for registering the LLC went off in the mail Wednesday afternoon. I'm hoping to hear something back in the next few days -- I had to expedite things because of another possible Big Event which I can't talk about quite yet. (Dave Donaldson's not the only one who can be mysterious. Heh.)
I've also been hitting my study material fairly hard. The Transcender tests have been spanking me nastily on everything relating to databases (DataSets, DataViews, Commands, etc.), but I haven't even gotten that far in my books. Attempts at linking ADO.NET and .NET's SQL stuff to my past experience with JDBC and Oracle/Sybase/MySQL will only go so far...
Overall, I'm fairly pleased with my progress, especially since the eight yards of mulch in my driveway are almost gone. Amazing how long it takes to get a couple wheelbarrows of mulch moved when you've got a ten-month-old in a baby backpack and a 4.83 year old running around your feet and wanting a ride in the wheelbarrow every time you move it.
Tuesday, May 10, 2005
Naming Convention Rant
If you're going to write APIs, then you ought to take care as to how you're doing your naming. Go back and read McConnell, Scott Meyers, or any other good author and see how they talk about having constistent naming styles across your public accessors.
Consider then, a couple disconnects in the .NET Framework:
- Form. Activated vs. Form.Deactivate (Tense disconnect)
- Form.Load vs. Form.Closing (Tense disconnect)
- Array.Length vs. ArrayList.Count (Noun disconnect)
Firefox & The Middle Mouse Button
Having problems getting Firefox's middlemouse functionality to work like you want? Check your mouse software's configuration. I had my Logitech's mouse button set to "Double-Click", rather than "Middle Button". I'd been living with that annoyance for longer than I care to admit...
Good Specifics on C#'s "using"
Cyrus's Blather has a great post on why C#'s "using" construct is such a terrific thing. Good in-depth discussion with some pitfalls and recommendations, especially for remaining in compliance with .NET and FxCop guidelines.
Monday, May 09, 2005
Terrific Visual Studio Tips
Sara Ford has a great wealth of tips and tricks for Visual Studio. Killer stuff!
(Via James Avery)
Latest Music Finds
From Grey's Anatomy, the ABC television show about intern docs at a Seattle hospital: the Buffseeds' Sparkle Me (EP). Good alt rock music, great vocals. (BTW, most all the music in Grey's Anatomy is good stuff. You can read music listings at the show's homepage.)
From Austin City Limits, always a terrific source for good music I'd never have found otherwise: Jason Mraz's Waiting for my Rocket. Mraz talked about his music being like Brunswick stew: a little of this, a little of that. It's a serious mishmash of everything from rap to Bob Marley to Appalachian. The guy's got an amazing voice and does neat things with the meter of his vocals. (Obviously, I'm no music major. Sue me if you can't figure out what I'm trying to say, other than I think it's wicked cool music.)
From old memories: The Outlaws' Green Grass and High Tides. This is, to me, by far the best southern rock song ever. Freebird sucks. Big Time. It's recycled bong water dreck. Green Grass and High Tides, however, is killer stuff. Guaranteed to get you pumped up, or your pulse wasn't active in the first place.
Hansleman's List: Aspect/Interface/Object -Oriented Programming
More from Scott Hansleman's list of what great developers should know: "Describe the difference between Interface-oriented, Object-oriented and Aspect-oriented programming."
Aspect-oriented programming looks at how many components or pieces of a system might need to interact. The intersections of these pieces are what are important in AOP. "Crosscutting" is a slice across several units, all of which interact during some operation. The article Discussing aspects of AOP in Communications of the ACM, Volume 44, Number 10 (2001) shows an example of a drawing editor with point and line elements. If the drawing is moved, both point and line elements need to update. A crosscut hits these elements for this event. Other examples might include logging or exception handling which hit several different layers in a system. (Viji Sarathy, Aspect Orienting .NET Components )
Sarathy's article shows using attributes to "dynamically alter the manner in which the code executes", thereby causing events to be fired during runtime when a particular method, field or property is accessed.
Interface-oriented programming is a contract-based approach. Nether side of the interface cares how the other does its work, only that the two sides can communicate via an agreed-upon contract. WSDL-based web services are the prime example of this.
Object-Oriented programming is based on abstraction, encapsulation (data hiding), polymorphism and inheritance. Classes implement these concepts to build objects controlling or implementing a system.
Abstraction allows loose coupling between components by providing a layer between objects so that one object isn't concerned with how the other implements its business rules. (Interfaces, layers) Great stuff when you want to isolate parts of the system so they can be swapped out without killing the rest of the sytsem.
Encapsulation allows abstraction to work by hiding details of a class's implementation from calling classes. (Public vs. private fields)
Inheritance enables base (parent) classes to have common functionality defined in it and passed down to child classes. A Shape class might have a field for color which is inherited by child classes of Square or Circle type.
Polymorphism enables implementation of same-named public fields, allowing different classes to perform different actions on the same call - rendering a Square or Circle object differently in a graphic program, even though they might both be subclassed from a base Shape class. (Overriding)
Sunday, May 08, 2005
Recipe Blogging: Garlic Oil Shrimp
This recipe was inspired by something I've had at the wonderful Winds Cafe in nearby Yellow Springs. The Winds' recipe is based on a Spanish Tapas and is served with loads of garlic toast. I loved it so much I had to play around and see if I could come up with something similar.
I use frozen shrimp in this simply because I live in Dayton, Ohio, smack in the American midwest. Think you can find high-quality, fresh shrimp here? Hah! I use Rainbow extra-large raw, peeled shrimp and am actually very happy with them.
Note: Measurements in this recipe (as with most of mine!) are off the cuff. A swag. An approximation. A ballpark estimate. A guestimation. Doesn't matter and don't wig out about it.
SHRIMP IN GARLIC HERB OIL
3 - 4 c. oil. (See note)
5 large cloves garlic, peeled and sliced
2 springs rosemary
4 strips orange rind (peel only, no white pith)
1 tsp peppercorns
hefty pinch red pepper flakes
~10oz peeled, deveined raw shrimp
- Use a heavy, tall pot or pan. I use an All-Clad 1qt. sauce pan which is tall and narrow. Add the oil, filling no more than 1/3 tall and place over medium-high heat.
- Add the garlic cloves, rosemary, orange rind, peppercorns and red pepper flakes. (Adding these in while the oil's cool means the maximum flavor will get extracted as the oil heats up.
- Wait a few minutes until the oil's moderately hot -- the garlic and other additions should be bubbling nicely.
- Carefully drop in a handful or so of shrimp. Best bet is to use a spider basket or slotted spoon to carefully lower the shrimp into the oil. If using frozen shrimp, raise the heat up to high for a bit to keep the oil's temperature level.
- Cook frozen shrimp for 3 - 5 minutes until thawed and cooked through. Check for a nice pink color and test one of the shrimp for doneness. (Darn, testing the food.) I've never done this with fresh shrimp, but I'd imagine they'd only need to cook for 2 - 3 minutes.
- Remove from the oil when done and set aside. Raise the heat again if needed. Continue cooking the shrimp in batches.
- When all batches are complete, return all to the pan to reheat the entire set. Scoop all the shrimp into a bowl, along with all the garlic and herbs from the oil. Drizzle a hefty amount of the oil over the top of the shrimp.
- Serve with crostini, toast, or just plain. Make sure to try some of the garlic -- it's altered considerably during the cooking and turns quite sweet and delicious.
Saturday, May 07, 2005
Great Study Tool
Yesterday I bought and installed the MCSD study pack from Transcender. It's not cheap, but I used a couple Transcender modules years ago when working through my MCSE and I thought they were worth the money.
The content seems good, and there are a passle of options for narrowing down topics, handy for focusing on weak areas. The flashcard interface is a bit clunky, requiring too many mouse actions to get from one card to another. I'd rather everything was hotkeyed so I could just blast through the cards like the Flash. The reporting's nice, showing a breakdown of the scores in each area.
I took a self-assesment for test 70-316, developing apps in C#, and was pleased at my results. I'm not ready for the real test yet, but I'm not too far away. I've been a bit wigged out at how large a mountain I had to climb moving into the .NET world. This self-assesment eased those fears quite a bit. My OO knowledge, database/SQL experience, and other programming fundamentals were all of use in the test. There were also two RTFQ tricks. One I caught, one was a head-slapper during review. I remember a couple tricky RTFQ items during my MCSE tests; this was just a good reminder that one needs to carefully read and understand the problem before answering.
Kind of like real software development, no?
IAC, it looks like the Transcender tests will be a good tool for me.
OK, I Was Wrong
In a previous post, I complained about Eliot Spitzer's spyware suit, ranting about government intrusion where it might not be warranted. Self independence, action and responsibility! was my mantra.
Jerry Pournell's column in the June issue of Dr. Dobb's Journal (not yet online) made me rethink my stance on adware/spyware/malware. [Good Lord, rethinking your stance! What's next? A "Vote for Dean" bumpersticker? -- ed.] Pournell, if you don't read his columns, isn't exactly a computer user novice. He's also very careful about how he has his security set up and how he surfs the Web.
The short version of the story is that he spent a lot of time recovering his system after hitting a website that installed all kinds of crushing crap on his PC. A heck of an article and, as I said, one that made me rethink my stance on just how bad this stuff can be.
I still don't like Spitzer, though, so there. Thbbbt.
Good resources pointed out by Pournell in his article:
- PC Hell. No, really. Lots of info on removing various nasty viruses, adware, etc. from your system. WinTools is the particular problem Pournell got smacked with.
- HiJackThis. Lists all the add-ons, buttons and startup items added to your system; allows you to inspect and remove items.
- Microsoft's Anti-Spyware beta. I've heard plenty about this, but haven't yet used it -- but it's downloading right now. You have to validate that you're using "genuine Microsoft Windows", maybe Microsoft's version of spyware???
Thursday, May 05, 2005
FXCop Rules for NUnit Development
From the NUnit mailing list, an announcement about FxCop4NUnit, a set of custom FXCop rules for verifying general unit test guidelines and the NUnit framework. I haven't checked this out yet, but it sounds very, very promising.
Check out the project page or the project's Wiki.
Wednesday, May 04, 2005
Dayton .NET DevGroup Update
We had a terrific kickoff meeting today for the Dayton .NET Developers Group, hosted at GDITA's Tech Day. We had 16 folks show up to hear Brian Prince from Quick Solutions, Inc. give a great talk on web apps in Whidbey. His presentation went very well (a couple hangups from VS.NET 2005 Beta 2 aside), and I think we had some great interest from the attendees.
I was pretty dang nervous that we'd only have four or six folks show up after all my legwork, so I was very happy to see the room moderately full!
I also had several good contacts for publicising the group. I'm hoping to continue getting good exposure for the group via several IT community organizations here in Dayton. I've got some numeric goals in mind for membership and attendance in the next year. I set the bar high for myself, partially to force me to get other folks involved.
All the effort I put in for today paid off, I think. Now I need to notch back a bit in order to refocus on my studies. While I've been productive in chasing down some new knowledge, I've still got a lot of work to do before I'm ready to sit down for my first test. Drew Robbins, the regional Microsoft Developer Evangelist, told me something I already knew but was ignoring: "Make the appointment to take the test. That's the best motivator you'll have."
Tuesday, May 03, 2005
Blogs != Books
Bill Wagner writes both about cutting back on blog reading and getting more out of books. He speaks of too much blog content being not having enough detail, lacking editorial review, and having too low a signal to noise ratio. He says he's cutting his blogroll down to 50 from over 200 feeds in order to cut out things like posts on Hitchhikers Guide to the Galaxy.
I'm not particularly bothered by "off topic" posts on blogs. First, using the title of the post, I delete 95% of what I get from SlashDot -- but the other 5% is great stuff to me. Secondly, I do on occasion find very useful pieces of information. Eric Gunnerson's blog pointed me to a great place to find information on headphones as well as the terrific book Take Back Your Life!, a great organizational guide for effectively using Outlook to organize yourself. (I wonder if Wagner's complaint about Hitchhiker was from Gunnerson's posts about the movie...)
Perhaps more important are Wagner's thoughts about low detail and technical errors. I've never thought of blogs as having the answers to all my questions, nor are they my sole source of material when searching for a solution to a problem. I tend to use several sources to cross-check potential answers or solutions. Blogs are one source, Safari Books Online another. Regardless of the source, the real cross-check is testing out whatever I've found.
Bet I didn't make Wagner's cut if I was on his blogroll in the first place. He probably didn't like my Pepper Vodka Chicken recipe post. Heh.
Sunday, May 01, 2005
Hansleman's List: Index of Posts
Here's a list of previous posts covering topics from Scott Hansleman's list of things every great developer ought to know.
Aspect vs. Interface vs. Object Oriented Programming
Listener Processes & TCP Ports
PIDs & Troubleshooting With Them
Strong Versus Weak Typing
DLLs & EXEs
Memory & Processes
Services and Executables
Threads vs. Processes
Initial kickoff post
Hansleman's List: The GAC
More from Scott Hansleman's list of what great developers should know: "What is the GAC? What problem does it solve?"
The Global Assembly Cache allows multiple versions of an assembly to exist and be used side-by-side with each other. Assemblies must be strong-named, then registered against the GAC.
(Side note: Strongly-named assemblies stored outside the GAC require validation each time they're loaded. GAC-registered strongly-named assemblies only get validated when they're installed, so there's a performance gain by using the GAC.)
According to Serviced Component Example from the .NET Framework Developer's Guide, assemblies for server apps must be GAC'd, along with any dependent assemblies they rely on. This is because assemblies in the CAG can't use dynamic registration.
While the GAC may sound like it gets rid of the DLL Hell problem with older versions of Windows (different versions of the same-named DLL scattered all over a system, thereby wreaking more havoc than a baby loose in the cat food), the GAC merely shoves off DLL Hell issues to the developers responsible for building and deploying the software. Dependency issues can cause significant heartburn, as does the policy of how to handle publishing of version updates.
Two good blog posts talk about this. The first, from Hansleman himself post from Hansleman himself talks about how developers get impacted. The second post, from Alan Shi, talks about updating GAC-registered assemblies and has some very good discussion in the comments.
Saturday, April 30, 2005
Hansleman's List: Listener Processes & TCP Ports
More from Scott Hansleman's list of what great developers should know: "How many processes can listen on a single TCP/IP port?"
One at a time.
This was an interesting question for me, simply because I've not done any server-side TCP/IP programming in any language. I've experence with TCP/IP in Java writing to Oracle databases via JDBC. I also have some moderate Oracle DBA experience in installing and maintaining Oracle's listeners, plus I'd dealt with RCP over TCP/IP for communication between Java and C++ programs. All the same this topic got me into some good reading.
I'd never had a good grip on exactly what sockets were and how they interracted with ports, simply because I'd never had to deal with them. Yes, yes, that's a pretty fundamental concept, but I was working in other areas. I found a great tech article in VS's help: Power Outlets in Action: Windows Sockets. The article has terrific descriptions of comms over named pipes and sockets, then talks about how comms over each are built up.
Once again, the two guys at Sysinternals have a killer widget to help: TCPView.
Note that my answer's "one at a time". I didn't find anything on this (didn't look), but I'd imagine one could have several processes sharing a port by queueing up requests and having a flag communicated between the processes to note when one process has freed up and unbound itself from the port, allowing the next process to bind to that port.
Great "World" Genre Artist: Ashley MacIsaac
I ran across Ashley MacIsaac doing a search on iTunes for Celtic tunes. He's worth checking out if you like Celtic-based fusion music. Very good voice with some seriously frantic fiddlin'. You might look into Lehey if you're interested in more traditional Celtic music.
I'm very much not an expert in Celtic music, so please leave a comment and pass on any recommendations you might have -- I'll take fusion or traditional!
Friday, April 29, 2005
Hansleman's List: PIDs & Troubleshooting With Them
More from Scott Hansleman's list of what great developers should know: "What is a PID? How is it useful when troubleshooting a system?"
A PID is a Proportional-Integral-Derivative, a device used to monitor and control temperature in a very precise fashion. PIDs are often added on to home espresso systems by techie espresso fanatics to get the utmost in water temperature stability during a shot. (Google "PID Sylvia" for hits)
However, I think Hansleman most likely means in the .NET context, where PID would be a Process Identifier, a numeric label for each process running in a system.
I'm short in practical experience debugging/troubleshooting in this environment, being in the position of just moving over to .NET development from other domains; however, Google searches brought up a wealth of interesting search hits on using various tools to search out memory leaks and performance issues.
'Akhune's Weblog' has as its single post a handy guide for using several differnet tools to delve into CLR performance issues. See also Rico Mariani's blog post here for similar details with a step-by-step walkthrough.
Useful tools:
- tasklist.exe prints a list of all processes currently running.
- vadump.exe, available here can be used to look at the virtual address space of a process.
- windbg, available here, lets you get down and deep into a process. Looks to be frightenly like ddd and gdb I'm somewhat familiar with from my *nix development stints.
- The CLR Profiler, available here, will let you look at a passle of garbage collection issues, heap states, call trees, histograms for various allocations, and a bunch of other stuff.
- The Runtime Debugger (Cordbg.exe), works for managed code, plus its source code ships with VS.NET under the SDK Tools Developers Guide folder.
Thursday, April 28, 2005
Spyware Lawsuit by NY AG
Eliot Spitzer has just filed a lawsuit against Intermix Media, according to MSNBC. Spitzer's case is that spyware "foul[s] machines, undermine productivity and in many cases frustrate consumers’ efforts to remove them from their computers. These issues can serve to be a hindrance to the growth of e-commerce." Spitzer's suit also complains that spyware "sometimes" omits uninstall routines.
I think companies pushing spyware are scum, but do I really want the government going after them? Where is the legal issue when a piece of software "undermine[s] productivity"? Hell, Outlook and SharpReader undermine the heck of my productivity by making me lose my concentration when new mail or feed posts come in. Know what I do? I myself take action by shutting off SharpReader except for a couple specific times during the day. I ignore new mail and shut off the annyoing "DING!" for its arrival. No uninstall routine available? Check out SpyBot or any of the other free utilities readily available for shooting down spyware. I myself take action to keep my computer in (moderately) good running order.
Why do I want a grandstanding Attorney General to get involved with this? Spitzer did a few good things with his suits against mutual fund companies, but I felt much of his other work has been on less solid ground. I have little doubt that his motivation lies mainly with getting his name in lights to futher his political ambitions.
I was also peeved that the MSNBC report staff couldn't make more than a very cursory effort to contact anyone from the company, or some "expert" who might express a viewpoint on the other side. Shoddy reporting, that.
Rant mode off.
Serenity Trailer Released
As reported on Slashdot and elsewhere, the trailer for Serenity has been released.
Serenity is the feature movie from Joss Whedon's Firefly series, a terrific sci-fi show set in the not-too-distant future. I've blogged about this show before here. It's an incredible series with deep characters, beautiful music, and amazing plotlines. I love Star Wars and am really looking forward to episode III's release next month, but Serenity is what I've REALLY been waiting for. Star Wars is fun fluff with bad acting and bad plotlines; Serenity (if it matches Firefly) should be fun, intriguing and loaded with good acting and plotlines.
Check out the Firefly series DVD collection. It's the best $35 I've spent in a long time.
Recipe Blogging: Pepper Vodka Chicken
This method is one I use often here for an easy dinner: sear cut up chicken in a skillet with veggies & herbs, toss in a hot oven to roast. Change the seasonings, change (or eliminate) the liquor, change the veggies. It's a simple palate to make one's dinner art on.
Pepper Vodka Chicken
1 whole chicken, cut into pieces (Legs off, separate thighs & drumsticks, wings off, breast split and halved) salt & fresh ground pepper olive oil 1/3 c. pepper vodka 1 small onion, diced (young bulb onions, if you can find them, are terrific) 1 small carrot, peeled and sliced into 1/4" coins 1 bunch fresh thyme- Preheat oven to 450F. Season all sides of the chicken with salt and pepper. Heat an oven proof skillet or sautee pan over medium-high heat. (AllClad rules!) Put a pan lid and some baking soda next to the stove. (Fire is involved in this recipe.)
- In a bit of olive oil, lay in all the chicken pieces except the wings, being careful not to overcrowd the pan. Sear for several minutes, turning with tongs, until nicely browned and caramelized. (See note below.)
- Make sure you have the pan lid and baking soda. Pour the vodka over the chicken pieces, wait a moment or two, then carefully ignite the vodka. Whee!
- Let the flames die down, then toss in the onion, carrot and thyme. Stir around a bit to mix, then place the pan in the oven. Roast for 30 - 45 minutes until the chicken is cooked through. A quick-read thermometer poked into a thigh (away from the bone) should show 185F.
Wednesday, April 27, 2005
Word for Windows Trick: Now I Find It...
I've been using Word to lay out a poster for the Dayton .NET Developers Group. Yes, there are probably a lot better ways to do this, but Word is the tool I've got... I figured out everything for scaling a 4' x 5' poster, got the drawing canvas laid out, put all my text and graphics on it, moved and resized everything so I had a spot in the middle for an 8.5"x11" sheet of paper for the current day's topic.
Then I figured out I was completely nuts for thinking I could schlepp around a 4'x5' foam core-mounted poster in my Sebring, already stuffed with car seats and leftover toys.
So I do the math to resize the thing to 2.5' x 3.5', smoosh all the text boxes and graphics to one side so they don't get lost when I resize the paper, resize the paper, lay everything back out (fixing text box font and graphic sizes), get the space in the middle right again, and lean back for a sanity check. Yep, everything looks right. Although...
I see the drawing canvas is still sized for the old paper size. Right-click on the canvas border, enter the new horizontal and vertical sizes, click OK and Presto! the canvas resizes to the new paper size -- and everything on the canvas shrinks in perfect proportion. I flip back to my original document, sized for 4'x5', and try the same thing with its canvas.
Yep, resizing the canvas automatically scales things down, text and graphics objects included.
Holy smokes, what a great trick. It's probably documented somewhere, and I'm sure everyone who's more smarter than me figured this out long ago.
Duh.
Good CSS Resources
I've been spending the last couple days tinkering with the Dayton DevGroup's website, particularly in trying to get a decent layout established. It's been a long time since I've done any HTML work -- CSS was just barely being implemented. Yes, I'm that dusty. (I've done a bit of XSL stylesheet review, but CSS didn't come into play because the XSL techs weren't tuned in.)
Brian Prince pointed out a whole bunch of great CSS resources during his presentation last month at the Colubus .NET Developer's group. Here are a couple I've been making good use of:
- Web Developer for Mozilla. Killer extension for Mozilla. Element outlining, CSS editing, validation, Forms shortcuts, and about a billion other things I haven't looked into yet.
- Cascading Stylesheets, the Definitive Guide, 2nd ed. by Eric Meyer. Terrific intro and reference for CSS.
- www.csszengarden.com. So you think CSS is bogus and you can't do anything creative with it? You'd rather keep your tables? Stop by here and have your eyes opened sumpin' fierce.
- The Zen of CSS Design by Dave Shea and Molly E. Holzschlag. A terrific breakdown of how some of the more fantastic stylesheets at CSS Zen Garden do what they do. Mind boggling.
Knowledge Building & Career Development
McConnell's Code Complete hits hard the importance of continued reading in moving one's career development along. I've been working through books on his reading list even before I found it. This morning I visited Construx's Professional Ladder to see if anything had been added to his list.
I see they've rearranged the entire ladder, turning it into a commercial product via mentoring. The old version's still around and has some very interesting stuff in their pyramid about how few software developers make the effort to keep reading to improve their knowledge.
This surprises me, although I guess it shouldn't. My career's been somewhat scattered around due to my status as a camp follower (military spouse, not the last part of the first definition!) and I've always read various books and magazines to keep improving my knowledge. A couple years ago I worked with a group of developers who had plenty of reference books on their shelves, but nothing for improving their skills and certainly nothing for keeping current with industry trends and standards. Believe me, it showed in the product.
Something else that struck me was one blurb in Construx's description of a mid-level developer: "they have an explicit professional development plan." I think this is pretty critical for anyone in any line of work. You need to sit down regularly and focus on a few goals, both short- and long-term. That's not always easy, but it's extremely beneficial, especially if you're having to move yourself through a difficult period in your career.
Tuesday, April 26, 2005
Hansleman's List: Strong Versus Weak Typing
More from Scott Hansleman's list of what great developers should know: "What is strong-typing versus weak-typing? Which is preferred? Why?"
Weakly typed languages allow assignment and comparison between different types of variables, say between a short int and char or byte and char in C.
Strongly typed languages don't allow such loose play. You have to either recast items, convert, or implement specific code to do such things.
Which is preferred? Heh. Which is preferred in what context? would be the far better question. Developers working on operating system calls or embedded systems would most likely tell you they don't want the overhead associated with strong type checking because they're doing fine-tuning of some complex code. Hansleman's question here is obviously (to my view) biased in wanting the interviewee to take the side that strong-typing is best. That may be the case in some instances, but not all. Strong typing certainly helps to cut down the number of bugs due to its restrictive nature, but it's not the right answer in all cases.
See the terrific discussion on this topic by the driving force behind Python. There's some great discussion in the interview. Pay close attention to the portion about rapid prototyping. Very interesting...
Hansleman's List: DLLs & EXEs
More from Scott Hansleman's list of what great developers should know: What is the difference between an EXE and a DLL?
DLLs contain resources referred to at compile time but called at run time. EXEs are standalone units. (On a side note, static libraries hold resources which are pulled into the target at compile time.) DLL resources can be shared by multiple calling software units. More importantly (to me), DLLs are abstracted out from the calling code. Code using a DLL doesn't have to be recompiled if a new version of a DLL comes out with changes to the non-public implementation, e.g. bugfixes, performance or stability enhancements, etc.
One problem with DLLs, particularly before .NET: DLL Hell.
Dayton .NET DevGroup Update
It's been a busy week for me. I've shoved off most of my studies to concentrate on a couple big things for the Dayton .NET Developers Group.
First off, our group has an official home! New Horizons Learning Center agreed to host our monthly meetings. We'll be meeting at their Fairborn facility on the fourth Wednesday of each month at 6pm.
Secondly, we're going to have our kickoff event on 4 May at the Greater Dayton IT Alliance's Tech Day. This is a great opportunity to show our group's potential while several hundred folks from the local IT community come by. Brian Prince of QuickSolutions, Inc. will be giving a great presentation on implementing web apps in ASP.NET 2.0 (Whidbey). Make sure to drop by if you're in the area -- it's free admission.
Thirdly, I've been learning CSS in order to get the DevGroup's website somewhat in reasonable-looking shape. The page header's logo is my poor attempt at graphic design using a killer picture my brother took during the Garrett Lemire Memorial Grand Prix. You can see some of his photos (with other shooters' too) here.
(On a side note, if you're good at graphic design and would like to donate some time to a good cause (namely making my bad attempt look professional), drop me a line. I'll pay you with some great home roasted coffee!)
Fourthly, I've gotten several speakers rounded up for our group's first few meetings.
- As I mentioned above, Brian Prince will kick us off at the 4 May Tech Day.
- Drew Robbins, Microsoft's regional Developer Evangelist, will speak at our first "regular" meeting -- he'll talk about the many exciting technology releases coming out in the near future.
- In July, James Avery, author of Visual Studio Hacks from O'Reilly, will talk about getting the most out of Visual Studio's IDE.
- Josh Holmes , newly-minted MVP for C#, will give a talk for us in August. Details to follow later.
Monday, April 25, 2005
YASR (Yet Another Starbucks Rant)
I rarely give Starbucks any of my money. I don't like their coffee (overroasted, overpriced) and generally dislike their espresso (poorly pulled shots from poorly-trained staff). Rarely, very rarely, I'll get a latte at an airport when I need a caffeine fix and there's no other option. All the milk in a latte covers up the badly pulled espresso shot, the only reason I get a latte from them. (However, unlike many espresso fanatics, I don't disdain latte -- my daughter and I love to share a "foamy", as she calls them, during the winter.)
Lately I've given Starbucks my money on a couple different occasions because they've got a new, evil concoction: Chantico, drinkable chocolate. This stuff's the closest equivalent I've found to the amazing Mayan Love Ritual served at The Winds Cafe for their special Valentine's dinner.
The thing is, I hate having a cover on my espresso or hot chocolate. Good coffee, espresso, or hot chocolate, like good wine or food, are all great sensory experiences. All the senses get involved, particularly the nose. The great majority of one's taste comes from what your schnozz is pulling in. Don't believe me? Put a clothespin on your nose the next time you're having a nice glass of wine or a good coffee and see how the flavor differs. Then explain to your spouse/date/significant other that you read about it on a blog called FrazzledDad. Heh.
OK, so here's my rant now that I've smacked out three grafs of text so far: Starbucks won't serve you a drink without a cover. Flat-assed won't. I'm not going to be drinking my chantico in my car on my way to work, so I don't need my lap protected. Besides, they only steam the mix up to 135F, maybe 145F at the max, well below scalding temperature. Aside from the aroma issue I rant about above, I also hate the extra waste a cover creates. I figure I need to do my part as a consumer in reducing solid waste if I'm going to be a consumerism-rules-free-market-globalization-pave-the-earth-for-parking-lots kind of libertarian Republican who doesn't want the government telling me how to live my life. (I wear Birkenstocks, by the way.)
I'd really rather not have a cover, so why can't they accomidate me? Liability, most likely. Big firms lose when their legal staff overrules what common sense should dictate: give the customer what they want how they want it.
Rant mode off, and I'll go take my medication: a nicely-pulled shot of Liquid Amber cooked up in my roaster last week.
Columbus .NET Developers Group Meeting This Thursday
The Columbus .NET Developers Group meets this Thursday (4/28) at 6pm. It looks like a terrific session! Follow the meeting by attending the Columbus Nerd Dinner at Hogy's.
From their e-mail newsletter:
Caching in ASP.NET 1.x and 2.0
Speakers: Steven A. Smith, ASPAlliance.com
We are proud to have INETA Speaker Steven Smith speak at our upcoming user group meeting. Please join us for a great discussion and pizza!
ASP.NET includes great support for caching, which can provide great performance boosts to most web-based data-driven applications. In this session, I will cover various caching techniques supported by ASP.NET 1.x as well as tips for how best to incorporate caching into your application design. In addition, ASP.NET 2.0 provides several new caching features which can dramatically improve the performance of your web applications. One of the most exciting features is Sql Cache Invalidation, which allows ASP.NET cached data to be automatically updated whenever data in the database is updated (either at the table leve for Sql Server 7/2000, or at the row level with Sql Server 2005).
Steven A. Smith is president of ASPAlliance.com and AspAdvice.com. He is a Microsoft ASP.NET MVP and a Microsoft ASPInsiders Board Member. He has written two books and numerous articles, and is a regular speaker at ASP.NET Connections, held twice a year. Steve has an MBA and a BS in Computer Science Engineering. He is also an Army Reserve Engineer officer, and spent most of 2004 in Iraq. He specializes in performance and scalability, and is especially interested in how caching techniques can improve application performance. Steve lives in Ohio with his wife and business partner Michelle and their daughter Ilyana.
Columbus Nerd Dinner
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Didn't get enough pizza to eat? Want some drinks to top it off? After the regular meeting, join us at Hoggy's for the Columbus Nerd Dinner. What's a Nerd Dinner? It's a fun, informal gathering of people passionate about technology (http://nerddinner.com/blogs/portland/archive/2004/10/07/223.aspx).
The Columbus Nerd Dinner was started by Dave Donaldson. You can read about the first dinner at http://loudcarrot.com/Blogs/dave/archive/2004/08/30/433.aspx.
Sunday, April 24, 2005
Tech Day Conference in Dayton
The Greater Dayton IT Alliance is hosting their annual Tech Day on 4 May at Sinclair College. The Tech Day has vendor booths, speaker presentations throughout the day, plus several local user groups are meeting there that day. Check out the agenda on the Tech Day link above for more details.
Cost for entry to the Tech Day is free! (Parking at the local lot will run you $2.00.)
Best of all, the Dayton .NET Developers Group will be having their kickoff meeting at the Tech Day!
Hansleman's List: Memory & Processes
More from Scott Hansleman's list of what great developers should know: "What is the maximum amount of memory any single process on Windows can address? Is this different than the maximum virtual memory for the system? How would this affect a system design?"
NT-based OSes split memory into user and kernel space. The amount of memory usable is dependent on the exact flavor of the OS and whether the processor is 32-bit or 64-bit.
In the 32 bit world, XP and Win2K both support 4GB, Win2K Advanced Server supports 8GB and Win2K Datacenter Server supports up to 32GB. XP and W2K's 4GB gets split 50/50, with 2GB being available for a process and the remaining 2GB being held for the kernel. (Note that this last space isn't just for the OS -- all the hardware devices use this space as well, so that killer graphics card you got with gobs of video RAM uses up portions of the kernel space as well. This is the same in 32- or 64-bit procs.) XP Pro and Win2003 Server can use the /3GB switch in boot.ini to make 3GB available to the user side.
The 2GB limit isn't a Windows limit, it's a 32-bit processor limit and hits Linux, Solaris, etc. (I'm sure Macs don't have this problem because Macs are the perfect system and have no limitations whatsoever. Ask any Mac user.)
64 bit Windows supports up to 16 terrabytes (woo hoo, gimme one o' dem filled up!) but still split memory 50/50 between user and kernel. 32 bit applications are still limited to 2GB user space. 64-bit Windows versions don't support the /3GB switch.
So yes, a process's max memory is different than the system's total virtual memory.
System design is impacted if you're trying to create a system using very large data structures, particularly if your software's running on a system with other apps. Your design needs to make careful use of memory to make sure you're not going to run out of virtual memory. Furthermore, since virtual memory is a combination of physical memory and swapfile space, you need to take care to avoid paging -- or at least minimize it as much as possible. This means you should have an understanding of the environment your software's going to run in. At the minimum, you should have good documentation explaining your assumptions, estimated system requirements and projected system impacts.
The first chapter in Bentley's Programming Pearls is a great discussion on careful use of system memory, plus it shows the benefit of ensuring you know what problem you're really trying to solve. The story opening the problem relates a conversation Bently had with a friend. The short version is that what Bently first thought was a simple sort of a large file on disk turned out to be a horse of a different color. The "real" problem required some creative thought to get around memory limitations.
References:
MSDN: Memory Support and Windows Operating Systems
MSDN: Comparison of 32-bit and 64-bit memory architecture for 64-bit editions of Windows XP and Windows Server 2003
Garden Blogging: Surprise Snow
Remember the photo of my tulips from last week? Things have changed just a bit today...
Thursday, April 21, 2005
Great XP Visual Clarity Improvement
Dave Donaldson pointed out the advantages of 1) using a flat-screen LCD monitor and 2) turing on ClearType if you're using Windows XP. #1's out for me until I get back on someone's payroll, but #2 made a terrific difference even with my somewhat older CRT.
You can turn on ClearType by pulling up the Display properties (Control Panel, or right-click on Desktop and select 'Properties'). Select the 'Appearance' tab, then click 'Effects'. Make sure the 'Use the following method to smooth the edges of screen fonts' box is ticked, pull down the associated list and select 'ClearType'. Click OK a couple times to close out the various dialogs and POOF! You're in business.
There's a nice page on Microsoft's site showing before and after shots, plus some discussion on what ClearType does.
Wednesday, April 20, 2005
Excellent .NET Videos
Brad Abrams has two posts pointing to upcoming chats on good .NET topics: Designing Class Libraries, and Code Access Security.
Both posts reference online videos giving some background for the chats. Both videos are terrific study material. Be sure to check them out if you're looking to improve your knowledge in these areas. I'm going to try and make both chats, but the timing's a bit tough. Bother.
Tuesday, April 19, 2005
Garden Blogging: Bleeding Hearts
The last garden blog of the evening: a nice view of one of the three Bleeding Heart plants we've got in our back yard. I've always been amazed that God/Mother Nature/whoeveryouwant created such an amazing plant. Everything in nature has a purpose. Is this plant's purpose nothing more than to make me stop and drink in its beauty every time I'm along our back fence? If so, thanks!
More Garden Blogging: Tulip Blooms
Garden Blogging: Pear Blossom Time
I've been having a long-running labor of love with the two fruit trees in our back yard. When we bought the house the pear and apple trees hadn't been pruned in years and were in horrible shape. Following my neighbor's advice (he grew up on an orchard farm), I schwacked the jeepers out of both during the first winter we were here. I got little or no fruit the second year, which we expected. What I didn't expect was a nasty batch of fire blight, forcing me to cut out even more of the already heavily pruned trees. The pear tree was especially hard hit -- and I discovered pear trees are highly susceptible to fire blight. Bah.
The third year's crop was much better, especially following some advice I read in The Back Yard Orchardist, an organic guide to growing fruit trees. Instead of pruning the pear during the dormant season, I waited until I'd picked the fruit and the tree was starting to idle down. Fire blight hits tender growths; dormant pruning forces the tree to pop out a bunch of new growth during spring -- just what the blight is looking for. The third year's crop had no blight whatsoever.
So there I was after two years of no fruit: a good looking blossom and set. The the squirrels arrived. They ate all but ONE fruit off the tree. I managed to protect that last fruit by using a combination of after shave-soaked rags hung in the tree and rabbit repellent scattered around the base. The sole remaining pear of the third year's crop grew and ripened into a lovely looking fruit.
At least until I knocked it off the tree and ran over it with the lawn mower. Some days my life just sucks.
Last year's crop was a bumper one, but got infested with scales, a nasty little bast I mean bug which eats a bit of the fruit and then causes horrible hard spots throughout the fruit.
So with all that blabber, you may understand why I'm excited about having a terrific bloom on the tree this year.
Monday, April 18, 2005
VS 2005 Beta == Production Kerfluffle
There's quite a stir over at Slashdot regarding Microsoft's announcement enabling VS 2005 Beta2 users to "Go Live" and distribute production apps with VS2005B2.
There are a few sensible comments, but most are are snarky shots about how MS has long been distributing beta software as production, MS's quality is for dog s#it, MS expects customers to pay for their beta testing, etc., etc., etc. Not once in the comments did I see any specific example of why VS 2005 shouldn't be used for production code. Rather it was a lot of spleen-venting on perceptions about Microsoft.
God forbid any of these folks actually look at a fundamental issue: what's wrong with such an action if the software in question is pretty damned stable? Note that I'm speaking (writing!) in very general terms here, particularly since I haven't used VS 2005 in any of its forms. Regardless, look at the larger issue here, not the specific.
Here's the crux of the matter: What's more important for tracking the production-readiness of a software system, a version label or a good picture of the software's stability? Is a beta system with no critical bugs and few major bugs less ready for production than a release version loaded with bugs and shipped off after shoddy design, development and testing?
Dudes, get a grip. Put a cork in it if you don't have specific examples as to why VS2005 B2 shouldn't be released for production testing. Perhaps the 800 pound Redmond gorilla is slowly learning a few lessons about improving delivery of their software.
Sunday, April 17, 2005
Star Wars: Revelations
Via Slashdot, a blurb about a team of volunteers grouping together to produce a 40 minute long Star Wars movie.
I tried getting to the org's website, but it looks like it's getting slammed, as is the only US mirror from the list of mirror sites.
I'm going to be all over this if I can get the thing pulled down!
UPDATE:
This is an amazing piece of work! As the Slashdot article said, it's a very professional-looking production. The special effects are killer and the plot seems to be pretty solid. The acting's not particularly great, but then I thought much of the acting in episodes I & II stunk. Not that I cared much because the films were fun and entertaining, but that's another line.
In any case, it's a great film so far and I'm really digging it. The only gripe I have is that fast forward and reverse seem to be disabled, which really sucks because my download looks like it got corrupted and died after about 18 minutes of play time -- which means I have to sit through the entire session again. That's not entirely bad, but I really do have other things to do today too!
Saturday, April 16, 2005
Media and Aggregation
Jeff Jarvis has a very thoughtful post on how rapidly technology has changed consumption of distributed media.
Jarvis's previous law on distributed media: "If you can't be scraped and then found via a search engine, you're nowhere." Now it's "If you're not aggregated, you're nowhere."
The nail has been hit soundly on the head.
Thursday, April 14, 2005
Dayton .NET Developers Group Update
I've gotten several key things knocked off for the just-starting-to-form Dayton .NET Developers Group. If you're a software or technology person in the Dayton area who is interested in things .NET, please check out the group's website.
Things accomplished in the last day or three:
- Established the DevGroup's website!
- Got a tentative committment for a facility to hold meetings at. More when I get a firm answer.
- Had a friend get me in contact with the Greater Dayton IT Alliance, a local group of IT folks. Terrific networking resource!
- Signed up the second member for the group! (I was first. Heh.)
Tuesday, April 12, 2005
A Lapse in Studies
This last week has been light on posts having anything to do with my MCSD and career-broadening studies. My folks have been in town visiting their grandchildren, so I've been focused on, well, goofing off with my kids and my parents instead of hitting the books hard.
I've also been taking advantage of the beautiful weather we've had here to knock off a load of gardening tasks. My Dad helped me dig up and move several bushes around, including a 300 pound burning bush somewhat like this one. It amazes me that my father at age 79 is stronger than I ever have been or ever will be. I may be over 40, but to me my father's still a giant who walks the land in seven league boots and moves mountains. Yeesh.
I've also been working hard on getting things together for pushing off with the Dayton .NET Developers Group I'm hoping to launch here in the next few months. I'll post up more information and links to the group's website shortly.
I'll start hitting the books hard again tomorrow afternoon. Honest. (What's the forecast tomorrow???)
Monday, April 11, 2005
Dinner Tonight: Roasted Vegetable Soup
It's still cool enough here that soup makes a pleasant dinner. This one's a quick recipe which can get you from start to eating in 30-ish minutes, especially since the cooking is split to get you tasty roasted vegetables while taking care of the potatoes separately.
Roasted Vegetable Soup with Goat Cheese
1 head broccoli 1/2 head cauliflower 2 medium onions, peeled and quartered 4 - 6 cloves garlic, peeled and lightly smashed olive oil salt pepper 4 large Yukon gold potatoes, peeled and cut into 1/2" cubes ~6 c. chicken broth 1/2 c. soft chevre or aged blue goat cheese Good extra virgin olive oil for garnishing- Before any other step, preheat the oven to 500F.
- Cut the stem off the broccoli head. Cut the head into small florets and place in a roasting pan. Peel the woody outer layer from the stem and slice the stem into 1/4" coins. Put the stem pieces in the roasting pan. Cut the cauliflower head into pieces and toss in the pan along with the onions and garlic cloves. Drizzle the vegetables with olive oil, sprinkle with salt and pepper and toss to cover. Roast in the oven for 10 minutes. Stir the pieces around and roast another 10 minutes.
- While the vegetables are roasting in the oven, put the potato cubes into a large stock pot or heavy soup pot. Pour in enough broth to cover by at least 1". Bring to a simmer, lower the heat and cover. Simmer until the vegetables are cooked.
- Add the roasted vegetables to the stock pot. If needed, add more broth to cover the vegetables by 1". Cover and simmer for 10 minutes.
- Puree the soup using an immersion blender or in a regular blender. Add more broth if needed to get a nice thick soup.
- Check seasonings and correct with more salt or pepper if needed.
- Ladle the soup into bowls and spoon a bit of goat cheese into the center. Drizzle a bit of good olive oil around. Serve with garlic crostini, or just any good bread.
Congrats to Josh Holmes
Josh Holmes has been recognized as a Microsoft Most Valuable Player. Josh co-taught a class I took at last year's SD West and was willing to spend a chunk of time shooting the breeze on a vast number of topics with me. He was one of several folks at SD West responsible for me getting excited about knocking my career onto a more exciting path.
What's amusing to folks who know Josh's work (and I only pretend to know him slightly!) is that he's been recognized as a C# MVP -- his real forté is VB.NET! (That doesn't mean MS goofed with their recognition, it means he's even better in another area!)
Hearty congrats, Josh!
(Not only is Josh a sharp, cool dude, he's also a smart coffee fan -- it looks like he homeroasts from Sweet Maria's as well!
Coffee Blogging: Current Beans
I didn't drink coffee until my first winter in Alaska. Suddenly this warm weather California-raised kid thought that hot cuppa looked pretty attractive. Go figure. The coffee I learned to drink was pretty hideous stuff, often sour and bitter after spending eight or so hours simmering down in one of the jugs on the planes I used to fly on. (The big one, not the small.)
I've since moved on to better coffee, and have now been roasting at home for nearly five years. One of the reasons I like roasting my own coffee is that I prefer much lighter roasts than I can get at the Borg-like chains. It's also much cheaper and I can get a vastly wider range of interesting coffees.
I get all my beans and roasting supplies from Sweet Maria's near San Francisco. They're a small shop intensely passionate about finding the best coffee from around the world. They also work hard for finding good fair trade coffee, priced high enough to keep small farmers profitably in business. Check out Sweet Maria's if you have even the slightest interest in roasting your own beans at home. They're terrific sources of great beans, great supplies and even better advice for home roasters.
In any case, here are a few current favorites I've been working through:
- El Salvador Cup of Excellence, Lot #12. SM's is currently out of this, but has Lot #15 and #19 currently in stock. Talk about great stuff! My wife had an El Salvadoran classmate at one of her courses and he was justafiably proud of how El Salvador was pulling itself out of the doldrums into world-class coffee. These Cup of Excellence offerings are just plain good.
- Paupa New Guinea -- Kimmel estate. Wonderful flavors, great body.
- Liquid Amber Espresso Blend. Just incredible stuff for terrific espresso. Great crema, sweet flavors, lots of depth and intensity. I've also tried SM's Monkey Blend, but didn't like it anywhere as much as the Amber.
Saturday, April 09, 2005
Carnival of the Recipes
This week's Carnival of the Recipes is up!
Submit recipes to ''recipe.carnival - at - gmail.com" if you're interested in participating. Also, check here for a list of all former Carnivals. (They're posted on the right sidebar.)
Dealing With Breaking Software Changes
Brad Abrams points to a great resource for defining and controlling changes which break existing software. Changes to any interface are a huge deal to any users of that interface. Careful thought needs to go into what you change, how you change it, and how you push those changes downstream.
Brad's note about Microsoft having formal criteria for what constitutes a "breaking change" should be taken to heart by folks who deal with interfaces. I haven't finished reading the Word document from the link Brad points to, but the first few sections are very thought-provoking and have some great detail.
This sort of stuff isn't ground-breaking concepts, but it's important and should be thought about. Scott Meyers talked about this same sort of thing during his presentation at SD West last year, and of course Steve McConnell hits this hard in his Code Complete, 2nd ed.
Thursday, April 07, 2005
Garden Blogging: Spring Tasks in the Yard
We've had wonderful weather here the last few days and the yard is starting to explode with fresh growth. My New Dawn rose went from budding to a fair amount of leaves in one day. (This isn't a photo of mine, but a nice example of New Dawn all the same. I'll be sure to post a photo of mine after it's reached its glory stage.) The lilacs are showing quite a lot of green and should "bust out" in just a few days.
I've been busy outside in short bursts and have gotten a few big tasks done already:
- Corn Gluten Meal (CGM) applied to the lawn and flower/vegetable beds. CGM is a wonderful, cheap organic product for use as a pre-emergent (prevents grabgrass and the such from sprouting). CGM's high protein content also does a killer job of waking up and feeding the microbial critters in the soil. Said critters do a terrific job of breaking down the mulched clippings from lawn mowings. They also help chew up the nasty clay soil so prevalent here in our area. The leaf compost I've put down on the lawn the last few years gives the microbes an extra slug of organic material to till into the soil. Check out GardenWeb's Lawn Forum and search their FAQ for more information on CGM. (CGM's really cheap here in south-central Ohio.)
- Winter rye turned into the vegetable beds. I seed our vegetable beds each fall with a healthy dose of winter rye. The rye grows like crazy, even through tough winters, and makes terrific green manure when it's tilled into the soil. The rye combined with the decaying pea and bean plants put plenty of great stuff back into the soil.
- Rehung the roses on my southern trellis. I've got two Climbing Iceberg plants, one Maggie, and two Rise 'n Shine plants set in front of a home-made trellis on the southern side of the house. The Climbing Icebergs are more aggressive than I expected, so they require some re-routing and re-stringing of the canes during the early spring when I can easily get to the larger canes. (BTW, I would not recommend Rise 'N' Shine to anyone in a region where black spot is an issue. These little buggers may get shovel pruned in the near future.)
- Got the lawn grass out of my wildflower bed. I put in a semi-large raised wildflower bed a couple years ago. Lawn grass was encroaching into the bed. My daughter and I spent a few hours last week pulling grass out -- we caught it after a rain and the work went fairly easily.
- Mow the d@mned lawn. The evil season has started.
- Get the roses sprayed with Cornel Rose Spray. This terrific formula is a wonderful organic salve for black spot, plus the roses love the seaweed extract. Last year most of my roses exploded in growth after I started using this.
- Get the pear and apple trees sprayed with dormant oil. I had nasty problems with scales in the pears last year. Dormant oil should help minimize that. Last year was frustrating because I'd solved many problems from earlier years (fire blight, hideous pruning by previous owners, etc.) and we had a bumper crop of pears. Unfortunately, the bumper crop was badly infested with scales, making for lots of work cutting around the bad parts of the pears. Boy, did we cherish the pear jam my wife made -- all that hard work made the jam taste that much better!
- Get several bushes chopped out and several others transplanted. We've been gradually redoing landscaping. Last year's work was pulling out several bushes and planting some new region-appropriate lavender bushes. This year it's asters and sweetpeas, plus moving some grasses and bushes around.
- Make a new raised bed for my Baronne Provost rose. This poor rose got planted during my first year with roses (only three years ago!) and it's in a bad spot. I need to get it out of the wind-blocked, semi-shady back corner into a nice spot in the lawn. I've got a nice spot planned out, but need to cut up the grass sod, dig a pit and amend the #%*&@!! clay soil here, plus add in a fair amount of additional dirt to raise up the bed and keep the rose's feet (roots) out of the wet as much as possible.
- Finish cleaning up fall's mess from the various beds. Lots of leftover dead annuals need to get chopped up and added to the compost heap.
Comments Open for Non-Registered Folks
I just realized that comments on my blog were open to only registered/member users. That's changed now! Feel free to leave comments without registering.
(My Mom most likely still hasn't figured comments out, anyway.)
Butt Out, Bozos!
Jeff Jarvis's post on the GOP crockpot meltdown has a line which really strikes home with me: "So butt out, bozos. Build roads. Fight wars. Print money. But stay out of our lives. Got the message?"
The GOP I used to love was all for small, limited government and financial discipline. No longer. The GOP I used to love is now seemlingly giddily in love with hysterical health care legislation, making threatening statements about judges, and passing pork-laden budgets making them the highest spending Congress ever. Sigh.
It's a shame the libertarian party strikes me as a bunch of nutcases. Otherwise I'd change my party registration.
Jack & Suzy Welch on Charlie Rose
I was sitting on the couch folding laundry and turned to Charlie Rose for some distraction. Jack and Suzy Welch were on the show promoting Winning, their new book. (Jennifer Square wrote about the book last week.)
It's late and I don't have energy to catch the entire interview (no Tivo here), but I did want to pass on one quote of his which really hit home. He was talking about travelling around the world for speaches and conferences, and one thing which continued to come up in his sessions were questions from employees on what they needed to do to change their job for the better. Jack said, "We met victim after victim after victim. Don't be a victim!" What I understood his point to be was that these people needed to get off their duffs and take control over the direction of their lives.
Or in my own words, don't just have a job, have a Job.
Wednesday, April 06, 2005
Technorati Searchlet
I'm trying out the Technorati searchlet you may have noticed in the right sidebar. It works fine with the "all blogs" option, but the "this blog" option's busted -- it returns the same hit list as the "all blogs". Dunno if this is a known issue or not. Hopefully I'll hear something back from someone at Technorati. If I don't hear back from them then maybe they need to read Josh Ledgard's tips on customer relations.
Is a Job Just a Job?
A couple days ago I was talking with a friend about my current job situation, or lack thereof more specifically. I told him I'm lucky to be in a position where I didn't have to jump at any job -- I was going to wait and find a job which was in the domain I wanted, appeared interesting, was challenging, and looked to be fun. (And also meets my need for telecommuting for the next year until my wife retires and takes over child care duties.)
His response was to shrug and say something along the lines of "Work is just work", to which I replied "There are jobs and there are Jobs." Confusing semantics aside, I thought his outlook at a job was somewhat sad. Sure, I've had a couple jobs which were not what I wanted to do forever: stifling, booring, unchallenging, and certainly not much fun. On the other hand, I've had several terrific Jobs where I was challenged on a daily basis to learn lots of interesting technology and solve a wide range of really interesting (ok, some painful) problems.
My point is this: Sure, there's a need to meet the bottom line and put bread on the table, but why spend the rest of your life doing drudge work in a position which is "just work"? Why not set long term goals to get yourself into a Job which you enjoy, rather than a job which feeds your stomach but leaves your brain starved? It may not be an easy change, but it's worth it. Life in the lower rungs of Maslow's Pyramid isn't very satisfying in the long term...
Monday, April 04, 2005
Free Wi-Fi in Dayton
I've read several stories about Dayton's effort to make the entire downtown area one free-of-charge WiFi hotspot. It looks like the first phase has rolled out!
Columbus might have the killer cheese shop Curds and Whey at the North Market, as well as incredible ice cream at Jenny's. Cincinnati might have the Reds and Bengals (ok, maybe that's not so great). Both y'all eat your hearts out -- we've got free WiFi!
(via Slashdot)
Saturday, April 02, 2005
Don't Offend Your Customers
I found Josh Ledgard's blog just a couple days ago and it's already struck some great notes with me. His post Five Tips on How Not to Offend Customers has some terrific points.
A few blurbs I found particularly spot-on:
- From Respond Appropriately: "Just keep in mind how insulting it is to answer a customer who is pouring his/her heart into an issue with a paltry, two worded, semi-automated response."
- From Don't Patronize: "Be honest. Be transparent about your progress. Be accountable to commitments you make to customers! Customers are smarter and have more understanding than they probably get credit for."
- From Don't Adopt a "Boolean View" of the World: "Its far too easy, especially in non-face to face communication to interpret a response as someone trying to make you look stupid."
Dinner Tonight: Balsamic Roasted Chicken
Lynne Rosetto Kaspar is a great Italian food authority. She's written several books and hosts "The Splendid Table with Lynn Rosetto Kaspar" on public radio. I've got two of her books on my shelf (The Splendid Table and The Italian Country Table) and love them both. Kaspar's writing is enjoyable to read, and both books are filled with short sidebar stories about how Italian regional cuisine's roots in tradition and history.
The Italian Country Table is particularly interesting because it's focused more on rustic fare of hard-working farmers and country folks. Much of Italy's cuisine, especially rural food, is based on poverty, something Mario Batali always emphasized in his Food Network cooking shows. I grew up as a farm kid, so this topic really interests me.
The following recipe is closely based off her Balsamic Roast Chicken and Potatoes (Pollo Arrosto) from The Italian Country Table. It's quick and simple to fix, plus it's a great foil for a wide range of wines from richer whites to just about any red you can name. We'll most likely pop the cork on a nice Dolcetto d'Alba to keep with the Italian bent.
Balsamic Roast Chicken and Vegetables
(Adapted from The Italian Table)
1 onion, quartered
3 large garlic cloves
1 Tbs dried basil (1/4 c. fresh if you have it)
1/4 tsp dried marjoram
1/4 tsp dried oregano
3 slices bacon [Note: original recipe calls for 1.5 to 2 oz. pancetta, but good pancetta's tough to find here.]
5 Tbs high-quality commercial balsamic vinegar [See note at bottom]
extra-virgin olive oil
salt and fresh-ground black pepper
1 3.5 to 4 Lb chicken
6 Yukon Gold potatoes, scrubbed and cut into 2-inch cubes
8 - 10 cremini mushrooms
dry white wine
- Preheat oven to 400F. Peel and quarter the onion. Take one quarter and mince it together with the garlic, basil, marjoram, oregano and bacon. You want to finely chop all the ingredients and blend them together very well. It helps to pre-mince the onion and bacon, smash the garlic, then add the other ingredients and whack the jeepers out of them with a good chef's knife. (Do your spouse/roommate/partner a favor and clean the floor yourself after this.)
- Mix in 2 tablespoons of the balsamic vinegar, 1 Tbs olive oil, and salt and pepper to taste.
- Cut the chicken down its backbone, lay it skin side up in a large pan (I use a jelly roll pan) and press it flat with your hand. Use your fingers to separate the skin from the flesh on the breast and legs. I have the best luck starting from the neck area and working the breast skin loose, then getting my fingers all the way down into the thigh and drumstick area. There's a tough bit of material binding the skin to the breast right along the centerline of the two breast halves. Use a knife to cut this, then you can get your whole hand into the space. (Well, I can't since I have semi-large hands, but it still helps.)
- Smear most of the onion/herb mix between the skin and flesh, working hard to get the paste down into the leg areas. Smear a bit of the paste onto the outside of the skin. Season the skin with a small amount of salt and pepper.
- Coarsely chop the remaining onion and slice the mushrooms. Mix together with the potato cubes and season with salt and pepper. Drizzle with a small amount of olive oil and balsamic vinegar, then toss to coat. Scatter around the chicken in its pan.
- Roast the chicken for 20 minutes, then pour 1/2 c. white wine into the pan. Cook another 45 - 60 minutes, basting frequently and turning the vegetables. The inside of the thigh should read 175F. Turn on the broiler and cook the chicken right under the broiler for 5 - 10 minutes if it hasn't browned up by this point. Remove from the oven, cover with foil and a couple kitchen towels, and let rest for 5 minutes before cutting into pieces.
- Cut the bird into pieces, place on a platter with the vegetables and drizzle with the pan juices. Drizzle the remaining balsamic vinegar over. (See note.)
Friday, April 01, 2005
Carnival of the Recipes
Beth at She Who Will Be Obeyed runs a great online recipe sharing list: Carnival of the Recipes. You can contribute by posting a recipe on your blog, then sending e-mail to 'recipe.carnival - at - gmail.com'. Check out previous Carnivals at Beth's site -- they're listed on the sidebar.
My "Psuedo-Quick Mole" made it in this week's Carnival. Fame and Riches to follow.
Now Showing: Site Meter Stats
Site Meter gives some nice (free!) stats on how many hits your site's getting. I just signed up for this today, so my hit count is pathetically low.
(It's going to remain low since my Mom is the only one who visits my blog anyway...)
What's the Problem You're Solving?
Kate Gregory has a post from a couple weeks ago covering a couple interesting aspects of a successful project. All her points are ones every developer should be very familiar with, but the post is well written and a good read. Highlights:
- Figure out exactly what you mean by "interop" and what you want your apps to do together.
- Figure out your business problem first, then figure out which technology will solve the problem.
- Vague or unspecified requirements are fine for tiny projects, but Enterprise solutions won't get done that way.
Subscribe to:
Posts (Atom)

