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.
Important note: Most of these tools will require that you've compiled with debug flags. UPDATE: A good friend passed on a recommendation for Process Explorer, another great tool from Sysinternals. I'd seen references to Process Explorer, but hadn't checked it out. I've used RegMon and FileMon from Sysinternals with great sucess, so I'd guess Process Explorer should be just as useful.

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.
Notes: When searing meat, don't play with it. Leave it alone in the hot pan for several minutes to complete its caramelization. Moving it around doesn't help, it just prevents the caramelization process. If the meat is sticking to the pan, give it a minute or two more before trying to turn it or pick it up. The meat should free itself from the pan after a few minutes, assuming the pan isn't in horrible shape and grabs on to everything cooked in it! Bourbon makes a good change from the vodka, as does grappa or marc. Flambeeing food in a pan is a lot of fun, but you need to remember that you're playing with fire. Don't get carried away with the amount of vodka (or other liquor) you pour in the pan. Use the pan lid to cover the flames if they get too high and worry you. Use the baking soda if something dire happens and you need to extinguish a potential conflagration.

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.
I'm sure there are other handy resources, but these are what I've been getting good mileage out of so far.

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.
Fifthly, I've been doing a fair amount of tree shaking trying to get the word out about our formative group. Flyers went out to GDITA and a couple local IT firms. I hope to get more exposure in the coming week in order to prime the pump for our Tech Day event. I'm also having to keep a damper on my enthusiasm. Just because 350 - 400 heads come through the doors at Tech Day doesn't mean they'll all come to the kickoff meeting. Breathe, dude. Lastly, I've also gotten a helluva lot of work done around the yard. No, it doesn't particularly pertain to the .NET DevGroup, but it's another reason (besides diapering our latest tax deduction) why I haven't gotten as much studying done as I'd like. Life goes on.

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 Blogging2: More Snow Shots

A photo of our crabapple tree in bloom, dusted with a bit of snow.

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

My wife planted this wall of tulips a couple years ago and I love it as one of the early spring treats. The bare earth behind is a bed holding several antique roses (Kirsten Poulsen and Marie Pavie) and a nice dwarf lilac, all of which have barely awakened. More on those later.

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:
  1. Established the DevGroup's website!
  2. Got a tentative committment for a facility to hold meetings at. More when I get a firm answer.
  3. Had a friend get me in contact with the Greater Dayton IT Alliance, a local group of IT folks. Terrific networking resource!
  4. Signed up the second member for the group! (I was first. Heh.)
I've got plenty to do in the next few weeks, including lining up sponsors, trying to convince a few speakers to present for us, and shaking the trees for new members. Please drop me a note if you're a tech person in the Dayton area and are interested!

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.
NOTES: If you're using store bought stock/broth, add a bit of thyme (fresh, preferrably) or sage to help richen up the flavor. Food processors don't work well for pureeing soup -- they just whirl the chunks around. Use an immersion blender if you've got one, or a regular blender. I got a Braun immersion blender some years ago (like this one) and I've loved it.

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.
(Disclaimer: I get no compensation in any form from Sweet Maria's. I'm just a very happy customer!)

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.
Still in the works:
  • 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.
Somewhere along in there I need to keep studying for my cert tests and keep shaking the trees for building up a local .NET developers group. (Keeping my kids laughing and my wife happy is stuck in there, too.)

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."
That last one is a sentance everyone dealing with customers (and users!) should sear into their memory. It's one thing to have a crusty personality when dealing face to face, but it's a completely different thing if you're corresponding via e-mail, blogs, wikis or even telephone conferences. Be crusty if that's who you are, but you'd dang well better put a filter on it and be sure you're not pissing off the customer so much that they start looking for someone less given to making them feel stupid. (Even if they are.)

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.)
Notes on balsamic vinegar: Balsamic vinegar can be very confusing to folks. Kaspar has some good text explaining balsamic, as does Marcella Hazan in her Essentials of Classic Italian Cooking. Kaspar says balsamic runs in two categories, artisan-made and commercial. Artisan balsamic is far more than just vinegar. It's an incredible, syrupy elixer which is used in small amounts to lend great depth and flavor to foods. Artisan is also, no kidding, drunk in small quantities from a liquer glass. Commercial balsamic runs the gamut from horrid dreck which should be used only as weed killer in the garden to products completely acceptable for dressing salads or garnishing roasted vegetables with. Personally, I'd break balsamic into three categories: traditional, artisan and commercial. "Traditional" signifies the balsamic has met the very high standards of the balsamic consortiums of Modena or Reggio-Emilia. Look for the phrase "Aceto Balsamico Tradizionale" on the bottle and expect to pay $100 and much higher for a 3-ounce bottle. (Disclaimer: I haven't had true Tradizionale. Yet.) "Artisan", to me, signifies hand-crafted balsamic which is good but may have just missed the consortium's grading cut. These won't be marked "Aceto Tradizionale", but should be marked as products of Modena or Reggio-Emilia. Expect to pay $35 - $60 per 8 oz. bottle for these. "Commercial" in my ranking rates the same as Kaspar's. Trader Joe's has a terrific value commercial-grade, and Mejer's brand is just fine too.

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.
As Glenn Reynolds would say, "Read the whole thing."

Subscribe (RSS)

The Leadership Journey