<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>OpenLandscape</title>
	<atom:link href="http://openlandscape.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://openlandscape.net</link>
	<description>Living and Solving The Mystery</description>
	<lastBuildDate>Mon, 16 Jan 2012 19:37:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='openlandscape.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>OpenLandscape</title>
		<link>http://openlandscape.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://openlandscape.net/osd.xml" title="OpenLandscape" />
	<atom:link rel='hub' href='http://openlandscape.net/?pushpress=hub'/>
		<item>
		<title>Campfire Mono: F# and F# on Mono</title>
		<link>http://openlandscape.net/2012/01/16/campfire-mono-fsharp-and-fsharp-on-mono/</link>
		<comments>http://openlandscape.net/2012/01/16/campfire-mono-fsharp-and-fsharp-on-mono/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 19:36:57 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[CampfireMono]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Campfire Mono]]></category>
		<category><![CDATA[Cape Town]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Community Nights]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[MonoDevelop]]></category>

		<guid isPermaLink="false">http://openlandscape.net/?p=1029</guid>
		<description><![CDATA[I&#8217;m pleased to announce Campfire Mono&#8217;s 3rd talk by Andrew Jones (gplus.to/ascjones), about developing applications with F# and F# on Mono: What: Developing applications with F# and F# on Mono. Who: Andrew Jones. Where: Microsoft Cape Town Offices, Golf Park 3, Engen House, Raapenberg Road, Mowbray 7925, Cape Town. When: 25 January 2012, 6:30PM. If [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=1029&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://openlandscape.files.wordpress.com/2012/01/monodevelop.png"><img class="alignright  wp-image-1030" title="MonoDevelop" src="http://openlandscape.files.wordpress.com/2012/01/monodevelop.png?w=180&#038;h=180" alt="" width="180" height="180" /></a>I&#8217;m pleased to announce Campfire Mono&#8217;s 3rd talk by Andrew Jones (<a href="http://gplus.to/ascjones">gplus.to/ascjones</a>), about</p>
<h3>developing applications with F# and F# on Mono:</h3>
<p>What: <em><strong>Developing applications with F# and F# on Mono.</strong></em><br />
Who: Andrew Jones.<br />
Where: <em>Microsoft Cape Town Offices, Golf Park 3, Engen House, Raapenberg Road, Mowbray 7925, Cape Town</em>.<br />
When: <em><strong>25 January 2012, 6:30PM.</strong></em></p>
<p>If you attended any of the previous events, then you&#8217;ll also notice that we decided to move Campfire Mono evenings, to Microsoft Cape Town&#8217;s Community nights on the last Wednesday of every month. I <em>don&#8217;t</em> think we&#8217;ll do a Campfire Mono evening every month, as the community is still too small to justify this. The aim is still to do a quarterly talk, or bi-monthly at most.</p>
<p>I&#8217;m also considering renaming the community to Campfire Dev. I think the name Campfire Mono might be a little misleading. I originally decided on the Mono part of the name, to create more awareness about Mono, and because I felt, as the biggest .NET open source project, it symbolises all the community is about. However after a few discussions about the community and its aims, I realized the name is misleading people to believe that it&#8217;s only about developing applications with Mono. This was never the aim of Campfire Mono. The goal of Campfire Mono is much broader, its aim is to discuss alternative software development tools, techniques and processes, with a .NET, Windows and Mono emphasis.</p>
<p>Cool, Cya at the next Campfire Mono!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/1029/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/1029/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/1029/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/1029/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/1029/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/1029/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/1029/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/1029/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/1029/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/1029/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/1029/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/1029/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/1029/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/1029/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=1029&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2012/01/16/campfire-mono-fsharp-and-fsharp-on-mono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2012/01/monodevelop.png?w=300" medium="image">
			<media:title type="html">MonoDevelop</media:title>
		</media:content>
	</item>
		<item>
		<title>The Other Side Of Job Creation</title>
		<link>http://openlandscape.net/2012/01/12/other-side-of-job-creation/</link>
		<comments>http://openlandscape.net/2012/01/12/other-side-of-job-creation/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 20:39:20 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[Finance, Economics & Investing]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[ANC]]></category>
		<category><![CDATA[Capitalism]]></category>
		<category><![CDATA[Debt to GDP]]></category>
		<category><![CDATA[Economy]]></category>
		<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[Government]]></category>
		<category><![CDATA[Job Creation]]></category>
		<category><![CDATA[Labor Laws]]></category>
		<category><![CDATA[Socialism]]></category>
		<category><![CDATA[South Africa]]></category>
		<category><![CDATA[Unions]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=853</guid>
		<description><![CDATA[It astonishes me to see how everyone buys the &#8216;job creation&#8217; story the state and media sells them, without considering the bigger picture. What I believe most people fail to ask is how many jobs were not created elsewhere, where there is a greater need or bigger demand. In order for new businesses to flourish, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=853&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It astonishes me to see how everyone buys the &#8216;job creation&#8217; story the state and media sells them, without considering the bigger picture. What I believe most people fail to ask is <em><strong>how many jobs were not created elsewhere</strong></em>, where there is a greater need or bigger demand. In order for new businesses to flourish, it will require reallocation of capital and people and their skills to higher yielding industries and businesses. This process is very important to the agility and livelihood of a healthy economy, where unproductive businesses close down to make way for new ones that can use the resources (capital and people) better, because they can better provide things people really want at prices they&#8217;re willing to pay. When government (and the labor unions) intervenes in this process, they waste capital by not directing resources to the most desirable industries and businesses, and applying it to their political agenda.</p>
<p>Consider this about private businesses: If they fail to produce in the cheapest and best possible way those things which people most need, they suffer losses and are eliminated from the economy. Other businesses who know better how to deliver the right things, at the right price, replace them. This is how inefficient businesses get eliminated from the economy, a kind of survival of the fittest. If you take the wrong decisions in business, you get punished very quickly. Do it long enough and you&#8217;re out.</p>
<p>Now consider this &#8211; government&#8217;s &#8216;capital&#8217; comes from tax or debt. Debt is just borrowing against a government&#8217;s future income, that in turn comes from tax. Therefore, ultimately, all government&#8217;s income comes from tax. But in government&#8217;s case there is absolutely no incentive or threat to use it efficiently. Because government doesn&#8217;t get eliminated from the economy when it makes the wrong decisions about how and what to use resources for, it continues to do so at a much greater cost to the economy.</p>
<p>With every new &#8216;job creation&#8217; project government funds, that same amount of money was previously taken away from productive businesses. Because of government&#8217;s inefficiency and misallocation, it is very likely that a lot more could have been done with the resources elsewhere, including hiring people. Also, based on what criteria does government direct resources? Yes, a lot of it is probably for the &#8220;greater good&#8221; and altruistic in nature, but an enormous part of the criteria is determined by political, emotional, subjective and selfish factors.</p>
<p>Another thing I find quite amusing to read is how the competition commission hunted down and punished the latest business cartel that is hurting the man on the street by manipulating prices. What is a cartel other than a type of monopoly? And we all know how much our beloved socialist government loves their state controlled monopolies: Eskom, Transnet, Telkom, PetroSA and Infraco. And what they don&#8217;t already control under these state enterprises and government departments, I&#8217;m sure they are planning to take over soon. By the sounds of it, mining and banking is next on the cards. So on the one hand government continuously seeks to end anti-competitive behavior, but on the other it&#8217;s recommended as the best solution to the nation&#8217;s problems. If there&#8217;s one thing the South African economy needs is more competition, but not only in the form of a reactive central watchdog that runs around trying to police the 3 or 5 big players in each industry. Instead we need to focus on growing the size, quality and number of entrepreneurial businesses in each industry.</p>
<p>At this stage government and the labour unions, are blocking the free readjustment and reallocation of resources to new businesses that can use it to better produce that what is required more. Government sucks more resources out of the economy, in the form of tax for their &#8216;job creation&#8217;, and labor unions force artificial labor costs on businesses. Instead of addressing the true underlying problems of our economy, government chooses to prop up ailing industries and expand the public sector. In the long run this will do very little to solve the dysfunctional structure of our economy:</p>
<p>1. There is poor separation of concerns between the labor unions, Cosatu, and the government. Cosatu helps the ANC government stay in power. Let&#8217;s not forget they were the big reason Zuma was elected as president, and election after election tell their members to vote for the ANC. This makes government unlikely to make the necessary labor and economic reforms, needed to pursue a true growth strategy.</p>
<p>2. Labour unions and the ANC government must accept, that it&#8217;s impossible to keep all current jobs, with increasing salaries, and have meaningful success in creating new businesses. Rather focus on creating new businesses, making current ones more competitive and allowing labour to adjust to the industry&#8217;s natural cost and employment structure. This means there will be jobs lost, before new ones can be created.</p>
<p>3. The ANC government must also realize that the free market economy is better at determining how to use resources. Resources are still wasted in a free market economy, but not for long. Expanding the public sector payroll, increasing grants, and so forth, requires more tax money, which in the end defeats their original purpose of improving living conditions.</p>
<h3>Government Covers Up Underlying Problems by Increasing Public Sector Employment</h3>
<p>By April 2010 the private sector (excluding agriculture) lost some 377,000 jobs from a peak in October 2008. Since then the private sector has only been able to add a 94,470 jobs, and the public sector added 106,503 or 53% of 201,000. In July 2011, private sector employment has grown 0.5% since a year before, and the public sector 3.3%. I&#8217;m just wondering what all these new government employees are doing? What are they creating that other people need? What new industries, technologies,and specialized skills are they mastering?</p>
<p>National departments&#8217; wages also increased by 11.3% for the year to July 2011, and increased by more than 10% for the past 2 years. Private sector wages only increased by 7,4%. So clearly the place to work in South Africa is at government departments. This has to mean that these people are making the most important contributions to our economy, or does it? The figures seem to suggest they own specialized skills that are in high demand, because not only is the country hiring more of these people, but we&#8217;re also paying them more.</p>
<p>To get a picture of the SA government&#8217;s debt, I quote a sentence from the SA Reserve Bank&#8217;s Quarterly Bulletin for December 2011: &#8220;As a ratio of gross domestic product, national government’s total gross loan debt increased from 35,4 per cent to 37,3 per cent during the period under review.&#8221; So quite an innocent figure really, especially considering that America&#8217;s debt to GDP is 100% and Greece&#8217;s is 150%. But as in all things finance, it&#8217;s the trends that reveal the truth. In 2007 this figure was 27.4%, and except for 2008, has grown every year since then. Makes one wonder if South Africa isn&#8217;t maybe Africa&#8217;s version of a Greece in the making?</p>
<h3>References</h3>
<ul>
<li><a href="http://www.businessday.co.za/articles/Content.aspx?id=153253">Growth Path is a fantasy document</a>.</li>
<li><a href="http://www.businessday.co.za/articles/Content.aspx?id=153175">Key sectors again shed thousands of jobs amid signs of uneven recovery</a>.</li>
<li><a href="http://www.businessday.co.za/articles/Content.aspx?id=153310">The garden path won’t lead to jobs</a>.</li>
<li><a href="http://www.businessday.co.za/articles/Content.aspx?id=155734">EDITORIAL: Sucking policy from their thumbs</a>.</li>
<li><a href="http://www.businessday.co.za/articles/Content.aspx?id=156124">Gordhan to launch new rescue for factories</a>.</li>
<li><a href="http://www.foreignaffairs.com/articles/136612/irving-kristol/why-inequality-doesnt-matter?cid=rss-rss_xml-why_inequality_doesnt_matter-000000">Why Inequality Doesn&#8217;t Matter</a>.</li>
<li><a href="http://robertbrand.wordpress.com/2010/09/30/more-chiefs-but-wheres-the-service-delivery/">More chiefs, but where’s the service delivery?</a></li>
<li><a href="http://www.bloomberg.com/news/2011-11-23/anc-considers-export-tax-pensions-money-in-south-africa-plan.html">ANC Targets Export Taxes, Pension Funds in South Africa’s Economic Plan</a>.</li>
<li><a href="http://www.engineeringnews.co.za/article/labour-laws-bee-hamper-small-business-2011-11-22">Labour laws, BEE hamper small business</a>.</li>
<li><a href="http://www.businessday.co.za/articles/Content.aspx?id=118616">Ballooning state wage bill ‘unsustainable’</a>.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/853/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/853/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/853/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/853/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/853/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/853/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/853/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/853/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/853/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/853/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/853/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/853/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/853/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/853/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=853&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2012/01/12/other-side-of-job-creation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
		<item>
		<title>My New Chomma, Clojure</title>
		<link>http://openlandscape.net/2011/09/15/my-new-chomma-clojure/</link>
		<comments>http://openlandscape.net/2011/09/15/my-new-chomma-clojure/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 20:20:27 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[Clojure]]></category>
		<category><![CDATA[InfoTech]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[REPL]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=801</guid>
		<description><![CDATA[A few months ago I decided that it&#8217;s time to learn a new programming language that&#8217;s completely outside my normal frame of reference. After watching a video on InfoQ about the future of programming languages, I decided Clojure would make an interesting choice. I bought the Pragmatic Programmer book, and what can I say, we&#8217;ve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=801&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A few months ago I decided that it&#8217;s time to learn a new programming language that&#8217;s completely outside my normal frame of reference. After watching a video on InfoQ about the future of programming languages, I decided Clojure would make an interesting choice. I bought the Pragmatic Programmer book, and what can I say, we&#8217;ve been becoming good friends these days.</p>
<p>I think I&#8217;m taking to the functional programming paradigm, and like the idea of pure functions, without shared state. Even when I program C#, I tend to make heavy use of its closures like delegates, events, anonymous methods, and lambdas, using methods as data. Learning Clojure is quite a challenge if you&#8217;ve been conditioned by years of static typed, imperative programming.</p>
<h3>A Very Basic Clojure Work Flow For Beginners</h3>
<p>What I&#8217;ll describe here is a very basic workflow that will enable you to write some trivial Clojure apps and work through some of the examples you might find in books and on the web. Some of these tasks aren&#8217;t that clear reading the available material, as the authors usually skip to the more exciting parts of the language.</p>
<p>1. Get <a href="http://code.google.com/p/counterclockwise/" target="_blank"><em><strong>Counterclockwise</strong></em> for Eclipse</a><br />
2. Create an executable command line script (in my case I called it repl.sh) to launch <strong><em>Clojure REPL</em></strong> (Read Evaluate Print Loop or Interactive Console) with the required libraries referenced in the class path (Clojure runs on the Java VM):</p>
<p style="padding-left:30px;"><em>java -cp .:src:lib/JLine/jline-0_9_5.jar:lib/clojure-1.2.1.jar:lib/clojure-contrib.jar jline.ConsoleRunner clojure.main</em></p>
<p>This adds the necessary packages to the Java class path, and launches Clojure. JLine adds functionality to the Clojure REPL, like being able to press the up arrow to retrieve the previous command.</p>
<p>3. Compose your Clojure application by grouping related functions in the same <em><strong>namespaces</strong></em>. The first difference you&#8217;ll notice between Clojure, and an imperative language like Java or C#, is that it doesn&#8217;t have classes, only namespaces or packages. You define a namespace with the ns function:</p>
<p style="padding-left:30px;"><em>(ns algorhythm.test.geometry.trigonometry-tests)</em></p>
<p>This tells Clojure to switch to that namespace, and if it doesn&#8217;t exist to create it, and to create all consecutive functions defined under it. To import another namespace to make its functions available you use the <em><strong>&#8220;(:use&#8221;</strong></em>:</p>
<p style="padding-left:30px;"><em>(:use clojure.contrib.test-is algorhythm.geometry.trigonometry algorhythm.geometry.geometric-vector)</em></p>
<p>4. Start by writing some unit tests for your Clojure application. Or if you don&#8217;t do Test Driven Development (TDD), you can skip straight to 7, writing your actual implementation.</p>
<p style="padding-left:30px;"><em>(ns algorhythm.test.geometry.trigonometry-tests</em><br />
<em> (:use clojure.contrib.test-is algorhythm.geometry.trigonometry algorhythm.geometry.geometric-vector))</em></p>
<p style="padding-left:30px;"><em>(deftest find-longest-vertex-should-find-the-longest-vertex</em><br />
<em> (def triangle {:vertex-y (struct-map geometric-vertex :length 65 :link (struct-map vertex-link :angle 90 :vertex-name &#8220;vertex-x&#8221;)),</em><br />
<em> :vertex-x (struct-map geometric-vertex :length 99 :link (struct-map vertex-link :angle 20 :vertex-name &#8220;hypotenuse&#8221;)),</em><br />
<em> :hypotenuse (struct-map geometric-vertex :length 91 :link (struct-map vertex-link :vertex-name &#8220;vertex-y&#8221;))})</em></p>
<p style="padding-left:30px;"><em>(is (= 99 (find-longest-vertex triangle))))</em></p>
<p>First create and switch to the namespace where we&#8217;re going to define our unit tests. Then we tell Clojure to reference the Clojure.contrib library, where Clojure&#8217;s unit test framework is located. You then declare your unit test functions, with <em><strong>(deftest &#8230;)</strong></em>, and do assertions with<em><strong> (is &#8230;)</strong></em>.</p>
<p>5. Launch Clojure&#8217;s REPL from terminal and load your unit test .clj files with <em><strong>(load-file &#8230;)</strong></em>.</p>
<p style="padding-left:30px;"><em>jacquesd@ubuntu:~&gt; ./repl.sh</em></p>
<p style="padding-left:30px;"><em>Clojure 1.2.1</em><br />
<em> user=&gt; (load-file &#8220;source/algorhythm/test/geometry/trigonometry_tests.clj&#8221;)</em></p>
<p>6. Run all loaded unit tests on the Clojure REPL with <em><strong>(run-tests)</strong></em>. They will fail.</p>
<p style="padding-left:30px;"><em>user=&gt; (run-tests)</em></p>
<p>7. Now, write your required functions and repeat the cycle from 5. More specifically in our example, we should be writing algorhythm.geometry.trigonometry and algorhythm.geometry.geometric-vector, that&#8217;s required by our example unit test.</p>
<p>Okay, that&#8217;s my 2c to help your Clojure baby steps along. Preferably you&#8217;d opt for a proper project build system, like <a href="https://github.com/technomancy/leiningen" target="_blank">Leinigen</a>, instead of manually loading and executing files through the Clojure REPL. But that&#8217;s a story for another day&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/801/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=801&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2011/09/15/my-new-chomma-clojure/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
		<item>
		<title>Zippy Tips Working With ServiceStack, Backbone.js, jQuery &amp; Mono-Develop on Mac</title>
		<link>http://openlandscape.net/2011/07/30/zippy-tips-working-with-servicestack-backbone-js-jquery-mono-develop-on-mac/</link>
		<comments>http://openlandscape.net/2011/07/30/zippy-tips-working-with-servicestack-backbone-js-jquery-mono-develop-on-mac/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 16:53:32 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[SoftwareDevelopment]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Backbone.js]]></category>
		<category><![CDATA[Cross Origin Resource Sharing]]></category>
		<category><![CDATA[MonoDevelop]]></category>
		<category><![CDATA[ServiceStack]]></category>
		<category><![CDATA[XSP]]></category>

		<guid isPermaLink="false">http://openlandscape.net/?p=952</guid>
		<description><![CDATA[Okay, just some random nigglies I&#8217;m experiencing and sort of solved, working with ServiceStack, Backbone.js, Mono &#38; Mono-Develop on Mac. MonoDevelop &#38; XSP dev web server Not sure who else is experiencing this issue, but my MonoDevelop and XSP dev web server gets confused sometimes, after a while. I launch two projects when I click [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=952&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Okay, just some random nigglies I&#8217;m experiencing and sort of solved, working with ServiceStack, Backbone.js, Mono &amp; Mono-Develop on Mac.</p>
<h3>MonoDevelop &amp; XSP dev web server</h3>
<p>Not sure who else is experiencing this issue, but my <em><strong>MonoDevelop</strong></em> and <em><strong>XSP dev web</strong></em> server gets confused sometimes, after a while. I launch two projects when I click play in my project, a web service based on ServiceStack and a ASP .NET project based on Backbone.js. For some weird reason after N number of times relaunching these 2 web projects from MonoDevelop &#8211; XSP and MonoDevelop loses track of the web service&#8217;s XSP process. The problem then is that I&#8217;m unable to re-launch the web service project with a new version.</p>
<p>So&#8230; in terminal do &#8220;<strong><em>lsof -i -P | grep [port-number-of-xsp-project-website]</em></strong>&#8220;. This will give you the XSP process ID. Then, again in terminal, do a &#8220;<em><strong>sudo kill [pid]</strong></em>&#8220;, to kill the ghost XSP process.</p>
<p>Great now you can continue launching XSP from MonoDevelop.</p>
<h3>Cross Domain/Site Scripts with jQuery &amp; Backbone.js</h3>
<p>Riiight, so, I was doing the whole preflight thing with jQuery $.ajax. In Firebug I could see the OPTIONS request being made and the server returning the a 200 OK, with the following headers: <em><strong>Access-Control-Allow-Origin</strong></em> and <em><strong>Access-Control-Allow-Methods</strong></em>. BUT, $.ajax never made the actual request to PUT or POST the data to my ServiceStack web service. Well, it turns out another header is required to be returned by the web server&#8217;s response to the OPTIONS request: <em><strong>Access-Control-Allow-Headers</strong></em>, with a value of <em><strong>Content-Type</strong></em>.</p>
<p>So when using ServiceStack make sure you set your GlobalResponseHeaders in your AppHosts Configure(&#8230;) method:</p>
<p><pre class="brush: csharp;">
public override void Configure(Container container)
{
SetConfig(new EndpointHostConfig
{
GlobalResponseHeaders =
{
{ &quot;Access-Control-Allow-Origin&quot;, &quot;*&quot; }, // You probably want to restrict this to a specific origin
{ &quot;Access-Control-Allow-Methods&quot;, &quot;PUT, GET, POST, DELETE, OPTIONS&quot; },
{ &quot;Access-Control-Allow-Headers&quot;, &quot;Content-Type&quot; }
},
});
}
</pre></p>
<h3>Saving Models In Backbone.js</h3>
<p>When you want to update a model, make sure you call <em><strong>model.save({ anUpdatedProperty: newValue, anotherUpdatedProperty: newValue })</strong></em>, instead of just <em>model.save()</em>, otherwise boggerrol will happen.</p>
<p>When your <em>Backbone.js</em> app talks to a web service that serializes data into a CamelCase format, like C#&#8217;s properties, then Backbone&#8217;s <em><strong>collection.get(&#8230;)</strong></em> won&#8217;t work for you, because your model&#8217;s <em><strong>id property</strong></em>&#8216;s name will be &#8220;<em><strong>Id</strong></em>&#8221; and <em><strong>not &#8220;id&#8221;</strong></em>. To get around this add the <em><strong>idAttribute</strong></em> to your Backbone.js Model, to reroute id to your chosen property on the model object:</p>
<p><pre class="brush: jscript;">

var theModel = Backbone.Model.extend(
{
idAttribute: &quot;Id&quot;
});
&lt;pre&gt;</pre></p>
<p>Cool. That&#8217;s it for now. Catch you on the flip side!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/952/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=952&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2011/07/30/zippy-tips-working-with-servicestack-backbone-js-jquery-mono-develop-on-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
		<item>
		<title>Campfire Mono: Changing The Culture, Hearts &amp; Minds of .NET Society</title>
		<link>http://openlandscape.net/2011/06/14/changing-the-culture-hearts-minds-of-net-society/</link>
		<comments>http://openlandscape.net/2011/06/14/changing-the-culture-hearts-minds-of-net-society/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 19:01:52 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[CampfireMono]]></category>
		<category><![CDATA[Mono.NET]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[Campfire Mono]]></category>
		<category><![CDATA[Cape Town]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Silicon Cape]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=881</guid>
		<description><![CDATA[This year I attended the 1st Ruby conference in Africa, Rubyfuza. I walked out of that conference inspired and envious at the same time, by the scale of the Ruby community&#8217;s commitment to take full responsibility, accountability and ownership of Ruby, Ruby products and the event itself. No single big vendor was responsible for the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=881&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.linkedin.com/groups/Campfire-Mono-3705428?mostPopular=&amp;gid=3705428"><img class="size-medium wp-image-918 alignright" title="Campfire Mono" src="http://openlandscape.files.wordpress.com/2011/06/logo.png?w=293&#038;h=300" alt="Mono in the wild" width="293" height="300" /></a>This year I attended the 1st <em>Ruby</em> conference in Africa, <em><strong><a title="Rubyfuza" href="http://rubyfuza.org/" target="_blank">Rubyfuza</a></strong></em>. I walked out of that conference inspired and envious at the same time, by the scale of the Ruby community&#8217;s commitment to take full responsibility, accountability and ownership of Ruby, Ruby products and the event itself. No single big vendor was responsible for the event &#8211; everything was done by the developers themselves. Everyone that presented, directly used and contributed to the public products they were using. The community took full responsibility for their shared software. Here was a complete software ecosystem with world class applications and libraries that easily match, and often surpassed, similar offerings from billion dollar corporations, such as Microsoft and Oracle. I was envious that we didn&#8217;t see <em>more</em> leadership, responsibility and accountability in the .NET community.</p>
<p>In the .NET community there are many passionate people doing awesome work independently. However I cannot help but feel that the larger part of .NET society is blinded by their biased Microsoft focus, and the things they discuss stay in the context of what Microsoft does and says. It&#8217;s sad to know of the great projects out there, yet see so little representation and knowledge at gatherings.<em><strong></strong></em></p>
<p><em>The alternative and open source .NET communities have been growing in leaps and bounds, with the same characteristics as its Ruby counterpart. However it&#8217;s still too often perceived as an exotic place in some forsaken village on the .NET map, meant for .NET developers that are desperate to throw their bug ridden night time pet projects at anyone that is willing to hover over their <a title="GitHub" href="http://www.github.com" target="_blank">GitHub</a> repository&#8217;s link.</em></p>
<p><a href="http://openlandscape.files.wordpress.com/2011/06/using-mono.png"><img class="alignright" title="using Mono;" src="http://openlandscape.files.wordpress.com/2011/06/using-mono.png?w=200&#038;h=80" alt="" width="200" height="80" /></a>Well-well, have I got news for you. There are many open source projects that had rock solid solutions way before Microsoft or other vendors. Consider some of the following examples, that I personally experienced:</p>
<ol>
<li>In 2005, more than two years before the 1st version of Microsoft&#8217;s 1st Object Relational Mapper (ORM), <em><strong>Linq-to-SQL</strong></em>, <em><strong>NHibernate</strong></em> 1.0 was released. At that time the average .NET developer was still confused when you used the term &#8220;ORM&#8221; in a conversation, and refused to consider using anything else other than DataSets for data access.</li>
<li>In 2004 .NET was open sourced  two years before <em>Java</em>, in the form of <em><strong>Mono</strong></em>.</li>
<li><em><strong>RESTful</strong></em>. Projects like <em><strong>ServiceStack</strong></em>, and <strong><em>NancyFX</em></strong> have production ready, non-bloated,lightweight RESTful web service frameworks.</li>
<li><em><strong>Aspect Oriented Programming (AOP)</strong></em>. If you want to use AOP, then you have no other choice other than those offered by the open source community like <em><strong>Spring.NET</strong></em>.</li>
</ol>
<p>The above are all due to the efforts of a vibrant, and prosperous alternative .NET society.</p>
<p>Yet, so many times I have experienced .NET shops:</p>
<ol>
<li>Where developers are quick to explain at length how rubbish this, or that library is compared to their custom written Yet-Another-Library.</li>
<li>Where developers are completely ignorant, consciously or unconsciously, of the enormous number of actively developed .NET open source projects. You can find almost any project that suits your specific style or requirements. There are projects that are bloated and heavy like the Microsoft Pattern and Practices stuff, and ones highly nimble and lightweight like the Ruby stuff.</li>
</ol>
<p>Repeatedly during conversations<em><strong></strong></em> I uncover vast misunderstandings about the opportunity of alternative .NET solutions, and the open source ecosystem most are based on.</p>
<p>I then wonder how many more times are we going to think it&#8217;s smart to reinvent yet another insert-library-type-here on our own? Or stick to one of Microsoft&#8217;s libraries, even though it might be completely inappropriate for our specific scenario, but we settle for less, just because it&#8217;s from Microsoft.</p>
<p>To me this ignorant desire to code everything yourself, or wait passively for Microsoft to deliver the goods while you hack the current implementation, is an indication of an inefficient, selfish and narrow minded software society. Wouldn&#8217;t it be better to look beyond these boundaries for something more suitable that (1) you don&#8217;t have to do everything yourself and (2) the contribution you make is validated and used by the larger software community?</p>
<p>Talking to .NET developers, I generally hear the following misunderstandings:</p>
<ol>
<li><em>The belief that a commercial vendor will forever back a technology or product.</em> Every product from a commercial vendor has a limited time span. No product or technology is forever supported, and continued.</li>
<li><em>The belief that open source projects are of inferior quality, and that commercial products guarantee superior quality.</em> I have used bad commercial products, and I have used bad open source products. Because something comes from a commercial vendor, definitely does not mean it is guaranteed to be higher quality.</li>
<li><em>The belief that open source solutions are difficult to use and badly documented.</em> The same argument follows as the previous one.</li>
</ol>
<p><a href="http://openlandscape.files.wordpress.com/2011/06/sinatra.gif"><img class="size-full wp-image-920 alignleft" title="Sinatra" src="http://openlandscape.files.wordpress.com/2011/06/sinatra.gif?w=590" alt=""   /></a>Okay, so before you think this discussion about open source vs. commercial closed source software. It is not. I am merely trying to prove that there are loads of awesome solutions, libraries and products by people other than Microsoft. These are created by a small, but vibrant and growing community of passionate people that provide competitive alternatives, that are very often much more viable or the only of its kind, than what is currently available in the core .NET or from Microsoft.</p>
<p>I believe there is a <em>lack of recognition and understanding of what these solutions provide, how they are grown and how people can be part of their ecosystem</em>. This lack of understanding is due to:</p>
<ol>
<li>People&#8217;s own resistance to a new way of doing things,</li>
<li>Non-support, or even opposition, to the open source process by commercial vendors. To be fair, it&#8217;s not necessarily commercial vendors&#8217; job to support open source projects. It is the developers themselves that must make their projects work and grow.</li>
<li>An actual lack of information about what projects are out there and how they work.</li>
</ol>
<p><em>It is time that alternative and open source .NET take its rightful place next to Microsoft .NET. <a title="Campfire Mono" href="http://www.linkedin.com/groups/Campfire-Mono-3705428?mostPopular=&amp;gid=3705428" target="_blank"><strong>Campfire Mono</strong></a> is a small step in this direction by providing a voice, and forum for alternative .NET developers in the <a title="Silicon Cape" href="http://www.siliconcape.com/" target="_blank">Silicon Cape</a>. Together we can build amazing products, without being restricted to what Microsoft offers. </em></p>
<p><a href="http://openlandscape.files.wordpress.com/2011/03/servicestack.png"><img class="alignright size-medium wp-image-826" title="ServiceStack" src="http://openlandscape.files.wordpress.com/2011/03/servicestack.png?w=300&#038;h=88" alt="" width="300" height="88" /></a>Campfire Mono is the place to discuss novel solutions for building .NET applications to run on all platforms by focusing on Mono and open source .NET technologies.</p>
<p>For the 1st <a title="Campfire Mono" href="http://www.linkedin.com/groups/Campfire-Mono-3705428?mostPopular=&amp;gid=3705428" target="_blank"><span style="color:#003366;"><em><strong>Campfire Mono</strong></em></span></a> event on <span style="color:#003366;"><em><strong>1 August 2011</strong></em></span>, I will talk about <span style="color:#003366;"><em><strong>REST Web Services With NancyFX and ServiceStack</strong></em></span>. It will take place on the 5th floor of the <strong><em><span style="color:#003366;">Bandwidth Barn in Silicon Cape</span></em></strong>:</p>
<ul>
<li><a title="Campfire Mono: REST Web Services With NancyFX and ServiceStack" href="http://www.siliconcape.com/events/camfire-mono-rest-web-services" target="_blank"><em><strong>Please RSVP</strong></em></a><br />
<em><strong></strong></em></li>
<li><em><strong><span style="color:#003366;">Price: Free.</span></strong></em></li>
<li><em><strong><span style="color:#003366;">Monoday, 1 August 2011, 18h15</span></strong></em></li>
<li><em><strong><span style="color:#003366;">Events Room, 5th floor,Bandwidth Barn, 125 Buitengracht Street, Cape Town</span></strong></em></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/881/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/881/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/881/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/881/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/881/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/881/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/881/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/881/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/881/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/881/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/881/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/881/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/881/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/881/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=881&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2011/06/14/changing-the-culture-hearts-minds-of-net-society/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2011/06/logo.png?w=293" medium="image">
			<media:title type="html">Campfire Mono</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2011/06/using-mono.png" medium="image">
			<media:title type="html">using Mono;</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2011/06/sinatra.gif" medium="image">
			<media:title type="html">Sinatra</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2011/03/servicestack.png?w=300" medium="image">
			<media:title type="html">ServiceStack</media:title>
		</media:content>
	</item>
		<item>
		<title>Discover Dynamic Object Creation In Ruby</title>
		<link>http://openlandscape.net/2011/05/05/discover-dynamic-object-creation-in-ruby/</link>
		<comments>http://openlandscape.net/2011/05/05/discover-dynamic-object-creation-in-ruby/#comments</comments>
		<pubDate>Thu, 05 May 2011 09:25:47 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[const_get]]></category>
		<category><![CDATA[Dynamic Object Creation]]></category>
		<category><![CDATA[inject]]></category>
		<category><![CDATA[Module]]></category>
		<category><![CDATA[Object]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=860</guid>
		<description><![CDATA[Let me quickly explain Ruby&#8216;s dynamic object creation. When I talk about dynamic object creation, I&#8217;m referring to when you instantiate a new object instance from meta-data using a class (also referred to a as a Type in .NET) name, or class meta-data object. In languages like C#, and Java you will use reflection to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=860&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Let me quickly explain <em><strong>Ruby</strong></em>&#8216;s dynamic object creation. When I talk about dynamic object creation, I&#8217;m referring to when you instantiate a new object instance from meta-data using a class (also referred to a as a <strong><em>Type in .NET</em></strong>) name, or class meta-data object. In languages like C#, and Java you will use reflection to dynamically invoke objects like this. Ruby has two equivalents, depending on whether you&#8217;re invoking an object from a class&#8217;s name or a class meta-data object. <em><strong>Invoking an object from a class meta data object</strong></em> is very straight forward:</p>
<p><pre class="brush: ruby;">
class_meta_obj = Module1::Module2::Module3::SomeClass
return class_meta_obj.new
</pre></p>
<p>All you do to instantiate a new object instance from a class definition, is to call new on it.</p>
<p><em><strong>Invoking an object from a class name</strong></em> is more cumbersome than I think is necessary, because you first need to load each module in the full class name:</p>
<p><pre class="brush: ruby;">
class_name = &quot;Module1::Module2::Module3::SomeClass&quot;
result_class_meta_obj = class_name.split('::').inject(Object)
{ |result_class_meta_obj, item|
    result_class_meta_obj.const_get item
}
return result_class_meta_obj.new
</pre></p>
<p>First we split the module &amp; class hierarchy on the separator &#8220;::&#8221;. This gives us each individual module and class in an Array. For each item in the array we pass in the last result returned by the block (<em>result_class_meta_obj</em>), and the current module or class name (item). The argument passed to the <em><strong>inject method</strong></em> (<em>Object</em>) is the first iteration&#8217;s last result (<em>result_class_meta_obj</em>).</p>
<p>On the class/module meta object we send the current module/class&#8217;s name to <em><strong>const_get</strong></em>. This returns the current module/class&#8217;s meta data object, that then becomes the latest result. Each class and module name is a constant in Ruby that points to its corresponding class/module definition. Now that we have the class definition meta data object, we can invoke its constructor the same way as in the first example.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/860/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=860&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2011/05/05/discover-dynamic-object-creation-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
		<item>
		<title>Hey NHibernate, Don&#8217;t Mess With My Enums!</title>
		<link>http://openlandscape.net/2011/04/16/hey-nhibernate-dont-mess-with-my-enums/</link>
		<comments>http://openlandscape.net/2011/04/16/hey-nhibernate-dont-mess-with-my-enums/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 18:42:54 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[Mono.NET]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Enum]]></category>
		<category><![CDATA[Fluent NHibernate]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=832</guid>
		<description><![CDATA[So I&#8217;ve been using Fluent NHibernate for a short while now. Initially I had to overcome some minor challenges, but since I got those out of the way it&#8217;s been pretty smooth sailing. One thing that stands out, which required more tinkering and timeshare than I would&#8217;ve liked is the way NHibernate handles the .NET [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=832&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been using <em><strong>Fluent NHibernate</strong></em> for a short while now. Initially I had to overcome some minor challenges, but since I got those out of the way it&#8217;s been pretty smooth sailing. One thing that stands out, which required more tinkering and timeshare than I would&#8217;ve liked is the way <strong><em>NHibernate handles the .NET enum type</em></strong>. <em>Natively NHibernate allows you to save your enum&#8217;s value as a string or number property/column in the referencing object&#8217;s table.</em> <em>In other words, by default it doesn&#8217;t allow you to map your enum to its own separate table, and then let your objects refer to it through an association/foreign key.</em> For NHibernate enums are primitive values, and not &#8220;entity objects&#8221; (logically speaking &#8211; ignoring the technical internal mechanics of .NET&#8217;s enum). I would argue that enums can be both a primitive string or number, or a more complex entity. Under certain circumstances an enum can be viewed as a simple &#8220;object&#8221; that consists of two properties:</p>
<ul>
<li>An Id, represented by the enum member&#8217;s number value</li>
<li>And a name, represented by the enum member&#8217;s string name.</li>
</ul>
<p>I&#8217;ve found that it&#8217;s very convenient to use the &#8220;entity object&#8221; version of enums for very simple, slow changing look-up data with a fair amount of business logic attached to it. For instance in a credit application app, you might only support 3 or 4 types of loans, but you know that over time app&#8217;s life, the company won&#8217;t add more than 2 or 3 new types of loans. Adding a loan type requires some additional work, and isn&#8217;t merely a matter of just inserting a new loan type into a look-up table. The reason is that a fair amount of the app&#8217;s business logic, mainly in the form of conditional logic statements, must also be adapted to accommodate the new loan type. From a coding perspective it&#8217;s very convenient to use enum types in these cases, because you can refer to the various options through DRY strong typed members, with a simultaneous string and number representation. So <strong><em>instead of</em></strong></p>
<p><pre class="brush: csharp;">
var loan = loanRepository.FindById(234);
var loanType = loanTypeRepository.FindById(123);

// ...

if (loan.Type == &quot;PersonalLoan&quot;)
{
    // ...
}
</pre></p>
<p><em><strong>rather do</strong></em></p>
<p><pre class="brush: csharp;">
var loan = loanRepository.FindById(234);

if (loan.Type == LoanType.Personal)
{
    //...
}
</pre></p>
<p>Okay, schweet, you get the point. Next logical question: How do you get NHibernate to treat your enums as objects with their own table, and not primitive values? To do this you have to create a generic class that can wrap your enum types, and then create a mapping for this enum  wrapper class. I call this class Reference:</p>
<p><pre class="brush: csharp;">
public class Reference&lt;TEnum&gt;
{
    private TEnum enm;

    public Reference(TEnum enm)
    {
        this.enm = enm;
    }

    public Reference() {}

    public virtual int Id
    {
        get { return Convert.ToInt32(enm); }
        set { enm = (TEnum)Enum.Parse(typeof(TEnum), value.ToString(), true); }
    }

    public virtual string Name
    {
        get { return enm.ToString(); }
        set { enm = (TEnum)Enum.Parse(typeof(TEnum), value, true); }
    }

    public virtual TEnum Value
    {
        get { return enm; }
        set { enm = value; }
    }
}
</pre></p>
<p>The Reference class is pretty straight forward. All it does is translate the contained enum into an object with three properties:</p>
<ul>
<li>Id &#8211; the integer value of the enum member.</li>
<li>Name &#8211; the string name of the enum member.</li>
<li>Value &#8211; the contained enum member.</li>
</ul>
<p>You might wonder why I didn&#8217;t bother to restrict the allowed generic Types to enums. Well, it so happens that .NET generics doesn&#8217;t allow you to restrict generic type declarations to enums. It allows you to restrict generic types to structs, and all sort of other things, but not to enums. So you will never be able to get an exact generic restriction for the Reference class. So I thought, aag what the hell, if I can&#8217;t get an exact restriction, then what&#8217;s the point anyways? I&#8217;ll have to trust that whoever is using the code, knows what he&#8217;s doing.</p>
<p>Now, for example, instead of directly using the LoanTypes enum, the Loan class&#8217;s Type property will be a Reference object, with its generic type set to the LoanTypes enum:</p>
<p><pre class="brush: csharp;">
public class Loan
{
    // ...
    public Reference&lt;LoanType&gt; Type { get; set; }
    // ...
}
</pre></p>
<p>This is not completely tidy, because to a degree the limitations of the data access infrastructure, i.e. NHibernate, force us to adopt a compromise solution that&#8217;s not necessary if we changed to something else. In other words things from the data infrastructure layers spills into the domain.</p>
<p>What&#8217;s left to do is (1) create a mapping for Reference&lt;LoanType&gt;, and (2) get NHibernate to use the right table name, i.e. LoanType, instead of Reference[LoanType]. Here the Fluent NHibernate mapping for Reference&lt;LoanType&gt;:</p>
<p><pre class="brush: csharp;">
public class LoanTypeMap: ClassMap&lt;Reference&lt;LoanType&gt;&gt;
{
    public LoanTypeMap()
    {
        Table(typeof(LoanType).Name);
        Id(loanType =&gt; loanType.Id).GeneratedBy.Assigned();
        Map(loanType =&gt; loanType.Name);
    }
}
</pre></p>
<p>The above Fluent NHibernate mapping tells NHibernate to use whatever value property Id has for the primary key, and not generate one for it. You also have to explicitly specify the table&#8217;s name you&#8217;d like NHibernate to use, because you want to ignore &#8220;Reference&#8221; as part of the table name, and only use the enum type name.</p>
<p>And that&#8217;s it. You will now have a separate table called LoanType, with the foreign keys of other classes&#8217; tables referencing the LoanType enum&#8217;s table. Just keep in mind that this solution might not always be feasible. For example it might not work too well when you write a multilingual application. Also should you want to get a pretty description for each enum&#8217;s member, for example &#8220;Personal Loan&#8221;, instead of &#8220;PersonalLoan&#8221; you&#8217;ll have to throw in some intelligent text parsing that split&#8217;s a text string before each uppercase character. Hopefully this post gave you another option to map your enum types with NHibernate.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/832/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=832&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2011/04/16/hey-nhibernate-dont-mess-with-my-enums/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
		<item>
		<title>REST Web Services with ServiceStack</title>
		<link>http://openlandscape.net/2011/03/21/rest-web-services-with-servicestack/</link>
		<comments>http://openlandscape.net/2011/03/21/rest-web-services-with-servicestack/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 20:09:54 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[InfoTech]]></category>
		<category><![CDATA[Mono.NET]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[mod_mono]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[ServiceStack]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=766</guid>
		<description><![CDATA[Over the past month I ventured deep into the alternative side of the .NET web world. I took quite a few web frameworks for a test drive, including OpenRasta, Nancy, Kayak and ServiceStack. All of the aforementioned supports Mono, except OpenRasta, that has it on its road-map. While kicking the tires of each framework, some [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=766&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://openlandscape.files.wordpress.com/2011/03/servicestack.png"><img class="size-full wp-image-826 alignright" title="ServiceStack" src="http://openlandscape.files.wordpress.com/2011/03/servicestack.png?w=590" alt=""   /></a>Over the past month I ventured deep into the alternative side of the .NET web world. I took quite a few web frameworks for a test drive, including <em>OpenRasta</em>, <em>Nancy</em>, <em>Kayak</em> and <a title="ServiceStack" href="http://www.servicestack.net" target="_blank"><em><strong>ServiceStack</strong></em></a>. All of the aforementioned supports <em><strong>Mono</strong></em>, except OpenRasta, that has it on its road-map. While kicking the tires of each framework, some harder than others, I saw the extent of just how far .NET has grown beyond its Microsoft roots, and how spoiled .NET developers have become with a long list of viable alternative .NET solutions from the valley of open source.</p>
<p>ServiceStack really impressed me, with its solid mix of components that speak to the heart of any modern C# web application. From <em>Redis</em> <strong><em>NOSQL </em></strong>and lightweight relational database libraries, right through to an extremely simple <em><strong>REST </strong></em>and <em><strong>SOAP </strong></em>web service framework. As the name suggests, it is indeed a complete stack.</p>
<p>Anyways, enough with the marketing fluff, let&#8217;s pop the bonnet and get our hands dirty. What I&#8217;m going to show you isn&#8217;t anything advanced. Just a few basic steps to help you to get to like the ServiceStack web framework as much as I do. You can learn the same things I&#8217;ll be explaining here by investigating the very complete ServiceStack example applications, but I thought some extra tidbits I picked up working through some of them should make life even easier for you.</p>
<h3>Some Background Info On REST</h3>
<p>I&#8217;m going to show you how to build a <strong><em>REpresentation State Transfer (REST)</em></strong> web service with ServiceStack. <strong><em>RESTful </em></strong>web services declare resources that have a <em><strong>URI </strong></em>and can be accessed through <strong><em>HTTP methods</em></strong>, or <strong><em>verbs</em><em> (GET, PUT, POST and DELETE)</em></strong>, to our domain services and entities. This is different from <em>SOAP</em> web services that require you to expose methods <em><strong>RPC </strong></em>style, that are ignorant of the underlying HTTP methods and headers. To implement a REST resource and its HTTP-methods in ServiceStack requires the use of two classes, <em><strong>RestService</strong></em> and <em><strong>RestServiceAttribute</strong></em>.</p>
<p>Another feature of REST is that data resources are encoded in either XML or JSON. However, the latest trend is to encode objects in JSON for its brevity and smaller size, rather than its more clunky counterpart, XML. We will therefore follow suit and do the same. Okay, I think you&#8217;re ready now to write your first line of ServiceStack code.</p>
<h3>Create a Web Service Host with AppHostBase</h3>
<p>The first thing you have to do is specify how you&#8217;d like ServiceStack to run your web services. You can choose to either run your web services from <strong><em>Internet Information Services (IIS) </em></strong><em>or</em><strong><em> Apache</em></strong>, or from the <strong><em>embedded HTTP listener</em></strong> based web server. Both of these approaches require you to declare a class that inherits from <strong><em>AppHostBase</em></strong>:</p>
<p><pre class="brush: csharp;">
public class AppHost: AppHostBase
{
    public AppHost()
        : base(&quot;Robots Web Service: It's alive!&quot;, typeof(RobotRestResource).Assembly) {}

    public override void Configure(Container container)
    {
        SetConfig(new EndpointHostConfig
        {
            GlobalResponseHeaders =
            {
                { &quot;Access-Control-Allow-Origin&quot;, &quot;*&quot; },
                { &quot;Access-Control-Allow-Methods&quot;, &quot;GET, POST, PUT, DELETE, OPTIONS&quot; },
            },
        });
     }
 }
</pre></p>
<p>Class <em>AppHost</em>&#8216;s default constructor makes a call to <strong>AppHostBase</strong>&#8216;s constructor that takes 2 arguments. This first argument is the name of the web app, and the second argument tells ServiceStack to scan the Assembly where class RobotRestResource is defined, for REST web services and resources.</p>
<p><a href="http://openlandscape.files.wordpress.com/2011/03/mono.png"><img class="size-full wp-image-825 alignleft" style="margin:15px;" title="Mono" src="http://openlandscape.files.wordpress.com/2011/03/mono.png?w=590" alt=""   /></a><em><strong>AppHostBase</strong></em>&#8216;s <em><strong>Configure method</strong></em> must be overridden, even if it&#8217;s empty, otherwise you&#8217;ll get and exception. If you plan on making <em><strong>cross domain JavaScript calls</strong></em> from your web user interface (i.e. your web interface is written in <em><strong>JavaScript </strong></em>and hosted on a separate web site from your web services) to your REST resources, then adding the correct <em><strong>global response headers</strong></em> are very important. Together the two <em><strong>Access-Control-Allow headers</strong></em> tell browsers that do a <em><strong>pre-fetch OPTIONS</strong></em> request that their cross domain request will be allowed. I&#8217;m not going to explain the internals, but any Google search on this topic should yield sufficient info.</p>
<p>Now all that&#8217;s left to do is to initialize your custom web service host in <strong>Global.asax</strong>&#8216;s <strong>Application_Start</strong> method:</p>
<p><pre class="brush: csharp;">
public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        new AppHost().Init();
    }
}
</pre></p>
<p>The last thing you might be wondering about, before we move on, is the web.config of your ServiceStack web service. For reasons of brevity I&#8217;m not going to cover this, but please <a href="https://github.com/ServiceStack/ServiceStack.Examples/downloads" target="_blank">download ServiceStack&#8217;s examples</a> and use one of their web.configs. The setup require to run ServiceStack from IIS is really minimal, and very easy to configure.</p>
<h3>Define REST Resources with RestService</h3>
<p>Now that we&#8217;ve created a host for our services, we&#8217;re ready to create some REST resources. In a very basic sense you could say a REST resource is like a <strong>Data Transfer Object (DTO)</strong> that provides a suitable external representation of your domain. Let&#8217;s create a resource that represents a robot:</p>
<p><pre class="brush: csharp;">
using System.Collections.Generic;
using System.Runtime.Serialization;

[RestService(&quot;/robot&quot;, &quot;GET,POST,PUT,OPTIONS&quot;)]
[DataContract]
public class RobotRestResource
{
[DataMember]
public string Name { get; set; }

[DataMember]
public double IntelligenceRating { get; set; }

[DataMember]
public bool IsATerminator { get; set; }

[DataMember]
public IList&lt;string&gt; Predecessors { get; set; }

public IList&lt;Thought&gt; Thoughts { get; set; }

}
</pre></p>
<p>The minimum requirement for a class to be recognized as a REST resource by ServiceStack, is that it must <del>inherit from <em><strong>IRestResource</strong></em>, and</del> have a <em><strong>RestServiceAttribute</strong></em> with a <em><strong>URL template</strong></em>, and that&#8217;s it. ServiceStack doesn&#8217;t force you to use the <em><strong>DataContractAttribute</strong></em> or <em><strong>DataMemberAttribute</strong></em>. The only reason I used it for the example is to demonstrate <em><strong>how to exclude a member from being serialized to JSON when it&#8217;s sent to the client</strong></em>. The Thoughts member will not be serialized and the web client will never know the value of this object. I had a situation where I wanted to have a member  on my resource for internal use in my application, but I didn&#8217;t want to send it to clients over the web service. In this situation you have to apply the DataContractAttribute to your resource&#8217;s class definition, and the DataMemberAttribute to each property you want to expose. And that&#8217;s it, nothing else is required to declare a REST resource ffor ServiceStack.</p>
<h3>Provide a Service for Each Resource with RestServiceBase</h3>
<p><em><strong>Each resource you declare requires a corresponding service</strong></em> that implements the supported HTTP verb-methods:</p>
<p><pre class="brush: csharp;">

public class RobotRestService: RestServiceBase&lt;RobotRestResource&gt;
{
    public override object OnPut(RobotRestResource robotRestResource)
    {
        // Do something here &amp; return a
        // new RobotRestResource here,
        // or any other serializable
        // object, if you like.
    }

    public override object OnGet(RobotRestResource robotRestResource)
    {
        // Do some things here ...
        // Return the list of RobotRestResources
        // here, or any other serializable
        // object, if you like.

        return new []
        {
            new RobotRestResource(),
            new RobotRestResource()
        };
    }
}
</pre></p>
<p>In order for ServiceStack to assign a class as a service for a resource, you have to inherit from <em><strong>RestServiceBase</strong></em>,  specifying the resource class as the generic type. RestServiceBase provides virtual methods for each REST approved HTTP-verb: OnGet for GET, OnPut for PUT, OnPost for POST and OnDelete for DELETE. You can selectively override each one that your resource supports.</p>
<p>Each HTTP-verb method may return one of the following results:</p>
<ol>
<li>Your <strong><em>IRestResource</em></strong> DTO object. This will send the object to the client in the specified format JSON, or XML.</li>
<li><strong><em>ServiceStack.Common.Web.HtmlResult</em></strong>, when you want to render the page on the server and send that to the client.</li>
<li><strong><em>ServiceStack.Common.Web.HttpResult</em></strong>, when you want to send a HTTP status to the client, for instance to redirect the client:<br />
<pre class="brush: csharp;">
var httpResult = new HttpResult(new object(), null, HttpStatusCode.Redirect);
httpResult.Headers[HttpHeaders.Location] = &quot;http://openlandscape.wordpress.com&quot;;
return httpResult;
</pre></li>
</ol>
<p>And that&#8217;s it. Launch your web site, and call the <em>OnGet</em> methof at /robot?format=json, or if you prefer XML /robot?format=xml. To debug your RESTful service API I can highly recommend the <a title="Poster Firefox Plug-in" href="https://addons.mozilla.org/en-us/firefox/addon/poster/" target="_blank">Poster Firefox plug-in</a>. Poster allows you to manually construct HTTP commands and send them to the server.</p>
<p>You might be wondering what the purpose is of RobotRestResource that gets passed to each HTTP-verb method. Well, that is basically an <em><strong>aggregation of the posted form parameters and URL query string parameters</strong></em>. In other words if the submitted form has a corresponding field name to one of RobotRestResource&#8217;s properties, ServiceStack will automatically assign the parameter&#8217;s value to the supplied RobotRestResource. The same applies for query strings, the query strings ?Name=&#8221;TheTerminator&#8221;&amp;IsATerminator=true: robotRestResource&#8217;s Name will be assigned the value of &#8220;TheTerminator&#8221; and IsATerminator will be true.</p>
<h3>Using ServiceStack&#8217;s Built-In Web Service as a Service Host</h3>
<p>The above discussion assumed that you&#8217;ll be hosting your ServiceStack service in <em><strong>IIS</strong></em> or with <em><strong>mod_mono</strong></em> in <em><strong>Apache</strong></em>. However, ServiceStack has another pretty cool option available, <em><strong>self hosting</strong></em>. That&#8217;s right, services can be independently hosted on their own and embedded in your application. This might be useful in scenarios where you don&#8217;t want to be dependent on IIS. I imagine something like a Windows service, or similar, that also serves as small web server to expose a web service API to clients, without the need for lengthy and complicated IIS setup procedures.</p>
<p><pre class="brush: csharp;">
var appHost = new AppHost();
appHost.Init();
appHost.Start(&quot;http://localhost:82/&quot;);
</pre></p>
<p>To start the self hosted ServiceStack you configure your host as usual, and then call Start(&#8230;), passing the URL (with free port) where the web server will be accessed.</p>
<h3>Why Use ServiceStack</h3>
<p>For me one of the big reasons for choosing ServiceStack is that it has a solid library to build web services running on Mono. However, after using if for a while I found its easy setup and simple conventions very refreshing from the often confusing and cumbersome configuration of Windows Communication Foundation (WCF) web services.ServiceStack also does a much better job of RESTful services, than WCF&#8217;s current implementation. I know future versions of WCF will enable a more mature RESTful architecture, but for now it&#8217;s pretty much RPC hacked into REST. Another bonus was the complete set of example apps that were a great help to quickly get things working. So if you&#8217;re tired of WCF&#8217;s heavy configuration and you&#8217;re looking for something to quickly implement mature RESTful web services, then definitely give ServiceStack a try.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/766/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=766&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2011/03/21/rest-web-services-with-servicestack/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2011/03/servicestack.png" medium="image">
			<media:title type="html">ServiceStack</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2011/03/mono.png" medium="image">
			<media:title type="html">Mono</media:title>
		</media:content>
	</item>
		<item>
		<title>Fluent NHibernate on PostgreSQL</title>
		<link>http://openlandscape.net/2010/11/23/fluent-nhibernate-on-postgresql/</link>
		<comments>http://openlandscape.net/2010/11/23/fluent-nhibernate-on-postgresql/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 19:43:17 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[Mono.NET]]></category>
		<category><![CDATA[Fluent NHibernate]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Object Relational Mapper]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Postgres]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=720</guid>
		<description><![CDATA[When you write your first Fluent NHibernate application with Mono/.NET based on the Getting started tutorial, you eventually discover that you require a few extra assembly-dll references not mentioned. For my Postgres (PostgreSQL) project my references are: I won&#8217;t go into the detail of the matter, other than to say that many of these don&#8217;t give [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=720&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When you write your first <em><strong>Fluent NHibernate </strong></em>application with <em><strong>Mono/.NET</strong></em> based on the <em><a title="Fluent NHibernate Getting started" href="http://wiki.fluentnhibernate.org/Getting_started" target="_blank">Getting started</a></em> tutorial, you eventually discover that you require a few extra assembly-dll references not mentioned. For my <em><strong>Postgres (PostgreSQL)</strong></em> project my references are:</p>
<div id="attachment_722" class="wp-caption alignnone" style="width: 273px"><a href="http://openlandscape.files.wordpress.com/2010/11/screen-shot-2010-11-22-at-10-17-56-pm.png"><img class="size-full wp-image-722 " title="Fluent NHibernate References" src="http://openlandscape.files.wordpress.com/2010/11/screen-shot-2010-11-22-at-10-17-56-pm.png?w=590" alt=""   /></a><p class="wp-caption-text">Fluent NHibernate References</p></div>
<p>I won&#8217;t go into the detail of the matter, other than to say that many of these don&#8217;t give you a very clear indication as to what exactly is missing.</p>
<p>To configure <em>Fluent NHibernate</em> to work with Postgres you will need the following:</p>
<p><pre class="brush: csharp;">
var connectionStr = &quot;Server=127.0.0.1;Port=5432;Database=the_db;User Id=user_name;Password=password;&quot;
ISessionFactory sessionFactory = Fluently
 .Configure()
 .Database(PostgreSQLConfiguration.Standard.ConnectionString(connectionStr))
 .Mappings(m =&gt; m.FluentMappings.AddFromAssemblyOf&lt;TypeOfFluentNHibernateMapping&gt;())
 .ExposeConfiguration(BuildSchema)
 .BuildSessionFactory();

private static void BuildSchema(Configuration config)
 {
// This NHibernate tool takes a configuration (with mapping info in)
// and exports a database schema from it.
var dbSchemaExport = new SchemaExport(config);
//dbSchemaExport.Drop(false, true);
dbSchemaExport.Create(false, true);
 }

</pre></p>
<p><em><strong>TypeOfFluentNHibernateMapping </strong></em>is a class that inherits from <em>FluentNHibernate.Mapping.<strong>ClassMap&lt;T&gt;</strong></em>. This tells Fluent to load all ClassMappings from the assembly where this type is defined.</p>
<p><strong><em>BuildSchema(&#8230;)</em></strong> creates the database&#8217;s schema based on the specified mapping configuration and recreates the tables and the rest of it in the database specified by the connection string. I included the call to the schema export&#8217;s drop method, because the code originates from my unit tests, where I drop &amp; recreate the database on each test run.</p>
<p>So far I like Fluent NHibernate, and the only complaint I have so far is the way NHibernate (not Fluent) handles enums. It assumes you want to use the enum member&#8217;s string name. The way I like to store my enums, are to have a separate table for them.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/720/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=720&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2010/11/23/fluent-nhibernate-on-postgresql/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2010/11/screen-shot-2010-11-22-at-10-17-56-pm.png" medium="image">
			<media:title type="html">Fluent NHibernate References</media:title>
		</media:content>
	</item>
		<item>
		<title>Develop Like Water Making Its Way Through Cracks (Part 1)</title>
		<link>http://openlandscape.net/2010/11/18/develop-like-water-making-its-way-through-cracks-part-1/</link>
		<comments>http://openlandscape.net/2010/11/18/develop-like-water-making-its-way-through-cracks-part-1/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 20:10:12 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[InfoTech]]></category>
		<category><![CDATA[Organization Culture]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=697</guid>
		<description><![CDATA[Over the past 2 years my career has taken some interesting turns. I moved to Cape Town, started at Intervate Cape Town as contractor, and then moved on to MiX Telematics as a permanent member. At the time I joined them, both organizations went through far reaching changes, literally to the point that should you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=697&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Over the past 2 years my career has taken some interesting turns. I moved to Cape Town, started at <em>Intervate Cape Town</em> as contractor, and then moved on to <em>MiX Telematics</em> as a permanent member. At the time I joined them, both organizations went through far reaching changes, literally to the point that should you revisit 10 months later you&#8217;ll be forgiven to think it&#8217;s a new company altogether. Both organizations changed in different ways, and at different times. One is a small consulting start-up that changed right in the middle of the recession, the other is a large JSE listed firm, changing after the recession. When the tsunami of the changing environment hit me at first, I didn&#8217;t have a clue what was happening. After I finished my 1st near death-march project at the end of 2009, I slowly started reflecting on my experiences. I went through all the usual thoughts, &#8220;how would I do things differently if I had to redo them&#8221;, &#8220;why did people behave like they did&#8221;, &#8220;was it worth it&#8221;, and so on. In the end I don&#8217;t regret even for 1 second that I had to go through it all. I gained a lot of hard earned experience, that no classroom will ever be able to teach me.</p>
<p>On that note, I&#8217;d like to share with you some of what I learned through it all. Over the next few posts I&#8217;ll discuss some of the things that helped me turn a lot of the challenges into successes (and vice versa &#8211; not doing some of them resulted in failure). Only 1 or 2 of these actually focus on technical-ish aspects of software development, like Domain Driven Design. As developers we tend to place most of our attention on technical problems and solutions. If you consider how much of our problems and successes are determined by &#8216;business&#8217;, people, processes, communication, organization-politics and organization-culture and our very own ego, behavior and characteristics, then you&#8217;ll quickly realize how important it is to pay closer attention to these things, especially in rapidly changing environments.</p>
<p>The things I share with you here, are not necessarily things I got right the first time, and in fact I still struggle with many of them on a daily basis.</p>
<h3>Forcing People To Do Things Differently Creates Tension &amp; Resistance</h3>
<p>The first thing you have to realize is that when the organization and work environment changes, the organization&#8217;s values, culture, mindset and work methods, also change. This sounds obvious, and it is, but the difficult part is experiencing it every work day in the trenches between the cubicles. It is very important to realize that YOU, and your colleagues will not agree with many of these changes. A lot of developers are opinionated and intelligent people, that like to  challenge how things are done in their everlasting quest to improve and solve  problems. Combine this with the fact that developers are most often not the decision makers you potentially have a charged situation on your hands.</p>
<p>What I have <strong>found with developers is that often it&#8217;s not that they have a problem with change</strong>, but instead <strong>believe things should change in a <em>different </em>way</strong>. The fact is that you and your colleagues will too often feel powerless  in the face of these changes, and are bound to get frustrated about them when they change contrary to the way believed to be best for the organization. Getting upset about the changes is a normal part of the process, for <em>yourself</em> and others. The most important thing is to <strong>be <em>aware </em>of this</strong> and accept it for the time being. It is our way of dealing with the change, and I don&#8217;t think there&#8217;s anything wrong with a healthy debate about the best course of action and making your opinions known.</p>
<p>However, when the debate turns into thick and fast negative gossip and defensive actions to block changes at every turn, that is when it&#8217;s time to take a step back. How do you take a step back? Well, for me it&#8217;s best to stop talking about the issues, keep quiet and focus on the tasks at hand. Easier said than done, especially when you yourself is part of the issue and contributing your fair share of the arguments, and when a difficult situation constantly fires up your emotions.</p>
<p>After you <strong>become aware of and accept</strong> the fact that yourself and others are going to get upset and challenge many aspects of the change, you have to make sure that you <strong>establish what you can and cannot control</strong>. Make sure that that which you have control over, is done to the best of your ability under current constraints, always following <strong>best practices</strong> and <strong>industry standards</strong> in the process.</p>
<h3>Technical Development-Process Challenges<strong><br />
</strong></h3>
<p>With technical development-process challenges I refer to a developer&#8217;s bread and butter tools, techniques, processes, methodologies and so forth.</p>
<p>For these types of challenges, you need to devise a technical or process solution or strategy. <em>Think things through, do your homework and research in the context of your current circumstances</em>, and come up with a strategy or solution, and just as important &#8211; the <em><strong>reasoning behind it</strong></em>. The logical <strong>reasoning behind the solution is very important</strong>, because you don&#8217;t control these issues, you will have to convince those that do, and they have to understand very clearly were you&#8217;re coming from. I&#8217;ve found myself so many times in a situation where I know what the right solution is, but I don&#8217;t have a proper argument and reasoning to counter all the fear, uncertainty and doubt feeding the change, and therefore wasn&#8217;t able to mobilize those in control. Even when you think you know a considerable amount about a topic, do some detailed research (I know difficult when you&#8217;re working under pressure).</p>
<h3>People-Political Challenges</h3>
<p>People-political challenges refer to things that are created by people&#8217;s emotions, behavior and beliefs. Collectively these create the organization&#8217;s politics and culture.</p>
<p>For <strong>people-political challenges</strong>, you first need to <strong>stay calm and get a little used to and understand the way those people behave, think and reason</strong>. My experience is that a lot of the issues go away when people get used to each other. This lays the foundation for trust and familiarity to develop. When this happens you become the ally, instead of a challenger. When you&#8217;ve reached this level (and this doesn&#8217;t happen in a week or two, but rather over a few months),  with most colleagues you&#8217;ll be better positioned to influence decisions being made. If the person demands a more forceful approach, you will also be better positioned to identify the right time to do this. Especially in the beginning when you don&#8217;t know someone, it&#8217;s difficult to distinguish between the person&#8217;s normal quirks and irritating behavior, and when the person is truly causing definite problems.</p>
<h3>Geezzh, Do I Have A Lot Of Advice For You Today <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </h3>
<p>Another thing to remember, its important to <em><strong>make sure everyone that&#8217;s part of a discussion, first has a basic common understanding of the topic at hand.</strong></em> For example, trying to make people understand why a Service Oriented Architecture is a better choice in particular situation, compared to some other option, will be meaningless if the other people in the room don&#8217;t have a basic idea of what web services and SOA is. What you can then do is to first &#8220;train&#8221; them by doing a presentation/training-session on web services and SOA. Then after giving everyone  a day or two to digest the new information, you can start having the discussion with them again as to whether SOA is the better solution.</p>
<p>I guess none of my recommendations are too revolutionary, but I believe staying calm and making a few small changes to the way we approach difficult and high pressure situations can go a long way to improving the situation. I&#8217;m by no means a behavioral or industrial psychology expert, but I though I&#8217;d share some thoughts based on my experiences with the aforementioned. I would love to hear what you have experienced, and what worked and didn&#8217;t work for you.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openlandscape.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openlandscape.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openlandscape.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openlandscape.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/697/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.net&amp;blog=1902180&amp;post=697&amp;subd=openlandscape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openlandscape.net/2010/11/18/develop-like-water-making-its-way-through-cracks-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aa7fb5210e56fdef9e84cf3659f299c4?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
	</channel>
</rss>
