<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-29366726</id><updated>2024-11-22T11:06:51.720+10:00</updated><category term="ASP.Net"/><category term="Tips"/><category term="Web Development"/><category term="C#"/><category term="Visual Studio"/><category term="AJAX"/><category term="Continuous Integration"/><category term="Development Tools"/><category term="Web Services"/><category term=".Net"/><category term="Agile Methodology"/><category term="Javascript"/><category term="Linq"/><category term="SQL"/><category term="Utilities"/><category term="WCF"/><category term="Annoyances"/><category term="Bad code"/><category term="Gadgets"/><category term="Other"/><category term="Subversion"/><category term="Testing"/><category term="Browsers"/><category term="Controls"/><category term="Development"/><category term="Dynamic Data"/><category term="Integration"/><category term="Linq to Sql"/><category term="PDF"/><category term="Reporting Services"/><category term="Resharper"/><category term="Trust"/><category term="Windows Workflow"/><category term="iTextSharp"/><title type='text'>Instant Development</title><subtitle type='html'>Rambles about software development that I find useful on any particular day.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29366726.post-2426449874090054203</id><published>2010-06-28T09:06:00.000+10:00</published><updated>2010-06-28T09:06:18.424+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>VS2010 patch for Cut and Copy &quot;Insufficient Memory&quot; issue</title><content type='html'>The Visual Studio 2010 Editor team has released a hotfix to reduce the frequency of the annoying error of VS2010 displaying the error message that there is &quot;insufficient available memory to meet the expected demands of an operation at this time...&quot; that can occur when trying to cut or copy text to the clipboard.&lt;br /&gt;
&lt;br /&gt;
After upgrading to VS2010 a month ago this error plagued our project incessantly. The previous workaround for the team has been to use Steve Harman&#39;s documented hack for VS2008, but on the VS2010 executable (&lt;a href=&quot;http://stevenharman.net/blog/archive/2008/04/29/hacking-visual-studio-to-use-more-than-2gigabytes-of-memory.aspx&quot;&gt;http://stevenharman.net/blog/archive/2008/04/29/hacking-visual-studio-to-use-more-than-2gigabytes-of-memory.aspx&lt;/a&gt;) which seemed to work.&lt;br /&gt;
&lt;br /&gt;
The official Microsoft hotfix can be downloaded here &lt;a href=&quot;https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=29729&quot;&gt;https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=29729&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/2426449874090054203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/2426449874090054203?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2426449874090054203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2426449874090054203'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2010/06/vs2010-patch-for-cut-and-copy.html' title='VS2010 patch for Cut and Copy &quot;Insufficient Memory&quot; issue'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-7446358429138010050</id><published>2010-05-28T13:24:00.000+10:00</published><updated>2010-05-28T13:24:59.327+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net"/><category scheme="http://www.blogger.com/atom/ns#" term="Resharper"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>VS2010 and Resharper 5.0 performance - KB974417</title><content type='html'>On my current project we have upgraded our solution from VS2008 to VS2010. I&#39;m a big user of Resharper 5.0 in VS2008 and have it also installed in VS2010.&lt;br /&gt;
&lt;br /&gt;
However when the solution was loaded Resharper would completely lock up VS2010 and eventually crash. Disabling Resharper 5.0 didn&#39;t help much (&lt;em&gt;phew&lt;/em&gt;! can&#39;t live without Resharper), but the problem still remained.&lt;br /&gt;
&lt;br /&gt;
The VS2010 IDE became very unstable for our WPF and heavily resourced solution targeted at .Net 3.5. Visual Studio would regularly crash (say every 10 minutes) with an Out of Memory exception of some kind. If it didn&#39;t crash then the build would fail with some out of memory or not enough resources message.&lt;br /&gt;
&lt;br /&gt;
Fortunately in the Event Viewer there was this particularly unhelpful message:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Event Type: Error
Event Source: .NET Runtime Optimization Service
Event Category: None
Event ID: 1103
Description:
.NET Runtime Optimization Service (clr_optimization_v2.0.50727_32) - Tried to start a service that wasn&#39;t the latest version of CLR Optimization service. Will shutdown
&lt;/pre&gt;&lt;br /&gt;
This error seems to relate to a failed or corrupted installation of KB974417 - which applies when .Net 4.0 framework is installed.&lt;br /&gt;
&lt;br /&gt;
There are two ways to fix this. One or both may work for you.&lt;br /&gt;
&lt;br /&gt;
The first is to manually install the update via the &lt;a href=&quot;http://www.geeklab.info/2010/05/kb974417-install-fails-working-solution-updated/&quot;&gt;Geek Lab&lt;/a&gt; article.&lt;br /&gt;
The second is to remove the conflicting update and then reinstall:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Uninstall update KB976569 manually through Add/Remove programs.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?familyid=491874d4-5eea-4545-9b7d-3861857c862e&amp;amp;displaylang=en&quot;&gt;Download KB974417&lt;/a&gt; for your platform and install it.&lt;/li&gt;
&lt;li&gt;Re-install &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=8b9e4bb3-5a33-443e-bb09-9f9e506db519&quot;&gt;KB976569&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
If you don&#39;t have KB976569 installed to start with then it is possible to resolve this issue by installing KB976569 then following the steps above.&lt;br /&gt;
&lt;br /&gt;
Problem solved! Enable Resharper and code away.</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/7446358429138010050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/7446358429138010050?isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/7446358429138010050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/7446358429138010050'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2010/05/vs2010-and-resharper-50-performance.html' title='VS2010 and Resharper 5.0 performance - KB974417'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-8185423542043123511</id><published>2009-12-04T10:51:00.001+10:00</published><updated>2009-12-04T10:53:20.012+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Linq to Sql"/><title type='text'>Generic entity auditing in Linq to Sql</title><content type='html'>In many enterprise, or even non-enterprise, applications, there is generally a requirement for data change auditing.&lt;br /&gt;
&lt;br /&gt;
For many applications this will come in the form of adding auditing columns to each table in the database. For example the fields, CreateDate, CreateUser, ModifiedDate and ModifiedUser would audit the username and timestamp of record creation and modification in each table.&lt;br /&gt;
&lt;br /&gt;
Of course there are many ways to implement such auditing. In this article I will focus on an approach that I like when using Linq to Sql. &lt;br /&gt;
&lt;h3&gt;Overview&lt;/h3&gt;In general this approach uses a marker interface to decorate domain entities that require auditing and then uses the extension points of the Linq to Sql generated DataContext to do the auditing of the decorated entities. With the use of generics this can be done very simply with a few lines of code. The main benefit being that other infrastructure code - repositories, business logic etc don&#39;t need to worry about entity auditing at all.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Implementation&lt;/h3&gt;Let&#39;s first define our marker interface, which exposes the four auditing fields.&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;public interface IEntityAudit
{
    DateTime CreateDate { get; set; }
    string CreateUser { get; set; }
    DateTime ModifiedDate { get; set; }
    string ModifiedUser { get; set; }
}
&lt;/pre&gt;&lt;br /&gt;
The marker interface is used by the DataContext to determine which entities need to be audited when they are committed to the database. It also exposes the auditing fields so that the auditing implementation can access the fields generically.&lt;br /&gt;
&lt;br /&gt;
Now let&#39;s implement the auditing. Fortunately Linq to Sql provides a very convenient extension point in SubmitChanges. SubmitChanges is called once the DataContext has determined the changeset, but before the entities are persisted.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;public partial class MyStoreDataContext
{
    public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
    {
        // Poor separation of concerns here with auditing, we&#39;ll revisit this very soon
        var auditDate = DateTime.Now;
        var auditUser = HttpContext.Current.User.Identity.Name;
   
        var changeSet = GetChangeSet();

        foreach (var insert in changeSet.Inserts.OfType&amp;lt;IEntityAudit&amp;gt;())
        {
            insert.CreateDate = auditDate;
            insert.CreateUser = auditUser;
            insert.ModifiedDate = auditDate;
            insert.ModifiedUser = auditUser;
        }

        foreach (var update in changeSet.Updates.OfType&amp;lt;IEntityAudit&amp;gt;())
        {
            update.ModifiedDate = auditDate;
            update.ModifiedUser = auditUser;
        }

        base.SubmitChanges(failureMode);
    }
}
&lt;/pre&gt;&lt;br /&gt;
The types and entities of changes to be committed are provided in the changeSet.Inserts and changeSet.Updates IEnumerables.&lt;br /&gt;
Using the nice .OfType&amp;lt;&amp;gt;() extension to IEnumerable the entities that have auditing (as indicated by the marker interface, IEntityAudit) are iterated to set the creation or modification audit values.&lt;br /&gt;
Lastly we call the base SubmitChanges to do the normal Linq to Sql persistence.&lt;br /&gt;
&lt;br /&gt;
That is it! We have now built a generic auditing mechanism into our DataContext.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;So how is it used?&lt;/h3&gt;&lt;br /&gt;
Here is the domain entity in the database and the Linq to Sql designer:&lt;br /&gt;
&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;float: left; text-align: right;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCLn1uIZf8sBIundUGzfmeXRGn2nBOE_bvM_s7D35slY_drAU3ZukKN1gREyrP2_XxxGUa5_knJ_qDJCgTXVO7IkEh4r_VQNDQkJPuA5WjQiriEdki9a7i3pj3e7DKgF_s-xUGZw/s1600/ProductTable.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCLn1uIZf8sBIundUGzfmeXRGn2nBOE_bvM_s7D35slY_drAU3ZukKN1gREyrP2_XxxGUa5_knJ_qDJCgTXVO7IkEh4r_VQNDQkJPuA5WjQiriEdki9a7i3pj3e7DKgF_s-xUGZw/s320/ProductTable.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;float: left; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuuPGyj7KqXrOFElx9Og6uyC6WytTqyKq33PcZTUdysYDIHqYFzpyosaNlc26J4dWqxEsFx64O1fOf-kHJBIiRlTPgfLG3uMKJrDertNG1iBljJEtCmrCHKrWA0m7sxksuGTLURw/s1600/ProductEntity.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuuPGyj7KqXrOFElx9Og6uyC6WytTqyKq33PcZTUdysYDIHqYFzpyosaNlc26J4dWqxEsFx64O1fOf-kHJBIiRlTPgfLG3uMKJrDertNG1iBljJEtCmrCHKrWA0m7sxksuGTLURw/s1600/ProductEntity.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
Decorate the Product domain entity using the partial class&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;public partial class Product : IEntityAudit
{
}
&lt;/pre&gt;&lt;br /&gt;
Now whenever a Product is committed to the database as an insert or an update the auditing columns will be set.&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;public class ProductService
{
    public Product CreateProduct()
    {
        var product = new Product();

        using (var dataContext = new MyStoreDataContext())
        {
            dataContext.Products.InsertOnSubmit(product);
            dataContext.SubmitChanges(); // Here is where the Create audit is triggered
        }

        return product;
    }

    public void SetProductName(int productId, string productName)
    {
        using (var dataContext = new MyStoreDataContext())
        {
            var product = dataContext.Products.Single(p =&amp;gt; p.ProductId == productId);
            product.ProductName = productName;
            dataContext.SubmitChanges(); // Here is where the Update audit is triggered
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;
In my next blog post I will show how the concern for updating the audit fields (date and username) can be separated from the DataContext and extended to support multiple change processors.</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/8185423542043123511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/8185423542043123511?isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/8185423542043123511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/8185423542043123511'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2009/12/generic-entity-auditing-in-linq-to-sql.html' title='Generic entity auditing in Linq to Sql'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCLn1uIZf8sBIundUGzfmeXRGn2nBOE_bvM_s7D35slY_drAU3ZukKN1gREyrP2_XxxGUa5_knJ_qDJCgTXVO7IkEh4r_VQNDQkJPuA5WjQiriEdki9a7i3pj3e7DKgF_s-xUGZw/s72-c/ProductTable.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-6746438198639168291</id><published>2009-11-23T15:15:00.001+10:00</published><updated>2009-11-23T15:17:19.895+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Linq"/><title type='text'>Using an interface to reuse Linq queries</title><content type='html'>I just read a &lt;a href=&quot;http://www.matthidinger.com/archive/2009/09/04/convention-based-linq-querying.aspx&quot;&gt;post about convention based Linq querying&lt;/a&gt; and thought I would followup with an alternative method for implementation.&lt;br /&gt;
&lt;br /&gt;
One downside that I see with the implementation of building the expression tree is that the entity may not have an Id property. In this case I would definitely want to see a compile error rather than runtime.&lt;br /&gt;
&lt;br /&gt;
So a simple solution may be to decorate the entities with a marker interface and the place the constraint on the extension method generic, such as&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;    public interface IEntity
    {}
    
    public partial class Post : IEntity
    {
        // Id property is declared in the Linq to Sql designer file
    }

    public static T GetById&amp;lt;T&amp;gt;(this IQueryable&amp;lt;T&amp;gt; query, int id) where T : class, IEntity
    {
        ...
    }
&lt;/pre&gt;&lt;br /&gt;
But why don&#39;t we take this a step further and remove a bit of the expression clumsiness? If we were to add an Id property to the interface, then the following would be possible.&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;    public interface IEntity
    {
        int Id { get; set; }
    }
    
    public partial class Post : IEntity
    {
        // Id property is declared in the Linq to Sql designer file
    }
    
    public static T GetById&amp;lt;T&amp;gt;(this IQueryable&amp;lt;T&amp;gt; queryable, int id) where T : class, IEntity
    {
        return queryable.SingleOrDefault(t =&amp;gt; t.Id == id);
    }
&lt;/pre&gt;&lt;br /&gt;
This implementation won&#39;t compile if the query is on an object that doesn&#39;t have an Id. Thus making the interface self-documenting and enforced at compile time.&lt;br /&gt;
&lt;br /&gt;
So as an exercise in understanding expressions this implementation is lacking, but the simplicity is certainly appealing to me.</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/6746438198639168291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/6746438198639168291?isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/6746438198639168291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/6746438198639168291'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2009/11/using-interface-to-reuse-linq-queries.html' title='Using an interface to reuse Linq queries'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-2254994943916835232</id><published>2009-10-31T21:57:00.012+10:00</published><updated>2009-11-23T11:02:07.034+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="iTextSharp"/><category scheme="http://www.blogger.com/atom/ns#" term="PDF"/><category scheme="http://www.blogger.com/atom/ns#" term="Trust"/><title type='text'>iTextSharp PDF rendering in a medium trust ASP.Net environment</title><content type='html'>Rendering a PDF for download or email is a very common task for an e-commerce website. One thing to consider when deciding on a PDF library for rendering is what environment the site is running in. Most ASP.Net shared hosting solutions will restrict their hosted sites to Medium trust to prevent a rogue site from peeking at other sites on the server.&lt;br /&gt;
&lt;br /&gt;
Medium trust environments can cause funny things to happen between the development environment and the production environment. By default the websites created in Visual Studio have Full trust, this can cause security problems after deployment if you haven&#39;t setup your development environment to mimic production. A good first step is to add a &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/tkscy493.aspx&quot;&gt;trust level&lt;/a&gt; to your web.config system.web section.&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;system.web&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;trust level=&quot;Medium&quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&amp;lt;/system.web&amp;gt;
&lt;/pre&gt;This will help to find any trust issues while developing.&lt;br /&gt;
&lt;br /&gt;
So to rendering PDF. After trying ReportViewer 2008 in local mode and &lt;a href=&quot;http://www.pdfsharp.net/&quot;&gt;PDFSharp&lt;/a&gt; (both of which are still very good at rendering PDFs), I have found success with &lt;a href=&quot;http://sourceforge.net/projects/itextsharp/&quot;&gt;iTextSharp&lt;/a&gt;. ReportViewer and PDFSharp both require Full trust mode because they use native COM dlls as part of the GDI rendering process. This makes them unsuitable for shared hosting environments unless you can convince your hoster to raise your site&#39;s trust level. The PDFSharp Wiki says that release 1.30 solves most medium trust issues and that full support is in the near future, which is promising. My car also has most of it&#39;s wheels, but until I put the fourth one on it isn&#39;t going to go far on the road.&lt;br /&gt;
&lt;br /&gt;
iTextSharp appears to have less documentation on the web (one of the best being a fairly comprehensive &lt;a href=&quot;http://itextsharp.sourceforge.net/tutorial/index.html&quot;&gt;iTextSharp tutorial&lt;/a&gt;), but it is just as powerful as PDFSharp or ReportViewer. The best thing about it though is that it can run in Medium trust mode - once a minor change is made to allow partially trusted callers. To make this change download the iTextSharp source distribution (&lt;a href=&quot;http://sourceforge.net/projects/itextsharp/files/&quot;&gt;http://sourceforge.net/projects/itextsharp/files/&lt;/a&gt;)&lt;br /&gt;
Modify the &lt;i&gt;AssemblyInfo.cs&lt;/i&gt; file to add the partially trusted callers attribute.&lt;br /&gt;
&lt;blockquote&gt;[assembly: AllowPartiallyTrustedCallers()]&lt;br /&gt;
&lt;/blockquote&gt;Rebuild the iTextSharp assembly and it should be good to go in a Medium trust environment.</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/2254994943916835232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/2254994943916835232?isPopup=true' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2254994943916835232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2254994943916835232'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2009/10/itextsharp-pdf-rendering-in-medium.html' title='iTextSharp PDF rendering in a medium trust ASP.Net environment'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-3312371680804764374</id><published>2009-05-19T09:09:00.000+10:00</published><updated>2009-05-19T09:11:18.619+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Development Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><title type='text'>Unit Testing with Typemock</title><content type='html'>&lt;a href=&quot;http://www.typemock.com/&quot;&gt;Unit Testing&lt;/a&gt; ASP.NET? &lt;a href=&quot;http://www.typemock.com/ASP.NET_unit_testing_page.php&quot;&gt;ASP.NET unit testing&lt;/a&gt; has never been this easy.&lt;br&gt;&lt;br&gt;Typemock is launching a new product for ASP.NET developers – the &lt;strong&gt;ASP.NET Bundle&lt;/strong&gt; - and for the launch will be giving out &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;&lt;strong&gt;FREE licenses&lt;/strong&gt;&lt;/span&gt; to bloggers and their readers.&lt;br&gt;&lt;br&gt;The ASP.NET Bundle is the ultimate ASP.NET unit testing solution, and offers both &lt;a href=&quot;http://www.typemock.com/&quot;&gt;Typemock Isolator&lt;/a&gt;, a &lt;a href=&quot;http://www.typemock.com/&quot;&gt;unit test&lt;/a&gt; tool and &lt;a href=&quot;http://sm-art.biz/Ivonna.aspx&quot;&gt;Ivonna&lt;/a&gt;, the Isolator add-on for &lt;a href=&quot;http://sm-art.biz/Ivonna.aspx&quot;&gt;ASP.NET unit testing&lt;/a&gt;, for a bargain price.&lt;br&gt;&lt;br&gt;Typemock Isolator is a leading &lt;a href=&quot;http://www.typemock.com/&quot;&gt;.NET unit testing&lt;/a&gt; tool (C# and VB.NET) for many ‘hard to test’ technologies such as &lt;a href=&quot;http://typemock.com/sharepointpage.php&quot;&gt;SharePoint&lt;/a&gt;, &lt;a href=&quot;http://www.typemock.com/ASP.NET_unit_testing_page.php&quot;&gt;ASP.NET&lt;/a&gt;, &lt;a href=&quot;http://www.typemock.com/ASP.NET_unit_testing_page.php&quot;&gt;MVC&lt;/a&gt;, &lt;a href=&quot;http://www.typemock.com/wcfpage.php&quot;&gt;WCF&lt;/a&gt;, WPF, &lt;a href=&quot;http://www.typemock.com/Silverlight_unit_testing_page.php&quot;&gt;Silverlight&lt;/a&gt; and more. Note that for &lt;a href=&quot;http://www.typemock.com/Silverlight_unit_testing_page.php&quot;&gt;unit testing Silverlight&lt;/a&gt; there is an open source Isolator add-on called &lt;a href=&quot;http://www.typemock.com/Silverlight_unit_testing_page.php&quot;&gt;SilverUnit&lt;/a&gt;.&lt;br&gt;&lt;br&gt;The first 60 bloggers who will blog this text in their blog and &lt;a href=&quot;http://blog.typemock.com/2009/05/get-free-typemock-licenses-aspnet.html&quot;&gt;tell us about it&lt;/a&gt;, will get a Free Isolator ASP.NET Bundle license (Typemock Isolator + Ivonna). If you post this in an ASP.NET &lt;strong&gt;dedicated&lt;/strong&gt; blog, you&#39;ll get a license automatically (even if more than 60 submit) during the first week of this announcement.&lt;br&gt;&lt;br&gt;Also 8 bloggers will get an &lt;strong&gt;additional 2 licenses&lt;/strong&gt; (each) to give away to their readers / friends.&lt;br&gt;&lt;br&gt;Go ahead, click the following link for &lt;a href=&quot;http://blog.typemock.com/2009/05/get-free-typemock-licenses-aspnet.html&quot;&gt;more information &lt;/a&gt;on how to get your free license.</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/3312371680804764374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/3312371680804764374?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/3312371680804764374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/3312371680804764374'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2009/05/unit-testing-with-typemock.html' title='Unit Testing with Typemock'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-1170166413817272095</id><published>2009-04-28T09:35:00.006+10:00</published><updated>2009-07-31T15:49:09.978+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bad code"/><title type='text'>Comments are the true revealer of a bad coder</title><content type='html'>Comments that are in the code of the application that you have inherited maintenance of can sometimes very quickly reflect the quality of the codebase. In this case there is obviously a bit of confusion around the subtlety and use of the &lt;span style=&quot;font-style:italic;&quot;&gt;cast&lt;/span&gt;, &lt;span style=&quot;font-style:italic;&quot;&gt;as&lt;/span&gt; and &lt;span style=&quot;font-style:italic;&quot;&gt;is&lt;/span&gt; C# operators. Yes, there is also a grammatical error. And no, I have not removed any code from inside the if block - that is all there was.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (payment is CreditCardPaymentDto)&lt;br /&gt;{&lt;br /&gt;    // For some reason casting this outside the if statement throws and exception                        &lt;br /&gt;    CreditCardPaymentDto creditPayment = (CreditCardPaymentDto)payment;                       &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/1170166413817272095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/1170166413817272095?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/1170166413817272095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/1170166413817272095'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2009/04/comments-are-true-revealer-of-bad-coder.html' title='Comments are the true revealer of a bad coder'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-2578476781232318699</id><published>2009-02-17T15:08:00.003+10:00</published><updated>2009-02-17T15:16:19.345+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Annoyances"/><title type='text'>Quotes that may indicate your workplace practices waterfall methods</title><content type='html'>&lt;div style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The functional specs will be released to the development team once they are signed off later this week. You can start development next week.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;To be fair it was &lt;i&gt;Monday&lt;/i&gt;, so I would potentially have up to 4 days as development team lead to prepare the team. &amp;lt;/sarcasm&amp;gt;&lt;br /&gt;&lt;br /&gt;I guess I&#39;ll have to spend the first couple of weeks of development time working out what we are developing...&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/2578476781232318699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/2578476781232318699?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2578476781232318699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2578476781232318699'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2009/02/quotes-that-may-indicate-your-workplace.html' title='Quotes that may indicate your workplace practices waterfall methods'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-9067130051940713611</id><published>2009-01-12T15:15:00.002+10:00</published><updated>2009-11-28T21:59:08.086+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><title type='text'>Don&#39;t take shortcuts on script tags!</title><content type='html'>&lt;p&gt;This problem annoyed me for longer than I would have hoped recently - even though I have seen it before and spent a frustrating time &#39;fixing&#39; it. I added a script reference (the first for the page) to the head of a html page and lazily wrote it as&lt;/p&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&quot;scripts/jquery-1.3.1.js&quot; /&amp;gt;
&lt;/pre&gt;&lt;p&gt;Well this broke the ScriptManager, which couldn&#39;t hook up the postback methods for the UpdatePanels on the form. Hmm that&#39;s odd, even an empty .js file included this way cause a javascript error on page load such as &quot;this._form is null&quot; or &quot;__doPostBack is not defined&quot;. And then something twigged from a not-so-distant project and there it was &lt;/p&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&quot;scripts/jquery-1.3.1.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;p&gt;Lesson: Don&#39;t take shortcuts when writing script tags!&lt;/p&gt;&lt;p&gt;More explanation of why &lt;a href=&quot;http://ajaxian.com/archives/why-doesnt-script-work&quot;&gt;http://ajaxian.com/archives/why-doesnt-script-work&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/9067130051940713611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/9067130051940713611?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/9067130051940713611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/9067130051940713611'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2009/01/dont-take-shortcuts-on-script-tags.html' title='Don&#39;t take shortcuts on script tags!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-3067055607412351456</id><published>2008-08-13T17:10:00.004+10:00</published><updated>2008-08-13T17:35:33.763+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="Dynamic Data"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><title type='text'>Dynamic Data Changes - EnableQueryStringSelection</title><content type='html'>With the release of .Net 3.5 Framework SP1, the Dynamic Data tools have changed slightly. If you setup a site with a pre-SP1 version of Dynamic Data then this issue may have bitten you.&lt;br /&gt;&lt;br /&gt;Runtime error - &quot;Type &#39;System.Web.DynamicData.DynamicDataManager&#39; does not have a public property named &#39;EnableQueryStringSelection&#39;.&quot;&lt;br /&gt;&lt;br /&gt;This flag on the DynamicDataManager enabled that manager to ensure that when a control such as GridView is associated with another control such as DetailsView that one would update when the other changed and vice-versa. One of the downsides of this behaviour is that your associated control had to be supported by the DynamicDataManager to be able to participate in the synchronisation - so many 3rd party controls missed out. Also all registered controls participated in the synchronisation from the Url.&lt;br /&gt;&lt;br /&gt;To reenable this behaviour in SP1 use the &lt;span style=&quot;font-style: italic;&quot;&gt;DynamicDataManager.RegisterControl(Control control, Boolean setSelectionFromUrl)&lt;/span&gt; overload when registering the controls. When &lt;span style=&quot;font-style: italic;&quot;&gt;true&lt;/span&gt; is specified that control will get its selection from the Url. So there is now a lot more flexibility in defining which control is managed from the url, instead of all registered controls being managed.</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/3067055607412351456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/3067055607412351456?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/3067055607412351456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/3067055607412351456'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/08/dynamic-data-changes.html' title='Dynamic Data Changes - EnableQueryStringSelection'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-2251257325429251261</id><published>2008-08-12T23:06:00.003+10:00</published><updated>2008-08-12T23:53:23.925+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="Development Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>VS2008 and .Net 3.5 SP1 released</title><content type='html'>Today Microsoft released the RTM of Visual Studio 2008 and .Net Framework 3.5 Service Pack 1.&lt;br /&gt;&lt;br /&gt;What a great milestone! Hopefully this signals a new level of maturity and stability in these two technologies. Some organisations that I have associated with have been somewhat reticent to embrace .Net 3.5 as it is still perceived as too bleeding edge.&lt;br /&gt;&lt;br /&gt;That aside, .Net Framework 3.5 has a great uptake in developer participation due to the exciting new framework and language features that it introduces. There is great buzz in the development community around MVC, Linq-To-Sql, Dynamic Data, Lamba expressions, ASP.Net AJAX, support for Astoria, ASP.Net Entity Framework, partial methods and so on. The speed at which these new technologies and frameworks are appearing is very rapid. What&#39;s more is that these features have led to whole new areas of application and platform design options that are easier to implement, reuse and maintain.&lt;br /&gt;&lt;br /&gt;I believe this is a really exciting time to be involved in using these tools to develop applications. It reinvigorates the community.&lt;br /&gt;&lt;br /&gt;What changes in SP1 do you think will be most beneficial to you?&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.asp.net/Downloads/3.5-SP1/&quot;&gt;.Net 3.5 SP1 Overview&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogs.msdn.com/tom/archive/2008/08/12/visual-studio-2008-and-net-framework-3-5-service-pack-1.aspx&quot;&gt;ASP.Net Debugging&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;amp;displaylang=en&quot;&gt;Combined Visual Studio 2008 and .Net Framework 3.5 Service Pack 1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&amp;amp;displaylang=en&quot;&gt;.Net Framework 3.5 Service Pack 1 (no VS2008 SP1)&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/2251257325429251261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/2251257325429251261?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2251257325429251261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2251257325429251261'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/08/vs2008-and-net-35-sp1-released.html' title='VS2008 and .Net 3.5 SP1 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-2672238043937797385</id><published>2008-07-31T20:35:00.006+10:00</published><updated>2008-07-31T22:08:16.357+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Development Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Linq"/><title type='text'>When RAD is just cool</title><content type='html'>&lt;div&gt;Problem:&lt;br /&gt;Recently faced with an application that is deep in maintenance I was asked to de-identify some demographic data for a new training environment. One aspect of the data in the database is stored in a decent sized XML blob of ~10Kb. The XML blob had some of the data that needed to be modified - names, addresses, phone numbers etc. This data is also spread out to other reaches of the database in relatively harmless tables.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Solution 1&lt;/span&gt;&lt;br /&gt;Do data manipulation at the data store with SQL scripts. To be honest, 90% of the work is done in SQL scripts to remove unwanted data, shuffle names and addresses, randomly change DOBs etc. When doing bulk deletes and manipulations the flexiblity to easily disable indexes and triggers lends itself to TSQL and intimate database relations. However when facing the data in the XML blob and things became a little cumbersome in TSQL. So I looked to finish the job with...&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Solution 2&lt;/span&gt;&lt;br /&gt;The current application has a data model and data access, surely that can be reused. The option of taking the XSD and load/save methods of this old (Vb.Net 1.1, 1 assembly (!) ), monolithic ASP.Net website and wedge it into a console app to manipulate the data seems good on first glance. It really only took about 5 minutes of going down this path to feel a pain that really shouldn&#39;t be felt. (Think Datasets, SqlCommand, SqlDataReader and friends). Spaghetti code like this just can&#39;t be plied apart from the in-tree custom framework that it lives with. So in comes...&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Solution 3&lt;/span&gt;&lt;br /&gt;&lt;div&gt;Enter RAD. I opened up VS2008 and took the following steps - new console project, register database in Server Explorer, new Linq-to-SQL designer, drag the database table to the designer. Then it was a simple case of creating a database context, iterating the rows, using XPath to manipulate the Xml and submitting the changes to the database. The end solution was less than 30 lines of code and took less than 15 minutes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So what was &lt;span style=&quot;font-style: italic;&quot;&gt;cool&lt;/span&gt; about this? Well, I didn&#39;t write a single line of &#39;grunt work&#39; - no database access, domain objects, readers or mappers - it was all done for me. I distanced myself from the mechanics of the task at hand and focused on the heart of the problem, which was updating the data.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;What I learned came back to the old adage of &#39;&lt;span style=&quot;font-style: italic;&quot;&gt;using the right tools for the job&lt;/span&gt;&#39;. RAD tools don&#39;t fit every application or architecture, but in my mind for throw away utilities like I was writing they provide the perfect solution.</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/2672238043937797385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/2672238043937797385?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2672238043937797385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/2672238043937797385'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/07/when-rad-is-just-cool.html' title='When RAD is just cool'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-3337730285400396813</id><published>2008-05-27T21:51:00.003+10:00</published><updated>2008-05-27T22:02:36.348+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="Linq"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><title type='text'>LinqDataSource error on Update or Insert</title><content type='html'>Here is a reminder for myself about a problem that happens, and I always end up having to search to remember the solution. When performing an update or insert on a LinqDataSource, say from a GridView you get the error &lt;em&gt;&quot;Could not find a row that matches the given keys in the original values stored in ViewState. Ensure that the &#39;keys&#39; dictionary contains unique key values that correspond to a row returned from the previous Select operation.&quot;&lt;/em&gt;... Sounds complicated.&lt;br /&gt;&lt;br /&gt;Well it isn&#39;t. Check that you have set the DataKeyNames property on the GridView with the column name of the primary key(s) of the LinqDataSource table. But that doesn&#39;t make sense, you say.&lt;br /&gt;&lt;br /&gt;It does if you have a look at the stack trace. For example,&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;System.Web.UI.WebControls.LinqDataSourceView.GetOriginalValues(IDictionary keys) +926 System.Web.UI.WebControls.LinqDataSourceView.BuildUpdateDataObjects(Object table, IDictionary keys, IDictionary values, IDictionary oldValues) +102 System.Web.UI.WebControls.LinqDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +87 System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +78&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The LinqDataSource is just like the old SqlDataSource - it needs to know how to lookup the row in the database table to work out what you have changed. If you don&#39;t tell it the keys to lookup in the table, how will it ever know which row you were editing? Once the DataKeyNames are specified those columns are used to find the original row in the database, compare and merge your update changes and commit them back to the row. Simple. Now I just have to remember &quot;Set the DataKeyNames property&quot;...</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/3337730285400396813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/3337730285400396813?isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/3337730285400396813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/3337730285400396813'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/05/linqdatasource-error-on-update-or.html' title='LinqDataSource error on Update or Insert'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-8149248162664514190</id><published>2008-05-20T22:23:00.003+10:00</published><updated>2008-05-20T22:35:12.748+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Annoyances"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Workflow"/><title type='text'>Windows Workflow still immature</title><content type='html'>I have been spending the last couple of weeks looking at how to integrate Microsoft Windows Workflows into my ASP.Net website. It is a basic usage of workflow - implement a state machine, do some processing on state initialisation, maybe fire an email or reminder here and there. It all sounds great on the surface and it basically works. But there are a few things that will just mean that it isn&#39;t workable in my site.&lt;br /&gt;&lt;br /&gt;You see I have long running workflows, let&#39;s say longer than a week. They might hang around waiting for user input, a client to phone back, fill in a web form or something of that nature. However I am taking an agile approach to this particular development - releasing little functionality increments for the client. The problem is that workflows are tied to assembly versions, and my assembly versions are changing all the time. Not to mention that the workflow structure is also changing all the time.&lt;br /&gt;&lt;br /&gt;So what do I do? Something like &lt;a href=&quot;http://www.sitechno.com/Blog/WorkflowVersioningOfLongRunningProcessesSucksHereismytakeonit.aspx&quot;&gt;Ruurd Boeke&lt;/a&gt; suggests could pass, but hell that is a lot of work, considering I&#39;ll be doing this every two weeks or so. I don&#39;t have a good solution, so for the moment it is shelved. I&#39;ll just implement a basic state flag on my object and then provide a generic mechanism for faking the state flow. If things are designed right then I should be able to reuse any code in workflow activities once it all gets running. I&#39;ll try to use workflows for some of the short tasks that are required, just to make sure I am still getting my feet wet with the technology.&lt;br /&gt;&lt;br /&gt;This seems like a typical trend for Microsoft to release something that is really, really beta (nay, alpha?) to gauge public opinion and then develop it a production standard later on. Windows workflows seem to me like they are nowhere near ready for production systems.&lt;br /&gt;&lt;br /&gt;Do you have an opinion??</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/8149248162664514190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/8149248162664514190?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/8149248162664514190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/8149248162664514190'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/05/windows-workflow-still-immature.html' title='Windows Workflow still immature'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-809415239433469805</id><published>2008-04-23T12:00:00.004+10:00</published><updated>2008-04-23T12:07:51.119+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AJAX"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="Controls"/><title type='text'>ASP.Net Event Validation</title><content type='html'>&lt;a href=&quot;http://odetocode.com&quot;&gt;OdeToCode.com&lt;/a&gt; has a great post from K. Scott Allen about the &lt;a href=&quot;http://odetocode.com/Blogs/scott/archive/2006/03/20/3145.aspx&quot;&gt;ASP.Net event validation&lt;/a&gt;. He describes the mechanism that the ASP.Net controls use to validate that the values being submitted from the controls are valid. The &lt;a href=&quot;http://odetocode.com/Blogs/scott/archive/2006/03/21/3153.aspx&quot;&gt;second part&lt;/a&gt; of the post gives a couple of workarounds. I hate the suggestion of disabling event validation across my whole site. What a cop out!&lt;br /&gt;&lt;br /&gt;Of course it doesn&#39;t help with my current problem of the event validation on the AJAX controls, but it is a good bit of background for understanding the problem.</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/809415239433469805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/809415239433469805?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/809415239433469805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/809415239433469805'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/04/aspnet-event-validation.html' title='ASP.Net Event Validation'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-7442491967925426373</id><published>2008-03-08T08:22:00.002+10:00</published><updated>2008-03-08T08:25:28.237+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Utilities"/><title type='text'>Google and Outlook Calendar Sync</title><content type='html'>Google moves its users one step closer to total integration with the release of Google Calendar Sync. Synchronize to-from and back to Outlook and Google Calendar. Access it anywhere. Just make sure you are running the Calendar Sync program.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://googleblog.blogspot.com/2008/03/google-calendar-sync.html&quot;&gt;Google-Oulook-Google Calendar sync&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/7442491967925426373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/7442491967925426373?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/7442491967925426373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/7442491967925426373'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/03/google-and-outlook-calendar-sync.html' title='Google and Outlook Calendar Sync'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-5435341089237909679</id><published>2008-03-07T15:41:00.001+10:00</published><updated>2008-03-08T08:25:59.672+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="WCF"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Services"/><title type='text'>WCF client says &#39;No Corresponding Start Element Open&#39;</title><content type='html'>Once again I&#39;ll just make a comment about this error. When using Dataset across a WCF service the service call may fail with the error &quot;No Corresponding Start Element Open&quot;. The error makes perfect sense once you know the answer, but to the uninitiated it might be perplexing.&lt;br /&gt;&lt;br /&gt;The problem is that the return value of the service call is a Dataset. If you return &lt;em&gt;null&lt;/em&gt; from the service call then the client will see this error. The answer, well it depends on what you want to achieve. But probably just return an empty dataset and then test the contents on the client (which should be done anyway for good coding practice).&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://instantdevelopment.blogspot.com/2007/10/frustrating-error-no-corresponding.html&quot;&gt;Instant Development: Frustrating Error: No Corresponding Start Element Open&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/5435341089237909679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/5435341089237909679?isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/5435341089237909679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/5435341089237909679'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/03/wcf-client-says-no-corresponding-start.html' title='WCF client says &#39;No Corresponding Start Element Open&#39;'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-7177522245260167552</id><published>2008-03-06T10:54:00.001+10:00</published><updated>2008-03-06T10:55:53.948+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Browsers"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Internet Explorer 8 introduces Web Activities</title><content type='html'>Microsoft has released a beta version of its popular web browser Internet Explorer. Internet Explorer 8 touts its offering of more CSS compatibility, better developer debugging integration, Web Activities, WebSlice. It will be interesting to see how these new IE extensions, such as Activities and Slices will be accepted by a community that is seeing increasing browser share for Mozilla Firefox.&lt;br /&gt;&lt;br /&gt;A decade on from previous browser compatibility wars between Netscape and Internet Explorer, web developers might be a little more weary of developing web pages that are for exclusive, or optimised use in Internet Explorer. At least I hope so. Standards are standards for a reason and I personally don&#39;t want to develop for the four main browsers (IE6, IE7, IE8, Firefox) instead of three. Hopefully the much talked about standard compliance mode won&#39;t be watered down too much in subsequent releases.&lt;br /&gt;&lt;br /&gt;Article: &lt;a href=&quot;http://etech.eweek.com/content/web_technology/ie_8_beta_1_launches_new_microsoft_web_activities.html&quot;&gt;IE 8 Beta 1 Released&lt;/a&gt;&lt;br /&gt;Download IE8: &lt;a href=&quot;http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/Install.htm&quot;&gt;http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/Install.htm&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/7177522245260167552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/7177522245260167552?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/7177522245260167552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/7177522245260167552'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/03/internet-explorer-8-introduces-web.html' title='Internet Explorer 8 introduces Web Activities'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-5519339485045767581</id><published>2008-02-25T12:40:00.001+10:00</published><updated>2008-03-08T08:27:04.419+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Gadgets"/><title type='text'>Giving RAM the cold shoulder</title><content type='html'>&lt;a href=&quot;http://www.engadget.com/2008/02/21/cold-boot-disk-encryption-attack-is-shockingly-effective/&quot;&gt;Cold boot disk encryption attack is shockingly effective - Engadget&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/5519339485045767581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/5519339485045767581?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/5519339485045767581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/5519339485045767581'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/02/giving-ram-cold-shoulder.html' title='Giving RAM the cold shoulder'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-5137136130708320999</id><published>2008-02-20T13:53:00.002+10:00</published><updated>2008-03-08T08:27:44.889+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AJAX"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="WCF"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Services"/><title type='text'>Global and tidy exception handling for ScriptService</title><content type='html'>Faced with a handful of ScriptService for the site I am working on, I would like to implement some common exception handling across all the methods. Not to change the behaviour on the client, but rather to capture the exceptions and post the to an exception log or an email or something...&lt;br /&gt;&lt;br /&gt;So there are solutions to this for traditional WebServices. See the SoapExtension mechanism documentation provided by Microsoft &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/ds492xtk.aspx&quot;&gt;Handling and Throwing Exceptions in XML Web Services&lt;/a&gt; and &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/esw638yk.aspx&quot;&gt;SOAP Message Modification Using SOAP Extensions&lt;/a&gt;. But as we all know the ScriptService mechanism doesn&#39;t use the SOAP message stack.&lt;br /&gt;&lt;br /&gt;Which brings us to the point Ayende makes &lt;a href=&quot;http://www.ayende.com/Blog/archive/2008/01/06/ASP.Net-Ajax-Error-Handling-and-WTF.aspx&quot;&gt;ASP.Net Ajax, Error Handling and WTF&lt;/a&gt;. I&#39;m not sure whether this is entirely correct that there are no hooks to provide custom handling in the ScriptService lifecycle.&lt;br /&gt;&lt;br /&gt;Maybe I&#39;ll get a chance to investigate myself one day, but for the moment there just isn&#39;t time....</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/5137136130708320999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/5137136130708320999?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/5137136130708320999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/5137136130708320999'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/02/global-and-tidy-exception-handling-for.html' title='Global and tidy exception handling for ScriptService'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-1009760289314337356</id><published>2008-02-18T12:34:00.001+10:00</published><updated>2008-02-18T12:34:30.434+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><title type='text'>Does &quot;Done&quot; Mean &quot;Shippable&quot;?</title><content type='html'>Is your software &#39;Done&#39; or &#39;Shippable&#39;? If you&#39;re first thought is that it doesn&#39;t matter because they are the same thing then maybe you should read this article.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.infoq.com/news/2008/02/done-shippable-quality&quot;&gt;Does &quot;Done&quot; Mean &quot;Shippable&quot;?&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/1009760289314337356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/1009760289314337356?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/1009760289314337356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/1009760289314337356'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/02/does-done-mean-shippable.html' title='Does &quot;Done&quot; Mean &quot;Shippable&quot;?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-6142574066320126742</id><published>2008-02-07T09:31:00.000+10:00</published><updated>2008-02-07T09:31:08.382+10:00</updated><title type='text'>Torvalds pans Apple with &#39;utter crap&#39; putdown</title><content type='html'>Linus Torvalds comments on Windows and OS X while in Australia.&lt;br /&gt;&lt;a href=&quot;http://www.smh.com.au/cgi-bin/common/popupPrintArticle.pl?path=/articles/2008/02/05/1202090393959.html&quot;&gt;Print Article: Torvalds pans Apple with &#39;utter crap&#39; putdown&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/6142574066320126742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/6142574066320126742?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/6142574066320126742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/6142574066320126742'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/02/torvalds-pans-apple-with-utter-crap.html' title='Torvalds pans Apple with &#39;utter crap&#39; putdown'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-6561491012767653429</id><published>2008-02-05T09:53:00.000+10:00</published><updated>2008-02-05T09:54:27.126+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>Relation Only, or with Foreign Key Constraint?</title><content type='html'>Almost too basic description of the options in the Dataset Relation dialog.&lt;br /&gt;&lt;a href=&quot;http://blogs.msdn.com/smartclientdata/archive/2006/02/13/530786.aspx&quot;&gt;Smart Client Data : Relation Dialog: Relation Only, or with Foreign Key Constraint?&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/6561491012767653429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/6561491012767653429?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/6561491012767653429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/6561491012767653429'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/02/relation-only-or-with-foreign-key.html' title='Relation Only, or with Foreign Key Constraint?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-574427379010055339</id><published>2008-01-31T15:34:00.000+10:00</published><updated>2008-01-31T15:35:10.043+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><title type='text'>ViewState in ASP.NET 2.0</title><content type='html'>This is a really simple article that describes the ViewState of controls and pages in ASP.Net 2.0. Good reading if you don&#39;t fully understand the ViewState and potential uses.&lt;br /&gt;&lt;a href=&quot;http://www.beansoftware.com/ASP.NET-Tutorials/ViewState-In-ASP.NET.aspx&quot;&gt;ViewState in ASP.NET 2.0&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/574427379010055339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/574427379010055339?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/574427379010055339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/574427379010055339'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/01/viewstate-in-aspnet-20.html' title='ViewState in ASP.NET 2.0'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29366726.post-7438426591692481686</id><published>2008-01-29T10:14:00.000+10:00</published><updated>2008-01-29T10:15:59.106+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Gzip compressing using Response Filter</title><content type='html'>Good post on building a response filter for implementing gzip compression across your whole web site. Be sure to read the comments to find if it is suitable to your application first!&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.west-wind.com/WebLog/posts/10564.aspx&quot;&gt;More on GZip compression with ASP.NET Content - Rick Strahl&#39;s Web Log&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://instantdevelopment.blogspot.com/feeds/7438426591692481686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/29366726/7438426591692481686?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/7438426591692481686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29366726/posts/default/7438426591692481686'/><link rel='alternate' type='text/html' href='http://instantdevelopment.blogspot.com/2008/01/more-on-gzip-compression-with-aspnet.html' title='Gzip compressing using Response Filter'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16748920504975752738</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>