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

<channel>
	<title>highestpoint &#187; software engineering</title>
	<atom:link href="http://highestpoint.biz/topics/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://highestpoint.biz</link>
	<description>Musings on software engineering &#38; cloud computing</description>
	<lastBuildDate>Sun, 20 Jun 2010 12:46:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mobile Camp Brussels 2010</title>
		<link>http://highestpoint.biz/2010/05/mobile-camp-brussels-2010/</link>
		<comments>http://highestpoint.biz/2010/05/mobile-camp-brussels-2010/#comments</comments>
		<pubDate>Thu, 20 May 2010 21:32:23 +0000</pubDate>
		<dc:creator>wvl</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[google mobile]]></category>
		<category><![CDATA[mobile applications]]></category>
		<category><![CDATA[mobile computer]]></category>
		<category><![CDATA[mobile computing]]></category>
		<category><![CDATA[mobile internet]]></category>
		<category><![CDATA[mobile software]]></category>
		<category><![CDATA[mobile technology]]></category>
		<category><![CDATA[mobile web]]></category>
		<category><![CDATA[realtime web]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://highestpoint.biz/?p=240</guid>
		<description><![CDATA[The insights and considerations MobileCamp Brussels #mcbxl triggered on options, technologies and tools for developing applications for mobile devices.]]></description>
			<content:encoded><![CDATA[<p>Some weeks ago I heard some echos over the twitter channel about <a title="MobileCamp Brussels hashtag" href="http://twitter.com/#search?q=mcbxl" target="_blank">#mcbxl</a>. On Saturday, May 8th, 2010, the first edition of <a title="MobileCamp Brussels" href="http://www.mobilecampbrussels.be/" target="_blank"><strong>MobileCamp Brussels</strong></a> would be organized by some guys that I was following. I decided to register so as to check out the state of art of mobile computing, mobile internet and the real-time web in general.</p>
<h2>Barcamp</h2>
<p>This event would also be my first <a title="Wikipedia's definition of BarCamp" href="http://en.wikipedia.org/wiki/Barcamp" target="_blank">barcamp</a>,  so I was pretty excited about that too. A barcamp is a free, <strong>user-generated </strong><a title="Wikipedia's definition of uncoference" href="http://en.wikipedia.org/wiki/Unconference" target="_blank"><strong>unconference</strong></a> by means of  open, particapatory workshop-events, whose content is provided by the participants themselves. So, you can summarize this event as an unplanned geek gathering. Hey, if you know most participants only by their Twitter names &#8230; But what an experience that barcamp was! I love the small scale. I adore the interactivity. <strong>Energizing! </strong> A big thanks goes to <a title="MobileCamp Brussels 2010 sponsors" href="http://www.mobilecampbrussels.be/content/sponsorpage" target="_blank">the sponsors</a> for the first class venue, catering, etc; to the organizers <a title="@emich" href="http://twitter.com/emich" target="_blank">@emich</a>, <a title="@steffest" href="http://twitter.com/steffest" target="_blank">@steffest</a>, <a title="@kodel" href="http://twitter.com/kodel" target="_blank">@kodel</a> and <a title="@janosizoltan" href="http://twitter.com/janosizoltan" target="_blank">@janosizoltan</a> for &#8230; well, organizing this event; and to all the <a title="Mobilecamp Brussels as it was presented to you" href="http://www.mobilecampbrussels.be/content/mobilecamp-brussels-it-was-presented-you" target="_blank">speakers</a> for sharing their experience and knowledge.</p>
<h2>State of the mobile development art</h2>
<p>Now off to mobile apps. Well, this subtitle says it all. That&#8217;s what I seem to have learned at #mcbxl. Development for mobile platforms still seems <strong>more of an art</strong> than craftsmenship. Yes, for mobile apps you have a totally different target audience and medium, so, yes, you should therefore completely realign your apps. This is what <a title="@kodel" href="http://www.twitter.com/kodel" target="_blank">@kodel</a> also explains in his presentation on <a title="Mobile interaction models, beyond the app" href="http://www.slideshare.net/kodel/mobile-interaction-models-beyond-the-app" target="_blank">Mobile Interaction Models</a>. But, as proven by <a title="@steffest" href="http://www.twitter.com/steffest" target="_blank">@Steffest</a>&#8217;s <a title="Crackling Rosie on a whole lotta mobile phones" href="http://www.youtube.com/watch?v=ilEdroh3uzM" target="_blank">geek&#8217;o'tar</a> and his presentation on cross-device development, while a fantastic exploit, it makes one wonder whether the mobile devices are becoming to mobile development what the browsers are to web development: a <strong>testing nightmare</strong>. The mobile devices apparently have even more variability in features than browsers have bugs. <a title="@gregone" href="http://www.twitter.com/gregone" target="_blank">@gregone</a> shares his experiences during his talk on <a title="Designing for Touch screens" href="http://www.slideshare.net/gregone/mcbxl" target="_blank">Designing for Touch Screens</a>.</p>
<h2>Largest common denominator for mobile applications?</h2>
<p>The cases presented at #mcbxl, have fairly specific requirements. Indeed, not everyone wants to write his own keyboard application, isn&#8217;t it? However, MobileCamp Brussels wasn&#8217;t too clear about what features <strong>cross-platform development tools</strong> like <a title="Titanium" href="http://developer.appcelerator.com/get_started" target="_blank">Titanium</a> offer and up to what point  <strong>mobile web applications</strong> can take us. <a title="@kodel" href="http://www.twitter.com/kodel" target="_blank">@kodel</a> explicitly mentions to stick with native apps for now, forcing you to choose your deployment platform. Hence, he rightfully says to very carefully choose, depending on your audience!</p>
<h2>Or limitless possibilities of the mobile devices?</h2>
<p>The reason to go native? Remember that a good mobile app takes the user&#8217;s <strong>context </strong>into account for the <strong>services offered</strong>. Therefore access to the full features of the mobile device are most likely a key requirement. Hence, the need (for now) to choose for native applications &#8230; to fully exploit all possibilities of those devices, only limited by our own creativity.</p>
<h2>TIY = Try It Yourself</h2>
<p>As with everything in technology, you can only thoroughly make up you mind, after you <strong>Tried It Yourself</strong>. Mobile web, cross-platform or native, <strong>MobileCamp Brussels</strong> certainly stung my desire <img src='http://highestpoint.biz/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  to experiment myself. I&#8217;ll be rigging my mobile development environment pretty soon.</p>
<p>So please check back once and a while if you are interested to read about my findings. On the other hand, If you yourself have some ideas or experiences to share, please do not hesitate to leave a comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://highestpoint.biz/2010/05/mobile-camp-brussels-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum Guide</title>
		<link>http://highestpoint.biz/2009/12/scrum-guide/</link>
		<comments>http://highestpoint.biz/2009/12/scrum-guide/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 11:16:56 +0000</pubDate>
		<dc:creator>wvl</dc:creator>
				<category><![CDATA[software engineering]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[reference manual]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://highestpoint.biz/?p=210</guid>
		<description><![CDATA[The Scrum Guide by Ken Schwaber on ScrumAlliance is a condense (14 pages) and recent (May 2009) pocket guide on the major principles and guidelines of Scrum. It's also gives very practical advice and tips on concrete issues when implementing Scrum. ]]></description>
			<content:encoded><![CDATA[<p>Just thought I&#8217;d share &#8230; Yesterday, I came across a nice piece of reading material for everyone interested in <a title="Control Chaos website" href="http://www.controlchaos.com/" target="_blank">Scrum</a> as agile methodology. The <a title="Scrum Guide (PDF)" href="http://www.scrumalliance.org/resource_download/598" target="_blank">Scrum Guide</a> by <a title="Ken Schwaber (wikipedia)" href="http://en.wikipedia.org/wiki/Ken_Schwaber" target="_blank">Ken Schwaber</a> on <a title="ScrumAlliance website" href="http://www.scrumalliance.org/" target="_blank">ScrumAlliance</a> is a condense (14 pages) and recent (May 2009) pocket guide on the major principles and guidelines of Scrum. It&#8217;s also gives very practical advice and tips on concrete issues when implementing Scrum.</p>
<p>I think this is an excellent reference manual for anyone interested in a good overview on Scrum. Even a document  to keep at hand when working with Scrum on a project.</p>
]]></content:encoded>
			<wfw:commentRss>http://highestpoint.biz/2009/12/scrum-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Driven Development</title>
		<link>http://highestpoint.biz/2009/12/design-driven-development/</link>
		<comments>http://highestpoint.biz/2009/12/design-driven-development/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 14:39:59 +0000</pubDate>
		<dc:creator>wvl</dc:creator>
				<category><![CDATA[software engineering]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[D3]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://highestpoint.biz/?p=206</guid>
		<description><![CDATA[Design Driven development (D3) starts from the premise that the design of any system is an accident that kicks in at conception. Hence, maximizing the opportunities to make that accidents happen is the key for (product) innovation. Thereto D3 integrates design games into the project iteration at the start of the sprints, where the design games can provide input to the product backlogs. However, no process can guarantee a better design; creating the right environment with the right set of people is the only way to bring innovation and design. The Design Cube defines the people, culture and environment aspects that contribute to an innovative organization.]]></description>
			<content:encoded><![CDATA[<p>Anybody that is working on software engineering, software development and/or agile methodologies, will be very interested in the ideas from the <a title="Design Driven Development" href="http://www.designdrivendevelopment.org/" target="_blank"><strong>Design Driven Development</strong></a> (D3) website.</p>
<h2>Premise</h2>
<p>The <a title="D3 Manifesto" href="http://www.designdrivendevelopment.org/explore/manifesto.html" target="_blank">premise </a>they start with is that the design of any system is an<strong> accident</strong> that kicks in <strong>at conception</strong>. Hence, <strong>maximizing the opportunities </strong>to make that accidents happen is the key for (product) innovation.</p>
<h2>Agility</h2>
<p>Thereto, the author(s) define procedures and practices on how to integrate <strong>design</strong> in your iterative product life cycle. D3 makes the clear <a title="Aspects of product development" href="http://www.designdrivendevelopment.org/image/eng_mgmt_design_small.png" target="_blank">distinction </a>between the <strong>management, engineering and design</strong> aspects of product development. Most current agile practices focus on the former aspects, whereas D3 introduces the latter by integrating <strong>design games </strong>into the project iteration, nl. at the <a title="Design game planning" href="http://www.designdrivendevelopment.org/image/Agile_D3_small.png" target="_blank">start of the sprints</a>, where the design games can provide input to the product backlogs.</p>
<h2>Design Games</h2>
<p>D3 turns the design practices into set of <a title="Design games" href="http://www.designdrivendevelopment.org/explore/designgames.html" target="_blank">games</a>, which brings different sets of people, skills and experiences together to make design decisions in a collaborative way. D3 describes 11 different <a title="11 design games" href="http://www.designdrivendevelopment.org/image/D3_games_overview_small.png" target="_blank">design games</a>, which are grouped into five different categories: Startup, Understand, Question, Design and Experience.</p>
<p>But first and foremost, D3 is about focusing on the solution and not the problem. D3  can be as simple as the <a title="Focus on the solution, not the problem" href="http://www.designdrivendevelopment.org/blog/index.php?entry=entry050612-001345" target="_blank">hilarious example</a> laid out in their blog.</p>
<h2>I4</h2>
<p>D3 defines <a title="Elements of solution design" href="http://www.designdrivendevelopment.org/image/i4_small.png" target="_blank">4 fundamental elements</a> of good design:</p>
<ul>
<li><strong>Innovation</strong> is larger level breakthrough in solving the indented problem</li>
<li><strong>Interaction</strong> is about how software or products behave with the users</li>
<li><strong>Information</strong> is how you arrange the different elements on the screen</li>
<li><strong>Intelligence</strong> focus on little things which can change the usability of an application.</li>
</ul>
<p>In this way, D3 tries to bring design to the <a title="Design boundaries" href="http://www.designdrivendevelopment.org/image/design_boundry_small.png" target="_blank">higher level</a> of the<strong><span style="font-weight: normal;"> solution </span></strong>space, whereas design used to remain at the product&#8217;s code and/or architecture level. The solution is the boundary where the product ends and thus where you as a solution builder can have impact. The higher levels of business and life on the other hand need to be impacted by other means.</p>
<h2>Design Cube</h2>
<p>D3 also recognizes that no process can guarantee a better design. Creating the right environment with the right set of people is the only way to bring innovation and design. Guidelines to this are laid out in the <a title="Design Cube" href="http://www.designdrivendevelopment.org/explore/designcube.html" target="_blank">Design Cube</a>, which defines the people, culture and environment aspects which can greatly contribute to build an innovative organization.</p>
<h2>Conclusion</h2>
<p>The ideas laid out in the D3 approach seem to be very viable. However, they have to be tested into practice to prove if they do bring <strong>enough value</strong> to the solution development in the form of product innovation. Most certainly, more practical guidelines, best practices, procedures and tools will have to be defined.</p>
<p>I do have some projects on my radar that might be helped by incorporating the ideas of D3. But in the mean time, does anyone have any practical experience with the D3 or other principles on entailing product innovation in solution development?</p>
]]></content:encoded>
			<wfw:commentRss>http://highestpoint.biz/2009/12/design-driven-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atom for ReST Data Representation</title>
		<link>http://highestpoint.biz/2009/10/atom-for-rest-data-representation/</link>
		<comments>http://highestpoint.biz/2009/10/atom-for-rest-data-representation/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 19:10:55 +0000</pubDate>
		<dc:creator>wvl</dc:creator>
				<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[aha erlebnis]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[atom store]]></category>
		<category><![CDATA[gdata]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jax-rs]]></category>
		<category><![CDATA[open search]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restlet]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://highestpoint.biz/?p=198</guid>
		<description><![CDATA[Atom is a very natural fit for ReST data representation. However you must use its inherent extension points for their intended purpose, otherwise development libraries work contra-productive. Insight in the proper use of those extension points, was my Aha Erlebnis this week.]]></description>
			<content:encoded><![CDATA[<p align="justify">During the last weeks, I’ve been designing an architecture for a new application that’ll have to live in the cloud. Of course a <a title="Roy Fielding's dissertation instigating it all" rel="nofollow" href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" target="_blank">ReST</a>ful API comes as a natural fit. I must confess that I fell in love with <a title="Wikipedia definition of ReST" rel="nofollow" href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">ReST</a> since, due to it’s inherent <a title="How I Explained ReST to My Wife (Ryan Tomayko)" rel="nofollow" href="http://tomayko.com/writings/rest-to-my-wife" target="_blank">simplicity and naturality</a>. And great libraries like <a title="RESTful Web framework for Java" rel="nofollow" href="http://www.restlet.org/" target="_blank">Restlet</a> or <a title="Java API for RESTful Web Services" rel="nofollow" href="https://jsr311.dev.java.net/" target="_blank">JAX-RS</a> implementations exist to support development. Did I mention I’m using Java … ?</p>
<p align="justify">One of the major decisions to make when designing a ReST interface, would of course be data representation. Numerous options present themselves here, but after some digging and reading, the <a title="Atom definition at Wikipedia" rel="nofollow" href="http://en.wikipedia.org/wiki/Atom_(standard)" target="_blank">Atom Syndication Format</a> combined with XML can be a <a title="Atom Store: a Database for the Web" href="http://www.xml.com/pub/a/2005/09/21/atom-store-web-database.html?page=1" target="_blank">universal data exchange envelope</a>. especially when combined with some extensions like e.g. <a title="OpenSearch formats" rel="nofollow" href="http://www.opensearch.org/Home" target="_blank">OpenSearch</a> to support paging and searching. Atom’s extensive use of links with relation attributes, amongst others, make it a natural fit to ReST. Again, great libraries exist to ease the development of such Atom feeds, that even support the needed extendibility for the data envelope. These libraries even integrate nicely with the aforementioned technologies for ReST development.</p>
<p align="justify">The most renown use of Atom with XML for ReSTful service data representation would of course be the <a title="Google Data Protocol" rel="nofollow" href="http://code.google.com/apis/gdata/" target="_blank">Google Data Protocol</a>. However, when applying its philosophy to our own ReSTful services using various combinations of development libraries, implementation felt difficult every time, even awkward. At some point, I even considered re-implementing Atom libraries to support the needed extendibility of the generated feeds. Something smelt fishy!</p>
<p align="justify">Doing some more research, I came across articles from Atom authorities on how to (<a title="Pondering the Future of Atom" rel="nofollow" href="http://torrez.us/archives/2006/05/04/436/" target="_blank">Ellias Torres</a>) and how not to (<a title="Extending Atom" rel="nofollow" href="http://www.snellspace.com/wp/?p=314" target="_blank">James M. Snell</a>, <a title="Customizing the Atom Publishing Protocol" href="http://robubu.com/?p=4" target="_blank">Rob Yates</a>) extend Atom feeds. They also express their views on GData (<a title="Google Data APIs Protocol" rel="nofollow" href="http://bitworking.org/news/Google_Data_APIs_Protocol" target="_blank">Joe Gregorio</a>, <a title="Google Data APIs and OpenSearch" rel="nofollow" href="http://blog.unto.net/work/google-data-apis-and-opensearch/" target="_blank">Clinton DeWitt</a>).</p>
<p align="justify">I got my Aha Erlebnis this week when those guys pointed out where most extensions of Atom go wrong. There is a clear distinction between the data and the envelope. You can extend both, but for different reasons.</p>
<p align="justify">To support e.g. OpenSearch, you have to extend the envelope, because you want more intelligent data producing servers and data consuming clients. In developing ReST services, this type of extensions is more static as you will provide the extended envelope information with e.g. the search data, in every feed. So, e.g. you’ll super-class your micro-framework to support this extension once and for all.</p>
<p align="justify">On the other hand however, to transport your data, you have to extend you feeds at the data transport layer, which are the entries in Atom parlance. You’ll provide a representation for every entity you whish to ship, that you wrap in an Atom entry as its content. Hence, this wrapping will be a lot more dynamic in your system.</p>
<p align="justify">Applying above insights using different development libraries, the pieces of the puzzle fell into place as all libraries supported envisioned feed layouts very naturally. So I ended up choosing those libraries that supported my developments the best, which would of course be POJO style.</p>
]]></content:encoded>
			<wfw:commentRss>http://highestpoint.biz/2009/10/atom-for-rest-data-representation/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Cloud computing in plain English</title>
		<link>http://highestpoint.biz/2009/10/cloud-computing-in-plain-english/</link>
		<comments>http://highestpoint.biz/2009/10/cloud-computing-in-plain-english/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 14:27:20 +0000</pubDate>
		<dc:creator>wvl</dc:creator>
				<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[iaas]]></category>
		<category><![CDATA[paas]]></category>
		<category><![CDATA[rpath]]></category>
		<category><![CDATA[saas]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://highestpoint.biz/?p=191</guid>
		<description><![CDATA[Ever wondered what cloud computing is all about? What is the rationale behind everything as a service? Are you getting dizzy from all the terms and acronyms? rPath has made a very fun video about it, explaining cloud computing in understandable terms.

]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ever wondered what cloud computing is all about? What is the rationale behind everything as a service? Are you getting dizzy from all the terms and acronyms? <a title="rPath - Simplifying Application Deployment and Maintenance" href="http://rpath.com" target="_blank">rPath</a> has made a very fun video about it, explaining cloud computing in understandable terms.</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="center" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/XdBd14rjcs0&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/XdBd14rjcs0&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true" align="center"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://highestpoint.biz/2009/10/cloud-computing-in-plain-english/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing HBase on Windows</title>
		<link>http://highestpoint.biz/2009/10/installing-hbase-on-windows/</link>
		<comments>http://highestpoint.biz/2009/10/installing-hbase-on-windows/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 15:22:25 +0000</pubDate>
		<dc:creator>wvl</dc:creator>
				<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hbase]]></category>

		<guid isPermaLink="false">http://highestpoint.biz/?p=119</guid>
		<description><![CDATA[HBase is a scalable, distributed database built on top of Hadoop. Both projects mainly target *nix environments for production installation. However, for development and testing purposes, one can run a one-node instance on a Windows computer by using Cygwin. This document explains how to properly configure your Windows system to get HBase up and running.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify; "><a title="HBase project" href="http://hadoop.apache.org/hbase" target="_blank">HBase</a> is a distributed, column-oriented store, modeled after Google&#8217;s <a title="Google's BigTable" href="http://labs.google.com/papers/bigtable.html" target="_blank">BigTable</a>. HBase is built on top of <a title="Hadoop project" href="http://hadoop.apache.org">Hadoop</a> for its <a title="Hadoop MapReduce project" href="http://hadoop.apache.org/mapreduce" target="_blank">MapReduce </a>and <a title="Hadoop DFS project" href="http://hadoop.apache.org/hdfs">distributed file system</a> implementation. All these projects are open-source and part of the <a title="The Apache Software Foundation" href="http://www.apache.org/" target="_blank">Apache Software Foundation</a>.</p>
<p style="text-align: justify; ">As being distributed, large scale platforms, the Hadoop and HBase projects mainly focus on <em><strong>*nix</strong></em><strong> environments</strong> for production installations. However, being developed in <strong>Java</strong>, both projects are fully <strong>portable</strong> across platforms and, hence, also to the <strong>Windows operating system</strong>. For ease of development the projects rely on <a title="Cygwin site" href="http://www.cygwin.com/" target="_blank">Cygwin</a> to have a *nix-like environment on Windows to run the shell scripts.</p>
<h2 style="text-align: justify; ">Purpose</h2>
<p style="text-align: justify; ">This document explains the <strong>intricacies of running HBase on Windows using Cygwin</strong> as an all-in-one single-node installation for testing and development. The HBase <a title="HBase Overview" href="http://hadoop.apache.org/hbase/docs/current/api/overview-summary.html#overview_description" target="_blank">Overview</a> and <a title="HBase QuickStart" href="http://hadoop.apache.org/common/docs/current/quickstart.html" target="_blank">QuickStart</a> guides on the other hand go a long way in explaning how to setup <a title="HBase project" href="http://hadoop.apache.org/hbase" target="_blank">HBase</a> in more complex deployment scenario&#8217;s.</p>
<h2 style="text-align: justify; ">Installation</h2>
<p style="text-align: justify; ">For running HBase on Windows, 3 technologies are required: <strong>Java, Cygwin and SSH</strong>. The following paragraphs detail the installation of each of the aforementioned technologies.</p>
<h3 style="text-align: justify; ">Java</h3>
<p style="text-align: justify; ">HBase depends on the <a title="Java Platform, Standard Edition, 6 Release" href="http://java.sun.com/javase/6/" target="_blank">Java Platform, Standard Edition, 6 Release</a>. So the target system has to be provided with at least the Java Runtime Environment (JRE); however if the system will also be used for development, the Jave Development Kit (JDK) is preferred. You can download the latest versions for both from <a title="Java SE Downloads" href="http://java.sun.com/javase/downloads/index.jsp" target="_blank">Sun&#8217;s download page</a>. Installation is a simple GUI wizard that guides you through the process.</p>
<h3 style="text-align: justify; ">Cygwin</h3>
<p style="text-align: justify; ">Cygwin is probably the oddest technology in this solution stack. It provides a dynamic link library that emulates most of a *nix environment on Windows. On top of that a whole bunch of the most common *nix tools are supplied. Combined, the DLL with the tools form a very *nix-alike environment on Windows.</p>
<p style="text-align: justify; ">For installation, Cygwin provides the <a title="Cygwin Setup Utility" href="http://cygwin.com/setup.exe" target="_blank"><strong><code>setup.exe</code> utility</strong></a> that tracks the versions of all installed components on the target system and provides the mechanism for <strong>installing</strong> or <strong>updating </strong>everything from the mirror sites of Cygwin.</p>
<p style="text-align: justify; ">To support installation, the <code>setup.exe</code> utility uses 2 directories on the target system. The <strong>Root</strong> directory for Cygwin (defaults to <code>C:\cygwin)</code> which will become <code>/</code> within the eventual Cygwin installation; and the <strong>Local Package </strong>directory (e.g. <code>C:\cygsetup</code> that is the cache where <code>setup.exe</code> stores the packages before they are installed. The cache must not be the same folder as the Cygwin root.</p>
<p style="text-align: justify; ">Perform following steps to install Cygwin, which are elaboratly detailed in the <a title="Setting Up Cygwin" href="http://cygwin.com/cygwin-ug-net/setup-net.html" target="_self">2nd chapter</a> of the <a title="Cygwin User's Guide" href="http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html" target="_blank">Cygwin User&#8217;s Guide</a>:</p>
<ol style="text-align: justify; ">
<li>Make sure you have <code>Administrator</code> privileges on the target system.</li>
<li>Choose and create you <strong>Root</strong> and <strong>Local Package</strong> directories. A good suggestion is to use <code>C:\cygwin\root</code> and <code>C:\cygwin\setup</code> folders.</li>
<li>Download the <code>setup.exe</code> utility and save it to the <strong>Local Package</strong> directory.</li>
<li>Run the <code>setup.exe</code> utility,
<ol>
<li>Choose  the <code>Install from Internet</code> option,</li>
<li>Choose your <strong>Root</strong> and <strong>Local Package</strong> folders</li>
<li>and select an appropriate mirror.</li>
<li>Don&#8217;t select any additional packages yet, as we only want to install Cygwin for now.</li>
<li>Wait for download and install</li>
<li>Finish the installation</li>
</ol>
</li>
<li>Optionally, you can now also add a shortcut to your Start menu pointing to the <code>setup.exe</code> utility in the <strong>Local Package </strong>folder.</li>
<li>Add <code>CYGWIN_HOME</code> system-wide environment variable that points to your <strong>Root </strong>directory.</li>
<li>Add <code>%CYGWIN_HOME%\bin</code> to the end of your <code>PATH</code> environment variable.</li>
<li>Reboot the sytem after making changes to the environment variables otherwise the OS will not be able to find the Cygwin utilities.</li>
<li>Test your installation by running your freshly created shortcuts or the <code>Cygwin.bat</code> command in the <strong>Root</strong> folder. You should end up in a terminal window that is running a <a title="Bash Reference Manual" href="http://www.gnu.org/software/bash/manual/bashref.html" target="_blank">Bash shell</a>. Test the shell by issuing following commands:
<ol>
<li><code>cd /</code> should take you to thr <strong>Root</strong> directory in Cygwin;</li>
<li>the <code>LS</code> commands that should list all files and folders in the current directory.</li>
<li>Use the <code>exit</code> command to end the terminal.</li>
</ol>
</li>
<li>When needed, to <strong>uninstall</strong> Cygwin you can simply delete the <strong>Root</strong> and <strong>Local Package</strong> directory, and the <strong>shortcuts</strong> that were created during installation.</li>
</ol>
<h3 style="text-align: justify; ">SSH</h3>
<p style="text-align: justify; ">HBase (and Hadoop) rely on <a title="Secure Shell" href="http://nl.wikipedia.org/wiki/Secure_Shell" target="_blank">SSH</a> for interprocess/-node communication and launching remote commands. SSH will be provisioned on the target system via Cygwin, which supports running Cygwin programs as Windows services!</p>
<ol style="text-align: justify; ">
<li>Rerun the <code>setup.exe</code> utility.</li>
<li>Leave all parameters as is, skipping through the wizard using the <code>Next</code> button until the <code>Select Packages</code> panel is shown.</li>
<li>Maximize the window and click the <code>View</code> button to toggle to the list view, which is ordered alfabetically on <code>Package</code>, making it easier to find the packages we&#8217;ll need.</li>
<li>Select the following packages by clicking the status word (normally <code>Skip</code>) so it&#8217;s marked for installation. Use the <code>Next </code>button to download and install the packages.
<ol>
<li>OpenSSH</li>
<li>tcp_wrappers</li>
<li>diffutils</li>
<li>zlib</li>
</ol>
</li>
<li>Wait for the install to complete and finish the installation.</li>
</ol>
<h3 style="text-align: justify; ">HBase</h3>
<p style="text-align: justify; ">Download the latest release of HBase from the <a title="HBase Releases" href="http://hadoop.apache.org/hbase/releases.html" target="_blank">website</a>. As the HBase distributable is just a zipped archive, installation is as simple as unpacking the archive so it ends up in its final <strong>installation</strong> directory. Notice that HBase has to be installed in Cygwin and a good directory suggestion is to use <code>/usr/local/</code> (or [<code><strong>Root</strong> directory]\usr\local</code> in Windows slang). You should end up with a <code>/usr/local/hbase-<em>&lt;version&gt;</em></code> installation in Cygwin.</p>
<p>This finishes installation. We go on with the configuration.</p>
<h2 style="text-align: justify; ">Configuration</h2>
<p style="text-align: justify; ">There are 3 parts left to configure: Java, SSH and HBase itself. Following paragraphs explain eacht topic in detail.</p>
<h3 style="text-align: justify; ">Java</h3>
<p style="text-align: justify; ">One important thing to remember in shell scripting in general (i.e. *nix and Windows) is that managing, manipulating and assembling path names that contains spaces can be very hard, due to the need to escape and quote those characters and strings. So we try to stay away from spaces in path names. *nix environments can help us out here very easily by using <strong>symbolic links</strong>.</p>
<ol style="text-align: justify; ">
<li style="text-align: justify; ">Create a link in <code>/usr/local</code> to the Java home directory by using the following command and substituting the name of your chosen Java environment:
<pre>LN -s /cygdrive/c/Program\ Files/Java/<em>&lt;jre name&gt; </em>/usr/local/<em>&lt;jre name&gt;</em></pre>
</li>
<li>Test your java installation by changing directories to your Java folder <code>CD /usr/local/<em>&lt;jre name&gt;</em></code> and issueing the command <code>./bin/java -version</code>. This should output your version of the chosen JRE.</li>
</ol>
<h3 style="text-align: justify; ">SSH</h3>
<p style="text-align: justify; ">Configuring SSH is quite elaborate, but primarily a question of launching it by default as a Windows service.</p>
<ol style="text-align: justify; ">
<li style="text-align: justify; ">On Windows Vista and above make sure you run the Cygwin shell with elevated privileges, by right-clicking on the shortcut an using <code>Run as Administrator</code>.</li>
<li style="text-align: justify; ">First of all, we have to make sure the rights on some crucial files are correct. Use the commands underneath. You can verify all rights by using the <code>LS -L</code> command on the different files. Also, notice the auto-completion feature in the shell using <code>&lt;TAB&gt;</code> is extremely handy in these situations.
<ol>
<li><code>chmod +r /etc/passwd</code> to make the passwords file readable for all</li>
<li><code>chmod u+w /etc/passwd</code> to make the passwords file writable for the owner</li>
<li><code>chmod +r /etc/group</code> to make the groups file readable for all</li>
</ol>
<ol>
<li><code>chmod u+w /etc/group</code> to make the groups file writable for the owner</li>
</ol>
<ol>
<li><code>chmod 755 /var</code> to make the var folder writable to owner and readable and executable to all</li>
</ol>
</li>
<li>Edit the /etc/hosts.allow file using your favorite editor (why not VI in the shell!) and make sure the following two lines are in there before the <code>PARANOID</code> line:
<ol>
<li><code>ALL : localhost 127.0.0.1/32 : allow</code></li>
<li><code>ALL : [::1]/128 : allow</code></li>
</ol>
</li>
<li>Next we have to configure SSH by using the script <code>ssh-host-config</code>
<ol>
<li>If this script asks to overwrite an existing <code>/etc/ssh_config</code>, answer <code>yes</code>.</li>
<li>If this script asks to overwrite an existing <code>/etc/sshd_config</code>, answer <code>yes</code>.</li>
<li>If this script asks to use privilege separation, answer <code>yes</code>.</li>
<li>If this script asks to install <code>sshd</code> as a service, answer <code>yes</code>. Make sure you started your shell as Adminstrator!</li>
<li>If this script asks for the CYGWIN value, just <code>&lt;enter&gt;</code> as the default is <code>ntsec</code>.</li>
<li>If this script asks to create the <code>sshd</code> account, answer <code>yes</code>.</li>
<li>If this script asks to use a different user name as service account, answer <code>no</code> as the default will suffice.</li>
<li>If this script asks to create the <code>cyg_server</code> account, answer <code>yes</code>. Enter a password for the account.</li>
</ol>
</li>
<li>Start the SSH service using <code>net start sshd</code> or <code>cygrunsrv  --start  sshd</code>. Notice that <code>cygrunsrv</code> is the utility that make the process run as a Windows service.</li>
<li>Confirm that you see a message stating that <code>the CYGWIN sshd service  was started succesfully.</code></li>
<li>Harmonize Windows and Cygwin user account by using the commands:
<ol>
<li><code>mkpasswd -cl &gt; /etc/passwd</code></li>
<li><code>mkgroup --local &gt; /etc/group</code></li>
</ol>
</li>
<li>Test the installation of SSH:
<ol>
<li>Open a new Cygwin terminal</li>
<li>Use the command <code>whoami</code> to verify your userID</li>
<li>Issue an <code>ssh localhost</code> to connect to the system itself
<ol>
<li>Answer <code>yes</code> when presented with the server's fingerprint</li>
<li>Issue your password when prompted</li>
<li>test a few commands in the remote session</li>
<li>The <code>exit</code> command should take you back to your first shell in Cygwin</li>
</ol>
</li>
<li><code>Exit</code> should terminate the Cygwin shell.</li>
</ol>
</li>
</ol>
<h3 style="text-align: justify; ">HBase</h3>
<p>If all previous configruration is working properly, we just need some tinkering at the HBase config files to properly resolve on Windows/Cygwin. All files and paths referenced here start from the HBase <code>[<strong>installation</strong> directory]</code> as working directory.</p>
<ol>
<li>HBase uses the <code>./conf/hbase-env.sh</code> to configure its dependencies on the runtime environment. Copy and uncomment following lines just underneath their original, change them to fit your environemnt. They should read something like:
<ol>
<li><code>export JAVA_HOME=/usr/local/<em>&lt;jre name&gt;</em></code></li>
<li><code>export HBASE_IDENT_STRING=$HOSTNAME</code> as this most likely does not inlcude spaces.</li>
</ol>
</li>
<li>HBase uses the <code>hbase-default.xml</code> file for configuration. Some properties do not resolve to existing directories because the JVM runs on Windows. This is the major issue to keep in mind when working with Cygwin: within the shell all paths are *nix-alike, hence relative to the root <code>/</code>. However, every parameter that is to be consumed within the windows processes themself, need to be Windows settings, hence <code>C:\</code>-alike. Change following propeties in the configuration file, adjusting paths where necessary to conform with your own installation:
<ol>
<li><code>hbase.rootdir</code> must read e.g. <code>file:///C:/cygwin/root/tmp/hbase/data</code></li>
<li><code>hbase.tmp.dir</code> must read <code>C:/cygwin/root/tmp/hbase/tmp</code></li>
<li><code>hbase.zookeeper.quorum</code> must read <code>127.0.0.1</code> because for some reason <code>localhost</code> doesn't seem to resolve properly on Cygwin.</li>
</ol>
</li>
<li>Make sure the configured <code>hbase.rootdir</code> and <code>hbase.tmp.dir</code> directories exist and have the proper rights set up e.g. by issuing a <code>chmod 777</code> on them.</li>
</ol>
<h2 style="text-align: justify; ">Testing</h2>
<p>This should conclude the installation and configuration of HBase on Windows using Cygwin. So it's time to test it.</p>
<ol>
<li>Start a Cygwin terminal, if you haven't already.</li>
<li>Change directory to HBase <strong>installation</strong> using <code>CD /usr/local/hbase-<em>&lt;version&gt;</em></code>, preferably using auto-completion.</li>
<li>Start HBase using the command <code>./bin/start-hbase.sh</code>
<ol>
<li>When prompted to accept the SSH fingerprint, answer <code>yes</code>.</li>
<li>When prompted, provide your password. Maybe multiple times.</li>
<li>When the command completes, the HBase server should have started.</li>
<li>However, to be absolutely certain, check the logs in the <code>./logs</code> directory for any exceptions.</li>
</ol>
</li>
<li>Next we start the HBase shell using the command <code>./bin/hbase shell</code>
<ol>
<li>Create a simple table using command <code>create 'test', 'data'</code></li>
<li>Verify the table exists using the command <code>list</code></li>
<li>Insert data into the table using e.g.
<pre>put 'test', 'row1', 'data:1', 'value1'
put 'test', 'row2', 'data:2', 'value2'
put 'test', 'row3', 'data:3', 'value3'</pre>
</li>
<li>List all rows in the table using the command <code>scan 'test'</code> that should list all the rows previously inserted. Notice how 3 new columns where added without changing the schema!</li>
<li>Finally we get rid of the table by issuing <code>disable 'test'</code> followed by <code>drop 'test'</code> and verified by <code>list</code> which should give an empty listing.</li>
<li>Leave the shell by <code>exit</code></li>
</ol>
</li>
<li>To stop the HBase server issue the <code>./bin/stop-hbase.sh</code> command. And wait for it to complete!!! Killing the process might corrupt your data on disk.</li>
<li>In case of problems,
<ol>
<li>verify the HBase logs in the <code>./logs</code> directory.</li>
<li>Try to fix the problem</li>
<li>Get help on the forums or IRC (<code>#hbase@freenode.net</code>). People are very active and keen to help out!</li>
<li>Stopr, restart and retest the server.</li>
</ol>
</li>
</ol>
<h1>Conclusion</h1>
<p>Now your HBase server is running, start coding and build that next killer app on this particular, but scalable datastore!</p>
]]></content:encoded>
			<wfw:commentRss>http://highestpoint.biz/2009/10/installing-hbase-on-windows/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

