<?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-25809080</id><updated>2009-12-17T11:46:16.095+02:00</updated><title type='text'>Innovative Perspective</title><subtitle type='html'>By Mohammed Nour El-Din</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default?start-index=26&amp;max-results=25'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-25809080.post-633492930963468166</id><published>2009-04-09T00:05:00.009+02:00</published><updated>2009-09-30T00:01:58.329+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General News'/><title type='text'>Moving to WordPress!</title><content type='html'>This was really a hard decision to take but I have decided to transfer my blog to WordPress: &lt;a href="http://innovativeperspective.wordpress.com"&gt;http://innovativeperspective.wordpress.com&lt;/a&gt;. All the posts has been imported there, there is nothing missing!&lt;br /&gt;&lt;br /&gt;Actually, I didn't expect how fascinating is WordPress as a blogging experience. It gives you more features and tracking statistics. More extensible, more handy and easy to customize. WordPress is more than a blogging system. It gives you Wiki features like adding pages, creating custom friendly links, custom gadgets and more.&lt;br /&gt;&lt;br /&gt;This blog - &lt;a href="http://mnour.blogspot.com"&gt;http://mnour.blogspot.com&lt;/a&gt; - will be still there, there is no intention to close it. However, it's not expected to publish new posts here in the future. &lt;br /&gt;&lt;br /&gt;Please stay tuned and update your feed reader to link to the new blog:&lt;br /&gt;&lt;a href="http://feeds2.feedburner.com/innovativeperspective.com"&gt;http://feeds2.feedburner.com/innovativeperspective.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-633492930963468166?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/633492930963468166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=633492930963468166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/633492930963468166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/633492930963468166'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/04/important-blog-transfer.html' title='Moving to WordPress!'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-5291470565022631134</id><published>2009-04-08T12:21:00.003+02:00</published><updated>2009-04-08T12:35:39.176+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Engineering'/><title type='text'>Disaster Recovery - If you fail to plan, plan to fail</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_C-lhvxiWQkk/Sdx99F2uc4I/AAAAAAAAAUI/c0HUKCVuIAc/s1600-h/image003.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 143px; height: 200px;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/Sdx99F2uc4I/AAAAAAAAAUI/c0HUKCVuIAc/s200/image003.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5322267348142289794" /&gt;&lt;/a&gt;&lt;br /&gt;The CuttingEdge Club will organize a two hours session about "Disaster Recovery". The session will be in Wednesday 8th April, 2009 - 5:30 PM, &lt;a href="http://www.itworx.com"&gt;ITWorx&lt;/a&gt; - Free Zone. The speaker is Nahla Osman, Quality Team Leader, ITWorx.&lt;br /&gt;&lt;br /&gt;&lt;div class="about" style="width:600px"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SRsloD52YPI/AAAAAAAAAP4/f3a_t5h1ULI/s1600-h/cuttingedge.png"&gt;&lt;img style="border:0px; float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 220px; height: 79px;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SRsloD52YPI/AAAAAAAAAP4/f3a_t5h1ULI/s200/cuttingedge.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267845559312867570" /&gt;&lt;/a&gt;CuttingEdgeClub is an &lt;a href="http://www.itworx.com"&gt;ITWorx&lt;/a&gt; technical seminar club for technology enthusiasts. Its mission is to provide an easy gateway to pertinent and updated technology information for a growing audience in a simple, pragmatic and accessible way. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-5291470565022631134?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/5291470565022631134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=5291470565022631134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5291470565022631134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5291470565022631134'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/04/disaster-recovery-if-you-fail-to-plan.html' title='Disaster Recovery - If you fail to plan, plan to fail'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_C-lhvxiWQkk/Sdx99F2uc4I/AAAAAAAAAUI/c0HUKCVuIAc/s72-c/image003.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8657529967721805586</id><published>2009-03-28T00:17:00.006+02:00</published><updated>2009-03-28T23:27:45.084+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Resolution: The Underlying Connection Was Closed</title><content type='html'>You usually got this exception when trying to use System.Net.HttpWebRequest class in .NET 1.1 for creating internal URL calls from your ASP.NET code. The exception is also reproducible when trying to invoke webservices using the proxy class.&lt;br /&gt;&lt;br /&gt;By default, there is two concurrent connections in every ASP.NET application. As ASP.NET is a service it may require more than two concurrent connections to handle the requests. When you try to request URL from your ASP.NET code, ASP.NET may not be able to handle it. The solution is to increase the number of the concurrent connections which ASP.NET can handle. You can do so by &lt;a href="http://msdn.microsoft.com/en-us/library/aa903351.aspx"&gt;modifying the "connectionManagement" element in the configuration file&lt;/a&gt;. For more information about the problem and its resolution, check this &lt;a href="http://blogs.msdn.com/engelsr/articles/497902.aspx"&gt;post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-8657529967721805586?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8657529967721805586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=8657529967721805586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8657529967721805586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8657529967721805586'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/03/resolusion-underlying-connection-was.html' title='Resolution: The Underlying Connection Was Closed'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-5577833350773416778</id><published>2009-03-23T22:55:00.006+02:00</published><updated>2009-03-23T23:27:00.290+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>yEd Graph Editor Replacement For Visio</title><content type='html'>yEd by yWorks is a very nice graphical editor which can be considered a very perfect replacement for Visio. The tool is very simple and provide most of the functionalities of Microsoft Visio. It doesn't provide a very large collection of graph types like in Visio but at least it provides the most used and popular ones. You can create UML diagrams, flowcharts, block diagrams, networks and more. You can have glassy figures, rounded corners, curves, edges and shadows. Although, it's a Java tool, I didn't find it slow or heavy in loading. It's a very powerful graph editor tool and it really worth a try: &lt;a href="http://www.yworks.com/en/products_yed_about.html"&gt;Download yEd Graph Editior&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-5577833350773416778?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/5577833350773416778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=5577833350773416778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5577833350773416778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5577833350773416778'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/03/yed-graph-editor-replacement-for-visio.html' title='yEd Graph Editor Replacement For Visio'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6955141572955582289</id><published>2009-03-20T15:43:00.013+02:00</published><updated>2009-03-29T21:00:04.975+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>MIX09 Sessions Videos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/ScOf0GOdp3I/AAAAAAAAAUA/JqoFkcV3Ft8/s1600-h/mix09.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 336px; height: 84px;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/ScOf0GOdp3I/AAAAAAAAAUA/JqoFkcV3Ft8/s400/mix09.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5315267702600607602" /&gt;&lt;/a&gt;&lt;a href="http://live.visitmix.com/"&gt;MIX09&lt;/a&gt; is a Web Design and Development Conference which is considered one of the most popular events for web professionals. The conference this year has already been launched in the last March 18th and will end in March 20th. To catchup with the event, you can watch the sessions through this link: &lt;a href="http://sessions.visitmix.com/MIX09/"&gt;MIX09 Sessions&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Update] 29th March, 2009&lt;br /&gt;MIX stuff collected all their videos in one page: &lt;a href="http://videos.visitmix.com/MIX09/All"&gt;Click Here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Update] 21st March, 2009&lt;br /&gt;Guy Burstein collected all the sessions in his blog post and made available for download. So that you can watch MIX09 videos offline: &lt;a href="http://blogs.msdn.com/bursteg/archive/2009/03/20/download-mix09-sessions-and-watch-offline.aspx"&gt;Download MIX09 Sessions and Watch Offline&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-6955141572955582289?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6955141572955582289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=6955141572955582289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6955141572955582289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6955141572955582289'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/03/mix09-sessions-videos.html' title='MIX09 Sessions Videos'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_C-lhvxiWQkk/ScOf0GOdp3I/AAAAAAAAAUA/JqoFkcV3Ft8/s72-c/mix09.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6804679915396099017</id><published>2009-03-20T15:11:00.011+02:00</published><updated>2009-03-28T23:39:01.268+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Software Security</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_C-lhvxiWQkk/ScOXVkaZ5EI/AAAAAAAAAT4/WwX8jZ1M660/s1600-h/ATT05777.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 286px; height: 400px;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/ScOXVkaZ5EI/AAAAAAAAAT4/WwX8jZ1M660/s400/ATT05777.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5315258382034789442" /&gt;&lt;/a&gt;In the world of Facebook, E-Commerce and Email; modern threats have emerged exploiting application level vulnerabilities more than ever, A simple bug in a web or desktop application could lead to hundreds thousands dollars loss and sensitive information disclosure. Hence the need for security measures on the application level. &lt;br /&gt;&lt;br /&gt;The CuttingEdge Club will organize a two hours session to discover the modern applications threats together with the mitigation techniques, discussing the different activities that should be done throughout the different phase of the software development life cycle to end with a more secure software.&lt;br /&gt;&lt;br /&gt;The session will be in Wednesday 25th March, 2009 - 5:30 PM, &lt;a href="http://www.itworx.com"&gt;ITWorx&lt;/a&gt; - Free Zone. The speaker is Ahmed Saafan, Information Security Engineer, Raya Security Services. &lt;br /&gt;&lt;br /&gt;&lt;div class="about" style="width:600px"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SRsloD52YPI/AAAAAAAAAP4/f3a_t5h1ULI/s1600-h/cuttingedge.png"&gt;&lt;img style="border:0px; float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 220px; height: 79px;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SRsloD52YPI/AAAAAAAAAP4/f3a_t5h1ULI/s200/cuttingedge.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267845559312867570" /&gt;&lt;/a&gt;CuttingEdgeClub is an &lt;a href="http://www.itworx.com"&gt;ITWorx&lt;/a&gt; technical seminar club for technology enthusiasts. Its mission is to provide an easy gateway to pertinent and updated technology information for a growing audience in a simple, pragmatic and accessible way. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-6804679915396099017?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6804679915396099017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=6804679915396099017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6804679915396099017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6804679915396099017'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/03/software-security.html' title='Software Security'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_C-lhvxiWQkk/ScOXVkaZ5EI/AAAAAAAAAT4/WwX8jZ1M660/s72-c/ATT05777.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-5164883071138200023</id><published>2009-03-18T16:27:00.033+02:00</published><updated>2009-03-28T23:39:49.464+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Blocking IP Addresses Using MMC</title><content type='html'>I was searching for a solution to block any communication with specific IP addresses. I have come to this solution using MMC (Microsoft Management Console). The following steps will allow you to block any communication - whatever the protocol is - with specific IP addresses or subnet:&lt;br /&gt;&lt;br /&gt;1. Open Start Manu &gt; Run &gt; Write "MMC". Then press Enter.&lt;br /&gt;2. In the Management Console &gt; File &gt; Add/Remove Snap-in...&lt;br /&gt;3. In the opened dialog, leave "Local Computer" as it's and click "Finish".&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/mmcb_3.png" border="0"/&gt;&lt;br /&gt;&lt;br /&gt;4. You will have a new node in the left tree called: "IP Secuirty Policies in Local Computer".&lt;br /&gt;5. Right click on this node and select "Create IP Security Policy".&lt;br /&gt;6. In the opened dialog, write "Block IP".&lt;br /&gt;7. Click Next till the end of the wizard and then "Finish".&lt;br /&gt;8. You will have an item in the left pane called: "Block IP". Right click on it and select "Properties".&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/mmcb_8.png" border="0"/&gt;&lt;br /&gt;&lt;br /&gt;9. In the opened dialog, click "Add".&lt;br /&gt;10. Go through the wizard, till you reach a step called: "IP Filter List".&lt;br /&gt;11. Click "Add". IP Filter Dialog will open.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/mmcb_11.png" border="0"/&gt;&lt;br /&gt;&lt;br /&gt;12. Modify the name of your IP Filter and click "Add" to add an IP filter policy.&lt;br /&gt;13. Click "Next. Leave "Source Address" as "My IP Address".&lt;br /&gt;14. In the destination address, you can select "A specific IP Address". You can also filter by DNS or subnet. Enter the IP address to block. Then click Next.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/mmcb_14.png" border="0"/&gt;&lt;br /&gt;&lt;br /&gt;15. Leave the protocol to be "Any" and click "Next".&lt;br /&gt;16. Then click "Finish".&lt;br /&gt;17. Apply all changes, and close all the opened windows. You may have to add "Block" action if it doesn't exist.&lt;br /&gt;18. After you finish, don't forget to write click on "Block IP" policy and select "Assign".&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/mmcb_18.png" border="0"/&gt;&lt;br /&gt;&lt;br /&gt;Now try to ping the blocked IP addresses. You should get "Destination Unreachable" message.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-5164883071138200023?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/5164883071138200023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=5164883071138200023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5164883071138200023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5164883071138200023'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/03/blocking-ip-addresses-using-mmc.html' title='Blocking IP Addresses Using MMC'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8815827708951236318</id><published>2009-03-17T13:41:00.014+02:00</published><updated>2009-03-28T23:40:55.067+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Maintenance Plans in SQL Server</title><content type='html'>Creating backups for your database is an essential task in every environment especially for critical data storage. But have you ever ask yourself how to create your backups in a periodic manner - say every week or so? If you was able to do so, how will you manage the space in your disk? Maybe you don't want to keep any backup files older than one month.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_C-lhvxiWQkk/Sb-iLOI3ViI/AAAAAAAAAS4/hiky1vqdSzU/s1600-h/maintenance.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 164px;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/Sb-iLOI3ViI/AAAAAAAAAS4/hiky1vqdSzU/s200/maintenance.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5314144398978012706" /&gt;&lt;/a&gt;The first solution you may think about is to create a SQL script and execute it in a custom job. But wait, SQL Server can do it for you and save alot of this implementation hassle. In the SQL Server, you have the option to create "Maintenance Plan" for your database. This plan provides you with more advanced options for creating backups for the data and the transactions logs.&lt;br /&gt;&lt;br /&gt;When you create a new plan, you will have to go through a configuration wizard. The interesting part is in the backup configurations. You can provide how often you want to backup your database (i.e every week, month or so). You also specify how long you want to keep the backup files and when to remove it (i.e You may remove any backups older than one month) so that you save your storage space. Another interesting point, you can create only one plan for more than one database. The plan can be configured also to create a separate backup folder for each database. &lt;br /&gt;&lt;br /&gt;The maintenance plan is a periodic task which needs a running job. This is why it requires a running SQL Server Agent in your database server.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-8815827708951236318?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8815827708951236318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=8815827708951236318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8815827708951236318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8815827708951236318'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/03/maintenance-plans-in-sql-server.html' title='Maintenance Plans in SQL Server'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_C-lhvxiWQkk/Sb-iLOI3ViI/AAAAAAAAAS4/hiky1vqdSzU/s72-c/maintenance.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-5980224608331108514</id><published>2009-03-09T14:13:00.009+02:00</published><updated>2009-03-28T23:42:21.972+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Stories From A Gaming Startup</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/SbUM2UxaBtI/AAAAAAAAASg/zAxJ6UOr43I/s1600-h/ATT71835.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 143px; height: 200px;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/SbUM2UxaBtI/AAAAAAAAASg/zAxJ6UOr43I/s200/ATT71835.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5311165462981773010" /&gt;&lt;/a&gt;CuttingEdgeClub organize a seminar in &lt;a href="http://www.itworx.com"&gt;ITWorx&lt;/a&gt; to elaborate a story about how gaming startup can emerge. The seminar is scheduled to be on Wednesday, 11th March, 2009 at 5:30 PM in &lt;a href="http://www.itworx.com"&gt;ITWorx&lt;/a&gt; - Free Zone. The session will be provided by Mostafa Ashour - Managing Partner, Khayal Interactive Entertainment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="about"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SRsloD52YPI/AAAAAAAAAP4/f3a_t5h1ULI/s1600-h/cuttingedge.png"&gt;&lt;img style="border:0px; float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 79px;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SRsloD52YPI/AAAAAAAAAP4/f3a_t5h1ULI/s200/cuttingedge.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267845559312867570" /&gt;&lt;/a&gt;CuttingEdgeClub is an ITWorx technical seminar club for technology enthusiasts. Its mission is to provide an easy gateway to pertinent and updated technology information for a growing audience in a simple, pragmatic and accessible way. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-5980224608331108514?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/5980224608331108514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=5980224608331108514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5980224608331108514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5980224608331108514'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/03/stories-from-gaming-startup.html' title='Stories From A Gaming Startup'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_C-lhvxiWQkk/SbUM2UxaBtI/AAAAAAAAASg/zAxJ6UOr43I/s72-c/ATT71835.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-1179066227485575886</id><published>2009-03-08T18:03:00.020+02:00</published><updated>2009-03-09T22:01:19.603+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinions'/><title type='text'>Resident Evil</title><content type='html'>Do you know about the time-bomb viruses? Those ones which start execution in a certain time frame. Today, I have a similar behavior but this time not a virus. It's an evil code.&lt;br /&gt;&lt;br /&gt;We have an application on the production environment which has been created seven years ago. The project seems to be working properly for a long time with no massive problems. However, an exception suddenly encountered when any user try to edit some data items.&lt;blockquote&gt;Microsoft VBScript runtime error '800a0006'&lt;br /&gt;Overflow: 'CInt'&lt;br /&gt;/newsline/newsline/dbshell.asp, line 641&lt;/blockquote&gt;The project was implemented in classic ASP and VB script. If you had the opportunity to work with this crappy-style languages, you can imagine how debugging in this kind of code is missy. So I had no way except to analyze the exception getting the most out of it. &lt;br /&gt;&lt;br /&gt;If you notice, it's an overflow exception. This means that CInt has got some large integer number to convert and failed to. After googling, I have found that there is a maximum limit for this method input and it's 32768. From a second look in the exception, you can see that it happens in a file called: "dbshell.asp". This leads to conclude that the number this method is trying to convert is retrieved from the database.&lt;br /&gt;&lt;br /&gt;This was actually a good guessing. In the production environment and after seven years, some data table in the database reached to have more than 33974 records. The method couldn't convert any sequence ID for any items with ID larger than 32768. The issue couldn't be captured in the quality test as this low level test case couldn't be considered or even thought to be problematic.&lt;br /&gt;&lt;br /&gt;The developer who wrote this code from seven years ago didn't imagine that some day the number of the records will reach this limit. The exception was resident to blow up after these long period. These lead us to an old lesson. At the time of building your application, you don't think that your application will last for long. You need to consider which data you think will go large and which is not. Hence you follow the appropriate guidance in the implementation.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-1179066227485575886?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/1179066227485575886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=1179066227485575886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1179066227485575886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1179066227485575886'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/03/resident-evil.html' title='Resident Evil'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3165375466669647926</id><published>2009-02-07T16:07:00.011+02:00</published><updated>2009-03-28T23:43:50.115+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Code Camp '09</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/SY2bANBDn2I/AAAAAAAAASQ/2HNcyCwsGYE/s1600-h/codecamp09.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 141px; height: 200px;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/SY2bANBDn2I/AAAAAAAAASQ/2HNcyCwsGYE/s400/codecamp09.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5300062764281339746" /&gt;&lt;/a&gt;dotNetWork will organize a day called: "Code Camp '09". The day will allow the development professional to introduce several technologies and new Microsoft products. dotNetWork is promising that the day would be one of the biggest events they have ever organized before.&lt;br /&gt;&lt;br /&gt;Code Camp '09 is a two day event. It will be held on: Thursday, February 19 and Friday, February 20, 2009. To have more information about the event and the agenda, please visit the event website: &lt;a href="http://cc.dotnetwork.org"&gt;Code Camp '09&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="about"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/SRspdXiX5HI/AAAAAAAAAQA/y9HfBBwUGgg/s1600-h/dotnetworkorg.png"&gt;&lt;img style="border:0px; float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 173px; height: 51px;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/SRspdXiX5HI/AAAAAAAAAQA/y9HfBBwUGgg/s400/dotnetworkorg.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267849773651059826" /&gt;&lt;/a&gt;.network.org user group is a group of youth who share the same passion for the development on .Net platform in Egypt. The group started in the last December 2007 with several technical events during the last year. For more information about the group, visit their website &lt;a href="http://www.dotnetwork.org"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-3165375466669647926?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3165375466669647926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=3165375466669647926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3165375466669647926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3165375466669647926'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2009/02/code-camp-09.html' title='Code Camp &apos;09'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_C-lhvxiWQkk/SY2bANBDn2I/AAAAAAAAASQ/2HNcyCwsGYE/s72-c/codecamp09.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-7772557069133656913</id><published>2008-11-23T00:42:00.030+02:00</published><updated>2008-12-05T19:57:09.259+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>ASP.NET MVC Routing Using XML Custom Configuration Settings</title><content type='html'>In ASP.NET MVC application, you need to add some routing code in the Application_Start of the Global.asax file to define your routing criteria. These lines of code take a shape of configuration settings for the MVC application and I was thinking if we can transfer these configurations line of codes to be XML settings in the web.config file. My target is to make the routing configuration in the web.config file as following:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/MvcConfigFile.jpg" style="border:1px dotted #000000;"/&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the later configurations define the Ignore and Routing lists of the MVC application. In the "Ignore" list, you define the URL criteria to be ignored by the MVC routing. In the "Map" list, you specify a list of the routes including the route name, controller and action. You can also define any optional parameter mappings for your actions. &lt;br /&gt;&lt;br /&gt;To do that, I have to create a custom configuration section: &lt;span style="font-style:italic;"&gt;MvcRouteConfigurationSectin&lt;/span&gt;. The section has a &lt;span style="font-style:italic;"&gt;IgnoreCollection&lt;/span&gt; - inherited from &lt;span style="font-style:italic;"&gt;ConfigurationElementCollection&lt;/span&gt; class - of IgnoreItem and another &lt;span style="font-style:italic;"&gt;RoutingCollection&lt;/span&gt; of RouteItem.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/MvcRouteConfigurationSection.png" style="border:1px dotted #000000;" /&gt;&lt;br /&gt;&lt;br /&gt;The solution will also add an extension method for RouteCollection object so that you will be able to map the configuration section in the web.config directly to your RouteTable.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/ExtensionMethod.png" style="border:1px dotted #000000;" /&gt;&lt;br /&gt;&lt;br /&gt;To use the project, you just need to include the MvcXmlRouting.dll in your MVC web project. Then you add the following line inside the configSection Tag in web.config:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/ConfigSection.png" style="border:1px dotted #000000;"/&gt;&lt;br /&gt;&lt;br /&gt;You then define the ignore and the routing configurations for your web application as defined earlier in the web.config. Finally, you will need to edit the RegisterRoutes method in the Global.asax file to add a couple of lines as following:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/MapRoute.png" style="border:1px dotted #000000;"/&gt;&lt;br /&gt;&lt;br /&gt;Now all your routing configuration will go to the web.config file. No need to edit the Global file anymore. However, changing the routes in the web.config still need to reset your IIS as the routing is registered in Application_Start.&lt;br /&gt;&lt;br /&gt;Download: &lt;a href="http://www.4shared.com/file/72704257/be508822/MvcXmlRouting_Binary.html"&gt;Binary&lt;/a&gt; | &lt;a href="http://www.4shared.com/file/72704321/19b0d1e7/MvcXmlRouting_Source.html"&gt;Source Code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The project is implemented using ASP.NET MVC Beta 1 and Visual Studio 2008. It's not guaranteed that this project or the related assemblies will properly work in earlier or newer version of ASP.NET MVC Framework.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fmnour.blogspot.com%2f2008%2f11%2fmvc-routing-using-custom-configuration.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fmnour.blogspot.com%2f2008%2f11%2fmvc-routing-using-custom-configuration.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/aspnet_mvc_routing_using_xml_custom_configuration.html"&gt;DZone - Vote Up!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ping Back Links:&lt;br /&gt;- &lt;a href="http://blog.51mvc.com/view/20"&gt;http://blog.51mvc.com/view/20&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-7772557069133656913?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/7772557069133656913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=7772557069133656913' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7772557069133656913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7772557069133656913'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/11/mvc-routing-using-custom-configuration.html' title='ASP.NET MVC Routing Using XML Custom Configuration Settings'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3294246021642038741</id><published>2008-11-13T14:18:00.014+02:00</published><updated>2008-11-19T21:34:06.180+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Surveys'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Industry'/><title type='text'>Hewitt Middle East Best Employer Study</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_C-lhvxiWQkk/SSMrfOGjKiI/AAAAAAAAAQY/7De7tt684Xc/s1600-h/Hewitt.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 103px;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/SSMrfOGjKiI/AAAAAAAAAQY/7De7tt684Xc/s320/Hewitt.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270103804315118114" /&gt;&lt;/a&gt;In the last December 2007, this blog hosted a quick &lt;a href="http://mnour.blogspot.com/2007/12/survey-software-industry-inside-egypt.html"&gt;survey&lt;/a&gt; to measure the different aspects of the software employers inside Egypt. I am glad to announce that there is another independent initiative showing up these days. &lt;a href="http://was7.hewitt.com/bestemployers/middleeast/eng/pages/about_middleeast.htm"&gt;Hewitt&lt;/a&gt; - a provider of HR outsourcing and consulting services - launches the &lt;a href="http://was7.hewitt.com/bestemployers/middleeast/eng/pages/index.htm"&gt;Best Employers in Middle East 2009&lt;/a&gt; study. The study aims to honor the leading organizations of Middle East as outstanding places to work. Hewitt conducts its Best Employer research in a number of markets, including Eastern Europe, Canada, Latin America and Asia. This survey is designed to be the largest employee research project ever undertaken in Middle East. Hewitt invites all the employers in the Middle East to participate in this survey. The survey will show how effective is your organization and wither it provides a workplace that engages the intellectual and emotional commitment of your employees or not. The study will provide a level of confidentiality so that the names of all participating organizations will be strictly confidential at all points of time. The exception will be those organizations that will be honored as a Hewitt Best Employer in Middle East.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-3294246021642038741?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3294246021642038741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=3294246021642038741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3294246021642038741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3294246021642038741'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/11/hewitt-middle-east-best-employer-study.html' title='Hewitt Middle East Best Employer Study'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_C-lhvxiWQkk/SSMrfOGjKiI/AAAAAAAAAQY/7De7tt684Xc/s72-c/Hewitt.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3531943739184728260</id><published>2008-11-12T19:41:00.029+02:00</published><updated>2008-11-14T21:01:08.203+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>On Finding the Arabic Needle in the e-Haystack</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SR3K5RinN9I/AAAAAAAAAQQ/EA67dSeXpeE/s1600-h/ATT53822.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 229px; height: 320px;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SR3K5RinN9I/AAAAAAAAAQQ/EA67dSeXpeE/s320/ATT53822.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5268590224403281874" /&gt;&lt;/a&gt;Lack of information is an issue, but lack of ability to reach the information is a much more serious issue. With internet getting appended everyday with million of new information pages, search engines become unconsciously mandatory to use.&lt;br /&gt;&lt;br /&gt;CuttingEdgeClub organize a seminar in &lt;a href="http://www.itworx.com"&gt;ITWorx&lt;/a&gt; to elaborate how search engines operates and to highlight the status of the rapidly growing Arabic-Web in particular.&lt;br /&gt;&lt;br /&gt;The seminar is scheduled to be on Wednesday, 19th November, 2008 at 5:30 PM in &lt;a href="http://www.itworx.com"&gt;ITWorx&lt;/a&gt; - Free Zone. The session will be provided by &lt;a href="http://www.linkedin.com/in/hanyabdelkawi"&gt;Hany Abdelkawi&lt;/a&gt;  - Project Manager, Link Development.&lt;br /&gt;&lt;br /&gt;&lt;div class="about"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SRsloD52YPI/AAAAAAAAAP4/f3a_t5h1ULI/s1600-h/cuttingedge.png"&gt;&lt;img style="border:0px; float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 79px;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SRsloD52YPI/AAAAAAAAAP4/f3a_t5h1ULI/s200/cuttingedge.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267845559312867570" /&gt;&lt;/a&gt;CuttingEdgeClub is an ITWorx Club aims to share information about the latest technologies among the IT community by organizing technical sessions and seminars in a regular base.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-3531943739184728260?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3531943739184728260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=3531943739184728260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3531943739184728260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3531943739184728260'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/11/on-finding-arabic-needle-in-e-haystack.html' title='On Finding the Arabic Needle in the e-Haystack'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_C-lhvxiWQkk/SR3K5RinN9I/AAAAAAAAAQQ/EA67dSeXpeE/s72-c/ATT53822.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3753667584052592502</id><published>2008-11-08T23:21:00.030+02:00</published><updated>2008-11-14T21:02:39.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>.NETWork.org 9th Gathering - Coming Out This November</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/SRYHPnMXsVI/AAAAAAAAANI/NX-FmLwBmDs/s1600-h/n32256529483_4537.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 282px;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/SRYHPnMXsVI/AAAAAAAAANI/NX-FmLwBmDs/s400/n32256529483_4537.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5266404779056673106" /&gt;&lt;/a&gt;.NETWork.org announced the next 9th Gathering to be held in 29th November. The event will be in CIC - Canadian International College and four speakers from ITWorx and Raya Software will be giving the sessions. Here is the list of the topics and speakers:&lt;table style="float:left"&gt;&lt;tr&gt;&lt;td width="300"&gt;&lt;span style="font-weight:bold;"&gt;BizTalk - SharePoint Integration.&lt;/span&gt;&lt;br /&gt;Hossam El-Deen M. Barakat&lt;br /&gt;Senior Software Developer | Raya Software&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight:bold;"&gt;Information Architecture&lt;/span&gt;&lt;br /&gt;Mostafa Mourad&lt;br /&gt;Team Leader | ITWorx&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="300"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;IIS 7&lt;/span&gt;&lt;br /&gt;Hossam Kamel&lt;br /&gt;Senior Software Engineer | ITWorx&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Applying Domain Driven Design on ASP.NET MVC&lt;/span&gt;&lt;br /&gt;Mohammed Meligy&lt;br /&gt;Senior Software Developer | Raya Software&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="about"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/SRspdXiX5HI/AAAAAAAAAQA/y9HfBBwUGgg/s1600-h/dotnetworkorg.png"&gt;&lt;img style="border:0px; float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 173px; height: 51px;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/SRspdXiX5HI/AAAAAAAAAQA/y9HfBBwUGgg/s400/dotnetworkorg.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267849773651059826" /&gt;&lt;/a&gt;.network.org user group is a group of youth who share the same passion for the development on .Net platform in Egypt. The group started in the last December 2007 with a total of eight technical events during the last 10 months. For more information about the group, visit their website &lt;a href="http://www.dotnetwork.org"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-3753667584052592502?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3753667584052592502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=3753667584052592502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3753667584052592502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3753667584052592502'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/11/networkorg-9th-gathering-comming-out.html' title='.NETWork.org 9th Gathering - Coming Out This November'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_C-lhvxiWQkk/SRYHPnMXsVI/AAAAAAAAANI/NX-FmLwBmDs/s72-c/n32256529483_4537.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3624754150439420684</id><published>2008-11-08T21:50:00.012+02:00</published><updated>2008-11-08T22:25:04.738+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Design Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>PRG Pattern - You're Already Doing it</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_C-lhvxiWQkk/SRX0KiKjljI/AAAAAAAAANA/x1MwP7zBf0s/s1600-h/image_thumb.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 374px; height: 166px;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/SRX0KiKjljI/AAAAAAAAANA/x1MwP7zBf0s/s400/image_thumb.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5266383801086613042" /&gt;&lt;/a&gt;Have you ever had this message dialog asking about resubmiting the data when you try to refresh a web page? This actually happen after submitting a form or enter your login information.&lt;br /&gt;&lt;br /&gt;One of the good practices when developing web application is to redirect the user after a successful posting request. This practice is refereed as PRG pattern (Post/Redirect/Get). The target is to avoid duplicate post requests from the client and providing a smooth navigation through the web application.&lt;br /&gt;&lt;br /&gt;What actually happen in PRG is that the browser try to send an HTTP 303 redirect request along with HTTP "Location" header. It's nice to know that something you're used to make as a default practice is actually a pattern. The following is a sample code in ASP.NET MVC illustrating the usage of the pattern:&lt;br /&gt;&lt;blockquote&gt;[Authorize]&lt;br /&gt;[AcceptVerbs(HttpVerbs.Post)]&lt;br /&gt;public ActionResult ChangePassword(string currentPassword, string newPassword, string confirmPassword)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (ModelState.IsValid)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MembershipUser currentUser = Provider.GetUser(User.Identity.Name, true /* userIsOnline */);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Attempt to change password&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool changeSuccessful = currentUser.ChangePassword(currentPassword, newPassword);&lt;br /&gt;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (changeSuccessful)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return RedirectToAction("ChangePasswordSuccess");   //PRG Pattern recommendation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return View();&lt;br /&gt;}&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-3624754150439420684?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3624754150439420684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=3624754150439420684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3624754150439420684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3624754150439420684'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/11/prg-pattern-for-web-development.html' title='PRG Pattern - You&apos;re Already Doing it'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_C-lhvxiWQkk/SRX0KiKjljI/AAAAAAAAANA/x1MwP7zBf0s/s72-c/image_thumb.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-581146264100325865</id><published>2008-10-01T20:51:00.005+02:00</published><updated>2008-10-02T21:13:11.628+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>NeatUpload - File Upload Open Source Library</title><content type='html'>NeatUpload is a very nice open source ASP.NET component which allow you to make file uploads to file system or database storage with customized AJAX-like progress bar indicators. The library is made in .NET and it works under Mono's XSP/mod_mono or Microsoft's ASP.NET implementation. You can easily download the source code and even modify it to match the required behavior of your project. &lt;br /&gt;&lt;br /&gt;The library features 2 custom web controls:  InputFile allows the user to select a file to upload, and ProgressBar displays the upload progress either inline or in a popup. ProgressBar uses AJAX-style refreshless updates on modern browsers when JavaScript is available, but also allows users without JavaScript to see upload progress. HttpModule is included as well to get the upload progress and handle the upload context states. &lt;br /&gt;&lt;br /&gt;You can download and give it a try from this link: &lt;a href="http://www.brettle.com/neatupload"&gt;Brettle Development NeatUpload&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-581146264100325865?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/581146264100325865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=581146264100325865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/581146264100325865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/581146264100325865'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/10/neatupload-file-upload-open-source.html' title='NeatUpload - File Upload Open Source Library'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8768893550139047667</id><published>2008-10-01T20:26:00.019+02:00</published><updated>2008-10-11T23:56:36.018+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Microsoft and jQuery Engagement</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SOQAELI9p8I/AAAAAAAAAMI/dZ1zEVv9Kvo/s1600-h/jQuery.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SOQAELI9p8I/AAAAAAAAAMI/dZ1zEVv9Kvo/s200/jQuery.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252323137130702786" /&gt;&lt;/a&gt;It seems that Microsoft is going to include jQuery by default in the new releases of Visual Studio and ASP.NET MVC in the near future. jQeury is a very nice and handy Javascript library which has an increasing acceptance recently in the web development community. Here is a part of the &lt;a href="http://ejohn.org/"&gt;John Resig&lt;/a&gt; post in &lt;a href="http://jquery.com/blog/2008/09/28/jquery-microsoft-nokia/"&gt;jQuery Blog&lt;/a&gt; about this news: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Microsoft is looking to make jQuery part of their official development platform. Their JavaScript offering today includes the ASP.NET Ajax Framework and they’re looking to expand it with the use of jQuery. This means that jQuery will be distributed with Visual Studio (which will include jQuery intellisense, snippets, examples, and documentation).&lt;br /&gt;&lt;br /&gt;Additionally Microsoft will be developing additional controls, or widgets, to run on top of jQuery that will be easily deployable within your .NET applications. jQuery helpers will also be included in the server-side portion of .NET development (in addition to the existing helpers) providing complementary functions to existing ASP.NET AJAX capabilities.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-8768893550139047667?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8768893550139047667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=8768893550139047667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8768893550139047667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8768893550139047667'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/10/microsoft-and-jquery-engagement.html' title='Microsoft and jQuery Engagement'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_C-lhvxiWQkk/SOQAELI9p8I/AAAAAAAAAMI/dZ1zEVv9Kvo/s72-c/jQuery.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3874224670509674461</id><published>2008-10-01T19:34:00.012+02:00</published><updated>2008-10-02T01:07:44.579+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Javascript - Access Denied When Calling Window Opener</title><content type='html'>We usually use the &lt;span style="font-style:italic;"&gt;"open"&lt;/span&gt; method in the window object to open a new window in Javascript. However, sometimes you need to change some values in the parent window depending on the changes of the new window elements values or you may need to call a method in the parent window from the child one. To do so, you can use the &lt;span style="font-style:italic;"&gt;"opener"&lt;/span&gt; property in the window object to access the parent page elements. The following Javascript statement access an input element in the parent window with "txtEmail" ID and update its value:&lt;br /&gt;&lt;blockquote&gt;window.opener.document.getElementById("txtEmail").value = "mohammedn@mailhost.com";&lt;br /&gt;&lt;/blockquote&gt;You can even call a method direct in the parent window from the new opened one:&lt;br /&gt;&lt;blockquote&gt;window.opener.SomeMethodInTheParentWindow();&lt;/blockquote&gt;However, you may get "Access Denied" or "Permission Denied" message when trying to access the "opener" property in the popup window. This usually because you call the window.open with the full path of the pop window:&lt;br /&gt;&lt;blockquote&gt;window.open('http://www.domain.com/accounts/register_popup.aspx');&lt;br /&gt;&lt;/blockquote&gt;To resolve this issue, use the relative path of the popup page instead of the full path when opening it and you will be able to safely access the opener property of the window.&lt;br /&gt;&lt;blockquote&gt;window.open('accounts/register_popup.aspx');&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-3874224670509674461?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3874224670509674461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=3874224670509674461' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3874224670509674461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3874224670509674461'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/10/javascript-access-denied-when-calling.html' title='Javascript - Access Denied When Calling Window Opener'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-552620481832182456</id><published>2008-09-05T22:46:00.045+02:00</published><updated>2008-09-12T23:47:01.514+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>TeamCity - Continuous Integration Server and Build Management Tool</title><content type='html'>&lt;a href="http://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt; is a continuous integration &amp;amp; build management solution for both .NET and Java development. &lt;a href="http://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt; is developed by &lt;a href="http://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; - the producer of the famous &lt;a href="http://www.jetbrains.com/resharper/index.html"&gt;Resharper&lt;/a&gt; - and shipped in two editions: &lt;span style="font-style: italic;"&gt;Professional Edition&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;Enterprise Edition&lt;/span&gt;. The Professional Edition of the team city is free and you can use it without a need for any kind of licenses. This edition is more than enough for small and medium size company or teams.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/SMLoVjD7IyI/AAAAAAAAALg/2PMK8TQxGIQ/s1600-h/main_screen.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/SMLoVjD7IyI/AAAAAAAAALg/2PMK8TQxGIQ/s320/main_screen.png" alt="" id="BLOGGER_PHOTO_ID_5243008373099275042" border="0" /&gt;&lt;/a&gt;Build Servers are very useful tool in any development environment where you need to track the build state of your team code. It make sure that all the committed code is not in a breaking state. The integration with the build servers and the continuous integration tools like SVN and sourcesafe help you to assign the responsibilities of the breaking code to specific developer to fix.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SMHJ8RfTxDI/AAAAAAAAAKw/vGiKkPsau48/s1600-h/create_account.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SMHJ8RfTxDI/AAAAAAAAAKw/vGiKkPsau48/s320/create_account.png" alt="" id="BLOGGER_PHOTO_ID_5242693478560023602" border="0" /&gt;&lt;/a&gt;TeamCity is a a very powerful build server which has many features to facilitate your project building process. You can download the last version of TeamCity from &lt;a href="http://www.jetbrains.com/teamcity/"&gt;here&lt;/a&gt;. I have downloaded the last version and played a little bit with it and it seems very interesting tool. When you run it for the first time, you will be asked to make a new account. Then you will have to create a new project by entering the main project information. Afterwords, you will be asked to enter the general settings of the project. Then, you will have to enter a new build configuration. You can have more than one build configuration in the same project allowing a kind of switching for the build needs and requirements for your project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SMHM2E_sXNI/AAAAAAAAAK4/aH9zU9AqIBU/s1600-h/General_Settings.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SMHM2E_sXNI/AAAAAAAAAK4/aH9zU9AqIBU/s320/General_Settings.png" alt="" id="BLOGGER_PHOTO_ID_5242696670661860562" border="0" /&gt;&lt;/a&gt;In "Build Configuration" step, you need to define the build numbers format. You can have your own format for the builds numbers like "CG-01" or "MX-01" or whatever suitable format. You can define the criteria of the build failing. For example, you can define the failing criteria if the building execution itself failed, the project test failed, error reported by the build runner and/or the build take more than a specified number of minutes (timeout).&lt;br /&gt;&lt;br /&gt;Also in this page there is a nice feature called "Status Widget". This means you can include the status of your build in any external web page or whatever external tracking site you may use internally. When you enable it, you will have to copy and paste small HTML and CSS tags inside this external page to show your build status.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/SMHPXERaKXI/AAAAAAAAALA/eyqO8BKvYvE/s1600-h/build_runner.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/SMHPXERaKXI/AAAAAAAAALA/eyqO8BKvYvE/s320/build_runner.png" alt="" id="BLOGGER_PHOTO_ID_5242699436426668402" border="0" /&gt;&lt;/a&gt;Then you will be asked to enter the build runner information in "Build Runner" step. In this step, you need to define the platform you will use to build the project. Team City provide several build runners for .NET and Java projects as well. I am working with .NET so I choose MSBuild as a build runner. Then I specified the build file virtual path which is the solution file of my project (ex. teamcitytest.sln). When you select MS Build, you define the suitable .NET Framework version for the build. You also define more command line parameters for MSBuild.exe if required.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/SMHQn4eTJzI/AAAAAAAAALI/H-2bqVaRtqE/s1600-h/vc_settings.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/SMHQn4eTJzI/AAAAAAAAALI/H-2bqVaRtqE/s320/vc_settings.png" alt="" id="BLOGGER_PHOTO_ID_5242700824828913458" border="0" /&gt;&lt;/a&gt;Then, you will enter the version control settings like the checkout path if it's different than the default directory of the agent. You can also make automatic labeling if the build succeeded.&lt;br /&gt;&lt;br /&gt;There is another nice setting in TeamCity which allow you to run the build periodically. You set it by clicking "Edit Configuration Settings" in the top panel of the build progress screen. Then in the left tabs, choose "Build Triggering". Select "Other Triggering". Check "Automatically start a new build when the previous build failed." and specify the time intervals between the builds.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This was a very quick walkthrough for TeamCity. I really like it and recommend it for your development team as a very efficient and customizable build server.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-552620481832182456?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/552620481832182456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=552620481832182456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/552620481832182456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/552620481832182456'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/09/teamcity-interesting-build-server.html' title='TeamCity - Continuous Integration Server and Build Management Tool'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_C-lhvxiWQkk/SMLoVjD7IyI/AAAAAAAAALg/2PMK8TQxGIQ/s72-c/main_screen.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-5934398183193135228</id><published>2008-06-20T02:13:00.005+03:00</published><updated>2008-06-20T03:11:47.849+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Google Code Jam 08 - Registeration Started</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://code.google.com/codejam/"&gt;&lt;img style="float:right; border: 1px dotted rgb(0, 0, 0); margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/SFrpRJLcfXI/AAAAAAAAAJs/xZ3TJTchPE4/s320/codejam.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5213735999365741938" /&gt;&lt;/a&gt;Google Code Jam is a coding competition in which professional and student programmers are asked to solve complex algorithmic challenges in a limited amount of time. The contest is all-inclusive: Google Code Jam lets you program in the coding language and development environment of your choice. &lt;br /&gt;&lt;br /&gt;Google Code Jam begins in July and continues in August, when you will compete in online rounds against contestants from around the world. The Top 500 participants will advance to onsite competitions at a local Google office to compete against those in their region (Asia Pacific; Europe, Middle East and Africa; and the Americas). The Top 100 will participate in the final round at the Google Headquarters in Mountain View, California on Friday, November 14. &lt;br /&gt;&lt;br /&gt;Google offers more than $80,000 in cash prizes for the winners. Don't be left out! &lt;a href="http://code.google.com/codejam/"&gt;Make sure to register&lt;/a&gt; between June 17 and July 17, and show your coding creativity in Google Code Jam.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-5934398183193135228?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/5934398183193135228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=5934398183193135228' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5934398183193135228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5934398183193135228'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/06/google-code-jam-08-registeration.html' title='Google Code Jam 08 - Registeration Started'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_C-lhvxiWQkk/SFrpRJLcfXI/AAAAAAAAAJs/xZ3TJTchPE4/s72-c/codejam.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6821453473223092949</id><published>2008-06-13T22:02:00.024+03:00</published><updated>2008-06-14T13:59:00.270+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinions'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Code Style Review Using Microsoft Source Analysis</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/SFLkglGDdkI/AAAAAAAAAJk/MCuH0G9EzMs/s1600-h/sourcelogo.png"&gt;&lt;img style="float:right;border: 1px dotted rgb(0, 0, 0); margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/SFLkglGDdkI/AAAAAAAAAJk/MCuH0G9EzMs/s320/sourcelogo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211478967185536578" /&gt;&lt;/a&gt;Today, I gave a try for &lt;a href="http://code.msdn.microsoft.com/sourceanalysis"&gt;Microsoft Source Analysis&lt;/a&gt; aka StyleCop. The tool was internally used inside Microsoft and it's now publicly &lt;a href="http://code.msdn.microsoft.com/sourceanalysis"&gt;released&lt;/a&gt;. It nicely integrates with Microsoft Visual Studio with the ability to attach the analysis process with the project build - &lt;a href="http://blogs.msdn.com/sourceanalysis/pages/source-analysis-msbuild-integration.aspx"&gt;See this post&lt;/a&gt;. The tool scan all your C# code and gives you hints for better coding style according to the best practices followed in writing C# code. It gives for example notes regarding the missing comments, formating, missing or extra spaces, extra blank lines and unnecessary brackets.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/SFLVXp6MHyI/AAAAAAAAAJE/ln2h1kl-F30/s1600-h/solutionexp.png"&gt;&lt;img style="float:right; border: 1px dotted rgb(0, 0, 0); margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/SFLVXp6MHyI/AAAAAAAAAJE/ln2h1kl-F30/s400/solutionexp.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211462321184710434" /&gt;&lt;/a&gt;Here are some sample error messages resulted after running the Source Analysis on one of my projects&lt;br /&gt;&lt;br /&gt;- The class must have a documentation header.&lt;br /&gt;- The property must not be placed on a single line. The opening and closing curly brackets must each be placed on their own line.&lt;br /&gt;- Property names begin with an upper-case letter: projectspath.&lt;br /&gt;- All using directives must be placed inside of the namespace.&lt;br /&gt;- The body of the if statement must be wrapped in opening and closing curly brackets. &lt;br /&gt;- Statements or elements wrapped in curly brackets must be followed by a blank line. &lt;br /&gt;- The code must not contain multiple blank lines in a row.&lt;br /&gt;- All properties must be placed after all constructors.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/SFLdWsVQupI/AAAAAAAAAJU/A-q-3PuKyW4/s1600-h/builderrors.png"&gt;&lt;img style="margin:0 0 10px 10px; border: 1px dotted rgb(0, 0, 0); cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/SFLdWsVQupI/AAAAAAAAAJU/A-q-3PuKyW4/s400/builderrors.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211471100748282514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, there is some drawbacks regarding the tool like it targets only C# developers. More so it can't recognize the spelling mistakes in the code and comments which is one of the most common issues. Another point is that the tool is not flexible regarding its guidelines rules. It doesn't give you the option to exclude a rule in the next time of the analysis scan. For example, it consider putting a preceding underscore in the class private members as a breaking style. However, it is common for most of the C# developers. I think there is already a &lt;a href="http://www.nikhilk.net/Entry.aspx?id=197"&gt;debate&lt;/a&gt; about the best style guidelines for C# coding to follow. The issue even seems to have some &lt;a href="http://blogs.msdn.com/sourceanalysis/archive/2008/05/25/a-difference-of-style.aspx"&gt;historical sides.&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I really recommend this tool if you want your team to follow the basics of the C# coding guidelines without caring much about going in details while reviewing their code. It just help you, so that you ignore all the small crappy notes giving all your attention to the real massive mistakes in the coding logic and modules interactions.&lt;br /&gt;&lt;br /&gt;You can find more about the tool releases and the future expectations in the &lt;a href="http://blogs.msdn.com/sourceanalysis/"&gt;Source Analysis blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-6821453473223092949?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6821453473223092949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=6821453473223092949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6821453473223092949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6821453473223092949'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/06/automated-code-review-using-microsoft.html' title='Code Style Review Using Microsoft Source Analysis'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_C-lhvxiWQkk/SFLkglGDdkI/AAAAAAAAAJk/MCuH0G9EzMs/s72-c/sourcelogo.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8080384690774721868</id><published>2008-06-12T22:35:00.050+03:00</published><updated>2008-06-16T12:02:20.798+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>MbUnit 2.4 - Avoiding Crappy Data Resulted From The Test</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SFGyGsuWB0I/AAAAAAAAAIs/mMZDhR8pWto/s1600-h/mbunitlogo.PNG"&gt;&lt;img style="float:right;border: 1px dotted rgb(0, 0, 0); margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SFGyGsuWB0I/AAAAAAAAAIs/mMZDhR8pWto/s400/mbunitlogo.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5211142071998875458" /&gt;&lt;/a&gt;One of the nice features in MBUnit 2.4, is the ability to rollback the crappy data in the database resulted from running subsequent test methods. This is really interesting because this crappy data can become a nightmare during the application development or even after the deployment. You will spend pretty much time exploring your data to filter the dirty ones which can lead sometimes to some mistakes.&lt;br /&gt;&lt;br /&gt;MbUnit give you the ability to rollback any changes made in the database during the test. Using MbUnit 2.4, this can be done by referring MBUnit.Framework.2.0 in the project references and using RollBack2 attribute for each test method.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[Test]&lt;br /&gt;[RollBack2]&lt;br /&gt;public void InsertNewProductTest()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Product product = Product.CreateNew('Nokia 800', 2300, true);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assert.AreEqual('Nokia 800', product.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assert.AreEqual(2300, product.Price);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assert.AreEqual(true, product.InStock)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProductRepository.Persist(product);&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In the later example, any changes made in the database by persisting the Product object will be rolled back after the test execution. This will keep your tables clean   containing only your application live data.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/SFKv1q0xLyI/AAAAAAAAAI0/rMzb85zxRIU/s1600-h/dtc-settings-modified.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/SFKv1q0xLyI/AAAAAAAAAI0/rMzb85zxRIU/s400/dtc-settings-modified.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211421055384629026" /&gt;&lt;/a&gt;MBUnit uses &lt;span style="font-style: italic;"&gt;TransactionScope&lt;/span&gt; in &lt;span style="font-style:italic;"&gt;System.Transactions&lt;/span&gt; to provide the rollback functionality. However, you will need to set some security configurations for the DTC settings in order to make the &lt;span style="font-style: italic;"&gt;TransactionScope &lt;/span&gt;properly work. To set these settings, open the &lt;span style="font-style:italic;"&gt;Component Services&lt;/span&gt; in the &lt;span style="font-style:italic;"&gt;Administrative tools&lt;/span&gt;. Then, show the properties of your computer and select &lt;span style="font-style: italic;"&gt;MSDTC&lt;/span&gt; tab. Open the &lt;span style="font-style: italic;"&gt;Security configurations&lt;/span&gt; and setup the needed settings for the remote and local authorization of the transactions on your machine.&lt;br /&gt;&lt;br /&gt;As a side note, you are able to track the operating transactions by putting some break points inside your test method. Then, in the &lt;span style="font-style:italic;"&gt;Component Services&lt;/span&gt; under the &lt;span style="font-style:italic;"&gt;Transaction list&lt;/span&gt; you will find your active transactions listed there. More so you can check the &lt;span style="font-style:italic;"&gt;Transaction Statistics&lt;/span&gt; to track the committed and aborted transactions of your test operations.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-8080384690774721868?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8080384690774721868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=8080384690774721868' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8080384690774721868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8080384690774721868'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/06/mbunit-24-rolling-back-database-test.html' title='MbUnit 2.4 - Avoiding Crappy Data Resulted From The Test'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_C-lhvxiWQkk/SFGyGsuWB0I/AAAAAAAAAIs/mMZDhR8pWto/s72-c/mbunitlogo.PNG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-1503968447066194115</id><published>2008-04-18T11:09:00.057+02:00</published><updated>2008-04-23T16:08:22.958+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinions'/><title type='text'>Thinking In REST</title><content type='html'>REST or WS-*? The &lt;a href="http://wanderingbarque.com/nonintersecting/2006/11/29/they-cant-hear-you/"&gt;debate&lt;/a&gt;  which will never end. While REST is taking the lead gradually, the community see many &lt;a href="http://www.w3.org/2007/01/wos-papers/gall"&gt;drawbacks in using the traditional WS-*&lt;/a&gt;. The complexity and overhead in using WS-*, REST simplicity and how they fit the web architecture are always the main points of the argument. REST is simple, that is it. It has nothing to deal with except three things: Resources, Verbs and URIs. The idea of making use of the HTTP standards to accomplish all the needed CRUD operations on the resources is really interesting from the service development perspective.&lt;br /&gt;&lt;br /&gt;It was clear from the beginning of the WS-* evolution that WS-* violates and ignores the architecture of the Web. It replaces the concept that the Web is identified by URIs to the concept that the services is identified by WS addresses. However, in the RESTful architecture, all the addressing is through URIs. This creates a homogeneous architecture comparing to how the web is actually constructed. Even dealing with URIs as your default addressing help in promoting your service in the search engines results and making it more reachable by your consumers.&lt;br /&gt;&lt;br /&gt;WSDL doesn't give you much information about the semantic and logical interactions between the services methods. It just provide a listing for the service methods names, parameters and data types. You can't know for example what shall you need to call first to accomplish a specific task or what this service is actually doing. This is not the case in the RESTful services where you can build you own service documentation. You provide a custom HTTP GET request returning an HTML response with the allowed operations for this specific URI along with any custom documentation you may need to attach. However, you still able to describe your services using the &lt;a href="https://wadl.dev.java.net/wadl20061109.pdf"&gt;WADL Language&lt;/a&gt; - the WSDL equivalent - in case you still need to use a descriptive language for your RESTful services.&lt;br /&gt;&lt;br /&gt;Another point to mention is about how REST can make use of the HTTP protocol standards. Suppose you want to make a request to some WS-* service and get the response in several formats. You will need to pass the required response type to the service method or even make a separate method for each type! Neither of the two solutions is convenient. In REST, you can make a solid use of the standard HTTP header. You simply modify the "Accept" field in the HTTP request header with the required content-type of the response. In the server side, you will receive the required content-type in the request header so that you will be able to respond with the corresponding format. This way you save the confusion of your service consumers and make uses of the HTTP header to provide some kind of a separation between the needed request parameters and the other non-related ones.&lt;br /&gt;&lt;br /&gt;Another point is about error handling. In REST, you are able to make use of the &lt;a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes"&gt;standard HTTP status codes&lt;/a&gt; in a very elegant way. You may respond with standard error 505 for example if the requested resource is not found or with error 401 if you're not authorized to access the resource. So you have a rich standard protocol to build your own services on.&lt;br /&gt;&lt;br /&gt;RESTful architecture starts to get more and more &lt;a href="http://www.25hoursaday.com/weblog/2007/11/15/WSIsToRESTAsTheoryIsToPractice.aspx"&gt;acceptance in the web development community&lt;/a&gt;. Microsoft provide RESTful capabilites in its &lt;a href="http://www.infoq.com/news/2008/01/wcf-web-programming-resources"&gt;WCF Web Programming Model&lt;/a&gt;. Google, Yahoo, Amazon and all the big entities are now digging in the RESTful Services. There is something there you should start to care about.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-1503968447066194115?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/1503968447066194115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=1503968447066194115' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1503968447066194115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1503968447066194115'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/04/thinking-in-rest.html' title='Thinking In REST'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-7205934051152275561</id><published>2008-04-11T21:54:00.008+02:00</published><updated>2008-04-18T16:59:44.603+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Seekda - Seeking Services On The Web</title><content type='html'>SOA is now one of the most valuable options in building integrable and loosely-coupled applications. As much as the number of the web-services increases on the web, indexing the services to be reachable by the seekers became a vital need. &lt;a href="http://seekda.com/"&gt;seekda!&lt;/a&gt; - by &lt;a href="http://www.sti-innsbruck.at/"&gt;Semantic Technology Institute (STI)&lt;/a&gt; - is one of the nice efforts to index the business services around the Web. The project is based on the results of another research project funded by the European Union called &lt;a href="http://dip.semanticweb.org/"&gt;DIP&lt;/a&gt; - which started on 1st January 2004 and came to an end officially on 31 Dec 2006 with total funding of €16.3 M. The project acts like a link between the services providers and service consumers aiming to increase the transparency of the services market across the web.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
google_ad_client = "pub-6699943802796732";
//728x90, created 12/23/07
google_ad_slot = "8172850607";
google_ad_width = 728;
google_ad_height = 90;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25809080-7205934051152275561?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/7205934051152275561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25809080&amp;postID=7205934051152275561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7205934051152275561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7205934051152275561'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/04/soa-and-seeking-services.html' title='Seekda - Seeking Services On The Web'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='03976611245019359209'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>