<?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>jasha.eu</title>
	<atom:link href="http://www.jasha.eu/feed?alt=rss" rel="self" type="application/rss+xml" />
	<link>http://www.jasha.eu</link>
	<description></description>
	<lastBuildDate>Wed, 17 Oct 2012 06:52:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>WidgetGap: a Wookie &amp; Cordova (PhoneGap) mashup widget</title>
		<link>http://www.jasha.eu/blogposts/2012/10/widgetgap-wookie-cordova-phonegap-mashup-widget.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=widgetgap-wookie-cordova-phonegap-mashup-widget</link>
		<comments>http://www.jasha.eu/blogposts/2012/10/widgetgap-wookie-cordova-phonegap-mashup-widget.html#comments</comments>
		<pubDate>Wed, 17 Oct 2012 06:30:03 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Rave]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Front end technology]]></category>
		<category><![CDATA[Geen categorie]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apache Cordova]]></category>
		<category><![CDATA[Apache Wookie]]></category>
		<category><![CDATA[PhoneGap]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/?p=149</guid>
		<description><![CDATA[I knew PhoneGap as a tool to make native mobile apps from HTML, CSS and JavaScript, but had never used it myself. When I had to debug a PhoneGap application I read that the project you&#8217;re uploading is basically a W3C widget. I should have known from Scott&#8217;s blogpost, but apparently I forgot. I did [...]]]></description>
				<content:encoded><![CDATA[<p>I knew <a href="http://www.phonegap.com/" target="_blank">PhoneGap</a> as a tool to make native mobile apps from HTML, CSS and JavaScript, but had never used it myself. When I had to debug a PhoneGap application I read that the project you&#8217;re uploading is basically a W3C widget. I should have known from <a href="http://scottbw.wordpress.com/2011/10/07/phonegap-and-widgets/" target="_blank">Scott&#8217;s blogpost</a>, but apparently I forgot. I did remember that <a href="http://incubator.apache.org/wookie/" target="_blank">Apache Wookie</a> is responsible for rendering W3C widgets in <a href="http://rave.apache.org/" target="_blank">Apache Rave</a>.</p>
<p><img class="alignright size-full wp-image-177" title="WidgetGap icon" src="http://www.jasha.eu/wp-content/uploads/2012/10/icon-72.png" alt="WidgetGap icon" width="72" height="72" />I decided to make my own demo widget called WidgetGap, that can be used for making both a mobile app and a widget in Rave. Then I started a new <a href="http://docs.phonegap.com/en/2.1.0/guide_getting-started_ios_index.md.html#Getting%20Started%20with%20iOS" target="_blank">iOS project</a> for Apache <a href="http://incubator.apache.org/cordova/" target="_blank">Cordova</a> (the open source project behind PhoneGap). If you don&#8217;t develop in OSX, pick a <a href="http://docs.phonegap.com/en/2.1.0/guide_getting-started_index.md.html#Getting%20Started%20Guides" target="_blank">getting started guide</a> that works on your machine.</p>
<p>I copied the result of a JSON call to the REST API of the <a href="http://www.demo.onehippo.com/rest" target="_blank">Hippo Go Green</a> demo in a Javascript variable to process that into the HTML. I chose this local variable because I didn&#8217;t want to call the REST interface over and over again just to get my markup right. After modifying the CSS it was time to replace the local resultset with a real AJAX call. The app and Wookie widget refuse to fetch the data because it&#8217;s a call to a different domain. Luckily there are solutions for this. For the mobile app you should add the following entry to the config.xml</p>
<pre class="brush: xml;">&lt;access origin="http://www.demo.onehippo.com"/&gt;</pre>
<p>For the iPhone simulator you also need to add this domain to the &#8220;External Hosts&#8221; entry in Resources/Cordova.plist file in the Xcode project.</p>
<p>For the Wookie widget I still didn&#8217;t get the data, but a few extra lines of Javascript made it work:</p>
<pre class="brush: js;">var loc = productLink;
if (window.widget &amp;&amp; typeof window.widget.proxify == 'function') {
    loc = widget.proxify(loc);
}</pre>
<p>Apart from issues with DOM manipulations in Javascript (not my expertise), I was able to create the widget that displayed a list of products from the Go Green REST interface with more detailed information when you click on the title.</p>

<a href='http://www.jasha.eu/blogposts/2012/10/widgetgap-wookie-cordova-phonegap-mashup-widget.html/widgetgap-in-android' title='WidgetGap in Android'><img width="150" height="150" src="http://www.jasha.eu/wp-content/uploads/2012/10/WidgetGap-in-Android-150x150.png" class="attachment-thumbnail" alt="WidgetGap in Android" /></a>
<a href='http://www.jasha.eu/blogposts/2012/10/widgetgap-wookie-cordova-phonegap-mashup-widget.html/widgetgap-in-iphone-simulator' title='WidgetGap in iPhone simulator'><img width="150" height="150" src="http://www.jasha.eu/wp-content/uploads/2012/10/WidgetGap-in-iPhone-simulator-150x150.png" class="attachment-thumbnail" alt="WidgetGap in iPhone simulator" /></a>
<a href='http://www.jasha.eu/blogposts/2012/10/widgetgap-wookie-cordova-phonegap-mashup-widget.html/widgetgap-in-rave' title='WidgetGap in Rave'><img width="150" height="150" src="http://www.jasha.eu/wp-content/uploads/2012/10/WidgetGap-in-Rave-150x150.png" class="attachment-thumbnail" alt="WidgetGap in Rave" /></a>

<h2>Try it</h2>
<p>The <a href="https://build.phonegap.com/apps/222802/share" target="_blank">mobile app</a> is available on PhoneGap (except for iOS because of Apple&#8217;s licensing policy).</p>
<p>To see the widget in Wookie, <a href="http://incubator.apache.org/wookie/docs/download.html" target="_blank">download</a> and start the standalone version of Wookie.<br />
In a different shell clone the <a href="https://github.com/jashaj/WidgetGap" target="_blank">WidgetGap repository</a> from Github and go to the www folder. Package the contents and move this package to the deployment directory of the running Wookie instance:</p>
<pre class="brush: shell;">git clone git://github.com/jashaj/WidgetGap.git
cd WidgetGap/www
zip -r widgetgap.wgt *
mv widgetgap.wgt ~/apache-wookie-0.11.0-incubating-standalone/build/webapp/wookie/deploy/</pre>
<p>In the shell where you started Wookie you see the feedback about the deployment. If you see &#8220;&#8216;WidgetGap&#8217; &#8211; Widget was successfully imported into the system as WidgetGap&#8221; in the shell, you can view the widget it in your browser on http://localhost:8080/wookie/demo/.</p>
<p>The code is not optimised at all and maybe there is a better way to create this widget, but I wanted to show that you can write a single widget for the web and build a mobile app from it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2012/10/widgetgap-wookie-cordova-phonegap-mashup-widget.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fronteers 2012</title>
		<link>http://www.jasha.eu/blogposts/2012/10/fronteers-2012.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fronteers-2012</link>
		<comments>http://www.jasha.eu/blogposts/2012/10/fronteers-2012.html#comments</comments>
		<pubDate>Sun, 07 Oct 2012 10:25:36 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Front end technology]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/?p=126</guid>
		<description><![CDATA[Even though most of the web development I do now is in the backend, I started with HTML in 1995 before I learned programming Java. In 2010 I attended the Fronteers conference and came back excited about the new CSS and Javascript tricks. This is why I wanted to go to the Fronteers 2012 conference [...]]]></description>
				<content:encoded><![CDATA[<p>Even though most of the web development I do now is in the backend, I started with HTML in 1995 before I learned programming Java. In 2010 I attended the Fronteers conference and came back excited about the new CSS and Javascript tricks. This is why I wanted to go to the <a href="http://fronteers.nl/congres/2012/sessions" target="_blank">Fronteers 2012 conference</a> this year. Instead of giving a full coverage of the conference, I&#8217;ll give my tweets a little context where needed.</p>
<h2>General</h2>
<p><q>Saving a lot of interesting links from #fronteers12 presentations on <a href="http://delicious.com/jashaj" target="_blank">delicious.com/jashaj</a></q></p>
<p>RT @sjoerdly: <q>Still great work on the collaborative notes <a href="http://j.mp/RezoFp" target="_blank">j.mp/RezoFp</a> top initiative by @hayify #fronteers12 even with @alexgraul talking speed</q>.</p>
<p><q>The beautiful venue of #fronteers12 Tuschinski <a href="http://twitpic.com/b16dgt" target="_blank">twitpic.com/b16dgt</a></q> <a href="http://www.jasha.eu/wp-content/uploads/2012/10/2012-10-05-11.45.34-e1349558793574.jpg"><img title="Tuschinski 1" src="http://www.jasha.eu/wp-content/uploads/2012/10/2012-10-05-11.45.34-e1349558793574.jpg" alt="Lights in Tuschinski 1" width="640" height="360" /></a></p>
<p><q>Thanks @FronteersConf for a great conference. @codepo8 you&#8217;re not only an inspiring speaker, but also a good MC.</q></p>
<h2>A Pixel is not a Pixel by Peter-Paul Koch</h2>
<p><q>Pixels and viewports explained by @ppk #fronteers12 Finally learning what the meta tag means I&#8217;ve been copy pasting the last 2 years.</q><br />
PPK explained the difference between various widths you browser uses to calculate the size of boxed. You&#8217;ve probably used something like &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width&#8221;&gt; in your HTML to let your (mobile) device render the HTML nicely.</p>
<p><q>Interesting: (over-)usage of javascript libraries for just a few simple tasks eat up your mobile phone&#8217;s battery life. #fronteers12</q><br />
The lazy way to handle simple tasks like selecting a specific DOM element or doing an Ajax call is to include a framework such as jQuery. This brings in a lot of code your site is not using. For a desktop device behind a broadband network this is not a real issue. For the mobile web it means not only a long loading time over a 2G network, but also a shorter battery life for your device because it has to process all that code.</p>
<h2>Ten things I didn’t know about HTML by Mathias Bynens</h2>
<blockquote><p>&lt;3 legacy in HTML5 &lt;html&gt;<br />
&lt;body bgcolor=&#8221;chucknorris&#8221;&gt;<br />
&lt;h1&gt;Chuck Norris rules&lt;/h1&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; #fronteers12</p></blockquote>
<p>HTML5 specifies how browsers should behave in case of incorrect markup. In case of bgcolor=&#8221;chucknorris&#8221; it finds 2 valid hexadecimal characters and adds four 0&#8242;s to get a valid value. The result is the same as bgcolor=&#8221;#CC0000&#8243;&gt; (red)</p>
<p><q>Browsers are just (too) kind for people creating webpages. Try omitting a ; in Java code and it won&#8217;t compile. #fronteers12</q><br />
Mathias was talking about a discussion on github whether to add an optional ; at the end of a Javascript statement. Browsers have always accepted invalid HTML and this is IMO the main reason everyone was able to create their own webpage.</p>
<h2>Accessibility panel with Bram Duvigneau, Antoine Hegeman and Bor Verkroost</h2>
<p><q>Very useful to hear what issues people can have wrt accessibility of websites. #fronteers12</q><br />
When the video of this discussion panel becomes available, I&#8217;d recommend you watching it. Not everyone can handle menus with a lot of items or a list of links too close to each other.</p>
<p>RT @rubenbos: <q>Blind developer (!) demoing how he browses the web at #fronteers12. We can/should learn from this. #accessibility <a href="http://pic.twitter.com/n6ntQQTk">pic.twitter.com/n6ntQQTk</a></q> <img class="alignnone" title="Blind developer (!) demoing how he browses the web at #fronteers12" src="https://pbs.twimg.com/media/A4XoMZWCEAAWBaR.jpg:large" alt="Accessibility discussion panel at Fronteers 2012" width="511" height="682" /></p>
<h2>More CSS secrets: Another 10 things you may not know about CSS by Lea Verou</h2>
<p><q>The result of the circling smiley is that I get hypnotised with a smile on my face <img src='http://www.jasha.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Very cool CSS tricks #fronteers12</q><br />
We saw 10 (amazing) effects you can create with modern CSS3 without Javascript. One of them was a smiley circling on the page.</p>
<h2>The biggest devils in the smallest details by Marcin Wichary</h2>
<p>Apparently there is a team of designers and developers that work on the Google doodles for a living. As I write this, Google shows the doodle for <a href="http://www.google.com/doodles/niels-bohrs-127th-birthday" target="_blank">Niels Bohr</a>&#8216;s 127th birthday.</p>
<p><q>my aunt called me when she saw the Pacman doodle. She thought her computer was infected by a virus. #fronteers12</q> and RT @flurin: <q>Pacman doodle scared people because their computers suddenly started to make noise. They fixed it during the day. @mwichary #fronteers12</q><br />
During the day that doodle was changed because my aunt wasn&#8217;t the only one.</p>
<p><q>Presenter&#8217;s MacBook drops and survives #fronteers12</q><br />
550 hearts skipped a beat when the presenter&#8217;s MacBook fell off the lectern during the presentation. Surprisingly it wasn&#8217;t damaged.</p>
<h2>Building the web platform by Anne van Kesteren</h2>
<p><q>LOL: What the WTF: <a href="http://wtw.tf" target="_blank">wtw.tf</a> #fronteers12</q></p>
<h2>I can smell your CMS by Phil Hawksworth</h2>
<p><q>Next on #fronteers12: Phil Hawksworth, I can smell your CMS. Very interested if my former employer smells nice or not.</q><br />
My <a href="http://www.onehippo.com" target="_blank">former employer</a> did very well actually. It lets you create your own URL scheme so you can migrate from/to an other platform without being forced to use other URLs. It doesn&#8217;t enforce HTML output. Its WYSIWYG editor is outdated but eat least it has a means to clean its output so you won&#8217;t leave empty paragraphs or font elements.</p>
<p><q>Hey, someone with a laptop that is not a MacBook #fronteers12</q><br />
The vast majority was using devices that were designed in Cupertino. After 1,5 day I saw the first laptop from a different vendor. Later that day there turned out to be 5 of them in an audience of 550 people. Who thinks different?</p>
<p><q>OMG this really smells: instead of burton.com -&gt; eur.burton.com/on/demandware.store/Sites-Burton_EU-Site/default #cmssmell #fronteers12</q><br />
This site has a ridiculously long URL for this site&#8217;s homepage that also contains the name of the CMS vendor in it.</p>
<p><q>That view state is default behaviour of ASP.Net (still ugly) #fronteers12 #cmssmell</q><br />
An enterprise CMS vendor has this very long hidden input field on its own site. My .NET knowledge is a bit outdated because someone says Microsoft changed this default behaviour years ago.</p>
<p><q>WYSIWYG is danger, but customers demand it #fronteers12 #smellcms</q></p>
<p><q>If people still think a post processor to clean WYSIWYG crapTML is not necessary, watch the video of this talk #smellcms #fronteers12</q><br />
We saw traces of empty paragraphs with a non-breaking space wrapped in a font element to give it a smaller size.</p>
<p><q>Please speak up a bit during the #fqa #fronteers12</q><br />
Instead of passing a microphone through the audience, the MC did the QA based on tweets in a 1-on-1 session. Because the MC and the speaker were close to each other, they forgot to speak up for the rest of the audience.</p>
<p>RT @philhawksworth: <q>149 stinking slides from my #smellCMS session at #fronteer12 are now available at <a href="https://speakerdeck.com/u/philhawksworth/p/i-can-smell-your-cms" target="_blank">speakerdeck.com/u/philhawkswor</a>…</q></p>
<h2>Shameless plug</h2>
<p><q>Turn a banana into an input device for your computer <a href="http://makeymakey.com" target="_blank">makeymakey.com</a> #fronteers12</q></p>
<h2>What the legacy web is keeping from us by Alex Russell</h2>
<p><q>Features IE7 users are missing. It has been 6 years since that browser has been released. #fronteers12 <a href="http://twitpic.com/b19nmg" target="_blank">twitpic.com/b19nmg</a></q> <a href="http://www.jasha.eu/wp-content/uploads/2012/10/2012-10-05-17.19.21-e1349558920324.jpg"><img class="alignnone  wp-image-128" title="Summary of features IE7 users cannot use" src="http://www.jasha.eu/wp-content/uploads/2012/10/2012-10-05-17.19.21-1024x576.jpg" alt="Summary of features IE7 users cannot use" width="584" height="328" /></a></p>
<p><q>Don&#8217;t blame the corporate users for their outdated browsers. Blame the IT department and CIO #fronteers12 #fqa</q><br />
As web developers we&#8217;d like users to upgrade to the latest browser versions to use CSS instead of Javascript or images for cool effects. Employees of larger corporations are usually stuck with outdated Internet Explorer version and they cannot upgrade themselves. It&#8217;s the IT department that is afraid to roll out updates of software or they don&#8217;t get the time to work on it. There&#8217;s also Microsoft to blame to be so slow releasing new versions of IE. It&#8217;s easier to roll out small updates than the big-bang upgrades Microsoft comes with.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2012/10/fronteers-2012.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Rave Hackathon</title>
		<link>http://www.jasha.eu/blogposts/2012/06/apache-rave-hackathon.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apache-rave-hackathon</link>
		<comments>http://www.jasha.eu/blogposts/2012/06/apache-rave-hackathon.html#comments</comments>
		<pubDate>Mon, 18 Jun 2012 18:43:39 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Rave]]></category>
		<category><![CDATA[Hippo]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/?p=119</guid>
		<description><![CDATA[Last Wednesday was the first Apache Rave Hackathon in Utrecht, The Netherlands. We started with a little exercise because the fire alarm went off. There was a small accident in the railway station, so we had to leave the adjacent office building. Luckily we were allowed to enter it again. After defining the schedule and [...]]]></description>
				<content:encoded><![CDATA[<p>Last Wednesday was the first <a href="http://www.meetup.com/apachemeetup-nl/events/65317712/" target="_blank">Apache Rave Hackathon</a> in Utrecht, The Netherlands. We started with a little exercise because the fire alarm went off. There was a small accident in the railway station, so we had to leave the adjacent office building. Luckily we were allowed to enter it again.</p>
<p>After defining the schedule and introducing ourselves I gave a short <a title="PDF file of my presentation" href="http://files.meetup.com/3889492/20120426%20Rave%20Apache%20Meetup.pdf" target="_blank">presentation</a> and demo of <a href="http://rave.apache.org" target="_blank">Apache Rave</a>. One of the new features is sharing a page with other users. In the demo I showed the chat widget in a shared page. Both users had the same set of widgets now, but they used them under their own name.</p>
<p>This was a nice bridge to the next <a title="ROLE project slides (PDF)" href="http://files.meetup.com/3889492/20120613.role.slides.apache.rave.hackathon.pdf" target="_blank">presentation</a> by Dominik Renzel and Sten Govaerts of the <a href="http://www.role-project.eu/" target="_blank">ROLE project</a>. We were happy to hear that the ROLE project members are going to contribute to Apache Rave. They showed widgets that were able to communicate with each other using XMPP. This made it possible to play a (Youtube) movie at the same time in different browsers (or on different computers) or cooperate on documents. They also showed their meta-data of the events in the portal by which we could trace who was making fun of the Netherlands &#8211; Germany football game in the drawing gadget.</p>
<p>Niels van Dijk (SURFnet) presented a <a title="Portal requirements presentation (PDF)" href="http://files.meetup.com/3889492/portal%20requirements%20for%20institutions%20.pdf" target="_blank">comparison</a> of several portals and web applications that are using OpenSocial gadgets like Liferay, Atlassian Jira and Sakai. Although Apache Rave is a relatively young project, it supported most of the features the Dutch universities and research institutions want.</p>
<p>Matt Franklin, PMC chair of Apache Rave, is also heavily involved with the <a href="http://docs.opensocial.org/" target="_blank">OpenSocial specification</a>. OpenSocial was initially driven by social networks like MySpace and Orkut, which left its trails in the specification. Now the enterprise is using OpenSocial to exchange data about persons and groups it&#8217;s time to clean up and simplify the specification.<br />
A new addition will be the so called &#8220;embedded experiences&#8221;. As an example your activity stream can contain gadgets which can be rendered aside from the activity stream. Sometimes <a href="http://www.youtube.com/watch?v=MYKdlPbUB8w" target="_blank">a video</a> can say more than a thousand words.<br />
Matt finished his talk with examples how The MITRE corporation will use Apache Rave as their intranet solution. It was a mix of data displayed directly on the page and gadgets. Some of the gadgets were seamlessly integrated into the page design.</p>
<p>Ard Schrijvers showed how Hippo solves the issue of page management. In many MVC frameworks like Spring MVC a controller has to collect all the data and then calls the view. A lot of elements are shared among different pages, while only a few &#8220;blocks&#8221; on a page change per page template. The <a href="https://wiki.onehippo.com/display/CMS7/7.7+Hippo+Site+Toolkit+Wiki+pages" target="_blank">Hippo Site Toolkit</a> breaks up the configuration of a page into a hierarchy of components which can be reused in different page templates. In the future Apache Rave can profit from this model.</p>
<p>After the lunch my colleague Alle Veenstra showed the extensions on top of Apache Rave to run it on the <a href="http://www.surfconext.nl" target="_blank">SURFconext</a> platform. He has built an <a href="https://github.com/OpenConext/spring-security-opensaml" target="_blank">OpenSAML module for Spring Security</a> which makes Apache Rave a SAML service provider. If the visitor isn&#8217;t authenticated yet, he is redirected to the SURFconext Where Are You From (WAYF) page from which he can choose his own IdentityProvider to log in into the portal. New users are automatically provisioned. He has also made a well documented <a href="https://github.com/OpenConextApps/OpenConextApps-rave-template" target="_blank">example project</a> that uses this module.</p>
<p>Scott Wilson showed the <a href="http://code.google.com/p/edukapp/" target="_blank">edukapp</a> white label widget store. It is using <a href="http://lucene.apache.org/solr/" target="_blank">Apache Solr</a> to index and query the available widgets and suggest other widgets that are similar to the chosen widget. It uses JSON to expose widget meta-data which makes it possible to exchange widgets between organisations. This can be a very valuable addition to the existing widget store in Apache Rave.</p>
<p>After all these talks about projects that are related to Apache Rave it was time for a talk about the Apache Software Foundation. Matt held an enthusiastic talk about <a href="http://www.apache.org/foundation/how-it-works.html" target="_blank">the Apache Way</a>. A project cannot exist without a community and contributions from the community. Questions (and answers) from users can also be valuable contributions. It&#8217;s important to see those questions and answers on the public mailing-list, so others can profit from them as well.</p>
<p>After Matt&#8217;s talk it was time for discussion in smaller groups, helping others set up their development environment and even <a title="Commit of the Spanish translation" href="http://markmail.org/message/k7t5hreuyrploebn" target="_blank">applying patches</a>. It was a great day and a pleasure to see the faces behind the email addresses on the Apache Rave users and dev lists.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2012/06/apache-rave-hackathon.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Automated testing with JBehave</title>
		<link>http://www.jasha.eu/blogposts/2012/04/automated-testing-with-jbehave.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=automated-testing-with-jbehave</link>
		<comments>http://www.jasha.eu/blogposts/2012/04/automated-testing-with-jbehave.html#comments</comments>
		<pubDate>Fri, 13 Apr 2012 13:15:09 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Apache Rave]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[JBehave]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/blogposts/2012/04/automated-testing-with-jbehave.html</guid>
		<description><![CDATA[What do developers like most? Build new software! What do developers hate most? Testing and writing documentation! Why would you write tests? It slows down your process of making new software. If you can write that new feature in an hour, why spend another hour on writing unit tests and integration tests for them. You [...]]]></description>
				<content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>What do developers like most? Build new software! What do developers hate most? Testing and writing documentation! Why would you write tests? It slows down your process of making new software. If you can write that new feature in an hour, why spend another hour on writing unit tests and integration tests for them. You don&#8217;t make mistakes and if some user does something you didn&#8217;t expect he would, blame him first, then think of fixing it. If you had written tests before then they suddenly break because of your new feature and you need to modify those tests again because you now need to add another condition or the webpage has changed intentionally. Doesn&#8217;t that slow you down?</p>
<p>Okay maybe you did actually break functionality because of your new feature. You had not written tests before and the broken functionality is in a different part of the application so you didn&#8217;t see it when clicking through your website. Now your customer discovers the bug and thinks you&#8217;ve done bad job (which you did). So you start adding <a href="http://en.wikipedia.org/wiki/Unit_testing">unit tests</a> and for new features you switch to <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test-driven development</a>.</p>
<p>You develop new features, let all the tests pass and ship the new version. Will it be perfect? Unfortunately not. Your unit tests may cover isolated functionality. One tests checks if you can retrieve all countries your webshop ships to. The other test checks what happens after submitting a registration form. But there is no test that goes to the actual registration form and selects a country to find out that the list of countries is empty because it had not been uploaded to the server.</p>
<p>Recently my team wrote tests that go through the front end of the platform to check if it still works as expected. We chose <a href="http://jbehave.org/">JBehave</a> to write stories that are human readable, map them in Java code and execute them in a real browser as if a real user is performing the tests. For Apache Rave we also needed to write integration tests because our list of features is growing and unfortunately we ran into a blocking issue despite a high unit test coverage.</p>
<p>As an experiment I started a <a href="https://github.com/jashaj/PortalTests">test project</a> on GitHub. I started with the <a href="http://jbehave.org/reference/stable/archetypes.html">JBehave Spring archetype</a>, deleted the sample test and added my own test case:</p>
<pre class="brush: text">Scenario: User creates a new account and logs in into the portal
When I go to "http://localhost:8080/portal"
Then I see the login page
When I follow the new account link
Then I get the new account form
When I fill in the form with username "newuser" password "password" confirmpassword "password" email "newuser@example.com"
And I submit the new account form
Then I see the login page
And A message appears "Account successfully created"
When I fill in the login form with username "newuser" password "password"
Then I see my portal page with the add new widgets box
</pre>
<p>With annotations in Java classes you cover these steps like</p>
<pre class="brush: java">public class NewUserSteps {

    @Autowired
    Portal portal;

    @When("I go to "$url"")
    public void goTo(String url) {
        portal.go(url);
    }

    @Then("I see the login page")
    public void isLoginPage() {
        final WebElement title = portal.findElement(By.tagName("title"));
        assertThat(title.getText().trim(), equalTo("Login - Rave"));
    }

    /* Other methods that cover steps */
}
</pre>
<p>As you can see, the annotations can handle parameters from the story. For readability of the story I wrapped the parameters in quotes, but that is not necessary. From the step a &#8220;Portal&#8221; class is called. This class extends WebDriverPage which triggers actions in the browser like going to a url, clicking links or filling in form fields:</p>
<pre class="brush: java">@Component
public class Portal extends WebDriverPage {

    @Autowired
    public Portal(WebDriverProvider driverProvider) {
        super(driverProvider);
    }

    public void go(String url) {
        get(url);
    }

    public void pressNewAccountButton() {
        final WebElement newAccountButton = findElement(By.id("createNewAccountButton"));
        newAccountButton.click();
    }
    /* Other methods */
}
</pre>
<p>Within an hour I had written the first automated test which can be run over and over again. Really? Not yet; you need to manually delete the user before running the test a second time. This can also be automated in an @AfterScenario or @AfterStory annotation to revert the state of the application.</p>
<p>After running the test, JBehave generates a report of how many stories, scenarios and steps it has run and how many were successful. I have recorded the run of this scenario in <a href="http://youtu.be/1H6T2o8SHrs">this video</a>: </p>
<p>  <object height="300" width="480" data="http://www.youtube.com/v/1H6T2o8SHrs?version=3&amp;hl=en_US" type="application/x-shockwave-flash"><param name="movie" value="http://www.youtube.com/v/1H6T2o8SHrs?version=3&amp;hl=en_US"/><param name="allowFullScreen" value="true"/><param name="allowscriptaccess" value="always"/></object>
<p>Does it mean I suddenly like writing integration tests? No, but I hate doing all these tests manually even more.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2012/04/automated-testing-with-jbehave.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>What is bundled with Apache Rave?</title>
		<link>http://www.jasha.eu/blogposts/2012/03/what-is-bundled-with-apache-rave.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-is-bundled-with-apache-rave</link>
		<comments>http://www.jasha.eu/blogposts/2012/03/what-is-bundled-with-apache-rave.html#comments</comments>
		<pubDate>Tue, 13 Mar 2012 17:27:50 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Rave]]></category>
		<category><![CDATA[Hippo]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/blogposts/2012/03/what-is-bundled-with-apache-rave.html</guid>
		<description><![CDATA[When you download and run the demo binaries of Apache Rave you see the demo portal in your browser on http://localhost:8080. The demo portal is built using Spring MVC for the request handling, Spring Security to manage access to the portal and OpenJPA for persistence. There are also other services running in the demo binary. [...]]]></description>
				<content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>When you <a href="http://incubator.apache.org/rave/downloads.html">download</a> and run the demo binaries of Apache Rave you see the demo portal in your browser on http://localhost:8080. The demo portal is built using Spring MVC for the request handling, Spring Security to manage access to the portal and OpenJPA for persistence. There are also other services running in the demo binary. In this blogpost I&#8217;ll give you a short overview of the bundled services.</p>
<h2>OpenSocial container </h2>
<p>Most of the demo widgets you see in the portal are <a href="http://docs.opensocial.org/">OpenSocial</a> gadgets. In order to render these we bundle <a href="http://shindig.apache.org/">Apache Shindig</a> with Apache Rave. The Apache Shindig server runs on the root context. We&#8217;re working hard to implement all necessary OpenSocial calls. As an example you can retrieve all people connected to &#8220;canonical&#8221; user: http://localhost:8080/social/rest/people/canonical/@all</p>
<h2>Wookie Widget Server </h2>
<p>One of the goals was to render any kind of widget and not just OpenSocial. Since version 0.9-incubating we also bundle <a href="http://incubator.apache.org/wookie/">Apache Wookie</a> to render W3C widgets. You can access the Wookie Widget Server on http://localhost:8080/wookie/. You can log in into its adminstration menu using &#8220;java&#8221; as username and password.</p>
<p>When you want to deploy the portal on your server, you can <a href="http://incubator.apache.org/rave/documentation/host-configuration.html">configure the host name</a> for both the Shindig server and Wookie server.</p>
<h2> Database </h2>
<p>The demo setup uses an <a href="http://www.h2database.com/">H2 database</a> that is configured to store its database in /tmp (Windows users will find it in c:tmp). You can look inside the database on http://localhost:11111 to see which tables were created by OpenJPA or modify the database contents. The web console locks the file that contains the database, so log out when you want to use the portal. For deployment on a server we have documented how to <a href="http://incubator.apache.org/rave/documentation/configure-database.html">configure the database</a> with MySQL, PostgreSQL or Oracle.</p>
<h2>LDAP </h2>
<p>Apache Rave supports multiple authentication sources to access the portal. In the demo portal we start up an embedded <a href="http://directory.apache.org/">Apache Directory Studio</a> (ApacheDS) to demonstrate LDAP authentication with Spring Security. When you log in with &#8220;johnldap&#8221; as username and password, the portal looks up the credentials in the embedded ApacheDS and uses the LDAP response to create a user profile in the portal. The embedded ApacheDS is meant for the demo, but you can configure Apache Rave to use the <a href="http://incubator.apache.org/rave/documentation/ldap-authentication.html">existing LDAP server</a> within your own network.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2012/03/what-is-bundled-with-apache-rave.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Rave (Incubating) demo: add user and widget</title>
		<link>http://www.jasha.eu/blogposts/2012/01/apache-rave-incubating-demo-add-user-and-widget.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apache-rave-incubating-demo-add-user-and-widget</link>
		<comments>http://www.jasha.eu/blogposts/2012/01/apache-rave-incubating-demo-add-user-and-widget.html#comments</comments>
		<pubDate>Mon, 23 Jan 2012 08:00:00 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Rave]]></category>
		<category><![CDATA[Hippo]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/blogposts/2012/01/apache-rave-incubating-demo-add-user-and-widget.html</guid>
		<description><![CDATA[Apache Rave (Incubating) is rapidly evolving to a production ready web and social mashup engine. This demo video shows you how a user can sign up, add existing widgets to his pages and add a completely new widget. reCAPTCHA and fetching the widget metadata were added recently.]]></description>
				<content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><a href="http://incubator.apache.org/rave">Apache Rave</a> (Incubating) is rapidly evolving to a production ready web and social mashup engine. This <a href="http://www.youtube.com/watch?v=UgHyAQnPlOk">demo video</a> shows you how a user can sign up, add existing widgets to his pages and add a completely new widget. reCAPTCHA and fetching the widget metadata were added recently.</p>
<p>  <object height="355" width="425" data="http://www.youtube.com/v/UgHyAQnPlOk&amp;hl=en" type="application/x-shockwave-flash"><param name="movie" value="http://www.youtube.com/v/UgHyAQnPlOk&amp;hl=en"/><param name="wmode" value="transparent"/></object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2012/01/apache-rave-incubating-demo-add-user-and-widget.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apache Rave presentation at the ROLE developer camp</title>
		<link>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-at-role-developer-camp.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apache-rave-incubating-at-role-developer-camp</link>
		<comments>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-at-role-developer-camp.html#comments</comments>
		<pubDate>Wed, 30 Nov 2011 17:30:41 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Rave]]></category>
		<category><![CDATA[Hippo]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-at-role-developer-camp.html</guid>
		<description><![CDATA[This is the presentation I gave about Apache Rave during the ROLE project developer camp in Leuven, Belgium: Can&#8217;t see the presentation? You can download the PDF (1.1 MB).]]></description>
				<content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>This is the presentation I gave about Apache Rave during the <a href="http://www.role-project.eu/">ROLE project</a> developer camp in Leuven, Belgium:</p>
<p>  <object id="__sse10383921" height="355" width="425" data="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20111129raverolecamp-111129083526-phpapp02&amp;rel=0&amp;stripped_title=apache-rave-incubating-at-role-developer-camp&amp;userName=jasha1" type="application/x-shockwave-flash"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20111129raverolecamp-111129083526-phpapp02&amp;rel=0&amp;stripped_title=apache-rave-incubating-at-role-developer-camp&amp;userName=jasha1"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"/></object>
<p>Can&#8217;t see the presentation? You can <a title="PDF of Apache Rave presentation (1.1 MB)" href="http://pictures.jasha.eu/binaries/content/assets/2011/20111129-rave-role-camp.pdf">download</a> the PDF (1.1 MB).</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-at-role-developer-camp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Rave on your iPhone</title>
		<link>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-on-a-mobile-device.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apache-rave-incubating-on-a-mobile-device</link>
		<comments>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-on-a-mobile-device.html#comments</comments>
		<pubDate>Mon, 14 Nov 2011 18:21:08 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Rave]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hippo]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-on-a-mobile-device.html</guid>
		<description><![CDATA[One of the newest features in Apache Rave (Incubating) is a mobile view for the portal. Using Spring Mobile, the portal detects that the visitor uses a mobile device and renders a more lightweight view. The title bar is bigger to make it easier to expand or collapse a Widget on a touch screen. Drag [...]]]></description>
				<content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>One of the newest features in <a href="http://incubator.apache.org/rave/">Apache Rave</a> (Incubating) is a mobile view for the portal. Using <a href="http://www.springsource.org/spring-mobile">Spring Mobile</a>, the portal detects that the visitor uses a mobile device and renders a more lightweight view. The title bar is bigger to make it easier to expand or collapse a Widget on a touch screen. Drag and drop is disabled in the mobile view.</p>
<p>Preview of Apache Rave on an iPhone:</p>
<p> <img alt="Apache Rave on an iPhone simulator" src="http://pictures.jasha.eu/binaries/content/gallery/2011/apache-rave/apache-rave-mobile.png"/> </p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-on-a-mobile-device.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Rave demo video</title>
		<link>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-demo-video.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apache-rave-incubating-demo-video</link>
		<comments>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-demo-video.html#comments</comments>
		<pubDate>Sun, 06 Nov 2011 13:12:47 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Rave]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hippo]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-demo-video.html</guid>
		<description><![CDATA[I&#8217;ve been working a lot on Apache Rave lately. Apache Rave is a new light-weight, open source portal that uses OpenSocial gadgets and W3C widgets to render content. You may have already used OpenSocial gadgets in iGoogle or Atlassian Jira without being aware of it. I can write a blogpost about Apache Rave, but a [...]]]></description>
				<content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>I&#8217;ve been <a href="https://www.ohloh.net/p/ApacheRave/contributors/2239911344213730">working</a> a lot on <a href="http://incubator.apache.org/rave/">Apache Rave</a> lately. Apache Rave is a new light-weight, open source portal that uses <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> gadgets and <a href="http://incubator.apache.org/wookie/">W3C widgets</a> to render content. You may have already used OpenSocial gadgets in iGoogle or Atlassian Jira without being aware of it. I can write a <a href="http://blogs.onehippo.org/arje/2011/09/raving_about_rave.html">blogpost</a> about Apache Rave, but a video can say more than words:</p>
<p>  <object height="300" width="480" data="http://www.youtube.com/v/MJEymPFti6A?version=3&amp;hl=en_US&amp;rel=0" type="application/x-shockwave-flash"><param name="movie" value="http://www.youtube.com/v/MJEymPFti6A?version=3&amp;hl=en_US&amp;rel=0"/><param name="allowFullScreen" value="true"/><param name="allowscriptaccess" value="always"/></object>
<p><a href="http://www.youtube.com/watch?v=MJEymPFti6A">Direct link to the video</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2011/11/apache-rave-incubating-demo-video.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google+ minus 1</title>
		<link>http://www.jasha.eu/blogposts/2011/11/google-minus-1.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-minus-1</link>
		<comments>http://www.jasha.eu/blogposts/2011/11/google-minus-1.html#comments</comments>
		<pubDate>Wed, 02 Nov 2011 20:21:59 +0000</pubDate>
		<dc:creator>Jasha Joachimsthal</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jasha.eu/blogposts/2011/11/google-minus-1.html</guid>
		<description><![CDATA[A social network is like the new hip club in town. The innovators start a place that is hip, maybe a bit underground. They invite their friends who are not mainstream but know how to create a good atmosphere. Those early adopters invite their friends who are a bit more mainstream. Then the club becomes [...]]]></description>
				<content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>A social network is like the new hip club in town. The innovators start a place that is hip, maybe a bit underground. They invite their friends who are not mainstream but know how to create a good atmosphere. Those early adopters invite their friends who are a bit more mainstream. Then the club becomes popular for the mainstream audience. The first innovators may leave the club but a large crowd has fun. This is how social networks like <a href="http://facebook.com">Facebook</a> or <a href="http://hyves.nl">Hyves</a> started and became popular.</p>
<p>Imagine there&#8217;s an investor who is very jealous. He opens a new club, very large and hands out invites to make the entrance exclusive. He makes the big mistake to advertise with those invites on a campus of a large IT company. The geeks all want to go into the club on the night it opens. Once the club opens they discover nothing is happening there. Some try to hang around the bar, order a few drinks, start to dance, discover the dance floor is empty and then leave home disappointed. The innovators avoid the new club because they didn&#8217;t &#8220;discover&#8221; it themselves and they can&#8217;t create their own setting there.</p>
<p>The investor also owns some successful small but specialist shops in town. Suddenly the customers of the shop can only check out through the new club nobody wants to hang out, just because the investor wants to attract more visitors to his new club. Do the customers accept that or will they also ignore the shops they used to go?</p>
<p>Yes Google, this investor I&#8217;m talking about is you. You tried to hype Wave and later Google+ but don&#8217;t know how to build up an active community. You are closing down some very valuable niche services like sharing blog posts in Reader or the social features in iGoogle just because you want to force your users into Google+.</p>
<p>You&#8217;ve just lost a Google+ user: me.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jasha.eu/blogposts/2011/11/google-minus-1.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
