<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Elegant Code</title>
	<atom:link href="http://elegantcode.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com</link>
	<description></description>
	<lastBuildDate>Thu, 02 Sep 2010 15:07:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Silverlight 4 Service Release 4.0.50826.0</title>
		<link>http://elegantcode.com/2010/09/02/silverlight-4-service-release-4-0-50826-0/</link>
		<comments>http://elegantcode.com/2010/09/02/silverlight-4-service-release-4-0-50826-0/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 15:07:03 +0000</pubDate>
		<dc:creator>Brian Lagunas</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/09/02/silverlight-4-service-release-4-0-50826-0/</guid>
		<description><![CDATA[In case you haven’t heard yet, Microsoft released a new update for Silverlight 4 yesterday, along with a new SDK.&#160; You can check out the details at KB2164913.
The stuff I was interested in:

Add New Row for the DataGrid 
Improved application startup performance 
Mouse wheel support for out-of-browser&#160; applications on the Mac 
Media bug fixes 
MouseCapture [...]]]></description>
			<content:encoded><![CDATA[<p>In case you haven’t heard yet, Microsoft released a new update for Silverlight 4 yesterday, along with a new SDK.&#160; You can check out the details at <a href="http://support.microsoft.com/kb/2164913" target="_blank">KB2164913</a>.</p>
<p>The stuff I was interested in:</p>
<ul>
<li>Add New Row for the DataGrid </li>
<li>Improved application startup performance </li>
<li>Mouse wheel support for out-of-browser&#160; applications on the Mac </li>
<li>Media bug fixes </li>
<li>MouseCapture memory leak is fixed </li>
<li>Inline DataTemplate memory leak fixed. </li>
</ul>
<p>Developers go get the tools:</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=188039" target="_blank">Windows developer runtime</a> </li>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=188040" target="_blank">Mac developer runtime</a> </li>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=188043" target="_blank">Silverlight 4.0.50826.0</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/09/02/silverlight-4-service-release-4-0-50826-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft doesn&#8217;t create bad developers, developers do</title>
		<link>http://elegantcode.com/2010/09/01/microsoft-doesnt-create-bad-developers-developers-do/</link>
		<comments>http://elegantcode.com/2010/09/01/microsoft-doesnt-create-bad-developers-developers-do/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 10:47:16 +0000</pubDate>
		<dc:creator>Andreas Håkansson</dc:creator>
				<category><![CDATA[Craftsmanship]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/09/01/microsoft-doesnt-create-bad-developers-developers-do/</guid>
		<description><![CDATA[Have you ever stopped to think about the industry you have choose to work in (I’m bluntly assuming that if you are reading this you are working in the software industry in some way)? I would call it one of the most complex industries in the world. Think about it. We are working in an [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever stopped to think about the industry you have choose to work in (I’m bluntly assuming that if you are reading this you are working in the software industry in some way)? I would call it one of the most complex industries in the world. Think about it. We are working in an industry that is evolving at an incredible pace, contains an incalculable number of technologies, frameworks, best practices and constantly redefines the definition of how things should be done in the best possibly way. It’s the industry that makes the rest of the world tick. Daunting really, if you think about it.</p>
<p>A while back I read a couple of posts by <a href="http://www.gilzilberfeld.com/" target="_blank">Gil Zilberfeld</a> (<a title="Read Gil's post on Why Microsoft makes bad programmers" href="http://www.gilzilberfeld.com/2010/07/why-microsoft-makes-bad-programmers.html" target="_blank">here</a> and <a title="Read Gil's post on CSI: Microsoft" href="http://www.gilzilberfeld.com/2010/08/csi-microsoft.html" target="_blank">here</a>) where Gil talks about the responsibility that vendors such as Microsoft plays in the role of securing the quality of the work that is produced in our industry. While I think I see the points  Gil is trying to make, I think he misses the beat a bit and I have a hard time agreeing with the conclusions he draws.</p>
<p>The way I see it there are two types of developers; those that are just in it to pay the bills and those that consider themselves as craftsmen. If you consider yourself a craftsman then you should already be aware that you are responsible for your own faith and actions in this industry. But, if you are just in it to pay the bills then you are probably also looking to do so by doing the least amount of work and that includes looking for information on how to solve a particular problem or how to apply a technology onto your stack.</p>
<p>So if you are one of the developers that are only looking towards Microsoft (or the relevant company for the technology stack you are working on) is it their fault if you implement something in a way that could be considered bad? Of course not! Sure there are a lot of outdated and down right poor samples at the Microsoft (or relevant company) website and their idea on how certain things should be solved are bound to differ from others (and that’s definitely not to say that there isn’t good contents, there are a ton of it). However, if you rely on a single source of information, you are always going to get an opinionated view. Take my word on it (right?).</p>
<p>Doctors reads medical journals, publishes research papers, attend conferences, network with colleagues and make sure they stay up to date with the latest in their field. I’m pretty sure you are happy that they spend all of this time to make sure they can provide the best possible care and treatment when someone are in need of their services. I know I am.</p>
<p>Just as with any other profession, developers are responsible for their own education, for honing their skills in the craft that they have chosen to practice. In order to keep up in an industry that evolves at the speed of light you need to invest in yourself. The code you write today should be some of the best you have ever written, while a year later you should be considerably less excited about its quality. It’s a sign of growth. That you’ve continued to move forward as a craftsman, that you skills have been honed and broadened during the past year.</p>
<p>So what about the tools? Do we really rely on them too much to get the work done? I would say, definitely not! But again you have to specify just exactly what you are talking about when talking about tooling. If you rely on visual designers, drag and drop, wizards and the likes to to the majority of your work, then yes you are probably relying too much on your tools. Odds are that you will have a hard time to get anything outside of standard behavior to run and there will be pain points when you need to debug.</p>
<p>However you would do yourself (and your employer) a huge disservice if you did not make it your goal to know the tools in your toolbox as good as possible. What’s wrong with knowing how to use the debugger, the IDE and tools like ReSharper as good as possible? Used correctly they will have a huge impact on productivity. Make sure you know the finer details of the tools and make them work for your and not the other way around. Yes, sometimes tools do get in the way of the goal, even slow you down, and when that is the case, don’t use the tools! Tools are there to help you when you need them, not to act as a crutch you always have to lean on so you don’t fall on your ass.</p>
<p>Well there you have my thoughts on the subject. It’s always up to the developer, not the companies. Always.</p>
<p>I am also around on twitter <a title="Visit my twitter profile" href="http://twitter.com/thecodejunkie" target="_blank">@thecodejunkie</a> in case you need one more person to follow</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/09/01/microsoft-doesnt-create-bad-developers-developers-do/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pluralcast 23 : Visual Studio LightSwitch with Jay Schmelzer</title>
		<link>http://elegantcode.com/2010/08/30/visual-studio-lightswitch/</link>
		<comments>http://elegantcode.com/2010/08/30/visual-studio-lightswitch/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 17:04:25 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/08/30/visual-studio-lightswitch/</guid>
		<description><![CDATA[&#160; Listen to this episode! [41:23]
Have you been hearing the chatter about Visual Studio LightSwitch? It is a new technology from Microsoft targeted at quickly building line of business apps. And for a bit more sweetness, it builds tiered Silverlight apps for us! LightSwitch is currently in Beta 1, but seems destined for being it’s [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="PlayIcon" border="0" alt="PlayIcon" src="http://elegantcode.com/wp-content/uploads/2010/08/PlayIcon3.png" width="24" height="24" />&#160; <b><a href="http://pluralsight-free.s3.amazonaws.com/pluralcast/pc_023_lightswitch.mp3">Listen to this episode</a></b><b>!</b> [41:23]</p>
<p>Have you been hearing the chatter about Visual Studio LightSwitch? It is a new technology from Microsoft targeted at quickly building line of business apps. And for a bit more sweetness, it builds tiered Silverlight apps for us! LightSwitch is currently in Beta 1, but seems destined for being it’s own version of Visual Studio.</p>
<p>In this discussion with Jay Schmelzer, we go a bit beyond the typical explanation of LightSwitch and discuss how it actually works under the covers. As Jay helps us understand, we can expect actual productivity gains using this technology and well designed code along the way. My impressions of LightSwitch after this discussion are fairly positive. I can definitely see myself using the technology on my next quickie forms-over-data application.</p>
<h2>Jay Schmelzer</h2>
<p><img style="border-right-width: 0px; margin: 5px 5px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="thumb-schmelzer" border="0" alt="thumb-schmelzer" align="right" src="http://elegantcode.com/wp-content/uploads/2010/08/thumbschmelzer.jpg" width="75" height="131" />Jay Schmelzer is a Group Program Manager on the Visual Studio Team at Microsoft.&#160; Jay and his team are responsible for the Visual Studio design-time tools and runtime components used to build line of business applications. That includes the Visual Studio support for building Microsoft Office, SharePoint and Windows Azure solutions, Visual Studio LightSwitch, Visual Studio&#8217;s data binding and data consumption experiences, as well as the application programmability and extensibility available in Visual Studio Tools for Applications.&#160; Prior to joining Microsoft, Jay was a partner with a leading consulting firm and specialized in the design and development of enterprise applications.&#160; Jay has authored several articles and books on application development and is a frequent speaker at application development conferences.</p>
<p><strong>Show Links</strong></p>
<ul>
<li><a href="http://www.microsoft.com/visualstudio/en-us/lightswitch">Visual Studio LightSwitch</a> </li>
<li><a href="http://msdn.microsoft.com/en-us/lightswitch/default.aspx">Visual Studio LightSwitch Developer Center</a> </li>
<li><a href="http://blogs.msdn.com/b/lightswitch/">Team Blog</a> </li>
<li><a href="http://social.msdn.microsoft.com/Forums/en-us/category/vslightswitch">Forums on MSDN</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/08/30/visual-studio-lightswitch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://pluralsight-free.s3.amazonaws.com/pluralcast/pc_023_lightswitch.mp3" length="39902825" type="audio/mpeg" />
		</item>
		<item>
		<title>File uploads and MVC Controllers</title>
		<link>http://elegantcode.com/2010/08/27/file-uploads-and-mvc-controllers/</link>
		<comments>http://elegantcode.com/2010/08/27/file-uploads-and-mvc-controllers/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 16:08:12 +0000</pubDate>
		<dc:creator>Jason Grundy</dc:creator>
				<category><![CDATA[Asp.Net MVC]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/08/27/file-uploads-and-mvc-controllers/</guid>
		<description><![CDATA[Last week I had to implement some functionality to support uploading images to an MVC 2 application and then subsequently display them. Naturally there are a mountain of blog posts on this topic but I was unable to find anything comprehensive that covered everything that I needed on both the client and server side. What [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I had to implement some functionality to support uploading images to an MVC 2 application and then subsequently display them. Naturally there are a mountain of blog posts on this topic but I was unable to find anything comprehensive that covered everything that I needed on both the client and server side. What follows is my attempt to fill that hole.</p>
<p>My constraints were:</p>
<ol>
<li>I did not have an HTML form (the application I was working with is very “AJAX heavy”).</li>
<li>I needed to pass parameters in addition to the file (the ID of the entity that I want to associate the file with).</li>
</ol>
<p>I used the <a href="http://lagoscript.org/jquery/upload?locale=en">jQuery.upload plugin</a> too assist me with both of these. Obviously that means I am also using jQuery.</p>
<p>Let’s look at the code. Here’s the Content from my View:</p>
<div class="csharpcode">
<pre class="alt">Select File to Upload: <span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">id</span><span class="kwrd">="file"</span> <span class="attr">name</span><span class="kwrd">="file"</span> <span class="attr">type</span><span class="kwrd">="file"</span> <span class="kwrd">/&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">img</span> <span class="attr">id</span><span class="kwrd">="fileView"</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"></pre>
<pre><span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">    $(document).ready(<span class="kwrd">function</span> () {</pre>
<pre>        $(<span class="str">'#file'</span>).change(<span class="kwrd">function</span> () {</pre>
<pre class="alt">            <span class="kwrd">var</span> data = { ID: <span class="str">"b53dd6b4-f24c-4450-bf6a-246e5835a125"</span> };</pre>
<pre>            $(<span class="kwrd">this</span>).upload(</pre>
<pre class="alt">                <span class="str">"FileUpload/AttachFileToEntity"</span>,</pre>
<pre>                data,</pre>
<pre class="alt">                <span class="kwrd">function</span> () {</pre>
<pre>                    $(<span class="str">"#fileView"</span>).attr(<span class="str">"src"</span>, <span class="str">"FileUpload/GetFileDataFromEntity/"</span> + data.ID);</pre>
<pre class="alt">                }</pre>
<pre>            );</pre>
<pre class="alt">        });</pre>
<pre>    });</pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span></pre>
</div>
<p><!-- .csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->I am simply attaching an change event handler the the &lt;input type=”file” /&gt; control. The event handler does two things:</p>
<ol>
<li>Uploads the selected file</li>
<li>Displays it. I am assuming that you are uploading an image (but not verifying this)</li>
</ol>
<p>Note that the name attribute of the input control must be set and it must match the name of the HttpPostedFileBase parameter in the AttachFileToEntity Controller Action. Speaking of the Controller here it is:</p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">public</span> <span class="kwrd">class</span> FileUploadController : Controller</pre>
<pre>{</pre>
<pre class="alt">    <span class="kwrd">private</span> <span class="kwrd">readonly</span> EntityRepository _entityRepository = <span class="kwrd">new</span> EntityRepository();</pre>
<pre></pre>
<pre class="alt">    <span class="kwrd">public</span> ActionResult Get()</pre>
<pre>    {</pre>
<pre class="alt">        <span class="kwrd">return</span> View();</pre>
<pre>    }</pre>
<pre class="alt"></pre>
<pre>    <span class="kwrd">public</span> ActionResult AttachFileToEntity(Guid ID, HttpPostedFileBase file)</pre>
<pre class="alt">    {</pre>
<pre>        var entity = _entityRepository.Get(ID);</pre>
<pre class="alt"></pre>
<pre>        entity.FileData = GetFileData(file);</pre>
<pre class="alt"></pre>
<pre>        <span class="kwrd">return</span> Content(<span class="str">"File saved"</span>);</pre>
<pre class="alt">    }</pre>
<pre></pre>
<pre class="alt">    <span class="kwrd">private</span> <span class="kwrd">byte</span>[] GetFileData(HttpPostedFileBase file)</pre>
<pre>    {</pre>
<pre class="alt">        var length = file.ContentLength;</pre>
<pre>        var fileContent = <span class="kwrd">new</span> <span class="kwrd">byte</span>[length];</pre>
<pre class="alt"></pre>
<pre>        file.InputStream.Read(fileContent, 0, length);</pre>
<pre class="alt"></pre>
<pre>        <span class="kwrd">return</span> fileContent;</pre>
<pre class="alt">    }</pre>
<pre></pre>
<pre class="alt">    <span class="kwrd">public</span> FileResult GetFileDataFromEntity(Guid ID)</pre>
<pre>    {</pre>
<pre class="alt">        <span class="kwrd">return</span> File(_entityRepository.Get(ID).FileData, <span class="str">"image"</span>);</pre>
<pre>    }</pre>
<pre class="alt">}</pre>
</div>
<p><!-- .csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->The imaginatively named Entity could not be simpler:</p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">public</span> <span class="kwrd">class</span> Entity</pre>
<pre>{</pre>
<pre class="alt">    <span class="kwrd">public</span> Guid ID { get; set; }</pre>
<pre></pre>
<pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">byte</span>[] FileData { get; set; }</pre>
<pre>}</pre>
</div>
<p><!-- .csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->In a production scenario you are using probably using an O/RM such as NHibernate. In this case you will want to deviate from what I have above and store the uploaded file in a different entity. This is to avoid having to load the binary data for the file each time you access the entity. Note that NHibernate 3 supports (to a limited degree) <a href="http://ayende.com/Blog/archive/2010/01/27/nhibernate-new-feature-lazy-properties.aspx">lazy loading properties</a>. However even if you are utilizing this feature you still want to make sure that the binary data is stored in a different table in the underlying RDBMS so that any full table scans (for example if you are performing some type of aggregation) don’t end up reading mountains of irrelevant data.</p>
<p>The one thing that you are missing is the Repository. Rather than introduce the complexity of data access I am simply using a static Dictionary to store the data:</p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">public</span> <span class="kwrd">class</span> EntityRepository</pre>
<pre>{</pre>
<pre class="alt">    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">readonly</span> IDictionary&lt;Guid, Entity&gt; _entities = <span class="kwrd">new</span> Dictionary&lt;Guid, Entity&gt;</pre>
<pre>    {</pre>
<pre class="alt">        { <span class="kwrd">new</span> Guid(<span class="str">"b53dd6b4-f24c-4450-bf6a-246e5835a125"</span>), <span class="kwrd">new</span> Entity { ID = <span class="kwrd">new</span> Guid(<span class="str">"b53dd6b4-f24c-4450-bf6a-246e5835a125"</span>) }}</pre>
<pre>    };</pre>
<pre class="alt"></pre>
<pre>    <span class="kwrd">public</span> Entity Get(Guid ID)</pre>
<pre class="alt">    {</pre>
<pre>        <span class="kwrd">return</span> _entities[ID];</pre>
<pre class="alt">    }</pre>
<pre></pre>
<pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">void</span> Save(Entity entity)</pre>
<pre>    {</pre>
<pre class="alt">        <span class="kwrd">if</span> (entity.ID == Guid.Empty) entity.ID = Guid.NewGuid();</pre>
<pre></pre>
<pre class="alt">        <span class="kwrd">if</span> (_entities.ContainsKey(entity.ID)) _entities[entity.ID] = entity;</pre>
<pre>        <span class="kwrd">else</span> _entities.Add(entity.ID, entity);</pre>
<pre class="alt">    }</pre>
<pre>}</pre>
<pre></pre>
</div>
<p>That’s everything you need. Hope that you find this useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/08/27/file-uploads-and-mvc-controllers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Book Review: Facts and Fallacies of Software Engineering</title>
		<link>http://elegantcode.com/2010/08/23/book-review-facts-and-fallacies-of-software-engineering/</link>
		<comments>http://elegantcode.com/2010/08/23/book-review-facts-and-fallacies-of-software-engineering/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 10:30:02 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/08/23/book-review-facts-and-fallacies-of-software-engineering/</guid>
		<description><![CDATA[
Having this book on my shelf for quite some time now, I finally decided to to make my way through reading Facts and Fallacies of Software Engineering written by Robert L. Glass. As the title already implies, this well-established author lays down 55 facts and 10 fallacies about software engineering based on his half a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://elegantcode.com/wp-content/uploads/2010/08/image3.png"><img style="margin: 0px 10px 0px 0px; display: inline; border-width: 0px;" title="image" src="http://elegantcode.com/wp-content/uploads/2010/08/image_thumb3.png" border="0" alt="image" width="195" height="244" align="left" /></a></p>
<p>Having this book on my shelf for quite some time now, I finally decided to to make my way through reading <a href="http://www.amazon.com/exec/obidos/ASIN/0321117425/elegantcode-20">Facts and Fallacies of Software Engineering</a> written by <a href="http://www.robertlglass.com/">Robert L. Glass</a>. As the title already implies, this well-established author lays down 55 facts and 10 fallacies about software engineering based on his half a century experience in the field.</p>
<p>The facts are divided in four categories: management, lifecycle, quality and research. The fallacies are split into three categories: management, lifecycle and education. Each of these categories have their own more specific sub-categories in which these facts and fallacies are classified. This way its easy to pickup the content about a particular topic of choice. Although I read the book from cover to cover, it isn’t required to do so. All facts and fallacies can be read on their own but occasionally the author refers to the discussion of other facts/fallacies in the book.</p>
<p>All facts and fallacies are laid down using the following structure:</p>
<ul>
<li>The fact/fallacy itself is presented and discussed.</li>
<li>After which the controversies about a particular fact/fallacy are presented.</li>
<li>Finally, a list of books and articles are enumerated that were a source of information regarding the fact/fallacy. Some of these sources are ancient, some are more recent.</li>
</ul>
<ul>Here’s the list of facts:</ul>
<p><strong>People</strong></p>
<ol>
<li>The most important factor in software work is the quality of the programmers.</li>
<li>The best programmers are up to 28 times better than the worst programmers.</li>
<li>Adding people to a late project makes it later.</li>
<li>The working environment has a profound impact on productivity and quality.</li>
<p><strong></strong><strong></strong><strong></strong><strong>Tools and Techniques</strong></p>
<li>Hype (about tools and technology) is a plague on the house of software.</li>
<li>New tools and techniques cause an initial <em>loss</em> of productivity / quality.</li>
<li>Software developers talk a lot about tools, but seldom use them.</li>
<p><strong></strong><strong></strong><strong>Estimation</strong></p>
<li>One of the two most common causes of runaway projects is poor estimation.</li>
<li>Software estimation usually occurs at the wrong time.</li>
<li>Software estimation is usually done by the wrong people.</li>
<li>Software estimates are rarely corrected as the project proceeds.</li>
<li>It is not surprising that software estimates are bad. But we live and die by them anyway!</li>
<li>There is a disconnect between software management and their programmers.</li>
<li>The answer to a feasibility study is almost always &#8220;yes&#8221;.</li>
<p><strong></strong><strong>Reuse</strong></p>
<li>Reuse-in-the-small is a solved problem.</li>
<li>Reuse-in-the-large remains a mostly unsolved problem.</li>
<li>Reuse-in-the-large works best in families of related systems.</li>
<li>Reusable components are three times as hard to build and should be tried out in three different settings.</li>
<li>Modification of reused code is particularly error-prone.</li>
<li>Design pattern reuse is one solution to the problems of code reuse.</li>
<p><strong>Complexity</strong></p>
<li>For every 25 percent increase in problem complexity, there is a 100 percent increase in solution complexity.</li>
<li>Eighty percent of software work is intellectual. A fair amount of it is creative. Little of it is clerical.</li>
<p><strong>Requirements</strong></p>
<li>One of the two most common causes of runaway projects is unstable requirements.</li>
<li>Requirements errors are the most expensive to fix during production.</li>
<li>Missing requirements are the hardest requirements errors to correct.</li>
<p><strong></strong><strong>Design</strong></p>
<li>Explicit requirements &#8216;explode&#8217; as implicit requirements for a solution evolve.</li>
<li>There is seldom one best design solution to a software problem.</li>
<li>Design is a complex, iterative process. Initial design solutions are usually wrong and certainly not optimal.</li>
<p><strong></strong><strong>Coding</strong></p>
<li>Designer &#8216;primitives&#8217; rarely match programmer &#8216;primitives&#8217;.</li>
<li>COBOL is a very bad language, but all the others are so much worse.</li>
<p><strong></strong><strong>Error removal</strong></p>
<li>Error removal is the most time-consuming phase of the lifecycle.</li>
<p><strong></strong><strong>Testing</strong></p>
<li>Software is usually tested at best to the 55 to 60 percent coverage level.</li>
<li>One hundred percent test coverage is still far from enough.</li>
<li>Test tools are essential, but rarely used.</li>
<li>Test automation rarely is. Most testing activities cannot be automated.</li>
<li>Programmer-created, built-in debug code is an important supplement to testing tools.</li>
<p><strong></strong><strong>Reviews and Inspections</strong></p>
<li>Rigorous inspections can remove up to 90 percent of errors before the first test case is run.</li>
<li>Rigorous inspections should not replace testing.</li>
<li>Post-delivery reviews, postmortems, and retrospectives are important and seldom performed.</li>
<li>Reviews are both technical and sociological, and both factors must be accommodated.</li>
<p><strong></strong><strong></strong><strong>Maintenance</strong></p>
<li>Maintenance typically consumes 40 to 80 percent of software costs. It is probably the most important software lifecycle phase.</li>
<li>Enhancements represent roughly 60 percent of maintenance costs.</li>
<li>Maintenance is a solution&#8211; not a problem.</li>
<li>Understanding the existing product is the most difficult maintenance task.</li>
<li>Better methods lead to <em>more</em> maintenance, not less.</li>
<p><strong></strong><strong></strong><strong></strong><strong>Quality</strong></p>
<li>Quality is a collection of attributes.</li>
<li>Quality is <em>not</em> user satisfaction, meeting requirements, achieving cost and schedule, or reliability.</li>
<p><strong></strong><strong></strong><strong>Reliability</strong></p>
<li>There are errors that most programmers tend to make.</li>
<li>Errors tend to cluster.</li>
<li>There is no single best approach to software error removal.</li>
<li>Residual errors will always persist. The goal should be to minimize or eliminate <em>severe</em> errors.</li>
<p><strong></strong><strong></strong><strong>Efficiency</strong></p>
<li>Efficiency stems more from good design than good coding.</li>
<li>High-order language code can be about 90 percent as efficient as comparable assembler code.</li>
<li>There are tradeoffs between optimizing for time and optimizing for space.</li>
<p><strong></strong><strong></strong><strong></strong><strong>Research</strong></p>
<li>Many researchers advocate rather than investigate.</li>
</ol>
<p>And the list of fallacies:</p>
<p><strong>Management</strong></p>
<ol>
<li>You can&#8217;t manage what you can&#8217;t measure.</li>
<li>You can manage quality into a software product.</li>
<p><strong>People</strong></p>
<li>Programming can and should be egoless.</li>
<p><strong>Tools and Techniques</strong></p>
<li>Tools and techniques: one size fits all.</li>
<li>Software needs more methodologies.</li>
<p><strong>Estimation</strong></p>
<li>To estimate cost and schedule, first estimate lines of code.</li>
<p><strong>Testing</strong></p>
<li>Random test input is a good way to optimize testing.</li>
<p><strong>Reviews</strong></p>
<li>&#8220;Given enough eyeballs, all bugs are shallow&#8221;.</li>
<p><strong>Maintenance</strong></p>
<li>The way to predict future maintenance costs and to make product replacement decisions is to look at past cost data.</li>
<p><strong>Education</strong></p>
<li> You teach people how to program by showing them how to <em>write</em> programs.</li>
</ol>
<p>Although this book has been published in 2004, the topics that are discussed in this book very much apply today and probably many years to come. I personally got the most from the facts about people, estimation, testing and maintenance. I really enjoyed reading this fascinating book and I encourage you to pick it up as well. Awareness of these facts and fallacies, whether you agree or disagree with them,  is the first step to improving our craft.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/08/23/book-review-facts-and-fallacies-of-software-engineering/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>The Web is Not Platform Independent</title>
		<link>http://elegantcode.com/2010/08/22/the-web-is-not-platform-independent/</link>
		<comments>http://elegantcode.com/2010/08/22/the-web-is-not-platform-independent/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 20:16:32 +0000</pubDate>
		<dc:creator>John Sonmez</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/08/22/the-web-is-not-platform-independent/</guid>
		<description><![CDATA[There was a time when you wrote a web site and you targeted IE6.
That time has long passed.
When you really only had to target IE6, you could pretend the web was platform independent.
The truth is now the web is neither, nor will ever be platform independent.&#160; It’s just an illusion based on the simple notion [...]]]></description>
			<content:encoded><![CDATA[<p>There was a time when you wrote a web site and you targeted IE6.</p>
<p>That time has long passed.</p>
<p>When you really only had to target IE6, you could pretend the web was platform independent.</p>
<p>The truth is now the web is neither, nor will ever be platform independent.&#160; It’s just an illusion based on the simple notion that browsers basically just render HTML.</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2010/08/pegi.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pegi" border="0" alt="pegi" src="http://elegantcode.com/wp-content/uploads/2010/08/pegi_thumb.jpg" width="438" height="517" /></a></p>
<h2>How many platforms are there then?</h2>
<p>This is a surprisingly difficult question to answer.</p>
<p>Back before the web really took off there were basically 3 platforms to develop an app for: Windows; Unix/Linux; and Mac.</p>
<p>When we answer this question for the web, really we have to look at browsers as if they are the operating system.&#160; Since the same browser exists on multiple base OS’s but could be different, we have to count each combination of browser and OS as a potentially separate version.</p>
<p>Windows: IE6, IE7, IE8, IE9 (beta), Firefox, Chrome, Safari</p>
<p>OSX: IE, Firefox, Safari (more?)</p>
<p>Linux: Firefox, Chrome</p>
<p>Android: Webkit</p>
<p>iPad, iPhone: Safari</p>
<p>I don’t have nearly every combination listed, but this is what I would consider a good coverage for any kind of public facing website.</p>
<p>Oh, don’t forget to cross this again with localization and globalization, because you might have a localization problem that only happens in a certain language in a certain browser on a certain OS.</p>
<h2>Not just rendering level differences</h2>
<p>It is also very interesting to consider that a web developer now has to consider how their site will not just render, but be used on a mobile platform.&#160; </p>
<p>Consider how Google released an iPad version of Gmail.&#160; And although, you may not really care if your site works on an iPhone or an Android phone, you probably should start caring about how it works on tablets like the iPad, because that market is only growing. </p>
<p><strong>If you have a website that doesn’t work on someone’s iPad when they are shopping online, do you think they will get up, go turn on the computer, and go to your site to make the purchase or they will buy from a different site with a few touches?</strong></p>
<p>With a phone size resolution, the considerations are even more important.</p>
<h2>Tools help me make the web platform independent</h2>
<p>No tool exists right now that can handle the non-technical aspects of platform independence for your web application, but let us imagine for a second that a library like JQuery really made your javascript platform independent.</p>
<p>If we were to hold onto that shaky assumption, we would need to make sure that we never wrote javascript that wasn’t written through the JQuery API.&#160; (Which happens to be an extremely leaky abstraction over javascript, CSS, and the DOM.) We would still have to make sure our HTML and CSS tags were platform independent.</p>
<p>So even if we could get parts of our development to be mostly platform independent, we would still need to test on all of the major platforms, because we could not rely on the platform independence.</p>
<p>Now, don’t get me wrong here.&#160; I love JQuery.&#160; It makes the job of a web developer so much easier.&#160; But, there is an important distinction.&#160; <strong>APIs and libraries like JQuery make it easier to write platform independent web code, but they don’t make our code platform independent.</strong></p>
<h2>What does all this mean?</h2>
<p>We’ve gotten to the point where the most platform independent technology you can use is either Flash or Silverlight.</p>
<p>I’m not sure if this is the future of development, but it very well might be.</p>
<p>One important point to draw from this realization is that we shouldn’t necessarily choose to make our application a web application, because we need it to be platform independent.&#160; It seems like about 5 years ago, the web became the default choice, because it was better to have platform independence than a rich UI.</p>
<p>Hopefully, for the sake of web developers some of these paths die off or converge, or that standards compliance becomes so good that you could really write code for one browser and expect it to work on all the others.</p>
<h6>As always, you can subscribe to this <a href="http://feeds2.feedburner.com/ElegantCode">RSS feed</a> to follow my posts on elegant code.&#160; Feel free to check out my main personal blog at <a href="http://simpleprogrammer.com">http://simpleprogrammer.com</a>, which has a wider range of posts, updated 2-3 times a week.&#160; Also, you can follow me on twitter <a href="http://twitter.com/jsonmez">here</a>.</h6>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/08/22/the-web-is-not-platform-independent/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Pluralcast 22 : How Pluralsight.com gets built with Keith Brown</title>
		<link>http://elegantcode.com/2010/08/18/pluralcast-22-how-pluralsight-com-gets-built-with-keith-brown/</link>
		<comments>http://elegantcode.com/2010/08/18/pluralcast-22-how-pluralsight-com-gets-built-with-keith-brown/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 22:44:55 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/08/18/pluralcast-22-how-pluralsight-com-gets-built-with-keith-brown/</guid>
		<description><![CDATA[&#160; Listen to this episode! [31:30]
If you think ASP.NET Web Forms automatically results in boilerplate, procedural code, this show is for you. Turns out, there are some techniques we can apply to Web Forms (like a salve) that make them creamier and delicious. Keith tells us how Pluralsight.com gets built, along with the tools, techniques, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://elegantcode.com/wp-content/uploads/2010/08/PlayIcon1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PlayIcon" border="0" alt="PlayIcon" src="http://elegantcode.com/wp-content/uploads/2010/08/PlayIcon_thumb.png" width="24" height="24" /></a>&#160; <a href="http://pluralsight-free.s3.amazonaws.com/pluralcast/pc_022_pscom_keith_brown.mp3">Listen to this episode</a>! [31:30]</p>
<p>If you think ASP.NET Web Forms automatically results in boilerplate, procedural code, this show is for you. Turns out, there are some techniques we can apply to Web Forms (like a salve) that make them creamier and delicious. Keith tells us how Pluralsight.com gets built, along with the tools, techniques, patterns, and practices that the team uses. </p>
<p>Okay, okay, the team really boils down to Keith, Fritz, and me, but that’s not the point! The point is, there is some coolness under the covers, and this show peals them back.</p>
<p>- Dave Starr</p>
<h2>Keith Brown</h2>
<p><a href="http://elegantcode.com/wp-content/uploads/2010/08/keith_brown.jpg"><img style="border-right-width: 0px; margin: 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="keith_brown" border="0" alt="keith_brown" align="right" src="http://elegantcode.com/wp-content/uploads/2010/08/keith_brown_thumb.jpg" width="113" height="157" /></a> Keith is a co-founder of Pluralsight where he oversees the developer security curriculum, which has an impact across all of Pluralsight&#8217;s course offerings. Keith spends most of his time researching security techniques and technologies, and has spent a decade teaching and developing course material for professional software developers. Keith is a contributing editor for <a href="http://msdn.microsoft.com/en-us/magazine/default.aspx">MSDN Magazine</a>, where he wrote the Security Briefs column for eight years. Keith regularly contributes feature articles to the magazine, while focusing his attention most recently on <a href="http://www.pluralsight.com/community/blogs/keith/">his blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/08/18/pluralcast-22-how-pluralsight-com-gets-built-with-keith-brown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://pluralsight-free.s3.amazonaws.com/pluralcast/pc_022_pscom_keith_brown.mp3" length="30278540" type="audio/mpeg" />
		</item>
		<item>
		<title>Book Review: Debug It!</title>
		<link>http://elegantcode.com/2010/08/18/book-review-debug-it/</link>
		<comments>http://elegantcode.com/2010/08/18/book-review-debug-it/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 20:26:33 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/08/18/book-review-debug-it/</guid>
		<description><![CDATA[ 

Throughout my career as a professional software developer,&#160;&#160; I’ve spent quite a lot of my learning time to sharpen my debugging skills. I’ve always considered this as one of the required abilities of a true software craftsman. I also strongly believe that the time spent hunting bugs should be minimized as much as possible. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://elegantcode.com/wp-content/uploads/2010/08/image1.png"><img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://elegantcode.com/wp-content/uploads/2010/08/image_thumb1.png" width="194" height="246" /></a> </p>
</p>
<p>Throughout my career as a professional software developer,&#160;&#160; I’ve spent quite a lot of my learning time to sharpen my debugging skills. I’ve always considered this as one of the required abilities of a true software craftsman. I also strongly believe that the time spent hunting bugs should be minimized as much as possible. Other required disciplines like Test-Driven Development should prevent using your debugging skills as much as possible. But when the shit hits the fan, being able to fall back on solid debugging skills is essential for any software engineer. </p>
<p>Long time readers of my blog know that I’m a huge fan of <a href="http://www.wintellect.com/CS/blogs/jrobbins/default.aspx">John Robbins</a>’ books on the same topic. So when <a href="http://www.paulbutcher.com/">Paul Butcher</a>, the author of <a href="http://www.amazon.com/exec/obidos/ASIN/193435628X/elegantcode-20">Debug It!</a>, asked me to give his book a read, I wholeheartedly accepted. And I’m very glad I did.</p>
<p>Most people automatically think about their favorite debugger tool when they hear or speak about “<em>debugging</em>”. This is not what this book is about. This book is about the intellectual process of fixing bugs. Just as <em>Red-Green-Refactor</em>, debugging is a discipline with its own core process.</p>
<p>The book is divided into three parts, each of which shines a light on a specific aspect of debugging as a whole. The first part both provides an overview as an in-depth explanation for each of the steps in the debugging process.&#160;&#160;&#160; </p>
<p><a href="http://elegantcode.com/wp-content/uploads/2010/08/image2.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://elegantcode.com/wp-content/uploads/2010/08/image_thumb2.png" width="388" height="249" /></a>For more experienced developers this might just be a recap of the process they already know and follow. For less experienced developers, this first part provides a treasure of information that many of us have learned the hard way throughout our career. </p>
<p>The second part talks about how debugging fits into the wider software development process. Topics like bug tracking, dealing with users/support staff, prioritizing bugs, software quality, etc. … are discussed in the two chapters that constitute this part of the book.</p>
<p>The third and final part is composed of a number of more <em>‘advanced’</em> topics. A number of strategies are discussed for dealing with special cases like patching, concurrency bugs, Heisenbugs, performance bugs, bugs in third-party software, etc. … . There’s also a chapter that describes the ideal debugging environment, basically evangelizing automated tests, source control and automatic builds which are pretty basic things for most of us but unfortunately not everyone. The chapter on self-debugging software was quite interesting as well as the final chapter on anti-patterns which is also highly recommended. I was personally intrigued by the author’s take on maintenance teams, which reinforced my opinion on the matter (this might be a future blog post).&#160; </p>
<p>This book also contains a vast number of anecdotes and short stories about real-world scenarios that help illustrate the different topics and enforce the points that the author tries to make. </p>
<p>Again, this book is highly recommended as it contains a whole lot of wisdom and experience from the field of software engineering. It’s only 190 pages, so you should be able to get through very quickly. So, you can’t lose on this one.</p>
<p>I know that I’ve been posting a lot of book reviews lately. I’ve been enjoying a quiet three week vacation at home so I’m making a futile attempt to catch up on my reading. I’ll probably have one or two more book reviews coming up.&#160;&#160; </p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/08/18/book-review-debug-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I guess an introduction is in order</title>
		<link>http://elegantcode.com/2010/08/15/i-guess-an-introduction-is-in-order/</link>
		<comments>http://elegantcode.com/2010/08/15/i-guess-an-introduction-is-in-order/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 21:50:26 +0000</pubDate>
		<dc:creator>Andreas Håkansson</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Introduction]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/08/15/i-guess-an-introduction-is-in-order/</guid>
		<description><![CDATA[First of all let me thank the people at Elegant Code for the invite! I am really honored to be brought into the realm of the awesome bloggers that make up this community. I will do my best to maintain the standards that has been set so far!
So who am I anyway? Good question! Some [...]]]></description>
			<content:encoded><![CDATA[<p>First of all let me thank the people at Elegant Code for the invite! I am really honored to be brought into the realm of the awesome bloggers that make up this community. I will do my best to maintain the standards that has been set so far!</p>
<p>So who am I anyway? Good question! Some of you might know me as TheCodeJunkie on <a title="Visit my twitter account" href="http://twitter.com/thecodejunkie" target="_blank">Twitter</a> or from my <a title="Visit my own blog" href="http://thecodejunkie.com" target="_blank">self-titled blog</a> that I have been blogging on up until this point (and might continue doing, haven’t really made up my mind yet what I am going to do with it). However, my real name is Andreas Håkansson and I guess I could describe myself as a nearly 30 year old .NET developer from Sweden, with a passion for pretty much everything in the software engineering / craftsmanship department (hey, why limit yourself to one kind of cake when there’s so much to be had out there!).</p>
<p>I am a strong advocator of Open-Source Software and I head the <a title="Visit the MefContrib website" href="http://mefcontrib.com" target="_blank">MEF Contrib</a> project, a set of community contributed extensions, tools and samples for the Managed Extensibility Framework, and I have also created the <a title="Visit the project page for the Common Service Factory" href="http://commonservicefactory.codeplex.com" target="_blank">Common Service Factory</a>, a WCF extension that enabled dependency injection in services (it’s a bit dated, but it works like a charm – probably should give it some love as soon as I can find a slice of spare time in my life).</p>
<p>Oh yeah, there’s more to me than being a code ninjah – somehow I’ve also managed to get married to my high school sweetheart (12 years since we hooked up and still going strong) and together we have two wonderful boys (3 and 1½ years old – boy do they know how to keep us busy hehe)</p>
<p>Well I guess that’s it… now you know a bit about me, and I hope to get to know a bit more about you, the readers of Elegant Code, so please stop by my posts and drop me a line or two. See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/08/15/i-guess-an-introduction-is-in-order/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Extended WPF Toolkit &#8211; New ColorPicker Control</title>
		<link>http://elegantcode.com/2010/08/15/extended-wpf-toolkit-new-colorpicker-control/</link>
		<comments>http://elegantcode.com/2010/08/15/extended-wpf-toolkit-new-colorpicker-control/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 06:00:26 +0000</pubDate>
		<dc:creator>Brian Lagunas</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[extended wpf toolit]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/08/15/extended-wpf-toolkit-new-colorpicker-control/</guid>
		<description><![CDATA[Yes, another great control has been added to the Extended WPF Toolkit project on CodePlex called the ColorPicker.
The ColorPicker is pretty much self explanatory.&#160; It allows a user to select a color using a color canvas, a hue slider, and an alpha slider for transparency.
This is what is looks like when it is in display [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, another great control has been added to the <a href="http://wpftoolkit.codeplex.com/" target="_blank">Extended WPF Toolkit</a> project on CodePlex called the <a href="http://wpftoolkit.codeplex.com/wikipage?title=ColorPicker&amp;referringTitle=Home" target="_blank">ColorPicker</a>.</p>
<p>The ColorPicker is pretty much self explanatory.&#160; It allows a user to select a color using a color canvas, a hue slider, and an alpha slider for transparency.</p>
<p><strong>This is what is looks like when it is in display mode:</strong></p>
<p><a href="http://elegantcode.com/wp-content/uploads/2010/08/color_picker.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="color_picker" border="0" alt="color_picker" src="http://elegantcode.com/wp-content/uploads/2010/08/color_picker_thumb.jpg" width="304" height="86" /></a>&#160;</p>
<p><strong>This is what it looks like in edit mode:</strong></p>
<p><a href="http://elegantcode.com/wp-content/uploads/2010/08/color_picker_expanded.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="color_picker_expanded" border="0" alt="color_picker_expanded" src="http://elegantcode.com/wp-content/uploads/2010/08/color_picker_expanded_thumb.jpg" width="305" height="232" /></a> </p>
<p>&#160;</p>
<p>It is a pretty simple control for now.&#160; There will be added functionality in the coming future to support entering RGB and HSV values, as well as Hexadecimal values.</p>
<p>There is a SelectedColor dependency property that can be data bound to as follows.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:698d730d-8b64-447b-bb28-887912584751" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
<div style="background-color: #ffffff; max-height: 300px; overflow: auto; padding: 2px 5px;"><span style="color:#0000ff">&lt;</span><span style="color:#a31515">toolkit</span><span style="color:#0000ff">:</span><span style="color:#a31515">ColorPicker</span><span style="color:#ff0000"> SelectedColor</span><span style="color:#0000ff">=&quot;{</span><span style="color:#a31515">Binding</span><span style="color:#ff0000"> FavoriteColor}</span><span style="color:#0000ff">&quot; /&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>As you can see, I have been hard at work trying to make the Extended WPF Toolkit a successful project full of valuable controls that can be used in your application.&#160; But I will need feedback on the controls to make sure they are meeting the needs of the users.&#160; So please leave your feedback, good or bad, in the <a href="http://wpftoolkit.codeplex.com/Thread/List.aspx" target="_blank">Discussions</a> section of the project site.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/08/15/extended-wpf-toolkit-new-colorpicker-control/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
