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

<channel>
	<title>Greg Does IT</title>
	<atom:link href="http://gregdoesit.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregdoesit.com</link>
	<description>Do it to get it</description>
	<pubDate>Fri, 05 Mar 2010 15:33:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Slides and code for the presentation &#8220;An Introduction to Silverlight&#8221;</title>
		<link>http://gregdoesit.com/2010/03/slides-and-code-for-the-presentation-an-introduction-to-silverlight/</link>
		<comments>http://gregdoesit.com/2010/03/slides-and-code-for-the-presentation-an-introduction-to-silverlight/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 15:33:05 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[cocktail]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[presentation]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=359</guid>
		<description><![CDATA[On yesterday&#8217;s Scot Alt.NET meeting I held a presentation (An Introduction to Silverlight) that was aimed at providing an overview of Silverlight and looking at some of it&#8217;s most important features. Thanks to the about 30 people who&#8217;ve attended and given feedback, I hope you&#8217;ve found it useful. For those who have missed out I&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<p>On yesterday&#8217;s Scot Alt.NET meeting I held a presentation (<a href="http://scotalt.net/blog/2010/01/22/an-introduction-to-silverlight-thursday-4th-march-2010-at-microsoft-edinburgh/">An Introduction to Silverlight</a>) that was aimed at providing an overview of Silverlight and looking at some of it&#8217;s most important features. Thanks to the about 30 people who&#8217;ve attended and given feedback, I hope you&#8217;ve found it useful. For those who have missed out I&#8217;ll be writing up some follow up blog posts on the same topic.</p>
<h3>Slides &#038; code</h3>
<p>The slides and code of the talk are available for download:</p>
<ul>
<li><a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/SL.ppt">An Introduction To Silverlight</a> - presentation, PowerPoint format</li>
<li><a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/SL.odp">An Introduction To Silverlight</a> - presentation, OpenOffice Impress format</li>
<li><a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/1_XamlExample.zip">XAML example source code</a></li>
<li><a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/2_VideoBrushExample.zip">VideoBrush</a> example source code (large file as it contains the sample video as well!)</li>
<li><a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/3_StylingExample.zip">Styling and templating</a> example source code</li>
<li><a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/4_DependencyProperties.zip">Dependency Properties</a> example source code</li>
<li><a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/5_AttachedProperties.zip">Attached Properties</a> example source code (this one I didn&#8217;t show in the presentation)</li>
<li><a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/6_MVVMExample.zip">MVVM</a> example source code</li>
</ul>
<h3>Cool Silverlight applications</h3>
<p>Some interesting links worth looking at (the ones I couldn&#8217;t show at the end of the presentation):</p>
<ul>
<li>A great DeepZoom example: <a href="http://www.jumpman23mosaic.com">Michael Jordan mosaic</a></li>
<li><a href="http://silverlight.net/content/samples/apps/facebookclient/">Silverlight client for Facebook</a> (needs Silverlight 4)</li>
<li>The cocktail page <a href="http://icocktail.co.uk/#/random-cocktail">in Flash</a> and the version I&#8217;ve developed rapidly in <a href="http://mix10k.visitmix.com/entry/details/212">in Silverlight<a/></li>
<li><a href="http://silverlight.net/showcase/">Other good Silverlight examples</a></li>
</ul>
<h3>Brief summary of the talk</h3>
<p>The structure of the talk was the following:</p>
<ul>
<li><b>What is Silverlight?</b><br/>A short and simple explanation: RIA concepts, relation to WPF, competitors</li>
<li><b>Flash vs Silverlight</b><br/>An overview focusing on the <em>differences</em> of the technologies and their features.</li>
<li><b>Silverlight (and WPF) features</b><br/>Features that make Silverlight and WPF different than their predecessor technologies (e.g. WinForms and WebForms). Overview of how Silverlight is more limited than WPF</li>
<li><b>XAML</b><br/>What is it, why it&#8217;s good and how it works. Overview and <a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/1_XamlExample.zip">demo</a>.</li>
<li><b>UI Basics</b><br/>Silverlight introduces a new way of handling the UI. Brief overview of how this is done and <a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/2_VideoBrushExample.zip">demo of the VideoBrush</a></li>
<li><b>Styling and templating</b><br/>Silverlight is very powerful in customizing user interface through styling and templating. <a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/3_StylingExample.zip">Demo</a> of styling a button and then completely changing the looks of this button with templating</li>
<li><b>Dependency Properties</b><br/>One of the most significant features Silverlight (and WPF) introduce are Dependency Properties. Overview of how these properties add functionality compared to CLR properties by providing property changed notification, data binding, animation, DefaultValue and ClearValue. <a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/4_DependencyProperties.zip">Demo</a> of how Dependency Properties can be used</li>
<li><b>Attached Properties</b><br/>(On the presentation I skipped this part) Brief overview of attached properties, <a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/5_AttachedProperties.zip">demo</a>.</li>
<li><b>MVVM</b><br/>Overview of the Model View ViewModel concept and why it is useful. <a href="http://gregdoesit.com/files/AnIntroductionToSilverlight-2010-03/6_MVVMExample.zip">Demo</a> of a simple application designed with MVVM.</li>
<li><b>Effort To Learn Silverlight</b><br/>My thoughts of how much effort it takes to learn certain parts of Silverlight if coming from a .NET background</li>
<li><b>Why It&#8217;s Worth It</b><br/>Some inspiration on why it&#8217;s worth jumping into Silverlight development.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2010/03/slides-and-code-for-the-presentation-an-introduction-to-silverlight/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using fonts in Silverlight: evaluating the options</title>
		<link>http://gregdoesit.com/2010/03/using-fonts-in-silverlight-evaluating-the-options/</link>
		<comments>http://gregdoesit.com/2010/03/using-fonts-in-silverlight-evaluating-the-options/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 17:35:03 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[code snipplet]]></category>

		<category><![CDATA[Fonts]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=354</guid>
		<description><![CDATA[Silverlight gives the developer the possibility of completely customizing the developed application in all aspects. Defining fonts used for displaying text is no exception. However there are multiple ways on how to go ahead with specifying fonts to use, this article attempts to summarize the options.
In Silverlight, using fonts can be done in three ways:

Built-in [...]]]></description>
			<content:encoded><![CDATA[<p>Silverlight gives the developer the possibility of completely customizing the developed application in all aspects. Defining fonts used for displaying text is no exception. However there are multiple ways on how to go ahead with specifying fonts to use, this article attempts to summarize the options.</p>
<p>In Silverlight, using fonts can be done in three ways:</p>
<ul>
<li><strong>Built-in fonts</strong><br/>Silverlight can use a limited number of &#8220;built-in&#8221; fonts to display text such as Arial, Verdana, Times New Roman and a couple of more. The list is limited and it&#8217;s also worth noting that Silverlight can only use these fonts if they are installed on the client machine as the runtime does not ship with any fonts.</li>
<li><strong>Embedded custom fonts</strong><br/>Custom font files can be embedded in Silverlight applications and then shipped within the xap files. This option makes sure that the font will be rendered as wanted regardless of wether the font is installed on the client machine or not.</li>
<li><strong>Streamed (dynamically downloaded) custom fonts</strong><br/>The problem with embedding fonts in Silverlight is that it increases the xap size. If a font is only needed in certain cases the font file can be dynamically loaded from a remote location making the initial download time faster.</li>
</ul>
<p>For details on how to implement the above use cases and some sample applications with source code check out my blog post on the Scott Logic website: <a href="http://www.scottlogic.co.uk/blog/gergely/2010/03/using-built-in-embedded-and-streamed-fonts-in-silverlight/">Using built-in, embedded and streamed fonts in Silverlight</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2010/03/using-fonts-in-silverlight-evaluating-the-options/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Workspace alternatives: a comprehensive comparison</title>
		<link>http://gregdoesit.com/2010/02/workspace-alternatives-a-comprehensive-comparison/</link>
		<comments>http://gregdoesit.com/2010/02/workspace-alternatives-a-comprehensive-comparison/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 23:03:50 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[Tools]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Project Management]]></category>

		<category><![CDATA[Sense/Net 6.0]]></category>

		<category><![CDATA[Sharepoint]]></category>

		<category><![CDATA[Workspace]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=322</guid>
		<description><![CDATA[Teamwork isn&#8217;t an easy sport: the bigger the team the harder it gets. If the goals/milestones are set clear, one person will probably complete the project just fine. If it&#8217;s a team of two they&#8217;ll probably split up the work, track each other progress and finish in time. If its one of three, four or [...]]]></description>
			<content:encoded><![CDATA[<p>Teamwork isn&#8217;t an easy sport: the bigger the team the harder it gets. If the goals/milestones are set clear, one person will probably complete the project just fine. If it&#8217;s a team of two they&#8217;ll probably split up the work, track each other progress and finish in time. If its one of three, four or five they&#8217;ll probably start calling meetings, send emails, update their progress. If it&#8217;s a team of over 20, there&#8217;ll probably be people working full time just managing the communication between teams.</p>
<p>As the team grows the overhead of coordinating work just increases. I&#8217;m sure everyone has realized at some point that emails and Excel sheets are quite limited at managing things as the project grows and sticky notes work good, but not with distributed teams.</p>
<p>Of course lots of others have realized this problem before and created software to aid this process: these tools are usually referred to as project management tools or (virtual) workspace solutions. The idea of these is to have users store and update documents in the workspace, be able to constantly track their and others&#8217; progress and make collaboration easy in this space. There are lots of promising workspace solutions: when first searching I came across at least two dozen seemingly good products/services.</p>
<p>One of the most efficient and popular way to help manage comlpex projects is by providing workspaces to users - a common shared storage area related to a specific task. Users can upload and share documents related to the project to the workplace, collaborate with other users involved in the project and track what is going on in the workspace.</p>
<p>Back in September 2009 while I took up the task to test the major players in workspace management fields so that the company would have a picture of where their workspace module was on the market. This study never got published however while doing the research I didn&#8217;t find any useful comparisons that were not funded by some vendor. I&#8217;ve left Sense/Net in October 2009 and decided to publish my research as it might be a good guideline for someone looking for a short list of project management tools.</p>
<p>The products evaluated in this comparison are <span style="font-weight: bold"><a href="http://www.centraldesktop.com/" target="_blank"><span style="font-weight: normal">Central Desktop</span></a><span style="font-weight: normal">, </span><a href="http://www.huddle.net" target="_blank"><span style="font-weight: normal">Huddle</span></a><span style="font-weight: normal">, </span><a href="http://workspace.officelive.com" target="_blank"><span style="font-weight: normal">Office Live </span></a><span style="font-weight: normal"><a href="http://workspace.officelive.com" target="_blank">Work</a><a href="http://workspace.officelive.com" target="_blank">spaces</a>, <span style="font-weight: bold"><a href="http://www.o3spaces.com" target="_blank"><span style="font-weight: normal">O3Spaces</span></a><span style="font-weight: normal">, </span><a href="http://www.projectplace.com" target="_blank"><span style="font-weight: normal">ProjectPlace</span></a><span style="font-weight: normal">, </span><span style="font-weight: normal"><a href="http://www.projectspaces.com" target="_blank">Project</a><strong><a href="http://www.projectspaces.com" target="_blank"><span style="font-weight: normal">Spaces</span></a><span style="font-weight: normal">, </span><span style="font-weight: normal"><a href="http://www.sensenet.hu" target="_blank">Sense</a><strong><a href="http://www.sensenet.hu" target="_blank"><span style="font-weight: normal">/Net 6.0</span></a><span style="font-weight: normal"> and </span><a href="http://sharepoint.microsoft.com" target="_blank"><span style="font-weight: normal">Sharepoint 2007</span></a><span style="font-weight: normal">.</span><span style="font-weight: normal"> Evaluation criteria is detailed and is grouped into general overview, document management, collaboration and content publishing categories.</span></strong></span></strong></span></span></span></span></p>
<table style="margin-left:-15px" border="1">
<thead>
<tr>
<td colspan="9"><strong> General overview</strong></td>
</tr>
<tr style="font-size:10px">
<td></td>
<td><strong><a href="http://www.centraldesktop.com/" target="_blank">Central Desktop</a></strong></td>
<td><strong><a href="http://www.huddle.net" target="_blank">Huddle</a></strong></td>
<td><strong><a href="http://workspace.officelive.com" target="_blank">Office Live<br />
Work<br />
spaces</a></strong></td>
<td><strong><a href="http://www.o3spaces.com" target="_blank">O3<br />
Spaces</a></strong></td>
<td><strong><a href="http://www.projectplace.com" target="_blank">Project<br />
Place</a></strong></td>
<td><strong><a href="http://www.projectspaces.com" target="_blank">Project<br />
Spaces</a></strong></td>
<td><strong><a href="http://www.sensenet.hu" target="_blank">Sense<br />
/Net 6.0</a></strong></td>
<td><strong><a href="http://sharepoint.microsoft.com" target="_blank">Share<br />
point<br />
2007</a> </strong></td>
</tr>
</thead>
<tbody>
<tr>
<td>SaaS solution</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: red">No</span></td>
</tr>
<tr>
<td>Self Hosted</td>
<td><span style="color: red">No</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Price estimate for small team (3-10 people,3-10 workspaces)</td>
<td><span style="color: orange">$25-50/month</span></td>
<td><span style="color: orange">$15-38/month</span></td>
<td><span style="color: green">Free with MS Office license</span></td>
<td><span style="color: green">€15-65/month (€177-790/year)</span></td>
<td><span style="color: orange">$80-270<br />
/month</span></td>
<td><span style="color: orange">$79-129<br />
/month</span></td>
<td><span style="color: green">Free (open source)</span></td>
<td><span style="color: red">$4800+<br />
one-time<br />
fee</span></td>
</tr>
<tr>
<td>Price estimate for mid-large team (50-150 people, 50-150 workspaces)</td>
<td><span style="color: orange">$500-1500/month</span></td>
<td><span style="color: orange">$200+/month, price provided upon request</span></td>
<td><span style="color: green">Free with MS Office license<br />
Workspaces</span></td>
<td><span style="color: orange">€250-1000<br />
/month (€2950-11850<br />
/year) </span></td>
<td><span style="color: orange">$1100-3500<br />
/month</span></td>
<td><span style="color: orange">$399-749<br />
/month</span></td>
<td><span style="color: green">Free (open source)</span></td>
<td><span style="color: red">$9500-<br />
19500+<br />
one-time fee</span></td>
</tr>
<tr>
<td>Detailed pricing</td>
<td><a href="http://www.centraldesktop.com/pricingmatrix">See details</a></td>
<td><a href="http://www.huddle.net/price-plans/">See details</a></td>
<td><a href="http://workspace.officelive.com/en-us/">See details</a></td>
<td><a href="http://www.o3spaces.com/Page/nctrue/sp243/index.html/">See details</a></td>
<td><a href="http://www.projectplace.com/Products-and-Services/Team-Edition/">See details</a></td>
<td><a href="http://www.projectspaces.com/section/pricing">See details</a></td>
<td><a href="http://www.sensenet.hu/engine.aspx?page=license">See details</a></td>
<td><a href="http://office.microsoft.com/en-us/sharepointserver/FX102176831033.aspx">See details</a></td>
</tr>
<tr>
<td>Company response time for e-mail inquiries *</td>
<td><span style="color: orange">Within days</span></td>
<td><span style="color: orange">Within days</span></td>
<td><span style="color: green">Within hours</span></td>
<td><span style="color: green">Within hours</span></td>
<td><span style="color: red">Never</span></td>
<td><span style="color: green">Within hours</span></td>
<td><span style="color: green">Within hours</span></td>
<td><span style="color: orange">Within days</span></td>
</tr>
</tbody>
</table>
<p><span id="more-322"></span><br />
* an email was sent to the vendors asking to evaluate themselves on some of the functionality listed here and the response time to this email is featured.</p>
<table border="1">
<tbody>
<tr>
<td colspan="9"><strong> Document Management </strong></td>
</tr>
</tbody>
<tbody>
<tr>
<td></td>
<td><strong><a href="http://www.centraldesktop.com/" target="_blank">Central Desktop</a></strong></td>
<td><strong><a href="http://www.huddle.net" target="_blank">Huddle</a></strong></td>
<td><strong><a href="http://workspace.officelive.com" target="_blank">Office Live<br />
Workspaces</a></strong></td>
<td><strong><a href="http://www.o3spaces.com" target="_blank">O3Spaces</a></strong></td>
<td><strong><a href="http://www.projectplace.com" target="_blank">ProjectPlace</a></strong></td>
<td><strong><a href="http://www.projectspaces.com" target="_blank">ProjectSpaces</a></strong></td>
<td><strong><a href="http://www.sensenet.hu" target="_blank">Sense/Net 6.0</a></strong></td>
<td><strong><a href="http://sharepoint.microsoft.com" target="_blank">Sharepoint 2007</a></strong></td>
</tr>
<tr>
<td>Document Collaboration</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>File locking</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Document versioning</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Multiple file upload</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green;">Yes</span></td>
<td><span style="color: orange">Yes, with IE</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Drag&amp;Drop Documents</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>WebDav (enabling drive mapping)</td>
<td><span style="color: orange">No, coming soon</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Personal Folders</td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: orange">Limited</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Auditing (controlling space available for a user)</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Search in uploaded documents</td>
<td><span style="color: orange">Yes, certain type documents</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td colspan="9"><strong>Collaboration</strong></td>
</tr>
<tr>
<td></td>
<td><strong><a href="http://www.centraldesktop.com/" target="_blank">Central Desktop</a></strong></td>
<td><strong><a href="http://www.huddle.net" target="_blank">Huddle</a></strong></td>
<td><strong><a href="http://workspace.officelive.com" target="_blank">Office Live<br />
Workspaces</a></strong></td>
<td><strong><a href="http://www.o3spaces.com" target="_blank">O3Spaces</a></strong></td>
<td><strong><a href="http://www.projectplace.com" target="_blank">ProjectPlace</a></strong></td>
<td><strong><a href="http://www.projectspaces.com" target="_blank">ProjectSpaces</a></strong></td>
<td><strong><a href="http://www.sensenet.hu" target="_blank">Sense/Net 6.0</a></strong></td>
<td><strong><a href="http://sharepoint.microsoft.com" target="_blank">Sharepoin 2007</a></strong></td>
</tr>
<tr>
<td>Permission Management</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span> (workspace members)</td>
<td><span style="color: red">No</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Contacts</td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: green">Yes</span> (workspace members)</td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
<td><span style="color: green">Yes</span></td>
<td><span style="color: orange">Limited</span></td>
<td><span style="color: green">Yes</span></td>
</tr>
<tr>
<td>Calendar</td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
</tr>
<tr>
<td>Task Management</td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: red">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: orange">Limited</span></td>
<td><span style="color: #008000">Yes</span></td>
</tr>
<tr>
<td>Email Notifications</td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000;">No</span></td>
<td><span style="color: #008000">Yes</span></td>
</tr>
<tr>
<td>Annoncements</td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
</tr>
<tr>
<td>Commenting</td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
</tr>
<tr>
<td>Voting/Polls</td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000;"><span style="color: #ffa500">No, can be integrated</span></span></td>
<td><span style="color: orange">No, can be integrated</span></td>
<td><span style="color: #ff0000;"><span style="color: #ffa500">No, can be integrated</span></span></td>
</tr>
<tr>
<td>Forum</td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
</tr>
<tr>
<td>RSS</td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No, in development</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000;"><span style="color: #ffa500">No, can be integrated</span></span></td>
</tr>
<tr>
<td colspan="9"><strong>Content Publishing</strong></td>
</tr>
<tr>
<td></td>
<td><strong><a href="http://www.centraldesktop.com/" target="_blank">Central Desktop</a></strong></td>
<td><strong><a href="http://www.huddle.net" target="_blank">Huddle</a></strong></td>
<td><strong><a href="http://workspace.officelive.com" target="_blank">Office Live<br />
Workspaces</a></strong></td>
<td><strong><a href="http://www.o3spaces.com" target="_blank">O3Spaces</a></strong></td>
<td><strong><a href="http://www.projectplace.com" target="_blank">ProjectPlace</a></strong></td>
<td><strong><a href="http://www.projectspaces.com" target="_blank">ProjectSpaces</a></strong></td>
<td><strong><a href="http://www.sensenet.hu" target="_blank">Sense/Net 6.0</a></strong></td>
<td><strong><a href="http://sharepoint.microsoft.com" target="_blank">Sharepoint 2007</a></strong></td>
</tr>
<tr>
<td>Publish/manage content on intranet/extranet</td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000;"><span style="color: #ffa500">Yes, based on open standards and web services</span></span></td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
</tr>
<tr>
<td>Templates</td>
<td><span style="color: #ff0000;"><span style="color: #008000">Yes</span></span></td>
<td><span style="color: green;">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
</tr>
<tr>
<td>Complete web site customization</td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: green;">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ffa500">Sort of, can be customized to a certain level</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #008000">Yes</span></td>
</tr>
<tr>
<td colspan="9"><strong>Other</strong></td>
</tr>
<tr>
<td>Workflow</td>
<td><span style="color: #ffa500;"><span style="color: #008000">Yes, customizable</span></span></td>
<td><span style="color: #ffa500;">In development</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes, customizable</span></td>
<td><span style="color: #ffa500;">Somewhat, review and sign</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000;"><span style="color: #ffa500">No, under development</span></span></td>
<td><span style="color: #008000">Yes, customizable</span></td>
</tr>
<tr>
<td>Users can register themselves</td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000;"><span style="color: #ffa500">No, but can be done with add-on</span></span></td>
</tr>
<tr>
<td>Mobile access</td>
<td><span style="color: #ff0000;"><span style="color: #ffa500">No, coming soon</span></span></td>
<td><span style="color: green;">Yes, iphone app and browser access</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #008000">Yes</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000">No</span></td>
<td><span style="color: #ff0000;"><span style="color: #ffa500">No, can be implemented</span></span></td>
<td><span style="color: #008000">Yes</span></td>
</tr>
</tbody>
</table>
<h2>Product screenshots</h2>
<p>The larger the comparison table, the more confusing it can get. To help associate the products with an image we&#8217;ve included screenshots and a one-sentence description of the solution, listed in alphabetical order.</p>
<h3>Central Desktop</h3>
<p>Central Desktop is a mature project management application with numerous advanced features. Its interface is clean and easy to navigate. Visit <a href="http://www.centraldesktop.com/" target="_blank">their website</a> for more information and a trial.</p>
<p><img src="http://gregdoesit.com/wp-content/uploads/2010/02/centraldesktop.png" alt="Central Desktop" /></p>
<h3>Huddle</h3>
<p>Huddle is an advanced online collaboration tool with lots of advanced features. Its interface is self-explanatory. Visit <a href="http://www.huddle.net" target="_blank">their home page</a> to learn more and try out their solution.</p>
<p><img class="aligncenter size-full wp-image-324" title="huddle" src="http://gregdoesit.com/wp-content/uploads/2010/02/huddle.png" alt="huddle" width="600" height="271" /></p>
<h3>Office Live Workspace</h3>
<p>Office Live Workspace - unlike the other products - is the tool offering the least collaboration. It is basically an add-on to the Microsoft Office suite enabling one to store and share documents online. Its collaboration support is very limited, however it is freely accessible with a Microsoft Office license. Visit <a href="http://workspace.officelive.com">their home page</a> to try it out.</p>
<p><img class="aligncenter size-full wp-image-325" title="officelive" src="http://gregdoesit.com/wp-content/uploads/2010/02/officelive.png" alt="officelive" width="600" height="225" /></p>
<h3>O3Spaces</h3>
<p>O3Spaces is a mature document management solution plugging in to OpenOffice, StarOffice and MS Word allowing documents to be simply transferred to and from the workspaces. Go to <a href="http://o3spaces.org/">their website</a> to find out more details.</p>
<p><img class="aligncenter size-full wp-image-326" title="o3spaces" src="http://gregdoesit.com/wp-content/uploads/2010/02/o3spaces.png" alt="o3spaces" width="599" height="290" /></p>
<h3>ProjectPlace</h3>
<p>Projectplace is a project collaboration solution. See <a href="http://www.projectplace.com/">their home page</a> for more details.</p>
<p><img class="aligncenter size-full wp-image-330" title="projectplace" src="http://gregdoesit.com/wp-content/uploads/2010/02/projectplace.png" alt="projectplace" width="600" height="250" /></p>
<h3>ProjectSpaces</h3>
<p>ProjectSpaces is an online collaboration space which enables users to collaborate on projects (essentially these are workspaces). It has a clean and customizable interface. Go to <a href="http://www.projectspaces.com/">their web site</a> for details and to try out the solution.</p>
<p><img class="aligncenter size-full wp-image-327" title="projectspaces" src="http://gregdoesit.com/wp-content/uploads/2010/02/projectspaces.png" alt="projectspaces" width="600" height="350" /></p>
<h3>Sense/Net 6.0</h3>
<p>Sense/Net 6.0 is an open source enterprise content management system built on the .NET platform with some support for collaborating in workspaces - though this feature is not the most polished point of the system. The software however can be entirely customized or even modified for specific needs. Download the software  <a href="/admin/Pages/www.sensenet.com/download">from the download page</a> or find out more about it <a href="http://www.sensenet.com/">on the Sense/Net homepage</a>.</p>
<p><img class="aligncenter size-full wp-image-328" title="sensenet" src="http://gregdoesit.com/wp-content/uploads/2010/02/sensenet.png" alt="sensenet" width="600" height="560" /></p>
<h3>Sharepoint 2007</h3>
<p>Microsoft Sharepoint is a mature collaboration and process management solution. Its user interface is not entirely straightforward but it can be customized to support a wide range of use cases. Find out more on the <a href="/admin/Pages/www.Microsoft.com/SharePoint">website of the product</a>.</p>
<p><img class="aligncenter size-full wp-image-329" title="sharepoint" src="http://gregdoesit.com/wp-content/uploads/2010/02/sharepoint.png" alt="sharepoint" width="600" height="264" /></p>
<h2>Conclusion</h2>
<p>This article intended to help give an overview of some products worth considering to use in the crowded workspace alternatives market. All products have different characteristics and price range so finding the right one for a team or organization is not a simple task. However once aware of the requirements for the workspace tool these tables are likely to provide help in identifying products suiting those needs.</p>
<p>Even though we&#8217;ve evaluated eight products in this article the workspace and collaboration market is booming, there are other good alternatives apart from the ones listed above.  These include:</p>
<ul>
<li><a href="http://firefly.activestate.com/">ActiveState Firefly</a></li>
<li><a href="http://basecamphq.com/">BaseCamp</a> (even though a big player, still didn&#8217;t respond to my email though)</li>
<li><a href="http://box.net/">Box.Net</a> (this solution focuses more on sharing though)</li>
<li><a href="http://colaab.com/Home.mvc/Home">Colaab</a> (a visually really appealing solution, written fully in Silverlight. It&#8217;s actually developed in Edinburgh, down the street from me <img src='http://gregdoesit.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</li>
</ul>
<p>If you know of other good alternatives these are welcomed in comments for this article.</p>
<p><em>Note:</em> this evaluation was carried out in September 2009 therefore some data may be inaccurate. If this is the case, please get in touch so I can correct these details.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2010/02/workspace-alternatives-a-comprehensive-comparison/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My MIX 10K entry - SilverCooler</title>
		<link>http://gregdoesit.com/2010/02/my-mix-10k-entry-silvercooler/</link>
		<comments>http://gregdoesit.com/2010/02/my-mix-10k-entry-silvercooler/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 08:56:19 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[cocktail]]></category>

		<category><![CDATA[code snipplet]]></category>

		<category><![CDATA[MIX]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=312</guid>
		<description><![CDATA[I&#8217;ve entered the MIX 10K competition where the goal is to write an application using no more than 10KBytes of source code in Silverlight. I&#8217;ve decided to implement a cocktail selector application - strictly listing alcohol free cocktails only - using the web services I&#8217;ve previously built for a popular cocktail site, iCocktail.co.uk.
ICocktail.co.uk was built [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve entered the MIX 10K competition where the goal is to write an application using no more than 10KBytes of source code in Silverlight. I&#8217;ve decided to implement a cocktail selector application - strictly listing alcohol free cocktails only - using the web services I&#8217;ve previously built for a popular cocktail site, <a href="http://iCocktail.co.uk">iCocktail.co.uk</a>.</p>
<p>ICocktail.co.uk was built with Flash using XML services and since Silverlight is indeed as powerful as Flash implementation was quite an ease - my only problem was squishing in the 10K limit (thanks for Colin&#8217;s post on some tips on minifying the code). The application I&#8217;ve developed is the following:</p>
<p><a href="http://mix10k.visitmix.com/entry/details/212"><img src="http://gregdoesit.com/wp-content/uploads/2010/02/silvercooler.png" alt="SilverCooler - Gergely Orosz's entry for MIX 10K" title="SilverCooler - Gergely Orosz's entry for MIX 10K" width="470" height="346" class="aligncenter size-full wp-image-317" /></a></p>
<p>If you like it, please vote for it on its the <a href="http://mix10k.visitmix.com/entry/details/212">MIX 10K entry site</a>.</p>
<p>One thing all people noticed when looking at the application at first is the cool &#8220;bouncing&#8221; effect of the cocktail name. In the flash version this was done by using an <a href="http://hosted.zeh.com.br/tweener/docs/en-us/misc/transitions.html">EaseOutElastic transition</a>. Not surprisingly Silverlight has similar animation effects as Flash, these are called <a href="http://msdn.microsoft.com/en-us/library/cc189019(VS.95).aspx#easing_functions">easing functions</a>. To achieve the bouncing effect I only had to add the following code to the animations changing the width and height of the shape:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;">DoubleAnimation animation; <span style="color: #008080; font-style: italic;">// The animation changing width or height of the shape popping up</span>
animation.<span style="color: #0000FF;">EasingFunction</span><span style="color: #008000;">=</span><span style="color: #008000;">new</span> ElasticEase<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span> Oscillations<span style="color: #008000;">=</span><span style="color: #FF0000;">3</span>, Springiness<span style="color: #008000;">=</span><span style="color: #FF0000;">1</span>, EasingMode<span style="color: #008000;">=</span>EasingMode.<span style="color: #0000FF;">EaseOut</span> <span style="color: #000000;">&#125;</span>;</pre></div></div>

<p>Oh, and if you&#8217;re in for some more drinks, check out <a href="http://iCocktail.co.uk">iCocktail.co.uk</a> as well!</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2010/02/my-mix-10k-entry-silvercooler/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Animated Christmas Card using jQuery</title>
		<link>http://gregdoesit.com/2009/12/animated-christmas-card-using-jquery/</link>
		<comments>http://gregdoesit.com/2009/12/animated-christmas-card-using-jquery/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 21:35:58 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Random]]></category>

		<category><![CDATA[christmas]]></category>

		<category><![CDATA[code snipplet]]></category>

		<category><![CDATA[cross-browser]]></category>

		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=303</guid>
		<description><![CDATA[As the holiday season is close I was looking for a way of sending a simple, yet nice animated Christmas card to friends. I wasn&#8217;t looking for one of the many popular sites offering e-card sending, instead I wanted something I could somewhat customize, put on my server and send the link to friends and [...]]]></description>
			<content:encoded><![CDATA[<p>As the holiday season is close I was looking for a way of sending a simple, yet nice animated Christmas card to friends. I wasn&#8217;t looking for one of the many popular sites offering e-card sending, instead I wanted something I could somewhat customize, put on my server and send the link to friends and family so they could view it in their browsers.</p>
<p>At first I was thinking of creating a simple application with fading pictures in Silverlight. However I&#8217;m intending to send it to some older relatives whom I don&#8217;t want to have to mess with installing the Silverlight plugin - they would probably skip from that point. Doing the card in Powerpoint was not an option as not all friends have software to open it. So that left me trying to find a Flash application that does something like that - without any luck. So at that point I almost gave up. And then realized that I&#8217;ve forgorren about one of the most simple cross-crowser solution: using javascript to do the job.</p>
<p>So I&#8217;ve created a nice greeting card using jQuery that fades in a few images like it was a slideshow and writes out a greeting message in the end. You can take a look at it working here: <a href="http://gregdoesit.com/christmas-card-demo">Christmas Card using jQuery demo</a>, and here&#8217;s a screenshot of what it looks like:</p>
<p><img src="http://gregdoesit.com/wp-content/uploads/2009/12/christmascardpreview.jpg" alt="jQuery Christmas Card - preview" title="jQuery Christmas Card - preview" width="470" height="281" class="aligncenter size-full wp-image-304" /></p>
<p>I&#8217;m sharing the complete application for further re-use, you can download the package here: <a href="http://gregdoesit.com/files/christmas-card-source.zip">source code for Christmas Card using jQuery</a>. It consists of a html page, a css file, some demo images and a javascript file. If you want to create a similar nice greeting card, you can do it the following way:</p>
<ul>
<li><strong>Download</strong> the <a href="http://gregdoesit.com/files/christmas-card-source.zip">source</a></li>
<li><strong>Insert your images(s)</strong> into the /images folder</li>
<li><strong>Edit </strong>the first few lines of <strong>index.html</strong>; look for the lines having <em>TODO</em> comments.

<div class="wp_syntax"><div class="code"><pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> images <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span>;
<span style="color: #006600; font-style: italic;">// TODO: add the URLs of your images here</span>
<span style="color: #006600; font-style: italic;">// These urls can be absolute URLS (http://....) or relative ones as well</span>
<span style="color: #006600; font-style: italic;">// It is recommended the images are resized to 600px with for faster loading</span>
<span style="color: #006600; font-style: italic;">// Be sure to whatch out for uppercase/lowercase differences!</span>
images.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;images/01.jpg&quot;</span><span style="color: #009900;">&#41;</span>;
images.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;images/02.jpg&quot;</span><span style="color: #009900;">&#41;</span>;
images.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;images/03.jpg&quot;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #006600; font-style: italic;">// TODO: specify the loading text</span>
<span style="color: #003366; font-weight: bold;">var</span> loadingText <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Loading card...&quot;</span>;
&nbsp;
<span style="color: #006600; font-style: italic;">// TODO: specify the text appearing when the slideshow has ended</span>
<span style="color: #006600; font-style: italic;">// Leave it blank if the last image has some greeting text on it</span>
<span style="color: #003366; font-weight: bold;">var</span> merryChristmasText <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Merry Christmas and a Happy New Year from Gergely Orosz!&quot;</span>;
&nbsp;
<span style="color: #006600; font-style: italic;">// TODO: specify the text on the replay button</span>
<span style="color: #003366; font-weight: bold;">var</span> replayText <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Replay&quot;</span>;
&nbsp;
<span style="color: #006600; font-style: italic;">// Wether the application should force images to be displayed at the given width</span>
<span style="color: #006600; font-style: italic;">// For good display this option is preferred</span>
<span style="color: #003366; font-weight: bold;">var</span> forceImageWidth <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span>;
&nbsp;
<span style="color: #006600; font-style: italic;">// Width of images. If forceImageWidth is set to true images will be rendered at this width</span>
<span style="color: #003366; font-weight: bold;">var</span> imageWidth <span style="color: #339933;">=</span> <span style="color: #CC0000;">600</span>;
&nbsp;
<span style="color: #006600; font-style: italic;">// These were the only customizations you had to do in the script</span></pre></div></div>

</li>
<li><strong>Copy the</strong> modified source <strong>files </strong>to a server and you&#8217;re done!</li>
<p>christmas
</ul>
<p>So if you&#8217;re looking to create your own cross-browser compatible, jQuery based festive greeting card, here you go! </p>
<p><strong>Happy Holidays!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2009/12/animated-christmas-card-using-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Behaviour Driven Development for .NET developers</title>
		<link>http://gregdoesit.com/2009/11/behaviour-driven-development-for-net-developers/</link>
		<comments>http://gregdoesit.com/2009/11/behaviour-driven-development-for-net-developers/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 21:10:24 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Add new tag]]></category>

		<category><![CDATA[BDD]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=301</guid>
		<description><![CDATA[On the Scot ALT.NET meeting held on 4th November Robert Lewis gave a talk on BDD explaining the basics, motivations and demonstrating the .NET tools available to support this methodology. I found the talk to be really interesting, mostly because Robert was focusing on the practical side of BDD – that is how .NET developers [...]]]></description>
			<content:encoded><![CDATA[<p>On the Scot ALT.NET meeting held on 4th November <a href="http://code-rant.com">Robert Lewis</a> gave a talk on BDD explaining the basics, motivations and demonstrating the .NET tools available to support this methodology. I found the talk to be really interesting, mostly because Robert was focusing on the practical side of BDD – that is how .NET developers can use this methodology and at what projects might this be beneficial.</p>
<p>Based on this talk I&#8217;ve written a small article on what BDD is, what tools there are out there to use it in the .NET world and how it can help in software projects. Read the article on my <a href="http://www.scottlogic.co.uk/blog/gergely/2009/11/behaviour-driven-development-for-net-developers/">ScottLogic blog: <strong>Behaviour Driven Development for .NET developers</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2009/11/behaviour-driven-development-for-net-developers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Silverlight bug when drawing large paths</title>
		<link>http://gregdoesit.com/2009/11/silverlight-bug-when-drawing-large-paths/</link>
		<comments>http://gregdoesit.com/2009/11/silverlight-bug-when-drawing-large-paths/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 11:06:57 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[bug]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=275</guid>
		<description><![CDATA[I&#8217;m working on creating a zoom effect for a Silverlight Path object. This effect is easy to implement: I just have to apply a ScaleTransform and and a TranslateTransform within a TransformGroup for the Path (scale it up and move it on the screen where the user clicked to zoom). However when reaching a certain [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on creating a zoom effect for a Silverlight Path object. This effect is easy to implement: I just have to apply a ScaleTransform and and a TranslateTransform within a TransformGroup for the Path (scale it up and move it on the screen where the user clicked to zoom). However when reaching a certain zoom level I&#8217;ve noticed some weird behaviour: the Path was drawn in some random, sometimes inverse way.</p>
<p>I&#8217;ve tracked the behaviour down to the point to when it seems that the problem is not with ScaleTransform but with Paths above a certain size. I&#8217;ve created a simple example project to reproduce the problem. The source can be downloaded <a href="http://gregdoesit.com/wp-content/uploads/2009/11/slpathdrawingbug.zip">here</a>.</p>
<p>What I&#8217;m doing is drawing a simple rectangle with 5 points:<br />
<img class="aligncenter size-full wp-image-286" title="11" src="http://gregdoesit.com/wp-content/uploads/2009/11/11.png" alt="11" width="400" height="392" /></p>
<h2>The issue</h2>
<p>And I start to redraw it in larger sizes and at the same time re-positioning it to stay in the center (so I&#8217;m basically doing a centre zoom effect):<br />
<img class="aligncenter size-full wp-image-287" title="21" src="http://gregdoesit.com/wp-content/uploads/2009/11/21.png" alt="21" width="400" height="396" /></p>
<p>However when the size of the path is about 65 000px (or 80 times the height of the LayoutRoot - I used 1280*1024 resolution with the LayoutRoot grid being about 770px) the shape is drawn incorrectly:<br />
<img class="aligncenter size-full wp-image-280" title="3" src="http://gregdoesit.com/wp-content/uploads/2009/11/3.png" alt="3" width="400" height="400" /></p>
<p><span id="more-275"></span></p>
<p><em>Note:</em> the point where the shape is drawn incorrectly seemed to vary on the size of the window (both width and height), when set to really small it started to happen at about 63000px but I could not find a real corelation between window size and when this appearance started to happen. In IE8 with 1280&#215;1024 it was 80x screen height (or 65 120px) where this behaviour was noticed.</p>
<p>At 83x height on my computer (at 67 562px) the path was rendered like this:<br />
<img class="aligncenter size-full wp-image-281" title="4" src="http://gregdoesit.com/wp-content/uploads/2009/11/4.png" alt="4" width="400" height="400" /></p>
<p>It stayed like this until about 160x screen height (130 240 px) when it started to &#8220;shrink&#8221;:<br />
<img class="aligncenter size-full wp-image-282" title="5" src="http://gregdoesit.com/wp-content/uploads/2009/11/5.png" alt="5" width="400" height="400" /></p>
<p>And finally at about 161.8x (131 705 px) the middle of the screen was starting to get normal with the strange behaviour moving up and left probably causing troubles elsewhere:<br />
<img class="aligncenter size-full wp-image-283" title="6" src="http://gregdoesit.com/wp-content/uploads/2009/11/6.png" alt="6" width="400" height="400" /></p>
<p>This behaviour is periodical so on my computer I&#8217;ve noticed it happen again and again at 240x screen height (195 360 px), 320x screen height (260 480 px) and so on.</p>
<h2>Reproducing the bug</h2>
<p>The below steps are guidelines among which hopefully this strange behaviour can be reproduced:</p>
<ul>
<li>Download, compile and run the <a href="http://gregdoesit.com/wp-content/uploads/2009/11/slpathdrawingbug.zip">here</a>.</li>
<li>If possible, set your resolution to 1280&#215;1024. If not, you&#8217;ll probably have to do some playing around at the screen size the issue happens</li>
<li>Set &#8220;Square size&#8221; to &#8220;80&#8243;, click on the &#8220;Apply&#8221; button next to it. You should see the drawing on the second picture. If your screen resolution is under 1280&#215;1024 you&#8217;ll probably have to enter a smaller number than 80x, if it&#8217;s a higher resolution, you might have to increase this number</li>
<li>Play around by increasing the multiplier and the shape should render similar to the images I&#8217;ve attached.</li>
</ul>
<h2>Workaround</h2>
<p>As a temporary workaround I&#8217;m limiting paths to be enlarged up to 40 000 px - the problem only seemed to occur around 65 000 px. Should anyone be aware of any other workaround or the issue being resolved please leave a comment.</p>
<p>(Note: this post is also intended to be a detailed bugreport for the Silverlight team.)</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2009/11/silverlight-bug-when-drawing-large-paths/feed/</wfw:commentRss>
		</item>
		<item>
		<title>File Upload in Silverlight - a Simple Solution</title>
		<link>http://gregdoesit.com/2009/10/file-upload-in-silverlight-a-simple-solution/</link>
		<comments>http://gregdoesit.com/2009/10/file-upload-in-silverlight-a-simple-solution/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 21:09:55 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[code snipplet]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=265</guid>
		<description><![CDATA[Recently I wanted to implement a very simple file upload component in Silverlight that uploads a single file and if possible shows upload progress. Having done some search I&#8217;ve found numerous examples but all of them seemed too complex for the simple task of uploading a file so I implemented a really lightweight solution. The [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I wanted to implement a very simple file upload component in Silverlight that uploads a single file and if possible shows upload progress. Having done some search I&#8217;ve found <a href="#silverlightUploadExamples">numerous examples</a> but all of them seemed too complex for the simple task of uploading a file so I implemented a really lightweight solution. The source code can be downloaded from here: <a href="http://gregdoesit.com/files/SimpleFileUpload.zip">SimpleFileUpload.zip</a></p>
<h3>Uploading files in Silverlight</h3>
<p>Uploading files is quite an easy one in Silverlight: it&#8217;s basically just a request made to another server and the file contents are passed in this request. A possible way of implementing this is by using the <em>WebClient</em> class:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> UploadFile<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
FileStream _data; <span style="color: #008080; font-style: italic;">// The file stream to be read</span>
<span style="color: #FF0000;">string</span> uploadUri;
&nbsp;
<span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> fileContent <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span>_data.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#93;</span>; <span style="color: #008080; font-style: italic;">// Read the contents of the stream into a byte array</span>
_data.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span>fileContent, 0, _data.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span>;
&nbsp;
WebClient wc <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> WebClient<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
wc.<span style="color: #0000FF;">OpenWriteCompleted</span> <span style="color: #008000;">+=</span> <span style="color: #008000;">new</span> OpenWriteCompletedEventHandler<span style="color: #000000;">&#40;</span>wc_OpenWriteCompleted<span style="color: #000000;">&#41;</span>;
Uri u <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Uri<span style="color: #000000;">&#40;</span>uploadUri<span style="color: #000000;">&#41;</span>;
wc.<span style="color: #0000FF;">OpenWriteAsync</span><span style="color: #000000;">&#40;</span>u, <span style="color: #0600FF;">null</span>, fileContent<span style="color: #000000;">&#41;</span>; <span style="color: #008080; font-style: italic;">// Upload the file to the server</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">void</span> wc_OpenWriteCompleted<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, OpenWriteCompletedEventArgs e<span style="color: #000000;">&#41;</span> <span style="color: #008080; font-style: italic;">// The upload completed</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>e.<span style="color: #0000FF;">Error</span> <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  <span style="color: #008080; font-style: italic;">// Upload completed without error</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<h3>Upload Progress Indicator</h3>
<p>The above solution does the job of uploading the file well. However it does not indicate file upload progress at all: when uploading large files or when having slow internet connection this behaviour would be desirable.</p>
<p>Silverlight has no built-in way to monitor the number of bytes sent which means that the only way to indicate upload progress is sending the file to the server in multiple, smaller chunks. Of course this behaviour needs support from the server side as well.</p>
<p>The idea is that multiple calls are made to the server, every call submitting the next chunk of the file. On the server these chunks are appended to the file.</p>
<p><span id="more-265"></span></p>
<p><strong>Silverlight code snipplet</strong></p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> CHUNK_SIZE <span style="color: #008000;">=</span> <span style="color: #FF0000;">4096</span>;
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">string</span> UPLOAD_URI <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;http://localhost:55087/FileUpload.ashx?filename={0}&amp;append={1}&quot;</span>;
<span style="color: #0600FF;">private</span> Stream _data;
<span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> _fileName;
<span style="color: #0600FF;">private</span> <span style="color: #FF0000;">long</span> _bytesTotal;
<span style="color: #0600FF;">private</span> <span style="color: #FF0000;">long</span> _bytesUploaded;
&nbsp;
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> UploadFileChunk<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #FF0000;">string</span> uploadUri <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span>; <span style="color: #008080; font-style: italic;">// Format the upload URI according to wether the it's the first chunk of the file</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_bytesUploaded <span style="color: #008000;">==</span> 0<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        uploadUri <span style="color: #008000;">=</span> <span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span>UPLOAD_URI,_fileName,0<span style="color: #000000;">&#41;</span>; <span style="color: #008080; font-style: italic;">// Dont't append</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_bytesUploaded <span style="color: #008000;">&lt;</span> _bytesTotal<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        uploadUri <span style="color: #008000;">=</span> <span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span>UPLOAD_URI, _fileName, <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>; <span style="color: #008080; font-style: italic;">// append</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">else</span>
    <span style="color: #000000;">&#123;</span>
        return;  <span style="color: #008080; font-style: italic;">// Upload finished</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> fileContent <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span>CHUNK_SIZE<span style="color: #000000;">&#93;</span>;
    _data.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span>fileContent, 0, CHUNK_SIZE<span style="color: #000000;">&#41;</span>;
&nbsp;
    WebClient wc <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> WebClient<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    wc.<span style="color: #0000FF;">OpenWriteCompleted</span> <span style="color: #008000;">+=</span> <span style="color: #008000;">new</span> OpenWriteCompletedEventHandler<span style="color: #000000;">&#40;</span>wc_OpenWriteCompleted<span style="color: #000000;">&#41;</span>;
    Uri u <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Uri<span style="color: #000000;">&#40;</span>uploadUri<span style="color: #000000;">&#41;</span>;
    wc.<span style="color: #0000FF;">OpenWriteAsync</span><span style="color: #000000;">&#40;</span>u, <span style="color: #0600FF;">null</span>, fileContent<span style="color: #000000;">&#41;</span>;
    _bytesUploaded <span style="color: #008000;">+=</span> fileContent.<span style="color: #0000FF;">Length</span>;
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">void</span> wc_OpenWriteCompleted<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, OpenWriteCompletedEventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>e.<span style="color: #0000FF;">Error</span> <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>   
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_bytesUploaded <span style="color: #008000;">&lt;</span> _bytesTotal<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            UploadFileChunk<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">else</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// Upload complete</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Since Silverlight is a client side technology the server side can be implemented in any language. In this example I&#8217;ve created .NET and PHP support for the server side.</p>
<p><strong>.NET server side code snipplet</strong></p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ProcessRequest<span style="color: #000000;">&#40;</span>HttpContext context<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">InputStream</span>.<span style="color: #0000FF;">Length</span> <span style="color: #008000;">==</span> 0<span style="color: #000000;">&#41;</span>
        <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> ArgumentException<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;No file input&quot;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">QueryString</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;fileName&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
        <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Parameter fileName not set!&quot;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
    <span style="color: #FF0000;">string</span> fileName <span style="color: #008000;">=</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">QueryString</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;fileName&quot;</span><span style="color: #000000;">&#93;</span>;
    <span style="color: #FF0000;">string</span> filePath <span style="color: #008000;">=</span> @HostingEnvironment.<span style="color: #0000FF;">ApplicationPhysicalPath</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;/&quot;</span> <span style="color: #008000;">+</span> fileName;
    <span style="color: #FF0000;">bool</span> appendToFile <span style="color: #008000;">=</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">QueryString</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;append&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">&amp;&amp;</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">QueryString</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;append&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;1&quot;</span>;
&nbsp;
    FileMode fileMode;
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span>appendToFile<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>File.<span style="color: #0000FF;">Exists</span><span style="color: #000000;">&#40;</span>filePath<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            File.<span style="color: #0000FF;">Delete</span><span style="color: #000000;">&#40;</span>filePath<span style="color: #000000;">&#41;</span>;
        fileMode <span style="color: #008000;">=</span> FileMode.<span style="color: #0000FF;">Create</span>;
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">else</span>
    <span style="color: #000000;">&#123;</span>
        fileMode <span style="color: #008000;">=</span> FileMode.<span style="color: #0000FF;">Append</span>;
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">using</span> <span style="color: #000000;">&#40;</span>FileStream fs <span style="color: #008000;">=</span> File.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span>filePath, fileMode<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> buffer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">4096</span><span style="color: #000000;">&#93;</span>;
        <span style="color: #FF0000;">int</span> bytesRead;
        <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>bytesRead <span style="color: #008000;">=</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">InputStream</span>.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span>buffer, 0, buffer.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">!=</span> 0<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            fs.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>buffer, 0, bytesRead<span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
        fs.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><strong>PHP server side code snipplet</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//  This is the most basic of scripts with no try catches</span>
<span style="color: #000088;">$filename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;filename&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;filename&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;jjj&quot;</span>;
<span style="color: #000088;">$append</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;append&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>;
try
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$append</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;w&quot;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #b1b100;">else</span>
		<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #000088;">$input</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;php://input&quot;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span><span style="color: #000088;">$input</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span>
catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">echo</span> <span style="">'Caught exception: '</span><span style="color: #339933;">,</span>  <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>;
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h3>Give me the code</h3>
<p>In my solution I&#8217;ve added some small enhancements: a progress bar and a textbox to display file upload status. The Silverlight solution along with the .NET and PHP server side handlers can be downloaded from here: <a href="http://gregdoesit.com/files/SimpleFileUpload.zip">SimpleFileUpload.zip</a>.</p>
<h3>Notes for the code</h3>
<ul>
<li>Before running the project, set the <em>UPLOAD_URI</em> variable to point to the appropriate .asmx or .php file</li>
<li>The script is not suited for production environment because of the following:
<ul>
<li>Files are uploaded directly to the root directory of the web application</li>
<li>The files are created and constantly appended to. A more desirable approach would be to store the unfinished files in a temp folder until upload is complete and then move them to the upload folder</li>
</ul>
</li>
</ul>
<p><a name="silverlightUploadExamples"><br />
<h3>Other File Upload Resources</h3>
<p></a></p>
<p>Finally, for those looking for a more advanced solution, here is a list of more advanced (and more complex) file upload components with links to their download pages.</p>
<ul>
<li><a href="http://www.codeplex.com/SilverlightFileUpld">Silverlight file upload control on Codeplex</a> - an advanced file upload control </li>
<li><a href="http://www.vectorlight.net/demos/file_explorer.aspx">Silverlight file upload control with file explorer</a></li>
<li><a href="http://www.xdevsoftware.com/blog/post/File-Upload-in-Silverlight-3.aspx">A stripped down file upload solution</a> - source is simpler than the ones above, though still quite complex</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2009/10/file-upload-in-silverlight-a-simple-solution/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open Source ECM implements AD synchronization</title>
		<link>http://gregdoesit.com/2009/09/open-source-ecm-implements-ad-synchronization/</link>
		<comments>http://gregdoesit.com/2009/09/open-source-ecm-implements-ad-synchronization/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 10:47:13 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[Sense/Net 6.0]]></category>

		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=256</guid>
		<description><![CDATA[Sense/Net 6.0, the .NET Open Source Enterprise Content Management System has released its latest, Beta 4.3 version with Active Directory synchronization implemented. This is a small feature addon to the Beta4 version of the software, which among others implemented workspace support probably first in the open source .NET ECM world. 
You can see the original [...]]]></description>
			<content:encoded><![CDATA[<p>Sense/Net 6.0, the .NET Open Source Enterprise Content Management System has released its latest, Beta 4.3 version with Active Directory synchronization implemented. This is a small feature addon to the <a href="http://gregdoesit.com/2009/07/sensenet-60-beta-4-is-out/">Beta4 version of the software</a>, which among others implemented workspace support probably first in the open source .NET ECM world. </p>
<p>You can see the original announcement <a href="http://blog.sensenet.hu/post/2009/09/16/Syncronize-users-with-AD-in-SenseNet-60-Beta-43.aspx">on the Sense/Net development blog</a> and you can download and play with the newest release from the <a href="http://sensenet.codeplex.com">Sense/Net project on Codeplex</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2009/09/open-source-ecm-implements-ad-synchronization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Nhibernate vs Entity Framework – a revised performance comparison</title>
		<link>http://gregdoesit.com/2009/08/nhibernate-vs-entity-framework-%e2%80%93-a-revised-performance-comparison/</link>
		<comments>http://gregdoesit.com/2009/08/nhibernate-vs-entity-framework-%e2%80%93-a-revised-performance-comparison/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 22:22:17 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
		
		<category><![CDATA[ORM]]></category>

		<category><![CDATA[Entity Framework]]></category>

		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=243</guid>
		<description><![CDATA[Note: before reading this article please see my views on comparing ORM tools. In short: this comparison is not suitable for comparing NHibernate and Entity Framework, due to the complexity of the tools vs the simplicity of this test; treat this post accordingly.
The reason I’m revising previous results is because some members of the NHibernate [...]]]></description>
			<content:encoded><![CDATA[<p><em>Note</em>: before reading this article please see <a href="http://gregdoesit.com/2009/08/thoughts-on-ranking-orm-tools/">my views on comparing ORM tools</a>. In short: this comparison is not suitable for comparing NHibernate and Entity Framework, due to the complexity of the tools vs the simplicity of this test; treat this post accordingly.</p>
<p>The reason I’m revising previous results is because some members of the NHibernate community looked into the code and discovered that the comparison wasn’t totally fair. While the test cases with Entity Framework used batch operations, the NHibernate implementation had this feature turned off. <a href="http://devlicio.us/blogs/tuna_toksoz/">Tuna Toksoz</a> was kind enough to re-write the critical parts of the code and apply settings enabling batching, you can download the revised source code <a href="http://gregdoesit.com/files/NHibernatevsEntityFrameworkv2.zip">here</a>.</p>
<p>Note that I’ve made the source open for two reasons. First, I’d like the tests to be reproducible. And more importantly: I have experience with the two frameworks however I’m not an expert at any of them: therefore treat the results with caution. Anyone is free to analyze the source and if there are some issues in the code resulting in major performance drops, please let me know.</p>
<p>After Tuna modified the code NHibernate storage speed rocketed up <a href="http://gregdoesit.com/2009/08/nhibernate-vs-entity-framework-a-performance-test/">compared to the previous version</a>:</p>
<table border="1">
<tbody>
<tr>
<td><strong>Framework</strong>/ <strong>No. of operations</strong></td>
<td><strong>1K</strong></td>
<td><strong>3K</strong></td>
<td><strong>8K</strong></td>
<td><strong>14 K</strong></td>
<td><strong>23K</strong></td>
<td><strong>33K</strong></td>
<td><strong>40K</strong></td>
</tr>
<tr>
<td><strong>NHibernate</strong></td>
<td>1,22</td>
<td>3,25</td>
<td>8,98</td>
<td>13,11</td>
<td>28</td>
<td>38</td>
<td>46</td>
</tr>
<tr>
<td><strong>Entity Framework</strong></td>
<td>2,11</td>
<td>6,18</td>
<td>18,4</td>
<td>31,3</td>
<td>51,7</td>
<td>77</td>
<td>98</td>
</tr>
</tbody>
</table>
<p><img class="aligncenter size-full wp-image-240" title="store2" src="http://gregdoesit.com/wp-content/uploads/2009/08/store2.png" alt="store2" width="470" height="334" /></p>
<p>However improving performance does not stop here. <a href="http://fabiomaulo.blogspot.com">Fabio Maulo</a> posted a <a href="http://fabiomaulo.blogspot.com/2009/08/nhibernate-battle.html">great article</a> on why the original code was far from optimal and improved runtime results even more.</p>
<h3>Conclusion</h3>
<p>As <a href="http://gregdoesit.com/2009/08/thoughts-on-ranking-orm-tools/">I&#8217;ve stated before</a> I don&#8217;t beleive there is a good way in comparing ORM frameworks and even if there were, this little test certanly is not it.</p>
<p>As the contribution of the NHibernate community members showed the more complex and configurable the tool, the more experience you&#8217;ll need to make the best of this. If you&#8217;re working on a performance critical product, you&#8217;d better know you&#8217;re tool well and use it accordingly.</p>
<h3>But which one should I use?</h3>
<p>From the current results it seems that there is <strong>no major performance difference</strong> between two tools and even if there is it might be due to misuse. So my advice is to use which ever tool suits you more based on its features.</p>
<p>At first glance Entity Framework seems to have a shorter learning curve as well as some nice integrated VS tools to make development easier. On the other hand there is a constantly active and helping NHibernate community always ready to answer questions and NHibernate seems to be much more customizable at a higher level. Also see <a href="http://stackoverflow.com/questions/1242684/how-do-the-entity-framework-2-and-nhibernate-compare">this thread</a> on EF vs NH features and learning as well to help decide.</p>
<p>The decision is up to you which one you find more suitable for your needs. However since both are proven and mature solutions you won&#8217;t be making a big mistake going with which either.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2009/08/nhibernate-vs-entity-framework-%e2%80%93-a-revised-performance-comparison/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
