<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Efran Cobisi's Blog</title><subtitle type="html">.NET wonders (and alike)</subtitle><id>http://weblogs.asp.net/efrancobisi/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/efrancobisi/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2007-02-19T14:43:00Z</updated><entry><title>Just released: a new SEO extension for the ASP.NET MVC routing engine</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2012/06/08/new-seo-extension-for-the-asp-net-mvc-routing-engine.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2012/06/08/new-seo-extension-for-the-asp-net-mvc-routing-engine.aspx</id><published>2012-06-08T10:13:00Z</published><updated>2012-06-08T10:13:00Z</updated><content type="html">Dear users,&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;after several months of hard work, we are proud to announce to the world that &lt;a href="http://cobisi.com"&gt;Cobisi&lt;/a&gt;'s new &lt;a href="http://cobisi.com/seo-mvc-extensions"&gt;SEO routing engine for ASP.NET MVC&lt;/a&gt; has been officially released! We even provide a &lt;a href="http://cobisi.com/seo-mvc-extensions/free-edition"&gt;free edition&lt;/a&gt; which comes at no cost, so this is something you can't really miss if you are a serious ASP.NET developer. ;)&lt;/div&gt;&lt;br&gt;&lt;h3&gt;SEO routes for ASP.NET MVC&lt;/h3&gt;&lt;br&gt;&lt;div&gt;&lt;a href="http://cobisi.com/seo-mvc-extensions" style="font-size: 12px; font-family: tahoma, arial, helvetica, sans-serif; "&gt;Cobisi SEO Extensions&lt;/a&gt; - this is the name of the product - is an advanced tool for software developers that allows to optimize ASP.NET MVC web applications and sites for search engines. It comes with a powerful routing engine, which extends the standard ASP.NET routing module to provide a much more flexible way to define search optimized routes, and a complete set of classes that make customizing the entire routing infrastructure very easy and cool.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;In its simplest form, defining a route for an MVC action is just a matter of decorating the method with the [Route("...")] attribute and specifying the desired URL. The library will take care of the rest and set up the route accordingly; while coding routes this way, Cobisi SEO Extensions also shows how the final routes will be, without leaving the Visual Studio IDE!&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://cobisi.com/Content/Images/MvcExtensions-route-sample.png"&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;h3&gt;Manage MVC routes with ease&lt;/h3&gt;&lt;br&gt;In fact, Cobisi SEO Extensions &lt;b style="font-size: 12px; font-family: tahoma, arial, helvetica, sans-serif; "&gt;integrates with the Visual Studio IDE&lt;/b&gt; to offer a large set of time-saving improvements targeted at ASP.NET developers. A new tool window, for example, allows to easily browse among the routes exposed by your applications, being them standard ASP.NET routes, MVC specific routes or SEO routes. The routes can be easily filtered on the fly, to ease finding the ones you are interested in. Double clicking a SEO route will even open the related ASP.NET MVC controller, at the beginning of the specified action method.&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://cobisi.com/Content/Images/ASP.NET-routing-explorer-337x296.png"&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;In addition to that, Cobisi SEO Extensions allows to easily understand how each SEO route is composed by showing the routing model details directly in the IDE, beneath each MVC action route.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://cobisi.com/Content/Images/SEO-mvc-route-expanded-546x380.png"&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Furthermore, Cobisi SEO Extensions helps developers to easily recognize which class is an MVC controller and which methods is an MVC action by drawing a special dashed underline mark under each items of these categories.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Developers, developers, developers, ...&lt;/h3&gt;&lt;/div&gt;&lt;br&gt;We are really eager to receive your feedback and suggestions - please feel free to &lt;a href="http://cobisi.com/support/contact-us"&gt;ping us with your comments&lt;/a&gt;! Thank you!
&lt;br&gt;
&lt;br&gt;
Cheers!
&lt;br&gt;&lt;br&gt;

--
&lt;br&gt;
Efran Cobisi
&lt;br&gt;
Cobisi lead developer
&lt;br&gt;
Microsoft MVP, MCSD, MCAD, MCTS: SQL Server 2005, MCP&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8584176" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/C_2300_/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/.NET/default.aspx" /><category term="Visual Basic" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Visual+Basic/default.aspx" /><category term="IIS" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/IIS/default.aspx" /><category term="SEO" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/SEO/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/MVC/default.aspx" /><category term="routing" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/routing/default.aspx" /></entry><entry><title>Software Technical Writer needed (C#, .NET, ASP.NET) - Part-time, telecommute</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2012/04/17/software-technical-writer-c-net-asp-net-part-time-telecommute.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2012/04/17/software-technical-writer-c-net-asp-net-part-time-telecommute.aspx</id><published>2012-04-17T17:35:00Z</published><updated>2012-04-17T17:35:00Z</updated><content type="html">&lt;p&gt;&lt;a href="http://cobisi.com" mce_href="http://cobisi.com"&gt;Cobisi&lt;/a&gt;, a young Italy-based start-up, aims to build innovative software development tools and components for the Microsoft .NET platform. &lt;a href="http://cobisi.com/blog/2012/4/17/software-technical-writer-needed-csharp-dotnet-aspnet-parttime-telecommute" mce_href="http://cobisi.com/blog/2012/4/17/software-technical-writer-needed-csharp-dotnet-aspnet-parttime-telecommute"&gt;We are looking for a software technical writer&lt;/a&gt; who can prepare documentation and code samples about our products; this is a part-time, telecommute-only position.&lt;/p&gt;
&lt;h3&gt;Job Functions&lt;/h3&gt;
&lt;p&gt;- Deliver high quality, user-friendly product documentation for customers.&lt;br&gt;- Prepare online tutorials, technical manuals, code samples, webinars, technical posts, and marketing materials as needed.&lt;br&gt;- Understand the audience for documentation deliverables.&lt;br&gt;- Ensure common look and feel across documentation as needed.&lt;/p&gt;
&lt;h3&gt;Job Requirements&lt;/h3&gt;
&lt;p&gt;- Experience with C#, .NET Framework, ASP.NET and web programming in general.&lt;br&gt;- Ability to write highly-technical software development documentation, targeted to software developers.&lt;br&gt;- Strong written and verbal communication skills in US English.&lt;br&gt;- Strong presentation skills.&lt;br&gt;- Experience developing training materials and manuals.&lt;br&gt;- Versatility in presenting technical concepts to audiences with mixed capabilities (PMs, for example).&lt;/p&gt;
&lt;h3&gt;Salary&lt;/h3&gt;
&lt;p&gt;This will start as a freelance position, 5 hours a week distributed as you wish, with the potential of developing into a regular salaried position as the company grows.&lt;/p&gt;
&lt;h3&gt;Apply&lt;/h3&gt;
&lt;p&gt;To apply for this position, please send your curriculum vitae to: &lt;strong&gt;work (at) cobisi (dot) com&lt;/strong&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8394415" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="JOBS" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/JOBS/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/C_2300_/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/.NET/default.aspx" /></entry><entry><title>EmailVerify.NET now part of the Cobisi family of products, new managed proxy client library, new web site</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2012/01/24/emailverify-net-is-now-part-of-the-cobisi-family-of-products.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2012/01/24/emailverify-net-is-now-part-of-the-cobisi-family-of-products.aspx</id><published>2012-01-24T06:29:00Z</published><updated>2012-01-24T06:29:00Z</updated><content type="html">Dear readers,
&lt;p&gt;
the last week was a great one for us, as we have finally succeeded in building the foundation for the new Cobisi family of products. The great experience we have made in the last six years with &lt;a href="http://cobisi.com/email-validation/.net-component"&gt;EmailVerify.NET&lt;/a&gt;, our flagship &lt;a href="http://cobisi.com/email-validation/.net-component"&gt;.NET component for validating email addresses&lt;/a&gt;, led us to a way better understanding of the software development industry and its needs and still make us believe we wouldn't do anything else but developing software components (apart from listening to Dream Theater in our spare time, of course). Because of our passion and, especially, because of your precious support and always-welcomed feedback, we are now ready to show you the results of our development research and bring to you several new software components in the next few weeks. 
&lt;/p&gt;

&lt;h2&gt;EmailVerify.NET reached version 4.5&lt;/h2&gt;
&lt;p&gt;
Our great &lt;a href="http://cobisi.com/email-validation/.net-component"&gt;email validation library&lt;/a&gt; finally reached a milestone in its development lifecycle, with &lt;a href="http://cobisi.com/email-validation/.net-component/release-notes"&gt;version 4.5&lt;/a&gt; bringing even more code robustness and &lt;a href="http://cobisi.com/email-validation/.net-component/features"&gt;great features&lt;/a&gt;. Check out our new &lt;a href="http://cobisi.com/email-validation/validate-address"&gt;free web-based ajax email validation service&lt;/a&gt; or just &lt;a href="http://cobisi.com/email-validation/.net-component/download"&gt;download a free trial&lt;/a&gt; and embed it in your own applications!
&lt;/p&gt;

&lt;h2&gt;Our new .NET proxy client library&lt;/h2&gt;
&lt;p&gt;
The second great news is that we now offer a new &lt;a href="http://cobisi.com/proxy-client/.net-component"&gt;proxy client component for Microsoft .NET&lt;/a&gt; that allows to easily &lt;a href="http://cobisi.com/proxy-client/.net-component"&gt;connect to a proxy server&lt;/a&gt;, using either a socket or a TcpClient, from your own application; Cobisi &lt;a href="http://cobisi.com/proxy-client/.net-component"&gt;ProxyClient.NET&lt;/a&gt; - this is the official name for the component - currently supports the SOCKS 4, SOCKS 4a, SOCKS 5 and HTTP-CONNECT protocols, can be easily extended for custom proxy server implementations or requirements and can be, of course, easily integrated into your &lt;a href="http://cobisi.com/email-validation/.net-component"&gt;EmailVerify.NET&lt;/a&gt; solutions to support email validations using proxied connections.
&lt;/p&gt;

&lt;h2&gt;And our new web site!&lt;/h2&gt;
&lt;p&gt;
In the effort of a better integration with our current and future products and services, our old emailverify.net web site is now part of the &lt;a href="http://cobisi.com"&gt;main cobisi.com web site&lt;/a&gt;, including the client area section (previously known as customers area), the purchase section and, of course, the &lt;a href="http://cobisi.com/email-validation/.net-component"&gt;EmailVerify.NET overview&lt;/a&gt; and &lt;a href="http://cobisi.com/email-validation/.net-component/download"&gt;download&lt;/a&gt; section. Did I mention we also have a great &lt;a href="http://cobisi.com/email-validation/validate-address"&gt;new, ajax-based, free email validation service&lt;/a&gt;? :)
&lt;br /&gt;
&lt;br /&gt;
As part of this job, we also moved our &lt;a href="http://cobisi.com/email-validation/hosted-service"&gt;hosted email validation service&lt;/a&gt; (a &lt;a href="http://cobisi.com/email-validation/hosted-service"&gt;hosted service based on our email validation technologies&lt;/a&gt;, for &lt;a href="http://cobisi.com/email-validation/hosted-service"&gt;email list hygiene and cleansing&lt;/a&gt;) to a new home, within this site.
&lt;br /&gt;
&lt;br /&gt;
Ah... And we have also changed a bit of the previous emailverify.net web site layout, graphics and style. Can you spot the difference? :)
&lt;/p&gt;

Cheers!&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8267654" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /><category term="WPF" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/WPF/default.aspx" /><category term="CLR" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/CLR/default.aspx" /><category term="BCL" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/BCL/default.aspx" /><category term="WCF" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/WCF/default.aspx" /><category term="Windows Forms" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Windows+Forms/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/C_2300_/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/.NET/default.aspx" /><category term="Visual Basic" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Visual+Basic/default.aspx" /><category term="IIS" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/IIS/default.aspx" /></entry><entry><title>Microsoft MVP award</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2010/10/14/microsoft-mvp-award.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2010/10/14/microsoft-mvp-award.aspx</id><published>2010-10-14T13:36:00Z</published><updated>2010-10-14T13:36:00Z</updated><content type="html">&lt;DIV style="PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; FLOAT: right; PADDING-TOP: 10px"&gt;&lt;IMG border=0 src="http://weblogs.asp.net/blogs/efrancobisi/MvpLogo_Small.jpg"&gt;&lt;/DIV&gt;
&lt;P&gt;Dear friends, &lt;BR&gt;&lt;BR&gt;with my greatest satisfaction and pride,&amp;nbsp;I'm glad to announce that I have been recently awarded as&amp;nbsp;a &lt;A href="https://mvp.support.microsoft.com/profile=E9827130-2741-4FCB-A342-D2DD4F0CCFBD" mce_href="https://mvp.support.microsoft.com/profile=E9827130-2741-4FCB-A342-D2DD4F0CCFBD"&gt;Microsoft MVP&lt;/A&gt; - Most Valuable Professional -&amp;nbsp;for the&amp;nbsp;PowerShell category!&lt;BR&gt;To me, receiving this award confirms&amp;nbsp;that Microsoft strongly believe&amp;nbsp;in&amp;nbsp;the community commitment&amp;nbsp;and in what everyone of us, in&amp;nbsp;his own, can do to help his peers.&lt;/P&gt;
&lt;P&gt;Not only the MVP award represents for me&amp;nbsp;a great goal but, on top of that,&amp;nbsp;it is a great starting point for an even greater experience and passion-sharing activity within the technical communities, &lt;A href="http://www.powershell.it/" mce_href="http://www.powershell.it"&gt;powershell.it&lt;/A&gt; above all. &lt;/P&gt;
&lt;P&gt;Thanks to all my friends at Microsoft Italy and to everyone who helps me gaining this wonderful result and&amp;nbsp;thanks to Laura, my mate, for her continous support.&lt;BR&gt;Finally, thanks to all of the powershell.it community users for their excitement!&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7626754" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="PowerShell" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/PowerShell/default.aspx" /><category term="MVP" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/MVP/default.aspx" /></entry><entry><title>Announcing EmailVerify.NET v4.0</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2010/09/23/announcing-emailverify-net-v4-0.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2010/09/23/announcing-emailverify-net-v4-0.aspx</id><published>2010-09-23T14:03:00Z</published><updated>2010-09-23T14:03:00Z</updated><content type="html">&lt;P&gt;We are pleased to announce the release of &lt;A href="http://www.emailverify.net/" mce_href="http://www.emailverify.net"&gt;EmailVerify.NET&lt;/A&gt; v4.0!&lt;/P&gt;
&lt;P&gt;This release adds &lt;A href="http://www.emailverify.net/Support/Release-notes" mce_href="http://www.emailverify.net/Support/Release-notes"&gt;several new features&lt;/A&gt; to our component and includes significant enhancements to our e-mail validation infrastructure, including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;New syntax validation engine&lt;/STRONG&gt;, which completely avoids ReDoS (Regular expressions Denial of Service)&lt;/LI&gt;
&lt;LI&gt;Support for &lt;STRONG&gt;quoted words&lt;/STRONG&gt; and quoted pairs in addresses&lt;/LI&gt;
&lt;LI&gt;Support for &lt;STRONG&gt;Internationalized Domain Names&lt;/STRONG&gt; (IDN)&lt;/LI&gt;
&lt;LI&gt;Support for comments and FWS sequences&lt;/LI&gt;
&lt;LI&gt;Support for domain literals (both IPv4 and IPv6)&lt;/LI&gt;
&lt;LI&gt;New powerful ASP.NET and Windows Forms &lt;STRONG&gt;designer&lt;/STRONG&gt; (other project types can safely use the component in the standard, code-centric, way)&lt;/LI&gt;
&lt;LI&gt;New event pattern for better &lt;STRONG&gt;asynchronous&lt;/STRONG&gt; usage within Windows Forms and WPF applications&lt;/LI&gt;
&lt;LI&gt;Revamped &lt;STRONG&gt;batch validation processing&lt;/STRONG&gt; (now called VerificationTaskGroup)&lt;/LI&gt;
&lt;LI&gt;10 new, specific failure codes for syntax errors&lt;/LI&gt;
&lt;LI&gt;Improved disposable e-mail address (DEA) validation&lt;/LI&gt;
&lt;LI&gt;New ability to customize the local endpoint for SMTP connections in parallel verifications, for each specific address&lt;/LI&gt;
&lt;LI&gt;New SQL Server 2008 Integration Services support, with a custom data transformation component&lt;/LI&gt;
&lt;LI&gt;Improved e-mail verification results, &lt;STRONG&gt;with new and more detailed information&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;BR&gt;EmailVerify.NET website: &lt;A href="http://www.emailverify.net/" mce_href="http://www.emailverify.net"&gt;http://www.emailverify.net&lt;/A&gt;&lt;BR&gt;Release notes: &lt;A href="http://www.emailverify.net/Support/Release-notes" mce_href="http://www.emailverify.net/Support/Release-notes"&gt;http://www.emailverify.net/Support/Release-notes&lt;/A&gt;&lt;BR&gt;User guide for version 4.0: &lt;A href="http://www.emailverify.net/Support/User-guide" mce_href="http://www.emailverify.net/Support/User-guide"&gt;http://www.emailverify.net/Support/User-guide&lt;/A&gt;&lt;BR&gt;End-User License Agreement for version 4.0: &lt;A href="http://www.emailverify.net/Support/Eula"&gt;http://www.emailverify.net/Support/Eula&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;A big thanks to all of our customers around the world for their continued support! :)&lt;BR&gt;Cheers.&lt;/P&gt;
&lt;P&gt;--&lt;BR&gt;Efran Cobisi&lt;BR&gt;Lead Developer and Owner, EmailVerify.NET&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7619474" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="SQL Server" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/SQL+Server/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /><category term="PowerShell" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/PowerShell/default.aspx" /><category term="e-mail verification" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/e-mail+verification/default.aspx" /><category term="email verification" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/email+verification/default.aspx" /><category term="Web Services" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Web+Services/default.aspx" /><category term="e-mail" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/e-mail/default.aspx" /><category term="email" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/email/default.aspx" /><category term="CLR" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/CLR/default.aspx" /><category term="BCL" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/BCL/default.aspx" /><category term="Windows Forms" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Windows+Forms/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/C_2300_/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Visual+Studio/default.aspx" /><category term="e-mail validation" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/e-mail+validation/default.aspx" /><category term="email validation" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/email+validation/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/.NET/default.aspx" /><category term="validation" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/validation/default.aspx" /></entry><entry><title>Announcing EmailVerify.NET v3.0</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2009/10/29/announcing-emailverify-net-v3-0.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2009/10/29/announcing-emailverify-net-v3-0.aspx</id><published>2009-10-29T18:21:00Z</published><updated>2009-10-29T18:21:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;As the company lead developer, I'm proud to announce to my readers that our award winning&amp;nbsp;e-mail verification and validation component for Microsoft .NET has reached version 3.0 today!&lt;BR&gt;This new version includes an improved &lt;A href="http://en.wikipedia.org/wiki/Disposable_e-mail_address" mce_href="http://en.wikipedia.org/wiki/Disposable_e-mail_address"&gt;disposable e-mail address&lt;/A&gt; validation algorithm and built-in Windows PowerShell support.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Top features:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;E-mail syntax verification, according to RFC 2821 and RFC 2822&lt;/LI&gt;
&lt;LI&gt;MX record lookup&lt;/LI&gt;
&lt;LI&gt;Disposable e-mail address (DEA) validation&lt;/LI&gt;
&lt;LI&gt;SMTP availability check&lt;/LI&gt;
&lt;LI&gt;Mailbox existence check, with &lt;A href="http://en.wikipedia.org/wiki/Greylisting" mce_href="http://en.wikipedia.org/wiki/Greylisting"&gt;greylisting&lt;/A&gt; support&lt;/LI&gt;
&lt;LI&gt;Catch-all test&lt;/LI&gt;
&lt;LI&gt;Windows PowerShell built-in support&lt;/LI&gt;
&lt;LI&gt;Batch verification capabilities (for multithreaded, parallel validations)&lt;/LI&gt;
&lt;LI&gt;Fully configurable in every&amp;nbsp;setting, including network ones&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;EmailVerify.NET can be used, of course,&amp;nbsp;within any kind of project, whether it is Windows Forms, Windows Presentation Foundation (WPF) or console based, ASP.NET based or a class library.&lt;BR&gt;It requires .NET 2.0 or newer and runs wherever the framework runs, including Windows Server 2008 and Windows 7, both 32 bit and 64 bit.&lt;BR&gt;&lt;BR&gt;For additional details please see &lt;A href="http://www.emailverify.net/" mce_href="http://www.emailverify.net/"&gt;EmailVerify.NET web site&lt;/A&gt;.&lt;BR&gt;There's also a &lt;A href="http://www.emailverify.net/Download.aspx" mce_href="http://www.emailverify.net/Download.aspx"&gt;&lt;STRONG&gt;free trial&lt;/STRONG&gt;&lt;/A&gt; available for download and an &lt;A href="http://www.emailverify.net/Demo.aspx" mce_href="http://www.emailverify.net/Demo.aspx"&gt;&lt;STRONG&gt;online ajax-based demo&lt;/STRONG&gt;&lt;/A&gt; to test its functionalities without having to download anything. &lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7242699" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /><category term="PowerShell" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/PowerShell/default.aspx" /><category term="WPF" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/WPF/default.aspx" /><category term="e-mail verification" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/e-mail+verification/default.aspx" /><category term="email verification" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/email+verification/default.aspx" /><category term="Web Services" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Web+Services/default.aspx" /><category term="e-mail" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/e-mail/default.aspx" /><category term="email" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/email/default.aspx" /><category term="CLR" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/CLR/default.aspx" /><category term="BCL" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/BCL/default.aspx" /><category term="WCF" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/WCF/default.aspx" /><category term="Windows Forms" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Windows+Forms/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/C_2300_/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Visual+Studio/default.aspx" /><category term="e-mail validation" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/e-mail+validation/default.aspx" /><category term="email validation" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/email+validation/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/.NET/default.aspx" /></entry><entry><title>My company is hiring in Padova, Italy</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2008/03/10/my-company-is-hiring-in-padova-italy.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2008/03/10/my-company-is-hiring-in-padova-italy.aspx</id><published>2008-03-10T10:13:00Z</published><updated>2008-03-10T10:13:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;&lt;A href="http://www.qbgroup.it/" mce_href="http://www.qbgroup.it"&gt;QBGROUP spa&lt;/A&gt;, the company I work for, is hiring new .NET (ASP.NET/AJAX) developers. If you are interested and willing to move to Padova, Italy (a city next to Venice), please drop me a line or send us your resume via our &lt;A href="http://www.qbgroup.it/lavoro/index.htm" mce_href="http://www.qbgroup.it/lavoro/index.htm"&gt;web form&lt;/A&gt;. Fluency in written and spoken Italian language is a prerequisite.&lt;/P&gt;
&lt;P style="COLOR: red" mce_keep="true"&gt;2008-05-05 Update: &lt;STRONG&gt;Those two positions have now been filled&lt;/STRONG&gt;.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5944131" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="ASP.NET AJAX" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET+AJAX/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /><category term="JOBS" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/JOBS/default.aspx" /></entry><entry><title>My tutorial on ASP.NET AJAX custom control development is now online</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2007/12/16/my-tutorial-on-asp-net-ajax-custom-control-development-is-now-online.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2007/12/16/my-tutorial-on-asp-net-ajax-custom-control-development-is-now-online.aspx</id><published>2007-12-16T11:08:00Z</published><updated>2007-12-16T11:08:00Z</updated><content type="html">&lt;p&gt;After some weeks busy on collecting documentation and dissecting Microsoft's own libraries, I've finally reached the point where I could share my experience about ASP.NET AJAX with my peers; so I published a (quite big) tutorial for ASPItalia (an Italian ASP.NET community) about developing an ASP.NET AJAX custom control, releasing it in two parts, due to its length.&lt;/p&gt;&lt;p&gt;For those of you who are comfortable with the Italian language here are the links for both the parts:&lt;/p&gt;&lt;p&gt;Part #1: &lt;a href="http://www.aspitalia.com/articoli/asp.net2/ajax-custom-control.aspx" title="ASP.NET AJAX custom control development - Part 1" mce_href="http://www.aspitalia.com/articoli/asp.net2/ajax-custom-control.aspx"&gt;http://www.aspitalia.com/articoli/asp.net2/ajax-custom-control.aspx&lt;/a&gt; &lt;br&gt;Part #2: &lt;a href="http://www.aspitalia.com/articoli/asp.net2/ajax-custom-control-2.aspx" title="ASP.NET AJAX custom control development - Part 2" mce_href="http://www.aspitalia.com/articoli/asp.net2/ajax-custom-control-2.aspx"&gt;http://www.aspitalia.com/articoli/asp.net2/ajax-custom-control-2.aspx&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;If you can't speak Italian please add a comment to this post: if I'd receive enough feedback I would propably translate and place it somewhere else (codeproject?). ;)&lt;br&gt;In the meantime, I've included the links for the &lt;i&gt;Google-translated versions&lt;/i&gt;:&lt;/p&gt;&lt;p&gt;Part #1: &lt;a href="http://www.google.com/translate?u=http%3A%2F%2Fwww.aspitalia.com%2Farticoli%2Fasp.net2%2Fajax-custom-control.aspx&amp;amp;langpair=it%7Cen" mce_href="http://www.google.com/translate?u=http%3A%2F%2Fwww.aspitalia.com%2Farticoli%2Fasp.net2%2Fajax-custom-control.aspx&amp;amp;langpair=it%7Cen"&gt;http://www.google.com/translate?u=http%3A%2F%2Fwww.aspitalia.com%2Farticoli%2Fasp.net2%2Fajax-custom-control.aspx&amp;amp;langpair=it%7Cen&lt;/a&gt;&lt;br&gt;Part #2: &lt;a href="http://www.google.com/translate?u=http%3A%2F%2Fwww.aspitalia.com%2Farticoli%2Fasp.net2%2Fajax-custom-control-2.aspx&amp;amp;langpair=it%7Cen" mce_href="http://www.google.com/translate?u=http%3A%2F%2Fwww.aspitalia.com%2Farticoli%2Fasp.net2%2Fajax-custom-control-2.aspx&amp;amp;langpair=it%7Cen"&gt;http://www.google.com/translate?u=http%3A%2F%2Fwww.aspitalia.com%2Farticoli%2Fasp.net2%2Fajax-custom-control-2.aspx&amp;amp;langpair=it%7Cen&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5461216" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /><category term="AJAX" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/AJAX/default.aspx" /></entry><entry><title>Identifying ASP.NET controls is the first step</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2007/08/30/Identifying-ASP.NET-controls-is-the-first-step.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2007/08/30/Identifying-ASP.NET-controls-is-the-first-step.aspx</id><published>2007-08-30T12:07:00Z</published><updated>2007-08-30T12:07:00Z</updated><content type="html">&lt;p&gt;Every time I build an ASP.NET web form, I invest a certain amount of my development effort in giving each control a meaningful identifier. This practice tends to give back cleaner code, leading the whole code base more mainteinable. And, as you probably know, code mainteinability is a key rule to cut down the total cost of ownership (TCO) of software projects.&lt;br&gt;&lt;br&gt;I've seen, however, a worrying number of ASP.NET developers who simply do not care about control naming and leave their code full of meaningless identifiers. So, for example, many tend to name their controls after the flow they follow inside the page: HeadLabel, BodyLabel, FooterLabel and so on. Many prefer to use Visual Studio designer and leave it automatically generate identifiers for their controls: this way, each control identifier would be made of a common type prefix, optionally defined by a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.toolboxdataattribute.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.web.ui.toolboxdataattribute.aspx"&gt;ToolboxData attribute&lt;/a&gt;, and an incremental number (ie. Label1, Label2, and so on). These habits, which could effectively deflate the effort required to build a demo or a very small project, would eventually have the opposite effect in greater projects; trying to find out which of your 100 labels is the right one is like looking for a needle in a haystack.&lt;br&gt;&lt;br&gt;As general code naming rules suggest, a better approach consists in thinking about what your controls are about and what they are used for within the hosting page. Given that, you have a starting point you could use to give your controls a 

correct identifier; the string you would eventually come up with is usually made 

up of one to three-four combined words, in pascal case, for example: TotalAmount, 

Result, LastInsertedAlert, etc.&lt;br&gt;Many developers (me included) then tend to prefix this string with a small one 

(usually two to four characters in length), that should make clear the type of 

the control at the final users (yes, you included). This practice, which has its 

roots in the &lt;a href="http://en.wikipedia.org/wiki/Hungarian_notation" mce_href="http://en.wikipedia.org/wiki/Hungarian_notation"&gt;Hungarian code notation&lt;/a&gt;, a naming convention created by Microsoft's 

Charles Simonyi, actually lead to self-describing control identifiers. So, 

following this convention, a label identifier could be for example 

lblTotalAmount, where the "lbl" prefix is there just to tell the reader that it 

is a Label control and the rest of the identifier tells her its purpose. A big 

improvement over seeing your code full of Label1, Label2, Labeln, eh?&lt;br&gt;&lt;/p&gt;&lt;p&gt;
A nice side effect of this good habit is that, whenever you need to access a 

certain type of control inside your code, you could just type its control prefix 

(lbl, in my example) and have Visual Studio Intellisense help you, listing all of 

the labels contained within your page or control.&lt;br&gt;Even if Microsoft is moving away from the Hungarian code notation in .NET, I 

think this convention is still very useful with this kind of naming issue.&lt;/p&gt;&lt;p&gt;Here is a short list of prefixes I use in order to give an identifier to my 

controls:&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;table border="0" cellpadding="3" cellspacing="1"&gt;
&lt;tbody&gt;
&lt;tr bgcolor="#dddddd"&gt;
&lt;td&gt;Control type&lt;/td&gt;
&lt;td&gt;Prefix&lt;/td&gt;
&lt;td&gt;Examples of use&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;Label&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;lbl&lt;/td&gt;
&lt;td&gt;lblAmount, 
lblGrossPrice&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;Panel&lt;/b&gt;	&lt;/td&gt;
&lt;td&gt;pnl&lt;/td&gt;
&lt;td&gt;pnlDetails, 
pnlMain&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;Button&lt;/b&gt;	
&lt;/td&gt;
&lt;td&gt;btn&lt;/td&gt;
&lt;td&gt;btnConfirm&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;HyperLink&lt;/b&gt;	
&lt;/td&gt;
&lt;td&gt;lnk&lt;/td&gt;
&lt;td&gt;lnkAuthorInfo&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;Placeholder&lt;/b&gt;	
&lt;/td&gt;
&lt;td&gt;hld&lt;/td&gt;
&lt;td&gt;hldDetails&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;DataGrid&lt;/b&gt;	&lt;/td&gt;
&lt;td&gt;dg&lt;/td&gt;
&lt;td&gt;dgCustomers, 
dgCustomerOrders&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;GridView&lt;/b&gt;	&lt;/td&gt;
&lt;td&gt;gv&lt;/td&gt;
&lt;td&gt;gvCustomers, 
gvCustomerOrders&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;DropDownList&lt;/b&gt;	
&lt;/td&gt;
&lt;td&gt;ddl&lt;/td&gt;
&lt;td&gt;ddlStates, ddlJobOptions&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;Repeater&lt;/b&gt;	
&lt;/td&gt;
&lt;td&gt;rpt&lt;/td&gt;
&lt;td&gt;rptDetails&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;CheckBox&lt;/b&gt;	
&lt;/td&gt;
&lt;td&gt;chk&lt;/td&gt;
&lt;td&gt;chkNonSmokingRoom, chkWantsNotification&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;Table&lt;/b&gt;	
&lt;/td&gt;
&lt;td&gt;tbl&lt;/td&gt;
&lt;td&gt;tblDetails&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;Menu&lt;/b&gt;	&lt;/td&gt;
&lt;td&gt;mnu&lt;/td&gt;
&lt;td&gt;mnuMain, 
mnuContext&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;System.Web.UI.WebControls.&lt;b&gt;Wizard&lt;/b&gt;	
&lt;/td&gt;
&lt;td&gt;wiz&lt;/td&gt;
&lt;td&gt;wizUserRegistration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;br&gt;&lt;br&gt;Beside naming conventions, however, the most important thing to consider while you are giving your controls an identifier is consistency. Whatever technique you adopt, if you are consistent within your code you will eventually end up with more mainteinable software projects. &lt;br&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3667477" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/General+Software+Development/default.aspx" /><category term="Naming Conventions" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Naming+Conventions/default.aspx" /></entry><entry><title>A simple PowerShell script to find and replace using regular expressions in multiple files</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2007/05/17/a-simple-powershell-script-to-find-and-replace-using-regular-expressions-in-multiple-files.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2007/05/17/a-simple-powershell-script-to-find-and-replace-using-regular-expressions-in-multiple-files.aspx</id><published>2007-05-17T13:24:00Z</published><updated>2007-05-17T13:24:00Z</updated><content type="html">
&lt;p&gt;One thing I need which I come across from time to time is the ability to perform a find and replace operation in multiple files, using regular expressions. When this happens, I usually tend to exploit &lt;a href="http://www.codinghorror.com/blog/archives/000633.html" mce_href="http://www.codinghorror.com/blog/archives/000633.html"&gt;Visual Studio's own support&lt;/a&gt; for this kind of necessity; soon, however, I have to give it up and blame my favorite IDE for the lack of adherence with the regular expressions syntax adopted by the .NET framework, which I'm used to.&lt;br&gt;So, today, after my umpteenth unsuccessful attempt with Visual Studio, I resolved to implement a simple PowerShell script stub, which would act as a strating point for performing this job for me hereafter. No, this is not by far a complete grep-like tool; I would like it to be just a demonstration of how easy, powerful and "clean" are PowerShell scripts like this one. And yes, I know there is plenty of third party tools which do this kind of things...&lt;br&gt;&lt;br&gt;To go down into the specifics of my problem, I was trying to combine a set of html files, that I grabbed after a CHM to HTM conversion, into a single one; since images inside these documents are just thumbnails contained inside an hyperlink which let the user eventually click to see the image at the original size, I want to perform some regular expressions substitution in order to have the original size image embedded directly into the document, have the thumbnails removed and the header and footer of each individual html file removed before being combined into the target one.&lt;br&gt;Since PowerShell is a .NET managed shell, we can naturally use our beloved &lt;a href="http://msdn2.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx"&gt;Regex class&lt;/a&gt; to perform our regular expressions substitution, thus adopting the syntax we are accustomed with.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Here's the code which today solved my problem; feel free to use it as the starting point for similar issues:&lt;br&gt;&lt;/p&gt;
&lt;code&gt;
$rxFigure = New-Object System.Text.RegularExpressions.Regex "(?:\&amp;lt;span.class=""figure""\&amp;gt;)\&amp;lt;a.href=""(?&amp;lt;Url&amp;gt;.*?)"".*?\&amp;gt;\&amp;lt;/a&amp;gt;"&lt;br&gt;$rxHeader = New-Object System.Text.RegularExpressions.Regex "&amp;lt;html&amp;gt;.*?&amp;lt;/table&amp;gt;", SingleLine&lt;br&gt;$rxFooter = New-Object System.Text.RegularExpressions.Regex "&amp;lt;table.*?&amp;lt;/html&amp;gt;", SingleLine&lt;br&gt;$combinedOutput = [System.IO.File]::CreateText([System.IO.Path]::Combine((Get-Location).Path, "..\Combined.htm"))&lt;br&gt;&lt;br&gt;Get-Item "*.html" | ForEach-Object {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $text = [System.IO.File]::ReadAllText($_.FullName)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $text = $rxFigure.Replace($text, "&amp;lt;img src=""`${Url}"" /&amp;gt;")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $text = $rxHeader.Replace($text, "")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $text = $rxFooter.Replace($text, "&amp;lt;br style=""page-break-after: always;"" /&amp;gt;")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $combinedOutput.Write($text);&lt;br&gt;}&lt;br&gt;&lt;br&gt;$combinedOutput.Close()
&lt;/code&gt;


&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2610600" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="Team System" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Team+System/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/General+Software+Development/default.aspx" /><category term="PowerShell" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/PowerShell/default.aspx" /></entry><entry><title>Panel's DefaultButton whims: not every IButtonControl is the same...</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2007/03/15/panel-s-defaultbutton-whims-not-every-ibuttoncontrol-is-the-same.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2007/03/15/panel-s-defaultbutton-whims-not-every-ibuttoncontrol-is-the-same.aspx</id><published>2007-03-15T12:49:00Z</published><updated>2007-03-15T12:49:00Z</updated><content type="html">Today&amp;#39;s story begins with a poor developer trying to obey his creative director new guidances in terms of how that web application should have its buttons rendered. I will omit the motivation behind this decision, because it is not relevant to this post&amp;#39;s subject.&lt;br /&gt;The creative director said: &amp;quot;Hey, I&amp;#39;d like them to be rendered as html anchors!&amp;quot;. The poor developer replied saying: &amp;quot;I can&amp;#39;t see any difference, what about leaving them as they are (html input buttons)?&amp;quot;. And the other: &amp;quot;Well, we can apply CSS styles better to html anchors than to html input buttons!&amp;quot;.&lt;br /&gt;So, the poor developer started reflecting his creative director desires.&lt;br /&gt;After some hours spent in playing nicely with the new html anchor based buttons, something hurt the poor developer heart: all the Panels which uses the DefaultButton property in the web application and previously worked well now started behaving in a strange manner. To his amazement, the poor developer discovered that all of the DefaultButtons now worked only in Internet Explorer. Oh my... What about that cross browser thing?&lt;br /&gt;&lt;br /&gt;Let&amp;#39;s help that poor developer.&lt;br /&gt;&lt;br /&gt;Whenever you use the DefaultButton property of the Panel control, you can choose among a set of ready to use controls which could act as buttons, all of them implementing the &lt;a href="http://msdn2.microsoft.com/en-us/system.web.ui.webcontrols.ibuttoncontrol.aspx"&gt;IButtonControl&lt;/a&gt; interface. At runtime, the Panel control registers a client script which would fire that default button, upon the user has hitted the enter key inside one of the html element hosted inside that Panel.&lt;br /&gt;The client function which handles the keypress event for the Panel client element is WebForm_FireDefaultButton. Here&amp;#39;s its body:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var __defaultFired = false;&lt;br /&gt;function WebForm_FireDefaultButton(event, target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!__defaultFired &amp;amp;&amp;amp; event.keyCode == 13 &amp;amp;&amp;amp; !(event.srcElement &amp;amp;&amp;amp; (event.srcElement.tagName.toLowerCase() == &amp;quot;textarea&amp;quot;))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var defaultButton;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (__nonMSDOMBrowser) {&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; defaultButton = document.getElementById(target);&lt;br /&gt;&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; else {&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; defaultButton = document.all[target];&lt;br /&gt;&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; if (defaultButton &amp;amp;&amp;amp; typeof(defaultButton.click) != &amp;quot;undefined&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; __defaultFired = 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; defaultButton.click();&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; event.cancelBubble = 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; if (event.stopPropagation) event.stopPropagation();&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 false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;As you could see, it checks (among other things) if the default button &amp;quot;click&amp;quot; property is defined before getting the work done. Unluckily, and this is the culprit of our poor developer pain, the &amp;quot;click&amp;quot; property is not supported by every IButtonControl rendered html element. In fact, html anchors seem to not support that property (yes, IE does support it, but we wanted it to be cross browser, do you remember?).&lt;br /&gt;So, how could we solve this problem and make DefaultProperty works with... say... FireFox? One way could be to redefine WebForm_FireDefaultButton and make it smarter than the original one; we could check for the &amp;quot;click&amp;quot; property first and then for the &amp;quot;href&amp;quot; property, which html anchors have.&lt;br /&gt;&lt;br /&gt;So, here&amp;#39;s a little smarter reimplementation of the aforementioned client function, ready to be pasted in your web page or client script file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;function WebForm_FireDefaultButton(event, target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!__defaultFired &amp;amp;&amp;amp; event.keyCode == 13 &amp;amp;&amp;amp; !(event.srcElement &amp;amp;&amp;amp; (event.srcElement.tagName.toLowerCase() == &amp;quot;textarea&amp;quot;))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var defaultButton;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (__nonMSDOMBrowser)&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; defaultButton = document.getElementById(target);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&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; defaultButton = document.all[target];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (typeof(defaultButton.click) != &amp;quot;undefined&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; __defaultFired = 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; defaultButton.click();&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; event.cancelBubble = 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;&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; if (event.stopPropagation) event.stopPropagation();&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 false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (typeof(defaultButton.href) != &amp;quot;undefined&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; __defaultFired = 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; eval(defaultButton.href.substr(11));&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; event.cancelBubble = 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;&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; if (event.stopPropagation) event.stopPropagation();&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 false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;As all of the postback event references begin with the &amp;quot;javascript :&amp;quot; fake protocol, we could get the href of the DefaultButton, strip that protocol prefix and evaluate the rest. That will perform our craved postback, in a cross browser way.&lt;br /&gt;&lt;br /&gt;And our poor developer is finally happy. Now guess who was that poor developer... :)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2032163" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Weird trap while using WebForm_DoCallback() inside my external client scripts</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2007/03/05/weird-trap-while-using-webform-docallback-inside-my-external-client-scripts.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2007/03/05/weird-trap-while-using-webform-docallback-inside-my-external-client-scripts.aspx</id><published>2007-03-05T12:23:00Z</published><updated>2007-03-05T12:23:00Z</updated><content type="html">&lt;p&gt;Today, while I was trying to move large portions of a web application I&amp;#39;m working on from &lt;a href="http://www.ajaxpro.info/"&gt;Ajax.NET&lt;/a&gt; to &lt;a href="http://ajax.asp.net/"&gt;ASP.NET AJAX&lt;/a&gt; and callback support, I&amp;#39;ve bumbed into a weird trap related to how callback targets are resolved at server side.&lt;br /&gt;The story begins with me trying to adapt a custom control in such a way that events that originally got fired at client side through the elegant Ajax.NET APIs would instead get fired via ASP.NET callback; the reason behind this decision is twofold.&lt;br /&gt;First of all, I&amp;#39;ve chosen to leave behind Ajax.NET because I&amp;#39;d like to start using a &amp;quot;standard&amp;quot; library for my ajax behaviors. Even if I&amp;#39;ve never run into any problems using Ajax.NET and I&amp;#39;ve loved it for quite some time, I hope Microsoft will make their best effort to support and integrate this platform inside the ASP.NET framework, even better than any other ISV could. Then, why callbacks and not, for example, async postbacks? Well, to my surprise, I&amp;#39;ve ascertained async postbacks are quite verbose in their communications. Since my project goals include saving as much bandwidth as possible, I&amp;#39;ve looked for an alternative. Callbacks come to my rescue... And average payloads of this technology are very similar to Ajax.NET ones.&lt;br /&gt;&lt;br /&gt;Back to my original problem. I started preparing my control for callbacks support: I&amp;#39;ve coded its implementetion for&amp;nbsp;&lt;a href="http://msdn2.microsoft.com/en-us/system.web.ui.icallbackeventhandler.aspx"&gt;ICallbackEventHandler&lt;/a&gt; interface&amp;nbsp;and called ClientScript.GetCallbackEventReference() in its OnInit&amp;nbsp;(...in vain, just to setup the callback support. Very annoying!). Now I was trying to use the WebForm_DoCallback function inside my javascript code; yes, I&amp;#39;m using an external script file, so I&amp;#39;ve no way to use the ClientScript.GetCallbackEventReference() method to obtain what I was looking for.&lt;br /&gt;At first, it seems WebForm_DoCallback expects the control ID of the target as&amp;nbsp;its first argument. So, I&amp;#39;ve retrieved the control&amp;#39;s ClientID and fed WebForm_DoCallback with it. Everything worked as expected and I was very happy: the test page that was hosting my control played very nice.&lt;br /&gt;But, suddenly after I&amp;#39;ve moved my control inside another page, a page which uses a master page, the trick ceased to work. After my callback started, the page on the server side answer with an exception saying: &amp;quot;&lt;strong&gt;The target ... for the callback could not be found or did not implement ICallbackEventHandler&lt;/strong&gt;.&amp;quot;.&lt;br /&gt;I will not tell you how much time I&amp;#39;ve spent in trying to understand what was wrong with my code...&lt;br /&gt;&lt;br /&gt;In short, the answer to my problem was that WebForm_DoCallback() does expect the UniqueID of the target control, not the ClientID. If you miss this point, you will get callback support that wouldn&amp;#39;t work with master pages!&lt;/p&gt;&lt;p&gt;Very easy to fall into this trap...&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1912585" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="ASP.NET AJAX" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET+AJAX/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ASP.NET/default.aspx" /><category term="ICallbackEventHandler" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/ICallbackEventHandler/default.aspx" /><category term="WebForm_DoCallback" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/WebForm_5F00_DoCallback/default.aspx" /><category term="Ajax.NET" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/Ajax.NET/default.aspx" /></entry><entry><title>Tips about exam 70-431 (MCTS: SQL Server 2005)</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/efrancobisi/archive/2007/02/19/tips-about-exam-70-431-mcts-sql-server-2005.aspx" /><id>http://weblogs.asp.net/efrancobisi/archive/2007/02/19/tips-about-exam-70-431-mcts-sql-server-2005.aspx</id><published>2007-02-19T13:43:00Z</published><updated>2007-02-19T13:43:00Z</updated><content type="html">&lt;p&gt;On Friday, 9 February, 2007 at about 11:30 AM I passed &lt;a href="http://www.microsoft.com/learning/exams/70-431.mspx" target="_blank"&gt;exam 70-431&lt;/a&gt; and earned the title of &lt;a href="http://www.microsoft.com/learning/mcp/mcts/sql/" target="_blank"&gt;MCTS: SQL Server 2005&lt;/a&gt;; now that the excitement is growing dim, I&amp;#39;d like to take the time to share my impressions on the new certification model embraced by Microsoft.&lt;br /&gt;First of all, I&amp;#39;ve been quite impressed by the number of simulations included in the exam. For those of you who are wondering, simulations are a (relatively) new kind of questions, very different from the usual multiple choice ones we were used to face in the past: they consist in a series of interactive screens which (almost) closely resemble the ones you should see while working with the GUI tools included with SQL Server 2005. So, to pass this kind of questions, you should be familiar with these tools.&lt;/p&gt;&lt;p&gt;I must confess, I was always used to think a good DBA should know how to get the job done without GUI tools. As a professional developer, I like very much to code; and I like to work with my SQL Server using just clean TSQL statements. But the truth is that GUI tools often quicken the steps needed to do complete everyday jobs: think about restoring a database which has say 20 transactional backups to restore in order to get it functional... Admit it, how many lines of TSQL code are you going to type? Isn&amp;#39;t it faster to click 4 buttons inside Management Studio? Sure, and Microsoft realized it. So, to pass this exam you should also know where to watch inside and how to work with Management Studio, Configuration Manager, Surface Area Configuration and the Profiler.&lt;br /&gt;To my surprise, the number of questions regarding system views (most importantly the objects belonging to the sys schema) was bigger than the number of DML/DDL related questions; I think one of the most important requirement of this exam is to prove the attendee really knows how to check for performance problems inside SQL Server and how to fix them. Index creation and mainteinance is also very important: you should really know how indexes work, clustered vs. non clustered indexes differences and how they relate to performance, columns inclusion inside them, XML indexes (primary, kinds of secondary); two or so of the questions related to full text indexes mainteinance and updates. The total number of questions for my exam was 52.&lt;/p&gt;&lt;p&gt;The result of my exam really dazzled me; I got a 1000/1000 points! Since I&amp;#39;m a developer, I wasn&amp;#39;t expecting so much from an exam which should belong more to a system administrator than to my role.&lt;br /&gt;I prepared for the exam with the aid of two books (and Books Online, of course!): &lt;a href="http://www.amazon.com/MCTS-Self-Paced-Training-70-431-Pro-Certification/dp/073562271X/sr=8-1/qid=1171892724/ref=sr_1_1/102-6715381-7512946" target="_blank"&gt;MCTS SQL Server 2005 - Self paced training kit from Microsoft Press&lt;/a&gt; and &lt;a href="http://www.amazon.com/MCTS-Microsoft-Server-Implementation-Maintenance/dp/0470025654/sr=1-1/qid=1171892844/ref=sr_1_1/102-6715381-7512946" target="_blank"&gt;MCTS Microsoft SQL Server 2005 - Implementation and Maintenance from Sybex&lt;/a&gt;. Both are really good books but I found the Sybex one to be clearer in some aspects; the Microsoft Press one is really detailed and sometimes could lend you to confusion. My advice is to buy both the books and grab the core concepts from the Sybex book and deepen with the Microsoft one.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1719877" width="1" height="1"&gt;</content><author><name>efran.cobisi</name><uri>http://weblogs.asp.net/members/efran.cobisi.aspx</uri></author><category term="70-431" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/70-431/default.aspx" /><category term="SQL Server" scheme="http://weblogs.asp.net/efrancobisi/archive/tags/SQL+Server/default.aspx" /></entry></feed>