<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://galratner.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">General Programming</title><subtitle type="html" /><id>http://galratner.com/blogs/programming/atom.aspx</id><link rel="alternate" type="text/html" href="http://galratner.com/blogs/programming/default.aspx" /><link rel="self" type="application/atom+xml" href="http://galratner.com/blogs/programming/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.40407.4157">Community Server</generator><updated>2009-04-26T06:09:00Z</updated><entry><title>Search for flight information with the Bing API</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2011/08/16/search-for-flight-information-with-the-bing-api.aspx" /><id>/blogs/programming/archive/2011/08/16/search-for-flight-information-with-the-bing-api.aspx</id><published>2011-08-16T18:34:00Z</published><updated>2011-08-16T18:34:00Z</updated><content type="html">&lt;p&gt;The Bing API allows developers to query the Bing Engine.&amp;nbsp; Queries can be sent using JSON, XML or SOAP.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;In order to query Bing you will need an Application ID available on the &lt;a target="_blank" href="http://www.bing.com/developers/default.aspx"&gt;Bing Developer Center&lt;/a&gt;.&amp;nbsp; You will also need to agree to the terms of service.&lt;br /&gt;The Bing API includes support for Images, Answers, news, Phonebook, related, Spellcheck, Translation, Video and web results.&lt;/p&gt;
&lt;p&gt;In this example we will use the InstantAnswer SourceType in order to query for specific flight information. The InstantAnswer response can contain Encarta or FlightStatus as its ContentType, depending on the query we requested.&lt;/p&gt;
&lt;p&gt;For example: if we request the following &amp;ldquo;AA5&amp;rdquo; Bing will query for the status of flight number 5 within American Airlines.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://galratner.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/6825.Bing2.PNG"&gt;&lt;img src="http://galratner.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/6825.Bing2.PNG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If we query Bing for &amp;ldquo;What does interpolation mean?&amp;rdquo; It will return the meaning of interpolation as defined in the dictionary.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://galratner.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/8304.Bing1.PNG"&gt;&lt;img src="http://galratner.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/8304.Bing1.PNG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;In order to query Bing for flight information we need to call it with the Airline code and flight number. We are going to pick them up from a simple text box&lt;/p&gt;
&lt;pre style="font-family: Consolas; font-size: 13px; color: black; background: none repeat scroll 0% 0% white;"&gt;Please&amp;nbsp;enter&amp;nbsp;flight&amp;nbsp;number:&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input&lt;/span&gt;&amp;nbsp;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"text"&lt;/span&gt;&amp;nbsp;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"AA5"&lt;/span&gt;&amp;nbsp;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"searchText"&lt;/span&gt;&amp;nbsp;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"searchText"&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&amp;nbsp;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"FlightStatusResult"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Let&amp;rsquo;s use jQuery to get back a JSON result to display:&lt;/p&gt;
&lt;pre style="font-family: Consolas; font-size: 13px; color: black; background: none repeat scroll 0% 0% white;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;SearchFlightStatus()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jQuery.getJSON(&lt;span style="color: maroon;"&gt;"http://api.bing.net/json.aspx?jsoncallback=?"&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AppId:&amp;nbsp;&lt;span style="color: maroon;"&gt;"Your App ID"&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Query:&amp;nbsp;$(&lt;span style="color: maroon;"&gt;"#searchText"&lt;/span&gt;).val(),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sources:&amp;nbsp;&lt;span style="color: maroon;"&gt;"InstantAnswer"&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Version:&amp;nbsp;&lt;span style="color: maroon;"&gt;"2.2"&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Market:&amp;nbsp;&lt;span style="color: maroon;"&gt;"en-us"&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JsonType:&amp;nbsp;&lt;span style="color: maroon;"&gt;"callback"&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;(data)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;errors&amp;nbsp;=&amp;nbsp;data.SearchResponse.Errors;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(errors&amp;nbsp;!=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DisplayErrors(errors);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;else&lt;/span&gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DisplayResults(data);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;$(document).ready(&lt;span style="color: blue;"&gt;function&lt;/span&gt;()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: maroon;"&gt;"#searchText"&lt;/span&gt;).keypress(&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;(e)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(e.which&amp;nbsp;==&amp;nbsp;13&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;$(&lt;span style="color: maroon;"&gt;"#searchText"&lt;/span&gt;).val()&amp;nbsp;!=&amp;nbsp;&lt;span style="color: maroon;"&gt;''&lt;/span&gt;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SearchFlightStatus();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;If there are any errors we need to show them to the user:&lt;/p&gt;
&lt;pre style="font-family: Consolas; font-size: 13px; color: black; background: none repeat scroll 0% 0% white;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;DisplayErrors(errors)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;resultsHTML&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon;"&gt;""&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;errors.length;&amp;nbsp;++i)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;errorDetail&amp;nbsp;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&amp;nbsp;errors[i])&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultsHTML+=&amp;nbsp;errorDetail&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;":&amp;nbsp;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;errors[i][errorDetail]&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;br&amp;nbsp;/&amp;gt;"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: maroon;"&gt;"#FlightStatusResult"&lt;/span&gt;).html(resultsHTML);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;Finally if we got back the information we needed we can display it to the user:&lt;/p&gt;
&lt;pre style="font-family: Consolas; font-size: 13px; color: black; background: none repeat scroll 0% 0% white;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;DisplayResults(data)&amp;nbsp;{
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;resultsHTML&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon;"&gt;""&lt;/span&gt;;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.each(data.SearchResponse.InstantAnswer.Results,&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;(i,&amp;nbsp;item)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultsHTML&amp;nbsp;+=&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;a&amp;nbsp;href='"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;item.Url&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"'&amp;gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;item.Title&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultsHTML&amp;nbsp;+=&amp;nbsp;&lt;span style="color: maroon;"&gt;"Flight:&amp;nbsp;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;item.InstantAnswerSpecificData.FlightStatus.FlightName&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;/br&amp;gt;"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultsHTML&amp;nbsp;+=&amp;nbsp;&lt;span style="color: maroon;"&gt;"Status:&amp;nbsp;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;item.InstantAnswerSpecificData.FlightStatus.StatusString&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;/br&amp;gt;"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultsHTML&amp;nbsp;+=&amp;nbsp;&lt;span style="color: maroon;"&gt;"From:&amp;nbsp;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;item.InstantAnswerSpecificData.FlightStatus.OriginAirport.Name&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;/br&amp;gt;"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultsHTML&amp;nbsp;+=&amp;nbsp;&lt;span style="color: maroon;"&gt;"To:&amp;nbsp;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;item.InstantAnswerSpecificData.FlightStatus.DestinationAirport.Name&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;/br&amp;gt;"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultsHTML&amp;nbsp;+=&amp;nbsp;&lt;span style="color: maroon;"&gt;"Scheduled&amp;nbsp;Departure:&amp;nbsp;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;item.InstantAnswerSpecificData.FlightStatus.ScheduledDeparture&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;/br&amp;gt;"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultsHTML&amp;nbsp;+=&amp;nbsp;&lt;span style="color: maroon;"&gt;"SchedulArrival:&amp;nbsp;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;item.InstantAnswerSpecificData.FlightStatus.ScheduledArrival&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"&amp;lt;/br&amp;gt;"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: maroon;"&gt;"#FlightStatusResult"&lt;/span&gt;).html(resultsHTML);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;The end result will look like this and will contain a link for further flight information.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://galratner.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/8546.Bing3.PNG"&gt;&lt;img src="http://galratner.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/8546.Bing3.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As you can tell it&amp;rsquo;s very easy to query Bing and get back useful information for you website or phone. You can view the complete Bing API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd250882.aspx"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/Search-for-flight-information-with-the-Bing-API-General-Programming-Gal-Ratner"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fgalratner.com%2Fblogs%2Fprogramming%2Farchive%2F2011%2F08%2F16%2Fsearch-for-flight-information-with-the-bing-api.aspx" style="border:0px" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=192" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Bing API" scheme="http://galratner.com/blogs/programming/archive/tags/Bing+API/default.aspx" /></entry><entry><title>The role of release management in enterprise software development</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2010/08/27/the-role-of-release-management-in-enterprise-software-development.aspx" /><id>/blogs/programming/archive/2010/08/27/the-role-of-release-management-in-enterprise-software-development.aspx</id><published>2010-08-27T17:00:00Z</published><updated>2010-08-27T17:00:00Z</updated><content type="html">&lt;p&gt;Release management is the process of managing software releases. Every program and application needs to be maintained, periodically updated and released to market in order to keep its business value. Although this seems pretty simple to the end user, usually no more than a few button clicks, the process of rolling out releases can be very complex and error prone if not followed correctly. A good process can effectively enhance the value of your product; lower development costs and raise the trust of your customers in your brand.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Source control systems&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Developing code requires deep collaboration that is almost real time between all members of the team. Each developer needs to have a local copy of the code in order to develop. In addition, each change should be reflected across multiple development locations in order to keep all teams in sync. Source control systems can provide all of that and more. Code patches, gated check ins, backup, access control and branching are some of the features of good source control systems. Current notable source control systems include Team Foundation Server(TFS), PerForce(P4) and subversion (SVN). Documentation of each system can be found on their vendor&amp;rsquo;s websites.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Source code branches&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Source branches contain the complete source. There are three main branches &lt;br /&gt;&lt;strong&gt;Dev&lt;/strong&gt; &amp;ndash; containing the current development code. This branch is the first to reflect any code changes spanning from upcoming releases.&lt;br /&gt;&lt;strong&gt;QA&lt;/strong&gt; &amp;ndash; code that was developed and integrated into the dev branch will be merged into the QA branch in order to be subject to testing by the QA department. If this code passes all integration testes it will be ready to be merged up into the Live branch.&lt;br /&gt;&lt;strong&gt;Live&lt;/strong&gt; &amp;ndash; this branch contains the code that is currently in production. Any deployment of new code to production systems should be done only from this branch.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Continuous integration and continuous build&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every branch powers its own environment. The DEV branch powers the dev environment, QA the QA environment and LIVE, the staging environment along with production. Each environment should be 100 percent operational at all times. To insure this is being done we usually use two systems. Continuous build also referred to as Build automation is running on the build server and uses systems such as CruiseControl or Hudson in order to continuously compile the code. If a code branch is broken and cannot be compiled, an alert is being send to the release manager or the entire team along with the last check in that caused the build to break. The last check in contains the name of the developer that checked in the code so that they can fix it. The second system is automated unit testing. The solution&amp;rsquo;s unit tests project is being executed and checked for any unit tests that might not pass as a result of new code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development categories: bug fixes, enhancements and projects&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In general enterprise software development can be categorized into three main areas:&lt;br /&gt;&lt;strong&gt;New projects&lt;/strong&gt; &amp;ndash; this is the development of new projects. It requires new architecture and new code. A project requirement document (PRD) has been passed on to the team by the product manager or stakeholder and new development is about to begin.&lt;br /&gt;&lt;strong&gt;Bugs&lt;/strong&gt; &amp;ndash; bug fixing is a part of an application development lifecycle. There is no way around it and even with the best QA bugs are bound to appear in your software. Bug fixing should be done at the break point and no new development is done at that point. No refactoring should ever take place at bug fixing in order to minimize the introduction of new bugs as a result of fixing current bugs.&lt;br /&gt;&lt;strong&gt;Enhancements&lt;/strong&gt; &amp;ndash; new features being added to major releases of the software. This requires the application to be architecturally sound and handle the additional code. If the application cannot handle the new features it must be re architected or the enhancements be separated into sub systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Integrating with remote teams&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In enterprise software shop the team is rarely developing from the same physical location. It is more likely to have a team in the main office along with multiple teams in remote locations, maybe offshore, along with individual developers that might be working from their home office. Each team member should be aware of the process and follow it to the letter. It is best if all teams work on the same branches and not create local office copy simply since integrating the code from local office copies is likely to conflict with other offices. The idea here is: break builds early, when it is simple to fix them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Efficiently funneling the stream of code into successful releases&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The process of merging code up and down between branches can be tedious but needs to be done correctly to insure no bugs appear as a result of a faulty merge. Over the years I have develop a process I like to follow and that has proven to be reliable.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New projects process&lt;/strong&gt;:&amp;nbsp; In new projects, a new branch is created with the project name and target release. Development is done in the branch and then merged into the Dev branch once it&amp;rsquo;s completed. It is then pushed to QA along with all other projects targeted for the next release. Pushes are Delta only. Any existing bug fixing in QA is not affected. It is then tested and pushed to the Live branch to be archived and released as a part of a release.&lt;br /&gt;&lt;strong&gt;Bug Fixing&lt;/strong&gt;: Bug fixing will be coded on the QA branch where it will be QAed and verified. Once a bug is fixed, it will be merged in two directions. Down to the DEV branch and up to the Live branch. It will then be released to production manually.&lt;br /&gt;&lt;strong&gt;Enhancements&lt;/strong&gt;: Will be coded in the DEV branch to be merged into QA&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://galratner.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/6431.MyBranchingProcess.jpg"&gt;&lt;img src="http://galratner.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/6431.MyBranchingProcess.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I hope you find this process helpful in your enterprise environment. As always, a process is as effective at the people that follow it.&lt;br /&gt;Happy coding!&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/The-role-of-release-management-in-enterprise-software-development-General-Programming-Gal-Ratner"&gt;&lt;img src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fgalratner.com%2Fblogs%2Fprogramming%2Farchive%2F2010%2F08%2F27%2Fthe-role-of-release-management-in-enterprise-software-development.aspx" alt="Shout it" style="border:0px" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=164" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Enterprise Development" scheme="http://galratner.com/blogs/programming/archive/tags/Enterprise+Development/default.aspx" /><category term="software life cycle" scheme="http://galratner.com/blogs/programming/archive/tags/software+life+cycle/default.aspx" /></entry><entry><title>The comeback of MapReduce</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2010/06/11/the-comeback-of-mapreduce.aspx" /><id>/blogs/programming/archive/2010/06/11/the-comeback-of-mapreduce.aspx</id><published>2010-06-11T17:03:00Z</published><updated>2010-06-11T17:03:00Z</updated><content type="html">&lt;p&gt;MapReduce has been gaining some popularity lately. With the Parallel Library Computing patterns and objects databases like MongoDB using it.&lt;br /&gt;MapReduce is a computing algorithm which uses key value pairs in order to quickly find results in large amounts of data by dividing it into many intermediate key value pair based temporary result sets, that can be computed across multiple processors.&lt;br /&gt;I was going to write a long boring blog post about how it works, but, then I realized it won&amp;rsquo;t be as good or clear as the source itself. &lt;br /&gt;Here is the original study by Jeffrey Dean and Sanjay Ghemawat from December, 2004: &lt;a target="_blank" href="http://static.googleusercontent.com/external_content/untrusted_dlcp/labs.google.com/en/us/papers/mapreduce-osdi04.pdf" title="MapReduce: Simplied Data Processing on Large Clusters"&gt;MapReduce: Simplied Data Processing on Large Clusters&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=161" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Parallel Computing" scheme="http://galratner.com/blogs/programming/archive/tags/Parallel+Computing/default.aspx" /></entry><entry><title>My interview with famouswhy.com</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2010/06/08/my-interview-with-famouswhy-com.aspx" /><id>/blogs/programming/archive/2010/06/08/my-interview-with-famouswhy-com.aspx</id><published>2010-06-08T02:37:00Z</published><updated>2010-06-08T02:37:00Z</updated><content type="html">&lt;table cellpadding="0" cellspacing="0" border="0" class="MsoNormalTable" style="mso-cellspacing: 0in; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 45pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes;"&gt;
&lt;td width="682" style="background-color: transparent; width: 511.5pt; height: 45pt; border: #ece9d8; padding: 0in;"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="MsoNormalTable" style="mso-cellspacing: 0in; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in;"&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="600" style="padding-bottom: 0in; background-color: transparent; padding-left: 7.5pt; width: 6.25in; padding-right: 0in; padding-top: 0in; border: #ece9d8;"&gt;
&lt;p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;An interview with &lt;span style="color: #ff6600;"&gt;Gal Ratner&lt;/span&gt; from &lt;span style="color: #ff6600;"&gt;Inverted Software&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="background-color: transparent; border: #ece9d8; padding: 0in;"&gt;
&lt;p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes;"&gt;&lt;v:shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" id="_x0000_t75"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;&lt;/v:path&gt;&lt;o:lock v:ext="edit" aspectratio="t"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape o:spid="_x0000_i1025" alt="http://download.famouswhy.com/publisher_logo/mediumLogo.jpg" type="#_x0000_t75" id="Picture_x0020_1" style="width: 37.5pt; height: 34.5pt; visibility: visible; mso-wrap-style: square;"&gt;&lt;v:imagedata o:title="mediumLogo" src="file:///C:\DOCUME~1\GALRAT~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.jpg"&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes;"&gt;
&lt;td style="padding-bottom: 0in; background-color: transparent; padding-left: 7.5pt; padding-right: 0in; padding-top: 0in; border: #ece9d8;"&gt;
&lt;p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;What are your plans or objectives for the near future?&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;We recently made an investment in social media and community integration software and we have plans to have the community play a dominant role in the support and brand management and recognition of our products and services.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;How and when did you start writing the code for Bulk Image Resizer? What inspired you the most? Do you plan to develop new software, or are you more focused on optimizing the current ones?&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Just like any other product, we started writing Bulk Image Resizer because we needed it. We didn&amp;rsquo;t do any market research. We as developers had a problem and we searched for a solution. We figured, if we have this problem, other developers have probably encountered it in the past too and didn&amp;rsquo;t have a solution, so let&amp;rsquo;s solve it.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;How many images can be resized at once? Is there any limit to that?&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Well that depends on the size of the box the software is running on. Bulk Image Resizer is built on top of JAVA and over the years JAVA became much faster and more memory efficient. The most we tried was 12,000 images. It handled it without any problem.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Do you plan to improve Bulk Image Resizer in the future? If yes, how are you going to do that? What shall we expect from the &lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;There are plans to improve the UI for sure. We are waiting for JAVA FX to catch up so we can utilize it to build a much slicker user interface.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;What makes Bulk Image Resizer better than other similar software?&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;I think the fact we think about use cases. Who is going to use it and what do they want to accomplish. Bulk Image Resizer is much easier to use and understand than any other competitor&amp;rsquo;s product. As a result, you end up spending less time making the software do what you need it to.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Bulk Image Resizer is a great application and personally I love it. However, there are still many people who prefer to use similar software. What can you tell to convince them that Bulk Image Resizer is better?&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;All I can say is: give the demo version a try. It&amp;rsquo;s free and has no time limitation, and if you like it you can always upgrade.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;What is the most important feature of Bulk Image Resizer? What makes this software special?&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;I like the fact that it generates thumbnail galleries on the fly. Lots of designers love that. They can just point and click to get HTML pages containing all of their work.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Do you offer any special promotions for your customers? (discount for multiple purchased licenses, free customer support service, free updates, etc)&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;With a price tag of under ten USD, this is definitely the best bargain in the software market. Most of our competitors are more than twice that and carry fewer features.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #666666; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;FW Editor: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;To end with, is there any message you would like to send to the Bulk Image Resizer users?&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #ff6600; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Gal Ratner: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Verdana','sans-serif'; color: #333333; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Please check out all of our products and services, we specialize in custom software and consulting that is per hour or project. We also do stuffing assistant and in house hosting.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;You can find the interview here: &lt;a href="http://download.famouswhy.com/publisher/inverted_software/"&gt;http://download.famouswhy.com/publisher/inverted_software/&lt;/a&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=160" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Bulk Image Resizer" scheme="http://galratner.com/blogs/programming/archive/tags/Bulk+Image+Resizer/default.aspx" /></entry><entry><title>Shopping Cart .NET Main Database diagram</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2010/06/03/shopping-cart-net-main-database-diagram.aspx" /><id>/blogs/programming/archive/2010/06/03/shopping-cart-net-main-database-diagram.aspx</id><published>2010-06-03T04:28:00Z</published><updated>2010-06-03T04:28:00Z</updated><content type="html">&lt;p&gt;This is the main database diagram for Shopping Cart .NET. It does not include the ASP membership tables.&lt;br /&gt;You can download Shopping Cart .NET from codeplex at &lt;a href="http://shoppingcartnet.codeplex.com"&gt;http://shoppingcartnet.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://galratner.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/5074.ShoppingCartNET_2D00_Database.jpg"&gt;&lt;img src="http://galratner.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/5074.ShoppingCartNET_2D00_Database.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=154" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Shopping Cart .NET" scheme="http://galratner.com/blogs/programming/archive/tags/Shopping+Cart+.NET/default.aspx" /></entry><entry><title>What is a good job interview?</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2010/05/17/what-is-good-job-interview.aspx" /><id>/blogs/programming/archive/2010/05/17/what-is-good-job-interview.aspx</id><published>2010-05-17T22:34:00Z</published><updated>2010-05-17T22:34:00Z</updated><content type="html">&lt;p&gt;&lt;a href="http://dilbert.com/strips/comic/2010-05-16/" title="Dilbert.com"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/80000/9000/500/89598/89598.strip.sunday.gif" alt="Dilbert.com" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;I was interviewing lots of developers in the past six months for some open positions. &lt;br /&gt;I must have talked to at least 50 people and it got me thinking about what a good interview is.&lt;br /&gt;A good interview is an interview that impacts the person across the desk from you on their level.&lt;br /&gt;If you are being interviewed by a business person, someone that is non technical, but, instead values communication skills you have lots of room to impress. They probably have no idea if you are a good programmer or not and they have no way to measure your skills except asking you questions about your resume. If, however, you are being interviewed by a technical manager, or a peer, you have less wiggle room. The only measurement in this case is how well you can answer technical questions. I think the worst mistake you can make is try and impress a technical person with some system you may have coded in the past, or a solution some ex company you worked for implemented, but, fail to answer simple programming questions, or try and get into boring technical details with a business person that has more interest in hearing how you can solve his problem, not, how many bits are in a byte. Talk to the person across from you on their level.&lt;br /&gt;Don&amp;rsquo;t create any false expectations and come prepared. A programmer that does not know what a static class is or why we need interfaces won&amp;rsquo;t probably be able to code his way out of a paper bag. Look in the mirror. Are you that guy? If you are asked to bring code samples, make sure you don&amp;rsquo;t have any obvious spelling errors and you have lots of comments in the code.&lt;br /&gt;It&amp;rsquo;s also nice to see team players, people that can work well with others. If you think you are the bomb, chances are you are probably not. Anybody can learn. I learn every day, sometimes from people that have less than half my experience. If you are cocky, chances are that you might annoy productive team members.&lt;br /&gt;&lt;br /&gt;There are no magic formulas when it comes to scoring the job of your dreams. Just show up on time, be polite and nice, know the material and answer all of the questions clearly.&lt;br /&gt;That&amp;rsquo;s all.&lt;br /&gt;Good Luck!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=152" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author></entry><entry><title>Podcast #1. Mobile Development with NBC's Kam Bhagia</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2010/03/10/podcast-1-mobile-development-with-nbc-s-kam-bhagia.aspx" /><id>/blogs/programming/archive/2010/03/10/podcast-1-mobile-development-with-nbc-s-kam-bhagia.aspx</id><published>2010-03-10T07:29:00Z</published><updated>2010-03-10T07:29:00Z</updated><content type="html">&lt;p&gt;
&lt;script src="http://mediaplayer.yahoo.com/js" type="text/javascript"&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;In this podcast, we talk to Kam Bhagia about the past, present and future of mobile development. Kam is a Senior Architect Alternative Platforms at NBC.com and in his position, he is in charge of shaping the mobile platform of NBC.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://galratner.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/8814.Podcast1.jpg"&gt;&lt;img src="http://galratner.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/programming/8814.Podcast1.jpg" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Listen Now&lt;/p&gt;
&lt;div id="mediaspace"&gt;This text will be replaced&lt;/div&gt;
&lt;p&gt;
&lt;script src="http://galratner.com/mediaplayer/swfobject.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;&lt;!--
  var so = new SWFObject('/mediaplayer/player.swf','ply','470','24','9','#ffffff');
  so.addParam('allowfullscreen','true');
  so.addParam('allowscriptaccess','always');
  so.addParam('wmode','opaque');
  so.addVariable('file','http://www.invertedsoftware.com/podcasts/kamonmobile-80.mp3');
  so.write('mediaspace');
// --&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;&lt;!--
(function() {
var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0];
s.type = 'text/javascript';
s.src = 'http://widgets.digg.com/buttons.js';
s1.parentNode.insertBefore(s, s1);
})();
// --&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.invertedsoftware.com/podcasts/kamonmobile-80.mp3"&gt;Or Download Here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a class="DiggThisButton DiggLarge"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=146" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Mobile" scheme="http://galratner.com/blogs/programming/archive/tags/Mobile/default.aspx" /></entry><entry><title>How to change the site title in Dolphin 7.0</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2010/01/31/how-to-change-the-site-title-in-dolphin-7-0.aspx" /><id>/blogs/programming/archive/2010/01/31/how-to-change-the-site-title-in-dolphin-7-0.aspx</id><published>2010-01-31T05:20:00Z</published><updated>2010-01-31T05:20:00Z</updated><content type="html">&lt;p&gt;I was playing around today with Dolphin 7.0 checking it out. I wanted to change the site title. It&amp;rsquo;s a simple thing but I couldn&amp;rsquo;t find anything in the admin panel. I Googled it and found I need to edit the file header.inc.php and set $site[&amp;#39;title&amp;#39;] to my new title. When I looked at header.inc.php there was no $site[&amp;#39;title&amp;#39;] there so I added it. This helped for one request. After that the title went back to &amp;ldquo;My Dolphin&amp;rdquo; so I started to look around. I started in index.php and I ended up in db.inc.php. I noticed the value is being called from the following SQL statement. &amp;quot;SELECT `desc` FROM `sys_options` WHERE `Name` = &amp;#39;$param_name&amp;#39;&amp;quot; so I opened the database. I used Tarantula of course :) I modified the table sys_options.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;UPDATE yardsale_dolph.sys_options SET VALUE = &amp;#39;My new title&amp;#39; WHERE sys_options.Name = &amp;#39;site_title&amp;#39;;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;That seemed to work.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=137" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="MySql" scheme="http://galratner.com/blogs/programming/archive/tags/MySql/default.aspx" /><category term="Dolphin" scheme="http://galratner.com/blogs/programming/archive/tags/Dolphin/default.aspx" /></entry><entry><title>The Ten basic rules of enterprise systems design</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2009/10/21/the-ten-basic-rules-of-enterprise-systems-design.aspx" /><id>/blogs/programming/archive/2009/10/21/the-ten-basic-rules-of-enterprise-systems-design.aspx</id><published>2009-10-21T05:28:00Z</published><updated>2009-10-21T05:28:00Z</updated><content type="html">&lt;p&gt;Over the years I have seen and been responsible for the design of many enterprise systems. From media encoding servers to financial and residual payments, I have seen many systems designs. Some good and some let&amp;rsquo;s say &amp;ldquo;required more thought to begin with&amp;rdquo;. The price to pay for a system that wasn&amp;rsquo;t designed correctly is high. It usually starts with throwing more hardware at the problem. Then when bugs and patches arrive it becomes clear that the system is difficult to maintain. By then the original team have moved on and a new set of developers, usually less experienced is hired to maintain the system. Everybody in the business can&amp;rsquo;t wait for version 2.0 that promises to be a departure from version 1.0 and the code quickly becomes legacy code. The lifespan of a good system can reach five years while a poor system will generally be replaced after two. That is if it reaches production at all.&lt;/p&gt;
&lt;p&gt;Here are ten tips learned after years of architecting.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Write multi tiered code&lt;br /&gt;&lt;/strong&gt;Your system will be deployed to many servers and will have many different functions. It&amp;rsquo;s important to avoid code duplication by having a well organized and loosely coupled code base. Database, Data Layer, Business Layer and UI.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Separate your systems to thin slices&lt;br /&gt;&lt;/strong&gt;Processing power is important for a system that has many functions within the business. If your code is multi tired you can think about it as if it was a Seven layer dip. Now it needs to be carried over by an array of tortilla chips (anybody else hungry?&amp;hellip;lol). Each enterprise slice is responsible for a unit of work and each can be hosted on a separate server or server farm.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Limit communication between system slices&lt;/strong&gt;&lt;br /&gt;Enterprise slices need not and should not communicate with other slices unless absolutely necessary. Communication should be limited to one way and be asynchronous as much as possible to avoid deadlocks in case parts of the system are down.&amp;nbsp; If a Web Service slice needs to communicate with a windows service slice it is always better to communicate thru let&amp;rsquo;s say MS Queue then to open a WCF endpoint (even if the we use netMsmqBinding).&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Limit system slices awareness&lt;/strong&gt;&lt;br /&gt;Since Slices are in charge of executing a unit of work, slices should not be aware of what other slices are doing and should not count on other slices work to be done. If there is a sytem dependency it should be on the result of work, not on the work itself.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Pull systems are better than push systems&lt;/strong&gt;&lt;br /&gt;Push systems use a dispatcher to push work to the different parts of the system. This introduces a weak link to the chain. It&amp;rsquo;s a central brain. If a brain shuts down the entire system shuts down. It also creates an extra part in the system to maintain, communicate and so on. A system that queries a Journal table in the database or a Queue for fork will be infinitely simpler and faster. The individual parts are better at governing themselves in what amount of work they can execute and can safely self terminate without fooling the brain they are still operational, causing it to distribute more work that may end up never being executed. &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Your web server is for serving web pages only&lt;/strong&gt;&lt;br /&gt;I have said it before and ill say it again. If code is not performing simple CRUD operations to display results or receiving input from a user, it has no business living inside your web server. Web servers are for serving web pages only. If you are processing media, sending emails or invoking reporting from your web page or service, consider slicing the system thinner and moving code to other slices.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Communication should be reliable&lt;/strong&gt;&lt;br /&gt;If you must communicate between slices, make sure communication is reliable. It won&amp;rsquo;t hurt to follow up on it if you can, just to make sure your message arrived safely and most communication technologies can verify this for you.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Cache whenever you can&lt;/strong&gt;&lt;br /&gt;Yes you are accessing the database or the result of a web service that has been highly optimized for performance by the greatest minds in your organization, probably you. Still you have no idea who else is accessing the same data or the frequency in which it&amp;rsquo;s being accessed. It is&amp;nbsp;better to&amp;nbsp;fetch more data then you need in one query and then load it into memory. You can then query the memory structure in the boundary or your own slice. This will probably be much faster than constant Database round trips. You might also use distributed cache systems like Velocity to help you with caching data in a&amp;nbsp;central location which can take the load of other systems.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Implement security in every layer of your code&lt;/strong&gt;&lt;br /&gt;Don&amp;rsquo;t leave security checks for the UI. You don&amp;rsquo;t know how many UIs your system can end up with. Consider performing checks in ever layer in your code.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Measure your bottlenecks&lt;/strong&gt;&lt;br /&gt;It&amp;rsquo;s a big part of the art of performance tuning and defining it in two or three lines here would simply not do it justice but I will go ahead and try nevertheless. Measure every communication channel and every slice in your system for bottlenecks. If you find them after deploying to production it&amp;rsquo;s already too late. Your system only gets one chance at a first impression. If the user&amp;rsquo;s impression of the systems is that it&amp;rsquo;s slow and laggy, it won&amp;rsquo;t change much even if you tune it afterwards. For the user it will always be a slow system.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Have a real pro set up your hardware&lt;/strong&gt;&lt;br /&gt;Yes I know that the title of this blog post is the ten basic rules of enterprise systems design so what is number eleven doing here? It&amp;rsquo;s not a tip about software at all! Well the truth is software developers don&amp;rsquo;t like to admit it but we depend on hardware to make our code shine. We all have top of the line workstations with windows server 2008 64bit running on 12GB of RAM with solid state drives, but, production systems are usually out of our control. We don&amp;rsquo;t even have access to them and the design of our SAN is usually left for IT. Well the truth is that no matter how good and stable your code is it needs a stable and fast environment to run in and do its magic. Building hardware and data centers to run your system is just as hard and complicated as coding it. The best thing you can do is hire the best professional you can afford. A poorly designed Data Center will forever stain the reputation of your company with downtime and slowness and will end up requiring expensive professionals to maintain. Plan it right the first time and you won&amp;rsquo;t be sorry.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Designing a fast and reliable enterprise system isn&amp;rsquo;t easy. It&amp;rsquo;s an art that is acquired over years of experience. I hope this will give you a good jump start into understanding of what goes into designing such systems.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/The-Ten-basic-rules-of-enterprise-systems-design-General-Programming-Gal-Ratner"&gt;&lt;img src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fgalratner.com%2Fblogs%2Fprogramming%2Farchive%2F2009%2F10%2F21%2Fthe-ten-basic-rules-of-enterprise-systems-design.aspx" alt="Shout it" style="border:0px;" /&gt;&lt;/a&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgalratner.com%2fblogs%2fprogramming%2farchive%2f2009%2f10%2f21%2fthe-ten-basic-rules-of-enterprise-systems-design.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgalratner.com%2fblogs%2fprogramming%2farchive%2f2009%2f10%2f21%2fthe-ten-basic-rules-of-enterprise-systems-design.aspx" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=118" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Software Architecture" scheme="http://galratner.com/blogs/programming/archive/tags/Software+Architecture/default.aspx" /></entry><entry><title>Recommended Reading</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2009/10/21/recommended-reading.aspx" /><id>/blogs/programming/archive/2009/10/21/recommended-reading.aspx</id><published>2009-10-21T05:05:00Z</published><updated>2009-10-21T05:05:00Z</updated><content type="html">&lt;p&gt;Here are some of my favorite books. Highly recommended. Hope you like them too.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0321125215?ie=UTF8&amp;amp;tag=galrat-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321125215"&gt;Domain-Driven Design: Tackling Complexity in the Heart of Software&lt;/a&gt;&lt;img height="1" width="1" src="http://www.assoc-amazon.com/e/ir?t=galrat-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321125215" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0132350882?ie=UTF8&amp;amp;tag=galrat-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0132350882"&gt;Clean Code: A Handbook of Agile Software Craftsmanship&lt;/a&gt;&lt;img height="1" width="1" src="http://www.assoc-amazon.com/e/ir?t=galrat-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0132350882" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1422121100?ie=UTF8&amp;amp;tag=galrat-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1422121100"&gt;Mastering the Hype Cycle: How to Choose the Right Innovation at the Right Time (Gartner)&lt;/a&gt;&lt;img height="1" width="1" src="http://www.assoc-amazon.com/e/ir?t=galrat-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1422121100" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1422106667?ie=UTF8&amp;amp;tag=galrat-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1422106667"&gt;IT Risk: Turning Business Threats into Competitive Advantage&lt;/a&gt;&lt;img height="1" width="1" src="http://www.assoc-amazon.com/e/ir?t=galrat-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1422106667" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1591395771?ie=UTF8&amp;amp;tag=galrat-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1591395771"&gt;The New CIO Leader: Setting the Agenda and Delivering Results&lt;/a&gt;&lt;img height="1" width="1" src="http://www.assoc-amazon.com/e/ir?t=galrat-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1591395771" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1430219483?ie=UTF8&amp;amp;tag=galrat-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1430219483"&gt;Coders at Work&lt;/a&gt;&lt;img height="1" width="1" src="http://www.assoc-amazon.com/e/ir?t=galrat-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1430219483" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1430210788?ie=UTF8&amp;amp;tag=galrat-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1430210788"&gt;Founders at Work: Stories of Startups&amp;#39; Early Days (Recipes: a Problem-Solution Ap)&lt;/a&gt;&lt;img height="1" width="1" src="http://www.assoc-amazon.com/e/ir?t=galrat-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1430210788" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0061854549?ie=UTF8&amp;amp;tag=galrat-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0061854549"&gt;Predictably Irrational, Revised and Expanded Edition: The Hidden Forces That Shape Our Decisions&lt;/a&gt;&lt;img height="1" width="1" src="http://www.assoc-amazon.com/e/ir?t=galrat-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0061854549" border="0" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=117" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author></entry><entry><title>The next version of SQL Server - Project code-named "Madison"</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2009/09/03/the-next-version-of-sql-server-project-code-named-quot-madison-quot.aspx" /><id>/blogs/programming/archive/2009/09/03/the-next-version-of-sql-server-project-code-named-quot-madison-quot.aspx</id><published>2009-09-03T17:19:00Z</published><updated>2009-09-03T17:19:00Z</updated><content type="html">&lt;p&gt;A quick look into the next version of SQL Server. This version makes use of Parallel Computing in order to to scale databases across nodes.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/Charles/Christian-Kleinerman-Introduction-to-SQL-Server-Project-Madison/"&gt;http://channel9.msdn.com/posts/Charles/Christian-Kleinerman-Introduction-to-SQL-Server-Project-Madison/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Key customer benefits in the technology preview of &amp;ldquo;Madison&amp;rdquo; include:&lt;/p&gt;
&lt;p&gt;&amp;middot; Data warehouse scalability into the petabyte range&lt;/p&gt;
&lt;p&gt;&amp;middot; Low cost of ownership through industry standard hardware&lt;/p&gt;
&lt;p&gt;&amp;middot; Appliance model that simplifies data warehouse deployment and maintenance&lt;/p&gt;
&lt;p&gt;&amp;middot; Integrates with existing SQL Server 2008 data warehouses via a unique hub-and-spoke architecture&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=56" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Parallel Computing" scheme="http://galratner.com/blogs/programming/archive/tags/Parallel+Computing/default.aspx" /><category term="Data Warehousing" scheme="http://galratner.com/blogs/programming/archive/tags/Data+Warehousing/default.aspx" /><category term="SQL Server 2008" scheme="http://galratner.com/blogs/programming/archive/tags/SQL+Server+2008/default.aspx" /><category term="Madison" scheme="http://galratner.com/blogs/programming/archive/tags/Madison/default.aspx" /></entry><entry><title>Update a record in a SQL Server table from another record in the same table</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2009/08/22/update-a-record-in-a-sql-server-table-from-another-record-in-the-same-table.aspx" /><id>/blogs/programming/archive/2009/08/22/update-a-record-in-a-sql-server-table-from-another-record-in-the-same-table.aspx</id><published>2009-08-22T03:15:00Z</published><updated>2009-08-22T03:15:00Z</updated><content type="html">&lt;p&gt;In SQL Server you can update record fields with the values from another record using the following TSQL:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t1&lt;br /&gt;SET &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t1.MyColumn = t2.MyColumn&lt;br /&gt;FROM&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyTable AS t1, MyTable AS t2&lt;br /&gt;WHERE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t1.ID = @ID1 AND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t2.IP = @ID2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This will update your table&amp;rsquo;s column with a value from another record.&lt;br /&gt;Enjoy!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=55" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="SQL" scheme="http://galratner.com/blogs/programming/archive/tags/SQL/default.aspx" /><category term="FROM" scheme="http://galratner.com/blogs/programming/archive/tags/FROM/default.aspx" /><category term="UPDATE" scheme="http://galratner.com/blogs/programming/archive/tags/UPDATE/default.aspx" /></entry><entry><title>Add or remove an IP address from a remote server with netsh and pstools</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2009/07/29/add-or-remove-an-ip-address-from-a-remote-server-with-netsh-and-pstools.aspx" /><id>/blogs/programming/archive/2009/07/29/add-or-remove-an-ip-address-from-a-remote-server-with-netsh-and-pstools.aspx</id><published>2009-07-29T14:41:00Z</published><updated>2009-07-29T14:41:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Netsh.exe&lt;/strong&gt; is a windows utility designed to help administrators perform operations using command prompt. &lt;/p&gt;
&lt;p&gt;More on netsh here: &lt;a href="http://support.microsoft.com/kb/242468"&gt;http://support.microsoft.com/kb/242468&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PStools &lt;/strong&gt;is an optional suit of components design for remote operations. Using &lt;strong&gt;PsExec&amp;nbsp;&lt;/strong&gt; you can invoke&amp;nbsp;commands or programs&amp;nbsp;on remote computers.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can download it from here:&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx"&gt;http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s use both to add an IP address to a remote computer:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-accepteula -e -i &lt;/strong&gt;&lt;a&gt;&lt;strong&gt;\\serverName&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; netsh in ip add address ConnectionName IPAddress subnetMask&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Removeing it will look like:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-accepteula -e -i &lt;/strong&gt;&lt;a&gt;&lt;strong&gt;\\serverName&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; netsh interface ip delete address name=&amp;quot;ConnectionName&amp;quot; addr=IPAddress&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=43" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="pstools" scheme="http://galratner.com/blogs/programming/archive/tags/pstools/default.aspx" /><category term="netsh" scheme="http://galratner.com/blogs/programming/archive/tags/netsh/default.aspx" /></entry><entry><title>Javascript numeric paging</title><link rel="alternate" type="text/html" href="/blogs/programming/archive/2009/04/26/javascript-numeric-paging.aspx" /><id>/blogs/programming/archive/2009/04/26/javascript-numeric-paging.aspx</id><published>2009-04-26T05:09:00Z</published><updated>2009-04-26T05:09:00Z</updated><content type="html">&lt;p&gt;Comment on Javascript numeric paging&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.invertedsoftware.com/tutorials/JAVASCRIPT-Numeric-Paging.html"&gt;http://www.invertedsoftware.com/tutorials/JAVASCRIPT-Numeric-Paging.html&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://galratner.com/aggbug.aspx?PostID=15" width="1" height="1"&gt;</content><author><name>admin</name><uri>http://galratner.com/members/admin/default.aspx</uri></author><category term="Javascript" scheme="http://galratner.com/blogs/programming/archive/tags/Javascript/default.aspx" /></entry></feed>
