<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-25809080</id><updated>2012-02-01T02:22:48.121+02:00</updated><category term='Surveys'/><category term='MVC'/><category term='Software Engineering'/><category term='SQL'/><category term='General News'/><category term='Javascript'/><category term='OpenXML'/><category term='REST'/><category term='SQL Server'/><category term='Windows Workflow Foundation'/><category term='.Net'/><category term='AJAX'/><category term='Tips'/><category term='Management'/><category term='Opinions'/><category term='Security'/><category term='SOA'/><category term='Web'/><category term='ASP.NET'/><category term='Testing'/><category term='Technology News'/><category term='Scrum'/><category term='Tools'/><category term='Methodologies'/><category term='Events'/><category term='Networks'/><category term='Design Patterns'/><category term='Software Industry'/><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?max-results=100'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</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='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=633492930963468166' title='3 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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=3294246021642038741' title='1 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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>1</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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3049465201752626960</id><published>2008-04-05T01:29:00.009+02:00</published><updated>2008-04-05T01:49:40.021+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenXML'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Open XML Appears to Win ISO Approval</title><content type='html'>After more than 14 months of intensive review, a Joint Technical Committee of the International Standardization Organization (ISO) and the International Electrotechnical Commission (IEC) has concluded its formal process to evaluate Ecma International’s submission of the Draft International Standard (DIS) 29500: Office Open XML (Open XML). While the final vote has not yet been announced formally, publicly available information appears to indicate the proposed Open XML standard received extremely broad support. Open XML now joins HTML, PDF and ODF as ISO- and IEC-recognized open document format standards. Read the full story &lt;a href="http://www.microsoft.com/presspass/press/2008/apr08/04-01OpenXMLVotePR.mspx"&gt;here&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-3049465201752626960?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3049465201752626960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=3049465201752626960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3049465201752626960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3049465201752626960'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/04/open-xml-wins-iso-approval.html' title='Open XML Appears to Win ISO Approval'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6086392550291271595</id><published>2008-03-24T00:21:00.092+02:00</published><updated>2008-06-21T22:22:48.970+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>jQuery Validation Plugin</title><content type='html'>We start to see several &lt;a href="http://docs.jquery.com/Plugins"&gt;plugins&lt;/a&gt; in the web based on the jQuery library. I have the chance today to work a bit with a plugin called: &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/"&gt;jQuery Validation Plugin&lt;/a&gt; by &lt;span style="font-style:italic;"&gt;Jörn Zaefferer&lt;/span&gt; - which enable you to apply client validation to your web forms using jQuery. &lt;br /&gt;&lt;br /&gt;To get started, you have to download the plugin files from &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/"&gt;this link&lt;/a&gt;. And sure the jQuery library as well: &lt;a href="http://jquery.com/"&gt;jQuery 1.2.2&lt;/a&gt;. Then, you should have: &lt;span style="font-style:italic;"&gt;jquery.validate.js&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;jquery.js&lt;/span&gt; files reside on your project somewhere and linked in your markup.&lt;br /&gt;&lt;blockquote&gt;IMPORTANT NOTE: I had a problem when using jquery.validate with the new vesrions - higher than 1.2.2 - of jQuery library. jquery.validate uses functions in jQuery library which no longer exist. &lt;/blockquote&gt;&lt;br /&gt;The following sample is the simplest one. You use the selector to get the form element. Then, you call the validate function.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;script language=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready( function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;#simpleSignUp&amp;quot;).validate();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In this case, you will have to set some predefined metadata in the &lt;span style="font-style:italic;"&gt;class &lt;/span&gt;attribute of the elements telling the library the required rules to apply for the form inputs.&lt;br /&gt;&lt;blockquote&gt;&amp;lt;form id=&amp;quot;simpleSignUpForm&amp;quot; action=&amp;quot;&amp;quot; method=&amp;quot;get&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;firstname&amp;quot; class=&amp;quot;required&amp;quot; minlength=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;lastname&amp;quot; class=&amp;quot;required&amp;quot; minlength=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;username&amp;quot; class=&amp;quot;required&amp;quot; minlength=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;email&amp;quot; class=&amp;quot;required email&amp;quot; minlength=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;password&amp;quot; class=&amp;quot;required&amp;quot; minlength=&amp;quot;8&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;website&amp;quot; class=&amp;quot;url&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Submit&amp;quot; /&amp;gt; &lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In this case, the plugin will use some defaults error messages for validating the inputs. However, you can have more controls on the errors and rules. The following sample show in details how you can validate a full sign up form elements by specifying the rules with the associated error messages. In this sample, you won't have to apply any CSS styles as you already defines explicitly your rules.&lt;br /&gt;&lt;blockquote&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready( function() {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;#signupForm&amp;quot;).validate({&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rules:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;username:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required:true,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;minlength:2&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;password:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required:true,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;minLength:5&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;confirm_password:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required:true,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;minlength:5,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;equalTo:&amp;quot;#password&amp;quot;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;email:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required:true,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;email:true&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;topic:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required:&amp;quot;#newsletter:checked&amp;quot;,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;minLength:2&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;agree:&amp;quot;required&amp;quot;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messages:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;username:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required:&amp;quot;Please enter a username&amp;quot;,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;minLength:&amp;quot;Your username must consist of at least 2 characters&amp;quot;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;password:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required:&amp;quot;Please provide a password&amp;quot; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;minLength:&amp;quot;Your password must be at least 5 characters long&amp;quot;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;confirm_password:{&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required:&amp;quot;Please provide a password&amp;quot;,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;minLength:&amp;quot;Your password must be at least 5 characters long&amp;quot;,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;equalTo: &amp;quot;Please enter the same password as above&amp;quot;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;email: &amp;quot;Please enter a valid email address&amp;quot;,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;agree: &amp;quot;Please accept our policy&amp;quot;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;google_ad_client = "pub-6699943802796732";google_ad_width = 728;google_ad_height = 90;google_ad_format ="728x90_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "f6f6f6"; google_color_bg = "f6f6f6";google_color_link = "550296";google_color_text = "000000";google_color_url = "550296";&lt;/script&gt;&lt;br /&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;&lt;br /&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;For more information about the methods you can use for the validation, &lt;a href="http://docs.jquery.com/Plugins/Validation"&gt;check it here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The way you define your rules and messages are unified and configurable. You define a message per rule which is extremely a need in any web project. It's common to have several validation rules with different error messages in the same web form. When I see this style, I just remember the &lt;a href="http://weblogs.asp.net/fredriknormen/archive/2007/11/28/defensive-programming-and-design-by-contract-on-a-routine-level.aspx"&gt;Design by Contract&lt;/a&gt; style in which your requirements (contract) are easily mapped to rules (benefits and obligations). It's similar as you put all your quality matrix in one place. Besides, it's easy to modify as like as you set some configurations to your web form!&lt;br /&gt;&lt;br /&gt;Another point to mention is the different scenarios you can have and how this library fit it. In the last sample, you can see how you check for password confirmation, input formats (emails, URLs ... etc.) and user selections.&lt;br /&gt;&lt;br /&gt;You can modify the CSS style of your validation errors - i.e how the input controls will look like in case of a validation error occurred. You simply modify the following snippet to have different look for the validated inputs.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;div.error { display: none; }        &lt;br /&gt;input { border: 1px solid black; }        &lt;br /&gt;input:focus { border: 1px dotted black; }        &lt;br /&gt;input.error { border: 1px dotted red; }&lt;/blockquote&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/sample_form_validation.png" style="border-style:dotted; border-color: #a0a0a0; border-width:1px" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;This plugin is perfect for &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;displaylang=en"&gt;ASP.NET MVC&lt;/a&gt;. Actually, there is already some tries like &lt;a href="http://www.codeplex.com/MvcValidatorToolkit"&gt;Validator Toolkit for ASP.NET MVC&lt;/a&gt; which enable client and server side validation for MVC. It uses jQuery as well for the client validation. I don't think jQuery Validation is easy to be used in ASP.NET web forms as the page structure actually differs. However, we may find some other versions suitable for ASP.NET Web Forms in the future.&lt;br /&gt;&lt;br /&gt;Unlike the ASP.NET validation controls which you need to inject inside your markup,  jQuery Validation Plugin puts all the validation rules in one place. I think this really a benefit. In fact, this is one of the benefits of using jQuery itself - thanks for the nice selectors. This style definitely enhance your code readability by separating the validation stuff away from the markup giving the designers - and even the devs - more clean markup to work in.&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-6086392550291271595?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6086392550291271595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=6086392550291271595' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6086392550291271595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6086392550291271595'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/03/jquery-validation-plugin.html' title='jQuery Validation Plugin'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6780788245234997487</id><published>2008-03-01T14:40:00.008+02:00</published><updated>2008-03-01T18:39:45.519+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Get the Last Run Query in SQL Server 2005</title><content type='html'>Have you ever run an update or delete query by mistake and you need to roll back or at least want to know the last run query to fix the problem? The following SQL statement can help in that.&lt;br /&gt;&lt;blockquote&gt;SELECT deqs.last_execution_time AS [Time], dest.text AS [Query]&lt;br /&gt;FROM sys.dm_exec_query_stats AS deqs&lt;br /&gt;CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest&lt;br /&gt;ORDER BY deqs.last_execution_time DESC&lt;/blockquote&gt;This will retrieve the last run queries with its execution time.&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-6780788245234997487?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6780788245234997487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=6780788245234997487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6780788245234997487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6780788245234997487'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/03/get-last-run-query-in-sql-server-2005.html' title='Get the Last Run Query in SQL Server 2005'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-421429263180415160</id><published>2008-03-01T12:58:00.008+02:00</published><updated>2008-03-01T21:49:22.078+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'>Inversion of Control &amp; Dependency Injection</title><content type='html'>In the last Thursday, 28th Feb. 2008, we had our internal demoday in SK. The day was really informative. We had many interesting topics in different fields. My topic was an introduction about the inversion of control and the dependency injection. You can download it from here:&lt;br /&gt;&lt;br /&gt;Download: &lt;a href="http://www.4shared.com/file/39399452/2811a2a5/Internal_Demoday_28_2_08_IoC_DI.html"&gt;Internal_Demoday_28_2_08_IoC_DI.pptx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;N.B: Most of the examples in the presentation use &lt;a href="http://www.springframework.net/"&gt;Sprint.NET&lt;/a&gt; as a DI framework.&lt;br /&gt;&lt;br /&gt;If you want to go deeper in the topic, I recommend the following article: &lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;Inversion of Control Containers and the Dependency Injection pattern&lt;/a&gt;. The author is &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt; - Chief Scientist, &lt;a href="http://www.thoughtworks.com/"&gt;ThoughtWorks&lt;/a&gt; - and the article is considered to be the ideal reference for the topic.&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-421429263180415160?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/421429263180415160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=421429263180415160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/421429263180415160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/421429263180415160'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/03/inversion-of-control-dependency.html' title='Inversion of Control &amp; Dependency Injection'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6804256470183403207</id><published>2008-02-23T23:17:00.011+02:00</published><updated>2008-03-01T22:03:15.165+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Networks'/><title type='text'>The Root and Top-Level Nameservers</title><content type='html'>I was reading: &lt;a href="http://www.oreilly.com/catalog/websec2/"&gt;Web Security, Privacy &amp; Commerce&lt;/a&gt; by &lt;span style="font-style:italic;"&gt;Simson Garfinkel&lt;/span&gt; and it was interesting to know that there are only 13 DNS root servers on the internet that are responsible for resolving the IP addresses to the top level domains (e.g: .com, .org, .net). For example, when you write unesco.org on the address bar of your browser, the address will be resolved from right to left. The client computer will ask one of these 13 root servers to resolve the address of .org server which accordingly will be responsible to fetch the address of the unesco.org. The address formats of the root servers is: X.ROOT-SERVERS.NET where X ranges from A to M. &lt;br /&gt;&lt;br /&gt;You may have an initial guess that most of these servers exist in the United States. But actually this not correct. Most of the physical root-servers are outside the United States and distributed in multiple locations in different continents. Check the full list here: &lt;a href="http://www.root-servers.org/"&gt;root-servers.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The root-servers are completely transparent to the internet users. It's the hidden side of the internet. They are definitely critical zones in the network. This is why they are carefully watched and monitored. As the whole traffic depends on these 13 servers, any crash or unexpected behavior happened in these servers, the internet users will have to memorize the IP addresses to be able to navigate on the internet. Needless to mention that any referral, ads or even bookmarks will be unreachable without the existence of these 13 servers.&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-6804256470183403207?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6804256470183403207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=6804256470183403207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6804256470183403207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6804256470183403207'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/02/root-and-top-level-nameservers.html' title='The Root and Top-Level Nameservers'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8952240122803498131</id><published>2008-02-16T13:19:00.052+02:00</published><updated>2008-02-20T23:07:51.207+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Securing Configurations</title><content type='html'>Have you ever wanted to provide a level of protection to your values in the configuration files? &lt;span style="font-style: italic;"&gt;aspnet_regiis&lt;/span&gt; will help you in encrypting the configuration section(s) in your config files. The executable resides in: &lt;span style="font-style: italic;"&gt;"&amp;lt;windows_root&amp;gt;\Microsoft.NET\Framework\&amp;lt;framework_version&amp;gt;&lt;/span&gt;" and it was common to be used in installing ASP.NET on IIS. However, you can use it  as well in encrypting/decrypting the configuration files.&lt;br /&gt;&lt;br /&gt;Here is the command line used for encrypting a section in the &lt;span style="font-style:italic;"&gt;web.config &lt;/span&gt;of &lt;span style="font-style:italic;"&gt;SecureWebProj &lt;/span&gt;application:&lt;br /&gt;&lt;blockquote&gt;aspnet_regiis.exe -pe connectionStrings -app /SecureWebProj&lt;/blockquote&gt;&lt;br /&gt;-pe attribute is used to tell the executable to encrypt the specified section. You can also use -pd attribute instead of -pe if you want to restore or decrypt the section to its original values. -app attribute is for specifying the application virtual path.&lt;br /&gt;&lt;br /&gt;After encrypting the &lt;span style="font-style:italic;"&gt;connectionStrings &lt;/span&gt;section, the &lt;span style="font-style:italic;"&gt;web.config&lt;/span&gt; will look like that:&lt;br /&gt;&lt;br /&gt;&lt;table callpadding='0' cellspacing='0' class='irisContainer' style='border-collapse: collapse; border-spacing:0'&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style='margin: 0; padding:0'&gt;&lt;/td&gt;&lt;td rowspan='2' class='highlighted output'&gt;&lt;pre class="xml highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="function"&gt;&amp;lt;connectionStrings &lt;/span&gt;&lt;span class="type"&gt;configProtectionProvider&lt;/span&gt;=&lt;span class="string"&gt;"RsaProtectedConfigurationProvider"&lt;/span&gt;&lt;span class="function"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="function"&gt;&amp;lt;EncryptedData &lt;/span&gt;&lt;span class="type"&gt;Type&lt;/span&gt;=&lt;span class="string"&gt;"http://www.w3.org/2001/04/xmlenc#Element"&lt;/span&gt;&lt;span class="function"&gt; &lt;/span&gt;&lt;span class="type"&gt;xmlns&lt;/span&gt;=&lt;span class="string"&gt;"http://www.w3.org/2001/04/xmlenc#"&lt;/span&gt;&lt;span class="function"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="function"&gt;&amp;lt;EncryptionMethod &lt;/span&gt;&lt;span class="type"&gt;Algorithm&lt;/span&gt;=&lt;span class="string"&gt;"http://www.w3.org/2001/04/xmlenc#tripledes-cbc"&lt;/span&gt;&lt;span class="function"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="function"&gt;&amp;lt;KeyInfo &lt;/span&gt;&lt;span class="type"&gt;xmlns&lt;/span&gt;=&lt;span class="string"&gt;"http://www.w3.org/2000/09/xmldsig#"&lt;/span&gt;&lt;span class="function"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="function"&gt;&amp;lt;EncryptedKey &lt;/span&gt;&lt;span class="type"&gt;xmlns&lt;/span&gt;=&lt;span class="string"&gt;"http://www.w3.org/2001/04/xmlenc#"&lt;/span&gt;&lt;span class="function"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span class="function"&gt;&amp;lt;EncryptionMethod &lt;/span&gt;&lt;span class="type"&gt;Algorithm&lt;/span&gt;=&lt;span class="string"&gt;"http://www.w3.org/2001/04/xmlenc#rsa-1_5"&lt;/span&gt;&lt;span class="function"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span class="function"&gt;&amp;lt;KeyInfo &lt;/span&gt;&lt;span class="type"&gt;xmlns&lt;/span&gt;=&lt;span class="string"&gt;"http://www.w3.org/2000/09/xmldsig#"&lt;/span&gt;&lt;span class="function"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                  &lt;span class="function"&gt;&amp;lt;KeyName&amp;gt;&lt;/span&gt;Rsa Key&lt;span class="identifier"&gt;&amp;lt;/KeyName&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span class="identifier"&gt;&amp;lt;/KeyInfo&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span class="function"&gt;&amp;lt;CipherData&amp;gt;&lt;/span&gt;&lt;br /&gt;                  &lt;span class="function"&gt;&amp;lt;CipherValue&amp;gt;&lt;/span&gt;j2E3lO/bMp8ljiDFKhRJu33zVD0mrXD7k5WV4nQ5uNJEav7cKcjhtO1ztCfxJw7ZE5uNdj+THVwJroZBoPEhtPAISPH75Zq&lt;br /&gt;                       5C1G+5WOLcBwBBzbcp7C6i6U7+/IWmThTNFRAEdQp/lHryDkapep4MNUCGNZlcVLlmX0n/bqZEoE=&lt;span class="identifier"&gt;&amp;lt;/CipherValue&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span class="identifier"&gt;&amp;lt;/CipherData&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="identifier"&gt;&amp;lt;/EncryptedKey&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="identifier"&gt;&amp;lt;/KeyInfo&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="function"&gt;&amp;lt;CipherData&amp;gt;&lt;/span&gt;&lt;br /&gt;           &lt;span class="function"&gt;&amp;lt;CipherValue&amp;gt;&lt;/span&gt;D/Z9ZyH7P+9e3kDi5gLevpdqbjwia0uQ/cOB0gHVXc8=&lt;span class="identifier"&gt;&amp;lt;/CipherValue&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="identifier"&gt;&amp;lt;/CipherData&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="identifier"&gt;&amp;lt;/EncryptedData&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="identifier"&gt;&amp;lt;/connectionStrings&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class='output lineNumbers'&gt;&lt;pre class='lineNumbers'&gt;&lt;span class='lineNumbers'&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;&lt;span class='nthLineNumber'&gt;10&lt;/span&gt;&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;&lt;span class='nthLineNumber'&gt;20&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Sometimes you just need to map the operation direct to the application physical path. This would be useful if you are using ASP.NET Development Server instead of IIS.&lt;br /&gt;&lt;blockquote&gt;aspnet_regiis.exe -pef connectionStrings E:\Projects\SecureWebProj&lt;/blockquote&gt;&lt;br /&gt;Encrypting the configuration sections won't prevent you to access the configuration values from your code. If you have already completed the project and you need to encrypt some sections inside the configuration files, you don't have to modify your application code anymore. The code will still run properly and won't be affected by the encryption changes.&lt;br /&gt;&lt;br /&gt;The nice part is that you can encrypt the web.config sections even within your code. The following sample encrypts the &lt;span style="font-style: italic;"&gt;connectionStrings &lt;/span&gt;section in the &lt;span style="font-style: italic;"&gt;web.config &lt;/span&gt;of &lt;span style="font-style: italic;"&gt;SecureWebProj&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;table callpadding="0" class="irisContainer" style="border-collapse: collapse; border-spacing: 0pt;" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="margin: 0pt; padding: 0pt;"&gt;&lt;/td&gt;&lt;td rowspan="2" class="highlighted output"&gt;&lt;pre class="cs highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="identifier"&gt;Configuration&lt;/span&gt; cfg = &lt;span class="identifier"&gt;WebConfigurationManager&lt;/span&gt;.OpenWebConfiguration(&lt;span class="string"&gt;"/SecureWebProj"&lt;/span&gt;);&lt;br /&gt;&lt;span class="identifier"&gt;ConnectionStringsSection&lt;/span&gt; section = (&lt;span class="identifier"&gt;ConnectionStringsSection&lt;/span&gt;)(cfg.GetSection(&lt;span class="string"&gt;"connectionStrings"&lt;/span&gt;));&lt;br /&gt;section.SectionInformation.ProtectSection(&lt;span class="string"&gt;"RsaProtectedConfigurationProvider"&lt;/span&gt;);&lt;br /&gt;cfg.Save();&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="output lineNumbers"&gt;&lt;pre class="lineNumbers"&gt;&lt;span class="lineNumbers"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;You may ask: This is an encryption operation, so where the encryption keys? Actually, each .NET installation will create by default a new key container in your machine formally called: &lt;span style="font-style:italic;"&gt;NetFrameworkConfiguarationKey&lt;/span&gt;. This will contains the needed keys for the providers to work. However, you can create a new key container using aspnet_regiis as well.&lt;br /&gt;&lt;blockquote&gt;aspnet_regiis.exe -pc SecureKeyContainerName -exp&lt;/blockquote&gt;&lt;br /&gt;You may find more about securing your key containers in this MSDN entry: &lt;a href="http://msdn2.microsoft.com/en-us/library/ms178699.aspx"&gt;Securing ASP.NET Configuration&lt;/a&gt;. In the later command line, -exp attribute means that the key container is exportable. You can export this container to XML file and use it in any other machine. This would be useful if your application is running in a web farm and you want to share the encrypted configurations across the farm machines.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/securing_configurations.html"&gt;DZone&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-8952240122803498131?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8952240122803498131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=8952240122803498131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8952240122803498131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8952240122803498131'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/02/securing-configurations.html' title='Securing Configurations'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-1731322629710991395</id><published>2008-02-14T12:36:00.006+02:00</published><updated>2008-02-16T22:42:14.577+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General News'/><title type='text'>Mohammed Hossam @ Microsoft</title><content type='html'>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://www.geocities.com/mohammednour2003/windowslive.jpg" alt="" border="0" /&gt;Great news! My dear friend, &lt;a href="http://www.bashmohandes.com/"&gt;Mohammed Hossam&lt;/a&gt;, will join Microsoft Live Team in the next May. Mohammed is one of the best techinical professionals I have ever met. You can find that from his blog posts, sessions, initiatives and technical side talks. Mohammed is so effective in his work and his knowledge is always spread among the team. You can feel his innovation, spirit and knowledge when you work with him. He is one of the few guys who is always up-to-date with the new technologies and not always that he tries to use it in real projects if it really fit the needs.&lt;br /&gt;&lt;br /&gt;We will miss you Mohammed. We wish you all the best of luck in Microsoft. Keep in touch!&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-1731322629710991395?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/1731322629710991395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=1731322629710991395' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1731322629710991395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1731322629710991395'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/02/mohammed-hossam-microsoft.html' title='Mohammed Hossam @ Microsoft'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-596722065539373905</id><published>2008-02-03T12:10:00.003+02:00</published><updated>2008-12-13T21:34:45.834+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'>Survey Results</title><content type='html'>In December 29th, a survey were published for public to answer - for more details &lt;a href="http://mnour.blogspot.com/2007/12/survey-software-industry-inside-egypt.html"&gt;check this post&lt;/a&gt;. Here is the results of the survey:&lt;br /&gt;&lt;br /&gt;Download the Survey Results: &lt;a href="http://www.geocities.com/mohammednour/Public/2008_Survey_Results.zip"&gt;2008_Survey_Results.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Update] The attempt should be considered as a start to confirm the benefits of these kind of surveys. The results may appear to have some illogical information. Unfortunately, we have only 150 participants. Needless to say that the more you get participations, the more you get accurate results. But still I promised to publish the results even with this small number of participation. I hope to find more similar and effective attempts in the future from authorized and independent organizations in Egypt.&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-596722065539373905?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/596722065539373905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=596722065539373905' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/596722065539373905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/596722065539373905'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2008/02/survey-results.html' title='Survey Results'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6370797434763606379</id><published>2007-12-29T20:20:00.001+02:00</published><updated>2008-11-18T23:34:27.164+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'>Survey - The Software Industry Inside Egypt</title><content type='html'>This survey is one of the first initiatives aims to formulate accurate indicators about the software development industry inside Egypt. The survey will give important information about the current professional level of the software companies. It will try to measure different aspects in the industry like the companies technical level, management, process, salaries and the work environments. The target is to give informative details for the IT stuff to get a clear and transparent information regarding their career.&lt;br /&gt;&lt;br /&gt;Please be accurate in your answers as much as you can. Your answer is definitely affect the overall results and the others attitude. The final results will be published here in this blog.&lt;br /&gt;&lt;br /&gt;* We don't collect any identity information in this survey.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.polldaddy.com/s/9F50CD937C40B0B9/"&gt;ANSWER THE SURVEY NOW!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Update] &lt;br /&gt;&lt;br /&gt;[03/2/2008] The survey results have been published. &lt;a href="http://mnour.blogspot.com/2008/02/survey-results.html"&gt;Click here&lt;/a&gt;&lt;br /&gt;[31/1/2008] The survey results will be published on Sunday, 3rd February, 2008&lt;br /&gt;[12/1/2008] The survey participation period is extended to 19th Jaunary, 2007&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-6370797434763606379?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6370797434763606379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=6370797434763606379' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6370797434763606379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6370797434763606379'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/12/survey-software-industry-inside-egypt.html' title='Survey - The Software Industry Inside Egypt'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-2065697999903846688</id><published>2007-12-27T16:05:00.001+02:00</published><updated>2008-11-18T23:34:53.966+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Surveys'/><category scheme='http://www.blogger.com/atom/ns#' term='Design Patterns'/><title type='text'>Vote Results: Do you apply design patterns in your software projects?</title><content type='html'>This is the result of a vote I made later: Do you apply design patterns in your software projects? The question is to illustrate if the developers really care about learning solutions for already predefined problems. Do you really care about using the best solution to solve a problem?&lt;br /&gt;&lt;br /&gt;37 people contributed in the vote. The following is a chart representing people votes.&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/Design_Patterns_Votes.PNG" style="border-style: dashed; border-width: 1px;" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1198843278&amp;sr=1-1"&gt;&lt;img style="border-style: dashed; border-width: 1px; margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/R3O6LJ_RuaI/AAAAAAAAAHc/UQjUitCiHEE/s200/Design_Patterns_Book.PNG" alt="" id="BLOGGER_PHOTO_ID_5148663499837258146" border="0" /&gt;&lt;/a&gt;Design Patterns are a collection of patterns documenting successful solutions for specific problems. The term introduced from a long time. Most of the developers uses the patterns in there daily work, but don't really know that it's a predefined design pattern until they read about it. For more information about the topic, I highly recommend this book: &lt;span style="font-style: italic;"&gt;"Design Patterns - Elements of Reusable Object-Oriented Software"&lt;/span&gt; by &lt;span style="font-style: italic;"&gt;"Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides"&lt;/span&gt;. For a brief summary about the book, check the &lt;a href="http://en.wikipedia.org/wiki/Design_Patterns"&gt;Wikipedia Version&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-2065697999903846688?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/2065697999903846688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=2065697999903846688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/2065697999903846688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/2065697999903846688'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/12/vote-results-design-patterns.html' title='Vote Results: Do you apply design patterns in your software projects?'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_C-lhvxiWQkk/R3O6LJ_RuaI/AAAAAAAAAHc/UQjUitCiHEE/s72-c/Design_Patterns_Book.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6374959675139303446</id><published>2007-12-22T21:03:00.002+02:00</published><updated>2008-04-02T23:15:53.102+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Image Resizing</title><content type='html'>Sometimes you need to process the users' uploaded images in your web application so that it doesn't take too much space. This can be done either by resizing the uploaded image, saving it in a specific format or may be both.&lt;br /&gt;&lt;br /&gt;The following is a code snippet for resizing images and saving it in *.jpeg format. The method take the image file to be resized as a stream, the destination path, the file name to save the image as and the maximum side size of the image (i.e the output image should fit a square of this maximum side size).&lt;table callpadding='0' cellspacing='0' class='irisContainer' style='border-collapse: collapse; border-spacing:0'&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style='margin: 0; padding:0'&gt;&lt;/td&gt;&lt;br /&gt;&lt;td rowspan='2' class='highlighted output'&gt;&lt;pre class="cs highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="storageClass"&gt;public&lt;/span&gt; &lt;span class="storageClass"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; ResizeImage(Stream originalImageStream, &lt;span class="type"&gt;string&lt;/span&gt; destinationFilePath,&lt;br /&gt;                               &lt;span class="type"&gt;string&lt;/span&gt; destinationFileName, ImageEncoding saveEncoding, &lt;span class="type"&gt;int&lt;/span&gt; maxSideSize)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; intNewWidth;&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; intNewHeight;&lt;br /&gt;&lt;br /&gt;    Bitmap original = &lt;span class="statement"&gt;new&lt;/span&gt; Bitmap(originalImageStream); &lt;span class="comment"&gt;// your original image&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//Set the image format&lt;/span&gt;&lt;br /&gt;    ImageFormat fmtImageFormat = original.RawFormat;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//Get the image original width and height&lt;/span&gt;&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; intOldWidth = original.Width;&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; intOldHeight = original.Height;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//Determine if Landscape or Portrait&lt;/span&gt;&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; intMaxSide;&lt;br /&gt;&lt;br /&gt;    &lt;span class="conditional"&gt;if&lt;/span&gt; (intOldWidth &amp;gt;= intOldHeight)&lt;br /&gt;    {&lt;br /&gt;        intMaxSide = intOldWidth;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="conditional"&gt;else&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        intMaxSide = intOldHeight;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="conditional"&gt;if&lt;/span&gt; (intMaxSide &amp;gt; maxSideSize)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="comment"&gt;//set new width and height&lt;/span&gt;&lt;br /&gt;        &lt;span class="type"&gt;double&lt;/span&gt; dblCoef = maxSideSize / (&lt;span class="type"&gt;double&lt;/span&gt;)intMaxSide;&lt;br /&gt;&lt;br /&gt;        intNewWidth = Convert.ToInt32(dblCoef * intOldWidth);&lt;br /&gt;        intNewHeight = Convert.ToInt32(dblCoef * intOldHeight);&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="conditional"&gt;else&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        intNewWidth = intOldWidth;&lt;br /&gt;        intNewHeight = intOldHeight;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    Size resolution = &lt;span class="statement"&gt;new&lt;/span&gt; Size(intNewWidth, intNewHeight); &lt;span class="comment"&gt;// size of your thumbnail&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    Image thumbnail = &lt;span class="statement"&gt;new&lt;/span&gt; Bitmap(original, resolution);&lt;br /&gt;&lt;br /&gt;    Graphics g = Graphics.FromImage(thumbnail);&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// The InterpolationMode was the catalyst to eliminate pixelation.&lt;/span&gt;&lt;br /&gt;    g.InterpolationMode = InterpolationMode.HighQualityBicubic;&lt;br /&gt;    g.CompositingQuality = CompositingQuality.HighQuality;&lt;br /&gt;    g.SmoothingMode = SmoothingMode.HighQuality;&lt;br /&gt;&lt;br /&gt;    g.DrawImage(original, &lt;span class="statement"&gt;new&lt;/span&gt; Rectangle(&lt;span class="number"&gt;0&lt;/span&gt;, &lt;span class="number"&gt;0&lt;/span&gt;, thumbnail.Size.Width, thumbnail.Size.Height));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// Prepare for a controlled-quality JPEG export&lt;/span&gt;&lt;br /&gt;    ImageCodecInfo jpegCodec = GetEncoderInfo(&lt;span class="string"&gt;"image/jpeg"&lt;/span&gt;);&lt;br /&gt;    Encoder jpegEncoder = Encoder.Quality;&lt;br /&gt;    EncoderParameters jpegEncoderParameters = &lt;span class="statement"&gt;new&lt;/span&gt; EncoderParameters(&lt;span class="number"&gt;1&lt;/span&gt;);&lt;br /&gt;    EncoderParameter jpegEncoderQuality = &lt;span class="statement"&gt;new&lt;/span&gt; EncoderParameter(jpegEncoder, &lt;span class="number"&gt;100L&lt;/span&gt; &lt;span class="comment"&gt;/*jpegQuality*/&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    jpegEncoderParameters.Param[&lt;span class="number"&gt;0&lt;/span&gt;] = jpegEncoderQuality;&lt;br /&gt;&lt;br /&gt;    thumbnail.Save(destinationFilePath + destinationFileName + &lt;span class="string"&gt;".jpg"&lt;/span&gt;, jpegCodec, jpegEncoderParameters);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class='output lineNumbers'&gt;&lt;pre class='lineNumbers'&gt;&lt;span class='lineNumbers'&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;&lt;span class='nthLineNumber'&gt;10&lt;/span&gt;&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;&lt;span class='nthLineNumber'&gt;20&lt;/span&gt;&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;&lt;span class='nthLineNumber'&gt;30&lt;/span&gt;&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;&lt;span class='nthLineNumber'&gt;40&lt;/span&gt;&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;&lt;span class='nthLineNumber'&gt;50&lt;/span&gt;&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;&lt;span class='nthLineNumber'&gt;60&lt;/span&gt;&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;You will have to get the appropriate codec information to save the image.&lt;table callpadding="0" class="irisContainer" style="border-collapse: collapse; border-spacing: 0pt;" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="margin: 0pt; padding: 0pt;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td rowspan="2" class="highlighted output"&gt;&lt;pre class="cs highlighted"&gt;&lt;span class="normal"&gt;ImageCodecInfo jpegCodec = GetEncoderInfo(&lt;span class="string"&gt;"image/jpeg"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="output lineNumbers"&gt;&lt;pre class="lineNumbers"&gt;&lt;span class="lineNumbers"&gt;1&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The following is the implementation of GetEncoderInfo.&lt;table callpadding='0' cellspacing='0' class='irisContainer' style='border-collapse: collapse; border-spacing:0'&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style='margin: 0; padding:0'&gt;&lt;/td&gt;&lt;br /&gt;&lt;td rowspan='2' class='highlighted output'&gt;&lt;pre class="cs highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="storageClass"&gt;private&lt;/span&gt; &lt;span class="storageClass"&gt;static&lt;/span&gt; ImageCodecInfo GetEncoderInfo(&lt;span class="type"&gt;string&lt;/span&gt; encoderString)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="repeat"&gt;foreach&lt;/span&gt; (ImageCodecInfo info &lt;span class="statement"&gt;in&lt;/span&gt; ImageCodecInfo.GetImageEncoders())&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="conditional"&gt;if&lt;/span&gt; (info.MimeType == encoderString)&lt;br /&gt;            &lt;span class="repeat"&gt;return&lt;/span&gt; info;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="repeat"&gt;return&lt;/span&gt; &lt;span class="constant"&gt;null&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class='output lineNumbers'&gt;&lt;pre class='lineNumbers'&gt;&lt;span class='lineNumbers'&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;&lt;span class='nthLineNumber'&gt;10&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Simply you loop through all the encoders in &lt;span style="color: rgb(51, 153, 153);"&gt;ImageCodecInfo &lt;/span&gt;to find JPEG codec info. Other codecs info can also be retrieved for other image types like PNG, JIF and BMP.&lt;br /&gt;&lt;br /&gt;The interesting point is in specifying the quality of your output image so that you avoid the pixelation problem and make your output image looks smooth. You declare a new Encoder Parameter with the required quality of your output image. Then you pass the encoding parameters when saving the final resized image.&lt;table callpadding="0" class="irisContainer" style="border-collapse: collapse; border-spacing: 0pt;" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="margin: 0pt; padding: 0pt;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td rowspan="2" class="highlighted output"&gt;&lt;pre class="cs highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="comment"&gt;// Prepare for a controlled-quality JPEG export&lt;/span&gt;&lt;br /&gt;ImageCodecInfo jpegCodec = GetEncoderInfo(&lt;span class="string"&gt;"image/jpeg"&lt;/span&gt;);&lt;br /&gt;Encoder jpegEncoder = Encoder.Quality;&lt;br /&gt;EncoderParameters jpegEncoderParameters = &lt;span class="statement"&gt;new&lt;/span&gt; EncoderParameters(&lt;span class="number"&gt;1&lt;/span&gt;);&lt;br /&gt;EncoderParameter jpegEncoderQuality = &lt;span class="statement"&gt;new&lt;/span&gt; EncoderParameter(jpegEncoder, &lt;span class="number"&gt;100L&lt;/span&gt; &lt;span class="comment"&gt;/*jpegQuality*/&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;jpegEncoderParameters.Param[&lt;span class="number"&gt;0&lt;/span&gt;] = jpegEncoderQuality;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="output lineNumbers"&gt;&lt;pre class="lineNumbers"&gt;&lt;span class="lineNumbers"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The quality encoder parameter may have varying values (i.e. 25L, 50L, 75L and 100L). You will have to tune it to balance the quality with the output image size.&lt;br /&gt;&lt;br /&gt;Another point to mention that there are many other interesting encoders you can make use of like Encoder.Transformation - which allowing you to rotate or swap your images. You can find more information &lt;a href="http://msdn2.microsoft.com/en-us/library/system.drawing.imaging.encoder.transformation.aspx"&gt;here&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-6374959675139303446?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6374959675139303446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=6374959675139303446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6374959675139303446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6374959675139303446'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/12/image-resizing-using-c.html' title='Image Resizing'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3186617756743619072</id><published>2007-12-20T23:32:00.000+02:00</published><updated>2007-12-21T00:25:23.207+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Language-specific Code Compilation in App_Code</title><content type='html'>App_Code folder is the default location to add your code files for your ASP.NET project. You may have the situation when you want to add mixed code files written in different languages i.e C# or VB.Net and you need to include these mixed files in the project compilation. The question: Can I have mixed files some written in C# and others in VB.NET in the App_Code folder? Yes, you can but in limitation. First, you will have to add different folders for each language-specific code. Then, in web.config add an entry for each folder inside CodeSubDirectories tag.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;compilation&lt;/span&gt; &lt;span class="attr"&gt;debug&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;codeSubDirectories&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;directoryName&lt;/span&gt;&lt;span class="kwrd"&gt;="CSharpFolder"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;  &lt;br /&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;directoryName&lt;/span&gt;&lt;span class="kwrd"&gt;="VBFolder"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;  &lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;codeSubDirectories&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;compilation&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;If the folder you added to &lt;span class="html"&gt;codeSubDirectories&lt;/span&gt; tag doesn't physically exist, you will have a compilation error.&lt;br /&gt;&lt;pre class="csharpcode"&gt;The code subdirectory '/MyProject/App_Code/CSharpFolder/' does not exist. E:\Projects\MyProject\web.config &lt;/pre&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-3186617756743619072?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3186617756743619072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=3186617756743619072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3186617756743619072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3186617756743619072'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/12/different-language-compilation-in.html' title='Language-specific Code Compilation in App_Code'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-2987997205245294675</id><published>2007-12-10T13:56:00.001+02:00</published><updated>2008-04-19T14:10:23.971+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>ASP.NET MVC Framework CTP is Finally Released.</title><content type='html'>ASP.NET MVC CTP is finally released. The framework is released as a part of new ASP.NET 3.5 Extensions package. The extensions includes some new stuff beside the MVC framewok like: The Entity Framework, new additions for ASP.NET AJAX and others.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.asp.net/downloads/3.5-extensions/"&gt;Download ASP.NET 3.5 Extensions&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Scott Guthrie published a series of articles about MVC. Here is the full list:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;ASP.NET MVC Framework: Introduction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx"&gt;ASP.NET MVC Framework (Part2): URL Routing&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx"&gt;ASP.NET MVC Framework (Part3): Passing ViewData From Controllers to Views&lt;/a&gt;&lt;br /&gt;&lt;a class="entry-title-link" target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx"&gt;ASP.NET MVC Framework (Part4): Handling Form Edit and Post Scenarios&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-2987997205245294675?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/2987997205245294675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=2987997205245294675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/2987997205245294675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/2987997205245294675'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/12/aspnet-mvc-framework-is-finally.html' title='ASP.NET MVC Framework CTP is Finally Released.'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6584326269198587737</id><published>2007-10-20T16:58:00.002+02:00</published><updated>2008-04-19T14:11:03.263+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinions'/><title type='text'>Scrum in Action</title><content type='html'>We are now working in a project which have taken more than 6+ months and still in progress. 159078+ lines of code, 80+ page, 120+ user controls, 100+ tables and counting. In projects with such scale, you need to manage and control your development life cycle. You want to decrease all risks and possibilities of failure. Working with Scrum methodology helps a lot in making developers time management more efficient.&lt;br /&gt;&lt;br /&gt;I'll try to state some points which helps us during the development of the project. My recommendation points maybe a part of the scrum definition and maybe not. But sometimes practice is more trivial than science. The following are the concluded results.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Design meetings:&lt;/span&gt; In each project you have to design. But as a fact, the design will change. So all what you need is to put the outlines. You don't have to state all the details. Try to make the design meetings for things which is really need a heavy mind storming and architecture. This includes frameworks, libraries and infrastructures. Discussing the design of each part in the project is a time consuming and won't help you that much.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Time Estimation:&lt;/span&gt; When estimating the time of the tasks, it should be in the presence of your team members as it's a part of the sprint planning. The sprint planning is usually a long boring meeting. For each task, each member will make an estimate. Then the average will be the final estimate of the task. If some member give an estimation which isn't reasonable or far away of the others estimations average, you start to ask him why? He may know something in the task which is mysterious,  may take more time or may need more resources. Depending on all these discussions you will get a better estimation and better time management.&lt;br /&gt;&lt;br /&gt;Another point, if a task will take more than 2 days, you should start to think about dividing it. Most of the uncompleted and bottlenecks in the projects are the long estimated tasks. The estimation of the long tasks are usually not accurate. Even the scrum master won't be able to know your progress each day if you just telling him "I am still working on it". Try to divide your task to smaller parts so that you can give it a better estimation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Daily meetings:&lt;/span&gt; The essence of the scrum is the daily scrum meetings. If you didn't do it daily you will lose process monitoring. The team activity will be degraded. You won't be able to finish the work on the estimated time. Try to keep on this 15 min. meeting every day. Try to keep these meetings physical as much as you can. I mean here to avoid instant messaging meetings or such stuff. Instant messaging meetings takes much time than the physical ones. People don't take care about the time while messaging and the scrum master won't be able to control it. Try to determine a fixed  time for the meeting each day - ideally - 15-30 min. maximum - and make sure it doesn't exceed the time limit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Code Review:&lt;/span&gt; Usually you will need to refactor some parts of your code with your teammates. Code Review Meeting is your way to do that. Problems exists when you try to make "code reviews" as a rule in each sprint. It doesn't work like that. From my experience don't do any code review if you don't have a predefined list of your targets and you really have a problem you want to solve. If you have nothing to review in these meetings, then it will be a hassle and it will be something other than a technical meeting! It will be time consuming and the meeting will end up with nothing. Specify the targets of the meeting before scheduling it. Team members may inform the scrum master if they think there is a part in their code should be refactored in attendance of the other team members.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Design Changes Reporting:&lt;/span&gt; Keep all design documents on your source control or repository folder. Make sure that any updates on the designs, flow, sequence diagrams or even requirements modifications are accessible for all the team members. Problems occurred if one of the team members changes something in the design or the flow and didn't inform the others about it. The best practice is to update your documents with any modifications and commit it in your repository. Not only that but you should inform the others about your modifications and the member you think his work will be affected with your changes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bug Fixing:&lt;/span&gt; During the sprint, testers may start to test your work of the previous ones. Bugs will be accumulated and it's not considered as a part of the sprint estimation. You have 2 choices, either allocate a member in your team to fix all these stuff or assign the bugs to their owners. The later option - if not well controlled - will contradict with the scrum rules. The developers will have an increasing bug list and will feel that they don't make any progress. The solution is to postpone any generated bugs through the sprint to the next one. Testing the work during the development is really a mess . Testers may report some bugs which are features to be implemented on the sprint. Still the bugs should be reported but not assigned to the developers during the sprint. It should be postponed. In the next sprint meeting it will be considered in the developers estimation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Injecting Members to the Team: &lt;/span&gt;You have time constraints and you want your developers to take care of the new features. But in the same time, you have a list of bugs to be fixed. Don't inject external developers to fix these bugs. Especially if they don't have enough idea about the project and the requirements. You will end up with a longer bug list!&lt;br /&gt;&lt;br /&gt;This is my review about the best practice which makes the scrum process more efficient. Still it's not that perfect on all the time. Try to modify the process to fit your needs. Although learning and reading is so important to improve your process, but still nothing better than practice.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/scrum_in_action.html"&gt;Dzone - Vote for for this article!&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.stumbleupon.com/url/mnour.blogspot.com/2007/10/scrum-in-action.html"&gt;Stumbleupon - Add Your Review&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-6584326269198587737?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6584326269198587737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=6584326269198587737' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6584326269198587737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6584326269198587737'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/10/scrum-in-action.html' title='Scrum in Action'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8382803552971568612</id><published>2007-10-09T23:42:00.001+02:00</published><updated>2008-04-19T14:09:56.359+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Finally MVC Model For ASP.NET</title><content type='html'>Finally we will have MVC model for ASP.NET. This was announced on &lt;a href="http://www.altnetconf.com/"&gt;Alt.Net Conference&lt;/a&gt; last day. In my opinion, this will be one of the most interesting feature added to ASP.NET. MVC is one of the old design patterns which introduced in many object-oriented languages.  In MVC pattern, controllers just handle application flow, models represent the data,  and the view is just concerned about presentation logic. The model was first introduced in SmallTalk. It is widely used on many other web frameworks like &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; for PHP and &lt;a href="http://www.castleproject.org/monorail/index.html"&gt;MoneRail&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I was reading about Zend Framework from a while and I liked the way which they separate their pages and controllers classes. The model itself has a great trust from many web developers especially when building large scale projects where updatability is a critical issue.&lt;br /&gt;&lt;br /&gt;Using MVC model, you will be able to define you application URLs like:&lt;br /&gt;http://domain_name&lt;domain_name&gt;/Controller/Action/Parameter1/Parameter2/...&lt;br /&gt;&lt;br /&gt;Where you map a URL to a certain Controller and action.&lt;br /&gt;&lt;br /&gt;Read more about this topic &lt;a href="http://codebetter.com/blogs/jeffrey.palermo/archive/2007/10/05/altnetconf-scott-guthrie-announces-asp-net-mvc-framework-at-alt-net-conf.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/domain_name&gt;For more about MVC Model, check out this &lt;a href="http://blogs.infragistics.com/blogs/tsnyder/archive/2007/10/17/mvc-or-mvp-pattern-whats-the-difference.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-8382803552971568612?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8382803552971568612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=8382803552971568612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8382803552971568612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8382803552971568612'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/10/finally-mvc-model-for-aspnet.html' title='Finally MVC Model For ASP.NET'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-7533005303071593481</id><published>2007-08-12T15:47:00.000+03:00</published><updated>2007-10-20T15:45:36.319+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><title type='text'>SKDD2 - Windows Workflow Foundation Session</title><content type='html'>&lt;object style="float: left; padding-right: 10px;" height="250" width="325"&gt; &lt;param name="movie" value="http://www.youtube.com/v/HUdfSpZ7cy0"&gt;  &lt;embed src="http://www.youtube.com/v/HUdfSpZ7cy0" type="application/x-shockwave-flash" height="250" width="325"&gt;&lt;/embed&gt;  &lt;/object&gt;This is one of the sessions held on &lt;a href="http://www.demoday.us/"&gt;SilverKey DemoDay 2&lt;/a&gt; - Cairo Conference Center. The session was an introduction to Windows Workflow Foundation and how it can help you in automating you business process in an entire organization. The session was in Arabic language. If you're interested, you can download the &lt;a href="http://s21.quicksharing.com/v/8207730/Business_Automation_Using_WF.rar.html"&gt;session materials&lt;/a&gt; to try out the demos and check out the slides. I will try to keep track  of all other videos of SKDD 2 and link it on this post as soon as being available. So, keep watching!&lt;br /&gt;&lt;br /&gt;Updates:&lt;br /&gt;SOA via WCF &lt;a href="http://spellcoder.com/blogs/bashmohandes/archive/2007/08/11/7830.aspx"&gt;Part 1&lt;/a&gt; and &lt;a href="http://spellcoder.com/blogs/bashmohandes/archive/2007/09/17/8169.aspx"&gt;Part 2&lt;/a&gt; - By &lt;a href="http://www.bashmohandes.com"&gt;Mohammed Hossam&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-7533005303071593481?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/7533005303071593481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=7533005303071593481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7533005303071593481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7533005303071593481'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/08/skdd2-workflow-session.html' title='SKDD2 - Windows Workflow Foundation Session'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-1869655925303277005</id><published>2007-08-10T20:11:00.001+03:00</published><updated>2008-04-19T14:11:46.078+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinions'/><title type='text'>Why Employees Leave Organization?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_C-lhvxiWQkk/RryeEmgsn5I/AAAAAAAAAF8/I6EXmL-1HQw/s1600-h/ajim-premji.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 130px; height: 141px;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/RryeEmgsn5I/AAAAAAAAAF8/I6EXmL-1HQw/s200/ajim-premji.jpg" alt="" id="BLOGGER_PHOTO_ID_5097122680170913682" border="0" /&gt;&lt;/a&gt;This is an article of &lt;span class="postdetails"&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Azim_Premji"&gt;Azim Premji&lt;/a&gt; &lt;/span&gt;- Chairman &amp;amp; CEO of &lt;a href="http://www.wipro.com/"&gt;Wipro&lt;/a&gt; - explains why employees leave their organizations - even it seems that their choice in the begining was right. The conclusion that if you start losing talented people in your organization, you should start looking to their immediate managers. As a fact, People leaves Managers not Companies. Humiliation, Stress, being too controlled are all reasons making employees leave. Check out more about the reasons here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.citehr.com/why-employees-leave-organisations-azim-premji-vt2059.html"&gt;Why Employees Leave Organizations?&lt;/a&gt;&lt;/span&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-1869655925303277005?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/1869655925303277005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=1869655925303277005' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1869655925303277005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1869655925303277005'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/08/why-employees-leave-organization.html' title='Why Employees Leave Organization?'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_C-lhvxiWQkk/RryeEmgsn5I/AAAAAAAAAF8/I6EXmL-1HQw/s72-c/ajim-premji.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-492125546270965727</id><published>2007-08-05T17:24:00.000+03:00</published><updated>2007-08-06T01:21:04.337+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>SubSonic - Free DAL Generator</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/RrXhn2gsn4I/AAAAAAAAAF0/XIXC0WTxykA/s1600-h/subsonic_logo.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/RrXhn2gsn4I/AAAAAAAAAF0/XIXC0WTxykA/s200/subsonic_logo.png" alt="" id="BLOGGER_PHOTO_ID_5095226628203388802" border="0" /&gt;&lt;/a&gt;Data Access layer generation is one of the exhausting tasks in building any multi-tier software projects. SubSonic is one of the free .NET Data Layer Generators which can help to make your life easier. The generator is really simple to use and efficient. You can do almost all the needed SQL operations using simple method calling. Moreover it's an Open source and the source is available on &lt;a href="http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=5177"&gt;CodePlex&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.subsonicproject.com/"&gt;Learn More About SubSonic&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.wekeroad.com/query1.htm"&gt;HOW-TO Video&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Information Source: &lt;a href="http://spellcoder.com/blogs/tayseer"&gt;Mohammed Tayseer&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-492125546270965727?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/492125546270965727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=492125546270965727' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/492125546270965727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/492125546270965727'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/08/subsonic-free-dal-generator.html' title='SubSonic - Free DAL Generator'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_C-lhvxiWQkk/RrXhn2gsn4I/AAAAAAAAAF0/XIXC0WTxykA/s72-c/subsonic_logo.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-5079180934532640438</id><published>2007-07-24T02:05:00.000+03:00</published><updated>2007-08-04T00:23:26.475+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><title type='text'>New ASP.Net PageFlow Framework available for Download</title><content type='html'>New UI Workflow Framework was recently available for download. The framework brings Workflow and UI applications together - This includes ASP.NET applications as well. The source code of the framework and some sample applications built on top of it - is included. The design document describing the entire architecture of the framework is also included.&lt;br /&gt;&lt;br /&gt;To learn more about PageFlow Framework, check this post:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx"&gt;More About PageFlow Framework&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To download the framework:&lt;br /&gt;&lt;a href="http://go.microsoft.com/?linkid=6923851"&gt;Download Pageflow Framework&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://mnour.blogspot.com/2007/07/new-aspnet-pageflow-framework-available.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://mnour.blogspot.com/2007/07/new-aspnet-pageflow-framework-available.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://mnour.blogspot.com/2007/07/new-aspnet-pageflow-framework-available.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&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-5079180934532640438?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/5079180934532640438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=5079180934532640438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5079180934532640438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5079180934532640438'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/07/new-aspnet-pageflow-framework-available.html' title='New ASP.Net PageFlow Framework available for Download'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-7762255615976022667</id><published>2007-07-22T16:27:00.000+03:00</published><updated>2007-07-22T16:59:23.773+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><title type='text'>Touring the Windows Workflow Foundation Team Offices</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://channel9.msdn.com/ShowPost.aspx?PostID=140513#140513"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/RqNh8Ggsn1I/AAAAAAAAAFc/srdee4Ak-Jc/s200/139350.gif" alt="" id="BLOGGER_PHOTO_ID_5090019689026592594" border="0" /&gt;&lt;/a&gt;This is very nice tour video in Windows Workflow Foundation Team Offices. You will meet those WF guys - the creators of this technology. The video is out there for a while and I just found it while navigating on &lt;a href="http://channel9.msdn.com/"&gt;channel 9&lt;/a&gt;. But really very interesting one.&lt;br /&gt;&lt;br /&gt;WWF - Windows Workflow Foundation - is a solution provided by Microsoft as a core component on .NET Framework 3.0 for business process automation.&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-7762255615976022667?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/7762255615976022667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=7762255615976022667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7762255615976022667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7762255615976022667'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/07/touring-windows-workflow-foundation.html' title='Touring the Windows Workflow Foundation Team Offices'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_C-lhvxiWQkk/RqNh8Ggsn1I/AAAAAAAAAFc/srdee4Ak-Jc/s72-c/139350.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-2848260941032913727</id><published>2007-07-21T19:23:00.002+03:00</published><updated>2008-04-30T15:13:54.059+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><title type='text'>Introducing Windows Workflow Foundation</title><content type='html'>This is a brief post introducing Windows Workflow Foundation - We will try to introduce basic concepts and definitions. We will know also why Workflow Foundation can be useful for building large scale projects.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;google_ad_client = "pub-6699943802796732";google_ad_width = 728;google_ad_height = 90;google_ad_format ="728x90_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "f6f6f6"; google_color_bg = "f6f6f6";google_color_link = "550296";google_color_text = "000000";google_color_url = "550296";&lt;/script&gt;&lt;br /&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;&lt;br /&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;Workflow - Concept &amp; Definition&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First let's start by defining Workflow as a word - according to &lt;a href="http://en.wikipedia.org/wiki/Workflow"&gt;wikipedia&lt;/a&gt; definition: "&lt;span style="font-style: italic;"&gt;A workflow is a reliably repeatable pattern of activity enabled by a systematic organization of resources, defined roles and mass, energy and information flows, into a work process that can be documented and learned&lt;/span&gt;". In workflow-based projects you have a certain flow defines a specific organization or business process. Through this flow, you can't do a certain step in this business flow without making sure that one or more pre-request steps are completed.&lt;br /&gt;&lt;br /&gt;If you think a little about this model, you will find most of the applications you develop daily can fit in this definition. You have a certain logic and business rules you want to automate. Ideal Examples will include: Document Management Applications, Insurance/Financial Applications, Governmental Projects and Customer-Relationship Management Applications.&lt;br /&gt;&lt;br /&gt;This type of applications have some specific characteristics. These applications has high rate/cost of change over time. Your client may come after a while saying that the flow of the application is to be modified. He needs to add another step inside the current flow which is not currently exist. He wants to remove a flow path. He wants to manage more information on his business flow.&lt;br /&gt;&lt;br /&gt;This also make us think about the usability. You're not using the flow one time. Suppose you build an automation software for a Hospital and you still get many deals for the same industry. In most of the cases, the features will be common for the same projects in the same industry field. You may need a way to build a flow once and use it as more as you need for any kind of projects serving the Medical industry for instance. It's all about productivity. Building once and use whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(51, 0, 153);"&gt;Windows Workflow Foundation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;WWF - Windows Workflow Foundation - is a solution provided in .NET 3.0 to solve most of these problems. You're able to define your organization flow in a graphical way using Workflow Designer Component which can be hosted - not only on Visual Studio - but on any other hosting applications you may develop. This gives you some kind of extensibility of building your own flow and enables business administrators or manager to change the business flow even on-the-fly.&lt;br /&gt;&lt;br /&gt;Another side of extensibility that you can build your own libraries for domain specific activities.  This help in increasing your development usability and so the productivity.&lt;br /&gt;&lt;br /&gt;The extensibility is not limited for this point. The Workflow runtime is the engine which handle the creation of the Workflow Instances. Extensibility applies here as well. You may extend the behavior of the runtime itself. You may change the default way of persistence.  You may want to change the persistence so that you don't save the state of the workflow on the database and decide to persist it on another media like XML or whatever.&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(51, 0, 153);"&gt;Windows Workflow Process Types&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;Let's talk about the workflow types provided by WF. WF provides two types of workflow. The first one is called Sequential Workflow. This one will be your choice when you know exactly the predefined path your application should follow. This type is most like a flowchart. You have conditions, loops and rules stuff which control the desired flow of your workflow.&lt;br /&gt;&lt;br /&gt;The second type is called: State-Machine Workflow. Here you have a collections of states and you define the flow so that state-A will go to state-B - if and only if - a certain event or trigger is raised. This kind of flow helps when you don't have a predefined flow and states may go to many other states in non-ordered way.&lt;br /&gt;&lt;br /&gt;What the best model of building workflow-based applications? The best model for this kind of projects is &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC model &lt;/a&gt;- Model View Controller. The model here is mapped to the "Workflow" engine, the View is your UI and the Controller is controlling the flow between the Model and View. So that, the UI (View) don't know that it's controlled by the Workflow engine and vise versa - the Workflow doesn't know that it controls the UI.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;Starting Up&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You will need - &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&amp;displaylang=en"&gt;.NET Framework 3.0&lt;/a&gt; or higher - installed on your machine and - &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en"&gt;Workflow extension - for Visual Studio 2005&lt;/a&gt;. The last one will include the Workflow Designer for Visual Studio 2005 - &lt;span style="font-style: italic;"&gt;this is not compatible with Visual Studio Express Edition&lt;/span&gt; -  and project templates for building workflow projects. You start building your flow using the Workflow Designer. Your flow can be represented on either XML or Code. For XML, you will have an XML representation of your workflow in an *.xoml file. This is best solutions if you may change this XML later or even auto generate it with any other tools. The other representation is representing the Workflow as Code. Your workflow will be represented as a class which you can use when instantiating workflow instances using Workflow Runtime.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/wwf/Overview_Introducing_Windows_Workflow_Foundation"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://mnour.blogspot.com/2007/07/introducing-windows-workflow-foundation.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&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-2848260941032913727?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/2848260941032913727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=2848260941032913727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/2848260941032913727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/2848260941032913727'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/07/introducing-windows-workflow-foundation.html' title='Introducing Windows Workflow Foundation'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8026865706736010032</id><published>2007-07-08T02:38:00.000+03:00</published><updated>2007-07-22T19:05:45.202+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>SKDD II -  Another Success</title><content type='html'>Today, we had our SKDD 2 event on Cairo Conference Center. The day was really amazing. We discussed many topics and technologies. My session was about "Business Automation Using WF". We discussed how Windows Workflow Foundation can help you in automating your business process in an efficient and transparent way. For interested people, the materials, videos and demos will be available on demoday.us soon. Feel free to add your comments and feedback about the day and the sessions. Thanks for all people who attended this day and thanks for all SK stuff who made this day that great.&lt;br /&gt;&lt;br /&gt;Update: &lt;a href="http://www.demoday.us/downloads.aspx"&gt;Download Demoday Materials&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/mohammednour2003/demoday2.jpg" /&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-8026865706736010032?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8026865706736010032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=8026865706736010032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8026865706736010032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8026865706736010032'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/07/skdd-another-success.html' title='SKDD II -  Another Success'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-5541403451649821384</id><published>2007-04-28T13:10:00.000+03:00</published><updated>2007-04-28T13:24:55.495+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Microsoft Releases First Public Longhorn Beta</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/RjMggGpOXFI/AAAAAAAAAEc/Xr-Ul4MGh0Q/s1600-h/Longhorn.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/RjMggGpOXFI/AAAAAAAAAEc/Xr-Ul4MGh0Q/s400/Longhorn.gif" alt="" id="BLOGGER_PHOTO_ID_5058422542378622034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="border-bottom: 1px dashed rgb(0, 102, 204); background: transparent none repeat scroll 0% 50%; cursor: pointer; height: 1em; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" id="lw_1177754932_1"&gt;Microsoft&lt;/span&gt; has moved forward on the server side of the OS equation. The company just released the first public beta of Windows Server, aka Longhorn. It's  widely available for download by just about anyone who wants  it. And finally, the OS is feature complete.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/windowsserver/longhorn/default.mspx"&gt;Download Windows Server - Code Name Longhorn - Beta  3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Copied - eWeek.com&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-5541403451649821384?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/5541403451649821384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=5541403451649821384' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5541403451649821384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5541403451649821384'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/04/microsoft-releases-first-public.html' title='Microsoft Releases First Public Longhorn Beta'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_C-lhvxiWQkk/RjMggGpOXFI/AAAAAAAAAEc/Xr-Ul4MGh0Q/s72-c/Longhorn.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-23285547729586735</id><published>2007-04-12T11:45:00.000+02:00</published><updated>2007-04-12T11:54:14.410+02:00</updated><title type='text'>New Way in Searching</title><content type='html'>We usually get the new searching inventions from Google. This time we have a new search way introduced by &lt;a href="http://www.alltheweb.com/"&gt;alltheweb&lt;/a&gt;. It depends on something like AJAX style searching or auto-complete search. While typing, you get some suggested keywords which help you get results faster.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://livesearch.alltheweb.com/"&gt;AllTheWeb Live Search&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-23285547729586735?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/23285547729586735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=23285547729586735' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/23285547729586735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/23285547729586735'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/04/new-way-in-searching.html' title='New Way in Searching'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-1764369500945542318</id><published>2007-03-30T15:24:00.000+02:00</published><updated>2007-03-30T16:31:18.686+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Propagation of Trust &amp; Distrust</title><content type='html'>Yesterday, I presented my session in &lt;a href="http://www.silverkey.us/"&gt;SilverKey&lt;/a&gt; Internal Demo Day. The topic title was: "Propagation of Trust And Distrust". There is currently a great interest in maintaining and building trusting networks between the communities members so that you allow users to get the "high" quality of information before acting on it.&lt;br /&gt;&lt;br /&gt;Many variants of algorithms and techniques introduced. The techniques of trusting propagation are applied in many well known websites such as &lt;a href="http://www.epinion.com/"&gt;Epinion &lt;/a&gt;and &lt;a href="http://www.ebay.com/"&gt;eBay&lt;/a&gt;. In my session, I presented a mathematical approach which introduced by &lt;a href="http://www2004.org/proceedings/docs/1p403.pdf"&gt;IBM researchers&lt;/a&gt; and applied in a wide range of data in &lt;a href="http://www.epinion.com/"&gt;Epinion&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/1.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/2.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/3.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/4.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/5.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/6.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/7.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/8.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/9.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/9.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/10.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/10.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/11.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/11.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/12.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/12.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/13.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/13.jpg" alt="" border="0" /&gt;&lt;/a&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://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/14.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.geocities.com/mohammednour2003/Propagation_of_Trust_and_Distrust/14.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&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-1764369500945542318?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/1764369500945542318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=1764369500945542318' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1764369500945542318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1764369500945542318'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/03/propagation-of-trust-distrust.html' title='Propagation of Trust &amp; Distrust'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-1284770225249873696</id><published>2007-03-21T11:58:00.000+02:00</published><updated>2007-03-21T16:12:12.410+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenXML'/><title type='text'>Open XML and Java</title><content type='html'>As you know Open XML doesn't target only Microsoft products. That is - we find currently many ambitious projects to enhance other programming languages and frameworks to make use of Open XML capabilities. Java is one of the main targets here. This is a &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=292715"&gt;meeting with Julien Chable&lt;/a&gt; who worked in an open-source API project to provide the functionality of System.IO.Packaging - which used in .NET Framework 3.0 - to the Java developers.&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-1284770225249873696?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/1284770225249873696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=1284770225249873696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1284770225249873696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1284770225249873696'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/03/open-xml-and-java.html' title='Open XML and Java'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-1654568107161688379</id><published>2007-03-19T13:22:00.000+02:00</published><updated>2007-03-21T12:14:31.725+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>IP-To-Country Mapping</title><content type='html'>I have just found this interesting &lt;a href="http://ip-to-country.webhosting.info/book/print/5"&gt;IP-To-Country&lt;/a&gt; mapping database which enables you to map a certain IP Number to Country. The problem is that this database is not alwayes up-to-date. So, you may take care of this point when you using it. Also, you should check the copyrights section if you want to use it in a commercial applications. The database uses  &lt;a href="http://ip-to-country.webhosting.info/node/view/55?XID=1686936da68d30ca5013b22d83c599f3"&gt;IP Number&lt;/a&gt; ranges for identifying the addressed country.&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-1654568107161688379?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/1654568107161688379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=1654568107161688379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1654568107161688379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/1654568107161688379'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/03/ip-to-country-mapping.html' title='IP-To-Country Mapping'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6980799614811063307</id><published>2007-03-12T19:34:00.000+02:00</published><updated>2007-03-13T02:15:47.296+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Virtual Earth 3D Control</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/RfWPoOezaxI/AAAAAAAAAEE/knLwStCmjQ4/s1600-h/fig01.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/RfWPoOezaxI/AAAAAAAAAEE/knLwStCmjQ4/s200/fig01.gif" alt="" id="BLOGGER_PHOTO_ID_5041093279155972882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="clsGloss"&gt;The Virtual Earth 3D&lt;/span&gt;  control is a new tool released by Microsoft for visualizing the entire world in three dimensions. Rather than a standalone application, Virtual Earth™ 3D is implemented as a managed control, which allows seamless integration with Web sites or standalone applications. The Microsoft&lt;sup class="clsSmall"&gt;®&lt;/sup&gt; .NET Framework security model gives users the capability of dynamically loading plug-ins to supply data, but restricting them to execution in a partial-trust environment.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://http//msdn.microsoft.com/msdnmag/issues/07/03/EndBracket/"&gt;Get More Details&lt;/a&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://mnour.blogspot.com/2007/03/virtual-earth-3d-control.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://mnour.blogspot.com/2007/03/virtual-earth-3d-control.html" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&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-6980799614811063307?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6980799614811063307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=6980799614811063307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6980799614811063307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6980799614811063307'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/03/virtual-earth-3d-control.html' title='Virtual Earth 3D Control'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_C-lhvxiWQkk/RfWPoOezaxI/AAAAAAAAAEE/knLwStCmjQ4/s72-c/fig01.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-7752287696982773870</id><published>2007-03-12T12:55:00.000+02:00</published><updated>2007-03-13T01:42:34.940+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Methodologies'/><title type='text'>Customer-Developer Relationship</title><content type='html'>I was reading on &lt;span style="font-style: italic;"&gt;&lt;a href="http://www.amazon.com/Agile-Software-Development-Ecosystems-Highsmith/dp/0201760436"&gt;"Agile Software Development Ecosystems"&lt;/a&gt;- Chapter 5: Delivering Something Useful&lt;/span&gt;. The chapter was talking about the customer-developer relationship and the best methodolgoies which should be followed.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;One of the points I liked in this chapter which was talking about demand-driven methodology when you're dealing with your customer. That is you should try to avoid forcasting as much as you can and wait for the customer to demand this feature. This will avoid any missunderstanding and minimize the effort of doing the task and changing it afterwards.&lt;br /&gt;&lt;br /&gt;Another nice point, when the author was talking about the developers of customer-domain knowledge. Actually, this skill is rarely to find in most of the developers. Customer-domain aware developers  - who have the ability to know the terminology used by the customers, recommend features based on their knowledge, and even use their own experience to fill in details-level requirements gaps.  In my point of view, this is a kind of "Good" forecasting which is based on knowledge as developer of this kind know by experience what the customer will demand and what can be done to make the customer life easier. This customer-domain awareness save a lot of time which might be consumed in fixing and modifying the features after customer reviewing.&lt;br /&gt;&lt;br /&gt;Also, the chapter was talking about the Proxy Users - the ones we called: "System Analysts". The chapter discussed how Proxy Users are important in the customer-developer relationship. The point which take my interest was that Proxy users sometimes fall in a problem when they begin to believe that they actually are the customers! and start to block the direct contact between the developers and real customers. This will increase the probability of failure to deliver the project as expected by the customer and will increase the number of iterations needed to resolve the requirement.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.digg.com/software/Customer_Developer_Relationship"&gt;Digg This Post!&lt;/a&gt;&lt;br /&gt;&lt;/span&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-7752287696982773870?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/7752287696982773870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=7752287696982773870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7752287696982773870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7752287696982773870'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/03/customer-developer-relationship.html' title='Customer-Developer Relationship'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8180289882606599997</id><published>2007-03-08T23:57:00.000+02:00</published><updated>2007-03-09T14:50:23.378+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>My Post on OpenXMLDeveloper.org</title><content type='html'>My post about &lt;a href="http://mnour.blogspot.com/2007/02/creating-dynamic-docx-files.html"&gt;Generating Dynamic OpenXML Docx Files&lt;/a&gt; is now on OpenXMLDeveloper.org - The Official Microsoft site for OpenXML. &lt;a href="http://openxmldeveloper.org/archive/2007/03/07/1302.aspx"&gt;Check the post on OpenXMLDeveloper.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://openxmldeveloper.org/archive/2007/03/07/1302.aspx"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/RfCIdYE1QuI/AAAAAAAAADo/OgLKayT9mWg/s400/openxml.jpg" alt="" id="BLOGGER_PHOTO_ID_5039678021287887586" border="0" /&gt;&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-8180289882606599997?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8180289882606599997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=8180289882606599997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8180289882606599997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8180289882606599997'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/03/hay-my-post-on-openxmldeveloperorg.html' title='My Post on OpenXMLDeveloper.org'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_C-lhvxiWQkk/RfCIdYE1QuI/AAAAAAAAADo/OgLKayT9mWg/s72-c/openxml.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3898455109898652130</id><published>2007-03-01T20:21:00.000+02:00</published><updated>2007-03-01T23:07:50.621+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Visual Studio Code Name "Orcas" March CTP Available Now!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/Reca2Cdd8JI/AAAAAAAAADc/Su2oJW_DZMA/s1600-h/aa700831.1VS1.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/Reca2Cdd8JI/AAAAAAAAADc/Su2oJW_DZMA/s400/aa700831.1VS1.gif" alt="" id="BLOGGER_PHOTO_ID_5037024223912915090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span&gt;Get an early look at Visual Studio codename "Orcas". &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx"&gt;Orcas CTP&lt;/a&gt; is now available. &lt;/span&gt;The next version of Visual Studio, Visual Studio code name “Orcas”, will provide an industry-leading developer experience for Windows Vista, the 2007 Microsoft Office system, and the Web. In addition, it will continue in the Microsoft tradition of development language innovation.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&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-3898455109898652130?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3898455109898652130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=3898455109898652130' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3898455109898652130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3898455109898652130'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/03/visual-studio-code-name-orcas-ctp.html' title='Visual Studio Code Name &quot;Orcas&quot; March CTP Available Now!'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_C-lhvxiWQkk/Reca2Cdd8JI/AAAAAAAAADc/Su2oJW_DZMA/s72-c/aa700831.1VS1.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8870314401727003235</id><published>2007-03-01T13:58:00.000+02:00</published><updated>2007-03-03T19:05:46.843+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Industry'/><title type='text'>100 Best Employers</title><content type='html'>Maybe you see it before, here is the &lt;a href="http://money.cnn.com/magazines/fortune/bestcompanies/2007/full_list/"&gt;100 Best Employers&lt;/a&gt; according to Fortune Magazine survey.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://digg.com/business_finance/Best_100_Employers"&gt;Digg it!&lt;/a&gt;&lt;br /&gt;&lt;/span&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-8870314401727003235?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8870314401727003235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=8870314401727003235' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8870314401727003235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8870314401727003235'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/03/best-100-employers.html' title='100 Best Employers'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-5671552474443458097</id><published>2007-02-27T21:42:00.000+02:00</published><updated>2007-08-14T12:09:49.326+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenXML'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Generating Dynamic  OpenXML Docx Files</title><content type='html'>Recently, I needed to integrate one of my applications to MS Office Word 2007 by generating dynamic &lt;span style="font-style: italic;"&gt;*.docx&lt;/span&gt; reports. Actually, I didn't want to just find the steps to do it. I wanted to make a reusable library so that, I can use it independently in any project in the future.&lt;/p&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;google_ad_client = "pub-6699943802796732";google_ad_width = 728;google_ad_height = 90;google_ad_format ="728x90_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "f6f6f6"; google_color_bg = "f6f6f6";google_color_link = "550296";google_color_text = "000000";google_color_url = "550296";&lt;/script&gt;&lt;br /&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;&lt;br /&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;Introducing Docx File Format&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In Office 2007, new file formats are introduced such as docx (for MS Word) and xlsx for (MS Excel). These extensions are based on an &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-376.htm"&gt;ECMA OpenXML standard&lt;/a&gt; which enables you to define your data and styles based an XML format specifications (such as &lt;span style="font-style: italic;"&gt;wordprocessorML &lt;/span&gt;for word and &lt;span style="font-style: italic;"&gt;spreadsheetML &lt;/span&gt;for excel). So, in the end, it's just an XML and you easily control the style, data and configuration of your office documents by modifying some XML documents.&lt;br /&gt;&lt;br /&gt;Here, I will focus on the new MS Word file format - docx. The format is actually a zip achieve file which means you can open it using any zip extractors. The &lt;span style="font-style: italic;"&gt;*.docx&lt;/span&gt; file itself is called Package. When you unzip the content of &lt;span style="font-style: italic;"&gt;*.docx&lt;/span&gt; file, you will have a collection of folders and XML files. Each file is called &lt;span style="font-style: italic;"&gt;part&lt;/span&gt;. These parts contains all the needed styles, layout, fonts and configurations of your word document. And the relations between these parts or files are also defined in XML. This is an important point here as XML-like files enable the developers to change the file style or even the entire data using any programming language. It's not about Microsoft technologies. OpenXML is now an &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-376.htm"&gt;ECMA standard&lt;/a&gt; and the format now is accessible to any programming language.&lt;br /&gt;&lt;br /&gt;The XML part of interest in docx files is &lt;span style="font-style: italic;"&gt;"document.xml"&lt;/span&gt;. This part contains all the data written in the word document. To see its formate, try to make a word document, write any text inside it, unzip, open &lt;span style="font-style: italic;"&gt;document.xml&lt;/span&gt; which exists in "&lt;span style="font-style: italic;"&gt;word&lt;/span&gt;" folder and see how your word document is expressed as XML file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;GenericWordDocument Class&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this section, I will explain my library design which I made to generate my dynamic documents. I created a class called &lt;span style="font-style: italic;"&gt;GenericWordDocument&lt;/span&gt;. This is the main class in my library. Beside this class, I created a base class called &lt;span style="font-style: italic;"&gt;TemplateFile&lt;/span&gt;. This class represents the docx template file&lt;span style="font-style: italic;"&gt; &lt;/span&gt;which my document will inherits its styles, fonts and main characteristics. This help me so that I can make all the static visualization by hand (just by opening Office 2007, set the colors, document header, footers and all lovely static staff)  and then use these visualization in my generated document by taking a copy of this template and modify it dynamically within my program.&lt;br /&gt;&lt;br /&gt;I have also some additional classes for generating dynamic data. The first one is &lt;span style="font-style: italic;"&gt;Iterator &lt;/span&gt;&lt;span&gt;Class&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;and the other one called &lt;span style="font-style: italic;"&gt;TemplateRepeatedItem &lt;/span&gt;which is inherited from &lt;span style="font-style: italic;"&gt;TemplateItem&lt;/span&gt;. So that you can have a repeated data to be generate in the word document. Simply you set the XML style of the iterator, when a new Item created in the Iterator it will inherit the style and reformulate itself with the manipulated data.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/ReamXCdd8EI/AAAAAAAAACg/iBodPBnmMB0/s1600-h/UML.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/ReamXCdd8EI/AAAAAAAAACg/iBodPBnmMB0/s400/UML.jpg" alt="" id="BLOGGER_PHOTO_ID_5036896147988148290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, suppose I want to generate a simple word report for some products in my store. I will make a docx template file, add some keywords inside it such as: "#STORE_NAME#", "#COMPANY_NAME#" and so on. This keyword will be replaced with my data within my program. The following snippet show how I will use &lt;span style="font-style: italic;"&gt;GenericWordDocument&lt;/span&gt;&lt;span&gt; in this simple case&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_C-lhvxiWQkk/RecKPidd8FI/AAAAAAAAACs/EvDSBzpyF1o/s1600-h/Code_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/RecKPidd8FI/AAAAAAAAACs/EvDSBzpyF1o/s400/Code_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5037005970301907026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Suppose, I want to generate iterated rows for some products in my company store. I write down something like that:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_C-lhvxiWQkk/RecKyCdd8GI/AAAAAAAAAC0/4X1I_ER3--g/s1600-h/Code_2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/RecKyCdd8GI/AAAAAAAAAC0/4X1I_ER3--g/s400/Code_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5037006563007393890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also, you can make nested iterations as each iterator aggregate another iterator inside it. So, you can generate Product list and for each product you can, for example, list its accessories.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;Reading/Editing XML Parts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;.NET Framework 3.0 gives you the ability to read &lt;span style="font-style: italic;"&gt;*.docx &lt;/span&gt;files and its XML parts using &lt;span style="font-style: italic;"&gt;WindowsBase&lt;/span&gt; assembly. You just add a reference for WindowsBase assembly to your project and you can access the inner hierarchy  and parts of docx format without extracting it.&lt;br /&gt;&lt;br /&gt;The following is a method which read document.xml part from the docx file:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_C-lhvxiWQkk/RecLHydd8HI/AAAAAAAAAC8/ZpvyGdpobuk/s1600-h/Code_3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/RecLHydd8HI/AAAAAAAAAC8/ZpvyGdpobuk/s400/Code_3.jpg" alt="" id="BLOGGER_PHOTO_ID_5037006936669548658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And the following snippet is the part which generate the word document and write the modified XML to document.xml&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_C-lhvxiWQkk/RecLeSdd8II/AAAAAAAAADE/Z-Eo7kHy2w4/s1600-h/Code_4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/RecLeSdd8II/AAAAAAAAADE/Z-Eo7kHy2w4/s400/Code_4.jpg" alt="" id="BLOGGER_PHOTO_ID_5037007323216605314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;More about OpenXML?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I recommend these links for learning more about &lt;span style="font-style: italic;"&gt;Office OpenXML - OOML &lt;/span&gt;and the new MS Office 2007 file formats:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Office_Open_XML#Container_structure"&gt;Wikipedia: Office Open XML - OOML&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.devx.com/MicrosoftISV/Article/30907/2046"&gt;5 Cool Things to Know About New Office 2007 File Formats&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/kevinboske/archive/2006/02/13/531358.aspx"&gt;Getting Started with OpenXML and WinFX&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/dmahugh/archive/2007/03/01/interoperability-what-s-in-a-name.aspx"&gt;Interoperability: What's in a name?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://openxmldeveloper.org/"&gt;OpenXML Developer&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this post, I tried to make use of OpenXML format of the docx file to create dynamic word documents. I think the new OpenXML formats of Office 2007 is a worthy addition to the Microsoft products interoperability which will increase the developers ability to create more usable and productive projects.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://mnour.blogspot.com/2007/02/creating-dynamic-docx-files.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://mnour.blogspot.com/2007/02/creating-dynamic-docx-files.html" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://digg.com/software/Generating_Dynamic_OpenXML_Docx_Files"&gt;Digg it&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/users/profile/223642.html"&gt;Vote For it&lt;/a&gt;&lt;br /&gt;&lt;/span&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-5671552474443458097?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/5671552474443458097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=5671552474443458097' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5671552474443458097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/5671552474443458097'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/02/creating-dynamic-docx-files.html' title='Generating Dynamic  OpenXML Docx Files'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_C-lhvxiWQkk/ReamXCdd8EI/AAAAAAAAACg/iBodPBnmMB0/s72-c/UML.jpg' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-9021738511119007618</id><published>2007-02-24T03:07:00.000+02:00</published><updated>2007-02-25T12:39:54.362+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Industry'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Average .NET Developers Salaries</title><content type='html'>Are .Net developers really paid higher salaries than the traditional development languages? I have just found this survey about the average salaries for developers in UK. The survey covers several development languages like C++, JAVA, .NET and Delphi. It was made in August-October 2006. You may check it here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.accelerated-ideas.com/aiNETSalary.aspx"&gt;Average Salaries Survey&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-9021738511119007618?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/9021738511119007618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=9021738511119007618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/9021738511119007618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/9021738511119007618'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/02/net-average-salaries-abroad.html' title='Average .NET Developers Salaries'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3888690568603872927</id><published>2007-02-23T20:36:00.000+02:00</published><updated>2007-02-24T13:21:37.839+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Filtering Procedures.. Do you make it right?</title><content type='html'>All of us do filtering in their project. It's one of the most repeated functionalities. But do we make it well? How do you make your filtering procedures? &lt;span class="fullpost"&gt;Ok.. Have a look on the following one:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;CREATE PROCEDURE std_GetFiles&lt;br /&gt;         @fileCategory varchar(50),&lt;br /&gt;         @tag varchar(50)&lt;br /&gt;AS&lt;br /&gt;      declare @SQL as nvarchar(200)&lt;br /&gt;&lt;br /&gt;      SET @sql = 'SELECT * FROM tscoFileIndex WHERE '&lt;br /&gt;&lt;br /&gt;      if @fileCategory &lt;&gt; null&lt;br /&gt;          set @sql = @sql + ' FileCategory = ' + @fileCategory + ' and '&lt;br /&gt;&lt;br /&gt;      if @tag  &lt;&gt; null&lt;br /&gt;          set @sql = @sql + ' tag = ' + @tag + ' and '&lt;br /&gt;&lt;br /&gt;      SET @SQL= LEFT(@SQL, LEN(@SQL) -4)&lt;br /&gt;&lt;br /&gt;GO&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is the first way come to your mind when you trying to do filtering. But take care. Actually, all the string concatenation in this procedure make your data under threaten. As this allow procedure users to inject sql statements inside your concatenated query by passing unexpected paramaters through "fileName" and "tag" inputs. Also the many if conditions here affects your procedure performance.&lt;br /&gt;&lt;br /&gt;The alternative, which is better than this, would be something like that:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;CREATE PROCEDURE std_GetFiles&lt;br /&gt;           @fileCategory varchar(50),&lt;br /&gt;           @tag varchar(50)&lt;br /&gt;AS&lt;br /&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM tscoFileIndex&lt;br /&gt;WHERE (@fileCategory is null OR FileCategory = @fileCategory ) AND (@tag is null OR tag = @tag)&lt;br /&gt;&lt;br /&gt;GO&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So, you match all rows if the parameter is null, and use the&lt;br /&gt;condition when the parameter is not null.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://mnour.blogspot.com/2007/02/filtering-procedures-security-threatens.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://mnour.blogspot.com/2007/02/filtering-procedures-security-threatens.html" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&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-3888690568603872927?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3888690568603872927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=3888690568603872927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3888690568603872927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3888690568603872927'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/02/filtering-procedures-security-threatens.html' title='Filtering Procedures.. Do you make it right?'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-8593285213463996131</id><published>2007-02-11T11:42:00.000+02:00</published><updated>2007-02-15T03:06:33.179+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>MDC07 Review</title><content type='html'>As you know, MDC07 started in last 4th Feb. and remains for 4 days. The conference in general was very good, however some faults and management drawbacks affected its ultimate success. &lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Actually, I didn't attend Day 0, which has some problem in registration process (depending on attendees comments in this day). So, I will start talking about Day 1. In this day, The Keynote was so bad for a big conference like MDC. They have interviewed some young children who have basic programming skills, introducing windows vista and office features, interviewing with some business guys from ITWorx and Investment Ministry. The keynote wasn't informative at all as most of the attendees are developers and they are not interested in such stuff.&lt;br /&gt;&lt;br /&gt;Afterwards, I attend "Patrick Hynds" session. The session was talking about some tips for ASP.NET. Although, Patrick is one of the most popular speakers, in this MDC, he wasn't that good in choosing his session subjects. I felt that he didn't have anything new to talk about.&lt;br /&gt;&lt;br /&gt;I attend also "Agile Methodology" session, one of the most exciting and informative sessions in this MDC. The speakers was two members in "Microsoft patterns &amp; practices" in Microsoft HQ. The session was discussing the Agile Methodologies, XP Methods and Pair Programming.&lt;br /&gt;&lt;br /&gt;Then, attending Delving into VSTS for Software Testers. It was nice to see the Microsoft investment in Testing Module in VSTS. Not only API testing, but also some interesting testing techniques for the load and performance of your applications.&lt;br /&gt;&lt;br /&gt;In Day 2, some sessions were cancelled or removed, which was so confusing! I attended a session about VSTS tools for System Architects. The speaker was Microsoft guy called "Abhishek Mathur". So interested session. Afterwards, attended another session about ASP.NET AJAX-Style Server Controls for "Patrik Hynds". It was interested to know how to build your own ajax-style server controls if the current one doesn't fit your requirements. Then, I attended a session about Workflow Foundation. It wasn't so informative. Only some introduction. We expected more than that.&lt;br /&gt;&lt;br /&gt;The conference as overall was above average, not so perfect. However, the organization was better than the last years. The place - Cairo conference center - is better and perfect for this large event. Very nice ideas introduced in this conference such as encouraging students to join ImagineCup competition and supporting the online Egyptian communities. I think the sessions needs to target more the developers needs, removing all the propaganda stuff. We hope for better organization in the next years.&lt;br /&gt;&lt;/span&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-8593285213463996131?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/8593285213463996131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=8593285213463996131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8593285213463996131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/8593285213463996131'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/02/mdc07-review.html' title='MDC07 Review'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-2057325877426369797</id><published>2007-01-24T14:59:00.002+02:00</published><updated>2008-04-30T00:24:07.458+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>AutoCompleteExtender Problem</title><content type='html'>&lt;blockquote&gt;IMPORTANT NOTE: This problem was found when I was working with AJAX RC1.&lt;/blockquote&gt;&lt;br /&gt;Recently, I tried to add an AutoCompleteExtender for each item in a repeater (which itself is inside an UpdatePanel). In each item, I added also Edit/Update links, textbox and AutoCompleteExtender. Here is the HTML view&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;google_ad_client = "pub-6699943802796732";google_ad_width = 728;google_ad_height = 90;google_ad_format ="728x90_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "f6f6f6"; google_color_bg = "f6f6f6";google_color_link = "550296";google_color_text = "000000";google_color_url = "550296";&lt;/script&gt;&lt;br /&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;&lt;br /&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_C-lhvxiWQkk/RbdazkzcYVI/AAAAAAAAABE/A33P1BXsEVQ/s1600-h/html.GIF"&gt;&lt;img id="BLOGGER_PHOTO_ID_5023583751454351698" style="margin: 0px auto 10px; display: block; text-align: center;" src="http://4.bp.blogspot.com/_C-lhvxiWQkk/RbdazkzcYVI/AAAAAAAAABE/A33P1BXsEVQ/s400/html.GIF" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, it seems that TargetControlID property is not affected when the autocomplete set inside the repeater/updatepanel (Actually, don't know which one is the reason). But what I did is to set the TaregtControlID property of the extender in runtime, when the user trying to edit a certain item.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_C-lhvxiWQkk/Rbdbj0zcYWI/AAAAAAAAABM/T1TZ1dk3Kak/s1600-h/code.GIF"&gt;&lt;img id="BLOGGER_PHOTO_ID_5023584580383039842" style="margin: 0px auto 10px; display: block; text-align: center;" alt="Click To Enlarge" src="http://1.bp.blogspot.com/_C-lhvxiWQkk/Rbdbj0zcYWI/AAAAAAAAABM/T1TZ1dk3Kak/s400/code.GIF" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That is all!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://mnour.blogspot.com/2007/01/autocompleteextender-problem.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://mnour.blogspot.com/2007/01/autocompleteextender-problem.html" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&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-2057325877426369797?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/2057325877426369797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=2057325877426369797' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/2057325877426369797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/2057325877426369797'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/01/autocompleteextender-problem.html' title='AutoCompleteExtender Problem'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_C-lhvxiWQkk/RbdazkzcYVI/AAAAAAAAABE/A33P1BXsEVQ/s72-c/html.GIF' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-7878617718645907747</id><published>2007-01-24T13:45:00.000+02:00</published><updated>2007-02-03T23:02:58.248+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>AJAX Version 1.0 Available Now!</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_C-lhvxiWQkk/RbpdRUzcYZI/AAAAAAAAAB8/3Z7_3VoJ5bA/s1600-h/ajax.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/RbpdRUzcYZI/AAAAAAAAAB8/3Z7_3VoJ5bA/s400/ajax.gif" alt="" id="BLOGGER_PHOTO_ID_5024430886508847506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;AJAX Version 1.0 is now released for market and available to download.&lt;br /&gt;&lt;br /&gt;To download the full version, visit: &lt;a href="http://ajax.asp.net/"&gt;ASP.NET Offical Site&lt;/a&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;ASP.NET AJAX is a free framework for quickly creating a new generation of more efficient, more interactive and highly-personalized Web experiences that work across all the most popular browsers.&lt;br /&gt;&lt;br /&gt;With ASP.NET AJAX, you can:&lt;br /&gt;&lt;br /&gt;Create next-generation interfaces with reusable AJAX components.&lt;br /&gt;Enhance existing Web pages using powerful AJAX controls with support for all modern browsers.&lt;br /&gt;&lt;br /&gt;Continue using Visual Studio 2005 to take your ASP.NET 2.0 sites to the next level.&lt;br /&gt;Access remote services and data directly from the browser without writing a ton of complicated script.&lt;br /&gt;&lt;br /&gt;Enjoy the benefits of a free framework with 24x7 technical support provided by Microsoft.&lt;br /&gt;&lt;/span&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-7878617718645907747?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/7878617718645907747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=7878617718645907747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7878617718645907747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/7878617718645907747'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/01/ajax-vesrion-10-available-now.html' title='AJAX Version 1.0 Available Now!'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_C-lhvxiWQkk/RbpdRUzcYZI/AAAAAAAAAB8/3Z7_3VoJ5bA/s72-c/ajax.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-3426545026836833247</id><published>2007-01-24T12:26:00.000+02:00</published><updated>2007-12-27T13:21:28.558+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Paging Implementation With SQL</title><content type='html'>When you see how the paging is a piece-of-cake now in .NET server controls (like GridView), you should imagine how much amount of work is needed to do paging in early days. On of the suggestions was to fetch all the data block and store them on a session variable or any such temporary allocation and just do your paging in you business layer! Ok..I hear someone say what a silly solution! That is true. This is really a mess when you working on huge data blocks. So, the best way is to do you paging in your data layer.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;google_ad_client = "pub-6699943802796732";google_ad_width = 728;google_ad_height = 90;google_ad_format ="728x90_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "f6f6f6"; google_color_bg = "f6f6f6";google_color_link = "550296";google_color_text = "000000";google_color_url = "550296";&lt;/script&gt;&lt;br /&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;&lt;br /&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;You may ask? why I should consider paging while I have ready-to-use paging server controls? .. Well, Although, .NET provide ready-to-use controls with paging feature (like GridView), you still need to implement paging inline for other controls such as Repeaters and Datalists. &lt;br /&gt;&lt;br /&gt;Recently, I was searching for doing paging using a single SQL statement. Unfortunatily, solutions differ from DBMS to another. For example, in MySQL, you can make the paging using a SQL statement like that:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;SELECT fields FROM table LIMIT $offset,$pgsize&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In the other side, SQL Server doesn't have such keywords for paging. But still there is a solution. You can go around and use "TOP" keyword to do the paging using SQL. For example, if your page size is PAGESIZE, you can divide you data to several pages as following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;SELECT TOP PAGESIZE * FROM EMP WHERE ID NOT IN (SELECT TOP OFFSET ID FROM EMP)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;PAGSIZE is constant,and you just change the OFFSET. For example, if your PAGESIZE is 20, then your offset should be: 0, 20, 40 and so on. I think this SQL statement is a piece of art! I really like it!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://mnour.blogspot.com/2007/01/paging-implementation-with-sql.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://mnour.blogspot.com/2007/01/paging-implementation-with-sql.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&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-3426545026836833247?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/3426545026836833247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=3426545026836833247' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3426545026836833247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/3426545026836833247'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/01/paging-implementation-with-sql.html' title='Paging Implementation With SQL'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-6656193936830257582</id><published>2007-01-13T18:19:00.000+02:00</published><updated>2007-01-13T18:44:50.039+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>MDC2007 Registeration Starting Up</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_C-lhvxiWQkk/RakIMkzcYQI/AAAAAAAAAAY/fiMdu426Qi8/s1600-h/MDC2007.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5019552271812026626" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_C-lhvxiWQkk/RakIMkzcYQI/AAAAAAAAAAY/fiMdu426Qi8/s400/MDC2007.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;MDC2007 started up its registeration process for attending the event. MDC 2007 is the biggest Developers' Conference of the year in the Middle East, and is a critical event for any developer who wants to see the newest as well as the next-generation technology. MDC07 is full of sessions and activities that help you learn the current and future of the Microsoft platform and get to know people who are as passionate about software as you are.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;MDC2007 will be held in Cairo International Conference Center, between February 4-7. The registeration fees is 100 Egyptian Bound, which you will have to pay in the first of February, 2007 in Cairo International Center.&lt;br /&gt;&lt;br /&gt;For Registeration, &lt;a href="http://www.mdc2007.com/"&gt;Visit MDC2007 Official Site&lt;/a&gt;&lt;/div&gt;&lt;/span&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-6656193936830257582?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/6656193936830257582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=6656193936830257582' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6656193936830257582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/6656193936830257582'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/01/mdc2007-registeration-starting-up.html' title='MDC2007 Registeration Starting Up'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_C-lhvxiWQkk/RakIMkzcYQI/AAAAAAAAAAY/fiMdu426Qi8/s72-c/MDC2007.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-541296767639051479</id><published>2007-01-13T01:16:00.000+02:00</published><updated>2007-02-03T23:05:53.802+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>iPhone - New Apple Device</title><content type='html'>iPhone combines three products — a revolutionary mobile phone, a widescreen iPod with touch controls,&lt;a href="http://3.bp.blogspot.com/_C-lhvxiWQkk/Raga9EzcYPI/AAAAAAAAAAM/QY6REDCELzU/s1600-h/iphone.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5019291421268271346" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_C-lhvxiWQkk/Raga9EzcYPI/AAAAAAAAAAM/QY6REDCELzU/s400/iphone.gif" border="0" /&gt;&lt;/a&gt; and a breakthrough Internet communications device with desktop-class email, web browsing, maps, and searching — into one small and lightweight handheld device. iPhone also introduces an entirely new user interface based on a large multi-touch display and pioneering new software, letting you control everything with just your fingers. So it ushers in an era of software power and sophistication never before seen in a mobile device, completely redefining what you can do on a mobile phone.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;The phone will be available in two models, 4GB and 8GB priced at $499 and $599 respectively, and will ship to the US in June of this year. Europe will get the phone in the fourth quarter, while Asia will wait till 2008.&lt;br /&gt;&lt;br /&gt;It's nice to mention that Microsoft has recently released Zune. In my opinion, iPhone has crashed any expectations and provide ultimate features which can't be compared with Zune such as internet access and mobile phone cababilities.&lt;br /&gt;&lt;br /&gt;On the other hand, Cisco sues Apple over use of iPhone trademark. Cisco said in the complaint that Apple had attempted to get rights to the iPhone name several times, but after Cisco refused, the company created a front company to try to acquire the rights another way, according to the lawsuit. For more about this issue, &lt;a href="http://news.com.com/Cisco+sues+Apple+over+use+of+iPhone+trademark/2100-1047_3-6149285.html"&gt;click here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finally, it's the industry challenge and days will be tell us who wins.&lt;br /&gt;&lt;/span&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-541296767639051479?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/541296767639051479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=541296767639051479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/541296767639051479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/541296767639051479'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/01/iphone-new-apple-device.html' title='iPhone - New Apple Device'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_C-lhvxiWQkk/Raga9EzcYPI/AAAAAAAAAAM/QY6REDCELzU/s72-c/iphone.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-116768666683415059</id><published>2007-01-01T23:11:00.000+02:00</published><updated>2007-01-13T01:43:17.801+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Zune: The Microsoft iPod</title><content type='html'>It seems that Microsoft want to straggle in all the &lt;a href="http://photos1.blogger.com/x/blogger/1337/1499/1600/985273/235x120preload.jpg"&gt;&lt;img style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://photos1.blogger.com/x/blogger/1337/1499/320/251623/235x120preload.jpg" border="0" /&gt;&lt;/a&gt;fields even in the Media and Music World. Now, we have a new competitor for iPod - The Apple Product - which is introduced as Zune. Zune is a new handled device for music and media gives you almost the same features of iPod and maybe better. Explore more about it here: &lt;a href="http://www.zune.net/en-us/meetzune/device.htm"&gt;Zune - Official Site&lt;/a&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Depending on this &lt;a href="http://aditya-shirodkar.blogspot.com/2007/01/3-reasons-why-zune-could-beat-ipod.html"&gt;post&lt;/a&gt;, Zune has some key features which may lead to a great success over iPod. For example, Zune gives you the WiFi conectivity feature which is an attractive way in sharing songs and videos. However, you can't connect to the internet through it (&lt;a href="http://www.wifinetnews.com/archives/007009.html"&gt;see this&lt;/a&gt;). Also, the wide screen is something attractive for Zune fans.&lt;br /&gt;&lt;br /&gt;The challenge which Zune may face is in the Zune battery life which may not be able to last for a long time with the Wi-Fi connectivity and the device large screen. It's nice to mention here that, iPod battery can currently last for approximatly 12-hours.&lt;/span&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-116768666683415059?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/116768666683415059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=116768666683415059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116768666683415059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116768666683415059'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2007/01/zune-microsoft-ipod.html' title='Zune: The Microsoft iPod'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-116757222935048420</id><published>2006-12-31T15:18:00.000+02:00</published><updated>2007-01-01T23:51:46.306+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Industry'/><title type='text'>Microsoft War</title><content type='html'>Check out the strategy of Microsoft in building its industry Empire! The image illustrate cleary the way Microsoft challenges with its market competitors. This is a fact we can't ignore and is clearly obvious. Microsoft wants to challenge in every sector in the industry which is not reasonable. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Click on the image for a large view.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/x/blogger/1337/1499/1600/814184/softwarewars2.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger/1337/1499/400/204550/softwarewars2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&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-116757222935048420?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/116757222935048420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=116757222935048420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116757222935048420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116757222935048420'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/12/microsoft-war.html' title='Microsoft War'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-116750003199020744</id><published>2006-12-30T18:49:00.000+02:00</published><updated>2006-12-30T19:54:28.190+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Industry'/><title type='text'>PHP Popularity .. Why?</title><content type='html'>No one can deny that PHP is one of the most popular and spreading web language nowadays. What I want to discuss here is why PHP is a strong competitor in the web world?&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Simply, open any freelance website and you will get this fact: PHP fans are usually small business owners who needs to complete their project quickly with minimum cost. So, they need the easy way. They need ready made components. They need to find cost-effective programmers easily when a bug or error raised. This is what PHP giving them.&lt;br /&gt;&lt;br /&gt;You can find many open source PHP projects available on the net such as vBulletin, oscommerce, x-cart, pMachine, ez-Publish, gallery, phpBB and php-nuke, plus other hosting control panel favorites. Open source solutions for forums, images-organizer, CMS (Content Management Systems) and even e-commerce. Just some configurations and you have a ready working project in just a moment. This aspect can't be seen widely in .NET or J2EE for example.&lt;br /&gt;&lt;br /&gt;Another point here is the hosting. If we compare between the number of PHP hosting servers and Java for example. PHP is the winner in this comparison.&lt;br /&gt;&lt;br /&gt;Although the simplicity of the PHP, it's still has a drawback in the style of the code. Actually, PHP is going in the way of creating its rich libraries and assemblies. However, You still develop a PHP application in a missy old fashion way - a combination of HTML and the PHP script. Still no separation between the code and the design which considered unprofessional way in development. You still have problems here related to scalability and updatability.&lt;br /&gt;&lt;br /&gt;In my point of view, choosing PHP for projects is still related to the economical aspects not technical ones. Small customers still needs minimum development cost, and PHP is the ultimate choice if this is the only considered side here.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&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-116750003199020744?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/116750003199020744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=116750003199020744' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116750003199020744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116750003199020744'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/12/php-popularity-why.html' title='PHP Popularity .. Why?'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-116636351487011477</id><published>2006-12-17T15:17:00.003+02:00</published><updated>2008-02-25T01:27:17.567+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Industry'/><title type='text'>My Freelancing Experience in RentACoder</title><content type='html'>&lt;a href="http://www.rentacoder.com"&gt;RentACoder&lt;/a&gt; is one of the most popular sites on the net for freelancing seekers. Actually, I started working in RAC - AKA: &lt;a href="http://www.rentacoder.com"&gt;RentACoder&lt;/a&gt; - since May, 2006. Till now, I completed nearly 12 projects with different scales. However, I see many Egyptian coders are facing problem specially in the starting phase. Some related to strategy in getting a new bid and some is not related to the Coders skills itself, it's related to their way in getting a deal.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;google_ad_client = "pub-6699943802796732";google_ad_width = 728;google_ad_height = 90;google_ad_format ="728x90_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "f6f6f6"; google_color_bg = "f6f6f6";google_color_link = "550296";google_color_text = "000000";google_color_url = "550296";&lt;/script&gt;&lt;br /&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;&lt;br /&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;In your starting phase, always remember that you haven't anything to encourage buyers to choose you for their projects. You haven't created any projects neither been rated yet. So, my advise is to apply in many projects with a relative low cost. Don't think when you apply to a project that you will get it. It's not always guaranteed. In my starting phase in RAC, I applied for nearly 24 projects and finally get only one! The buyer needs a coder who can trust to complete the work. His trust comes - in most of the cases - from the coders rate and previous projects. But actually you haven't got that yet.&lt;br /&gt;&lt;br /&gt;In choosing your project, try to read carefully the requirements and any attached documents with the bid request. This will help you to identify if you can do the job or not. Don't bid for thing you can't do. Bid only for projects you think you can do or even you will be able to do.&lt;br /&gt;&lt;br /&gt;Another point here, make your bids reasonable. Fixing bugs, for example, is not like building enterprise project. Consider your bids well and put in your mind that many buyers considers many other things other than the financial cost. Buyers not always choose the lower bid!&lt;br /&gt;&lt;br /&gt;After you finished your first project, put in your consideration the next cost of your project. For example, if your first project was $100 cost, your next one shouldn't be less than that. Try to invest your experience.&lt;br /&gt;&lt;br /&gt;During the development, try always to know your buyer characteristics. Some buyers need daily reports about your work, other not. Formulate your behavior depending on the buyers characteristics. This sure will affect your rating and your client satisfaction.&lt;br /&gt;&lt;br /&gt;Try to gain the buyer loyalty. Buyers tends to use coders who gives them the best service. Try to build a good relationships with your buyers. This sometimes needs you to be more flexible in your dealing.&lt;br /&gt;&lt;br /&gt;Now you have collected a reasonable amount of money, and you need to get the cash. &lt;a href="http://www.rentacoder.com"&gt;RentACoder&lt;/a&gt; gives you 3 choices for the payment. Two of them are suitable for Egyptian coders. The first one (the cheapest) is receiving a check by mail with the specified money. The problem here is that the check is issued from "Bank of America", which has no branches here in Egypt. You will have to go to your international bank to transfer the fund to your bank account. This will take nearly 30 days.&lt;br /&gt;&lt;br /&gt;The other choice (the expensive one) is to get the money through &lt;a href="http://www.westernunion.com"&gt;Western Union&lt;/a&gt;. This is a money transfer company which have many branches in the world and in Egypt as well. &lt;a href="http://www.rentacoder.com"&gt;RentACoder&lt;/a&gt; will send you the money to &lt;a href="http://www.westernunion.com"&gt;Western Union&lt;/a&gt;, and you get paid from any &lt;a href="http://www.westernunion.com"&gt;Western Union&lt;/a&gt; branch here in Egypt. &lt;a href="http://www.westernunion.com"&gt;Western Union&lt;/a&gt; takes a percentage from the money transferred. But the good news here is that you got the money (in dollars) within the same day (or next day maximum) of sending.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a href="http://digg.com/software/My_Freelancing_Experience_in_RentACoder"&gt;I like this Article! - Digg it&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;/span&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-116636351487011477?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/116636351487011477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=116636351487011477' title='38 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116636351487011477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116636351487011477'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/12/my-freelancing-experience-in.html' title='My Freelancing Experience in RentACoder'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>38</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-116621156039300904</id><published>2006-12-15T20:02:00.018+02:00</published><updated>2008-04-30T15:24:47.501+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Industry'/><title type='text'>CMMI Certified Software Companies in Egypt</title><content type='html'>&lt;blockquote&gt;IMPORTANT NOTE: These statistics is based on the Software Engineering Institute (SEI) results. These results were published on this blog in &lt;span style="font-weight:bold;"&gt;December 2006.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;15 Egyptian software companies have already achieved SW-CMM/CMMI ( Software - Capability Maturity Model / Capability Maturity Model Integrated ).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;google_ad_client = "pub-6699943802796732";google_ad_width = 728;google_ad_height = 90;google_ad_format ="728x90_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "f6f6f6"; google_color_bg = "f6f6f6";google_color_link = "550296";google_color_text = "000000";google_color_url = "550296";&lt;/script&gt;&lt;br /&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;&lt;br /&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;table style="FONT-SIZE: 8pt; WIDTH: 800px; FONT-FAMILY: Arial; BORDER-COLLAPSE: collapse; HEIGHT: 942px" bordercolor="dimgray" cellpadding="5" width="800" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align:center" width="5%" bgcolor="#f7f4f4" &gt;&lt;b&gt;No.&lt;/b&gt;&lt;/td&gt;&lt;td width="22%" bgcolor="#f7f4f4" height="20"&gt;&lt;b&gt;Company&lt;/b&gt;&lt;/td&gt;&lt;td width="23%" height="20"&gt;CMM/CMMI&lt;/td&gt;&lt;td width="25%" height="20"&gt;Date Achieved&lt;/td&gt;&lt;td width="20%" height="20"&gt;Company website&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" width="5%" bgcolor="#f7f4f4" rowspan="2"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td width="22%" bgcolor="#f7f4f4" rowspan="2"&gt;&lt;b&gt;EDS-Egypt&lt;/b&gt;&lt;/td&gt;&lt;td width="23%" bgcolor="#ffffff" height="36"&gt;CMMI-Level 3&lt;/td&gt;&lt;td width="25%" bgcolor="#ffffff" height="36"&gt;26 August, 2004&lt;/td&gt;&lt;td width="25%" bgcolor="#ffffff" rowspan="2"&gt;&lt;a href="http://www.eds.com/" target="_new"&gt;http://www.eds.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="23%" bgcolor="#ffffff" height="34"&gt;CMM-Level 2&lt;/td&gt;&lt;td width="25%" bgcolor="#ffffff" height="34"&gt;February, 2003&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" width="5%" bgcolor="#f7f4f4" rowspan="4"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td width="22%" bgcolor="#f7f4f4" rowspan="4"&gt;&lt;b&gt;ITSoft&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" height="43"&gt;CMMI-Level 5&lt;/td&gt;&lt;td bgcolor="#ffffff" height="43"&gt;21 September, 2006&lt;/td&gt;&lt;td width="25%" bgcolor="#ffffff" rowspan="4"&gt;&lt;a href="http://www.itsoft.com.eg/" target="_new"&gt;http://www.itsoft.com.eg/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="23%" bgcolor="#ffffff" height="43"&gt;CMMI-Level 4&lt;/td&gt;&lt;td width="25%" bgcolor="#ffffff" height="43"&gt;25 August, 2005&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ffffff" height="34"&gt;CMM-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff" height="34"&gt;24 June, 2004&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="23%" bgcolor="#ffffff" height="42"&gt;CMM-Level 2&lt;/td&gt;&lt;td width="25%" bgcolor="#ffffff" height="42"&gt;6 May, 2004&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" width="5%" bgcolor="#f7f4f4" rowspan="2"&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td width="22%" bgcolor="#f7f4f4" rowspan="2"&gt;&lt;b&gt;IBM-Egypt&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;CMMI-Level 5&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;5 October, 2005&lt;/td&gt;&lt;td width="25%" bgcolor="#ffffff" rowspan="2"&gt;&lt;a href="http://www.ibm.com/" target="_new"&gt;http://www.ibm.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="23%" bgcolor="#ffffff" height="41"&gt;CMM-Level 3&lt;/td&gt;&lt;td width="25%" bgcolor="#ffffff" height="41"&gt;16 August, 2004&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="47"&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="47"&gt;&lt;b&gt;Raya Software&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" height="47"&gt;CMMI-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff" height="47"&gt;3 September, 2004&lt;/td&gt;&lt;td bgcolor="#ffffff" height="47"&gt;&lt;a href="http://www.rayasoftware.com/" target="_new"&gt;http://www.rayasoftware.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="52" rowspan="2"&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="52" rowspan="2"&gt;&lt;b&gt;ITWorx&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" height="52"&gt;CMMI-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff" height="52"&gt;9 December, 2005&lt;/td&gt;&lt;td bgcolor="#ffffff" height="52" rowspan="2"&gt;&lt;a href="http://www.itworx.com/" target="_new"&gt;http://www.itworx.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ffffff" height="39"&gt;CMMI-Level 2&lt;/td&gt;&lt;td bgcolor="#ffffff" height="39"&gt;23 December, 2004&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41" rowspan="2"&gt;&lt;b&gt;6&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41" rowspan="2"&gt;&lt;b&gt;DMS&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;CMMI-Level 4&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;18 August,2005&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41" rowspan="2"&gt;&lt;a href="http://www.dmsegypt.com/" target="_new"&gt;http://www.dmsegypt.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ffffff" height="52"&gt;CMM-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff" height="52"&gt;11 August, 2004&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;7&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;Digital Vision&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 2&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;22 June, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.digitalvisionco.com/" target="_new"&gt;http://www.digitalvisionco.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;8&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;LINKdotNET&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;29 June, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.link.net/english/default" target="_new"&gt;http://www.link.net/english/default&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;9&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;Egypt Network&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 2&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;29 June, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.egyptnetwork.com/" target="_new"&gt;http://www.egyptnetwork.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;10&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;Delta Software&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 2&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;10 July, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.delta-sw.com/" target="_new"&gt;http://www.delta-sw.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;11&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;Harf Information Technology&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;16 July, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.harf.com/" target="_new"&gt;http://www.harf.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;12&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;Microtech&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;21 July, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.microtech-eg.com/" target="_new"&gt;http://www.microtech-eg.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;13&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;Horizons Software&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;26 July, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.horizonssoftware.com/" target="_new"&gt;http://www.horizonssoftware.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;14&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;Fujitsu Egypt&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 2&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;26 July, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.fujitsu.com.eg/" target="_new"&gt;http://www.fujitsu.com.eg/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center" bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;15&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#f7f4f4" height="41"&gt;&lt;b&gt;VIAS EGYPT&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;CMMI-Level 3&lt;/td&gt;&lt;td bgcolor="#ffffff"&gt;21 September, 2006&lt;/td&gt;&lt;td bgcolor="#ffffff" height="41"&gt;&lt;a href="http://www.valeo.com/" target="_new"&gt;http://www.valeo.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&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-116621156039300904?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/116621156039300904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=116621156039300904' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116621156039300904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116621156039300904'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/12/cmmi-certified-software-companies-in.html' title='CMMI Certified Software Companies in Egypt'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-116561142535955426</id><published>2006-12-08T22:55:00.000+02:00</published><updated>2006-12-08T23:09:18.020+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Can You Hear Me Now?</title><content type='html'>&lt;a href="http://photos1.blogger.com/x/blogger/1337/1499/1600/178935/nsa_phone2_060516_nr_2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/1337/1499/320/322413/nsa_phone2_060516_nr_2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Cell phone users, beware.  The FBI can listen to everything you say, even when the cell phone is turned off.&lt;br /&gt;&lt;br /&gt;A recent court ruling in a case against the Genovese crime family revealed that the FBI has the ability from a remote location to activate a cell phone and turn its microphone into a listening device that transmits to an FBI listening post, a method known as a "roving bug."  Experts say the only way to defeat it is to remove the cell phone battery. &lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;"The FBI can access cell phones and modify them remotely without ever having to physically handle them," James Atkinson, a counterintelligence security consultant, told ABC News.  "Any recently manufactured cell phone has a built-in tracking device, which can allow eavesdroppers to pinpoint someone's location to within just a few feet," he added.&lt;br /&gt;&lt;br /&gt;References: &lt;a href="http://blogs.abcnews.com/theblotter/2006/12/can_you_hear_me.html"&gt;ABC News&lt;/a&gt;&lt;br /&gt;&lt;/span&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-116561142535955426?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/116561142535955426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=116561142535955426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116561142535955426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116561142535955426'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/12/can-you-hear-me-now.html' title='Can You Hear Me Now?'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-116517384363777189</id><published>2006-12-03T20:59:00.000+02:00</published><updated>2006-12-15T23:25:15.423+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Declared Accessibility Keywords .NET</title><content type='html'>Declared accessibility keywords definition are mostly the same for all the programming lanugage. In the next lines, I will state the basic definition of each acessibility keyword for .NET languages&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;strong&gt;Class Accessibility:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A class or struct can be declared as internal or public&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;internal: &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;access limited to the current assembly only.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;public:&lt;/span&gt;&lt;br /&gt;class marked as public can be accessed from outside the assembly.&lt;br /&gt;&lt;br /&gt;By default, classes are declared as internal, unless you didn't add the public kewyrod in the class declaration.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Class Members Accessibility&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;protected&lt;/span&gt;:&lt;br /&gt;Access limited to the types derived from the containing class.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;private&lt;/span&gt;:&lt;br /&gt;only class contains this member can access this member.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;internal protected&lt;/span&gt;:&lt;br /&gt;access limited to the current assembly OR access limited to the types derived from the containing class.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://mnour.blogspot.com/2006/12/declared-accessibility-keywords-in-net.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://mnour.blogspot.com/2006/12/declared-accessibility-keywords-in-net.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&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-116517384363777189?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/116517384363777189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=116517384363777189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116517384363777189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116517384363777189'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/12/declared-accessibility-keywords-net.html' title='Declared Accessibility Keywords .NET'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-116250569889713623</id><published>2006-11-03T00:13:00.000+02:00</published><updated>2006-11-03T00:14:59.986+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Google Opening Middle East Office in Egypt</title><content type='html'>Google will be basing their Middle East marketing &amp; sales operations in Cairo, although they already have a Research and Development Lab based in Israel. On Angelo's blog he states that the Arab world had expected Google to open their regional office in the elegant area of Dubai (UAE), but Google has decided on Egypt. &lt;br /&gt;&lt;br /&gt;Angelo writes on Stravinsky's Sizzlin' Shack (warning, two or more pop-up windows served):&lt;br /&gt;&lt;br /&gt;According to some sources, a few months ago, Google Egypt hired a Country Manager (Sherif Iskander — mentioned here) who also serves as a regional manager and is now looking around for suitable candidates to fill the posts of Associate Product Marketing Manager and Product Marketing Manager. An unofficial Google page at Wikia.com details why Google should choose Egypt as their Middle Eastern base for regional operations and at the Wiki's talk page, someone also notes the hiring of the regional manager for the Middle East and points to the vaccant positions. &lt;br /&gt;&lt;br /&gt;It seems that although the official Google jobs site lists the vacancy for a product marketing manager for their office in Egypt, the listing fails to mention that posting may require travel between London and Cairo, the same job posted on monster.com states that the job is located in London although it is for Google Egypt. I'm guessing here, but I think that Google is planning on pushing Arabized/localized versions of their enterprise solutions like the OneBox &amp; Google Earth. One of the reasons as to why Google might have chosen Egypt for their Middle Eastern regional office over Dubai, is since Yahoo already has a footing in terms of advertising sales &amp; marketing operations for the region over at Dubai's Internet City. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For more.. &lt;br /&gt;&lt;br /&gt;http://www.searchenginejournal.com/?p=3567&lt;br /&gt;&lt;br /&gt;http://www.dailystaregypt.com/article.aspx?ArticleID=1896&lt;br /&gt;&lt;br /&gt;COPIED!.&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-116250569889713623?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/116250569889713623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=116250569889713623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116250569889713623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/116250569889713623'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/11/google-opening-middle-east-office-in.html' title='Google Opening Middle East Office in Egypt'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115954906501491340</id><published>2006-09-29T18:49:00.000+02:00</published><updated>2006-12-19T15:52:34.486+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Engineering'/><title type='text'>Optimization Or Compatability ... Hard Choice!</title><content type='html'>I was reading an interview held with Shannon Hickey, the technical lead for the Swing toolkit team at Sun Microsystems. He was asked about his dream project which he would like to make one day. The answer was so impressive: &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;" ... As an engineer, I'd love to be able to clean up old and unused parts of the Swing toolkit and the Java programming language without having to worry about backward compatibility. It's just a dream though, because compatibility is very important to our customers and is something we take seriously. For instance, every time I fix a bug, even if I'm correcting completely wrong behavior, I must be careful not to break something for someone who is relying on that wrong behavior.&lt;br /&gt;&lt;br /&gt;For example, I modified JTable a while back to ensure that the focused row was set to the first row whenever the table gained its first data and was then set back to -1 when the table became empty. The goal was to ensure that tables showed focus whenever possible but to correctly use -1 if they are empty. This solved numerous open bugs.&lt;br /&gt;&lt;br /&gt;Unfortunately, within a couple of weeks, two bugs were filed against my change. It turned out that modifying the focused row fired events, and some existing client code wasn't prepared to deal with these events. Although I strongly want code to "do the right thing," I understood that we must try not to break existing code. Unfortunately, I had to pull this perfectly good code in favor of something less optimal. Now, the focused row always stays at -1, until either the developer or the user changes the selection. The funny thing is, I've seen bugs filed on this behavior since ..."&lt;br /&gt;&lt;br /&gt;You see. It is really hard to take care of all this issues when you developing technologies others will widely use.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://digg.com/software/Optimization_Or_Compatibility_Hard_Choice"&gt;I like this Article - Digg it&lt;/a&gt;&lt;/span&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-115954906501491340?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115954906501491340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115954906501491340' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115954906501491340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115954906501491340'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/09/optimization-or-compatability-hard.html' title='Optimization Or Compatability ... Hard Choice!'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115953415008318558</id><published>2006-09-29T14:41:00.000+02:00</published><updated>2006-09-29T19:54:22.353+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>RSS Feed Available Now!</title><content type='html'>You can keep uptodate with any post sent on this blog through the blog RSS feed. This is an XML-based file that you can use to display the blog posts in any RSS feed enabled softwares. Simply you add the blog RSS Feed to your software feeds and any new post will be displayed there. &lt;br /&gt;&lt;br /&gt;For example, if you use Gmail, you will find a "Web Clip" bar in the top of your mail client, showing your favorites feeds. You can add all favorite feeds from different URLs and all will be dispayed in this web clip.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1337/1499/1600/mnour_RSS_Feed.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/1337/1499/320/mnour_RSS_Feed.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My Weblog RSS Feed is: http://mnour.blogspot.com/rss.xml&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-115953415008318558?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115953415008318558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115953415008318558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115953415008318558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115953415008318558'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/09/rss-feed-available-now.html' title='RSS Feed Available Now!'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115953089609786074</id><published>2006-09-29T13:45:00.000+02:00</published><updated>2006-09-29T20:24:28.953+02:00</updated><title type='text'>Microsoft Visual Studio 2005 SP1 Showing Up</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/1337/1499/1600/mnour_VS_2005.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/1337/1499/320/mnour_VS_2005.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Microsoft has released the Visual Studio 2005 Service Pack 1 (SP1) Beta. Visual Studio 2005 shipped in November of 2005 and this Service Pack incorporates fixes that Microsoft have addressed since that release. You can test this beta and inform Microsoft about any bugs you may find. The beta program will run until October 30th.&lt;br /&gt;&lt;br /&gt;The fixes were mostly related to some reliability and security issues found in the last release of Visual Studio. &lt;br /&gt;&lt;br /&gt;You can participate in the beta program by visiting: &lt;a href="http://connect.microsoft.com/VisualStudio/content/content.aspx?ContentID=3311"&gt;Click Here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For more information, visit: &lt;a href="http://connect.microsoft.com/VisualStudio/"&gt;Microsoft Site&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-115953089609786074?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115953089609786074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115953089609786074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115953089609786074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115953089609786074'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/09/microsoft-visual-studio-2005-sp1.html' title='Microsoft Visual Studio 2005 SP1 Showing Up'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115809004525278860</id><published>2006-09-12T22:39:00.000+03:00</published><updated>2006-09-12T22:46:27.966+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Google Code Jam 2006</title><content type='html'>Google Code Jam 2006 Qualification Round was started in the last 5th, September. This competition is supported by google and aims to create an international competition in programming and problem solving. Depending on the round, you got a set of problems and you will have to solve it in a certain time.&lt;br /&gt;&lt;br /&gt;The qualification round consists of 2 problems - 250 point and 750 point problems - and you will have to solve these problems in 60 minutes. CodeJam gives you a great option to choose your favorite programming language to program with (Java, C#, VB.NET, C++ and Paython), which supports the idea of not giving much importance to the programming langauge and free the minds to solve the problem itself.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Qualification round will filter the participants to 1000 coders who will be qualified to continue to Round 1. The 1000 coders then will be filtered to be 100 who will get the prices and go to New York, USA to challenge again.&lt;br /&gt;&lt;br /&gt;Egypt existance in Google Code Jam this year was not enough. I am sure we have so many skills out there who need to be encouraged to participate and challenge.&lt;br /&gt;&lt;/span&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-115809004525278860?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115809004525278860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115809004525278860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115809004525278860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115809004525278860'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/09/google-code-jam-2006.html' title='Google Code Jam 2006'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115402847434944921</id><published>2006-07-27T22:27:00.000+03:00</published><updated>2006-07-27T22:28:44.770+03:00</updated><title type='text'>Changing Web References in VS.NET 2005</title><content type='html'>.NET gives you the ability to call webservices methods within a web or desktop applications. The problem you may face is that the webservice URL can be changed and so your application may not be able to call the webservice correctly.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Each .NET project calls webservices methods will have a folder called "webreferences" which contains three files:&lt;br /&gt;&lt;br /&gt;ServiceName.wsdl&lt;br /&gt;ServiceName.disco&lt;br /&gt;ServiceName.discomap&lt;br /&gt;&lt;br /&gt;You will have to open these files with any editor, and update the URLs of the webservices with new URL or IP address.&lt;br /&gt;&lt;br /&gt;Also, if your .NET project is web project, then you will need also to update the webservices URL in the web.config file.&lt;br /&gt;&lt;/span&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-115402847434944921?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115402847434944921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115402847434944921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115402847434944921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115402847434944921'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/07/changing-web-references-in-vsnet-2005.html' title='Changing Web References in VS.NET 2005'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115402839896930797</id><published>2006-07-27T22:25:00.000+03:00</published><updated>2006-09-13T22:36:39.170+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Port Forwarding</title><content type='html'>If you have a server inside your LAN and you hope to access this server from WAN (ex: internet), unfortunatlly, you will not be able to access this server with out making some changes to your router configurations. So that, any requests comes from port 80 will be forwarded to the server LAN IP address. &lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;For example, suppose you server local IP address is 198.65.1.144, and WAN address: 81.44.1.70. In your router configuration, forward any request comes on port 80 to 198.65.1.144. In this way, you will be able to access the server from the internet by addressing: http://81.44.1.70&lt;br /&gt;&lt;br /&gt;Of course this not just for port 80, for example, you server may receives the HTTP requests on another port, say 8080. So, you do the previous steps as it is but with this port number. And you will be able to connect to server from the internet by addressing: http://81.44.1.70:8080 &lt;br /&gt;&lt;/span&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-115402839896930797?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115402839896930797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115402839896930797' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115402839896930797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115402839896930797'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/07/port-forwarding.html' title='Port Forwarding'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115402832091202319</id><published>2006-07-27T22:18:00.000+03:00</published><updated>2006-07-27T22:25:21.393+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>ASP Problem in IIS6 and Windows Server 2003</title><content type='html'>You may encounter a problem in running classic ASP in IIS6/Windows Server 2003. So you may try to test an ASP page on IIS6 and you get "Page Not Found" error. This is beacuase IIS6 by default doesn't enable any Scripting language. HTML is the only script enabled by default &lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;To enable ASP Scripting, just open your IIS6 and on the left tree view. Click on "Web Service Extensions". The exiting extensions on the server will be listed. Click on “Active Server Pages” extension and enable it by clicking on “Allow” button. Then make a test ASP page and make sure that ASP scripting is working well.&lt;br /&gt;&lt;/span&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-115402832091202319?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115402832091202319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115402832091202319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115402832091202319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115402832091202319'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/07/asp-problem-in-iis6-and-windows-server.html' title='ASP Problem in IIS6 and Windows Server 2003'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115348821418565856</id><published>2006-07-21T16:23:00.000+03:00</published><updated>2006-07-21T16:25:51.353+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Webservice Authentication</title><content type='html'>Suppose you have a collection of webservices resides in some server. You would like not to give a public access to these webservices. What shall you do?&lt;br /&gt;&lt;br /&gt;Actually, you need some how an authentication mechanism to compromise the accessablity. One soultion would be to make an authentication webservice. Any client wants to access your webservices, should call it first. This webserice simply will take 2 parameters: username and password. The return value would be a hashcode.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;This hash code could be used afterward in accessing any other webservice. The interfaces for example for your webservices could be something like that:&lt;br /&gt;&lt;br /&gt;[C#]&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;string wsAuthenticate(string username, string password)&lt;br /&gt;string wsAnyOtherWebservice(string accessCode, ... ) &lt;/blockquote&gt;&lt;br /&gt;As you see, the returned hash code (access code) form wsAuthenticate will be used in accessing the other webservices and the client will not be able to get the service unless he have an account in your system.&lt;br /&gt;&lt;/span&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-115348821418565856?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115348821418565856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115348821418565856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115348821418565856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115348821418565856'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/07/webservice-authentication.html' title='Webservice Authentication'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-115348708997978254</id><published>2006-07-21T15:40:00.000+03:00</published><updated>2006-07-21T16:11:16.366+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Using SOAP Tool Kit 3.0 with VB Programs</title><content type='html'>Connecting to a webservice from a .NET desktop application is a piece of cake. But what about connecting to a webservice within unmanaged code - VB6/C++ programs? Actually SAOP Tool kit is the soultion. It is a Microsoft Tool used for calling webservices from unmanaged code.&lt;span class="fullpost"&gt;&lt;br /&gt;You can download the kit from the Microsoft Official website:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=c943c0dd-ceec-4088-9753-86f052ec8450&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=c943c0dd-ceec-4088-9753-86f052ec8450&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a code snippt to call a webservice form inside VB6 program:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Dim soap As New SoapClient30&lt;br /&gt;Dim serverURL as String&lt;br /&gt;Dim hashCode as string&lt;br /&gt;&lt;br /&gt;On Error GoTo ConnectionError&lt;br /&gt;&lt;br /&gt;Public Sub WebServiceConnect&lt;br /&gt;&lt;br /&gt;'Set Server URL&lt;br /&gt;serverURL = "&lt;a href="http://localhost/MyServiceName/Service.asmx?wsdl"&gt;http://localhost/MyServiceName/Service.asmx?wsdl&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;'Client is initialized&lt;br /&gt;soap.MSSoapInit serverURL&lt;br /&gt;&lt;br /&gt;'Calling the webservice&lt;br /&gt;hashCode = soap.wsAuthenticate(txtUsername.Text, txtPassword.Text)&lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;ConnectionError:&lt;br /&gt;&lt;br /&gt;MsgBox "Connection Error Encountered"&lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The tool now is in its third version. Micorsoft declared that the SOAP tool kit 3.0 will not be supported after 31st March, 2008 because of the next generation of the Microsoft softwares will be .NET based. There will be no need to use SAOP tool kit as VS.NET gives already the ability to connect easily to webservices from the .NET desktop programs.&lt;/span&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-115348708997978254?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/115348708997978254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=115348708997978254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115348708997978254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/115348708997978254'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/07/using-soap-tool-kit-30-with-vb.html' title='Using SOAP Tool Kit 3.0 with VB Programs'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-114666830159909478</id><published>2006-05-03T17:53:00.000+03:00</published><updated>2006-05-05T11:30:44.700+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Spiders &amp; Google Sitemaps</title><content type='html'>Internet Searching became one of the most popular services provided on the internet. Google, Yahoo, Altavista and AllTheWeb are all examples of search engines. Although, the simplicity of the searching, the inner technique used in searching is not easy as we think. Searh engines have to update their index regularlly and infiniatly.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Such engines use a special kind of softwares called “Spiders” or “Robots”. These softwares try to scan the whole internet to update their index with the new – or modified – locations, urls and contents. Depending on whatever algorithm or technqiue, “Spiders” will try extracts the keywords of the webpages content and restore the results on huge databases.&lt;br /&gt;&lt;br /&gt;To comprehense its service, Google had provide an effective service for webmasters so that they can increase the traffic of their website. The idea is that each website will have an XML file called “sitemap.xml”, this file should be uploaded in the highest root of the FTP space of the web application. This file will include the informaton about the site pages and how they frequently changed. Here is a sample file for a small website:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;urlset xmlns="http://www.google.com/schemas/sitemap/0.84"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;url&amp;gt;&lt;br /&gt;&amp;lt;loc&amp;gt;http://mnour.blogspot.com&amp;lt;/loc&amp;gt;&lt;br /&gt;&amp;lt;lastmod&amp;gt;2006-05-01&amp;lt;/lastmod&amp;gt;&lt;br /&gt;&amp;lt;changefreq&amp;gt;daily&amp;lt;/changefreq&amp;gt;&lt;br /&gt;&amp;lt;priority&amp;gt;1.0&amp;lt;/priority&amp;gt;&lt;br /&gt;&amp;lt;/url&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;url&amp;gt;&lt;br /&gt;&amp;lt;loc&amp;gt;http://mnour.blogspot.com/2006/04/sql-injection-part-1.html&amp;lt;/loc&amp;gt;&lt;br /&gt;&amp;lt;lastmod&amp;gt;2006-05-01&amp;lt;/lastmod&amp;gt;&lt;br /&gt;&amp;lt;changefreq&amp;gt;weekly&amp;lt;/changefreq&amp;gt;&lt;br /&gt;&amp;lt;priority&amp;gt;1.0&amp;lt;/priority&amp;gt;&lt;br /&gt;&amp;lt;/url&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;url&amp;gt;&lt;br /&gt;&amp;lt;loc&amp;gt;http://mnour.blogspot.com/2006/04/sql-injection-part-2.html&amp;lt;/loc&amp;gt;&lt;br /&gt;&amp;lt;lastmod&amp;gt;2006-05-01&amp;lt;/lastmod&amp;gt;&lt;br /&gt;&amp;lt;changefreq&amp;gt;weekly&amp;lt;/changefreq&amp;gt;&lt;br /&gt;&amp;lt;priority&amp;gt;1.0&amp;lt;/priority&amp;gt;&lt;br /&gt;&amp;lt;/url&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;url&amp;gt;&lt;br /&gt;&amp;lt;loc&amp;gt;http://mnour.blogspot.com/2006/04/ajax-new-giant.html&amp;lt;/loc&amp;gt;&lt;br /&gt;&amp;lt;lastmod&amp;gt;2006-05-01&amp;lt;/lastmod&amp;gt;&lt;br /&gt;&amp;lt;changefreq&amp;gt;weekly&amp;lt;/changefreq&amp;gt;&lt;br /&gt;&amp;lt;priority&amp;gt;1.0&amp;lt;/priority&amp;gt;&lt;br /&gt;&amp;lt;/url&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/urlset&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;While Google spiders scans the network, they will try to read this file – “sitemap.xml” – from a scanned domain. Then, it will check if any pages were modified after last time scanning this domain.&lt;br /&gt;&lt;br /&gt;As you can notice, each “url” tag in the file contains how frequently the content of this URL will be updated. Actually, all of the webmasters will make there pages as updated hourly! thinking that this will increase there chances for being in the first results of Google. Actually, Google declared that this parameter is not taken as it’s. Maybe a URL declared as updated Montly, be indexed by Google Spiders more than another one declared as updated hourly!&lt;br /&gt;&lt;br /&gt;This technqiue gives the benefits for the both sides: Webmasters and Google. Webmasters will be able to add their site to the serach results of most popular search engine on the net. On the other side, the technique will decrease the time needed for Google spiders to update their index.&lt;br /&gt;The main drawback for this technique is for webmasters. They will have to update this file frequently after each update of their site content.&lt;br /&gt;&lt;/span&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-114666830159909478?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/114666830159909478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=114666830159909478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114666830159909478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114666830159909478'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/05/spiders-google-sitemaps.html' title='Spiders &amp; Google Sitemaps'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-114548485740373649</id><published>2006-04-19T23:59:00.000+02:00</published><updated>2006-04-29T17:23:23.553+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Creating Word Reports Dynamically</title><content type='html'>From a while, I faced a problem in creating MS Word reports in web-based applications. Actually, I have an intranet application and I want to give the system user the ability to generate dynamic reports and view it in Microsoft Word.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;After searching, I found that it's just a matter of changing the content type of the HTTP response. For example, if you are using ASP, then all what you will do is to make your report as a normal ASP page, but you will changing the content type of the response object to "application/msword". You can use any HTML tags as you need in side the report. But try to keep away from using images in your generated report as you may deal with URLs - and this depend on the connectivity state of the user.&lt;br /&gt;&lt;br /&gt;Here is a sample code writen in ASP:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;'-------------------------------------------------&lt;br /&gt;&lt;br /&gt;'Creating MS Word Document Dynamically&lt;br /&gt;&lt;br /&gt;'-------------------------------------------------&lt;br /&gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;&lt;br /&gt;Response.ContentType = "application/msword"&lt;br /&gt;&lt;br /&gt;%&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;&lt;br /&gt;' Your&lt;br /&gt;Dynamic Content Here&lt;br /&gt;&lt;br /&gt;%&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;That is all!. It's so simple which is not expected! Actually, you can use this method in generating Excel documents as well.&lt;br /&gt;&lt;br /&gt;For more details about creating dynamic MS Word documents, read the following article:&lt;br /&gt;&lt;a href="http://www.infinetsoftware.com/content/officedocuments.asp"&gt;http://www.infinetsoftware.com/content/officedocuments.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also, for .NET guys, here is an article about generating MS Word reports in ASP.NET:&lt;br /&gt;&lt;a href="http://aspalliance.com/794"&gt;http://aspalliance.com/794&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You may find some problems in displaying the report on the browser. For example, when you trying to call the URL of the code that generates the report, you may find a pop-up message asking if you want to save or open the document. To disable this dialoge from appearing, open the "Folder Opions" of your IE, then "File Types", find the "DOC" format, then click on "Advanced" Button. Then uncheck the "Confirm Open After Download". This will open the report directly after calling its scripting page. That is all!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;/span&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-114548485740373649?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/114548485740373649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=114548485740373649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114548485740373649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114548485740373649'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/04/creating-word-reports-dynamically.html' title='Creating Word Reports Dynamically'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-114521782668971177</id><published>2006-04-16T22:00:00.000+02:00</published><updated>2006-04-16T22:15:07.936+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>New Service In Alex. Bibliotheque Museum</title><content type='html'>The Museum of the Alexandria bibliotheque has created a new service for its visitors allowing them to explore the museum pieces-of-art using a handled PC.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;The visitor simply enters the piece ID, and all the related information is viewed on his handled. After the visitor finishes his tour, he can send all the information - he got in his tour - to his email address.&lt;br /&gt;&lt;/span&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-114521782668971177?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/114521782668971177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=114521782668971177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114521782668971177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114521782668971177'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/04/new-service-in-alex-bibliotheque.html' title='New Service In Alex. Bibliotheque Museum'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-114494807211663567</id><published>2006-04-13T19:03:00.000+02:00</published><updated>2006-04-19T19:00:58.056+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>AJAX - The New Giant</title><content type='html'>AJAX – Asynchronuos Javascript And XML – is a new technique introduced recently to give more richness to web applications. AJAX is totally executed on the client machine. We can consider AJAX as a Java Applet – The Sun technology – in the main idea.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Web applications in general can be formalized as a “Request” and a corresponding “Response”. In other word, any web application is synchronous – a request and an acknowledge (response). This criteria makes web applications some how not rich in developing. Many functionalities done in desktop applications is not easy to be performed in web development.&lt;br /&gt;&lt;br /&gt;For example, suppose you want to make a small dictionary that accept a word in English and return the equivalent in Arabic. If your decision is to make this application as web-based application, then you will have a web form which accept your word, after submition, your browser will perform a request. In meanwhile, the whole page will be refreshed to give you finally the equivalent word in Arabic!&lt;br /&gt;&lt;br /&gt;As you see, for this simple proces, there is no need to refresh the whole page just to get the translation of one english word. Offcourse, you hope that your user can enter his english word and after submission, the results is shown in the same page without refreshing. The process simplicity, make this experience. This is what your user expect from the application.&lt;br /&gt;&lt;br /&gt;In desktop application, a process like that is so easy. However, in web application, this is some how so hard to be done.&lt;br /&gt;&lt;br /&gt;AJAX comes to solve such kind of problems in web development. AJAX act like a background component which can make small requests and get the response without the need to refresh the webpage. The same way the desktop applications act.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1337/1499/1600/AJAX_Methodology.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1337/1499/320/AJAX_Methodology.jpg" border="0" /&gt;&lt;/a&gt;Actually, we can’t define AJAX as a new technology. AJAX is a group of technologies, grouped to solve a certain problem faced by web developers. AJAX uses XHTML (Extended Hyperlink Text Markup Language), CSS (Cascaded Style Sheets), DOM, ActiveX, XML and offcourse Javascript.&lt;br /&gt;&lt;br /&gt;AJAX is supported now with many browsers such as Internet Explorer 5 or later, Netscape, Mozilla, Firefox and Opera. The technique also can be seen in many online applications like Gmail and GoogleMaps.&lt;br /&gt;&lt;br /&gt;AJAX now can be used in .NET applications using ATLAS component – a release of AJAX for .NET technology.&lt;br /&gt;&lt;br /&gt;AJAX is spreading now. And we have now a new effecive tool in building rich web applications. However, we need to change the way we think about the web.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&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-114494807211663567?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/114494807211663567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=114494807211663567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114494807211663567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114494807211663567'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/04/ajax-new-giant.html' title='AJAX - The New Giant'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-114470021924495157</id><published>2006-04-10T22:16:00.000+02:00</published><updated>2006-05-12T15:35:03.953+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>SQL Injection - Part 2</title><content type='html'>In part 1, we discussed a simple methodology in using SQL injection to break a security point in web applications. Actually, this was the simplest way. As you know more about the generated errors of the different database engines, you will do better with SQL injection.&lt;br /&gt;&lt;br /&gt;Some methods of SQL injection, depends on how you can inject some SQL statement in the page parameters, to gain usefull errors! .. So funny, aha! Actually, these errors gives you some usefull information about the inner structure of the victim database. This will help in making greater destruction!&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;One of the SQL injection methods is to concatenating "Having" statement in your query string. As we know, "Having" is used alwayes with "Group by" statement to inforce some condition on the grouping SQL statement. But if the "Having" is inserted in a sql statement without "Group By" we get a horrible error!&lt;br /&gt;&lt;br /&gt;Suppose we have web page which displays products for a certain category. For example, our page url is something like that:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;blockquote&gt;http://online-store.com/products.aspx?catID=1 &lt;/blockquote&gt;&lt;br /&gt;The previous url will get all the products of the category that have ID = 1. Now, lets playing with this url and make the following trick:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://online-store.com/products.aspx?catID=1 having 1=1 -- &lt;/blockquote&gt;&lt;br /&gt;When submitting the previous url, the resulting page will display an error like that:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Microsoft OLE DB Provider for SQL Server (0x80040E14)&lt;br /&gt;&lt;br /&gt;Column&lt;br /&gt;'products.ID' is invalid in the select list because it is not contained in an&lt;br /&gt;aggregate function and there is no GROUP BY clause.&lt;br /&gt;&lt;br /&gt;/products.aspx, line 24&lt;br /&gt;&lt;/blockquote&gt;SQL Server tried to execute the following SQL statement after injecting our "Having":&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;select * from products where catID=1 having 1=1 -- &lt;/blockquote&gt;&lt;br /&gt;As you see, we have "Having" without "Group By". And in a SQL statement with "Group By" and "Having", all the columns after "SELECT" should be in the "Group By" clause. So, the db engine didn't find the first column which is "products.ID" in the "Group By" clause and throw this error.&lt;br /&gt;&lt;br /&gt;Actually, we got two usefull infomration from this later error. The table name - "Products" and a column on it - "ID" column.&lt;br /&gt;&lt;br /&gt;Now, Try to add the "ID" column after a "Group By" clause in the url:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://online-store.com/products.aspx?catID=1 Group By ID having 1=1 --&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;You get the following error:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Microsoft OLE DB Provider for SQL Server (0x80040E14)&lt;br /&gt;&lt;br /&gt;Column&lt;br /&gt;'products.Name' is invalid in the select list because it is not contained in an&lt;br /&gt;aggregate function and there is no GROUP BY clause.&lt;br /&gt;&lt;br /&gt;/products.asp, line 24&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;You got the idea, aha! .. You have now another column name in the table. You just go on with this trick until you got all the table columns!&lt;br /&gt;&lt;br /&gt;Suppose, now you discovered that the "Products" table contains only 3 columns "ID", "Name", and "Description". And on a way or another you got that the site users are stored in a table called "users". Well, try to make the following trick. Inject a UNION statement in your url so that, you view products data followed by users data. Cool, isn't it?!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://online-store.com/products.aspx?catID=1 UNION SELECT 1, username, password FROM users --&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now, you got a list of the products, followed by all the site users with their passwords!&lt;br /&gt;&lt;br /&gt;Actually, you can be more destructive by executing some harming SQL statements. For example, you can make something like that:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://online-store.com/products.aspx?catID=1; drop table users;&lt;/blockquote&gt;&lt;br /&gt;Some database engines like SQL Server support such kind of SQL queries. You execute two or more queries in one time. Now, your victim loses his users table!&lt;br /&gt;&lt;br /&gt;Also, you may execute some built-in stored procedures which exists in SQL server:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://online-store.com/products.aspx?catID=1; exec master..xp_cmdshell&lt;br /&gt;'iisreset'; -- &lt;/blockquote&gt;&lt;br /&gt;This was a short tour in exploring SQL injection.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#ff6600;"&gt;References&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.sitepoint.com/article/sql-injection-attacks-safe"&gt;SQL Injection Attacks - Are You Safe?&lt;/a&gt; &lt;em&gt;By &lt;span style="color:#666666;"&gt;Mitchell Harper&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&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-114470021924495157?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/114470021924495157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=114470021924495157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114470021924495157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114470021924495157'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/04/sql-injection-part-2.html' title='SQL Injection - Part 2'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25809080.post-114468720840633643</id><published>2006-04-10T18:39:00.000+02:00</published><updated>2006-05-12T15:43:05.996+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>SQL Injection - Part 1</title><content type='html'>Security .. This word repeated regularly when taking about critical applications. Actually, security is one of the most important aspects in developing applications, especially, web applications. Why? Because, web applications has a very unique property .. "It's a public application!". This means many people have access to your application, many people has access to your services. And as long as the accessibility increase, threatens also increase.&lt;br /&gt;&lt;br /&gt;SQL Injections is one of the simplest and popular attacks on the net. However, it needs somehow experienced attackers in SQL and database engines.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Dynamic web forms usually receive parameters and according to these parameters the web-form rearrange its behavior and layout. Parameters are sent to the web-forms through HTTP using one of the two methods: GET or POST - Actually explaining these methods is out of our scope here.&lt;br /&gt;&lt;br /&gt;For example, using GET method, we can send parameters to the web form like:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;mydomain.com/Login.asp?username=nour&amp;password=mypass&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As shown, the "Login" page receives two parameters: username and pass. In your login page, you may check the credentials of the user using a SQL statement like that:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;sql = "SELECT username, password FROM users WHERE username=" &amp;amp; username&lt;br /&gt;&amp; " AND password=" &amp;amp; password&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Suppose that our lovely attacker now try to play with this login page. He will simply pass the parameters to this web-form as following:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;mydomain.com/Login.asp?username=nour&amp;amp;password=mypass or 1=1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Actually, if this login page is for an administration page, for example, then you're in a critical situation! Why? .. The "password" parameter is now "mypass or 1=1". And after concatenated with the SQL statement in our page, the SQL statement will be like that:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;SELECT username, password FROM users WHERE username=nour AND password = mypass or 1=1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the WHERE condition will not return only one record. Actually, it will return all users records in your system. A great disaster! . So, if your authentication method is built on this query, it will return always results and any user can access it regardless of the given password! Actually, this is a simple demonstration of what can be done with SQL injection.&lt;br /&gt;&lt;br /&gt;Wait for more in Part 2...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#ff6600;"&gt;References&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#ff6600;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="fullpost"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.sitepoint.com/article/sql-injection-attacks-safe"&gt;SQL Injection Attacks - Are You Safe?&lt;/a&gt; &lt;em&gt;By &lt;span style="color:#666666;"&gt;Mitchell Harper&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span class="fullpost"&gt;&lt;span style="font-size:85%;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&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-114468720840633643?l=mnour.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnour.blogspot.com/feeds/114468720840633643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25809080&amp;postID=114468720840633643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114468720840633643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25809080/posts/default/114468720840633643'/><link rel='alternate' type='text/html' href='http://mnour.blogspot.com/2006/04/sql-injection-part-1.html' title='SQL Injection - Part 1'/><author><name>Mohammed Nour</name><uri>http://www.blogger.com/profile/14196471284974987569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
