<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>katratxo on Openbravo</title>
	<atom:link href="http://katratxo.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://katratxo.wordpress.com</link>
	<description>tail -f /var/log/brain &#124; grep -i openbravo</description>
	<lastBuildDate>Wed, 14 Dec 2011 10:05:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='katratxo.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>katratxo on Openbravo</title>
		<link>http://katratxo.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://katratxo.wordpress.com/osd.xml" title="katratxo on Openbravo" />
	<atom:link rel='hub' href='http://katratxo.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Development tips &#8211; Part III</title>
		<link>http://katratxo.wordpress.com/2011/09/06/development-tips-part-iii/</link>
		<comments>http://katratxo.wordpress.com/2011/09/06/development-tips-part-iii/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 07:50:19 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[freemarker]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=374</guid>
		<description><![CDATA[FreeMarker syntax highlighting As you may know, we are using Freemarker as templating engine to produce code. By default, you don&#8217;t have syntax highlighting in Eclipse, but you can fix this limitation installing JBoss Tools. Since we are using Eclipse Indigo, you need use the Development Release . After installing the plugin and restarting Eclipse, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=374&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>FreeMarker syntax highlighting</h2>
<p>As you may know, we are using <a href="http://freemarker.sourceforge.net/" title="Link to FreeMarker project" target="_blank">Freemarker</a> as templating engine to produce code. By default, you don&#8217;t have syntax highlighting in <a href="http://wiki.openbravo.com/wiki/How_to_setup_Eclipse_IDE" title="How to setup Eclipse IDE" target="_blank">Eclipse</a>, but you can fix this limitation installing <a href="http://www.jboss.org/tools" title="Link to JBoss Tools for Eclipse" target="_blank">JBoss Tools</a>.</p>
<p>Since we are using Eclipse Indigo, you need use the <a href="http://www.jboss.org/tools/download/dev" title="Link to JBoos Tools Development release" target="_blank">Development Release</a></p>
<p>.</p>
<p><a href="http://katratxo.files.wordpress.com/2011/09/freemarker-ide.png"><img src="http://katratxo.files.wordpress.com/2011/09/freemarker-ide.png?w=300&#038;h=223" alt="FreeMarker IDE plugin" title="FreeMarker IDE plugin" width="300" height="223" class="aligncenter size-medium wp-image-379" /></a></p>
<p>After installing the plugin and restarting Eclipse, you&#8217;ll have some colored syntax when opening a <code>.ftl</code> file</p>
<p><a href="http://katratxo.files.wordpress.com/2011/09/ob-view-form-js-ftl.png"><img src="http://katratxo.files.wordpress.com/2011/09/ob-view-form-js-ftl.png?w=300&#038;h=218" alt="ob-view-form.js.ftl" title="ob-view-form.js.ftl" width="300" height="218" class="aligncenter size-medium wp-image-382" /></a></p>
<h2>Identifying field names</h2>
<p>A very common question is how to identify the name of the <code>INPUT</code> that is used when sending requests to the server. In 2.50 was quite easy, you just had to check the generated HTML code and search for an <em>input</em> tag and check the <strong>name</strong> attribute. This name is that one you use as request parameter in your servlet (e.g. a Callout).</p>
<p>In Openbravo 3, the code is generated in the client side by SmartClient, and most of the time you don&#8217;t have control over it. However you can use <a href="http://code.google.com/chrome/devtools/docs/elements.html" title="Link to Chrome Dev Tools" target="_blank">Elements</a> tab in Chrome Dev Tools to check the resulting code.</p>
<p><a href="http://katratxo.files.wordpress.com/2011/09/field-name.png"><img src="http://katratxo.files.wordpress.com/2011/09/field-name.png?w=300&#038;h=203" alt="Business Partner field name" title="Business Partner field name" width="300" height="203" class="aligncenter size-medium wp-image-390" /></a></p>
<p>You&#8217;ll find that wrapping the actual <code>INPUT</code> there are several <code>DIV</code>s and <code>TD</code>s. This wrapping code contains references to JavaScript variables you can use to access some properties, e.g. In the image above, the Business Partner selector has refereces to <code>isc_OBSelectorItem_1</code>.</p>
<p>If you use the console, you can access the JavaScript object and some of the properties:</p>
<p>
<pre class="brush: jscript;">isc_OBSelectorItem_1.name
&quot;businessPartner&quot;
isc_OBSelectorItem_1.inpColumnName
&quot;inpcBpartnerId&quot;
</pre>
</p>
<p>For backward compatibility, each field has a <strong><em>inpColumnName</em></strong> that can be used as request parameter in your servlet.</p>
<h2>Choosing the proper Java package name</h2>
<p>This section of the article goes mainly to Openbravo core developers. It&#8217;s important to know that that <strong>org.openbravo.*</strong> is reserved for Openbravo developments.</p>
<p>I started a sample module and picked the Java package, <strong>org.openbravo.test.security</strong>, after that I registered a <a href="http://wiki.openbravo.com/wiki/Openbravo_3_Architecture#Component_Provider" title="Link to Openbravo 3 architecture" target="_blank">ComponentProvider</a> and some <em>Component</em> generating some JavaScript response. When I tried the code it didn&#8217;t work. After more than one hour trying to figure out what&#8217;s going on, I read the following:</p>
<blockquote><p>Weld will analyze the classpath to find components which have specific annotations. To prevent searching all classes specific exclusion filters have been specified. They can be found in the META-INF/beans.xml file in the Weld module. <a href="http://wiki.openbravo.com/wiki/Openbravo_3_Architecture#Analyzing%20the%20classpath" title="Link to Openbravo 3 architecture article" target="_blank">&#8230;</a> </p></blockquote>
<p>Bingo! To avoid trying to analyze the <em>JUnit</em> test cases in the <strong>org.openbravo.test</strong> package, we exclude any package that contains <code><a href="https://code.openbravo.com/erp/devel/pi/file/tip/modules/org.openbravo.base.weld/src/META-INF/beans.xml#l37" title="Link to beans.xml" target="_blank">org.openbravo.**.test.**</a></code> pattern.</p>
<p>Removing the <code>test</code> part of my test module Java package solved the problem.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/374/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/374/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/374/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/374/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/374/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/374/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/374/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/374/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/374/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/374/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/374/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/374/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/374/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/374/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=374&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2011/09/06/development-tips-part-iii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/09/freemarker-ide.png?w=300" medium="image">
			<media:title type="html">FreeMarker IDE plugin</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/09/ob-view-form-js-ftl.png?w=300" medium="image">
			<media:title type="html">ob-view-form.js.ftl</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/09/field-name.png?w=300" medium="image">
			<media:title type="html">Business Partner field name</media:title>
		</media:content>
	</item>
		<item>
		<title>Finding and fixing memory leaks in a SmartClient based application</title>
		<link>http://katratxo.wordpress.com/2011/08/25/memory-leaks-smartclient-based-app/</link>
		<comments>http://katratxo.wordpress.com/2011/08/25/memory-leaks-smartclient-based-app/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 10:16:40 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[smartclient]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=339</guid>
		<description><![CDATA[Finding memory leaks in a Web Application can be difficult, fortunately the tools for Web Development are getting better and better. You can read the post Finding memory leaks by Tony Gentilcore, where he explains how you can use Chrome Dev Tools Timeline and Heap Profiler to diagnose if your application is leaking memory. In [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=339&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Finding memory leaks in a Web Application can be difficult, fortunately the tools for Web Development are getting better and better. You can read the post <a href="http://gent.ilcore.com/2011/08/finding-memory-leaks.html" target="_blank">Finding memory leaks</a> by Tony Gentilcore, where he explains how you can use Chrome Dev Tools <a href="http://code.google.com/chrome/devtools/docs/timeline.html" target="_blank">Timeline</a> and <a href="http://code.google.com/chrome/devtools/docs/profiles.html" target="_blank">Heap Profiler</a> to diagnose if your application is leaking memory.</p>
<p>In the case of a <a href="http://www.smartclient.com/product/smartclient.jsp" target="_blank">SmartClient</a> application, you should know that when you create a new object, instance of a Class, the library <em>pollutes</em> the global namespace (<em>window</em>) with a global variable using the pattern: <em>isc_TypeOfClass_Index</em> e.g. If you execute the following code, you&#8217;ll end up with a new global variable <code>isc_VLayout_0</code></p>
<p><pre class="brush: jscript;">var l = isc.VLayout.create({width: '100%', height: '100%'});</pre></p>
<p>When you destroy an object, the global variable gets nullified:</p>
<p><pre class="brush: jscript;">l.destroy();
isc_VLayout_0 === null // true - still exists but its value is null
</pre></p>
<p>Taking this as a base, you could identify if your SmartClient application is leaking memory with the following procedure:</p>
<ul>
<li>Take a snapshot of the current state of the global namespace</li>
<li>Perform the action you think causes the leak </li>
<li>Take a second snapshot of the global namespace and compare them</li>
<li>Every <em>not null</em> entry in the second snapshot that is not present in the first one, is a leak</li>
</ul>
<p><strong>Keep this strategy in mind.</strong></p>
<p>Although most of the cases SmartClient handles objects lifecycle automatically, there are cases in which you need to destroy objects manually. Let&#8217;s take a look when this is required.</p>
<h2>SmartClient handles child objects automatically</h2>
<p>If you check the documentation, SmartClient has the concept of <a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#type..AutoChild" target="_blank">AutoChild</a> that are subcomponents part of of a <em>main</em> object that gets automatically managed.</p>
<blockquote>
<p>An example is the Window component and its subcomponent the &#8220;header&#8221; &#8230;<br />
By default any auto-children created by <code>canvas.addAutoChild</code> or<br />
<code>canvas.createAutoChild</code> will be destroyed when the canvas that created them is destroyed</p>
</blockquote>
<p>Your child objects will be automatically destroyed if SmartClient <em>knows</em> about them, e.g. Using </p>
<ul>
<li><a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#method..Layout.addMember" target="_blank">addMember</a> method of a Layout</li>
<li><a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#attr..Window.items" target="_blank">items</a> array of a Window</li>
<li><a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#method..Class.addAutoChild" target="_blank">addAutoChild</a> of Canvas</li>
<li><a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#method..Class.createAutoChild">createAutoChild</a> of Canvas</li>
</ul>
<p>Some code:</p>
<p><pre class="brush: jscript;">var l = isc.Window.create({
  width: '600',
  height: '400',
  items: [
    isc.Label.create({
      contents: 'Hello World'
    })
  ]
});
</pre></p>
<p>When you execute this code, you&#8217;ll have a lot of new global variables:</p>
<p><pre class="brush: jscript;">isc_Label_0
isc_Window_0
isc_EdgedCanvas_0
isc_Window_0_shadow
isc_Window_0_header
isc_Window_0_headerBackground
isc_Window_0_headerIcon
isc_Canvas_0
isc_Window_0_headerLabel
isc_Window_0_minimizeButton
isc_Window_0_closeButton
isc_Window_0_body
</pre></p>
<p>If you call the <code>destroy</code> method of the Window, the <code>isc_Window_0</code> variable remains in the global namespace but with <strong>null</strong> value. The rest of variables are deleted.</p>
<p><pre class="brush: jscript;">isc_Window_0 === null // true</pre></p>
<h2>SmartClient doens&#8217;t handle objects that are not AutoChild</h2>
<p>When dealing with complex composed widgets and if those subcomponets are not added using the AutoChild pattern, is quite easy to create memory leaks. An Openbravo example of this is the <a href="https://code.openbravo.com/erp/devel/main/file/tip/modules/org.openbravo.userinterface.selector/web/org.openbravo.userinterface.selector/js/ob-selector-item.js" target="_blank">SelectorItem</a>, a widget commonly used (Business Partner, Product selectors). This widget is a composite of a <a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#class..ComboBoxItem" target="_blank">ComboBoxItem</a>, a magnifier image and a <a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#class..ListGrid" target="_blank">ListGrid</a> embeded in a <a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#class..Window" target="_blank">Window</a> that, is hidden by default, and shown when clicking the magnifier icon.</p>
<p>When destroying a <code>SelectorItem</code> you need to manually take care of destroying the associated objects.</p>
<h2>SmartClient doesn&#8217;t destroy the dataSource object associated to a DataBound component</h2>
<p>Another case is when SmartClient doesn&#8217;t destroy the associated dataSource object of a <code>ListGrid</code>.<br />
This case is also present in the <code>SelectorItem</code>, since the selector <code>Window</code> contains a <code>ListGrid</code> with an associated <code>DataSource</code>.</p>
<p>The example below creates a new <code>DataSource</code> and a <code>ListGrid</code> bounded to it. The <code>ListGrid</code> is then added as <em>item</em> of a <code>Window</code> which is a member of a <code>Layout</code> that also contains a destroy <code>Button</code>. When the user clicks the button, the expected result is that <strong>all</strong> objects get destroyed in cascade.</p>
<p>As you can see the dataSource requires to get destroyed explicitly.</p>
<p><pre class="brush: jscript;">isc.DataSource.create({
  ID: &quot;countryDS&quot;, // manually defining the global ID
  fields:[
    {name:&quot;countryCode&quot;, title:&quot;Code&quot;},
    {name:&quot;countryName&quot;, title:&quot;Country&quot;},
    {name:&quot;capital&quot;, title:&quot;Capital&quot;}
  ],
  clientOnly: true,
  testData: countryData // sample data previously defined
});

isc.ListGrid.create({
  ID: &quot;countryList&quot;,
  width: '100%', 
  height: '100%', 
  alternateRecordStyles:true, 
  showAllRecords:true,
  dataSource: countryDS,
  autoFetchData: true,
  destroy: function () { // 'overriding' destroy method
    if(this.dataSource) {
      this.dataSource.destroy(); // needs to be done manually
  }
  this.Super('destroy', arguments);
  }
});

isc.VLayout.create({
  height: 400, width: 600
})
.addMember(isc.Window.create({
  width: '100%',
  heigth: '100%',
  items: [countryList] // ListGrid gets destroyed
}))
.addMember(isc.Button.create({
  title: 'destroy',
  action: function () {
    this.parentElement.destroy();
}
}));
</pre></p>
<h2>The Openbravo Case</h2>
<p>In Openbravo 3 there were few places with some <em>composed components</em>, that child/related objects were not destroyed when destroying the main component.</p>
<p>Previous to the upcoming <strong>3.0MP3</strong> if you close a window (e.g. Sales Order), some objects were not getting destroyed, resulting in memory consumption increase. After working with the application a couple of hours (opening and closing several windows) the user got strange behavior like: slow reponse to user actions, slow repaint process, etc.</p>
<p>Some of the components that were not properly managed are:</p>
<ul>
<li>LinkedItems section (section in Form view that shows you the related records)</li>
<li>SelectorItem (the component behind Product, Business Partner selector)</li>
<li>StatusBar (the component in the upper part of the Form view)</li>
<li>Loading Tab (temporary tab shown when requesting a View definition to the server)</li>
</ul>
<h3>Linked Items</h3>
<p><a href="http://katratxo.files.wordpress.com/2011/08/ob3-linked-items.png"><img src="http://katratxo.files.wordpress.com/2011/08/ob3-linked-items.png?w=300&#038;h=84" alt="Linked Items" title="Linked Items" width="300" height="84" class="aligncenter size-medium wp-image-337" /></a></p>
<p>The <em>Linked Items</em> section contains two ListGrids and a DataSource each one of them. When destroying the Form, you need to manually destroy the ListGrid and DataSource associated.</p>
<h3>Selector</h3>
<p><a href="http://katratxo.files.wordpress.com/2011/08/ob3-selector.png"><img src="http://katratxo.files.wordpress.com/2011/08/ob3-selector.png?w=300&#038;h=150" alt="Selector" title="Selector" width="300" height="150" class="aligncenter size-medium wp-image-338" /></a></p>
<p>As explained before, the Selector is one of the most commonly used widget. When destroying the Form, you need to manually destroy the Window that contains a ListGrid and the associated DataSource.</p>
<h3>Status Bar</h3>
<p><a href="http://katratxo.files.wordpress.com/2011/08/ob3-status-bar.png"><img src="http://katratxo.files.wordpress.com/2011/08/ob3-status-bar.png?w=300&#038;h=19" alt="Status Bar" title="Status Bar" width="300" height="19" class="aligncenter size-medium wp-image-336" /></a></p>
<p>The StatusBar contained some images not added using the AutoChild pattern and required to be manually destroyed when destroying the StatusBar.</p>
<h3>Loading Tab</h3>
<p><a href="http://katratxo.files.wordpress.com/2011/08/loading-bar.png"><img src="http://katratxo.files.wordpress.com/2011/08/loading-bar.png?w=300&#038;h=77" alt="Loading Bar" title="Loading Bar" width="300" height="77" class="aligncenter size-medium wp-image-362" /></a></p>
<p>When opening a window, a <em>Loading Tab</em> is shown in the TabSet. After the window gets created the Tab content is replaced using <a href="http://www.smartclient.com/docs/8.1/a/b/c/go.html#method..TabSet.updateTab" target="_blank">TabSet.updateTab</a>. The documentation clearly states, <em>&#8220;NOTE: the old pane for the tab is not destroyed&#8221;</em>, you need to manually destroy the Loading Tab.</p>
<h2>The Fix</h2>
<h3>Using scopeleaks</h3>
<p>If we use the strategy described at the begining, we need to take a snapshot of the global namespace, perform the <em>leaky</em> action (open/close a window), take a second snapshot and compare.</p>
<p>We have used and modified <a href="https://github.com/ruidlopes/scopeleaks" target="_blank">scopeleaks</a>, a utility tool created by Rui Lopes. The tool is intended for detecting leaks of variables to the global namespace. Since <strong>we now</strong> that SmartClient always leaks variables, we have <a href="https://code.openbravo.com/erp/devel/main/file/tip/modules/org.openbravo.client.kernel/web/org.openbravo.client.kernel/js/scopeleaks.js" target="_blank">modified</a> it to only check for instances of a class, meaning any new global variable starting with <strong>isc</strong>_ that is not null.</p>
<h3>Detecting leaks</h3>
<p>The steps to detect a leak:</p>
<ul>
<li>
<p>Login into the application</p>
</li>
<li>
<p>Open Web Dev Tools</p>
</li>
<li>
<p>Take a first snapshot of the global namespace</p>
<p><pre class="brush: jscript;">var s1 = scopeleaks.snapshot();</pre>
</li>
<li>
<p>Open and close a window (e.g. Sales Order)</p>
</li>
<li>
<p>Take a second snapshot and compare</p>
<p><pre class="brush: jscript;">var leaks = scopeleaks.leaks(s1); // leaks will have an array with all the global variables that are not null</pre>
</li>
</ul>
<p>Repeating this flow, you could detect if a user interaction, creates new objects that are never released.</p>
<p>If you are interested in checking all the changes made on the components mentioned before, check the <a href="https://issues.openbravo.com/view.php?id=18227" target="_blank">Issue 18227</a>.</p>
<h2>Conclusions</h2>
<p>Solving simple memory leaks in a SmartClient based application is straight forward if you use this strategy. Note that we are only fixing the most obvious ones.</p>
<p>SmartClient is a great library, but even <a href="http://forums.smartclient.com/showthread.php?p=71289" target="_blank">SmartClient code</a> could cause memory leaks.</p>
<p>You need to <strong>learn</strong> and <strong>know</strong>  the framework you&#8217;re using. You cannot go blindly creating objects here and there and expecting that everything will automatically collected when is not needed.</p>
<p>Use all tools available and measure memory consumption when using the application.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/339/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=339&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2011/08/25/memory-leaks-smartclient-based-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/08/ob3-linked-items.png?w=300" medium="image">
			<media:title type="html">Linked Items</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/08/ob3-selector.png?w=300" medium="image">
			<media:title type="html">Selector</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/08/ob3-status-bar.png?w=300" medium="image">
			<media:title type="html">Status Bar</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/08/loading-bar.png?w=300" medium="image">
			<media:title type="html">Loading Bar</media:title>
		</media:content>
	</item>
		<item>
		<title>Improved JSLint check on Mercurial</title>
		<link>http://katratxo.wordpress.com/2011/07/30/mercurial-jslint-hook/</link>
		<comments>http://katratxo.wordpress.com/2011/07/30/mercurial-jslint-hook/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 06:55:07 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jslint]]></category>
		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=316</guid>
		<description><![CDATA[We have been working with the previous version of the Mercurial JSLint precommit hook for several months now, and we pretty happy with the results, it catches the most common JavaScript pitfalls. However this hook was not smart enough, it checked all the modified JavaScript files even if they were not part for the commit, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=316&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We have been working with the previous version of the <a href="http://katratxo.wordpress.com/2010/12/13/running-jslint-as-hg-precommit-hook/" title="Link to Running JSLint as Mercurial precommit hook">Mercurial JSLint precommit hook</a> for several months now, and we pretty happy with the results, it catches the most common JavaScript pitfalls.</p>
<p>However this hook was not smart enough, it checked all the modified JavaScript files even if they were not part for the commit, and this situation annoyed some experienced developers:</p>
<blockquote><p>I have unfinished JavaScript changes, but I&#8217;m committing a Java files!! Why this hook is checking files that are not part of the commit!?? I need to do this Java changes now &#8230; I&#8217;ll disable this hook.
</p></blockquote>
<h2>The Solution</h2>
<p>
The solution is to run the check on the <a href="http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html" title="Link to Mercurial Book" target="_blank">pretxncommit</a> hook, where you have already the list of files that are part of the commit. You can check the modified JavaScript files and if JSLint complains, the transaction is rolled back.
</p>
<h3>The Code</h3>
<p>The changes are simple. Use <span style="font-family:monospace;">hg log</span> to get the list of files from <span style="font-family:monospace;">$HG_NODE</span> and pass them through JSLint.</p>
<p>
<strong>Update:</strong> The previous version of the script was not working on every case. The problem is that <span style="font-family:monospace;">hg log &#8211;template &#8216;{files}&#8217;</span> outputs all the modified files in a single line. That output saw used as input of <span style="font-family:monospace;">awk</span>, that was not filtering properly. I found a workaround, perhaps is not the nicest script, but is working.
</p>
<p>
<pre class="brush: bash;">
#!/bin/sh
# Mercurial pretxncommit hook
for i in $(hg log -r $HG_NODE --template '{files}'); do echo $i | awk '/.js$/ | xargs -rn1 /path/to/jslint || exit 1; done;
</pre>
</p>
<h2>Credits</h2>
<p>As many times, thanks to <a href="http://jpabloae.wordpress.com/" title="Link to jpabloae.blog" target="_blank">Juan Pablo</a> and the <a href="http://mercurial.selenic.com/wiki/IRC" title="Link to Mercurial Community page" target="_blank">Mercurial Community</a> for providing the way to check only the files part of the changeset.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/316/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=316&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2011/07/30/mercurial-jslint-hook/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>
	</item>
		<item>
		<title>Openbravo 3 Developer&#8217;s Guide</title>
		<link>http://katratxo.wordpress.com/2011/07/14/openbravo-3-developers-guide/</link>
		<comments>http://katratxo.wordpress.com/2011/07/14/openbravo-3-developers-guide/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 10:41:37 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[documentation]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=299</guid>
		<description><![CDATA[We have been working hard to finish the new Developer&#8217;s Guide targeting Openbravo 3. This guide contains information on how to change, extend and build further the application providing valuable information for starting developers, medium experienced and Openbravo experts. The New Structure Following best practices we are now using Categories as the way to structure [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=299&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We have been working hard to finish the new <a title="Openbravo Developers Guide" href="http://wiki.openbravo.com/wiki/Category:Developers_Guide" target="_blank">Developer&#8217;s Guide</a> targeting Openbravo 3. This guide contains information on how to change, extend and build further the application providing valuable information for starting developers, medium experienced and Openbravo experts.
</p>
<h2>The New Structure</h2>
<p>
Following best practices we are now using <a title="Mediawiki Categories" href="http://www.mediawiki.org/wiki/Help:Categories" target="_blank">Categories</a> as the way to structure our documentation. An overview of the categories is shown in the following diagram:
</p>
<p>
<a href="http://katratxo.files.wordpress.com/2011/07/640px-devguide_wiki_categories.png"><img class="size-medium wp-image-303 aligncenter" title="DevGuide_Wiki_Categories" src="http://katratxo.files.wordpress.com/2011/07/640px-devguide_wiki_categories.png?w=450" alt="Developer's Guide Categories" width="450" /></a>
</p>
<ul>
<li><strong>Concepts:</strong> Contains documents that aim to explain core concepts behind Openbravo architecture.</li>
<li><strong>HowTo:</strong> Step by step actions to achieve a goal, e.g. How to create and package a Module</li>
<li><strong>Data_Model:</strong> Automatic generated documentation that contains the Database and Entity Model</li>
<li><strong>Example:</strong> Documents that explain code present in the product that could be used as base for our developments</li>
<li><strong>Reference:</strong>The hibernate mapping, REST XML Schema among other reference documents</li>
</ul>
<h2>Feedback</h2>
<p>
If you find a document that contains something wrong, outdated or not properly explained, please fix it, after all is a wiki. <strong>Note</strong>: If you want to make a large change in a document, please contact the original author explaining your proposed changes.
</p>
<p>You could also log a defect or feature request in the <a href="https://issues.openbravo.com" title="Openbravo Issue Tracker" target="_blank">issue tracker</a> in the <strong>Documentation</strong> project. Remember to pick the right category: ERP Developers Guide.
</p>
<p>
I&#8217;ve also started a <a href="http://forge.openbravo.com/projects/openbravoerp/forum/openbravo-3-developers-guide-feedback-p7026334.html" title="Link to forum thread" target="_blank">forum thread</a> to collect your feedback and ideas on the Developers Guide.
</p>
<p>
That&#8217;s all folks!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/299/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=299&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2011/07/14/openbravo-3-developers-guide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/07/640px-devguide_wiki_categories.png?w=450" medium="image">
			<media:title type="html">DevGuide_Wiki_Categories</media:title>
		</media:content>
	</item>
		<item>
		<title>Development tips: JavaScript debugger statement</title>
		<link>http://katratxo.wordpress.com/2011/02/10/js-debugger-statement/</link>
		<comments>http://katratxo.wordpress.com/2011/02/10/js-debugger-statement/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 19:04:52 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=276</guid>
		<description><![CDATA[According with the MDC the debugger statement was introduced in ECMA-262, Edition 5 Invokes any available debugging functionality. If no debugging functionality is available, this statement has no effect. This statement is very handy when trying to debug eval&#8217;ed code like the View definition in Openbravo 3.0. It seems the only way to have an [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=276&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
According with the <a href="https://developer.mozilla.org/en/JavaScript/Reference/Statements/debugger"><strong>MDC</strong></a> the debugger statement was introduced in <em>ECMA-262, Edition 5</em></p>
<blockquote><p>Invokes any available debugging functionality. If no debugging functionality is available, this statement has no effect.</p></blockquote>
<p>
This statement is very handy when trying to debug eval&#8217;ed code like the View definition in Openbravo 3.0. It seems the only way to have an entry point to the JavaScript program running in the browser.
</p>
<p>
I&#8217;ve tested this statement in Internet Explorer 8, Firefox 4b10 and Chrome 9. And works when you have a debugger running. Note: In Firefox you need Firebug available for that page.
</p>
<p><pre class="brush: xml;">
&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function f() {
 var message = 'hello world';
 debugger;
 if(typeof window.console !== 'undefined') {
   console.log(message);
 }
 else {
   alert(message);
 }
}
f();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre></p>
<p>
Here you have some screenshots:
</p>
<p align="center">
<strong>Internet Explorer</strong> <br />
<img src="http://katratxo.files.wordpress.com/2011/02/ie-debugger1.png?w=700" alt="Internet Explorer - JS debugger" />
</p>
<p align="center">
<strong>Firefox</strong><br />
<img src="http://katratxo.files.wordpress.com/2011/02/ff-debugger1.png?w=700" alt="Firefox/Firebug - JS debugger" />
</p>
<p align="center">
<strong>Chromium/Chrome</strong><br />
<img src="http://katratxo.files.wordpress.com/2011/02/chrome-debugger1.png?w=700" alt="Chrome/Chromium - JS debugger" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/276/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=276&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2011/02/10/js-debugger-statement/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/02/ie-debugger1.png" medium="image">
			<media:title type="html">Internet Explorer - JS debugger</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/02/ff-debugger1.png" medium="image">
			<media:title type="html">Firefox/Firebug - JS debugger</media:title>
		</media:content>

		<media:content url="http://katratxo.files.wordpress.com/2011/02/chrome-debugger1.png" medium="image">
			<media:title type="html">Chrome/Chromium - JS debugger</media:title>
		</media:content>
	</item>
		<item>
		<title>Update: Making a snapshot of your Openbravo instance</title>
		<link>http://katratxo.wordpress.com/2011/01/06/update-snapshot-openbravo-instance/</link>
		<comments>http://katratxo.wordpress.com/2011/01/06/update-snapshot-openbravo-instance/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 09:19:47 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[snapshot]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=265</guid>
		<description><![CDATA[I just updated the snapshot.xml script adding a new property exclude where you can define as comma separated values the patterns you want to exclude from the zip file. If you are not familiar with this script, I suggest you read my previous post on how to make a snapshot of your Openbravo instance I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=265&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just updated the <a href="https://bitbucket.org/iperdomo/labs/raw/3cb392245125/openbravo/snapshot.xml">snapshot.xml</a> script adding a new property <em>exclude</em> where you can define as comma separated values the patterns you want to exclude from the zip file.</p>
<p>If you are not familiar with this script, I suggest you read my previous post on how to make a <a href="http://katratxo.wordpress.com/2010/02/22/snapshot-instance/">snapshot of your Openbravo instance</a></p>
<p>I tested in some recent revision from <a href="http://code.openbravo.com/erp/devel/pi">pi</a>, and excluding Mercurial metadata and the resulting zip file is almost 350MB smaller!</p>
<p><pre class="brush: plain;">
~/workspace/src/openbravo $ ls -lh openbravo-2011*
-rw-r--r-- 1 iperdomo iperdomo 254M Jan  5 11:04 openbravo-2011-01-05_11-02-07.zip
-rw-r--r-- 1 iperdomo iperdomo 603M Jan  5 11:19 openbravo-2011-01-05_11-10-58.zip
</pre></p>
<h2>How it works?</h2>
<p>You just need to append the property with the list of excluding patterns in the ant call, e.g. Let&#8217;s exclude all the .hg folder</p>
<p><pre class="brush: plain;">
~/workspace/src/openbravo/pi $ ant -f snapshot.xml -Dexclude=&quot;.hg/**&quot;
</pre></p>
<p>The <strong>exclude</strong> property is passed directly to the <strong>Zip</strong> task. In order to understand how can you define exclusion patters read the <a href="http://ant.apache.org/manual/Tasks/zip.html">Zip task documentation</a></p>
<p>Happy new year!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/265/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=265&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2011/01/06/update-snapshot-openbravo-instance/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>
	</item>
		<item>
		<title>Running JSLint as Mercurial precommit hook</title>
		<link>http://katratxo.wordpress.com/2010/12/13/running-jslint-as-hg-precommit-hook/</link>
		<comments>http://katratxo.wordpress.com/2010/12/13/running-jslint-as-hg-precommit-hook/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 16:57:43 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[precommit hook]]></category>
		<category><![CDATA[jslint]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=236</guid>
		<description><![CDATA[JSLint is a tool that helps you identify potential problems in JavaScript code. Some experienced developers may disagree with the coding style enforced by the tool, but if you are beginning with JavaScript this tool helps you stay out of troubles. Mercurial hooks Mercurial offers a powerful mechanism to let you perform automated actions in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=236&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jslint.com">JSLint</a> is a tool that helps you identify potential problems in JavaScript code. Some experienced developers may disagree with the coding style enforced by the tool, but if you are beginning with JavaScript this tool helps you stay out of troubles.</p>
<h2>Mercurial hooks</h2>
<blockquote>
<p>Mercurial offers a powerful mechanism to let you perform automated actions in response to events that occur in a repository &#8230;</p>
<p><a href="http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html">Mercurial: The Definitive Guide</a></p>
</blockquote>
<p>The idea is to automatically check all the modified JavaScript files when trying to perform a commit. If the tool (JSLint) complains on at least on file, the commit is aborted.</p>
<h2>The components</h2>
<h3>jslint4java</h3>
<p><a href="http://code.google.com/p/jslint4java/">jslint4java</a> is just a Java wrapper around JSLint and gives you the possibility to run it command line, e.g.:</p>
<p><pre class="brush: bash;">
java -jar jslint4java-1.4.4.jar application.js
jslint:application.js:11:9:Line breaking error ')'.
jslint:application.js:11:10:Missing semicolon.
</pre></p>
<p>Some of the options are for the tool are:</p>
<p><pre class="brush: bash;">
Usage: jslint4java [options] file.js ...
Options:
--adsafe    If adsafe should be enforced
--bitwise   If bitwise operators should not be allowed
--browser   If the standard browser globals should be predefined
--cap       If upper case html should be allowed
--css       If css workarounds should be tolerated
--debug     If debugger statements should be allowed
--devel     If logging should be allowed (console, alert, etc.)
--encoding  Specify the input encoding
--eqeqeq    If === should be required
--es5       If es5 syntax should be allowed
--evil      If eval should be allowed
# Many more (...)
</pre></p>
<h3>jslint</h3>
<p><em>jslint</em> is a shell script wrapper for calling jslint4java, e.g.</p>
<p><pre class="brush: bash;">
#!/bin/sh
# Note: Modify the path where the .jar is located
java -jar /home/iperdomo/tools/jslint4java/jslint4java-1.4.4.jar --evil $1
</pre></p>
<h3>jscheck-hg</h3>
<p><em>jscheck-hg</em> is a simple shell script that checks for modified or added JavaScript files and jslint them</p>
<p><pre class="brush: bash;">
#!/bin/sh
# Note: Modify the path location for jslint (the previous script)
hg st -man | awk '/.js$/' | xargs -rn1 path/to/jslint || exit 1
</pre></p>
<h2>Defining jscheck-hg as precommit hook</h2>
<p>With all the components in place, you just need to add the hook to the repository metadata, for this modify the <strong>.hg/hgrc</strong> file, e.g.</p>
<p><pre class="brush: bash;">
[hooks]
precommit = /path/to/jscheck-hg
</pre></p>
<h2>Openbravo specifics</h2>
<p>Last <a href="http://sourceforge.net/mailarchive/message.php?msg_id=26730923">Friday</a>, the modules for 3.0 were <em>merged</em> into <em>pi</em>, so all the components required for setting this hook are already in the repository. <em>jslint4java</em>, <em>jslint</em>, <em>jscheck-hg</em> are part of the <strong>org.openbravo.client.kernel</strong> module.</p>
<p>You just need to add the precommit hook to your repository using the <em>jscheck-hg</em> available in <em>org.openbravo.client.kernel/jslint</em>. Open your <strong>.hg/hgrc</strong> and add the following lines:</p>
<p><pre class="brush: bash;">
[hooks]
precommit = ./modules/org.openbravo.client.kernel/jslint/jscheck-hg
</pre></p>
<p>That&#8217;s all. Now every commit that contains a JavaScript file modification, it needs to pass the JSLint check.</p>
<p>Happy coding!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/236/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=236&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2010/12/13/running-jslint-as-hg-precommit-hook/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>
	</item>
		<item>
		<title>Development tips &#8211; Part II</title>
		<link>http://katratxo.wordpress.com/2010/08/20/development-tips-part-ii/</link>
		<comments>http://katratxo.wordpress.com/2010/08/20/development-tips-part-ii/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 08:59:03 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=223</guid>
		<description><![CDATA[In Part I I explained how to: Speed up Firefox by creating a different profile for Firebug and &#8216;vacuum&#8217; the browser&#8217;s internal databases Update to the latest &#8216;safe&#8217; pi revision Clean up your Mercurial workspace You also know how to configure the Autologon authentication manager that allows you login the application with the same user/password [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=223&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://katratxo.wordpress.com/2010/01/15/development-tips-i/">Part I</a> I explained how to:</p>
<ul>
<li>Speed up Firefox by creating a different profile for Firebug and &#8216;vacuum&#8217; the<br />
  browser&#8217;s internal databases</li>
<li>Update to the latest &#8216;safe&#8217; pi revision</li>
<li>Clean up your Mercurial workspace</li>
</ul>
<p>You also know how to configure the <a href="http://katratxo.wordpress.com/2009/12/06/autologon-auth-manager/">Autologon authentication manager</a> that allows you login the application with the same user/password skipping the login page.</p>
<p>Today we&#8217;ll focus in speeding up the compilation process using just some configuration properties that will result in skipping some tasks that are not required in the day-to-day development process.</p>
<p><strong>Note:</strong> I assume that you are working with Eclipse IDE, you have successfully build the application and also you have experience how to compile the application. If you don&#8217;t know how to do that, please read the <a href="http://ln-s.net/7UhL">how to setup your development environment</a> in the wiki.</p>
<h2>The Openbravo.properties</h2>
<p>The Openbravo.properties file is use to configure the application, e.g. database connection details, date format, etc. But also have properties for the build process and tweaking them allows you skip some tasks when compiling.</p>
<p>You can read more about the <a href="http://wiki.openbravo.com/wiki/ERP/2.50/Openbravo.properties">Openbravo.properties</a> in the wiki page.</p>
<p><strong>Note:</strong> Remember to always read documents in the <strong>ERP/2.50</strong> namespace, since all other documents may have been deprecated or are no longer maintained.</p>
<h3>minimizeJSandCSS</h3>
<p>Some time is spent in minimizing (compressing) the JavaScript and CSS files to the context. That&#8217;s why when running the application and you try to see the<br />
.js files everything is compressed without line breaks or spaces. The quick fix to skip this process is set to <strong>no</strong> the minimizeJSandCSS property.</p>
<p><pre class="brush: bash;">
# use js/css minimization (in local-context and war-file)
minimizeJSandCSS=no
</pre></p>
<h3>deploy.mode</h3>
<p>The deploy.mode defines where the build process needs to copy files and if it needs to generate a .war file. The default deploy.mode is <strong>class</strong>, so in every compilation call the files are sync&#8217;ed with the $CATALINA_BASE/webapps/context folder.</p>
<p>Since you are working with Eclipse the tomcat server you&#8217;re using is the one inside Eclipse, the $CATALIBA_BASE/webapps/context is not used at all, instead, the files are read from the <em>WebContent</em> and <em>build</em> folders.</p>
<p>Setting to <strong>none</strong> the deploy.mode will skip the sync of the files, and also will not generate a .war file.</p>
<p><pre class="brush: bash;">
#Deploy mode: valid values [class, war, none]
deploy.mode=none
</pre></p>
<h2>Wrapping up</h2>
<p>Setting <strong>minimizeJSandCSS=no</strong> and <strong>deploy.mode=none</strong> will speed up the day-to-day compilation process.</p>
<p>Remember that this changes recommended just for development environments not for production ones.</p>
<p>Stay tunned!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=223&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2010/08/20/development-tips-part-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>
	</item>
		<item>
		<title>Call for testing: the new Openbravo Mandriva package</title>
		<link>http://katratxo.wordpress.com/2010/06/28/testing-mandriva-package/</link>
		<comments>http://katratxo.wordpress.com/2010/06/28/testing-mandriva-package/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 09:36:34 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[announcements]]></category>
		<category><![CDATA[mandriva]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=211</guid>
		<description><![CDATA[dlucio, an Openbravo community member, has build a Mandriva package for Openbravo ERP. The Openbravo&#8217;s product development team is fully focused on testing in the following GNU/Linux distributions: Ubuntu rPath Gentoo (in some development environments) You can see the full list in the System Requirements page. If you are a Madriva user or developer, give [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=211&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.okay.com.mx">dlucio</a>, an Openbravo community member, has build a <a href="http://www.mandriva.org">Mandriva</a> package for Openbravo ERP.</p>
<p>The Openbravo&#8217;s product development team is fully focused on testing in the following GNU/Linux distributions:</p>
<ul>
<li>Ubuntu</li>
<li>rPath</li>
<li>Gentoo (in some development environments)</li>
</ul>
<p>You can see the full list in the <a href="http://wiki.openbravo.com/wiki/ERP/2.50/System_Requirements">System Requirements</a> page.</p>
<p>If you are a Madriva user or developer, give dlucio&#8217;s package a try.</p>
<h2>Installation instructions</h2>
<p>Download the following packages:</p>
<pre><code>http://kenobi.mandriva.com/~dlucio/ossp_uuid-1.6.2-1mdv2010.1.src.rpm

http://kenobi.mandriva.com/~dlucio/postgresql8.4-8.4.4-2mdv2010.1.src.rpm

http://kenobi.mandriva.com/~dlucio/openbravo-2.50-6mdv2010.1.src.rpm

</code></pre>
<p>Recompile the ossp_uuid package</p>
<pre><code>rpm --rebuild ossp_uuid-1.6.2-1mdv2010.1.src.rpm

</code></pre>
<p>If you have missing dependencies you&#8217;ll get prompted. This will produce the folder:</p>
<pre><code>~/rpmbuild/RPM/$ARCH/
</code></pre>
<p>You need to repeat the process with the other *.src.rpm files</p>
<p>Then you install the rpms using: urpmi</p>
<h3>Installation paths</h3>
<p>By default the Openbravo ERP is installed in:</p>
<pre><code>/usr/share/tomcat6/webapps/openbravo
</code></pre>
<p>The source code is installed in:</p>
<pre><code>/usr/src/openbravo
</code></pre>
<h2>README.mandriva</h2>
<p>The package contains valuable information of additional configuration if you want to install modules in your instance.</p>
<h2>Tested versions</h2>
<p>dlucio has tested the this package using Mandriva 2010 and 2010.1 (cooker)</p>
<h2>We want your feedback</h2>
<p>Give it a try and use the <a href="http://ln-s.net/7$M6">Early Releases</a> forum to give us feedback and suggestions. Remember that this is a community effort and the support will be provided by the community.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=211&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2010/06/28/testing-mandriva-package/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>
	</item>
		<item>
		<title>New Selectors webinar &#8211; March 11th, 2010</title>
		<link>http://katratxo.wordpress.com/2010/03/03/new-selectors-webinar/</link>
		<comments>http://katratxo.wordpress.com/2010/03/03/new-selectors-webinar/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 17:40:41 +0000</pubDate>
		<dc:creator>katratxo</dc:creator>
				<category><![CDATA[Openbravo]]></category>
		<category><![CDATA[announcements]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">http://katratxo.wordpress.com/?p=201</guid>
		<description><![CDATA[Hi all, The Openbravo&#8217;s Platform Team is happy to announce the next webinar in our series, &#8220;New Selectors&#8221;. It will be held on next Thursday March, 11th from 16h to 17h (CET). The session will be time-boxed to one hour with the following agenda: Overview Module functional demonstration Technical architecture &#8211; Focused on SmartClient integration [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=201&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hi all,</p>
<p>The Openbravo&#8217;s Platform Team is happy to announce the next webinar in our series, &#8220;New Selectors&#8221;. It will be held on next <strong>Thursday March, 11th from 16h to 17h (CET)</strong>.</p>
<p>The session will be time-boxed to one hour with the following agenda:</p>
<ul>
<li>Overview</li>
<li>Module functional demonstration</li>
<li>Technical architecture &#8211; Focused on SmartClient integration</li>
<li>Q&amp;A</li>
</ul>
<p>You can join the session through this link:</p>
<p><a href="http://openbravo.emea.acrobat.com/r96401077/">http://openbravo.emea.acrobat.com/r96401077/</a></p>
<p>If you have never used Adobe Connect Pro before you should test your connection in advance: </p>
<p><a href="http://openbravo.emea.acrobat.com/common/help/en/support/meeting_test.htm" target="_blank">http://openbravo.emea.acrobat.com/common/help/en/support/meeting_test.htm</a></p>
<p>The session is open to everybody but limited to one hundred (100) participants. Attendees will be accepted from 15:45 (CET). </p>
<p>This webinar will be recorded and published in the <a href="http://wiki.openbravo.com/wiki/ERP/2.50/Extension_Module_Demonstrations_Videos">Extension Module Demonstrations Videos</a> section of the Openbravo Developers Guide. </p>
<p>We look forward to see you in the session.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katratxo.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katratxo.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katratxo.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katratxo.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/katratxo.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/katratxo.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/katratxo.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/katratxo.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katratxo.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katratxo.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katratxo.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katratxo.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katratxo.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katratxo.wordpress.com/201/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katratxo.wordpress.com&amp;blog=6756513&amp;post=201&amp;subd=katratxo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://katratxo.wordpress.com/2010/03/03/new-selectors-webinar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f4608eea9143b6a43b082a13789e6e81?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katratxo</media:title>
		</media:content>
	</item>
	</channel>
</rss>
