<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-1557646537353250635</id><updated>2010-03-12T13:28:46.800-06:00</updated><title type='text'>Chicago Technologies</title><subtitle type='html'>Chicago Technologies is an information technology and management consulting firm devoted to helping companies significantly increase the returns on their information technology investments by developing more effective and sustainable solutions. By understanding our clients' unique business and technology objectives, we implement solutions that provide maximum value with minimum risk.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.chitech.net/blog/atom.xml'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-2409977767939978831</id><published>2010-03-12T13:23:00.002-06:00</published><updated>2010-03-12T13:28:46.811-06:00</updated><title type='text'>Exploring Chicago's Pepper and Egg Sandwich</title><content type='html'>During the Lenten season my thoughts often turn from IT to P&amp;E.  P&amp;E, of course, being the infamous Chicago Pepper and Egg sandwich.  While Chicago might be known for its Vienna beef hot dog or its Italian beef sandwich, on Fridays during Lent, a different breed of sandwich appears.  The Pepper and Egg, in its essential raw form consists of a portion of gently scrambled eggs and fried green peppers placed on a French roll.  I don't know if it's just me, but I seem to be having a difficult time finding places that serve the P&amp;E -- especially in the Loop -- where lunchtime dining has suffered in general with a steady influx of corporate chains and the fading away of lunch spots with table service.  &lt;br /&gt;&lt;br /&gt;However, I did manage to find the sandwich at a handful of places, and I've supplied some notes below.&lt;br /&gt;&lt;br /&gt;Keep in mind, I did have to break my golden rule of only patronizing places with table service, but it is Lent, and we're called to make sacrifices.&lt;br /&gt;&lt;br /&gt;Cafe' Bionda's Bionda To Go&lt;br /&gt;400 S. Financial Place&lt;br /&gt;Score: A&lt;br /&gt;A popular and tasty spot mostly frequented by the trading community, Bionda serves the P&amp;E as a special for Lenten Fridays only.  The egg had a great balance -- not too soggy, not too firm.  The peppers were a nice blend of green and red and were grilled but with enough crispness to preserve a bit of the raw pepper taste. The pepper and egg was served atop an extremely fresh Turano roll and with a side of fries.  I'll be back! &lt;br /&gt;&lt;br /&gt;Boni Vino&lt;br /&gt;111 W. Van Buren&lt;br /&gt;Score: B&lt;br /&gt;One of my favorite sit-down lunch spots in the Loop, Boni Vino just feels like home.  Everything there is delicious, and maybe it's my high hopes that influenced my scoring.  The P&amp;E was average at best.  The eggs were a little soggy and the green peppers were barely cooked.  Also, there were so many green peppers, that they just overpowered the sandwich.  However, I love this place -- just not so much for the P&amp;E!&lt;br /&gt;&lt;br /&gt;Luke's Italian Beef&lt;br /&gt;215 W. Jackson&lt;br /&gt;Score: A-&lt;br /&gt;If memory serves me correctly, Luke's serves the P&amp;E every Friday, not just during Lent.  This may go back to the pre-Vatican II days when every Friday was supposed to be meatless.  Anyway, the P&amp;E at Luke's was pretty straight up.  Eggs and peppers both a tad soggy, but otherwise right in the ballpark.  The bread was fresh (important) and I got an order of their excellent fries, a one-pound bag of greasy goodness!  Yum!&lt;br /&gt;&lt;br /&gt;Portillo's&lt;br /&gt;100 W. Ontario&lt;br /&gt;Score: A&lt;br /&gt;A bit outside the Loop and a well-known chain, Portillo's puts out a surprisingly good P&amp;E during Lent.  The egg to pepper ratio is accurate and the consistency is perfect.  Also, you can mix things up a little -- like getting your P&amp;E on a croissant or adding onions and cheese.  Good stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-2409977767939978831?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/2409977767939978831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2010/03/exploring-chicagos-pepper-and-egg.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/2409977767939978831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/2409977767939978831'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2010/03/exploring-chicagos-pepper-and-egg.html' title='Exploring Chicago&apos;s Pepper and Egg Sandwich'/><author><name>Tom Cox</name><uri>http://www.blogger.com/profile/06244429784222986001</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15849271494440034959'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-7592754894136546679</id><published>2010-02-17T21:41:00.001-06:00</published><updated>2010-02-17T21:43:49.931-06:00</updated><title type='text'>Google Apps - Premier vs Standard Editions</title><content type='html'>At Chicago Technologies, our clients often ask us what's the difference between Google Apps Premier Edition and Google Apps Standard Edition.  Here's a quick comparison:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Premier Edition:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;24/7 Phone support and 99.9% up-time guarantee.&lt;/li&gt;&lt;li&gt;25GB storage per user without advertisements.&lt;/li&gt;&lt;li&gt;Increased security and privacy of data.&lt;/li&gt;&lt;li&gt;Unlimited users and groups .&lt;/li&gt;&lt;li&gt;   Blackberry and Microsoft Outlook interoperability.&lt;/li&gt;&lt;li&gt;   Client conversions are automated.&lt;/li&gt;&lt;li&gt;   Virus and spam protection by Postini.&lt;/li&gt;&lt;li&gt;Postini archiving at an additional cost.&lt;/li&gt;&lt;li&gt;   Full administrative and data control.&lt;/li&gt;&lt;/ul&gt;  &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Standard Edition:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No Phone technical support is available. Standard users will have to access the Google Apps forms to resolve any issues. Up-time is not guaranteed with a service level of “best effort”.&lt;/li&gt;&lt;li&gt;7GB storage per user with advertisements.&lt;/li&gt;&lt;li&gt;Limited to 50 users and 10 groups.&lt;/li&gt;&lt;li&gt;Limited Blackberry and Microsoft Outlook interoperability.&lt;/li&gt;&lt;li&gt;Client conversions are manual.&lt;/li&gt;&lt;li&gt;Limited administrative and data control.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-7592754894136546679?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/7592754894136546679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2010/02/google-apps-premier-vs-standard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7592754894136546679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7592754894136546679'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2010/02/google-apps-premier-vs-standard.html' title='Google Apps - Premier vs Standard Editions'/><author><name>Rick Sternquist</name><uri>http://www.blogger.com/profile/01190371752451735652</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05197645499322266522'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-9108486214804122422</id><published>2009-12-17T11:05:00.000-06:00</published><updated>2009-12-17T11:05:06.055-06:00</updated><title type='text'>Invalid or malformed application: check Manifest</title><content type='html'>I started building a brand new Silverlight 3.0 Application today and ran into this error message in my browser the first time I ran my new app:&lt;br /&gt;&lt;br /&gt;Invalid or malformed application: check Manifest&lt;br /&gt;&lt;br /&gt;I did some research and came across this hint:&lt;br /&gt;&lt;br /&gt;In human-readable words, this is what fixed it for me: &lt;br /&gt;1. Open the properties of your project. &lt;br /&gt;2. On the first page, open the drop down list of "Startup object". &lt;br /&gt;3. Select the page your project starts with. In my case, changing the name of the namespace broke the startup object.&lt;br /&gt;&lt;br /&gt;from this blog post:&lt;br /&gt;&lt;a href="http://forums.silverlight.net/forums/t/11452.aspx" target="_blank"&gt;http://forums.silverlight.net/forums/t/11452.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This pushed me in the right direction. I remembered that I had changed my initial namespace in my .cs files, but not in the project properties. I changed the default namespace and then selected the correct startup project, (xxx.app where xxx is my default namespace).&lt;br /&gt;&lt;br /&gt;Problem resolved.&lt;br /&gt;&lt;br /&gt;Lesson learned:&lt;br /&gt;If your startup object is not correct in the project properties window, you will get the dreaded, "Invalid or malformed application: check Manifest" error.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-9108486214804122422?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/9108486214804122422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/12/invalid-or-malformed-application-check.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/9108486214804122422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/9108486214804122422'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/12/invalid-or-malformed-application-check.html' title='Invalid or malformed application: check Manifest'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-4388794839842546330</id><published>2009-12-11T16:48:00.001-06:00</published><updated>2009-12-11T16:51:38.978-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET Web Services  WCF Services'/><title type='text'>ASP.NET Web Services vs. WCF Services</title><content type='html'>The term “web service” is similar to the term “cloud computing” in&lt;br /&gt;that it’s pretty vague, and it can mean different things to different&lt;br /&gt;people. So when I hear someone say we need a “web service that does&lt;br /&gt;x”, I immediately start asking a few clarifying questions:&lt;br /&gt;&lt;br /&gt;Is the individual referring to the traditional “.asmx” web service&lt;br /&gt;or the WCF “.svc” web service?&lt;br /&gt;&lt;br /&gt;Will it implement a SOAP or a REST architecture?&lt;br /&gt;&lt;br /&gt;Is it really a web (http) service or some other type of&lt;br /&gt;communication service, such as a named pipe communication, a tcp&lt;br /&gt;communication, or a MSMQ messaging queue communication?&lt;br /&gt;&lt;br /&gt;The answers to these questions help determine whether a web service, a&lt;br /&gt;WCF service, (or something else), should be utilized.&lt;br /&gt;In the next few paragraphs I’ll differentiate a web service from a WCF&lt;br /&gt;service and point you to a nice link that further summarizes the&lt;br /&gt;differences.&lt;br /&gt;&lt;br /&gt;The key thing to understand about ASP.NET Web Services and WCF&lt;br /&gt;Services is that they are very similar in implementation and concept,&lt;br /&gt;but that there are some key differences to be aware of.&lt;br /&gt;Both technologies define contracts for passing xml data and both&lt;br /&gt;technologies can leverage SOAP and WSDL concepts and work over the&lt;br /&gt;http protocol.&lt;br /&gt;&lt;br /&gt;That’s where many of the similarities end. Windows Communication&lt;br /&gt;Foundation, as its name implies, supports many types of communication&lt;br /&gt;between disparate machines (or between processes on the same machine).&lt;br /&gt;This may seem obvious, but it was especially eye opening to me as I&lt;br /&gt;first used WCF for tcp communication and, later, worked my way&lt;br /&gt;backwards to use it for http web service purposes.&lt;br /&gt;&lt;br /&gt;ASP.NET Web Services were Microsoft's first attempts at building&lt;br /&gt;service oriented concepts into the ASP.NET platform.&lt;br /&gt;The core library for ASP.NET Web Services is the XMLSerializer.&lt;br /&gt;Since there are other formats for exchanging data, such as POX and&lt;br /&gt;JSON, WCF’s DataContractSerializer is expanded to accept these types&lt;br /&gt;of data as well.&lt;br /&gt;&lt;br /&gt;WCF Services came along after ASP.NET Web Services and it looks to me&lt;br /&gt;like Microsoft saw the value in a service oriented architecture, but&lt;br /&gt;saw some flaws in how ASP.NET Web Services were built.&lt;br /&gt;It appears that they wanted to make sweeping improvements to their&lt;br /&gt;service oriented architecture without breaking the existing code base,&lt;br /&gt;so they built upon the concepts of ASP.NET Web Services, but on a new&lt;br /&gt;platform.&lt;br /&gt;&lt;br /&gt;I see this platform as a communication standard launching point for&lt;br /&gt;the next decade, and look forward to the technological innovations&lt;br /&gt;that it will spawn.&lt;br /&gt;&lt;br /&gt;The following blog post by Kalyan Bandarupalli goes into more detail&lt;br /&gt;about the specific differences between ASP.NET Web Services and WCF&lt;br /&gt;Services:&lt;br /&gt;http://www.techbubbles.com/wcf/wcf-vs-aspnet-web-services&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-4388794839842546330?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/4388794839842546330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/12/aspnet-web-services-vs-wcf-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/4388794839842546330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/4388794839842546330'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/12/aspnet-web-services-vs-wcf-services.html' title='ASP.NET Web Services vs. WCF Services'/><author><name>Tom Cox</name><uri>http://www.blogger.com/profile/06244429784222986001</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15849271494440034959'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-1948589352945226269</id><published>2009-12-08T16:23:00.000-06:00</published><updated>2009-12-08T16:23:13.817-06:00</updated><title type='text'>What's the name of that color?</title><content type='html'>I would rather work in WCF, the middle tier and SQL Server.  The reality is, when I work with end-users, I often have to work as a designer and get into screen layout and color schemes.  &lt;br /&gt;&lt;br /&gt;Here's one tool that makes working with colors easier - especially when the user has a named color and you need to find the RGB or Hex equivalent:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://chir.ag/projects/name-that-color" target="_blank"&gt;Name that color&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's also helpful when you are trying to find a color and Photoshop is not available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-1948589352945226269?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/1948589352945226269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/12/whats-name-of-that-color.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/1948589352945226269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/1948589352945226269'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/12/whats-name-of-that-color.html' title='What&apos;s the name of that color?'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-4315048532701031640</id><published>2009-12-04T09:21:00.000-06:00</published><updated>2009-12-04T09:21:31.023-06:00</updated><title type='text'>SQL Server 2005 Restore Error:  Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.Smo)</title><content type='html'>I do a lot of prototyping, so I am backing up, moving and restoring SQL Server databases a lot.  We are using SQL Server 2005. &lt;br /&gt;&lt;br /&gt;I recently ran into this error: &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/SQLServerRestoreFailure-758380.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://www.chitech.net/blog/uploaded_images/SQLServerRestoreFailure-758379.JPG" width="320" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I shut down all services and applications using the database, and I still got it.  I then noticed that I had a query window open in Enterprise Manager.  I closed all of the query windows, tried again and was able to restore successfully. &lt;br /&gt;&lt;br /&gt;Hind sight is always 20/20 - duh, the query windows open a connection to the database - but when you work in Enterprise Manager a lot, as I do, it's easy to forget something like that. &lt;br /&gt;&lt;br /&gt;Lesson learned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-4315048532701031640?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/4315048532701031640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/12/sql-server-2005-restore-error-exclusive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/4315048532701031640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/4315048532701031640'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/12/sql-server-2005-restore-error-exclusive.html' title='SQL Server 2005 Restore Error:  Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.Smo)'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-8927234239653555656</id><published>2009-11-25T08:37:00.000-06:00</published><updated>2009-11-25T08:37:01.517-06:00</updated><title type='text'>Source Control Best Practices (Part 2 of 2)</title><content type='html'>The primary purpose of source control is to share a common library of&lt;br /&gt;source across developers and check files in and out of that common&lt;br /&gt;library to enable collaboration.&lt;br /&gt;&lt;br /&gt;Most application developers understand the importance of source&lt;br /&gt;control.  Unfortunately, I have had the unpleasant experience of having seen&lt;br /&gt;first-hand the perils of not implementing source control correctly.  I am sharing my story in the hope it may help you understand source control better and avoid the productivity drain that can occur when your team has to waste time fighting against source control rather than using source control as a valuable development tool.&lt;br /&gt;&lt;br /&gt;On one project I was on, the team implemented improper source control. &lt;br /&gt;I tried to help them understand that this was not the proper use of&lt;br /&gt;source control software, but I was a late-comer to the project and&lt;br /&gt;procedures were already established that the team was unwilling to change. &lt;br /&gt;&lt;br /&gt;At any rate, I don't know where the team got this theory, but their concept&lt;br /&gt;for source control was that every developer should have their own branch of&lt;br /&gt;source code.  The concept was that any one developer should be able to make&lt;br /&gt;changes to any area of the system without holding up any of the other team&lt;br /&gt;members.  This was supposed to make our team more agile and efficient. &lt;br /&gt;&lt;br /&gt;We ended up having the following results instead:&lt;br /&gt;&lt;br /&gt;1.  The primary purpose of source control was effectively negated. &lt;br /&gt;Instead of checking in and out of a common library, we each checked&lt;br /&gt;in and out of our own, isolated library.&lt;br /&gt;&lt;br /&gt;2.  Creating even an interim build was a monumental effort.  Bringing our&lt;br /&gt;code libraries together was a painstaking (and manual) task where we sifted&lt;br /&gt;through which changes to apply from each developer.  This process took&lt;br /&gt;literally days to complete and often resulted in the introduction of bugs and&lt;br /&gt;issues because it was so difficult to create a good version of the source.&lt;br /&gt;&lt;br /&gt;3.  Deja Vu all over again.  After a common build was eventually completed,&lt;br /&gt;each of us was required to create our own branch from the common source&lt;br /&gt;and we would begin the exercise of being out of sync once again.&lt;br /&gt;&lt;br /&gt;Let me give you a quick example: &lt;br /&gt;&lt;br /&gt;I have taken a messy module with 800 lines of code&lt;br /&gt;and paired it down to 200 lines of code, in doing so I eliminated 3 redundant&lt;br /&gt;methods entirely.  My colleague made a few small changes to his branch of the code,&lt;br /&gt;and checked these changes into his branch.  When we go to do the build, the&lt;br /&gt;"build master," the poor developer stuck with bringing all of the various branches&lt;br /&gt;together for our build, looks at both of our versions of source and sees that they&lt;br /&gt;are different.  How does this "build master" know which code is correct?  She is under time pressure to get the build out, she sees that my version is missing 3 methods, so she decides that the source with the most code is the correct one, starts with that and picks and chooses the differences that appear to make sense to create the version used for the build.  When the build is done, and I get the new "master" copy of the source, I look at this module and all of the clean-up work that I did was gone. I either have to blow it off, or do it again.&lt;br /&gt;&lt;br /&gt;Each developer should be in control and have responsibility for making sure the&lt;br /&gt;correct source is checked out and checked back in.  This should not be left up to&lt;br /&gt;a single developer at the end.  No matter how good that developer is, it is&lt;br /&gt;simply too daunting of a task, especially in crunch time, to have to go back&lt;br /&gt;through and make judgment calls about other developer's code.&lt;br /&gt;&lt;br /&gt;Needless to say, this process of creating a branch for each developer killed&lt;br /&gt;our productivity, caused in-fighting amongst the project team, and absolutely&lt;br /&gt;killed moral.&lt;br /&gt;&lt;br /&gt;In the end, this project was delivered very late, with very few of the&lt;br /&gt;promised features.   I attribute most, (if not all), of this project's issues to improper source control procedures.&lt;br /&gt;&lt;br /&gt;Please see my &lt;a href="http://www.chitech.net/blog/2009/11/source-control-best-practices-part-1-of.html"&gt;previous post&lt;/a&gt; for how to use source control and branching effectively.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-8927234239653555656?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/8927234239653555656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/11/source-control-best-practices-part-2-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/8927234239653555656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/8927234239653555656'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/11/source-control-best-practices-part-2-of.html' title='Source Control Best Practices (Part 2 of 2)'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-8135025785551723567</id><published>2009-11-23T21:04:00.016-06:00</published><updated>2009-11-24T09:19:53.433-06:00</updated><title type='text'>Who are you following?</title><content type='html'>I've found Twitter to be a great way to keep up with the latest and greatest information on Microsoft software development technologies.  A lot of people at work ask me about Twitter and who I follow.  Below is my list.&lt;br /&gt;&lt;br /&gt;I'm grateful to all of them for the time and effort they put into Twitter and keeping us all informed as well as entertained.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Scott Guthrie&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/scottgu"&gt;@scottgu&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scott Hanselman&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/shanselman"&gt;@shanselman&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tim Heuer&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/timheuer"&gt;@timheuer&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Brad Abrams&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/brada"&gt;@brada&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jeff Handley&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/jeffhandley"&gt;@jeffhandley&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Nikhil Kothari&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/nikhilk"&gt;@nikhilk&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Phil Haack&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/haacked"&gt;@haacked&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jesse Liberty&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/jesseliberty"&gt;@jesseliberty&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rocky Lhotka&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/rockylhotka"&gt;@rockylhotka&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;John Papa&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/john_papa"&gt;@john_papa&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jeff Atwood&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/codinghorror"&gt;@codinghorror&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Shawn Wildermuth&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/shawnwildermuth"&gt;@shawnwildermuth&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bill Reiss&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/billreiss"&gt;@billreiss&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Silverlight News&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/silverlightnews"&gt;@silverlightnews&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;You can also follow Chicago Technologies at...&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Rick Sternquist&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/rsternquist"&gt;@rsternquist&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chris Fuller&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/cfullerchicago"&gt;@cfullerchicago&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tom Cox&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.twitter.com/mrtomcox"&gt;@mrtomcox&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-8135025785551723567?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/8135025785551723567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/11/who-are-you-following.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/8135025785551723567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/8135025785551723567'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/11/who-are-you-following.html' title='Who are you following?'/><author><name>Rick Sternquist</name><uri>http://www.blogger.com/profile/01190371752451735652</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05197645499322266522'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-7609566520618464425</id><published>2009-11-21T22:06:00.021-06:00</published><updated>2009-11-22T06:01:33.362-06:00</updated><title type='text'>Top Lunch Places in the Loop</title><content type='html'>I love working in Chicago, and especially in the Loop. My favorite activity is lunch. My friends and I work very hard to find the best lunch places. &lt;br /&gt;&lt;br /&gt;Note: I am not including any place that is out of my daily lunch budget, so The Rivers and Lloyds, though excellent restaurants, get excluded because they are too pricey for me to go to without a special occasion. I also don't include any carry-out only places. We go to these sometimes too, but I prefer a sit down lunch, (SRO is my only exception to this rule). &lt;br /&gt;&lt;br /&gt;My favorites list is made up of sit-down places I can go to with my friends, any day of the week. Here are my favorites:&lt;br /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;1. &lt;a href="http://www.heavenonseven.com/" target="_blank"&gt;Heaven on 7 (original)&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Rating: ****&lt;br /&gt;&lt;br /&gt;Cuisine: New Orleans&lt;br /&gt;&lt;br /&gt;Location: &lt;br /&gt;7th floor of the Garland Building - &lt;br /&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=heaven+on+7,+chicago,il&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=41.767874,80.771484&amp;amp;ie=UTF8&amp;amp;hq=heaven+on+7,&amp;amp;hnear=Chicago,+IL&amp;amp;ll=41.881927,-87.637467&amp;amp;spn=0.025082,0.039439&amp;amp;z=15&amp;amp;iwloc=A" target="_blank"&gt;111 N Wabash Ave (Wabash &amp;amp; Washington)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Specialty: Gumbo&lt;br /&gt;&lt;br /&gt;Known for: New Orleans style atmosphere and food.&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;a href="http://www.heavenonseven.com/" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/heaven-725474.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;My Notes:&lt;br /&gt;Heaven on 7 is located on the 7th floor of the office building near the corner of Wabash and Washington. Get there by 11:30 if you don't want to wait in line. The atmosphere is great, the service is good and the food is consistent and delicious.&lt;br /&gt;&lt;br /&gt;Downside:&lt;br /&gt;I've been told that if I ever go to New Orleans, I won't like this restaurant anymore. The facts are that I've never been to New Orleans, and I love the food and atmosphere at this favorite.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;2. &lt;a href="http://www.poagmahones.com" target="_blank"&gt;Poag Mahones&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Rating: ***&lt;br /&gt;&lt;br /&gt;Cuisine: Bar food&lt;br /&gt;&lt;br /&gt;Location: &lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Poag+Mahones,+chicago,+il&amp;amp;sll=41.882598,-87.637467&amp;amp;sspn=0.02374,0.039439&amp;amp;ie=UTF8&amp;amp;hq=Poag+Mahones,&amp;amp;hnear=Chicago,+IL&amp;amp;ll=41.877223,-87.633717&amp;amp;spn=0.001442,0.002465&amp;amp;z=19" target="_blank"&gt;333 S Wells&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Specialty: Hamburgers&lt;br /&gt;&lt;br /&gt;Known for: Good food and great service&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;a href="http://www.poagmahones.com/" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/poag-721945.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;My notes: Great atmosphere, friendly wait staff and really good food. The Garbage Salad and Cheeseburger are my favorites. The Catfish Po' Boy is good too.&lt;br /&gt;&lt;br /&gt;Downside: This place fills up fast. Get there by 11:30, or you might have to wait for a table.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;3. &lt;a href="http://www.franklintap.com/" target="_blank"&gt;Franklin Tap&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Rating: ***&lt;br /&gt;&lt;br /&gt;Cuisine: Bar food&lt;br /&gt;&lt;br /&gt;Location: &lt;a href="http://maps.google.com/maps?hl=en&amp;amp;ie=UTF8&amp;amp;q=franklin+tap+chicago&amp;amp;fb=1&amp;amp;gl=us&amp;amp;hq=franklin+tap&amp;amp;hnear=chicago&amp;amp;cid=0,0,1093901743312317660&amp;amp;ei=pX0IS6fhHcbZnAfJuYjFCw&amp;amp;ved=0CAoQnwIwAA&amp;amp;z=16&amp;amp;iwloc=A" target="_blank"&gt;325 S Franklin (just South of the Sears Tower)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Specialty: Iced Tea, Sweet Potato Fries&lt;br /&gt;&lt;br /&gt;Known for: Good food, best Iced Tea in the loop and attractive waitresses&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;a href="http://www.franklintap.com/" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/franklintap-729823.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;My Notes: This place has the best Iced Tea in the loop. They have very good service. This is a great place to meet friends and hang out.&lt;br /&gt;&lt;br /&gt;Downside: A little pricey for what it is.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;4. Amarit &lt;br /&gt;Rating: ****&lt;br /&gt;&lt;br /&gt;Location: &lt;a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=amarit+restaurant,+chicago,+Il&amp;sll=41.885447,-87.634302&amp;sspn=0.091759,0.157757&amp;ie=UTF8&amp;cd=1&amp;hq=amarit+restaurant,&amp;hnear=Chicago,+IL&amp;ll=41.874546,-87.639313&amp;spn=0.091775,0.157757&amp;t=h&amp;z=13&amp;iwloc=A" target="_blank"&gt;600 South Dearborn&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cuisine: Thai&lt;br /&gt;&lt;br /&gt;Specialty: Thai Cuisine&lt;br /&gt;&lt;br /&gt;Known for: Quiet, relaxed atmosphere, best Thai food in the loop and good service.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/Amarit-742557.jpg" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;My Notes:&lt;br /&gt;This is a great place to bring friends if you want to relax and talk. It's relatively quiet and is relaxing and comfortable. My favorites are Tom Yum Soup and Yum Tah Lai (Seafood Salad)&lt;br /&gt;&lt;br /&gt;Downside: &lt;br /&gt;This place is a bit of a hike - it's South of Congress on Dearborn, so you might even say it's not even in the loop, but it's close enough and the food is worth the walk if you like Thai and catch a nice day.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;5. &lt;a href="http://www.srochicago.com/" target="_blank"&gt;SRO (Standing Room Only)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Rating: ***&lt;br /&gt;&lt;br /&gt;Cuisine: Sandwiches&lt;br /&gt;&lt;br /&gt;Location: &lt;a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=standing+room+only,+chicago,+il&amp;sll=41.877654,-87.633718&amp;sspn=0.001442,0.002465&amp;ie=UTF8&amp;hq=standing+room+only,&amp;hnear=Chicago,+IL&amp;ll=41.873012,-87.629185&amp;spn=0.094973,0.157757&amp;z=13&amp;iwloc=A" target="_blank"&gt;610 S Dearborn St&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Specialty: Chicken Sandwich&lt;br /&gt;&lt;br /&gt;Known for: Chicken Sandwich&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;a href="http://www.srochicago.com/" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/sro-765093.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;My Notes: The owners of this place are great guys - they've been at this location for over 10 years now. They do a great job.&lt;br /&gt;&lt;br /&gt;Downside: Unless it's a nice day, the seating is extremely limited. It's a great carry out place, or if it's a nice day, you can sit near the sidewalk. Otherwise, forget it - too crowded to eat in there comfortably.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;6. &lt;a href="http://www.bonivino.com/" target="_blank"&gt;Boni Vino&lt;/a&gt;&lt;br /&gt;Rating: ***&lt;br /&gt;Cuisine: Italian&lt;br /&gt;&lt;br /&gt;Specialty: Meatball Sandwich&lt;br /&gt;&lt;br /&gt;Known for: Friendly wait staff and location&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;a href="http://www.bonivino.com/" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/bonivino-715208.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;My Notes: The owners of this place is friendly and greets us at the door on the way in and thanks us on the way out. For some reason, we always get the same waitress. We either tip her too much or she likes us.&lt;br /&gt;&lt;br /&gt;Downside: Boni Vino is great for lunch, but the atmosphere is nothing fancy.. It's a greasy spoon, family run Italian place. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;7. &lt;a href="http://www.mmonks.com/" target="_blank"&gt;Monk's Pub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Rating: ***&lt;br /&gt;&lt;br /&gt;Location: &lt;a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=monk's+pub,+chicago,+Il&amp;sll=41.877358,-87.643003&amp;sspn=0.045886,0.078878&amp;ie=UTF8&amp;hq=monk's+pub,&amp;hnear=Chicago,+IL&amp;t=h&amp;z=13&amp;iwloc=A" target="_blank"&gt;205 W Lake St&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cuisine: Bar food&lt;br /&gt;&lt;br /&gt;Specialty: Hamburgers&lt;br /&gt;&lt;br /&gt;Known for: Atmosphere and hamburgers&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;a href="http://www.mmonks.com/" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/monks-782784.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;My Notes: This place is great, but it gets crowded, so get there early.&lt;br /&gt;&lt;br /&gt;Downside: If you're not there by 11:30, be prepared to wait - this place fills up fast.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;8. &lt;a href="http://www.venicecafechicago.com/" target="_blank"&gt;Venice Cafe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Rating: **&lt;br /&gt;&lt;br /&gt;Cuisine: Italian&lt;br /&gt;&lt;br /&gt;Location: &lt;a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=venice+cafe,+chicago,+Il&amp;sll=41.872373,-87.699394&amp;sspn=0.183556,0.315514&amp;ie=UTF8&amp;hq=venice+cafe,&amp;hnear=Chicago,+IL&amp;ll=41.877358,-87.643003&amp;spn=0.045886,0.078878&amp;t=h&amp;z=14&amp;iwloc=B" target="_blank"&gt;233 South Wacker&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Specialty: Calzone&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Known for: Red sauce - as good as you will find anywhere.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;a href="http://www.venicecafechicago.com/" target="_blank"&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/willis-720554.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;&lt;br /&gt;My Notes: The calzones are fantastic - that is the only thing I've ever had there. The way they do the soda there is really annoying. It's serve-yourself fountain and they charge way too much for it, making what was a good deal an average deal at best.&lt;br /&gt;&lt;br /&gt;Downside: This place used to be located across the street from the Sears (Willis) Tower, which was a great location. It's now located in the basement of the Sears (Willis) Tower and the atmosphere is average at best.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;9. &lt;a href="http://www.bostonblackies.com/" target="_blank"&gt;Boston Blackies&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Rating: ***&lt;br /&gt;&lt;br /&gt;Cuisine: Bar food&lt;br /&gt;&lt;br /&gt;Location: &lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=boston+blackies,+chicago,+Il&amp;amp;sll=41.862913,-87.826767&amp;amp;sspn=0.37995,0.631027&amp;amp;ie=UTF8&amp;amp;hq=boston+blackies,&amp;amp;hnear=Chicago,+IL&amp;amp;ll=41.880553,-87.639313&amp;amp;spn=0.04256,0.157757&amp;amp;t=h&amp;amp;z=13&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=41.8806,-87.639268&amp;amp;panoid=E0SftwfKoXsdvQ9PaWpjrw&amp;amp;cbp=11,167.8,,0,5.01" target="_blank"&gt;120 S Riverside Plz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Specialty: Hamburgers, home-made chips&lt;br /&gt;&lt;br /&gt;Known for: Nice, friendly atmosphere, large proportions.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;a href="http://www.bostonblackies.com/" target="_blank"&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/bostonblackies-725541.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;My Notes: &lt;br /&gt;Very large portions. If you're hungry, this is the place to go. Every time I go there, I leave feeling like I need a nap. &lt;br /&gt;&lt;br /&gt;Downside: &lt;br /&gt;This place is very popular, so get there by 11:30 or you will have to wait.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;10. Marquette Inn&lt;br /&gt;Rating: **&lt;br /&gt;&lt;br /&gt;Cuisine: Comfort food&lt;br /&gt;&lt;br /&gt;Location:  &lt;a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=marquette+inn,+chicago,+Il&amp;sll=41.880553,-87.639313&amp;sspn=0.094962,0.157757&amp;ie=UTF8&amp;hq=marquette+inn,&amp;hnear=Chicago,+IL&amp;ll=41.872373,-87.699394&amp;spn=0.183556,0.315514&amp;t=h&amp;z=12&amp;iwloc=A" target="_blank"&gt;135 West Madison&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Specialty: Gyros&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Known for: 1970s decor, friendly wait staff&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;img src="http://www.chitech.net/blog/uploaded_images/marquette-737687.jpg" /&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td colspan="2"&gt;&lt;br /&gt;My Notes: This place is a classic. There used to be locations all over the loop. Several have closed, but there are still a few around.&lt;br /&gt;&lt;br /&gt;Downside: There is nothing fancy about this place. It is what it is - a greasy spoon diner. If you want a classic, dependable place with good comofort food, Marquette Inn is for you.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-7609566520618464425?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/7609566520618464425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/11/top-lunch-places-in-loop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7609566520618464425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7609566520618464425'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/11/top-lunch-places-in-loop.html' title='Top Lunch Places in the Loop'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-3785899643795738329</id><published>2009-11-20T13:49:00.000-06:00</published><updated>2009-11-20T13:49:14.124-06:00</updated><title type='text'>Rain Delay in Ireland</title><content type='html'>&lt;p&gt;England and Ireland have been really socked with rain recently. Here is the view out my sister-in-law's back window. That lake used to be the backyard and adjacent fields. I guess they can turn it into a trout farm or something now. Let's hope the waters subside soon.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/photo-714628.jpg"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 240px; CURSOR: hand" border="0" alt="" src="http://www.chitech.net/blog/uploaded_images/photo-714624.jpg"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-3785899643795738329?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/3785899643795738329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/11/rain-delay-in-ireland.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/3785899643795738329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/3785899643795738329'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/11/rain-delay-in-ireland.html' title='Rain Delay in Ireland'/><author><name>Tom Cox</name><uri>http://www.blogger.com/profile/06244429784222986001</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15849271494440034959'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-190872640603636611</id><published>2009-11-17T17:55:00.007-06:00</published><updated>2009-11-18T12:47:50.263-06:00</updated><title type='text'>Goldmine API Access - Gm7s32.dll</title><content type='html'>I was recently writing an interface between an order management system and Goldmine. I needed to access the Goldmine API to write new contact records to Goldmine whenever there was contact info in the order management system that did not exist in Goldmine. Despite my best efforts, it took me a while to find out how to access the Goldmine API from my C#.Net code. So here's what I learned...&lt;br /&gt;&lt;br /&gt;You need to supply the method prototype to C#, this part was pretty straightforward and could be found in the (400+ page) API Guide:&lt;br /&gt;&lt;br /&gt;[DllImport("Gm7s32.dll")]&lt;br /&gt;public static extern int GMW_LoadAPI(string szSysDir, string szGoldDir, string szCommonDir, string szUser, string szPassword);&lt;br /&gt;&lt;br /&gt;Notice the first 3 parameters are SysDir, GoldDir, and CommonDir. I had no idea what to use for these values. (The final 2 parameters: User and Password seemed easy enough!) After some painful searching and guesswork, I was able to log into the API and insert records. HOWEVER, I later found this quick bit of info that would have saved me hours...&lt;br /&gt;&lt;br /&gt;Step 1: Log into Goldmine and select Help --&gt; About&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/1-ClickHelpAbout-737136.jpg"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 125px; CURSOR: hand" border="0" alt="" src="http://www.chitech.net/blog/uploaded_images/1-ClickHelpAbout-737118.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 2: Click the System button.&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/2-SystemButton-704711.jpg"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 236px; CURSOR: hand" border="0" alt="" src="http://www.chitech.net/blog/uploaded_images/2-SystemButton-704711.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 3: Use the values in System Files, Goldmine Files, and Contact Files for your first 3 parameters.&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/3-SystemInfo-786510.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 235px;" src="http://www.chitech.net/blog/uploaded_images/3-SystemInfo-786487.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Simple, eh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-190872640603636611?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/190872640603636611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/11/goldmine-api-access-gm7s32dll.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/190872640603636611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/190872640603636611'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/11/goldmine-api-access-gm7s32dll.html' title='Goldmine API Access - Gm7s32.dll'/><author><name>Tom Cox</name><uri>http://www.blogger.com/profile/06244429784222986001</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15849271494440034959'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-7089635389183639507</id><published>2009-11-17T05:26:00.002-06:00</published><updated>2009-11-17T05:29:20.591-06:00</updated><title type='text'>Source Control Best Practices (Part 1 of 2)</title><content type='html'>Source control is source control.  Whether you use PVCS, StarTeam, SVN, ClearCase, SourceSafe, or Team Foundation, the fundamentals of checking in/checking out and&lt;br /&gt;branching are the same.  Most Source Control tools support branching in one way or another, and if they don't, you can do branching manually if you have to.&lt;br /&gt;&lt;br /&gt;The first rule of branching is that you shouldn't branch if you don't need to.&lt;br /&gt;Branching introduces complexity and overhead into your development environment, which is something to be avoided whenever possible.  A rule of thumb for this would be:  if you don't have a version of your software in production, you don't need to branch, (yet).&lt;br /&gt;&lt;br /&gt;The purpose of branching is to allow you to fix production problems in the final released source while allowing new development to continue unimpeded.&lt;br /&gt;&lt;br /&gt;For example....&lt;br /&gt;I am on a team that is building a new CRM system.  We put version 1.0 into production over the weekend, and, on Monday, we make some major overhauls to the security module.  Several changes are checked into the main branch, but are not fully tested.  On Wednesday, we find a security hole in the production version of the security module.  Rather than fixing this on the main branch which has several&lt;br /&gt;untested changes already checked in, we would get the code from the&lt;br /&gt;production branch that we created over the weekend, patch, re-test,&lt;br /&gt;deploy, and check these changes back into the branch.  &lt;br /&gt; &lt;br /&gt;After checking back in, we look at the differences between the production branch and&lt;br /&gt;the main, development branch we are using and apply the same change we&lt;br /&gt;just made in production to the development version.&lt;br /&gt;&lt;br /&gt;Because you only need to patch and re-test a specific production&lt;br /&gt;issue, you are able to isolate the change and thoroughly test and&lt;br /&gt;release a specific change into production with confidence.  This technique also allows you to move forward on new development initiatives with&lt;br /&gt;confidence without worrying about how difficult it may be to roll-back&lt;br /&gt;a change if you need to get back to the production version.&lt;br /&gt;&lt;br /&gt;These concepts are not overly difficult or complex, but it is important to understand the correct way to branch, using the process and intent that source control allows.  &lt;br /&gt;&lt;br /&gt;If you do it correctly, it's easy and you will run a clean, efficient shop.   &lt;br /&gt;If you do it incorrectly, you will waste valuable time, effort and lose the good will and morale of your development team. Nothing is more&lt;br /&gt;frustrating than working on a project where source control procedures&lt;br /&gt;are erroneously applied.  (I will write more on this subject in my next post).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-7089635389183639507?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/7089635389183639507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/11/source-control-best-practices-part-1-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7089635389183639507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7089635389183639507'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/11/source-control-best-practices-part-1-of.html' title='Source Control Best Practices (Part 1 of 2)'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-2952669746144640697</id><published>2009-11-15T17:00:00.002-06:00</published><updated>2009-11-15T17:06:40.256-06:00</updated><title type='text'>Landing the Big One</title><content type='html'>During my recent family vacation to Puerto Vallarta, Mexico, I didn't catch H1N1, but I did land my first-ever fish.  It was a Dorado, ("El Dorado"), or Mahi Mahi.&lt;br /&gt;&lt;br /&gt;We caught it in the bay after launching near Mismaloya, just a few minutes South of downtown Puerto Vallarta.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/mahimahi_small-767491.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://www.chitech.net/blog/uploaded_images/mahimahi_small-767459.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It was an amazing experience - thanks to my brother-in-law, Jack McCabe, who is pictured here next to me with his catch.  We had a great time and ate especially well that day!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-2952669746144640697?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/2952669746144640697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/11/landing-big-one.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/2952669746144640697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/2952669746144640697'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/11/landing-big-one.html' title='Landing the Big One'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-1106028644385247749</id><published>2009-11-06T02:19:00.001-06:00</published><updated>2009-11-06T02:20:43.033-06:00</updated><title type='text'>(503) Server Unavailable Error</title><content type='html'>We have an application that loads XHTML documents that are authored by&lt;br /&gt;end-users into a database.  This database is used by my client's&lt;br /&gt;Intranet to deliver a combination of static and dynamic content to&lt;br /&gt;employees through my client's Intranet.&lt;br /&gt;&lt;br /&gt;I did not write the original application that loads this content in,&lt;br /&gt;but I have been tasked with making modifications to it and supporting&lt;br /&gt;it.  This application ran fine for several months, but one day we&lt;br /&gt;started getting, "The remote server returned an error: (503) Server&lt;br /&gt;Unavailable", every time we loaded a document.&lt;br /&gt;&lt;br /&gt;The code that was blowing up was pretty simple:&lt;br /&gt;&lt;br /&gt;               XmlDocument xmlDocument = new XmlDocument();&lt;br /&gt;               xmlDocument.Load(filePath);&lt;br /&gt;&lt;br /&gt;filePath was the full path of the XHTML file, and we were blowing up&lt;br /&gt;on the Load() method.&lt;br /&gt;&lt;br /&gt;After some investigation, I determined that the DocType line in the&lt;br /&gt;XHTML we were loading was causing the issue:&lt;br /&gt;&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;br /&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;br /&gt;&lt;br /&gt;I found that if I put the w3.org address into Internet Explorer, I got&lt;br /&gt;the same (503) Server Unavailable error as our application was&lt;br /&gt;getting.  Strangely enough, I did not get this error from FireFox.&lt;br /&gt;To resolve the error, I used FireFox to pull the&lt;br /&gt;xhtml1-transitional.dtd file down locally from w3.org, and the 3&lt;br /&gt;associated files:&lt;br /&gt;xhtml-special.ent&lt;br /&gt;xhtml-symbol.ent&lt;br /&gt;xhtml-lat1.ent&lt;br /&gt;&lt;br /&gt;I put these files onto our web server, (www.myclient.com/Intranet/XML)&lt;br /&gt;and changed the DOCTYPE line in the XHTML content to this:&lt;br /&gt;&lt;br /&gt;&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;br /&gt;"http://www.myclient.com/Intranet/XML/xhtml1-transitional.dtd"&gt;&lt;br /&gt;&lt;br /&gt;This resolved the issue.&lt;br /&gt;&lt;br /&gt;So why were we getting this "The remote server returned an error:&lt;br /&gt;(503) Server Unavailable" error?&lt;br /&gt;&lt;br /&gt;It turns out that w3.org was blocking requests from my client's external web server.  Here is&lt;br /&gt;an explanation:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic" target="_blank"&gt;http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-1106028644385247749?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/1106028644385247749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/11/503-server-unavailable-error.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/1106028644385247749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/1106028644385247749'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/11/503-server-unavailable-error.html' title='(503) Server Unavailable Error'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-92879383340330659</id><published>2009-10-28T09:30:00.003-05:00</published><updated>2009-10-28T09:41:54.178-05:00</updated><title type='text'>What is XHTML Used for?</title><content type='html'>XHTML is an effective way to combine store authored content that may require manipulation when presented back to the user through a web browser.&lt;br /&gt;If you just need to present static content, then HTML is good enough, but if you want to be able to mix-in dynamic content with your static, authored content, then XHTML is the way to go.&lt;br /&gt;&lt;br /&gt;XHTML is HTML, except with XML rules enforced.   Here is a good&lt;br /&gt;explanation of the differences between HTML and XHTML:&lt;br /&gt;&lt;a href="http://www.w3schools.com/XHTML/xhtml_html.asp" target="_blank"&gt;http://www.w3schools.com/XHTML/xhtml_html.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Document Object Model (DOM) is a cross-platform and&lt;br /&gt;language-independent convention for representing and interacting with&lt;br /&gt;objects in XML, XHTML or HTML.&lt;br /&gt;&lt;br /&gt;Authored content, as it applies to systems I've worked with, is a&lt;br /&gt;combination of words, images and formatting that can be saved in a&lt;br /&gt;file system or database and presented to users&lt;br /&gt;as they navigate through a web site.  The authored content that I've&lt;br /&gt;worked with is mostly static, and is saved as XHTML so that dynamic&lt;br /&gt;elements can be added where appropriate, then presented back to a user through a web browser.&lt;br /&gt;&lt;br /&gt;Dynamic content is content that is built from data.  Most of this&lt;br /&gt;time, the data will come from a systems database, but the data could&lt;br /&gt;just as easily come from internal or external services.  Charts and reports are good&lt;br /&gt;example of dynamic content.&lt;br /&gt;&lt;br /&gt;The main benefit of XHTML is that if you store authored content to a&lt;br /&gt;file or a database as XHTML, you can be confident that when you read&lt;br /&gt;your system can be load it into a DOM object.  This means that you can&lt;br /&gt;allow users to author their own HTML documents, enforce XHTML standard&lt;br /&gt;when you store the data and avoid run-time issues when mixing in&lt;br /&gt;static authored content with dynamic content. By loading it into a DOM&lt;br /&gt;object we are able to leverage the DOM object to manipulate the HTML.  Manipulating a DOM object is much simpler doing text manipulations on raw HTML.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-92879383340330659?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/92879383340330659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/10/what-is-xhtml-used-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/92879383340330659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/92879383340330659'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/10/what-is-xhtml-used-for.html' title='What is XHTML Used for?'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-8542283264975386388</id><published>2009-10-11T15:31:00.008-05:00</published><updated>2009-10-29T08:02:47.090-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS A name was started with an invalid character Web Service ASP.Net'/><title type='text'>A Quick Tip for Solving - A name was started with an invalid character - When Publishing to IIS</title><content type='html'>&lt;p&gt;I went to publish a new web service that I built the other day on a client machine that I have never used before. When I went to publish what amounts to a Hello World starter service, I got the following message:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Figure 1: The Error&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/1-IIS-Error-746560.JPG"&gt;&lt;br /&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 320px; FLOAT: left; HEIGHT: 171px; CURSOR: hand" border="0" alt="" src="http://www.chitech.net/blog/uploaded_images/1-IIS-Error-746381.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;The first thing I did was go to the properties window of the Virtual Directory I created in IIS. I noticed on the ASP.Net tab that ASP.Net version was set to version 1.x. I selected version 2.x of ASP.Net instead, and clicked OK to exit out of the properties window. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Figure 2: Virtual Directory Properties Window in IIS&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/2-Set-ASP-Version-in-IIS-790004.JPG"&gt;&lt;br /&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 320px; FLOAT: left; HEIGHT: 171px; CURSOR: hand" border="0" alt="" src="http://www.chitech.net/blog/uploaded_images/2-Set-ASP-Version-in-IIS-789803.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;I then went to the command window and typed iisreset to make sure the changed took place. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Figure 3: Performing an iisreset&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/3-IISreset-735167.JPG"&gt;&lt;br /&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 320px; FLOAT: left; HEIGHT: 171px; CURSOR: hand" border="0" alt="" src="http://www.chitech.net/blog/uploaded_images/3-IISreset-734977.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;I navigated to my service again, got the ever-familiar SOAP wsdl and proxy generation message. Success!!! This is the type of thing that I call the hidden checkbox factor. Most of my time in Windows, IIS, ASP.Net, and .Net in general is spent finding the hidden checkbox that is not set write and is consequently making my life painful. If I just removed the pain for even one person out there, then my job is done! Enjoy! &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Figure 4: Magic! My service works!&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chitech.net/blog/uploaded_images/4-No-More-Error-772022.JPG"&gt;&lt;br /&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 320px; FLOAT: left; HEIGHT: 171px; CURSOR: hand" border="0" alt="" src="http://www.chitech.net/blog/uploaded_images/4-No-More-Error-771800.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-8542283264975386388?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/8542283264975386388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/10/quick-tip-for-solving-name-was-started.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/8542283264975386388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/8542283264975386388'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/10/quick-tip-for-solving-name-was-started.html' title='A Quick Tip for Solving - A name was started with an invalid character - When Publishing to IIS'/><author><name>Tom Cox</name><uri>http://www.blogger.com/profile/06244429784222986001</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15849271494440034959'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-7423991307424646992</id><published>2009-10-02T11:22:00.002-05:00</published><updated>2009-10-02T11:30:44.882-05:00</updated><title type='text'>No Olympics for Chicago</title><content type='html'>I love this picture from the Chicago Tribune:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.chicagotribune.com/media/photo/2009-10/49480799.jpg" alt="A shocked crowd at Daley Plaza. (Brian Cassella /Chicago Tribune)" width="620" height="225" /&gt;&lt;br /&gt;&lt;br /&gt;It's unfortunate that we didn't get the bid for the 2016 Olympics, but maybe it's for the best.&lt;br /&gt;&lt;br /&gt;If you've ever been to the new Soldier Field (a.k.a. Soldier'ssss) you know that the crowd control situation is border-line dangerous and it takes at least an hour, (and sometimes longer), to get from your seat to your car.  The walkways are fenced in and are way too narrow for the amount of people trying to exit.  This is something that could easily be fixed, and for a small fraction of money than it would take to host the olympics.  &lt;br /&gt;&lt;br /&gt;And don't even get me started on the Eisenhower expressway with it's center-lane exits ramps.&lt;br /&gt;&lt;br /&gt;If we concentrated a little effort, (and money), on making Chicago a better place, we'd get far more bang for our buck than we would from a 2 week event.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-7423991307424646992?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/7423991307424646992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/10/no-olympics-for-chicago.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7423991307424646992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7423991307424646992'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/10/no-olympics-for-chicago.html' title='No Olympics for Chicago'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-3584226192483195758</id><published>2009-10-02T10:19:00.008-05:00</published><updated>2009-10-02T10:38:18.282-05:00</updated><title type='text'>Silverlight Resources</title><content type='html'>I recently upgraded from Silverlight 2 to Silverlight 3.  I had no problems with the update or converting my solutions.  In fact, a couple of nagging bugs in Silverlight 2 that were fixed with Silverlight 3 - I liked that!&lt;br /&gt;&lt;br /&gt;I am constantly on the hunt for good Silverlight resources.  Here are a few sites that have helped me with my understanding:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Microsoft's Silverlight Site:&lt;br /&gt;&lt;a href="http://silverlight.net/getstarted/" target="blank"&gt;http://silverlight.net/getstarted/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Wikipedia has a nice overview of what Silverlight is, how it works and how it has evolved:&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Microsoft_Silverlight" target="blank"&gt;http://en.wikipedia.org/wiki/Microsoft_Silverlight&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Joe Stegman does a nice job explaining Silverlight browser compatibility in this article:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/jstegman/archive/2008/12/21/silverlight-browser-support.aspx" target="blank"&gt;http://blogs.msdn.com/jstegman/archive/2008/12/21/silverlight-browser-support.aspx&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Scott Gu provides an excellent tutorial – even though this tutorial was written for Silverlight 2, all of the concepts translate directly to Sivlerlight 3 and the samples will work in Silverlight 3&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-2-end-to-end-tutorial-building-a-digg-search-client.aspx"&gt;http://weblogs.asp.net/scottgu/pages/silverlight-2-end-to-end-tutorial-building-a-digg-search-client.aspx&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-3584226192483195758?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/3584226192483195758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/10/silverlight-resources.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/3584226192483195758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/3584226192483195758'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/10/silverlight-resources.html' title='Silverlight Resources'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-7238757463210819211</id><published>2009-09-08T09:12:00.003-05:00</published><updated>2009-09-08T11:06:41.118-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Healthcare'/><category scheme='http://www.blogger.com/atom/ns#' term='Challenges'/><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Implementation'/><title type='text'>Healthcare Software: 3 Things to Expect Post-Implementation</title><content type='html'>I just read the August 17th issue of Information Week magazine – specifically the article called “9 Ways to Make E-Health Succeed”. Well, the article then goes on to give a bunch of common sense tips that pretty much any IT project would need to be successful, such as, get all stakeholders involved, do not underestimate the effect it will have on the business, start small, plan for the future, blah, blah, blah.&lt;br /&gt;&lt;br /&gt;Sounds great on paper, but what about after the system has been implemented? What can I expect when I walk into the doctor’s examination room? What will the experience be like? What are some things that doctors and IT staff need to work on going forward? I think everyone agrees that electronic health systems are important. They eliminate the need to fax documents between offices, and they often can be helpful in maintaining an entire patient history. They will also become an important part of the forthcoming healthcare legislation no matter what other options and extras are included or dropped by politicians in the coming months.&lt;br /&gt;&lt;br /&gt;First, I will talk about three experiences I have had at 3 separate doctor offices during the past few months, and then I will address the three things that we need to focus on going forward in IT Healthcare systems on both sides of the screen.&lt;br /&gt;&lt;br /&gt;Doctor One – Family Medicine. So I went for my annual wellness checkup and noticed that the doctor had implemented an e-system. Upon entry, my doctor attempted a login and failed, he tried again and failed. I noticed the CapsLock was on and showed him where to press in order to login. Success! He then began to enter some data when he must have fat-fingered a key because some info about the monitor popped up and said to press &lt;exit&gt;. He began to look for the Exit key and couldn’t find it. I showed him that it was on the monitor and not the keyboard. After typing some notes into a tab, he went to another screen and when he came back his notes were gone. Frustrated, he completed the exam be writing notes the old fashioned way, and said he would have one of the assistants type in the info later.&lt;br /&gt;&lt;br /&gt;Doctor Two – Hospital Nurse. My wife was in the most intense part of labor (without pain medication) and needless to say, it was a little tough. She required assistance with various things like breathing, calming, massage, etc. Where was the nurse? Right next to us typing away. Taking readings, entering data, notes, who knows what – but she did little more for us than jockey the computer. Luckily I read up on the birth partner books and was able to assist my wife, because there was no help from the staff, they were busy working with the computer.&lt;br /&gt;&lt;br /&gt;Doctor Three – Pediatrician. So we took our daughter to the Pediatrician, and the doctor came in, logged in to his work station, entered some metrics and some notes. He then examined our daughter and entered some follow-up notes and a prescription, which then uploaded to the pharmacy of our choice. There was a great balance between doctor patient and tools (PC). I asked the doctor how he liked using a computer as part of his daily patient routine, and he said that he was skeptical at first. He is in his 60s and did not grow up with technology, and he said he struggled in the beginning. He said that the IT staff was quick to answer his questions, show him tips and tricks, and make changes where necessary in the system to accommodate what he needed.&lt;br /&gt;&lt;br /&gt;So here are the challenges:&lt;br /&gt;1. Initial productivity drops will occur.&lt;br /&gt;2. Remember that the patient comes first before technology.&lt;br /&gt;3. Train and respond to doctors and nurses as they use the technology.&lt;br /&gt;&lt;br /&gt;Initial productivity drops will occur. Doctors should schedule more time between patients and longer patient visits to give themselves time to use the technology in the early days after implementation. This will allow them to get accustomed to the system and allow them time to work through issues and get questions answered.&lt;br /&gt;&lt;br /&gt;Remember that the patient comes first. Just because the computer is the new instrument in the room, practitioners need not fixate on it. In most cases it’s replacing a pen and paper and integrating functionality that was formerly disparate.&lt;br /&gt;&lt;br /&gt;Train and respond to practitioner needs. As IT staff, we need to have a sense of urgency and think proactively when supporting healthcare systems. The accuracy required in these systems can be more important than in other industries, because an error can really be life or death for someone. Not only do we need to appropriately train medical staff to use a computer, navigate the operating system, and learn the intricacies of their healthcare software, but IT staff needs to be flexible and responsive when issues arise.&lt;br /&gt;&lt;br /&gt;Addressing these challenges will help to ensure that IT healthcare software implementations go smoothly while catapulting American medicine into the 21st Century.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-7238757463210819211?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/7238757463210819211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/09/healthcare-software-3-things-to-expect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7238757463210819211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7238757463210819211'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/09/healthcare-software-3-things-to-expect.html' title='Healthcare Software: 3 Things to Expect Post-Implementation'/><author><name>Tom Cox</name><uri>http://www.blogger.com/profile/06244429784222986001</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15849271494440034959'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-4894036346167185016</id><published>2009-08-19T07:31:00.003-05:00</published><updated>2009-08-19T07:45:48.453-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps'/><title type='text'>Move to Google Apps</title><content type='html'>A couple of months ago, we started evaluating Google Apps as an email solution for Chicago Technologies. As avid fans of Gmail, the move to a cloud computing model just made sense for us because we wouldn’t have to worry about mail servers, updates to the software, backups, local desktops installations, and constant maintenance issues. Google Apps’ features met our requirements and provided a significant cost savings to maintaining our current email solution. Two weeks ago, we implemented Google Apps for our email solution and have not looked back.  Our implementation was straight-forward and a complete success.&lt;br /&gt;&lt;br /&gt;With Google Apps, we received a complete messaging solution with anti-spam protection, disaster recovery and a 99.9% up-time SLA.  Additional features such as chat, shared calendars, and Google Docs have improved our collaboration internally as well as with our customers.  We couldn't be happier with our decision to move to Google Apps.&lt;br /&gt;&lt;br /&gt;In addition, we've recently started helping some of our clients move to Google Apps.  So far, our clients have been very happy with the decision and the service. So what are you waiting for?&lt;br /&gt;&lt;br /&gt;For more information on Google Apps, go to &lt;a href="http://www.google.com/a"&gt;www.google.com/a&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-4894036346167185016?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/4894036346167185016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/08/move-to-google-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/4894036346167185016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/4894036346167185016'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/08/move-to-google-apps.html' title='Move to Google Apps'/><author><name>Rick Sternquist</name><uri>http://www.blogger.com/profile/01190371752451735652</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05197645499322266522'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-659776879319541414</id><published>2009-06-29T15:11:00.001-05:00</published><updated>2009-06-29T15:16:40.227-05:00</updated><title type='text'>Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.</title><content type='html'>I was recently tasked with upgrading a client's web site, which is written in VB.NET, from VS2003 to VS2008.  The conversion went pretty smoothly, but I thought I would share one of the hiccups I encountered:            &lt;br /&gt;&lt;br /&gt;One of the case statements, that apparently compiled in VS2003, did not compile in VS2008:&lt;br /&gt;&lt;br /&gt;This is the statement:&lt;br /&gt;&lt;br /&gt;Select Case dr.Item("DataTypeId")&lt;br /&gt;                Case 1, 3, 4&lt;br /&gt;                    _dt.Columns.Add(CType(dr.Item("SystemName"), String), Type.GetType("System.String"))&lt;br /&gt;                Case Else&lt;br /&gt;                    _dt.Columns.Add(CType(dr.Item("SystemName"), String), Type.GetType("System.Double"))&lt;br /&gt;            End Select&lt;br /&gt;&lt;br /&gt;This is the error:&lt;br /&gt;&lt;br /&gt;Error 105 Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity. &lt;br /&gt;&lt;br /&gt;I thought hte problem was in the Case 1, 3, 4 syntax - I usually program in C#, and my VB is a little rusty...but after a little digging I realized that this syntax was correct and the problem had to do with the data type of the value in the select clause (object) not matching the Case statment (int).  &lt;br /&gt;&lt;br /&gt;To resolve the issue, I converted the selected clause to an integer:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            Select Case Convert.ToInt32(dr.Item("DataTypeId"))&lt;br /&gt;                Case 1, 3, 4&lt;br /&gt;                    _dt.Columns.Add(CType(dr.Item("SystemName"), String), Type.GetType("System.String"))&lt;br /&gt;                Case Else&lt;br /&gt;                    _dt.Columns.Add(CType(dr.Item("SystemName"), String), Type.GetType("System.Double"))&lt;br /&gt;            End Select&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-659776879319541414?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/659776879319541414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/06/option-strict-on-disallows-operands-of.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/659776879319541414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/659776879319541414'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/06/option-strict-on-disallows-operands-of.html' title='Option Strict On disallows operands of type Object for operator &apos;=&apos;. Use the &apos;Is&apos; operator to test for object identity.'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-5566982907611519899</id><published>2009-05-06T14:30:00.005-05:00</published><updated>2009-05-12T09:14:35.633-05:00</updated><title type='text'>Why should I use Silverlight?</title><content type='html'>Great question!&lt;br /&gt;&lt;br /&gt;I consider myself an application developer, not an artist.  Good web design is 10% programming and 90% art work.  Since I'm not an artist, I'm really not interested in doing web design.&lt;br /&gt;&lt;br /&gt;What I am interested in is building applications that run over the Internet.&lt;br /&gt;&lt;br /&gt;In response to competition from Adobe Flash, Microsoft has finally given us a tool that allows us to do just that - deliver windows applications over the Internet without having to install the application locally.&lt;br /&gt;&lt;br /&gt;I've been working with Silverlight for several months now.  Here is what I like:&lt;br /&gt;1.  It is reliable - I have run into my share of difficulties, but I have been able to work through all of them.  I have every confidence that what I publish to the Internet will work once everything is tested.&lt;br /&gt;&lt;br /&gt;2.  It is fast - see my other posts for lessons learned with architecture.  The architecture I have setup is smoking fast.&lt;br /&gt;&lt;br /&gt;3.  It uses the Microsoft toolset - though Silverlight is quite a bit different from ASP.NET, the underlying language is the same.  I use C# for the language, (though you could use any .NET language), and WCF for communicating back and forth between the client and the database on the server.  Because Silverlight leverages a toolset I am already skilled in, it was easy for me to pick it up.  &lt;br /&gt;&lt;br /&gt;The one thing I don't like about Silverlight is that when things don't work, it can go South in a hurry and the error messages are often cryptic.  I've dealt with this by adding error handling and defensive code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-5566982907611519899?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/5566982907611519899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/05/why-should-i-use-silverlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/5566982907611519899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/5566982907611519899'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/05/why-should-i-use-silverlight.html' title='Why should I use Silverlight?'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-7753172377750242104</id><published>2009-04-29T12:09:00.005-05:00</published><updated>2009-04-29T13:22:12.575-05:00</updated><title type='text'>Silver Sample Architecture Improvements</title><content type='html'>Developing systems is a creative process.  Sometimes we build things, recognize that there is a better way and then go back and fix or "refactor" our code.&lt;br /&gt;&lt;br /&gt;After working with the same type of architecture as Silver Sample, on a production system, I realized that I had made a mistake in an earlier post.  I have since found a better way to use the proxy that is setup when we create a service reference from the Silverlight client. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Originally, I created a static reference to the proxy in App.xaml.cs, (see Figure 1), and used App.Proxy in the application (see Figure 2).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 1 - original App.Proxy property defined in App.xaml.cs&lt;br&gt;&lt;br /&gt;&lt;img src="SilverSample2.1/Figure1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 2 - original source that uses App.Proxy from Page.xaml.cs&lt;br&gt;&lt;br /&gt;&lt;img src="SilverSample2.1/Figure2.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problem #1&lt;/strong&gt;&lt;br&gt;&lt;br /&gt;This first problem that I noticed was the my CityListCompleted method was getting called multiple times.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After some work, I realized that every time getCityList() was invoked, I was adding a new event handler.  So if I invoked this method twice, I'd get 2 event handlers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This may seem obvious, but I have been working in ASP.NET with a stateless model for a long time and I'm still adjusting to this change of paradigm.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The short-term fix was to move the logic that hooks up the event handler to the constructor for the page - see Figure 3.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 3 - short-term fix &lt;br /&gt;&lt;img src="SilverSample2.1/Figure3.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problem #2&lt;/strong&gt;&lt;br /&gt;After working in this manner, I realized that my problem was fixed - one "complete" per asynchronous request, but then I ran into another problem...By putting the proxy in App.xaml.cs as a property, I made it global in scope.  If I had 2 different user controls or areas in my system that referenced the same method, I would hook up 2 "complete" event handlers and they would both be executed when I made my asynch call, no matter where I executed my asynch call from.  This worked in my favor in certain situations, but I found this to be sloppy and difficult to control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;The solution was to create the endpoint address for the application and the binding for the application in App.xaml.cs, then create an instance of the proxy within the method that made the asynch request, using the application-level endpointaddress and binding.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 4 shows the address and binding properties in App.xaml.cs and Figure 5 shows my new method which creates the proxy, keeping the scope of the proxy at the method level instead of the application level.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 4 - Endpoint and Binding Properties in App.xaml.cs&lt;br&gt;&lt;br /&gt;&lt;img src="SilverSample2.1/Figure4.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note: &lt;/strong&gt; I still haven't addressed the issue with the hard-coded endpoint address, but I will eventually figure out how to read this value from a .config file, (any suggestions would be welcome).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 5 - New method that uses App.Binding and App.EndpointAddress&lt;br&gt;&lt;br /&gt;&lt;img src="SilverSample2.1/Figure5.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The one thing that I was worried about was performance.  Would performance suffer if I moved the scope of the proxy from the application level, where it was created once and only once for the entire life of the application, to the method level where it would be created and destroyed each and every time the method was called.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To prove out my new technique, I created &lt;a href="http://www.silversample.com/sample2"&gt;Silver Sample #2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When you click on "Test 1" button, the application-level proxy is used.  When you click on the "Test 2", the new method-level proxy is used.  When you click on "Test Both", both the old and new versions of the proxy are called.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My testing showed that there really was no difference, from a performance standpoint, between the 2 techniques.  &lt;a href="http://www.silversample.com/sample2" target="_blank"&gt;Click here&lt;/a&gt;. to see for yourself.&lt;br /&gt;&lt;br /&gt;&lt;&lt;br /&gt;The new technique gives me centralized control of the endpoint and binding, which is what I wanted, with method-level scoping on the proxy which takes an extra line of code, but is a better technique from an organizational, style and stability perspective.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-7753172377750242104?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.silversample.com/sample2' title='Silver Sample Architecture Improvements'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/7753172377750242104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/04/silver-sample-architecture-improvements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7753172377750242104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/7753172377750242104'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/04/silver-sample-architecture-improvements.html' title='Silver Sample Architecture Improvements'/><author><name>Chris Fuller</name><uri>http://www.blogger.com/profile/13674741575252209381</uri><email>cfuller@chitech.net</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03242483974087781901'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-2221549125693799687</id><published>2009-04-22T20:29:00.002-05:00</published><updated>2009-04-22T20:39:48.075-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NAnt'/><title type='text'>NAntBuilder</title><content type='html'>When it comes to automating a .NET build process, NAnt and NAntContrib are my favorite tools. One major advantage of NAnt is the fact that the build scripts are completely written in XML and can be maintained with your favorite text editor.  However, as a Microsoft .NET developer, I must admit I prefer to do my work in an integrated development environment (IDE).  That's why I use NAntBuilder.  NAntBuilder is a full-featured IDE for NAnt and it's designed to be a powerful script creator, editor, and debugger.  If you're new to developing NAnt scripts, I highly recommend giving the product a try.  The new version is much improved.  You can download a free, trial version &lt;a href="http://www.nantbuilder.com/download.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-2221549125693799687?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/2221549125693799687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/04/nantbuilder.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/2221549125693799687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/2221549125693799687'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/04/nantbuilder.html' title='NAntBuilder'/><author><name>Rick Sternquist</name><uri>http://www.blogger.com/profile/01190371752451735652</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05197645499322266522'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1557646537353250635.post-2509374634003382469</id><published>2009-04-22T10:40:00.007-05:00</published><updated>2009-05-25T08:35:09.262-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NAntContrib'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='NAnt'/><title type='text'>Building Silverlight Apps with NAnt</title><content type='html'>A Daily Build is one of the true cornerstones of software development.  As Steve McConnell wrote in one of my all-time favorite articles, &lt;a href="http://www.stevemcconnell.com/ieeesoftware/bp04.htm"&gt;Daily Build and Smoke Test&lt;/a&gt;, a Daily Build "minimizes integration risks, reduces the risks of low quality, provides easier defect diagnosis, and improves morale".&lt;br /&gt;&lt;br /&gt;On my current Silverlight project at Chicago Technologies, one of my first tasks was to develop an automated, Daily Build process for the team.  Over the years, NAnt has become my favorite tool for automating .NET build processes.  The following are a couple of considerations when working with NAnt and Silverlight:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;NAnt - Use &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=31650&amp;amp;package_id=23704&amp;amp;release_id=560184"&gt;NAnt 0.86 Beta 1 Release&lt;/a&gt;.  I have found this release to be stable and it supports both .NET Framework 3.5 and Silverlight 2.0 targets&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;NAntContrib  - Use &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=31650&amp;amp;package_id=23704&amp;amp;release_id=455595"&gt;NAntContrib 0.85&lt;/a&gt;.  NAntContrib provides tasks and tools that aren't available in NAnt.  As far as I'm concerned, NAntContrib is a must for two reasons:  the MSBuild task and the SCM-related tasks for SourceSafe, StarTeam, and Subversion.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MSBuild - Utililze the NAntContrib task, MSBuild, for the actual compilation of the application.  More on this later.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;An important note regarding the integration between Subversion and NAntContrib.&lt;/span&gt;  On our project, we're using Subversion and the TortoiseSVN client.  NAntContrib utilizes "svn.exe", the command line utility, for its SVN-related tasks.  However, the installation of TortoiseSVN does not contain "svn.exe".  I had to install an additional Subversion client that utilized "svn.exe"   Without the command-line utility installed, your SVN-related NAntContrib tasks will not work.  I used &lt;a href="http://www.open.collab.net/downloads/subversion/"&gt;CollabNet Subversion Command-Line Client v1.6.1 (for Windows)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I hope this information helps you.  My next post will contain a sample NAnt build script for building Silverlight applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1557646537353250635-2509374634003382469?l=www.chitech.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/2509374634003382469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.chitech.net/blog/2009/04/building-silverlight-apps-with-nant.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/2509374634003382469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1557646537353250635/posts/default/2509374634003382469'/><link rel='alternate' type='text/html' href='http://www.chitech.net/blog/2009/04/building-silverlight-apps-with-nant.html' title='Building Silverlight Apps with NAnt'/><author><name>Rick Sternquist</name><uri>http://www.blogger.com/profile/01190371752451735652</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05197645499322266522'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>