<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Central Florida Software Blog</title>
    <link>http://www.centralflsoftware.com/blog/</link>
    <description>Innovation. Imagination. Delivered.</description>
    <language>en-us</language>
    <copyright>Christopher L Price</copyright>
    <lastBuildDate>Mon, 27 Jul 2009 13:30:15 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>blog@centralflsoftware.com</managingEditor>
    <webMaster>blog@centralflsoftware.com</webMaster>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=bdbe9c48-e603-43ef-9980-08bfbfe025f5</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,bdbe9c48-e603-43ef-9980-08bfbfe025f5.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,bdbe9c48-e603-43ef-9980-08bfbfe025f5.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bdbe9c48-e603-43ef-9980-08bfbfe025f5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Enabling a Web Slice
</h3>
        <p>
Web Slices are new feature in IE 8 that allow your users to bookmark specify content
on your site. Implementing this feature is easy and can be accomplished in a few lines
of code. The keys are:
</p>
        <ol>
          <li>
Use the 'hslice' class</li>
          <li>
Specify a slice id</li>
          <li>
Specify an 'entry-title'</li>
          <li>
Specify 'entry-content'</li>
          <li>
Use optional attributes (see <a href="http://www.microsoft.com/windows/internet-explorer/readiness/default.aspx">IE8
Readiness Toolkit</a>)</li>
        </ol>
The code sample below highlights the required attributes in red and the optional attributes
in blue. <img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss5.jpg" /><h3>The Web Slice User Experience
</h3><p>
When a user views your web slice enabled page in IE8, the user is presented with a
button that allows him/her to add the slice.<br /><br /><img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss1.jpg" /></p><p>
A confirmation dialog appears, displaying the name of your web slice and the location.<br /><br /><img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss2.jpg" /></p><p>
Once the user has added the slice, a button is added to the browser toolbar. (User
can delete the slice by 'right-clicking' the slice name and then choosing delete.)<br /><br /><img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss3.jpg" /></p><p>
When the user clicks the slice button. The slice content is displayed. Two buttons
give the user the ability to both refresh the slice and to navigate to your page which
contains the slice.<br /><br /><img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss4.jpg" /></p><img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=bdbe9c48-e603-43ef-9980-08bfbfe025f5" /></body>
      <title>Web Slices in IE8</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,bdbe9c48-e603-43ef-9980-08bfbfe025f5.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2009/07/27/WebSlicesInIE8.aspx</link>
      <pubDate>Mon, 27 Jul 2009 13:30:15 GMT</pubDate>
      <description>&lt;h3&gt;Enabling a Web Slice
&lt;/h3&gt;
&lt;p&gt;
Web Slices are new feature in IE 8 that allow your users to bookmark specify content
on your site. Implementing this feature is easy and can be accomplished in a few lines
of code. The keys are:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Use the 'hslice' class&lt;/li&gt;
&lt;li&gt;
Specify a slice id&lt;/li&gt;
&lt;li&gt;
Specify an 'entry-title'&lt;/li&gt;
&lt;li&gt;
Specify 'entry-content'&lt;/li&gt;
&lt;li&gt;
Use optional attributes (see &lt;a href="http://www.microsoft.com/windows/internet-explorer/readiness/default.aspx"&gt;IE8
Readiness Toolkit&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
The code sample below highlights the required attributes in red and the optional attributes
in blue. &lt;img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss5.jpg"&gt; 
&lt;h3&gt;The Web Slice User Experience
&lt;/h3&gt;
&lt;p&gt;
When a user views your web slice enabled page in IE8, the user is presented with a
button that allows him/her to add the slice.&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss1.jpg"&gt; 
&lt;/p&gt;
&lt;p&gt;
A confirmation dialog appears, displaying the name of your web slice and the location.&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss2.jpg"&gt; 
&lt;/p&gt;
&lt;p&gt;
Once the user has added the slice, a button is added to the browser toolbar. (User
can delete the slice by 'right-clicking' the slice name and then choosing delete.)&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss3.jpg"&gt; 
&lt;/p&gt;
&lt;p&gt;
When the user clicks the slice button. The slice content is displayed. Two buttons
give the user the ability to both refresh the slice and to navigate to your page which
contains the slice.&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://www.centralflsoftware.com/blog/content/binary/ws_ss4.jpg"&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=bdbe9c48-e603-43ef-9980-08bfbfe025f5" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,bdbe9c48-e603-43ef-9980-08bfbfe025f5.aspx</comments>
      <category>IE8</category>
      <category>Web Design</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=be275432-2624-47ee-817e-d7e4b59574e6</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,be275432-2624-47ee-817e-d7e4b59574e6.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,be275432-2624-47ee-817e-d7e4b59574e6.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=be275432-2624-47ee-817e-d7e4b59574e6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <strong>C# 4.0 New Features: Optional and
Named Parameters</strong>
        <ul>
Optional Parameters 
<li>
removes the ceremony of method overloads to assign default values</li><li>
static void GenerateChart(bool copyToWord = false)
</li><li></li></ul>
        <ul>
Named Parameters 
<li>
call a method: GenerateChart(copyToWord: true);</li></ul>
Combining the two new features allow you to write concise code and not<br />
specify values that are not needed in methods with a large number of arguments: 
<ul><li>
Old: MethodA('A', null, null, null, false, null);</li><li>
New: MethodA(ArgA: 'A', ArgE: false);</li></ul><img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=be275432-2624-47ee-817e-d7e4b59574e6" /></body>
      <title>C# 4.0 New Features: Optional and Named Parameters</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,be275432-2624-47ee-817e-d7e4b59574e6.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2009/07/23/C40NewFeaturesOptionalAndNamedParameters.aspx</link>
      <pubDate>Thu, 23 Jul 2009 13:12:54 GMT</pubDate>
      <description>&lt;strong&gt;C# 4.0 New Features: Optional and Named Parameters&lt;/strong&gt; 
&lt;ul&gt;
Optional Parameters 
&lt;li&gt;
removes the ceremony of method overloads to assign default values&lt;/li&gt;
&lt;li&gt;
static void GenerateChart(bool copyToWord = false)&lt;li&gt;
&lt;/ul&gt;
&lt;ul&gt;
Named Parameters 
&lt;li&gt;
call a method: GenerateChart(copyToWord: true);&lt;/li&gt;
&lt;/ul&gt;
Combining the two new features allow you to write concise code and not&lt;br&gt;
specify values that are not needed in methods with a large number of arguments: 
&lt;ul&gt;
&lt;li&gt;
Old: MethodA('A', null, null, null, false, null);&lt;/li&gt;
&lt;li&gt;
New: MethodA(ArgA: 'A', ArgE: false);&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=be275432-2624-47ee-817e-d7e4b59574e6" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,be275432-2624-47ee-817e-d7e4b59574e6.aspx</comments>
      <category>.Net v4.0</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=67ef544c-678d-46c8-a7ba-7f3e56544d0c</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,67ef544c-678d-46c8-a7ba-7f3e56544d0c.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,67ef544c-678d-46c8-a7ba-7f3e56544d0c.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=67ef544c-678d-46c8-a7ba-7f3e56544d0c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <strong>Managed Extensibility Framework
(MEF)</strong>
        <p>
          <em>Below are my review notes from the 10-4 video on the upcoming Managed Extensibility
Framework in version 4.0</em>
        </p>
        <p>
        </p>
        <ol>
          <li>
A new library available in v4.0</li>
          <li>
Software entities should be open to extension, but closed to modification (Open/Closed
Principle)</li>
          <li>
Basics: 
<ul><li>
An application is built of parts or individual pieces composed together</li><li>
Three Steps: 
<ol><li>
Export a part (Attribute: [Export(typeof(IMortgageCalculator))])</li><li>
Import a part (Attribute: [Import(typeof(Logger))])</li><li>
Compose a part 
<ul><li>
Catalogs provide the parts (TypeCatalog, AssemblyCatalog, DirectoryCatalog, AggregatingCatalog)</li><li>
Container is the matchmaker</li></ul></li></ol></li></ul></li>
          <li>
Why? - Build a network aware app without changing the core window code (i.e. extend
behavior without modifying code)</li>
        </ol>
        <u>Sample</u>
        <code>
          <pre>
namespace Sample
{
	public interface IMortgageRateRepository
	{
		public IList<Rates>
GetCurrentRates(); } } 
</Rates></pre>
        </code>
        <p>
          <em>Notice that in the concrete implementation of the interface we use the Export
Attribute</em>
        </p>
        <code>
          <pre>
namespace Sample
{
	[Export(typeof(IMortgageRateRepository))]
	public class ELoanMortgageRateRepository: IMortgageRateRepository
	{
		public IList<Rates>
GetCurrentRates() { return new List<Rates>
(); } } } 
</Rates></Rates></pre>
        </code>
        <p>
          <em>Alot of stuff happening here, we use the export attribute at the class level and
then the Import attribute on our dependency. I also want to point out that we no longer
'new' up an object. Instead we implement the IPartImportsSatisfiedNotification interface
and move out binding logic to that event handler (basically we can't use the objects
until they have been imported by the container). </em>
        </p>
        <code>
          <pre>
namespace Sample
{
	[Export]
	public partial class MortgageRates: Window, IPartImportsSatisfiedNotification
	{
		[Import]
		IMortgageRateRepository MortgageRateRepository  { get; set; }

		public MortgageRates()
		{
			InitializeComponent();

			//MortgageRateRepository = new MortgageRateRepository();
			//grid.ItemSource = MortgageRateRepository.GetCurrentRates();
		}

		public void OnImportsSatisified()
		{
			Dispatcher.Invoke(new Action(() =&gt;
			{
				MortgageRateRepository = new MortgageRateRepository();
				grid.ItemSource = MortgageRateRepository.GetCurrentRates();	
			}));
		}
	}
}
</pre>
        </code>
        <p>
          <em>Finally, where the magic happens. We create an AssemblyCatalog and then a CompositionContainer.
Notice that instead of 'Newing' up an instance of the window directly. We get an instance
of the exported object from the container.</em>
        </p>
        <code>
          <pre>
namespace Sample
{
	public partial class App: Application
	{
		var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
		var container = new CompositionContainer(catalog);

		var window = container.GetExportedObject&lt;MortgageRates&gt;();
		//var window = new MortgageRates();

		window.Show();
	}
}
</pre>
        </code>
        <img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=67ef544c-678d-46c8-a7ba-7f3e56544d0c" />
      </body>
      <title>Managed Extensibility Framework</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,67ef544c-678d-46c8-a7ba-7f3e56544d0c.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2009/07/22/ManagedExtensibilityFramework.aspx</link>
      <pubDate>Wed, 22 Jul 2009 12:47:20 GMT</pubDate>
      <description>&lt;strong&gt;Managed Extensibility Framework (MEF)&lt;/strong&gt; 
&lt;p&gt;
&lt;em&gt;Below are my review notes from the 10-4 video on the upcoming Managed Extensibility
Framework in version 4.0&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;ol&gt;
&lt;li&gt;
A new library available in v4.0&lt;/li&gt;
&lt;li&gt;
Software entities should be open to extension, but closed to modification (Open/Closed
Principle)&lt;/li&gt;
&lt;li&gt;
Basics: 
&lt;ul&gt;
&lt;li&gt;
An application is built of parts or individual pieces composed together&lt;/li&gt;
&lt;li&gt;
Three Steps: 
&lt;ol&gt;
&lt;li&gt;
Export a part (Attribute: [Export(typeof(IMortgageCalculator))])&lt;/li&gt;
&lt;li&gt;
Import a part (Attribute: [Import(typeof(Logger))])&lt;/li&gt;
&lt;li&gt;
Compose a part 
&lt;ul&gt;
&lt;li&gt;
Catalogs provide the parts (TypeCatalog, AssemblyCatalog, DirectoryCatalog, AggregatingCatalog)&lt;/li&gt;
&lt;li&gt;
Container is the matchmaker&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Why? - Build a network aware app without changing the core window code (i.e. extend
behavior without modifying code)&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;u&gt;Sample&lt;/u&gt; &lt;code&gt; &lt;pre&gt;
namespace Sample
{
	public interface IMortgageRateRepository
	{
		public IList&lt;Rates&gt;
GetCurrentRates(); } } 
&lt;/pre&gt;
&lt;/code&gt; 
&lt;p&gt;
&lt;em&gt;Notice that in the concrete implementation of the interface we use the Export
Attribute&lt;/em&gt; 
&lt;/p&gt;
&lt;code&gt; &lt;pre&gt;
namespace Sample
{
	[Export(typeof(IMortgageRateRepository))]
	public class ELoanMortgageRateRepository: IMortgageRateRepository
	{
		public IList&lt;Rates&gt;
GetCurrentRates() { return new List&lt;Rates&gt;
(); } } } 
&lt;/pre&gt;
&lt;/code&gt; 
&lt;p&gt;
&lt;em&gt;Alot of stuff happening here, we use the export attribute at the class level and
then the Import attribute on our dependency. I also want to point out that we no longer
'new' up an object. Instead we implement the IPartImportsSatisfiedNotification interface
and move out binding logic to that event handler (basically we can't use the objects
until they have been imported by the container). &lt;/em&gt; 
&lt;/p&gt;
&lt;code&gt; &lt;pre&gt;
namespace Sample
{
	[Export]
	public partial class MortgageRates: Window, IPartImportsSatisfiedNotification
	{
		[Import]
		IMortgageRateRepository MortgageRateRepository  { get; set; }

		public MortgageRates()
		{
			InitializeComponent();

			//MortgageRateRepository = new MortgageRateRepository();
			//grid.ItemSource = MortgageRateRepository.GetCurrentRates();
		}

		public void OnImportsSatisified()
		{
			Dispatcher.Invoke(new Action(() =&gt;
			{
				MortgageRateRepository = new MortgageRateRepository();
				grid.ItemSource = MortgageRateRepository.GetCurrentRates();	
			}));
		}
	}
}
&lt;/pre&gt;
&lt;/code&gt; 
&lt;p&gt;
&lt;em&gt;Finally, where the magic happens. We create an AssemblyCatalog and then a CompositionContainer.
Notice that instead of 'Newing' up an instance of the window directly. We get an instance
of the exported object from the container.&lt;/em&gt; 
&lt;/p&gt;
&lt;code&gt; &lt;pre&gt;
namespace Sample
{
	public partial class App: Application
	{
		var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
		var container = new CompositionContainer(catalog);

		var window = container.GetExportedObject&amp;lt;MortgageRates&amp;gt;();
		//var window = new MortgageRates();

		window.Show();
	}
}
&lt;/pre&gt;
&lt;/code&gt;&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=67ef544c-678d-46c8-a7ba-7f3e56544d0c" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,67ef544c-678d-46c8-a7ba-7f3e56544d0c.aspx</comments>
      <category>.Net v4.0</category>
      <category>Extensibility</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=585ed6bc-d39d-46ef-ace0-a607d4910fe7</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,585ed6bc-d39d-46ef-ace0-a607d4910fe7.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,585ed6bc-d39d-46ef-ace0-a607d4910fe7.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=585ed6bc-d39d-46ef-ace0-a607d4910fe7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>What is an application framework?</strong>
        </p>
        <p>
Application Frameworks are collections of libraries (or code) prevalent in many large
IT shops. Frameworks can be expensive to develop properly but the cost is more than
offset by the advantages they provide. Some of these advantages include things like
code quality, promoting code reuse, standardization of tasks and alleviate overhead
that can be common across multiple applications. 
</p>
        <p>
          <strong>Open Source Examples</strong>
        </p>
        <p>
You could spend days on Google and Bing researching the vast number of available options.
We'll save you some time though...The two most prevelant examples in the .Net world
are Spring.NET (<a href="http://www.springframework.net/" target="_blank">http://www.springframework.net/</a>)
and CSLA.NET (<a href="http://www.lhotka.net/Default.aspx" target="_blank">http://www.lhotka.net/Default.aspx</a>).
Both of these examples are truly fantastic, robust, open-source frameworks that are
geared towards large enterprises. So why build our own? 
</p>
        <p>
          <strong>The Rationale for Building Our Own</strong>
        </p>
        <p>
Our experience with frameworks is mixed at best. The advantages frameworks provide
certainly outweigh the cost but even with the examples given above, complexity quickly
becomes an issue. Because these frameworks are geared toward large enterprises and
attempt to be all things to all people they are inheritantly complex. Don't get me
wrong though, complexity in and of itself is not necessarily evil. In the situation
where you are implementing an enterpise framework for a large organization complexity
is a fact of life. We find that in the case of most clients the complexity these frameworks
introduces an element of risk that is not necessary. 
</p>
        <p>
After evaluating the available options and weighing the pros and cons we decided that
instead of trying to fit the proverbial square peg into a round hole, we would use
our experience and expertise to develop an application framework that is more suited
to a small or medium-sized business. 
</p>
        <p>
          <strong>The Enterprise Framework</strong>
        </p>
        <p>
We chose the name Enterprise Framework because although the framework is geared towards
small and medium sized businesses the framework is robust enough to accommodate growth
and has the ability to easily scale to support an enterprise application. In fact,
the major difference between our framework and other commercially available frameworks
is simply scope. The scope of our framework is limited to provide features and functions
that are most commonly used in our client projects (such as Data Access, Security,
Logging, Error Handling, Email, etc). By taking removing the requirement that our
framework accommodate 'everyone' we were able to remove alot of complexity associated
with application frameworks. 
</p>
        <p>
Our framework currently consists of the following modules: 
</p>
        <ul>
          <li>
EnterpriseFramework - The base module that provides common functions such as Data
Access, Security, Logging, Configuration, etc)</li>
          <li>
EnterpriseFramework.BusinessObjects - Specific to each client and is generated from
the client database (Code Generation - Object-relational Mapping)</li>
          <li>
EnterpriseFramework.Services - Provides supports for Web Services (ASMX, WCF)</li>
          <li>
EnterpriseFramework.Web - Provides basically functionality for web application such
as Security, Caching, URL Rewriting, Visitor Tracking, Localization, Globalization,
etc.</li>
          <li>
EnterpriseFramework.Web.Controls - An advanced add-on for the web module that provides
controls and utilities based on the Telerik Ajax Web controls</li>
          <li>
EnterpriseFramework.Windows - A mirror of the web module but geared toward providing
similiar services to a windows application.</li>
        </ul>
        <img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=585ed6bc-d39d-46ef-ace0-a607d4910fe7" />
      </body>
      <title>Why an Enterprise Framework - Part 1</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,585ed6bc-d39d-46ef-ace0-a607d4910fe7.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2009/06/30/WhyAnEnterpriseFrameworkPart1.aspx</link>
      <pubDate>Tue, 30 Jun 2009 17:36:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;What is an application framework?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Application Frameworks are collections of libraries (or code) prevalent in many large
IT shops. Frameworks can be expensive to develop properly but the cost is more than
offset by the advantages they provide. Some of these advantages include things like
code quality, promoting code reuse, standardization of tasks and alleviate overhead
that can be common across multiple applications. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Open Source Examples&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
You could spend days on Google and Bing researching the vast number of available options.
We'll save you some time though...The two most prevelant examples in the .Net world
are Spring.NET (&lt;a href="http://www.springframework.net/" target="_blank"&gt;http://www.springframework.net/&lt;/a&gt;)
and CSLA.NET (&lt;a href="http://www.lhotka.net/Default.aspx" target="_blank"&gt;http://www.lhotka.net/Default.aspx&lt;/a&gt;).
Both of these examples are truly fantastic, robust, open-source frameworks that are
geared towards large enterprises. So why build our own? 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The Rationale for Building Our Own&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Our experience with frameworks is mixed at best. The advantages frameworks provide
certainly outweigh the cost but even with the examples given above, complexity quickly
becomes an issue. Because these frameworks are geared toward large enterprises and
attempt to be all things to all people they are inheritantly complex. Don't get me
wrong though, complexity in and of itself is not necessarily evil. In the situation
where you are implementing an enterpise framework for a large organization complexity
is a fact of life. We find that in the case of most clients the complexity these frameworks
introduces an element of risk that is not necessary. 
&lt;/p&gt;
&lt;p&gt;
After evaluating the available options and weighing the pros and cons we decided that
instead of trying to fit the proverbial square peg into a round hole, we would use
our experience and expertise to develop an application framework that is more suited
to a small or medium-sized business. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The Enterprise Framework&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
We chose the name Enterprise Framework because although the framework is geared towards
small and medium sized businesses the framework is robust enough to accommodate growth
and has the ability to easily scale to support an enterprise application. In fact,
the major difference between our framework and other commercially available frameworks
is simply scope. The scope of our framework is limited to provide features and functions
that are most commonly used in our client projects (such as Data Access, Security,
Logging, Error Handling, Email, etc). By taking removing the requirement that our
framework accommodate 'everyone' we were able to remove alot of complexity associated
with application frameworks. 
&lt;/p&gt;
&lt;p&gt;
Our framework currently consists of the following modules: 
&lt;ul&gt;
&lt;li&gt;
EnterpriseFramework - The base module that provides common functions such as Data
Access, Security, Logging, Configuration, etc)&lt;/li&gt;
&lt;li&gt;
EnterpriseFramework.BusinessObjects - Specific to each client and is generated from
the client database (Code Generation - Object-relational Mapping)&lt;/li&gt;
&lt;li&gt;
EnterpriseFramework.Services - Provides supports for Web Services (ASMX, WCF)&lt;/li&gt;
&lt;li&gt;
EnterpriseFramework.Web - Provides basically functionality for web application such
as Security, Caching, URL Rewriting, Visitor Tracking, Localization, Globalization,
etc.&lt;/li&gt;
&lt;li&gt;
EnterpriseFramework.Web.Controls - An advanced add-on for the web module that provides
controls and utilities based on the Telerik Ajax Web controls&lt;/li&gt;
&lt;li&gt;
EnterpriseFramework.Windows - A mirror of the web module but geared toward providing
similiar services to a windows application.&lt;/li&gt;
&lt;/ul&gt;
&gt;
&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=585ed6bc-d39d-46ef-ace0-a607d4910fe7" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,585ed6bc-d39d-46ef-ace0-a607d4910fe7.aspx</comments>
      <category>Enterprise Framework</category>
      <category>General</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=bf884849-ef57-4ade-9bf5-d460a38ffd51</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,bf884849-ef57-4ade-9bf5-d460a38ffd51.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,bf884849-ef57-4ade-9bf5-d460a38ffd51.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bf884849-ef57-4ade-9bf5-d460a38ffd51</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">One of the things we frequently see when
a client-project uses masterpages is the following type-cast:<br /><br /><code> MasterPageType myMasterPage = Page.Master as MasterPageType; </code><br /><br />
To avoid this type-cast you can simply add the following directive to your page:<br /><br /><code> &lt;%@ MasterType VirtualPath="~/Site.master" %&gt; </code><br /><br />
Adding this directive to your page will make the <code>Master</code> property strongly-typed
(<code>Page.Master</code> remains loosely-typed) to your masterpage eliminating the
need to do the aforementioned type-cast.<br /><br /><img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=bf884849-ef57-4ade-9bf5-d460a38ffd51" /></body>
      <title>Coding Tips: Master Pages</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,bf884849-ef57-4ade-9bf5-d460a38ffd51.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2009/06/24/CodingTipsMasterPages.aspx</link>
      <pubDate>Wed, 24 Jun 2009 14:20:03 GMT</pubDate>
      <description>One of the things we frequently see when a client-project uses masterpages is the following type-cast:&lt;br&gt;
&lt;br&gt;
&lt;code&gt; MasterPageType myMasterPage = Page.Master as MasterPageType; &lt;/code&gt; 
&lt;br&gt;
&lt;br&gt;
To avoid this type-cast you can simply add the following directive to your page:&lt;br&gt;
&lt;br&gt;
&lt;code&gt; &amp;lt;%@ MasterType VirtualPath="~/Site.master" %&amp;gt; &lt;/code&gt; 
&lt;br&gt;
&lt;br&gt;
Adding this directive to your page will make the &lt;code&gt;Master&lt;/code&gt; property strongly-typed
(&lt;code&gt;Page.Master&lt;/code&gt; remains loosely-typed) to your masterpage eliminating the
need to do the aforementioned type-cast.&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=bf884849-ef57-4ade-9bf5-d460a38ffd51" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,bf884849-ef57-4ade-9bf5-d460a38ffd51.aspx</comments>
      <category>Coding Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=441915b3-dbc7-4b88-b9aa-6f4902e100bb</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,441915b3-dbc7-4b88-b9aa-6f4902e100bb.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,441915b3-dbc7-4b88-b9aa-6f4902e100bb.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=441915b3-dbc7-4b88-b9aa-6f4902e100bb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">While there are many different ways to
implement web services the two predominate architectural styles are REST (REpresentational
State Transfer) and SOAP (Simple Object Access Protocol). Each style has is own pro's
and con's and it is necessary to objectively balance the appropriateness of each when
selecting the implementation of your next service. So what's the difference at a high
level between the two?<br /><br />
SOAP (WS-*) services are geared toward the enterprise and are inheritently more complex.
For each SOAP service you define a contract using the Web Service Definition Language
(WSDL). This contract specifies precisely the XML request and response messages needed
to interact with the service. The SOAP (WS-*) standards address things like reliability,
transactions and message-based security which are important when dealing with any
value added transactions. Obviously there is a cost for this functionality in terms
of overhead and complexity. 
<br /><br />
If a SOAP service is consider the 'yin', then the REST service would definitely be
the 'yang'. Simple to implement with no contract to define a REST service can be broken
down to four actions: 
<br /><br />
- GET - Gets the Resource<br />
- POST - creates the Resource<br />
- PUT - Updates the Resource<br />
- DELETE - Deletes the Resource<br /><br />
This simplicity means quicker development time, lower overhead although you sacrifice
features. For services that are dealing with non-critical data REST services are definitely
the way to go. 
<br /><br />
So which will you choose? We say let the REST versus SOAP debate rage on.Luckily for
you, you don't have to be caught in the middle. The Microsoft Windows Communications
Foundation (WCF) framework provides you with the flexibility to easily change the
method your service uses to communicate and even allows you to service both REST and
SOAP requests with the same service.<img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=441915b3-dbc7-4b88-b9aa-6f4902e100bb" /></body>
      <title>REST vs. SOAP</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,441915b3-dbc7-4b88-b9aa-6f4902e100bb.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2009/06/16/RESTVsSOAP.aspx</link>
      <pubDate>Tue, 16 Jun 2009 13:46:51 GMT</pubDate>
      <description>While there are many different ways to implement web services the two predominate architectural styles are REST (REpresentational State Transfer) and SOAP (Simple Object Access Protocol). Each style has is own pro's and con's and it is necessary to objectively balance the appropriateness of each when selecting the implementation of your next service. So what's the difference at a high level between the two?&lt;br&gt;
&lt;br&gt;
SOAP (WS-*) services are geared toward the enterprise and are inheritently more complex.
For each SOAP service you define a contract using the Web Service Definition Language
(WSDL). This contract specifies precisely the XML request and response messages needed
to interact with the service. The SOAP (WS-*) standards address things like reliability,
transactions and message-based security which are important when dealing with any
value added transactions. Obviously there is a cost for this functionality in terms
of overhead and complexity. 
&lt;br&gt;
&lt;br&gt;
If a SOAP service is consider the 'yin', then the REST service would definitely be
the 'yang'. Simple to implement with no contract to define a REST service can be broken
down to four actions: 
&lt;br&gt;
&lt;br&gt;
- GET - Gets the Resource&lt;br&gt;
- POST - creates the Resource&lt;br&gt;
- PUT - Updates the Resource&lt;br&gt;
- DELETE - Deletes the Resource&lt;br&gt;
&lt;br&gt;
This simplicity means quicker development time, lower overhead although you sacrifice
features. For services that are dealing with non-critical data REST services are definitely
the way to go. 
&lt;br&gt;
&lt;br&gt;
So which will you choose? We say let the REST versus SOAP debate rage on.Luckily for
you, you don't have to be caught in the middle. The Microsoft Windows Communications
Foundation (WCF) framework provides you with the flexibility to easily change the
method your service uses to communicate and even allows you to service both REST and
SOAP requests with the same service.&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=441915b3-dbc7-4b88-b9aa-6f4902e100bb" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,441915b3-dbc7-4b88-b9aa-6f4902e100bb.aspx</comments>
      <category>General</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=df9e4788-be39-4da3-8482-0d1eac8c28ca</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,df9e4788-be39-4da3-8482-0d1eac8c28ca.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,df9e4788-be39-4da3-8482-0d1eac8c28ca.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=df9e4788-be39-4da3-8482-0d1eac8c28ca</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The Central Florida Software Group, Inc. blog is officially up and running.
</p>
        <img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=df9e4788-be39-4da3-8482-0d1eac8c28ca" />
      </body>
      <title>Blog Introduction</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,df9e4788-be39-4da3-8482-0d1eac8c28ca.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2009/06/15/BlogIntroduction.aspx</link>
      <pubDate>Mon, 15 Jun 2009 15:37:02 GMT</pubDate>
      <description>&lt;p&gt;
The Central Florida Software Group, Inc. blog is officially up and running.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=df9e4788-be39-4da3-8482-0d1eac8c28ca" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,df9e4788-be39-4da3-8482-0d1eac8c28ca.aspx</comments>
      <category>General</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=b43a4834-fb65-4e7a-8f89-648c10d93966</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,b43a4834-fb65-4e7a-8f89-648c10d93966.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,b43a4834-fb65-4e7a-8f89-648c10d93966.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b43a4834-fb65-4e7a-8f89-648c10d93966</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">A link to my SSIS Business Rules Article:<br /><br /><a href="http://geekswithblogs.net/ReelDeepDotNet/archive/2008/03/07/ssis-business-rules-engine.aspx"> http://geekswithblogs.net/ReelDeepDotNet/archive/2008/03/07/ssis-business-rules-engine.aspx</a><img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=b43a4834-fb65-4e7a-8f89-648c10d93966" /></body>
      <title>SSIS Business Rules Article</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,b43a4834-fb65-4e7a-8f89-648c10d93966.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2008/11/20/SSISBusinessRulesArticle.aspx</link>
      <pubDate>Thu, 20 Nov 2008 13:45:27 GMT</pubDate>
      <description>A link to my SSIS Business Rules Article:&lt;br&gt;
&lt;br&gt;
&lt;a href="http://geekswithblogs.net/ReelDeepDotNet/archive/2008/03/07/ssis-business-rules-engine.aspx"&gt; http://geekswithblogs.net/ReelDeepDotNet/archive/2008/03/07/ssis-business-rules-engine.aspx&lt;/a&gt;&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=b43a4834-fb65-4e7a-8f89-648c10d93966" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,b43a4834-fb65-4e7a-8f89-648c10d93966.aspx</comments>
      <category>SSIS</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=546f9c7c-d8b7-41b7-9607-4c52e039812a</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,546f9c7c-d8b7-41b7-9607-4c52e039812a.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,546f9c7c-d8b7-41b7-9607-4c52e039812a.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=546f9c7c-d8b7-41b7-9607-4c52e039812a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font face="Arial">I should note that both of these reviews are from the perspective
of an seasoned and experienced technologist. Your mileage may vary based on the knowledge
your background and personal experiences...</font>
        </p>
        <p>
          <font face="Arial">
            <strong>
              <u>Pro WPF in C# 2008: Windows Presentation Foundation
with .NET 3.5 Second Edition - Matthew MacDonald</u>
            </strong>
          </font>
        </p>
        <p>
          <font face="Arial">This book is a fairly easy, albiet long read. Coming from a web
development background this book provides a solid introduction to to all things WPF.
A few of my comments:</font>
        </p>
        <p>
          <font face="Arial">- Excellent introduction to the underlying foundation of WPF<br />
- Excellent coverage of Xaml<br />
- Good sections on documents, printing, add-ins and custom elements<br />
- In my experience in the corporate development world I have never seen a business
app with either animation or 3-d imaging (yeah...I know its used somewhere), which
is why I struggled to understand the long, long, long winded sections on animation
and 3D topics</font>
        </p>
        <p>
          <font face="Arial">Between this book and the MeasureUp practice exams I was able to
passed the WPF certification exam, with no prior WPF experience. (And for those that
are wondering...the book is a significantly better exam prep than the MeasureUp practice
questions were.)</font>
        </p>
        <p>
          <font face="Arial">
            <strong>
              <u>Microsoft Windows Communication Foundation Step by Step
- John Sharp</u>
            </strong>
          </font>
        </p>
        <p>
          <font face="Arial">This book was a very quick read (took less than 2 days to read
through) and does little more that introduce WCF. The exercises are contrived and
provide little real-world value. The highlights of the book are really the chapters
on security. If your looking for something more granualar than an introductory overview
I would search out a different book.<br /></font>
        </p>
        <img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=546f9c7c-d8b7-41b7-9607-4c52e039812a" />
      </body>
      <title>Pro WPF and WCF Step by Step Book Reviews </title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,546f9c7c-d8b7-41b7-9607-4c52e039812a.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2008/07/24/ProWPFAndWCFStepByStepBookReviews.aspx</link>
      <pubDate>Thu, 24 Jul 2008 12:39:48 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font face="Arial"&gt;I should note that both of these reviews are from the perspective
of an seasoned and experienced technologist. Your mileage may vary based on the knowledge
your background and personal experiences...&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Arial"&gt;&lt;strong&gt;&lt;u&gt;Pro WPF in C# 2008: Windows Presentation Foundation
with .NET 3.5 Second Edition - Matthew MacDonald&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Arial"&gt;This book is a fairly easy, albiet long read. Coming from a web
development background this book provides a solid introduction to to all things WPF.
A few of my comments:&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Arial"&gt;- Excellent introduction to the underlying foundation of WPF&lt;br /&gt;
- Excellent coverage of Xaml&lt;br /&gt;
- Good sections on documents, printing, add-ins and custom elements&lt;br /&gt;
- In my experience in the corporate development world I have never seen a business
app with either animation or 3-d imaging (yeah...I know its used somewhere), which
is why I struggled to understand the long, long, long winded sections on animation
and 3D topics&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Arial"&gt;Between this book and the MeasureUp practice exams I was able to
passed the WPF certification exam, with no prior WPF experience. (And for those that
are wondering...the book is a significantly better exam prep than the MeasureUp practice
questions were.)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Arial"&gt;&lt;strong&gt;&lt;u&gt;Microsoft Windows Communication Foundation Step by Step
- John Sharp&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Arial"&gt;This book was a very quick read (took less than 2 days to read
through) and does little more that introduce WCF. The exercises are contrived and
provide little real-world value. The highlights of the book are really the chapters
on security. If your looking for something more granualar than an introductory overview
I would search out a different book.&lt;br /&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=546f9c7c-d8b7-41b7-9607-4c52e039812a" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,546f9c7c-d8b7-41b7-9607-4c52e039812a.aspx</comments>
      <category>Book Reviews</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=37f62385-1c20-4bb0-893c-c4201b61eadc</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,37f62385-1c20-4bb0-893c-c4201b61eadc.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,37f62385-1c20-4bb0-893c-c4201b61eadc.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=37f62385-1c20-4bb0-893c-c4201b61eadc</wfw:commentRss>
      <title>DevConnections Part 3 of ...</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,37f62385-1c20-4bb0-893c-c4201b61eadc.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2008/04/23/DevConnectionsPart3Of.aspx</link>
      <pubDate>Wed, 23 Apr 2008 12:38:37 GMT</pubDate>
      <description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" size="3"&gt;‘Sexy’ Extensibility Design and Patterns&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" size="3"&gt;“Programming to the interface” is important
when addressing extensibility.&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;Provider
Pattern&lt;/strong&gt; – If you are familiar with asp.net then you have been beat over the
head with this pattern enough that I won’t spent much time on it. If your not familiar
with asp.net, I’ll give you 50,000ft view…… it allows for abstraction of data and
behavior by using an interface that the client is aware of and an external class library
that contains the actual implementation of whatever you are trying to do.&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;Plug-Ins&lt;/strong&gt; –
This is pretty straight-forward. Plug-ins are implemented in a way similar to modules
below. The real difference is that you have to explicitly iterate through a list either
from a configuration file or a pre-defined directory.&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;Modules&lt;/strong&gt; –
This was the most interesting pattern and basically defines multiple parts of extensibility
in one class. Related patterns are Chain of Responsibility, Loosely Coupled Events
and Interception Filter. This methodology is event-driven and in an extremely flexible
manner allows modules to hook into the events. The modules are identified to the client
or web app through a configuration file and are loaded using reflection.&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=37f62385-1c20-4bb0-893c-c4201b61eadc" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,37f62385-1c20-4bb0-893c-c4201b61eadc.aspx</comments>
      <category>Conferences</category>
    </item>
    <item>
      <trackback:ping>http://www.centralflsoftware.com/blog/Trackback.aspx?guid=354d44d4-06bc-4fc4-936b-b264e815638b</trackback:ping>
      <pingback:server>http://www.centralflsoftware.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.centralflsoftware.com/blog/PermaLink,guid,354d44d4-06bc-4fc4-936b-b264e815638b.aspx</pingback:target>
      <dc:creator>Christopher Price</dc:creator>
      <georss:point>28.171599 -82.001953</georss:point>
      <wfw:comment>http://www.centralflsoftware.com/blog/CommentView,guid,354d44d4-06bc-4fc4-936b-b264e815638b.aspx</wfw:comment>
      <wfw:commentRss>http://www.centralflsoftware.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=354d44d4-06bc-4fc4-936b-b264e815638b</wfw:commentRss>
      <title>DevConnections Part 2 of ...</title>
      <guid isPermaLink="false">http://www.centralflsoftware.com/blog/PermaLink,guid,354d44d4-06bc-4fc4-936b-b264e815638b.aspx</guid>
      <link>http://www.centralflsoftware.com/blog/2008/04/23/DevConnectionsPart2Of.aspx</link>
      <pubDate>Wed, 23 Apr 2008 12:37:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font size="2"&gt;Man I am so behind on getting my notes and thoughts typed up...I've
been to over ten sessions and I only have two typed up. I should be able to catch
up this evening. Tuesday was rather uneventful as I hit a string of so-so sessions.
Without further ado here is my notes for the session on Spatial Support in SQL Server
2008.....&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size="2"&gt;Spatial Support in SQL Server 2008&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font size="2"&gt;&lt;span style="mso-list: Ignore"&gt;-&lt;span style="FONT: 7pt "times new Roman""&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;Spatial
support is vector based and includes planar (Geometry) and geodetic (Geography)&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font size="2"&gt;&lt;span style="mso-list: Ignore"&gt;-&lt;span style="FONT: 7pt "times new Roman""&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;SQL
Server was expanded to allow large UDTs&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In
2005, UDTs were limited to 5K&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In
2008, UDTs are limited only by LOB size (around 2 gigs)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font size="2"&gt;&lt;span style="mso-list: Ignore"&gt;-&lt;span style="FONT: 7pt "times new Roman""&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;Geometry&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Adheres
to OGC/ISO standards&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Can
store points, lines, polygons and collections of the previously mentioned&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Methods
include relationship (intersects, disjoint), construction (intersection, union) and
metrics (distance, area)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Sample:&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in"&gt;
&lt;font size="2"&gt;DECLARE @g GEOMETRY&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in"&gt;
&lt;font size="2"&gt;SET @g = GEOMETRY:PARSE(‘POINT(5.5 8.8)’)&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in"&gt;
&lt;o:p&gt;
&lt;font size="2"&gt;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font size="2"&gt;&lt;span style="mso-list: Ignore"&gt;-&lt;span style="FONT: 7pt "times new Roman""&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;Geography&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Ellipsoidal
data-type&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Does
not adhere to OGC/ISO standards&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;
&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY: "courier New"; mso-fareast-font-family: 'Courier New'"&gt;&lt;span style="mso-list: Ignore"&gt;o&lt;span style="FONT: 7pt "times new Roman""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Same
methods as Geometry class&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font size="2"&gt;&lt;span style="mso-list: Ignore"&gt;-&lt;span style="FONT: 7pt "times new Roman""&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;Spatial
Indexes: &lt;/font&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: "times new Roman"; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;font face="Arial" size="2"&gt;Uses
multi-level grids to map multi-dimensional data into a 2-dimension index&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.centralflsoftware.com/blog/aggbug.ashx?id=354d44d4-06bc-4fc4-936b-b264e815638b" /&gt;</description>
      <comments>http://www.centralflsoftware.com/blog/CommentView,guid,354d44d4-06bc-4fc4-936b-b264e815638b.aspx</comments>
      <category>Conferences</category>
    </item>
  </channel>
</rss>