﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Steve Syfuhs.net</title><link>http://www.syfuhs.net</link><description>Theoretical Headbanging at its Finest</description><language>en-US</language><item><title>Bad User Interfaces are Insecure</title><description>&lt;P&gt;&lt;STRONG&gt;The Best of Intentions&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;So you’ve built this application.&amp;nbsp; It’s a brilliant application.&amp;nbsp; It’s design is spectacular, the architecture is flawless, the coding is clean and coherent, and you &lt;EM&gt;even&lt;/EM&gt; followed the SDL best practices and created a secure application.&lt;/P&gt;
&lt;P&gt;There is one minor problem though.&amp;nbsp; The interface is terrible.&amp;nbsp; It’s not intuitive, and settings are poorly described in the options window.&amp;nbsp; A lot of people wouldn’t necessarily see this as a security issue, but more of an interaction bug -- blame the UX people and get on with your day.&lt;/P&gt;
&lt;P&gt;Consider this (highly hyperbolic) options window though:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.syfuhs.net/media/blog/BadSecuritySettings_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=BadSecuritySettings border=0 alt=BadSecuritySettings src="http://www.syfuhs.net/media/blog/BadSecuritySettings_thumb.png" width=526 height=233 relativesrc="http://www.syfuhs.net/media/blog/BadSecuritySettings_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;How intuitive is it?&amp;nbsp; Notsomuch, eh?&amp;nbsp; You have to really think about what it’s asking.&amp;nbsp; Worst of all, there is so much extraneous information there that is supposed to help you decide.&lt;/P&gt;
&lt;P&gt;At first glance I’m going to check it.&amp;nbsp; I see “security” and “enable” in the text, and naturally assume it’s asking me if I want to make it run securely (lets say for the sake of argument it speaks the truth), because god knows I’m not going to read it all the way through the first time.&lt;/P&gt;
&lt;P&gt;By the second round through I’ve already assumed I know what it’s asking, read it fully, get confused, and struggle with what it has to say.&lt;/P&gt;
&lt;P&gt;A normal end user will not even get to this point.&amp;nbsp; They’ll check it, and click save without thinking, because of just that – they don’t want to have to think about it.&lt;/P&gt;
&lt;P&gt;Now, consider this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.syfuhs.net/media/blog/GoodSecuritySettings_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=GoodSecuritySettings border=0 alt=GoodSecuritySettings src="http://www.syfuhs.net/media/blog/GoodSecuritySettings_thumb.png" width=526 height=156 relativesrc="http://www.syfuhs.net/media/blog/GoodSecuritySettings_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Isn’t this more intuitive?&amp;nbsp; Isn’t it easier to look at?&amp;nbsp; But wait, does it do the same thing?&amp;nbsp; Absolutely.&amp;nbsp; It asks the user if they want to run a secure application.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Path to Security Hell&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When I first considered what I wanted to say on this topic, I asked myself “how can this really be classified as a security bug?”&amp;nbsp; After all, it’s the user’s fault for checking it right?&lt;/P&gt;
&lt;P&gt;Well, no.&amp;nbsp; It’s our fault.&amp;nbsp; We developed it securely, we told them they needed it to be run securely, and we gave them the option to turn off security (again, hyperbole, but you get the point).&amp;nbsp; It’s okay to let them choose if they want to run an insecure application, but if we confuse them, if we make it difficult to understand what the heck is going on, they aren’t actually doing what they want and we therefore failed at making the application they wanted secure, secure.&lt;/P&gt;
&lt;P&gt;It is our problem.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;So what?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Most developers I know at the very least will make an attempt to write a secure application.&amp;nbsp; They check for buffer overflows, SQL Injection, Cross Site Scripting, blah blah blah.&amp;nbsp; Unfortunately some, myself included, tend to forget that the end users don’t necessarily know about security, nor care about it.&amp;nbsp; We do like most developers do.&amp;nbsp; We tell them what we know: “There has been a fatal exception at 0x123FF567!!one! The index was outside the bounds of the array.&amp;nbsp; We need to destroy the application threads and process.”&lt;/P&gt;
&lt;P&gt;That sounds fairly familiar to most error messages we display to our end users.&amp;nbsp; Frankly, they don’t care about it.&amp;nbsp; They are just pissed the work they were doing was just lost.&lt;/P&gt;
&lt;P&gt;The funny thing is, we really don’t notice this.&amp;nbsp; When I was building the first settings window above, I kept reading the text and thinking to myself, it makes perfect sense.&amp;nbsp; The reason for this is by virtue of the fact that what I wrote is my logic.&amp;nbsp; I wrote the logic, I wrote the text, I inherently understand what I wrote.&amp;nbsp; We do this all the time.&amp;nbsp; I do this all the time, and then I get a phone call from some user saying “wtf does this mean?”, aaaaaaand then I change it to something a little more friendly.&amp;nbsp; By the 4th or so iteration of this I usually get it right (or maybe they just get tired of calling?).&lt;/P&gt;
&lt;P&gt;So what does this say about us?  Well, I’m not sure.  I think it’s saying we need to work on our user interface skills, and as an extension of that, we need to work on our soft skills – our interpersonal skills.  Maybe.  Just a thought.&lt;/P&gt;</description><link>http://www.syfuhs.net/article/156.aspx?rss</link><category>Architects</category><category>Bugs</category><category>Development</category><category>Musings</category><category>Programming</category><category>Security</category><pubDate>Fri, 05 Mar 2010 16:30:24 GMT</pubDate></item><item><title>A Stab at a New Resume</title><description>&lt;p&gt;While I am definitely not looking for a new job, I was bored and thought I would take a stab at a stylized resume to see if I could hone some of my (lack of) graphics skills.&amp;#160; It didn’t turn out too badly, but I am certainly no graphics designer.&lt;/p&gt;  &lt;p&gt;What do you think?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/mainResume_thumb.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="mainResume" border="0" alt="mainResume" src="http://www.syfuhs.net/media/blog/mainResume_thumb.png" width="612" height="792" /&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://www.syfuhs.net/article/155.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>Architects</category><category>ASP.NET</category><category>Business</category><category>Community</category><category>Development</category><category>Presentations</category><category>Random</category><pubDate>Sat, 20 Feb 2010 16:50:06 GMT</pubDate></item><item><title>The Known Universe</title><description>&lt;p&gt;Holy crap this is cool:&lt;/p&gt;  &lt;div style="text-align: center"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/17jymDn0W6U&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/17jymDn0W6U&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;</description><link>http://www.syfuhs.net/article/154.aspx?rss</link><category>Fun Stuff</category><category>Geek Stuff</category><category>Musings</category><category>News</category><category>School</category><category>Science</category><pubDate>Wed, 10 Feb 2010 19:59:34 GMT</pubDate></item><item><title>Putting the I Back into Infrastructure</title><description>&lt;p&gt;Tonight at the &lt;a href="http://www.itprotoronto.ca/"&gt;IT Pro Toronto&lt;/a&gt; we did a pre-launch of the &lt;a href="http://www.infrastructure2010.com/"&gt;Infrastructure 2010&lt;/a&gt; project.&amp;nbsp; Have you ever been in a position where you just don’t have a clear grasp of a concept or design?&amp;nbsp; It’s not fun.&amp;nbsp; As a result, &lt;a href="http://www.cips.ca/"&gt;CIPS Toronto&lt;/a&gt;, &lt;a href="http://www.itprotoronto.ca/"&gt;IT Pro Toronto&lt;/a&gt;, and &lt;a href="http://www.tsql.ca/"&gt;TorontoSQL&lt;/a&gt; banded together to create a massive event to help make things a little more clear.&amp;nbsp; To give you a clearer understanding of how corporate networks work.&amp;nbsp; Perhaps to explain why some decisions are made, and why in retrospect, some are bad decisions.&lt;/p&gt;
&lt;p&gt;Infrastructure 2010 is about teaching you everything there is to know about a state-of-the-art, best practices compliant, corporate intranet.&amp;nbsp; We will build, from the ground up, an entire infrastructure.&amp;nbsp; We will teach you how to build, from the ground up, an entire infrastructure.&lt;/p&gt;
&lt;p&gt;Sessions are minimum 300 level, and content-rich.&amp;nbsp; Therefore:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.infrastructure2010.com/"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="i2010Proud[1]" border="0" alt="i2010Proud[1]" src="http://www.syfuhs.net/media/blog/i2010Proud%5B1%5D_3.png" width="620" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Well, maybe.&amp;nbsp; (P.S. if you work for Microsoft, pretend you didn’t see that picture)&lt;/p&gt;
</description><link>http://www.syfuhs.net/article/153.aspx?rss</link><category>.NET</category><category>Architects</category><category>Business</category><category>Canada</category><category>Community</category><category>Conferences</category><category>Development</category><category>Fun Stuff</category><category>Launch Event</category><category>Microsoft</category><category>Patterns and Practices</category><category>Presentations</category><category>School</category><category>SQL</category><category>Students</category><category>Technet</category><category>Toronto</category><category>User Group</category><category>Windows</category><pubDate>Mon, 08 Feb 2010 23:38:32 GMT</pubDate></item><item><title>My First CodePlex Project!</title><description>&lt;p&gt;A few minutes ago I just finalized my first CodePlex project.&amp;#160; While working on the ever-mysterious Infrastructure 2010 project, I needed to integrate the Live Meeting API into an application we are using.&amp;#160; So I decided to stick it into it’s own assembly for reuse.&lt;/p&gt;  &lt;p&gt;I also figured that since it’s a relatively simple project, and because for the life of me I couldn’t find a similar wrapper, I would open source it.&amp;#160; Maybe there is someone out there who can benefit from it.&lt;/p&gt;  &lt;p&gt;The code is ugly, but it works.&amp;#160; I suspect I will continue development, and clean it up a little.&amp;#160; With that being said:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It needs documentation (obviously). &lt;/li&gt;    &lt;li&gt;All the StringBuilder stuff should really be converted to XML objects &lt;/li&gt;    &lt;li&gt;It need's cleaner exception handling &lt;/li&gt;    &lt;li&gt;It needs API versioning support &lt;/li&gt;    &lt;li&gt;It needs to implement more API functions&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Otherwise it works like a charm.&amp;#160; &lt;a href="http://livemeeting.codeplex.com"&gt;Check it out&lt;/a&gt;!&lt;/p&gt;</description><link>http://www.syfuhs.net/article/152.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>API's</category><category>Architects</category><category>Beta</category><category>Community</category><category>Microsoft</category><category>Open Source</category><category>Programming</category><pubDate>Thu, 04 Feb 2010 20:07:29 GMT</pubDate></item><item><title>Interesting Email Attack Method&amp;hellip; Cannot Send Shipment</title><description>&lt;p&gt;I’ve gotten two emails like this in the last week or so.&amp;#160; One was from DHL Shipping, and this one was from UPS.&amp;#160; Attached to the email was a zip, with what I presume to be a Trojan of some sort.&lt;/p&gt;  &lt;p&gt;The content of the email was:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Dear customer!     &lt;br /&gt;We were not able to deliver the postal package which was sent on the 28th of December in time      &lt;br /&gt;because the recipient’s address is incorrect.      &lt;br /&gt;Please print out the invoice copy attached and collect the package at our department.      &lt;br /&gt;United Parcel Service of America.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;For a moment I thought the initial email was legit, until I saw it had an attachment.&amp;#160; After reading it, I called phooey on it and deleted it.&amp;#160; Then I saw the UPS email.&amp;#160; I’ll have to dig through the application that came in the zip, and see what’s going on.&lt;/p&gt;  &lt;p&gt;I wonder how this type of attack will pan out?&lt;/p&gt;</description><link>http://www.syfuhs.net/article/151.aspx?rss</link><category>Musings</category><category>Security</category><pubDate>Tue, 26 Jan 2010 19:05:34 GMT</pubDate></item><item><title>Visual Studio Output Window Auto-Scrolling</title><description>&lt;p&gt;Just a quick one here.&lt;/p&gt;  &lt;p&gt;Have you ever been using the output window in Visual Studio, scrolled up, and then lost the auto-scroll functionality?&amp;#160; It’s really annoying when you have a thousand things coming out through the likes of Debug.Write, or even if it’s just a massive build.&lt;/p&gt;  &lt;p&gt;To re-enable autoscrolling, while in the output window just hit CTRL+END.&lt;/p&gt;  &lt;p&gt;Kinda wished I knew that a year ago…&lt;/p&gt;</description><link>http://www.syfuhs.net/article/149.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>Development</category><category>MSDN</category><category>Programming</category><category>Random</category><pubDate>Tue, 12 Jan 2010 12:38:06 GMT</pubDate></item><item><title>A Trip to the Microsoft Store</title><description>&lt;p&gt;While I was in California last week I decided to visit the new Microsoft Store in Mission Viejo.&amp;#160; While there, the managers graciously allowed me to take pictures of the store.&amp;#160; Frankly, they probably thought it was a little creepy.&amp;#160; But nevertheless, they said go for it, and I did.&lt;/p&gt;

&lt;p&gt;Now, Microsoft did one hell of a job making it known that the store existed while I was at the mall.&amp;#160; While I was grabbing coffee in the food court, these stickers were on each table:&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00403" href="http://www.flickr.com/photos/43510997@N07/4246026017/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00403" src="http://static.flickr.com/2744/4246026017_54cd05615f.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Following that, as you head towards the store you see two large LCD screens in the centre of the walkway.&amp;#160; On one side you have a Rock Band - Beatles installation running XBox 360 over HD.&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00401" href="http://www.flickr.com/photos/43510997@N07/4246793762/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00401" src="http://static.flickr.com/2801/4246793762_f7dfb035d3.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the other side was a promotional video.&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00400" href="http://www.flickr.com/photos/43510997@N07/4246789788/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00400" src="http://static.flickr.com/2535/4246789788_13b409a3da.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microsoft designed their store quite well.&amp;#160; Large floor to ceiling windows for the storefront, with an inviting light wood flooring to create a very warm atmosphere.&amp;#160; While there were hundreds of people in the store, it was very welcoming.&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00394" href="http://www.flickr.com/photos/43510997@N07/4245998663/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00394" src="http://static.flickr.com/4039/4245998663_fbb6eb1702.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Along the three walls (because the 4th is glass) is a breathtaking video panorama.&amp;#160; I’m not quite sure how to really describe it.&amp;#160; It’s as if the entire wall was a single display, running in full HD.&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00420" href="http://www.flickr.com/photos/43510997@N07/4246832864/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00420" src="http://static.flickr.com/2774/4246832864_d675a7fe1d.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00415" href="http://www.flickr.com/photos/43510997@N07/4246824750/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00415" src="http://static.flickr.com/4039/4246824750_5ba21d4a09.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00412" href="http://www.flickr.com/photos/43510997@N07/4246044917/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00412" src="http://static.flickr.com/2521/4246044917_d1270b9bc6.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the center of the store is a collection of laptops and assorted electronics like the Zune’s.&amp;#160; There’s probably a logical layout, perhaps by price, or performance.&amp;#160; I wasn’t paying too much attention to that unfortunately.&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00395" href="http://www.flickr.com/photos/43510997@N07/4246001485/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00395" src="http://static.flickr.com/2735/4246001485_b224fab69a.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the center-back of the store is Microsoft’s Answers desk.&amp;#160; Much like the Apple Genius Bar, except not so arrogant.&amp;#160; Yes, I said it.&amp;#160; Ironically, the display for customer names looked very iPod-ish here, and in the Apple Store, the equivalent display looked like XP Media Center.&amp;#160; Go figure.&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00411" href="http://www.flickr.com/photos/43510997@N07/4246043519/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00411" src="http://static.flickr.com/2726/4246043519_c2889d16bb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the things I couldn’t quite believe was the XBox 360 being displayed overlay the video panorama video.&amp;#160; The video engine for that must have been extremely powerful.&amp;#160; That had to be a 1080P display for the XBox.&amp;#160; As a developer, I was astonished (and wondered where I could get that app!)&amp;#160; A few of the employee’s mentioned that it was driven by Windows 7.&amp;#160; Pretty freakin’ sweet.&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00399" href="http://www.flickr.com/photos/43510997@N07/4246012461/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00399" src="http://static.flickr.com/4014/4246012461_e5984c33be.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also in the store were a couple Surfaces!&amp;#160; This was the first time I actually had the opportunity to play with one.&amp;#160; They are pretty cool.&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00414" href="http://www.flickr.com/photos/43510997@N07/4246822898/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00414" src="http://static.flickr.com/4002/4246822898_f03c94d4f2.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a title="DSC00397" href="http://www.flickr.com/photos/43510997@N07/4245690371/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" alt="DSC00397" src="http://static.flickr.com/2796/4245690371_a81d52ec14.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;And that in a few pictures was my trip to the Microsoft store.&amp;#160; There was also a couple pamphlets in store describing training sessions and schedules for quick how-to’s in Windows 7 that I walked away with.&lt;/p&gt;

&lt;p&gt;Microsoft did well.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/148.aspx?rss</link><category>Business</category><category>Fun Stuff</category><category>Gadgets</category><category>Geek Stuff</category><category>Microsoft</category><category>News</category><category>Random</category><category>Windows</category><category>Windows 7</category><pubDate>Mon, 04 Jan 2010 23:03:24 GMT</pubDate></item><item><title>A Thought on Windows Mobile 7</title><description>&lt;p&gt;The other day while I was sitting in the airport in Washington, D.C., I had a random thought.&amp;#160; When the ZuneHD first hit the shelves people were talking about how Mobile 7 might borrow the look and feel.&amp;#160; It’s sleek, easy to use/easy to understand, and is very simple.&amp;#160; So I started thinking about what such an interface might look like.&amp;#160; This is something I did quickly.&amp;#160; Nothing was provided by Microsoft.&amp;#160; Nobody has said anything about Mobile 7 design (at least, not at that point, &lt;a href="http://community.winsupersite.com/blogs/paul/archive/2010/01/01/microsoft-talked-about-windows-mobile-7-and-we-all-missed-it.aspx"&gt;but nobody cared anyway&lt;/a&gt;).&amp;#160; This is simply something I thought the interface might look like.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/homeScreen_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="homeScreen" border="0" alt="homeScreen" src="http://www.syfuhs.net/media/blog/homeScreen_thumb.png" width="266" height="376" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Some things to notice are the list-like menu’s, and the &lt;a href="http://www.bing.com"&gt;bing&lt;/a&gt; search at the bottom.&amp;#160; Blah-blah-blah anti-trust, the point is search is easily accessible, not necessarily just to Microsoft’s own search engine.&amp;#160; It could be Google’s search too.&amp;#160; Also, there is the location-specific information at the top showing the current weather.&amp;#160; Also mimicking the Windows 7 interface is the idea of pinning things to the home screen such as the Internet Explorer application.&lt;/p&gt;  &lt;p&gt;There are some things that should probably change.&amp;#160; It feels a little cluttered at the bottom showing current messages and the appointments color is iffy.&amp;#160; There may not be any need for the middle separation either.&lt;/p&gt;  &lt;p&gt;Just a thought…&lt;/p&gt;</description><link>http://www.syfuhs.net/article/147.aspx?rss</link><category>Development</category><category>Fun Stuff</category><category>Gadgets</category><category>Geek Stuff</category><category>Microsoft</category><category>Musings</category><category>Programming</category><category>Random</category><category>Windows</category><pubDate>Mon, 04 Jan 2010 20:06:58 GMT</pubDate></item><item><title>Six Simple Development Rules (for Writing Secure Code)</title><description>&lt;p&gt;I wish I could say that I came up with this list, but alas I did not.&amp;#160; I came across it on the &lt;a href="http://blogs.msdn.com/ace_team/default.aspx"&gt;Assessment, Consulting &amp;amp; Engineering Team blog&lt;/a&gt; from Microsoft, this morning.&amp;#160; They are a core part of the Microsoft internal IT Security Group, and are around to provide resources for internal and external software developers.&amp;#160; These 6 rules are key to developing secure applications, and they should be followed at all times.&lt;/p&gt;

&lt;p&gt;Personally, I try to follow the rules closely, and am working hard at creating an SDL for our department.&amp;#160; Aside from Rule 1, you could consider each step a sort of checklist for when you sign off, or preferably design, the application for production.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Rule #1: Implement a Secure Development Lifecycle in your organization.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This includes the following activities:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Train your developers, and testers in secure development and secure testing respectively &lt;/li&gt;

  &lt;li&gt;Establish a team of security experts to be the ‘go to’ group when people want advice on security &lt;/li&gt;

  &lt;li&gt;Implement Threat Modeling in your development process. If you do nothing else, do this! &lt;/li&gt;

  &lt;li&gt;Implement Automatic and Manual Code Reviews for your in-house written applications &lt;/li&gt;

  &lt;li&gt;Ensure you have ‘Right to Inspect’ clauses in your contracts with vendors and third parties that are producing software for you &lt;/li&gt;

  &lt;li&gt;Have your testers include basic security testing in their standard testing practices &lt;/li&gt;

  &lt;li&gt;Do deployment reviews and hardening exercises for your systems &lt;/li&gt;

  &lt;li&gt;Have an emergency response process in place and keep it updated &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want some good information on doing this, email me and check out this link:
  &lt;br /&gt;&lt;a href="http://www.microsoft.com/security/sdl/default.aspx"&gt;http://www.microsoft.com/sdl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Rule #2: Implement a centralized input validation system (CIVS) in your organization.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;These CIVS systems are designed to perform common input validation on commonly accepted input values. Let’s face it, as much as we’d all like to believe that we are the only ones doing things like, registering users, or recording data from visitors it’s actually all the same thing.&lt;/p&gt;

&lt;p&gt;When you receive data it will very likely be an integer, decimal, phone number, date, URI, email address, post code, or string. The values and formats of the first 7 of those are very predictable. The string’s are a bit harder to deal with but they can all be validated against known good values. Always remember to check for the three F’s; Form, Fit and Function.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Form: Is the data the right type of data that you expect? If you are expecting a quantity, is the data an integer? Always cast data to a strong type as soon as possible to help determine this. &lt;/li&gt;

  &lt;li&gt;Fit: Is the data the right length/size? Will the data fit in the buffer you allocated (including any trailing nulls if applicable). If you are expecting and Int32, or a Short, make sure you didn’t get an Int64 value. Did you get a positive integer for a quantity rather than a negative integer? &lt;/li&gt;

  &lt;li&gt;Function: Can the data you received be used for the purpose it was intended? If you receive a date, is the date value in the right range? If you received an integer to be used as an index, is it in the right range? If you received an int as a value for an Enum, does it match a legitimate Enum value? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a vast majority of the cases, string data being sent to an application will be 0-9, a-z, A-Z. In some cases such as names or currencies you may want to allow –, $, % and ‘. You will almost never need , &amp;lt;&amp;gt; {} or [] unless you have a special use case such as &lt;a href="http://www.regexlib.com"&gt;http://www.regexlib.com&lt;/a&gt; in which case see Rule #3.&lt;/p&gt;

&lt;p&gt;You want to build this as a centralized library so that all of the applications in your organization can use it. This means if you have to fix your phone number validator, everyone gets the fix. By the same token, you have to inspect and scrutinize the crap out of these CIVS to ensure that they are not prone to errors and vulnerabilities because everyone will be relying on it. But, applying heavy scrutiny to a centralized library is far better than having to apply that same scrutiny to every single input value of every single application.&amp;#160; You can be fairly confident that as long as they are using the CIVS, that they are doing the right thing.&lt;/p&gt;

&lt;p&gt;Fortunately implementing a CIVS is easy if you start with the &lt;a href="http://msdn.microsoft.com/en-us/library/cc309509.aspx"&gt;Enterprise Library Validation Application Block&lt;/a&gt; which is a free download from &lt;a href="http://www.microsoft.com"&gt;Microsoft&lt;/a&gt; that you can use in all of your applications.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Rule #3: Implement input/output encoding for all externally supplied values.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Due to the prevalence of cross site scripting vulnerabilities, you need to encode any values that came from an outside source that you may display back to the browser. (even embedded browsers in thick client applications). The encoding essentially takes potentially dangerous characters like &amp;lt; or &amp;gt; and converts them into their HTML, HTTP, or URL equivalents.&lt;/p&gt;

&lt;p&gt;For example, if you were to HTTP encode &amp;lt;script&amp;gt;alert(‘XSS Bug’)&amp;lt;/script&amp;gt; it would look like: &amp;amp;lt;script&amp;amp;gt;alert('XSS Bug')&amp;amp;lt;/script&amp;amp;gt;&amp;#160; A lot of this functionality is build into the .NET system. For example, the code to do the above looks like:&lt;/p&gt;

&lt;p&gt;Server.HtmlEncode(&amp;quot;&amp;lt;script&amp;gt;alert('XSS Bug')&amp;lt;/script&amp;gt;&amp;quot;);&lt;/p&gt;

&lt;p&gt;However it is important to know that the Server.HTMLEncode only encodes about 4 of the nasty characters you might encounter. It’s better to use a more ‘industrial strength’ library like the &lt;a href="http://msdn.microsoft.com/en-us/security/aa973814.aspx"&gt;Anti Cross Site Scripting library&lt;/a&gt;. Another free download from &lt;a href="http://www.microsoft.com"&gt;Microsoft&lt;/a&gt;. This library does a lot more encoding and will do HTTP and URI encoding based on a white list. The above encoding would look like this in AntiXSS&lt;/p&gt;

&lt;p&gt;using Microsoft.Security.Application;
  &lt;br /&gt;AntiXss.HtmlEncode(&amp;quot;&amp;lt;script&amp;gt;alert('XSS Bug')&amp;lt;/script&amp;gt;&amp;quot;);&lt;/p&gt;

&lt;p&gt;You can also run a neat test system that a friend of mine developed to test your application for XSS vulnerabilities in its outputs. It is aptly named &lt;a href="http://www.acorns.com.au/blog/?p=154"&gt;XSS Attack Tool&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Rule #4: Abandon Dynamic SQL&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;There is no reason you should be using dynamic SQL in your applications anymore. If your database does not support parameterized stored procedures in one form or another, get a new database.&lt;/p&gt;

&lt;p&gt;Dynamic SQL is when developers try to build a SQL query in code then submit it to the DB to be executed as a string rather than calling a stored procedures and feeding it the values. It usually looks something like this:&lt;/p&gt;

&lt;p&gt;(for you VB fans)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;dim sql
    &lt;br /&gt;sql = &amp;quot;Select ArticleTitle, ArticleBody FROM Articles WHERE ArticleID = &amp;quot;

    &lt;br /&gt;sql = sql &amp;amp; request.querystring(&amp;quot;ArticleID&amp;quot;)

    &lt;br /&gt;set results = objConn.execute(sql)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In fact, &lt;a href="http://www.sqlteam.com/article/introduction-to-dynamic-sql-part-1"&gt;this article from 2001&lt;/a&gt; is chock full of what NOT to do. Including dynamic SQL in a stored procedure.&lt;/p&gt;

&lt;p&gt;Here is an example of a stored procedure that is vulnerable to SQL Injection:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Create Procedure GenericTableSelect @TableName VarChar(100)
    &lt;br /&gt;AS

    &lt;br /&gt;Declare @SQL VarChar(1000)

    &lt;br /&gt;SELECT @SQL = 'SELECT * FROM '

    &lt;br /&gt;SELECT @SQL = @SQL + @TableName

    &lt;br /&gt;Exec ( @SQL) GO&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;See this article for a look at &lt;a href="http://support.microsoft.com/kb/310130"&gt;using Parameterized Stored Procedures&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Rule #5: Properly architect your applications for scalability and failover&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Applications can be brought down by a simple crash. Or a not so simple one. Architecting your applications so that they can scale easily, vertically or horizontally, and so that they are fault tolerant will give you a lot of breathing room.&lt;/p&gt;

&lt;p&gt;Keep in mind that fault tolerant is not just a way to say that they restart when they crash. It means that you have a proper exception handling hierarchy built into the application.&amp;#160; It also means that the application needs to be able to handle situations that result in server failover. This is usually where session management comes in.&lt;/p&gt;

&lt;p&gt;The best fault tolerant session management solution is to store session state in SQL Server.&amp;#160; This also helps avoid the server affinity issues some applications have.&lt;/p&gt;

&lt;p&gt;You will also want a good load balancer up front. This will help distribute load evenly so that you won’t run into the failover scenario often hopefully.&lt;/p&gt;

&lt;p&gt;And by all means do NOT do what they did on the site in the beginning of this article. Set up your routers and switches to properly shunt bad traffic or DOS traffic. Then let your applications handle the input filtering.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Rule #6: Always check the configuration of your production servers&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Configuration mistakes are all too popular. When you consider that proper server hardening and standard out of the box deployments are probably a good secure default, there are a lot of people out there changing stuff that shouldn’t be. You may have remembered when Bing went down for about 45 minutes. That was due to configuration issues.&lt;/p&gt;

&lt;p&gt;To help address this, we have released the Web Application Configuration Auditor (WACA). This is a free download that you can use on your servers to see if they are configured according to best practice. You can download it at this link.&lt;/p&gt;

&lt;p&gt;You should establish a standard SOE for your web servers that is hardened and properly configured. Any variations to that SOE should be scrutinised and go through a very thorough change control process. Test them first before turning them loose on the production environment…please.&lt;/p&gt;

&lt;p&gt;So with all that being said, you will be well on your way to stopping the majority of attacks you are likely to encounter on your web applications. Most of the attacks that occur are SQL Injection, XSS, and improper configuration issues. The above rules will knock out most of them. In fact, Input Validation is your best friend. Regardless of inspecting firewalls and things, the applications is the only link in the chain that can make an intelligent and informed decision on if the incoming data is actually legit or not. So put your effort where it will do you the most good.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/146.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>ADO.NET</category><category>Algorithms</category><category>API's</category><category>Architects</category><category>ASP.NET</category><category>Authentication</category><category>Bugs</category><category>Development</category><category>Patterns and Practices</category><category>Security</category><category>SQL</category><pubDate>Wed, 16 Dec 2009 21:42:46 GMT</pubDate></item><item><title>Insider Threat Statistics</title><description>&lt;p&gt;Steve Riley just posted an &lt;a href="http://stvrly.wordpress.com/2009/11/24/index-of-insider-threats/"&gt;intriguing article&lt;/a&gt; on Insider Threat statistics, which was originally found in &lt;a href="http://www.net-security.org/secworld.php?id=8534"&gt;another article&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Survey participants in London and New York: 600&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Departing workers who took sensitive information with them: 40%&lt;/li&gt;    &lt;li&gt;Portion who would provide this information if it would help to find another job: 1/3&lt;/li&gt;    &lt;li&gt;Percentage of employees who are aware of the illegality of stealing information: 85%&lt;/li&gt;    &lt;li&gt;Portion of this population who do it any way: 1/2&lt;/li&gt;    &lt;li&gt;Percentage who believe it will be useful it some point in the future: &amp;gt;50%&lt;/li&gt;    &lt;li&gt;Percentage who find it easier to pilfer information this year: 57%&lt;/li&gt;    &lt;li&gt;Percentage last year: 29%&lt;/li&gt;    &lt;li&gt;Percentage who claimed they would take company info if fired tomorrow: 48%&lt;/li&gt;    &lt;li&gt;Percentage who would download company/competitive information if their jobs are at risk: 39%&lt;/li&gt;    &lt;li&gt;Portion of workers who have lost loyalty to their employers because of the recession: 1/4&lt;/li&gt;    &lt;li&gt;Percentage of those who take information “just in case”: 64%&lt;/li&gt;    &lt;li&gt;Percentage who would use the information in future job negotiations: 27%&lt;/li&gt;    &lt;li&gt;Percentage who would use the information as tools in their new jobs: 20%&lt;/li&gt;    &lt;li&gt;Those who would take customer and contact details: 29%&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Stuff Stolen:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Plans and proposals: 18%&lt;/li&gt;    &lt;li&gt;Passwords and access codes: 13%&lt;/li&gt;    &lt;li&gt;Product information: 11%&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Those would go out of their way:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Percentage of workers who would strive to find the redundancy list: 32%&lt;/li&gt;    &lt;li&gt;Percentage of those who would bribe a co-worker in the human resources department: 43%&lt;/li&gt;    &lt;li&gt;Who would use their own IT-granted access rights: 37%&lt;/li&gt;    &lt;li&gt;Who would use personal contacts of those in the IT department: 30%&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It begs the question, *why* would people be willing to do such a thing?&amp;#160; Is it out of spite, or lack of morality, or just plain greediness?&lt;/p&gt;  &lt;p&gt;It’s kind of sad, actually.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/145.aspx?rss</link><pubDate>Tue, 24 Nov 2009 17:41:54 GMT</pubDate></item><item><title>Deleting Temporary Internet Files from the Command Line</title><description>&lt;p&gt;A quicky but a goody.&amp;#160; Sometimes you just need a quick way to delete temp files from IE.&amp;#160; In most cases for me its when I’m writing a webapp, so I’ve stuck this in the build properties:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8     &lt;br /&gt;RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2      &lt;br /&gt;RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1      &lt;br /&gt;RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16      &lt;br /&gt;RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32      &lt;br /&gt;RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255      &lt;br /&gt;RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It doesn’t require elevated permissions, and has been tested on Vista and Windows 7.&amp;#160; Each command deletes the different types of data: temp files, stored form info, cookies etc.&amp;#160; Enjoy.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/144.aspx?rss</link><category>ASP.NET</category><category>Bugs</category><category>Development</category><category>Programming</category><category>Random</category><category>Windows</category><category>Windows 7</category><pubDate>Mon, 23 Nov 2009 13:28:49 GMT</pubDate></item><item><title>Security, Security, Security is about Policy, Policy, Policy</title><description>&lt;p&gt;The other day I had the opportunity to take part in an interesting meeting with Microsoft. The discussion was security, and the meeting members were 20 or so IT Pro’s, developers, and managers from various Fortune 500 companies in the GTA. It was not a sales call.&lt;/p&gt;

&lt;p&gt;Throughout the day, Microsofties Rob Labbe and Mohammad Akif went into significant detail about the current threat landscape facing all technology vendors and departments. There was one point that was paramount. Security is not all about technology.&lt;/p&gt;

&lt;p&gt;Security is about the policies implemented at the human level. Blinky-lighted devices look cool, but in the end, they will not likely add value to protecting your network. Here in lies the problem. Not too many people realize this -- hence the purpose of the meeting.&lt;/p&gt;

&lt;p&gt;Towards the end of the meeting, as we were all letting the presentations sink in, I asked a relatively simple question:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;What resources are out there for new/young people entering the security field?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The response was pretty much exactly what I was (unfortunately) expecting: notta.&lt;/p&gt;

&lt;p&gt;Security it seems is mostly a self-taught topic. Yes there are some programs at schools out there, but they tend to be academic – naturally. By this I mean that there is no fluidity in discussion. It’s as if you are studying a snapshot of the IT landscape that was taken 18 months ago. Most security experts will tell you the landscape changes daily, if not multiple times a day. Therefore we need to keep up on the changes in security, and any teacher will tell you, it’s impossible in an academic situation.&lt;/p&gt;

&lt;p&gt;Keeping up to date with security is a manual process. You follow blogs, you subscribe to newsgroups and mailing lists, your company gets hacked by a new form of attack, etc., and in the end you have a reasonable idea of what is out there yesterday. And you know what? This is just the attack vectors! You need to follow a whole new set of blogs and mailing lists to understand how to mitigate such attacks. That sucks.&lt;/p&gt;

&lt;p&gt;Another issue is the ramp up to being able to follow daily updates. Security is tough when starting out. It involves so many different processes at so many different levels of the application interactions that eyes glaze over at the thought of learning the ins and outs of security.&lt;/p&gt;

&lt;p&gt;So here we have two core problems with security:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Security changes daily – it’s hard to keep up &lt;/li&gt;

  &lt;li&gt;It’s scary when you are new at this &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s start by addressing the second issue. Security is a scary topic, but let’s breaks it down into its core components.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Security is about keeping data away from those who shouldn’t see it &lt;/li&gt;

  &lt;li&gt;Security is about keeping data available for those who need to see it &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At its core, security is simple. It starts getting tricky when you jump into the semantics of how to implement the core. So let’s address this too.&lt;/p&gt;

&lt;p&gt;A properly working system will do what you intended it to do at a systematic level: calculate numbers, view customer information, launch a missile, etc. This is a fundamental tenant of application development. Security is about understanding the unintended consequences of what a user can do with that system.&lt;/p&gt;

&lt;p&gt;These consequences are of the like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SQL Injection &lt;/li&gt;

  &lt;li&gt;Cross Site Scripting attacks &lt;/li&gt;

  &lt;li&gt;Cross Site Forgery attacks &lt;/li&gt;

  &lt;li&gt;Buffer overflow attacks &lt;/li&gt;

  &lt;li&gt;Breaking encryption schemes &lt;/li&gt;

  &lt;li&gt;Session hijacking &lt;/li&gt;

  &lt;li&gt;etc. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you understand that these types of attacks can exist, everything is just semantics from this point on. These semantics are along the line of figuring out best practices for system designs, and that’s really just a matter of studying.&lt;/p&gt;

&lt;p&gt;Security is about understanding that anything is possible. Once you understand attacks can happen, you learn how they can happen. Then you learn how to prevent them from happening. To use a phrase I really hate using, security is about thinking outside the box.&lt;/p&gt;

&lt;p&gt;Most developers do the least amount of work possible to build an application. I am terribly guilty of this. In doing so however, there is a very high likelihood that I didn’t consider what &lt;i&gt;else&lt;/i&gt; can be done with the same code. Making this consideration is (again, lame phrase) thinking outside the box.&lt;/p&gt;

&lt;p&gt;It is in following this consideration that I can develop a secure system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So… policies?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the end of the day however, I am a lazy developer.&amp;#160; I will still do as little work as possible to get the system working, and frankly, this is not conducive to creating a secure system.&lt;/p&gt;

&lt;p&gt;The only way to really make this work is to implement security policies that force certain considerations to be made.&amp;#160; Each system is different, and each organization is different.&amp;#160; There is no single policy that will cover the scope of all systems for all organizations, but a policy is simple.&amp;#160; &lt;/p&gt;

&lt;p&gt;A policy is a rule that must be followed, and in this case, we are talking about a development rule.&amp;#160; This can include requiring certain types of tests while developing, or following a specific development model like the Security Development Lifecycle.&amp;#160; It is with these policies that we can govern the creation of secure systems.&lt;/p&gt;

&lt;p&gt;Policies create an organization-level standard.&amp;#160; Standards are the backbone of security.&lt;/p&gt;

&lt;p&gt;These standards fall under the category of semantics, mentioned earlier.&amp;#160; Given that, I propose an idea for learning security.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Understand the core ideology of security – mentioned above &lt;/li&gt;

  &lt;li&gt;Understand that policies drive security &lt;/li&gt;

  &lt;li&gt;Jump head first into the semantics starting with security models &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The downside is that you will never understand everything there is to know about security.&amp;#160; No one will.&lt;/p&gt;

&lt;p&gt;Perhaps its not that flawed of an idea.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/143.aspx?rss</link><category>.NET</category><category>Algorithms</category><category>Architects</category><category>Authentication</category><category>Bugs</category><category>Business</category><category>Encryption</category><category>Microsoft</category><category>Patterns and Practices</category><category>Programming</category><category>Security</category><category>Students</category><pubDate>Fri, 20 Nov 2009 18:35:47 GMT</pubDate></item><item><title>Free e-book: Windows 7 troubleshooting tips</title><description>&lt;h4&gt;Originally found on the &lt;a href="http://blogs.msdn.com/microsoft_press/archive/2009/10/26/free-e-book-windows-7-troubleshooting-tips.aspx"&gt;Microsoft Press&lt;/a&gt; blog…&lt;/h4&gt;  &lt;h4&gt;Free e-book: Windows 7 troubleshooting tips&lt;/h4&gt;  &lt;p&gt;Mitch Tulloch, a Microsoft Most Valuable Professional and lead author of the just-published (and hot-selling) &lt;a href="http://blogs.msdn.com/microsoft_press/archive/2009/10/07/new-book-windows-7-resource-kit.aspx"&gt;&lt;em&gt;Windows 7 Resource Kit&lt;/em&gt;&lt;/a&gt; (Microsoft Press, 2010; ISBN: 9780735627000; 1760 pages), has created a short e-book called “What You Can Do Before You Call Tech Support.” Here are the opening paragraphs:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Your sound card has stopped working, your computer seems sluggish, the network is down, your hard drive is clicking, you can’t view a website, your monitor is hard to read, your new webcam isn’t working, your favorite program won’t run, and a funny burning smell is coming from your computer. What can you do on your own to try to troubleshoot the issue before you pick up the phone to call tech support? &lt;/p&gt;    &lt;p&gt;If you’re running Windows 7, quite a lot. Microsoft has included a lot of self-support tools in Windows 7 that you can try using before you seek the help of others, and we’ll examine these in a moment. Then there are the tools you were born with—your five senses (see, hear, smell, taste, touch) and most importantly your brain. And by brain I’m including your memory, experience, and capacity for logical reasoning. Finally, there is ancient and sacred lore passed on in secret from Master to Disciple over the millennia. We’ll see shortly how your brain, your senses, and the secrets of the Wise Ones can be very helpful for troubleshooting computer problems. But first let’s look at what troubleshooting tools are built into Windows 7.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You can download the e-book in &lt;a href="http://download.microsoft.com/download/3/3/B/33B1D927-2B38-4379-A843-3214EF220A6F/Before%20You%20Call%20Tech%20Support.xps"&gt;XPS format here&lt;/a&gt; and in &lt;a href="http://download.microsoft.com/download/3/3/B/33B1D927-2B38-4379-A843-3214EF220A6F/Before%20You%20Call%20Tech%20Support.pdf"&gt;PDF format here&lt;/a&gt;. Enjoy!&lt;/p&gt;</description><link>http://www.syfuhs.net/article/142.aspx?rss</link><category>Bugs</category><category>Windows 7</category><pubDate>Tue, 27 Oct 2009 22:42:52 GMT</pubDate></item><item><title>How UAC Actually Works</title><description>&lt;p&gt;This post has had a few false starts.&amp;#160; It’s a tough topic to cover, as it’s a very controversial subject for most people still.&amp;#160; Hopefully we can enlighten some people along the way.&lt;/p&gt;

&lt;p&gt;From a high level perspective, the UAC was developed to protect the user without necessarily removing administrative privileges.&amp;#160; Any change to the system required a second validation.&amp;#160; On older versions of Windows, an application running with administrative credentials could change any setting on the box.&amp;#160; Viruses and malware became rampant because of this openness, given that the average user had administrative credentials.&amp;#160; Most average users balked at the idea of having a limited user account, so Microsoft came up with an alternative for the new OS, Vista – a second form of validation.&amp;#160; You told the computer you wanted to make a change, it asked “are you sure?”&amp;#160; &lt;/p&gt;

&lt;p&gt;Logically it makes sense.&amp;#160; Consider an instance where a devious application wanted to change some setting, and because Windows wanted to verify it’s ok to make this change it asked “are you sure?”&amp;#160; If you responded no, the change didn’t happen.&amp;#160; Simple enough.&amp;#160; However, here we start running into issues.&amp;#160; There are three perspectives to look at.&amp;#160; &lt;/p&gt;

&lt;p&gt;First, the end user.&amp;#160; Simple changes to basic settings required validation.&amp;#160; This annoyed most of them, if not all of them.&amp;#160; They didn’t care why it was asking, they just wanted to delete shortcuts from their start menu.&amp;#160; Their reaction: turn off UAC.&amp;#160; Bad idea, but security loses when it comes to usability in the case of the end user.&lt;/p&gt;

&lt;p&gt;Second, the irate IT Pro/Developer.&amp;#160; Most people working in IT make changes to system settings constantly.&amp;#160; Given that, the UAC would be seen many times in a day and it would, for lack of a better word, piss that person off.&amp;#160; They didn’t care what security it provided, it was a “stupid-useless-design” that shouldn’t have been created.&amp;#160; Their reaction: turn off UAC.&amp;#160; Once again security loses when it comes to usability.&lt;/p&gt;

&lt;p&gt;Third, the knowledgeable IT Pro/Developer.&amp;#160; Not a lot of people fell into this category.&amp;#160; However, these tended to be the same type of people who fit into the &lt;a href="http://www.thelazyadmin.com"&gt;Lazy Admin&lt;/a&gt; category as well.&amp;#160; When managed properly UAC wasn’t all that annoying because it wasn’t seen all that often.&amp;#160; Set-it-and-forget-it and you don’t ever see the prompt.&amp;#160; If you created the system image properly, you don’t have to constantly keep changing settings.&amp;#160; It’s a simple enough idea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Application compatibility is a pain.&amp;#160; Most applications didn’t understand the UAC, so they weren’t running with a validation and generally broke when they tried to do things they really shouldn’t be doing in the first place.&amp;#160; These are things like manipulating registry keys that don’t belong to them, writing to system folders, reading data from low-level system API’s etc.&amp;#160; This was reason #1 for disabling UAC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And now…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the general availability of Windows 7 in about 2.5 hours from now, it seems like a good time to discuss certain changes to UAC in the latest version of Windows.&amp;#160; The biggest of course being when Windows decides to check for validation.&lt;/p&gt;

&lt;p&gt;Windows 7 introduces two new levels of the UAC.&amp;#160; In Vista there was Validate Everything or Off.&amp;#160; Windows 7 added “Do Not Notify Me When I Make Changes to Windows Settings”.&amp;#160; This comes into effect when the user makes a change to a Windows setting like display resolution.&amp;#160; Windows is smart enough to realize it’s the user making the change, and allows it.&amp;#160; It’s second additional level is the same as the first, except it doesn’t hide the desktop.&lt;/p&gt;

&lt;p&gt;Now we get into some fun questions.&amp;#160; &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How does Window’s know to not show the prompt?&amp;#160; It’s fairly straightforward.&amp;#160; All Window’s executables that were released as part of the OS are signed with a certificate.&amp;#160; All executables signed with this certificate are allowed to run if user started.&amp;#160; This is only true for Window’s settings though.&amp;#160; You cannot implement this with 3rd party applications.&amp;#160; There is no auto-allow list.&lt;/li&gt;

  &lt;li&gt;How does Window’s know it’s a user starting the application?&amp;#160; Lots of applications can mimic mouse movements or keyboard commands, but they occur at a higher application level than an actual mouse move.&amp;#160; Input devices like mice and keyboards have an extremely low level driver, and only commands coming from these drivers are interpreted as user input.&amp;#160; You cannot spoof these commands.&lt;/li&gt;

  &lt;li&gt;Can you spoof mouse/keyboard input to accept the UAC request?&amp;#160; No.&amp;#160; The UAC prompt is created in a separate Windows desktop.&amp;#160; Other well known desktops include the Locked screen, login screen, and the Cardspace admin application.&amp;#160; No application can cross these desktops, so an application running in your personal desktop cannot push commands into the UAC desktop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mark Russinovich has an excellent article in &lt;a href="http://technet.microsoft.com/en-us/magazine/2009.07.uac.aspx"&gt;TechNet Magazine&lt;/a&gt; that goes into more detail about changes to the UAC.&amp;#160; Hopefully this post at least covered all sides of the UAC debate.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/141.aspx?rss</link><category>Authentication</category><category>Development</category><category>Microsoft</category><category>MSDN</category><category>Programming</category><category>Technet</category><category>Windows</category><category>Windows 7</category><pubDate>Wed, 21 Oct 2009 21:34:08 GMT</pubDate></item><item><title>Ultimate Windows 7 Keyboard Shortcuts List</title><description>&lt;p&gt;Got this list in an email earlier today.&amp;#160; Not sure the original source, as it was a copy/paste job, but holy crap what a list.&amp;#160; If someone can point out where it originated I will attribute it as necessary.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Ease of Access keyboard shortcuts&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Right Shift for eight seconds: Turn Filter Keys on and off &lt;/li&gt;    &lt;li&gt;Left Alt + Left Shift + PrtScn (or PrtScn): Turn High Contrast on or off &lt;/li&gt;    &lt;li&gt;Left Alt + Left Shift + Num Lock: Turn Mouse Keys on or off &lt;/li&gt;    &lt;li&gt;Shift five times: Turn Sticky Keys on or off &lt;/li&gt;    &lt;li&gt;Num Lock for five seconds: Turn Toggle Keys on or off &lt;/li&gt;    &lt;li&gt;Windows logo key + U: Open the Ease of Access Center &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;General keyboard shortcuts &lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;F1: Display Help &lt;/li&gt;    &lt;li&gt;Ctrl + C (or Ctrl + Insert): Copy the selected item &lt;/li&gt;    &lt;li&gt;Ctrl + X: Cut the selected item &lt;/li&gt;    &lt;li&gt;Ctrl + V (or Shift + Insert): Paste the selected item &lt;/li&gt;    &lt;li&gt;Ctrl + Z: Undo an action &lt;/li&gt;    &lt;li&gt;Ctrl + Y: Redo an action &lt;/li&gt;    &lt;li&gt;Delete (or Ctrl + D): Delete the selected item and move it to the Recycle Bin&lt;/li&gt;    &lt;li&gt;Shift + Delete: Delete the selected item without moving it to the Recycle Bin first &lt;/li&gt;    &lt;li&gt;F2: Rename the selected item &lt;/li&gt;    &lt;li&gt;Ctrl + Right Arrow: Move the cursor to the beginning of the next word &lt;/li&gt;    &lt;li&gt;Ctrl + Left Arrow: Move the cursor to the beginning of the previous word &lt;/li&gt;    &lt;li&gt;Ctrl + Down Arrow: Move the cursor to the beginning of the next paragraph &lt;/li&gt;    &lt;li&gt;Ctrl + Up Arrow: Move the cursor to the beginning of the previous paragraph &lt;/li&gt;    &lt;li&gt;Ctrl + Shift with an arrow key: Select a block of text &lt;/li&gt;    &lt;li&gt;Shift + any arrow key: Select more than one item in a window or on the desktop, or select text within a document&lt;/li&gt;    &lt;li&gt;Ctrl + any arrow key + Spacebar: Select multiple individual items in a window or on the desktop &lt;/li&gt;    &lt;li&gt;Ctrl + A: Select all items in a document or window &lt;/li&gt;    &lt;li&gt;F3: Search for a file or folder &lt;/li&gt;    &lt;li&gt;Alt + Enter: Display properties for the selected item &lt;/li&gt;    &lt;li&gt;Alt + F4: Close the active item, or exit the active program &lt;/li&gt;    &lt;li&gt;Alt + Spacebar: Open the shortcut menu for the active window &lt;/li&gt;    &lt;li&gt;Ctrl + F4: Close the active document (in programs that allow you to have multiple documents open simultaneously) &lt;/li&gt;    &lt;li&gt;Alt + Tab: Switch between open items &lt;/li&gt;    &lt;li&gt;Ctrl + Alt + Tab: Use the arrow keys to switch between open items &lt;/li&gt;    &lt;li&gt;Ctrl + Mouse scroll wheel: Change the size of icons on the desktop &lt;/li&gt;    &lt;li&gt;Windows logo key + Tab: Cycle through programs on the taskbar by using Aero Flip 3-D &lt;/li&gt;    &lt;li&gt;Ctrl+ Windows logo key + Tab: Use the arrow keys to cycle through programs on the taskbar by using Aero Flip 3-D &lt;/li&gt;    &lt;li&gt;Alt + Esc: Cycle through items in the order in which they were opened &lt;/li&gt;    &lt;li&gt;F6: Cycle through screen elements in a window or on the desktop &lt;/li&gt;    &lt;li&gt;F4: Display the address bar list in Windows Explorer &lt;/li&gt;    &lt;li&gt;Shift + F10: Display the shortcut menu for the selected item &lt;/li&gt;    &lt;li&gt;Ctrl + Esc: Open the Start menu &lt;/li&gt;    &lt;li&gt;Alt + underlined letter: Display the corresponding menu &lt;/li&gt;    &lt;li&gt;Alt + underlined letter: Perform the menu command (or other underlined command) &lt;/li&gt;    &lt;li&gt;F10: Activate the menu bar in the active program &lt;/li&gt;    &lt;li&gt;Right Arrow: Open the next menu to the right, or open a submenu &lt;/li&gt;    &lt;li&gt;Left Arrow: Open the next menu to the left, or close a submenu &lt;/li&gt;    &lt;li&gt;F5 (or Ctrl + R): Refresh the active window &lt;/li&gt;    &lt;li&gt;Alt + Up Arrow: View the folder one level up in Windows Explorer &lt;/li&gt;    &lt;li&gt;Esc: Cancel the current task &lt;/li&gt;    &lt;li&gt;Ctrl + Shift + Esc: Open Task Manager&lt;/li&gt;    &lt;li&gt;Shift when you insert a CD: Prevent the CD from automatically playing &lt;/li&gt;    &lt;li&gt;Left Alt + Shift: Switch the input language when multiple input languages are enabled &lt;/li&gt;    &lt;li&gt;Ctrl + ShiftL: Switch the keyboard layout when multiple keyboard layouts are enabled &lt;/li&gt;    &lt;li&gt;Right or Left Ctrl + Shift: Change the reading direction of text in right-to-left reading languages &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Dialog box&lt;/b&gt;&lt;b&gt; keyboard shortcuts &lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ctrl + Tab: Move forward through tabs &lt;/li&gt;    &lt;li&gt;Ctrl + Shift + Tab: Move back through tabs &lt;/li&gt;    &lt;li&gt;Tab: Move forward through options &lt;/li&gt;    &lt;li&gt;Shift + Tab: Move back through options &lt;/li&gt;    &lt;li&gt;Alt + underlined letter: Perform the command (or select the option) that goes with that letter &lt;/li&gt;

  &lt;li&gt;Enter: Replaces clicking the mouse for many selected commands &lt;/li&gt;

  &lt;li&gt;Spacebar: Select or clear the check box if the active option is a check box &lt;/li&gt;

  &lt;li&gt;Arrow keys: Select a button if the active option is a group of option buttons &lt;/li&gt;

  &lt;li&gt;F1: Display Help &lt;/li&gt;

  &lt;li&gt;F4: Display the items in the active list &lt;/li&gt;

  &lt;li&gt;Backspace: Open a folder one level up if a folder is selected in the Save As or Open dialog box &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Windows logo key keyboard shortcuts &lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Windows logo key: Open or close the Start menu. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Pause: Display the System Properties dialog box. &lt;/li&gt;

  &lt;li&gt;Windows logo key + D: Display the desktop. &lt;/li&gt;

  &lt;li&gt;Windows logo key + M: Minimize all windows. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Shift + M: Restore minimized windows to the desktop. &lt;/li&gt;

  &lt;li&gt;Windows logo key + E: Open Computer. &lt;/li&gt;

  &lt;li&gt;Windows logo key + F: Search for a file or folder. &lt;/li&gt;

  &lt;li&gt;Ctrl + Windows logo key + F: Search for computers (if you’re on a network). &lt;/li&gt;

  &lt;li&gt;Windows logo key + L: Lock your computer or switch users. &lt;/li&gt;

  &lt;li&gt;Windows logo key + R: Open the Run dialog box. &lt;/li&gt;

  &lt;li&gt;Windows logo key + T: Cycle through programs on the taskbar. &lt;/li&gt;

  &lt;li&gt;Windows logo key + number: Start the program pinned to the taskbar in the position indicated by the number. If the program is already running, switch to that program. &lt;/li&gt;

  &lt;li&gt;Shift + Windows logo key + number: Start a new instance of the program pinned to the taskbar in the position indicated by the number. &lt;/li&gt;

  &lt;li&gt;Ctrl + Windows logo key + number: Switch to the last active window of the program pinned to the taskbar in the position indicated by the number. &lt;/li&gt;

  &lt;li&gt;Alt + Windows logo key + number: Open the Jump List for the program pinned to the taskbar in the position indicated by the number. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Tab: Cycle through programs on the taskbar by using Aero Flip 3-D. &lt;/li&gt;

  &lt;li&gt;Ctrl+Windows logo key + Tab: Use the arrow keys to cycle through programs on the taskbar by using Aero Flip 3-D. &lt;/li&gt;

  &lt;li&gt;Ctrl+Windows logo key + B: Switch to the program that displayed a message in the notification area. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Spacebar: Preview the desktop. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Up Arrow: Maximize the window. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Left Arrow: Maximize the window to the left side of the screen. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Right Arrow: Maximize the window to the right side of the screen. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Down Arrow: Minimize the window. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Home: Minimize all but the active window. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Shift + Up Arrow: Stretch the window to the top and bottom of the screen. &lt;/li&gt;

  &lt;li&gt;Windows logo key + Shift+ Left Arrow or Right Arrow: Move a window from one monitor to another. &lt;/li&gt;

  &lt;li&gt;Windows logo key + P: Choose a presentation display mode. &lt;/li&gt;

  &lt;li&gt;Windows logo key + G: Cycle through gadgets. &lt;/li&gt;

  &lt;li&gt;Windows logo key + U: Open Ease of Access Center. &lt;/li&gt;

  &lt;li&gt;Windows logo key + X: Open Windows Mobility Center. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Windows Explorer keyboard shortcuts&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ctrl + N: Open a new window &lt;/li&gt;

  &lt;li&gt;Ctrl + W: Close the current window &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + N: Create a new folder &lt;/li&gt;

  &lt;li&gt;End: Display the bottom of the active window &lt;/li&gt;

  &lt;li&gt;Home: Display the top of the active window &lt;/li&gt;

  &lt;li&gt;F11: Maximize or minimize the active window &lt;/li&gt;

  &lt;li&gt;Ctrl + Period (.): Rotate a picture clockwise &lt;/li&gt;

  &lt;li&gt;Ctrl + Comma (,): Rotate a picture counter-clockwise &lt;/li&gt;

  &lt;li&gt;Num Lock + Asterisk (*) on numeric keypad: Display all subfolders under the selected folder &lt;/li&gt;

  &lt;li&gt;Num Lock + Plus Sign (+) on numeric keypad: Display the contents of the selected folder &lt;/li&gt;

  &lt;li&gt;Num Lock + Minus Sign (-) on numeric keypad: Collapse the selected folder &lt;/li&gt;

  &lt;li&gt;Left Arrow: Collapse the current selection (if it’s expanded), or select the parent folder &lt;/li&gt;

  &lt;li&gt;Alt + Enter: Open the Properties dialog box for the selected item &lt;/li&gt;

  &lt;li&gt;Alt + P: Display the preview pane &lt;/li&gt;

  &lt;li&gt;Alt + Left Arrow: View the previous folder &lt;/li&gt;

  &lt;li&gt;Backspace: View the previous folder &lt;/li&gt;

  &lt;li&gt;Right Arrow: Display the current selection (if it’s collapsed), or select the first subfolder &lt;/li&gt;

  &lt;li&gt;Alt + Right Arrow: View the next folder &lt;/li&gt;

  &lt;li&gt;Alt + Up Arrow: View the parent folder &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + E: Display all folders above the selected folder &lt;/li&gt;

  &lt;li&gt;Ctrl + Mouse scroll wheel: Change the size and appearance of file and folder icons &lt;/li&gt;

  &lt;li&gt;Alt + D: Select the address bar &lt;/li&gt;

  &lt;li&gt;Ctrl + E: Select the search box &lt;/li&gt;

  &lt;li&gt;Ctrl + F: Select the search box &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Taskbar keyboard shortcuts&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Shift + Click on a taskbar button: Open a program or quickly open another instance of a program &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + Click on a taskbar button: Open a program as an administrator &lt;/li&gt;

  &lt;li&gt;Shift + Right-click on a taskbar button: Show the window menu for the program &lt;/li&gt;

  &lt;li&gt;Shift + Right-click on a grouped taskbar button: Show the window menu for the group &lt;/li&gt;

  &lt;li&gt;Ctrl + Click on a grouped taskbar button: Cycle through the windows of the group &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Magnifier keyboard shortcuts &lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Windows logo key + Plus Sign or Minus Sign: Zoom in or out &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + Spacebar: Preview the desktop in full-screen mode&lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + F: Switch to full-screen mode &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + L: Switch to lens mode &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + D: Switch to docked mode &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + I: Invert colors &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + arrow keys: Pan in the direction of the arrow keys &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + R: Resize the lens &lt;/li&gt;

  &lt;li&gt;Windows logo key + Esc: Exit Magnifier &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Remote Desktop Connection keyboard shortcuts&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Alt + Page Up: Move between programs from left to right. &lt;/li&gt;

  &lt;li&gt;Alt + Page Down: Move between programs from right to left. &lt;/li&gt;

  &lt;li&gt;Alt + Insert: Cycle through programs in the order that they were started in. &lt;/li&gt;

  &lt;li&gt;Alt + Home: Display the Start menu. &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + Break: Switch between a window and full screen. &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + End: Display the Windows Security dialog box. &lt;/li&gt;

  &lt;li&gt;Alt + Delete: Display the system menu. &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + Minus Sign (-) on the numeric keypad: Place a copy of the active window, within the client, on the Terminal server clipboard (provides the same functionality as pressing Alt + PrtScn on a local computer). &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + Plus Sign (+) on the numeric keypad: Place a copy of the entire client window area on the Terminal server clipboard (provides the same functionality as pressing PrtScn on a local computer). &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + Right Arrow: Tab out of the Remote Desktop controls to a control in the host program (for example, a button or a text box). Useful when the Remote Desktop controls are embedded in another (host) program. &lt;/li&gt;

  &lt;li&gt;Ctrl + Alt + Left Arrow: Tab out of the Remote Desktop controls to a control in the host program (for example, a button or a text box). Useful when the Remote Desktop controls are embedded in another (host) program. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Paint keyboard shortcuts&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ctrl + N: Create a new picture &lt;/li&gt;

  &lt;li&gt;Ctrl + O: Open an existing picture &lt;/li&gt;

  &lt;li&gt;Ctrl + S: Save changes to a picture &lt;/li&gt;

  &lt;li&gt;F12: Save the picture as a new file &lt;/li&gt;

  &lt;li&gt;Ctrl + P: Print a picture &lt;/li&gt;

  &lt;li&gt;Alt + F4: Close a picture and its Paint window &lt;/li&gt;

  &lt;li&gt;Ctrl + Z: Undo a change &lt;/li&gt;

  &lt;li&gt;Ctrl + Y: Redo a change &lt;/li&gt;

  &lt;li&gt;Ctrl + A: Select the entire picture &lt;/li&gt;

  &lt;li&gt;Ctrl + X: Cut a selection &lt;/li&gt;

  &lt;li&gt;Ctrl + C: Copy a selection to the Clipboard &lt;/li&gt;

  &lt;li&gt;Ctrl + V: Paste a selection from the Clipboard &lt;/li&gt;

  &lt;li&gt;Right Arrow: Move the selection or active shape right by one pixel &lt;/li&gt;

  &lt;li&gt;Left Arrow: Move the selection or active shape left by one pixel &lt;/li&gt;

  &lt;li&gt;Down Arrow: Move the selection or active shape down by one pixel &lt;/li&gt;

  &lt;li&gt;Up Arrow: Move the selection or active shape up by one pixel &lt;/li&gt;

  &lt;li&gt;Esc: Cancel a selection &lt;/li&gt;

  &lt;li&gt;Delete: Delete a selection &lt;/li&gt;

  &lt;li&gt;Ctrl + B: Bold selected text &lt;/li&gt;

  &lt;li&gt;Ctrl + +: Increase the width of a brush, line, or shape outline by one pixel &lt;/li&gt;

  &lt;li&gt;Ctrl + -: Decrease the width of a brush, line, or shape outline by one pixel &lt;/li&gt;

  &lt;li&gt;Ctrl + I: Italicize selected text &lt;/li&gt;

  &lt;li&gt;Ctrl + U: Underline selected text &lt;/li&gt;

  &lt;li&gt;Ctrl + E: Open the Properties dialog box &lt;/li&gt;

  &lt;li&gt;Ctrl + W: Open the Resize and Skew dialog box &lt;/li&gt;

  &lt;li&gt;Ctrl + Page Up: Zoom in &lt;/li&gt;

  &lt;li&gt;Ctrl + Page Down: Zoom out &lt;/li&gt;

  &lt;li&gt;F11: View a picture in full-screen mode &lt;/li&gt;

  &lt;li&gt;Ctrl + R: Show or hide the ruler &lt;/li&gt;

  &lt;li&gt;Ctrl + G: Show or hide gridlines &lt;/li&gt;

  &lt;li&gt;F10 or Alt: Display keytips &lt;/li&gt;

  &lt;li&gt;Shift + F10: Show the current shortcut menu &lt;/li&gt;

  &lt;li&gt;F1: Open Paint Help &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;WordPad keyboard shortcuts&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ctrl + N: Create a new document &lt;/li&gt;

  &lt;li&gt;Ctrl + O: Open an existing document &lt;/li&gt;

  &lt;li&gt;Ctrl + S: Save changes to a document &lt;/li&gt;

  &lt;li&gt;F12: Save the document as a new file &lt;/li&gt;

  &lt;li&gt;Ctrl + P: Print a document &lt;/li&gt;

  &lt;li&gt;Alt + F4: Close WordPad &lt;/li&gt;

  &lt;li&gt;Ctrl + Z: Undo a change &lt;/li&gt;

  &lt;li&gt;Ctrl + Y: Redo a change &lt;/li&gt;

  &lt;li&gt;Ctrl + A: Select the entire document &lt;/li&gt;

  &lt;li&gt;Ctrl + X: Cut a selection &lt;/li&gt;

  &lt;li&gt;Ctrl + C: Copy a selection to the Clipboard &lt;/li&gt;

  &lt;li&gt;Ctrl + V: Paste a selection from the Clipboard &lt;/li&gt;

  &lt;li&gt;Ctrl + B: Make selected text bold &lt;/li&gt;

  &lt;li&gt;Ctrl + I: Italicize selected text &lt;/li&gt;

  &lt;li&gt;Ctrl + U: Underline selected text &lt;/li&gt;

  &lt;li&gt;Ctrl + =: Make selected text subscript &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + =: Make selected text superscript &lt;/li&gt;

  &lt;li&gt;Ctrl + L: Align text left &lt;/li&gt;

  &lt;li&gt;Ctrl + E Align text center &lt;/li&gt;

  &lt;li&gt;Ctrl + R:: Align text right &lt;/li&gt;

  &lt;li&gt;Ctrl + J: Justify text &lt;/li&gt;

  &lt;li&gt;Ctrl + 1: Set single line spacing &lt;/li&gt;

  &lt;li&gt;Ctrl + 2: Set double line spacing &lt;/li&gt;

  &lt;li&gt;Ctrl + 5: Set line spacing to 1.5 &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + &amp;gt;: Increase the font size&lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + &amp;lt;: Decrease the font size &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + A: Change characters to all capitals &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + L: Change the bullet style &lt;/li&gt;

  &lt;li&gt;Ctrl + D: Insert a Microsoft Paint drawing &lt;/li&gt;

  &lt;li&gt;Ctrl + F: Find text in a document &lt;/li&gt;

  &lt;li&gt;F3: Find the next instance of the text in the Find dialog box &lt;/li&gt;

  &lt;li&gt;Ctrl + H: Replace text in a document &lt;/li&gt;

  &lt;li&gt;Ctrl + Left Arrow: Move the cursor one word to the left &lt;/li&gt;

  &lt;li&gt;Ctrl + Right Arrow: Move the cursor one word to the right &lt;/li&gt;

  &lt;li&gt;Ctrl + Up Arrow: Move the cursor to the line above &lt;/li&gt;

  &lt;li&gt;Ctrl + Down Arrow: Move the cursor to the line below &lt;/li&gt;

  &lt;li&gt;Ctrl + Home: Move to the beginning of the document &lt;/li&gt;

  &lt;li&gt;Ctrl + End: Move to the end of the document &lt;/li&gt;

  &lt;li&gt;Ctrl + Page Up: Move up one page &lt;/li&gt;

  &lt;li&gt;Ctrl + Page Down: Move down one page &lt;/li&gt;

  &lt;li&gt;Ctrl + Delete: Delete the next word &lt;/li&gt;

  &lt;li&gt;F10: Display keytips &lt;/li&gt;

  &lt;li&gt;Shift + F10: Show the current shortcut menu &lt;/li&gt;

  &lt;li&gt;F1: Open WordPad Help &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Calculator keyboard shortcuts&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Alt + 1: Switch to Standard mode &lt;/li&gt;

  &lt;li&gt;Alt + 2: Switch to Scientific mode &lt;/li&gt;

  &lt;li&gt;Alt + 3: Switch to Programmer mode &lt;/li&gt;

  &lt;li&gt;Alt + 4: Switch to Statistics mode &lt;/li&gt;

  &lt;li&gt;Ctrl + E: Open date calculations &lt;/li&gt;

  &lt;li&gt;Ctrl + H: Turn calculation history on or off &lt;/li&gt;

  &lt;li&gt;Ctrl + U: Open unit conversion &lt;/li&gt;

  &lt;li&gt;Alt + C: Calculate or solve date calculations and worksheets &lt;/li&gt;

  &lt;li&gt;F1: Open Calculator Help &lt;/li&gt;

  &lt;li&gt;Ctrl + Q: Press the M- button &lt;/li&gt;

  &lt;li&gt;Ctrl + P: Press the M+ button &lt;/li&gt;

  &lt;li&gt;Ctrl + M: Press the MS button &lt;/li&gt;

  &lt;li&gt;Ctrl + R: Press the MR button &lt;/li&gt;

  &lt;li&gt;Ctrl + L: Press the MC button &lt;/li&gt;

  &lt;li&gt;%: Press the % button &lt;/li&gt;

  &lt;li&gt;F9: Press the +/’“ button &lt;/li&gt;

  &lt;li&gt;/: Press the / button &lt;/li&gt;

  &lt;li&gt;*: Press the * button &lt;/li&gt;

  &lt;li&gt;+: Press the + button &lt;/li&gt;

  &lt;li&gt;-: Press the ‘“ button &lt;/li&gt;

  &lt;li&gt;R: Press the 1/x— button &lt;/li&gt;

  &lt;li&gt;@: Press the square root button &lt;/li&gt;

  &lt;li&gt;0-9: Press the number buttons (0-9) &lt;/li&gt;

  &lt;li&gt;=: Press the = button &lt;/li&gt;

  &lt;li&gt;.: Press the . (decimal point) button &lt;/li&gt;

  &lt;li&gt;Backspace: Press the backspace button &lt;/li&gt;

  &lt;li&gt;Esc: Press the C button &lt;/li&gt;

  &lt;li&gt;Del: Press the CE button &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + D: Clear the calculation history &lt;/li&gt;

  &lt;li&gt;F2: Edit the calculation history &lt;/li&gt;

  &lt;li&gt;Up Arrow key: Navigate up in the calculation history &lt;/li&gt;

  &lt;li&gt;Down Arrow key: Navigate down in the calculation history &lt;/li&gt;

  &lt;li&gt;Esc: Cancel editing the calculation history &lt;/li&gt;

  &lt;li&gt;Enter: Recalculate the calculation history after editing &lt;/li&gt;

  &lt;li&gt;F3: Select Degrees in Scientific mode &lt;/li&gt;

  &lt;li&gt;F4: Select Radians in Scientific mode &lt;/li&gt;

  &lt;li&gt;F5: Select Grads in Scientific mode &lt;/li&gt;

  &lt;li&gt;I: Press the Inv button in Scientific mode &lt;/li&gt;

  &lt;li&gt;D: Press the Mod button in Scientific mode &lt;/li&gt;

  &lt;li&gt;Ctrl + S: Press the sinh button in Scientific mode &lt;/li&gt;

  &lt;li&gt;Ctrl + O: Press the cosh button in Scientific mode &lt;/li&gt;

  &lt;li&gt;Ctrl + T: Press the tanh button in Scientific mode &lt;/li&gt;

  &lt;li&gt;(: Press the ( button in Scientific mode &lt;/li&gt;

  &lt;li&gt;): Press the ) button in Scientific mode &lt;/li&gt;

  &lt;li&gt;N: Press the ln button in Scientific mode &lt;/li&gt;

  &lt;li&gt;;: Press the Int button in Scientific mode &lt;/li&gt;

  &lt;li&gt;S: Press the sin button in Scientific mode &lt;/li&gt;

  &lt;li&gt;O: Press the cos button in Scientific mode &lt;/li&gt;

  &lt;li&gt;T: Press the tan button in Scientific mode &lt;/li&gt;

  &lt;li&gt;M: Press the dms button in Scientific mode &lt;/li&gt;

  &lt;li&gt;P: Press the pi button in Scientific mode &lt;/li&gt;

  &lt;li&gt;V: Press the F-E button in Scientific mode &lt;/li&gt;

  &lt;li&gt;X: Press the Exp button in Scientific mode &lt;/li&gt;

  &lt;li&gt;Q: Press the x^2 button in Scientific mode &lt;/li&gt;

  &lt;li&gt;Y: Press the x^y button in Scientific mode &lt;/li&gt;

  &lt;li&gt;#: Press the x^3 button in Scientific mode &lt;/li&gt;

  &lt;li&gt;L: Press the log button in Scientific mode &lt;/li&gt;

  &lt;li&gt;!: Press the n! button in Scientific mode &lt;/li&gt;

  &lt;li&gt;Ctrl + Y: Press the yâˆšx button in Scientific mode &lt;/li&gt;

  &lt;li&gt;Ctrl + B: Press the 3âˆšx button in Scientific mode &lt;/li&gt;

  &lt;li&gt;Ctrl + G: Press the 10x button in Scientific mode &lt;/li&gt;

  &lt;li&gt;F5: Select Hex in Programmer mode &lt;/li&gt;

  &lt;li&gt;F6: Select Dec in Programmer mode &lt;/li&gt;

  &lt;li&gt;F7: Select Oct in Programmer mode &lt;/li&gt;

  &lt;li&gt;F8: Select Bin in Programmer mode &lt;/li&gt;

  &lt;li&gt;F12: Select Qword in Programmer mode &lt;/li&gt;

  &lt;li&gt;F2: Select Dword in Programmer mode &lt;/li&gt;

  &lt;li&gt;F3: Select Word in Programmer mode &lt;/li&gt;

  &lt;li&gt;F4: Select Byte in Programmer mode &lt;/li&gt;

  &lt;li&gt;K: Press the RoR button in Programmer mode &lt;/li&gt;

  &lt;li&gt;J: Press the RoL button in Programmer mode &lt;/li&gt;

  &lt;li&gt;&amp;lt;: Press the Lsh button in Programmer mode &lt;/li&gt;

  &lt;li&gt;&amp;gt;: Press the Rsh button in Programmer mode &lt;/li&gt;

  &lt;li&gt;%: Press the Mod button in Programmer mode &lt;/li&gt;

  &lt;li&gt;(: Press the ( button in Programmer mode &lt;/li&gt;

  &lt;li&gt;): Press the ) button in Programmer mode &lt;/li&gt;

  &lt;li&gt;|: Press the Or button in Programmer mode &lt;/li&gt;

  &lt;li&gt;^: Press the Xor button in Programmer mode &lt;/li&gt;

  &lt;li&gt;~: Press the Not button in Programmer mode &lt;/li&gt;

  &lt;li&gt;&amp;amp;: Press the And button in Programmer mode &lt;/li&gt;

  &lt;li&gt;A-F: Press the A-F buttons in Programmer mode &lt;/li&gt;

  &lt;li&gt;Spacebar: Toggles the bit value in Programmer mode &lt;/li&gt;

  &lt;li&gt;A: Press the Average button in Statistics mode &lt;/li&gt;

  &lt;li&gt;Ctrl + A: Press the Average Sq button in Statistics mode &lt;/li&gt;

  &lt;li&gt;S: Press the Sum button in Statistics mode &lt;/li&gt;

  &lt;li&gt;Ctrl + S: Press the Sum Sq button in Statistics mode &lt;/li&gt;

  &lt;li&gt;T: Press the S.D. button in Statistics mode &lt;/li&gt;

  &lt;li&gt;Ctrl + T: Press the Inv S.D. button in Statistics mode &lt;/li&gt;

  &lt;li&gt;D: Press the CAD button in Statistics mode &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Windows Journal keyboard shortcuts&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ctrl + N: Start a new note &lt;/li&gt;

  &lt;li&gt;Ctrl + O: Open a recently used note &lt;/li&gt;

  &lt;li&gt;Ctrl + S: Save changes to a note &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + V: Move a note to a specific folder &lt;/li&gt;

  &lt;li&gt;Ctrl + P: Print a note &lt;/li&gt;

  &lt;li&gt;Alt + F4: Close a note and its Journal window &lt;/li&gt;

  &lt;li&gt;Ctrl + Z: Undo a change &lt;/li&gt;

  &lt;li&gt;Ctrl + Y: Redo a change &lt;/li&gt;

  &lt;li&gt;Ctrl + A: Select all items on a page &lt;/li&gt;

  &lt;li&gt;Ctrl + X: Cut a selection &lt;/li&gt;

  &lt;li&gt;Ctrl + C: Copy a selection to the Clipboard &lt;/li&gt;

  &lt;li&gt;Ctrl + V: Paste a selection from the Clipboard &lt;/li&gt;

  &lt;li&gt;Esc: Cancel a selection &lt;/li&gt;

  &lt;li&gt;Delete: Delete a selection &lt;/li&gt;

  &lt;li&gt;Ctrl + F: Start a basic find &lt;/li&gt;

  &lt;li&gt;Ctrl + G: Go to a page &lt;/li&gt;

  &lt;li&gt;F5: Refresh find results &lt;/li&gt;

  &lt;li&gt;F5: Refresh the note list &lt;/li&gt;

  &lt;li&gt;F6: Toggle between a note list and a note &lt;/li&gt;

  &lt;li&gt;Ctrl + Shift + C: Display a shortcut menu for column headings in a note list &lt;/li&gt;

  &lt;li&gt;F11: View a note in full-screen mode &lt;/li&gt;

  &lt;li&gt;F1: Open Journal Help &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Windows Help viewer keyboard shortcuts&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Alt + C: Display the Table of Contents &lt;/li&gt;

  &lt;li&gt;Alt + N: Display the Connection Settings menu &lt;/li&gt;

  &lt;li&gt;F10: Display the Options menu &lt;/li&gt;

  &lt;li&gt;Alt + Left Arrow: Move back to the previously viewed topic &lt;/li&gt;

  &lt;li&gt;Alt + Right Arrow: Move forward to the next (previously viewed) topic &lt;/li&gt;

  &lt;li&gt;Alt + A: Display the customer support page &lt;/li&gt;

  &lt;li&gt;Alt + Home: Display the Help and Support home page &lt;/li&gt;

  &lt;li&gt;Home: Move to the beginning of a topic &lt;/li&gt;

  &lt;li&gt;End: Move to the end of a topic &lt;/li&gt;

  &lt;li&gt;Ctrl + F: Search the current topic &lt;/li&gt;

  &lt;li&gt;Ctrl + P: Print a topic &lt;/li&gt;

  &lt;li&gt;F3: Move the cursor to the search box &lt;/li&gt;
&lt;/ul&gt;</description><link>http://www.syfuhs.net/article/140.aspx?rss</link><category>Launch Event</category><category>Microsoft</category><category>Random</category><category>Windows</category><category>Windows 7</category><category>Windows Vista</category><pubDate>Wed, 21 Oct 2009 10:43:11 GMT</pubDate></item><item><title>Creating a new Forest and Domain on Server Core</title><description>&lt;p&gt;Over the weekend, good friend, Mitch Garvis decided it was necessary to rebuild his home network.&amp;#160; Now, most home networks don’t have a $25,000 Server at the core.&amp;#160; This one did.&amp;#160; Given that, we decided to do it right.&amp;#160;&amp;#160;&amp;#160; The network architecture called for Virtualization, so we decided to use Hyper-V.&amp;#160; The network called for management, so we decided to install SCCM and Ops Manager.&amp;#160; The network called for simplicity so we used Active Directory.&lt;/p&gt;  &lt;p&gt;However, we decided to up the ante and install this all on Server Core.&amp;#160; Now, the tricky part is that we needed to install Active Directory.&amp;#160; The reason this became tricky was because there is no documented procedure out there on how to install a new Forest on Core.&amp;#160; There are lots of very smart people on the internet that described how to install new domains part of existing forests, but not new forests.&amp;#160; So we got to work.&lt;/p&gt;  &lt;p&gt;After running dcpromo a few times we realized we couldn’t create the Forest by throwing commands at it.&amp;#160; It occurred to one of us that we should try creating an unattend.txt install file.&amp;#160; After a few tries, we figured out the proper structure of the file, and after 10 minutes of watching the CLI spit out random sentences, we had a new domain.&amp;#160; &lt;/p&gt;  &lt;p&gt;The structure of the file is fairly simple, but you need the correct variable data.&amp;#160; We used the following unattend.txt file to create the new domain:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[DCInstall]      &lt;br /&gt;InstallDNS=yes       &lt;br /&gt;NewDomain=forest       &lt;br /&gt;NewDomainDNSName=swmi.ca       &lt;br /&gt;DomainNetBiosName=SWMI       &lt;br /&gt;SiteName=Default-First-Site-Name       &lt;br /&gt;ReplicaOrNewDomain=domain       &lt;br /&gt;ForestLevel=3       &lt;br /&gt;DomainLevel=3       &lt;br /&gt;DatabasePath=&amp;quot;%systemroot%\ntds&amp;quot;       &lt;br /&gt;LogPath=&amp;quot;%systemroot%\ntds&amp;quot;       &lt;br /&gt;RebootOnCompletion=yes       &lt;br /&gt;SYSVOLPath=&amp;quot;%systemroot%\sysvol&amp;quot;       &lt;br /&gt;SafeModeAdminPassword=Pa$$w0rd&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; Now: Once the file was created we put it in the root of C: on the server core machine, and typed the following command:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;dcpromo /unattend:c:\unattend.txt&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Surprisingly it worked.&amp;#160; After checking with Microsoft, this is a supported option, and it’s not a hack in any way.&amp;#160; It’s just undocumented.&lt;/p&gt;  &lt;p&gt;Until now.&lt;/p&gt;  &lt;p&gt;Reference: Mitch Garvis, SWMI, &lt;a title="http://garvis.ca/blogs/mitch/archive/2009/10/12/creating-a-new-domain-forest-on-server-core.aspx" href="http://garvis.ca/blogs/mitch/archive/2009/10/12/creating-a-new-domain-forest-on-server-core.aspx"&gt;http://garvis.ca/blogs/mitch/archive/2009/10/12/creating-a-new-domain-forest-on-server-core.aspx&lt;/a&gt;&lt;/p&gt;</description><link>http://www.syfuhs.net/article/139.aspx?rss</link><category>Authentication</category><category>Microsoft</category><category>Patterns and Practices</category><category>Security</category><category>Windows</category><pubDate>Thu, 15 Oct 2009 15:40:42 GMT</pubDate></item><item><title>October 15th Evening SQL Server DBA Event: Disaster Recovery &amp;ndash; Edwin Sarmiento, MVP for SQL Server</title><description>&lt;p&gt;&lt;a href="http://ottawa.sqlpass.org/"&gt;&lt;strong&gt;&lt;img title="October 15th Evening SQL Server DBA Event: Disaster Recovery Edwin Sarmiento, MVP for SQL Server" border="0" alt="OttawaSQL.net" src="http://www.toddlamothe.com/wordpress/wp-content/uploads/2009/10/clip_image002.jpg" width="466" height="80" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;October 15&lt;sup&gt;th&lt;/sup&gt; Evening SQL Server DBA Event: Disaster Recovery – Edwin Sarmiento, MVP for SQL Server&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Speaker: Edwin M. Sarmiento, MVP for SQL Server&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Date: Thursday, October 15&lt;sup&gt;th&lt;/sup&gt;, 2009&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Time: 6:00 PM to 8:30 PM&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Venue: Microsoft Ottawa Office&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RSVP:&lt;/strong&gt; &lt;strong&gt;&lt;a href="http://www.clicktoattend.com/?id=142063"&gt;http://www.clicktoattend.com/?id=142063&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Session 1 (6:00 PM to 7:10 PM):&amp;#160; Understanding and communicating business-orientated disaster recovery&amp;#160; concepts and objectives&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So you have a database maintenance plan that does a backup of your databases and you’re pretty sure that it works fine. But is that really enough? Are you sure that you will be able to meet your service level agreements if and when disaster strikes? This session will explain the need for understanding and communicating business-orientated disaster recovery concepts and objectives to the business stakeholders. This will include defining your RPO and RTO and how it affects your disaster recovery plan.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Session 2 (7:20 to 8:30 PM):&amp;#160; Disaster Recovery for the Paranoid DBA&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In the first session, much have been said about disaster recovery in general. In this session, we will look at bringing the concepts down to SQL Server. This session will focus on dealing with a recovery situation for a SQL Server 2005/2008 database, an instance or an entire server. Topics covered will be backup schemes, partial backups and piecemeal restores, page-level recovery and a thorough understanding of how to troubleshoot a &amp;quot;Suspect&amp;quot; database.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://mvp.support.microsoft.com/profile/edwin.sarmiento"&gt;&lt;img title="October 15th Evening SQL Server DBA Event: Disaster Recovery Edwin Sarmiento, MVP for SQL Server" border="0" alt="Edwin M. Sarmiento" src="http://www.toddlamothe.com/wordpress/wp-content/uploads/2009/10/clip_image003.jpg" width="85" height="108" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Speaker Bio:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://mvp.support.microsoft.com/profile/edwin.sarmiento"&gt;&lt;strong&gt;Edwin M. Sarmiento&lt;/strong&gt;&lt;/a&gt; (MVP for SQL Server) works as a Senior SQL Server DBA/Systems Engineer for &lt;a href="http://www.pythian.com"&gt;The Pythian Group&lt;/a&gt; in Ottawa, Canada. He is very passionate about technology but has interests in music, professional and organizational development, leadership and management matters when not working with databases. He lives up to his primary mission statement – &amp;quot;&lt;em&gt;To help people grow and develop their full potential as God has planned for them&lt;/em&gt;.&amp;quot;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Refreshments:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pizza and pop will be provided.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note: No one will be admitted by building security after 5:55 PM, and the event will start promptly at 6:00 PM.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;OttawaSQL.net is a community group of Ottawa area developers and IT professionals.&amp;#160; We share an interest in Microsoft’s data technologies especially:&amp;#160; SQL Server, SharePoint, PerformancePoint, Workflow Foundations, LINQ, ADO.NET and Entity Framework.&lt;/em&gt;&lt;/p&gt;</description><link>http://www.syfuhs.net/article/138.aspx?rss</link><category>Canada</category><category>Community</category><category>Microsoft</category><category>MSDN</category><category>Ottawa</category><category>Presentations</category><category>SQL</category><category>User Group</category><pubDate>Wed, 14 Oct 2009 13:27:20 GMT</pubDate></item><item><title>Pictures from Techdays and FailCamp in Toronto</title><description>&lt;p&gt;After getting my camera back from &lt;a href="http://www.garvis.ca"&gt;Mitch Garvis&lt;/a&gt; after &lt;a href="http://www.techdays.ca"&gt;Techdays&lt;/a&gt; and FailCamp in Toronto, I decided to upload photos from the events, and to my surprise there were some pretty good shots.&amp;#160; Here is what I came back with:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4007417044/"&gt;&lt;img alt="4007417044" src="http://static.flickr.com/2460/4007417044_e5056fa85f.jpg" width="400" height="533" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4006643533/"&gt;&lt;img alt="4006643533" src="http://static.flickr.com/2526/4006643533_13b4d6a77b.jpg" width="400" height="533" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4007406358/"&gt;&lt;img alt="4007406358" src="http://static.flickr.com/2549/4007406358_d4a191917d.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4006631995/"&gt;&lt;img alt="4006631995" src="http://static.flickr.com/2519/4006631995_57b58de48b.jpg" width="400" height="533" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4007393754/"&gt;&lt;img alt="4007393754" src="http://static.flickr.com/2479/4007393754_883427524a.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4006623627/"&gt;&lt;img alt="4006623627" src="http://static.flickr.com/2481/4006623627_5d190f6234.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4006616273/"&gt;&lt;img alt="4006616273" src="http://static.flickr.com/2492/4006616273_60ea9a1aa7.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4007373722/"&gt;&lt;img alt="4007373722" src="http://static.flickr.com/2436/4007373722_5ba0cae667.jpg" width="400" height="533" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4006582013/"&gt;&lt;img alt="4006582013" src="http://static.flickr.com/2591/4006582013_81c097cc7c.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4006587385/"&gt;&lt;img alt="4006587385" src="http://static.flickr.com/2592/4006587385_bcc91a9ca4.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4007358462/"&gt;&lt;img alt="4007358462" src="http://static.flickr.com/2666/4007358462_2c11598ac5.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4006597103/"&gt;&lt;img alt="4006597103" src="http://static.flickr.com/2485/4006597103_b0c73c69b3.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/43510997@N07/4007340130/"&gt;&lt;img alt="4007340130" src="http://static.flickr.com/2622/4007340130_8db9d75f82.jpg" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://www.syfuhs.net/article/137.aspx?rss</link><category>Canada</category><category>Canadiana</category><category>Code Camp</category><category>Community</category><category>Conferences</category><category>Fun Stuff</category><category>Microsoft</category><category>Musings</category><category>Presentations</category><category>Random</category><category>Techdays</category><category>Toronto</category><category>Windows</category><category>Windows 7</category><pubDate>Tue, 13 Oct 2009 13:28:03 GMT</pubDate></item><item><title>ASP.NET WebForms are NOT Being Overthrown by MVC</title><description>&lt;P&gt;It’s always a fun day when &lt;A href="http://weblogs.asp.net/scottgu/"&gt;the man&lt;/A&gt; himself, &lt;A href="http://www.twitter.com/scottgu"&gt;ScottGu&lt;/A&gt; responds to my email.&amp;nbsp; Basically it all started last week at &lt;A href="http://www.techdays.ca/"&gt;Techdays&lt;/A&gt; in Toronto (pictures to follow, I promise).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Quite a few people asked me about MVC, and whether or not it will replace Web Forms.&amp;nbsp; My response was that it wouldn’t, but I didn’t have any tangible proof.&amp;nbsp; I discussed new features in .NET 4.0, and how the development is still going strong for future releases.&amp;nbsp; Some didn’t buy it.&lt;/P&gt;
&lt;P&gt;So, earlier today I emailed Scott and asked him for proof.&amp;nbsp; This was his response:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Hi Steve,&lt;/P&gt;
&lt;P&gt;Web Forms is definitely not going away – we are making substantial improvements to it with ASP.NET 4.0 (I’m doing a blog series on some of the improvements now).&amp;nbsp; ASP.NET MVC provides another option people can use for their UI layer – but it is simply an option, not a replacement.&lt;/P&gt;
&lt;P&gt;In terms of the dev team size, the number of people on the ASP.NET team working on WebForms and MVC is actually about equal.&amp;nbsp; All of the core infrastructure investments (security, caching, config, deployment, etc) also apply equally to both.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now, MVC is new.&amp;nbsp; MVC is powerful.&amp;nbsp; MVC is pretty freakin cool in what it can do.&amp;nbsp; But it won’t replace WebForms.&amp;nbsp; Frankly, I like WebForms.&amp;nbsp; MVC does have it’s place though.&amp;nbsp; I can see a lot benefits to using it.&amp;nbsp; It alleviates a lot of boilerplate code in certain development architectures, and that is never a bad thing.&lt;/P&gt;
&lt;P&gt;Long Live WebForms!&lt;/P&gt;</description><link>http://www.syfuhs.net/article/136.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>Architects</category><category>ASP.NET</category><category>Development</category><category>Microsoft</category><category>Programming</category><category>Techdays</category><pubDate>Tue, 06 Oct 2009 19:28:05 GMT</pubDate></item><item><title>The RACI Model</title><description>&lt;p&gt;&lt;b&gt;Definition: &lt;/b&gt;&lt;i&gt;a model used to help define who is responsible / accountable; The RACI model is built around a simple 2-dimensional matrix which shows the 'involvement' of Functional Roles in a set of Activities. 'Involvement' can be of different kinds: Responsibility, Accountability, Consultancy or Informational (hence the RACI acronym). The model is used during analysis and documentation efforts in all types of Service Management, Quality Management, Process- or Project Management. A resulting RACI chart is a simple and powerful vehicle for communication. Defining and documenting responsibility is one of the fundamental principles in all types of Governance (Corporate-, IT-Governance).&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;What does that mean?&amp;#160; All projects require management.&amp;#160; Simple enough.&amp;#160; This model is designed to define each level of management and required interaction on a project or application.&amp;#160; The four core levels of involvement attempt to define who should know what about the project/application/system.&amp;#160; Each level has more direct interaction than the previous level.&lt;/p&gt;  &lt;p&gt;The levels are defined as:&lt;/p&gt; &lt;dl&gt;&lt;dt&gt;&lt;strong&gt;Responsible&lt;/strong&gt; &lt;/dt&gt;&lt;/dl&gt;  &lt;blockquote&gt;   &lt;p&gt;Those who do the work to achieve the task. There is typically one role with a participation type of &lt;i&gt;Responsible&lt;/i&gt;, although others can be delegated to assist in the work required (see also &lt;i&gt;RASCI&lt;/i&gt; below for separately identifying those who participate in a supporting role). &lt;/p&gt; &lt;/blockquote&gt; &lt;dl&gt;&lt;dt&gt;&lt;strong&gt;Accountable (also Approver or final Approving authority)&lt;/strong&gt; &lt;/dt&gt;&lt;/dl&gt;  &lt;blockquote&gt;   &lt;p&gt;Those who are ultimately accountable for the correct and thorough completion of the deliverable or task, and the one to whom &lt;i&gt;Responsible&lt;/i&gt; is accountable. In other words, an &lt;i&gt;Accountable&lt;/i&gt; must sign off (Approve) on work that &lt;i&gt;Responsible&lt;/i&gt; provides. There must be only one &lt;i&gt;Accountable&lt;/i&gt; specified for each task or deliverable. &lt;/p&gt; &lt;/blockquote&gt; &lt;dl&gt;&lt;dt&gt;&lt;strong&gt;Consulted&lt;/strong&gt; &lt;/dt&gt;&lt;/dl&gt;  &lt;blockquote&gt;   &lt;p&gt;Those whose opinions are sought; and with whom there is two-way communication. &lt;/p&gt; &lt;/blockquote&gt; &lt;dl&gt;&lt;dt&gt;&lt;strong&gt;Informed&lt;/strong&gt; &lt;/dt&gt;&lt;/dl&gt;  &lt;blockquote&gt;   &lt;p&gt;Those who are kept up-to-date on progress, often only on completion of the task or deliverable; and with whom there is just one-way communication. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Very often the role that is &lt;i&gt;Accountable&lt;/i&gt; for a task or deliverable may also be &lt;i&gt;Responsible&lt;/i&gt; for completing it (indicated on the matrix by the task or deliverable having a role &lt;i&gt;Accountable&lt;/i&gt; for it, but no role &lt;i&gt;Responsible&lt;/i&gt; for its completion, i.e. it is implied). Outside of this exception, it is generally recommended that each role in the project or process for each task receive, at most, just one of the participation types. Where more than one participation type is shown, this generally implies that participation has not yet been fully resolved, which can impede the value of this technique in clarifying the participation of each role on each task.&lt;/p&gt;  &lt;p&gt;Note: I stole most of that from &lt;a href="http://en.wikipedia.org/wiki/Responsibility_assignment_matrix"&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/135.aspx?rss</link><category>Architects</category><category>Business</category><pubDate>Thu, 17 Sep 2009 18:40:23 GMT</pubDate></item><item><title>Roles and Responsibilities for Managing an Enterprise Web Site</title><description>&lt;p&gt;The intent of this post is to create a summary definition of roles required to adequately manage an enterprise website. It is designed to be used in tandem with a RACI (Responsibility, Accountability, Consultable, and Informed) document to provide a unified management model for the web Infrastructure developed.&lt;/p&gt;  &lt;p&gt;Each role is neither inclusive nor exclusive in that any one person can qualify for more than one role, and more than one person can qualify for the same role, as long as each role has been fulfilled adequately.&lt;/p&gt;  &lt;p&gt;In a future post I will discuss the creation of a RACI document.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Roles&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Database Administrator&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Database administrators are charged with controlling website data resources, and use repeatable practices to ensure data availability, integrity and security, recover corrupted data and eliminate data redundancy, as well as leverages tools to improve database performance and efficiency.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Application Administrator&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Application Administrators are charged with installing, supporting, and maintaining applications, and planning for and responding to service outages and other problems including, but not limited to, troubleshooting end-user issues at the application level.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Server/Operating System Administrator&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Server Administrators are charged with installing, supporting, and maintaining servers and other systems, as well planning for and responding to server outages and other problems including, but not limited to, troubleshooting Application Administration issues at the Operating System level.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;User Account/Permissions Administrator&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Account Administrators are charged with managing user accounts as well as permissions for users within the system. This includes, but is not limited to, locking and unlocking user accounts, as well as resetting passwords.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Hardware Administrator&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Hardware Administrators are charged with managing server hardware and resources. This includes, but is not limited to, deployment of servers as well as troubleshooting issues such as faulty hardware.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Network Administrator&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Network Administrators are charged with managing physical network resources such as routers and switches and logical network resources such as firewall rules and IP settings. This includes, but is not limited to, managing routing rules as well as troubleshooting connectivity issues.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;These roles were created in an attempt to define job responsibilities at an executive level.&amp;#160; A RACI document is then suggested as the next step to define what each role entails at the management level.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/134.aspx?rss</link><category>Architects</category><category>Business</category><category>Development</category><category>Patterns and Practices</category><category>Programming</category><category>Security</category><pubDate>Thu, 17 Sep 2009 18:26:47 GMT</pubDate></item><item><title>ASP.NET Application Deployment Best Practices &amp;ndash; Part 2</title><description>&lt;p&gt;In my previous post I started a list of best practices that should be followed for deploying applications to production systems.&amp;#160; This is continuation of that post.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create new Virtual Application in IIS &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;Right-click [website app will live in] &amp;gt; Create Application&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;Creating a new application provides each ASP.NET application its own sandbox environment. The benefit to this is that site resources do not get shared between applications. It is a requirement for all new web applications written in ASP.NET.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Create a new application pool for Virtual App      &lt;ul&gt;       &lt;li&gt;Right click on Application Pools and select Add Application Pool &lt;/li&gt;        &lt;li&gt;Define name: “apAppName” - ‘ap’ followed by the Application Name &lt;/li&gt;        &lt;li&gt;Set Framework version to 2.0 &lt;/li&gt;        &lt;li&gt;Set the Managed Pipeline mode: Most applications should use the default setting &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;An application pool is a distinct process running on the web server. It segregates processes and system resources in an attempt to prevent errant web applications from allocating all system resources. It also prevents any nasty application crashes from taking the entire website down. It is also necessary for creating distinct security contexts for applications. Setting this up is essential for high availability.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Set the memory limit for application pool &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;There is a finite amount of available resources on the web servers. We do not want any one application to allocate them all. Setting a reasonable max per application lets the core website run comfortably and allows for many applications to run at any given time. If it is a small lightweight application, the max limit could be set lower.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Create and appropriately use an app_Offline.htm file &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Friendlier than an ASP.NET exception screen (aka the &lt;i&gt;Yellow Screen of Death&lt;/i&gt;)&lt;/p&gt;    &lt;p&gt;If this file exists it will automatically stop all traffic into a web application. Aptly named, it is best used when server updates occur that might take the application down for an extended period of time. It should be stylized to conform to the application style. Best practice is to keep the file in the root directory &lt;u&gt;of the application&lt;/u&gt; renamed to app_Online.htm, that way it can easily be found if an emergency update were to occur.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Don’t use the Default Website instance      &lt;ul&gt;       &lt;li&gt;This should be disabled by default &lt;/li&gt;        &lt;li&gt;Either create a new website instance or create a Virtual Application under existing website instance &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Numerous vulnerabilities in the wild make certain assumptions that the default website instance is used, which creates reasonably predictable attack vectors given that default properties exist. If we disable this instance and create new instances it will mitigate a number of attacks immediately.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Create two Build Profiles      &lt;ul&gt;       &lt;li&gt;One for development/testing &lt;/li&gt;        &lt;li&gt;One for production &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Using two build profiles is very handy for managing configuration settings such as connection strings and application keys. It lessens the manageability issues associated with developing web applications remotely. This is not a necessity, though it does make development easier.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Don’t use the wwwroot folder to host web apps &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Define a root folder for all web applications other than wwwroot&lt;/p&gt;    &lt;p&gt;As with the previous comment, there are vulnerabilities that use the default wwwroot folder as an attack vector. A simple mitigation to this is to move the root folders for websites to another location, preferably on a different disk than the Operating System.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;These two lists sum up what I believe to be a substantial set of best practices for application deployments.&amp;#160; The intent was not to create a list of best development best practices, or which development model to follow, but as an aid in strictly deployment.&amp;#160; It should be left to you or your department to define development models.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/133.aspx?rss</link><category>.NET</category><category>Architects</category><category>ASP.NET</category><category>Beta</category><category>Bugs</category><category>Development</category><category>Microsoft</category><category>Patterns and Practices</category><category>Programming</category><category>Security</category><pubDate>Thu, 17 Sep 2009 18:12:25 GMT</pubDate></item><item><title>ASP.NET Application Deployment Best Practices &amp;ndash; Part 1</title><description>&lt;p&gt;Over the last few months I have been collecting best practices for deploying ASP.NET applications to production.&amp;#160; The intent was to create a document that described the necessary steps needed to deploy consistent, reliable, secure applications that are easily maintainable for administrators.&amp;#160; The result was an 11 page document.&amp;#160; I would like to take a couple excerpts from it and essentially list what I believe to be key requirements for production applications.&lt;/p&gt;

&lt;p&gt;The key is consistency.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Generate new encryption keys&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;The benefit to doing this is that internal hashing and encrypting schemes use different keys between applications. If an application is compromised, the private keys that can get recovered will have no effect on other applications. This is most important in applications that use Forms Authentication such as the member’s section. This Key Generator app is using built-in .NET key generation code in the RNGCryptoServiceProvider.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Version and give Assemblies Strong Names&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Use &lt;b&gt;AssemblyInfo.cs&lt;/b&gt; file: &lt;/p&gt;

  &lt;p&gt;[assembly: AssemblyTitle(&amp;quot;NameSpace.Based.AssemblyTitle&amp;quot;)] 
    &lt;br /&gt;[assembly: AssemblyDescription(&amp;quot;This is My Awesome Assembly…&amp;quot;)] 

    &lt;br /&gt;[assembly: AssemblyConfiguration(&amp;quot;&amp;quot;)] 

    &lt;br /&gt;[assembly: AssemblyCompany(&amp;quot;My Awesome Company&amp;quot;)] 

    &lt;br /&gt;[assembly: AssemblyProduct(&amp;quot;ApplicationName&amp;quot;)] 

    &lt;br /&gt;[assembly: AssemblyCopyright(&amp;quot;Copyright © 2009&amp;quot;)] 

    &lt;br /&gt;[assembly: AssemblyTrademark(&amp;quot;TM Application Name&amp;quot;)] 

    &lt;br /&gt;[assembly: AssemblyCulture(&amp;quot;en-CA&amp;quot;)] &lt;/p&gt;

  &lt;p&gt;Strong names and versioning is the backbone of .NET assemblies. It helps distinguish between different versions of assemblies, and provides copyright attributes to code we have written internally. This is especially helpful if we decide to sell any of our applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Deploy Shared Assemblies to the GAC&lt;/li&gt;

  &lt;ul&gt;
    &lt;li&gt;Assemblies such as common controls&lt;/li&gt;

    &lt;li&gt;&lt;i&gt;gacutil.exe -I &amp;quot;g:\dev\published\myApp\bin\myAssembly.dll&amp;quot;&lt;/i&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;If any assemblies are created that get used across multiple applications they should be deployed to the GAC (Global Assembly Cache). Examples of this could be Data Access Layers, or common controls such as the Telerik controls. The benefit to doing this is that we will not have multiple copies of the same DLL in different applications. A requirement of doing this is that the assembly must be signed and use a multipart name.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Pre-Compile Site: [In Visual Studio] &lt;b&gt;Build &amp;gt; Publish Web Site&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Any application that is in production should be running in a compiled state. What this means is that any application should not have any code-behind files or App_Code class files on the servers. This will limit damage if our servers are compromised, as the attacker will not be able to modify the source.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Encrypt SQL Connections and Connection Strings&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Encrypt SQL Connection Strings&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;&lt;i&gt;Aspnet_regiis.exe -pe connectionStrings -site myWebSite -app /myWebApp&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Encrypt SQL Connections&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;Add &lt;i&gt;‘Encrypt=True’&lt;/i&gt; to all connection strings before encrypting&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Force encryption on SQL Server protocol configurations: &lt;a href="http://www.syfuhs.net/article/38.aspx"&gt;http://www.syfuhs.net/article/38.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;SQL Connections contain sensitive data such as username/password combinations for access to database servers. These connection strings are stored in web.config files which are stored in plain-text on the server. If malicious users access these files they will have credentials to access the servers. Encrypting the strings will prevent the ability to read the config section.&lt;/p&gt;

  &lt;p&gt;However, encrypting the connection string is only half of the issue. SQL transactions are transmitted across the network in plain-text. Sensitive data could be acquired if a network sniffer was running on a compromised web server. SQL Connections should also be encrypted using SSL Certificates.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Use key file generated by Strong Name Tool:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\sn.exe&lt;/p&gt;

  &lt;p&gt;&lt;i&gt;“sn.exe -k g:\dev\path\to\app\myAppKey.snk”&lt;/i&gt;&lt;/p&gt;

  &lt;p&gt;Signing an assembly provides validation that the code is ours. It will also allow for GAC deployment by giving the assembly a signature. The key file should be unique to each application, and should be kept in a secure location.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Set &lt;i&gt;retail=”true”&lt;/i&gt; in &lt;b&gt;machine.config&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;lt;configuration&amp;gt;&lt;/p&gt;

  &lt;p&gt;&amp;lt;system.web&amp;gt;&lt;/p&gt;

  &lt;p&gt;&lt;b&gt;&amp;lt;deployment retail=&amp;quot;true&amp;quot;/&amp;gt; &lt;/b&gt;&lt;/p&gt;

  &lt;p&gt;&amp;lt;/system.web&amp;gt;&lt;/p&gt;

  &lt;p&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;

  &lt;p&gt;In a production environment applications do not want to show exception errors or trace messages. Setting the retail property to true is simple way to turn off debugging, tracing, and force the application to use friendly error pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In part 2 I continue my post on more best practices for deployment to a production environment.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/132.aspx?rss</link><category>.NET</category><category>Architects</category><category>ASP.NET</category><category>Beta</category><category>Development</category><category>IIS</category><category>Patterns and Practices</category><category>Programming</category><category>Security</category><category>SQL</category><pubDate>Thu, 17 Sep 2009 18:01:09 GMT</pubDate></item><item><title>Naming Conventions can be Your Enemy</title><description>&lt;p&gt;Or your ally in the fight against technology management.&amp;#160; Earlier this week I was given the task of doing some naming for new servers, which is pretty much SOP.&amp;#160; Problem is, we don’t have a naming standard.&amp;#160; As such, I may choose a name that annoys someone, or they choose a name that annoys me.&amp;#160; This becomes very political.&amp;#160; We don’t want to name things in such a way that they annoy people.&amp;#160; It’s a bad idea.&amp;#160; And, much to my dismay, I said something this morning that was pretty much just insulting to one of my team members.&lt;/p&gt;  &lt;p&gt;I could have given loads of excuses, but it wouldn’t have mattered.&amp;#160; I was being petty.&amp;#160; Man, that’s a bad idea in an office.&amp;#160; It divides teams, and man, that’s *really* bad in an office.&amp;#160; The reason it came about was because a few people were talking about moving into “fun” server names, as apposed to functional server names.&amp;#160; Examples of this would be Cygnus or Badger, as apposed to GR-SQLCluster1.&lt;/p&gt;  &lt;p&gt;The reasons behind it being:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It’s more secure if the attacker doesn’t know what the server does,&lt;strong&gt; based on it’s name&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Server roles change over time, so GR-SQLCluster1 might become relegated to an apps server&lt;/li&gt;    &lt;li&gt;Sections of functional names become redundant&lt;/li&gt;    &lt;li&gt;Organize names by type; i.e. birds, galaxies, different words for snow, etc&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At first glance, they make great sense.&amp;#160; However, after a little time to digest the reasons, a few things become clear.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If an attacker is able to get to the server, to the point that they can know the name, you are already screwed&lt;/li&gt;    &lt;li&gt;A good practice is to rebuild the server if it changes roles, and with that change the name&lt;/li&gt;    &lt;li&gt;People don’t want to connect to the Badger Server&lt;/li&gt;    &lt;li&gt;You need a reference list to figure out what the Cygnus server does/where the Cygnus server physically is&lt;/li&gt;    &lt;li&gt;If you want to create DNS entries to provide functional names to it, that’s another level of complexity to manage&lt;/li&gt;    &lt;li&gt;What happens when you run out of server names?&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Given this list, it now becomes an interesting debate.&amp;#160; But I have one question for you:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;As a developer, would you name a variable ‘badger’ if it was holding a shopping cart?&amp;#160; Not a chance.&amp;#160; You would only do that if it were badger related, and even then you are better off with ‘meanLittleWoodlandCreature’ in case you change something.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In my response I called the security reason laughable.&amp;#160; Again – petty and a really, really, &lt;em&gt;really&lt;/em&gt; bad idea when in a team discussion.&amp;#160; Obviously I was in a pissy mood for some reason, or maybe a &lt;em&gt;greater than thou&lt;/em&gt; mood thinking I knew more about the topic.&amp;#160; I tend to do that.&lt;/p&gt;  &lt;p&gt;I think what really made me do it was that we are developers, not administrators.&amp;#160; It’s not our job to name servers.&amp;#160; So why were we?&amp;#160; I didn’t want to piss anyone off, I just wanted to name the server so we could move on to the next stage of the deployment.&amp;#160; This situation could have easily been averted.&lt;/p&gt;  &lt;p&gt;If we had a naming convention for our servers, regardless of fun vs functional, I could have followed the convention and washed my hands of the problem.&amp;#160; So I guess the question is, why don’t we have one?&amp;#160; Lot’s of companies don’t have them.&amp;#160; And I think it’s because of stagnant server growth.&lt;/p&gt;  &lt;p&gt;If you are only setting up a couple servers every so often, you aren’t bogged down with these types of questions.&amp;#160; You have time to discuss.&amp;#160; The problem we are having, I think, is because we have increased our server growth dramatically in the last little while, which hasn’t given us enough time to discuss names as a group.&amp;#160; I was rushing to get the server into production because the administrators were busy working on other tasks that were filed under the category “Do Now Or ELSE!”&lt;/p&gt;  &lt;p&gt;So I think we need a naming convention.&amp;#160; A functional naming convention.&amp;#160; It will prevent a world of hurt down the road.&amp;#160; Now to get buy in, and ask for forgiveness.&amp;#160; I still have lots to learn.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/131.aspx?rss</link><category>Architects</category><category>Business</category><category>Development</category><category>Patterns and Practices</category><category>SharePoint</category><pubDate>Fri, 28 Aug 2009 21:45:05 GMT</pubDate></item><item><title>The Boston Tea Party has gone Batty</title><description>&lt;p&gt;This morning I saw an interesting post on Twitter.&amp;#160; Which in-and-of-itself is kinda amazing, but that’s not the point.&amp;#160; The post was on something called the &lt;a href="http://windows7sins.org/"&gt;Windows 7 Sins&lt;/a&gt; site.&amp;#160; It is a campaign created by the &lt;a href="http://www.fsf.org"&gt;Free Software Foundation&lt;/a&gt; to highlight everything that is wrong philosophically with &lt;a href="http://www.microsoft.com/windows/windows-7/default.aspx"&gt;Windows 7&lt;/a&gt;.&amp;#160; Now, I’m all for philosophical debates, but this is just plain batty.&amp;#160; So what did I do?&amp;#160; I acted!&amp;#160; I emailed the FSF people at &lt;a href="mailto:campaigns@fsf.org"&gt;campaigns@fsf.org&lt;/a&gt; the following email:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Ya know, if you sold software, you wouldn’t need to keep asking people for money. Basic principle of economics. Just sayin.&lt;/p&gt;    &lt;p&gt;Also, a widget provides functionality and interaction. An image doesn’t. See the Windows 7 Sins “widget”.&lt;/p&gt;    &lt;p&gt;Now, what I don’t get is this whole Boston Common thing. Is this an attempt at recreating the Boston Tea Party, except with (what I hope is) more regard for the environment and not tea, but software, as the “widget” proposes? If this were the case, in order to get a hold of said software, legally, you would need to buy it. Sounds counterintuitive.&lt;/p&gt;    &lt;p&gt;Unless you are proposing people illegally obtain, as per license agreements define, the software and do what they will with it. Which is pretty much just plain ol’ illegal. “So was the Boston Tea Party” is an excellent counter argument. However, the Tea Party was about rebellion from a Government, not a company. The government makes laws, a company does not. The rebellion was against unfair taxation, something the Government controls. Unless of course you are rebelling against the government too. Which I guess is ok, except the government has already ruled against Microsoft in many cases regarding such topics as anti-trust, anti-competitive nature, etc. They don’t like ‘em either. Well, the justice department doesn’t anyway.&lt;/p&gt;    &lt;p&gt;I just don’t get it.&lt;/p&gt;    &lt;p&gt;Regards,&lt;/p&gt;    &lt;p&gt;Steve Syfuhs      &lt;br /&gt;&lt;em&gt;Software Developer and/or Architect Guy&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I wonder how many people I annoyed with it.&amp;#160; We shall see.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/130.aspx?rss</link><category>Microsoft</category><category>Musings</category><category>Open Source</category><category>Windows 7</category><pubDate>Wed, 26 Aug 2009 19:40:40 GMT</pubDate></item><item><title>Move Their Cheese! (and Change the Design)</title><description>&lt;p&gt;I tend to complain a lot.&amp;nbsp; Which frankly, doesn't do much for what I'm complaining about.&amp;nbsp; In most cases, it comes down to "okay, here is a problem, now someone else go and fix it."&amp;nbsp; There is a direct correlation to how many people I annoy too.&amp;nbsp; The number of people I annoy increases as the magnitude of my complaining-ness (hey, a new word) increases:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/upGraph_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="upGraph" border="0" alt="upGraph" src="http://www.syfuhs.net/media/blog/upGraph_thumb.png" width="465" height="277" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If I wanted to change something, obviously I’m going about it the wrong way.&amp;nbsp; However, there is a direct correlation between how often I do something wrong and the likelihood I will get it right.&amp;nbsp; See previous image.&amp;nbsp; What that means is if I keep screwing something up, eventually I am bound to get it right.&amp;nbsp; However, what is not necessarily apparent in the chart is that if I do nothing, I won’t improve upon my actions.&amp;nbsp; Maybe it is apparent, I don’t know – I’m still working on it.&lt;/p&gt;
&lt;p&gt;The reason I bring this up is because I keep hearing people bash/complain/hate the Office Ribbon and application Ribbons through Windows 7:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/ribbon2007.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="ribbon2007" border="0" alt="ribbon2007" src="http://www.syfuhs.net/media/blog/ribbon2007_thumb.png" width="519" height="160" /&gt;&lt;/a&gt; The major complaint has been that people couldn’t find what they are looking for anymore.&amp;nbsp; There aren’t any menus, so they can’t figure out how to set [insert obscure property].&amp;nbsp; It doesn’t make sense to them.&amp;nbsp; They now have to change the way they think about the application.&amp;nbsp; What is unfortunate about this is that menus are a horrible interface.&amp;nbsp; You shouldn’t have to dig through 6 layers of menus to change a single property, and that’s what Office 2003 became.&amp;nbsp; The Ribbon has it’s own problems, but it also increases user productivity greatly when the user knows how to use the Ribbon effectively.&amp;nbsp; Which in lies a major problem.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Most end-users don’t like when you move their cheese.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Well now we have a problem because people also want improved systems.&amp;nbsp; Improve the system, but don’t change it.&amp;nbsp; This paradox is why fundamentally different – game changing – designs aren’t seen all that often.&amp;nbsp; We stick with what we already know because if we deviate people will complain.&amp;nbsp; It’s a very tough way to create a better interface.&lt;/p&gt;
&lt;p&gt;So how do you create a better interface?&amp;nbsp; You keep changing it.&amp;nbsp; Guaranteed the first couple of designs are going to annoy people: i.e. the Ribbon.&lt;/p&gt;
&lt;p&gt;This is good.&lt;/p&gt;
&lt;p&gt;If you keep failing at designs, that means eventually you are bound to figure out what kind of interface works best.&amp;nbsp; You will never figure it out if you never change.&amp;nbsp; Without MicroBating MasterSoft’s (hey look, two new words) ego, I must say that Microsoft is doing well in this area.&amp;nbsp; They keep making lousy design decisions.&amp;nbsp; See Expression Blend UI, and listen to most non-technical office workers using Office 2007.&amp;nbsp; I’m sure there are quite a few instances in other applications as well.&amp;nbsp; However, and I must make this clear, Microsoft is doing the right thing.&amp;nbsp; They are actively trying to create better interfaces.&amp;nbsp; Yes, it will piss people off (it’s pissed me off quite a few times), but at least they are making the effort.&amp;nbsp; And that’s what counts.&lt;/p&gt;
&lt;p&gt;EDIT: P.S. I do like the Ribbon.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/127.aspx?rss</link><category>Architects</category><category>Development</category><category>Microsoft</category><category>Office 2007</category><category>Programming</category><category>Random</category><category>UI</category><category>UX</category><category>Windows 7</category><pubDate>Tue, 18 Aug 2009 21:20:33 GMT</pubDate></item><item><title>Stop Complaining About Software Expenses</title><description>&lt;p&gt;It’s been a long week, and it’s only Monday.&amp;#160; It all started with an off-the-cuff comment.&amp;#160; It was of the petty nature, and it certainly wasn’t accurate.&amp;#160; It seems that is usually the case with petty comments.&lt;/p&gt;  &lt;p&gt;I was berated for suggesting SharePoint Services as a replacement for our ageing intranet, and the commenter responded with a quick “SharePoint?&amp;#160; Microsoft makes that, it’ll cost too much.&amp;#160; Our current java site works just fine, and it’s free.”&amp;#160; Or something of that nature.&amp;#160; &lt;/p&gt;  &lt;p&gt;How do you respond to a petty comment?&amp;#160; It’s pretty damn hard:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;While Microsoft Office SharePoint Server 2007 does cost money for licensing, Windows SharePoint Services 3.0 (which MOSS is built on) is free.&amp;#160; Not free as in speech, but free as in beer.&amp;#160; Always has been.&amp;#160; &lt;/li&gt;    &lt;li&gt;Java is a terrible language for websites.&amp;#160; It’s slow, and none of the developers in the company know Java.&amp;#160; We all program with .NET languages.&lt;/li&gt;    &lt;li&gt;The current intranet is running on an AS/400.&lt;/li&gt;    &lt;li&gt;The bulk of the stuff we do on our current intranet could very easily be done in SharePoint, without any development.&amp;#160; And, we can also increase productivity with the added features of team workspaces and free templates for other departments.&lt;/li&gt;    &lt;li&gt;The only cost will be in man-hours setting the server up, and migrating content.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Those have been my main arguments since I started working here.&amp;#160; We are a Microsoft shop, but very often choose non-Microsoft products.&amp;#160; Hmm…&lt;/p&gt;  &lt;p&gt;The main reason we don’t use Microsoft products is cost.&amp;#160; Plain and simple.&amp;#160; Ironically, that is also the same reason WHY we use Microsoft products.&lt;/p&gt;  &lt;p&gt;We use SQL Server, Windows Server 2008, Active Directory (finally!), IIS, MOSS (soon), and program in C#.&amp;#160; We don’t use office 2007, only Office 2003, some computers are still on Windows 2000 and XP.&amp;#160; Only one computer is running Vista, and two are running Windows 7.&amp;#160; But then again, we are a Not-For-Profit company.&amp;#160; Budgets are tight.&lt;/p&gt;  &lt;p&gt;This post is NOT a comment on our current state of technology, because like I said in a previous post, we do a pretty good job of staying on the cutting edge in a few cases.&lt;/p&gt;  &lt;p&gt;This post IS a comment on the people out there who think cost is the only thing to look at when evaluating a product.&amp;#160; For the love of god, STOP bitching about price.&amp;#160; START bitching about quality.&lt;/p&gt;  &lt;p&gt;I can’t stand bad software.&amp;#160; People don’t pay for good software, but then complain about its quality.&amp;#160; Come on!&amp;#160; There is a formula out there that calculates the cost of a piece of software over time.&amp;#160; It takes into account initial cost, and the cost of the updates that follow.&amp;#160; It’s a simple y = mx+b formula.&lt;/p&gt;  &lt;p&gt;Now, when you have a higher initial cost, you tend to assume it’s of higher quality.&amp;#160; Put this into the equation, and the number of updates, and the cost to implement these updates goes down.&amp;#160; Over the life of the product, it’s cheaper to go with the software that is initially more expensive.&amp;#160; This is basic business.&lt;/p&gt;  &lt;p&gt;What this basic business formula doesn’t show you is the added headaches you get with crappy software.&amp;#160; You tend to end up with silos of systems, and silos of data.&amp;#160; You don’t get integration.&amp;#160; This is where the cost sky rockets.&amp;#160; Or more accurately, this is where productivity decreases.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ironically…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;SharePoint Services 3.0 is free.&amp;#160; It doesn’t cost anything to use.&amp;#160; It’s easy to use, and integrates with most of our internal systems.&amp;#160; I just ruined my entire argument.&amp;#160; Sorta.&amp;#160; SharePoint is a quality piece of software, and over time, it will cost less to use and maintain than any of the other intranet/middleware applications out there.&amp;#160; Most people don’t realize this.&lt;/p&gt;  &lt;p&gt;I’ll probably get flack for this one:&amp;#160; Most people don’t complain about software expenses.&amp;#160; They complain about Microsoft expenses.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“We give Microsoft too much money, and don’t get enough in return.”&lt;/li&gt;    &lt;li&gt;“There must be better software vendors out there than Microsoft that are cheaper.”&lt;/li&gt;    &lt;li&gt;“Why bother upgrading; XP Works fine.”&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Have you seen the cost of a friggen Oracle license?&lt;/strong&gt;&amp;#160; What about IBM’s iSeries?&amp;#160; Novell’s Groupwise?&amp;#160; My jaw dropped when I saw the cost of these things.&amp;#160; I can’t say a single nice thing about Groupwise.&amp;#160; It’s a terrible product.&amp;#160; IBM’s iSeries is pretty good, but it’s limited what you can do with it.&amp;#160; Oracle knows databases, but has a higher license cost than a good chunk of a department’s salary.&lt;/p&gt; &lt;p&gt;Microsoft gets most of our money because it has quality products, at a good price.&amp;#160; Look at a few competing vendors products and compare cost and quality as well as the ability to integrate across platforms.&amp;#160; Revelation is a wonderful thing.&amp;#160; You might think twice before settling on cost.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/125.aspx?rss</link><category>.NET</category><category>Business</category><category>Development</category><category>Microsoft</category><category>Open Source</category><category>Programming</category><category>SharePoint</category><category>Windows</category><pubDate>Mon, 20 Jul 2009 19:26:00 GMT</pubDate></item><item><title>Presenting at Techdays 2009!</title><description>&lt;p&gt;Still working out session details, but it looks like I will be presenting in Ottawa and Montreal for &lt;a href="http://www.techdays.ca"&gt;Techdays&lt;/a&gt; 2009.&amp;#160; I will be loitering around at the Toronto event soaking up all the techie-goodness, so come find me at any of the three events.&amp;#160; We can talk shop, shoot the breeze, or just mill about having a good time.&lt;/p&gt;  &lt;p&gt;I promise I won’t embarrass anyone.&amp;#160; Except maybe myself.&amp;#160; But that’s a warning for all occasions.&lt;/p&gt;  &lt;p&gt;Here are the dates of the events across Canada.&amp;#160; Buy your tickets before the early-bird deal runs out!&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="608"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;strong&gt;City &lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="197"&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="326"&gt;&lt;strong&gt;Venue&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;a href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009vancouver/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-vancouver"&gt;VANCOUVER &lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="197"&gt;SEPTEMBER 14-15 &lt;/td&gt;        &lt;td valign="top" width="326"&gt;Vancouver Convention Centre&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;a href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009toronto/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-toronto"&gt;&lt;strong&gt;TORONTO&lt;/strong&gt; &lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="197"&gt;&lt;strong&gt;SEPTEMBER 29-30&lt;/strong&gt; &lt;/td&gt;        &lt;td valign="top" width="326"&gt;Metro Toronto Convention Centre &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;a href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009halifax/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-halifax"&gt;HALIFAX &lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="197"&gt;NOVEMBER 2-3 &lt;/td&gt;        &lt;td valign="top" width="326"&gt;World Trade &amp;amp; Convention Centre &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;a href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009calgary/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-calgary"&gt;CALGARY &lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="197"&gt;NOVEMBER 17-18 &lt;/td&gt;        &lt;td valign="top" width="326"&gt;Calgary Stampede &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;a href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009montreal/uidValidation_F.asp?wt.mc_id=can_techdays-fr_ems-vip-montreal"&gt;&lt;strong&gt;MONTREAL&lt;/strong&gt; &lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="197"&gt;&lt;strong&gt;DECEMBER 2-3&lt;/strong&gt; &lt;/td&gt;        &lt;td valign="top" width="326"&gt;Mont-Royal Centre&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;a href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009ottawa/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-ottawa"&gt;&lt;strong&gt;OTTAWA&lt;/strong&gt; &lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="197"&gt;&lt;strong&gt;DECEMBER 9-10&lt;/strong&gt; &lt;/td&gt;        &lt;td valign="top" width="326"&gt;Hampton Inn &amp;amp; Convention Centre &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;a href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009winnipeg/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-winnipeg"&gt;WINNIPEG &lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="197"&gt;DECEMBER 15-16&lt;/td&gt;        &lt;td valign="top" width="326"&gt;Winnipeg Convention Centre &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;The Early Bird price is &lt;strong&gt;$299.&amp;#160; &lt;/strong&gt;The regular Price is &lt;b&gt;$599.&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;I will post more on the sessions I will be presenting at a later date when I get the full details.&lt;/p&gt;  &lt;p&gt;See you there!&lt;/p&gt;</description><link>http://www.syfuhs.net/article/124.aspx?rss</link><category>.NET</category><category>Architects</category><category>Canada</category><category>Community</category><category>Conferences</category><category>Development</category><category>Geek Stuff</category><category>Microsoft</category><category>Montreal</category><category>News</category><category>Ottawa</category><category>Patterns and Practices</category><category>Presentations</category><category>Programming</category><category>Techdays</category><category>Toronto</category><pubDate>Thu, 16 Jul 2009 18:28:12 GMT</pubDate></item><item><title>Apple Lowered Their Prices</title><description>&lt;p&gt;I was listening to Kevin Turner give his keynote at the &lt;a href="http://www.digitalwpc.com"&gt;World Partner Conference&lt;/a&gt; earlier and I overheard this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;And so we've been running these PC value ads. Just giving people saying, hey, what are you looking to spend? “Oh, I'm looking to spend less than $1,000.” Well we'll give you $1,000. Go in and look and see what you can buy. And they come out and they just show them. Those are completely unscripted commercials.&lt;/p&gt;    &lt;p&gt;And you know why I know they're working? Because two weeks ago we got a call from the Apple legal department saying, hey -- this is a true story -- saying, &amp;quot;Hey, you need to stop running those ads, we lowered our prices.&amp;quot; They took like $100 off or something. It was the greatest single phone call in the history that I've ever taken in business. (Applause.)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Seriously?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.digitalwpc.com/Videos/KeynoteVideos"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Kevin Turner" border="0" alt="Kevin Turner" src="http://www.syfuhs.net/media/blog/turner_1.png" width="363" height="245" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I hope this is more than just executive hyperbole.&amp;#160; Not because it’s so hard to believe, but because it’s just damn funny.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/123.aspx?rss</link><category>Fun Stuff</category><category>Microsoft</category><category>Musings</category><pubDate>Wed, 15 Jul 2009 19:37:34 GMT</pubDate></item><item><title>Poor Quebec, This is Terrible</title><description>&lt;p&gt;&lt;a href="https://www.code7contest.com/Default.aspx"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="void" border="0" alt="void" src="http://www.syfuhs.net/media/blog/void_1.png" width="557" height="52" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Microsoft certainly isn’t to blame here, it’s a law in Quebec that prevents contests from happening.&amp;#160; Better chance for me to win it though!&lt;/p&gt;</description><link>http://www.syfuhs.net/article/122.aspx?rss</link><category>.NET</category><category>Canada</category><category>Development</category><category>Microsoft</category><category>Programming</category><category>Windows 7</category><pubDate>Wed, 15 Jul 2009 19:08:01 GMT</pubDate></item><item><title>Windows Virtual PC</title><description>&lt;p&gt;Windows 7 is delivering a new form of Virtualization renamed Windows Virtual PC.&amp;#160; It’s nice to see it better integrated with Windows.&amp;#160; However there is one thing that I thought was odd about the integration:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/VM.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="VM" border="0" alt="VM" src="http://www.syfuhs.net/media/blog/VM_thumb.png" width="563" height="108" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You’ll notice on the Size attribute it shows the physical size of the config file, not the actual VM.&amp;#160; Everything else is very useful, but it just seems a bit pointless and misleading.&amp;#160; Perhaps it’s a bug.&amp;#160; I hope it is anyway.&lt;/p&gt;  &lt;p&gt;And now back to the regularly scheduled broadcast.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/121.aspx?rss</link><pubDate>Tue, 14 Jul 2009 18:58:23 GMT</pubDate></item><item><title>Silverlight 3.0 and Why Flash Still (unfortunately) Won</title><description>&lt;p&gt;Last week Silverlight 3.0 was released.&amp;#160; In Toronto, &lt;a href="http://www.objectsharp.com"&gt;ObjectSharp&lt;/a&gt; put on a very cool launch event, with lots of great demos and compelling reasons to start using Silverlight immediately.&amp;#160; I was impressed, but I’m a Microsoft fan-boy (fan-boi?), so that doesn’t count.&amp;#160; It was certainly fitting that ObjectSharp propose using Silverlight for some parts of our new website &lt;a href="http://www.woodbineentertainment.com"&gt;www.woodbineentertainment.com&lt;/a&gt;, seeing as they won the bid to build the new site.&amp;#160; I saw the potential; as did a few others on the team.&amp;#160; However, some executives did not see the benefit.&amp;#160; I respect their opinion, somewhat because I have to – they can fire me after all, and mostly because they have business sense on their side.&lt;/p&gt;  &lt;p&gt;The company is very much on the cutting edge of technology in a few respects, but very conservative in the way we choose technology.&amp;#160; For instance, our new site will be built on Microsoft Office SharePoint Server 2007.&amp;#160; I’d wager there are less than a hundred publically facing websites on the internet that use MOSS (probably due to complexity and cost), yet we chose to use it because of the potential in further developing it in future iterations.&lt;/p&gt;  &lt;p&gt;Silverlight on the other hand is a different story.&amp;#160; Recent reports peg Silverlight penetration at around 25-30% of all browsers.&amp;#160; Whether or not this is accurate, who knows.&amp;#160; It’s the only data available.&amp;#160; Flash penetration is at 96%.&amp;#160; Now, in my opinion 25% growth in 2 years on Silverlight’s part is impressive.&amp;#160; Flash has been around for nearly 2 decades.&amp;#160; There is definitely a correlation to be made in there somewhere.&lt;/p&gt;  &lt;p&gt;At this point, I was sold on using Silverlight.&amp;#160; The exec’s still weren’t.&amp;#160; Seeing as Silverlight is a browser plug-in, it must be installed in some way, shape, or form.&amp;#160; At 25%, that means our customer demographic would have around 10% penetration.&amp;#160; That is terrible.&amp;#160; Getting them to install a plug-in to view site content is a tough sell.&amp;#160; The executives didn’t want to scare away customers by making them install the plug-in.&amp;#160; SharePoint doesn’t need a browser plug-in.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;And here in lies the Catch-22&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To expand our marketed audience, we build on Silverlight to give them more content that is better authored to their needs.&amp;#160; In doing so, we lose customers because they need to install the plug-in.&amp;#160; There is no metric at this point in time to help us extrapolate the difference.&amp;#160; There is a reasonable risk involved with using such cutting-edge technology.&amp;#160; We will use it when browser penetration is high enough, yet browser penetration won’t grow if sites like ours don’t use Silverlight.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ah Well&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m a technology risk taker.&amp;#160; I live on the bleeding edge.&amp;#160; I run Exchange 2010 beta, on Server 2008 virtualized on Hyper-V, with IIS7 running this site, browsed by IE8 on Windows 7 RC, and authored in Office 2007 (2010 if Microsoft would give me the flippin bits!).&amp;#160; The company, not so much.&amp;#160; Risk is good – as long as you can mitigate it properly.&amp;#160; I can manage my risk, as it’s not the end of the world is something here crashes.&amp;#160; I don’t lose an audience.&amp;#160; If the company can’t market to it’s customers because the tools in use are too new, it will lose audience.&amp;#160; Period.&amp;#160; And that means lost revenue.&lt;/p&gt;  &lt;p&gt;Maybe we can convince the exec’s in Phase II.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/120.aspx?rss</link><category>Beta</category><category>Business</category><category>Development</category><category>Microsoft</category><category>Office 2007</category><category>Programming</category><category>SharePoint</category><category>Silverlight</category><category>Windows 7</category><pubDate>Mon, 13 Jul 2009 22:41:51 GMT</pubDate></item><item><title>User Interface Failure, Succeeding</title><description>&lt;p&gt;It’s not everyday an application interface is designed to purposefully confuse people.&amp;#160; It mostly just kinda happens.&amp;#160; There isn’t any malicious intent involved.&amp;#160; However, I’ve had it with Adobe and Google.&amp;#160; &lt;/p&gt;  &lt;p&gt;First off, let me say that I am very disappointed in Adobe for keeping Shockwave alive.&amp;#160; Merge it with Flash.&amp;#160; Keep it down to one browser plug-in, jeez.&lt;/p&gt;  &lt;p&gt;Second, shame on both companies for purposefully designing a confusing interface.&amp;#160; I visited a site recently that had a Shockwave applet.&amp;#160; I wanted to see it, so I installed the plug-in.&amp;#160; Boom, up pops this window:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="shockwaveGoogle" border="0" alt="shockwaveGoogle" src="http://www.syfuhs.net/media/blog/shockwaveGoogle_thumb.png" width="509" height="357" /&gt; &lt;/p&gt;  &lt;p&gt;I read it as this: “Hey, you just started the installation of a plug-in.&amp;#160; Click next to continue.”&amp;#160; Whereas it actually said “installing plug-in.&amp;#160; To install another plug-in you didn’t ask for, click next.”&amp;#160; The insidiousness is in the form of a little checkbox that asks if you want the toolbar.&amp;#160; The problem is that the checkbox looks like its part of the feature list, so naturally you just click next to continue installing the original plug-in.&lt;/p&gt;  &lt;p&gt;It’s a nicely designed form.&amp;#160; It conveys information perfectly.&amp;#160; Except the information tricks you.&amp;#160; It’s very malware-y.&amp;#160; I would expect such a thing from Adobe; they are starting to really annoy me.&amp;#160; But Google has always had the mantra of “do no evil”.&amp;#160; I called phooey on that long ago, and this is a perfect example of their hypocrisy.&amp;#160; I realize they play a very minor role in this situation, but they really should have rules about how people agree to install their software.&lt;/p&gt;  &lt;p&gt;I spent a good chunk of my morning yesterday listening to someone complain about how Microsoft installs the .NET remote app installer plug-in into Firefox, and how inappropriate that is.&amp;#160; In my opinion, this is way worse.&amp;#160; Microsoft just did it.&amp;#160; This is explicitly malicious.&amp;#160; They go out of their way to confuse you so they can say “hey, you agreed to install it.”&amp;#160; Phooey, indeed.&lt;/p&gt;  &lt;p&gt;&amp;lt;/rant&amp;gt;&lt;/p&gt;</description><link>http://www.syfuhs.net/article/119.aspx?rss</link><category>.NET</category><category>Microsoft</category><category>Musings</category><category>Random</category><pubDate>Wed, 08 Jul 2009 18:34:30 GMT</pubDate></item><item><title>Make it Right: Revisited</title><description>&lt;p&gt;In the previous post &lt;a href="http://www.syfuhs.net/Article/116.aspx"&gt;Make it Right&lt;/a&gt; I asked the question&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Why aren’t more people making it right?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I was curious why people don’t take the time to write software properly.&amp;#160; There are lots of jokes about bad software development:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If houses were built the same way programmers build programs, we’d all be living on the street.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Unfortunately it’s a fair statement.&amp;#160; Most programs out there suck*.&amp;#160; I used to come back with the argument that people have been building houses for thousands of years, but software for only a few decades.&amp;#160; There are bound to be issues.&amp;#160; But then it occurred to me.&lt;/p&gt;  &lt;p&gt;Mike Holmes is all about making it right, as I said in the previous post.&amp;#160; His TV show was about fixing the problems that professionals made.&amp;#160; Professionals who have been building the same thing people have built for thousands of years.&amp;#160; Wait a minute.&amp;#160; I just flawed my own argument.&lt;/p&gt;  &lt;p&gt;Houses &lt;em&gt;are&lt;/em&gt; built the same way programmers build programs.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I see three very apparent reasons.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Cheapness – People want software built quickly, as cheap as possible.&lt;/li&gt;    &lt;li&gt;Laziness – Why strain your mental processing or follow best practices when you can just do whatever first comes to mind?&lt;/li&gt;    &lt;li&gt;Uneducated – Sometimes (a lot of times) the person doing the building/development just doesn’t know what they are doing.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There are numerous other reasons why, but these three are by far the biggest across all aspects of building stuff.&amp;#160; I think they answer the basic question asked earlier, but now I have another question.&lt;/p&gt;  &lt;p&gt;Why do we let people who are lazy or uneducated build applications for us, just so we can save a few bucks?&amp;#160; We will end up paying loads more in support after the fact…&lt;/p&gt;  &lt;p&gt;*I said programs, not programmers.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/118.aspx?rss</link><category>Algorithms</category><category>Architects</category><category>Bugs</category><category>Business</category><category>Development</category><category>Patterns and Practices</category><category>School</category><pubDate>Thu, 02 Jul 2009 23:00:16 GMT</pubDate></item><item><title>Resources for Students who Hate School</title><description>&lt;p&gt;I hated school.&amp;#160; Technically, I’m still enrolled in college.&amp;#160; Bachelors of Business Management.&amp;#160; Blech.&amp;#160; I figured at least with business, I would learn something useful later in life.&amp;#160; I chose against Comp. Sci. for a few reasons.&amp;#160; One being that I know a couple PhD’s that know &lt;em&gt;nothing&lt;/em&gt; about building applications in the real world.&lt;/p&gt;  &lt;p&gt;In Comp. Sci., you learn how to build data structures, and how to make &lt;a href="http://www.syfuhs.net/Article/24.aspx" target="_blank"&gt;Mandelbrot Set’s&lt;/a&gt; process faster.&amp;#160; In business, you learn why people buy stuff.&amp;#160; Or more appropriately, you learn how to get people to buy your stuff.&lt;/p&gt;  &lt;p&gt;Seeing as I learned (taught myself?) about things like linked-lists and pointers while in grade 10-ish, and wrote/re-wrote/re-re-wrote Mandelbrot Set builders as a final project in grade 11, I think I can safely say I would be bored as all hell in University.&amp;#160; Not to mention all the theory.&amp;#160; Comp. Sci. is all about theory.&amp;#160; Maybe 10% is actually coding.&amp;#160; F-that.&lt;/p&gt;  &lt;p&gt;Business is inherently hands-on.&lt;/p&gt;  &lt;p&gt;I like hands-on.&amp;#160; It’s tangible.&lt;/p&gt;  &lt;p&gt;The only problem I had was finding resources.&amp;#160; My programming teachers were pretty cool, and were always willing to help me on algorithms that confused me, as well as extra-curricular programs when something just wasn’t jiving.&amp;#160; But I had cool teachers.&amp;#160; Not everyone is as lucky as I was.&amp;#160; And with the teachers, they weren’t thinking in C# or ASP.NET everyday like I tended to do.&amp;#160; Trying to ask them why something trivial like&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;asp:TextBox ID=&amp;quot;txtUsername&amp;quot;&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;didn’t compile was kinda painful.&amp;#160; I usually got a response along the lines of “what’s the colon for?”.&amp;#160; I always felt funny trying to explain the quasi-xml structure of ASP.NET to teachers.&amp;#160; This left me in a lame position of needing to find help.&amp;#160; Forums are great, but separating the wheat from the chaff is a waste of time.&amp;#160; Enter &lt;a href="http://www.stackoverflow.com" target="_blank"&gt;stackoverflow.com&lt;/a&gt; (4 years late, mind you) and you get answers quickly.&amp;#160; I like it.&amp;#160; I use it all the time.&amp;#160; I’d like to think that those who are willing to look for resources will find the site fairly easily.&amp;#160; However, there is another site out there that not too many people know about.&amp;#160; It’s the &lt;a href="http://www.microsoft.com/student/en-US/Default.aspx" target="_blank"&gt;Microsoft Student Experience&lt;/a&gt; site.&amp;#160; Yeah yeah, brain wash them early.&amp;#160; I drank the kool-aid early.&lt;/p&gt;  &lt;p&gt;Part of the website is dedicated to the &lt;a href="http://www.dreamspark.com/default.aspx" target="_blank"&gt;DreamSpark&lt;/a&gt; program.&amp;#160; Free, fully-licensed Microsoft products.&amp;#160; Nuff said.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The other half of the site is dedicated to students.&amp;#160; Good thing, given the name.&amp;#160; Not just students studying software development either.&amp;#160; &lt;strong&gt;All&lt;/strong&gt; students.&amp;#160; It provides tangible resources for students.&amp;#160; Stories, tutorials, and templates look to be the main content.&amp;#160; It’s all surprisingly good stuff too.&amp;#160; It ranges from school studies to general life, to post-school life.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_1.png" width="629" height="113" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;These resources may help those students who are struggling with school – at any level.&amp;#160; There are students out there with lots of potential.&amp;#160; Let’s not see it go to waste.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/117.aspx?rss</link><category>Algorithms</category><category>ASP.NET</category><category>Business</category><category>Community</category><category>Microsoft</category><category>MSDN</category><category>School</category><category>Students</category><pubDate>Mon, 29 Jun 2009 18:50:18 GMT</pubDate></item><item><title>Make it Right</title><description>&lt;p&gt;For the last couple months I’ve had a strange fascination with the TV show Holmes on Homes.&amp;#160; By no means am I construction-literate.&amp;#160; When I want something built with wood, I buy it.&amp;#160; The fascination is not about the construction, or even his manly good looks (FYI: I meant it in the friendly-way, not the &lt;em&gt;friendly&lt;/em&gt;-way), but the premise of the show.&lt;/p&gt;  &lt;p&gt;Mike Holmes is about doing a job right.&amp;#160; It doesn’t matter what the job is; it &lt;strong&gt;&lt;u&gt;&lt;em&gt;HAS&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt; to be done right.&amp;#160; Period.&amp;#160; No if’s, and’s, or but’s.&amp;#160; We need more people like him.&lt;/p&gt;  &lt;p&gt;This applies to Information Technology as well.&amp;#160; Take the &lt;a href="http://www.microsoft.com/learning/en/us/book.aspx?ID=8753&amp;amp;locale=en-us"&gt;Security Development Lifecycle&lt;/a&gt; for example:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Do it right first: securing new code helps keep down compatibility and roll-out costs.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Why aren’t more people making it right?&lt;/p&gt;</description><link>http://www.syfuhs.net/article/116.aspx?rss</link><category>Architects</category><category>Development</category><category>Patterns and Practices</category><pubDate>Fri, 26 Jun 2009 20:54:53 GMT</pubDate></item><item><title>Reminder! Windows 7 Beta Expiration</title><description>&lt;P&gt;Reposted without* permission from the &lt;A href="http://blogs.technet.com/canitpro/default.aspx" target=_blank&gt;Canadian IT Pro blog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windows7/Win7_5F00_Ultimate_5F00_3DL_5F00_1AAB59FA.jpg"&gt;&lt;IMG title="Windows 7 Ultimate" border=0 alt="Windows 7 Ultimate" align=left src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windows7/Win7_5F00_Ultimate_5F00_3DL_5F00_thumb_5F00_7A241A47.jpg" width=150 height=188 relativesrc="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windows7/Win7_5F00_Ultimate_5F00_3DL_5F00_thumb_5F00_7A241A47.jpg"&gt;&lt;/A&gt;I just wanted to post a reminder that the Windows 7 Beta is set to expire on July 1st, 2009.&amp;nbsp; What does that mean?&amp;nbsp; Well it isn’t going to explode, eat your data or lock you out.&amp;nbsp; What is going to happen is that the PC will force you to &lt;A href="http://windowsteamblog.com/blogs/windows7/archive/2009/05/25/clarification-on-the-date-for-bi-hourly-shutdowns-for-the-windows-7-beta.aspx"&gt;reboot every two hours&lt;/A&gt;.&amp;nbsp; But have no fear there is a way to fix this, simply install the Windows 7 Release Candidate which you can still download.&lt;/P&gt;
&lt;P&gt;While an upgrade isn’t supported, and I &lt;EM&gt;strongly&lt;/EM&gt; recommend a clean install, you can &lt;A href="http://blogs.msdn.com/e7/archive/2009/04/07/delivering-a-quality-upgrade-experience.aspx"&gt;find a workaround&lt;/A&gt; that will allow you to do an in place upgrade.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/windows/windows-7/download.aspx"&gt;Grab the Release Candidate here!&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P depth="0"&gt;* I never asked.&amp;nbsp; I doubt they will care.&amp;nbsp; Correct me if I am wrong, Rodney!&amp;nbsp;&lt;/P&gt;</description><link>http://www.syfuhs.net/article/115.aspx?rss</link><category>Beta</category><category>Microsoft</category><category>Musings</category><category>News</category><category>Windows</category><category>Windows 7</category><pubDate>Thu, 25 Jun 2009 14:13:54 GMT</pubDate></item><item><title>Techdays 2009 &amp;ndash; VIP Pricing</title><description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt;As budgets get tighter, Tech·Days is the perfect way to get the Tech·Ed experience without the travel expense, with two days of skill-strengthening education to help you position yourself for success by:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Learning the technology&lt;/STRONG&gt;—with a customizable agenda from over forty sessions across five technical tracks on both current technologies and new products, like Windows® 7 and Microsoft® Exchange 2010; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Connecting with Experts and Peers&lt;/STRONG&gt;—with Birds-of-a-Feather lunches and the new Windows 7 Zone, you'll have lots of opportunities to share your ideas with those who know the products best; and &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Apply what you learn&lt;/STRONG&gt;—with a Learning Kit packed with products and resources so you can continue to grow your skills long after the event has finished. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Technologies discussed:&lt;/STRONG&gt; Windows 7 Operating System, Windows Server® 2008 R2 operating system, Visual Studio® 2008 development system, Silverlight™ browser plug-in, Exchange 2010, Security/Management, and more.&lt;/P&gt;
&lt;P&gt;If you want the &lt;STRONG&gt;VIP Discount&lt;/STRONG&gt; use the promo code &lt;STRONG&gt;TD09Partner&lt;/STRONG&gt;.&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=608&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;&lt;STRONG&gt;City &lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=197&gt;&lt;STRONG&gt;Date&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=326&gt;&lt;STRONG&gt;Venue&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;&lt;A href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009vancouver/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-vancouver"&gt;VANCOUVER &lt;/A&gt;&lt;BR&gt;TD09Partner&lt;/TD&gt;
&lt;TD vAlign=top width=197&gt;SEPTEMBER 14-15 &lt;/TD&gt;
&lt;TD vAlign=top width=326&gt;Vancouver Convention Centre&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;&lt;A href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009toronto/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-toronto"&gt;TORONTO &lt;/A&gt;&lt;BR&gt;TD09Partner&lt;/TD&gt;
&lt;TD vAlign=top width=197&gt;SEPTEMBER 29-30 &lt;/TD&gt;
&lt;TD vAlign=top width=326&gt;Metro Toronto Convention Centre &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;&lt;A href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009halifax/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-halifax"&gt;HALIFAX &lt;BR&gt;&lt;/A&gt;TD09Partner&lt;/TD&gt;
&lt;TD vAlign=top width=197&gt;NOVEMBER 2-3 &lt;/TD&gt;
&lt;TD vAlign=top width=326&gt;World Trade &amp;amp; Convention Centre &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;&lt;A href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009calgary/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-calgary"&gt;CALGARY &lt;BR&gt;&lt;/A&gt;TD09Partner&lt;/TD&gt;
&lt;TD vAlign=top width=197&gt;NOVEMBER 17-18 &lt;/TD&gt;
&lt;TD vAlign=top width=326&gt;Calgary Stampede &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;&lt;A href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009montreal/uidValidation_F.asp?wt.mc_id=can_techdays-fr_ems-vip-montreal"&gt;MONTREAL &lt;/A&gt;&lt;BR&gt;TD09Partner&lt;/TD&gt;
&lt;TD vAlign=top width=197&gt;DECEMBER 2-3 &lt;/TD&gt;
&lt;TD vAlign=top width=326&gt;Mont-Royal Centre&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;&lt;A href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009ottawa/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-ottawa"&gt;OTTAWA &lt;BR&gt;&lt;/A&gt;TD09Partner&lt;/TD&gt;
&lt;TD vAlign=top width=197&gt;DECEMBER 9-10 &lt;/TD&gt;
&lt;TD vAlign=top width=326&gt;Hampton Inn &amp;amp; Convention Centre &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;&lt;A href="https://secure.lenos.com/lenos/maritzcanada/microsofttechdays2009winnipeg/uidValidation.asp?wt.mc_id=can_techdays-eng_ems-vip-winnipeg"&gt;WINNIPEG &lt;BR&gt;&lt;/A&gt;TD09Partner&lt;/TD&gt;
&lt;TD vAlign=top width=197&gt;DECEMBER 15-16&lt;/TD&gt;
&lt;TD vAlign=top width=326&gt;Winnipeg Convention Centre &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Early Bird: &lt;B&gt;$299, &lt;/B&gt;Regular Price: &lt;B&gt;$599&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;There is a good chance I will be presenting at one (or more) of these locations, so keep an eye out.&amp;nbsp; In the event that I don’t, I will definitely be enjoying the Toronto stop of the tour.&amp;nbsp; In either case, I will be there ready to learn, with a pocket-full of business cards.&lt;/P&gt;
&lt;P&gt;Oh, and I’ll be leaving with a box/bag/shopping cart* of swag.&lt;/P&gt;
&lt;P&gt;*Metaphorical shopping cart.&amp;nbsp; They are going to give away &lt;STRONG&gt;&lt;EM&gt;lots&lt;/EM&gt;&lt;/STRONG&gt; of awesome stuff.&lt;/P&gt;</description><link>http://www.syfuhs.net/article/114.aspx?rss</link><category>.NET</category><category>Business</category><category>Canada</category><category>Community</category><category>Conferences</category><category>Fun Stuff</category><category>Microsoft</category><category>Montreal</category><category>Ottawa</category><category>Presentations</category><category>Programming</category><category>Techdays</category><category>Technet</category><category>Windows</category><pubDate>Tue, 23 Jun 2009 18:12:49 GMT</pubDate></item><item><title>Bing Search Provider</title><description>&lt;p&gt;Seems it automatically updates itself in IE.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/bing_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="bing" border="0" alt="bing" src="http://www.syfuhs.net/media/blog/bing_thumb_1.png" width="303" height="63" /&gt;&lt;/a&gt;&lt;/p&gt; Cool.</description><link>http://www.syfuhs.net/article/113.aspx?rss</link><category>Geek Stuff</category><category>Microsoft</category><category>Musings</category><category>News</category><category>Random</category><pubDate>Sun, 21 Jun 2009 16:52:44 GMT</pubDate></item><item><title>Security, Architecture, and Common Sense</title><description>&lt;P&gt;Good enough is sometimes not good enough.&amp;nbsp; I’ve been doing a lot of thinking lately (well, I’m always thinking), and security has been an issue that has come up a lot.&amp;nbsp; Frankly, I’m a two-bit software developer.&amp;nbsp; I know my code isn’t the best, nor the most secure.&amp;nbsp; I use strong passwords, encrypt my sensitive data, and try to limit access to the applications for those who need to use it.&lt;/P&gt;
&lt;P&gt;In theory this works.&amp;nbsp; Problem is, it’s a lame theory.&amp;nbsp; There are so many unknown factors that have to be taken into account.&amp;nbsp; Often times they aren’t.&lt;/P&gt;
&lt;P&gt;When I go to build an application I spend time designing it and architecting it.&amp;nbsp; This is usually the case for most developers.&amp;nbsp; What I’ve noticed though, is that I don’t spend time securing it.&amp;nbsp; I can’t.&lt;/P&gt;
&lt;P&gt;Imagine building a house.&amp;nbsp; You put locks on the doors, bars on the windows, and someone breaks in.&amp;nbsp; Why?&amp;nbsp; Because someone left the key in the door.&amp;nbsp; You can’t build against that.&amp;nbsp; You just can’t.&lt;/P&gt;
&lt;P&gt;You can follow the &lt;A href="http://www.microsoft.com/learning/en/us/book.aspx?ID=8753&amp;amp;locale=en-us"&gt;Security Development Lifecycle&lt;/A&gt;, which I recommend to each every single developer I meet.&amp;nbsp; There are &lt;A href="http://blogs.msdn.com/sdl/"&gt;tons&lt;/A&gt; of &lt;A href="http://blogs.msdn.com/michael_howard/"&gt;resources&lt;/A&gt; &lt;A href="http://blogs.msdn.com/michael_howard/"&gt;available&lt;/A&gt;.&amp;nbsp; But it can only go so far.&amp;nbsp; It’s designed more for being part of the iterative processes, not the architecture.&amp;nbsp; Or at least, that’s how most people interpret it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;So?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;My &lt;A href="http://www.syfuhs.net/Article/111.aspx"&gt;last post&lt;/A&gt; talked about Single Sign-On (SSO).&amp;nbsp; It’s a great sellable feature for any product.&amp;nbsp; What most people don’t realize though is the inherent security benefit to it.&amp;nbsp; With it, that means one less password to remember, one less password that could get intercepted, one less password to change every month.&amp;nbsp; This is a fundamental architectural issue.&amp;nbsp; But at the same time, it’s common sense.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What is sometimes the simplest idea, is usually the correct solution&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;What the hell does that mean?&amp;nbsp; It means keep it simple.&amp;nbsp; Security is simple.&amp;nbsp; Keep data from prying eyes, and keep it from getting lost.&amp;nbsp; This is common sense.&lt;/P&gt;
&lt;P&gt;Security is not difficult to comprehend.&amp;nbsp; It becomes difficult when academics get involved.&amp;nbsp; Spouting theories and methodologies scares people into thinking security is extremely difficult to implement.&amp;nbsp; It’s not!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Follow the Data&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Understanding the flow of data is crucial in properly architecting an application.&amp;nbsp; It’s crucial in properly securing an application as well.&amp;nbsp; &lt;A href="http://technet.microsoft.com/en-us/library/cc262305.aspx"&gt;SSO is a perfect example of this&lt;/A&gt;.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;The SSO feature in Office SharePoint Server 2007 maps user credentials to back-end data systems. Using SSO, you can access data from server computers and services that are external to Office SharePoint Server 2007. From within Office SharePoint Server 2007 Web Parts, you can view, create, and change this data. The SSO feature ensures that:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;User credentials are managed securely.&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;User permission levels that are configured on the external data source are enforced.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;It makes perfect sense.&amp;nbsp; It’s simple when you think about, and it affects every subsystem of SharePoint.&amp;nbsp; &lt;STRONG&gt;Make security a feature.&lt;/STRONG&gt;&lt;/P&gt;</description><link>http://www.syfuhs.net/article/112.aspx?rss</link><category>.NET</category><category>Algorithms</category><category>Architects</category><category>Authentication</category><category>Development</category><category>Encryption</category><category>Microsoft</category><category>Patterns and Practices</category><category>Programming</category><category>Security</category><category>SharePoint</category><pubDate>Sun, 14 Jun 2009 20:27:05 GMT</pubDate></item><item><title>Single Sign-On</title><description>&lt;p&gt;Is it just me, or is Microsoft the only vendor out there that gives you SSO in all their products, free?&amp;#160; Novell requires you buy their add-on product.&amp;#160; Oracle has nothing relevant.&amp;#160; Never gonna happen on any Linux distro out of the box.&amp;#160; Too many variables.&lt;/p&gt;  &lt;p&gt;The integration alone is reason enough to use Microsoft products.&amp;#160; Is it just me, or do people choose to go anti-Microsoft out of spite?&lt;/p&gt;  &lt;p&gt;Just a thought.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/111.aspx?rss</link><category>Authentication</category><category>Microsoft</category><category>Random</category><category>SQL</category><category>Windows</category><pubDate>Sun, 14 Jun 2009 16:53:37 GMT</pubDate></item><item><title>Technet Plus Subscriptions</title><description>&lt;p&gt;You know, I don’t ever get the chance to tell people how useful these subscriptions are.&amp;#160; They are extremely handy.&amp;#160; I used mine at least once a week, but two or three times a week wasn’t out of the ordinary.&amp;#160; The subscriptions give you direct access to Microsoft software for testing and creating proof of concepts.&amp;#160; They also give you access to beta software, i.e. Windows 7 and Exchange 2010, before everyone else has a chance to get it.&lt;/p&gt;  &lt;p&gt;You can also use them to manage support tickets, and even get professional help free.&amp;#160; But here is my absolute favourite benefit of a Technet Plus Subscription: Free E-Learning.&amp;#160; It gives you access to 3 Microsoft E-Learning Courses and Workshops, free.&amp;#160; Stolen from the site, here’s the &lt;em&gt;current&lt;/em&gt; offer:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;With TechNet Plus, you receive ninety (90) days of access to Microsoft E-Learning&lt;/b&gt; with hands-on learning to help you build the skills you need to do your job. The following courses are available to TechNet Plus subscribers through June 30, 2009: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Course 4330: Working with Subqueries Using Microsoft SQL Server 2008 - &lt;/b&gt;In this 2 hour course, students are introduced to subqueries. Using common table expressions in queries to generate hierarchical result sets is also explored.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Course 7250: Managing Applications in a Windows Server 2008 Environment - &lt;/b&gt;This 2-hour course describes enhancements to the Application Server, Web Server, and Terminal Services roles in Windows Server 2008. It also provides guidelines for deploying applications on your servers. This knowledge helps you use the server roles to manage an organization’s application infrastructure.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Course 6321: Configuring a Virtual Environment - &lt;/b&gt;This two-hour online course provides IT professionals with knowledge about the tools used for configuring a virtual environment. These tools include virtual network, virtual hard disks, and virtual machines. This knowledge helps you gain the skills necessary for setting up a virtual environment.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Go get one now.&amp;#160; Right now.&amp;#160; $349 US.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/subscriptions/bb892754.aspx"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="ms788692_78916_071108_TNetBuy_75_20C(en-ca)" border="0" alt="ms788692_78916_071108_TNetBuy_75_20C(en-ca)" src="http://www.syfuhs.net/media/blog/ms788692_78916_071108_TNetBuy_75_20C(en-ca)_3.jpg" width="550" height="107" /&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://www.syfuhs.net/article/110.aspx?rss</link><pubDate>Tue, 09 Jun 2009 19:52:44 GMT</pubDate></item><item><title>Resources from the SQL 2008 Spatial Data Presentation</title><description>&lt;P&gt;&lt;A href="http://www.syfuhs.net/GetFile.aspx?FileID=5"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=sql2008Geo border=0 alt=sql2008Geo src="http://www.syfuhs.net/media/blog/sql2008Geo_1.png" width=617 height=463 relativesrc="http://www.syfuhs.net/media/blog/sql2008Geo_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Here is the presentation.&amp;nbsp; Click the screen shot to download a ZIP of the demo and slide deck.&lt;/P&gt;</description><link>http://www.syfuhs.net/article/109.aspx?rss</link><category>.NET</category><category>Community</category><category>Fun Stuff</category><category>Geek Stuff</category><category>Presentations</category><category>SQL</category><category>Toronto</category><pubDate>Fri, 05 Jun 2009 17:45:08 GMT</pubDate></item><item><title>Exchange 2010 Beta</title><description>&lt;p&gt;A couple days ago &lt;a href="http://twitter.com/shap"&gt;Daniel Shapiro&lt;/a&gt; offered 10 people Virtual Servers hosted by &lt;a href="http://www.rackforce.com/"&gt;Rack Force&lt;/a&gt;.&amp;#160; I jumped on the offer, as I’ve been wanting to migrate this website to it’s own privately hosted server.&amp;#160; It really came down to never having the time to test out hosts, so this was a perfect opportunity.&amp;#160; Shortly thereafter I found out Exchange 2010 hit beta, and I wanted to run it through it’s paces.&lt;/p&gt;  &lt;p&gt;After installing Active Directory, I installed the beta, which went really smooth.&amp;#160; Given that it went smooth, I decided to update the DNS MX records for syfuhs.net to point to this server.&lt;/p&gt;  &lt;p&gt;One thing I didn’t realize is you have to set up Receive Connectors and Send Connectors.&amp;#160; The wording is kinda misleading, so I ended up setting my first Send Connector to only route mail going to syfuhs.net from syfuhs.net.&amp;#160; Not so useful.&amp;#160; The Receive connector was the same way.&amp;#160; However, this is all similar to Exchange 2007.&lt;/p&gt;  &lt;p&gt;Now some pictures:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb.png" width="506" height="488" /&gt;&lt;/a&gt; &lt;strong&gt;Outlook Web Access&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_1.png" width="593" height="360" /&gt;&lt;/a&gt; &lt;strong&gt;Exchange Management Console&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_2.png" width="578" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;strong&gt;IIS Manager Hosting Outlook Web Access&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_3.png" width="572" height="336" /&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://www.syfuhs.net/article/108.aspx?rss</link><category>Beta</category><category>Fun Stuff</category><category>Geek Stuff</category><category>IIS 7.0</category><category>Microsoft</category><pubDate>Sat, 30 May 2009 20:11:09 GMT</pubDate></item><item><title>Always a Good Sign on a Friday&amp;hellip;</title><description>&lt;p&gt;There is something to be said for having an empty inbox on a Friday evening.&amp;#160; Mind you, it is after 7:00PM though…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_1.png" width="606" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://www.syfuhs.net/article/107.aspx?rss</link><pubDate>Fri, 22 May 2009 19:37:41 GMT</pubDate></item><item><title>Presentation on Geospatial Data(types) in SQL 2008 &amp;ndash; June 4th</title><description>&lt;p&gt;I will be giving a presentation on Geospatial data in SQL 2008 for the Toronto SQL User Group on June 4th.&amp;#160; It’s a full session of everything geodetic.&amp;#160; There is no registration, so just show up.&amp;#160; Doors open around &lt;strong&gt;6:15 PM&lt;/strong&gt;.&amp;#160; The address is: &lt;strong&gt;Nexient 2 Bloor St. West at Yonge, downtown Toronto – 12th floor, Room 5.&lt;/strong&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 324px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:c0a3cbf0-9840-4694-8081-79934f1d889f" class="wlWriterEditableSmartContent"&gt;&lt;a href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=43.67027~-79.38693&amp;amp;lvl=16&amp;amp;style=r&amp;amp;sp=aN.43.67027_-79.38685_Nexient_&amp;amp;mkt=en-us&amp;amp;FORM=LLWR" id="map-55e0d1a1-b817-406d-8b7b-1ad846585a06" alt="Click to view this map on Live.com" title="Click to view this map on Live.com"&gt;&lt;img src="http://www.syfuhs.net/media/blog/map-f552b039b5c8.jpg" width="320" height="240" alt="Map picture"&gt;&lt;/a&gt;&lt;/div&gt;</description><link>http://www.syfuhs.net/article/105.aspx?rss</link><category>Community</category><category>Presentations</category><category>SQL</category><pubDate>Fri, 08 May 2009 15:41:36 GMT</pubDate></item><item><title>The Fine Line Between Insanity and Clarity</title><description>&lt;p&gt;The BBSM (Building Broadband Service Manager) is a Windows 2000 box that acts as a gateway to the internet for customer access.&amp;#160; It handles that login page when you connect to the open WiFi network.&amp;#160; It is the most convoluted piece of [insert noun here].&amp;#160; The guy who signs my paycheck had asked me a few weeks back to redesign said login page in keeping with corporate designs.&amp;#160; It was also requested that it be mobile browser friendly.&amp;#160; Classic ASP, running JScript (yes, JScript), in IIS 5 on Windows 2000 behind ISA Server 2000.&amp;#160; The new layout was done in about an hour, and it looks pretty good.&amp;#160; It has been 3 weeks and I still can't get the freakin mobile code working.&lt;/p&gt;  &lt;p&gt; In a moment of insanity (clarity?) I got the bright idea to install .NET on the box and rewrite all the pages from scratch.&amp;#160; Rewriting took a couple hours, and the mobile support works.&amp;#160; Go to set it up on the box (which must be done via USB key, via Ops guy, via physically walking to box in DataCentre {which I don't have access to}) and come to find permission errors for the ASPNET account doing COM stuff.&amp;#160; Needless to say I hate COM Interop with a passion.&amp;#160; I even sunk to the level of giving the ASPNET account full admin privileges.&amp;#160; Turns out Windows 2000 does not like COM Interop either.&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;em&gt;It looks nice if you use a laptop&lt;/em&gt;&amp;quot; was my statement to the boss.&amp;#160; His response was &amp;quot;&lt;em&gt;everyone is using PDA's and their iPhones.&amp;#160; Maybe 10 customers use laptops.&lt;/em&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt; Moral of the story: If the original code was written in the same year you turned 11, run.&amp;#160; Quickly.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/104.aspx?rss</link><category>.NET</category><category>ASP.NET</category><category>Development</category><category>IIS</category><category>Programming</category><category>Random</category><pubDate>Thu, 07 May 2009 02:12:49 GMT</pubDate></item><item><title>FTW: PHP on IIS</title><description>&lt;p&gt;In my previous post I had said I saw some pretty interesting stuff on the Canadian Evangelist’s blogs.&amp;#160; While I’m not a big fan of PHP for technical reasons (i.e. &lt;em&gt;NOT&lt;/em&gt; philosophical), it is pretty cool that you can run PHP on IIS.&amp;#160; So with that being said, we have a contest:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.phponwindows.ca/FTW/"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="For the Win! For the Web! FTW: Ultimate App Throwdown -- Professionals vs. Students" border="0" alt="For the Win! For the Web! FTW: Ultimate App Throwdown -- Professionals vs. Students" src="http://blogs.msdn.com/blogfiles/cdndevs/WindowsLiveWriter/TheFTWUltimatePHPAppThrowdown_B9CA/ftw_3.jpg" width="600" height="336" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Wait a Minute…Microsoft and &lt;em&gt;PHP&lt;/em&gt;?&lt;/h5&gt;  &lt;p&gt;You probably wouldn’t be surprised that Microsoft is holding a development contest that pits professional developers against student developers. &lt;strong&gt;You &lt;em&gt;might&lt;/em&gt; be surprised that &lt;a href="http://www.phponwindows.ca/FTW/"&gt;Microsoft is holding a development contest where the challenge is to build a PHP application.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You read that right: PHP. Microsoft’s web server, &lt;strong&gt;IIS (Internet Information Services) can run PHP as well as ASP.NET; in fact, it can even run both on the same site at the same time,&lt;/strong&gt; so you can have apps like Wordpress along with your ASP.NET-based apps.&lt;/p&gt;  &lt;p&gt;Even more unexpected is that the beta for the 2.0 version of the &lt;strong&gt;&lt;a href="http://www.microsoft.com/Web/downloads/platform.aspx"&gt;Microsoft Web Platform Installer&lt;/a&gt;&lt;/strong&gt; doesn’t do a “couple-of-clicks” installation of the expected stuff like IIS and SQL Server 2008 Express, &lt;strong&gt;it also provides a “couple-of-clicks” installation of PHP and Wordpress&lt;/strong&gt;.&lt;/p&gt;  &lt;h5&gt;The &lt;em&gt;FTW!&lt;/em&gt; Throwdown&lt;/h5&gt;  &lt;p&gt;That’s “&lt;em&gt;FTW!&lt;/em&gt;” as in “For the Win” or “For the Web”, by the way.&lt;/p&gt;  &lt;p&gt;The contest is pretty simple: the idea is to show the best application written in PHP and deployed on Windows. The app can be either:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;A &lt;em&gt;new&lt;/em&gt; application&lt;/strong&gt; developed by you in PHP and running on IIS in Windows &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;An &lt;em&gt;existing&lt;/em&gt; application or framework&lt;/strong&gt; written in PHP and ported by you to run on IIS in Windows &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That’s right: if you’re pressed for ideas or time to make a new application, it’s all right – you can take a PHP application that already exists, make the necessary changes so that it’ll run on IIS (and hey, for bonus points, make it tie into SQL Server instead of MySQL), and submit that as your contest entry!&lt;/p&gt;  &lt;h5&gt;Students vs. Professionals&lt;/h5&gt;  &lt;p&gt;Another twist to the &lt;em&gt;FTW!&lt;/em&gt; Throwdown is that we’re getting student developers and professional developers to challenge each other. The pros have experience and resources on their side; students have youthful energy and fewer distractions going for them. Not since &lt;a href="http://en.wikipedia.org/wiki/Pirates_versus_Ninjas"&gt;“Pirates vs. Ninjas”&lt;/a&gt; has there been a challenge like this!&lt;/p&gt;  &lt;p&gt;One application developed or ported by students and one application developed or ported by professionals will be chosen from the submissions for the Ultimate Challenge, which will be a final bout at Microsoft’s &lt;strong&gt;Make Web, Not War&lt;/strong&gt; conference. In that last match, it “Two apps enter! One app leaves!”. Simply put, one of the apps – either the student one or the professional one – will be declared the &lt;em&gt;Ultimate Champion&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;As they said in &lt;em&gt;Highlander&lt;/em&gt;: “There can be…only one!”&lt;/p&gt;  &lt;h5&gt;The Booty&lt;/h5&gt;  &lt;p&gt;We want to reward the best contestants for their efforts in the &lt;em&gt;FTW!&lt;/em&gt; Throwdown, and we plan to do so with some pretty nice prizes, which include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;The grand prize:&lt;/strong&gt; $5000 for the winning entrant. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The runner-up prize:&lt;/strong&gt; $3000 for the runner-up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The SQL Server prize:&lt;/strong&gt; $3000 for the finalist whose app showcases the best use of PHP with a Microsoft SQL Server database. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The PHP/.NET Mash-Up prize:&lt;/strong&gt; $2000 for the finalist whose app showcases the best of PHP with .NET-based code working together in a single application. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The student finalist prize:&lt;/strong&gt; The student developer who makes it to the last match will also get an interview and resume critique from Microsoft and a $200 Petro-Canada gas card. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The professional finalist prize:&lt;/strong&gt; The professional developer who makes it to the last match will also get a chance for a published case study, enrollment in the MAPS or EMPOWER program and a $200 Petro-Canada gas card. &lt;/li&gt; &lt;/ul&gt;</description><link>http://www.syfuhs.net/article/103.aspx?rss</link><pubDate>Sun, 19 Apr 2009 15:58:11 GMT</pubDate></item><item><title>Ignite Your Career Webcast Series for IT Architects</title><description>&lt;p&gt;I’m not usually one to repost from other blogs, but the last few I’ve seen from the Canadian Evangelist’s from Microsoft have been pretty exciting.&amp;#160; The first is the Ignite Your Career Webcast series for IT Architects.&amp;#160; There was a string of IYC Webcasts put on by Rick Claus over March for the IT Pro’s about lots of interesting topics.&amp;#160; This Series is all about the developers.&amp;#160; That is such a nice statement to hear: “…all about the developers”.&amp;#160; Enjoy!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/canada/emailcampaigns/svr/iycawc/eng/default.aspx"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Ignite Your Career Webcast" alt="Ignite Your Career Webcast" src="http://www.microsoft.com/canada/emailcampaigns/svr/iycawc/eng/images/iyc-header02.jpg" width="576" height="144" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The IT Architect team here in the Canadian Developer &amp;amp; Platform Group are getting really excited... and this &lt;a href="http://www.microsoft.com/canada/emailcampaigns/svr/iycawc/eng/default.aspx"&gt;webcast series&lt;/a&gt; is why!&lt;/p&gt;  &lt;p&gt;Starting on the 5th of May we're going to be joined by IT Architects from around the country to talk about career issues in challenging times. We're going to discuss industry trends and insights, skills development, entrepreneurship and organizational competitive advantage through careful use of IT - all in the context of furthering our careers as IT Architects.&lt;/p&gt;  &lt;p&gt;The webcasts will be one hour long starting at 12 noon Eastern and will consist of a panel discussion with our invited guests. Every week we will tackle a new topic with a goal of taking as many questions as we can get from you the audience. This is your opportunity to learn about best practices and ways of honing our careers from individuals around Canada who have excelled in the IT industry. Be sure to visit the &lt;a href="http://technet.microsoft.com/en-ca/cc837417.aspx"&gt;Ignite Your Career MSDN website&lt;/a&gt; to register for each of the sessions that interest you.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/102.aspx?rss</link><pubDate>Sun, 19 Apr 2009 15:52:11 GMT</pubDate></item><item><title>This is interesting&amp;hellip;</title><description>&lt;P&gt;&lt;A href="http://www.syfuhs.net/media/blog/image_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://www.syfuhs.net/media/blog/image_thumb_1.png" width=630 height=484 relativesrc="http://www.syfuhs.net/media/blog/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;I’m fairly certain there’s a good reason for this, but I just thought it was interesting because these are not hashes.&amp;nbsp; They are actual encrypted passwords.&amp;nbsp; Statistically improbable to get something like this in production systems.&amp;nbsp; Completely understandable in development.&amp;nbsp; Just thought it was interesting to see.&lt;/P&gt;</description><link>http://www.syfuhs.net/article/101.aspx?rss</link><category>Authentication</category><category>Development</category><category>Musings</category><category>Patterns and Practices</category><category>Programming</category><category>SQL</category><pubDate>Sun, 29 Mar 2009 00:00:00 GMT</pubDate></item><item><title>Consultation to Salary &amp;ndash; Theoretical Head Banging Meets the Real World</title><description>&lt;p&gt;A few weeks ago, six or so, I was offered a position as a Software Developer for the &lt;a href="http://www.woodbineentertainment.com/"&gt;Woodbine Entertainment Group&lt;/a&gt;.&amp;#160; The position looked appealing so I accepted the job offer.&amp;#160; I am in a probationary period for the next four months and a bit.&amp;#160; Anything I say can be grounds for firing me.&amp;#160; Never liked that part about non-contract jobs.&amp;#160; Ah well.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://www.woodbineentertainment.com/corporate/images/corp-woodbine-large.jpg" width="612" height="408" /&gt;&lt;/p&gt;  &lt;p&gt;Woodbine is an interesting company.&amp;#160; I knew very little about it until I got word of the job.&amp;#160; Seems I was the only one in Canada who didn’t know the company.&amp;#160; My grandmother, who moved to California 50 years ago, knew about the company.&amp;#160; Even used to bet there – well, the Woodbine Race Track, before it moved.&amp;#160; It has an interesting &lt;a href="http://www.woodbineentertainment.com/corporate/index.html"&gt;history&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It is migrating to be a Microsoft shop, from a more Novell focused infrastructure.&amp;#160; We are working towards standardizing on .NET for our custom applications.&lt;/p&gt;  &lt;p&gt;The one thing that caught my eye with Woodbine is that the company is the technology leader for Horse Racing.&amp;#160; Not just in Canada, but throughout the world.&amp;#160; Our services can let you &lt;a href="http://www.horseplayerinteractive.com/"&gt;place a bet&lt;/a&gt; live, on a track in Australia, and see results immediately.&amp;#160; Can you imagine the infrastructure required for such a feat?&amp;#160; It’s sweet!&amp;#160; The business-people behind this are really keen on letting technology do it’s thing, so we can make money.&amp;#160; Lots of money.&amp;#160; See our &lt;a href="http://www.woodbineentertainment.com/corporate/report.html"&gt;Annual Reports&lt;/a&gt; on that.&amp;#160; Check back for latest numbers.&lt;/p&gt;  &lt;p&gt;Now, some of you may have noticed that our Corporate Portal is written in what looks to be Classic ASP.&amp;#160; For all intensive purposes, it is.&amp;#160; &lt;a href="http://www.archive.org/"&gt;Archive.org&lt;/a&gt; shows the portal went live in 2001, and had a major rebuild in 2003.&amp;#160; Since then incremental changes have taken place, most of which have been built using ASP.NET.&amp;#160; We are working on the new portal.&amp;#160; All I can say at the moment is: it’s going to be awesome.&amp;#160; So awesome that a new word will need to created to contain all of its awesomeness.&amp;#160; &lt;a href="http://www.horseplayerinteractive.com/"&gt;HorsePlayer Interactive&lt;/a&gt; is pretty amazing, but I’d like to think this new site will be just that much more awesomer.&amp;#160; Yes, I said awesomer.&lt;/p&gt;  &lt;p&gt;As for the nature of this site, it won’t change.&amp;#160; I’ll still post my thoughts and experiences.&amp;#160; I might need to change stories a little to protect the innocent, but it’s all in good fun.&amp;#160; I may be forced to post details of how horse racing actually works, because I’m still not sure I get all the facets of it.&amp;#160; In time.&lt;/p&gt;  &lt;p&gt;More to follow.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/100.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>ASP.NET</category><category>Fun Stuff</category><category>Geek Stuff</category><category>Microsoft</category><category>Musings</category><category>Random</category><pubDate>Sat, 14 Mar 2009 19:57:35 GMT</pubDate></item><item><title>For the love of god, stop saving my Internet Explorer session!</title><description>&lt;p&gt;There is a relatively new feature in IE that reloads your session if IE gets unstable.&amp;#160; A godsend for poorly built pages and badly written ActiveX controls, but when I want to close the window, let me close the fricken window.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb.png" width="570" height="489" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice the three iexplore.exe processes running?&amp;#160; I have one window open, and 1 tab open.&amp;#160; For each tab I open a new process is spawned.&amp;#160; For each tab I close, nothing.&amp;#160; For each spawned process I manually try to kill, a new process is automatically started, via this lovely new feature.&amp;#160; If I close the parent iexplore.exe process, they all go away as they should.&amp;#160; But when I try to kill one of these spawned little bastards, IE thinks it got unstable, so it tries to save the session by restarting the downed process.&amp;#160; Lovely.&lt;/p&gt;  &lt;p&gt;Solutions?&amp;#160; Stop bitching because I’m running IE 8 beta, on Windows 7 beta, on a laptop that is slowly becoming more unstable each and every waking day.&lt;/p&gt;  &lt;p&gt;I’m thinking I’ll buy a nice E6500 from Dell.&amp;#160; Or maybe an X200 Tablet from IBM…err, Lenovo.&amp;#160; I’ll have to make a decision within the next couple days.&amp;#160; I can’t stand when hardware makes the system unstable.&amp;#160; Just makes me want to throw the freakin thing off the roof.&amp;#160; Hey…that’s a pretty good idea.&amp;#160; Pictures to come, guaranteed!&lt;/p&gt;</description><link>http://www.syfuhs.net/article/99.aspx?rss</link><pubDate>Tue, 10 Feb 2009 00:13:41 GMT</pubDate></item><item><title>Balanced Audio Connections</title><description>&lt;p&gt;Someone once told me that a balanced audio connection works because of polarity.&amp;#160; I wish I had a rolled up newspaper so I could swat him with it on the nose.&amp;#160; Balanced systems are used to keep noise and interference out of systems.&amp;#160; It is a common myth that balancing a system involves polarity.&amp;#160; It does not.&amp;#160; Polarity plays a part in keeping interference out, but the real reason balanced systems work has to do with impedance.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_1.png" width="553" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This type of connection is known as an unbalanced system.&amp;#160; There is only one connection leaving the Op-Amp in device A.&amp;#160; The second connection is ground.&amp;#160; In device B the signal is brought in on one leg of the Op-Amp and the the second leg is a replica signal sourced to ground (or reference).&amp;#160; In other words the signal is the same except opposite (polarity).&amp;#160; There is absolutely nothing preventing noise and interference from entering this system.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_3.png" width="348" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;This is a balanced input.&amp;#160; Notice how the input connector has 3 connections instead of 2.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_4.png" width="435" height="183" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This a balanced output.&amp;#160; Notice the 2 Op-Amps and 3 connections.&amp;#160; The balanced system has both connections equally referenced to ground.&amp;#160; How this prevents interference is an idea called Common-Mode Rejection (CMR).&amp;#160; Because interference hits all three wires in a cable at once, they will all have an equal level of extra noise.&amp;#160; It is voltage essentially.&amp;#160; When the signal enters the Op-Amp at the input it looks at the ground line and sees what’s on it.&amp;#160; It then compares what it sees on the two signal lines.&amp;#160; It kicks out what all three have in common.&amp;#160; Hence Common-Mode Rejection.&lt;/p&gt;  &lt;p&gt;This is theory though.&amp;#160; Not all inputs are perfect, and because all cables have something called &lt;em&gt;cable capacitance&lt;/em&gt;, voltages differ minutely on each wire within the cable and the rejection doesn’t work as well as the theory states it should.&amp;#160; But it still works pretty darn well.&amp;#160; There is a whole science devoted to developing a standard for getting better CMR.&amp;#160; One of my favorite resources is Jensen Transformers’ Bill Whitlock.&amp;#160; He is a freakin genius.&amp;#160; Here is his &lt;a href="http://www.jensen-transformers.com/an/generic%20seminar.pdf"&gt;seminar handbook&lt;/a&gt; on balanced and unbalanced connections.&amp;#160; This is where it all started making sense to me.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</description><link>http://www.syfuhs.net/article/98.aspx?rss</link><category>Mathematics</category><category>Musings</category><category>Random</category><category>Science</category><category>Sound</category><pubDate>Sun, 01 Feb 2009 18:41:21 GMT</pubDate></item><item><title>Proper Podcasting Equipment</title><description>&lt;P&gt;I am not a podcaster.&amp;nbsp; I do not think I have the voice for continued listening.&amp;nbsp; However, I am a sound guy, and I am anal about it.&amp;nbsp; I did a search online to find out what equipment is necessary for podcasting and every time I came back with:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Microphone&lt;/LI&gt;
&lt;LI&gt;Pre-amp&lt;/LI&gt;
&lt;LI&gt;Digital Recorder&lt;/LI&gt;
&lt;LI&gt;PC Editing Software&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For each item on this list I have heard some very disturbing suggestions for what type/brand to use.&amp;nbsp; I thought I would dispel some myths about each piece of hardware.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microphone&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Behringer is not a professional product line.&amp;nbsp; They say they are; they are &lt;STRONG&gt;NOT&lt;/STRONG&gt;.&amp;nbsp; I said it, and I will say it again: Behringer does not make professional equipment.&amp;nbsp; No way, no how.&amp;nbsp; They market the products as professional equipment that all the big stars use, but in actual fact the equipment would never make it on a tour.&amp;nbsp; It can’t.&amp;nbsp; It’s not stable enough, and it’s not reliable enough.&amp;nbsp; It WILL break.&lt;/P&gt;
&lt;P&gt;Enough ranting about that.&amp;nbsp; There are two main types of Microphones you will be dealing with when podcasting.&amp;nbsp; Dynamic and Condenser.&amp;nbsp; They both have their merits.&amp;nbsp; Dynamic microphones are usually cheaper because they are easier to make.&amp;nbsp; The sound quality is theoretically lesser than a Condenser Mic.&amp;nbsp; And a Dynamic Mic does not need an external power source.&lt;/P&gt;
&lt;P&gt;Sound quality is always an issue when recording.&amp;nbsp; However, a podcast is 99% vocal.&amp;nbsp; At least on the recording side it is.&amp;nbsp; On the frequency spectrum vocals range between 80 Hz and 1100Hz.&amp;nbsp; You do not need a super-ultra-fantastic microphone for this job.&amp;nbsp; In some cases you do, but generally if that were the case you wouldn’t be reading this article – you would be talking to an audio recording professional.&lt;/P&gt;
&lt;P&gt;You also have your choice between a Cardioid and an Omni-directional Mic.&amp;nbsp; An Omni-directional microphone will pick up sound from 360 degrees.&amp;nbsp; It’s great for dealing with multiple people talking at once, but horrible if you are talking in a loud environment.&amp;nbsp; A Cardioid (pronounced: car-dee-oid) microphone is directional.&amp;nbsp; It will pick up sound from a single direction, and is excellent if you are the only person talking in a very noisy environment.&lt;/P&gt;
&lt;P&gt;My two cents: go talk to a sound guy directly and tell them what you are doing.&amp;nbsp; They will understand.&amp;nbsp; Brand-wise I like Shure and Sennheisser.&amp;nbsp; By all means contact me if you want more help.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Pre-amp&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A pre-amp will do one of two things, but first I need to explain how a microphone works.&amp;nbsp; Essentially a microphone works by producing a very small electrical signal that is a representation of the sound hitting a membrane within the microphone capsule.&amp;nbsp; Different types of microphones (electret, condenser, dynamic, piezoelectric etc) capture and translate the frequency patterns differently.&amp;nbsp; The important thing to know is that the electrical signal coming out of the microphone is extremely low.&lt;/P&gt;
&lt;P&gt;The voltage is so low that most recorders cannot handle the voltage.&amp;nbsp; They need more.&amp;nbsp; A pre-amp takes care of this problem.&amp;nbsp; It amplifies the signal just enough so the recorder can use it properly.&amp;nbsp; In some cases microphones need voltage going to them before they can actually produce a signal.&amp;nbsp; Condenser microphones are notorious for this.&amp;nbsp; The required voltage is called Phantom Power.&amp;nbsp; It’s a long winded explanation of what actually happens with the phantom power, but for all intensive purposes, the pre-amp will usually take care of the phantom power too.&amp;nbsp; This is definitely something you need to talk to a sound guy directly about.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Digital Recorder&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I never got into digital recording, but just from basic analog to digital conversion theory, here are some thoughts:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Get a recorder that converts to a lossless format.&amp;nbsp; .Wav files are the most standard.&amp;nbsp; When recording you want the highest possible quality available.&lt;/LI&gt;
&lt;LI&gt;Get a recorder that has a balanced audio input.&amp;nbsp; XLR is balanced.&amp;nbsp; Get a microphone that outputs through XLR, and a pre-amp that takes XLR and outputs XLR.&amp;nbsp; You will end up with better quality.&amp;nbsp; Balanced connections do wonders for interference.&amp;nbsp; It won’t remove interference already in the system, but it will prevent any other from getting in.&lt;/LI&gt;
&lt;LI&gt;Get one that is durable.&amp;nbsp; You will drop it.&amp;nbsp; You just will.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;PC Editing Software&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;For editing the podcast you want a piece of software that can handle multiple tracks.&amp;nbsp; This allows you to layer chunks of audio without losing data.&amp;nbsp; It also gives you more wiggle room to move parts around.&amp;nbsp; I like Adobe Audition.&amp;nbsp; There are &lt;EM&gt;many&lt;/EM&gt; others out there though.</description><link>http://www.syfuhs.net/article/97.aspx?rss</link><category>Community</category><category>Geek Stuff</category><category>Musings</category><category>Podcasts</category><category>Random</category><category>Sound</category><pubDate>Sun, 25 Jan 2009 17:30:30 GMT</pubDate></item><item><title>Microsoft and the Antitrust Browser...A Decade in the Making</title><description>&lt;p&gt;It seems just like yesterday that some government was telling Microsoft that the bundling of Internet Explorer with Windows was unbecoming of an industry leader, because it screwed other web browsers out of market share.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://finance.yahoo.com/news/EU-tells-Microsoft-to-change-apf-14088587.html"&gt;European Union has made a decision&lt;/a&gt; stating Microsoft cannot bundle Internet Explorer with Windows anymore, if they want to sell in any European countries.&amp;#160; This decision was the result of Opera Software ASA, the people behind the Opera browser.&amp;#160; The complaints are two-fold.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Market share is nearly seized completely by IE because it comes preinstalled with Windows, which is the dominant operating system.&lt;/li&gt;    &lt;li&gt;Because the majority of browsers are IE, websites need to conform to IE’s html rendering which is “non-standard”.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I’d agree with the first statement, but I find it bogus.&amp;#160; Regardless of whether or not IE has dominant market share, you still need a browser.&amp;#160; How would you get your hands on the installation files for the new browser?&amp;#160; Certainly not by downloading it from the internet…&amp;#160; You can get the software from the store.&amp;#160; Not likely.&amp;#160; That just means one more piece of software to worry about.&amp;#160; You can have the browser company mail it to you.&amp;#160; Is Firefox a company?&amp;#160; Do they have offices?&amp;#160; Seriously?&amp;#160; WTF?&amp;#160; Oooh, or maybe Microsoft can have a basic version of a web browser, that all it does is go to one specific site.&amp;#160; The site then has a list of all available web browsers on the market, which you can then download.&amp;#160; I’m actually at a loss to say for once.&lt;/p&gt;  &lt;p&gt;With regards to the second point, Internet Explorer certainly does not have a great track record for sticking to HTML standards.&amp;#160; But I have to say Firefox, Opera, Safari, etc, don’t conform either.&amp;#160; None of them conform to the HTML standards completely.&amp;#160; With that being said, &lt;a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx"&gt;Internet Explorer 8 is supposed to be ACID 2 compliant&lt;/a&gt;, meaning it is compliant at least as much as everyone else.&amp;#160; In other words, it shows the face:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/AcidTest2%5B1%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="AcidTest2[1]" border="0" alt="AcidTest2[1]" src="http://www.syfuhs.net/media/blog/AcidTest2%5B1%5D_thumb.png" width="250" height="272" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I’m going to keep an eye out for news from the EU, because I suspect they will overturn the ruling in some way or another.&amp;#160; Some people say Internet Explorer is only to be used to download Firefox.&amp;#160; Now that it’s not there, how the hell do you plan on downloading Firefox, eh?&lt;/p&gt;</description><link>http://www.syfuhs.net/article/96.aspx?rss</link><category>Geek Stuff</category><category>Microsoft</category><category>Musings</category><category>News</category><category>Random</category><category>Windows</category><pubDate>Fri, 16 Jan 2009 18:18:53 GMT</pubDate></item><item><title>Windows LiveID Almost OpenID</title><description>&lt;P&gt;&lt;A href="http://www.syfuhs.net/media/blog/liveopenid_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 10px 0px 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=liveopenid border=0 alt=liveopenid align=left src="http://www.syfuhs.net/media/blog/liveopenid_thumb.jpg" width=228 height=186 relativesrc="http://www.syfuhs.net/media/blog/liveopenid_thumb.jpg"&gt;&lt;/A&gt;The Windows Live team &lt;A href="http://winliveid.spaces.live.com/blog/cns%21AEE1BB0D86E23AAC%211745.entry"&gt;announced&lt;/A&gt; a few months ago that their Live ID service will be a new provider for the &lt;A href="http://www.openid.net/"&gt;OpenID&lt;/A&gt; system.&amp;nbsp; The Live team was quoted: &lt;/P&gt;
&lt;BLOCKQUOTE style="BORDER-LEFT-COLOR: blue; BORDER-LEFT-WIDTH: 1px"&gt;
&lt;P&gt;Beginning today, Windows Live™ ID is publicly committing to support the OpenID digital identity framework with the announcement of the public availability of a Community Technology Preview (CTP) of the Windows Live ID OpenID Provider.&lt;/P&gt;
&lt;P&gt;You will soon be able to use your Windows Live ID account to sign in to any OpenID Web site.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I saw the potential in OpenID a while ago, long before I heard about Microsoft’s intentions.&amp;nbsp; The only problem was that I didn’t really find a good way to implement such a system on my website.&amp;nbsp; Not only that, I didn’t really have a purpose for doing such a thing.&amp;nbsp; The only reason anyone would need to log into the site would be to administer it.&amp;nbsp; And seeing as I’m the only person who could log in, there was never a need.&lt;/P&gt;
&lt;P&gt;Then a brilliant idea hit me.&amp;nbsp; Let users create accounts to make comment posting easier.&amp;nbsp; Originally, a user would leave a comment, and I would log in to verify comments, at which point the comment would actually show up.&amp;nbsp; Sometimes I wouldn’t log in for a couple days, which meant no comments.&amp;nbsp; So now, if a user wants to post a comment, all they have to do is log in with their openID, and the comment will appear.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Implementing OpenID&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I used the &lt;A href="http://extremeswank.com/aspnet_openid.html"&gt;ExtremeSwank OpenID Consumer&lt;/A&gt; for ASP.NET 2.0.&amp;nbsp; The beauty of this framework is that all I have to do is drop a control on a webform and OpenID functionality is there.&amp;nbsp; The control handles all the communications, and when the authenticating site returns it’s data, you access the data through the control’s properties.&amp;nbsp; To handle the authentication on my end, I tied the values returned from the control into my already in place Forms Authentication mechanism:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!(OpenIDControl1.UserObject == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;))
{
    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Membership.GetUser(OpenIDControl1.UserObject.Identity) == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
    {
        &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; email = OpenIDControl1.UserObject&lt;BR&gt;                       .GetValue(SimpleRegistrationFields.Email);
        &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; username = &lt;SPAN class=str&gt;""&lt;/SPAN&gt;;

        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (HttpContext.Current.User.Identity != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            username = HttpContext.Current.User.Identity.Name;
        }
        &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt;
        {
            username = OpenIDControl1.UserObject.Identity;
        }

        MembershipCreateStatus membershipStatus;
        MembershipUser user = Membership.CreateUser(
            username,
            RandomString(12, &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;),
            email,
            &lt;SPAN class=str&gt;"This is an OpenID Account.  You should log in with your OpenID"&lt;/SPAN&gt;,
            RandomString(12, &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;),
            &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;,
            &lt;SPAN class=kwrd&gt;out&lt;/SPAN&gt; membershipStatus
            );

        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (membershipStatus != MembershipCreateStatus.Success)
        {
            lblError.Text &lt;BR&gt;                    = &lt;SPAN class=str&gt;"Cannot create account for OpenID Account: "&lt;/SPAN&gt; &lt;BR&gt;                    + membershipStatus.ToString();
        }
    }
}&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;That’s all there is to it.</description><link>http://www.syfuhs.net/article/95.aspx?rss</link><category>.NET</category><category>API's</category><category>ASP.NET</category><category>Authentication</category><category>Data Binding</category><category>Development</category><category>Encryption</category><category>MSDN</category><category>News</category><category>SQL</category><category>Windows Live</category><pubDate>Tue, 13 Jan 2009 20:55:12 GMT</pubDate></item><item><title>Dammit!</title><description>&lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb.png" width="559" height="351" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It seems my beta version of Windows 7 is not genuine.&amp;#160; Next Time I’ll just torrent an .iso from the internet instead of getting it from TechNet.&amp;#160; Doh!&lt;/p&gt;  &lt;p&gt;Actually, it seems I hit the bug that affects all beta builds.&amp;#160; I accidentally set my clock forward a year (don’t ask), which is after this beta expires.&amp;#160; An honest mistake on my part, but the question is how the hell do I prove it’s now genuine?&lt;/p&gt;  &lt;p&gt;At the moment there is no Genuine Advantage application for Windows 7, so if this starts causing me grief I might have to reinstall Windows.&amp;#160; Hopefully I can just change the product key.&amp;#160; We shall see.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/94.aspx?rss</link><pubDate>Tue, 13 Jan 2009 15:46:52 GMT</pubDate></item><item><title>A Waste of People&amp;rsquo;s Time</title><description>&lt;p&gt;Someone pointed this out to me: &lt;a title="http://it.gps678.com/9/ce1882bb886e17de.html" href="http://it.gps678.com/9/ce1882bb886e17de.html"&gt;http://it.gps678.com/9/ce1882bb886e17de.html&lt;/a&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.syfuhs.net/media/blog/image_2_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image_2" border="0" alt="image_2" src="http://www.syfuhs.net/media/blog/image_2_thumb.png" width="478" height="195" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It seems I wrote a game called FizzVaders.&amp;#160; XNA Game Studio’s must be pretty freakin’ good, if I can write a game in my sleep.&amp;#160; Cuz I sure don’t remember!&lt;/p&gt;  &lt;p&gt;On a more serious note, this is lame.&amp;#160; It’s a randomly pieced together forum thread, with misleading names.&amp;#160; I’m not sure what the purpose is for this type of site.&amp;#160; I can think of only two reasons: it’s a link farm, or it’s used for advertising.&amp;#160; I suppose it’s better than the time a porn site indexed the CanITPro blog, and had my guest posts show up on Google under said porn site.&amp;#160; That was awkward…&lt;/p&gt;  &lt;p&gt;Generally, when someone search’s for me, or I search for someone, I want information on them.&amp;#160; I don’t want link lists or porn.&amp;#160; Unless I’m looking for porn. ;)&amp;#160; So how does a search engine filter these types of sites out?&lt;/p&gt;</description><link>http://www.syfuhs.net/article/93.aspx?rss</link><pubDate>Tue, 13 Jan 2009 13:05:00 GMT</pubDate></item><item><title>SQL Server 2008 Spatial Data</title><description>&lt;p&gt;I’ve been a little reticent in my posts on SQL Server 2008 lately.&amp;#160; It certainly didn’t come down to being too busy, as I’ve had far too much time on my hands in the last month.&amp;#160; But, I suppose writing these technical posts always came from looking for something to do while procrastinating on another project.&amp;#160; Which is odd, because I never found writing all that easy…&lt;/p&gt;  &lt;p&gt;Getting back to the topic at hand, lets talk space.&amp;#160; I did a lot of talking on spatial data (literally) in presentations and sales talks, but didn’t really write too much on it.&amp;#160; So, much like my talks, lets do some basic research.&lt;/p&gt;  &lt;p&gt;Spatial data in SQL Server is handled by a Complex Data Type.&amp;#160; It references a point in space, by way of coordinates (x, y, z).&amp;#160; Usually they are handled in degrees, referring to latitude and longitude.&amp;#160; However this not always the case.&amp;#160; You can use your own scale or units if you are mapping flat surfaces, which I will explain in a moment.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So what are the data types?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You have two to choose from:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Geography data type &lt;/li&gt;    &lt;li&gt;Geometry data type &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;With the Geography data type you store geodetic values, which reference the Lat/Lon values.&amp;#160; You would use this on a large scale, where the curvature of the earth has an effect (or any spherical surface for that matter).&lt;/p&gt;  &lt;p&gt;The geometric data type can be used with any units, as it represents simple coordinates (x, y, z) on a flat surface.&amp;#160; You can use this on any scale, as long as you don’t have to take into account spherical curvature.&lt;/p&gt;  &lt;p&gt;Now, just referencing a single point can have its uses, but a lot of times you want to store more than a single point.&amp;#160; Like if were storing a selection of area.&amp;#160; This is done by using a collection of points that form a polygon.&amp;#160; You can also store a collection of points that create a line.&amp;#160; This could be useful if you were storing routes.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Using the data types&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A point in space:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;-- Creates a point instance representing the point (3, 4) with an SRID (Spatial Reference System Identifier) 0.      &lt;br /&gt;DECLARE @g GEOMETRY;       &lt;br /&gt;SET @g = GEOMETRY::STGeomFromText('POINT (3 4)', 0) &lt;/p&gt;    &lt;p&gt;SELECT @g.STX      &lt;br /&gt;SELECT @g.STY       &lt;br /&gt;SELECT @g.Z       &lt;br /&gt;SELECT @g.M       &lt;br /&gt;GO&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Create a polygon (known as a multipoint):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;-- Create a polygon      &lt;br /&gt;DECLARE @g GEOMETRY;       &lt;br /&gt;SET @g = GEOMETRY::STPolyFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1))', 10) &lt;/p&gt;    &lt;p&gt;SELECT      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STStartPoint().STX AS 'Point 1 - X',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STStartPoint().STY AS 'Point 1 - Y',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STPointN(7).STX AS 'Point 7 - X',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STPointN(7).STY AS 'Point 7 - Y'       &lt;br /&gt;GO&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Create a line:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;-- Creates a line with 3 points (1/1, 2/4, 3/9) and a SRID of 0      &lt;br /&gt;DECLARE @g GEOMETRY;       &lt;br /&gt;SET @g = GEOMETRY::STGeomFromText('LINESTRING(1 1, 2 4, 3 9)', 0) &lt;/p&gt;    &lt;p&gt;SELECT      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STStartPoint().STX AS 'Point 1 - X',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STStartPoint().STY AS 'Point 1 - Y',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STPointN(2).STX AS 'Point 2 - X',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STPointN(2).STY AS 'Point 2 - Y',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STEndPoint().STX AS 'Point 3 - X',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STEndPoint().STY AS 'Point 3 - Y'       &lt;br /&gt;GO&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Now some function fun&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Figure out where the instances intersect:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;-- Return the points where the two geometry instances intersect each other      &lt;br /&gt;DECLARE @geom1 GEOMETRY       &lt;br /&gt;DECLARE @geom2 GEOMETRY       &lt;br /&gt;DECLARE @result GEOMETRY &lt;/p&gt;    &lt;p&gt;SELECT @geom1 = GeomColumn1 FROM SpatialTable WHERE ID = 1      &lt;br /&gt;SELECT @geom2 = GeomColumn1 FROM SpatialTable WHERE ID = 2       &lt;br /&gt;SELECT @result = @geom1.STIntersection(@geom2)       &lt;br /&gt;SELECT @result.STAsText()       &lt;br /&gt;GO&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Make some calculations (using your own units if you wish):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;-- Doing some calculations      &lt;br /&gt;DECLARE @g GEOMETRY;       &lt;br /&gt;SET @g = GEOMETRY::STPolyFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0))', 0) &lt;/p&gt;    &lt;p&gt;SELECT      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STArea() AS 'Square meters',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STLength() AS 'Length',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; @g.STDimension() AS 'Dimensions'       &lt;br /&gt;GO&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is by no means an in depth article on Spatial data.&amp;#160; I always thought spatial data was fairly straightforward, so explaining what it was in depth was a little redundant.&amp;#160; However, it doesn’t always translate properly to using </description><link>http://www.syfuhs.net/article/91.aspx?rss</link><pubDate>Fri, 09 Jan 2009 21:28:58 GMT</pubDate></item><item><title>Zune Player</title><description>&lt;p&gt;At first I was a little skeptical at the quality of the Zune Player, as it’s basically in direct competition with Windows Media Player.&amp;#160; In retrospect, that’s probably what made it what is today.&amp;#160; It’s designed to sync the Zune media player, and it works very well as an alternative to Media Player.&amp;#160; There are a couple problems that I have with it though:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It’s a resource hog &lt;/li&gt;    &lt;li&gt;It requires a good video card to show effects &lt;/li&gt;    &lt;li&gt;It sorts things in weird ways when meta data is missing &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The Zune Player is built on .NET.&amp;#160; It has a very big initial memory footprint.&amp;#160; It gets better as it settles into place.&amp;#160; My assumption is that it’s using WPF to make itself look pretty, and that’s where all the effects come from.&amp;#160; As a result some video cards aren’t capable of handling the effects renderings.&amp;#160; For instance, my laptop’s video card just dies when the effects are on.&amp;#160; Zune will turn them off if need be.&amp;#160; If the Album Artist meta tag is empty, Zune sticks “Various Artists” in place thereof.&amp;#160; Zune sorts based on Album Artist in the default view, so when I loaded my library into it, a whole whack of songs where under Various Artists, which isn’t all that useful.&amp;#160; With that being said, all the (legally) downloaded content had proper meta tags and were sorted perfectly.&lt;/p&gt;  &lt;p&gt;However, with all the negatives, comes a few gems.&amp;#160; Sorting is a breeze.&amp;#160; Playlists are extremely easy to build.&amp;#160; Filtering works.&amp;#160; And it’s a really slick UI.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.syfuhs.net/media/blog/zune_2.png"&gt;&lt;img title="zune" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="154" alt="zune" src="http://www.syfuhs.net/media/blog/zune_thumb.png" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m a little miffed the band image is pixilated, but all the extra info brought with it makes up completely.&amp;#160; Talk about slick.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.syfuhs.net/media/blog/zune2_2.png"&gt;&lt;img title="zune2" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="154" alt="zune2" src="http://www.syfuhs.net/media/blog/zune2_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It also makes decent random playlist decisions.&amp;#160; On the UI and UX side of things it gets the job done.&amp;#160; It’s pretty stable.&amp;#160; It hasn’t blown up on me yet.&amp;#160; I give it my approval.&amp;#160; Check it out: &lt;a href="http://www.microsoft.com/zune"&gt;www.microsoft.com/zune&lt;/a&gt;.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/88.aspx?rss</link><category>.NET</category><category>Random</category><category>Sound</category><category>UI</category><category>UX</category><pubDate>Tue, 06 Jan 2009 21:45:10 GMT</pubDate></item><item><title>A Collection of Personal Essays</title><description>&lt;p&gt;I was thinking earlier about what the best way to organize all the longer posts I’ve written was.&amp;#160; If my last sentence was any meter for what’s in these posts, I’m sorry!&amp;#160; In any case, I wanted to label them as more than posts.&amp;#160; Wikipedia defines an ‘essay’ as:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;An &lt;b&gt;essay&lt;/b&gt; is usually a short piece of writing. It is often written from an author's personal &lt;a href="http://en.wikipedia.org/wiki/Perspective_(cognitive)"&gt;point of view&lt;/a&gt;. Essays can be &lt;a href="http://en.wikipedia.org/wiki/Literary_criticism"&gt;literary criticism&lt;/a&gt;, political &lt;a href="http://en.wikipedia.org/wiki/Manifestos"&gt;manifestos&lt;/a&gt;, learned &lt;a href="http://en.wikipedia.org/wiki/Arguments"&gt;arguments&lt;/a&gt;, observations of daily life, recollections, and reflections of the author.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;One of these days I’m going to write a plug-in for Windows Live Writer that takes a search query and looks it up on Wikipedia.&amp;#160; It then heuristically finds the best definition of said query and sticks it in a &lt;em&gt;&amp;lt;blockquote&amp;gt;&lt;/em&gt; tag.&lt;/p&gt;  &lt;p&gt;Anyway, back to the topic.&amp;#160; Based on Wikipedia’s definition of an Essay, I can easily call any of these longer posts an essay.&amp;#160; So what I’m going to do is make a static link to this post in my Navigation section, and have a list of links to said essays below.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.syfuhs.net/Article/77.aspx"&gt;What Makes us want to Program?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.syfuhs.net/Article/28.aspx"&gt;I Hate Being Wrong…&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More to follow.&amp;#160; I just need to make them available online.&amp;#160; And yes, it is very coincidental that at first glance they all reference xkcd.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/87.aspx?rss</link><pubDate>Tue, 06 Jan 2009 17:47:59 GMT</pubDate></item><item><title>What Makes us Want to Program? Part 5</title><description>&lt;p&gt;In &lt;a href="http://www.syfuhs.net/Article/82.aspx"&gt;Part 4&lt;/a&gt; I discussed a supposition I made a few years ago in High School.&amp;#160; The supposition suggested that genius programmers can do what they do not only because they are left-brain oriented, but because they have a well developed Pre-Frontal Cortex.&amp;#160; It is neither fact nor fiction.&amp;#160; Simply an idea.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So why the &lt;em&gt;hell&lt;/em&gt; does it make us want to program?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It all comes down to curiosity.&amp;#160; The Pre-Frontal Cortex governs mediating conflicting thoughts, makes choices between right and wrong or good and bad, and governs the workflow involved in predicting future events.&amp;#160; Curiosity is the result of the conflict between knowing and not knowing.&amp;#160; Part of it is the decision process to figure out if you really want to know, and if you choose to know, what will happen as a result.&lt;/p&gt;  &lt;p&gt;With that being said, Neuroscience studies into curiosity are still in the infancy stages, so the requisite proof is no where to be found yet.&amp;#160; At the moment, curiosity is seen to come from the &lt;a href="http://en.wikipedia.org/wiki/Caudate_nucleus"&gt;Caudate Nucleus&lt;/a&gt; in the Basal Ganglia of the brain.&amp;#160; It is known for Learning and Memory.&lt;/p&gt;  &lt;p&gt;So, if we are curious about something, it excites the Pre-Frontal Cortex.&amp;#160; If we are left-brained in nature, and our curiosity steers us in a direction of problem solving or logic (something we are good at) the brain excites the pleasure centers, and when our pleasure centers get excited we enjoy what we are doing.&lt;/p&gt;  &lt;p&gt;With a well developed Pre-Frontal Cortex, our curiosity is magnified.&amp;#160; But then again, this is simply an idea.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s with the history lesson then?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Each part of the story was the result of curiosity.&amp;#160; I started with QBasic because I read an article in Popular Electronics (I’m surprised it was still published at the time) that required a computer interface.&amp;#160; I didn’t understand the article (remember I was around the age of 9) so I tried to understand the code.&lt;/p&gt;  &lt;p&gt;I couldn’t understand the language enough to do anything meaningful so I started learning HTML.&amp;#160; Something far simpler to grok.&amp;#160; This was the case throughout the story.&amp;#160; The impetus behind all my actions was curiosity.&lt;/p&gt;  &lt;p&gt;It wasn’t until Grade 9 that I found PHP which really allowed me to understand programming.&amp;#160; It certainly wasn’t over a weekend that I learned it, but nevertheless the cartoon makes you ask: why would you spend a weekend messing with Perl (or any other language)?&amp;#160; Curiosity, that’s why!&amp;#160; It’s this thing called curiosity that is useful to career success.&amp;#160; &lt;/p&gt;  &lt;p&gt;Schooling will get you in the door, but your curiosity will make you succeed.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/83.aspx?rss</link><pubDate>Sat, 03 Jan 2009 07:38:58 GMT</pubDate></item><item><title>What Makes us Want to Program? Part 4</title><description>&lt;p&gt;In my &lt;a href="http://www.syfuhs.net/Article/81.aspx"&gt;previous post&lt;/a&gt;, I started talking about using Microsoft technologies over PHP and open source technologies.&amp;nbsp; There were a couple reasons why I chose to make the move.&amp;nbsp; First, from a development perspective, everything was object oriented.&amp;nbsp; PHP was just getting started with OOP at the time, and it wasn’t all that friendly.&amp;nbsp; Second, development time was generally cut in at least half, because of the built in controls of ASP.NET.&amp;nbsp; Third, the end result was a more rich application experience for the same reason.&amp;nbsp; The final reason comes down to the data aspect.&lt;/p&gt;
&lt;p&gt;Pulling data from a database in PHP wasn’t easy to do.&amp;nbsp; The built in support was for MySQL, with very little, if next to nothing for SQL Server.&amp;nbsp; In a lot of cases that isn’t always a bad thing.&amp;nbsp; MySQL is free.&amp;nbsp; You can’t argue with that.&amp;nbsp; however, MySQL wasn’t what you would call ACID compliant.&amp;nbsp; Defined, MySQL did &lt;em&gt;not &lt;/em&gt;have the characteristics of being Atomic, Consistent, Isolated, and Durable.&amp;nbsp; Essentially, when data goes missing, there is nothing you can do about it.&amp;nbsp; SQL Server on the other hand is very ACID compliant.&amp;nbsp; This is something you want.&amp;nbsp; Period.&lt;/p&gt;
&lt;p&gt;Once .NET 2.0 was released, a whole new paradigm came into play for data in a web application.&amp;nbsp; It was easy to access!&amp;nbsp; No more, or at least next to very little boiler plate coding was necessary for data access now.&amp;nbsp; Talk about a selling point.&amp;nbsp; Especially when the developer in question is 16 going on 17.&lt;/p&gt;
&lt;p&gt;Now that I didn’t need to worry about data access code, I could start working on figuring out SQL.&amp;nbsp; At the time t-SQL scared the crap out of me.&amp;nbsp; My brain just couldn’t work around datasets.&amp;nbsp; The idea of working with multiple pieces of data at once was foreign.&amp;nbsp; I understood single valued iterations.&amp;nbsp; A for loop made sense to me.&amp;nbsp; SELECTs and JOINs confused me.&amp;nbsp; Mind you, I didn’t start Statistics in math until the following year.&amp;nbsp; Did SQL help with statistics, or did statistics help me finally figure out SQL?&amp;nbsp; It’s a chicken and the egg paradox.&lt;/p&gt;
&lt;p&gt;So here I am, 17 years old, understanding multiple languages, building dozens of applications, and attending developer conferences all the while managing my education in High School.&amp;nbsp; Sweet.&amp;nbsp; I have 3 years until the next release of Visual Studio comes out.&amp;nbsp; It was here that I figured I should probably start paying more attention in school.&amp;nbsp; It’s not so much that I wasn’t paying attention, it’s just that I didn’t care enough.&amp;nbsp; I put in just enough effort to skate through classes with a passing mark.&amp;nbsp; It was also at this point in time that I made an interesting supposition.&lt;/p&gt;
&lt;p&gt;Experts tend to agree that people who are programming geniuses are also good at math and critical thinking or reasoning.&amp;nbsp; Not one or the other, but both.&amp;nbsp; Now I’m not saying I’m a programming genius, but I suck at math.&amp;nbsp; It was just never in the cards.&amp;nbsp; But, according to all those High School exams and the psychological profiling they gather from them, my Critical Thinking and Reasoning skills are excellent.&amp;nbsp; Top 10% in Canada according to the exam results.&amp;nbsp; My math skills sit around top 20-30% depending on the type.&lt;/p&gt;
&lt;p&gt;Neurologists place this type of thinking in the left hemisphere of the brain.&amp;nbsp; The left brain is associated with verbal, logical, and analytical thinking. It excels in naming and categorizing things, symbolic abstraction, speech, reading, writing, arithmetic.&amp;nbsp; Those who live in the left brain are very linear.&amp;nbsp; Perfect for a software developer.&lt;/p&gt;
&lt;p&gt;The supposition I made had more to do with the Pre-Frontal Cortex of the brain.&amp;nbsp; It does a lot of work, some of which is planning complex cognitive behaviors.&amp;nbsp; Behaviors like making a list, calculating numbers, abstracting thoughts, etc.&amp;nbsp; It plans out the processes our brains use to get things done.&amp;nbsp; This is true for both sides of the brain.&amp;nbsp; So, suppose you are left brain-oriented.&amp;nbsp; You are predisposed to be good at development.&amp;nbsp; Now, suppose your Pre-Frontal Cortex is very well developed, more so than the average person.&amp;nbsp; It could be reasoned that part of being a programming genius is having a well developed Pre-Frontal Cortex.&lt;/p&gt;
&lt;p&gt;So why does this make us want to program?&amp;nbsp; Find out in &lt;a href="http://www.syfuhs.net/Article/83.aspx"&gt;Part 5&lt;/a&gt;.&lt;/p&gt;
</description><link>http://www.syfuhs.net/article/82.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>ASP.NET</category><category>C#</category><category>Calculus</category><category>Mathematics</category><category>Microsoft</category><category>Patterns and Practices</category><category>SQL</category><category>Students</category><pubDate>Sat, 03 Jan 2009 06:54:51 GMT</pubDate></item><item><title>What Makes us Want to Program? Part 3</title><description>&lt;p&gt;In my &lt;a href="http://www.syfuhs.net/Article/78.aspx"&gt;second post&lt;/a&gt; I discussed my run in with ASP, and how PHP was far better.&amp;nbsp; I ended the post talking about an invitation to a Microsoft event.&amp;nbsp; This was an interesting event.&amp;nbsp; Greg and I were the only people under 30 there.&amp;nbsp; When that’s a 15 year difference, things get interesting.&amp;nbsp; Especially when you need your mother to drive you there…&amp;nbsp; The talk was a comparison between Microsoft based technologies and Linux based technologies.&amp;nbsp; The presenter was a 10 year veteran of IBM, working on their Linux platform, who then moved to Microsoft.&amp;nbsp; For the life of me I can’t remember his name.&lt;/p&gt;
&lt;p&gt;His goal was simple.&amp;nbsp; Disprove myths around Linux costs versus Windows costs.&amp;nbsp; It was a very compelling argument.&amp;nbsp; The event was based around the &lt;a href="http://www.microsoft.com/windowsserver/compare/windows-server-vs-red-hat-linux.mspx"&gt;Windows Compare&lt;/a&gt; campaign.&amp;nbsp; It was around this time that Longhorn (Longhorn that turned into Vista, not Server 2008) was in pre-beta soon to go beta, and after discussing it with Greg, we decided to probe the presenter for information about Longhorn.&amp;nbsp; In a situation like that, the presenter either gets mad, or becomes really enthusiastic about the question.&amp;nbsp; He certainly didn’t get mad.&lt;/p&gt;
&lt;p&gt;Throughout the rest of the talk, the presenter made some jokes at mine and Greg’s expense, which was all in good fun.&amp;nbsp; Based on that, we decided to go one step further to ask how we can get the latest Longhorn build, at one of the breaks.&amp;nbsp; the conversation went something like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Me&lt;/em&gt;: So how do people get copies of the latest build for Longhorn? &lt;br /&gt;
&lt;em&gt;Presenter&lt;/em&gt;: Currently those enrolled in the MSDN Licensing program can get the builds. &lt;br /&gt;
&lt;em&gt;Me&lt;/em&gt;: Ok, how does one join such a licensing program? &lt;br /&gt;
&lt;em&gt;Presenter&lt;/em&gt;: Generally you buy them. &lt;br /&gt;
&lt;em&gt;Me&lt;/em&gt;: How much? &lt;br /&gt;
&lt;em&gt;Presenter&lt;/em&gt;: A couple thousand… &lt;br /&gt;
&lt;em&gt;Me&lt;/em&gt;: Ok let me rephrase the question.&amp;nbsp; How does a student, such as myself and my friend Greg here, get a the latest build of Longhorn when we don’t have an MSDN subscription, nor the money to buy said subscription? &lt;br /&gt;
&lt;em&gt;Presenter&lt;/em&gt;: *Laughs* Oh.&amp;nbsp; Go talk to Alec over there and tell him I said to give you a student subscription. &lt;br /&gt;
&lt;em&gt;Me&lt;/em&gt;:&amp;nbsp; Really?&amp;nbsp; Cool!&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Six months later Greg and I some how got MSDN Premium Subscriptions.&amp;nbsp; We had legal copies of almost every single piece of Microsoft software ever commercially produced.&amp;nbsp; Visual Studio 2005 was still in beta, so I decided to try it out.&amp;nbsp; I was less than impressed with Visual Studio 2003, but really liked ASP.NET, so I wanted to see what 2005 had in store.&amp;nbsp; At the time PHP was still my main language, but after the beta of 2005, I immediately switched to C#.&amp;nbsp; I had known about C# for a while, and understood the language fairly well.&amp;nbsp; It was .NET 1.1 that never took for me.&amp;nbsp; That, and I didn’t have a legal copy of Visual Studio 2003 at the time.&lt;/p&gt;
&lt;p&gt;Running a Longhorn beta build, with Visual Studio 2005 beta installed, I started playing with ASP.NET 2.0, and built some pretty interesting sites.&amp;nbsp; The first was a Wiki type site, designed for medical knowledge (hey, it takes a lot to kill a passion of mine).&amp;nbsp; It never saw the light of day on the interweb, but it certainly was a cool site.&amp;nbsp; Following that were a bunch of test sites that I used to experiment with the data controls.&lt;/p&gt;
&lt;p&gt;It wasn’t until the release of SQL Server 2005 that I started getting interested in data.&amp;nbsp; Which I will discuss in the my &lt;a href="http://www.syfuhs.net/Article/82.aspx"&gt;next post&lt;/a&gt;.&lt;/p&gt;
</description><link>http://www.syfuhs.net/article/81.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>ASP.NET</category><category>Beta</category><category>C#</category><category>Community</category><category>Conferences</category><category>MSDN</category><category>Presentations</category><category>Random</category><category>SQL</category><pubDate>Sat, 03 Jan 2009 06:03:58 GMT</pubDate></item><item><title>What Makes us Want to Program? Part 2</title><description>&lt;p&gt;In my &lt;a href="http://www.syfuhs.net/Article/77.aspx"&gt;previous post&lt;/a&gt; I started talking about part of my personal history with software development, and when QBasic got me hooked.&amp;nbsp; I ended the post talking about the move to Canada.&amp;nbsp; We arrived in Canada literally a week (7 days exactly) before Grade 9 started.&amp;nbsp; After getting enrolled in school, I tried to find something to keep my mind occupied.&amp;nbsp; It was either that or contemplate what Grade 9 would be like for someone who used to live 3000 miles away in another country.&amp;nbsp; And winter.&amp;nbsp; Still 4 months away, but definitely something I didn’t want to think about.&amp;nbsp; Being that we moved to a house in the country, I couldn’t just walk around town either.&amp;nbsp; Mental occupation was harder than I thought.&lt;/p&gt;
&lt;p&gt;So what does a 14 year old boy, new to the country, living in the middle of nowhere, do to keep himself from going crazy?&amp;nbsp; Install Linux of course!&amp;nbsp; I needed something to keep my interest, as well as to keep the gears in my head moving.&amp;nbsp; If memory serves, I started out with a vanilla copy of Red Hat Linux.&amp;nbsp; It was pretty easy to install, but being new to the OS architecture, the device mapping was a little confusing.&amp;nbsp; After a couple months of studying the Linux architecture, I started writing shell scripts, and even delved into the source code.&amp;nbsp; After testing some minor modifications to different components I started to learn the basis for the C/C++ languages.&amp;nbsp; Imagine that, a 14 year old kid understanding the basis for C++.&lt;/p&gt;
&lt;p&gt;While trying to keep my mind still occupied, I came across an interesting find: The National Security Agency’s &lt;a href="http://www.nsa.gov/selinux/"&gt;Security Enhanced Linux Kernel&lt;/a&gt;.&amp;nbsp; If compiled and installed wrong, you will destroy the build.&amp;nbsp; Learned that the hard way…&amp;nbsp; And seeing as I couldn’t find a proper driver for my modem anyway, I gave up on Linux and moved back to XP.&amp;nbsp; Not that the internet was all that useful anyway; I was connecting at 28.8 half the time.&lt;/p&gt;
&lt;p&gt;Going back to the image in &lt;a href="http://www.syfuhs.net/Article/77.aspx"&gt;Part 1&lt;/a&gt;, I met an interesting character in school.&amp;nbsp; He turned out to be one of my best friends, and fellow developers, Greg. We started working on some odd projects here and there in VB, until I was tasked with building a web store.&amp;nbsp; Since I had never actually brought HTML and Dev together, I was a little nervous about what I was getting myself into.&amp;nbsp; Going with what I knew well, I started in ASP with VB code.&amp;nbsp; This was &lt;em&gt;not&lt;/em&gt; ASP.NET.&amp;nbsp; Earlier, I had said I never found VB all that intuitive as a language.&amp;nbsp; The syntax never really made sense to me.&amp;nbsp; So my friend suggested I take a look at PHP as an alternative.&amp;nbsp; I liked it.&lt;/p&gt;
&lt;p&gt;PHP had the flow of C, and the usefulness of VB.&amp;nbsp; With PHP I got the store finished and launched.&amp;nbsp; The site worked great.&amp;nbsp; I was 15.&lt;/p&gt;
&lt;p&gt;Once the first spring of my existence in Canada rolled around, a couple friends and I decided to start a band.&amp;nbsp; We sucked.&amp;nbsp; But seeing as one of the other members was Greg, we had an awesome website.&amp;nbsp; We had media streaming, custom modified forums, and full site statistics.&amp;nbsp; The statistics were built around the forum.&amp;nbsp; The site pulled data from recent posts, recent events, and recent user logins, and compared the data to the media streams.&amp;nbsp; We could see who was doing what.&amp;nbsp; Mind you, there was only about 50 people who loitered around the site, but the site was a great proof of concept for what we could do.&lt;/p&gt;
&lt;p&gt;Following the demise of the band, Greg and I were invited to a Microsoft hosted event.&amp;nbsp; It was here that I fell in love with ASP.NET.&amp;nbsp; Which I will discuss in &lt;a href="http://www.syfuhs.net/Article/81.aspx"&gt;Part 3&lt;/a&gt;.&lt;/p&gt;
</description><link>http://www.syfuhs.net/article/78.aspx?rss</link><category>Architects</category><category>Canada</category><category>Geek Stuff</category><category>Presentations</category><category>Sound</category><category>SQL</category><category>UI</category><pubDate>Sat, 03 Jan 2009 05:21:13 GMT</pubDate></item><item><title>What Makes us Want to Program? Part 1</title><description>&lt;p&gt;When I saw this comic a couple weeks ago, it hit a chord just right with me.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.xkcd.com/519/"&gt;&lt;img style="DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; MARGIN-RIGHT: auto" src="http://imgs.xkcd.com/comics/11th_grade.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Except of course it was PHP, and grade 9.&amp;nbsp; The funny thing was, I started writing programs way back when I was in grade 5.&amp;nbsp; I tried to start learning development when I was in grade 3.&amp;nbsp; Let me tell you, there are certain subtleties to programming that don’t quite become apparent to a 9 year old.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;10 PRINT “Steve is Awesome!” &lt;br /&gt;
20 GOTO 10&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;While QBasic was fun to play with, I gave up on that when I found a book on Visual Basic in Grade 5.&amp;nbsp; I vaguely remember it being Visual Basic 5 too.&amp;nbsp; I could be wrong.&amp;nbsp; It was a little more than 10 years ago – you do the math.&amp;nbsp; The problem I found with VB was that it didn’t feel all that intuitive from a language perspective to me.&amp;nbsp; I could never find it to flow properly.&amp;nbsp; But at the time, that’s all I had to go on.&amp;nbsp; So I gave up on development for a while and tried my hand at HTML.&amp;nbsp; Once again, certain things just aren’t apparent at certain ages.&amp;nbsp; When I first tried HTML, I started in notepad.&amp;nbsp; Shortly thereafter I ended in notepad.&amp;nbsp; Maybe sports would be more fun?&amp;nbsp; Nah… Enter FrontPage a few months later.&lt;/p&gt;
&lt;p&gt;After finally getting the hang of FrontPage, I built some amazing (read: ugly) sites.&amp;nbsp; All-in-all they weren’t bad for an 11 year old.&lt;/p&gt;
&lt;p&gt;Once middle school rolled around, I tried my hand at the other sciences and found out I really enjoyed biology.&amp;nbsp; Being the semi-OCD-like person I am, I put all my attention into biology and medicine, with a curiosity for chemistry.&amp;nbsp; I knew &lt;em&gt;way&lt;/em&gt; too much for my own good.&lt;/p&gt;
&lt;p&gt;Now I have to mention that all of this is taking place in beautiful Southern California.&amp;nbsp; I was born and raised there for 14 years.&amp;nbsp; At the end of Grade 8, my parents decided to move to Canada.&amp;nbsp; Don’t ask - long story.&amp;nbsp; And at that time, I was still into the life sciences.&amp;nbsp; In my &lt;a href="http://www.syfuhs.net/Article/78.aspx"&gt;next post&lt;/a&gt;, I’ll continue on with my story.&lt;/p&gt;
</description><link>http://www.syfuhs.net/article/77.aspx?rss</link><category>Architects</category><category>Canada</category><category>Random</category><category>School</category><category>Students</category><pubDate>Sat, 03 Jan 2009 04:33:34 GMT</pubDate></item><item><title>The Tag Cloud</title><description>For a while now I’ve been categorizing my posts.&amp;#160; At the time of design for this site I didn’t really have an idea of what I was&lt;a href="http://www.syfuhs.net/media/blog/image_4.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 0px 0px 10px; border-right-width: 0px" height="369" alt="image" src="http://www.syfuhs.net/media/blog/image_thumb_1.png" width="122" align="right" border="0" /&gt;&lt;/a&gt; going to&amp;#160; do with the categories, but speculated I might build a tag cloud.&amp;#160; The problem was I didn’t really understand the&amp;#160; fundamentals of a tag cloud:&amp;#160; &lt;ul&gt;   &lt;li&gt;Get all categories from posts &lt;/li&gt;    &lt;li&gt;Count number of posts per category &lt;/li&gt;    &lt;li&gt;Add weighting to category &lt;/li&gt;    &lt;li&gt;Format text to distinguish weighting &lt;/li&gt;    &lt;li&gt;Link to all posts within that category &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;On the surface it looks fairly simple.&amp;#160; Query the database, do some mathematical fiddling to get weights, create a List of links and stick a style attribute to modify font-size based on weighting.&lt;/p&gt;  &lt;p&gt;Well it’s not quite that easy.&amp;#160; The query was fairly straightforward, and creating the list and stylizing it was pretty simple.&amp;#160; Getting the weights on the other hand was a pain.&amp;#160; The problem was figuring out a fair weighting solution.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Standard Deviation and Statistical Analysis&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Originally I figured I could get away with ordering the numbers, and then finding the difference between each increment.&amp;#160; Unfortunately some topics I discuss more frequently than others.&amp;#160; For instance, I talk about SQL a whole lot more than I talk about Open Source-stuff.&amp;#160; A huge skewing problem would have arose.&amp;#160; So, going back to High School Statistics class (holy crap, I actually can use this in real life!&amp;#160; My teacher [,if he were dead,] would be rolling over in his grave) I go back to one of the first things I learned: The Standard Deviation.&lt;/p&gt;  &lt;p&gt;The standard deviation is a measure of the dispersion of a collection of numbers.&amp;#160; It is defined as the root-mean-square (RMS) deviation of the values from their mean, or as the square root of the variance.&amp;#160; To calculate the standard deviation on a dataset:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Find the mean, &lt;img style="display: inline" alt="\scriptstyle\overline{x}" src="http://upload.wikimedia.org/math/8/c/a/8ca96727b4c0d19c76963a3d1b9488bd.png" /&gt;, of the values. &lt;/li&gt;    &lt;li&gt;For each value &lt;i&gt;x&lt;/i&gt;&lt;sub&gt;&lt;i&gt;i&lt;/i&gt;&lt;/sub&gt; calculate its deviation (&lt;img style="display: inline" alt="\scriptstyle x_i - \overline{x}" src="http://upload.wikimedia.org/math/1/3/b/13bb700f5a5d221e89199af8874c8560.png" /&gt;) from the mean. &lt;/li&gt;    &lt;li&gt;Calculate the squares of these deviations. &lt;/li&gt;    &lt;li&gt;Find the mean of the squared deviations. This quantity is the variance &lt;i&gt;s&lt;/i&gt;&lt;sup&gt;2&lt;/sup&gt;. &lt;/li&gt;    &lt;li&gt;Take the square root of the variance. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;In calculation form it looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" alt="\sigma = \sqrt{\frac{1}{N} \sum_{i=1}^N (x_i - \overline{x})^2}\,," src="http://upload.wikimedia.org/math/6/1/6/616b3bfb2e10653483fa05b3ecab46ef.png" /&gt;&lt;/p&gt;  &lt;p&gt;The variable &lt;i&gt;s&lt;/i&gt; signifies the standard deviation.&amp;#160; &lt;em&gt;Thanks to Wikipedia for the pictures&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;In C# the code would look like:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;double StdDev(List&amp;lt;double&amp;gt; values, out double mean)      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; mean = Statistics.Mean(values);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; double sumSquares = 0;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int count = 0; &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; foreach (double d in values)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; double diff = (d - mean);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sumSquares += diff * diff;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; count++;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; return Math.Sqrt(sumSquares / count);      &lt;br /&gt;} &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If they taught math in the form of programming (&lt;em&gt;“this is how you do it in code…”&lt;/em&gt;), Math might not have sucked!&amp;#160; Yes, I do realize math is the precursor to programming, but a boy can dream.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Back to the Cloud&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Once the standard deviation is found, I can apply the weighting.&amp;#160; Essentially I started at a deviation of 0 and assigned it the default font-size for this site.&amp;#160; As the deviation falls below 0 the font decreases, and as it increases above 0 it increases.&amp;#160; Fairly straightforward.&amp;#160; Once I got the weighting, I applied CSS, and built a web part accordingly.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/76.aspx?rss</link><pubDate>Thu, 01 Jan 2009 22:07:57 GMT</pubDate></item><item><title>Windows Live Writer</title><description>&lt;P&gt;I finally got around to building a MetaWeblog API Handler for this site, so I can use Windows Live Writer.&amp;nbsp; It certainly was an interesting task.&amp;nbsp; I wrote code for XML, SQL Server, File IO, and Authentication to get this thing working.&amp;nbsp; It’s kinda mind-boggling how many different pieces were necessary to get the Handler to function properly.&lt;/P&gt;
&lt;P&gt;All-in-all the development was really fun.&amp;nbsp; Most people would give up on the process once they realize what’s required to debug such an interface.&amp;nbsp; But it got my chops in shape.&amp;nbsp; It’s not every day you have to use a Network Listener to debug code.&amp;nbsp; It’s certainly not something I would want to do everyday, but every so often it’s pretty fun.&lt;/P&gt;
&lt;P&gt;While in the preparation process, there were a couple of procedures that I thought might be tricky to work out.&amp;nbsp; One in particular was automatically uploading images to my server that were placed in the post.&amp;nbsp; I could have left it to the manual process, what I started out with, which involved FTP’ing the images to the server, and then figuring out the URL for them, and manually inserting the img tag.&amp;nbsp; Or, I could let Live Writer and the Handler do all the work.&amp;nbsp; Ironically, this procedure took the least amount of code out of all of them:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;public string NewMediaObject(string blogId, string userName, string password,&lt;BR&gt;                             string base64Bits, string name)
{
    string mediaDirectory &lt;BR&gt;                = HttpContext.Current.Request.PhysicalApplicationPath + "media/blog/";

    if (authUser(userName, password))
    {
        File.WriteAllBytes(mediaDirectory + name, Convert.FromBase64String(base64Bits));

        return Config.SiteURL + "/media/blog/" + name;
    }
    else
    {
        throw new Exception("Cannot Authenticate User");
    }
}&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now its a breeze to write posts.&amp;nbsp; It even adds drop shadows to images:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.syfuhs.net/media/blog/1538_2.jpg"&gt;&lt;IMG title=1538 style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-LEFT: 0px; MARGIN-RIGHT: auto; BORDER-BOTTOM: 0px" height=229 alt=1538 src="http://www.syfuhs.net/media/blog/1538_thumb.jpg" width=303 border=0 relativesrc="http://www.syfuhs.net/media/blog/1538_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Live Writer also automatically creates a thumbnail of the image, and links to the original.&amp;nbsp; It might be a pain in some cases, but it’s easily fixable.&lt;/P&gt;
&lt;P&gt;All I need now is more topics that involve pictures.&amp;nbsp; Kitten’s optional. :)&lt;/P&gt;</description><link>http://www.syfuhs.net/article/75.aspx?rss</link><category>.NET</category><category>ASP.NET</category><category>C#</category><category>SQL</category><category>Web Services</category><category>Windows Live</category><category>XML</category><pubDate>Thu, 01 Jan 2009 12:10:57 GMT</pubDate></item><item><title>Open Source Windows</title><description>&lt;DIV&gt;Some days you just have to shake your head and wonder. As it turns out, I'm a little late to hear about this, but nonetheless, I'm still shaking my head.&lt;BR&gt;&lt;BR&gt;It turns out that Windows has gone open source. And (!!) it's not being made by Microsoft anymore. Well, Windows™ is still made by Microsoft. Windows is now made by a group under the gise of ReactOS. 
&lt;BLOCKQUOTE&gt;ReactOS® is a free, modern operating system based on the design of Windows® XP/2003. Written completely from scratch, it aims to follow the Windows® architecture designed by Microsoft from the hardware level right through to the application level. This is not a Linux based system, and shares none of the unix architecture.&lt;/BLOCKQUOTE&gt;So essentially, these people are taking the Windows architecture (based on XP/2003), and redesigning it from scratch. Or rather, are re-coding it from scratch, because redesigning would imply making something different. Sounds vaguely familiar to, oh, something called Vista. Except uglier. &lt;BR&gt;&lt;BR&gt;
&lt;CENTER&gt;&lt;A href="http://www.syfuhs.net/media/blog/reactOS.png"&gt;&lt;IMG src="http://www.syfuhs.net/media/blog/reactOS.png" width=600 relativesrc="http://www.syfuhs.net/media/blog/reactOS.png"&gt;&lt;/A&gt;&lt;/CENTER&gt;&lt;BR&gt;&lt;BR&gt;Now, that nagging feeling we are all getting right about now should be visualized as a pack of rabid lawyers. Isn't this considered copyright infringement? They outright define the product as a copy.&lt;BR&gt;&lt;BR&gt;And what about the end users? Are all programs designed to run on Windows supposed to be able to run on this ReactOS? Why bother with testing? The XP architecture is now almost 8 years old by now. That means anything designed to run on Vista, or soon to be designed to run on Windows 7, wouldn't stand a snowballs chance in hell, running on ReactOS. &lt;BR&gt;&lt;BR&gt;I would love to see how a .NET application runs on it. &lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/44.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>Beta</category><category>Microsoft</category><category>News</category><category>Open Source</category><category>Windows 7</category><category>Windows Vista</category><pubDate>Wed, 31 Dec 2008 23:14:35 GMT</pubDate></item><item><title>ADO.NET Entity Framework and SQL Server 2008</title><description>&lt;DIV&gt;Do you remember the &lt;A href="http://www.syfuhs.net/article/12.aspx"&gt;SubSonic project&lt;/A&gt;? The Entity Framework is kind of like that. You can create an extensible and customizable data model from any type of source. It takes the boiler plate coding away from developing Data Access Layers. &lt;BR&gt;&lt;BR&gt;Entity is designed to seperate how data is stored and how data is used. It's called an Object-Relational Mapping framework. You point the framework at the source, tell it what kind of business objects you want, and poof: you have an object model. Entity is also designed to play nicely with LINQ. You can use it as a data source when querying with LINQ. In my &lt;A href="http://www.syfuhs.net/Article/42.aspx"&gt;previous post&lt;/A&gt;, the query used NorthwindModEntities as a data source. It is an Entity object. &lt;BR&gt;&lt;BR&gt;
&lt;CENTER&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG alt="Entity Framework" src="http://upload.wikimedia.org/wikipedia/en/b/b7/ANEF.PNG" relativesrc="http://upload.wikimedia.org/wikipedia/en/b/b7/ANEF.PNG"&gt; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD align=left&gt;&lt;I&gt;Courtesy of Wikipedia&lt;/I&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/CENTER&gt;&lt;BR&gt;The Architecture, as defined in the picture:&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;Data source specific providers&lt;/B&gt;, which abstracts the ADO.NET interfaces to connect to the database when programming against the conceptual schema. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Map provider&lt;/B&gt;, a database-specific provider that translates the Entity SQL command tree into a query in the native SQL flavor of the database. It includes the &lt;B&gt;Store specific bridge&lt;/B&gt;, which is the component that is responsible for translating the generic command tree into a store-specific command tree. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;EDM parser and view mapping&lt;/B&gt;, which takes the SDL specification of the data model and how it maps onto the underlying relational model and enables programming against the conceptual model. From the relational schema, it creates views of the data corresponding to the conceptual model. It aggregates information from multiple tables in order to aggregate them into an entity, and splits an update to an entity into multiple updates to whichever table contributed to that entity. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Query and update pipeline&lt;/B&gt;, processes queries, filters and update-requests to convert them into canonical command trees which are then converted into store-specific queries by the map provider. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Metadata services&lt;/B&gt;, which handle all metadata related to entities, relationships and mappings. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Transactions&lt;/B&gt;, to integrate with transactional capabilities of the underlying store. If the underlying store does not support transactions, support for it needs to be implemented at this layer. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Conceptual layer API&lt;/B&gt;, the runtime that exposes the programming model for coding against the conceptual schema. It follows the ADO.NET pattern of using Connection objects to refer to the map provider, using Command objects to send the query, and returning EntityResultSets or EntitySets containing the result. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Disconnected components&lt;/B&gt;, which locally caches datasets and entity sets for using the ADO.NET Entity Framework in an occasionally connected environment. 
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;Embedded database&lt;/B&gt;: ADO.NET Entity Framework includes a lightweight embedded database for client-side caching and querying of relational data. &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Design tools&lt;/B&gt;, such as Mapping Designer are also included with ADO.NET Entity Framework which simplifies the job on mapping a conceptual schema to the relational schema and specifying which properties of an entity type correspond to which table in the database. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Programming layers&lt;/B&gt;, which exposes the EDM as programming constructs which can be consumed by programming languages. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Object services&lt;/B&gt;, automatically generate code for CLR classes that expose the same properties as an entity, thus enabling instantiation of entities as .NET objects. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Web services&lt;/B&gt;, which expose entities as web services. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;High level services&lt;/B&gt;, such as reporting services which work on entities rather than relational data.&lt;/LI&gt;&lt;/UL&gt;&lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/43.aspx?rss</link><category>.NET</category><category>.NET Framework</category><category>Architects</category><category>ASP.NET</category><category>C#</category><category>LINQ</category><category>Microsoft</category><category>MSDN</category><category>SQL</category><category>Web Services</category><category>XML</category><pubDate>Tue, 30 Dec 2008 22:30:31 GMT</pubDate></item><item><title>LINQ and SQL Server 2008</title><description>&lt;div&gt;No, Zelda is not back.&amp;nbsp; LINQ stands for &lt;i&gt;Language Integrated Query&lt;/i&gt;.  It's a set of query operators that can be called in any .NET language to query, project, and filter data from any type of data source.  Types include arrays, databases, IEnumerables, Lists, etc, including third party Data Sources.  It's pretty neat.&lt;br&gt;&lt;br&gt;

Essentially LINQ pulls the data into data objects, which can then be used as you would use a Business Object.  The data object is predefined by a LINQ Provider.  Out of the box you have &lt;i&gt;LINQ to SQL, LINQ to XML, and LINQ to Objects&lt;/i&gt; for providers.  Once you define the data object based on provider you can start querying data:&lt;br&gt;&lt;br&gt;&lt;center&gt;
&lt;img src="http://www.microsoft.com/global/sqlserver/2008/en/us/PublishingImages/scrn-LINQ.jpg" alt="LINQ" /&gt;
&lt;/center&gt;
&lt;br&gt;&lt;br&gt;

Within the &lt;i&gt;foreach&lt;/i&gt; loop the 'Customers' class is a data class that was defined based on a LINQ to SQL Provider.  In this case, the database was Northwind.&lt;br&gt;&lt;br&gt;

Syntactically LINQ is very much like the SQL language, mainly because they both work on the same principle.  Query (possible) large amounts of data and act on it appropriately.  SQL is designed to work with large datasets.  Most other languages work iteratively.  So SQL was a good language choice to mimic.
&lt;br&gt;&lt;br&gt;

However, there is a small problem that I see with LINQ.  If I'm doing all the querying at the DAL layer instead of using things like Stored Procedures within the database, and I need to modify a query for performance concerns, that means the DAL has to be recompiled and redistributed to each application out in the field.  That could be 10,000 different instances.  Wouldn't it make more sense to keep the query within a Stored Procedure?  Just a thought...
&lt;/div&gt;
</description><link>http://www.syfuhs.net/article/42.aspx?rss</link><category>.NET</category><category>C#</category><category>LINQ</category><category>Microsoft</category><category>SQL</category><pubDate>Tue, 30 Dec 2008 21:53:23 GMT</pubDate></item><item><title>Merry Christmas!</title><description>&lt;DIV&gt;
&lt;CENTER&gt;&lt;IMG alt="Merry Christmas!" src="http://images.icanhascheezburger.com/completestore/2008/12/21/128743733010375421.jpg" relativesrc="http://images.icanhascheezburger.com/completestore/2008/12/21/128743733010375421.jpg"&gt;&lt;/CENTER&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;I&gt;What?&lt;/I&gt;</description><link>http://www.syfuhs.net/article/41.aspx?rss</link><pubDate>Thu, 25 Dec 2008 17:15:55 GMT</pubDate></item><item><title>The Tragically Hip Media Player</title><description>&lt;div&gt;It's not every day you come across a band that is willing to stream all of it's songs free of charge.&amp;nbsp; Especially at a fairly high bit rate.&amp;nbsp; Well it seems the Tragically Hip have decided to do so.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;It's a little game&amp;nbsp;changing actually.&amp;nbsp; The band has decided to let everyone and their mother listen to the music free, with no advertisements.&amp;nbsp; Mind you, you can't take it with you.&amp;nbsp; But there is nothing&amp;nbsp;technical stopping you from recording the stream.&amp;nbsp; That was always the fear with online streaming that the Record Labels and the RIAA had.&amp;nbsp; I don't condone pirating, of anything, but I do believe in free arts.&amp;nbsp; So this is cool.&amp;nbsp; Especially because I like The Hip.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;center&gt;
&lt;img src="http://www.syfuhs.net/media/blog/theHipListen.png" alt="The Tragically Hip" /&gt;
&lt;/center&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
It's also pretty straightforward to use.  On the main page select all the songs you want in the playlist, and then click "Launch Music Player".  Very intuitive.</description><link>http://www.syfuhs.net/article/40.aspx?rss</link><category>Fun Stuff</category><category>Sound</category><pubDate>Wed, 24 Dec 2008 16:47:12 GMT</pubDate></item><item><title>Windows 7 Teasers</title><description>&lt;div&gt;&lt;div&gt;I had been out last week due to the flu, which sucks.&amp;nbsp; There were a few meetings that ended up getting rescheduled, which I hate having to do.&amp;nbsp; Anyway, I had the pleasure of playing around with the Windows 7 beta earlier and managed to get a couple screen shots.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Windows 7 Calculator&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;a href="http://www.syfuhs.net/media/blog/win7calc.png"&gt;&lt;img alt="Windows 7 Calculator" src="http://www.syfuhs.net/media/blog/win7calc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/center&gt;&lt;br /&gt;
&lt;br /&gt;
Windows 7 brings a whole whack of new features to the user's fingers, and finally they've updated the calculator. The codebase hadn't been touched since Windows 3.11. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Windows 7 Paint&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;a href="http://www.syfuhs.net/media/blog/win7Paint.png"&gt;&lt;img alt="Windows 7 Paint" src="http://www.syfuhs.net/media/blog/win7Paint.png" width="600" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;
&lt;br /&gt;
The Paint application that comes with Windows 7 is actually pretty useful. The brushes are nice, and you can get away with basic image manipulation without butchering the picture. It's feature rich, and easy to use.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Windows 7 WordPad&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;a href="http://www.syfuhs.net/media/blog/win7Wordpad.png"&gt;&lt;img alt="Windows 7 WordPad" src="http://www.syfuhs.net/media/blog/win7Wordpad.png" width="600" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;
&lt;br /&gt;
Notice the ribbon bar? Very elegant. Makes simple text editing a breeze. Also, it uses the new Office XML Standard instead of RTF for its default documents now.&lt;/div&gt;
</description><link>http://www.syfuhs.net/article/39.aspx?rss</link><pubDate>Sun, 21 Dec 2008 01:03:13 GMT</pubDate></item><item><title>Protecting Data in Transit between applications and SQL Server</title><description>&lt;div&gt;Alright, so you've just implemented Transparent Data Encryption on your database.&amp;nbsp; Your database is extremely secure.&amp;nbsp; The data, not so much.&amp;nbsp; You see, the problem is this: the data travels unencrypted between SQL Server and your application.&amp;nbsp; Whoops.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;To enable SSL Encryption on the server side, there are a couple of fairly simple steps involved:&lt;/div&gt;
&lt;div&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In &lt;strong&gt;SQL Server Configuration Manager&lt;/strong&gt;, expand &lt;strong&gt;SQL Server Network Configuration&lt;/strong&gt;, right-click &lt;strong&gt;Protocols for &lt;/strong&gt;&lt;em&gt;&amp;lt;server instance&amp;gt;&lt;/em&gt;, and then select&lt;strong&gt; &lt;/strong&gt;&lt;strong&gt;Properties&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Protocols for&lt;/strong&gt; &lt;em&gt;&amp;lt;instance name&amp;gt;&lt;/em&gt;&lt;strong&gt; Properties &lt;/strong&gt;dialog box, on the &lt;strong&gt;Certificate&lt;/strong&gt; tab, select the desired certificate from the drop down for the &lt;strong&gt;Certificate&lt;/strong&gt; box, and then click &lt;strong&gt;OK&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the &lt;strong&gt;Flags&lt;/strong&gt; tab, in the &lt;strong&gt;ForceEncryption&lt;/strong&gt; box, select &lt;strong&gt;Yes&lt;/strong&gt;, and then click &lt;strong&gt;OK&lt;/strong&gt; to close the dialog box.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restart the SQL Server service.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;To enable SSL Encryption&amp;nbsp;on the client side:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Copy either the original certificate or the exported certificate file to the client computer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the client computer, use the &lt;strong&gt;Certificates&lt;/strong&gt; snap-in to install either the root certificate or the exported certificate file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the console pane, right-click &lt;strong&gt;SQL Server Native Client Configuration&lt;/strong&gt;, and then click &lt;strong&gt;Properties&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the &lt;strong&gt;Flags&lt;/strong&gt; page, in the &lt;strong&gt;Force protocol encryption&lt;/strong&gt; box, click &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;finally, set your connection string within the application to &lt;span style="FONT-STYLE: italic"&gt;'&lt;/span&gt;&lt;span style="FONT-STYLE: italic"&gt;Use Encryption for Data=True&lt;/span&gt;&lt;span style="FONT-STYLE: italic"&gt;'.&amp;nbsp; &lt;/span&gt;
&lt;blockquote&gt;&lt;pre&gt;
Driver={SQL Native Client};
Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;Encrypt=yes;
&lt;/pre&gt;&lt;/blockquote&gt;
That's really not all that difficult. One more reason to have a more secure infrastructure!&lt;/p&gt;
</description><link>http://www.syfuhs.net/article/38.aspx?rss</link><category>.NET</category><category>Microsoft</category><category>MSDN</category><category>SQL</category><category>Technet</category><pubDate>Thu, 04 Dec 2008 13:34:47 GMT</pubDate></item><item><title>Transparent Data Encryption</title><description>&lt;div&gt;Transparent data encryption (TDE) is a new encryption feature introduced in Microsoft® SQL Server™ 2008. Unlike previous versions of SQL Server, TDE, as an encryption method, is a lot easier to implement, and is a lot less resource intensive. Essentially, TDE encrypts everything within the database.    &lt;br /&gt;    &lt;br /&gt;&lt;center&gt;&lt;img src="http://www.syfuhs.net/media/blog/Cc278098_TDEandEFSBitLockerFig1(en-us,SQL_100).gif" relativesrc="http://www.syfuhs.net/media/blog/Cc278098_TDEandEFSBitLockerFig1(en-us,SQL_100).gif" /&gt;&lt;/center&gt;    &lt;br /&gt;    &lt;br /&gt;Previous versions of data encryption in SQL Server involved cell-level encryption, which posed problems, as you had to use a Varbinary column. Scans were difficult, and searching was awful, if not impossible. Essentially, everything had to be handled out of process for that column. Because encryption happens at the Buffer Pool level, all processes are transparent to the user. The encryption happens at file level, not within the file structure.&amp;#160; This allows indexes to work without being hindered by the use of Varbinary columns. For more information check out the MSDN Whitepaper on TDE at &lt;a href="http://msdn.microsoft.com/en-us/library/cc278098.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc278098.aspx&lt;/a&gt; (which is where I stole the pretty graphic).&lt;/div&gt;  &lt;div&gt;   &lt;br /&gt;To enable TDE, you must have the normal permissions associated with creating a database master key and certificates in the master database. You must also have CONTROL permissions on the user database.     &lt;br /&gt;    &lt;br /&gt;Perform the following steps in the master database:     &lt;br /&gt;    &lt;br /&gt;1. If it does not already exist, create a database master key (DMK) for the master database. Ensure that the database master key is encrypted by the service master key (SMK).     &lt;blockquote&gt;     &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; MASTER &lt;span class="kwrd"&gt;KEY&lt;/span&gt; ENCRYPTION &lt;span class="kwrd"&gt;BY&lt;/span&gt; PASSWORD = ‘&lt;span class="kwrd"&gt;some&lt;/span&gt; password’;&lt;/pre&gt;
    &lt;/blockquote&gt;
2. Either create or designate an existing certificate for use as the database encryption key (DEK) protector. For the best security, it is recommended that you create a new certificate whose only function is to protect the DEK. Ensure that this certificate is protected by the DMK. 

  &lt;blockquote&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; CERTIFICATE tdeCert &lt;span class="kwrd"&gt;WITH&lt;/span&gt; SUBJECT = ‘TDE Certificate’;&lt;/pre&gt;
    &lt;/blockquote&gt;
3. Create a backup of the certificate with the private key and store it in a secure location. (Note that the private key is stored in a separate file—be sure to keep both files). Be sure to maintain backups of the certificate as data loss may occur otherwise. 

  &lt;blockquote&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;BACKUP&lt;/span&gt; CERTIFICATE tdeCert &lt;span class="kwrd"&gt;TO&lt;/span&gt; &lt;span class="kwrd"&gt;FILE&lt;/span&gt; = ‘path_to_file’
    &lt;span class="kwrd"&gt;WITH&lt;/span&gt; PRIVATE &lt;span class="kwrd"&gt;KEY&lt;/span&gt; (
        &lt;span class="kwrd"&gt;FILE&lt;/span&gt; = ‘path_to_private_key_file’,
        ENCRYPTION &lt;span class="kwrd"&gt;BY&lt;/span&gt; PASSWORD = ‘cert password’);&lt;/pre&gt;
    &lt;/blockquote&gt;
4. Optionally, enable SSL on the server to &lt;a href="http://www.syfuhs.net/Article/38.aspx"&gt;protect data in transit&lt;/a&gt;. Perform the following steps in the user database. These require CONTROL permissions on the database. 

  &lt;br /&gt;

  &lt;br /&gt;5. Create the database encryption key (DEK) encrypted with the certificate designated from step 2 above. This certificate is referenced as a server certificate to distinguish it from other certificates that may be stored in the user database. 

  &lt;blockquote&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;DATABASE&lt;/span&gt; ENCRYPTION &lt;span class="kwrd"&gt;KEY&lt;/span&gt;
    &lt;span class="kwrd"&gt;WITH&lt;/span&gt; ALGORITHM = AES_256
    ENCRYPTION &lt;span class="kwrd"&gt;BY&lt;/span&gt; SERVER CERTIFICATE tdeCert&lt;/pre&gt;
    &lt;/blockquote&gt;
6. Enable TDE. This command starts a background thread (referred to as the encryption scan), which runs asynchronously. 

  &lt;blockquote&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;DATABASE&lt;/span&gt; myDatabase &lt;span class="kwrd"&gt;SET&lt;/span&gt; ENCRYPTION ON&lt;/pre&gt;
&lt;/blockquote&gt;
To monitor progress, query the sys.dm_database_encryption_keys view (the VIEW SERVER STATE permission is required) as in the following example: 

  &lt;blockquote&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; db_name(database_id), encryption_state
&lt;span class="kwrd"&gt;FROM&lt;/span&gt; sys.dm_database_encryption_keys&lt;/pre&gt;
  &lt;/blockquote&gt;
&lt;/div&gt;</description><link>http://www.syfuhs.net/article/37.aspx?rss</link><pubDate>Thu, 04 Dec 2008 13:16:51 GMT</pubDate></item><item><title>Why Upgrade to SQL Server 2008?</title><description>&lt;div&gt;Looking through all the marketing material you get as a Microsoft Partner is a daunting task.&amp;nbsp; In the interim what I've done is upload all the materials to my internal SharePoint site, and index all the documents.&amp;nbsp; That way, if I need to search for something all I have to do is open SharePoint and do a search.&amp;nbsp; Very handy for hiding documents for later viewing.&lt;/div&gt; &lt;br /&gt; &lt;div&gt;Anyway...In my travels I came across&amp;nbsp;the marketing reasons to upgrade to SQL Server 2008.&amp;nbsp; I did a presentation at Techdays in Montreal on a few of these, but that&amp;nbsp;was really just a high level overview.&amp;nbsp; Here is the list:&lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.syfuhs.net/Article/37.aspx"&gt;Transparent Data Encryption&lt;/a&gt;&lt;/li&gt; &lt;li&gt;External Key Management&lt;/li&gt; &lt;li&gt;Data Auditing&lt;/li&gt; &lt;li&gt;Pluggable CPU&lt;/li&gt; &lt;li&gt;Transparent Failover for Database Mirroring&lt;/li&gt; &lt;li&gt;Declarative Management Framework&lt;/li&gt; &lt;li&gt;Server Group Management&lt;/li&gt; &lt;li&gt;Streamlined Installation&lt;/li&gt; &lt;li&gt;Enterprise System Management&lt;/li&gt; &lt;li&gt;Performance Data Collection&lt;/li&gt; &lt;li&gt;System Analysis&lt;/li&gt; &lt;li&gt;Data Compression&lt;/li&gt; &lt;li&gt;Query Optimization Modes&lt;/li&gt; &lt;li&gt;Resource Governor&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.syfuhs.net/Article/43.aspx"&gt;Entity Data Model&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.syfuhs.net/Article/42.aspx"&gt;LINQ&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Visual Entity Designer&lt;/li&gt; &lt;li&gt;Entity Aware Adapters&lt;/li&gt; &lt;li&gt;SQL Server Change Tracking&lt;/li&gt; &lt;li&gt;Synchronized Programming Model&lt;/li&gt; &lt;li&gt;Visual Studio Support&lt;/li&gt; &lt;li&gt;SQL Server Conflict Detection&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.syfuhs.net/Article/16.aspx"&gt;FILESTREAM&lt;/a&gt; &lt;a href="http://www.syfuhs.net/Article/17.aspx"&gt;data type&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Integrated Full Text Search&lt;/li&gt; &lt;li&gt;Sparse Columns&lt;/li&gt; &lt;li&gt;Large User Defined Types&lt;/li&gt; &lt;li&gt;Date/Time Data Type&lt;/li&gt; &lt;li&gt;LOCATION data type&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.syfuhs.net/Article/91.aspx"&gt;SPATIAL data type&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Virtual Earth Integration&lt;/li&gt; &lt;li&gt;Partitioned Table Parallelism&lt;/li&gt; &lt;li&gt;Query Optimizations&lt;/li&gt; &lt;li&gt;Persistent Lookups &lt;/li&gt; &lt;li&gt;Change Data Capture &lt;/li&gt; &lt;li&gt;Backup Compression&lt;/li&gt; &lt;li&gt;MERGE SQL Statement&lt;/li&gt; &lt;li&gt;Data Profiling&lt;/li&gt; &lt;li&gt;Star JoinEnterprise Reporting Engine&lt;/li&gt; &lt;li&gt;Internet Report Deployment&lt;/li&gt; &lt;li&gt;Block Computations&lt;/li&gt; &lt;li&gt;Scale out Analysis&lt;/li&gt; &lt;li&gt;BI Platform Management&lt;/li&gt; &lt;li&gt;Export to Word and Excel&lt;/li&gt; &lt;li&gt;Author reports in Word and Excel&lt;/li&gt; &lt;li&gt;Report Builder Enhancements&lt;/li&gt; &lt;li&gt;TABLIX&lt;/li&gt; &lt;li&gt;Rich Formatted Data&lt;/li&gt; &lt;li&gt;Personalized Perspectives&lt;/li&gt; &lt;/ul&gt; What I'm thinking I'll do is make a post on each item once a week or so. Maybe more often if I have free time. :)</description><link>http://www.syfuhs.net/article/36.aspx?rss</link><pubDate>Thu, 04 Dec 2008 11:55:21 GMT</pubDate></item><item><title>No, not yet, I wish...Still funny</title><description>&lt;div style="TEXT-ALIGN: center"&gt;&lt;div&gt;&lt;center&gt;&lt;a href="http://www.microsoft.com/college/default.mspx"&gt;&lt;img alt="I can has Microsoft Jobs?" src="http://jobsblog.members.winisp.net/Pictures/icanhas.gif" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;
&lt;br /&gt;
Soon, it will happen soon. I will work for them! The kitteh says so!&lt;/div&gt;
&lt;div style="TEXT-ALIGN: center"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;img alt="Newb!" src="http://icanhascheezburger.files.wordpress.com/2007/02/start.jpg" /&gt;&lt;/div&gt;
</description><link>http://www.syfuhs.net/article/35.aspx?rss</link><pubDate>Wed, 03 Dec 2008 00:02:33 GMT</pubDate></item><item><title>Context.RewritePath and the Global.asax file</title><description>&lt;div&gt;I've always been fond of making my URL's clean and simple.&amp;#160; With that being said, URL variables are always useful.&amp;#160; But in the case of this site, I decided to clean up the URL's so it's very easy for people to find content.&amp;#160; To do this, I added the code:&lt;/div&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Application_BeginRequest(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
{
    HttpContext context = HttpContext.Current;
    &lt;span class="kwrd"&gt;string&lt;/span&gt; path = context.Request.Path;

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (path.Contains(&lt;span class="str"&gt;&amp;quot;.aspx&amp;quot;&lt;/span&gt;))
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (path.ToLower().Contains(&lt;span class="str"&gt;&amp;quot;/article/&amp;quot;&lt;/span&gt;))
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; id &lt;br /&gt;             = path.Remove(0, path.LastIndexOf(&lt;span class="str"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;) + 1).Replace(&lt;span class="str"&gt;&amp;quot;.aspx&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(id);
                context.RewritePath(&lt;span class="str"&gt;&amp;quot;~/article/article.aspx?ArticleID=&amp;quot;&lt;/span&gt; + id);
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt;
            {
                &lt;span class="rem"&gt;// don't do anything because it's a postback&lt;/span&gt;
            }
        }
    }
}&lt;/pre&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;

&lt;p&gt;It's fairly simple to follow. First, I checked to see if it was an ASPX page, so I can weed out all the HTTP Handlers being used. Then I checked if it's a page I want to manipulate. Essentially, what Context.RewritePath does is take the incoming URL and modify it before it hits the page handler. So when I go to /Article/3.aspx, the code see's that it contain's both '.apsx' and 'article', and then because I know the format, I am stripping off everything else and keeping the article ID. Once that is done I pass the ID to the page that actually get's called behind the scenes. It's a quick and dirty way to make URL's human-friendly.&lt;/p&gt;</description><link>http://www.syfuhs.net/article/34.aspx?rss</link><pubDate>Tue, 02 Dec 2008 16:06:00 GMT</pubDate></item><item><title>The Lazy Admin and Why You Need It to Live</title><description>&lt;div&gt;I was talking with Daniel Nerenberg yesterday at Techdays in Ottawa. He had been given the administrator's password a while ago since Rodney has been too busy working for Microsoft. He has some interesting thoughts on what to do with &lt;a href="http://www.thelazyadmin.com/" target="_blank"&gt;The Lazy Admin&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;img alt="The Lazy Admin" src="http://www.syfuhs.net/media/blog/TLA-Title.gif" /&gt; &lt;/center&gt;&lt;blockquote&gt;Being a lazy admin means following best practices and using the tools available to be proactive about maintenance. SMS 2003, MOM 2005, WSUS and the slew of Microsoft best practices analyzers can help by automating updates and application deployments as well as monitoring servers and services. This enables you to find and fix small problems before they pile up into larger issues. Proper planning, implementation and proactive maintenance will maximize system availability and minimize the occurrence of issues, allowing you to put your feet up on the desk, relax, and be a lazy admin! &lt;/blockquote&gt;The site is full of information. Lots and lots of information. It's a great place to have discussions about anything administrative. Or about anything lazy for that matter. I am a lazy admin! And I will be loitering on the site. &lt;/div&gt;
</description><link>http://www.syfuhs.net/article/33.aspx?rss</link><pubDate>Fri, 28 Nov 2008 21:33:28 GMT</pubDate></item><item><title>Live Messenger and all its Goodness</title><description>&lt;div&gt;I've been playing around with the Windows Live Messenger Web SDK.&amp;nbsp; It's an interesting little toy.&amp;nbsp; I suppose 'toy' is a little improper, as there are a lot of API's available to work with.&amp;nbsp; You can check out the API at &lt;a href="http://dev.live.com/"&gt;http://dev.live.com&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;I'll admit, I was a little iffy on the idea of adding my presence to the site.&amp;nbsp; What good is it if all I'm doing is telling people that I'm online?&amp;nbsp; Well, it turns out I can do more.&amp;nbsp; If you click the presence button:&lt;/div&gt;
&lt;br /&gt;
&lt;center&gt;&lt;img alt="" src="http://www.syfuhs.net/media/blog/messenger.png" /&gt;&lt;/center&gt; &lt;br /&gt;
You open a window that allows you to chat with me.&amp;nbsp; Pretty neat, I think.&amp;nbsp; When I came across it, I decided I wanted to modify it a little, so it's more in theme with this site.&amp;nbsp; Basically all I did was put it into a modal window:&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;img alt="" src="http://www.syfuhs.net/media/blog/modalMessenger.png" /&gt;&lt;/center&gt; &lt;br /&gt;
Theres a bit of work required to put it into a modal window, so I will cover that next time I post.</description><link>http://www.syfuhs.net/article/31.aspx?rss</link><pubDate>Tue, 25 Nov 2008 23:00:18 GMT</pubDate></item><item><title>Ottawa, Here I Come!</title><description>&lt;div&gt;Techdays is back in swing for Ottawa.&amp;nbsp; It's taking place at the Mariott Hotel on Thursday November 27th.&amp;nbsp; I'll be presenting on &lt;span style="FONT-STYLE: italic"&gt;Microsoft SQL Server: Essential Database Maintenance for New and Seasoned DBAs.&lt;/span&gt; The synopsis is: &lt;blockquote style="MARGIN: 10px"&gt;&lt;div style="margin: 10px"&gt;Every DBA knows that managing a database using SQL Server requires dealing with a key set of components of SQL Server in an optimal in order to make their lives easier. But what are the elements of SQL Server that you need to really focus on to get the best bang for the DBA buck, and what best practices should be followed to ensure an optimally-running an instance in SQL Server? In this session we will walk through the Top 10 List of DBA techniques and best practices to ensure a smooth running database and instance. You’ll learn: how to optimize data files and transaction logs; why TempDB is special and how to treat it properly; indexing strategies dealing with corruption; and much, much more. &lt;/div&gt;&lt;/blockquote&gt;Unfortunately this is my last presentation with the Techdays tour :(. Luckily I'll be able to catch up with some old friends, and talk to some of the smartest groups of people I know. It &lt;i&gt;will&lt;/i&gt; be fun.&lt;/div&gt;
</description><link>http://www.syfuhs.net/article/30.aspx?rss</link><pubDate>Tue, 25 Nov 2008 13:28:21 GMT</pubDate></item><item><title>I Hate Being Wrong...</title><description>&lt;DIV depth="0"&gt;Actually I don't.&amp;nbsp; I learn a whole lot more when I'm wrong.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV style="TEXT-ALIGN: center"&gt;&lt;IMG alt="" src="http://imgs.xkcd.com/comics/duty_calls.png" relativesrc="http://imgs.xkcd.com/comics/duty_calls.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;From time to time I get the&amp;nbsp;feeling that when I write about something, I'm just pulling it out of my butt.&amp;nbsp; I try to read up on the topics that I'm writing about, and will reference my sources as appropriate.&amp;nbsp; However, there are the times that I just write from memory, and by god, it gets me in trouble more times than it doesn't.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;It's the "meant well, but failed in the process" dynamic.&amp;nbsp; What I knew, and what I wrote are two seperate things.&amp;nbsp; It's really annoying when that happens.&amp;nbsp; It might be the idea that what I'm writing sounds as if it were absolute fact, and not the ramblings of some kid.&amp;nbsp; Remember, I'm only 20!&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;Or&amp;nbsp;maybe I need to just find a niche within&amp;nbsp;IT that I can devote all my time to.&amp;nbsp; I've tried doing that with&amp;nbsp;Windows Server, but I like&amp;nbsp;development.&amp;nbsp; I tried doing that with ASP.NET, but I like management.&amp;nbsp; Hmm...&amp;nbsp;What can I become an expert in that involves development and management?&amp;nbsp; Some may have already figured it out.&amp;nbsp; It turns out SQL Server is a good place to get a mix of both.&amp;nbsp; I wouldn't say I'm an expert in all aspects of SQL Server, but I would like to be eventually.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Which is once again why I like being wrong.&amp;nbsp; I learn a whole lot more from being wrong than I do from always being&amp;nbsp;right.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;...Just some ramblings of a 20 year old.&amp;nbsp;&lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/28.aspx?rss</link><pubDate>Mon, 24 Nov 2008 01:04:47 GMT</pubDate></item><item><title>Microsoft SQL Server 2008 Internals</title><description>&lt;DIV style="TEXT-ALIGN: center" depth="0"&gt;&lt;IMG alt="" src="http://ecx.images-amazon.com/images/I/51IXByMCtyL._SS500_.jpg" relativesrc="http://ecx.images-amazon.com/images/I/51IXByMCtyL._SS500_.jpg"&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;It's almost released!&amp;nbsp; Only Three and a half months to go!&amp;nbsp; Pre-Order at &lt;A href="http://www.amazon.ca/gp/product/0735626243/ref=s9sims_c6_14_img1-rfc_p-frt_p-3215_g1-3102_p?pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=center-2&amp;amp;pf_rd_r=0MQHVXKBNJBPYAH3QCT0&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=436516001&amp;amp;pf_rd_i=507846"&gt;Amazon&lt;/A&gt;&lt;A href="http://www.amazon.ca/gp/product/0735626243/ref=s9sims_c6_14_img1-rfc_p-frt_p-3215_g1-3102_p?pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=center-2&amp;amp;pf_rd_r=0MQHVXKBNJBPYAH3QCT0&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=436516001&amp;amp;pf_rd_i=507846"&gt;&lt;/A&gt;.&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/27.aspx?rss</link><category>Microsoft</category><category>Random</category><category>SQL</category><pubDate>Sat, 22 Nov 2008 17:45:52 GMT</pubDate></item><item><title>TorontoSql.com, TorontoSql.net, TorontoSql.org just registered</title><description>&lt;DIV depth="0"&gt;Boredom is a bad thing!&amp;nbsp; Especially when you are putting off work.&amp;nbsp; So what do I do to waste my time?&amp;nbsp; Check out local user groups.&amp;nbsp; The websites at least.&amp;nbsp; A few days ago I posted a few links to some promising groups.&amp;nbsp; To my disappointment there really aren't that many Microsoft oriented user groups in Toronto.&amp;nbsp; I wouldn't call it a bad thing.&amp;nbsp; More of an opportunity.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;I have determined that TorontoSql.com, TorontoSql.net, and TorontoSql.org were not registered.&amp;nbsp; So for $30 I registered all three of them.&amp;nbsp; Now I have to put them to good use.&amp;nbsp; Currently they are pointed to &lt;A href="http://www.syfuhs.net"&gt;www.syfuhs.net&lt;/A&gt;, until I find a proper home.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;More to come on that front!&amp;nbsp;&lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/26.aspx?rss</link><category>Business</category><category>Fun Stuff</category><category>Geek Stuff</category><category>Microsoft</category><category>MSDN</category><category>Presentations</category><category>SQL</category><category>Technet</category><pubDate>Thu, 20 Nov 2008 22:20:41 GMT</pubDate></item><item><title>What is a Mandelbrot Set Anyway?</title><description>&lt;div&gt;Internet Explorer just crashed on me!&amp;nbsp; I now have to rewrite this.&amp;nbsp; I've gotta build &lt;a href="http://get.live.com/writer/overview"&gt;Live Writer&lt;/a&gt;&lt;a href="http://get.live.com/writer/overview"&gt;&lt;/a&gt; support into my site one of these days.&amp;nbsp; Anyway...&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;A Mandelbrot Set is a fractal.&amp;nbsp; It is a complex formula based image (more on that in a moment).&amp;nbsp; You pass values to define scale.&amp;nbsp; Wikipedia defines a Mandelbrot Set as (because I can't for the life of me remember the *real* definition) a set of &lt;a title="Point (geometry)" href="http://en.wikipedia.org/wiki/Point_(geometry)"&gt;&lt;font color="#002bb8"&gt;points&lt;/font&gt;&lt;/a&gt; in the &lt;a title="Complex plane" href="http://en.wikipedia.org/wiki/Complex_plane"&gt;&lt;font color="#002bb8"&gt;complex plane&lt;/font&gt;&lt;/a&gt;, the &lt;a title="Boundary (topology)" href="http://en.wikipedia.org/wiki/Boundary_(topology)"&gt;&lt;font color="#002bb8"&gt;boundary&lt;/font&gt;&lt;/a&gt; of which forms a &lt;a title="Fractal" href="http://en.wikipedia.org/wiki/Fractal"&gt;&lt;font color="#002bb8"&gt;fractal&lt;/font&gt;&lt;/a&gt;. Mathematically, the Mandelbrot set can be defined as the set of complex &lt;i&gt;c&lt;/i&gt;-values for which the &lt;a title="Orbit (dynamics)" href="http://en.wikipedia.org/wiki/Orbit_(dynamics)"&gt;&lt;font color="#002bb8"&gt;orbit&lt;/font&gt;&lt;/a&gt; of 0 under &lt;a title="Iterated function" href="http://en.wikipedia.org/wiki/Iterated_function"&gt;&lt;font color="#002bb8"&gt;iteration&lt;/font&gt;&lt;/a&gt; of the &lt;a title="Complex quadratic polynomial" href="http://en.wikipedia.org/wiki/Complex_quadratic_polynomial"&gt;&lt;font color="#002bb8"&gt;complex quadratic polynomial&lt;/font&gt;&lt;/a&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;center&gt; &lt;div&gt;&lt;i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;&lt;/i&gt;x&lt;/i&gt;&lt;sub&gt;&lt;i&gt;n&lt;/i&gt;+1&lt;/sub&gt; = &lt;i&gt;x&lt;/i&gt;&lt;sub&gt;&lt;i&gt;n&lt;/i&gt;&lt;/sub&gt;&lt;sup&gt;2&lt;/sup&gt; + &lt;i&gt;c&lt;/i&gt; &lt;/div&gt;&lt;/center&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt;remains &lt;a title="Bounded sequence" href="http://en.wikipedia.org/wiki/Bounded_sequence"&gt;&lt;font color="#002bb8"&gt;bounded&lt;/font&gt;&lt;/a&gt;&lt;a title="Bounded sequence" href="http://en.wikipedia.org/wiki/Bounded_sequence"&gt;&lt;/a&gt;.&amp;nbsp; A Complex number, &lt;i&gt;c&lt;/i&gt;, is in the Mandelbrot set if, when starting with &lt;i&gt;x&lt;/i&gt;&lt;sub&gt;0&lt;/sub&gt;=0 and applying the iteration repeatedly, the &lt;a title="Absolute value" href="http://en.wikipedia.org/wiki/Absolute_value"&gt;&lt;font color="#002bb8"&gt;absolute value&lt;/font&gt;&lt;/a&gt; of &lt;i&gt;x&lt;/i&gt;&lt;sub&gt;&lt;i&gt;n&lt;/i&gt;&lt;/sub&gt; never exceeds a certain number (that number depends on &lt;i&gt;c&lt;/i&gt;) however large &lt;i&gt;n&lt;/i&gt; gets.&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;Yeeeeaaaah.&amp;nbsp; Exactly.&amp;nbsp; Talk about a pain to remember.&amp;nbsp; I prefer to remember the code definition:&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt; &lt;blockquote&gt;&lt;pre class="csharpcode"&gt;Math.ComplexNumber C = z;
&lt;span class="kwrd"&gt;int&lt;/span&gt; iteration = 0;
&lt;span class="kwrd"&gt;while&lt;/span&gt; (z.Modulus &amp;lt; escapeRadius &amp;amp;&amp;amp; iteration &amp;lt; maxIteration)
{
    z = z * z + C;
    iteration++;
}

&lt;span class="kwrd"&gt;int&lt;/span&gt; colorIndex = 0;
&lt;span class="kwrd"&gt;if&lt;/span&gt; (iteration &amp;lt; maxIteration)
{
    z = z * z + C; iteration++;
    z = z * z + C; iteration++;
    &lt;span class="kwrd"&gt;double&lt;/span&gt; mu = iteration - (Math.Log(Math.Log(z.Modulus))) / logEscapeRadius;
    colorIndex = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)(mu / maxIteration * 768);
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (colorIndex &amp;gt;= 768) colorIndex = 0;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (colorIndex &amp;lt; 0) colorIndex = 0;
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/blockquote&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;This specific example was found on &lt;a href="http://llbb.wordpress.com/2007/04/12/mandelbrot-set-with-smooth-drawing-using-c/"&gt;http://llbb.wordpress.com/2007/04/12/mandelbrot-set-with-smooth-drawing-using-c/&lt;/a&gt;.&amp;nbsp; I'm looking for my original code that I used when studying Computer Science in high school.&amp;nbsp; But that was a long time ago.&amp;nbsp; Once I find the original code, I'll post an addendum.&lt;/div&gt;&lt;/div&gt;</description><link>http://www.syfuhs.net/article/24.aspx?rss</link><pubDate>Thu, 20 Nov 2008 16:55:44 GMT</pubDate></item><item><title>Wasting Time the SQL Way...</title><description>&lt;div class="   "&gt;Found on The Daily WTF: &lt;/div&gt;  &lt;blockquote&gt;   &lt;pre&gt;-- AUTHOR: GRAEME JOB 
-- CREATED: 12-OCT-2008 
-- BECAUSE: SINGLE SQL COMMAND &amp;lt; 50 LINES. JUST BECAUSE. 
WITH 
      XGEN(X, IX) AS (              -- X DIM GENERATOR 
            SELECT CAST(-2.2 AS FLOAT) AS X, 0 AS IX UNION ALL 
            SELECT CAST(X + 0.031 AS FLOAT) AS X, IX + 1 AS IX 
            FROM XGEN 
            WHERE IX &amp;lt; 100 
      ), 
      YGEN(Y, IY) AS (              -- Y DIM GENERATOR 
            SELECT CAST(-1.5 AS FLOAT) AS Y, 0 AS IY UNION ALL 
            SELECT CAST(Y + 0.031 AS FLOAT) AS Y, IY + 1 AS IY 
            FROM YGEN 
            WHERE IY &amp;lt; 100 
      ), 
      Z(IX, IY, CX, CY, X, Y, I) AS (           -- Z POINT ITERATOR 
            SELECT IX, IY, X, Y, X, Y, 0 
            FROM XGEN, YGEN   
            UNION ALL 
            SELECT IX, IY, CX, CY, X * X - Y * Y + CX AS X, Y * X * 2 + CY, I + 1 
            FROM Z 
            WHERE X * X + Y * Y &amp;lt; 16 
            AND I &amp;lt; 100 
      ) 
SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( 
      REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( 
      REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( 
      (X0+X1+X2+X3+X4+X5+X6+X7+X8+X9+X10+X11+X12+X13+X14+X15+X16+X17+X18+X19+ 
      X20+X21+X22+X23+X24+X25+X26+X27+X28+X29+X30+X31+X32+X33+X34+X35+X36+X37+X38+X39+ 
      X40+X41+X42+X43+X44+X45+X46+X47+X48+X49+X50+X51+X52+X53+X54+X55+X56+X57+X58+X59+ 
      X60+X61+X62+X63+X64+X65+X66+X67+X68+X69+X70+X71+X72+X73+X74+X75+X76+X77+X78+X79+ 
      X80+X81+X82+X83+X84+X85+X86+X87+X88+X89+X90+X91+X92+X93+X94+X95+X96+X97+X98+X99), 
      'A',' '),   'B','.'),   'C',','),   'D',','),   'E',','),   'F','-'),   'G','-'), 
      'H','-'),   'I','-'),   'J','-'),   'K','+'),   'L','+'),   'M','+'),   'N','+'), 
      'O','%'),   'P','%'),   'Q','%'),   'R','%'),   'S','@'),   'T','@'),   'U','@'), 
      'V','@'),   'W','#'),   'X','#'),   'Y','#'),   'Z',' ') 
FROM ( 
      SELECT 'X' + CAST(IX AS VARCHAR) AS IX, 
      IY,   SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ', ISNULL(NULLIF(I, 0), 1), 1) AS I 
      FROM Z) ZT 
PIVOT ( 
      MAX(I) FOR IX IN ( 
      X0,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16,X17,X18,X19, 
      X20,X21,X22,X23,X24,X25,X26,X27,X28,X29,X30,X31,X32,X33,X34,X35,X36,X37,X38,X39, 
      X40,X41,X42,X43,X44,X45,X46,X47,X48,X49,X50,X51,X52,X53,X54,X55,X56,X57,X58,X59, 
      X60,X61,X62,X63,X64,X65,X66,X67,X68,X69,X70,X71,X72,X73,X74,X75,X76,X77,X78,X79, 
      X80,X81,X82,X83,X84,X85,X86,X87,X88,X89,X90,X91,X92,X93,X94,X95,X96,X97,X98,X99) 
) AS PZT&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;div class="   "&gt;It Produces a Mandelbrot set. I remember doing it in java and thought it was tough. C# was much easier, but this just makes my head hurt... &lt;/div&gt;

&lt;div class="   "&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;
  &lt;div&gt;[EDIT]: Be sure to set the window output to Text, otherwise it doesn't work... &lt;/div&gt;
&lt;/div&gt;</description><link>http://www.syfuhs.net/article/23.aspx?rss</link><pubDate>Thu, 20 Nov 2008 15:46:26 GMT</pubDate></item><item><title>Instant Initialization for SQL Server</title><description>&lt;DIV&gt;&lt;STRONG&gt;So what is it?&lt;/STRONG&gt;&lt;/DIV&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;It's cool.&amp;nbsp; Err...More specifically it's a part of Windows that deals with writing files to disk.&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-STYLE: italic"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;I won't go into the file system behaviour, but when dealing with SQL Server it comes into play when the database grows, or a database is created/has space allocated.&amp;nbsp; When you allocate space for a database, the file(s) are zeroed out.&amp;nbsp; That means all the allocated space has 0's written to it.&amp;nbsp; While it works for small database files, larger files tend to take much longer to allocate.&amp;nbsp; A question&amp;nbsp;then comes up as: Well why don't you zero out the file as you need it, instead of doing it at the beginning?&amp;nbsp;&amp;nbsp; Instant Intialization now&amp;nbsp;comes into play.&amp;nbsp; It allows for data to be zeroed out on the fly.&amp;nbsp; That 10GB space you just allocated for database growth doesn't have to be scrubbed immediately.&amp;nbsp; It can be dealt with when it's actually needed.&amp;nbsp; Pretty cool, indeed.&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: 700"&gt;So how do I use it?&lt;/SPAN&gt;&lt;BR&gt;It's actually pretty straightforward. You give your SQL Server service account or the local group SQLServerMSSQLUser$instancename the SE_MANAGE_VOLUME_NAME privilege. The account or local group has to be allowed the "Perform Volume Maintenance Task" local security right. The local admin account has this priveledge in the first place, so if you are using that account as the service account you don't need to do anything. HOWEVER(!) Don't use the fricken admin account as your SQL Server Service Account. Bad things happen!&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt; With that being said, onto the next point.&lt;BR&gt;&lt;BR&gt;If you made the changes while the Service is running, you have to restart the service. It's an on startup check that is done. Also, it's only available on SQL Server 2005+. That's actually all there is to it.&lt;/SPAN&gt;</description><link>http://www.syfuhs.net/article/22.aspx?rss</link><pubDate>Thu, 20 Nov 2008 15:02:38 GMT</pubDate></item><item><title>On-Disk Data Structures in SQL Server</title><description>&lt;DIV depth="0"&gt;Just some links to read.&amp;nbsp; Carefully.&amp;nbsp; There's a &lt;SPAN style="FONT-STYLE: italic"&gt;lot&lt;/SPAN&gt; of information.&amp;nbsp; These posts were made by Paul S. Randal on &lt;A href="http://www.sqlskills.com"&gt;www.sqlskills.com&lt;/A&gt;.&amp;nbsp; I'll do a more thorough job of weeding out information when I'm not strapped for time.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;
&lt;UL depth="3"&gt;
&lt;LI&gt;&lt;A href="http://www.sqlskills.com/blogs/paul/2007/09/30/InsideTheStorageEngineAnatomyOfARecord.aspx" rel=bookmark&gt;&lt;FONT color=#696969&gt;Inside the Storage Engine: Anatomy of a record&lt;/FONT&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.sqlskills.com/blogs/paul/2007/10/03/InsideTheStorageEngineAnatomyOfAPage.aspx" rel=bookmark&gt;&lt;FONT color=#696969&gt;Inside the Storage Engine: Anatomy of a page&lt;/FONT&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.sqlskills.com/blogs/paul/2007/10/03/InsideTheStorageEngineAnatomyOfAnExtent.aspx" rel=bookmark&gt;&lt;FONT color=#696969&gt;Inside the Storage Engine: Anatomy of an extent&lt;/FONT&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.sqlskills.com/blogs/paul/2007/10/04/InsideTheStorageEngineIAMPagesIAMChainsAndAllocationUnits.aspx" rel=bookmark&gt;&lt;FONT color=#696969&gt;Inside the Storage Engine: IAM pages, IAM chains, and allocation units&lt;/FONT&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.sqlskills.com/blogs/paul/2008/03/14/InsideTheStorageEngineGAMSGAMPFSAndOtherAllocationMaps.aspx" rel=bookmark&gt;&lt;FONT color=#696969&gt;Inside The Storage Engine: GAM, SGAM, PFS and other allocation maps&lt;/FONT&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.sqlskills.com/blogs/paul/2008/07/11/SearchEngineQA20BootPagesAndBootPageCorruption.aspx" rel=bookmark&gt;&lt;FONT color=#696969&gt;Search Engine Q&amp;amp;A #20: Boot pages, and boot page corruption&lt;/FONT&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.sqlskills.com/blogs/paul/2008/07/25/SearchEngineQA21FileHeaderPagesAndFileHeaderCorruption.aspx" rel=bookmark&gt;&lt;FONT color=#696969&gt;Search Engine Q&amp;amp;A #21: File header pages, and file header corruption&lt;/FONT&gt;&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&amp;nbsp;&lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/21.aspx?rss</link><category>Microsoft</category><category>MSDN</category><category>SQL</category><category>Technet</category><pubDate>Mon, 17 Nov 2008 15:53:35 GMT</pubDate></item><item><title>Toronto and Area User Groups of Interest</title><description>&lt;DIV depth="0"&gt;Since moving to Toronto I have been looking for user groups that I think I could benefit from.&amp;nbsp; So far I have found a couple of interest:&lt;/DIV&gt;
&lt;DIV class=" " depth="9"&gt;&amp;nbsp; 
&lt;TABLE class=" " cellSpacing=0 cellPadding=0 width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;
&lt;TABLE cellSpacing=0 cellPadding=0 width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD depth="3"&gt;&lt;SPAN id=dnn_ctr1332_dnnTITLE_lblTitle style="FONT-WEIGHT: 700; FONT-SIZE: 10px"&gt;
&lt;DIV&gt;TSQL.CA - Toronto SQL Server User Group - &lt;A href="http://www.tsql.ca/Default.aspx?base"&gt;http://www.tsql.ca/Default.aspx?base&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;Toronto .NET User Group - &lt;A href="http://www.torontoug.net/"&gt;http://www.torontoug.net/&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;ISSA Toronto (Information System Security Association) - &lt;A href="http://www.issa-toronto.org/"&gt;http://www.issa-toronto.org/&lt;/A&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="1"&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; FONT-STYLE: normal; FONT-FAMILY: Tahoma"&gt;I'm still looking, but these look promising.&lt;/SPAN&gt;&lt;NULL style="FONT-WEIGHT: 400; FONT-SIZE: 12px; FONT-STYLE: normal; FONT-FAMILY: Tahoma"&gt;&amp;nbsp;&lt;/NULL&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/19.aspx?rss</link><category>.NET</category><category>Business</category><category>Geek Stuff</category><category>Microsoft</category><category>MSDN</category><category>Presentations</category><category>SQL</category><category>Technet</category><pubDate>Mon, 17 Nov 2008 15:07:59 GMT</pubDate></item><item><title>DevTeach and SQLTeach...</title><description>&lt;DIV&gt;
&lt;P&gt;DevTeach Montreal and SQLTeach Montreal are less than a month away but it's not too late to register. These are great conferences with sessions covering .NET FX, Future, SQL Server, VSTS/Team System, Silverlight, Agile Development, Software Architecture, ASP.NET. Aside from the great content, build up your professional network by rubbing shoulders with the speakers in an intimate conference. The list of speakers is particularly impressive this year. From MS you'll get to see Elisa Flasko and Carl Perry from the Data Programmability Team, Beth Massi and Yair Alan Griver. Of course .NET Rockers Carl Franklin &amp;amp; Richard Campbell will be there with fellow MS Regional Directors Tim Huckaby, Joel Semeniuk, Stephen Forte, Jim Duffy, Guy Barrette and Barry Gervin. &lt;/P&gt;
&lt;P&gt;But wait, there's more... &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Every attendee will get Visual Studio 2008 Pro, Expression Web 2 and Tech-Ed Developer DVD set in their bag. That represents over &lt;FONT color=#ff0000&gt;$1,000&lt;/FONT&gt; worth of software! &lt;/LI&gt;
&lt;LI&gt;The TechDays/DevTeach rebate coupon will get you a $350 discount if you use it for the December Montreal event. That's &lt;FONT color=#ff0000&gt;$250&lt;/FONT&gt; more than its original value! &lt;/LI&gt;
&lt;LI&gt;The user group discount has been increased from $50 to $100 for the December Montreal event. Just use rebate code &lt;B&gt;&lt;FONT color=#ff0000&gt;OT00NETUGC&lt;/FONT&gt;&lt;/B&gt;&lt;/LI&gt;&lt;/OL&gt;Register here: &lt;A href="http://www.sqlteach.com/Register.aspx"&gt;http://www.sqlteach.com/Register.aspx&lt;/A&gt; &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Now to wait for them to come to Toronto!&amp;nbsp;&lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/18.aspx?rss</link><pubDate>Sun, 16 Nov 2008 17:45:56 GMT</pubDate></item><item><title>Floating down the FILESTREAM...again</title><description>&lt;div&gt;In my previous post I talked about the basic idea of what FILESTREAM is.&amp;#160; The sales pitch if you will.&amp;#160; In this post I thought I would talk about how to actually implement FILESTREAM&lt;span style="font-style: italic"&gt;?&lt;/span&gt;.&amp;#160; It's actually &lt;span style="font-style: italic"&gt;really &lt;/span&gt;easy.&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;&lt;/div&gt;  &lt;div&gt;FILESTREAM's live in a filegroup.&amp;#160; Semantically, anyway.&amp;#160; You will define what folder the data sits in.&lt;/div&gt;  &lt;div&gt;&lt;/div&gt;  &lt;div&gt;   &lt;blockquote&gt;     &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;DATABASE&lt;/span&gt; Production &lt;span class="kwrd"&gt;ADD&lt;/span&gt;
FILEGROUP FileStreamGroup1 &lt;span class="kwrd"&gt;CONTAINS&lt;/span&gt; FILESTREAM;
GO&lt;/pre&gt;
    &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;
&lt;/div&gt;

&lt;div&gt;&lt;/div&gt;

&lt;div&gt;Simple enough.&amp;#160; Next you add a file to the filegroup.&lt;/div&gt;

&lt;div&gt;&lt;/div&gt;

&lt;div&gt;
  &lt;blockquote&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;DATABASE&lt;/span&gt; Production &lt;span class="kwrd"&gt;ADD&lt;/span&gt; &lt;span class="kwrd"&gt;FILE&lt;/span&gt; (
       NAME = FSGroup1File,
       FILENAME = &lt;span class="str"&gt;'F:\Production\FSDATA'&lt;/span&gt;)
&lt;span class="kwrd"&gt;TO&lt;/span&gt; FILEGROUP FileStreamGroup1;
GO&lt;/pre&gt;
    &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;
&lt;/div&gt;

&lt;div&gt;&lt;/div&gt;

&lt;div&gt;Again, pretty simple.&amp;#160; You'll notice the F:\Production\FSDATA.&amp;#160; That’s where the files are stored.&amp;#160; Now, lets create a table that holds the FILESTREAM.&lt;/div&gt;

&lt;div&gt;&lt;/div&gt;

&lt;div&gt;
  &lt;blockquote&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; DocumentStore (
       DocumentID &lt;span class="kwrd"&gt;INT&lt;/span&gt; &lt;span class="kwrd"&gt;IDENTITY&lt;/span&gt; &lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt; &lt;span class="kwrd"&gt;KEY&lt;/span&gt;,
       Document VARBINARY (&lt;span class="kwrd"&gt;MAX&lt;/span&gt;) FILESTREAM &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
       DocGUID UNIQUEIDENTIFIER &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt; &lt;span class="kwrd"&gt;ROWGUIDCOL&lt;/span&gt;
              &lt;span class="kwrd"&gt;UNIQUE&lt;/span&gt; &lt;span class="kwrd"&gt;DEFAULT&lt;/span&gt; NEWID ())
FILESTREAM_ON FileStreamGroup1;
GO&lt;/pre&gt;
    &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;
&lt;/div&gt;

&lt;div&gt;And that's it.&amp;#160; To insert data into the table, do it like you would any VARBINARY data. &lt;/div&gt;</description><link>http://www.syfuhs.net/article/17.aspx?rss</link><pubDate>Sun, 16 Nov 2008 17:28:13 GMT</pubDate></item><item><title>Floating down the FILESTREAM...</title><description>&lt;DIV depth="0"&gt;The old CCR lyrics popped into my head "Rollin' down the river..." and then of course I realized a river isn't a stream, nor is it any way related to data streams, and I lost my concentration for 20 minutes-ish.&amp;nbsp; What does this have to do with FILESTREAMS?&amp;nbsp; Nothing really.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;Let's talk a little about Filestreams in SQL Server 2008.&amp;nbsp; So, what is FILESTREAM?&amp;nbsp; According to Microsoft, FILESTREAM is a technology "which allows storage of and efficient access to BLOB data using a combination of SQL Server 2008 and the NTFS file system".&amp;nbsp; Thats all fine and dandy, but what does it really mean?&amp;nbsp; FILESTREAM, very eloquently put, stores large BLOBs of data on the file system.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;In previous versions of SQL Server, you didn't have all that much choice when it came to working with large BLOB data.&amp;nbsp; Your options were three-fold.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 25px"&gt;1. Store it in the database.&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 25px"&gt;2. Store it on the file system.&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 25px" depth="0"&gt;3.&amp;nbsp;Store it in a BLOB&amp;nbsp;store.&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 25px" depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;Storing the data in the database was tricky.&amp;nbsp; If the data was small in size, it worked out fairly well.&amp;nbsp; But in instances where you had to store large pieces of data, such as videos, or audio files, keeping the data within the database was a major blow for performance.&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;So what is the next best option?&amp;nbsp; Store the data on the file system, and leave a pointer in the database.&amp;nbsp; You didn't have&amp;nbsp;performance issues, and data was streamed directly from the file system.&amp;nbsp; However, you did have problems with data consistency.&amp;nbsp; You didn't benefit from the transactional properties of SQL Server.&amp;nbsp; Backup's were a pain, and managing the streaming was tricky from a programmatic perspective.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;Next up, and&amp;nbsp;the final option was a BLOB store.&amp;nbsp; Basically, it works much like the filesystem approach, except it was&amp;nbsp;more&amp;nbsp;manageable, and had transactional characteristics due to a tie in with the database.&amp;nbsp; An example is the EMC Centera.&amp;nbsp; Drawback: Fricken EXPENSIVE.&amp;nbsp; Worked great though...&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;Now onto SQL Server 2008.&amp;nbsp; FILESTREAM works very much like option number 2, has transactional benefits like option number 1, and is cheaper than option number 3.&amp;nbsp; How does it do it?&amp;nbsp; It's actually pretty simple.&amp;nbsp; A column of VARBINARY(MAX) is created in a table, with an AS FILESTREAM attribute.&amp;nbsp; Once data is stored within the column, a piece of metadata tells SQL Server to write the file to disk, and stick a pointer in the column.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV depth="0"&gt;So far that takes care of&amp;nbsp;replacing option number 2.&amp;nbsp; So how is transactional consistency dealt with?&amp;nbsp; Easy.&amp;nbsp;&amp;nbsp;NTFS as a file system is transactional by nature, so FILESTREAM takes full advantage.&amp;nbsp; Backing up is dealt with the same way as all databases are, and is done transparently.&amp;nbsp; That takes care of option number 1.&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV depth="0"&gt;Now comes the issue of price.&amp;nbsp; Well, it turns out FILESTREAM is available for free.&amp;nbsp; It&amp;nbsp;is built in, starting with SQL Express.&amp;nbsp; That's all I have to say about that, which&amp;nbsp;takes care of option number&amp;nbsp;3.&lt;/DIV&gt;
&lt;DIV depth="0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;That in a nut shell is SQL Server FILESTREAM.&amp;nbsp;&amp;nbsp;My next post will be on how to actually implement FILESTREAM on a 2008 database.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;&amp;nbsp;&lt;/DIV&gt;</description><link>http://www.syfuhs.net/article/16.aspx?rss</link><category>Microsoft</category><category>SQL</category><pubDate>Sun, 16 Nov 2008 17:06:04 GMT</pubDate></item><item><title>Fun with Full Text Search</title><description>&lt;div&gt;Okay, so I have been playing around with Full Text Search in SQL Server 2005.&amp;#160; I've worked with it from an administrator's point of view, which is certainly very interesting, but I haven't really gotten to play around with it from a development perspective.&amp;#160; Basically, I stuck an index on the body column for this blog, and did a simple FTS query.&lt;/div&gt;  &lt;br /&gt;  &lt;div&gt;&lt;/div&gt;  &lt;br /&gt;  &lt;div&gt;Now, to do a query with the functionality of FTS you actually end up using some new keywords:&lt;/div&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;...
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; &lt;span class="kwrd"&gt;CONTAINS&lt;/span&gt;
         (body, @q)
...

&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; &lt;span class="kwrd"&gt;FREETEXT&lt;/span&gt;
    (body, @q)

...&lt;/pre&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;
At first I worked with CONTAINS, which takes the same parameters for the most part. While it worked, it would struggle with multiple words in a query. Second I tried FREETEXT, which is more friendly to multiple search keywords. 

&lt;br /&gt;

&lt;br /&gt;This takes care of a simple search on the body of the blog article, but what about if I'm searching for something in a title? There are lots of ways to do it, some much better than others. Here is the simplest query I could come up with. It is neither designed to be fast, nor as accurate is possible. It is designed for simplicity. It could very easily be reworked, and if anyone has some ideas as to what could work, let me know! I'd like to see what other people would do. 

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[DoSearch]
            @q nvarchar(4000)
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;   
&lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;;
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;     [PostID],
     [Title],
     [Body] &lt;span class="kwrd"&gt;AS&lt;/span&gt; PostSnippet,
     [EntryDate] &lt;span class="kwrd"&gt;AS&lt;/span&gt; PostDate 
&lt;span class="kwrd"&gt;FROM&lt;/span&gt;     [dbo].[sb_posts] 
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; &lt;span class="kwrd"&gt;FREETEXT&lt;/span&gt;
    (body, @q)
&lt;span class="kwrd"&gt;OR&lt;/span&gt;       [Title] &lt;span class="kwrd"&gt;LIKE&lt;/span&gt; &lt;span class="str"&gt;'%'&lt;/span&gt; + @q + &lt;span class="str"&gt;'%'&lt;/span&gt;
;

&lt;span class="kwrd"&gt;END&lt;/span&gt;&lt;/pre&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;
Thoughts? Comments? Questions? Give'r!</description><link>http://www.syfuhs.net/article/14.aspx?rss</link><pubDate>Thu, 13 Nov 2008 12:53:47 GMT</pubDate></item><item><title>Presenting at Techdays!</title><description>&lt;STRONG&gt;What is Techdays?&lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;&lt;IMG alt=" Microsoft Techdays" src="http://www.energizedtech.com/WindowsLiveWriter/ThetimeisnowTECHDAYS_CAarehere_A2DB/n25130657763_790895_8010_2.jpg"&gt;&lt;BR&gt;&lt;BR&gt;The Canadian IT Pro Team would love to call it a Tech-Ed of the north, except on tour. Check out the site: &lt;A href="http://www.techdays.ca/"&gt;www.techdays.ca&lt;/A&gt; to get the info, but the dates are: &lt;BR&gt;&lt;BR&gt;
&lt;TABLE style="TEXT-ALIGN: justify"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;Date&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;City&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;Venue&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;October 29/30&lt;/TD&gt;
&lt;TD&gt;Toronto&lt;/TD&gt;
&lt;TD&gt;Toronto Congress Centre&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;November 6/7&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;Montreal&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;The Palais des Congrès&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;November 27&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;Ottawa&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;Mariott Hotel&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;December 4&lt;/TD&gt;
&lt;TD&gt;Winnipeg&lt;/TD&gt;
&lt;TD&gt;Delta Hotel&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;December 10/11&lt;/TD&gt;
&lt;TD&gt;Calgary&lt;/TD&gt;
&lt;TD&gt;Calgary Stampede Roundup Centre&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;December 17&lt;/TD&gt;
&lt;TD&gt;Halifax&lt;/TD&gt;
&lt;TD&gt;Halifax World Trade Centre&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;January 21/22&lt;/TD&gt;
&lt;TD&gt;Vancouver&lt;/TD&gt;
&lt;TD&gt;Vancouver Convention Centre&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;I will be doing a presentation in Montreal and Ottawa entitled &lt;I&gt;Microsoft SQL Server: Essential Database Maintenance for New and Seasoned DBAs&lt;/I&gt;. The synopsis is:
&lt;BLOCKQUOTE style="MARGIN: 10px"&gt;
&lt;DIV style="MARGIN: 10px"&gt;Every DBA knows that managing a database using SQL Server requires dealing with a key set of components of SQL Server in an optimal in order to make their lives easier. But what are the elements of SQL Server that you need to really focus on to get the best bang for the DBA buck, and what best practices should be followed to ensure an optimally-running an instance in SQL Server? In this session we will walk through the Top 10 List of DBA techniques and best practices to ensure a smooth running database and instance. You’ll learn: how to optimize data files and transaction logs; why TempDB is special and how to treat it properly; indexing strategies dealing with corruption; and much, much more.&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;I'm also doing a session entitled &lt;I&gt;Beyond Relational SQL Server 2008: Managing Unstructured and Semi-Structured Data&lt;/I&gt;:
&lt;BLOCKQUOTE style="MARGIN: 10px"&gt;
&lt;DIV style="MARGIN: 10px"&gt;The amount of data that does not fit into the tabular format of relational tables is increasing tremendously, be it images, sounds, text documents, XML documents, or semi-structured data. Integrating this data with the robust, efficient processing capabilities of SQL Server and providing integrated querying and management of that data together with the standard relational data becomes increasingly more important. This presentation will present new and existing functionality on how SQL Server 2008 supports these non-relational kinds of data. The presentation will provide insights into FILESTREAM, Remote Blob storage, new XML functionality, integrated Full-Text Search, sparse columns, filtered indexes and the new hierarchyID type.&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;Should be fun. See you there!</description><link>http://www.syfuhs.net/article/2.aspx?rss</link><category>.NET</category><category>ASP.NET</category><category>Business</category><category>Microsoft</category><category>MSDN</category><category>Presentations</category><category>SQL</category><category>Techdays</category><category>Technet</category><pubDate>Mon, 03 Nov 2008 00:44:04 GMT</pubDate></item><item><title>71-432 Revisited...</title><description>On Monday June 30th I wrote the 70-432 beta exam for Microsoft SQL Server 2008, Implementation and Maintenance. See, the thing with beta's is that you don't find out about how well you did until about 8 weeks after the beta period is finished. I suspect I will be finding out mid-August as the final release of the exam will be towards the beginning of September-ish. So without breaking the NDA I signed here's what I've learned: &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;70-432&lt;/STRONG&gt;&lt;BR&gt;For the love of god, make sure you know the 70-431! Everything about managing SQL Server is the same, except for product feature differences...the steps are extremely similar. &lt;BR&gt;&lt;BR&gt;Make sure you know about the new main features of 2008: Performance Studio, Resource Governor, Policy Management etc... &lt;BR&gt;&lt;BR&gt;High Availability has changed some what. Mirroring is fully functioning. It's ready out of the box. Whereas with 2005 you had to enable an internal feature, pre-SP1. &lt;BR&gt;&lt;BR&gt;You need to know about the different types of backup procedures: Full, Bulk-Logged, Simple. &lt;BR&gt;&lt;BR&gt;Finally, do NOT stay up all night studying and then drink the entire pot of coffee before you take the exam...your bladder will not forgive you, nor will the examiners! &lt;BR&gt;&lt;BR&gt;With that, good luck and have fun.</description><link>http://www.syfuhs.net/article/6.aspx?rss</link><pubDate>Wed, 02 Jul 2008 14:58:46 GMT</pubDate></item><item><title>TS: Microsoft SQL Server 2008, Implementation and Maintenance (70-432)</title><description>After passing the certification for 2005, I've been given the opportunity to write the 70-432 beta exam. It's the same basic exam as the 2005 version, except, naturally, for 2008. I would hazard a guess that it's going to cover much of the same material, and cover all the new stuff for 2008. Luckily from a management perspective there aren't too many life-altering differences. For the complete rundown of whats going to be covered on the actual RTM exam (couldn't think of a better way to differentiate between the two :)) you can find information here: &lt;A href="http://www.microsoft.com/learning/en/us/exams/70-432.mspx"&gt;http://www.microsoft.com/learning/en/us/exams/70-432.mspx&lt;/A&gt;. &lt;BR&gt;&lt;BR&gt;However, seeing as most people are lazy (Myself included) I'll give a quick rundown of what to expect.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;***NOTE*** This information may be outdated by the time the exam is released. It falls under the same category as beta API's.&lt;/STRONG&gt; &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Installing and Configuring SQL Server 2008 (10 %)&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Installation: File Locations, default paths, service accounts&lt;/LI&gt;
&lt;LI&gt;Configuration of Instances: mostly sp_configure&lt;/LI&gt;
&lt;LI&gt;Configuration of services: Configuration Manager, SQL Browser&lt;/LI&gt;
&lt;LI&gt;Configuration of Components: SSIS, SSAS, SSRS, Replication&lt;/LI&gt;
&lt;LI&gt;Setting up and using SQL Mail&lt;/LI&gt;
&lt;LI&gt;Enabling/Disabling and creating indexes&lt;/LI&gt;&lt;/UL&gt;&lt;STRONG&gt;Maintaining SQL Server Instances (13 %)&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Managing SQL Agent jobs&lt;/LI&gt;
&lt;LI&gt;Managing SQL Agent alerts&lt;/LI&gt;
&lt;LI&gt;Manage SQL Agent operators&lt;/LI&gt;
&lt;LI&gt;Implementation of the Declarative Management Framework&lt;/LI&gt;
&lt;LI&gt;Backup and restoration of SQL Server environment (OS and database levels)&lt;/LI&gt;&lt;/UL&gt;&lt;STRONG&gt;Managing SQL Server Security (15 %)&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Logins and Server Roles&lt;/LI&gt;
&lt;LI&gt;Users and Database Roles&lt;/LI&gt;
&lt;LI&gt;Instance permissions&lt;/LI&gt;
&lt;LI&gt;Schema and object permissions&lt;/LI&gt;
&lt;LI&gt;Auditing of SQL Server instances&lt;/LI&gt;
&lt;LI&gt;Transparent data encryption&lt;/LI&gt;
&lt;LI&gt;Surface area configurator&lt;/LI&gt;&lt;/UL&gt;&lt;STRONG&gt;Maintaining a SQL Server database (16 %)&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Backup databases&lt;/LI&gt;
&lt;LI&gt;Restore databases&lt;/LI&gt;
&lt;LI&gt;Manage/configure databases: files, filegroups, recovery models, etc&lt;/LI&gt;
&lt;LI&gt;Database snapshots&lt;/LI&gt;
&lt;LI&gt;Maintaining database integrity: DBCC, CHECKDB, suspect pages&lt;/LI&gt;
&lt;LI&gt;Maintence plans&lt;/LI&gt;&lt;/UL&gt;&lt;STRONG&gt;Performing data management tasks (14 %)&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Importing/Exporting data: BCP, BULK INSERT, COPY ROWSET, etc&lt;/LI&gt;
&lt;LI&gt;Managing data partitions&lt;/LI&gt;
&lt;LI&gt;Data compression&lt;/LI&gt;
&lt;LI&gt;Maintain Indexes&lt;/LI&gt;
&lt;LI&gt;Manage collations&lt;/LI&gt;&lt;/UL&gt;&lt;STRONG&gt;Monitoring and Troubleshooting SQL Server (13 %)&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Identify SQL Server service problems&lt;/LI&gt;
&lt;LI&gt;Identify concurrency problems: locking, blocking, etc&lt;/LI&gt;
&lt;LI&gt;Identify SQL Agent job execution problems&lt;/LI&gt;
&lt;LI&gt;Locate error information&lt;/LI&gt;&lt;/UL&gt;&lt;STRONG&gt;Optimizing SQL Performance (10 %)&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Implement resource governor&lt;/LI&gt;
&lt;LI&gt;Database engine tuning advisor&lt;/LI&gt;
&lt;LI&gt;Collect trace data by using SQL Server Profiler&lt;/LI&gt;
&lt;LI&gt;Collect performance through Dynamic management views&lt;/LI&gt;
&lt;LI&gt;Collect performace data through System Monitor&lt;/LI&gt;
&lt;LI&gt;Use Performance Studio&lt;/LI&gt;&lt;/UL&gt;&lt;STRONG&gt;Implementing High Availability (9 %)&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Implement database mirroring&lt;/LI&gt;
&lt;LI&gt;Implement clustered instances&lt;/LI&gt;
&lt;LI&gt;Implement log shipping&lt;/LI&gt;
&lt;LI&gt;Implement replication&lt;/LI&gt;&lt;/UL&gt;I have set up my exam for June 30th. Time to study my butt off. From what everyone else has told me, who have taken beta exams in the past, they tend to be much harder than the final exams. The idea is that they chop off the easiest questions and the hardest questions from the beta exam and from that they do some mathematical reasoning to pick and choose from whats left over. In the end they have a fully working exam. Unfortunately, Microsoft forces us to sign Non-Disclosure Agreements when we take the exams so no details of what I actually found on the exam will be posted. Let's hope it's not &lt;I&gt;that&lt;/I&gt; scary. ;)</description><link>http://www.syfuhs.net/article/8.aspx?rss</link><pubDate>Sun, 08 Jun 2008 16:01:59 GMT</pubDate></item><item><title>Thursday's Slide Deck and Demo</title><description>Here is my slide deck and demo from Thursday May 29th. I'm still waiting from the rest of the team for their resource links, but this should be able to tide you over for a few days anyway. :) &lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;a href="http://www.syfuhs.net/media/blog/spatialDemo.zip"&gt;&lt;img alt="SQL Server 2008 Spatial Data" src="http://www.syfuhs.net/media/blog/sql2008spatialPres.png" border="0" /&gt;&lt;/center&gt;&lt;/a&gt;</description><link>http://www.syfuhs.net/article/9.aspx?rss</link><pubDate>Fri, 30 May 2008 14:19:34 GMT</pubDate></item><item><title>The Link List for Thursday's Presentation </title><description>Here is a list of links that I found useful when putting together this presentation on SQL Server 2008 Spatial Data.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Mike Ormand's Blog&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://mikeo.co.uk/demo/sqlspatial/default.aspx"&gt;http://mikeo.co.uk/demo/sqlspatial/default.aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;

&lt;strong&gt;The Virtual Earth Online SDK&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://dev.live.com/virtualearth/sdk/"&gt;http://dev.live.com/virtualearth/sdk/&lt;/a&gt;
&lt;br&gt;&lt;br&gt;

&lt;strong&gt;Johannes Kebeck's Virtual Earth Blog&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://johanneskebeck.spaces.live.com/"&gt;http://johanneskebeck.spaces.live.com/&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Spatial Data Viewer&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://codeplex.com/SpatialViewer"&gt;http://codeplex.com/SpatialViewer&lt;/a&gt;
&lt;br&gt;&lt;br&gt;

&lt;strong&gt;Klaus Aschenbrenner's Blog&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://www.csharp.at/blog/"&gt;http://www.csharp.at/blog/&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
More information is on the way.  After the presentation I'll upload the actual demo and slide deck.</description><link>http://www.syfuhs.net/article/10.aspx?rss</link><pubDate>Thu, 29 May 2008 03:26:55 GMT</pubDate></item><item><title>Heroes Happen Here - SQL Server 2008 &amp; Windows Server 2008</title><description>&lt;strong&gt;May 29, 2008: OttawaSQL.net and OWSUG Presents
Heroes Happen Here - SQL Server 2008 &amp; Windows Server 2008
&lt;br&gt;&lt;br&gt;

Free Evening Event @ Microsoft Ottawa
&lt;br&gt;&lt;br&gt;
Thursday, May 29th  5:30 - 8:30 PM
&lt;/strong&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;RSVP:&lt;/strong&gt; &lt;a href="http://www.clicktoattend.com/?id=128806" target="_blank"&gt;Event Registration&lt;/a&gt;

&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Location:&lt;/strong&gt; Microsoft Ottawa, World Exchange Plaza, 100 Queen Street, Suite 500, Ottawa
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Refreshments:&lt;/strong&gt; Pizza and Pop
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Session 1:  SQL Server 2008 &amp; Windows Server 2008 High Availability, David E. Myers and Todd Lamothe&lt;/strong&gt;
&lt;br&gt;
We will explore the range of SQL Server 2008 high availability solutions and see how enhancements to clustering support in Windows Server 2008, such as geographically dispersed clusters expands on the HA possibilities.

&lt;br&gt;&lt;br&gt;
&lt;strong&gt;
Session 2:  SQL Server 2008 Spatial Data &amp; Microsoft Virtual Earth, Lynda Rab and &lt;span style="color: red;"&gt;&lt;i&gt;Steve Syfuhs&lt;/i&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;br&gt;
Spatial data types and the related functions are new to SQL Server 2008. We will demonstrate the use this new technology and show how it can be combined with Virtual Earth to visualize the spatial data.
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Event Sponsor:&lt;/strong&gt; Ottawa Windows Server User Group, Microsoft Canada
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Event Partners:&lt;/strong&gt; TechNet Canada, MSDN Canada
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;RSVP:&lt;/strong&gt; &lt;a href="http://www.clicktoattend.com/?id=128806" target="_blank"&gt;Event Registration&lt;/a&gt;</description><link>http://www.syfuhs.net/article/11.aspx?rss</link><pubDate>Tue, 20 May 2008 17:33:54 GMT</pubDate></item><item><title>SubSonic .NET Project</title><description>&lt;p&gt;Over the last year or so I've been trying to find different methods of accessing data in databases without having to write out all the usual CRUD (Create, Read, Update, Delete) code. In that time, I've come across a number of different ways to do this. Some being auto generated CRUD statements, others being abstracted DALs (Data Access Layers). The purpose of this post is to tell you about the SubSonic .NET Project. &lt;br&gt;&lt;br&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;br&gt;SubSonic is a Data Abstraction Layer. It takes your database schema and presents you with usable classes and interfaces. To access data you do something like: &lt;/p&gt; &lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Create IEnumerable collection of products from Products table&lt;/span&gt;
ProductCollection coll = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProductCollection().Load();

&lt;span class="rem"&gt;// Get info on each product&lt;/span&gt;
&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (Product p &lt;span class="kwrd"&gt;in&lt;/span&gt; coll)
{
     Console.WriteLine(p.ProductID + &lt;span class="str"&gt;" "&lt;/span&gt; + p.Name + &lt;span class="str"&gt;"$"&lt;/span&gt; + p.Price);
     Console.WriteLine(p.ShortDescription);
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;You can also create new records fairly easily too: &lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Create a new object&lt;/span&gt;
Product p = &lt;span class="kwrd"&gt;new&lt;/span&gt; Product();

&lt;span class="rem"&gt;// Fill it with interesting information&lt;/span&gt;
p.Name = &lt;span class="str"&gt;"My Most Awesomest Product"&lt;/span&gt;;
p.Price = 99.99;
p.ShortDescription = &lt;span class="str"&gt;"This product is the end all, be all.  It rocks."&lt;/span&gt;;

&lt;span class="rem"&gt;// Save it to the table&lt;/span&gt;
p.Save(Profile.Username);&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre&gt;&lt;/pre&gt;Now, SubSonic can do a whole lot more than this. But these parts were the selling point for me. Check it out at &lt;a href="http://subsonicproject.com/"&gt;http://subsonicproject.com/&lt;/a&gt;. The greatest part, is because it's a .NET Class, it can be used with ASP.NET or WinForms.&lt;br&gt;&lt;br&gt;The only downside is that there is a learning curve, and it takes some time to wrap your head around what it does. Good stuff though. Makes your head go dizzy like if you stood up too fast. Check out the source with Reflector too... it's worth a read.</description><link>http://www.syfuhs.net/article/12.aspx?rss</link><pubDate>Tue, 20 May 2008 16:30:46 GMT</pubDate></item><item><title>Database Snapshots</title><description>During the OttawaSQL.NET study group for the exam 70-431: Microsoft SQL Server 2005 Implementation and maintenance, I did a presentation on Database Snapshots. I thought I would post the info.   &lt;br /&gt;  &lt;br /&gt;Database snapshots are point in time representations of a database. They are read only. However, they can be Queried through SELECT statements. To create a snapshot, right-click database and select Script Database To... to get the DB files set up.   &lt;br /&gt;  &lt;br /&gt;Then, modify the NAME and FILENAME attributes on each filegroup, usually just changing the filename to '.ds'   &lt;br /&gt;  &lt;br /&gt;Finally, add 'AS SNAPSHOT OF [DatabaseName]'   &lt;br /&gt;  &lt;br /&gt;*** Fair warning, this will not work in SQL Express ***   &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;USE&lt;/span&gt; [master]
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;DATABASE&lt;/span&gt; [AdventureWorksSnapShot] &lt;span class="kwrd"&gt;ON&lt;/span&gt;  &lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt; 
( 
    NAME = N&lt;span class="str"&gt;'AdventureWorks_Data'&lt;/span&gt;, 
    FILENAME = N&lt;span class="str"&gt;'C:\Program Files\Microsoft SQL Server
                \MSSQL.2\MSSQL\Data\AdventureWorks_Data.ds'&lt;/span&gt; , 
    &lt;span class="kwrd"&gt;SIZE&lt;/span&gt; = 167872KB , 
    MAXSIZE = UNLIMITED, 
    FILEGROWTH = 16384KB 
)
 LOG &lt;span class="kwrd"&gt;ON&lt;/span&gt; 
( 
    NAME = N&lt;span class="str"&gt;'AdventureWorks_Log'&lt;/span&gt;, 
    FILENAME = N&lt;span class="str"&gt;'C:\Program Files\Microsoft SQL Server
                \MSSQL.2\MSSQL\Data\AdventureWorks_Log.ds'&lt;/span&gt; , 
    &lt;span class="kwrd"&gt;SIZE&lt;/span&gt; = 2048KB , 
    MAXSIZE = 2048GB , 
    FILEGROWTH = 16384KB 
)
&lt;span class="kwrd"&gt;AS&lt;/span&gt; SNAPSHOT &lt;span class="kwrd"&gt;OF&lt;/span&gt; [AdventureWorks]
&lt;span class="kwrd"&gt;GO&lt;/span&gt;&lt;/pre&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;
Add some data to the AdventureWorks Database to test this: 

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;USE&lt;/span&gt; [AdventureWorks]
INSERT &lt;span class="kwrd"&gt;INTO&lt;/span&gt; 
    [AdventureWorks].[Sales].[Currency]
    (
        [CurrencyCode]
        ,[Name]
        ,[ModifiedDate])
    &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
    (
        &lt;span class="str"&gt;'SSM'&lt;/span&gt;
        , &lt;span class="str"&gt;'Steves Currency'&lt;/span&gt;
        , GETDATE()
    )&lt;/pre&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;
Query Snapshot to verify data wasn't moved: 

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;USE&lt;/span&gt; [AdventureWorksSnapShot]
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; 
    * 
&lt;span class="kwrd"&gt;FROM&lt;/span&gt; 
    [AdventureWorksSnapShot].[Sales].[Currency] 
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; 
    [Sales].[Currency].[CurrencyCode] = &lt;span class="str"&gt;'SSM'&lt;/span&gt;&lt;/pre&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/blockquote&gt;

&lt;p&gt;It is also possible to recover from a database snapshot. One option is to write a query to grab data from the snapshot and INSERT/UPDATE data in the original database.
  &lt;br /&gt;

  &lt;br /&gt;The other option is to RESTORE the database from a snapshot.

  &lt;br /&gt;

  &lt;br /&gt;The key thing here is any backup made after the snapshot in question will be broken, an</description><link>http://www.syfuhs.net/article/13.aspx?rss</link><pubDate>Tue, 20 May 2008 16:01:42 GMT</pubDate></item></channel></rss>