<?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>uxebu » blog &#187; dojo</title>
	<atom:link href="http://uxebu.com/category/dojo/feed/" rel="self" type="application/rss+xml" />
	<link>http://uxebu.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 19 Jan 2012 14:53:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Creating a persistent Dojo Object Store</title>
		<link>http://uxebu.com/blog/2011/04/27/creating-a-persistent-dojo-object-store/</link>
		<comments>http://uxebu.com/blog/2011/04/27/creating-a-persistent-dojo-object-store/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 16:13:45 +0000</pubDate>
		<dc:creator>Jens Arps</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[offline]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1540</guid>
		<description><![CDATA[As of version 1.6, dojo comes with the new Dojo Object Store API. This is an awesome thing, as it greatly simplifies the work with data stores in Dojo. Everybody who had to do with the traditional dojo.data API felt it was overly complex and hard to use – this has finally changed now. There [...]]]></description>
			<content:encoded><![CDATA[<p>As of version 1.6, dojo comes with the new <a href="http://docs.dojocampus.org/dojo/store" target="_blank">Dojo Object Store API</a>. This is an awesome thing, as it greatly simplifies the work with data stores in Dojo. Everybody who had to do with the traditional dojo.data API felt it was overly complex and hard to use – this has finally changed now. There are also wrappers from and to the old and new APIs, so that you can do stuff like using your traditional data-aware widgets with a new Object Store. And the goodness doesn&#8217;t end here; but more on this later. If you haven&#8217;t done so yet, you might want to read the <a href="https://www.sitepen.com/blog/2011/02/15/dojo-object-stores/" target="_blank">excellent post on the new Dojo Object Stores</a> by Kris Zyp where he explains all the awesomeness he created.</p>
<p>Dojo also comes with two fresh implementations for the API, a non-persistent memory store and a JsonRest store that interacts with a server through RESTful HTTP requests. You can also observe changes made to objects in the store. What is missing is a store that uses a client-side persistent backend, which would be useful for a couple of reasons (e.g., as one commenter in that post asks, to use it as chache store for dojo.store.Cache). As Kris already mentions, it&#8217;s a piece of cake to create one, so let&#8217;s go ahead and do it!<br />
<span id="more-1540"></span></p>
<h2>Choosing the Backend</h2>
<p>The post mentions two possible candidates: dojox.storage and <a href="https://github.com/jensarps/StorageJS" target="_blank">StorageJS</a>, both already having a similar API, so making them compliant to the Dojo Object Store API is fairly easy. For this tutorial I choose StorageJS – because it is very lightweight and still provides all we need (and, well, for a couple of other reasons that don&#8217;t belong in this post). So, what is the exact API we need to comply to? Check it out <a href="http://docs.dojocampus.org/dojo/store#id2" target="_blank">in the docs</a>. See the first sentence in that paragraph? <em>&#8220;Every method in the API is optional, it&#8217;s presence indicating support for that feature.&#8221;</em> Wow, that&#8217;s nice!</p>
<h2>Basic compliance</h2>
<p>Let&#8217;s start with the methods get(), put(), add() and remove(). That will make our store pretty usable for most store scenarios.</p>
<p>First, create a &#8216;store&#8217; object we can work with (StorageJS creates a global variable called <code class="codecolorer text mac-classic"><span class="text">storage</span></code> where all it&#8217;s methods reside):</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> store <span style="color: #339933;">=</span> dojo.<span style="color: #660066;">delegate</span><span style="color: #009900;">&#40;</span>storage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>&#8216;store&#8217; now contains everything that &#8216;storage&#8217; does, but we can leave the original &#8216;storage&#8217; object alone and modify our &#8216;store&#8217; object if needed. Time for the first method, let&#8217;s start with <code class="codecolorer text mac-classic"><span class="text">get()</span></code>. StorageJS works with Strings as keys and values only, so we need to parse what we get from it.</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">store.<span style="color: #660066;">get</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Need to parse the string we get from backend:</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> dojo.<span style="color: #660066;">fromJson</span><span style="color: #009900;">&#40;</span>storage.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Easy one, now move on to <code class="codecolorer text mac-classic"><span class="text">put()</span></code>. The Object Store API allows user to do stuff like this: <code class="codecolorer text mac-classic"><span class="text">store.put({foo: 'bar'}, {id: 3})</span></code> as well as <code class="codecolorer text mac-classic"><span class="text">store.put({id: 3, foo: 'bar'})</span></code>. Also, StorageJS only has the method set() instead of put() and add().</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">store.<span style="color: #660066;">put</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>object<span style="color: #339933;">,</span> options<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Get the id, wherever it comes from</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> options <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> options.<span style="color: #660066;">id</span> <span style="color: #339933;">||</span> object.<span style="color: #660066;">id</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Stringify data -- remember, StorageJS is a key/value backend wrapper.</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> data <span style="color: #339933;">=</span> dojo.<span style="color: #660066;">toJson</span><span style="color: #009900;">&#40;</span>object<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Now save the data away</span><br />
&nbsp; &nbsp; storage.<span style="color: #660066;">set</span><span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Easy, as well – you could write this as a one-liner. Now, <code class="codecolorer text mac-classic"><span class="text">add()</span></code>. It&#8217;s close to put, except that it won&#8217;t overwrite data that already exists. So we just need to check if something with the given id already exists and throw an error if so.</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">store.<span style="color: #660066;">add</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>object<span style="color: #339933;">,</span> options<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Get the id</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> options <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> options.<span style="color: #660066;">id</span> <span style="color: #339933;">||</span> object.<span style="color: #660066;">id</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Check if something exists under the given</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// id -- StorageJS always returns null when</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// there's no data for a certain key.</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>storage.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #003366; font-weight: bold;">new</span> Error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Object already exists&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// We're save to go now! So hand over the</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// request to the put() method.</span><br />
&nbsp; &nbsp; store.<span style="color: #660066;">put</span><span style="color: #009900;">&#40;</span>object<span style="color: #339933;">,</span> options<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>What about <code class="codecolorer text mac-classic"><span class="text">remove()</span></code>? Nothing to do there, it already has the desired signature and functionality.</p>
<p>That&#8217;s it, we&#8217;re done with basic compliance. Our &#8216;store&#8217; object now implements the basic methods of the Dojo Object Store API and can be used by anything that can work with a Dojo Object Store – and it will keep it&#8217;s state persistent in the browser.</p>
<h2>More compliance? Querying!</h2>
<p>There&#8217;s one interesting thing in the API: the <code class="codecolorer text mac-classic"><span class="text">query()</span></code> method. Uh, yeah, we want that! Lucky us, Dojo already provides a query engine as well as a method that makes sure there are iterative methods and a <code class="codecolorer text mac-classic"><span class="text">total</span></code> property containing the number of hits available in our result (well, it also abstracts away the differences between sync and async results, but as StorageJS is purely synchronous, this is not important to us). First, define a queryEngine:</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">// Let's take the provided queryEngine :)</span><br />
store.<span style="color: #660066;">queryEngine</span> <span style="color: #339933;">=</span> dojo.<span style="color: #660066;">store</span>.<span style="color: #660066;">util</span>.<span style="color: #660066;">SimpleQueryEngine</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>So, if we want our store to be able to run queries, all we need to do is to take the store&#8217;s data and hand it over to the query engine. We use StorageJS&#8217; getAll() method to acquire the data. It will return an array of objects in the form { key: &#8216;theKey&#8217;, value: &#8216;theValue&#8217;}, but the queryEngine wants an array containing only the objects, so we need to do a conversion.</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">store.<span style="color: #660066;">query</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> options<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Get all data from the backend</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> rawData <span style="color: #339933;">=</span> storage.<span style="color: #660066;">getAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// And convert it into a format that the</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// queryEngine can work with</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> data <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> l <span style="color: #339933;">=</span> rawData.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> l<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066; font-weight: bold;">item</span> <span style="color: #339933;">=</span> rawData<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> dataObject <span style="color: #339933;">=</span> dojo.<span style="color: #660066;">fromJson</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">item</span>.<span style="color: #660066;">value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; data.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>dataObject<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Now call the queryEngine on the data</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> results <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">queryEngine</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> options<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// And return the result, after it has been</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// enhanced.</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> dojo.<span style="color: #660066;">store</span>.<span style="color: #660066;">util</span>.<span style="color: #660066;">QueryResults</span><span style="color: #009900;">&#40;</span>results<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Now we can query our store for specific data, like so: <code class="codecolorer text mac-classic"><span class="text">var results = store.query({ prime: true });</span></code> This will give us all objects in the store that have a property called &#8216;prime&#8217; and have that property set to true.</p>
<h2>Hierarchie and Transactions</h2>
<p>The API also mentions methods about data hierarchie and transactions, but I&#8217;m not going to cover these in this tutorial.</p>
<h2>Convenience and Optimization</h2>
<p>Currently, every time we run a query, we fetch all data again from our storage engine. So, if you don&#8217;t have a massive amount of data and want to query the store a lot, it might be wise to maintain a copy of all data in memory. There are other things you could optimize as well – or you could write your own queryEngine.</p>
<p>For your convenience,  <a href="http://statis.uxebu.com/~jens/dojo.store/PersistentLocal.js" target="_blank">here&#8217;s a wrapper</a> that creates a Dojo Object Store like we did above and accepts a useMemory parameter during instantiation that denotes whether a copy of the data should be kept in memory or not. It uses the traditional require/provide instead of the AMD format. If you want to use it, make sure you use the right namespace in the declare() call! (Or, not recommended, copy it in the /dojo/store directory.)</p>
<p>If you want to fool around with it in the console first, you can go <a href="http://static.uxebu.com/~jens/dojo.store/index-persistent-nomemory.html" target="_blank">here (non-memory-using)</a> or <a href="http://static.uxebu.com/~jens/dojo.store/index-persistent-usememory.html" target="_blank">here (memory-using)</a>, check out the source and fire up the console and try things out.</p>
<h2>Getting StorageJS</h2>
<p>The above code uses the features base and getAll, so you could do a specific build of StorageJS with these features or just <a href="https://github.com/jensarps/StorageJS/tree/master/builds?raw=true" target="_blank">grab a full build</a> of it for your desired storage engine (the storage-full-[engine].js files). If you don&#8217;t know about storage engines, all modern browser support localStorage, so <a href="https://github.com/jensarps/StorageJS/raw/master/builds/storage-full-localStorage.js" target="_blank">this is the one</a> what you might want.</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2011/04/27/creating-a-persistent-dojo-object-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coworking, Spanish geeks and more</title>
		<link>http://uxebu.com/blog/2011/04/06/coworking-spanish-geeks-and-more/</link>
		<comments>http://uxebu.com/blog/2011/04/06/coworking-spanish-geeks-and-more/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 08:09:43 +0000</pubDate>
		<dc:creator>Wolfram Kriesing</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[coding dojo]]></category>
		<category><![CDATA[coworking]]></category>
		<category><![CDATA[valencia]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1519</guid>
		<description><![CDATA[After the MWC in Barcelona I moved my working place to Valencia for a week, a little further south. That is already a while ago, but still I wanted to write a little bit about all the experiences. Not last because I very much want to thank all the people who I have met, who [...]]]></description>
			<content:encoded><![CDATA[<p>After the MWC in Barcelona I moved my working place to Valencia for a week, a little further south. That is already a while ago, but still I wanted to write a little bit about all the experiences. Not last because I very much want to thank all the people who I have met, who introduced me into the spanish community and made all this so much fun. Thank you very much first and foremost <a href="http://twitter.com/#!/coworkvalencia">Rosa</a> &#8211; you rock! Thank you <a href="http://twitter.com/#!/XaV1uzz">Xavi</a>, <a href="http://twitter.com/#!/txau">Jaume</a>, Jorge, Luis, and &#8230; fuck I am so bad with names :(.<br />
<span id="more-1519"></span></p>
<h2>Coworking in Valencia</h2>
<p>My week in Valencia started out to look very quiet and just pure work. I tried to contact some JavaScript/mobile/web guys in this area before hand, but somehow didn&#8217;t really succeed. Some tweets went around but I didn&#8217;t really reach anybody. But I made sure I have a great place to work at, which was <a href="http://coworkingvalencia.com/">Coworking Valencia</a>, Rosa Montesa runs this place with so much passion &#8211; wow. And I just had to think of the <a href="http://www.combinat56.de">Combinat56 Coworking</a> space in Munich where we normally go, which is run by Sina with an equal lot of passion. Just great girls!</p>
<p>So I arrived there Monday morning to do my work, and off it went. I chatted a while with Rosa and some other coworkers and from there I couldn&#8217;t stop it. At the end of the day my calendar was filled with lunches and meetups. I met a lot of interesting people, first Rosa had organized a small come-together the next day with the company <a href="http://www.brainstorm.es">Brainstorm</a> from right above, mainly hackers too, so we had quite some stuff in common. There I met Jorge who introduced me to more geeky people, thank you so much!</p>
<h2>Spanish way of life</h2>
<p>So the week went on and I tried to work a little bit, but I was basically so happy to live the spanish way of life a little bit. In the morning you don&#8217;t buy a take away coffee, actually you don&#8217;t see the busy people running around with their coffee mugs in there hands. I also just did that the first day, after that I adopted the spanish way, which is sitting down in a bar (also if it just for five minutes) and have a coffee. A lot of people there have a <a href="http://en.wikipedia.org/wiki/Carajillo">carajillo</a> in the morning but that was not appropriate for my mornings :).<br />
For lunch (later than normal for me, around after 2pm) we mostly went to some place outside, since it was at least 20°C, beautiful sun just perfect. And then on the way home you just take some tapas maybe a beer in the bar around the corner and late at night (normally after 9pm) we had dinner. For me working there felt really comfortable and easy going. But I have also heard that normally working in Spain is not normally that relaxed.</p>
<h2>The real geeks</h2>
<p>On Thursday I went to the <a href="http://www.becodemyfriend.com/">BeCode</a> guys&#8217; office in the nice <a href="http://es.wikipedia.org/wiki/El_Carmen_(Valencia)">Barrio del Carmen</a>. The first thing after I arrived was &#8220;let&#8217;s go for a coffee&#8221; :). That is the spanish style! We exchanged the ideas of how we work and the kind of projects we do. Xavi the daddy of BeCode (scnr) told me that they are an incubator and try to have people come in and realize their ideas, pretty cool stuff. Was so refreshing and forward-thinking, I felt home.<br />
Funny enough that day I learned about <a href="http://pivotal.github.com/jasmine/">Jasmine</a> there, they used in a project. Unfortunately we had no internet that day, so I was pretty much offline until the afternoon, which was somehow good, but not when you really want to get some things done. So I promised to be back the next day and then the office was also really crowded and I got to meet all of the <a href="http://www.becodemyfriend.com/equipo/">BeCode team</a>. In the evening I joined my first <a href="http://blog.dev.openfinance.es/2011/03/ii-coding-dojo/">coding dojo</a>, this one was held in the offices of <a href="http://blog.dev.openfinance.es/">OpenFinance</a>. We were given the task to write a roman to latin numbers converter in whatever programming language you like. You are given half an hour and try to get as far as you can, I joined forces with <a href="http://twitter.com/#!/txau">Jaume</a> we got it easily done in the half an hour time, we simply used the <a href="https://github.com/vf/web-testsuite">webtestsuite</a> as our testing framework since I know that one best and of course we wrote the converter in JavaScript :). As a second Kata you could hack the conversion the other way around. Jaume and I felt that this would be just another hacking it the other way job was, so we looked for a new challenge and we said let&#8217;s just use the google search engine for converting it for us and we just grab the result from there. We looked at a couple of APIs, at YQL but there was no real solution, so we went the scraping route. We got it almost done :). But as you <a href="http://www.flickr.com/photos/57436095@N03/sets/72157626167343224/with/5485645335/">can see</a> <a href="http://blog.dev.openfinance.es/2011/03/ii-coding-dojo/">and read</a> we had lots of fun and enough beer!<br />
Of course we went for dinner later and were still hanging out some time around Valencia and in the BeCode office later. There the guys told me about an Code Retreat which is going to take place somewhere near Valencia &#8220;en el campo&#8221; with <a href="http://en.wikipedia.org/wiki/Paella">Paella</a> cooking and hacking, I hope that some of us uxebus may join, hope to find out details soon.</p>
<p>All in all a big thank you to all you guys and I can just say I had a great, though also really exhausting, two weeks in Spain. Hope to see you soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2011/04/06/coworking-spanish-geeks-and-more/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Explaining EmbedJS</title>
		<link>http://uxebu.com/blog/2011/01/31/explaining-embedjs/</link>
		<comments>http://uxebu.com/blog/2011/01/31/explaining-embedjs/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 14:02:28 +0000</pubDate>
		<dc:creator>Jens Arps</dc:creator>
				<category><![CDATA[development tools]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[embedjs]]></category>
		<category><![CDATA[memory usage]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1366</guid>
		<description><![CDATA[Last week, we tagged the current state of EmbedJS 0.1. This is a large step for us, and something we have been waiting for and wanting to do for a long time. And with doing so, the need arises to answer a lot of questions – and we better start sooner than later. So, here [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, we tagged the current state of EmbedJS 0.1. This is a large step for us, and something we have been waiting for and wanting to do for a long time. And with doing so, the need arises to answer a lot of questions – and we better start sooner than later. So, here it is, the first part of „Explaining EmbedJS“.</p>
<h2>What is it?</h2>
<p>It‘s a JavaScript Toolkit, especially aimed at embedded devices. Embedded devices, that is phones, tablet devices, TVs, car dashboards and the like. Devices that are capable of running JavaScript. We are sure that this list is going to grow over time – and will hopefully one day also include devices like your fridge. EmbedJS is based on the Dojo Toolkit.<br />
<span id="more-1366"></span></p>
<h2>Why?</h2>
<p>Because the toolkits and frameworks that exist focus on desktop browsers and therefore have a different approach – an approach we didn‘t find that suitable for embedded/mobile development. And the JS frameworks that target mobile devices are flawed, too: either they target only a specific device or platform, or they provide far more than we do need and want.</p>
<p>What we wanted was a toolkit that offered a unified API across different platforms, but with the best implementation that was available for each platform. And we didn‘t want to ship code that implemented a certain feature for, say, an old Blackberry device to an iPhone. Plus, we wanted that API to be small – enough to assist us in our daily work, but not that bloated that we would ship code to a phone that we wouldn‘t need in most of our projects.</p>
<h2>The Dojo Toolkit</h2>
<p>We at uxebu have a strong affinity to the <a href="http://dojotoolkit.org/" target="_blank">Dojo Toolkit</a> – most of us are committers – for a good reason: we believe that it has done many things right, and that it has an excellent code quality. Thus, finding a starting point for our venture to what was later to be EmbedJS was pretty easy: It was the very core of the Dojo Toolkit, dojo._base.</p>
<p>We examined the code and split it into its smallest parts (features, how we call them in EmbedJS). After having the features all nicely separated, we could look for the best implementation for each of the platforms we wanted to support, and put it into a separate file. Then we optimized our code, tweaking here and there, but also using the code from dojo._base as it was, because it already was the best implementation.</p>
<p>And we needed to find means to put all these tiny parts together again, respecting any given dependecies, to create a file that then contained all the feature‘s implementations for a given platform – so the EmbedJS Tools were born, including our highly flexible build system.</p>
<h2>API</h2>
<p>EmbedJS‘ API is a small subset on Dojo‘s API. It provides around 70 methods, from the fields language enhancement (like Array manipulation or JSON), OO (like classes and inheritance), transport (like JSONP or XHR), event system (like connecting to DOM events or methods), DOM manipulation (like style or node creation) and misc things like Promises or pub/sub.</p>
<p>We kept the method signatures intact so that you can import your existing knowledge from working with the Dojo Toolkit to EmbedJS. There are only a few minor changes where we<br />
a) found a new name highly useful, e.g <code class="codecolorer text mac-classic"><span class="text">dojo.io.script.get()</span></code> is <code class="codecolorer text mac-classic"><span class="text">embed.jsonp()</span></code><br />
b) we needed to strip given functionality for the sake of code size.</p>
<p>All methods in EmbedJS are available under the embed namespace as well as under the dojo namespace. I.e. to call the connect method you can use <code class="codecolorer text mac-classic"><span class="text">dojo.connect()</span></code> and <code class="codecolorer text mac-classic"><span class="text">embed.connect()</span></code>.</p>
<p>The full API documentations is <a href="http://embedjs.org/apidocs/dools/app/apidoc/embedjs/" target="_blank">here</a>, though it‘s undergoing some updates right now.</p>
<h2>Summary</h2>
<p>I didn‘t want to dig too deep in the first article on EmbedJS, but I guess you got the point: EmbedJS is a highly optimized Dojo core, and offers you a specialized, optimal build for a given platform. To explain how the build system works, how we manage dependencies, how we separate our features and our implementations and how one can create a project-oriented custom build will need another blog post – but if you are too curious, you are invited to take a look at <a href="https://github.com/uxebu/embedjs" target="_blank">the source code at github</a>; a lot is self-explenatory there. A further source of information is the <a href="http://uxebu.github.com/embedjs/" target="_blank">EmbedJS project page</a>, as well as the <a href="https://github.com/uxebu/embedjs-tools" target="_blank">EmbedJS Tools source</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2011/01/31/explaining-embedjs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SWDC 2010 Stockholm</title>
		<link>http://uxebu.com/blog/2010/06/07/swdc-2010-stockholm/</link>
		<comments>http://uxebu.com/blog/2010/06/07/swdc-2010-stockholm/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 22:12:28 +0000</pubDate>
		<dc:creator>wolfram</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[w3c widgets]]></category>
		<category><![CDATA[swdc]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1217</guid>
		<description><![CDATA[Thanks to Peter Peter Svensson for organizing and making SWDC 2010 in Stockholm happen and especially thanks for inviting us to speak there. We had a blast. A crowd of about 100 people saw some very interesting talks, ranging from Node.js, YQL, Chrome extensions, HTML5 to PhoneGap, I guess everybody heard something new and interesting. [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to Peter Peter Svensson for organizing and making <a href="http://www.swdc-central.com/">SWDC 2010</a> in Stockholm happen and especially thanks for inviting us to speak there. We had a blast. A crowd of about 100 people saw some very interesting talks, ranging from Node.js, YQL, Chrome extensions, HTML5 to PhoneGap, I guess everybody heard something new and interesting.<br />
<span id="more-1217"></span></p>
<p><a href="http://twitter.com/cramforce/statuses/15327628835" target="_blank" style="float:right;"><img src="http://hub.uxebu.com:33550/wp-content/uploads/2010/06/Twitter-_-Malte-Ubl.jpg" alt="mobile rulez" title="Twitter _ Malte Ubl" width="305" height="154" class="aligncenter size-full wp-image-1221" /></a>The second day was mainly focused around mobile topics. Nikolai showed us how to think out of the box (which is your phone in this case) by talking about <a href="http://www.slideshare.net/nonken/human-apis" target="_blank">&#8220;Human APIs &#8211; expanding the mobile web&#8221;</a>. I tried to give an overview about how to use web technologies for mobile apps by talking about <a href="">&#8220;App vs. Widget &#8211; HTML5 Apps&#8221;</a>. And as it seems we had hit a sweet spot there as the tweet proves. It seems we had found our slots there. It was fun to see that.<br />
Find our slides below.</p>
<p><a href="http://picasaweb.google.com/psvensson/SWDC2010?feat=content_notification#5479008498447913298" target="_blank" style="float:left"><img src="http://hub.uxebu.com:33550/wp-content/uploads/2010/06/whatuxebudoes.jpg" alt="what uxebu does" title="whatuxebudoes" width="265" height="210" align="center" style="padding:0 5px 5px 0" /></a>It was great to see Sony Ericcson show their PhoneGap based strategy. Since that is also part of our direction it is very encouraging to see that there is company on going this route. They showed a webbased build tool, which allows for a simple creation of runnable apps based on PhoneGap and also interesting ideas around native APIs and the security concept. A lot of triggers that made a lot of people think. Great input.<br />
<a href="http://twitter.com/creationix">@creationix</a> showed a cool demo using node.js, where we could all interact with his app. <a href="http://twitter.com/divineprog">@divineprog</a> showed DroidScript, which basically was a Smalltalk inspired realtime Rhino-based JavaScript runtime, that allows using native Android resources. We learned a lot around geo data, their handling and optimization in use from <a href="http://twitter.com/tablackmore">@tablackmore</a>. Those are just some of the talks, they all were of high quality, so be sure to see them live next time.</p>
<p>At the mobile day we also heard talks about </p>
<ul>
<li>The New Mobile Web &#8211; A Web of Scripted Applications by <a href="http://twitter.com/divineprog">@divineprog</a></li>
<li>How to avoid the latency trap by <a href="http://twitter.com/sh1mmer">@sh1mmer</a></li>
<li>Handling spatial data on the web by <a href="http://twitter.com/tablackmore">@tablackmore</a></li>
<li>HTML5 gives you wings by <a href="http://twitter.com/mahemoff">@mahemoff</a></li>
<li>The phone in the cloud by Claes Nilsson and Thomas Bailey</li>
<li>node.JS powered mobile apps by <a href="http://twitter.com/creationix">@creationix</a></li>
</ul>
<p>All in all it was a great conference, I will look forward to be coming back next year.</p>
<div style="width:425px;" class="max" id="__ss_4401063"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/nonken/human-apis" title="Human APIs, the future of mobile">Nikolai Onken: Human APIs &#8211; expanding the mobile web</a></strong><object id="__sse4401063" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=humanapis-100603080239-phpapp01&#038;stripped_title=human-apis" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4401063" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=humanapis-100603080239-phpapp01&#038;stripped_title=human-apis" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/nonken">Nikolai Onken</a>.</div>
</div>
<div style="width:425px;" class="max" id="__ss_4405271"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/wolframkriesing/html5-apps-cross-platform-swdc2010" title="Html5 apps   cross platform - SWDC2010">Wolfram Kriesing: HTML5 apps   cross platform &#8211; SWDC2010</a></strong><object id="__sse4405271" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=html5apps-crossplatform-swdc2010-100603192006-phpapp02&#038;stripped_title=html5-apps-cross-platform-swdc2010" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4405271" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=html5apps-crossplatform-swdc2010-100603192006-phpapp02&#038;stripped_title=html5-apps-cross-platform-swdc2010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/wolframkriesing">wolframkriesing</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2010/06/07/swdc-2010-stockholm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dojo.connect({after:dojo.beer});</title>
		<link>http://uxebu.com/blog/2010/01/21/dojoconnectafterdojobeer/</link>
		<comments>http://uxebu.com/blog/2010/01/21/dojoconnectafterdojobeer/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 15:35:15 +0000</pubDate>
		<dc:creator>tobias</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.uxebu.com/?p=902</guid>
		<description><![CDATA[It’s been quite some time since the last dojo.beer() event took place in Germany and a lot of things have changed within the Dojo Toolkit with the release of 1.4.0. This is why we would like to invite everyone who is interested in Dojo, or who would like to talk to other Dojo developers, to [...]]]></description>
			<content:encoded><![CDATA[<p>It’s been quite some time since the last <a href="http://dojo.beer.mixxt.de/">dojo.beer()</a> event took place in Germany and a lot of things have changed within the Dojo Toolkit with the release of 1.4.0. This is why we would like to invite everyone who is interested in Dojo, or who would like to talk to other Dojo developers, to the next dojo.beer() event in Munich:</p>
<table border="0">
<tr>
<td style="vertical-align: top; width: 150px;">Date: 	</td>
<td style="font-weight: bold">Friday, 12.02.2010</td>
</tr>
<tr>
<td style="vertical-align: top">Time: 	</td>
<td style="font-weight: bold">3:00 PM &#8211; 11:00 PM GMT+1</td>
</tr>
<tr>
<td style="vertical-align: top">Seats: 	</td>
<td style="font-weight: bold">about 80</td>
</tr>
<tr>
<td style="vertical-align: top">Language: 	</td>
<td style="font-weight: bold">English</td>
</tr>
<tr>
<td style="vertical-align: top">Location: 	</td>
<td>
EineWeltHaus<br />
Schwanthalerstr. 80<br />
80336 München<br />
<a href="http://www.einewelthaus.de">http://www.einewelthaus.de</a>
</td>
</tr>
</table>
<p>You can signup here:</p>
<p><a href="http://dojoconnectmunich.eventbrite.com/"><img src="http://eventbrite-s3.s3.amazonaws.com/static/images/logo/powered_by_eventbrite_new.png" alt="dojoconnectmunich on EventBrite" /></a></p>
<p><span id="more-902"></span></p>
<p>This time we combine the official “Dojo Developer Day”, that is held online, with an on-site event in Munich.</p>
<p>The “Dojo Developer Day” is the last day of the first Dojo conference called <a href="http://widespreadconferences.com/">dojo.connect()</a> that will be happening 100% online. So if you want to get some deep insight and want to learn from the Dojo pros I just can recommend to <a href="http://widespreadconferences.com/">signup for that conference</a>.</p>
<div id="attachment_905" class="wp-caption center" style="width: 510px">
<div class="mhx"><a href="http://widespreadconferences.com/"><img class="size-full wp-image-905" title="dc-banner-bg" src="http://hub.uxebu.com:33550/wp-content/uploads/2010/01/dc-banner-bg.png" alt="dojo.connect (February 10-12, 2010)" width="500" /></a></div>
<p><p class="wp-caption-text">dojo.connect (February 10–12, 2010)</p></div>
<p>Additionally, at the event in Munich you’ll have the chance to meet Dylan Schiemann (co-founder of Dojo and CEO of <a href="http://sitepen.com">Sitepen</a>), other european Dojo developers, and of course the whole uxebu team in person. During the event we will connect to all other worldwide spreaded Dojo developers via videoconference and you can participate in the discussion about the future of Dojo.</p>
<p>Because the “Dojo Developer Day” mainly takes place in the US, the on-site event in Munich will be from 3pm to 11pm. You would help us with the organization, <a href="http://dojoconnectmunich.eventbrite.com/">if you signed up to the event through EventBrite</a>. You can sign up to the event for free or for a small fee of € 30,– to support the Dojo Foundation. You can choose :)</p>
<p>Thanks to <a href="http://twitter.com/kojote">Nils Hitze</a> for organizing the event and the <a href="http://einewelthaus.de">EineWeltHaus</a> for providing the room and food for all the Dojo enthusiasts.</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2010/01/21/dojoconnectafterdojobeer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make evaled script more useable in Firebug</title>
		<link>http://uxebu.com/blog/2009/11/10/make-evaled-script-more-useable-in-firebug/</link>
		<comments>http://uxebu.com/blog/2009/11/10/make-evaled-script-more-useable-in-firebug/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 08:41:40 +0000</pubDate>
		<dc:creator>wolfram</dc:creator>
				<category><![CDATA[development tools]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Tumbles]]></category>

		<guid isPermaLink="false">http://blog.uxebu.com/?p=661</guid>
		<description><![CDATA[Make evaled script more useable in Firebug]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/">Make evaled script more useable in Firebug</a></p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2009/11/10/make-evaled-script-more-useable-in-firebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo.workshop(&#8220;Haifa&#8221;) &#8211; the summary</title>
		<link>http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/</link>
		<comments>http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 11:11:18 +0000</pubDate>
		<dc:creator>nonken</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[w3c widgets]]></category>
		<category><![CDATA[dojo.beer()]]></category>

		<guid isPermaLink="false">http://blog.uxebu.com/?p=624</guid>
		<description><![CDATA[August 9th was the day for the first Dojo event in Israel and thanks to Yoav Rubin from IBM Research Labs in Haifa, we were able to hold the event in the great Auditorium of the amazingly located IBM building in Haifa. To give you a little impression of what kind of working environment the [...]]]></description>
			<content:encoded><![CDATA[<p>August 9th was the day for the first Dojo event in Israel and thanks to <a href="http://yoavrubin.blogspot.com">Yoav Rubin</a> from IBM Research Labs in Haifa, we were able to hold the event in the great Auditorium of the amazingly located IBM building in Haifa.<br />
To give you a little impression of what kind of working environment the folks at IBM have, I uploaded a panorama image from Yoav&#8217;s office.</p>
<p><center><a href="http://hub.uxebu.com:33550/wp-content/uploads/2009/08/1411050085_9690da53f7_o.jpg"><img src="http://hub.uxebu.com:33550/wp-content/uploads/2009/08/1411050085_9690da53f7_o-1024x142.jpg" alt="IBM Haifa" title="IBM Haifa" width="50%" class="alignnone size-large wp-image-625" /></a></center><br />
<span id="more-624"></span></p>
<p>The day started as planned with coffee and snacks and a <a href="http://www.slideshare.net/nonken/dojo-introduction-1844594">Dojo introduction</a> giving everybody who wasn&#8217;t really familiar with the Dojo Toolkit a better idea of what it actually is. A few demos such as <a href="http://code.google.com/p/xray-project">xRay</a> where shown to show some of the advanced features of Dojo such as live charting, custom themeing and much more.<br />
After a short break we continued with a talk on how to <a href="http://www.slideshare.net/nonken/event-list">design mobile architectures with the Dojo Toolkit</a> for platforms such as <a href="http://www.phonegap.com">PhoneGap</a>, W3C widgets and other mobile platforms supporting JavaScript/HTML and CSS. This is a very interesting topic and it was great to share the experience we made at uxebu on finding viable solutions for the challenges we face.  The third talk was a quick overview of the current documentation efforts for Dojo and different ways of finding the information you need when you are stuck or simply looking for API docs or similar.<br />
Before the break, Tomer Mahlin from IBM in Jerusalem, who is working on the BIDI implementation in Dojo, gave a very interesting talk on the challenges, developers face when writing applications supporting BIDI. Not having to deal with the issues you get confronted with when having to develop BIDI applications, this talk was eye opening and very interesting.<br />
After a great lunch we jumped into a hands on session building a very simple mobile app running on both PhoneGap and devices with a widget runtime supporting W3C widgets installed. This gave the audience a glimpse into mobile development and the challenges but also really exciting features.</p>
<p>In total there were about 45 people attending the event which is an amazing amount of people for such a first time event, thanks again to everyone attending and especially to Yoav Rubin and the folks at IBM to make this happen.</p>
<p>I am already looking forward to the next Dojo event in Israel and hope that we can be part of it again.</p>

<a href='http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/1411050085_9690da53f7_o/' title='IBM Haifa'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2009/08/1411050085_9690da53f7_o-150x150.jpg" class="attachment-thumbnail" alt="IBM Haifa" title="IBM Haifa" /></a>
<a href='http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/nikolaionken_dojo2/' title='nikolaionken_dojo2'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2009/08/nikolaionken_dojo2-150x150.jpg" class="attachment-thumbnail" alt="nikolaionken_dojo2" title="nikolaionken_dojo2" /></a>
<a href='http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/img_0131/' title='img_0131'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2009/08/img_0131-150x150.jpg" class="attachment-thumbnail" alt="img_0131" title="img_0131" /></a>
<a href='http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/img_0130/' title='img_0130'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2009/08/img_0130-150x150.jpg" class="attachment-thumbnail" alt="img_0130" title="img_0130" /></a>
<a href='http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/img_01311/' title='img_01311'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2009/08/img_01311-150x150.jpg" class="attachment-thumbnail" alt="img_01311" title="img_01311" /></a>
<a href='http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/img_0133/' title='img_0133'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2009/08/img_0133-150x150.jpg" class="attachment-thumbnail" alt="img_0133" title="img_0133" /></a>

<p>Following are the slides to give you a little impression of the events content. </p>
<div style="width:425px;text-align:left" class="mhx" id="__ss_1844597"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/nonken/event-list" title="EventNinja, Dojo and mobile">EventNinja, Dojo and mobile</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=eventlist-090811111712-phpapp01&#038;stripped_title=event-list" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=eventlist-090811111712-phpapp01&#038;stripped_title=event-list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/nonken">nonken</a>.</div>
</div>
<div style="width:425px;text-align:left" class="mhx" id="__ss_1844594"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/nonken/dojo-introduction-1844594" title="Dojo Introduction">Dojo Introduction</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dojointroduction-090811111614-phpapp02&#038;stripped_title=dojo-introduction-1844594" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dojointroduction-090811111614-phpapp02&#038;stripped_title=dojo-introduction-1844594" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/nonken">nonken</a>.</div>
</div>
<div style="width:425px;text-align:left" class="mhx" id="__ss_1848277"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/guest0176bf4/bidi-support-in-dojo14" title="Bidi Support In Dojo1.4">Bidi Support In Dojo1.4</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bidisupportindojo1-406august2009-090812072918-phpapp02&#038;stripped_title=bidi-support-in-dojo14" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bidisupportindojo1-406august2009-090812072918-phpapp02&#038;stripped_title=bidi-support-in-dojo14" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/guest0176bf4">guest0176bf4</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2009/08/12/dojoworkshophaifa-the-summary/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dojo.workshop in Haifa, Israel &#8211; August 9th</title>
		<link>http://uxebu.com/blog/2009/07/30/dojoworkshop-in-haifa-israel-august-9th/</link>
		<comments>http://uxebu.com/blog/2009/07/30/dojoworkshop-in-haifa-israel-august-9th/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 11:08:04 +0000</pubDate>
		<dc:creator>nonken</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[dojo.workshop]]></category>
		<category><![CDATA[israel]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.uxebu.com/?p=607</guid>
		<description><![CDATA[The news have been announced already on the Dojotoolkit.org and Dojocampus.org blogs but I nevertheless wanted to mention the dojo.workshop in Haifa, Israel on August 9th. Already now we have more than 50 signups and thanks to Yoav Rubin from IBM research labs we can have a full day of Dojo-ness. It is interesting to [...]]]></description>
			<content:encoded><![CDATA[<p>The news have been announced already on the <a href="http://dojotoolkit.org/2009/07/27/dojo-workshop-haifa-israel-august-9th-more-info-and-schedule">Dojotoolkit.org</a> and <a href="http://dojocampus.org/content/2009/07/09/dojoworkshophaifa-august-9th/">Dojocampus.org</a> blogs but I nevertheless wanted to mention the dojo.workshop in Haifa, Israel on August 9th.<br />
Already now we have more than 50 signups and thanks to <a href="http://yoavrubin.blogspot.com">Yoav Rubin</a> from IBM research labs we can have a full day of Dojo-ness.<br />
<span id="more-607"></span><br />
It is interesting to hear that many attending people are interested in how to write mobile applications with the Dojo Toolkit and we will try to spend some time on giving people insight about where things currently stand.<br />
As I am discussing in the upcoming issue of the <a href="http://www.jsmag.com/">JSMag</a>, using JavaScript libraries on mobile environments is something you have to do with caution since most of the libraries were not written intentionally for mobile platforms.<br />
Dojo at this point is a very good choice (yes I am biased ;) and yes, Dojo needs a lot of optimization for mobile) especially if you are working on delivering applications both to mobile devices and desktop clients. It is no fun having to use different tools for similar environments. So I am looking forward to lots of mobile hacking in Haifa.</p>
<p>Following some more details for the event. You can find all info also at the <a href="http://dojocampus.org/content/2009/07/09/dojoworkshophaifa-august-9th/">DojoCampus.org event page</a> and things are still subject to change.</p>
<p><strong>Location:</strong></p>
<p>IBM Haifa Research Lab<br />
Haifa University Campus</p>
<p><a href="http://maps.google.com/maps?f=q&#038;source=s_q&#038;hl=en&#038;geocode=&#038;q=Israel,+Haifa,+Haifa+University&#038;sll=32.763315,35.004501&#038;sspn=0.2096,0.176811&#038;ie=UTF8&#038;z=14&#038;iwloc=A">Google map</a></p>
<p><strong>Time:</strong></p>
<p>09:30 &#8211; 15:00</p>
<p><strong>Schedule</strong></p>
<p>09:30 &#8211; 10:00 &#8211; Gathering</p>
<p>10:00 &#8211; 10:15 &#8211; Welcome and introduction</p>
<p>10:15 &#8211; 10:45 &#8211; Overview of Dojo Dijit and Dojox</p>
<p>11:00 &#8211; 12:00 &#8211; Dojo and Mobile</p>
<p>12:00 &#8211; 12:30 &#8211; Dojo based JavaScript API Docs generator</p>
<p>12:30 &#8211; 13:00 &#8211; Hacking mobile (this session might be extended)</p>
<p>13:00 &#8211; 14:00 &#8211; Lunch</p>
<p>14:10 &#8211; 14:30 &#8211; Support for bidirectional languages in Dojo</p>
<p>14:30 &#8211; 15:00 &#8211; Projects demonstration </p>
<p>If you want to give a talk about your experience with Dojo or anything Web related, leave a comment at the <a href="http://dojocampus.org/content/2009/07/09/dojoworkshophaifa-august-9th/">DojoCampus.org event page</a> or send an email to nonken(_at_) dojotoolkit.org and we&#8217;ll make sure you get added to the schedule.</p>
<p>After the main event we will either continue hacking or go for food/drinks/dojo.beers() into town.</p>
<p>If you would like to attend, please add your name to the list below, so we can be sure that we will have enough space.</p>
<p><iframe width="300" height="250" frameborder="0" src="http://doodle.com/summary.html?pollId=d6y8m9mfarzd3xwc"> </iframe></p>
<p>Looking forward to being in Haifa and meeting lots of Dojo, web, JavaScript folks.</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2009/07/30/dojoworkshop-in-haifa-israel-august-9th/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dojo D.O.H. Unit Testing</title>
		<link>http://uxebu.com/blog/2009/07/21/dojo-doh-unit-testing/</link>
		<comments>http://uxebu.com/blog/2009/07/21/dojo-doh-unit-testing/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 09:32:38 +0000</pubDate>
		<dc:creator>wolfram</dc:creator>
				<category><![CDATA[development tools]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Tumbles]]></category>

		<guid isPermaLink="false">http://blog.uxebu.com/?p=592</guid>
		<description><![CDATA[Dojo D.O.H. Unit Testing]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.medryx.org/2008/06/08/dojo-doh-unit-testing/">Dojo D.O.H. Unit Testing</a></p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2009/07/21/dojo-doh-unit-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo examples from UC2009</title>
		<link>http://uxebu.com/blog/2009/07/15/dojo-examples-from-uc2009/</link>
		<comments>http://uxebu.com/blog/2009/07/15/dojo-examples-from-uc2009/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 18:33:58 +0000</pubDate>
		<dc:creator>wolfram</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Tumbles]]></category>

		<guid isPermaLink="false">http://blog.uxebu.com/?p=588</guid>
		<description><![CDATA[Dojo examples from UC2009]]></description>
			<content:encoded><![CDATA[<p><a href="http://coalface.mcslp.com/2009/07/15/dojo-examples-from-uc2009/">Dojo examples from UC2009</a></p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2009/07/15/dojo-examples-from-uc2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

