
Wednesday, April 09, 2008
I just finished installing my new computer parts:
that's all I needed since I already have a GeForce 6800 and 8600 ( I use these to drive 3 monitors, 2x20” widescreen and a 30” widescreen center). I also have 4 250GB 7200rpm drives which I run in a RAID0+1 configuration.
I'm currently installing Windows Vista64. Wish me luck.

Thursday, March 06, 2008
Hey everyone... My comment notifications are broken, so I'm sorry if you posted a comment and I didn't reply.
Oh, and Joe, no I'm not planning on going to any VS Live events. Are you? If so, which ones? Maybe I'll change my mind.
I had to do a deep traversal of a simple parent/child hierarchy in SQL today. I found an old article that explained a very easy method. I made a few tweaks, and since my base table is so small, I ended up creating the hierarchy as a temp table in my sproc. If it was larger, I'd create the table ahead of time.

Monday, February 25, 2008
I like good beer.
In fact, most people consider me a beer snob. They are probably right, but I can explain why.
Most people I talk to start drinking beer when their dad's leave a can laying around. Then in high school and college they drink whatever they can lay their hands on. The cheaper the better.
This is where I'm different. I never drank beer until I was about 28. The beer I first started drinking was a Hefeweizen. I then moved on to some Belgian Ale's. I never knew what crap beer tasted like. I can still remember the first time someone offered me a Bud Light. I can remember thinking, “This is beer? It tastes more like water with a little beer flavoring.“
So yes, I am a beer snob. I might as well celebrate it. So I've begun a journey to taste a lot of different beers. So far I have focused on the seemingly endless offerings from local micro-breweries found in Michigan. Mind you, I still consider myself a novice in this arena, but I figured it may be interesting to post my current favorite five brews:
5) Arbor Brewing Company's Old 22
4) Arbor Brewing Company's Red Snapper
3) Bell's Oberon
2) Bell's Hopslam
1) Bell's Double Cream Stout
So, yes I am a Bell's fanboy. I am trying to break out of that and explore new brews. Please, if you have any good suggestions for me, drop me a line and let me know what to try and where to get it.
Cheers.

Friday, January 25, 2008
Ok, so I give you permission to laugh. I haven't posted in a very long time. This is mostly due to the fact that I forgot my password and it has never been urgent enough for me to get around to finding a way to reseting it. That's a pretty bogus excuse I know... but hey, I'm back.

Saturday, September 15, 2007
I pulled a lot of hairs out of my almost bald head today trying to figure this out. I have a layout to create in WPF which involves a top panel and a bottom panel. Both the top and bottom panel can expand and collapse. If I collapse the top panel, the bottom panel should fill the remaining space. If I collapse the bottom panel, the top panel should fill the remaining space.
The only way I found to set what is going to fill remaining space with the dockpanel is the LastChildFill property. This is a boolean which determines if the last child should fill the remaining space or not. This, of course, doesn't work for me. I want to be able to specify which child will fill. I need the top to fill when the bottom is collapsed, and the bottom to fill when the top is collapsed.
There may be a better way to do this than my solution, but since I'm constrained with only the last child being able to fill, I had to change the order of the items in the children collection.
dkpRight.Children.Remove(child);
dkpRight.Children.Add(child);
So, when the top collapsed I would remove the bottom and add the bottom thus making it the last child. Likewise, when the bottom collapsed I remove the top and add the top.
Seems like a hack to me, is there a better way?

Tuesday, August 14, 2007
I spent entirely too much time getting this to work. I read article after article trying to understand everything. All the articles had some good info, but it seemed none were complete. I'll try to get some time to write up a complete post about this, but for now I'm going to put my notes here.
1. Creating the certificate for development using the makecert tool.
A) Make the CA certificate:
makecert -sr LocalMachine -ss My -n CN=Fanzoo -cy authority -r
B) Make the service certificate
makecert -sr LocalMachine -ss My -n CN=FanzooService -ir LocalMachine -is My -in Fanzoo -sky exchange -pe
C) Move the CA certificate into the trusted root certification authorities using the local machine certificate snap-in for MMC
D) Move the main certificate into the trusted people using the local machine certificate snap-in
E) Use the Certificate Tool (download WSE 3.0) to find your certificates and grant read access to the ASPNET account.
2.) Setup the service config
Here's an example service/web.config. NOTE: This uses MTOM for encoding. You probably don't want this unless you are going to transfer big binary data like I am.
<connectionStrings>
<clear />
<add name="server" connectionString="server=local);database=ServiceRoleProvider;user=user;password=blah;" />
< SPAN>connectionStrings>
<system.web>
<membership defaultProvider="DefaultMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="DefaultMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="server"
applicationName="testService"
minRequiredPasswordLength="5"
minRequiredNonalphanumericCharacters="0"
enablePasswordRetrieval="false"
enablePasswordReset="false"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed"/>
< SPAN>providers>
< SPAN>membership>
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
<providers>
<clear />
<add
name="DefaultRoleProvider"
type="System.Web.Security.SqlRoleProvider"
applicationName="testService"
connectionStringName="server" />
< SPAN>providers>
< SPAN>roleManager>
< SPAN>system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="DefaultBehavior" name="ServiceWithMembership.HelloWorldService">
<endpoint binding="wsHttpBinding" bindingConfiguration="MyBinding"
contract="ServiceWithMembership.IHelloWorldService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/ServiceWithMembership/HelloWorld.svc" />
< SPAN>baseAddresses>
< SPAN>host>
< SPAN>service>
< SPAN>services>
<bindings>
<wsHttpBinding>
<binding name="MyBinding" messageEncoding="Mtom" maxReceivedMessageSize="104857600">
<readerQuotas maxArrayLength="2147483647" />
<security mode="Message">
<message clientCredentialType="UserName"/>
< SPAN>security>
< SPAN>binding>
< SPAN>wsHttpBinding>
< SPAN>bindings>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="DefaultMembershipProvider"/>
<serviceCertificate findValue="FanzooService" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName"/>
< SPAN>serviceCredentials>
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="DefaultRoleProvider"/>
< SPAN>behavior>
< SPAN>serviceBehaviors>
< SPAN>behaviors>
< SPAN>system.serviceModel>
3) Setup the client config
Here's an example:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IHelloWorldService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
< SPAN>security>
< SPAN>binding>
< SPAN>wsHttpBinding>
< SPAN>bindings>
<client>
<endpoint address=http://localhost/ServiceWithMembership/HelloWorld.svc
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IHelloWorldService"
contract="IHelloWorldService" name="WSHttpBinding_IHelloWorldService" behaviorConfiguration="ClientBehavior">
<identity>
<dns value="FanzooService"/>
< SPAN>identity>
< SPAN>endpoint>
< SPAN>client>
<behaviors>
<endpointBehaviors>
<behavior name="ClientBehavior">
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" />
< SPAN>serviceCertificate>
< SPAN>clientCredentials>
< SPAN>behavior>
< SPAN>endpointBehaviors>
< SPAN>behaviors>
< SPAN>system.serviceModel>
4) Passing Credentials in the Client
HelloWorldServiceClient serviceClient = new HelloWorldServiceClient();
serviceClient.ClientCredentials.UserName.UserName = "JeffF";
serviceClient.ClientCredentials.UserName.Password = "Test123!";
try
{
Console.WriteLine(serviceClient.HelloWorld());
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
Console.ReadKey();
5) Accessing the credentials in the service

Saturday, April 28, 2007
Many of you out there may not be aware, that even though I do spend most of my time honing my developer and tech skills, one of my other passions is cooking. I love to cook a lot of different stuff, but my grill is my best friend. I have two grills. Well, technically, I have one grill and a barrel water smoker. I use my grills to cook a whole slew of things, but have been on a journey to make the perfect pulled pork. I LOVE BBQ. I still consider myself a novice BBQ chef, but I must say I am enjoying my latest batch of pulled pork quite a bit. I'll share the history of my journey to pulled pork perfection so that others may learn from my mistakes. There are basically 4 parts to the pulled pork process; pork, rub, mop and smoke.
PORK
Of course to make pulled pork, you need some pork. I prefer a nice Boston Butt. This is also known as a bone-in pork shoulder roast. I usually see them in the 5-7lbs range.
RUB
For the un-seasoned BBQ coinsurers, a rub is a mixture of dry spices that you “rub” into the meat before cooking. I’ve read a lot of rubs and I’ve heard everything from claims that it’s the most important part of the process, to claims that it doesn’t matter that much. Either way, I found a rub I like that I use on a lot of stuff including my pulled pork. Here are the details:
· ¼ cup brown sugar
· ¼ cup paprika
· 3 tablespoons black pepper
· 4 tablespoons coarse salt
· 2 teaspoons garlic powder
· 2 teaspoons onion powder
· 1 teaspoon cayenne pepper
Just mix all of this up in a container and keep it in your freezer. I have a huge tub of it. It’s great on chicken, and pork.
Once you have the rub, pour a bunch of it on your butt and rub it in. Then wrap up the pork in plastic wrap and let it sit for 4 to 24 hours. If you let it sit for a long time, put it in the fridge. Make sure you take it out so that the pork returns to room temperature before you cook it.
MOP
A mop is a basting sauce for use while you are smoking your meat in order to maintain some moisture and to add flavor. I use a very simple mop sauce. Here are the details:
· 1 cup cider vinegar
· 2 jalapeno peppers sliced thin
· 1 tablespoon brown sugar
· 1 tablespoon coarse salt
· 1 teaspoon red pepper flakes
· 1 teaspoon black pepper
The method to apply the mop depends on your cooking method. I use my water smoker, so I simply pour this mop into the water bowl and then fill the remaining space with water. If you are using some other cooking method, I would brush on some mop every hour or so.
SMOKE
Obviously in order to smoke a piece of meat you need a heat and smoke source. As I mentioned, I am using an electric Brinkman barrel water smoker. Many would cry sacrilege since it’s electric, but I am very happy with my pulled pork, not to mention the price of the smoker, and the convenience.
I have yet to experiment with many different types of wood so I can only tell you that my latest batch used hickory and it tasted great. I started by putting about 4 cups of wood chips in a bowl of water for an hour. Soaking the chips helps them produce more smoke and burn slower. I then put these chips into some heavy duty aluminum foil packets. Cut a few slits in the tops of the packets so the smoke can escape. I then put these packets right on the hot heating element of my smoker. I turn my smoker on about an hour before I’m ready to get the water and smoker up to temp (about 220-250 degrees).
COOKING
Once the smoker is all set just put your butt on the top rack. I like to use a remote thermometer to monitor the temperature. I have a fancy remote thermometer that has a wireless receiver that reaches about 150 feet. I’ll explain why I have this in a second. I also have an oven thermometer that I keep in the grill to monitor the smoker temperature. My electric smoker runs pretty consistent at 220 degrees with everything in it.
If you thought making pulled pork was quick, think again. I just finished a 4.5lb butt and it took 14 hours in my water smoker. One of the most important things I learned recently is about how a pork butt (along with other meats) hit a temperature plateau. I almost got rid of my water smoker because I didn’t think it got hot enough. I would cook my pulled pork and they would just stop rising in temp for a few hours. I would panic and move my pork to finish it in a hotter oven. This temperature plateau happens because all of the heat goes towards melting the fat instead of raising the temperature of the meet. Just be patient and wait until it reaches a good temperature. I cook mine until it is 195 degrees.
Cooking something for 14 hours takes some planning. This is why I have a fancy remote thermometer. I actually set everything up to start going at around 12am. Then, I go to bed. My remote thermometer will sound an alarm when it hits a specified temperature. I simply set the temperature to 195 and go to bed. I then get up at about 5am to check on it and to get another set of chips soaking. At 6am I put more chips in just to add some more smoke flavor. Try to open the smoker as little as possible. This is another reason why the remote thermometer is so helpful.
Once the meat is at temperature, wrap it in foil and let it rest for 20 minutes or so. To pull the pork I just use 2 forks. Stab and pull, stab and pull. That’s it!
Good luck with your journey if you choose to go down this path. If you have any suggestions for my process I welcome your comments.

Friday, April 20, 2007
My trek into the WPF world has continued. I was side tracked for a bit with some business stuff but am now getting back into it. My goal today was to find out if MVC still made sense in the WPF world. After a bit of research I found that there seems to be quite a bit of momentum behind Model-View-ViewModel. I leave the explanation of this to the experts. Here's a good link (even though it's a bit older) which also will lead you to several other posts that describe it.
I'm pretty sold on the concept so I'm going to give it a try and see how it works in the real world.

Thursday, March 15, 2007
I've had a few clients in the past year worry about the size of a database, or anything that goes on disk. I find this amusing. Typically this worry has been for space less than 10GB. You can
purchase a 500GB drive for $150.00. It' tempting to add a pair of these to my rig.