Lasagna

Noodles, Sauce, Meat, Cheese.  That’s pretty much all it takes to make a delicious lasagna.  I take a couple short cuts along the way, but for the most part I’m pretty pleased with what I was able to accomplish here.

Noodles

I use store bought noodles that I cook extra al-dente.  I’d love to be able to make my own noodles, but I have two kids so time is pretty short.

Sauce

I use a doctored up store bought sauce.  It consists of 2 jars of my favorite sauce, 1 can of whole peeled tomato’s that I then dice, diced onion, diced green pepper, crushed garlic, variety of Italian spices, and a bunch of crushed red pepper flakes.  I cook the onion, pepper and garlic with some olive oil then add the rest of the ingredients, letting them simmer for about an hour

Meat

Now here is where I really differentiate myself.  I use two meat layers, one is a layer of sliced homemade meatballs, and the other is a layer of un-cased Italian sausage (broken into little chunks).    In the past I’ve used standard ground beef instead of the homemade meatballs, but the meatballs really made a difference on the finished products.

Cheese

Nothing magical here.  1 part grated mozzarella cheese, 1 part grated parmesan cheese, 1 part ricotta cheese.  I mix all these together with some diced parsley and some Italian seasonings.  Then I add eggs to this mix until it takes on a slightly orange tint to it.

Putting it all together

Cook the homemade meatballs

IMG-20111117-00156

IMG-20111117-00157

Smear butter on glass pan then put down a thin layer of sauced followed by a layer of the al-dente noodles, slice meatballs and layer on top of noodles.

IMG-20111118-00158

Cover with a layer of the sauce, another layer of noodles, a generous layer of the cheese mixture, and then a layer of the sausage.

IMG-20111118-00159

Cover with a layer of sauce, another layer of noodles, and a thin layer of sauce (I had a spare pan in the background because I always make two lasagnas, the second I usually freeze for a week or two).

IMG-20111118-00160

Refrigerate overnight, then cook at 350 for around 2 and a half hours coved with tin foil.  Spread some shredded mozzarella and some dried parsley and let cook uncovered for another 15 minutes

IMG-20111119-00165

Serve with garlic bread.

IMG-20111119-00166

Also serve with extra meatballs.

IMG-20111119-00167

Using PowerShell to run SQL

This morning I read Scott Hanselman’s 2011 Ultimate Developer Power Tools and I was again reminded that PowerShell is an essential development tool that I haven’t learned.  I’ve given PowerShell a try on a couple different occasions all of them unsuccessful.  Today I have vowed to give PowerShell two hours for one final try.  The first thing I’d need is some concrete problem that I can use PowerShell for to improve my productivity on a daily basis.  Thinking it through I noticed that a couple times a day I find myself wanting to execute a simple piece of SQL.  Typically that workflow will look like.

  1. Launch SQL Management Studio
  2. Write and execute some SQL or run a stored procedure
  3. Close SQL Management Studio

That is pretty heavy handed way to just run some simple SQL, so I decided to give this a try doing using PowerShell instead of SQL Management Studio.

Install PowerShell

Windows 7 comes pre-loaded with PowerShell so I can skip that step.  If you’re not on Windows 7 you can find the download guide on the Widows PowerShell Blog.

Install PowerShell Community Extensions

Scott had a link to the the PowerShell Community Extensions CodePlex project, and their installation instructions were pretty straight forward.  However, I did run into one gotcha on this step.  After downloading the zip file for the installation I didn’t change the security attribute to trust the download.  That step is a must or you’ll run into trust issues when running the extensions.  To be fair the download guide on the CodePlex site pointed this out, but I was moving fast and skipped for no good reason.

Import the Community Extensions every time I run PowerShell

I simply added “Import-Module PSCX” as the first line of my Microsoft.PowerShell_profile.ps1 file (I had to create this file and place in <MyDocuments>\WindowsPowerShell\).  My full Microsoft.PowerShell_profile.ps1 is available later in this post.

Write functions allowing for easy database access

This was by far the most difficult step.  I’m not very accustomed to the PowerShell syntax and I found my self trying to write C# most of the time.  That didn’t work and caused me a lot of pain.  I followed some examples on the web, fumbled around for a while, and finally got it all working.  Microsoft is very upfront that PowerShell is a new language their getting started guide (read more here), but I still struggled with this.

Execute a command and return a dataset:

Function ExecuteDataSet([string]$connString, [string]$commandText)
{
    $conn = Get-AdoConnection -Provider $Provider -ConnectionString $connString

    $ds = Invoke-AdoCommand -ProviderName $Provider -Connection $conn -CommandText $commandText -AsDataSet

    $conn.Close()
    $conn.Dispose()

    return $ds
}

Create a simple sp_help wrapper

Function sp_help ([string]$connString, [string]$name)
{
    $ds = ExecuteDataSet $connString "sp_help $name"
    $ds.Tables[1] | Format-Table Column_Name, Type, Length, Prec, Scale, Nullable -AutoSize
}

Create a wrapper that sends in my dev connection string

$ConnectionDev="Data Source=(local);Database=my_db;UID=sa;PASSWORD=XXXX;"

Function sp_help_dev ([string]$name)
{
    sp_help $ConnectionDev $name
}

See them in action

The result were some simple functions that I could call for simple db queries.   In the below example I am able to find out about the columns of a table, and run a SQL statement to aggregate some statistics (look in full ps1 file for exec_sql functions).

RunningSQL_thumb[5]

Summary

All and all I’m a lot happier with this attempt at PowerShell then I have been in the past.  I know that I’m only scratching at the surface of its capabilities, but by spending 2 hours with PowerShell and learning some of these simple capabilities I can defiantly speed up this common daily activity.

The full text of my Microsoft.PowerShell_profile.ps1 file could be found here.

Spicy Grilled Shrimp

One of the many benefits of the weather being warmer then usual during a Chicago November, is grilling during football season.  I had some people over to my house to watch the Bears game (Detroit @ Chicago), and I decided to grill up some shrimp for the first quarter.  I found this online, http://allrecipes.com/recipe/thai-spiced-barbecue-shrimp/, and figured it was worth a shot.

I used pre-cooked, detailed, deveined, shrimp.  This did two things.  First the prep time was significantly reduced and I didn’t have to clean a ton of shrimp.  I used about two pounds of 35 count shrimp so this probably saved me about 20 minutes.  Second the cook time was reduced and the shrimp turned out a little too chewy.  I ended up doing a minute and half per side on a 500 degree grill.

Despite my usage of the pre-cooked shrimp these tuned out great.  The sauce was excellent and folks were dipping bread into it after we ran out of shrimp.  Defiantly recommend if you’re looking for great shrimp that isn’t just fried or swimming in butter.

Here is a photo when they first hit the grill, and then once they were cooked (sorry a little blurry on the cooked side):

Uncooked      cooked

Tags : , , ,

What to Expect

When I decided that I wanted to start writing this blog I wanted to make sure that this wasn’t something that simply fizzled out after a couple of blog posts.  For me that meant setting expectations about what I will be blogging about and how frequently I will post new blogs.

What will I blog about

I’m a Software Architect developing large scale n-tiered business applications for the telecommunications industry.  Many of the business problems that I run into there don’t translate well into a readable blog, so I’ll likely stay away from those topics.  Some of the technical challenges I run into there are fairly interesting so I hope to translate those experiences into blog posts.

I manage a small business for my wife and myself.  That business does consulting, sales support, and maintains a counter top measuring application, written in .NET, for Laser Products.  This seems to be a good source of blog material for me.  Working with a client, getting feedback from customers, managing the business side of things, and working through the software development of this application are all things I plan on discussing here.

I’ve been married for a little over 5 years to my wife, Tracy, and we have two boys, Luke and Miles.  While there is no shortage of happenings in this area of my life, communicating these to the outside world seems much better suited for Facebook or Twitter.  These happenings may leak into this blog, but I’d expect them to be few and far between.  Follow me on Twitter or friend me in Facebook if you’re interested in learning more about this aspect of my life.

I wouldn’t call it a hobby, but there is one thing that I’ll stay up late or ignore the wife/kids for an opportunity to do, Cooking.  I love creating great food, and I love eating out (most likely because my daily meals involve timeouts and being climbed on by a two year old).  This defiantly has taken a back seat with the kids, but when I have the chance I still love to take a couple hours a cook a meal, or enjoy a dinner out with my wife. Things like meals that I’ve had or meals that I’ve created I plan on writing about here.

How often will I blog

I set a simple goal for my self regarding the frequency of my blog posts, one blog post every two weeks.  Managing my career, spending time with the family, and keeping the house together consume a considerable portion of my day, and all of those things are extremely important to me.  I figured that two posts a month shouldn’t disrupt those activities to much and still give me an opportunity to blog over 25 times during the first calendar year.  Who knows, maybe I’ll surprise myself and post these blogs more frequently.

Introduction

A couple weeks back I decided that I am going to try and step outside my comfort zone and attempt to improve my written communication skills.  I thought about this for a little while and decided the best course of action for that would be to:

  1. Purchase a web domain and a hosting package
  2. Set up a blog on the newly created web site
  3. Create several pages to help my online presence
  4. Post a blog every two weeks

The first portion was pretty simple.  Navigate to GoDaddy.com and purchase a URL and some hosting.  GoDaddy makes it pretty simple and I’ve been purchasing URLs from them for several years so it was a pretty easy process.

Setting up the blog was a little more difficult.  The hosting package that I purchased from GoDaddy allowed me to pretty easily configure a WordPress blog and get it up and running, but there were several tweaks that were then needed.

  1. Find a theme that I like (found mine here)
  2. Install the theme on my web server
  3. Modify the header and footer with my personal information 
    1. Add author tags (thank you Scott Hanselmen – authorship)
    2. Modify the copywrite information
  4. Ensure that I can post to the site with ease

By far this last step was the most difficult.  I wanted to be able to write my articles while offline and then post them onto the website.  A quick search netted me Window Live Writer as a offline blog editing tool.  Because I’m a software developer much of this blog will be related to my experiences there so I wanted to ensure I could share code by publishing to the blog.  That required a SyntaxHighligher WordPress plugin to be downloaded locally, ftp’ed it up to the webserver, and then activated in the addins dashboard for the blog site.  Finally I needed Windows Live Writer to be able to let me add code content.  That required searching the internet and finding the PreCode Snippet addin which handles this portion nicely.

Now that I have the website up and running I’ll be able to focus on my original goal of writing and publishing that content.

Tags : ,