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

<channel>
	<title>Neonlabs</title>
	<atom:link href="http://neonlabs.structum.net/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://neonlabs.structum.net/blog</link>
	<description>Alex Espinoza's rants on Technology &#38; Art</description>
	<lastBuildDate>Tue, 15 Dec 2009 17:16:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Presentation: Cloud Computing Interoperability</title>
		<link>http://neonlabs.structum.net/blog/?p=482</link>
		<comments>http://neonlabs.structum.net/blog/?p=482#comments</comments>
		<pubDate>Tue, 01 Dec 2009 06:28:30 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[amazon-ec2]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[cloudcomputing]]></category>
		<category><![CDATA[codecamp]]></category>
		<category><![CDATA[interoperability]]></category>
		<category><![CDATA[socalcodecamp]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=482</guid>
		<description><![CDATA[I gave a talk about Cloud Computing Interoperability in the SoCal Code Camp at USC a week ago. I have been wanting to blog about it, but just couldn&#8217;t just because of work load.
My talk was mostly directed at the importance of interoperability in the clouds, specially in the IaaS arena. First I began with [...]]]></description>
			<content:encoded><![CDATA[<p>I gave a talk about Cloud Computing Interoperability in the<a href="http://www.socalcodecamp.com/"> SoCal Code Camp </a>at USC a week ago. I have been wanting to blog about it, but just couldn&#8217;t just because of work load.</p>
<p>My talk was mostly directed at the importance of interoperability in the clouds, specially in the IaaS arena. First I began with a quick definition of terms, Cloud Computing, its categories adn types. And then focused on the crust of the matter: Interoperability Efforts.</p>
<p>I only talked about UCI (Unified Cloud Interface) and OCCI (Open Cloud Computing Interface). I chose to talk about UCI because the effort was more ambitious and the use of  ontologies to communicate different providers attracted me a lot. UCI is a dead effort. The team provided the spec and a some-what complete Proof of Concept. But it has stalled since April, 2009.</p>
<p>The OCCI effort is focused mostly on IaaS, creating interoperability bridges between providers like Amazon EC2 and the like. OCCI is implemented by Open Nebula, of the RESERVOIR project, which also implements the EC2 standard (yes it is a standard!).</p>
<p>Anyways, I have included my presentation. I will dwell more on the matter later, when we finish our experiment.</p>
<p>References:</p>
<p>* UCI &#8211; <a href="http://groups.google.com/group/unifiedcloud">http://groups.google.com/group/unifiedcloud</a><br />
* OCCI-WG &#8211; <a href="http://www.occi-wg.org/doku.php?id=spec">http://www.occi-wg.org/doku.php?id=spec</a><br />
* OpenNebula -<a href="http://www.opennebula.org/"> http://www.opennebula.org/</a><br />
* Reservoir -<a href="http://www.reservoir-fp7.eu/"> http://www.reservoir-fp7.eu/</a></p>
<p><a href="http://neonlabs.structum.net/pkgs/InteroperabilityInTheCloud.ppt">Download Presentation</a></p>
<p>UPDATE: The presentation has been added to the OGF&#8217;s GridForge <a href="http://forge.ogf.org/sf/wiki/do/viewPage/projects.occi-wg/wiki/Presentations">Wiki</a>.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 69px; width: 1px; height: 1px;">
<div class="O1" style="margin-top: 6.72pt; margin-bottom: 0pt; margin-left: 0.81in; text-indent: -0.31in; text-align: left; direction: ltr; unicode-bidi: embed; vertical-align: baseline;"><span style="font-size: 28pt;"><span style="color: #3a5047; font-family: Wingdings; font-size: 75%;">n</span></span><span style="font-size: 28pt; font-family: Arial; color: black;">http://groups.google.com/group/unifiedcloud</span></div>
</div>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Presentation%3A+Cloud+Computing+Interoperability+http://p9zpo.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Presentation%3A+Cloud+Computing+Interoperability+http://p9zpo.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=482</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Amazon RDS provides Relational Database Scalability</title>
		<link>http://neonlabs.structum.net/blog/?p=476</link>
		<comments>http://neonlabs.structum.net/blog/?p=476#comments</comments>
		<pubDate>Tue, 03 Nov 2009 18:57:26 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[amazon-ec2]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[amazon-rds]]></category>
		<category><![CDATA[amazon-simpledb]]></category>
		<category><![CDATA[cloudcomputing]]></category>
		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=476</guid>
		<description><![CDATA[I was very excited to hear that Amazon added a service for Relational Databases for the Cloud. It does make my life easier. One of the most important properties of the Cloud is scalability, and it is one of the most sought properties for companies with huge data flow. Using Amazon EC2 IaaS, makes it easy and [...]]]></description>
			<content:encoded><![CDATA[<p>I was very excited to hear that <a href="http://www.eweek.com/c/a/Cloud-Computing/Amazon-Launches-Relational-Database-for-the-Cloud-865321/">Amazon added a service for Relational Databases</a> for the Cloud. It does make my life easier. One of the most important properties of the Cloud is scalability, and it is one of the most sought properties for companies with huge data flow. Using Amazon EC2 IaaS, makes it easy and flexible to scale your application, only if it is built or architected to be scalable.</p>
<p>There is no free lunch when it comes to scalability in the cloud. In order to take advantage of the flexibility and scalability of the Cloud, you need to architect your application in a way that it can be scaled. What Amazon provides is the infrastructure, but the application must be able to take advantage of that.</p>
<p>Now, this is not simple task, but it is achievable and most EC2 users are doing it now. But scaling the database is not as simple, even if you have the source code, like in the case of MySQL.</p>
<p>For example, let&#8217;s think about a SaaS application that is built with fine grained services which can all be scaled using Amazon&#8217;s Load Balancer. The application depends on an MySQL Server tuned for high loads sitting on an image in Amazon EC2. The services works fine most of the year, but in December, the load pumps up enough to make MySQL suffer.</p>
<p>Now this app is already in the cloud, so our fine grained services are scaled as needed, but the database, has become our bottleneck. What can we do? Well, there are several common options, which are not specific to the cloud and can be combined:</p>
<ul>
<li>Use <a href="http://en.wikipedia.org/wiki/Shard_(database_architecture)">Sharding</a> or <a href="http://en.wikipedia.org/wiki/Federated_database_system">Federation</a>.</li>
<li>Use <a href="http://en.wikipedia.org/wiki/Database_replication">Database Replication</a>.</li>
<li>Use <a href="http://dev.mysql.com/doc/mysql-ha-scalability/en/ha-memcached.html">MemCache </a>to improve memory access to data.</li>
</ul>
<p>Now, everybody knows this works, but it comes with a cost in maintenance;  if it works in an on-premise data center it should work in the cloud. The problem with this approach, is that it doesn&#8217;t take full advantage of Cloud Scalability in Amazon EC2. The only way to take advantage of EC2&#8217;s scalability would be to actually make MySQL natively scalable, like we did with our application. Which is a huge effort, and sometimes not worth it.</p>
<p>Of course, Amazon reps will tell you to use <a href="http://aws.amazon.com/simpledb/">SimpleDB</a>, which I wouldn&#8217;t recommend for any mission-critical work due to the consistency issue. SimpleDB relaxes consistency for the sake of  (limited) performance, and also it doesn&#8217;t have great performance with huge datasets, which is the norm in enterprise applications. (For more information on SimpleDB&#8217;s pros and cons look <a href="http://highscalability.com/current-pros-and-cons-list-simpledb">here</a>.)</p>
<p>Now with the new Amazon RDS, we can use a relational database that is supported by popular languages/frameworks and that can take advantage of the scalability in the cloud (specifically Amazon EC2). We just create our database using the Amazon RDS API, and point our applciation to it. If we need to scale, we can do it using the API, taking full advantage of EC2. When the data flow lowers again, we can easily release the resources using the API.</p>
<p>How did Amazon accomplish this? Well, it is too early to know. There are not a lot of sources of information regarding Amazon&#8217;s RDS architecture. But as it looks right now it seems like an API in front of a set of mysql databases sitting in Amazon&#8217;s EC2 images, maybe using a combination of the techniques explained before. What Amazon is aiming to provide with this new service is a database server that is easy to use, maintain and scale. Which I think is a pretty cool.</p>
<p>I will post more information regarding RDS after I play around with it more.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Amazon+RDS+provides+Relational+Database+Scalability+http://9s2h5.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Amazon+RDS+provides+Relational+Database+Scalability+http://9s2h5.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=476</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microsoft and their huge problem in the clouds&#8230;</title>
		<link>http://neonlabs.structum.net/blog/?p=469</link>
		<comments>http://neonlabs.structum.net/blog/?p=469#comments</comments>
		<pubDate>Sat, 31 Oct 2009 22:11:30 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=469</guid>
		<description><![CDATA[I just recently read an article from Krishnan Subramanian, which I believe is very interesting: Microsoft&#8217;s Huge Cloud Problem.
I agree with most of the article&#8217;s comments. They have to be taken with a grain of salt, since most of is speculation. Very smart speculation, but speculation none the less. But What I do disagree completely, [...]]]></description>
			<content:encoded><![CDATA[<p>I just recently read an article from <a href="http://www.krishworld.com/">Krishnan Subramanian</a>, which I believe is very interesting: <a href="http://www.cloudave.com/link/microsoft-s-huge-cloud-problem">Microsoft&#8217;s Huge Cloud Problem</a>.</p>
<p>I agree with most of the article&#8217;s comments. They have to be taken with a grain of salt, since most of is speculation. Very smart speculation, but speculation none the less. But What I do disagree completely, is the following line:</p>
<blockquote><p>&#8220;..cloud is an evolution from the web and .NET was never a platform of choice in the web&#8230;&#8221;</p></blockquote>
<p>I agree that the cloud is an evolution of the web, but the article talks about choice, who is it referring to? Is it the open source community? Or is the enterprise community? or is it both?</p>
<p>Obviously as an Open Source advocate, .Net or even Mono would not be your web platform of choice. You usually go to either PHP (which is the leader in the Open Source community) Ruby or Python (just to name a few, I know there are a lot more).</p>
<p>But in the enterprise world, .Net is very much relevant, and in most of the cases it is the platform of choice. I know that this is a huge market and the competition is strong, but to completely dismiss Asp.Net as not a platform of choice is far from the truth.</p>
<p>Asp.Net and .Net are very much relevant right now, and it will stay that way for a long time. Whether Azure succeeds or not.</p>
<p>It is a mistake to think that everything will be in the cloud. What will prevail are hybrid environments. That is why I think Microsoft will not only survive this (even though is going to be a really difficult climb), but it will remain relevant.</p>
<p>Google&#8217;s view of *EVERYTHING* in the Cloud is not very down to earth (hence the name, everything in the clouds). And in my opinion, it will never get there. A lot of things are going to be done in the cloud, and probably the majority, but not all. We are creatures of choices, and we will keep our options open.</p>
<p>Now with the open source movement, Microsoft has done a lot. And I actually think we should thank <a href="http://tirania.org/blog/">Miguel de Icaza</a> and his team for this. He might be called a traitor by some, but I think he is the biggest Trojan Horse of all. He has been pushing Microsoft to open source (with the help of so many).</p>
<p>But let&#8217;s think about <a href="http://www.mono-project.com/">Mono</a> for a minute. Microsoft already released the source code for .Net in a very closed license, which I see as a glass box (look but don&#8217;t touch). It is getting there, to that openness that the article is talking about. They know they have to do it. But they don&#8217;t know how.</p>
<p>Now, Mono is a very good example. They have been reproducing the signatures and interfaces to use .Net on Linux and it works like a charm. Also they have been adding their own mix.</p>
<p>Microsoft will end up releasing .Net as an Open Source project, it will not be soon though. They already have their own license for that. With what Mono has done, when Microsoft plans to release, the integration with Mono will make it easier to hit the market.</p>
<p>The article is right about one important thing, in order to compete in the clouds, they have to kill Windows as an Desktop OS. But I think it will prevail as Windows Azure. That is why the word &#8220;Windows&#8221; appears in there.</p>
<p>Just one more thing before I close this rant. I think the mistake that Netscape did with Mozilla, is a learning experience that can be applied anywhere. When Netscape decided to build their browser from Scratch instead of fixing their bloated browser at the time. They lost too much time, and they lost the browser wars. They should have fixed their browser, not start a new one, which ended up with the same problems. It eventually got fixed when the community did the right thing and fixed it with Firefox, but they didn&#8217;t not start from scratch, they fixed Mozilla.</p>
<p>Microsoft is the browser and we (the community) are Netscape. Are we going to kill Microsoft so that Apple or Google takes its place? And then end up with the same problems all over?</p>
<p>I wouldn&#8217;t really want Apple in Microsoft&#8217;s shoes. I can see what they can do with their App Store. They have so much to learn. It would be like going back to the 90&#8217;s. We already went this route with Microsoft so many times, and now, Microsoft is learning.</p>
<p>How about Google? I wouldn&#8217;t want Google either. They are still too young, and we haven&#8217;t seen their evil yet, which scares me a lot. They not only have a lot of power in the internet, they hold most of our data, and they want *ALL* of it. Everybody has an evil side, and Google is not any different. We just haven&#8217;t seen it yet.</p>
<p>Microsoft is a known evil, let&#8217;s fix it. Why change it for a new one, when this evil has already been changed so much, and it is learning to live with the community?</p>
<p>Well enough of rants&#8230;I&#8217;m going back to work.</p>
<p>Important links:</p>
<ul>
<li>Microsoft&#8217;s Huge Cloud Problem : <a href="http://www.cloudave.com/link/microsoft-s-huge-cloud-problem">http://www.cloudave.com/link/microsoft-s-huge-cloud-problem</a></li>
<li>Krishnan Subramanian&#8217;s Web site:<a href="http://www.krishworld.com/"> http://www.krishworld.com/</a></li>
<li>Krishnan Subramanian&#8217;s  twitter: <a href="http://twitter.com/krishnan">http://twitter.com/krishnan</a></li>
<li>Mono: <a href="http://www.mono-project.com/">http://www.mono-project.com/</a></li>
<li>Miguel de Icaza&#8217;s Blog:  <a href="http://tirania.org/blog/">http://tirania.org/blog/</a></li>
<li>Miguel de Icaza&#8217;s Twitter:<a href="http://twitter.com/migueldeicaza"> http://twitter.com/migueldeicaza</a></li>
</ul>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<h1 class="flLeft"><a class="heading flLeft" href="http://www.cloudave.com/link/microsoft-s-huge-cloud-problem"> Microsoft&#8217;s Huge Cloud Problem </a></h1>
</div>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Microsoft+and+their+huge+problem+in+the+clouds%E2%80%A6+http://4cihw.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Microsoft+and+their+huge+problem+in+the+clouds%E2%80%A6+http://4cihw.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=469</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Syntax Highlighter, WordPress &amp; CSS</title>
		<link>http://neonlabs.structum.net/blog/?p=456</link>
		<comments>http://neonlabs.structum.net/blog/?p=456#comments</comments>
		<pubDate>Sun, 26 Apr 2009 23:20:02 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[structum]]></category>
		<category><![CDATA[syntaxhighlighter]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=456</guid>
		<description><![CDATA[I recently changed my Syntax Highlighter (which was cool, but old and abandon-ware) for the SyntaxHighlighter Evolved. Which I must say I love. Old versions were really bad. They were not that flexible. But version 2.0 is VERY flexible, and looks great. So I did the change in Neonlabs and Structum.
I stumbled with several problems. [...]]]></description>
			<content:encoded><![CDATA[<p>I recently changed my Syntax Highlighter (which was cool, but old and abandon-ware) for the <a href="http://wordpress.org/extend/plugins/syntaxhighlighter/">SyntaxHighlighter </a>Evolved. Which I must say I love. Old versions were really bad. They were not that flexible. But version 2.0 is VERY flexible, and looks great. So I did the change in <a href="http://neonlabs.structum.net/">Neonlabs </a>and <a href="http://structum.net">Structum</a>.</p>
<p>I stumbled with several problems. The first, and the one that bothered me more, was that in the Structum page, the code seemed to be broken into weird lines.<br />
<br />
<img src="/images/BrokenCodeDisplay.jpg" alt="Broken Code"/><br />
<br />
This was obviously a CSS problem since I didn&#8217;t have that problem in Neonlabs. So I used several tools to see which was the offending style. I mostly looked for the &#8216;pre&#8217; tag on CSS but was not successful. After looking through the whole CSS style for my theme, I found the offending line of code:</p>
<pre class="brush: css;">
#primary code {
	display:block;
	...
}
</pre>
<p>Yep, it was a simple display attribute. I just commented that line and everything just worked.</p>
<p>
<img src="/images/FixedCodeDisplay.jpg" alt="Fixed Code"/><br />
</p>
<p>After that I tried editing the code to make it look better for the Structum page and I noticed that when it loaded it had a nasty Warning:</p>
<p><strong>Warning: htmlspecialchars_decode() expects parameter 1 to be string, NULL given in /&#8230;/wp-includes/compat.php on line 105</strong></p>
<p>And when I looked at the code blocks in my posts, there was nothing. They were empty.</p>
<p>I did a little research to see what was the problem, and it seems it is a WordPress <a href="http://wordpress.org/support/topic/242653">bug</a>. Simple variable naming bug in compat.php:</p>
<pre class="brush: php;">
	function htmlspecialchars_decode( $str, $quote_style = ENT_COMPAT )
	{
		if ( !is_scalar( $string ) ) {
			trigger_error( 'htmlspecialchars_decode() expects parameter 1 to be string, ' . gettype( $string ) . ' given', E_USER_WARNING );
			return;
		}
	...
  	}
</pre>
<p>Can you see the problem ? The problem resides in the $string variable. It doesn&#8217;t exist, so its value is null. Changing the variable parameter for is_scalar and gettype from $string to $str fixed the problem.</p>
<p>This is how it should look:</p>
<pre class="brush: php;">
	function htmlspecialchars_decode( $str, $quote_style = ENT_COMPAT )
	{
		if ( !is_scalar( $str ) ) {
			trigger_error( 'htmlspecialchars_decode() expects parameter 1 to be string, ' . gettype( $str ) . ' given', E_USER_WARNING );
			return;
		}
	...
  	}
</pre>
<p>After that, everything is working seamlessly again :D. hope this helps :D.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Syntax+Highlighter%2C+WordPress+%26+CSS+http://42akd.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Syntax+Highlighter%2C+WordPress+%26+CSS+http://42akd.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=456</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easy .Net Transaction Management with Transaction Scope</title>
		<link>http://neonlabs.structum.net/blog/?p=314</link>
		<comments>http://neonlabs.structum.net/blog/?p=314#comments</comments>
		<pubDate>Sat, 04 Apr 2009 04:35:06 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[transaction]]></category>
		<category><![CDATA[transaction scope]]></category>
		<category><![CDATA[using]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=314</guid>
		<description><![CDATA[Transactions are a common technique to ensure consistency of the data when using database applicationsfor example with Sql Server. The System.Transactions namespace in the .Net framework simplifies Transaction Managements considerably.
This time we are going to talk about TransactionScope, which is part of the System.Transactions assembly. Using TransactionScope to manage transactions is fairly simple, yet powerful. [...]]]></description>
			<content:encoded><![CDATA[<p>Transactions are a common technique to ensure consistency of the data when using database applicationsfor example with Sql Server. The <em>System.Transactions</em> namespace in the .Net framework simplifies Transaction Managements considerably.</p>
<p>This time we are going to talk about <em>TransactionScope</em>, which is part of the <em>System.Transactions</em> assembly. Using <em>TransactionScope</em> to manage transactions is fairly simple, yet powerful. Let&#8217;s look at an simple example using ADO:</p>
<pre class="brush: csharp;">
TransactionScope tranScope = new TransactionScope();

SqlConnection connection = new SqlConnection(connectionSettigs);
SqlCommand cmd = new SqlCommand(query, connection);

connection.Open();
cmd.ExecuteNonQuery();
connection.Close();

transScope.Complete();
</pre>
<p>In the example we first initialized the <em>TransactionScope</em> object, then we initialized the connection (very important point, we will talk about it later), execute the command, etc. And then at the end we called the method <em>Complete</em> for the transaction scope object.</p>
<p>When the transaction scope object is initialized, the transaction is effectively created and all commands after that will be protected by the transaction. After the commands are executed, then we decide to either commit the transaction or rollback. Now, for the transaction scope, the method <em>Complete </em> effectively commits the transaction to the database, when Dispose executes the rollback.</p>
<p>For some developers, is quite confusing since most developers are used to:</p>
<pre class="brush: csharp;">
// Handling the transactions explicitly.
SqlConnection connection = new SqlConnection(connectionSettigs);
SqlTransaction trans = connection.BeginTransaction();

SqlCommand cmd = new SqlCommand(query, connection);
cmd.Transaction = trans;

connection.Open();
cmd.ExecuteNonQuery();
connection.Close();

connection.Commit();
</pre>
<p>Not only is the <em>TransactionScope</em> idiom different but also the Commit and Rollback method names are also different. The reason why the names are also different is because 1) The <em>TransactionScope</em> object is not a transaction per se, it is more of a transaction handler and 2) Because <em>TransactionScope</em> follows the <em>Dispose pattern</em> (just like <em>SqlConnection</em>). Following the Dispose pattern to implement the <em>TransactionScope</em> makes it easy to do this:</p>
<pre class="brush: csharp;">
// Handling the transactions implicitly.
using(TransactionScope tranScope = new TransactionScope()) {

	SqlConnection connection = new SqlConnection(connectionSettigs);
	SqlCommand cmd = new SqlCommand(query, connection);

	connection.Open();
	int id = cmd.ExecuteScalar();
	connection.Close();

	// If success commit
	if(id &amp;amp;amp;amp;amp;gt; 0) {
		transScope.Complete();
	}
}
</pre>
<p>The example displayed above shows how to handle implicit transactions using the &#8216;<em>using</em>&#8216; keyword. When applying the &#8216;<em>using</em>&#8216; idiom on an object which implements the <em>Dispose pattern</em>, the &#8216;<em>Dispose</em>&#8216; method of such object will be called when the using block ends.</p>
<p>What the transaction scope is doing is registering the transaction in the connection contained in the transaction scope block. Making it easy to handle transactions in .Net code.</p>
<p>In the case of the example, if the transaction scope is not committed before the block ends, it is effectively rolled back automatically, since the using idiom calls the Dispose method of the selected object. This makes the use of Transactions extremely easy to read and maintain.</p>
<p>Now what happens if there is an exception inside of the <em>TransactionScope</em> block ? Well, the object&#8217;s <em>Dispose</em> method is called, which automatically rolls back the transaction.</p>
<p>Now it is very important, while using <em>TransactionScope</em>, that the connection is opened inside of the transaction scope block, otherwise the transaction won&#8217;t be registered in the connection.</p>
<pre class="brush: csharp;">
SqlConnection connection = new SqlConnection(connectionSettigs);

// This will not work. The transaction will not be registered in the connection,
// and it will deadlock your application.
connection.Open();

// Handling the transactions implicitly.
using(TransactionScope tranScope = new TransactionScope()) {

	SqlCommand cmd = new SqlCommand(query, connection);

	int id = cmd.ExecuteScalar();

	// If success commit
	if(id &amp;amp;amp;amp;amp;gt; 0) {
		transScope.Complete();
	}
}

connection.Close();
</pre>
<p>The above example will not work. What happens is that when the <em>Connection</em> is opened inside the <em>TransactionScope</em> block, the transaction is registered in the connection which means that any command for that connection will be in the transaction until the connection is closed.</p>
<p>Be very careful to initialize the connection inside the transaction scope block, otherwise the transaction won&#8217;t register itself in the connection, and your data won&#8217;t be protected by the transaction. In some cases, any command inside of the transaction scope block, for which the connection is opened before the transaction block will result in a dead lock. The code above serves as an example of this case.</p>
<p><strong>More information:</strong><br />
<a href="http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx">MSDN:Transaction Scope Class.</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms172152.aspx">MSDN:Implementing an Implicit Transaction using Transaction Scope</a></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Easy+.Net+Transaction+Management+with+Transaction+Scope+http://gnrtn.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Easy+.Net+Transaction+Management+with+Transaction+Scope+http://gnrtn.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=314</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit Testing Data-Driven WCF Services</title>
		<link>http://neonlabs.structum.net/blog/?p=296</link>
		<comments>http://neonlabs.structum.net/blog/?p=296#comments</comments>
		<pubDate>Fri, 27 Mar 2009 05:57:27 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[Unit Tests]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[services]]></category>
		<category><![CDATA[wcf]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[enterprise library]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=296</guid>
		<description><![CDATA[Any data driven module, class or method needs to be tested. At this moment anything that is data-drive (which would actually cover almost anything) needs to be verified according to specs to ensure correctness. In this post we will talk about creating tests for Data-Driven WCF Services. For simplicity and ease of use, we are [...]]]></description>
			<content:encoded><![CDATA[<p>Any data driven module, class or method needs to be tested. At this moment anything that is data-drive (which would actually cover almost anything) needs to be verified according to specs to ensure correctness. In this post we will talk about creating tests for Data-Driven WCF Services. For simplicity and ease of use, we are going to use the Enterprise Library Data Application Block to talk to the database.</p>
<p>Before we get deeper into the topic at hand, let&#8217;s talk about the unit test environment that I use and recommend for testing data-driven applications.</p>
<p><strong>Testing Context</strong><br />
The basic objective of a unit test is to verify correctness of a an application. Testing every unit in a layer ensures the correctness of the behavior of such units, specially when being used by other units in the application. This way all units can be reused with confidence.</p>
<p>Now in order to maintain confidence in the Unit being tested, we need to ensure that the tests are reliable and that providence confidence in the correctness of the unit under test. When a test sometimes pass and sometimes fails is called an Erratic Test, and in order to maintain confidence we need to avoid such behavior.</p>
<p>Unit Tests, as explained before, focus on testing the a single unit in a system, unlike integration testing. So it is a best practice to have one database instance per developer or tester. Having two developers running the test fixtures at the same time on the same database create an erratic test behavior, which is not acceptable.</p>
<p><strong>Data-Driven Tests</strong><br />
The pattern we are going to follow in this post is a simple form of the Data-Driven Test Pattern, which is described as:</p>
<blockquote><p>&#8220;We store all the information needed for each test in a data file and write an interpreter that reads the file and executes the tests&#8221;.</p></blockquote>
<p>This pattern is mostly used to avoid code duplication, especially when several test cases just change on different data conditions. This way one test can be executed with several test scripts, instead of writing one test for every data condition.</p>
<p>We&#8217;ll use a simple form of the pattern, using Sql syntax for scripts instead of Xml data files. I find it easier to just create an Sql script, execute it and continue with the testing.</p>
<p>Each test must have a context setup. There are several patterns that specify that one test method sets up the data context for the others; for example, one test method tests the insertion of data, while the next test method tests the retrieval of the inserted data. I don&#8217;t recommend this setting, this leads to Erratic Tests. Every unit test must be independent of each other. This means that every test method must setup its own environment and it must also clean it up to the initial state.</p>
<p><strong>Unit Testing WCF Services</strong><br />
Unit Testing WCF Services is extremely easy. There are two ways to do this:</p>
<p>1) Include the WCF Library as a reference.</p>
<p>2) Load up the WCF Service host and call the service from the test fixture.</p>
<p>Since we are mostly doing unit testing and not integration testing, loading the WCF Library as a reference works fine. For integration purposes I would write one test fixture for each endpoint in the configuration, but this is out of the scope of this post.</p>
<p><strong>Test Code</strong></p>
<p>So we have two service methods: 1) ProjectService.Insert and 2) ProjectService.GetIdByName. This is the interface of such methods:</p>
<pre class="brush: csharp;">
ï»¿namespace WCFTesting
{
    using System.ServiceModel;

    /// &lt;summary&gt;
    /// Project Service Contract.
    /// &lt;/summary&gt;
    [ServiceContract]
    public interface IProjectService
    {
        /// &lt;summary&gt;
        /// Inserts a new Project.
        /// &lt;/summary&gt;
        /// &lt;param name=&quot;id&quot;&gt;Project Identifier.&lt;/param&gt;
        /// &lt;param name=&quot;name&quot;&gt;Project Name&lt;/param&gt;
        /// &lt;param name=&quot;description&quot;&gt;Project Description&lt;/param&gt;
        /// &lt;returns&gt;True if successful, false otherwise.&lt;/returns&gt;
        [OperationContract]
        bool Insert(int id, string name, string description);

        /// &lt;summary&gt;
        /// Returns the id of the project that goes by the selected name.
        /// &lt;/summary&gt;
        /// &lt;param name=&quot;name&quot;&gt;Project Name&lt;/param&gt;
        /// &lt;returns&gt;&lt;c&gt;int&lt;/c&gt;&lt;/returns&gt;
        [OperationContract]
        int GetIdByName(string name);
    }
}
</pre>
<p>The service method implementation is shown below:</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Inserts a new Project in database.
/// &lt;/summary&gt;
/// &lt;param name=&quot;id&quot;&gt;Project Identifier.&lt;/param&gt;
/// &lt;param name=&quot;name&quot;&gt;Project Name&lt;/param&gt;
/// &lt;param name=&quot;description&quot;&gt;Project Description&lt;/param&gt;
/// &lt;returns&gt;True if successful, false otherwise.&lt;/returns&gt;
public bool Insert(int id, string name, string description)
{
	Database db = DatabaseFactory.CreateDatabase();

	DbCommand command = db.GetStoredProcCommand(&quot;[dbo].[InsertProject]&quot;);
	db.AddInParameter(command, &quot;id&quot;, DbType.Int32, id);
	db.AddInParameter(command, &quot;name&quot;, DbType.String, name);
	db.AddInParameter(command, &quot;description&quot;, DbType.String, description);
	db.AddOutParameter(command, &quot;success&quot;, DbType.Boolean, 1);

	db.ExecuteNonQuery(command);

	bool success = (bool) db.GetParameterValue(command, &quot;success&quot;);

	return success;
}

/// &lt;summary&gt;
/// Returns the id of the project that goes by the selected name.
/// &lt;/summary&gt;
/// &lt;param name=&quot;name&quot;&gt;Project Name&lt;/param&gt;
/// &lt;returns&gt;&lt;c&gt;int&lt;/c&gt;&lt;/returns&gt;
public int GetIdByName(string name)
{
	Database db = DatabaseFactory.CreateDatabase();

	DbCommand command = db.GetStoredProcCommand(&quot;[dbo].[GetProjectIdByProjectName]&quot;);
	db.AddInParameter(command, &quot;Name&quot;, DbType.String, name);

	int id = -1;
	using(IDataReader reader = db.ExecuteReader(command)) {
		if(reader.Read()) {
			id = reader.GetInt32(0);
		}
	}

	return id;
}
</pre>
<p><em>Note: All code can be found in the attachment at the end of the post.</em></p>
<p>As you can see the methods are really simple. We are using a simple call to a stored procedure, getting the results and sending them back to the client.</p>
<p>Now let&#8217;s look at the actual unit test fixture:</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Test the Service method Insert
/// &lt;/summary&gt;
[TestMethod]
public void Insert()
{
	using(TransactionScope tranScope = new TransactionScope()) {
		int id = 1;
		string name = &quot;Project 1&quot;;
		string description = &quot;Description of Project 1&quot;;
		Assert.IsTrue(Service.Insert(id, name, description));
		Assert.IsTrue(ProjectExists(name, description));

		id = 2;
		name = &quot;Project 2&quot;;
		description = &quot;Description of Project 2&quot;;
		Assert.IsTrue(Service.Insert(id, name, description));
		Assert.IsTrue(ProjectExists(name, description));
	}
}

/// &lt;summary&gt;
/// Test the Service method GetIdByName
/// &lt;/summary&gt;
[TestMethod]
public void GetIdByName()
{
	using(TransactionScope tranScope = new TransactionScope()) {
		// Insert the Test Data.
		SqlHelper.ExecuteSqlScript(Db, @&quot;......UnitTestsScriptsInsertTestProjects.sql&quot;);

		// Test Service Method.
		int id = -1;
		string name = &quot;Kook&quot;;
		id = Service.GetIdByName(name);
		Assert.AreEqual&lt;int&gt;(1, id);

		name = &quot;Samii&quot;;
		id = Service.GetIdByName(name);
		Assert.AreEqual&lt;int&gt;(2, id);

		name = &quot;CPW&quot;;
		id = Service.GetIdByName(name);
		Assert.AreEqual&lt;int&gt;(3, id);
	}
}
</pre>
<p>First we have the insert method, which doesn&#8217;t require any existing data, so no script is executed before the service method. We do however wrap everything into a TransactionScope, which ensures that whatever the test does, after the TransactionScope block is out of the scope it will rollback all the changes. I will leave the discussion on Transactions for a later post.</p>
<p>Now, the second method is more interesting. The GetIdByName test method actually needs a setup. We could have created a dependency on the Insert method so that the first test method prepares the data that the GetIdByName method will require to test. But we want to avoid Erratic Test behavior, so we created them completely independent.</p>
<p>The GetIdByName is also wrapped in the TransactionScope so that we can ensure that after the test is done, the data is rolled back to its initial state.</p>
<p>The script (InsertTestProjects.sql) contains three sample projects which the service method will retrieve and we will verify the returned data.</p>
<p>As you can see testing Data-Driven Services is very simple. If you pay close attention to the project you will notice that this way of doing this doesn&#8217;t only apply to WCF Services, any .Net assembly can be tested this way.</p>
<p>Hope this helps you on your quest for simplicity and correctness!</p>
<p><a href="http://neonlabs.structum.net/pkgs/WCFTesting.zip">Download Test Solution</a></p>
<p><strong>Test Solution Requirements</strong></p>
<ul>
<li>Visual Studio 2008</li>
<li>Enterprise Library 4.x</li>
<li>.Net 3.5</li>
<li>SQL Server 2005</li>
</ul>
<p>The Database folder contains the table and stored procedures needed by the code. Just modify the ExecuteScripts.bat to set the database authentication info. Also modify the App.config in the UnitTests project in order to run accordingly.</p>
<p>(Disclaimer: This project has been stripped down so that it is easy enough to understand. This second method, iin order to follow Data-Driven Test, should get the expected data from an Xml file, insert it into the database, and compare accordingly. In this sample we have the data hard coded for simplicity. Building an interpreter is our of the scope of this post.)</p>
<p>* References:<br />
- Meszaros, Gerard. &#8220;xUnit Test Patterns: Refactoring Test Code&#8221;<br />
2007, Pearson Education.<br />
<a href="http://www.amazon.com/xUnit-Test-Patterns-Refactoring-Addison-Wesley/dp/0131495054/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1238132850&amp;sr=8-1">Amazon</a></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Unit+Testing+Data-Driven+WCF+Services+http://7o3zi.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Unit+Testing+Data-Driven+WCF+Services+http://7o3zi.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=296</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let the Clouds Make your life easier&#8230;</title>
		<link>http://neonlabs.structum.net/blog/?p=293</link>
		<comments>http://neonlabs.structum.net/blog/?p=293#comments</comments>
		<pubDate>Wed, 25 Mar 2009 01:34:00 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[fun]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=293</guid>
		<description><![CDATA[I just stumbled upon this great link that explains the power of the clouds for software solutions and how it reduces complexity: Here
 Tweet This Post]]></description>
			<content:encoded><![CDATA[<p>I just stumbled upon this great link that explains the power of the clouds for software solutions and how it reduces complexity: <a href="http://geekandpoke.typepad.com/geekandpoke/2009/03/let-the-clouds-make-your-life-easier.html">Here</a></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Let+the+Clouds+Make+your+life+easier%E2%80%A6+http://62ccy.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Let+the+Clouds+Make+your+life+easier%E2%80%A6+http://62ccy.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=293</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remove files recursively..</title>
		<link>http://neonlabs.structum.net/blog/?p=274</link>
		<comments>http://neonlabs.structum.net/blog/?p=274#comments</comments>
		<pubDate>Wed, 11 Mar 2009 02:43:30 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[Source Control]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[tfs]]></category>
		<category><![CDATA[vbscript]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=274</guid>
		<description><![CDATA[I had a problem a couple of weeks ago, when my main Subversion repository completely died out of data corruption. I was trying to check-in my latest changes, but I just couldn&#8217;t. Nothing was lost since I do regular backups of my repositories. So I was in good shape. I thought to myself this was [...]]]></description>
			<content:encoded><![CDATA[<p>I had a problem a couple of weeks ago, when my main Subversion repository completely died out of data corruption. I was trying to check-in my latest changes, but I just couldn&#8217;t. Nothing was lost since I do regular backups of my repositories. So I was in good shape. I thought to myself this was the best chance to migrate to TFS, which I have been wanting to do for a while.</p>
<p>Note: I did not leave subversion in favor of TFS because of this corruption. This data corruption was expected to happen because the machine usually gets killed in the middle of backup or by the occasionalÂ  &#8220;Windows Update&#8221;; so the repository was destined to die eventually. I could have fixed the repository in no time with the tools that Subversion provides or simply by restoring backups. But I moved to TFS mainly because of the project integration in all aspects and not only source control, and because most of my clients use TFS, so integration with their systems is also easier.</p>
<p>Anyways I needed a clean copy of my newest changes so that I could import it into TFS. I felt lazy at the moment and I chose the complex solution, clean up my subversion repository copy. My project has a LOT of folders, so deleting the .svn folders became a HUGE effort. I decided to use a simple shell command to do that, like I just to do in linux:</p>
<pre class="brush: php;">
rm -rf `find . -type d -name .svn`
</pre>
<p>So I started looking on google to see what was the way to it in Powershell and I found really complex solutions like:</p>
<pre class="brush: php;">
$fso = New-Object -com &quot;Scripting.FileSystemObject&quot;;
$folder = $fso.GetFolder(&quot;C:\\Test\\&quot;);

foreach ($subfolder in $folder.SubFolders) {
    if ($subfolder.Name -like &quot;*.svn&quot;){
        remove-item $subfolder.Path -Verbose
    }
}
</pre>
<p><small>Source: <a href="http://www.vistax64.com/powershell/80403-pecursive-delete-implementation-powershell.html">Here</a></small></p>
<p>It really scared me! I thought that, if that was the easiest way to delete recursively, then powershell is doomed. Thanks to google, I did find a simpler way to do this:</p>
<pre class="brush: php;">
dir . -recurse .svn -fo | remove-item -force
</pre>
<p>Which is quite elegant and fast! Sometimes I just don&#8217;t understand why it is so difficult to come up with the simple answer. It happens to me quite often. It is extremely easy to come up with a complex solution&#8230;but to actually have a simple solution is always difficult. This is only one example.</p>
<p>Anyways this did the trick and it works perfectly.</p>
<p>[Update]: I forgot to add the &#8216;-fo&#8217; option which shows the hidden files (in this case the .svn folders). Otherwise this would not work.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Remove+files+recursively..+http://zaf9c.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Remove+files+recursively..+http://zaf9c.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=274</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sticky Sorter</title>
		<link>http://neonlabs.structum.net/blog/?p=270</link>
		<comments>http://neonlabs.structum.net/blog/?p=270#comments</comments>
		<pubDate>Thu, 20 Nov 2008 17:45:32 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[microsoft]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=270</guid>
		<description><![CDATA[Microsoft just announced a very cool Research project called &#8216;Sticky Sorter&#8216; which is a tool that helps us organize information using sticker notes or post-its.
From the website:
StickySorter is an Office Labs sponsored spare-time project by two Microsoft employees, Julie and Sumit. The idea sprung from the need for project teams all over the world to [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft just announced a very cool Research project called &#8216;<a href="http://www.officelabs.com/projects/stickysorter/Pages/default.aspx">Sticky Sorter</a>&#8216; which is a tool that helps us organize information using sticker notes or post-its.</p>
<p>From the website:</p>
<blockquote><p>StickySorter is an Office Labs sponsored spare-time project by two Microsoft employees, Julie and Sumit. The idea sprung from the need for project teams all over the world to gather and organize data using a collaborative process known as <a href="http://en.wikipedia.org/wiki/Affinity_diagram" target="_blank">affinity diagramming</a>.Â  Since its inception, StickySorter has evolved into a desktop application so anyone can use it to collaborate and organize ideas electronically, using a familiar sticky note interface.</p></blockquote>
<p>What I see here is something that I have been looking for some time now and which is specially useful for Scrum. This can be used to recreate the Scrum sprint backlog in a very friendly way.</p>
<p>I have created a sample of what it would look like using the tool:</p>
<p style="text-align: center;"><a href="http://neonlabs.structum.net/blog/wp-content/uploads/2008/11/sticky_sorter.jpg"><img class="size-medium wp-image-271 aligncenter" title="sticky_sorter" src="http://neonlabs.structum.net/blog/wp-content/uploads/2008/11/sticky_sorter-300x216.jpg" alt="" width="300" height="216" /></a></p>
<p>I need to play with it a bit more in order to see it&#8217;s full capabilities, and try to apply it to scrum. You can download the tool <a href="http://msofficelb.vo.llnwd.net/o25/6a8535b5-e3bf-484f-a9ac-bc0fedf5bb3a/1.0.1110.0/StickySorterSetup.msi">here</a>.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Sticky+Sorter+http://yorop.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Sticky+Sorter+http://yorop.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=270</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Alchemy&#8230;.</title>
		<link>http://neonlabs.structum.net/blog/?p=268</link>
		<comments>http://neonlabs.structum.net/blog/?p=268#comments</comments>
		<pubDate>Thu, 20 Nov 2008 06:17:53 +0000</pubDate>
		<dc:creator>Alex Espinoza</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[adobe air]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[reuse]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://neonlabs.structum.net/blog/?p=268</guid>
		<description><![CDATA[I have not really been a follower of Macromedia (now part of Adobe) or its products; specially Flash, but I just found out about one research project that does capture my attention: Alchemy.
From the press release:
Alchemy is a research project that allows users to compile C and C++ code that is targeted to run on [...]]]></description>
			<content:encoded><![CDATA[<p>I have not really been a follower of Macromedia (now part of Adobe) or its products; specially Flash, but I just found out about one research project that does capture my attention: <a href="http://labs.adobe.com/technologies/alchemy/">Alchemy</a>.</p>
<p>From the press release:</p>
<blockquote><p>Alchemy is a research project that allows users to compile C and C++ code that is targeted to run on the open source ActionScript Virtual Machine (AVM2). The purpose of this preview is to assess the level of community interest in reusing existing C and C++ libraries in Web applications that run on AdobeÂ® FlashÂ® Player and Adobe AIRÂ®.</p></blockquote>
<p>This project promises that C/C++ libraries that have no OS dependencies can be run on the Adobe AIR platform. This is HUGE. Just to think that at least 90% of my libraries can be used in Web Applications is awesome.</p>
<p>A not so direct competitor, Microsoft&#8217;s Silverlight, does provide a way to reuse C++ libraries via C++/CLI, and it works like a charm; I happend to have a lot of C++ librariesÂ  which have valuable code. Lately I have been reusing those libraries in Web Applications via C++/CLI and WebServices. It works, and it works fine.</p>
<p>I have not worked with Silverlight 2.0 yet; I have played around with it, but I have not done anything that is worth mentioning. In my tests, I see Ican also reuse those C++ libraries with C++/CLI and Webservices. The problem is that this approach will only work on Windows, since C++/CLI is not supported by Mono.</p>
<p>Another approach would be to make the WebServices in native C++, and call it from anywhere: Silverlight, Javascript and .Net. This would work anywhere.</p>
<p>This doesn&#8217;t take away the credit for Alchemy, which makes the C++ libraries natively accessible to Adobe AIR applications, in a way this is very close to what C++/CLI does.</p>
<p>The purpose of the Alchemy project is :</p>
<blockquote><p>Alchemy is primarily intended to be used with C/C++ libraries that have few operating system dependencies. Ideally suited for computation-intensive use cases, such as audio/video transcoding, data manipulation, XML parsing, cryptographic functions or physics simulation, performance can be considerably faster than ActionScript 3.0 and anywhere from 2-10x slower than native C/C++ code. Alchemy is not intended for general development of SWF applications using C/C++.</p></blockquote>
<p>Comparing it with C++/CLI, I do see an advatage from using C++/CLI to reuse C++ libraries in RIA applications over the Alchemy project: I can reuse .Net libraries with C++ native code, which gives me the best of both worlds.</p>
<p>I did some research on Alchemy, and it seems it doesn&#8217;t allow Flex code to be embedded with C++ native code. My research was not very comprehensive to say the least, so I could be wrong. It could also be too soon to tell since this is still in early stages of research and development.</p>
<p>In conclusion, this project seems very interesting, and I&#8217;m going to keep an eye out for it.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Alchemy%E2%80%A6.+http://cpg5d.th8.us" title="Post to Twitter"><img class="nothumb" src="http://neonlabs.structum.net/blog/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Alchemy%E2%80%A6.+http://cpg5d.th8.us" title="Post to Twitter">Tweet This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://neonlabs.structum.net/blog/?feed=rss2&amp;p=268</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
