Thursday, March 31, 2005

Hansleman's List: Services and Executables

More from Scott Hansleman's list of what great developers should know: What is a Windows Service and how does its lifecycle differ from a "standard" EXE? A Windows Service (NT Service, formerly) is a process conforming to Service Control Manager interface rules. (Kalani) It's not just a normal executable started from a command line; a Windows Service must use the Service Control Manager's installer component to register with the SCM. Services are generally console apps with no User Interface. Interactive Services are highly discouraged, especially if running under the SYSTEM context. Services can start before a user logs on, and have a different security context than users. Take care when choosing the account to run a Service. LocalService or NetworkService recommended. (Howard, 2003) (Make sure you read this book for overall security issues, not just Service-related ones.) Services have their own process, or can share a process with other services. A Service can't be debugged directly in Visual Studio using the Run command. A service must first be installed, then started, after which the debugger can be attached to it. (MSDN, Introduction to Windows Service Applications) As for lifecycle, Services are started automatically, manually or programmatically and can be paused or stopped in the same fashion. See MSDN's Windows Service Applications for a good overview and starting point.

User Group Skills Gap

Bill Wagner and Julia Lerman talk about terrific solutions to bridging skills gaps in User Group presentations. (Bill's post here; Julia's here) The prime benefit of good user groups like the one in Columbus (or Cincinnati, although I've never attended it) is the advanced level of material and presenters offered. But what about UG memebers who are entry-level developers, or like myself, moving into .NET development after time in other domains? Bill and Julia's answer is to have a "pre-presentation" before the main meeting. This first session is geared to .NET "newbies" and should dovetail in with the "main" presentation of the evening. I'm working on starting a .NET UG here in the Dayton area. I'm going to keep this in mind as I move forward with growing a local community.

Hansleman's List: Threads vs. Processes

More from Scott Hansleman's list of what great developers should know: Describe the difference between a Thread and a Process? Processes are a single instance of an application. Threads are units of execution within that process. A process has one primary thread, but more may be created by developers. Both processes and threads have assignable priority levels. Windows CE is limited to 256 processes. I couldn't find a trustable source for XP/2003 limits, but I believe it's 64K. The Process class can be used to programatically get information about current processes on a system. Multi-threading brings a host of issues into play, no matter the environment or platform. Synchronization, variable storage and sharing, locking, resource handling, and several other matters need to be addressed. Check out Multithreaded Programming with Visual Basic .NET in Visual Studio Technical Articlesand Threading Tutorial (for C#) in the C# Programmer's Reference Manual. There's also a good discussion of Thread Pooling in the .NET Framework Developer's Guide.

Tuesday, March 29, 2005

Atom Feed Going Away

I'm shutting off the Atom feed from blogger.com in order to channel everything through my feedburner.com feed. Feedburner will support numerous feed formats without you having to do anything. Just use this link for subscribing and you should be covered no matter what format your aggregator uses. Please leave a comment if you have any problems!

Cake Blogging: Great Birthday Cake

My wife asked for this cake for her birthday. It's the Gold Cake with Grandma's Fudge Frosting from Birthday Cakes: Recipes and Memories from Celebrated Bakers by Katherine Kleinman. This is a terrific book if you're a fan of good cakes. Great, mouth-watering photos, and all the recipes we've tried so far have been terrific.

Organizing Your Life in Outlook

Eric Gunnerson writes about a very useful-sounding book in this post on his blog. Take Back Your Life - Using Microsoft Outlook to Get Organized and Stay Organized looks like a pretty good resource for organizing tasks and work habits. It looks like folks with huge e-mail inboxes should benefit from some strategies put forth in the book -- a goal in the book is to have zero items in one's inbox. You read an e-mail and either delete it, delegate it, move it to a task or file it elsewhere for future reference. What a concept. I've got the book on order through the library and look forward to reading it. My e-mail inbox is tiny these days, but I may get some good tips on efficiently handling mail when I do get back into the workforce.

Psuedo-Quick Mole

Mole is an incredibly complex, rich sauce used in Mexican cooking. There are many regional variants (Mexico's cuisine is just as regional and varied as Italy's) ranging from redish pepper-based to green tomatillo-based sauces. It's a labor of love and really takes up a good chunk of a day to get it right. Moles are used to braise beef, poultry and even fish. There's really no quick way to make mole from scratch, but I cut some corners on a batch of mole yesterday used to braise some grilled chicken for tamales. All this work on a Monday? It was a special request from my wife for her birthday. Who am I to refuse? Rick Bayless runs Topolobampo and Frontera Grill restaurants in Chicago, has hosted a great PBS series on Mexican cooking, and has authored quite a few killer books on Mexican cooking. My mole today was based on his "Apricot-Pine Nut Mole" from Mexico One Plate at a Time. My changes and shortcuts may offend purists, but my wife, mother-in-law, and four year-old daughter all loved it. So there. Jim's Shortcut Mole 6 tomatillos, husked and rinsed 1/4 c. sesame seeds 1/4 c. walnut pieces 2/3 c. dried apricots, coarsely chopped 4 dried ancho chilies, stemmed and seeded 4 dried passata chilies, stemmed and seeded 4 dried mulato chillies, stemmed and seeded 4 garlic cloves, peeled 2 sticks cinnamon 10 black peppercorns 3 star anise 5 whole cloves 1 oz. dark chocolate, broken into small pieces 4 c. chicken broth
  • Pierce the tomatillos several times with a knife, place in a pan and broil for 5 to 10 minutes, turning once, until soft and blackened in spots. Set aside, reserving all juices.
  • In a heavy, dry skillet, toast the sesame seeds until browned. Sautee the walnut pieces until browned, then add to sesame seeds. Chop both in a spice grinder and add to the tomatillos.
  • Add the apricots to the tomatillos.
  • Break the dried peppers into flat pieces. A few pieces at a time, toast in the dry skillet, flipping constantly with tongs, until their insides change to a lighter color. [Bayless's method for this recipe has one deep fry the pepper pieces in lard while other moles of his use dry frying. I've done dry frying for most all my moles with no seeming harm.] Don't let the pieces start to smoke. A bit of smoke is fine, but heavy smoke indicates the peppers are over-cooking and will lend bitterness to the mole. Put the pieces in a large bowl and cover with hot water. Put a dish or plate on top of the pieces to keep them submerged. Let soak 30 minutes.
  • Sautee the cinnamon, anise, peppercorns and cloves until aromatic and just starting to smoke. Grind in a spice grinder and add to the tomatillos. Add the broken chocolate pieces to the tomatillos.
  • Add a little olive oil to the pan, then sautee the garlic until golden brown. Add to the tomatillos.
  • After the 30 minute rehydration, use tongs to transfer the pepper pieces into a blender. Taste the soaking liquid. If it's not bitter, add 2 1/2 cups to the blender. If it is bitter, discard it and add 2 1/2 cups water to the blender. Puree the peppers until they're very smooth. Pass through a medium-mesh strainer into a bowl.
  • Without washing the blender jar, puree the tomatillos (and everything you tossed in with them) in the blender until fairly smooth. Add some of the broth if needed to help buzz things up. Pass through the strainer into the same bowl you had the tomatillos originally.
  • Here's where my massive deviations from Bayless's recipe start. Bayless has you sear the chili puree in a hot pot with a bit of oil, cooking and reducing the puree until it's the consistency of tomato paste. The tomatillo puree is added and likewise seared and reduced down to tomato paste consistency. This process takes about 20 - 30 minutes and adds a great amount of depth to the mole. It's absolutely worthwhile, but I was running short on time, so I skipped the searing and just proceeded on.
  • Add 1/2 of the pepper puree to a pressure cooker. Stir in the tomatillo puree and the chicken broth and mix well. Add in the meat of your choice (see note below), cover and seal the pressure cooker and cook on high pressure for 45 minutes.
  • Remove the cooker from the heat, cool off in the sink. Serve the meat according whatever other recipe you're following. Leftover mole is wonderful as a side sauce. It freezes well and will store in the fridge for a week or so.
Notes:
  • I braised some grilled chicken in the mole as a filling for tamales. (Tamales are another long process which I'll post on some other day.)
  • You may have noticed I used only 1/2 the pepper puree. Bayless's stock recipe is a bit hot for my wife and daughter, so I cut the amount of hot stuff in half. The remaining puree freezes very well and is a terrific resource for other cooking. Use a bit of the puree in the next batch of chili you make. You'll find it lends amazing depth!
  • Pressure cookers are great stuff. I use a Fagor similar to this one and love it. You can get results in 45 minutes which taste like you braised something all day.

Monday, March 28, 2005

Smart Testing Posts

I stumbled across Josh Ledgard's blog via James Avery's. Josh Listed a few of his best testing posts here. Josh's posts are from 2003, but they're still must-read for anyone serious about good testing. The "Good Tests for Bad Parameters" is especially killer.

Daily Studies: Hansleman's .NET Developer Knowledge List

Scott Hansleman posted a terrific list of topics great .NET developers ought to know. I've decided to work my way through that list as part of my ongoing studies. My goal is to hit one topic per day and do some actual research to prove or disprove my knowledge. I also want to compare and contrast (shades of my Lit classes!) these topics between .NET and other envrionments such as C++, Java or perhaps even Perl. Researching to confirm what I know and don't should lead me down some interesting paths via the resources I'll use. I'll post references to what I'm finding along the way. Comments will be welcome, but I'm not sure how many I'll get since my Mom's the only one reading this blog. Heh. More on a daily basis as I work through the list! UPDATE: Fixed the busted link above.

Recent Music Finds

A couple good music things I've found in the last week:
  • CD 101's stream. Great alternative radio station in Columbus.
  • Radio Paradise's stream. Nice mix of various rock, some alt but nothing seems too far out on the edge.
  • Dainbramage's stream. Mainstreamish mix, good stuff.
  • Radio.Wazee's stream. Best stream listed for my tastes. Responsible for the next two finds.
  • Speaking Confidently from the Cowboy Junkies' Lay It Down. I've always been struck and haunted by Margo Timmins's voice, plus the rest of the music's good as well. I've got their Black Eyed Man album and may have to chase down this one as well.
  • Nil Lara's self-titled debut album. Great rock with Cuban and Venezuelan influences. The bio on his website makes for an interesting read. Amazing how anyone who studied microwave analysis can create such emotional, passionate music.

Sunday, March 27, 2005

Technology: Broadening My Music & Views

My wife spoiled me with a terrific gift this last Christmas: a 20GB iPod from HP/Apple. (I note they're no longer available. No clue why, but other 20GB iPods are still listed on Amazon.) I've found myself rediscovering great music I'd forgotten I had, including Warren Zevon, Midnight Oil, The Call, Delbert McClinton, Desperado from the Eagles, John Hiatt, and some old Santanna among others. I'd forgotten about all these CDs gathering dust on the rack across the room. Forgotten, that is, until I got the iPod and started loading all my CDs into iTunes's library where I can easily and quickly listen to all these while working on my computer, in my car or out for my infrequent jogs. I most likely would never dug through the CD rack digging out these unless I'd gotten the iPod which can hold all the CDs I own, plus more I can download. Also, thanks to this amazing little widget I've begun to seriously broaden out the types of music I listen to. James Avery's Top 10 list for 2004 was a good asset, and he was nice enough to point me to Pitchfork, an interesting-looking source of music reviews. I'm also enjoying streaming music from alternate sources such as Energy X, Radio Paradise, DainBramage, and a couple others. I wouldn't ever had exposure to these without hooking up to this neat, new technology. On a similar but different line, technology's responsible for me broadening my views. Blogs and commentary sites have provoked me into reexamining some of my fundamental beliefs in politics and society as a whole. I won't bore the two readers of my blog with the details, but suffice it to say I've moved to a more libertarian position on many things. I wouldn't have made this change without reading sites like National Review Online, Instapundit, Daniel Drezner, Neal Boortz, and a few other political/social commentary sites/blogs. All of which brings me to what I think is a silly post by Andrew Sullivan. Sullivan says that "Americans are beginning to narrowcast their own lives. You get your news from your favorite blogs, the ones that won't challenge your own view of the world" and goes on to say much the same about music. I find this particularly ironic since Sullivan was responsible for me changing my views on homosexuality. (My views aren't easily distilled into a four word phrase which will fit on a bumper sticker, so I won't bore you with a long discourse right now. Maybe later.) Reasoning like this is exactly why I stopped reading Sullivan's site long before the last election. (I didn't find out about his 20 Feb post until weeks later through another news source.) Certainly many folks use the incredible advances in technology we're seeing to consume the same sorts of news and music that perfectly line up with their existing views. That said, I think that most folks view these exciting changes as enablers for them to expose themselves to new things. I think technology holds incredible potential for exposing consumers to a much broader, more accurate picture of the world than we're able to get now from current media. Better informed and better educated members of society are a Good Thing. Maybe I'm too optimistic and naive, but that's how I see things. So there.

Friday, March 25, 2005

Wednesday, March 23, 2005

Great Interview with Mono's Founder

O'Reilly's OnDotNet.com has a great interview with Miguel de Icaza, the founder of the Mono project to bring portions of .NET to the Linux platform. De Icaza hits many interesting topics including Mono's use for providing good class libraries in the compact framework environment, cross-platform issues, component development with C# in Mono, etc. Take a gander at the article. It might stimulate a few grey cells and remind folks that Microsoft's OS isn't the only platform for .NET. (Via Slashdot)

Tuesday, March 22, 2005

For My Buddy Scott:

Spam! (An old, good friend and I have a long-running banter. If you haven't seen Ford Fairlane, give it a try, but not if Andrew Dice Clay offends you.)

Monday, March 21, 2005

New Speakers!

Today I picked up some Logitech X-230 speakers for my computer. They only cost $55 at Best Buy and I'm really pleased with their sound. They're loud enough that I'm able to listen to music in the kitchen while streaming audio or my iTunes is playing on the PC in the next room. Nice thumping base from the subwoofer, very balanced sound from the speakers, especially after tinkering around with iTunes's equalizer. Good stuff! I'm listening to some Baba O'Riley right now and diggin' it a whole lot. My eight month-old son seems to like it as well, although he's just as interested in chewing on the tires of his toy trucks, so that may not be a great indicator. What's surprising is that I didn't do my usual anal-retentive extensive research and painful pondering before spending my hard-earned discretionary funds. I've known I wanted some decent speakers for the computer in my work area, and I'd looked a bit at Logitech's setup before, but I didn't troll epinions.com or consumerreports.org before dropping my money today. Boy, next thing you know I'll be doing something crazy like buying King Arthur flour when it's not on sale. Wait, I do that all the time.

Thursday, March 17, 2005

Change Is Good Update

My post "Change Is Good" prompted a friend I'd worked with to send me a good-natured mail pointing out that he was one of the Good Guys and not part of the conspiracy to kill off a great system. Re-reading my post, I realized I left off several important notes regarding my work, specifically in the company I was with from August, 2003 until last Friday: I did indeed work for a couple great customers who wanted to get the right thing done. Unfortunately, they were handicapped by politics far outside their control. Like that's never happened to anyone else before... I was indeed able to briefly work on a couple amazing projects with some downright brilliant folks. One set of folks were designing and implementing some incredible electronics and computer hardware to read data from aircraft avionics buses. It amazes me to be around folks who casually talk about building their own circuit boards to handle network or modem interfacing. Whoof. Another group of folks were implementing binary translation software to host compiled executables on completely different architectures and operating systems. These guys were actually remapping and reordering processor instruction calls to eke out the utmost in performance from the rehosted application. Falling to my knees while crying "I'm not worthy" just doesn't seem sufficient. Unfortunately, my opportunities to work with (and more importantly learn from) folks like this was limited both by my requirement for telecommuting as well business opportunities in the company which just didn't pan out. My post was far from sour grapes; rather it was an affirmation of looking forward to the chance to change direction in my life.

Near-Term Goals

Goals are important things. Without them, life is far too unfocused and too much time gets wasted. Without further ado, here are several of my near-term goals for the next couple months:
  • Re-read Lord Of the Rings.
  • Re-read The Hobbit.
  • Watch the entire Firefly series again. You're really,REALLY missing out on something if you haven't seen this series and you're a science fiction fan. Terrific plots, deep and complex characters, plus it's a lot of fun to watch. Science fiction meets westerns and all in a realistic, entertaining fashion. Too bad the dorks at Fox cancelled the show in its first season.
  • Read Lowy's Programming .NET Components.
  • Work through the problems in Bently's Programming Pearls.
  • Knock off at least one MCSD test by the end of April.
  • Get my rose garden in shape.
  • Take the next step in squirrel-proofing our garden shed. (Or at least limit the damage the little bas#$%@s can do.)
  • Put down Pergo flooring in our computer room.
  • Try and get my eight month-old son to laugh more when I tickle him then when his sister does. I can't believe I'm jealous of my little daughter, but there you have it.

Wednesday, March 16, 2005

Bread Blogging

Yesterday I baked a great loaf of bread: Multigrain Bread Extrordinaire from Reinhart's The Bread Baker's Apprentice. This bread is a mix of corn meal, oats, wheat bran, brown rice, and flour, sweetened with just a bit of honey and brown sugar. It's made using the "soaker" method, where some of the ingredients (corn meal, oats and bran in this case) are soaked in water overnight to activate some of the critical enzymes which deepen flavors. Also, I used a cup of amaranth flour in place of regular flour, my first use of this grain ever. End result? Killer bread. The corn meal, even though it was softened via the soaker, still lent a noticable crunch to the loaf. Plenty of rich flavors, a beautiful crust and dense crumb. It makes wonderful toast, too. Reinhart's book really is a terrific resource if you're a bread lover. The opening chapter on the intricacies of what happens during the bread making process may seem intimidating, and the recipes themselves seem complex, but everything actually makes sense after you've read it and have baked a loaf or two. The instructional style of the book is a great help, too -- but this isn't a surprise since Reinhart is a long-time baking instructor. Most importantly, the recipes work and make great bread! (Unlike Leader's Bread Alone, which seems to be full of tempermental or flat-assed wrong recipes.)

Friday, March 11, 2005

Change Is Good

On his blog, Drew Robbins talked about inviting change into his life, resulting in a terrific job opportunity for him. Alex Lowe made a big job change to help him focus on his family life. Change is sometimes negative, but I'm a firm believer that one's attitude frames how change will impact their life. Enough Dr. Phil-like blabber. I'm happily entering a major change in my work situation. My employer since August, 2003, decided to change their telecommuting policies, eliminating my opportunity to work from home while juggling child raising needs. I was forced to chose between putting our kids in daycare all day, or leaving the workforce until I could find another position with the same flexibility. The choice really wasn't all that tough. Today was my last day of work and I'm honestly looking forward to the next several months. I'm leaving a position which had offered me few chances to do interesting technical work: For the most part I'd spent the last 18 months doing proposals, white papers, customer support and very rudimentary process analysis work. Before that, I had a miserable two years of test engineering and trying to manage customer relations for a group of developers and customers who were between them conspiring to drive an amazing system into the ground. All in all, booring and miserable stuff for someone who is more interested in actually creating things. This break in work gives me a chance to update my technical skills and get more involved with the developer community. I'm hoping to even get a .NET users group started in my area. During that time I'll continue to search for a neat job which will let me do telecommuting, at least until my wife retires in 18 months and I can move to a full-time, onsite position. Yes, I'll miss access to some neat tools and hardware provided by the company, but I've been out of work and equipment-poor before and still managed to finish off an MCSE despite that. Most importantly of all, this break gives me a chance to recharge my batteries and reconnect with my family. Change. It's a Good Thing.

Thursday, March 10, 2005

The Power of Brainstorming

I've been working my way through The CRC Card Book, a great text on using index cards, brainstorming and role play to find and refine classes in a system you're designing. The brainstorming section has some key points on facilitating good brainstorming sessions, plus there are three very good scenarios or case studies in novella form showing how a well-moderated set of sessions might run. I've had access to the Rational Unified Process (RUP) for the last 18 months and have been a fan of some of detailed guides they've got. Brainstorming plays a large role in things like Use Case Workshops or Class Discovery Workshops. I had very good success using their Use Case Workshop as a guide when trying to flesh out a possible system I was working on -- and that was using that guide by myself in a single-person brainstorming session! RUP can be a ponderous, confusing system to work under, but the RUP toolset really is a great reference to have around. (Aside from it's stupid dependency on a very specific JRE version. I've got JRE 1.4.5 loaded and RUP will only run with 1.4.0. Thanks, dudes.) My jobs over the last few years have kept me out of any real brainstorming sessions (whiteboard BS sessions with my current boss excepted) and I'm beginning to realize how much I've missed them. There's something incredibly motivating about having participated in a successful brainstorm session with a small group of folks. I also admire great facilitators/moderators/leads who keep things rolling with artful skill. Hopefully I'll find opportunities to get more involved with this kind of neat creativity in the future.

Subscribe (RSS)

The Leadership Journey