<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>software-development &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/software-development/</link>
	<description>Feed of posts on WordPress.com tagged "software-development"</description>
	<pubDate>Tue, 01 Dec 2009 17:50:19 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Manager - RIA / Web UI Development]]></title>
<link>http://ellisost.wordpress.com/2009/12/01/manager-ria-web-ui-development/</link>
<pubDate>Tue, 01 Dec 2009 14:22:35 +0000</pubDate>
<dc:creator>ellis</dc:creator>
<guid>http://ellisost.wordpress.com/2009/12/01/manager-ria-web-ui-development/</guid>
<description><![CDATA[Location : Boston, MA Length : 6 Month &#8211; Perm Click For Description]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Location : Boston, MA</p>
<p>Length : 6 Month &#8211; Perm</p>
<div id="attachment_165" class="wp-caption alignleft" style="width: 160px"><a href="http://ellisost.wordpress.com/files/2009/12/manager-web.jpg"><img class="size-thumbnail wp-image-165" title="Manager-Web" src="http://ellisost.wordpress.com/files/2009/12/manager-web.jpg?w=150" alt="" width="150" height="56" /></a><p class="wp-caption-text">Click For Description</p></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Browsera: Simultaneously Test Your Web Design in Multiple Browsers]]></title>
<link>http://fluppe.wordpress.com/2009/12/01/browsera-simultaneously-test-your-web-design-in-multiple-browsers/</link>
<pubDate>Tue, 01 Dec 2009 12:48:26 +0000</pubDate>
<dc:creator>Filip Lejon</dc:creator>
<guid>http://fluppe.wordpress.com/2009/12/01/browsera-simultaneously-test-your-web-design-in-multiple-browsers/</guid>
<description><![CDATA[Browsera is an online service that will show you how your web site is rendered by the different brow]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.browsera.com/" target="_blank">Browsera</a> is an online service that will show you how your web site is rendered by the different browser engines, as to expose compatibility issues. It will also analyze your design and show you the parts which are prone to errors.</p>
<p>&#160;</p>
<p>Too bad I&#8217;m not into web design at the moment, this tool would have saved me some time back in the day.</p>
<p>No more trying to install a legacy IE6 version or messing around with virtual machines etc&#8230;</p>
<p>&#160;</p>
<p>As read on <a href="http://lifehacker.com/5414998/browsera-simultaneously-tests-your-site-in-different-browsers" target="_blank">Lifehacker</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[THE IMPORTANCE OF SOFTWARE PRODUCT DEVELOPMENT]]></title>
<link>http://synapsewebsolutions.wordpress.com/2009/12/01/the-importance-of-software-product-development/</link>
<pubDate>Tue, 01 Dec 2009 10:13:51 +0000</pubDate>
<dc:creator>indiasynapse</dc:creator>
<guid>http://synapsewebsolutions.wordpress.com/2009/12/01/the-importance-of-software-product-development/</guid>
<description><![CDATA[The resources of a company must be managed in a proper way for that organization to run successfully]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>The resources of a company must be managed in a proper way for that organization to run successfully. Offshore <a href="http://www.synapsewebsolutions.co.uk/software-development/index.shtml">software product development</a> allows a company or organization to free up its precious resources. These resources can then be directed towards productive activities such as product marketing, management, distribution and differentiation as well.<br />
By hiring an offshore software development company, the organization can extract maximum benefits with ability, ideas as well expertise. In the current market scenario almost all the software companies are going for offshore software development as it not only elevates the efficiency of the organization but also cuts down the costs.<br />
The main motive of offshore software development is to provide the essential hardware and software support along with flawless teamwork through email, voice chat, video or any of the other modes that suits the company. The best part is that these companies work in accordance with your time zones hence there is no chance of time or geographical zones affecting the execution of the project.<br />
Offshore software development companies offer cost-effective and flexible services. The project solutions offered by these companies are tailor-made and customized in nature. A <a href="http://www.synapsewebsolutions.co.uk/software-development/index.shtml">custom software company</a> houses a number of skilled designers and developers that work round-the-clock. The in-house work pressure also gets reduced significantly when an organization hires a software development company. Offshore software development companies even provide you with effective and efficient documentation as per the needs of your project.<br />
There are a plethora of software development offshore companies that provide product development and design  solutions in accord with all budgets and needs. </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Wave Hello or GoodBye]]></title>
<link>http://bcwdesign.wordpress.com/2009/12/01/google-wave-hello-or-goodbye/</link>
<pubDate>Tue, 01 Dec 2009 04:19:55 +0000</pubDate>
<dc:creator>bcwdesign</dc:creator>
<guid>http://bcwdesign.wordpress.com/2009/12/01/google-wave-hello-or-goodbye/</guid>
<description><![CDATA[After a long wait, I was finally accepted into the Google Wave trial recently. I wasn&#8217;t sure w]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>After a long wait, I was finally accepted into the <a href="https://wave.google.com/wave/" target="_blank">Google Wave</a> trial recently. I wasn&#8217;t sure what to expect  since I did not know  what Google Wave was. Some of my techie friends said is was created by <a href="http://www.google.com">Google</a> to replace <a href="http://www.facebook.com/board.php?uid=87885112184#/pages/Roswell-GA/Blue-Crystal-Web-Design/87885112184" target="_blank">Facebook</a> as the top social site so I figured I&#8217;d better check it out.</p>
<p>I applied and was accepted into the Google Wave trial (or preview) stage. In this stage we are allowed to view some demo Extensions and even create Extensions of our own.  Extensions or Gadgets are custom programs you can write to be used in the interactions you have with your contacts.</p>
<p>Here is a screenshot of the Google Wave interface:</p>
<div id="attachment_142" class="wp-caption aligncenter" style="width: 410px"><a href="http://bcwdesign.wordpress.com/files/2009/11/googlewave.jpg"><img class="size-full wp-image-142" title="Google Wave Interface" src="http://bcwdesign.wordpress.com/files/2009/11/googlewave.jpg" alt="google wave interface" width="400" height="291" /></a><p class="wp-caption-text">This is the look and feel of Google Wave</p></div>
<p>So far I haven&#8217;t been too impressed with Google Wave. However a lot of my doubt has been centered around that fact that I just don&#8217;t know what it is.  It is billed as an online tool for collaboration and communication in real time. So I guess you can call it a Facebook by Google? I plan to develop a simple application using the Gadgets API so I will find out more. What do you think? Will Google Wave replace Facebook or Linked In as the real time collaboration tool of choice?</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Quandry of Social Media Security]]></title>
<link>http://mikemeikle.wordpress.com/2009/12/01/quandry-of-social-media-security/</link>
<pubDate>Tue, 01 Dec 2009 02:33:04 +0000</pubDate>
<dc:creator>Mike Meikle</dc:creator>
<guid>http://mikemeikle.wordpress.com/2009/12/01/quandry-of-social-media-security/</guid>
<description><![CDATA[Well...I hope you didn&#39;t have actual work to do... I was recently asked a question regarding the]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div id="attachment_141" class="wp-caption alignleft" style="width: 310px"><a href="http://mikemeikle.wordpress.com/files/2009/11/socialmedialandscape.jpg"><img class="size-medium wp-image-141" title="socialmedialandscape" src="http://mikemeikle.wordpress.com/files/2009/11/socialmedialandscape.jpg?w=300" alt="Social Media Landscape" width="300" height="225" /></a><p class="wp-caption-text">Well...I hope you didn&#39;t have actual work to do...</p></div>
<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 		A:link { so-language: zxx } --><span style="font-size:small;">I was recently asked a question regarding the top IT concerns for social media (Web 2.0) implementation plan.  Well, in my view information security is at the top. Companies must consider that previously private data may be released onto the Internet.  Also, applications like Facebook are rife with malware and phishers attempting social engineering.</span></p>
<p><span style="font-size:small;">Training people not to post sensitive data about themselves (birth dates, full addresses, corporate email, etc.) is crucial.  If the company wants to have a social media presence, then the people involved in the plan will need to have the training to understand what to post, what is acceptable use (no Facebook apps) and what not to post.  The Internet is full of regrettable stories of CEO&#8217;s and high-ranking employees &#8220;saying&#8221; really stupid things that bite them on the backside almost immediately.<!--more--></p>
<p>User requirements gathering will be paramount. What exactly does the corporation want to achieve with social media? This will drive what applications are to be used or developed for the purpose. Of course once a company heads down the software development path you add a huge layer of complexity to the equation. Using off the shelf applications (COTS) is usually the most cost effective.</p>
<p>Finally, standardization is key. If IT is going to support social media applications, the company must decide on what tools it will use and make that the standard. If users are allowed to use non-supported applications, it will only lead to IT and user dissatisfaction/conflict and a needless increase in risk.</p>
<p>Now for some links to backup my pontification:</span></p>
<ul>
<li><span style="font-size:small;"><a href="http://mashable.com/2008/07/10/how-to-develop-a-social-media-plan/">Generic Social Media 	Planning Steps</a></span></li>
<li><span style="font-size:small;"><a href="http://www.imediaconnection.com/content/24470.asp">Another Generic 	Social Media Plan Post</a></span></li>
<li><span style="font-size:small;"><a href="http://blogs.zdnet.com/Hinchcliffe/?p=581">Blog Post on Social 	Media IT/Business Concerns</a><a href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fblogs%2Ezdnet%2Ecom%2FHinchcliffe%2F%3Fp%3D581&#38;urlhash=QUtY" target="_blank"> </a></span></li>
<li><a href="http://blogs.cisco.com/security/comments/considering_the_risks_and_rewards_of_social_media/"><span style="font-size:small;">Cisco Security Blog 	Post on Socia Media Pros &#38; Cons</span></a></li>
<li><a href="cio.gov/Documents/Guidelines_for_Secure_Use_Social_Media_v01-0.pdf"><span style="font-size:small;">Federal Guidelines on 	Social Media Security</span></a></li>
</ul>
<p><span style="font-size:small;">Finally, when it comes down to it, a wiki may be a better alternative for an &#8220;in-house&#8221; social platform.  I&#8217;ve used <a href="http://www.atlassian.com/software/confluence/">Atlassian Confluence</a> with some clients and it&#8217;s pretty decent with only a modicum of quirkiness.   Plus you can impress your colleagues with the cool product name if nothing else.</span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Software Development 101]]></title>
<link>http://scieditoresource.wordpress.com/2009/11/30/software-dev-101/</link>
<pubDate>Mon, 30 Nov 2009 21:18:53 +0000</pubDate>
<dc:creator>scieditoresource</dc:creator>
<guid>http://scieditoresource.wordpress.com/2009/11/30/software-dev-101/</guid>
<description><![CDATA[I was talking to my husband about this blog tonight over dinner. He&#8217;s a software consultant sp]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I was talking to my husband about this blog tonight over dinner. He&#8217;s a software consultant specializing in enterprise web applications. I wasn&#8217;t sure what topic to explore, and he suggested that I think about challenging situations that arise at work. One of these situations is development itself&#8211;sometimes, we&#8217;re just not sure what we want from a computer program (eg, our publication&#8217;s web site). Our conversation then turned to software development; specifically, the waterfall. In development terminology, the waterfall is &#8220;determine a need,&#8221; &#8220;get the requirements,&#8221; &#8220;develop,&#8221; &#8220;test,&#8221; &#8221;deploy,&#8221; and then &#8220;we can&#8217;t use this&#8221; (ie, change it). Waterfall development is a predecessor to what you may be seeing with your publication today; that is, agile development. The waterfall is a linear model&#8211;what you get at the end may not necessarily be what you really wanted or needed. Agile development is an iterative process. That is, you start with a basic set of requirements or needs. In the initial stage, a prototype of the product is put out for review and testing. Any changes to the initial set of requirements are captured. Then, it&#8217;s quickly back to the drawing board to implement these changes. And repeat as needed. The important part of this is to establish a baseline of what the minimum set of requirements are to produce a fully usable application.</p>
<p>In our roles as editors, development occurs behind the scenes, and we may take this work for granted. It&#8217;s worthwhile learning a bit about the nuts and bolts. Not too bad for a Monday night meal over Thai food!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Is the Air Force Playing Games?]]></title>
<link>http://infotechpros.wordpress.com/2009/11/30/is-the-air-force-playing-games/</link>
<pubDate>Mon, 30 Nov 2009 20:19:27 +0000</pubDate>
<dc:creator>scarulu</dc:creator>
<guid>http://infotechpros.wordpress.com/2009/11/30/is-the-air-force-playing-games/</guid>
<description><![CDATA[Why is the Air Force to acquire 2,200 PlayStation3? As part of the continuous enhancement of the Res]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Why is the Air Force to acquire 2,200 PlayStation3?</p>
<p>As part of the continuous enhancement of the Research Laboratory of the Air Force, 2,200 PlayStation 3 units will be purchase to add to the 336 units already in use for supercomputing research</p>
<p><img class="alignleft" title="PlayStation 3" src="http://www.itreviews.co.uk/graphics/normal/hardware/h1198.jpg" alt="" width="425" height="423" /></p>
<p>This is nothing new for the use of the PlayStation 3&#8217;s eight-processor to power other supercomputers, as currently doing so for the world&#8217;s second-fastest, RoadRunner, at Los Alamos National Laboratory</p>
<p>The processors used in the PlayStation are cheaper than the Intel’s and AMD’s, therefore its broad use in supercomputers</p>
<p>The need for higher resolution of images from radar imaging, build-up of computers with speeds close to human brain’s, and high definition video processing, among other research topics made the PlayStation’s processors ideal for the job</p>
<p>With estimated $700 million expenditure per year for R&#38;D the Air force use of these supercomputers will help to innovate/improve cybersecurity, computer modeling, networking, and collaboration</p>
<p>Think about the useability of these babies!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[VirtualBox 3.1.0 adds teleportation support]]></title>
<link>http://mikejustin.wordpress.com/2009/11/30/virtualbox-3-1-0-adds-teleportation-support/</link>
<pubDate>Mon, 30 Nov 2009 18:35:36 +0000</pubDate>
<dc:creator>Michael Justin</dc:creator>
<guid>http://mikejustin.wordpress.com/2009/11/30/virtualbox-3-1-0-adds-teleportation-support/</guid>
<description><![CDATA[Less than three weeks after the beta, Sun Microsystems has announced the release of version 3.1.0 of]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Less than three weeks after the beta, Sun Microsystems has announced the release of version 3.1.0 of its open source VirtualBox desktop virtualisation application for x86 hardware.</p>
<p>The following major new features were added:</p>
<ul>
<li>Teleportation (aka live migration); migrate a live VM session from one host to another (see the manual for more information)</li>
<li>VM states can now be restored from arbitrary snapshots instead of only the last one, and new snapshots can be taken from other snapshots as well (&#8220;branched snapshots&#8221;; see the manual for more information)</li>
<li>2D video acceleration for Windows guests; use the host video hardware for overlay stretching and color conversion (see the manual for more information)</li>
<li>More flexible storage attachments: CD/DVD drives can be attached to an arbitrary IDE controller, and there can be more than one such drive (the manual for more information)</li>
<li>The network attachment type can be changed while a VM is running</li>
<li>Complete rewrite of experimental USB support for OpenSolaris hosts making use of the latest USB enhancements in Solaris Nevada 124 and higher</li>
<li>Significant performance improvements for PAE and AMD64 guests (VT-x and AMD-V only; normal (non-nested) paging)</li>
<li>Experimental support for EFI (Extensible Firmware Interface; see the manual for more information)</li>
<li>Support for paravirtualized network adapters (virtio-net; see the manual for more information)</li>
</ul>
<p>More details about the release can be found in the <a rel="external" href="http://www.virtualbox.org/wiki/Changelog" target="_blank">Change Log</a>. VirtualBox 3.1.0 is available to <a rel="external" href="http://www.virtualbox.org/wiki/Downloads" target="_blank">download</a> for Windows, Mac OS X, Linux and Solaris. VirtualBox is released under <a rel="external" href="http://www.virtualbox.org/wiki/GPL" target="_blank">version 2 of the GNU General Public License</a> (GPLv2) and VirtualBox binaries are released under the <a rel="external" href="http://www.virtualbox.org/wiki/VirtualBox_PUEL" target="_blank">VirtualBox Personal Use and Evaluation License</a> (PUEL) licence.</p>
<p>Read more:</p>
<p><a href="http://www.h-online.com/open/news/item/VirtualBox-3-1-0-arrives-adds-teleportation-support-872873.html">http://www.h-online.com/open/news/item/VirtualBox-3-1-0-arrives-adds-teleportation-support-872873.html</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to write a TypeConverter for boolean types]]></title>
<link>http://jkhk.wordpress.com/2009/11/30/how-to-write-a-typeconverter-boolean-types/</link>
<pubDate>Mon, 30 Nov 2009 05:27:49 +0000</pubDate>
<dc:creator>jkhk</dc:creator>
<guid>http://jkhk.wordpress.com/2009/11/30/how-to-write-a-typeconverter-boolean-types/</guid>
<description><![CDATA[This entry mostly applies to UI&#8217;s where you want to display boolean as a Yes/No string as oppo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>This entry mostly applies to UI&#8217;s where you want to display boolean as a <strong>Yes/No</strong> string as opposed to the standard True/False (e.g. property grids). The human brain normally needs to process statements and a True/False option. So how do you go about creating resusable code for this scenario?</p>
<p>The answer is <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx">TypeConverters</a>, which provides a unified way of converting types and their values. There are a number of derived TypeConverters, one of them being BooleanConverter, which we&#8217;ll use to create our <strong>YesNoConverter</strong> class.</p>
<p>The functions that we&#8217;re interested in overriding are the <strong>CanConvertFrom, CanConvertTo, ConvertFrom, ConvertTo</strong> and <strong>GetStandardValues</strong>. As you probably have guess the convert functions checks if conversion is possible as well as performing the conversions.</p>
<p><a href="http://gist.github.com/245263"><strong>Code here</strong></a></p>
<p>You&#8217;ll have to create your own resource file with the Yes/No strings for the code to work of course.</p>
<p>With the reusable converter you can simple apply an attribute to any property where you want the conversion performed:</p>
<p><strong>[TypeConverter(typeof(YesNoConverter))]</strong><br />
public bool EnableFlag { get; set; }</p>
<p>Easy!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Thread Local Storage the Easy Way]]></title>
<link>http://larryparkerdotnet.wordpress.com/2009/11/29/thread-local-storage-the-easy-way/</link>
<pubDate>Mon, 30 Nov 2009 02:41:45 +0000</pubDate>
<dc:creator>Larry Parker</dc:creator>
<guid>http://larryparkerdotnet.wordpress.com/2009/11/29/thread-local-storage-the-easy-way/</guid>
<description><![CDATA[I recently needed to store data on a per-thread basis.  This was the first time I ever needed to do ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I recently needed to store data on a per-thread basis.  This was the first time I ever needed to do that and it was a bit of a mind shift for me.   Normally when I used threads I would <em>share</em> data <em>across</em> threads – not <em>isolate</em> data <em>within</em> a thread.</p>
<p>The situation was in a WCF server application where I needed to make the user id associated with the service call available to various business objects called by the service method.  One approach could have been for the service methods to pass the user id into the business objects, but that would have gotten a bit tedious.</p>
<p>Since each service call received by my WCF server was on a different thread (using the thread pool), storing the user id in a place specific to the current thread made the most sense.  Fortunately, this can be done in .NET by using <a href="http://msdn.microsoft.com/en-us/library/6sby1byh.aspx#">thread local storage</a> (TLS).</p>
<p>My first exposure to TLS was in a .NET book that covered this in the form of named data slots, which is a general mechanism that allows you to store any type of data specific to a thread.</p>
<p>So I started down the path using the static <a href="http://msdn.microsoft.com/en-us/library/system.threading.thread.getnameddataslot.aspx">Thread.GetNamedDataSlot</a> and <a href="http://msdn.microsoft.com/en-us/library/system.threading.thread.setdata.aspx">Thread.SetData</a> methods, but I noticed that MSDN recommended another mechanism for TLS – the <a href="http://msdn.microsoft.com/en-us/library/system.threadstaticattribute.aspx">ThreadStatic</a> attribute.  I’m glad I caught this because the book did not cover it, and data slots are a bit sloppy to work with.</p>
<p>What’s so nice about the ThreadStatic attribute is that it can be applied directly to a static field, so your data is strongly typed and stands on its own (as opposed to being thrown into a general named collection as is done with data slots).  And according to MSDN, ThreadStatic is faster than data slots.</p>
<p>So here’s the code:</p>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="color:blue;">public static class </span><span style="color:#2b91af;">SystemGlobals
</span>{
    [<span style="color:#2b91af;">ThreadStatic</span>]
    <span style="color:blue;">private static </span><span style="color:#666600;">Int32 </span>_userId;

    <span style="color:blue;">public static </span><span style="color:#666600;">Int32 </span>UserId
    {
        <span style="color:blue;">get </span>{ <span style="color:blue;">return </span>_userId; }
        <span style="color:blue;">set </span>{ _userId = <span style="color:blue;">value</span>; }
    }
}</pre>
<p>Since the private _userId variable is a static field decorated with the ThreadStatic attribute, its contents are unique per thread.  The public UserId property wraps this value and can be set by the WCF service method (which knows the user id via the service call), and can be easily accessed by any business object that needs it.  For example:</p>
<pre class="code"><span style="color:blue;">public class </span><span style="color:#2b91af;">MyBusinessObject
</span>{
    <span style="color:blue;">public void </span>DoIt()
    {
        <span style="color:blue;">if </span>(<span style="color:#2b91af;">SystemGlobals</span>.UserId == 123)
            RaiseSalary();
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>This is much cleaner than passing the user id into the business object, and creates a nice isolated thread context for your business objects to run in.</p>
<p>I’m sure data slots have their place in some situations, but the ThreadStatic attribute is faster, safer and easier.</p>
<p>Hope this helps!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Against SEMAT]]></title>
<link>http://catenary.wordpress.com/2009/11/29/against-semat/</link>
<pubDate>Sun, 29 Nov 2009 21:30:38 +0000</pubDate>
<dc:creator>Jorge</dc:creator>
<guid>http://catenary.wordpress.com/2009/11/29/against-semat/</guid>
<description><![CDATA[There is a call for action making the rounds among software researchers. You may have heard of it: i]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>There is a call for action making the rounds among software researchers. You may have heard of it: it goes by the name of SEMAT (Software Engineering Method and Theory); Ivar Jacobson presents it as a &#8220;revolution&#8221; whose &#8220;goal is to re-found software engineering as a rigorous discipline.&#8221; You can read the call for action <a href="http://www.semat.org/bin/view">here</a>. The list of adherents is rather impressive and includes several people I admire deeply.</p>
<p>But this is an entirely misguided movement. Let&#8217;s analyze the call for action, bit by bit. It begins:</p>
<blockquote><p><em>Software engineering is gravely hampered today by immature practices. [...]</em></p></blockquote>
<p>We start with what seems to be a minor point, a mere choice of words, but the problems begin by setting this supposedly <em>re-foundational</em> effort firmly within the old paradigm that got us where we are now. Thus we do &#8220;software engineering&#8221; research, and we should do what other engineers and engineering researchers do. Never mind that people in the community (most prominently <a href="http://www.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf">Tom DeMarco</a>) have spoken against this paradigm, or that software development has <a href="http://www.neilernst.net/archives/2009/i-study-software-not-software-engineering/">little to do with most established engineering disciplines</a>: the people behind SEMAT have chosen to ignore these criticisms and move on.</p>
<p>Note that the SEMAT call for action presents the current state of the software industry as &#8220;hampered&#8221; by &#8220;immature practices,&#8221; which may be true (we&#8217;ve only been developing software for a few decades; our practices are necessarily immature), but as an observation it is symptomatic of the <a href="http://catenary.wordpress.com/2008/09/24/standish-the-chaos-report-and-science/">software-crisis hypochondria</a> that afflicts many software researchers. The call continues:</p>
<blockquote><p><em>[...] Specific problems include:</em></p>
<ul>
<li><em>The prevalence of fads more typical of fashion industry than of an engineering discipline.</em></li>
</ul>
</blockquote>
<p>This is how the consequences of the engineering paradigm I mentioned above manifest themselves. It&#8217;s true that the software industry is notoriously susceptible to fads. But notice how the alternative to these fads, according to the signatories of SEMAT, is to behave like an &#8220;engineering discipline.&#8221; That is, they offer a dichotomy between the archetypical fad-based industry (whimsical, pretentious, superficial, frivolous) and the archetypical measurements-based industry (conservative, positivist, serious, professional).</p>
<p>In fact, some &#8220;fads&#8221; end up being pretty good ideas. Object-orientation is mainstream today; it was once a fad. Extreme programming has been shown to be more effective than its alternatives under many conditions; some people still label it as a fad. There is a danger of labelling any grassroots innovation, any experimentation by practitioners, as a &#8220;fad&#8221;, as not conforming to the seriousness of our engineering discipline &#8212;there is a danger of stifling progress by an appeal to an unsuitable paradigm.</p>
<p>(This criticism doesn&#8217;t even get into the problem that several of the fads that have been inflicted on the software industry were started or promoted by some of the signatories!)</p>
<p>Let&#8217;s continue with SEMAT&#8217;s list of problems:</p>
<blockquote>
<ul>
<li><em>The lack of a sound, widely accepted theoretical basis.</em></li>
<li><em>The huge number of methods and method variants, with differences little understood and artificially magnified.</em></li>
</ul>
</blockquote>
<p>I agree with the first of these points, and I have argued in the past for the need to develop better foundational theories in our field. The second point, however, makes me doubt whether the signatories realize the implications of the first. We have plenty of evidence that software development is not homogeneous. Developing an operating system is not the same as developing videogames; developing mission-critical control systems is not the same as developing mission-critical data warehousing scripts. Different settings demand different methods. This diversity must play an essential role in our theories &#8212;unless we want our theories to be disconnected from the evidence we have collected.</p>
<p>In fairness, what the SEMAT adherents probably mean is that we have far too many academic software processes. Whole PhDs have been built on the basis of designing supposedly new methods, practices, or tools (really just a variation of old ones, under a different name) with almost no empirical validation. If this is the case, if what SEMAT refers to is our pathological growth of <em>academic</em> software methods without empirical validation, then I would agree with this point.</p>
<p>We continue:</p>
<blockquote>
<ul>
<li><em>The lack of credible experimental evaluation and validation.</em></li>
<li><em>The split between industry practice and academic research.</em></li>
</ul>
</blockquote>
<p>In this case I agree with the second point, but I partially object to the first. Industrial practice and academic research are certainly disconnected, and we need many more researchers bridging this gap if we are to solve the problem.</p>
<p>In fact I, too, believe that we need credible experimental evaluation and validation. I only object to this point because of its emphasis on experimentation, not on empiricism in general. This is another example of locking ourselves in the engineering paradigm: we want controlled experiments and measurements, the rest of our empirical work is not worth mentioning. As a researcher that has applied both experimental and non-experimental empirical methods in software development, I have seen that controlled experiments tend to abstract away the important elements of the phenomena we study, whereas non-experimental methods, such as case studies, provide a necessary richness to our evidence. Software development is hard, in part, because of the numerous elements and interactions in the socio-technical systems in which it takes place. These elements are almost impossible to replicate in the lab. Controlled experiments only give us a narrow piece of the story.</p>
<p>The SEMAT call for action then switches gears and offers a proposal:</p>
<blockquote><p><em>We support a process to refound software engineering based on a solid theory, proven principles and best practices that:</em></p>
<ul>
<li><em>Include a kernel of widely-agreed elements, extensible for specific uses</em></li>
<li><em>Addresses both technology and people issues</em></li>
<li><em>Are supported by industry, academia, researchers and users</em></li>
<li><em>Support extension in the face of changing requirements and technology</em></li>
</ul>
</blockquote>
<p>SEMAT, then, proposes to re-found software theory <em>by decree</em>. We decide to pick up &#8220;a solid theory&#8221; (which one?) that includes &#8220;a kernel of widely-agreed elements.&#8221; (which ones?) I simply cannot think of any scientific field that has prospered under such an epistemological basis. If we have a kernel of widely-agreed elements, <em>that in itself is our theory</em> and there is no need to refound anything. But we do not have a theory precisely because we do not yet have a kernel of widely-agreed elements; we cannot create such a kernel out of thin air.</p>
<p>Furthermore, I cannot see how such a kernel can arise out of the combined work of the signatories. The list includes, for instance, Alistair Cockburn and Watts Humphrey. It includes Larry Constantine and David Harel. It includes Ken Schwaber and Barry Boehm. The list itself suggests that, more than a kernel of widely-agreed elements, what we <em>already </em>have is several competing conceptions of software development, several vaguely formulated theories, that need to be refined and tested against each other. This is, I believe, where we should spend our efforts.</p>
<p>The rest of the items in SEMAT&#8217;s proposal are mush. Of course our theories need to address technological and social issues. Of course they need wide support by several communities to be successful. Of course they must be flexible. But what should they consist of? What stake is SEMAT putting on the ground? Unfortunately, beyond a wish to be more like an engineering discipline, this proposal is completely vague, and therefore I cannot support it.</p>
<p>&#160;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Only Usage Can Create Value]]></title>
<link>http://jockeholm.wordpress.com/2009/11/29/only-usage-can-create-value/</link>
<pubDate>Sun, 29 Nov 2009 12:01:59 +0000</pubDate>
<dc:creator>Joakim Holm</dc:creator>
<guid>http://jockeholm.wordpress.com/2009/11/29/only-usage-can-create-value/</guid>
<description><![CDATA[There is something quite myopic in the way agile software development views the end result; the deli]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><em>There is something quite myopic in the way agile software development views the end result; the delivery of software. The fulfilment of an order (stories or whatever) is always considered to be when the software is deployed on a production server. I agree, this </em><em>is important, but it&#8217;s not enough. This is a serious mistake, because that&#8217;s not where value materialises.</em></p>
<h3>Lean/Agile Methods Fall Short</h3>
<p>Let&#8217;s look at how a few agile methodologies view deliveries and value. Scrum, currently the most popular agile process, talks about each sprint (iteration) ending with a &#8220;potentially shippable product increment&#8221;. In other words, it is not even delivered. Original Scrum even recommended a short, specific &#8220;release sprint&#8221; to actually get the release out. XP, perhaps the most detailed and technically accomplished agile method, is slightly better. In the 1st edition of the book <a title="1st edition at Amazon (unavailable)" href="http://www.amazon.com/Extreme-Programming-Explained-Software-Engineering/dp/0582894425/ref=sr_1_10?ie=UTF8&#38;s=books&#38;qid=1259494472&#38;sr=1-10" target="_blank">&#8220;Extreme Programming Explained&#8221;</a>, Kent Beck talked about releasing after a few 1-week iterations. In the <a title="2nd edition at Amazon" href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658/ref=sr_1_1?ie=UTF8&#38;s=books&#38;qid=1259494472&#38;sr=1-1" target="_blank">2nd edition</a> this was changed to the practice of &#8220;Daily Deployment&#8221;. Very ahead of its time, but still nothing about what happens after that. Even Mary &#38; Tom Poppendieck in their landmark books on Lean Software Development [1] only talk about getting to production. I find it amazing that even the foremost, world-renowned Lean experts, in their book about how to quickly realise value from software development, <em>still</em> don&#8217;t get it right!</p>
<h3>Gotta Get to Using</h3>
<p>Isn&#8217;t the notion of value appearing kind of strange, even magical? I mean, why would software suddenly be valuable just because it landed on some server? Yes, it is accessible to users but so what? Does anybody believe business value suddenly appears, by a swift swoop of the wand, after you put a new and shiny version of your application in production? I believe there is definitely something missing in this Harry Pottery picture.</p>
<p>What&#8217;s missing is &#8220;just&#8221; that little thing of getting our users to find our cool new features, understand what they&#8217;re for, know how to use them, and understand how they can use them to achieve their goals (if that is at all possible). Furthermore, these goals would have to be in line with the company&#8217;s goals, helping serve customers better or more cost-effective. <em>Then</em>, maybe, we could start attracting more customers or free people to do innovative work. Hm, that&#8217;s quite a mouthful. Maybe that isn&#8217;t such a small task after all&#8230;? Come to think of it, isn&#8217;t this just a great example of waterfall thinking? We just throw something over the wall and then&#8230; it&#8217;s somebody else&#8217;s problem.</p>
<p>What I&#8217;m getting at is this: Value is not created until a feature is used [2]. It&#8217;s the <em>usage</em> to achieve the right business goal in an efficient manner that is important. That&#8217;s were we bring home the dough. If you think about it, it is readily apparent. It the <em>result</em> that matters most.</p>
<h3>Targeting Effects</h3>
<p>If we understand this and start thinking that way a lot of things fall into place. Most importantly, we would need to change how we view the development cycle and how we steer our actions towards creating value. Perhaps we could start by setting up some goals for the <em>effects</em> the system should have on our organisation? We could identify a few <em>target groups</em> and, in turn, study how their goals relate to higher goals. From there we could suggest some <em>usage scenarios</em> that would enable users to reach these goals. And lo and behold, we would have a draft initial backlog, a really relevant one as well. Then, of course, we would try and steer the whole development effort towards these effect goals. Or update the goals, when we find better ones.</p>
<p>This means we are <em>not</em> done when we dropped some release into production. We still have a distance to achieve value. And that distance is keeping us from being truly effective today.</p>
<h3>References</h3>
<p>[1] <a title="Book Details at Amazon" href="http://www.amazon.com/Lean-Software-Development-Agile-Toolkit/dp/0321150783/ref=sr_1_1?ie=UTF8&#38;s=books&#38;qid=1259494724&#38;sr=1-1" target="_blank">&#8220;Lean Software Development: An Agile Toolkit&#8221;</a> and <a title="Book Details at Amazon" href="http://www.amazon.com/Implementing-Lean-Software-Development-Concept/dp/0321437381/ref=sr_1_2?ie=UTF8&#38;s=books&#38;qid=1259494724&#38;sr=1-2" target="_blank">&#8220;Implementing Lean Software Developmen: From Concept to Cash&#8221;</a></p>
<p>[2] The idea behind this is neither new nor mine, see for example <a title="Book Details at Bokus" href="http://www.bokus.com/b/9789147087167.html?pt=same_author" target="_blank">&#8220;Effektstyrning av IT&#8221;</a> (&#8220;Effect Managing IT&#8221;) by Ingrid Ottersten and Mijo Balic.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Unit Testing Exceptions]]></title>
<link>http://larryparkerdotnet.wordpress.com/2009/11/28/unit-testing-exceptions/</link>
<pubDate>Sun, 29 Nov 2009 02:23:34 +0000</pubDate>
<dc:creator>Larry Parker</dc:creator>
<guid>http://larryparkerdotnet.wordpress.com/2009/11/28/unit-testing-exceptions/</guid>
<description><![CDATA[Up until recently,&#160; I had been following a pattern in my unit tests of catching expected except]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Up until recently,&#160; I had been following a pattern in my unit tests of catching expected exceptions that is similar to the following:</p>
<pre class="code">[<span style="color:#2b91af;">TestMethod</span>()]
<span style="color:blue;">public void </span>AddTaskTest()
{
    <span style="color:#2b91af;">Schedule </span>target = <span style="color:blue;">new </span><span style="color:#2b91af;">Schedule</span>(<span style="color:#a31515;">&#34;* * * * *&#34;</span>, <span style="color:#a31515;">&#34;Every minute&#34;</span>);
    <span style="color:#2b91af;">ScheduledTask </span>scheduledTask = <span style="color:blue;">null</span>;

    <span style="color:#666600;">Boolean </span>isCaught = <span style="color:blue;">false</span>;
    <span style="color:blue;">try
    </span>{
        target.AddTask(scheduledTask);
    }
    <span style="color:blue;">catch </span>(<span style="color:#2b91af;">ArgumentNullException</span>) { isCaught = <span style="color:blue;">true</span>; }
    <span style="color:#2b91af;">Assert</span>.IsTrue(isCaught);
}</pre>
<p>This works, but is a bit of a pain to write every time you want to check that an exception gets thrown by the method being tested.</p>
<p>I found a better approach at <a href="http://blogs.msdn.com/pedrosilva/archive/2007/09/24/testing-when-exceptions-are-expected.aspx">this blog post</a> by Pedro Silva of Microsoft.</p>
<p>I modified it slightly to take a generic type parameter instead of passing in the type as a formal parameter (a little easier in my opinion).</p>
<p>Now the unit test looks like this:</p>
<pre class="code">[<span style="color:#2b91af;">TestMethod</span>()]
<span style="color:blue;">public void </span>AddTaskTest()
{
    <span style="color:#2b91af;">Schedule </span>target = <span style="color:blue;">new </span><span style="color:#2b91af;">Schedule</span>(<span style="color:#a31515;">&#34;* * * * *&#34;</span>, <span style="color:#a31515;">&#34;Every minute&#34;</span>);
    <span style="color:#2b91af;">ScheduledTask </span>scheduledTask = <span style="color:blue;">null</span>;

    <span style="color:#2b91af;">UnitTestHelper</span>.TestException&#60;<span style="color:#2b91af;">ArgumentNullException</span>&#62;(() =&#62;
        target.AddTask(scheduledTask));
}</pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></p>
<p>Much simpler – especially when you’re testing for lots of exceptions!</p>
<p>I’m using a lambda expression in this example, but you can also use an anonymous delegate as in the blog.&#160; I just think lambdas are more succint, but either will do.</p>
<p>Here’s the code with my tweaks (comments removed for brevity – please check the original blog post for more info).</p>
<pre class="code"><span style="color:blue;">public static class </span><span style="color:#2b91af;">UnitTestHelper
</span>{
    <span style="color:blue;">static public void </span>TestException&#60;T&#62;(<span style="color:magenta;">Action </span>action)
    {
        <span style="color:blue;">try
        </span>{
            action();
            <span style="color:#2b91af;">Assert</span>.Fail(<span style="color:#a31515;">&#34;Test should have thrown exception &#34; </span>+
                <span style="color:blue;">typeof</span>(T).Name + <span style="color:#a31515;">&#34;.&#34;</span>);
        }
        <span style="color:blue;">catch </span>(<span style="color:#2b91af;">AssertFailedException</span>) { <span style="color:blue;">throw</span>; }
        <span style="color:blue;">catch </span>(<span style="color:#2b91af;">Exception </span>e)
        {
<span style="color:green;">            </span><span style="color:#2b91af;">Assert</span>.IsInstanceOfType(e, <span style="color:blue;">typeof</span>(T),
                <span style="color:#a31515;">&#34;Exception is not of the expected type.&#34;</span>, <span style="color:blue;">typeof</span>(T).Name);
        }
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Generating a model from the Database using AjGenesis]]></title>
<link>http://ajlopez.wordpress.com/2009/11/28/generating-a-model-from-the-database-using-ajgenesis/</link>
<pubDate>Sat, 28 Nov 2009 22:46:07 +0000</pubDate>
<dc:creator>ajlopez</dc:creator>
<guid>http://ajlopez.wordpress.com/2009/11/28/generating-a-model-from-the-database-using-ajgenesis/</guid>
<description><![CDATA[AjGenesis, my code generation open source project, use tasks, templates and a free model, to generat]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>AjGenesis, my code generation open source project, use tasks, templates and a free model, to generate text artifacts, usually source code. Most of the examples use models serialized as XML or text files. But you can use anything as the initial input. Even a model could be the output of this process. Month ago, I wrote about <a href="http://ajlopez.wordpress.com/2008/04/21/ajgenesis-generating-the-model-from-the-database/" target="_blank">generating the model from the database</a>. In my opinion, the database is not the more expressive model to use as starting point, but it is an ubiquitous one (you should admit: I’m improving my English vocabulary…;-)</p>
<p>In my current agile project, the team took the database as the base model. Actually, we are using a more abstract model, but the database was a good asset to use as first model.</p>
<p>So, I back to play with my old example, and improved it. You can download the current example from my Skydrive <a href="http://cid-9f903f3d6db0c176.skydrive.live.com/self.aspx/Examples/AjGenesis/DatabaseExample01.zip" target="_blank">DatabaseExample01.zip</a>. (the code in flux is in the code repository at Codeplex, under examples\DatabaseExamples).</p>
<p>After download and expand it, you have the folders:</p>
<p><img src="http://www.ajlopez.com/images/articles2/ajgenesisdb04.png" /> </p>
<p>The content of Projects\Northwind\Metadata.xml:</p>
<pre>
<pre style="background-color:#ffffff;width:100%;font-family:consolas;font-size:12px;margin:0;"><span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Metadata</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Project</span><span style="color:#0000ff;">&#62;</span>
    <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>Northwind<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Project</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Database</span><span style="color:#0000ff;">&#62;</span>
    <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>Northwind<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>
    <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">ConnectionString</span><span style="color:#0000ff;">&#62;</span>server=.\SQLEXPRESS;database=Northwind;Integrated Security=true<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">ConnectionString</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Database</span><span style="color:#0000ff;">&#62;</span>
<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Metadata</span><span style="color:#0000ff;">&#62;</span></pre>
</pre>
<p>It describes the connection string to use to connect to example database. It use Northwind database, in SQL Server (full or express). If you don’t have Northwind, the creation scripts are in Sql folder.</p>
<p>To create the project and entities (the model to generate), run:</p>
<p><font face="Consolas">MakeModelFromDatabase.cmd</font></p>
<p>AjGenesis (compiled in Bin folder) begin to work:</p>
<p><img src="http://www.ajlopez.com/images/articles2/ajgenesisdb02.png" /> </p>
<p>The executed commad contains:</p>
<p><font face="Consolas">Bin\AjGenesis.Console Projects\Northwind\Metadata.xml Tasks\DatabaseProcess.ajg</font></p>
<p>This command loads Metadata.xml as model in memory, and executes the AjBasic task DatabaseProcess.ajg. This tasks use <a href="http://msdn.microsoft.com/en-us/library/ms186778.aspx" target="_blank">Information Schema views</a> to obtain information about database structure (using information schema views opens the possibility of database independence).</p>
<p>The task creates Projects\Northwind\Project.xml file:</p>
<pre>
<pre style="background-color:#ffffff;width:100%;font-family:consolas;font-size:12px;margin:0;"><span style="color:#0000ff;">&#60;?</span>xml version=&#34;1.0&#34; encoding=&#34;ISO-8859-1&#34; standalone=&#34;yes&#34;<span style="color:#0000ff;">?&#62;</span>
<span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Project</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>Northwind<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Model</span><span style="color:#0000ff;">&#62;</span>
    <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entities</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Customer.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Shipper.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Supplier.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Order.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Product.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/OrderDetail.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/CustomerCustomerDemo.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/CustomerDemographic.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Region.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Territory.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/EmployeeTerritory.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Employee.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span> <span style="color:#ff0000;">Source</span>=<span style="color:#0000ff;">&#34;Entities/Category.xml&#34;</span><span style="color:#0000ff;">/&#62;</span>
    <span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Entities</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Model</span><span style="color:#0000ff;">&#62;</span>
<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Project</span><span style="color:#0000ff;">&#62;</span>
</pre>
</pre>
<p>The project and entities are similar to the ones I used in <a href="http://ajlopez.wordpress.com/2007/11/12/application-generation-using-ajgenesis/" target="_blank">Application generationg using AjGenesis</a> (but there are not the same). Part of the generated file Projects\Northwind\Entities\Customer.xml:</p>
<pre>
<pre style="background-color:#ffffff;width:100%;font-family:consolas;font-size:12px;margin:0;"><span style="color:#0000ff;">&#60;?</span>xml version=&#34;1.0&#34; encoding=&#34;ISO-8859-1&#34; standalone=&#34;yes&#34;<span style="color:#0000ff;">?&#62;</span>
<span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Entity</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>Customer<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Description</span><span style="color:#0000ff;">&#62;</span>Customer<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Description</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SetName</span><span style="color:#0000ff;">&#62;</span>Customers<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Descriptor</span><span style="color:#0000ff;">&#62;</span>Customer<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Descriptor</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SetDescriptor</span><span style="color:#0000ff;">&#62;</span>Customers<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">SetDescriptor</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SqlCatalog</span><span style="color:#0000ff;">&#62;</span>Northwind<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">SqlCatalog</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SqlSchema</span><span style="color:#0000ff;">&#62;</span>dbo<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">SqlSchema</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SqlName</span><span style="color:#0000ff;">&#62;</span>Customers<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">SqlName</span><span style="color:#0000ff;">&#62;</span>
  <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Properties</span><span style="color:#0000ff;">&#62;</span>
    <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Property</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>CustomerID<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Name</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">Description</span><span style="color:#0000ff;">&#62;</span>CustomerID<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Description</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SqlName</span><span style="color:#0000ff;">&#62;</span>CustomerID<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">SqlName</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SqlLength</span><span style="color:#0000ff;">&#62;</span>5<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">SqlLength</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">IsKey</span><span style="color:#0000ff;">&#62;</span>True<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">IsKey</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SqlType</span><span style="color:#0000ff;">&#62;</span>nchar<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">SqlType</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">SystemType</span><span style="color:#0000ff;">&#62;</span>String<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">SystemType</span><span style="color:#0000ff;">&#62;</span>
      <span style="color:#0000ff;">&#60;</span><span style="color:#800000;">IsNullable</span><span style="color:#0000ff;">&#62;</span>False<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">IsNullable</span><span style="color:#0000ff;">&#62;</span>
    <span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Property</span><span style="color:#0000ff;">&#62;</span>
....
  <span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Properties</span><span style="color:#0000ff;">&#62;</span>
<span style="color:#0000ff;">&#60;/</span><span style="color:#800000;">Entity</span><span style="color:#0000ff;">&#62;</span>
</pre>
</pre>
<p>The main logic resides in Tasks\DatabaseProcess.ajg, written in AjBasic dynamic language, fragment:</p>
<pre>
<pre style="background-color:#ffffff;width:100%;font-family:consolas;font-size:12px;margin:0;">cmd = <span style="color:#0000ff;">new</span> System.Data.SqlClient.SqlCommand()
cmd.Connection = conn
cmd.CommandText = &#34;<span style="color:#8b0000;">select * from Information_Schema.Tables where Table_Type = 'BASE TABLE'</span>&#34;
conn.Open()
PrintLine &#34;<span style="color:#8b0000;">Reader</span>&#34;
dr = cmd.ExecuteReader()
Tables = CreateList()
<span style="color:#0000ff;">while</span> dr.Read()
  PrintLine &#34;<span style="color:#8b0000;">Table </span>&#34; &#38; dr.Item(&#34;<span style="color:#8b0000;">Table_Name</span>&#34;) &#38; &#34;<span style="color:#8b0000;">: </span>&#34; &#38; dr.Item(&#34;<span style="color:#8b0000;">Table_Type</span>&#34;)
  Table = CreateObject()
  Table.SqlCatalog = dr.Item(&#34;<span style="color:#8b0000;">Table_Catalog</span>&#34;)
  Table.SqlSchema = dr.Item(&#34;<span style="color:#8b0000;">Table_Schema</span>&#34;)
  Table.SqlName = dr.Item(&#34;<span style="color:#8b0000;">Table_Name</span>&#34;)
  Table.Name = Table.SqlName.Replace(&#34;<span style="color:#8b0000;"> </span>&#34;,&#34;<span style="color:#8b0000;"></span>&#34;)

  <span style="color:#0000ff;">if</span> IsPlural(Table.Name) <span style="color:#0000ff;">then</span>
    Table.SetName = Table.Name
    Table.Name = ToSingular(Table.Name)
  <span style="color:#0000ff;">else</span>
    Table.SetName = ToPlural(Table.Name)
  <span style="color:#0000ff;">end</span> <span style="color:#0000ff;">if</span>

  Table.Descriptor = Table.Name
  Table.SetDescriptor = Table.SetName

  Table.Description = Table.Name

  Tables.Add(Table)
<span style="color:#0000ff;">end</span> <span style="color:#0000ff;">while</span>
dr.Close()</pre>
</pre>
<h3>Possible improvements</h3>
<p>This examples is a “proof of concept”. To be used in a more general way, it should be improved. Some points to work:</p>
<p>- Use the generated model to generate a working application, scaffolding or not.</p>
<p>- Support of more meta data obtained via Information Schema</p>
<p>- Try another databases, try a real example</p>
<p>- Relation treatment: detecting cascade and other actions</p>
<p>Another posts about initial models for AjGenesis:</p>
<p><a href="http://ajlopez.wordpress.com/2008/10/02/another-model-for-ajgenesis/" target="_blank">Another model for AjGenesis</a></p>
<p><a href="http://ajlopez.wordpress.com/2008/09/28/textual-model-for-code-generation-in-ajgenesis/" target="_blank">Textual model for code generation in AjGenesis</a></p>
<p><a href="http://ajlopez.wordpress.com/2008/04/23/ajgenesis-generating-the-model-from-assemblies/" target="_blank">AjGenesis: Generating the model from assemblies</a></p>
<p><a href="http://ajlopez.wordpress.com/2008/04/21/ajgenesis-generating-the-model-from-the-database/" target="_blank">AjGenesis: Generating the model from the database</a></p>
<p>Angel “Java” Lopez<br />
  <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a></p>
<p><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Silverlight Bits&amp;Pieces - Part 9: A MessageBox replacement]]></title>
<link>http://ajdotnet.wordpress.com/2009/11/28/silverlight-bitspieces-part-9-a-messagebox-replacement/</link>
<pubDate>Sat, 28 Nov 2009 18:01:47 +0000</pubDate>
<dc:creator>ajdotnet</dc:creator>
<guid>http://ajdotnet.wordpress.com/2009/11/28/silverlight-bitspieces-part-9-a-messagebox-replacement/</guid>
<description><![CDATA[OK, let’s put the brand new service provider model to some good use. Whenever a service call reports]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>OK, let’s put the <a href="http://ajdotnet.wordpress.com/2009/11/14/silverlight-bitspieces-part-8-application-extensions/" target="_blank">brand new service provider model</a> to some good use.</p>
<p>Whenever a service call reports an error I want some message box telling me about it (rather than simply swallowing it, which is the default behavior). Whenever the user does something potentially devastating I want some explicit confirmation, read message box, that he knows what he’s doing. <a href="http://msdn.microsoft.com/en-us/library/ms598690(VS.95).aspx" target="_blank"><em>MessageBox.Show</em></a> does all I need (well, it is restricted to OK and OK/Cancel, but one can live with that). Only&#8230; these system message boxes are dull, boring, and not at all a shiny example for a Silverlight application. <em>Enter the message box service provider…</em></p>
<p><strong>Basic implementation of a message box service</strong></p>
<p>The basic implementation will get the infrastructure up and running.</p>
<p>The first step is defining the service contract. Show this and that and a query method. The first (and naive) version looks like this:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_interface1.jpg" /> </p>
<p>The default implementation of our <em>application extension service turned service provider</em> (AES/SP) would use the dull system message boxes to implement that. The code is actually quite straight forward:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_messageboxservice.jpg" /> </p>
<p>Now, I could demand that the app.xaml has this one (or any other service implementing my interface) registered. However, I like to be <a href="http://en.wikipedia.org/wiki/Convention_over_Code" target="_blank">correct by default</a>, thus my accessor will fall back on this implementation if none is registered – and I can be sure that there will <em>always </em>be a respective service. </p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_zugriff2.jpg" /> </p>
<p>All that is left is a search&#38;replace for all calls to <a href="http://msdn.microsoft.com/en-us/library/ms598690(VS.95).aspx" target="_blank"><em>MessageBox.Show</em></a>&#8230; E.g. to show an error:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_verwendung_error.jpg" /> </p>
<p>… and to get confirmation, in this case to return a book:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_verwendung_confirm.jpg" /> </p>
<p>And, of course, it works as expected:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/app_messagebox.jpg" /> </p>
<p><strong>Replacing the Dialog </strong></p>
<p>Second act. Get rid of those dull things.</p>
<p>Create a new “Silverlight Child Window” and style it to look like a message box. I „borrowed“ the images from the Visual Studio Image Library (on my machine under <em>C:\Program Files\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary\1033\VS2008ImageLibrary\Objects\png_format\WinVista\</em>) and simply placed all possible images in the dialog. A textbox, two buttons, that’s it. Here is the styled XAML:</p>
<h3><a href="http://ajdotnet.files.wordpress.com/2009/11/xaml_messagebox_new.jpg" target="_blank"><img src="http://ajdotnet.files.wordpress.com/2009/11/xaml_messagebox_new.jpg" /></a> </h3>
<p>Some code is needed for the initialization. The message has to be set, the correct image made visible, etc.. I could probably have done this with less coding, using some tricks and elaborate databinding. But who cares, it’s straight forward and comprehensible (unlike what I probably would have come up with).</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_dialog.jpg" /> </p>
<p>Setting the <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.childwindow.dialogresult(VS.95).aspx" target="_blank"><em>DialogResult </em>property</a> also closes the dialog (sik!).</p>
<p>Finally I need a replacement AES/SP. The main method to show the dialog looks like this:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_messageboxservice_new.jpg" /> </p>
<p>Great? Great! &#8230; GOT YOU! (Fell into the trap myself, actually&#8230; :-/ )</p>
<p><strong>Fixing the Bug</strong></p>
<p>Remember that in Silverlight <em>everything</em> is asynchronous? Well, everything except <em><a href="http://msdn.microsoft.com/en-us/library/ms598690(VS.95).aspx" target="_blank">MessageBox.Show</a></em>? And ‘everything’ includes <em><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.childwindow.show(VS.95).aspx" target="_blank">ChildWindow.Show</a></em>! Meaning my confirm method will not work this way. To overcome this I decided to pass a delegate to the dialog constructor and made sure it’s called in the OK case: </p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_dialog_callback.jpg" /> </p>
<p>And to be able to pass the delegate I changed the existing AES as well (and the interface respectively):</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_messageboxservice_better.jpg" /> </p>
<blockquote><p>Of course I had to adjust the default implementation using a messagebox:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_messageboxservice_callback.jpg" /> </p>
</blockquote>
<p>The calling code changes respectively, passing a lambda:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/code_verwendung_confirm_new.jpg" /> </p>
<p>Done. Now my application looks nice, even if it has to show a message box:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/11/app_messagebox_new.jpg" /> </p>
<p><strong><a href="http://en.wikipedia.org/wiki/ANFSCD" target="_blank">ANFSCD</a>…</strong></p>
<p>This endeavor served actually three purposes: </p>
<ul>
<li>First, I wanted/needed the feature <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  </li>
<li>Second, I wanted to see/demonstrate the service provider pattern from a user’s point of view. </li>
<li>And third – as you may have noticed from some screenshots – I used this implementation to check out VS2010 beta. </li>
</ul>
<blockquote><p>A quick verdict about VS 2010 beta (not really worth a separate post)&#8230;</p>
<p>The core system, i.e. the shell, the C# code editor, build system, etc. feels very good. No apparent bugs, quite fast, including intellisense, and close enough to VS2008 to feel familiar. Considering that big parts of this are complete rewrites, this is quite an achievement.</p>
<p>The visual designer for (Silverlight) XAML works nice for user controls. Designing grids, the property pane, and other tasks, is at first glance en par with Blend, but comes in a more familiar „Visual Studio flavor“; still it feels more rich and mature than VS2008.      <br />However, there are some notable gaps. Editing of styles and templates, animations, and visual state manager are not covered. Thus my guess is that Blend will remain a necessary complement to VS, even if one has to switch less often. BTW: Contrary to <a href="http://timheuer.com/blog/archive/2009/10/22/can-i-use-vs2010-for-silverlight-3-development.aspx" target="_blank">what Tim wrote</a>, I could work with Blend on VS2010 solutions (the project that cannot be loaded is only the web project), I just refrained from manipulating my project files with Blend.</p>
<p>Other areas I touched briefly have been less satisfying. <a href="http://msdn.microsoft.com/en-us/library/dd997841(VS.100).aspx" target="_blank">IntelliTrace</a> didn’t work, but I didn’t spend too much time on that. The architecture and modeling area for example has changed, but is by no means bug free (to the point of “not yet usable”). The profiler has evolved, but IMO still lacks what DevPartner offered nearly 10 years ago: <a href="http://www.microfocus.com/products/DevPartner/StudioProfessionalEditionCapabilities.asp#6" target="_blank">a decent call graph</a>. </p>
<p>Oh, one bright spot for any dev lead: code analysis (FxCop) rules are now <a href="http://blogs.msdn.com/fxcop/archive/2008/11/12/fun-with-code-analysis-rulesets.aspx" target="_blank">maintained in separate files</a>, projects reference these files by name.</p>
<p>Anyway, I have been using VS2010 beta since I installed it and was never compelled to switch back to VS2008. I’m going to have to reinstall my machine anytime soon, and I’m planning on going along with VS2010 beta, not installing VS2008 at all.</p>
</blockquote>
<p><font color="#008000">That’s all for now folks,      <br /><strong>AJ.NET</strong></font></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http://ajdotnet.wordpress.com/2009/11/28/silverlight-bitspieces-part-9-a-messagebox-replacement/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://ajdotnet.wordpress.com/2009/11/28/silverlight-bitspieces-part-9-a-messagebox-replacement/" border="0" alt="kick it on DotNetKicks.com" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Easy Is Hard, Simple Is Harder]]></title>
<link>http://ophir.wordpress.com/2009/11/28/easy-is-hard-simple-is-harder/</link>
<pubDate>Sat, 28 Nov 2009 17:48:39 +0000</pubDate>
<dc:creator>ophirk</dc:creator>
<guid>http://ophir.wordpress.com/2009/11/28/easy-is-hard-simple-is-harder/</guid>
<description><![CDATA[Taken from http://scienceblogs.com/chaoticutopia/ It is easy to mistake a programming task to be sim]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div class="wp-caption alignnone" style="width: 360px"><img title="Three Bodies Problem" src="http://scienceblogs.com/chaoticutopia/upload/2006/06/3body.jpg" alt="Three Bodies Problem" width="350" height="214" /><p class="wp-caption-text">Taken from http://scienceblogs.com/chaoticutopia/</p></div>
<p>It is easy to mistake a programming task to be simple. This is especially true in user interface.</p>
<p>The executive is looking at the &#8220;<a href="http://www.nicklewis.org/node/845">trivial</a>&#8221; two fields login screen and innocently estimates it to be a two hours job.</p>
<p>This is a common mistake, similar to some extent to The <a href="http://www.scholarpedia.org/article/Three_body_problem">Three Body Problem</a> in physics. Taking a simple, solvable problem and changing one parameter can result in an exceptionally complex problem. While the two-body problem is integrable and its solutions completely understood, solutions of the <strong>three-body problem</strong> may be of an arbitrary complexity and are very far from being completely understood. See a nice graphic <a href="http://faculty.ifmo.ru/butikov/Projects/Collection5.html">example</a>.</p>
<p>Login screens are not that complex, but take a look at the next example and see how many open questions\bugs can you come up with ?</p>
<div id="attachment_1036" class="wp-caption alignnone" style="width: 369px"><a href="http://ophir.wordpress.com/files/2009/11/simple-login.png"><img class="size-full wp-image-1036" style="border:2px solid black;margin:2px;" title="Simple Login" src="http://ophir.wordpress.com/files/2009/11/simple-login.png" alt="Simple Login" width="359" height="131" /></a><p class="wp-caption-text">Simple Login</p></div>
<ol>
<li>Is it &#8220;Log-in&#8221; &#8220;Login&#8221; or &#8220;Log in&#8221;?</li>
<li>Is it clear that email is equivalent to user name?</li>
<li>Do you need a &#8220;Cancel&#8221; button?</li>
<li>Should there be a visible mark for the mandatory fields? Which mark?</li>
<li>Seems like a &#8220;Forgot My Password&#8221; link and screen are missing.</li>
<li>Is a Captcha needed to fight bots?</li>
<div class="wp-caption alignnone" style="width: 478px"><img title="Simple Login Form" src="http://images.patterntap.com/1/2/12145946614aa076d630b64.png" alt="Simple Login Form" width="468" height="317" /><p class="wp-caption-text">Simple Login Form</p></div>
<li>Is validation done on the client side or the server-side ?</li>
<li>How is the feedback given to the user? Where?</li>
<li>Security demands that we don&#8217;t tell the user what&#8217;s the exact problem (missing email or password). Usability does.</li>
<li>Where is the <a href="http://blog.leahculver.com/2009/11/log-in-or-sign-up.html">sign-up page</a>? Where does Log-Out go out to?</li>
<li>&#8220;Email&#8221; , &#8220;eMail&#8221; or &#8220;email&#8221;?</li>
<div class="wp-caption alignnone" style="width: 418px"><img title="Nice Login Form" src="http://s3.amazonaws.com/scrnshots.com/screenshots/747/VimeoLogIn_large.png" alt="Nice Login Form" width="408" height="208" /><p class="wp-caption-text">Nice Login Form</p></div>
<li>Do we use SSL for the login but move to clear HTTP for the rest of the application ?</li>
<li>Cross browser testing?</li>
<li>How shall we do unit testing for the screen?</li>
<li>It turns out that validating an email address can be a <a title="Regex for email parsing" href="http://ex-parrot.com/~pdw/Mail-RFC822-Address.html">nightmare.</a></li>
<li>After the user made a mistake, which events clear the warning notification?</li>
<li>Shall we support Hebrew? How about the German umlaut?</li>
<li>Shouldn&#8217;t &#8220;email&#8221; and &#8220;password&#8221; be left aligned?</li>
<li>Is the colon required after &#8220;Login&#8221;?</li>
<li>Do we want to limit the length for any of the fields? Minimum password strength?</li>
</ol>
<p>Notice how we got to twenty non trivial questions without discussing the actual user authentication or the<a href="http://dzineblog.com/2009/03/interface-design-inspiration-36-beautiful-login-pageform-designs.html"> graphic design</a>, which can be huge topics on their own.</p>
<p>My simplistic recommendation is to use of the shelf components whenever possible and go through the annoying step we used to call &#8220;feature design&#8221; even in this agile world we live in.</p>
<div class="wp-caption alignnone" style="width: 329px"><img title="Sample Login Screen" src="http://jelle.druyts.net/content/binary/WeFly247%20-%20LoginScreen.png" alt="Sample Login Screen" width="319" height="228" /><p class="wp-caption-text">Sample Login Screen</p></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Web design Company in Tamilnadu]]></title>
<link>http://sharontech.wordpress.com/2009/11/28/web-design-company-in-tamilnadu/</link>
<pubDate>Sat, 28 Nov 2009 13:47:57 +0000</pubDate>
<dc:creator>sharontech</dc:creator>
<guid>http://sharontech.wordpress.com/2009/11/28/web-design-company-in-tamilnadu/</guid>
<description><![CDATA[Sharon technology, leading best web designing company in India offers on all dedicated services in W]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Sharon technology, leading best web designing company in India offers on all dedicated services in Web Designing, Software Development, Web Hosting, Search Engine Optimization, E-Learning</p>
<p>Sharon technology is one of the Best Web Design Company to outsource your web designing needs in India. Our web designers specialize in fresh clean web designs with an artistic flare. We take the time to make sure you get the web design you want. Sharon technology guarantees quality that can help you transform your website into a more successful online business.</p>
<p>sharontechnology.com has been incorporating their service in web hosting, Application Development, Software Development, Web Designing, Server Maintenance, Mobile Application, E-learning, Gaming, VOIP Service provider, Gateway Communication provider and has proven its capability in handling dedicated project development in PHP, DOT NET, E-Accounting solutions, E-Commerce solutions, Content Management .Apart from this, we dedicated our service in B2B/ B2C Web Portals, Share Point Server ,Project Server, BizTalk Server are available at full time.</p>
<p>Dedicated resources used to be inline with offshore clients via chat and email support. If you want to design a website as per your business needs and want it to get progressed as and how you like, then the best option would be to hire an expert designer and get the job done under your supervision. This concept has proven to be most preferable because every business has its own needs &#38; vision and a designer when focused completely with your requirements moving ahead as your instructions can produce better results.</p>
<p>For a business oriented website, you need a designer, a developer and an internet marketer for complete progressive development. Businesses are orienting themselves in hiring a complete virtual IT team with all these expertise incorporated.<br />
Obviously, it’s most beneficial choice for many reasons. We have been delivering dedicated services since and have built a sound relationship with our clients.</p>
<p>Like after designing, client seeks a need of a dedicated developer following with the need of dedicated content writer and SEO expert. We thought why not combine experts from Designing, Website development, SEO and Content writing and build their team to deliver services on the project basis.</p>
<p>Our Company has developed many software products like E-learning for all colleges and universities, Server Security System, Gaming software, Blue chip software, SMS software, Banking software, Matrimony Software, Mobile software, Server Maintenance software etc. We deal with UK &#38; US Projects and also Local Projects at very reasonable Price .we have our own server Space LINUX in UK &#38; ORACLE in US.</p>
<p>The motto of Sharon technology is &#8221; Yes we can do anything&#8221; and happy to say we are proving as of now. Now we are happy to see that clients are appreciating our work and showed their interest to buy our products.</p>
<p>To know more details visit our site<a class="alignleft" title="Web Designing company in Tamilnadu" href="http://www.sharontechnology.com" target="_blank"> http://www.sharontechnology.com</a></p>
<p><a href="http://www.sharontechnology.com"></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Good Links, November 27, 2009]]></title>
<link>http://emadmagdy.wordpress.com/2009/11/27/good-links-november-27-2009/</link>
<pubDate>Fri, 27 Nov 2009 16:54:24 +0000</pubDate>
<dc:creator>emadmagdy</dc:creator>
<guid>http://emadmagdy.wordpress.com/2009/11/27/good-links-november-27-2009/</guid>
<description><![CDATA[Second edition of the Microsoft application architecture guide is released: http://blogs.msdn.com/jm]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Second edition of the Microsoft application architecture guide is released: <a title="http://blogs.msdn.com/jmeier/archive/2009/11/24/now-available-final-pdf-of-the-microsoft-application-architecture-guide-second-edition.aspx" href="http://blogs.msdn.com/jmeier/archive/2009/11/24/now-available-final-pdf-of-the-microsoft-application-architecture-guide-second-edition.aspx">http://blogs.msdn.com/jmeier/archive/2009/11/24/now-available-final-pdf-of-the-microsoft-application-architecture-guide-second-edition.aspx</a>&#160;</p>
<p>&#160;</p>
<p>Overview of some Fortune 500 Web sites shopping carts: <a title="http://designreviver.com/articles/case-study-fortune-500-companies-their-shopping-carts/?utm_source=feedburner&#38;utm_medium=feed&#38;utm_campaign=Feed%3A+DesignReviver+%28Design+Reviver%29" href="http://designreviver.com/articles/case-study-fortune-500-companies-their-shopping-carts/?utm_source=feedburner&#38;utm_medium=feed&#38;utm_campaign=Feed%3A+DesignReviver+%28Design+Reviver%29">http://designreviver.com/articles/case-study-fortune-500-companies-their-shopping-carts/?utm_source=feedburner&#38;utm_medium=feed&#38;utm_campaign=Feed%3A+DesignReviver+%28Design+Reviver%29</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Are You a Java Developer?]]></title>
<link>http://jstevenperry.wordpress.com/2009/11/27/are-you-a-java-developer/</link>
<pubDate>Fri, 27 Nov 2009 14:44:01 +0000</pubDate>
<dc:creator>jstevenperry</dc:creator>
<guid>http://jstevenperry.wordpress.com/2009/11/27/are-you-a-java-developer/</guid>
<description><![CDATA[If you are a Java developer, or know one, or can spell Java, or drink coffee, you need the new Log4J]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>If you are a Java developer, or know one, or can spell Java, or drink coffee, you need the new Log4J Shortcut from O&#8217;Reilly! It&#8217;s only 5 bucks (the price of a frapa-moco-latteccino from Starbucks &#8211; well, if you get whipped cream and sprinkles on it, but who doesn&#8217;t?!?). And you can get it <a href="http://oreilly.com/catalog/9780596805319/">here</a> .</p>
<p>Seriously, though, every time I need to do something with log4j that I&#8217;ve never done before, or have forgotten how to do (and don&#8217;t have an example to copy and modify), I start Googling around the internet looking for an example, and usually come up with nothing. Then I get the source code and start poking around in that (but only if it&#8217;s been so long since I last did that, that I&#8217;ve forgotten how painful it is to do). I think most developers are in this boat, and MUCH of the power of log4j goes unexploited as a result.</p>
<p>When O&#8217;Reilly asked me to do a ShortCut on log4j I was all, &#8220;Hey, man, does anybody use log4j directly anymore (because of Jakarta Commons)?&#8221; and &#8220;It&#8217;s so simple, why would you need another book on it?&#8221; and &#8220;There is a book on it, right?&#8221; As it turns out, you can buy Ceki&#8217;s (the log4j creator) book for around $20.00. I did. And I&#8217;d rather take my chances with a Google search. The information is not well organized, and the examples really really (really) suck. I wanted to write a guide to log4j configuration. Using log4j is dead simple. It&#8217;s configuring it that always gives me the heeby jeebies.</p>
<p>So, if you want to ramp up your log4j game, you need this Short Cut.</p>
<p>Now, please forward this to everyone you know, and Bill Gates might send you that $75 you&#8217;ve been waiting on. I&#8217;m just saying&#8230; it could happen.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Grub Error 22]]></title>
<link>http://tp998.wordpress.com/2009/11/27/grub-error-22/</link>
<pubDate>Fri, 27 Nov 2009 13:31:35 +0000</pubDate>
<dc:creator>tp998</dc:creator>
<guid>http://tp998.wordpress.com/2009/11/27/grub-error-22/</guid>
<description><![CDATA[Grub Error 22 I recently suffered an error with grub giving error 22,This error is caused by grub no]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>Grub Error 22</strong></p>
<p>I recently suffered an error with grub giving error 22,This error is caused by grub not being able to find the Linux partition i deleted Linux from the partition</p>
<p>To solve this issue first download the vista recovery disk from</p>
<p>http://neosmart.net/blog/2008/windows-vista-recovery-disc-download/</p>
<p>The disk is available as a torrent so you will need a torrent downloader i.e Utorrent</p>
<p>Set to boot from CD, On my laptop to boot from cd you need to access the bios and look at the boot order.Once the order is changes the vista recovery cd should boot. Once booted select Command Prompt and enter the following command</p>
<p>bootrec /fixboot<br />
bootrec /fixmbr</p>
<p>This will restore the Microsoft bootloader and allow you to access windows again</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Speed Matters]]></title>
<link>http://garybopencrm.wordpress.com/2009/11/27/speed-matters/</link>
<pubDate>Fri, 27 Nov 2009 13:21:32 +0000</pubDate>
<dc:creator>garybell</dc:creator>
<guid>http://garybopencrm.wordpress.com/2009/11/27/speed-matters/</guid>
<description><![CDATA[With today&#8217;s high-speed internet we all want everything as fast as we possibly can have it.  E]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>With today&#8217;s high-speed internet we all want everything as fast as we possibly can have it.  Especially from the perspective of web pages.  Gone <span style="text-decoration:line-through;">are</span> should be the days where you click on a link and go away for a coffee whilst you wait for it to load.  However, I found myself with just that problem this week with a section of our <a title="OpenCRM Portal" href="http://portal.opencrm.co.uk" target="_blank">online customer portal</a>.</p>
<p>90% of the features were lovely and responsive but there was the 10%, the documents, where you always had to wait for even the smallest number of results to show on the page.  The good thing about it, if you can call it that, is that it always worked at the same speed, regardless of number of results.  But really, should it be returning 1 result at the same speed as 100?  I thought not, especially when that return time was upwards seemingly high, and my boss agreed.  I had a test account on there with half a dozen documents linked, which took about 15 seconds to load.  15 seconds to load a web page, sometimes more, is a long time for people to wait.  There had to be a better solution.</p>
<p>The difficult part is the question of &#8220;where do you start?&#8221;.  Do you look to see what can easily be changed to speed things up at all?  Do you look for where the largest slow down is, regardless of how complex it may be?  Really, where do you start?</p>
<p>Fortunately I knew where the major slowdown was, I just had to think how it could be changed.  This, it transpired, required a re-write of the whole thing, pretty much.  I have to hold my hands up and say it was me who made it the way it was in the first place, I just didn&#8217;t think it through fully.  Afterall, no one is perfect.  Still, this put me in the ideal position of knowing what my code was doing and what was, or wasn&#8217;t, important.</p>
<p>Still, one re-write later and some heavy testing, I have managed to improve performance dramatically (it&#8217;s over 5 times faster) so thats good.</p>
<p>A lesson I took from this, if you think there should be a better way, there usually is!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Data View Web Part: Simple Case XSLT View]]></title>
<link>http://platinumdogs.wordpress.com/2009/11/27/data-view-web-part-simple-case-xslt-view/</link>
<pubDate>Fri, 27 Nov 2009 12:38:51 +0000</pubDate>
<dc:creator>Phil Harding</dc:creator>
<guid>http://platinumdogs.wordpress.com/2009/11/27/data-view-web-part-simple-case-xslt-view/</guid>
<description><![CDATA[The Data View Web Part is a very useful web part, especially as it allows you to easily customize th]]></description>
<content:encoded><![CDATA[The Data View Web Part is a very useful web part, especially as it allows you to easily customize th]]></content:encoded>
</item>
<item>
<title><![CDATA[]]></title>
<link>http://ansgroups.wordpress.com/2009/11/27/41/</link>
<pubDate>Fri, 27 Nov 2009 12:20:49 +0000</pubDate>
<dc:creator>Ans Groups</dc:creator>
<guid>http://ansgroups.wordpress.com/2009/11/27/41/</guid>
<description><![CDATA[Art on Watermelon: The Latest Carving (Sculpture) of Melon all over the world by takashi itoh. For e]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h1><span style="color:#ff0000;"><a href="http://www.ansgroups.com/index.php" target="_blank">Art on Watermelon:</a></span></h1>
<h3><strong><span style="color:#008000;"><a href="http://www.ansgroups.com/index.php" target="_blank">The Latest Carving (Sculpture) of Melon all over the world by takashi itoh. For example, stone, tree, ice, and food. Here, Takashi Itoh introduces the fruit-vegetable sculpture of the Kingdom of Thailand influenced most for his technique.</a></span></strong></h3>
<h3><strong><span style="color:#008000;"><a href="http://www.ansgroups.com/index.php" target="_blank">Art of Thai vegetable and fruit carving originated from the floating lantern festival (Loi Krathong Festival) of the kingdom of Thailand at Sukhothai dynasty 700 years ago.</a></span></strong></h3>
<p><a href="http://ansgroups.com"><img class="alignnone size-medium wp-image-42" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-1.jpg?w=300" alt="" width="300" height="300" /></a></p>
<p><a href="http://ansproperty.com" target="_blank"><img class="alignnone size-medium wp-image-43" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-2.jpg?w=300" alt="" width="300" height="300" /></a></p>
<p><a href="http://www.coolcampusguide.com" target="_blank"><img class="alignnone size-medium wp-image-44" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-3.jpg?w=300" alt="" width="300" height="193" /></a></p>
<p><a href="http://ansgroups.com"><img class="alignnone size-medium wp-image-45" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-4.jpg?w=242" alt="" width="242" height="300" /></a></p>
<p><a href="http://ansproperty.com" target="_blank"><img class="alignnone size-medium wp-image-47" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-5.jpg?w=300" alt="" width="300" height="300" /></a></p>
<p><a href="http://www.coolcampusguide.com/" target="_blank"><img class="alignnone size-medium wp-image-48" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-6.jpg?w=286" alt="" width="286" height="300" /></a></p>
<p>.<a href="http://ansgroups.com"><img class="alignnone size-medium wp-image-49" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-7.jpg?w=237" alt="" width="237" height="300" /></a><br />
<a href="http://ansproperty.com" target="_blank"><img class="alignnone size-medium wp-image-50" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-8.jpg?w=289" alt="" width="289" height="300" /></a><br />
<a href="http://www.coolcampusguide.com" target="_blank"><img class="alignnone size-medium wp-image-51" title="ANS Groups" src="http://ansgroups.wordpress.com/files/2009/11/7-the-latest-carving-9.jpg?w=300" alt="" width="300" height="300" /></a></p>
<p>.</p>
<p><a href="http://www.ansgroups.com/index.php" target="_blank">.</a><a href="http://www.ansgroups.com/index.php" target="_blank"><br />
</a></p>
<p><a href="http://www.ansgroups.com/index.php" target="_blank">.</a><a href="http://www.ansgroups.com/index.php" target="_blank"><br />
</a></p>
<p><a href="http://www.ansgroups.com/index.php" target="_blank">.</a><a href="http://www.ansgroups.com/index.php" target="_blank"><br />
</a></p>
<h3><strong><span style="color:#ff6600;"><a href="http://www.ansgroups.com/index.php" target="_blank">(About ANS Groups  ,Click here&#8230;&#8230;)</a></span></strong></h3>
</div>]]></content:encoded>
</item>

</channel>
</rss>
