<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>new BlogContext("Aaron Powell");</title>
    <link>http://www.aaron-powell.com</link>
    <description>var posts = umb.Blog.Where(p =&gt; p.Intelligent);</description>
    <generator>LINQ</generator>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/LinqToAaronPowell" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Why I'm not a fan of XSLT</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/9F0EsQcfnkE/why-i'm-not-a-fan-of-xslt.aspx</link>
      <pubDate>2009-11-04 20:05:01Z</pubDate>
      <description><![CDATA[
<p>When I first joined the Umbraco team with the goal of bringing
LINQ to Umbraco to the core framework there was some excitement and
quite a bit of the early excitement was from Umbraco MVP <a
href="http://www.creativewebspecialist.co.uk/"
target="_blank">Warren Buckley</a>.<br />
 And with the recent beta release the focus has come back onto LINQ
to Umbraco, myself and XSLT.</p>

<p>While preparing to write this post I was tossing up with the
name. Although I've entitled it "Why I'm not a fan of XSLT" it
would have been just as apt to name it "Why write LINQ to
Umbraco?".</p>

<p>As you read through this post I was you to keep in mind that I'm
not someone who is really that good at XPath and XSLT. In fact, my
dislike for XSLT is why I wrote LINQ to Umbraco!</p>

<p>But why, being an Umbraco user, don't i like XSLT? After all,
it's a fairly core part of Umbraco!</p>

<p><strong>Compile time checking</strong></p>

<p>That's right, I'm very much a developer, and very much a
compiler-driven developer. Runtime errors really are the worst to
try and debug, and that's what you really get with XPath. XPath is
evaluated at runtime (yes, that's a bit generalized :P), so if you
have something wrong in your syntax you wont find it
immediately.</p>

<p>Compare that to .NET code, it's very hard to write .NET code
which wont compile. True that you can still get runtime errors, but
they are a lot harder to achieve in the scenario's we're looking at
for LINQ to Umbraco vs XSLT.</p>

<p><strong>Strong typing</strong></p>

<p>Again, another example of me being very much a developer, I
would much rather look at an object with properties which knows of
the type of the data.</p>

<p>If you're not careful you can mistake the type and then you,
again, have a runtime error :P.<br />
 The .NET compiler wont let you assign a string to an int.</p>

<p><strong>Readability</strong></p>

<p>This one will cause a bit of a stir, but I simply don't find
XPath &amp; XSLT readable. Take these two examples:</p>

<pre class="brush: xml">
//node[nodeTypeAlias='home_page']/node[nodeTypeAlias='contact_us' nodeName='Contact Aaron']
</pre>

<pre class="brush: csharp">
ctx.HomePages.ContactUs.Where(c =&gt; c.Name == "Contact Aaron");
</pre>

<p>My example is very basic, but if you look into a more complex
XSLT file (such as many which exists in Warrens CWS package). In
fact, in the unit tests for LINQ to Umbraco there is a replication
of a few of them (have a look in the source on Codeplex if you want
to see them).</p>

<p>A very important component of code for me is readability. When
debugging, especially if the code isn't yours to begin with,
readability is a vital component. You don't want to have to waste
time trying to understand what's going on in the code before trying
to solve it.<br />
 And if you can't work out the code properly then there's a chance
you'll just make the problem worse.</p>

<p><strong>API Design</strong></p>

<p>Again I'll probably cause a stir with this one again but it's
another thing that is very dear to my heart. I am a strong believer
in proper API design, and if it's done <em>wrong</em> then it can
make your life hell in the future.</p>

<p>I also like abstractions. LINQ to Umbraco is an example of
that... provider model! Here at The FARM we've got a great level of
abstraction which we use, we don't pass classes around, only
interfaces, which means that your UI is dumb, really really
dumb.<br />
 There isn't any business logic contained there, and there's
nothing more complex than a method call.</p>

<p>But too often when I see an XSLT it's containing more than just
UI code. And this isn't really a fault of XSLT, but of how it's
perceived. When you look at an ASPX/ ASCX people have a different
mindset, you don't put anything really in the front-end file other
than the markup as there is a CS file associated which you think to
put the other <em>complex</em> code into.<br />
 But with an XSLT there isn't another file, so everything ends up
there.</p>

<p>Then it becomes too complex to try and achieve with XSLT *cough
variable incrementing cough* so an XSLT extension is written. And
I've seen some really scary XSLT extensions, which allow you to do
things which just make me want to cringe.</p>

<p>XSLT should only be concerned with formatting data to output
markup...</p>

<p><strong>XSLT's produce better markup</strong></p>

<p>Anyone who says that is ill-informed. If you don't think you can
write valid, XHTML markup with ASP.NET Web Forms then you're not
doing it right!</p>

<p>Control Adapters, Repeaters, List View, inline script blocks,
etc can all be used to produce what ever markup you so
desire.<br />
 And it doesn't take much effort to produce good markup with
ASP.NET. In fact, with Visual Studio 2008 it's really hard to use
the standard editor to produce crappy markup.</p>

<p>The biggest problem is ID's of elements, but you only have that
problem if the element is:</p>

<ul>
<li>Inside a naming container</li>

<li>Set to runat="server"</li>
</ul>

<p>And you should only be setting runat="server" on elements you
need server-side access to, but that's a topic for another
night.</p>

<p>&nbsp;</p>

<p><strong>Conclusion</strong></p>

<p>So this brings me to the end of another post. Hopefully it's
been enlightening and I haven't upset too many people :P</p>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[LINQ]]></category>
      <category><![CDATA[Generic .NET]]></category>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[LINQ to Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/november-2009/why-i'm-not-a-fan-of-xslt.aspx</feedburner:origLink></item>
    <item>
      <title>Fraternising with the enemy</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/ivI0C2f11Ro/fraternising-with-the-enemy.aspx</link>
      <pubDate>2009-11-02 13:33:17Z</pubDate>
      <description><![CDATA[
<p><strong><em>Disclaimer:</em></strong></p>

<p><strong><em>I am not a Sitecore developer, nor have I even used
Sitecore. I did use to work with <a
href="http://adeneys.wordpress.com/" target="_blank">Al Denyes</a>
(<a
href="http://adeneys.wordpress.com/2009/01/06/its-official-welcome-the-mvps/"
 target="_blank">the Australian Sitecore MVP</a>) and <a
href="http://cjgiddings.wordpress.com/" target="_blank">Chris
Giddings</a> (who has done a bunch of freaky stuff with
Sitecore).</em></strong></p>

<p><strong><em>This is from the experience of someone who despite
having not used Sitecore I've heard plenty of spiels about it and
worked with quite a number of other CMS's.</em></strong></p>

<p><strong><em>I'll do my best not to be bias ;)</em></strong></p>

<p>&nbsp;</p>

<p>So last Wednesday (28th October) I headed down to the 2nd
Sitecore Australia user group. Having attended the first one in
Melbourne a few months back (which didn't go so well due to it
being held in a pub where you couldn't hear anything) I was
interested to see how this went, and to see what was new in
Sitecore land.</p>

<p>Sitecore 6.2 was the release focus of the night and it has a
couple of new features I want to talk about, from the point of view
of a non-Sitecore developer.</p>

<p>&nbsp;</p>

<p><strong>Microsoft Word Editing</strong></p>

<p>Anyone who was at the UG will have seen me cringe when they
started talking about this feature, particularly when it was stated
that the MSO tags are kept.</p>

<p>From a technological standpoint I think this is a fascinating
feature, but from a web developer I think it's a very scary
feature. As <em>someone</em> said to me on the night, "It'd be
great for intranets".</p>

<p>But the feature did make me wonder as to why, if people are
preferring to work with Microsoft Word than the Sitecore editor
(which is the Telerik Rad controls I believe) does that mean the
standard editor has deficiencies?&nbsp;<br />
 I've never been a huge fan of Sitecores UI recreation of the
Windows UI, but that's another topic on its own.</p>

<p>Basically I see this as a great feature to demo, but the
practicalities of it aren't there.</p>

<p>&nbsp;</p>

<p><strong>Improvements to the Forms Module</strong></p>

<p><strong></strong>A lot of what was talked about here was over my
head as I'm not familiar with the campaign manager in Sitecore.</p>

<p>But there is a new feature that caused a bit of a stir, and that
is that the forms can be configured to capture the data <em>as a
user enters it</em>. Now I can see the goal of this, so you can
monitor drop-out rates of your form, but there's a much bigger
problem... Privacy.</p>

<p>Take this scenario - I start filling out a form, put in my
details (name, phone number, etc) and then get to the privacy
policy and decide that I don't agree with their decision to sell it
on to anyone who wants it. I decide to exit out of the form.<br />
 Little do I know is that the data was already captured. This is
rather concerning, I didn't consent to them having it, but they
still got it.<br />
 And if the company is a bit naughty they may still on-sell my
data. All without my agreeing to do so.</p>

<p>I get the point of the feature, monitoring drop-out rates and at
what point but I think you may walk into a legal mind field.<br />
 Please note though - I'm not a lawyer, but one of the other people
at the UG did put the question to a lawyer and said it is a
dangerous place to go.</p>

<p>Thankfully you can turn the auto-capturing feature off. Or host
your site in like Sweden :P</p>

<p>&nbsp;</p>

<p><strong>Drag-and-drop Media uploading</strong></p>

<p>The SharePoint implementation is a crap load better :P</p>

<p>&nbsp;</p>

<p>That's pretty much my highlights of the night (other than the
fact that I scored a bunch of free Sitecore mouse mats... Anyone
want a Sitecore mouse mat? :P). I didn't quite share in Tim's
enthusiasm&nbsp;for the LED keyboard which they are giving away,
it's not a new product Tim, and it would also be rather unpleasant
to use I think...<br />
 It also doesn't look like I'll be able to keep my 100% track
record up with attendance, since the new UG is in Brisbane next
year some time :P</p>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[Sitecore]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/november-2009/fraternising-with-the-enemy.aspx</feedburner:origLink></item>
    <item>
      <title>Working with dates and LINQ to SQL</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/VFTvTNsZqk4/working-with-dates-and-linq-to-sql.aspx</link>
      <pubDate>2009-11-01 11:17:22Z</pubDate>
      <description><![CDATA[
<p>Something I've heard developers complain about on numerous
occasion is that DateTime comparisons between SQL and .NET is a
real pain. Often you need to do a comparison of the date against
either a Min or Max value.</p>

<p>With raw .NET this is really quite easy, you can just use the
DateTime struct and grab DateTime.MinValue or
DateTime.MaxValue.</p>

<p>But if you've ever done this:</p>

<pre class="brush: csharp">
var res = from item in Collection where item.CreatedDate != DateTime.MinValue select item;
</pre>

<p>You'll get the following exception thrown:<br />
 <strong>SqlTypeException: SqlDateTime overflow. Must be between
1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.</strong></p>

<p>The problem is that DateTime.MinValue is actually
<strong>1/1/0001 12:00:00 AM</strong>.</p>

<p>So I've quite often seen hacks where a new date is being created
which represent the minimum value of the SQL server, and all kinds
of weird things, but that's all redundant.<br />
 The comparision value is built into the .NET framework.</p>

<p>All you need to use is <a
href="http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx"
 target="_blank">System.Data.SqlTypes.SqlDateTime</a> structure.
This exposes two fields, <a
href="http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.minvalue.aspx"
 target="_blank">MinValue</a> and <a
href="http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.maxvalue.aspx"
 target="_blank">MaxValue</a>. All you need to do is access the
Value property of these and pass it into your LINQ statement.<br />
 The date will be parsed correctly as a SQL valid date and you can
do your comparisons!</p>

<p>So please, stop with any silly workaround for date comparisons
with SQL and .NET :P</p>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Generic .NET]]></category>
      <category><![CDATA[LINQ to SQL]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/november-2009/working-with-dates-and-linq-to-sql.aspx</feedburner:origLink></item>
    <item>
      <title>A Developers Guide to LINQ to Umbraco - Session 6 - Outputting XML</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/X-UBXz0786w/a-developers-guide-to-linq-to-umbraco---session-6---outputting-xml.aspx</link>
      <pubDate>2009-10-24 21:30:34Z</pubDate>
      <description><![CDATA[
<p><em>This post is part of a series, for all the posts in the
series see the following table of contents:</em></p>

<ul>
<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---part-0.aspx">
Session 0 - Overview</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-1---getting-started.aspx">
Session 1 - Getting Started</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-2---working-with-linq-to-umbraco-entities.aspx">
Session 2 - Working with LINQ to Umbraco Entities</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-3---delving-into-the-umbracodatacontext.aspx">
Session 3 - Delving into the UmbracoDataContext</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-4---performance-and-caching.aspx">
Session 4 - Performance and Caching</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-5---paging-and-control-less-forms.aspx">
Session 5 - Paging and control-less forms</a></em></li>

<li><em>Session 6 - Outputting XML</em></li>
</ul>

<div><strong>Outputting XML</strong></div>

<div>In this session I'll be looking at how you can transform the
LINQ to Umbraco entities and generate an XML response, for
something such as a RSS feed.</div>

<div><em>Runtime -</em> 12:36</div>

<div><em>Download</em> -&nbsp;<a
href="/ScreencastServer.ashx?screencast=session 6.flv&amp;category=linqToUmbraco"
 target="_blank">FLV</a> (10mb),&nbsp;&nbsp; <a
href="/ScreencastServer.ashx?screencast=session 6.mov&amp;category=linqToUmbraco">
MOV</a> (76mb)</div>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[LINQ]]></category>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[LINQ to Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-6---outputting-xml.aspx</feedburner:origLink></item>
    <item>
      <title>A Developers Guide to LINQ to Umbraco - Session 5 - Paging and control-less forms</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/PDZgP_5iPFg/a-developers-guide-to-linq-to-umbraco---session-5---paging-and-control-less-forms.aspx</link>
      <pubDate>2009-10-24 21:26:52Z</pubDate>
      <description><![CDATA[
<p><em>This post is part of a series, for all the posts in the
series see the following table of contents:</em></p>

<ul>
<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---part-0.aspx">
Session 0 - Overview</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-1---getting-started.aspx">
Session 1 - Getting Started</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-2---working-with-linq-to-umbraco-entities.aspx">
Session 2 - Working with LINQ to Umbraco Entities</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-3---delving-into-the-umbracodatacontext.aspx">
Session 3 - Delving into the UmbracoDataContext</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-4---performance-and-caching.aspx">
Session 4 - Performance and Caching</a></em></li>

<li><em>Session 5 - Paging and control-less forms</em></li>

<li><em>Session 6 - Outputting XML</em></li>
</ul>

<div><strong>Paging and control-less forms</strong></div>

<div>In this session I'll be looking at how easy it is to do paging
with LINQ to Umbraco entities. Also with MVC being such a hot topic
I'll show you how you can make a form which renders LINQ to Umbraco
with no ASP.NET server controls.</div>

<div><em>Runtime -</em> 15:16</div>

<div><em>Download</em> -&nbsp;<a
href="/ScreencastServer.ashx?screencast=session 5.flv&amp;category=linqToUmbraco"
 target="_blank">FLV</a> (23mb),&nbsp; <a
href="/ScreencastServer.ashx?screencast=session 5.mov&amp;category=linqToUmbraco">
MOV</a> (117mb)</div>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[LINQ]]></category>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[LINQ to Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-5---paging-and-control-less-forms.aspx</feedburner:origLink></item>
    <item>
      <title>A Developers Guide to LINQ to Umbraco - Session 4 - Performance and Caching</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/LQbHwDZE4WQ/a-developers-guide-to-linq-to-umbraco---session-4---performance-and-caching.aspx</link>
      <pubDate>2009-10-24 21:22:46Z</pubDate>
      <description><![CDATA[
<p><em>This post is part of a series, for all the posts in the
series see the following table of contents:</em></p>

<ul>
<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---part-0.aspx">
Session 0 - Overview</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-1---getting-started.aspx">
Session 1 - Getting Started</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-2---working-with-linq-to-umbraco-entities.aspx">
Session 2 - Working with LINQ to Umbraco Entities</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-3---delving-into-the-umbracodatacontext.aspx">
Session 3 - Delving into the UmbracoDataContext</a></em></li>

<li><em>Session 4 - Performance and Caching</em></li>

<li><em>Session 5 - Paging and control-less forms</em></li>

<li><em>Session 6 - Outputting XML</em></li>
</ul>

<div><strong>Performance and Caching</strong></div>

<div>In this session I'll be looking at how to make the most of the
built-in caching of LINQ to Umbraco, ensuring your performance is
the best.</div>

<div><em>Runtime -</em> 16:39</div>

<div><em>Download</em> -&nbsp;<a
href="/ScreencastServer.ashx?screencast=session 4.flv&amp;category=linqToUmbraco"
 target="_blank">FLV</a> (23mb),&nbsp; <a
href="/ScreencastServer.ashx?screencast=session 4.mov&amp;category=linqToUmbraco">
MOV</a> (114mb)</div>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[LINQ]]></category>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[LINQ to Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-4---performance-and-caching.aspx</feedburner:origLink></item>
    <item>
      <title>A Developers Guide to LINQ to Umbraco - Session 3 - Delving into the UmbracoDataContext</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/ijr_AAW9Cio/a-developers-guide-to-linq-to-umbraco---session-3---delving-into-the-umbracodatacontext.aspx</link>
      <pubDate>2009-10-24 21:17:24Z</pubDate>
      <description><![CDATA[
<p><em>This post is part of a series, for all the posts in the
series see the following table of contents:</em></p>

<ul>
<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---part-0.aspx">
Session 0 - Overview</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-1---getting-started.aspx">
Session 1 - Getting Started</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-2---working-with-linq-to-umbraco-entities.aspx">
Session 2 - Working with LINQ to Umbraco Entities</a></em></li>

<li><em>Session 3 - Delving into the UmbracoDataContext</em></li>

<li><em>Session 4 - Performance and Caching</em></li>

<li><em>Session 5 - Paging and control-less forms</em></li>

<li><em>Session 6 - Outputting XML</em></li>
</ul>

<div><strong>Delving into the UmbracoDataContext</strong></div>

<div>In this session I'll be looking at the heart of LINQ to
Umbraco, the UmbracoDataContext. We'll look at what it's role is,
and how it can be used in extensibility.</div>

<div><em>Runtime -</em> 16:08</div>

<div><em>Download</em> -&nbsp;<a
href="/ScreencastServer.ashx?screencast=session 3.flv&amp;category=linqToUmbraco"
 target="_blank">FLV</a> (32mb),&nbsp; <a
href="/ScreencastServer.ashx?screencast=session 3.mov&amp;category=linqToUmbraco">
MOV</a> (235mb)</div>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[LINQ]]></category>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[LINQ to Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-3---delving-into-the-umbracodatacontext.aspx</feedburner:origLink></item>
    <item>
      <title>A Developers Guide to LINQ to Umbraco - Session 2 - Working with LINQ to Umbraco Entities</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/zf1djxUbbmU/a-developers-guide-to-linq-to-umbraco---session-2---working-with-linq-to-umbraco-entities.aspx</link>
      <pubDate>2009-10-24 21:12:53Z</pubDate>
      <description><![CDATA[
<p><em>This post is part of a series, for all the posts in the
series see the following table of contents:</em></p>

<ul>
<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---part-0.aspx">
Session 0 - Overview</a></em></li>

<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-1---getting-started.aspx">
Session 1 - Getting Started</a></em></li>

<li><em>Session 2 - Working with LINQ to Umbraco Entities</em></li>

<li><em>Session 3 - Delving into the UmbracoDataContext</em></li>

<li><em>Session 4 - Performance and Caching</em></li>

<li><em>Session 5 - Paging and control-less forms</em></li>

<li><em>Session 6 - Outputting XML</em></li>
</ul>

<div><strong>Working with LINQ to Umbraco Entities</strong></div>

<div>In this session I'll be looking at the code which was
generated from the first session and how we can do some basic
interactions. We'll also create our first control using LINQ to
Umbraco.</div>

<div><em>Runtime -</em> 18:54</div>

<div><em>Download</em> -&nbsp;<a
href="/ScreencastServer.ashx?screencast=session 2.flv&amp;category=linqToUmbraco"
 target="_blank">FLV</a> (37mb),&nbsp; <a
href="/ScreencastServer.ashx?screencast=session 2.mov&amp;category=linqToUmbraco">
MOV</a> (92mb)</div>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[LINQ]]></category>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[LINQ to Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-2---working-with-linq-to-umbraco-entities.aspx</feedburner:origLink></item>
    <item>
      <title>A Developers Guide to LINQ to Umbraco - Session 1 - Getting Started</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/Mu8HsSCc25s/a-developers-guide-to-linq-to-umbraco---session-1---getting-started.aspx</link>
      <pubDate>2009-10-24 21:03:56Z</pubDate>
      <description><![CDATA[
<p><em>This post is part of a series, for all the posts in the
series see the following table of contents:</em></p>

<ul>
<li><em><a
href="/blog/october-2009/a-developers-guide-to-linq-to-umbraco---part-0.aspx">
Session 0 - Overview</a></em></li>

<li><em>Session 1 - Getting Started</em></li>

<li><em>Session 2 - Working with LINQ to Umbraco Entities</em></li>

<li><em>Session 3 - Delving into the UmbracoDataContext</em></li>

<li><em>Session 4 - Performance and Caching</em></li>

<li><em>Session 5 - Paging and control-less forms</em></li>

<li><em>Session 6 - Outputting XML</em></li>
</ul>

<div><strong>Getting Started</strong></div>

<div>In this session I'll be looking at the basics of what is
required for LINQ to Umbraco.</div>

<div>We'll look at how to generate the classes and some suggestions
on how to get the best generated class names.</div>

<div><em>Runtime -</em> 06:43</div>

<div><em>Download</em> - <a
href="/ScreencastServer.ashx?screencast=session 1.flv&amp;category=linqToUmbraco"
 target="_blank">FLV</a> (14mb), <a
href="/ScreencastServer.ashx?screencast=session 1.mov&amp;category=linqToUmbraco">
MOV</a> (24mb)</div>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[LINQ]]></category>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[LINQ to Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/a-developers-guide-to-linq-to-umbraco---session-1---getting-started.aspx</feedburner:origLink></item>
    <item>
      <title>A Developers Guide to LINQ to Umbraco - part 0</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/4BoYeuBQTCg/a-developers-guide-to-linq-to-umbraco---part-0.aspx</link>
      <pubDate>2009-10-24 20:44:18Z</pubDate>
      <description><![CDATA[
<p><em>This post is part of a series, for all the posts in the
series see the following table of contents:</em></p>

<ul>
<li><em>Session 0 - Overview</em></li>

<li><em>Session 1 - Getting Started</em></li>

<li><em>Session 2 - Working with LINQ to Umbraco Entities</em></li>

<li><em>Session 3 - Delving into the UmbracoDataContext</em></li>

<li><em>Session 4 - Performance and Caching</em></li>

<li><em>Session 5 - Paging and control-less forms</em></li>

<li><em>Session 6 - Outputting XML</em></li>
</ul>

<p><strong>Overview</strong></p>

<p>Over the last month or so leading up to the Umbraco v4.1 beta
release I decided to work on a series of screencasts which are
aimed to give people a starting point when it comes to LINQ to
Umbraco.</p>

<p>I'm aware that not everyone who uses Umbraco is a developer, and
that's partially why the XSLT engine is so popular.<br />
 But I've never been a fan of XSLT and XPath, in fact I was so not
a fan I wrote a <em>better</em> API which to use :P.</p>

<p>This series documents my journey to rebuild the blogging engine
of my website on top of LINQ to Umbraco. Previously I was using the
Umbraco Interaction Layer, my previous <em>implementation</em> of
LINQ to Umbraco, but it was database reliant.<br />
 Now my website works directly off the XML cache and should also
hopefully be faster than it use to be.</p>

<p>All screencasts are available as both FLV and MOV formatted
files (I use a Mac kids, you're stuck with MOV's :P). The FLV's are
well, FLV quality, but the MOV's are much higher quality, but that
also means they are much larger in size.</p>

<p>But without further stalling I suggest you get started playing
with LINQ to Umbraco. Please ensure than any bugs/ feedback gets
logged onto <a
href="http://umbraco.codeplex.com/WorkItem/List.aspx"
target="_blank">Codeplex</a> so I can make it more awesome for the
final release ;). (Oh, FYI, I've already found a bug running LINQ
to Umbraco on a machine with Visual Studio installed, it's logged
<a
href="http://umbraco.codeplex.com/WorkItem/View.aspx?WorkItemId=25082"
 target="_blank">here</a> and I'll be working on it for the next
release)</p>
]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[LINQ]]></category>
      <category><![CDATA[Umbraco]]></category>
      <category><![CDATA[LINQ to Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/a-developers-guide-to-linq-to-umbraco---part-0.aspx</feedburner:origLink></item>
    <item>
      <title>Sorry to my commentors</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/amO2vgjdQbA/sorry-to-my-commentors.aspx</link>
      <pubDate>2009-10-20 20:04:46Z</pubDate>
      <description><![CDATA[<p>This is just a quick apology to anyone who has posted a comment on my blog in the last few months. I moved my hosting to a new provider a few months back, but I forgot to set up my smtp server information so that I was being notified of updated blog comments.</p>
<p>So all my comments have been sitting there unpublished :(.</p>
<p>I've just gone through and published all the ones I could find but in the future it shouldn't be a problem.</p>
<p>There will be a delay though until I do moderate the comments, but gotta deal with those pesky spammers some how :P</p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Random Junk]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/sorry-to-my-commentors.aspx</feedburner:origLink></item>
    <item>
      <title>Behind the scenes of the 4.1 beta release</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/D1LHjL4CvfE/behind-the-scenes-of-the-41-beta-release.aspx</link>
      <pubDate>2009-10-20 08:26:04Z</pubDate>
      <description><![CDATA[<p>Early this morning (well, my time :P) we released <a href="http://umbraco.org/blog/2009/10/19/umbraco-41-beta-1" target="_blank">Umbraco v4.1 Beta 1</a> to the masses, but I thought it would be a bit of fun to have a look behind the scenes of the release.</p>
<p>I'm going to tell you a worthy tail. There will be highs and there will be lows, but ultimately there was cause for celebration.</p>
<p>Our story begins last night 8pm AEDST (Australia Eastern Daylight-Savings Time) on Monday 19th October 2009...</p>
<p><strong>8pm</strong>&nbsp;- I have just rolled in from work &amp; an hour of fitness with a trainer. I've gone and pulled a muscle in my stomach and it's really quite painful. Niels pings me on MSN with a question that will come back to haunt me... "How long are you planning to be up?". I respond with the fact I'd like to be in bed by 12.30am. This is something that will come back to bite me.<br />I tell Niels I haven't eaten or showered, which is good cuz that gives him a chance to get the build ready.</p>
<p><strong>8.45pm</strong>&nbsp;- I'm just finishing up dinner and Niels is onto me already, we've got a problem on the build server. one of the projects wont compile. Oh well, it's not one that's used, so we just remove it from the build and continue on.</p>
<p><strong>9.20pm</strong>&nbsp;- First build is done, Niels is loving listening to so much Ole Erling, I'm chatting to him while he does the first test install.<br />Things aren't going to plan, there's a problem with the web.config. I did some changes to how we handled the web.config for everyone's development, but it looks like things didn't get migrated into the primary one properly.<br />Crap.<br />Niels fixes the web.config problem and does a new build.</p>
<p><strong>9.50pm</strong>&nbsp;- New build has been produced and I download and install. This time the installer goes off without a problem, in fact it was very smooth. I install CWS and get ready for some testing.<br />Niels is starting to sound worried though, he doesn't like the way a feature of the new tree is looking.<br />I start doing more testing and I can see the problem, the tree is having some real issues. I reluctantly pull Shannon into help fix it.<br />We also find another IE8 bug when there is a Content Picker data type on the document type.</p>
<p><strong>10.40pm</strong>&nbsp;-&nbsp;&nbsp;Niels is freaking right out, the tree is playing up since the upgrade to 0.99a, editContent.aspx doesn't work in IE8 and there's a critical bug when installing packages.<br />He wants to call it off, there's tears, and low blood sugar.<br />Niels goes off to find some food while Shan and I get cracking at fixing the bugs.</p>
<p><strong>11.30pm </strong>- I've found the cause of the editContent.aspx bug, but as soon as I fix it I get more IE8 bugs, now we're getting illegal DOM manipulation. IE8 doesn't tell me where it's happening though and because each browser treats DOM manipulation differently IE is the only one to show this problem.<br />Now I'm starting to get flustered, there's help cries flying out on Twitter, cursing and swearing around the apartment.<br />Niels seems to have calmed down though, he's found the cause of his assigned problem and is just about finished the fix.</p>
<p><strong>12.10am</strong>&nbsp;- SUCCESS! I have solved the DOM manipulation bug. I've implemented a little hack and it's all working. I'm dancing around the room and checking in code.<br />Looks like a build may make it out.<br />But then I realise that my hack wasn't going to work, I quickly abort the pending build and get cracking on a better fix which takes me &lt;5 minutes.</p>
<p><strong>12.30am</strong>&nbsp;- Shannon has fixed the tree bug, Niels has fixed his bug, I have fix my bug. FULL STEAM AHEAD! WE'RE BUILDING!</p>
<p><strong>12.40am</strong>&nbsp;- New build ready, we're all doing clean installs.<br />CWS installs without a hitch.<br />Runway installs without a hitch.<br />editContent.aspx works as it should.<br />The tree is working as it should.<br />I can't believe this, we've made it!</p>
<p><strong>1am</strong>&nbsp;- I put together a blog post announcing the release, Niels is uploading the release to Codeplex.<br />Shannon is sorting out his washing to be packed as he's about to go on holidays.</p>
<p><strong>1.20am</strong>&nbsp;- I'm exhausted, but the release is done, it's been blogged and I can finally get some sleep.<br />But we've made it, it's still Monday <em>somewhere</em>&nbsp;in the world, and the goal was a Monday 19th October release. Deadline has been reached.</p>
<p>&nbsp;</p>
<p>So there you have it folks, the story of the Umbraco 4.1 Beta release. You can't say that we're not a dedicated bunch of people, striving to bring you a release, regardless the cost :) :P</p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/behind-the-scenes-of-the-41-beta-release.aspx</feedburner:origLink></item>
    <item>
      <title>2 Click ASP.NET Web Application Deployment with MSBuild</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/4twvj3_ht5E/2-click-aspnet-web-application-deployment-with-msbuild.aspx</link>
      <pubDate>2009-10-02 12:17:39Z</pubDate>
      <description><![CDATA[<p>I've just put a new post up on the FarmCode.Org blog on how to use <a href="http://www.farmcode.org/post/2009/10/02/2-Click-ASPNET-Web-Application-Deployment-with-MSBuild.aspx" target="_blank">MSBuild for 2 click deployments</a>.</p>
<p>As a rule I try not to blog just to link somewhere else, but I really don't see the point in migrating all the content across to here as well :P.</p>
<p>I strongly recommend you check it out if you're trying to deal with automatic deployments.</p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[MSBuild]]></category>
      <category><![CDATA[Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/october-2009/2-click-aspnet-web-application-deployment-with-msbuild.aspx</feedburner:origLink></item>
    <item>
      <title>The Umbraco Membership APIs</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/oKj0dOfZDD0/the-umbraco-membership-apis.aspx</link>
      <pubDate>2009-09-28 18:57:34Z</pubDate>
      <description><![CDATA[<p>Something I've been noticing a bit around the Umbraco forums is how people are working with the Umbraco Membership system.</p>
<p>Umbraco has had Membership in it for quite a while now (I don't recall what version it came in with) but it's evolved quite a bit.</p>
<p>I worked with Membership in v3 and I wrote a wrapper on how to make it easier to interact with v3 members (see this <a href="/blog/august-2008/extending-umbraco-members.aspx" title="Extending Umbraco Members">post</a>). Members in v3 (and still the underlying API in v4) was built on the concept of Content in Umbraco. So a member was as extensible as a Document&nbsp; Type, Media Type, etc.<br />This was really neat as it made it very easy to add information to your members profile.</p>
<p>But like with any custom writen membership system it has some problems. The Session storage wasn't great (see this <a href="/blog/september-2008/umbraco-membership-trap.aspx" title="Umbraco Membership Trap">post</a>) and logging in/ logging out didn't have native API methods, there was a few things you would need to do for it to work.<br />It was also rather problematic when you wanted to integrate with ASP.NET Membership.</p>
<p>When v4 came out for Umbraco there was a change, Umbraco Membership now was fronted with the ASP.NET Membership providers. This was a big move as it then meant that it was possible to swap out the Umbraco Membership provider with something else, such as the SQL or Active Directory providers.<br />It also made for easier integration between multiple sites from a single login.&nbsp;<br />And it also brought a <em>new</em>&nbsp;API (it's not really new, it's been in ASP.NET since v2.0).</p>
<p>&nbsp;</p>
<p>So this brings us to the crux of the post, which API should you use, Members or ASP.NET Membership?&nbsp;</p>
<p>There are some good reasons for using the Umbraco API, to integrate Members in XSLT, but when using .NET there isn't really many reasons as to why you would use the Umbraco API over the top of the .NET API.</p>
<p>But why is that? Well first off if you're going to do the ASP.NET Membership it's much easier to port your knowledge to a non-Umbraco build (and self education is a great idea!).</p>
<p>More importantly the ASP.NET Membership API is what is going to be the future of Umbraco. In 4.1 there are some more methods within the Umbraco Membership API which are flagged as obsolete, pointing you in the direction of the appropriate ASP.NET Membership.</p>
<p>Many of common Membership operations can be found on the <a href="http://our.umbraco.org/wiki/how-tos/membership-providers" target="_blank">Umbraco wiki</a> so that you can get started.&nbsp;<br />So if you haven't already looked into it, get cracking with the ASP.NET Membership operations!&nbsp;</p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/september-2009/the-umbraco-membership-apis.aspx</feedburner:origLink></item>
    <item>
      <title>Snow Leopard isn't exciting me</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/eVTIuWwI3tg/snow-leopard-isn't-exciting-me.aspx</link>
      <pubDate>2009-09-21 22:44:37Z</pubDate>
      <description><![CDATA[<p>I recently got round to buying myself a copy of Snow Leopard (OS X 10.6) and upgrading my trusty MacBook Pro.<br />The trusty MBP is about 2 years old now but it's still pretty well spec'ed, it's got 4gb ram, a 2.2ghz processor, all the stuff I need to run VMWare Fusion and everything else that I require.</p>
<p>I remember when Leopard was released, which is also almost two years ago. It was a few months after I'd bought this machine, I'd run Tiger on it for that time and remember the first time I saw all the features of Leopard I was blown away, things like:</p>
<ul>
<li>Spaces</li>
<li>Time Machine</li>
<li>Coverflow</li>
</ul>
<p>All spring to mind as stuff that was new in Leopard. It was hot!</p>
<p>But Snow Leopard feels so meh. There's no <em>flashy</em>&nbsp;new features, there's nothing ground breakingly revolutionary within any of the UI design, in fact I'm not really sure what changed.</p>
<p>I did notice I some how recovered about 20gb of hard drive space.</p>
<p>I have noticed that Expose seems a bit smoother and there's a pretty blue glow effect around the windows.</p>
<p>I have noticed that it doesn't completely suck to try and watch a video in Finder's Coverflow.</p>
<p>I have noticed that Quicksilver is playing up and that Growl is having some issues (but true, they are external products to the OS, but they are pretty much mandatory installs!).</p>
<p>But really, it feels like a service pack.</p>
<p>&nbsp;</p>
<p>Many people are saying that Windows 7 is nothing more than a service pack for Vista, but at least it has some new features. Sure they are features that other OSes have had for years like Expose and stuff but it's a lot better than incrementing a number and shipping out a new package.</p>
<p>Oh, and the Snow Leopard packaging is crap, seriously did they just do a google image search for a Snow Leopard and then photoshop in some text?!</p>
<p>Majorly underwhelmed Apple.<br />Time to start investing that iPhone money into OS R&amp;D.&nbsp;</p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Mac]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/september-2009/snow-leopard-isn't-exciting-me.aspx</feedburner:origLink></item>
    <item>
      <title>Exception thrown when using XSLT extensions</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/6OmqDFtWvFo/exception-thrown-when-using-xslt-extensions.aspx</link>
      <pubDate>2009-09-21 19:45:56Z</pubDate>
      <description><![CDATA[<p>This is a question I was asked today but it's also something which I have come across myself when creating XSLT extensions.</p>
<p>Have you ever had this exception thrown?</p>
<p><strong>System.MissingMethodException</strong>: No parameterless constructor defined for this object.</p>
<p>at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean&amp; canBeCached, RuntimeMethodHandle&amp; ctor, Boolean&amp; bNeedSecurityCheck)<br />at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)<br />at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)<br />at System.Activator.CreateInstance(Type type, Boolean nonPublic)<br />at umbraco.macro.GetXsltExtensions()<br />at umbraco.macro.AddMacroXsltExtensions()<br />at umbraco.presentation.webservices.codeEditorSave.SaveXslt(String fileName, String oldName, String fileContents, Boolean ignoreDebugging)</p>
<p>(The complete stack trace may be different, it's the thrown exception that should be of note)&nbsp;</p>
<p>So what causes this? Well Umbraco loads its XSLT extensions (from xsltExtensions.config) using Reflection, and it looks for a <em>public&nbsp;</em><em>default constructor</em>, which is the constructor which takes no arguments.</p>
<p>Basically if you're writing a constructor for your XSLT extensions class you <strong>must</strong>&nbsp;make sure you have a default one too, so your extensions class must look like this at lease:</p>
<pre class="brush: csharp">public class MyXsltExtensions { 
  public MyXsltExtensions() { }
  ...
}</pre>
<p>If you're not defining your own constructor though this isn't a problem.</p>
<p>I only came across this bug when I was trying to define the default constructor as <strong>private</strong>, attempting to do a very tight API design (not exposing constructors where I didn't want them).<br />Whoops!&nbsp;</p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/september-2009/exception-thrown-when-using-xslt-extensions.aspx</feedburner:origLink></item>
    <item>
      <title>Handy extension method for null-coalesing</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/TeALU_679sQ/handy-extension-method-for-null-coalesing.aspx</link>
      <pubDate>2009-09-16 18:34:07Z</pubDate>
      <description><![CDATA[<p>Today a colleague asked me a question:</p>
<p>"How do you do a null-coalesce operator which will return a property of an object when not null?"</p>
<p>If you're not familiar with the null coalesce operator it's the <a href="http://msdn.microsoft.com/en-us/library/ms173224.aspx" target="_blank">??</a> operator and it can be used for inline expressions when the test object is null.</p>
<p>You use it like so:</p>
<pre class="brush: csharp">string test = null;
Console.WriteLine(test ?? "The string was null");</pre>
<p>So it either returns itself or it returns your value, but what if you want to return a property of the object not itself, well you can't use the ?? operator.</p>
<p>But never fear, extension methods are here! I wrote this quick little one for him:</p>
<pre class="brush: csharp">public static TResult NullCoalese&lt;TTarget, TResult&gt;(this TTarget o, Func&lt;TTarget, TResult&gt; func, TResult whenNull) {
  return o == null ? whenNull : func(o);
}
</pre>
<p>Stick this in a namespace, maybe restrict the type of TTarget (or leave it as anything in .NET land, what ever takes your fancy, but if you don't restrict it maybe don't leave it in a common namespace!).</p>
<p>Enjoy :).</p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Generic .NET]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/september-2009/handy-extension-method-for-null-coalesing.aspx</feedburner:origLink></item>
    <item>
      <title>Be careful naming images for Umbraco media</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/pBG6g3RnCSw/be-careful-naming-images-for-umbraco-media.aspx</link>
      <pubDate>2009-09-03 17:10:33Z</pubDate>
      <description><![CDATA[<p>Well it's my first week at <a href="http://www.thefarmdigital.com.au/" target="_blank">The FARM</a> (who is now an <a href="http://umbraco.org/solution-providers/find-solution-providers/the-farm" target="_blank">Umbraco Solution Provider</a>, we're the first in Australia!) I got to look at a bug which has been floating around for a while and no one could consistently replicate it or work out the problem.</p>
<p>To summarize the bug, some of the images which the client was uploading into the Umbraco Media section, then linking into the Umbraco WYSIWYG editor were being shown as broken images.<br />But only some images this was happening for, and we weren't quite sure which images were causing the problem and when we'd test with images they'd be fine.</p>
<p>So we had the client show us how to do it, in front of us and then we could dig into it a bit more, and while doing so I found something unexpected.<br />The problem was being caused by the image havine a file name like: <strong>MyImage_100x50.png</strong>, but the WYSIWYG editor would show <strong>MyImage.png</strong> as the URL. This obviously isn't right, so something was changing the image.</p>
<p>While digging into the TinyMCE code I found out that when it displays images it does a check for the image width &amp; height in the image name, and removes it.</p>
<p>What... the... hell?! I'm looking at this code and I'm confused as anything about what's going on, I mean, why is it re-writing my image URL?<br />Oddly enough though, the image worked correctly on the published site so it was even more confusing!</p>
<p>After a quick email to the Umbraco core team I got a response from Niels stating that this code <em>is</em> meant to be there, and doing exactly what it was doing.<br />It turns out that when you go about resizing an image within TinyMCE itself Umbraco will then postfix the new dimensions into the URL in <strong>Width</strong>x<strong>Height. </strong>But since this isn't the <em>real</em> image URL it has to later strip it out.</p>
<p><strong>So remember kids, don't put the image dimensions into the filename in Umbraco!</strong></p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/september-2009/be-careful-naming-images-for-umbraco-media.aspx</feedburner:origLink></item>
    <item>
      <title>Umbraco 4.1 Alpha release</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/Naw6_H21t_8/umbraco-41-alpha-release.aspx</link>
      <pubDate>2009-08-26 18:34:15Z</pubDate>
      <description><![CDATA[<p>If you're not following Niels on Twitter you may have missed that Umbraco 4.1 Alpha was released on the 17th of August, which you can download <a href="http://umbraco.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=21100#DownloadId=79495" target="_blank">here</a>.</p>
<p>Keep in mind that this is just an <strong>Alpha</strong>&nbsp;release, so there's quite possibly bugs. What we want is people to test this, and log bugs. If you do find a bug please log it on Codeplex <a href="http://umbraco.codeplex.com/WorkItem/Create.aspx" target="_blank">here</a>&nbsp;(make sure you select 4.1 Alpha as the release too).</p>
<p>If you have any generalized feedback or things you'd like looked at which are not really bugs drop us a line on the forum, <a href="http://our.umbraco.org/forum/core/41-feedback" target="_blank">here</a>.</p>
<p>&nbsp;</p>
<p>But what's new in the 4.1 alpha? Well here's the list of new features and changes:</p>
<ul>
<li>Upgrade of the project to require .NET 3.5 SP1</li>
<li>TinyMCE spellchecker using Google as the spelling source</li>
<li>New backend tree which uses jTree and maintains state between applications</li>
<li>LINQ to Umbraco</li>
<li>Client Dependancy framework (see:&nbsp;<a href="http://clientdependency.codeplex.com/" target="_blank">http://clientdependency.codeplex.com/</a>)</li>
<li>Reduced size of Umbraco itself (there's quite a number of removed files, I'll post that info at the bottom)</li>
<li>Extended UmbracContext, including an UmbracoRequest, UmbracoResponse and UmbracoServer</li>
<li>Document.BeforeSave event fires... BEFORE SAVING :O</li>
<li>New manner of accessing Document properties:
<ul>
<li>var prop = myDoc["property_alias"];</li>
</ul>
</li>
<li>Ability to delay saving of document properties until Save is called (using the ctor Document(bool OptimizedMode, int id))</li>
<li>When using the packager and importing Macros or Stylesheets they are updated when aliases match, not just created</li>
</ul>
<p>That's all the features I can think of off the top of my head, if I've missed anything let me know and I'll update the list.</p>
<p>&nbsp;</p>
<p>As I mentioned in the list there's a stack of removed files which we'd deemed were no longer being using within Umbraco or by the community. Shannon is in charge of that one, and all the removed components are being migrated into the project <strong>umbraco.legacy</strong>, so if you find a missing component you may need that.</p>
<p>But the list of what are quite likely to be breaking changed are:</p>
<ul>
<li>DataType 'editor' was removed (editor.cs)</li>
<li>WysiwygDataType was removed</li>
<li>CheckBoxTree.cs removed</li>
<li>windowCloser.cs removed</li>
</ul>
<p>&nbsp;</p>
<p>There's a text file on codeplex in the 4.1 branch which has all the changes listed which Shannon is undertaking.</p>
<p><strong>Happy testing :D</strong></p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/august-2009/umbraco-41-alpha-release.aspx</feedburner:origLink></item>
    <item>
      <title>AUSPAC Webinar - What you missed at CG09 - a screencast</title>
      <link>http://feedproxy.google.com/~r/LinqToAaronPowell/~3/ZcPregur4bM/auspac-webinar---what-you-missed-at-cg09---a-screencast.aspx</link>
      <pubDate>2009-08-26 18:24:53Z</pubDate>
      <description><![CDATA[<p>I know it's a bit late, but I <strong>finally</strong>&nbsp;can announce that I did a screencast of my part of the Webinar from July (minutes can be found here:&nbsp;<a href="http://our.umbraco.org/wiki/user-groups/australia-and-new-zealand/joint-sessions/what-you-missed-from-codegarden-09---minutes" target="_blank">http://our.umbraco.org/wiki/user-groups/australia-and-new-zealand/joint-sessions/what-you-missed-from-codegarden-09---minutes</a>).</p>
<p>You can find the screencast here:&nbsp;<a href="/screencasts/WhatYouMissedFromCG09.mov" target="_blank">/screencasts/WhatYouMissedFromCG09.mov</a></p>
<p>Apologies for the delay with it, but as I mentioned in my previous post I have had a busy month and part of that involved a change in my hosting, and I didn't want people trying to view the screencast only to have it go offline.</p>
<p>Now you just need to bug <a href="http://twitter.com/Shazwazza/" target="_blank">Shannon</a> and <a href="http://twitter.com/pgregorynz" target="_blank">Peter</a> for their parts :P</p>]]></description>
      <author>Aaron Powell</author>
      <category><![CDATA[Umbraco]]></category>
    <feedburner:origLink>http://www.aaron-powell.com/blog/august-2009/auspac-webinar---what-you-missed-at-cg09---a-screencast.aspx</feedburner:origLink></item>
  </channel>
</rss>
