<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet Eclipse</title>
	<link>http://planeteclipse.org/planet/</link>
	<language>en</language>
	<description>Planet Eclipse - http://planeteclipse.org/planet/</description>

<item>
	<title>Ian Skerrett: Eclipse Stories: Cell Biosciences</title>
	<guid isPermaLink="false">http://ianskerrett.wordpress.com/?p=1670</guid>
	<link>http://feedproxy.google.com/~r/IanSkerrett/~3/DkkM-nAnHWY/</link>
	<description>&lt;p&gt;As I &lt;a href=&quot;http://ianskerrett.wordpress.com/2010/09/01/tell-us-your-eclipse-story-win-a-pass-to-javaone/&quot;&gt;mentioned yesterday&lt;/a&gt;, we want to encourage people to tell their Eclipse story.  Last week Cell Biosciences told their story at the &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010&quot;&gt;Eclipse Day at the Googleplex&lt;/a&gt;.   You can &lt;a href=&quot;http://wiki.eclipse.org/images/9/93/CellbioEclipseDay.pdf&quot;&gt;view their entire presentation&lt;/a&gt; but I have added a summary on the &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Stories&quot;&gt;Eclipse Story wiki &lt;/a&gt;and below.&lt;/p&gt;
&lt;p&gt;btw, Cell Biosciences is looking a great Eclipse developer to join their team.  Check out the presentation for details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eclipse Story&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Title: Protein Analysis with Eclipse RCP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; Cell Biosciences&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cellbiosciences.com/index.html&quot;&gt;Cell Biosciences&lt;/a&gt; is a company that provides instruments and software  to analyze the proteins in the human body.  Their systems help life  science researchers in research institutions and  pharmaceutical/biotechnology companies.&lt;/p&gt;
&lt;p&gt;Cell Bioscience uses Eclipse RCP to create desktop applications  to analyze the data sent from their imaging machines. The RCP based  application use allows researchers to setup, run and analyze data  experiments.  The applications feature graphs, images and tables of data  that can be sliced in different ways.&lt;/p&gt;
&lt;p&gt;In addition to RCP, Cell Bioscience uses Eclipse as their  development tool platform.  Their systems include Java, Python,  Javascript and C/C++ code.  To support their development needs they use  PyDev, Subclipse, Egit, JUnit, SWT Bot, TPTP Test and Performance, WTP  WSDL editing and Aptana for Javascript.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ianskerrett.wordpress.com&amp;amp;blog=405862&amp;amp;post=1670&amp;amp;subd=ianskerrett&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 02 Sep 2010 20:10:36 +0000</pubDate>
</item>
<item>
	<title>Heiko Seeberger: SLF4S - Logging the Scala way</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5453594210552123250.post-8931739648059375004</guid>
	<link>http://heikoseeberger.blogspot.com/2010/09/slf4s-logging-scala-way.html</link>
	<description>Do we need another logging framework in the Java/Scala world? Certainly not! As Scala is fully &quot;downward&quot; compatible to Java, we can use whatever Java logging solution we want. And there are many, aren't there?.&lt;br /&gt;&lt;br /&gt;So why &lt;a href=&quot;http://github.com/weiglewilczek/slf4s&quot;&gt;SLF4S&lt;/a&gt;? Well, SLF4S isn't another logging framework, but a very thin Scala wrapper around SLF4J which has emerged as the leading Java logging solution. Why do we need a Scala wrapper for SLF4S? Well, there are some nice Scala features that can make logging even easier and/or more performant.&lt;br /&gt;&lt;br /&gt;First, SLF4J &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt;s use by-name parameters which are only evaluated if needed/accessed. When logging &quot;traditionally&quot;, we often create messages by concatenating Strings or using the &lt;span style=&quot;font-style: italic;&quot;&gt;String.format&lt;/span&gt; method, even if we don't need these messages in the end because the logging level is not enabled. Of course we could &quot;manually&quot; check whether the logging level is enabled, e.g. by calling &lt;span style=&quot;font-style: italic;&quot;&gt;logger.isDebugEnabled&lt;/span&gt;, but we often don't, because it's cumbersome. With by-name parameters we can simply call our log methods and let SLF4S check whether the log level is enabled. Just take a look at one example:&lt;br /&gt;&lt;pre&gt;def debug(msg: =&amp;gt; String) {&lt;br /&gt; require(msg != null, &quot;msg must not be null!&quot;)&lt;br /&gt; if (slf4jLogger.isDebugEnabled) slf4jLogger debug msg&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Second, SLF4S offers a &lt;span style=&quot;font-style: italic;&quot;&gt;Logging&lt;/span&gt; trait which can be mixed into any class to make a &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt; instance available. That particular &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt; will be initialized with the name of the class it is mixed into which is a common use case.&lt;br /&gt;&lt;pre&gt;class MyClazz extends SomeClazz with Logging&lt;br /&gt;  ...&lt;br /&gt;  logger debug &quot;SLF4S just rocks!&quot;&lt;br /&gt;  ...&lt;/pre&gt;&lt;br /&gt;Of course you can create &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt;s with arbitrary names by calling &lt;span style=&quot;font-style: italic;&quot;&gt;Logger(&quot;SomeSpecialName&quot;)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Last but not least, SLF4S offers implicit conversions from &quot;usual&quot; SLF4J &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt;s into &quot;pimped&quot; SLF4S &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt;s.&lt;br /&gt;&lt;br /&gt;Ah, and of course, SLF4S is &lt;a href=&quot;http://www.osgi.org&quot;&gt;OSGi&lt;/a&gt; compliant. But that's not a big surprise, taking into account that the authors are OSGi fanboys and SLF4J is OSGi compliant, too.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5453594210552123250-8931739648059375004?l=heikoseeberger.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 19:17:53 +0000</pubDate>
	<author>noreply@blogger.com (Heiko Seeberger)</author>
</item>
<item>
	<title>Scott Lewis: Asynchronous Remote Services - choices, choices</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-20358640.post-6474893909504066442</guid>
	<link>http://eclipseecf.blogspot.com/2010/09/asynchronous-remote-services-choices.html</link>
	<description>In &lt;a href=&quot;http://www.eclipse.org/ecf&quot;&gt;ECF&lt;/a&gt;'s &lt;a href=&quot;http://www.eclipse.org/ecf/downloads.php&quot;&gt;Helios release&lt;/a&gt;, we released an implementation of the &lt;a href=&quot;http://wiki.eclipse.org/ECF#OSGi_4.2_Remote_Services&quot;&gt;OSGi remote services&lt;/a&gt; standard specification (chapter 13 in compendium).&lt;br /&gt;&lt;br /&gt;In addition to the full spec implementation...which is based upon synchronous remote service proxies...we added support for &lt;a href=&quot;http://wiki.eclipse.org/Asynchronous_Proxies_for_Remote_Services&quot;&gt;asynchronous remote services&lt;/a&gt;.  This provides non-blocking access to remote OSGi services.  This gives remote service consumers choices...allowing them to invoke remote services synchronously (i.e. by making a blocking method call on the proxy), and/or asynchronously (with a guarantee that the calling thread will not block).&lt;br /&gt;&lt;br /&gt;I think that one nice thing about this approach is that the service host implementer has to do exactly &lt;span style=&quot;font-weight: bold;&quot;&gt;nothing&lt;/span&gt; to make these consumer choices available.  The implementation of the service host is exactly the same.&lt;br /&gt;&lt;br /&gt;There are &lt;a href=&quot;http://eclipseecf.blogspot.com/2010/04/asynchronous-remote-services-future-or.html&quot;&gt;two styles of asynchronous&lt;/a&gt; access supported:  an asynchronous callback (like &lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;GWT&lt;/a&gt;), and a future result, from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Actor_model&quot;&gt;Actor model&lt;/a&gt; of computation.  These two styles of of asynchronous access...along with the specified synchronous proxy...provides remote services consumers with some useful choices for creating reliable distributed systems and applications.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/20358640-6474893909504066442?l=eclipseecf.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 14:56:05 +0000</pubDate>
	<author>noreply@blogger.com (Scott Lewis)</author>
</item>
<item>
	<title>Chris Aniszczyk: The Value of Documentation in Open Source</title>
	<guid isPermaLink="false">http://aniszczyk.org/?p=2655</guid>
	<link>http://aniszczyk.org/2010/09/02/the-value-of-documentation-in-open-source/</link>
	<description>&lt;p&gt;I’ve been starting a lot of documentation work lately for the &lt;a href=&quot;http://eclipse.org/egit&quot;&gt;EGit&lt;/a&gt;/JGit projects and happened to come across this timely &lt;a href=&quot;http://www.forbes.com/2010/08/07/customer-service-fulkerson-technology-documentation.html&quot;&gt;article&lt;/a&gt; from Forbes. If you don’t want to read it, the gist of it is that solid documentation is more important than you think… especially when it comes to attracting a user and developer base. Here are some quotes…&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“I can report that my company receives 70% plus of our site traffic from  organic sources, and our documentation generates more than half of our overall site traffic. Furthermore, over half of our lead generation is driven by our documentation.”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;While the article specifically mentions commercial software, I think the lesson of having solid and findable documentation apply to the open source realm. I mean, when’s the last time you’ve come across an open source project that you praised their documentation efforts? I can maybe count two total in my lifetime. As open source developers and project leads, we tend to put documentation last and our expectation is that users would pitch in to help. As users, we just want good documentation and don’t believe it’s our responsibility to help out necessarily…&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://aniszczyk.org/wp-content/uploads/2010/09/userexpectations.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-2658&quot; height=&quot;226&quot; src=&quot;http://aniszczyk.org/wp-content/uploads/2010/09/userexpectations.jpg&quot; title=&quot;user expectations&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So next time you’re working on that feature, weigh it versus taking some time to document things for your users. If you’re in Eclipse land, feel free to take a look at our &lt;a href=&quot;http://wiki.eclipse.org/DocumentationGuidelines&quot;&gt;documentation guidelines&lt;/a&gt; and some &lt;a href=&quot;http://wiki.eclipse.org/DocumentationGuidelines/Example&quot;&gt;examples&lt;/a&gt; on how to crowdsource your documentation efforts a bit.&lt;/p&gt;</description>
	<pubDate>Thu, 02 Sep 2010 14:52:25 +0000</pubDate>
</item>
<item>
	<title>Birt World: BIRT Image - Report Item</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-14521551.post-1124913252605750277</guid>
	<link>http://birtworld.blogspot.com/2010/09/birt-image-report-item.html</link>
	<description>BIRT has many ways to include images within a report.  Images can be used in BIRT styles, as watermarks, in text elements, and placed within the report using an image report item.  In this post I will cover some of the details needed to work with images that are inserted using the Image report item. &lt;br /&gt; &lt;br /&gt;The image report item can retrieve images in four different ways.  1 -Through a URI, 2 – as an image in the resource folder, 3 – as an embedded image, 4 -or by using a dynamic image.  Each of these methods is described below with examples.  In addition some of the examples use onCreate scripts written in JavaScript.  While these examples use JavaScript, they could also have been written in Java.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-wusVg6aI/AAAAAAAAAP4/-hYccM6JXKI/s1600/palette.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5512318785146644898&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-wusVg6aI/AAAAAAAAAP4/-hYccM6JXKI/s400/palette.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 262px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;URI Images&lt;/em&gt;&lt;br /&gt;The first way is to retrieve an image with the image report item is to use a URI specification.  This method is pretty straight forward and the value can be entered as a constant or as a JavaScript expression.  Constants are processed faster by the engine but are harder to make dynamic.  An example of a constant expression for a URI image would be as follows:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;http://www.eclipse.org/eclipse.org-common/themes/Nova/images/eclipse.png  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Note: Do not put quotes around the expression unless JavaScript Syntax is selected.  An example of using a JavaScript expression is presented below.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if( params[&quot;dynamicimage&quot;].value == true ){&lt;br /&gt;&quot;http://www.google.com/intl/en_ALL/images/srpr/logo1w.png&quot;;&lt;br /&gt;}else{&lt;br /&gt;&quot;http://www.eclipse.org/eclipse.org-common/themes/Nova/images/eclipse.png&quot;;&lt;br /&gt;}&lt;br /&gt;This expression checks the value of the dynamicimage report parameter, and then based on its value, sets the value of the URI.&lt;br /&gt;The URI can also be set using an onCreate event handler for the image report item.  The syntax for this approach would look like:&lt;br /&gt;this.URI = &quot;http://tomcat.apache.org/images/tomcat.gif&quot;;&lt;br /&gt;&lt;br /&gt;//for a local file use: &lt;br /&gt;//this.URI = &quot;file://C:/test/birtlogo.png&quot;;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;em&gt;Resource Folder Images&lt;/em&gt;&lt;br /&gt;BIRT uses a resource folder for storing report libraries, style sheets, images, jars, js files, properties files or virtually any file that you will need access to at runtime.  While in the design environment the resource folder location can be set using the Windows-&amp;gt;Preferences-&amp;gt;Report Design-&amp;gt;Resource setting.  This can be set for the entire workspace or on a per project basis.  At runtime you can set the resource folder in the web.xml if you are using the viewer.  If you are using the engine API you can set the resource folder using the  EngineConfig class’ setResourcePath method.   When using a resource folder image, all that is needed is to specify the image name as it is defined in the resource folder.  You can also set a JavaScript expression for the image name.  For example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if( row[&quot;QUANTITYORDERED&quot;] &amp;gt; 30 ){&lt;br /&gt;&quot;green.png&quot;;&lt;br /&gt;}else if( row[&quot;QUANTITYORDERED&quot;] &amp;gt; 25  &amp;amp;&amp;amp; row[&quot;QUANTITYORDERED&quot;] &amp;lt;= 30){&lt;br /&gt;&quot;yellow.png&quot;;&lt;br /&gt;}else{&lt;br /&gt;&quot;red.png&quot;;&lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This expression checks the row data to determine which resource folder image should be rendered.  The same type of checks can be made if you are using the onCreate script event for the image element.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var myqty = this.getRowData().getColumnValue(&quot;QUANTITYORDERED&quot;);&lt;br /&gt;if( myqty &amp;gt; 30 ){&lt;br /&gt; this.file = &quot;green.png&quot;;&lt;br /&gt;}else if( myqty &amp;gt; 25  &amp;amp;&amp;amp; myqty &amp;lt;= 30){&lt;br /&gt; this.file =&quot;yellow.png&quot;;&lt;br /&gt;}else{&lt;br /&gt; this.file=&quot;red.png&quot;;&lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;One thing to note in the above is that the column value QUANTITYORDERED is the binding column name, not the dataset column name.  See the binding tab on the table in the attached example.  &lt;br /&gt;Images can also be placed in jar files within the resource folder.  If your image exists in a jar file, you can use a script expression similar to the following to specify the image to retrieve.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var jarfile = reportContext.getResource(&quot;birtimages.jar&quot;);&lt;br /&gt;myfulljarimage = &quot;jar:&quot;+jarfile.toString()+&quot;!/green.png&quot;;&lt;br /&gt;myfulljarimage;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The getResource method of the reportContext object is used to return the location of a file in the resource folder.   Using the location of the file and the jar protocol, the image can be specified.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Embedded Images&lt;/em&gt;&lt;br /&gt;BIRT allows images to be encoded directly into the xml report design.  Images can be added by right clicking on the embedded images icon in the outline view of the report and selecting “New Embedded Image”.  After selecting the image, the outline view is updated and the data for the image is encoded in to the design.  You can also add embedded images to the report using the add image button of the image report item editor.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-zLX55xpI/AAAAAAAAAQA/0SBiuSFbW-k/s1600/embedded.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5512321476901586578&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-zLX55xpI/AAAAAAAAAQA/0SBiuSFbW-k/s400/embedded.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 184px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once the images are embedded into the report, you can add the image report item to the desired location, choose the embedded image radial, select the image name and click the insert button.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-zctpUkMI/AAAAAAAAAQI/8FQtShUyHis/s1600/embedded2.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5512321774795395266&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-zctpUkMI/AAAAAAAAAQI/8FQtShUyHis/s400/embedded2.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 314px; height: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you wish to change the image dynamically, this can be done using an onCreate script.  In the onCreate script specify the image name using the imageName property.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;this.imageName = &quot;eyellow.png&quot;;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Dynamic Images&lt;/em&gt;&lt;br /&gt;Dynamic images allow Blob images to be inserted into the report.  Typically this type of image is tied to a data set column through either the image’s dataset bindings, or the container element’s bindings (eg Table).  The sample database, which is delivered as part of BIRT, contains a Blob type column in the PRODUCTLINES table.  The example report used in the post has an example of using this column in conjunction with the image report item.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-z2st0mFI/AAAAAAAAAQQ/S8IXYoqBBgI/s1600/blob.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5512322221222434898&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-z2st0mFI/AAAAAAAAAQQ/S8IXYoqBBgI/s400/blob.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 334px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A developer can also use an onCreate event script to set the image data.  When doing this, the image data should be in a byte[].  Presented below is an onCreate script that uses the ImageIO class to read a file, a URL, an image from the resource folder, or an image in a jar file in the resource folder.   Uncomment the section of the script for the desired image location. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;importPackage(Packages.java.io);&lt;br /&gt;importPackage(Packages.java.lang);&lt;br /&gt;importPackage(Packages.java.net);&lt;br /&gt;importPackage(Packages.javax.imageio);&lt;br /&gt;&lt;br /&gt;//File Based&lt;br /&gt;//var myfile = new Packages.java.io.File(&quot;c:/test/green.png&quot;);&lt;br /&gt;//var img = ImageIO.read(myfile);  &lt;br /&gt;&lt;br /&gt;//URL Based&lt;br /&gt;//Jar image in resource folder&lt;br /&gt;var jarfile = reportContext.getResource(&quot;birtimages.jar&quot;);&lt;br /&gt;var myfulljarimagestr = &quot;jar:&quot;+jarfile.toString()+&quot;!/red.png&quot;;&lt;br /&gt;var myurl = new Packages.java.net.URL(myfulljarimagestr);&lt;br /&gt;&lt;br /&gt;//Image in resource folder&lt;br /&gt;//var myurl = reportContext.getResource(&quot;green.png&quot;);&lt;br /&gt;&lt;br /&gt;//Image at url&lt;br /&gt;//var myurl = new Packages.java.net.URL(&quot;http://www.eclipse.org/eclipse.org-common/themes/Nova/images/eclipse.png&quot;);&lt;br /&gt;&lt;br /&gt;var img = ImageIO.read(myurl);&lt;br /&gt;bas = new ByteArrayOutputStream();&lt;br /&gt;ImageIO.write(img, &quot;png&quot;, bas);&lt;br /&gt;this.data = bas.toByteArray();&lt;br /&gt;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The example used for this post is available at &lt;a href=&quot;http://www.birt-exchange.org/org/devshare/designing-birt-reports/1257-birt-image-examples/&quot;&gt;Birt-Exchange&lt;/a&gt;.  To setup the example, copy the birtimages.jar and the three supplied images to your resource folder.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/14521551-1124913252605750277?l=birtworld.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 14:38:13 +0000</pubDate>
	<author>noreply@blogger.com (Jason Weathersby)</author>
</item>
<item>
	<title>Donald &amp; Ralph: Welcome SBB / CFF / FFS to the Eclipse Foundation</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3398028944247640209.post-8850274460859473004</guid>
	<link>http://eclipse-membership.blogspot.com/2010/09/welcome-sbb-cff-ffs-to-eclipse.html</link>
	<description>&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://mct.sbb.ch/mct/en/headgrafik_umwelt.jpg&quot; style=&quot;float: left; margin: 0 10px 10px 0; cursor: pointer; cursor: hand; width: 630px; height: 71px;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href=&quot;http://mct.sbb.ch/mct/en/konzern.htm&quot;&gt;Swiss Railway SBB&lt;/a&gt; has just recently joined the Eclipse Foundation as an Associate Member.&lt;br /&gt;&lt;br /&gt;Transporting 327.5 million passengers and 50 million net tons of freight every year the company is by far the biggest travel and transport company in Switzerland.&lt;br /&gt;&lt;br /&gt;Having experienced their great services for the time I was living in Switzerland I appreciate very much that this very service oriented organization has become a large consumer of the Eclipse platform and Eclipse related services.&lt;br /&gt;&lt;br /&gt;We have seen presentations of their applications on various occasions such as the &lt;a href=&quot;http://eclipsesummit.org&quot;&gt;Eclipse Summit&lt;/a&gt;, and we look forward to an even closer relationship with SBB through the newly signed membership.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3398028944247640209-8850274460859473004?l=eclipse-membership.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 13:13:13 +0000</pubDate>
	<author>noreply@blogger.com (Ralph Mueller)</author>
</item>
<item>
	<title>JFace Data Binding Team: A new direction for bindings?</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1759528437624391151.post-2978583799469292489</guid>
	<link>http://fire-change-event.blogspot.com/2010/09/new-direction-for-bindings.html</link>
	<description>&lt;p&gt;I'm happy to report that I've been given company approval to port the relevant components of our Flex data binding library back to Eclipse Data Binding.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I haven't started the actual port yet--there are still some concepts on the Flex side that are not a perfect match to Java and existing idioms in Eclipse Data Binding. You'll see what I mean.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To avoid conflating the port to Java with the general API I'm going to just present what the Flex API looks like.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.from(source, &quot;foo&quot;)&lt;br /&gt;      .to(target, &quot;bar&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;This binding watches the source.foo property, and writes the new value to target.bar each time a change it detected. Now add some validation and conversion magic:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.from(source, &quot;foo&quot;)&lt;br /&gt;      .validate(Validators.stringToNumber)&lt;br /&gt;      .convert(Converters.stringToNumber)&lt;br /&gt;      .validate(Validators.greaterEqual(0))&lt;br /&gt;      .validate(Validators.lessThan(10))&lt;br /&gt;      .to(target, &quot;bar&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Here we've added several additional steps in the pipeline.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; After source.foo changes, we first validate that the string can be converted to a number. If so the pipeline continues to the next step, and terminates otherwise.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Next we convert the string to a number&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Now validate that the number is greater than or equal to zero. If so the pipeline continues to the next step, and terminates otherwise.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Now validate that the number is less than 10. If so the pipeline continues and the number, now verified to be in the range [0,10), is written to target.bar.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now suppose our binding is misbehaving somehow, and we want to troubleshoot. We can add logging steps to the pipeline in between the other steps so we can see exactly what is going on:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.from(source, &quot;foo&quot;)&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;source.foo == {0}&quot;)&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;validate {0} is a number&quot;)&lt;br /&gt;      .validate(Validators.stringToNumber)&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;convert {0} to a number&quot;)&lt;br /&gt;      .convert(Converters.stringToNumber)&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;validate {0} &amp;gt;= 0&quot;)&lt;br /&gt;      .validate(Validators.greaterEqual(0))&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;validate {0} &lt;br /&gt;&lt;br /&gt;      .validate(Validators.lessThan(10))&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;set target.bar = {0}&quot;)&lt;br /&gt;      .to(target, &quot;bar&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;(In Flex, string formatting is done with {n} format instead of the %s syntax which Java inherited from C. The log statement passes the values in the pipeline as additional arguments which you can reference in log statements.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;These log steps are a real lifesaver for tracking down and squashing bugs in your binding code.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you've already worked with Eclipse Data Binding you may have noticed something else: you are no longer constrained to the standard data-binding pipeline. You are free to add steps in the pipeline wherever you like and in any order you like.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Next up is two-way bindings. The bind class provides a twoWay method which connects two bindings to the other one's starting point:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.twoWay(&lt;br /&gt;      Bind.from(source, &quot;foo&quot;),&lt;br /&gt;      Bind.from(target, &quot;bar&quot;) );&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;is equivalent to:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  var lock:Lock = new Lock();&lt;br /&gt;  Bind.from(source, &quot;foo&quot;)&lt;br /&gt;      .lock(lock)&lt;br /&gt;      .to(target, &quot;bar&quot;);&lt;br /&gt;  Bind.from(target, &quot;bar&quot;)&lt;br /&gt;      .lock(lock)&lt;br /&gt;      .to(target, &quot;foo&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Notice that each binding has a &quot;lock&quot; step in the pipeline. Only one binding can hold a lock at a time. This solves the common infinite loop problem:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; source.foo changes. binding one executes, writing the value to target.bar&lt;br /&gt;&lt;/li&gt;&lt;li&gt; target.bar changes. binding two executes, writing the value to source.foo&lt;br /&gt;&lt;/li&gt;&lt;li&gt; source.foo changes. binding one executes, writing the value to target.bar&lt;br /&gt;&lt;/li&gt;&lt;li&gt; ...&lt;br /&gt;&lt;/li&gt;&lt;li&gt; stack overflow!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Since only one binding can hold the lock at a time, this is what happens instead:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; source.foo changes. binding one acquires the lock and executes, writing the value to target.bar&lt;br /&gt;&lt;/li&gt;&lt;li&gt; target.bar changes. binding two attempts to acquire the lock but it is already acquired. binding two aborts.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; binding one releases the lock&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;You should never add the same lock more than once to a single binding, since that would guarantee that the binding will never run.&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Two-way bindings can use validations, conversions, logging, locks etc just like regular one-way bindings (since two-way bindings are just two one-way bindings wired up to eachother):&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.twoWay(&lt;br /&gt;      Bind.from(person, &quot;birthDate&quot;)&lt;br /&gt;          .convert(Converters.dateToString(dateFormat))&lt;br /&gt;      Bind.from(heightText, &quot;text&quot;)&lt;br /&gt;          .validate(Validators.stringToDate(dateFormat))&lt;br /&gt;          .convert(Converters.stringToDate(dateFormat))&lt;br /&gt;          .validate(Validators.lessEqual(now))&lt;br /&gt;      );&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;We usually leave out the validations in the model-to-UI bindings. It's usually only important to apply validations when you're copying data back from the UI to the model, to make sure domain constraints are satisfied, such as ensuring that a birth date occurred in the past.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;And now for my favorite part: binding from multiple sources, to multiple destinations. Raise your hand if you have ever had to wire up a UI form like this:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Is there a foo? (o) Yes  ( ) No &amp;lt;-- fooRadioGroup&lt;br /&gt;&lt;br /&gt;  Enter bar: ____________________ &amp;lt;-- barText&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Requirements:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt; fooRadioGroup.selectedItem is bound to model.foo (a boolean)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; barText.text is bound to model.bar (a string)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; barText must be enabled iff fooRadioGroup selection is Yes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; When the user clicks &quot;No,&quot; set model.bar to null but do not clear the text box. If the user clicks &quot;Yes&quot; again, set model.bar back to the contents of barText&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Requirements 1 and 3 are easy:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  var fooLock:Lock = new Lock();&lt;br /&gt;  Bind.twoWay(&lt;br /&gt;      Bind.from(model, &quot;foo&quot;),&lt;br /&gt;      Bind.from(fooRadioGroup, &quot;selectedItem&quot;),&lt;br /&gt;      fooLock); // explicitly provide the lock, see more below&lt;br /&gt;&lt;br /&gt;  Bind.from(fooRadioGroup, &quot;selectedItem&quot;)&lt;br /&gt;      .to(barText, &quot;enabled&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Requirements 2 and 4 are kind of related to eachother. The model-to-UI binding is simple enough: just write the value straight across:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  var barLock:Lock = new Lock();&lt;br /&gt;  Bind.from(model, &quot;bar&quot;)&lt;br /&gt;      .lock(barLock)&lt;br /&gt;      .to(barText, &quot;text&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;However the inverse binding (UI-to-model) must also take fooRadioGroup.selectedItem into account to decide whether to write back barText.text (if Yes is selected) or null (if No is selected).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The Bind class has another trick up its sleeve:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.fromAll(&lt;br /&gt;&lt;br /&gt;      Bind.from(fooRadioGroup, &quot;selectedItem&quot;)&lt;br /&gt;          .lock(fooLock),&lt;br /&gt;&lt;br /&gt;      Bind.from(barText, &quot;text&quot;)&lt;br /&gt;&lt;br /&gt;      )&lt;br /&gt;      .lock(barLock)&lt;br /&gt;      .convert(function(foo:Boolean, bar:String):String {&lt;br /&gt;        return foo ? bar : null;&lt;br /&gt;      })&lt;br /&gt;      .to(model, &quot;bar&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Look closely. The binding pipelines that we pass to fromAll(...) become the arguments, in the order they are provided, to the converter and validator functions further down the pipeline. The first pipeline is from fooRadioGroup.selectedItem and therefore that boolean value is the first argument to the converter. Likewise, the barText.text pipeline is provided second, so that string value becomes the second argument to the converter.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The converter takes multiple values but returns only a single value. This is where those values get coalesced into a single value that we can write to the model--in this case, a String value or null.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The outer pipeline adds a locking step on barLock, which is expected since we need to prevent infinite loops between the last two pipelines. However we are also locking on fooLock, on the first of the inner pipelines. We had a problem with our bindings overwriting values in the UI depending on the order things were initialized.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It turned out that without that lock, if a new model object was set, then the foo binding would fire first. Thus model.foo was copied to fooRadioGroup.selectedItem. But that would trigger our last binding to execute, so if the new foo value was false, then the last binding would override anything in the text box and set null on the model.bar field, before the model.bar =&amp;gt; barText.text binding had a chance to execute!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A good rule of thumb is that any time you need to bind from multiple sources, you should make sure to create a lock to share between all the bindings to relate to the same field in the model.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Obviously there are several concepts that will have to be adapted to work elegantly with our existing APIs. Realms are a missing piece (Flex is single-threaded so we didn't even have to consider it). Also we would want to try to retrofit the existing binding classes to use this new API transparently, like we did with the transition from custom observables to custom properties.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So there you have it. This is my current vision of what Eclipse Data Binding should evolve toward.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Comments?&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1759528437624391151-2978583799469292489?l=fire-change-event.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 09:14:03 +0000</pubDate>
	<author>noreply@blogger.com (Matthew Hall)</author>
</item>
<item>
	<title>Ian Bull: OSGi in Dublin</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=4712</guid>
	<link>http://eclipsesource.com/blogs/2010/09/02/osgi-in-dublin/</link>
	<description>&lt;p&gt;If anybody is going to be in Dublin next Thursday (Sept 9th), I’ll be talking about OSGi, Software Modularity and Single Sourcing.  Details of the event can be found &lt;a href=&quot;http://www.isa-skillnet.com/Training_Courses/88#ss162&quot;&gt;here&lt;/a&gt;. If anybody is going to be in the area, let me know. I’d love to catch up with some Eclipse folks over a few frosty beverages.&lt;/p&gt;</description>
	<pubDate>Thu, 02 Sep 2010 05:11:27 +0000</pubDate>
</item>
<item>
	<title>Ian Bull: Help, I’m looking for directions — Eclipse Active Help</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=4708</guid>
	<link>http://eclipsesource.com/blogs/2010/09/02/help-im-looking-for-directions-eclipse-active-help/</link>
	<description>&lt;p&gt;I know Eclipse ‘Help’ is not a very exciting topic, but today I found myself working with a little known secret of Help.  Most people know that you can setup context sensitive help (Press F1 and bring up help for the specific workbench part under focus).   However, did you now you do the opposite?  That is, activate code in your RCP application from a link in Help?&lt;/p&gt;
&lt;p&gt;Here’s the use case:  Say you have created a chat client built on the Eclipse RCP Platform.  Like any good software engineer, you’ve created extensive help content.  In addition to &lt;strong&gt;Instructions&lt;/strong&gt;, you want to provide links that actually open the dialogs, or perform the actions. &lt;strong&gt;Active Help&lt;/strong&gt; is the solution.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/09/contact.png&quot;&gt;&lt;img alt=&quot;contact Help, Im looking for directions    Eclipse Active Help&quot; class=&quot;aligncenter size-full wp-image-4710&quot; height=&quot;328&quot; src=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/09/contact.png&quot; title=&quot;contact&quot; width=&quot;553&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;In this example, I’ve added a link that opens the “Add Contact” dialog, directly from the “Adding a Contact” Help page.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Doing this is extremely simple too. On the Java side, you simply need to implement the &lt;strong&gt;ILiveHelpAction&lt;/strong&gt;.  Then, on the help side you simply add the following JavaScript to your help contents:&lt;/p&gt;
&lt;pre&gt;&amp;lt;a href='javascript:liveAction(
	&quot;org.eclipsercp.hyperbola&quot;,
	&quot;org.eclipsercp.hyperbola.ActiveHelpOpenDialogAction&quot;,
	&quot;&quot;)'&amp;gt;Click here for a Message.&amp;lt;/a&amp;gt;&lt;/pre&gt;
&lt;p&gt;The only thing to keep in mind is that the Action is not executed on the UI thread, so you may need to synchronize this yourself.&lt;/p&gt;</description>
	<pubDate>Thu, 02 Sep 2010 04:13:40 +0000</pubDate>
</item>
<item>
	<title>Scott Kellicker: Contributing to JSDT #5: Launching the Product</title>
	<guid isPermaLink="false">http://kellicker.wordpress.com/?p=235</guid>
	<link>http://kellicker.wordpress.com/2010/09/01/contributing-to-jsdt-launching/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;48&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png?w=48&amp;amp;h=48&quot; title=&quot;javascript&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ll continue my instructions regarding how to set up JSDT development infrastructure.&lt;/p&gt;
&lt;h2&gt;Previously&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/contributing-to-jsdt-setting-up-build-target/&quot;&gt;I set up the build target&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/jsdt-setting-up-dev-environment/&quot;&gt;I checked out the code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-3-build-targets-on-the-bleeding-edge/&quot;&gt;I updated to the latest debug plugins&lt;/a&gt; to resolve compilation issues.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-4-launching-the-unit-tests/&quot;&gt;I launched the unit tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Now run the product&lt;/h2&gt;
&lt;p&gt;When I work on Eclipse products, we typically provide a default launch config per product.  Although the nightly build is the ultimate authority of what encompasses the product, these version-controlled launch files provide a good point of comparison developer to developer.&lt;/p&gt;
&lt;p&gt;I could not find a public JSDT .launch file under CVS control.&lt;/p&gt;
&lt;p&gt;So I looked at the installed JSDT product to create my own.  It’s &lt;a href=&quot;https://sites.google.com/site/kellicker/home/plugins/eclipse-resources/jsdt.launch?attredirects=0&amp;amp;d=1&quot;&gt;here&lt;/a&gt; if you would like to download it.&lt;/p&gt;
&lt;p&gt;Just drop it into an active project in your Eclipse workspace, refresh the project, open ‘Run Configurations” and you should see a “jsdt” run config.&lt;/p&gt;
&lt;p&gt;You may want to tweak it a bit and verify that the set of selected plugins is correct.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtlaunch.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-279&quot; height=&quot;339&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtlaunch.jpg?w=480&amp;amp;h=339&quot; title=&quot;jsdtLaunch&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then hit Run to see the JSDT.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtwelcome.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-278&quot; height=&quot;360&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtwelcome.jpg?w=480&amp;amp;h=360&quot; title=&quot;jsdtWelcome&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Disclaimer: I’m not on the JSDT team, so this may not be exactly how they do it.  But it’s what I’ve done to get it working.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kellicker.wordpress.com&amp;amp;blog=6950485&amp;amp;post=235&amp;amp;subd=kellicker&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Sep 2010 22:17:02 +0000</pubDate>
</item>
<item>
	<title>Ian Skerrett: Tell Us Your Eclipse Story: Win a Pass to JavaOne</title>
	<guid isPermaLink="false">http://ianskerrett.wordpress.com/?p=1667</guid>
	<link>http://feedproxy.google.com/~r/IanSkerrett/~3/WEC41EcYzbA/</link>
	<description>&lt;p&gt;Lots of people are doing incredible things with Eclipse. People are  building amazing applications that embedded Eclipse technology.   Companies have standardized on Eclipse as their development tools  platform. Students and researchers are using Eclipse for creating some very cool new technology.&lt;/p&gt;
&lt;p&gt;As with any open source community, sharing information is  critical to fostering  a healthy and strong community.  Sharing how you use  Eclipse will help other people realize the full potential of Eclipse  technology.  More people using Eclipse technology will lead to more potential contributors, more contributors mean more people working on Eclipse projects.&lt;/p&gt;
&lt;p&gt;We want you to share your Eclipse story with the community. I’ve started a &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Stories&quot;&gt;wiki page&lt;/a&gt; to allow individuals and companies to tell the  community how they use Eclipse.  Tell us what type of applications you  build, what Eclipse technology you use and what you like about Eclipse.    You can tell us your personal story or tell us what your company is  doing.  Just &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Stories&quot;&gt;tell us your story.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To encourage early stories, the Eclipse Foundation will raffle  off a full pass to the upcoming JavaOne 2010 conference to all who submitted a story.  To be included  in the raffle you need to submit your story on the wiki by September 9,  2010 at 1:00pmET and send me an e-mail (ian at eclipse dot org)&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ianskerrett.wordpress.com&amp;amp;blog=405862&amp;amp;post=1667&amp;amp;subd=ianskerrett&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Sep 2010 17:38:03 +0000</pubDate>
</item>
<item>
	<title>Chris Aniszczyk: AustinJUG and Eclipse 4.0</title>
	<guid isPermaLink="false">http://aniszczyk.org/?p=2648</guid>
	<link>http://aniszczyk.org/2010/09/01/austinjug-and-eclipse-4-0/</link>
	<description>&lt;p&gt;Last night I had the pleasure to speak at my local &lt;a href=&quot;http://austinjug.org/&quot;&gt;AustinJUG&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://aniszczyk.org/wp-content/uploads/2010/09/zx_austinjug.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-2649&quot; height=&quot;225&quot; src=&quot;http://aniszczyk.org/wp-content/uploads/2010/09/zx_austinjug-300x225.jpg&quot; title=&quot;AustinJUG Aniszczyk&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It was nice to catch up with some local folks and introduce people to some new Eclipse technology. In the end, we kind of got sidetracked and there was some good discussion about source control in the corporate environment versus what is going on in open source communities. Unfortunately, it seems Subversion has a stronghold in a lot of companies still. I hope our work in &lt;a href=&quot;http://eclipse.org/jgit&quot;&gt;JGit&lt;/a&gt; to make a &lt;a href=&quot;http://www.eclipse.org/org/documents/edl-v10.php&quot;&gt;liberally licensed&lt;/a&gt; Git library that runs everywhere will start swaying the tide…&lt;/p&gt;</description>
	<pubDate>Wed, 01 Sep 2010 15:38:14 +0000</pubDate>
</item>
<item>
	<title>Remy Suen: OSGi, language packs, and interval notations…</title>
	<guid isPermaLink="true">http://blog.hantsuki.org/2010/09/01/osgi-language-packs-and-interval-notations/</guid>
	<link>http://blog.hantsuki.org/2010/09/01/osgi-language-packs-and-interval-notations/</link>
	<description>&lt;p&gt;&lt;b&gt;Dunge:&lt;/b&gt; Hello there, sorry for the noob question. I installed Eclipse for Java (Helios) and JDK update 21, I’m trying to use the Blackberry SDK but when I install it it say I require org.eclipse.jdt.debug [3.5.0,3.6.0) first. I tried to find it in “install new software” or on the website, I can’t find anything&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: That BB plug-in wants Galileo not Helios.&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; “require org.eclipse.jdt.debug [3.5.0,3.6.0)”&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: 3.5.x corresponds to Galileo, 3.6.x corresponds to Helios&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; rcjsuen : you say 3.6.x for Helios, and they actually write 3.6.0 in the required message, so why should I revert to 3.5.0?&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: You must not have taken Calculus, or forgot about it.&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; [x,y) means x inclusive, y exclusive&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; i.e. 3.5.0 &amp;lt;= x &amp;lt; 3.6.0&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; should be [x,y[&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: I’ve never seen that notation. Where do they do that?&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; I just though it was a typo&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; hmm in my math classes? :)&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; [x,y[?&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; yeah&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: And where do you live? That’s what I meant. :)&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; lol&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: I am interested in where they use this notation, hence I asked.&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; I just asked the guy next to me and he’s saying it should be a [ too&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; I’m in Quebec&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; ah&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; in the &lt;a href=&quot;http://www.chaminade-stl.org&quot;&gt;States&lt;/a&gt; they used this&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; and I went to &lt;a href=&quot;http://www.uwaterloo.ca/&quot;&gt;U Waterloo&lt;/a&gt;, we used that there too&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; but I though it was a global notation&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; I shall ask other ppl when I get back to Ottawa on Sunday :)&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Maybe that is what they use in France/Europe?&lt;br /&gt;
&lt;b&gt;njbartlett:&lt;/b&gt; rcjsuen: Possibly France, but certainly not other bits of Europe&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; That notation seems to be part of the ISO anyway &lt;a href=&quot;http://en.wikipedia.org/wiki/ISO_31-11#Sets&quot;&gt;http://en.wikipedia.org/wiki/ISO_31-11#Sets&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Very interesting. You learn something new every day as I always say. :)&lt;br /&gt;
&lt;b&gt;njbartlett:&lt;/b&gt; Indeed, very interesting.&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; njbartlett: So I think we need language packs for fr_FR that uses different notation. :)&lt;br /&gt;
&lt;b&gt;njbartlett:&lt;/b&gt; I’ve given talks about OSGi in lots of countries, almost everywhere there’s at least one or two maths geeks who nods quietly when they see [,)&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; hahahaha&lt;/p&gt;</description>
	<pubDate>Wed, 01 Sep 2010 15:34:46 +0000</pubDate>
</item>
<item>
	<title>Madhu Samuel: BIRT 2.6 Data Analysis and Reporting</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3399985190174266183.post-2955006607107603274</guid>
	<link>http://eclipse-info.blogspot.com/2010/09/birt-26-data-analysis-and-reporting.html</link>
	<description>&lt;br /&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&lt;a href=&quot;https://www.packtpub.com/&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Packt Publishin&lt;/span&gt;g&lt;/a&gt;&lt;/span&gt;, a UK based book publishing firm has send me a copy of their latest book &lt;a href=&quot;http://www.packtpub.com/birt-2-5-data-analysis-and-reporting/book?utm_source=eclipse-info.blogspot.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_004570&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;BIRT 2.6 Data Analysis and Reporting&lt;/span&gt;&lt;/a&gt; by John Ward to write a review. You can find the details of the book &lt;a href=&quot;http://www.packtpub.com/birt-2-5-data-analysis-and-reporting/book?utm_source=eclipse-info.blogspot.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_004570&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;here&lt;/span&gt;&lt;/a&gt;. I hope to publish an in-depth review about this book in a few weeks at  &quot;&lt;a href=&quot;http://blog.eclipsebible.com/&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;I Like Eclipse&lt;/span&gt;&lt;/a&gt;&quot;, the blog site of &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&lt;a href=&quot;http://eclipsebible.com/&quot;&gt;EclipseBible.com&lt;/a&gt;&lt;/span&gt;.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;i&gt;madhu&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;i&gt;&lt;a href=&quot;http://eclipsebible.com/&quot;&gt;eclipseBible.com&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3399985190174266183-2955006607107603274?l=eclipse-info.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Sep 2010 14:29:25 +0000</pubDate>
	<author>noreply@blogger.com (Madhu)</author>
</item>
<item>
	<title>Jonas Helming: EMFStore Project approved</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5895345394045038548.post-1777205956002358061</guid>
	<link>http://unicase.blogspot.com/2010/09/emfstore-project-approved.html</link>
	<description>We are happy to announce that the EMFStore project has been accepted as an Eclipse Project.&lt;br /&gt;www.emfstore.org&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5895345394045038548-1777205956002358061?l=unicase.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Sep 2010 12:56:16 +0000</pubDate>
	<author>noreply@blogger.com (UNICASE)</author>
</item>
<item>
	<title>Jonas Helming: EMF Client Platform project approved</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5895345394045038548.post-1441051046497363332</guid>
	<link>http://unicase.blogspot.com/2010/09/emf-client-platform-project-approved.html</link>
	<description>We are happy to announce that the EMF Client Platform project has been accepted as an Eclipse Project.&lt;br /&gt;www.emfcp.org&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5895345394045038548-1441051046497363332?l=unicase.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Sep 2010 12:55:35 +0000</pubDate>
	<author>noreply@blogger.com (UNICASE)</author>
</item>
<item>
	<title>Karl Beecher: We Have a Winner</title>
	<guid isPermaLink="false">http://computerfloss.wordpress.com/?p=566</guid>
	<link>http://computerfloss.wordpress.com/2010/09/01/we-have-a-winner/</link>
	<description>&lt;p&gt;&lt;img alt=&quot;Eclipse logo&quot; class=&quot;alignleft size-full wp-image-563&quot; height=&quot;91&quot; src=&quot;http://computerfloss.files.wordpress.com/2010/08/eclipse.png?w=171&amp;amp;h=91&quot; title=&quot;eclipse&quot; width=&quot;171&quot; /&gt;Not many votes (about 20 or so at time of reading), but Google App Engine seems to be a big favourite for Eclipse users, gathering half the votes by itself.&lt;/p&gt;
&lt;p&gt;Looks like I have some reading up on Google App Engine to do…&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=computerfloss.wordpress.com&amp;amp;blog=11433662&amp;amp;post=566&amp;amp;subd=computerfloss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Sep 2010 08:56:13 +0000</pubDate>
</item>
<item>
	<title>Ed Burnette: How to build the perfect Android tablet, part 3: Market watch</title>
	<guid isPermaLink="true">http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-3-market-watch/2073</guid>
	<link>http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-3-market-watch/2073</link>
	<description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-2050&quot; height=&quot;328&quot; src=&quot;http://i.zdnet.com/blogs/perfect_android_tablet.jpg&quot; width=&quot;465&quot; /&gt;&lt;br /&gt;Continuing &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-1/2049&quot;&gt;our series&lt;/a&gt; on the &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-2-a-touch-of-class/2066&quot;&gt;perfect Android tablet&lt;/a&gt; ™, this latest entry is about software instead of hardware. Software applications will either make your tablet into a useful addition to your digital life, or an expensive ingredient in some eco-unfriendly compost pile. Finding the right software is crucial, and for that reason the number three feature on the perfect tablet is:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;#3: Full Google software suite including the Android Market&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Many recently announced Android tablets come with an alternative application stores such as &lt;a href=&quot;http://appslib.com/&quot;&gt;AppsLib&lt;/a&gt;, &lt;a href=&quot;http://www.getjar.com&quot;&gt;GetJar&lt;/a&gt;, &lt;a href=&quot;http://slideme.org/&quot;&gt;SlideME&lt;/a&gt;, or &lt;a href=&quot;http://andappstore.com&quot;&gt;AndAppStore&lt;/a&gt;. Alternate markets are good to have for applications that are not allowed, for one reason or another, on Google’s mainstream Android capital-M &lt;a href=&quot;http://market.android.com&quot;&gt;Market&lt;/a&gt;. However, it’s the Market that has 100K+ applications and it’s the Market that is both the &lt;em&gt;de facto&lt;/em&gt; and &lt;em&gt;de jure&lt;/em&gt; center of the Android development universe.&lt;/p&gt;&lt;p&gt;For a one-time fee of $25, developers can get a publisher’s account on the Market and upload their free or paid applications. The Market is fraught with problems, such as tons of spam, a stingy 325-character limit on descriptions, and a woefully lacking list of supported countries. Google has been ever-so-slowly improving the Market over the last couple of years, for example by adding the amazingly innovative ability to post screenshots (insert sarcasm here). The fact that it’s flawed, though, doesn’t change the crucially important role of the Market in the Android ecosystem.&lt;/p&gt;&lt;p&gt;As a developer, I want to submit my application to one place and have it reach all users. I can do that with the iPhone, so why not on Android? (Of course Apple brooks no alternatives on the iPhone, so it’s not a fair comparison, but still there should be a default market that covers everyone.) Each additional place I have to publish is another place I have to make a publishing agreement with, keep up to date for each upgrade, and manage for marketing. More potential users with less friction for the developer equals more income and more interest in creating exciting games and applications.&lt;/p&gt;&lt;p&gt;Perhaps the greatest impediment to the universal Market is a somewhat nebulous list of &lt;a href=&quot;http://source.android.com/compatibility/android-2.1-cdd.pdf&quot;&gt;restrictions and requirements&lt;/a&gt; that Google imposes which limits what types of devices can and can’t have the Market and other Google apps. Some of the restrictions I can understand, like requiring an accelerometer. Others make no sense, such as the need to include a telephone (with its requisite expensive monthly fee). Google needs to change these rules ASAP or at least show some flexibility to accommodate devices (such as as the 5 announced this week from Archos) that aren’t smartphones.&lt;/p&gt;&lt;p&gt;Along with the Market, the perfect tablet should have all the other parts of Google’s Android suite, including GMail, Maps, Navigation, Search, and so forth. The apps should either be pre-installed or available for download through the Market. This does not preclude a vendor from using, say, Bing search and Yahoo Mail by default to differentiate their offering. But Google’s suite is pretty good, and I ought to be able to use it if I want without having to search the fine print for the words, “with Google”.&lt;/p&gt;&lt;p&gt;What would you build into *your* perfect Android tablet? Share your thoughts in the comment area below. And check back next week to find out what’s next on my list.&lt;/p&gt;</description>
	<pubDate>Wed, 01 Sep 2010 02:26:27 +0000</pubDate>
</item>
<item>
	<title>Scott Kellicker: Contributing to JSDT #4 : Launching the unit tests</title>
	<guid isPermaLink="false">http://kellicker.wordpress.com/?p=269</guid>
	<link>http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-4-launching-the-unit-tests/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;48&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png?w=48&amp;amp;h=48&quot; title=&quot;javascript&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ll continue my instructions regarding how to set up JSDT development infrastructure.&lt;/p&gt;
&lt;h2&gt;Previously&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/contributing-to-jsdt-setting-up-build-target/&quot;&gt;I set up the build target&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/jsdt-setting-up-dev-environment/&quot;&gt;I checked out the code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-3-build-targets-on-the-bleeding-edge/&quot;&gt;I updated to the latest debug plugins&lt;/a&gt; to resolve compilation issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Run the unit tests&lt;/h2&gt;
&lt;p&gt;Now I want to verify that the unit tests for JSDT pass.  (TDD — we should launch the tests before the product, right?)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nitin Dahyabhai&lt;/strong&gt;, the JSDT lead, &lt;a href=&quot;http://www.eclipse.org/forums/index.php?t=msg&amp;amp;goto=556351&quot;&gt;pointed out&lt;/a&gt; that the first project above, contains a launch config to run all of the JSDT unit tests.&lt;/p&gt;
&lt;p&gt;I will need to check out these additional projects from the webtools CVS repository.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;org.eclipse.jsdt/development/&lt;strong&gt;org.eclipse.wst.jsdt.unittests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;sourceediting/tests/&lt;strong&gt;org.eclipse.wst.jsdt.web.core.tests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;sourceediting/tests/&lt;strong&gt;org.eclipse.wst.jsdt.web.ui.tests&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The checked in launch config makes running easy.  Open &lt;strong&gt;Run Configurations&lt;/strong&gt; – select &lt;strong&gt;JSDT Tests&lt;/strong&gt;.  Hit &lt;strong&gt;Run&lt;/strong&gt;.  They all pass, so I see green:&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtgreenunittests.jpg&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;282&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtgreenunittests.jpg?w=480&amp;amp;h=282&quot; title=&quot;jsdtGreenUnitTests&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;
&lt;/p&gt;&lt;h2&gt;Next: &lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/contributing-to-jsdt-launching/&quot;&gt;Launching the Product&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Disclaimer: I’m not on the JSDT team, so this may not be exactly how they do it.  But it’s what I’ve done to get it working.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kellicker.wordpress.com&amp;amp;blog=6950485&amp;amp;post=269&amp;amp;subd=kellicker&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Sep 2010 01:17:19 +0000</pubDate>
</item>
<item>
	<title>Scott Kellicker: Contributing to JSDT #3 : Build Targets on the bleeding edge</title>
	<guid isPermaLink="false">http://kellicker.wordpress.com/?p=257</guid>
	<link>http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-3-build-targets-on-the-bleeding-edge/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;48&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png?w=48&amp;amp;h=48&quot; title=&quot;javascript&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ve been documenting how to use JSDT to do some HTML5/CSS/JavaScript  development.  In order to poke around the JSDT code to understand it  better, I spent a bit of time figuring out how to get things checked  out, built and running.   The instructions on the JSDT site a re a bit  sparse, so I thought I would document what I did.&lt;/p&gt;
&lt;p&gt;I’m not on the JSDT team, so this may not be exactly how they do it.  But it works for me.&lt;/p&gt;
&lt;h2&gt;Previously&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/contributing-to-jsdt-setting-up-build-target/&quot;&gt;I set up the build target&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/jsdt-setting-up-dev-environment/&quot;&gt;I checked out the code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;My code no longer compiles!&lt;/h2&gt;
&lt;p&gt;This morning, I updated all the code &lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/jsdt-setting-up-dev-environment/&quot;&gt;I previously checked out&lt;/a&gt;.  And now my rhino.ui project has a compilation error in RhinoTabGroup:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtcompilationerror.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-258&quot; height=&quot;209&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtcompilationerror.jpg?w=480&amp;amp;h=209&quot; title=&quot;jsdtCompilationError&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After a little investigation, I determined that RhinoTabGroup is using a new 3.7 method in  AbstractLaunchConfigurationTab.  It has just been introduced.  I’m building against Eclipse 3.6, so don’t have this method.&lt;/p&gt;
&lt;p&gt;So if I  want to keep my JSDT source code in sync with the latest, I’ll have to  also keep up with any dependencies.&lt;/p&gt;
&lt;p&gt;One idea to resolve this would be to download the latest milestone builds and put them in my build target.  However, this change is very recent and is not in a milestone build yet.&lt;/p&gt;
&lt;p&gt;Another idea is to check out the latest &lt;strong&gt;o.e.debug.ui &lt;/strong&gt;project and any dependency projects (hopefully not too many).&lt;/p&gt;
&lt;h2&gt;Check out more projects&lt;/h2&gt;
&lt;p&gt;To add the eclipse CVS repo, copy this into the CVS Repositories View:&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;strong&gt;:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And check out &lt;strong&gt;org.eclipse.debug.ui&lt;/strong&gt; and &lt;strong&gt;org.eclipse.debug.core&lt;/strong&gt; projects&lt;/p&gt;
&lt;p&gt;And the compilation issue is resolved.&lt;/p&gt;
&lt;h2&gt;Going Forward&lt;/h2&gt;
&lt;p&gt;Going forward, my build target and workspace projects will change often.  I’ll need to actively modify these to keep things rolling along.  I’ll be doing a combination of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Including other Eclipse projects in my workspace, on an as-needed basis.  I’ll start getting a good sense of what these projects are as things break.&lt;/li&gt;
&lt;li&gt;Change my build target to move up to Milestone builds.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Next: &lt;a href=&quot;http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-4-launching-the-unit-tests/&quot;&gt;Launching the JSDT Unit Tests&lt;/a&gt;&lt;/h2&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kellicker.wordpress.com/257/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kellicker.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kellicker.wordpress.com/257/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kellicker.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kellicker.wordpress.com/257/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/kellicker.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kellicker.wordpress.com/257/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/kellicker.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kellicker.wordpress.com/257/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kellicker.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kellicker.wordpress.com/257/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kellicker.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kellicker.wordpress.com/257/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kellicker.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kellicker.wordpress.com&amp;amp;blog=6950485&amp;amp;post=257&amp;amp;subd=kellicker&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 31 Aug 2010 22:44:48 +0000</pubDate>
</item>
<item>
	<title>Konstantin Komissarchik: Inconvenient process? Let’s fix it.</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2913369703414801920.post-2437086252783456278</guid>
	<link>http://lt-rider.blogspot.com/2010/08/inconvenient-process-lets-fix-it.html</link>
	<description>&lt;p&gt;Some of you may have noticed the debate happening regarding proper entry expectations for WTP incubator project following &lt;a href=&quot;http://eclipsehowl.wordpress.com/2010/08/26/an-inconvenient-process/&quot;&gt;Holger’s veto&lt;/a&gt; of a committer election. Holger is acting well within the power granted to him by Eclipse Development Process (EDP), but is it a right and proper action?&lt;/p&gt;  &lt;p&gt;Every committer on a project has the veto power in an election. By extension, any entry criteria for a project (whether written or unwritten) is nothing more than a social convention. The reality is that every committer can choose to levy their own personal expectations. Most of the time it’s not a problem, except when it is. &lt;/p&gt;  &lt;p&gt;Here are some quotes from this particular event:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“I found only some bug reports but not a single code contribution from any of the four nominated persons. Please attach the planned code contribution to a bug report. I'd like to vote for each of the nominated persons as soon as I know that the code is readable and covered by JUnit tests.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Have [snip] been asked if they like to become committers as individuals (and not only as employees of SAP)? Are these authors of the code or what is their motivation to maintain and enhance these editors?”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In a regular project with established code base, established team and well-defined scope, you can argue that giving every committer veto power over elections is appropriate. After all, there is an established code base to protect. The same considerations do not apply when a new component is proposed in an incubator.&lt;/p&gt;  &lt;p&gt;The WTP incubator project was started with the intention to provide a low entry barrier playground for people to come and experiment on new ideas while gaining experience and proving their merit to committers on the core projects that will eventually be asked to admit matured functions. Incubators make sense because they provide a quicker way to get started than a separate project proposal. Unfortunately incubators have to rely on a social convention that existing committers act in a welcoming fashion to newcomers. Most of the time that happens, except when it doesn’t.&lt;/p&gt;  &lt;p&gt;I would posit that there is no legitimate purpose served by holding a committer election when a new component is proposed for an incubator. The situation is supposed to be very similar to new project creation and we don’t hold elections there. The party proposing a project gets to designate a group of individuals to be the initial committers without anyone questioning their credentials or motives. A similar process is needed to make incubators work better.&lt;/p&gt;  &lt;p&gt;The last revision of EDP has formalized the concept of a persistent incubator. I propose that we build on those revisions and amend EDP to remove the committer vote requirement for incubator projects when a new component is being proposed. The project’s PMC would still have the oversight and ability to decline a new component proposal. This change would also fix the rather awkward problem of having to have “seeder” committers when creating incubator projects. &lt;/p&gt;  &lt;p&gt;Note that my suggestion is for persistent incubator projects rather than normal projects during incubation phase. I am also not suggesting that we remove committer vote entirely from incubators. Anyone wishing to join existing effort already underway in the incubator should still be subject to committer vote. &lt;/p&gt;  &lt;p&gt;Thoughts?&lt;/p&gt;  &lt;p&gt;PS.1 : This situation has served to highlight a process problem and it is the process that I seek to improve. I have no beef with Holger. I am sure he is acting on what he believes in.&lt;/p&gt;  &lt;p&gt;PS.2 : I am further confident that this particular storm will blow over, Holger’s objections will be met, another election held, etc. That doesn’t mean we shouldn’t try to improve the process so that such situations do not happen again and we continue to have vibrant incubator projects at Eclipse.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update: &lt;/strong&gt;At Wayne’s request I &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=324133&quot;&gt;created a bug&lt;/a&gt; to track this proposed improvement to Eclipse Development Process.&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/2913369703414801920-2437086252783456278?l=lt-rider.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 31 Aug 2010 20:48:18 +0000</pubDate>
	<author>noreply@blogger.com (Konstantin Komissarchik)</author>
</item>
<item>
	<title>Ian Skerrett: Wrap-up of Eclipse Day at the Googleplex</title>
	<guid isPermaLink="false">http://ianskerrett.wordpress.com/?p=1664</guid>
	<link>http://feedproxy.google.com/~r/IanSkerrett/~3/fyiXE76RyhE/</link>
	<description>&lt;p&gt;Last Thursday, Google was the host of the third &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010&quot;&gt;Eclipse Day at the Googleplex&lt;/a&gt;.  I look forward to this event each year and this year was another success.  Over 150 people attended the day long event that included 12 sessions related to Eclipse and Google technology.   The presentations are now &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010#Presentation_Slides&quot;&gt;available online&lt;/a&gt;.   There was lots of great information presented, like upcoming improvements to the Android SDK (based on Eclipse), Git support in Eclipse, a review of the Instantiations tools that Google just purchased and an introduction to the new Tools for Mobile Web project.&lt;br /&gt;
The event also included our first ever Eclipse Ignite session.  We had 9 speakers, each speaker had 5 minutes and 20 slides but the slides changed automatically every 15 seconds.  The speakers did a great job and lots of people really enjoyed the format.  Something to certainly try again.&lt;/p&gt;
&lt;p&gt;A special thanks to the Google Open Source Program Office for their sponsorship of the event.  These face to face events are really important to building the Eclipse community, so it is great to have Google’s support to make this event possible.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ianskerrett.wordpress.com&amp;amp;blog=405862&amp;amp;post=1664&amp;amp;subd=ianskerrett&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 31 Aug 2010 18:00:41 +0000</pubDate>
</item>
<item>
	<title>Max Rydahl Andersen: Webinar tomorrow, Clouds and bringing life back to BPEL</title>
	<guid isPermaLink="true">http://in.relation.to/Bloggers/WebinarTomorrowCloudsAndBringingLifeBackToBPEL</guid>
	<link>http://in.relation.to/Bloggers/WebinarTomorrowCloudsAndBringingLifeBackToBPEL</link>
	<description>&lt;p class=&quot;wikiPara&quot;&gt;
The final re-post to remind you to use the feeds from JBoss Tools to get JBoss tooling news ;)
&lt;/p&gt;

&lt;p class=&quot;wikiPara&quot;&gt;
Blogging about upcoming webinar tomorrow, the Cloud efforts and bringng back life to a BPEL project.
&lt;/p&gt;

&lt;p class=&quot;wikiPara&quot;&gt;
See it at &lt;a href=&quot;https://community.jboss.org/en/jbosstools/blog/2010/08/31/webinar-tomorrow-clouds-and-bringing-life-back-to-bpel&quot;&gt;JBoss Tools Blog&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 31 Aug 2010 17:51:36 +0000</pubDate>
</item>
<item>
	<title>Mickael Istria: How target platforms helped me to fix old bugs</title>
	<guid isPermaLink="false">http://www.bonitasoft.org/blog/?p=1817</guid>
	<link>http://www.bonitasoft.org/blog/uncategorized/how-target-platforms-helped-me-to-fix-old-bugs/</link>
	<description>&lt;p&gt;I’ve used target platforms to ensure that I only add dependencies that are available in our build platform. Until now, I found them useful, but I did not understand how powerful they really are. Here is a story that convinced me that target platforms are a master feature of RCP development.&lt;br /&gt;
&lt;span id=&quot;more-1817&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A few days ago, I had to fix a bug on the 5.2.3 branch version of the Studio/RCP part of &lt;a href=&quot;http://www.bonitasoft.com/products/BPM_download.php&quot;&gt;Bonita Open Solution&lt;/a&gt;. The classes I needed to modify had been strongly refactored in trunk (5.3), so that the fix would be different on the trunk than on the branch, and it was impossible to simply propagate a fix.&lt;/p&gt;
&lt;p&gt;So I had to edit old code. But my workspace only contained trunk code, and the old code was not compiling because of several refactorings. I was wondering how the heck I would be able to easily work on code from the past…!&lt;br /&gt;
But I found an answer and it’s simple… &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/concepts/target.htm&quot;&gt;TARGET PLATFORMS&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Here is what I suggest to isolate the branch fix from trunk development:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt; Create a new workspace (workspaceBranch).&lt;/li&gt;
&lt;li&gt; Set the old version of your product (here the 5.2.2 version) as the target platform. This must be the version containing the bug.
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1828&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/target.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1828&quot; height=&quot;266&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/target-300x266.png&quot; title=&quot;target&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;The target platform is made up of all bundles of the product containing the bug&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt; Check out ONLY your old bugged bundle from the branch.
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1829&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/ws.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1829&quot; height=&quot;188&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/ws-300x188.png&quot; title=&quot;ws&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;A minimal and easy-to-use workspace&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt; Create your launch configuration which is made up of the product and your buggy bundle project from workspace.
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1831&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/launch.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1831&quot; height=&quot;236&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/launch-300x236.png&quot; title=&quot;launch&quot; width=&quot;300&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/launch2.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1832&quot; height=&quot;238&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/launch2-300x238.png&quot; title=&quot;launch2&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Configure your launch to use your product, with the patched bundle from your workspace&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt; Run and test your product to see the bug.&lt;/li&gt;
&lt;li&gt; Fix your old code.&lt;/li&gt;
&lt;li&gt; Test your fix.&lt;/li&gt;
&lt;li&gt; Commit your fix on the branch.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With this trick, I avoided the headaches of mixing trunk and branch code. It made my work much easier and less risky.&lt;/p&gt;
&lt;p&gt;The only annoying thing is that you lose all your workspace preferences and Mylyn contexts during the time it takes to finish the fix, so this is not critical.&lt;/p&gt;
&lt;p&gt;I can now say it: I ♥ target platforms!&lt;/p&gt;</description>
	<pubDate>Tue, 31 Aug 2010 17:02:09 +0000</pubDate>
</item>
<item>
	<title>Dariusz Luksza: Merge support in JGit/EGit 0.9</title>
	<guid isPermaLink="false">http://luksza.org/?p=650</guid>
	<link>http://luksza.org/2010/08/31/merge-support-in-jgitegit-0-9/</link>
	<description>&lt;p&gt;According to &lt;a href=&quot;http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9taG9uYXJjL2xpc3RzL2VnaXQtZGV2L21zZzAxNDU2Lmh0bWw=&quot; target=&quot;&quot;&gt;this post of Christian Halstrick&lt;/a&gt; and those two commits: &lt;a href=&quot;http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VnaXQuZWNsaXBzZS5vcmcvdy8/cD1qZ2l0LmdpdDthPWNvbW1pdGRpZmY7aD00NWU3OWE1MjZjN2ZmZWJhZjhlNDc1OGE2Y2I2YjdhZjA1NzE2NzA3&quot; target=&quot;&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VnaXQuZWNsaXBzZS5vcmcvdy8/cD1qZ2l0LmdpdDthPWNvbW1pdGRpZmY7aD00N2Y0MTcxMzE1ZTFiNjVmMmE2ZTdmNWZjMzhmNTdkODFkZTVkYjE1&quot; target=&quot;&quot;&gt;2&lt;/a&gt;. The upcoming version of JGit and EGit would have merge support! The previous &lt;em&gt;stable&lt;/em&gt; version (0.8) had only support for fast-forward merge; all non fast-forward merges must be done using CGit, now all kinds of merge can be done using EGit UI.&lt;/p&gt;
&lt;p&gt;The 0.9 version would have more cool features eg. History view improvements, branch and tag dialog improvements and (of course) support for Synchronize view. Say tuned for a full list of new and noteworthy that will be published in upcoming days.&lt;/p&gt;
 &lt;img height=&quot;1&quot; src=&quot;http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&amp;amp;post_id=650&quot; style=&quot;display: none;&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 31 Aug 2010 09:29:16 +0000</pubDate>
</item>
<item>
	<title>Matthias Sohn: First EGit content merge with new resolve merge strategy</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/msohn/?p=10</guid>
	<link>http://dev.eclipse.org/blogs/msohn/2010/08/30/first-egit-content-merge-with-new-resolve-merge-strategy/</link>
	<description>&lt;p&gt;Just tried the brand-new resolve merge strategy Christian Halstrick worked on hard in the last months which finally got submitted today after months of testing, reviewing and refining the implementation.&lt;/p&gt;
&lt;p&gt;I created a simple test project and changed a simple class in two different ways on the branches “first” and “second”. Then I successfully fast-forward merged branch “second” into branch “master”. Then I hit “Team &amp;gt; Merge” to run the shiny new resolve merge strategy to merge branch “first” into “master”. And here we go: the merge tried to merge the content and detected the conflict:&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_12&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-merge-with-conflict1.png&quot;&gt;&lt;img alt=&quot;EGit resolve merge with conflict&quot; class=&quot;size-medium wp-image-12&quot; height=&quot;225&quot; src=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-merge-with-conflict1-300x225.png&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;EGit resolve merge with conflict&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Give it a try and let us know if you hit any problems, we will work &lt;span style=&quot;font-size: 13.1944px;&quot;&gt;on improving the user interface&lt;br /&gt;
and of course also plan to integrate it with a visual merge view. &lt;/span&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 31 Aug 2010 02:13:46 +0000</pubDate>
</item>
<item>
	<title>Eclipse Announcements: Register for the Eclipse Fall Training Series</title>
	<guid isPermaLink="true">http://feedproxy.google.com/~r/eclipse/fnews/~3/ubRDUpaJJcA/20100830_training.php</guid>
	<link>http://feedproxy.google.com/~r/eclipse/fnews/~3/ubRDUpaJJcA/20100830_training.php</link>
	<description>The Eclipse Foundation and Eclipse member companies are pleased to announce the &lt;a href=&quot;http://www.eclipse.org/community/training/classes.php&quot;&gt;fall 2010
			training class series&lt;/a&gt;.  The training is an excellent opportunity for software
			developers and architects to learn more about Eclipse Rich Client Platform (RCP), BIRT and Modeling technologies.
			Eclipse experts	will lead the sessions, providing practical experience through classroom
			instruction and hands-on labs. Virtual and on-site classes have been scheduled in
			several countries from September 20 to November 5, 2010.&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/eclipse/fnews/~4/ubRDUpaJJcA&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Aug 2010 20:00:00 +0000</pubDate>
</item>
<item>
	<title>Andrew Eisenberg: Debuggable GSPs in SpringSource Tool Suite</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6917071644715743308.post-5910177632861270118</guid>
	<link>http://contraptionsforprogramming.blogspot.com/2010/08/debuggable-gsps-in-springsource-tool.html</link>
	<description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;A basic trick of Groovy Server Page debugging that seasoned Grails developers know is that by adding &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;?showSource=true&lt;/span&gt; to a URL for any of your GSPs you can view the Groovy translation of your GSP code.  For example, the vanilla create GSP (&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;http://localhost:8080/TripPlanner/trip/create.gsp&lt;/span&gt;) gets rendered like this in the browser:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQR-x57CDI/AAAAAAAAAB0/ZliT6RC3GJE/s1600/create-browser.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQR-x57CDI/AAAAAAAAAB0/ZliT6RC3GJE/s200/create-browser.png&quot; width=&quot;176&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And altering the URL to this: &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;http://localhost:8080/TripPlanner/trip/create.gsp?showSource=true&lt;/span&gt;, you can see the translated source:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQSXUwxUsI/AAAAAAAAAB8/n0zp6kEVqM0/s1600/create-showSource.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQSXUwxUsI/AAAAAAAAAB8/n0zp6kEVqM0/s320/create-showSource.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There is a mapping between lines of code of the original GSP and the lines of code of the Groovy translation.  In fact, if you are using Grails 1.3.4 or above, and scroll to the bottom of the translation, you will see something like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; 82: @org.codehaus.groovy.grails.web.transform.LineNumber(&lt;br /&gt;  83: &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;lines = [3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 11, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 17, 17, 18, 18, 19, 19, 20, 21, 23, 23, 23, 23, 25, 25, 26, 35, 35, 35, 35, 37, 37, 37, 39, 39, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;br /&gt;  84: &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;sourceName = &quot;create.gsp&quot;&lt;br /&gt;  85: )&lt;br /&gt;  86: class ___LineNumberPlaceholder { }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is the line mapping information and each element of the &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;lines&lt;/span&gt; array maps a line from the translation (the array index) to a line in the original source code (the value at that index).  This is not particularly useful to humans, but it is to the SpringSource Tool Suite.&lt;br /&gt;&lt;br /&gt;Using this information, STS is finally able to provide some debugging support for GSP files.  You can set a breakpoint at a line in your GSP editor, and the debugger will pause at that line when it is reached while rendering the page:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_V6EKdLYBFpg/THQU9nkvaEI/AAAAAAAAACE/enRFJt1LSuk/s1600/create-debug.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;197&quot; src=&quot;http://4.bp.blogspot.com/_V6EKdLYBFpg/THQU9nkvaEI/AAAAAAAAACE/enRFJt1LSuk/s400/create-debug.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;At this point, your GSP can be interacted with like any Groovy file.  For example, you can inspect the current state of variables in your page binding:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQWmwR7XjI/AAAAAAAAACM/neENn0IgKf8/s1600/variables-pane.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;163&quot; src=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQWmwR7XjI/AAAAAAAAACM/neENn0IgKf8/s640/variables-pane.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And you can execute values in the display view (using Java syntax only for now):&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_V6EKdLYBFpg/THQZr9e084I/AAAAAAAAACU/Oyjdy1Iqpr0/s1600/display-pane.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;60&quot; src=&quot;http://2.bp.blogspot.com/_V6EKdLYBFpg/THQZr9e084I/AAAAAAAAACU/Oyjdy1Iqpr0/s640/display-pane.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This feature has been fun to implement since it was my first foray into Eclipse's Java debug interface, but I am not sure how useful it is going to be.  Lines in a GSP are not executed sequentially.  Rather, many are executed out of order through closures inside of an &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;invokeTag&lt;/span&gt; method call.  Also, I have not completely worked out how to determine if a breakpoint is at a valid location if Grails is not already running.  So, at this point it is possible to set a breakpoint on any blank line, but these breakpoints are only valid if they are set on a line containing a GSP tag or some other kinds of things.&lt;br /&gt;&lt;br /&gt;But, I do hope this is useful to you and if you are interested in trying this new feature out, then you can &lt;a href=&quot;http://www.springsource.com/developer/sts&quot;&gt;download STS 2.5.0M3&lt;/a&gt; and install the latest version of Grails tool support.  Enjoy!&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6917071644715743308-5910177632861270118?l=contraptionsforprogramming.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 30 Aug 2010 17:48:43 +0000</pubDate>
	<author>noreply@blogger.com (Andrew Eisenberg)</author>
</item>
<item>
	<title>Lars Vogel: The JUG which lives – EGit presentation on 02.Sept. at the Majug</title>
	<guid isPermaLink="false">http://www.vogella.de/blog/?p=3091</guid>
	<link>http://www.vogella.de/blog/2010/08/30/egit-presentation/</link>
	<description>&lt;div style=&quot;float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;&quot;&gt;
		
		&lt;/div&gt;&lt;p&gt;Since beginning of last year I participate more or less actively in the &lt;a href=&quot;http://jug-mannheim.mixxt.de&quot;&gt;Java User Group Mannheim&lt;/a&gt;. Unfortunately the former main contact of the Java User Group Mannheim &lt;a href=&quot;https://twitter.com/alexhanschke&quot;&gt;Alex Hanschke&lt;/a&gt; has moved out of the area.  &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/bmuskalla&quot;&gt;Benjamin Muskalla&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/vogella&quot;&gt;myself&lt;/a&gt; volunteered to help organize the JUG Events. Therefore Benny and I will as of now try to find great new speakers and setup cool events. I think we are starting very well, as we are proud to have &lt;a href=&quot;https://twitter.com/masohn&quot;&gt;Matthias Sohn&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/stefanlay&quot;&gt;Stefan Lay&lt;/a&gt; speak about &lt;a href=&quot;http://www.vogella.de/articles/Git/article.html&quot;&gt;Git&lt;/a&gt; and &lt;a href=&quot;http://www.vogella.de/articles/EGit/article.html&quot;&gt;EGit&lt;/a&gt; on the 02.Sept.  Git is one of the leading distributed version control systems and EGit a team provider for Eclipse.&lt;/p&gt;
&lt;p&gt;Matthias and and Stefan are both committers in the EGit project. Details on Matthias and Stefan and the presentation can be found on the &lt;a href=&quot;http://jug-mannheim.mixxt.de/networks/events/show_event.23581&quot;&gt;Majug Event Announcement&lt;/a&gt;.  As usual we organize to have drinks after the event and hope Matthias and Stefan will be able to join so that you can bugger them with questions. The presentation will be in German. &lt;/p&gt;
&lt;p&gt;Rumors are that we will see a real merge via EGit &lt;a href=&quot;http://jug-mannheim.mixxt.de/networks/events/show_event.23581&quot;&gt;on this event&lt;/a&gt;… &lt;img alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; src=&quot;http://www.vogella.de/blog/wp-includes/images/smilies/icon_smile.gif&quot; /&gt;  Hope to see you at their.&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt; &lt;/div&gt;</description>
	<pubDate>Mon, 30 Aug 2010 14:34:56 +0000</pubDate>
</item>
<item>
	<title>BioClipse: Bioclipse 2.4.1 now on update site</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-19419978.post-4480438561551249199</guid>
	<link>http://bioclipse.blogspot.com/2010/08/bioclipse-241-now-on-update-site.html</link>
	<description>A new version can be found on the update site. The new versions of the features contain the latest fixes. New in this version is support for Jasper reports which are so far used by Bioclipse Decision Support and Bioclipse Brunn for generating printable reports.&lt;br /&gt;&lt;br /&gt;To update go to Help -&amp;gt; Software Updates... and select the features you want to install.&lt;br /&gt;&lt;br /&gt;Known problem: The splash screen erroneously shows version number to be 2.4.0 after update. (Technical information can be found at &lt;a href=&quot;http://pele.farmbio.uu.se/cgi-bin/bugzilla/show_bug.cgi?id=2084&quot;&gt;bug: 2084&lt;/a&gt; in our Bugzilla)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/19419978-4480438561551249199?l=bioclipse.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 30 Aug 2010 13:00:45 +0000</pubDate>
	<author>noreply@blogger.com (Jonalv)</author>
</item>
<item>
	<title>Karl Beecher: Poll: Your favourite web application hosts/technology when using Eclipse</title>
	<guid isPermaLink="false">http://computerfloss.wordpress.com/?p=561</guid>
	<link>http://computerfloss.wordpress.com/2010/08/30/poll-your-favourite-web-application-hoststechnology-when-using-eclipse/</link>
	<description>&lt;p&gt;&lt;img alt=&quot;Eclipse logo&quot; class=&quot;alignleft size-full wp-image-563&quot; height=&quot;91&quot; src=&quot;http://computerfloss.files.wordpress.com/2010/08/eclipse.png?w=171&amp;amp;h=91&quot; title=&quot;eclipse&quot; width=&quot;171&quot; /&gt;I’m embarking on a pet project, in short: a Python-based web application using my favourite editor, Eclipse. Being quite new to this, I thought I would poll my readers, especially those Eclipse web app developers among you, for their opinions on the best solutions. I realise I’m giving very few details, but I simply want to know what’s popular, or even what is being used that I’m not aware of. Thanks.&lt;/p&gt;
&lt;a name=&quot;pd_a_3689275&quot;&gt;&lt;/a&gt;&lt;div class=&quot;PDS_Poll&quot; id=&quot;PDI_container3689275&quot; style=&quot;display: inline-block;&quot;&gt;&lt;/div&gt;
		&amp;lt;noscript&amp;gt;
		&amp;lt;a href=&quot;http://answers.polldaddy.com/poll/3689275/&quot;&amp;gt;View This Poll&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&quot;font-size: 10px;&quot;&amp;gt;&amp;lt;a href=&quot;http://polldaddy.com/features-surveys/&quot;&amp;gt;online survey&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;
		&amp;lt;/noscript&amp;gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=computerfloss.wordpress.com&amp;amp;blog=11433662&amp;amp;post=561&amp;amp;subd=computerfloss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Aug 2010 07:34:54 +0000</pubDate>
</item>
<item>
	<title>Neil Bartlett: OSGi Readiness — Loading Classes</title>
	<guid isPermaLink="false">http://njbartlett.github.com/2010/08/30/osgi-readiness-loading-classes</guid>
	<link>http://njbartlett.name/2010/08/30/osgi-readiness-loading-classes.html</link>
	<description>&lt;p&gt;In my previous post on “OSGi Compliance”, I discussed the idea of making libraries ready for OSGi without depending on OSGi directly. In light of BJ’s comment I will refer from now on to OSGi “Readiness” rather than Compliance, as the latter term is easily confused with the concept of a framework implementation that complies with the OSGi specification.&lt;/p&gt;
&lt;p&gt;In each of these blog posts, I will state a requirement and then look at options for satisfying that requirement in an OSGi Ready way.&lt;/p&gt;
&lt;h2&gt;Problem Statement&lt;/h2&gt;
&lt;p&gt;You are developing a Java library, “Framework X”. Occasionally you must load and instantiate a class dynamically by name, where the name may originate from a configuration file or be passed into the framework as a parameter to an &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; call. You would like the framework to work cleanly both in OSGi and other environments, i.e. there must be no dependency on OSGi.&lt;/p&gt;
&lt;p&gt;For example, suppose we are implementing an O/R mapping framework similar to Hibernate, and the user has supplied a configuration file such as the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;xml&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;or-mapping&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;lt;class&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org.example.domain.Event&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;table=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;EVENTS&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;id&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;id&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;column=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;EVENT_ID&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;lt;/class&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/or-mapping&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This tells our framework to create an instance of &lt;code&gt;org.example.domain.Event&lt;/code&gt; for each row of the &lt;span class=&quot;caps&quot;&gt;EVENTS&lt;/span&gt; table. Therefore we must dynamically load and instantiate the &lt;code&gt;org.example.domain.Event&lt;/code&gt; class.&lt;/p&gt;
&lt;h2&gt;Discussion&lt;/h2&gt;
&lt;p&gt;To dynamically load a class in Java we require &lt;strong&gt;two&lt;/strong&gt; things: the fully qualified name of the class, and a &lt;code&gt;ClassLoader&lt;/code&gt; from which to request it. If we have both of these then we can trivially load a class irrespective of whether we are in OSGi or not.&lt;/p&gt;
&lt;p&gt;To reiterate: &lt;strong&gt;OSGi does not interfere with the standard Java class loading &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/strong&gt;. If we have the fully qualified name of a class and a &lt;code&gt;ClassLoader&lt;/code&gt; that knows of that class, then we can always load and instantiate the class.&lt;/p&gt;
&lt;p&gt;Problems arise only when we do not know the correct &lt;code&gt;ClassLoader&lt;/code&gt;, and make the wrong guess about which one to use.&lt;/p&gt;
&lt;h3&gt;First Wrong Guess: Class.forName()&lt;/h3&gt;
&lt;p&gt;Java provides us with a way to load a class without explicitly specifying a &lt;code&gt;ClassLoader&lt;/code&gt;, using the single-argument version of the &lt;code&gt;Class.forName()&lt;/code&gt; method:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;clazz&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;forName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org.example.domain.Event&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Since we don’t specify a &lt;code&gt;ClassLoader&lt;/code&gt;, this method uses the loader that loaded the class in which the line of code appears. In other words, it uses the same loader that loaded the framework. In a traditional Java SE environment this usually works just fine, because both the framework and domain classes are probably installed as JARs on the classpath, and the classpath is loaded by a single &lt;code&gt;ClassLoader&lt;/code&gt;, the so-called “system” loader.&lt;/p&gt;
&lt;p&gt;But in OSGi, the domain classes are likely to be supplied in a different bundle, because there is a clear modular separation between the O/R framework code and the domain model classes, and therefore they will be loaded by a different &lt;code&gt;ClassLoader&lt;/code&gt;. We can still make it work if the package &lt;code&gt;org.example.domain&lt;/code&gt; is listed as an import of the framework bundle like so:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;make&quot;&gt;&lt;span class=&quot;nf&quot;&gt;Import-Package&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;org.example.domain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt; ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;However this is unsatisfactory because &lt;code&gt;Import-Package&lt;/code&gt; is statically defined, and a general-purpose O/R framework does not know in advance which domain packages it will need to import.&lt;/p&gt;
&lt;p&gt;(&lt;strong&gt;NB&lt;/strong&gt; there are a couple of other workarounds for this problem in the case that the framework code cannot be changed. These include: &lt;code&gt;DynamicImport-Package&lt;/code&gt;; shipping the domain classes as a fragment hosted by the O/R framework; and using the Equinox-only “buddy loading” feature. However all of these workarounds have their own severe problems, which I shall not discuss in depth here because the purpose of the post is to document how to best implement a framework such that hackish workarounds are &lt;strong&gt;not&lt;/strong&gt; required.)&lt;/p&gt;
&lt;h3&gt;Second Wrong Guess: Thread Context Class Loader&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;Class.forName()&lt;/code&gt; approach fails not only in OSGi but also in other environments such as Java Enterprise Edition, for similar reasons. Because of this, another common pattern is to use the Thread Context Class Loader (&lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt;), which was introduced relatively recently (i.e. Java 1.2):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;ClassLoader&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tccl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Thread&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;currentThread&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getContextClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;clazz&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;forName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org.example.domain.Event&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tccl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Some libraries use the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; exclusively, others use it as a last resort after failing to load from other candidate class loaders. Almost every library follows a different strategy because Java has provided almost no specification or guidance on when to use the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt;… to quote a &lt;a href=&quot;http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html&quot;&gt;classic JavaWorld article&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Those class and resource loading strategies must be the most poorly documented and least specified area of J2SE.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Even in J(2)EE the specifications do not lay out precisely which set of classes should be visible through the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt;. In practice, a J(2)EE application server is able to provide a sensible set of classes via the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; because the programming model is highly constrained: each application runs in an isolated silo, is not allowed directly to create threads or network sockets, and threads cannot cross application boundaries. Because it controls all the entry points, the application server can provide a &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; that is appropriate for the running code.&lt;/p&gt;
&lt;p&gt;OSGi’s programming model is far less constrained. Bundles are free to create threads, to open network sockets, and to call APIs exposed by any other bundle. There is no way in Java to intercept a direct method call that happens to cross a bundle boundary, so the OSGi framework cannot ensure the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; is relevant to the current code. As a result, the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; is not defined by the OSGi specification, and it may be &lt;code&gt;null&lt;/code&gt;. Therefore, we cannot rely on the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; for anything.&lt;/p&gt;
&lt;h2&gt;Solutions&lt;/h2&gt;
&lt;p&gt;Now let’s discuss possible solutions. To be clear, all of the following suggestions are intended to supplement rather than replace existing approaches. &lt;strong&gt;If your framework is working in J2SE/J2EE with &lt;code&gt;Class.forName()&lt;/code&gt; or TCCLs then you should continue to use those approaches&lt;/strong&gt;. But, please provide additional options for runtime environments such as OSGi where those approaches fail.&lt;/p&gt;
&lt;p&gt;If you feel these suggestions are trivial or obvious — that is exactly the point. There is nothing complicated about making frameworks that work well in OSGi. Indeed, you may find you prefer using one of these patterns as they reduce the complexity and testing burden of your code.&lt;/p&gt;
&lt;h3&gt;Option 1 — Instance Factory&lt;/h3&gt;
&lt;p&gt;The first option is to avoid dynamic by-name class loading altogether. Although not always practical, it may be possible in some cases to allow clients to supply their own callback or factory to create objects as required.&lt;/p&gt;
&lt;p&gt;For example our O/R mapper could define the following interface:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;DomainObjectFactory&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createInstance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tableName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Clients could supply an instance of this factory when initialising a session, or we could wire it in with our favourite Dependency Injector. This has the advantage that clients can construct objects however they like, rather than placing restrictions on the permitted constructors in the domain classes.&lt;/p&gt;
&lt;p&gt;On the other hand it may be risky since a client factory implementation could return shared instances, whereas the framework expects new objects on each call to &lt;code&gt;createInstance()&lt;/code&gt;. So long as such requirements are documented, the framework should permit clients to do what they like.&lt;/p&gt;
&lt;h3&gt;Option 2 — Register Classes&lt;/h3&gt;
&lt;p&gt;Another option is to add &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; for clients to register loaded classes in advance. This is best illustrated in client code:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;registerClassForTable&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;EVENTS&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;createQuery&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;from Event&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Here the client code has direct visibility of the &lt;code&gt;Event&lt;/code&gt; domain class, so it can use a class-literal to pass a &lt;code&gt;Class&lt;/code&gt; to the framework &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;. The framework can now use the supplied class whenever it reads from the &lt;span class=&quot;caps&quot;&gt;EVENTS&lt;/span&gt; table.&lt;/p&gt;
&lt;p&gt;We can even register classes directly against their names:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;registerClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org.example.domain.Person&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The framework can use the registered class whenever it needs to create an instance of &lt;code&gt;org.example.domain.Person&lt;/code&gt;, but fall back on &lt;code&gt;Class.forName()&lt;/code&gt;/&lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; for unregistered names. No other changes are required in the framework.&lt;/p&gt;
&lt;p&gt;Note that with this option, the client loses some flexibility and control. By passing a class rather than instances, the client has no opportunity to construct objects in the way it wants them, but instead relies on the framework to construct them.&lt;/p&gt;
&lt;p&gt;This is not so bad in the running example of domain objects, but suppose we are talking about some kind of “service” object. Without control over instantiation, clients cannot make the service aware of its “environment” or “context”. Sometimes this forces us to use static fields, thread-local variables or other hack to get hold of our “context” after having been instantiated by a framework.&lt;/p&gt;
&lt;p&gt;If the framework allows pre-instantiated objects, then those objects can be pulled out of the OSGi service registry, a Dependency Injection container, or even generated on the fly. So when designing an &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;, please consider whether the framework really needs to take control of instantiation by requiring &lt;code&gt;Class&lt;/code&gt; objects — if not, at least allow the option of passing pre-instantiated objects.&lt;/p&gt;
&lt;h3&gt;Option 3 — Pass the Loader&lt;/h3&gt;
&lt;p&gt;This option is the conceptually the simplest, and also has the least impact on existing code: allow clients to pass a &lt;code&gt;ClassLoader&lt;/code&gt; into your &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;. The appropriate time to do this is highly dependent on the nature of the &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;, but in the O/R mapper it might be done during initialisation of a session:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;SessionFactory&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;createSession&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// ... OR ...&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setDomainClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;To minimise the impact on existing code, this method can be overloaded with another version that takes no argument. Alternatively, clients could pass &lt;code&gt;null&lt;/code&gt; to indicate that the framework should attempt to find the right &lt;code&gt;ClassLoader&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Again there is a loss of flexibility for clients since this solution assumes all classes can be loaded from one class loader, which may not actually be the case, but in practice it doesn’t create any real problems.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Although this post has been rather long-winded, the message is very simple: &lt;strong&gt;stop guessing&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you are writing a library that performs dynamic by-name class loading, do not make assumptions about which &lt;code&gt;ClassLoader&lt;/code&gt; to use.&lt;/strong&gt; Allow client code to specify a class loader, or perform its own class loading. By all means retain your &lt;code&gt;Class.forName()&lt;/code&gt; or &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt;-based lookups, but please provide an override for environments in which they will not work.&lt;/p&gt;</description>
	<pubDate>Mon, 30 Aug 2010 07:00:00 +0000</pubDate>
</item>
<item>
	<title>Fabian Steeg: Scala, object persistence, and the original NoSQL: XML</title>
	<guid isPermaLink="false">http://fsteeg.wordpress.com/?p=1251</guid>
	<link>http://fsteeg.wordpress.com/2010/08/30/scala-object-persistence-and-the-original-nosql-xml/</link>
	<description>&lt;p&gt;In our &lt;a href=&quot;http://fsteeg.wordpress.com/2010/04/18/an-eclipse-rcp-digitization-wiki-with-e4-and-scala/&quot;&gt;digitization wiki&lt;/a&gt; &lt;a href=&quot;http://github.com/spinfo/drc&quot;&gt;project&lt;/a&gt; based on &lt;a href=&quot;http://www.eclipse.org/eclipse4/&quot;&gt;Eclipse 4&lt;/a&gt; and &lt;a href=&quot;http://www.scala-lang.org/&quot;&gt;Scala&lt;/a&gt; it was time to find a persistence solution. As a quick overview of what it’s about, our app will basically allow a user to edit a digitized book page, showing the original scan as an image, with the selected word highlighted. It currently looks like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://fsteeg.files.wordpress.com/2010/08/drc-b1-m4.png&quot;&gt;&lt;img alt=&quot;A digitization wiki using Scala and Eclipse 4&quot; class=&quot;alignnone size-full wp-image-1252&quot; src=&quot;http://fsteeg.files.wordpress.com/2010/08/drc-b1-m4.png?w=250&quot; title=&quot;drc-b1-m4&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For the initial prototype implementation, we used XML files in zips to store the page content, combined with &lt;a href=&quot;https://truezip.dev.java.net/&quot;&gt;TrueZIP&lt;/a&gt;, a library which allows access to files in zips the way it should be: like files in a folder. So we could basically create and use the zip entries like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val zipEntry = new File(&quot;PPN345572629_0004.zip/0001.xml&quot;)
&lt;/pre&gt;
&lt;p&gt;The XML is created using &lt;a href=&quot;http://www.codecommit.com/blog/scala/working-with-scalas-xml-support&quot;&gt;Scala’s XML support&lt;/a&gt;, e.g. the top class in our domain model (Page) is serialized by specifying the root element and calling &lt;em&gt;toXml&lt;/em&gt; on each containing element (the words), like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def toXml:Elem = &amp;lt;page&amp;gt; { words.map(_.toXml) } &amp;lt;/page&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The XML is deserialized with the reverse action, by passing the deserialized word elements contained in the root element to the Page factory method:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def fromXml(page:Elem) = Page( for(word &amp;lt;- (page \ &quot;word&quot;))
  yield Word.fromXml(word) )
&lt;/pre&gt;
&lt;p&gt;So that was basically our prototypical persistence mechanism. Of course, to actually collaboratively correct our digitized texts, we needed a central DB instance on some server. Or maybe not exactly: having &lt;a href=&quot;http://chaosradio.ccc.de/cre125.html&quot;&gt;heard good things about CouchDB&lt;/a&gt; (in german), it was the first option I looked into. The distributed nature of CouchDB sounded very interesting and seemed appropriate for our project – not for performance reasons, but to provide offline or decentralized editing as an option.&lt;/p&gt;
&lt;p&gt;So I looked into &lt;a href=&quot;http://couchdb.apache.org/&quot;&gt;CouchDB&lt;/a&gt; with &lt;a href=&quot;http://github.com/debasishg/scouchdb&quot;&gt;scouchdb&lt;/a&gt;, a Scala API to access it (&lt;a href=&quot;http://twitter.com/fsteeg/statuses/20551941141&quot;&gt;and a very welcoming project&lt;/a&gt;). After input from my colleague, I became aware that we’d lose quite a bit of installation ease if we pick a non-Java DB, so CouchDB was not really a client side option for offline storage, and therefore the strongest reason for us to consider it no longer there.&lt;/p&gt;
&lt;p&gt;Next I considered an embedded relational Java DB with some ORM or ORM-like access. A JPA solution like EclipseLink or Hibernate seemed overkill and not ideal for Scala. Instead I took a closer look at &lt;a href=&quot;http://github.com/szeiger/scala-query&quot;&gt;ScalaQuery&lt;/a&gt;, which uses Scala’s &lt;em&gt;for expressions&lt;/em&gt; for DB queries, which seems like the thing you want if you happen to use a language that basically has a query language built-in.&lt;/p&gt;
&lt;p&gt;For instance, in ScalaQuery, we could write a query to get all pairs of pages and words where the page contains the word and the original form of the word is &lt;em&gt;Bonifaci&lt;/em&gt; like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val bonifaci = for (page &amp;lt;- Pages; word &amp;lt;- Words;
  if page.id === word.pageId &amp;amp;&amp;amp; word.original === &quot;Bonifaci&quot;)
  yield (page, word)
&lt;/pre&gt;
&lt;p&gt;To allow this kind of queries, we need to define tables named &lt;em&gt;Pages&lt;/em&gt; and &lt;em&gt;Words&lt;/em&gt;. Defining the tables with ScalaQuery is quite elegant, e.g. our main table for pages could be defined like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;object Pages extends Table[(String, java.sql.Blob)](&quot;pages&quot;) {
  def id = column[String](&quot;id&quot;, O PrimaryKey)
  def image = column[java.sql.Blob](&quot;image&quot;)
  def * = id ~ image
}
&lt;/pre&gt;
&lt;p&gt;However, this leads to either a duplication of our domain objects (have a table object as above and the original class) or a complete rewrite (use table objects like above as the domain objects), which both seemed wrong.&lt;/p&gt;
&lt;p&gt;Also, thinking about alternatives to our XML representation, I came to realize that we would want some form of XML export anyway to ensure long-term access to our data, which is in the public domain and a cultural asset. Of course it would be possible to implement this as some form of export, but if possible it would be just perfect if we could use a single persistence mechanism.&lt;/p&gt;
&lt;p&gt;I did remember there are some XML DBs around, but initially abandoned that idea since XML is only half of what we store (the other thing being the images used to correct the text, see screenshot above). But after being unhappy with these other solutions, I took a closer look at &lt;a href=&quot;http://exist.sourceforge.net/&quot;&gt;eXist-db&lt;/a&gt;, an XML DB licensed under the LGPL which by default runs on &lt;a href=&quot;http://eclipse.org/jetty/&quot;&gt;Jetty&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And I learned that eXist actually supports both XML and binary data, which was just what we needed. With eXist, we also get XQuery support and various interfaces to the data. In our case, this is less of an immediate concern, given Scala’s XML support and &lt;em&gt;for expressions&lt;/em&gt; are a bit like built-in XQuery capabilities. For instance, a query on XML that is equivalent to the ScalaQuery from above could look like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val bonifaci = for (page &amp;lt;- xml\&quot;page&quot;; word &amp;lt;- page\&quot;word&quot;;
  if (word\&quot;@original&quot;).text == &quot;Bonifaci&quot;) yield (page, word)
&lt;/pre&gt;
&lt;p&gt;This is not only about as concise as the query above, but also allows to express the hierarchical nature of our data in the query (‘each word in the page’), instead of having to map the relational representation (‘all words with a certain page ID’). &lt;/p&gt;
&lt;p&gt;As we already deserialize the XML to page objects, what we actually do is query on these. For switching the serialization from entries in a zip file to the eXist DB and allow these queries, the only conceptual change was to store the XML and image files in the DB instead of using a File object, which allowed a really smooth transition.&lt;/p&gt;
&lt;p&gt;And with Scala’s rich semantics and XML support, our DB wrapper in Scala can be very &lt;a href=&quot;http://lamp.epfl.ch/~odersky/blogs/isscalacomplex.html&quot;&gt;simple&lt;/a&gt; and precise about what it offers in its API, namely XML documents for a collection ID (if found in the DB):&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val xmls:Option[List[Elem]] = Db.xml(collection)
&lt;/pre&gt;
&lt;p&gt;Or binary data:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val imgs:Option[List[Array[Byte]]] = Db.bin(collection)
&lt;/pre&gt;
&lt;p&gt;The elements provided by the DB in this way can be passed to the original deserialization method of Page:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val pages:List[Page] = for(page &amp;lt;- Db.xml(collection))
  yield Page.fromXml(page)
&lt;/pre&gt;
&lt;p&gt;Given this, we can now use a plain Scala &lt;em&gt;for expression&lt;/em&gt; on the deserialized objects to query our data like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val bonifaci = for (page &amp;lt;- pages; word &amp;lt;- page.words;
  if word.original == &quot;Bonifaci&quot;) yield (page, word)
&lt;/pre&gt;
&lt;p&gt;At this point we have replaced the file storage with the DB, but are still creating the XML manually, using Scala’s XML literals. To avoid any duplication (each class parameter or field is represented again in the serialization logic), and basically eliminate all direct XML manipulation, we could use an XML binding library like &lt;a href=&quot;http://scalaxb.org/&quot;&gt;scalaxb&lt;/a&gt;, &lt;a href=&quot;https://jaxb.dev.java.net/&quot;&gt;JAXB-RI&lt;/a&gt; or &lt;a href=&quot;http://eclipse.org/eclipselink/moxy.php&quot;&gt;MOXy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On the other hand, the type safety of the Scala XML serialization code makes the duplication feel much less dangerous than traditional, string-based XML serialization (which can break easily unnoticed by the compiler). And being about as concise as some JAXB annotations and marshalling code would be, the disadvantages seem almost entirely theoretical, but we’ll see – swapping the serialization logic should be as easy as swapping the storage implementation was.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=fsteeg.wordpress.com&amp;amp;blog=7806130&amp;amp;post=1251&amp;amp;subd=fsteeg&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Aug 2010 01:30:31 +0000</pubDate>
</item>
<item>
	<title>Carlos Valcarcel: Writing an Eclipse Plug-in (Part 24): Common Navigator: Configuring the submenus (Presentation…again)</title>
	<guid isPermaLink="false">http://cvalcarcel.wordpress.com/?p=1346</guid>
	<link>http://cvalcarcel.wordpress.com/2010/08/29/writing-an-eclipse-plug-in-part-24-common-navigator-configuring-the-submenus-presentation-again/</link>
	<description>When we last left our erstwhile travelers (that would be all of you) they were surfing the quantum wave on their way to a future refactoring of their past to allow them to simultaneously feel proud of their work and embarrassed that they were following some guy who is making it all up as he [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cvalcarcel.wordpress.com&amp;amp;blog=4641976&amp;amp;post=1346&amp;amp;subd=cvalcarcel&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 29 Aug 2010 23:25:16 +0000</pubDate>
</item>
<item>
	<title>Andrei Loskutov: Ping from Ubuntu</title>
	<guid isPermaLink="true">http://www.jroller.com/andyl/entry/ping_from_ubuntu</guid>
	<link>http://www.jroller.com/andyl/entry/ping_from_ubuntu</link>
	<description>&lt;p&gt;
There was a long time no update from my side. Mostly because of &lt;b&gt;&lt;a href=&quot;http://www.jroller.com/andyl/entry/my_new_full_time_project&quot;&gt;my new full time project&lt;/a&gt;&lt;/b&gt;. Another reason was - I've played a bit with different &lt;b&gt;&lt;a href=&quot;http://distrowatch.com/&quot;&gt;Linux distributions&lt;/a&gt;&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
Finally I've decided to move to &lt;b&gt;&lt;a href=&quot;http://linuxmint.com/&quot;&gt;Mint&lt;/a&gt;&lt;/b&gt; (based on &lt;b&gt;&lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt;&lt;/b&gt;). This is a great distribution which is far easier to manage as Windows XP, even for complete beginners. I've also tried Windows 7, but it was not really better then XP except that it can address now all 8 GB of RAM I have in my PC. From the administration point of view, I found &lt;b&gt;&lt;a href=&quot;http://linuxmint.com/&quot;&gt;Mint&lt;/a&gt;&lt;/b&gt; (&lt;b&gt;&lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt;&lt;/b&gt;) much easier.
&lt;/p&gt;
&lt;p&gt;
So why this post? After switching to Ubuntu, first think I've stumbled upon was the HUGE toolbar size used by Eclipse. Horrible. So I had to tweak my &lt;a href=&quot;http://art.gnome.org/themes/gtk2&quot;&gt;GTK themes&lt;/a&gt; and also one of my plugins, to get this toolbar's to the proper dimensions. May be more about this later (I've patched one of Murrine themes), but as a result, I've released a new 1.5.6 version of the &lt;b&gt;&lt;a href=&quot;http://andrei.gmxhome.de/skins/index.html&quot;&gt;Extended VS Presentation&lt;/a&gt;&lt;/b&gt; plugin. Additionally it has a bugfix for the maximize/minimize actions which were not properly working on Linux in some cases.
&lt;/p&gt;
&lt;p&gt;
Enjoy.
&lt;/p&gt;</description>
	<pubDate>Sun, 29 Aug 2010 21:41:53 +0000</pubDate>
</item>
<item>
	<title>Sebastian Zarnekow: Fun with Xtext: Language Mixins</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6255758224607466565.post-3879636950374995509</guid>
	<link>http://zarnekow.blogspot.com/2010/08/language-mixins-with-xtext.html</link>
	<description>There are rumors that &lt;a href=&quot;http://www.xtext.org&quot;&gt;Xtext&lt;/a&gt; does only have rudimentary support for language libraries or language reuse and does not allow to create 'advanced stuff'. And it is actually true, that Xtext has only first class support for extending only one other language. But with some creativity and customizing, it is easily possible to create really nice editors for intermixed languages. I've produced a small screencast that demonstrates how an editor for template proposals (read: a template language) may look like when it's aware of your target syntax.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Besides the smart editor for template proposals there is another interesting feature in this screencast: As template proposals are usually edited on a preference page, I implemented a small prototype that shows how a form field may leverage the features of a full blown Xtext editor.&lt;br /&gt;&lt;br /&gt;Both prototypic implementations are only based on Xtext 1.0 APIs and not yet publicly available. But I'ld assume that at least parts of them will be moved into the Xtext Indigo stream. Stay tuned!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6255758224607466565-3879636950374995509?l=zarnekow.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 29 Aug 2010 20:25:31 +0000</pubDate>
	<author>noreply@blogger.com (Sebastian Zarnekow)</author>
</item>
<item>
	<title>Stephan Herrmann: New Refactoring for OT/J: Change Method Signature</title>
	<guid isPermaLink="false">http://blog.objectteams.org/?p=62</guid>
	<link>http://blog.objectteams.org/2010/08/new-refactoring-of-otj-change-method-signature/</link>
	<description>&lt;h2&gt;IDE Innovation&lt;/h2&gt;
&lt;p&gt;Every now and then some folks report that the IDE they’re developing now supports this or that cool new feature. Sometimes I envy them for such progress - but more often than not I end up realizing that the &lt;a href=&quot;http://wiki.eclipse.org/Object_Teams_Development_Tooling&quot;&gt;OTDT&lt;/a&gt; already has that feature or something very similar. Is that just my personal bias (which certainly I have) or are we cheating in some way, or what?&lt;/p&gt;
&lt;p&gt;There’s a little detail in the design of the OTDT that turns out to make such a difference as normally can only achieved by cheating: by the way how the OTDT extends and adapts the JDT it is like saying we’re starting the race not at the line saying “START” but at the other one saying “FINISH” and run on from there. While many projects define “JDT-like user experience” as their long-term goal, the OTDT basically has this since the first release. How come? The OTDT basically &lt;strong&gt;is&lt;/strong&gt; the JDT, with adaptations.&lt;/p&gt;
&lt;p&gt;There’s a fine point in the word &lt;em&gt;basically&lt;/em&gt;. To tell the truth, every feature that the JDT supports for Java development is &lt;strong&gt;not&lt;/strong&gt; automatically fully available in the OTDT for OT/J development. In fact &lt;em&gt;most&lt;/em&gt; JDT features need adaptation to provide equal convenience for OT/J development. It’s just that all these adaptations can be brought into the system very very easily - thanks to the self-application of OT/Equinox. And now, here is actually an example of a JDT feature that lacked OT/J support - until yesterday:&lt;/p&gt;
&lt;h2&gt;Change Method Signature Refactoring&lt;/h2&gt;
&lt;p&gt;If you refactor mercilessly the “Change Method Signature” refactoring is certainly one of your friends. Add/rename/remove/reshuffle parameters of a method without (too easily) breaking existing code, cool. It knows about the connections from method invocation to method declaration and about overriding. That’s good enough for Java, but not good enough for OT/J since OT/J introduces method bindings (”callout” and “callin”) that create a wiring between methods of different objects. Obviously, if one of the methods being wired changes its signature so must the method binding.&lt;/p&gt;
&lt;p&gt;Technically, the JDT implementation of that refactoring bailed out when it asked a parameter/argument for its parent in the AST and found neither a method declaration nor a method invocation. The JDT refactoring does not know about OT/J method bindings, so it just failed to update those.&lt;/p&gt;
&lt;p&gt;After a little of coding this is what happens now when you apply “Change Method Signature” on a piece of OT/J code. Assume you have a plain Java class:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;otj&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; BaseClass &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; bm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; i, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; b&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
 
	&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; other&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
		bm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and a TeamClass whose contained RoleClass is bound to BaseClass:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;otj&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;team&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; TeamClass &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; RoleClass &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;playedBy&lt;/span&gt; BaseClass &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
 
		&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; rm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; i2, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; b2&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;after&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; bm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; i, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; b&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
 
		&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; rm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; i2, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; b2&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #000000; font-weight: normal;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;b2&lt;span style=&quot;color: #000000;&quot;&gt;?&lt;/span&gt;i2&lt;span style=&quot;color: #000000;&quot;&gt;:-&lt;/span&gt;i2&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here the right-hand side of the callin binding in line 4 refers to the normal method &lt;code&gt;bm(int,boolean)&lt;/code&gt; defined in BaseClass.&lt;/p&gt;
&lt;p&gt;What happens if you start messing around with the signature of &lt;code&gt;bm&lt;/code&gt;?&lt;br /&gt;
Like:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Change Singature - Edit Parameters&quot; class=&quot;aligncenter&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/08/changesignature1.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I.e., we are adding a parameter &lt;code&gt;str&lt;/code&gt; and also change the order of parameters (from i,b to b,str,i). I don’t have to tell you what this refactoring does to BaseClass, but here’s the preview of those changes affecting TeamClass:&lt;br /&gt;
&lt;a href=&quot;http://blog.objectteams.org/wp-uploads/2010/08/changesignature2.png&quot;&gt;&lt;br /&gt;
&lt;img alt=&quot;Change Signature - Preview TeamClass&quot; class=&quot;aligncenter&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/08/changesignature2.png&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;(sorry the screenshot is a bit wide, you may have to click to really see)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The preview shows that the refactoring will do three things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Update the right-hand side of the method binding.&lt;/li&gt;
&lt;li&gt;Add a parameter mapping (the part starting with “&lt;code&gt;with&lt;/code&gt;“) to ensure that the role method &lt;code&gt;rm&lt;/code&gt; receives the arguments it needs, the way it needs them.&lt;/li&gt;
&lt;li&gt;Do &lt;strong&gt;not&lt;/strong&gt; update any part of the role implementation, because that’s what the parameter mapping is for: shield the role implementation from any outside changes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Some words on these parameter mappings: each element like “&lt;code&gt;b2 &amp;lt;- b&lt;/code&gt;” feeds a value from the right-hand side (representing things at the baseclass side) into the parameter at the left-hand side (representing the role). The list of parameter mappings is not ordered, which means further swapping of base side parameters requires no further action. And indeed the current implementation of the refactoring does not attempt to adjust an existing parameter mapping (which might be a quite complex task). If adjustments are required which the refactoring cannot perform automatically, it will inform the user that perhaps a parameter mapping may need manual adjustment.&lt;/p&gt;
&lt;p&gt;The refactoring applies no AI to guess what the intended solution should look like, but it performs a number of obvious adaptations and gives note when these adaptations may not suffice and manual cleanup may be needed.&lt;/p&gt;
&lt;h2&gt;Implementation&lt;/h2&gt;
&lt;p&gt;Those who have read previous posts may (almost) know the kind of statistics that follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;299 LOC implementation&lt;/li&gt;
&lt;li&gt;315 LOC testcode&lt;/li&gt;
&lt;li&gt;170 LOC testdata&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I should really show one of these OT/J based implementation, one of these days. For this post I will just give you an Outline, literally:&lt;br /&gt;
&lt;img alt=&quot;Implementation Outline&quot; class=&quot;aligncenter&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/08/changesignature3.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Role class Processor is bound to the JDT’s ChangeSignatureProcessor, and the nested roles OccurrenceUpdate and MethodSpecUpdate are bound to two inner classes of ChangeSignatureProcessor, which shows how even class nesting at the base level can be mapped to the team &amp;amp; role level. Instances of the innermost roles will only ever come into being, if a Processor role has detected that it needs to work in order to handle OT/J specific code. Inside each role - apart from regular fields and methods - you see those green arrow-things, denoting method bindings between a role and its base. The highlighted binding to &lt;code&gt;createOccurrenceUpdate&lt;/code&gt; is actually the initial entry into the logic of this module. Further down you see how the base behavior &lt;code&gt;reshuffleElements&lt;/code&gt; is intercepted to additionally add parameter mappings if needed (and yes, I’m hiding the details of role MethodSpecUpdate, but there are no secrets inside, I just more methods and more method bindings).&lt;/p&gt;
&lt;p&gt;Voilà, we indeed have a new refactoring for OT/J. I’ve been planning this one for a while but in the end it took me little more than a day &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://blog.objectteams.org/wp-includes/images/smilies/icon_smile.gif&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 29 Aug 2010 19:54:31 +0000</pubDate>
</item>
<item>
	<title>Karl Beecher: New Saros release: 10.8.27</title>
	<guid isPermaLink="false">http://computerfloss.wordpress.com/?p=558</guid>
	<link>http://computerfloss.wordpress.com/2010/08/28/new-saros-release-10-8-27/</link>
	<description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignleft size-full wp-image-494&quot; height=&quot;100&quot; src=&quot;http://computerfloss.files.wordpress.com/2010/05/saros-logo-100x100.png?w=100&amp;amp;h=100&quot; title=&quot;saros-logo&quot; width=&quot;100&quot; /&gt;Another month, another Saros release. This time around it consists mostly of bugfixes…&lt;/p&gt;
&lt;p&gt;… but be advised. There are now a couple of &lt;em&gt;dozen&lt;/em&gt; youngling programmers busying away at Saros code like worker bees for the next few weeks.&lt;/p&gt;
&lt;p&gt;Expect a bumper crop of fixes and features in September!&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/computerfloss.wordpress.com/558/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/computerfloss.wordpress.com/558/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/computerfloss.wordpress.com/558/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/computerfloss.wordpress.com/558/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/computerfloss.wordpress.com/558/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/computerfloss.wordpress.com/558/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/computerfloss.wordpress.com/558/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/computerfloss.wordpress.com/558/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/computerfloss.wordpress.com/558/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/computerfloss.wordpress.com/558/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/computerfloss.wordpress.com/558/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/computerfloss.wordpress.com/558/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/computerfloss.wordpress.com/558/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/computerfloss.wordpress.com/558/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=computerfloss.wordpress.com&amp;amp;blog=11433662&amp;amp;post=558&amp;amp;subd=computerfloss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sat, 28 Aug 2010 21:42:36 +0000</pubDate>
</item>
<item>
	<title>Manuel Selva: Modify a file in response to IResourceChangeListener</title>
	<guid isPermaLink="false">http://manuelselva.wordpress.com/?p=343</guid>
	<link>http://manuelselva.wordpress.com/2010/08/27/modify-a-file-in-response-to-iresourcechangelistener/</link>
	<description>&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p&gt;In the context of an &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IResourceChangeListener.html&quot;&gt;IResourceChangeListener&lt;/a&gt; I need to modify a given preference file in the workspace.  Because of&lt;em&gt; “Note that during resource change event notification, further changes  to resources may be disallowed.” &lt;/em&gt;the only solution to perform this change is to delay it on a future event (5 seconds later, on the next access to the file to be modified, on the next selection event, etc ..)&lt;/p&gt;
&lt;p&gt;I would be interested to know how do you handle such situation ?&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=manuelselva.wordpress.com&amp;amp;blog=2529905&amp;amp;post=343&amp;amp;subd=manuelselva&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 27 Aug 2010 11:44:41 +0000</pubDate>
</item>
<item>
	<title>Mariot Chauvin: Search in eclipse forum</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3193880670773749221.post-1980091716205876568</guid>
	<link>http://mariot-thoughts.blogspot.com/2010/08/search-in-eclipse-forum_9055.html</link>
	<description>If you would like to search in eclipse forum, here is a quick form which may help you.&lt;br /&gt;&lt;br /&gt;&lt;form action=&quot;http://www.google.com/search?q=&quot; method=&quot;GET&quot;&gt;&lt;br /&gt;&lt;br /&gt;Project name:&lt;input name=&quot;projectName&quot; type=&quot;text&quot; /&gt;&lt;br /&gt;Your search: &lt;input name=&quot;userSearch&quot; type=&quot;text&quot; /&gt;&lt;br /&gt;&lt;input name=&quot;as_sitesearch&quot; type=&quot;hidden&quot; value=&quot;eclipse.org&quot; /&gt;&lt;br /&gt;&lt;input name=&quot;template&quot; type=&quot;hidden&quot; value=&quot;Eclipse Community Forums: &quot; /&gt;&lt;br /&gt;&lt;input name=&quot;q&quot; type=&quot;hidden&quot; value=&quot;&quot; /&gt;&lt;br /&gt;&lt;input type=&quot;submit&quot; value=&quot;Search&quot; /&gt;&lt;br /&gt;&lt;/form&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3193880670773749221-1980091716205876568?l=mariot-thoughts.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 27 Aug 2010 10:32:47 +0000</pubDate>
	<author>noreply@blogger.com (Mariot Chauvin)</author>
</item>
<item>
	<title>Eclipse Labs - Most Active Project: Eclipse Labs Projects Update for the week of August 27th 2010</title>
	<guid isPermaLink="true">http://code.google.com/a/eclipselabs.org/hosting/</guid>
	<link>http://code.google.com/a/eclipselabs.org/hosting/</link>
	<description>&lt;h2&gt;Most Active Projects&lt;/h2&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/code-recommenders&quot;&gt;code-recommenders&lt;/a&gt; - IDE 2.0: Bringing Collective Intelligence into Software Development&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/anyedittools&quot;&gt;anyedittools&lt;/a&gt; - AnyEdit plugin adds several new tools to the context menu of text based Eclipse editors, to Eclipse main menu and editor toolbar&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/birt-functions-lib&quot;&gt;birt-functions-lib&lt;/a&gt; - A collection of BIRT Aggregate and Script Function Extensions for use in your project&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/birt-controls-lib&quot;&gt;birt-controls-lib&lt;/a&gt; - A collection of BIRT ReportItems created through the ReportItem extension point.&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/wascana&quot;&gt;wascana&lt;/a&gt; - Wascana Eclipse C/C++ IDE for Windows Developers&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/onotoa&quot;&gt;onotoa&lt;/a&gt; - Onotoa is a visual editor for the Topic Maps Constraint Language.&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/skin4eclipse&quot;&gt;skin4eclipse&lt;/a&gt; - Extended VS Presentation plugin contributes Eclipse skin and editing sessions management&lt;br /&gt;
	&lt;br /&gt;&lt;br /&gt;
	&lt;h2&gt;New Projects&lt;/h2&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/e-dziennik-inz&quot;&gt;e-dziennik-inz&lt;/a&gt; - Elektroniczny dziennik wspomagania prowadzenia zajęc&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/mydarkspot&quot;&gt;mydarkspot&lt;/a&gt; - chat&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/alice7erros&quot;&gt;alice7erros&lt;/a&gt; - Jogo dos 7 erros para o projeto Alice realizado no colégio NAVE&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/dreamforce&quot;&gt;dreamforce&lt;/a&gt; - DreamForce&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/clubvelicotsw2&quot;&gt;clubvelicotsw2&lt;/a&gt; - ClubVelico&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/photoproject&quot;&gt;photoproject&lt;/a&gt; - photo print and other apps&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/twitteclipse&quot;&gt;twitteclipse&lt;/a&gt; - twitter client as eclipse plugin&lt;br /&gt;</description>
	<pubDate>Fri, 27 Aug 2010 04:59:00 +0000</pubDate>
</item>
<item>
	<title>Sven Efftinge: Will talk about Xtext in Antwerp and Stockholm soon.</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24248206.post-3356067999977317003</guid>
	<link>http://blog.efftinge.de/2010/08/will-talk-about-xtext-in-antwerp-and.html</link>
	<description>I have the pleasure to present Xtext in two of the most beautiful european cities within the next two weeks. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Belgian Eclipse Community Meeting (Antwerp)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll be in Antwerp next Tuesday and meet up with Belgian's Eclipse Community.&lt;/div&gt;&lt;div&gt;The event is free of charge and the details can be found &lt;a href=&quot;http://wiki.eclipse.org/Regional_Communities/Belgium&quot;&gt;here&lt;/a&gt;. There's also a presentation of EGit, which I'm looking forward to see (I'll have lots of questions :-)).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&quot;Developing Domain-Specific Languages with Xtext&quot; (Stockholm)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A week later on Thursday, the 9th, I'll be in Stockholm. The event is sponsored by &lt;a href=&quot;http://www.jayway.se/&quot;&gt;Jayway&lt;/a&gt; and there will be two presentations. First I'll talk about Xtext and afterwards Patrik Nordwall and Andreas Källberg will present &lt;a href=&quot;http://sites.google.com/site/fornaxsculptor/&quot;&gt;Sculptor&lt;/a&gt;, which is an open-source framework/code generator based on textual DSLs implemented in Xtext.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The event is also free of charge. &lt;a href=&quot;http://jwsdsl09sep.eventbrite.com/&quot;&gt;Register here.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/24248206-3356067999977317003?l=blog.efftinge.de&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 26 Aug 2010 21:03:13 +0000</pubDate>
	<author>noreply@blogger.com (Sven Efftinge)</author>
</item>
<item>
	<title>EclipseLive: Reminder - Eclipse Virgo</title>
	<guid isPermaLink="false">http://live.eclipse.org/963 at http://live.eclipse.org</guid>
	<link>http://live.eclipse.org/node/963</link>
	<description>&lt;div class=&quot;field field-type-text field-field-author&quot; id=&quot;author&quot;&gt;
  &lt;span class=&quot;field-item&quot;&gt;Glyn Normington (VMware), Steve Powell (VMware)&lt;/span&gt;
&lt;/div&gt;

&lt;div class=&quot;resource-icon&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://live.eclipse.org/files/ECLP_webinar.gif&quot; /&gt; &lt;/div&gt;  

&lt;div id=&quot;abstract&quot;&gt;
	&lt;span class=&quot;field-label&quot;&gt;Abstract:&lt;/span&gt;  
	&lt;div class=&quot;field field-type-text field-field-author&quot;&gt;
	  &lt;span class=&quot;field-item&quot;&gt;&lt;p&gt;The Eclipse Virgo project provides a modular open source application server based on OSGi. The project is a donation to the Eclipse foundation of the dm Server open source project developed by SpringSource (VMware). Virgo provides a standalone kernel which may be used on its own or configured to create custom server types. Virgo Web Server integrates the Gemini Web container on top of the kernel to support standard WAR files and modular webapps comprising OSGi bundles.&lt;/p&gt;

&lt;p&gt;In this webinar, we'll explore the key features of Virgo such as: repositories, deployment plans, regions, Equinox console extensions and administration console. We'll demonstrate the Eclipse-based tooling and the runtime facilities of Virgo. We'll also cover the current status of the project and how you can get involved.&lt;/p&gt;

&lt;p&gt;Total running time will be approximately 1 hour&lt;/p&gt;

&lt;p&gt;8:00 am PDT / 11:00 am EDT / 3:00 pm UTC / 5:00 pm CEST - &lt;a href=&quot;http://www.timeanddate.com/worldclock/fixedtime.html?month=8&amp;amp;day=31&amp;amp;year=2010&amp;amp;hour=15&amp;amp;min=0&amp;amp;sec=0&amp;amp;p1=0&quot; target=&quot;&quot;&gt;Convert to other time zones&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to Adobe for contributing their Adobe Acrobat Connect product to host this webinar.&lt;br /&gt;
&lt;img height=&quot;10&quot; src=&quot;http://live.eclipse.org/files/images/adobeconnect.jpg&quot; /&gt;&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
	  &lt;span class=&quot;field-item&quot;&gt;&lt;a href=&quot;http://del.icio.us/post?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Bookmark this post on del.icio.us.&quot;&gt;&lt;img alt=&quot;delicious&quot; src=&quot;http://live.eclipse.org/modules/service_links/delicious.png&quot; /&gt; delicious&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Digg this post on digg.com.&quot;&gt;&lt;img alt=&quot;digg&quot; src=&quot;http://live.eclipse.org/modules/service_links/digg.png&quot; /&gt; digg&lt;/a&gt; | &lt;a href=&quot;http://www.dzone.com/links/add.html?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Tag this post on DZone.&quot;&gt;&lt;img alt=&quot;dzone&quot; src=&quot;http://live.eclipse.org/modules/service_links/dzone.png&quot; /&gt; dzone&lt;/a&gt;&lt;/span&gt;
	&lt;/div&gt;
	
&lt;/div&gt;

&lt;div id=&quot;embedded&quot;&gt;
	  &lt;/div&gt;</description>
	<pubDate>Thu, 26 Aug 2010 13:22:12 +0000</pubDate>
	<author>lynn.gayowski@eclipse.org (EclipseLive)</author>
</item>
<item>
	<title>Bob Balfe: Poll: Do you or your customers develop or use applications on salesforce.com?</title>
	<guid isPermaLink="true">http://blog.balfes.net/?p=1598</guid>
	<link>http://blog.balfes.net/?p=1598</link>
	<description>&lt;p&gt;I have been checking out developer.force.com this week and it is a pretty extensive cloud based solution for developing, deploying, and using applications in the cloud.  I checked out their Eclipse based development videos and the development environment looks pretty comprehensive.  I would like to hear if anyone who reads this blog has any real experiences they would like to share about it.  I am also interested to hear how many of my readers have real exposure to SalesForce.com.&lt;/p&gt;
&lt;p&gt;If you use SalesForce.com in any manner, application use, develop for, deploy on, integrate with or any of the above please take some time to post your answer below and possibly a comment on your experiences.&lt;/p&gt;
&lt;p&gt;If you are a Lotus customer I would like to hear how you integrate your XPages, Domino or Notes applications with SalesForce.com.&lt;/p&gt;
&lt;p&gt;Thanks in advance!&lt;/p&gt;
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.</description>
	<pubDate>Thu, 26 Aug 2010 12:30:25 +0000</pubDate>
</item>
<item>
	<title>Holger Voormann: An Inconvenient Process</title>
	<guid isPermaLink="false">http://eclipsehowl.wordpress.com/?p=513</guid>
	<link>http://eclipsehowl.wordpress.com/2010/08/26/an-inconvenient-process/</link>
	<description>&lt;p&gt;Today I vetoed the nomination of five potential committers. This is something I really disliked and hated doing but I believe I had to: all five nominated persons have reported a few bugs but have not (yet) contributed a single patch. They have been nominated because the company they work for is going to contribute &lt;a href=&quot;http://wiki.eclipse.org/WTP/Service_Interface_and_Data_Types_Editors/Proposal&quot;&gt;a cool feature to the WTP Incubator&lt;/a&gt; project and these people are supposed to maintain the code. Unfortunately, the contribution is still outstanding and the code is not yet Open Source.&lt;/p&gt;
&lt;p&gt;What do you think? Should the Eclipse Process be changed so that everyone who likes to contribute and signs the &lt;a href=&quot;http://www.eclipse.org/legal/EclipseMemberCommitterAgreementFinal.pdf&quot;&gt;Member Committer Agreement&lt;/a&gt; automatically becomes a committer? We have &lt;del datetime=&quot;2010-08-30T19:19:33+00:00&quot;&gt;fewer than 500&lt;/del&gt; about 1,000 [see Wayne’s comment below] Eclipse committers and probably in every Eclipse project there is a need for more contributors and committers. To lower the hurdle of becoming a committer also means lowering the attractiveness of being one of a select group of Eclipse committers and this may have the opposite effect: less instead of more active committers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; After the code had been made public as an attachment in Eclipse Bugzilla I restarted the nomination. The code really looks good and I’m happy that WTP Incubator will grow by an interesting feature and by five committers who deserve this status. Looking back, I think that when a nomination comes along with a contribution we should always demand that the contribution is made public before or at the very beginning of the nomination process (if it is not already Open Source). Unlike me, you should not only ask for it but also veto as soon as possible so that it is clear that this has to be fixed before the nomination ends (you can then change your vote from -1 to +1 or 0).&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=eclipsehowl.wordpress.com&amp;amp;blog=11064764&amp;amp;post=513&amp;amp;subd=eclipsehowl&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 26 Aug 2010 12:10:34 +0000</pubDate>
</item>
<item>
	<title>Lars Vogel: Local Mylyn tasks distributed via git</title>
	<guid isPermaLink="false">http://www.vogella.de/blog/?p=3072</guid>
	<link>http://www.vogella.de/blog/2010/08/26/local-mylyn-tasks-distributed/</link>
	<description>&lt;div style=&quot;float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;&quot;&gt;
		
		&lt;/div&gt;&lt;p&gt;I learned from &lt;a href=&quot;http://steffenpingel.de/&quot;&gt;Steffen Pingel&lt;/a&gt; and &lt;a href=&quot;http://ekkescorner.wordpress.com/&quot;&gt;Ekkehard Gentz&lt;/a&gt; that &lt;a href=&quot;http://www.vogella.de/articles/Mylyn/article.html&quot;&gt;Mylyn&lt;/a&gt; has the ability to save local tasks outside the workspace. This is hidden under advanced in the Preferences.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/20.08-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-3074&quot; height=&quot;669&quot; src=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/20.08-1.png&quot; width=&quot;634&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This allows you to put your local tasks outside your workspace and versionize them with &lt;a href=&quot;http://www.vogella.de/articles/Git/article.html&quot;&gt;git&lt;/a&gt;. This way you can use git to move your local tasks between machines. I really like this as I frequently use different machines and now I can not only share source code betwee them but also my mylyn taslks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/20.08.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-3076&quot; height=&quot;205&quot; src=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/20.08.png&quot; width=&quot;270&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As &lt;a href=&quot;http://steffenpingel.de/&quot;&gt;Steffen&lt;/a&gt; told me, simultanous access to the Mylyn tasks might cause task corruption but I don’t think that is an issue for me as Git takes care of conflicts and I do not have two machines writing to the same local file. &lt;/p&gt;
&lt;p&gt;Fun times with Git and Mylyn!&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt; &lt;/div&gt;</description>
	<pubDate>Thu, 26 Aug 2010 11:46:01 +0000</pubDate>
</item>
<item>
	<title>Ed Burnette: How to build the perfect Android tablet, part 2: A touch of class</title>
	<guid isPermaLink="true">http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-2-a-touch-of-class/2066</guid>
	<link>http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-2-a-touch-of-class/2066</link>
	<description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-2050&quot; height=&quot;328&quot; src=&quot;http://i.zdnet.com/blogs/perfect_android_tablet.jpg&quot; width=&quot;465&quot; /&gt;&lt;br /&gt;If you could build the perfect Android tablet, what would it look like? That’s the question I asked myself last week when I started this series. The number 1 feature was, well, &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-1/2049&quot;&gt;you can go read about it yourself&lt;/a&gt; if you missed it. Now it’s time for the second most important feature:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;#2: Capacitive touch screen with smooth 10+ finger multi-touch&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Recently I had the &lt;a href=&quot;http://twitter.com/eburnette/status/20431660139&quot;&gt;distinct&lt;/a&gt; &lt;a href=&quot;http://twitter.com/eburnette/status/20435022102&quot;&gt;displeasure&lt;/a&gt; of &lt;a href=&quot;http://www.laptopmag.com/review/tablets/augen-gentouch78.aspx&quot;&gt;trying out&lt;/a&gt; an el-cheapo &lt;a href=&quot;http://www.engadget.com/2010/07/30/augen-gentouch-78-preview/&quot;&gt;Android tablet from Augen&lt;/a&gt; that came with a resistive screen and, of all things, a stylus. Don’t let anybody fool you. Resistive screens are bad. Very bad. I’m serious about this. I don’t care how cheap they are — you should avoid them at all costs. Do. Not. Buy.&lt;/p&gt;&lt;p&gt;Now that that’s out of the way, let’s talk about multi-touch. For the first couple of years of Android history, Android phones were single-touch. Point, tap, drag, and that was about it. iPhones supported multi-touch gestures like pinch zoom, and Android fans suffered the indignity of having the competition do something better than their baby. Well, at least Android had cut-n-paste, so there.&lt;/p&gt;&lt;p&gt;About the time iPhone finally got cut-n-paste, Android got multi-touch. Sort of. Unfortunately the first implementation on the Nexus One was pretty bad. Aside from jerky low-res registration of finger movements, it often got the coordinates of tracked fingers confused. Partly this was because of limited digitizer hardware used by HTC, and partly this was because of, ahem, idiosyncrasies in the software stack. You can read more about it in my &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2/1747&quot;&gt;multi-touch series&lt;/a&gt; and in various discussion groups and bug reports.&lt;/p&gt;&lt;p&gt;Anyhoo, newer phones, especially the Droid Sholes and successors from Motorola, included a better digitizer that fixed some, but not all, of the problems. Still, a fundamental issue remains: At its best, all Android devices on the market as I write this are limited to only tracking 2 fingers at once.&lt;/p&gt;&lt;p&gt;So sure, you can do pinch and zoom but you can forget about 3 finger swipes and more elaborate gestures that people have thought up. More importantly, only having 2 fingers rules out a whole class of applications like guitar and piano applications, synth controllers, chorded keyboards, and games that two or more people can play. Especially, say, on a larger screen, like a tablet.&lt;/p&gt;&lt;p&gt;A tablet practically begs for lots of fingers to touch it. I own an iPad, and one of my favorite programs there is called &lt;a href=&quot;http://magicpiano.smule.com/&quot;&gt;Magic Piano&lt;/a&gt; by Sonic Mule. I can use all 10 fingers at once to play any music that I could play on a real piano. Unfortunately, I can’t play a duet with a friend on the same iPad because it maxes out at 10 or 11 fingers. Any more than that, and the touch screen simply doesn’t register the touches.&lt;/p&gt;&lt;p&gt;Are you hearing this, HTC, Motorola, and Notion Ink? Paying attention, Asus and Samsung? To make the perfect tablet, please bring on that silky smooth capacitive goodness with support for *at least* 10 fingers caressing the screen at once, starting at the hardware level and going all the way through the Android software stack. And if you can, make it better than the iPad by supporting more than 10 fingers at once. My fledgling musical career depends on it.&lt;/p&gt;&lt;p&gt;What would you build into *your* perfect Android tablet? Share your thoughts in the comment area below. And check back next week to find out what’s &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-3-market-watch/2073&quot;&gt;next on my list&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Thu, 26 Aug 2010 03:31:24 +0000</pubDate>
</item>
<item>
	<title>Miles Sabin: Google Summer of Code 2010 @ Scala IDE</title>
	<guid isPermaLink="false">http://www.scala-ide.org/?p=239</guid>
	<link>http://www.scala-ide.org/2010/08/google-summer-of-code-2010/</link>
	<description>&lt;p&gt;&lt;b&gt;UPDATE: an update site including Jin’s GSoC work is now &lt;a href=&quot;http://download.scala-ide.org/&quot;&gt;available&lt;/a&gt;.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I was lucky enough to be the mentor on a Scala IDE for Eclipse project which was selected for this year’s Google Summer of Code. &lt;a href=&quot;http://www.linkedin.com/in/jinmingjian&quot;&gt;Jin Mingjian&lt;/a&gt; was the student for this project, and it’s been wonderful to work with him over the last few months.&lt;/p&gt;
&lt;p&gt;Jin completed his Doctoral degree at the Institute of Electrical Engineering in the Chinese Academy of Sciences this summer … having to deal with his PhD defence at the same time as the GSoC project was quite a tall order!&lt;/p&gt;
&lt;p&gt;He had this to say about himself and about his project …&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I have been involved with the Eclipse community for a long time. When I discovered Scala this year, I realized that it was the language that I need. The openness of Scala struck me, as much as the technical merits of the language itself. The Scala IDE community combines two great open source communities and this summer’s GSoC gave me the opportunity to work on it. I like being part of this community. Join us to help to create great Scala tools!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Now that the GSoC &lt;a href=&quot;http://socghop.appspot.com/document/show/gsoc_program/google/gsoc2010/timeline&quot;&gt;‘pencils down’ date&lt;/a&gt; has arrived, it is time to report to the community about the achievements of my Scala IDE project. The goal of this project is to provide &lt;a href=&quot;http://www.scala-lang.org/gsoc2010&quot;&gt;Advanced Semantic Tools for the Scala IDE for Eclipse&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;First, I am very appreciative for lots of helpful suggestions, advice and encouragement from my mentor Miles Sabin and other guys in the community. Without their help, it would not have been possible to finish this project.&lt;/p&gt;
&lt;p&gt;There is a &lt;a href=&quot;http://www.assembla.com/wiki/show/scala-ide/Google_Summer_of_Code&quot;&gt;wiki page&lt;/a&gt; on the Scala IDE project site which explains some aspects of the features. Let me introduce them by starting with an example code snippet,&lt;/p&gt;
&lt;pre&gt;object String2Int {
  val a = &quot;1&quot;;
  var b: java.lang.String = &quot;3&quot;;
  implicit val somewords = new SomeWords(&quot;yeah!&quot;)

  implicit def string2Int(s: String) = {
    ((s.toInt)+1)
  }

  def main(args:Array[String]) {
    printInt(string2Int(&quot;3&quot;))
    printInt(a+b)
    printIntWithSomeWords(&quot;5&quot;)(new SomeWords(&quot;...&quot;))
    printIntWithSomeWords(2)

    val map = Map( 1 -&amp;gt;&quot;one&quot;,2-&amp;gt;&quot;two&quot;)
  }

  def printInt(a:Int) {
    println(a)
  }

  def printIntWithSomeWords(a: Int)(implicit sw: SomeWords) {
    println(a)
    println(sw.words)
  }

  class SomeWords(val words: String)
}
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This code stems from an example in &lt;a href=&quot;http://www.artima.com/shop/programming_in_scala&quot;&gt;Programming in Scala&lt;/a&gt;. But I modified it to be “more implicit”.&lt;/p&gt;
&lt;p&gt;When you open the editor, all the places where implicit conversions and implicit parameters occur (not the implicit definitions themselves) have been highlighted, as follows,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-01.png&quot;&gt;&lt;img alt=&quot;Implicit visualization&quot; class=&quot;alignleft size-full wp-image-240&quot; height=&quot;459&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-01.png&quot; title=&quot;image-01&quot; width=&quot;691&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Perhaps you don’t like the default green squiggly underlines as the visual indicator of implicit occurrences? Then you can customize the highlight style via &lt;i&gt;Windows -&amp;gt; Preferences -&amp;gt; Scala -&amp;gt; Editor -&amp;gt; Syntax Coloring&lt;/i&gt; as follows,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-02.png&quot;&gt;&lt;img alt=&quot;Preferences&quot; class=&quot;alignleft size-full wp-image-241&quot; height=&quot;332&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-02.png&quot; title=&quot;image-02&quot; width=&quot;595&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can hide the highlighting by clearing the checkboxes and setting the underline style to “none”. In future we will add an enable/disable check box to simplify this process.&lt;/p&gt;
&lt;p&gt;Along with the visual annotation for implicits, we provide automation around the annotation, known in Eclipse terminology as “quick assists”. The default shortcut for quick assist is “Ctrl+1″. The following screenshot shows the quick assist for an implicit conversion,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-03.png&quot;&gt;&lt;img alt=&quot;Implicit quick assist&quot; class=&quot;alignleft size-full wp-image-242&quot; height=&quot;361&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-03.png&quot; title=&quot;image-03&quot; width=&quot;530&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After applying this quick assist we get the explicit version of above implicit conversion,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-04.png&quot;&gt;&lt;img alt=&quot;Inline expansion&quot; class=&quot;alignleft size-full wp-image-243&quot; height=&quot;69&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-04.png&quot; title=&quot;image-04&quot; width=&quot;284&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following screenshot shows the quick assist for implicit parameters,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-05.png&quot;&gt;&lt;img alt=&quot;Implicti parameter quick assist&quot; class=&quot;alignleft size-full wp-image-244&quot; height=&quot;201&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-05.png&quot; title=&quot;image-05&quot; width=&quot;580&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After the applying the quick assist, we see the implicit arguments defined in the scope explicitly inlined as follows,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-06.png&quot;&gt;&lt;img alt=&quot;After inlining&quot; class=&quot;alignleft size-full wp-image-245&quot; height=&quot;107&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-06.png&quot; title=&quot;image-06&quot; width=&quot;348&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of Scala’s important features is support for type inference. With type inference we are not forced to write many tedious type decorations. However, Scala is a strongly type language and in some contexts it is better to declare the type explicitly, for example method return types.&lt;/p&gt;
&lt;p&gt;So we have added functionality which provides explicit type completion, activated automatically by typing “:”. The current implementation is limited to val and method definitions for which the type can be inferred.&lt;/p&gt;
&lt;p&gt;The following screenshot shows that I want to add an explicit type for val map. So I type the “:” after the map identifier. Then I get the inferred type quick assist here,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-07.png&quot;&gt;&lt;img alt=&quot;Inferred type completion&quot; class=&quot;alignleft size-full wp-image-246&quot; height=&quot;56&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-07.png&quot; title=&quot;image-07&quot; width=&quot;434&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When I press Enter, we see the following,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-08.png&quot;&gt;&lt;img alt=&quot;Inferred type completion after expansion&quot; class=&quot;alignleft size-full wp-image-247&quot; height=&quot;34&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-08.png&quot; title=&quot;image-08&quot; width=&quot;629&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Currently the explicit type is a little long. In future we will allow the qualified part to be moved to the import section.&lt;/p&gt;
&lt;p&gt;It is a best practice to add explicit return types for methods (other than for methods which return Unit type). And sometimes you forget to add the “=” when defining a method. This makes the whole method return Unit unfortunately. With our new functionality and that best practice quick assist, you can find and fix this kind of mistake easily. For example, suppose you wanted to add the type for the method by “:” auto-completion. But you find that the proposed type is Unit. Then you will realize that you missed the “=”,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-09.png&quot;&gt;&lt;img alt=&quot;Inferred return type completion&quot; class=&quot;alignleft size-full wp-image-248&quot; height=&quot;61&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-09.png&quot; title=&quot;image-09&quot; width=&quot;357&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Correct it and add the right type again as follows,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-10.png&quot;&gt;&lt;img alt=&quot;Inferred return type completion after expansion&quot; class=&quot;alignleft size-full wp-image-249&quot; height=&quot;61&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-10.png&quot; title=&quot;image-10&quot; width=&quot;477&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adding explicit types for val and method definition is a piece of cake now. In future we will improve explicit type completion to propose types from the classpath if the exact type cannot be inferred.&lt;/p&gt;
&lt;p&gt;What do you think about these new features? A build/update site of the GSoC branch will be available shortly and any feedback will be appreciated. When the features has been proven stable, we will merge them into the main distribution. Then everyone can try them out!&lt;/p&gt;</description>
	<pubDate>Wed, 25 Aug 2010 19:00:50 +0000</pubDate>
</item>
<item>
	<title>Ed Merks: Taking to the Clouds</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3879044552984472733.post-4351490535994701078</guid>
	<link>http://ed-merks.blogspot.com/2010/08/taking-to-clouds.html</link>
	<description>I've been working hard these past weeks in my evil secret lair.  Well, maybe not so secret, given that the results are, in true open source fashion, open: &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323050&quot;&gt;323050&lt;/a&gt;.   But it's definitely evil: among my tasks this week has been rejecting 6 out of every 7 Eclipse Summit Europe modeling submissions.  I'm sure no one will take it personally and I'll remain ever so popular. Not!  In any case, I'm taking to the clouds today!&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_rFZqMGOSYY8/THU1jaXep_I/AAAAAAAABpk/wbOzER4p3BY/s1600/FloatPlane.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5509368601647163378&quot; src=&quot;http://3.bp.blogspot.com/_rFZqMGOSYY8/THU1jaXep_I/AAAAAAAABpk/wbOzER4p3BY/s320/FloatPlane.jpg&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 260px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;That's right, I'm headed for Google's headquarters, with my brand new passport anxiously awaiting its first stamp of approval.  (Did you know that a trip through the washing machine will launder all evidence of ever having been to the states?)  It's &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010&quot;&gt;Eclipse Day at the Googleplex&lt;/a&gt; where I'll be unveiling my master plan: world domination for Eclipse Modeling. Resistance is futile.  Expect to be assimilated soon.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3879044552984472733-4351490535994701078?l=ed-merks.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 15:38:38 +0000</pubDate>
	<author>noreply@blogger.com (Ed Merks)</author>
</item>
<item>
	<title>Eclipse Riena: Who wants closable SubModules?</title>
	<guid isPermaLink="true">http://www.compeople.eu/blog/?p=450</guid>
	<link>http://www.compeople.eu/blog/?p=450</link>
	<description>&lt;p&gt;After working on the Riena framework for nearly a year now, together with some colleagues I am challanged to use Riena to build a small Client Server Application for our team. I never thought what a refreshing eye opener this can be from time to time. It is one thing to sit in your closed framework environment where everything makes total sense, but suddenly sitting on the other side of the table often makes you want more.&lt;/p&gt;
&lt;h5&gt;The requirement&lt;/h5&gt;
&lt;p&gt;So while designing the structure for our application we came across a requirement for Riena: closable SubModules. Until then, only Modules and ModuleGroups were closable via the UI, but as soon as a SubModule was added to the navigation tree it was there until the parent Module was closed or until it was removed programmatically in another way.&lt;/p&gt;
&lt;h5&gt;The ideas&lt;/h5&gt;
&lt;p&gt;The first step was to think about solutions in our own application, so we put a close button on every view that should be closable. Now that was ugly! But it was the fastest way to get the functionality. Okay, now that we had the functionality we had some time to think about solutions that would flowlessly fit into the Riena design:&lt;/p&gt;
&lt;div class=&quot;wp-caption alignright&quot; id=&quot;attachment_466&quot; style=&quot;width: 182px;&quot;&gt;&lt;a href=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/08/close_navi.png&quot;&gt;&lt;img alt=&quot;close button in navigation&quot; class=&quot;size-full wp-image-466&quot; height=&quot;211&quot; src=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/08/close_navi.png&quot; title=&quot;close button in navigation&quot; width=&quot;172&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Idea No. 1&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;1. Put the close button &lt;strong&gt;in the navigation tree&lt;/strong&gt; and let in only show up when the mouse is hovering over the node in the tree. This would have the advantage that it fits into Rienas design quite well, since the close buttons for the Modules are in the navigation as well. But the disadvantage was that we only have limited resources to work on our application and this solution would have taken quite a long time. There had to be an easier way.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignleft&quot; id=&quot;attachment_498&quot; style=&quot;width: 177px;&quot;&gt;&lt;a href=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/08/close_titlebar.png&quot;&gt;&lt;img alt=&quot;Idea No. 3&quot; class=&quot;size-full wp-image-498&quot; height=&quot;170&quot; src=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/08/close_titlebar.png&quot; title=&quot;Close button in the title bar&quot; width=&quot;167&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Idea No. 3&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;2. Put the close button &lt;strong&gt;underneath the title bar&lt;/strong&gt;. This would have been in the top right corner of the SubModuleView. But after some discussion this idea was dropped because it would have been a large change for all existing SubModuleViews now having to share the space with a little button.&lt;/p&gt;
&lt;p&gt;3. Put the close button &lt;strong&gt;in the title bar of the SubModule&lt;/strong&gt;. This is similar to the close buttons in the Microsoft Office Suite, where a second button under the “application close button” closes only the document visible at the time. It isn’t as flawless as Idea No. 1, but very easy to accomplish because the SubModuleTitleBar renderer extends the renderer of all Modules. Yeah, that was nice.&lt;/p&gt;
&lt;h5&gt;The solution&lt;/h5&gt;
&lt;p&gt;As you probably already guessed, solution No. 3 was implemented. All we had to do was to give the SubModuleNode the attribute “closable” and move some code around to make the close button show up in the title bar of the SubModuleView. Perhaps in the future we can also implement solution No. 1 and let the application programmer choose which one to use as we did with the error decoration.&lt;/p&gt;
&lt;p&gt;What do you think? Would you use closable SubModules? Which solution would you have preferred?&lt;/p&gt;</description>
	<pubDate>Wed, 25 Aug 2010 12:18:10 +0000</pubDate>
</item>
<item>
	<title>Ankur Sharma: Headless Build for Beginners - part V</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5914783.post-4465210355234542417</guid>
	<link>http://blog.ankursharma.org/2010/08/headless-build-for-beginners-part-v.html</link>
	<description>&lt;b&gt;Headless building Update Site&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There is no easy way to achieve this. There have been some &lt;a href=&quot;http://dev.eclipse.org/newslists/news.eclipse.platform/msg25629.html&quot;&gt;discussions&lt;/a&gt; in past and the &lt;a href=&quot;http://www.eclipse.org/articles/Article-PDE-Automation/automation.html&quot;&gt;Build and Test Automation article&lt;/a&gt; too touched it in brief. But its all hacky. I tried various stuff but the closest I could get was build features and plug-ins using (mentioned in) a site.xml and generating the metadata for them. The site.xml can be placed with them manually but I could not find a way to (automatically) update the site.xml with the feature and plug-ins build qualifiers. (There are always hacks like having a dummy site.xml and do a find-replace in it. Or write a custom ant task that emits XML for ste.xml - none of the hack is very maintainable or scalable)&lt;br /&gt;&lt;br /&gt;After more investigation I realized may be I was trying to solve the wrong problem. We really don't need the update site (not if you are using Eclipse 3.4 or later). A p2 repository is not only easy to generate but is also the recommended way of distributing features and plug-ins.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Headless building a p2 repository&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now a p2 repo can be generated either from a bunch of features and plug-ins or directly from a product configuration. Both explained in &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_publisher.html&quot;&gt;Eclipse help&lt;/a&gt;. We will here take a product configuration and build a p2 repository for it. The setup will be same as &lt;a href=&quot;http://blog.ankursharma.org/2010/07/headless-build-for-beginners-part-iii.html&quot;&gt;discussed before&lt;/a&gt;. However this time, we will copy all the files from &lt;i&gt;/org.eclipse.pde.build/templates/headless-build&lt;/i&gt; folder to our build configuration folder (&lt;i&gt;build\buildConfiguration&lt;/i&gt;). Thus, the build structure will now looks like this&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:text&quot;&gt;&amp;lt;buildConfigurationDirectory&amp;gt;&lt;br /&gt;       allElements.xml&lt;br /&gt;       build.properties&lt;br /&gt;       customAssembly.xml&lt;br /&gt;       customTargets.xml&lt;br /&gt;&amp;lt;buildDirectory&amp;gt;&lt;br /&gt;       plugins/&lt;br /&gt;              com.example.helloworld&lt;br /&gt;              com.example.product&lt;br /&gt;                     example.product&lt;br /&gt;       features/&lt;br /&gt;              com.example.helloworld.feature&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The current setup will generate the product when build. We now need to add a hook for repository generation. This can be done in &lt;i&gt;customAssembly.xml&lt;/i&gt;. Open it in Eclipse or your favorite text editor and make the following changes in &lt;i&gt;post.gather.bin.parts&lt;/i&gt; target.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;target name=&quot;post.gather.bin.parts&quot;&amp;gt;&lt;br /&gt; &amp;lt;p2.publish.featuresAndBundles&lt;br /&gt;  repository=&quot;file:/${buildDirectory}/repository&quot;&lt;br /&gt;  source=&quot;${buildDirectory}/tmp/${archivePrefix}&quot; &lt;br /&gt;  compress=&quot;true&quot;&lt;br /&gt; &amp;gt;&lt;br /&gt; &amp;lt;/p2.publish.featuresAndBundles&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;       &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that &lt;i&gt;p2.publish.featuresAndBundle&lt;/i&gt;s is just of the of ant task that can be used to generate metadata. There are &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_publishingtasks.htm&quot;&gt;more &lt;/a&gt;for different situations. The idea here was more to see how to add custom call in ant scripts.&lt;br /&gt;&lt;br /&gt;Run the build as before&lt;br /&gt;&lt;pre class=&quot;brush:text&quot;&gt;java -jar c:\eclipse\plugins\org.eclipse.equinox.launcher_1.1.0.v20100507.jar -application org.eclipse.ant.core.antRunner -buildfile c:\eclipse\plugins\org.eclipse.pde.build_3.6.0.v20100603\scripts\productBuild\productBuild.xml -Dbuilder=c:\build\buildConfiguration&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This will create a p2 metadata repository in &lt;i&gt;file:/${buildDirectory}/repository&lt;/i&gt; folder. You can control the location using &lt;i&gt;repository&lt;/i&gt; property.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5914783-4465210355234542417?l=blog.ankursharma.org&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 11:30:00 +0000</pubDate>
	<author>sharma.ankur@gmail.com (Ankur Sharma)</author>
</item>
<item>
	<title>Marcel Bruch: Eclipse and Academia - Briding the Gap between Practitioners and Researchers? A project proposal...</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1479535086136999079.post-5859063408095535052</guid>
	<link>http://code-recommenders.blogspot.com/2010/08/eclipse-and-academia-briding-gap.html</link>
	<description>&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;A few months ago Chris started a discussion about &lt;a href=&quot;http://aniszczyk.org/2010/03/11/eclipse-and-academia/&quot;&gt;Eclipse and Academia&lt;/a&gt; and how Eclipse could support research projects to participate in the Eclipse Ecosystem. Furthermore, the upcoming &lt;a href=&quot;http://it-republik.de/jaxenter/eclipse-magazin-ausgaben/&quot;&gt;Eclipse Magazin&lt;/a&gt; will also contribute to this discussion. However, the discussion how Eclipse could help and benefit from research projects is dangling. With this post, I would like to pick pick up Chris' blog post and present an idea how eclipse and research community could get together to create something (I think) very fancy... &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style=&quot;font-family: inherit;&quot; wrap=&quot;&quot;&gt;In my last posts, I presented our preliminary work on improving IDEs leveraging the hidden knowledge available in example code that uses other APIs (visit &lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/code-recommenders/&quot;&gt;code-recommenders@eclipselabs&lt;/a&gt; and the &lt;a href=&quot;http://www.stg.tu-darmstadt.de/research/core/&quot;&gt;official project homepage&lt;/a&gt;  for more details). A few weeks ago we wrote down our vision of how future IDEs should work---which you can find and comment below. This post is basically the preprint version of this paper (which got accepted today at the Working Conference &quot;Future of Software Engieering Research&quot;) and we would love to get the &lt;i&gt;&lt;b&gt;your&lt;/b&gt;&lt;/i&gt; feedback to the vision we present here. As said above, we did a lot of work to get where we are today and the question is now: Should we continue to let the visions below come reality? Clearly, this vision will only work with a very vital community around the project - which I think can be found nowhere else than at Eclipse. But how do you feel about that? Just read the vision and tell us about your opinion (yes, I know it's longer than a standard post. Sorry for that but I hope it's worth reading ;-) ).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;IDE 2.0: Collective Intelligence in Software Development &lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;div style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;ABSTRACT &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Today’s Integrated Development Environments (IDEs) only integrate the tools and knowledge of a single user and workstation. This neglects the fact that the way in which we develop and maintain a piece of software and interact with our IDE provides a rich source of information that can help ourselves and other programmers to avoid mistakes in the future, or improve productivity otherwise. We argue that, in the near future, IDEs will undergo a revolution that will significantly change the way in which we develop and maintain software, through integration of collective intelligence, the knowledge of the masses. We describe the concept of an IDE based on collective intelligence and discuss three example instantiations of such IDEs. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;1 Introduction&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Under the right circumstances, groups are remarkably intelligent and are often better than the smartest person in them. &lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;– James Surowiecki: Wisdom of the Crowds &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;During the past decades, software systems have grown significantly in size and complexity, making software development and maintenance an extremely challenging endeavor. Integrated Development Environments (IDEs) greatly facilitate this endeavor by providing a convenient means to browse and manipulate a system’s source code and to obtain helpful documentation on Application Programming Interfaces (APIs). Yet, we argue that there is great space for improvement by exploiting collective intelligence, the knowledge of the masses. &lt;br /&gt;&lt;br /&gt;The leveraging of user data to build intelligent and user-centric web-based systems, commonly summarized as the Web 2.0, is the source of our inspiration. A Web 2.0 site allows its users to interact with each other as contributors to the website’s content, in contrast to websites where users are limited to the passive viewing of information that is provided to them. Web 2.0 examples include web-based communities, web applications, social-networking sites, video-sharing sites, wikis, blogs, mashups, and folksonomies. &lt;br /&gt;&lt;br /&gt;Amazon, for instance, creates recommendations based on purchase behaviors of its customers or finds interesting similar products based on how customers interact with search results. Netflix, a video-on-demand service, features a web application that leverages user ratings on movies to recommend likely interesting movies to other users. These systems have in common that they leverage crowds to continuously improve the quality of their services, either through implicit feedback (e.g., user click-through behaviors), explicit feedback (e.g., ratings for movies) or user-generated content (e.g., product reviews and movie critics). &lt;br /&gt;&lt;br /&gt;Today’s IDEs behave more like traditional “Web 1.0” applications in the way that they do not enable their users to contribute and share their knowledge with others, neither explicitly nor implicitly, and thus hinder themselves to effectively exchange knowledge among developers. What would it mean to bring collective intelligence into software development? Figure &lt;/span&gt;1a&lt;span style=&quot;font-size: small;&quot;&gt; shows the current state of the practice: software developers use IDEs that are “integrated” only in the sense that they integrate all tools necessary to browse, manipulate and build software on a single machine. If a programmer has a question about a particular piece of code, for instance an API, she has to browse the web for solutions—by hand. After she has found the solution and solved her problem, the newly gained knowledge is usually lost. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_HyaSneawrU8/THPjRQd5yrI/AAAAAAAAAnA/Ym75YYN7S6U/s1600/ide2.0.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;344&quot; src=&quot;http://4.bp.blogspot.com/_HyaSneawrU8/THPjRQd5yrI/AAAAAAAAAnA/Ym75YYN7S6U/s640/ide2.0.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 1: Our vision: in the future, IDEs will be linked through global knowledge bases &lt;/span&gt;  &lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figur&lt;/span&gt;e 1b sho&lt;span style=&quot;font-size: small;&quot;&gt;ws our vision of the near future: IDEs will support developers through integration with a global knowledge base. This knowledge base will receive information from implicit and explicit user feedback. By implicit feedback we mean anonymized usage data that the cross-linked IDEs will send to the knowledge base automatically and spontaneously (in the figure, we represent such spontaneous activity through dashed arrows). The knowledge base will also comprise explicit user feedback in the form of user-written documentation, error reports, manuals, etc. In this work, we will show that such data can help, for example, to improve ranking heuristics, or to focus developer activity. &lt;br /&gt;&lt;br /&gt;Crucially, the knowledge base itself is intelligent: it will use novel data-mining techniques to integrate the different sources of information to produce new information that has added value. For instance, if the knowledge base discovers that people who write an equals method in Java often write a hashCode method on the same type at the same time, or do so after a longer debugging session, then the knowledge base may be able to discover the important rule that, in Java, every type that implements equals should also implement hashCode, and that missing this rule likely causes bugs. &lt;br /&gt;&lt;br /&gt;The remainder of this paper is organized as follows. In Sec. 2, we materialize IDE 2.0 by discussing example intelligent IDE services that leverage implicit and explicit user feedback to aid programmers in everyday software-development tasks. We show that not only feedback data itself but in particular derived information, obtained through data mining, has the potential of greatly easing the software-development process as a whole. Moreover, as the data is persisted, it will survive over time, unlike today, where much information gets lost and needs to be re-discovered over and over again. In Sec.3, we materialize IDE 2.0 by drawing parallels between the main characteristics of IDE 2.0 and those of Web 2.0. Finally, Sec. 4 summarizes the paper.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;2 From IDE 1.0 towards IDE 2.0 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the following we give three examples of how research in collective intelligence can improve existing IDE services. We split the discussion of each example into three sections. IDE 1.0 sections describe the state-of-the-art in today’s IDEs. Under IDE 1.5, we briefly summarize current research to improve IDE 1.0 services. IDE 2.0 sections discuss how collective intelligence could solve some of the issues of these approaches. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Intelligent Code Completion &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0:&lt;/b&gt; Code completion is a very popular feature of modern IDEs, a life without which many developers find hard to imagine. One major reason for its popularity is that developers are frequently unaware of what methods they can invoke on a given variable. Here, code completion systems (CCSs) serve as an API browser, allowing developers to browse methods and select the appropriate one from the list of proposals. However, current completions are either computed by rather simplistic reasoning systems or are simply hard-coded. For instance, for method completion, CCSs only consider the receiver’s declared type. This often leads to an overwhelming number of proposals. Triggering code completion on a variable of javax.swing.JButton results in 381 method proposals. Clearly, developers only need a fraction of the proposed methods to make their code work. Code templates are an example for hard-coded proposals. Templates (like the Eclipse SWT Code Templates) serve as shortcuts and documentation for developers. Manual proposal definitions are labor intensive and error prone. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Researchers have recognized these issues. For instance, approaches exist that analyse client code to learn which methods the clients frequently use in certain contexts, and rearrange method proposals according to this notion of relevance [2]. Tools like XSnippet, Prospector and Parseweb [7 9 10] attempt to solve the issue of hard-coded code templates by also analyzing source code, identifying common patterns in code. Although obviously useful, these systems didn’t made it into current IDEs. We argue that the primary reason for this is the lack of a continuously growing knowledge base. To build reliable models, source-code based approaches require example applications and full knowledge about the execution environment (i.e., classpath, library versions etc.). However, finding a sufficiently large set of example projects is difficult and tedious, and creating models for new frameworks is too time-consuming yet. While such approaches can sufficiently support a few selected APIs, we argue that they do not scale when tens of thousands of APIs should be supported. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; So, how can we build continuously improving code completion systems then? To solve the scalability problem, code completion systems must allow users to share usage information among each other in an anonymized and automated way—from within the developer’s IDE. This continuous data sharing allows recommender systems to learn models for every API that developers actually use. IDEs are very powerful when it comes to extracting information: they have access to information about the execution environment and about user interactions, even with respect to certain APIs. But the new, massive data sets derived from this information pose a challenge. We will likely require new algorithms to find reliable and valuable patterns in this data. Whatever means future code completion systems will use to build better recommendation models, the systems will be based on shared data. It will be the users who provide this data, and it is important to realize that, as the user base grows, the recommendation systems will be able to continuously improve over time, making intelligent completions that are useful for novice developers and experts alike. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Example &amp;amp; Code-Snippet Recommendations &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0:&lt;/b&gt; Source-code examples appear to be highly useful to developers, whenever the documentation of the API at hand is insufficient [8]. This is evident by the raise of several code search engines (CSEs) over the last few years, like Google Codesearch, Krugle, and Koders, just to name a few. However, current CSEs almost exclusively use standard information-retrieval techniques that were developed for text documents. While source code is text, it also bears important inherent structure. Disregarding this structure causes less effective rankings and misleading code summaries. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Researchers have presented a number of approaches [3 5 11] that improve certain aspects of CSEs. All these approaches exploit structure, like inheritance relations, method calls, type usages, control flow and more, however they face two severe problems. First, source code provides much more structure than text. Thus, ranking systems have to take into account many more features when building the final ranking for a search query. Consequently, it is hard to derive optimal weights for these features, so that the resulting scoring function will perform as well as possible. Often, a fixed scoring systems will perform &quot;well enough&quot; but not be optimal. Another issue with current CSEs is that they ignore the personal experience of the user who issued the query. Many current web search engines now support “personalized search”, which leverages the personal background and interests of a user to find documents that are likely to be interesting for this user, but not necessarily for others. Current CSEs lack such functionality. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; How can one improve ranking and realize personalized search in CSEs? The key to solving both problems is to leverage implicit user feedback. To solve the manual-weight-tweaking problem of search engines, recent work [4] has shown that leveraging observations of how users interact with the search results can significantly improve the precision of existing search engines. The authors used the information whether or not the user inspects a search result to automatically adjust feature weights. This produces an optimized ranking where all inspected results are listed above those that the user did not investigate. To implement personalized code search engines, one can infer the personal background (or experience) of a developer by the code she has already written. Then, CSEs could first display code examples that are similar to examples previously explored or, on demand, code examples that allow the developer to learn new information. We are certain that IDE services in general, not only those that we discussed, can greatly benefit from leveraging implicit user feedback. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Extended Documentation &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0:&lt;/b&gt; Software engineers widely accept that documenting software is a tedious job. Especially open-source projects frequently lacks sufficient resources to produce comprehensive documentation. Both Sun and the Eclipse Foundation recently started to address this problem by opening their documentation platforms to their users. Eclipse asks its users to provide and update tutorials at the central Eclipse Wiki. Sun’s “Docweb” allows users to edit Javadoc API documentation, and to provide code examples or cross references to other interesting articles in the web. These tools aim to leverage a Wikipedia-style approach tailored to software documentation. Past experience has shown, however, that such systems often suffer from a lack of user participation. We believe that the primary cause for this lack of participation is the fact that people may not be willing to document APIs which they have no control over, because these APIs may change rapidly at any time: they may be completely outdated in just a few months. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Recent research therefore addresses the problem from another angle, enriching existing documentation with automatically mined documentation [1 6]. Such approaches identify frequent patterns or interesting relations in code, and generate helpful guidelines from these relations. However, generated documentation may not always be helpful. Like text mining, documentation mining uncovers any relation between code elements, no matter whether or not this relation is useful to consider. The problem is aggravated by the fact that it is sometimes the surprising relations that are the most useful. Another drawback of mining approaches is that they cannot provide rationales for their observations, leaving it up to the developer to make sense of the data. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; How could collective intelligence address the issues mentioned above? The key to a solution is a mixture of explicit user feedback and user-provided content. In the future, we expect generated documentation to be judged by thousands of users, enabling people to evaluate the quality of their services immediately—tool developers and documentation providers alike. Furthermore, we expect collective intelligence to enable us to migrate documentation from older to newer versions more easily. For example, when a new version of an API becomes available, explicit user feedback will make apparent which parts of the documentation remain valid for the newer version and which parts require updating. Explicit user feedback will also allow users to attach rationale to mined documentation, allowing the documentation to not only state that users must follow a certain principle but why. &lt;br /&gt;&lt;br /&gt;These examples are just the tip of the iceberg. We are confident that the software engineering research community will invent many more interesting techniques to generate, judge, and complete documentation. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;3 From Web 2.0 to IDE 2.0 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have used the analogy to “Web 2.0” to indicate that this new generation of web applications and our view of future IDEs have something in common. In the following, we discuss the similarities between Web 2.0 and IDE 2.0 to make this analogy more concrete. &lt;br /&gt;&lt;br /&gt;In this section, we define a set of principles that we expect successful IDE 2.0 services to follow. Some of the concepts are paraphrased from Tim O’Reilly’s principles for successful Web 2.0, described in his article “What is Web 2.0?”. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. The Web as Platform.&lt;/b&gt; The web as platform is the core concept of Web 2.0. In various ways, clients and servers share data over the web. We expect the same to hold for future collaborative IDE 2.0 services. These services rely on client-side usage data and thus, the web is also fundamental to them. A notable difference between IDE 2.0 and Web2.0 is that IDEs offer a much larger spectrum of data and also allow for client-side pre-processing of data like static analysis code analysis. Such pre-processing may even be crucial to allow for proper privacy. Furthermore, one needs to distribute to clients recommendation models that are built on the server-side. Local databases or caches can increase the scalability of these systems; crucial, when dealing with millions of request per day. Whatever the particular technology may be, the web will be the platform for IDE 2.0. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Data is key.&lt;/b&gt; Data is key to any IDE 2.0 service. However, here we fundamentally differ from Tim O’Reilly’s understanding of who owns this data. In Web 2.0, data is the key factor for the success of an application over its competitors. In contrast, we strongly believe in Open Data: all collected data is publicly available. This fosters a vital ecosystem around the concepts of IDE 2.0 and enables sustainable research. Successfully IDE 2.0 services will use both raw data and derived knowledge will facilitate innovation instead of locking in data or users. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Harnessing Collective Intelligence.&lt;/b&gt; Leveraging the wisdom of the crowds is the third fundamental concept of successful Web 2.0 applications—and same holds for IDE 2.0. The examples introduced in the previous section used either user-provided content (like source code, updated documentation or code snippets), implicit feedback (like user click-through data used to improve rankings), or explicit feedback (like ratings for judging the quality of relevance of generated documentation) to build new kind of services. It is important to recognize that, while individuals may be able to build these services, these services cannot unleash their potential without the crowds sharing their knowledge. Only with collective intelligence, IDE services like intelligent code completion, example recommenders or even smart documentation systems become possible. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Rich User Experiences.&lt;/b&gt; The appearance of AJAX gave web applications a new look and feel, bringing web applications much closer to desktop applications than ever before. In the context of IDE 2.0, intelligent, context-sensitive recommender systems will evolve that recommend relevant APIs or documentation where appropriate and help to reduce the clutter in IDEs at the same time. However, providing a rich user experiences is fundamental for users to accept such services. Similar to Google Search, simple and intuitive interfaces seamlessly integrated into existing IDE concepts like code completion, quick fixes etc. are the major key to success. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Lightweight Programming Models.&lt;/b&gt; In web 2.0, mashups (applications that combine several other (web) applications to build new services on top of existing ones) evolved, building new services the application developers never considered. Excellent IDE 2.0 services will encourage others to build their services on top of existing ones by providing public and easy-to-use APIs. Clearly, in the early days we expect such services to be data-driven, i.e., they will leverage the same data for enhancing several aspects of current IDEs or to port existing services to other IDEs. Note that Open Data is necessary to enable such services. However, over time, services will use other services to build what we call IDE mashups. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;4 Summary &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The concepts behind Web 2.0 are a great fit for future IDE services and we expect future services to meet at least one if not almost all of these properties. However, the Software Engineering research community has to play a key role in unleashing the full power of the crowds. First, and most importantly, it has to provide an appropriate environment for building and evaluating IDE 2.0 services. Strong partners like the Eclipse Foundation or Sun/Oracle already support and promote such new IDE concepts today, and their help will be crucial to providing access to large user communities in the future. But there is an incentive for these partners: they will profit from new exciter features, making the IDE itself appear very innovative. &lt;br /&gt;&lt;br /&gt;Second, the Software Engineering research community is the connective link between practitioners and researchers in machine learning. Most IDEs only contain instances of rather primitive machine-learning algorithms. It will be our job to identify the problems that developers face in their day-to-day work, to provide appropriate data as input for machine learners, and to evaluate and reintegrate these results into IDEs. Thus, IDE 2.0 research will create new fascinating and challenging applications of machine learning aside the current markets. &lt;br /&gt;&lt;br /&gt;To sum up, IDE 2.0 services have much potential to improve developer productivity and provide a fantastic playground for new algorithms. They bring together several research communities at the same time, to solve a new generation of challenges in software engineering. When tackling the problem now and in a farsighted, IDE 2.0 will be one of the major research areas of the near future. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;5 References &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[1]     Marcel Bruch, Mira Mezini, and Martin Monperrus. Improving the quality of framework subclassing directives. InMSR, 2010. &lt;br /&gt;&lt;br /&gt;[2]     Marcel Bruch, Martin Monperrus, and Mira Mezini. Learning from examples to improve code completion systems.In FSE, 2009. &lt;br /&gt;&lt;br /&gt;[3]     Reid Holmes and Gail C. Murphy. Using structural context to recommend source code examples. In ICSE, 2005. &lt;br /&gt;&lt;br /&gt;[4]     Thorsten Joachims. Optimizing search engines using clickthrough data. In KDD, 2002. &lt;br /&gt;&lt;br /&gt;[5]     Erik Linstead, Sushil Bajracharya, Trung Ngo, Paul Rigor, Cristina Lopes, and Pierre Baldi. Sourcerer: mining andsearching internet-scale software repositories. Data Min. Knowl. Discov., 18(2), 2009. &lt;br /&gt;&lt;br /&gt;[6]     Fan Long, Xi Wang, and Yang Cai. Api hyperlinking via structural overlap. In FSE, 2009. &lt;br /&gt;&lt;br /&gt;[7]     David Mandelin, Lin Xu, Rastislav Bodík, and Doug Kimelman. Jungloid mining: helping to navigate the api jungle.In PLDI, 2005. &lt;br /&gt;&lt;br /&gt;[8]     Martin Robillard. What makes apis hard to learn? answers from developers. IEEE Software, 2009. &lt;br /&gt;&lt;br /&gt;[9]     Naiyana Sahavechaphan and Kajal Claypool. Xsnippet: Mining for sample code. In OOPSLA, 2006. &lt;br /&gt;&lt;br /&gt;[10]     Suresh Thummalapenta and Tao Xie. Parseweb: a programmer assistant for reusing open source code on the web.In ASE, 2007. &lt;br /&gt;&lt;br /&gt;[11]     Hao Zhong, Tao Xie, Lu Zhang, Jian Pei, and Hong Mei. Mapo: Mining and recommending api usage patterns. InECOOP, 2009. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;(Please note, this list is by far incomplete but a 4 pages limitation requires you to select just a few publications) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;6 Disclaimer ;-)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;This is a vision of what we want to achieve with the code recommenders project. So far you have seen preliminary versions of&lt;a href=&quot;http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html&quot;&gt; intelligent code completion&lt;/a&gt;, &lt;a href=&quot;http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html&quot;&gt;extendend javadocs&lt;/a&gt;, and &lt;a href=&quot;http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html&quot;&gt;example code search&lt;/a&gt;. In the pipeline is a API misuse detector we will present in a few weeks. However, we are currently starting to make all these tools &quot;ide 2.0-ready&quot; and would propose this project as Eclipse Incubator project. But this project would need your help in many ways to be successful! Thus:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Let us know whether you like the idea and would support this project when becoming an open source / open data Eclipse Project. And even if you would not support it: Tells us what would prevent you from using it. If it is a technical issue I'm sure we can fix it. In other cases we would love to learn what causes &quot;rumbling in the tummy&quot; ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;If you want to learn more about the project drop us a &lt;a href=&quot;mailto:bruch@cs.tu-darmstadt.de&quot;&gt;mail &lt;/a&gt;and/or visit the &lt;a href=&quot;http://www.stg.tu-darmstadt.de/research/core/&quot;&gt;project homepage&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;All the best,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Marcel&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1479535086136999079-5859063408095535052?l=code-recommenders.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 10:53:37 +0000</pubDate>
	<author>noreply@blogger.com (Marcel Bruch)</author>
</item>
<item>
	<title>Litrik De Roy: Dynamic working sets</title>
	<guid isPermaLink="false">http://www.norio.be/162 at http://www.norio.be</guid>
	<link>http://www.norio.be/blog/2010/08/dynamic-working-sets</link>
	<description>&lt;p&gt;If you have a lot of projects in your Eclipse workspace you should check out the &lt;a href=&quot;http://marketplace.eclipse.org/content/javadude-dynamic-working-sets&quot;&gt;Dynamic Working Sets&lt;/a&gt; plug-in.&lt;/p&gt;
&lt;p&gt;It allows you to define working sets based on a regular expression. If a project name matches the regex it will be included in the working set.&lt;/p&gt;
&lt;p&gt;It sure beats adding new projects to existing working sets all the time. Really handy to keep your workspace organized.&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/norio-eclipse/~4/RUASyPXkcZM&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 25 Aug 2010 10:28:41 +0000</pubDate>
</item>
<item>
	<title>Holger Staudacher: An Oscilloscope in the browser?</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=4690</guid>
	<link>http://eclipsesource.com/blogs/2010/08/25/an-oscilloscope-in-the-browser/</link>
	<description>&lt;p&gt;Last week &lt;a href=&quot;http://industrial-tsi-wim.blogspot.com/2010/08/extreme-feedback-from-nebula.html&quot;&gt;Wim Jongman bloged&lt;/a&gt; about the &lt;a href=&quot;http://eclipse.org/nebula/&quot;&gt;Nebula&lt;/a&gt; Oscilloscope widget. It’s just an awesome widget for monitoring activity. See &lt;a href=&quot;http://industrial-tsi-wim.blogspot.com/2010/08/extreme-feedback-from-nebula.html&quot;&gt;Wim’s post&lt;/a&gt; to form an opinion yourself.&lt;/p&gt;
&lt;p&gt;So, for me as a RAP developer, the first question I always ask myself when seeing such a cool thing is: “Will it run on &lt;a href=&quot;http://eclipse.org/rap/&quot;&gt;RAP&lt;/a&gt;?”. I followed the steps Wim described to get the Oscilloscope running, &lt;a href=&quot;http://eclipse.org/rap/getting-started/runtime-install/&quot;&gt;changed the target to RAP&lt;/a&gt;, commented out one line of code and started the application. You can see the result in the &lt;a href=&quot;http://vimeo.com/14415956&quot;&gt;screencast below&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;I think the result is just awesome. It runs very smooth with almost no lags. For all of you who don’t know it yet, this is possible because we implemented the GC and published it with &lt;a href=&quot;http://eclipse.org/rap/noteworthy/1.3/#RWT&quot;&gt;RAP 1.3&lt;/a&gt;. The updates from the server are realized via the &lt;a href=&quot;http://wiki.eclipse.org/RAP/FAQ#How_to_update_the_UI_from_a_background_thread&quot;&gt;UICallback mechanism&lt;/a&gt; of RAP. I think this video shows that, in the meantime, RAP became a very sophisticated technology. We are all looking forward to seeing a lot more cool things like this working with RAP.&lt;/p&gt;</description>
	<pubDate>Wed, 25 Aug 2010 09:57:32 +0000</pubDate>
</item>
<item>
	<title>Sven Efftinge: Parsing Expressions with Xtext</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24248206.post-15407873014621817</guid>
	<link>http://blog.efftinge.de/2010/08/parsing-expressions-with-xtext.html</link>
	<description>Parsing simple XML-like, structural languages with Xtext is a no-brainer. However, parsing nested expressions is often considered a bit more complicated. This is because they are more complicated due to their recursive nature and also because with Xtext you have to avoid left recursive parser rules. As the underlying parser (generated by Antlr) uses a top-down approach it would recurse endlessly if you had a left recursive grammar.&lt;br /&gt;&lt;br /&gt;Let's have a look at parsing a simple arithmetic expression:&lt;pre&gt;2 + 20 * 2&lt;/pre&gt;If you know EBNF a bit and wouldn't think about avoiding left recursion, operator precedence or associativity, you'ld probably write a grammar like this:&lt;pre&gt;Expression :&lt;br /&gt; Expression '+' Expression |&lt;br /&gt; Expression '-' Expression |&lt;br /&gt; INT;&lt;/pre&gt;This grammar would be left recursive because the parser reads the grammar top down and left to right and would endlessly call the Expression rule without consuming any characters, i.e. altering the underlying state of the parser. While this kind of grammars can be written for bottom-up parsers, you'ld still have to deal with operator precedence in addition. That is define that a multiplication has higher precedence than an addition for example.&lt;br /&gt;&lt;br /&gt;In Xtext you define the precedence implicitly when left-factoring such a grammar. Left-factoring means you get rid of left recursion by applying a certain technique, which I will show in the following.&lt;br /&gt;&lt;br /&gt;So here is a left-factored grammar (not yet working with Xtext) for the expression language above  :&lt;br /&gt;&lt;pre&gt;Addition :&lt;br /&gt; Multiplication ('+' Multiplication)*;&lt;br /&gt;&lt;br /&gt;Multiplication:&lt;br /&gt; NumberLiteral ('*' NumberLiteral)*;&lt;br /&gt;&lt;br /&gt;NumberLiteral:&lt;br /&gt; INT;&lt;/pre&gt;As you can see the main difference is that we have three rules instead of one and if you look a bit closer you see, that there's a certain delegation pattern involved. The rule &lt;span style=&quot;font-style: italic;&quot;&gt;Addition&lt;/span&gt; doesn't call itself but calls &lt;span style=&quot;font-style: italic;&quot;&gt;Multiplication&lt;/span&gt; instead. The operator precedence is defined by the order of delegation. The later the rule is called the higher is its precedence. This is at least the case for the first two rules which are of a left recursive nature (but we've left-factored them now). The last rule is not left recursive which is why you can write them down without applying this pattern.&lt;br /&gt;&lt;br /&gt;We should allow users to explicitly adjust precedence by adding parenthesis, e.g. write something like &lt;span style=&quot;font-style: italic;&quot;&gt;(2 + 20) * 2&lt;/span&gt;.&lt;div&gt;So let's add support for that (note that the grammar is still not working with Xtext):&lt;pre&gt;Addition :&lt;br /&gt; Multiplication ('+' Multiplication)*;&lt;br /&gt;&lt;br /&gt;Multiplication:&lt;br /&gt; Primary ('*' Primary)*;&lt;br /&gt;&lt;br /&gt;Primary :&lt;br /&gt; NumberLiteral |&lt;br /&gt; '(' Addition ')';&lt;br /&gt;&lt;br /&gt;NumberLiteral:&lt;br /&gt; INT;&lt;/pre&gt;So once again: if you have some construct that recurses on the left hand side, you need to put it into the delegation chain according to their operator precedence. The pattern is always the same, the thing that recurses delegates to the rule with the next higher precedence.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Construction of an AST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that we know how to avoid left recursion, let's have a look at what the parser produces. In Xtext each rule returns some value. &lt;i&gt;&lt;a href=&quot;http://www.eclipse.org/Xtext/documentation/1_0_0/xtext.html#parser_rules&quot;&gt;Parser rules&lt;/a&gt;&lt;/i&gt; return AST nodes (i.e. &lt;span style=&quot;font-style: italic;&quot;&gt;EObject&lt;/span&gt; instances), &lt;i&gt;&lt;a href=&quot;http://www.eclipse.org/Xtext/documentation/1_0_0/xtext.html#EnumRules&quot;&gt;enum rules&lt;/a&gt;&lt;/i&gt; return enum literals and &lt;i&gt;&lt;a href=&quot;http://www.eclipse.org/Xtext/documentation/1_0_0/xtext.html#datatypeRules&quot;&gt;datatype rules&lt;/a&gt;&lt;/i&gt; as well as &lt;i&gt;&lt;a href=&quot;http://www.eclipse.org/Xtext/documentation/1_0_0/xtext.html#terminalRules&quot;&gt;terminal rules&lt;/a&gt;&lt;/i&gt; return simple values like strings and the like (&lt;i&gt;EDatatype&lt;/i&gt; in EMF jargon).&lt;br /&gt;Xtext can automatically infer whether some rule is a parser rule, i.e. constructs and returns an AST node or if it is a datatype rule. Above's grammars only consisted of datatype rules so all they would produce is a string.&lt;br /&gt;In order to construct an AST we need to add &lt;span style=&quot;font-style: italic;&quot;&gt;Assignments&lt;/span&gt; and &lt;span style=&quot;font-style: italic;&quot;&gt;Actions&lt;/span&gt;. But before we do that we need to talk about return types.&lt;br /&gt;&lt;br /&gt;The return type of a rule can be specified explicitly using the '&lt;i&gt;returns&lt;/i&gt;' keyword but can be inferred if the type's name is the same as the rule's name.&lt;br /&gt;That is&lt;pre&gt;NumberLiteral : … ;&lt;/pre&gt;is a short form of&lt;pre&gt;NumberLiteral returns NumberLiteral : …. ;&lt;/pre&gt;However in the case of the expressions grammar above, the rules all need to return the same type since they are recursive. So in order to make the grammar functional we need to add a common return type explicitly (but the grammar is still missing some bits):&lt;pre&gt;Addition returns Expression:&lt;br /&gt; Multiplication ('+' Multiplication)*;&lt;br /&gt;&lt;br /&gt;Multiplication returns Expression:&lt;br /&gt; Primary ('*' Primary)*;&lt;br /&gt;&lt;br /&gt;Primary returns Expression:&lt;br /&gt; NumberLiteral |&lt;br /&gt; '(' Addition ')';&lt;br /&gt;&lt;br /&gt;NumberLiteral:&lt;br /&gt; INT;&lt;/pre&gt;The AST type inference mechanism of Xtext will infer two types: &lt;span style=&quot;font-style: italic;&quot;&gt;Expression&lt;/span&gt; and &lt;span style=&quot;font-style: italic;&quot;&gt;NumberLiteral&lt;/span&gt;. Now we need to add assignments and Actions in order to store all the important information in the AST and to create reasonable subtypes for the two operations.&lt;br /&gt;&lt;br /&gt;In the following you see the &lt;span style=&quot;font-weight: bold;&quot;&gt;final fully working Xtext grammar&lt;/span&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Addition returns Expression:&lt;br /&gt; Multiplication ({Addition.left=current} '+' right=Multiplication)*;&lt;br /&gt;&lt;br /&gt;Multiplication returns Expression:&lt;br /&gt; Primary ({Multiplication.left=current} '*' right=Primary)*;&lt;br /&gt;&lt;br /&gt;Primary returns Expression:&lt;br /&gt; NumberLiteral |&lt;br /&gt; '(' Addition ')';&lt;br /&gt;&lt;br /&gt;NumberLiteral:&lt;br /&gt; value=INT;&lt;/pre&gt;Let's go through the grammar as the parser would do it for the expression &lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;b&gt;( 1 + 20 ) * 2&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;(I'm sure it's pretty hard to follow what's going just by reading this text. Therefore I have prepared a small video where I visualize and explain what is going on. You can find it at the end of this section.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The parser always starts with the first rule (&lt;i&gt;Addition&lt;/i&gt;). Therein the first element is an unassigned rule call to &lt;i&gt;Multiplication&lt;/i&gt; which in turn calls &lt;i&gt;Primary&lt;/i&gt;. &lt;i&gt;Primary&lt;/i&gt; now has two alternatives. The first on is calling &lt;i&gt;NumberLiteral&lt;/i&gt; which consists only of one assignment  to a feature called 'value' of what the &lt;i&gt;INT&lt;/i&gt; rule returns.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;But as the first token in the expression is an opening parenthesis '&lt;i&gt;(&lt;/i&gt;' the parser will take the second alternative in &lt;i&gt;Primary&lt;/i&gt;, consume the '(' and call the rue &lt;i&gt;Addition&lt;/i&gt;. Now the value '1' is the look ahead token and again &lt;i&gt;Addition&lt;/i&gt; calls &lt;i&gt;Multiplication&lt;/i&gt; and &lt;i&gt;Multiplication&lt;/i&gt; calls &lt;i&gt;Primary&lt;/i&gt;. This time the parser takes the first alternative because '1' was consumed by the &lt;i&gt;INT&lt;/i&gt; rule (which btw. is a reused library terminal rule). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As soon as the parser hits an assignment it checks whether an AST node for the current rule was already created. If not it will create one based on the return type, which is &lt;i&gt;NumberLiteral&lt;/i&gt;. The Xtext generator will have created an EClass 'NumberLiteral' before which can now be instantiated. That type will also have a property called &lt;i&gt;value&lt;/i&gt; of type Integer, which will get the value '1' set. This is what the Java equivalent would look like:&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; font-size: 100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre; font-size: 13px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Georgia, serif; font-size: 130%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: normal; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;// value=INT&lt;br /&gt;if (current == null)&lt;br /&gt; current = new NumberLiteral();&lt;br /&gt;current.setValue(ruleINT());&lt;br /&gt;...&lt;/pre&gt;Now that the rule has been completed the created EObject is returned to the calling rule &lt;i&gt;Primary&lt;/i&gt;, which in turn returns the object unchanged to its own caller. Within &lt;i&gt;Multiplication&lt;/i&gt; the call to &lt;i&gt;Primary&lt;/i&gt; has been successfully parsed and returned an instance of &lt;i&gt;NumberLiteral&lt;/i&gt;. The second part of the rule is a so called g&lt;i&gt;roup&lt;/i&gt; (everything within the parenthesis). The asterisk behind the closing parenthesis states that this part can be consumed zero or more times. The first token to consume in this part is the multiplication operator '*'. Unfortunately in the current situation the next token to consume is the plus operator '+', so the group is not consumed at all and the rule returns what they got from the unassigned rule call (the &lt;i&gt;NumberLiteral&lt;/i&gt;) .&lt;br /&gt;&lt;br /&gt;In rule &lt;i&gt;Addition&lt;/i&gt; there's a similar group but this time it expects the correct operator so the parser goes into the group.&lt;br /&gt;The first element in the group is a so called a&lt;i&gt;ction&lt;/i&gt;. As Xtext grammars are highly declarative and bi-directional it is not a good idea to allow arbitrary expression within actions as it is usually the case with other parser generators. Instead we only support two kinds of actions. This one will create a new instance of type &lt;i&gt;Addition&lt;/i&gt; and assign what was the to be returned object to the feature &lt;i&gt;left&lt;/i&gt;. In Java this would have been something like:&lt;pre&gt;// Multiplication rule call&lt;br /&gt;current = ruleMultiplication();&lt;/pre&gt;&lt;pre&gt;// {Addition.left=current}&lt;br /&gt;Addition temp = new Addition();&lt;br /&gt;temp.setLeft(current);&lt;br /&gt;current = temp;&lt;br /&gt;...&lt;/pre&gt;As a result the rule would now return an instance of &lt;i&gt;Addition&lt;/i&gt; which has a &lt;i&gt;NumberLiteral&lt;/i&gt; set to its property &lt;i&gt;left&lt;/i&gt;. Next up the parser consumes the '+' operator. We do not store the operator in the AST because we have an explicit &lt;i&gt;Addition&lt;/i&gt; type, which implicitly contains this information.&lt;br /&gt;The assignment ('right=Multiplication') calls &lt;i&gt;Multiplication&lt;/i&gt; another time and assigns the returned object (a &lt;i&gt;NumberLiteral&lt;/i&gt; of value=20) to the property named &lt;i&gt;right&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;If we now had an additional plus operation '+' (e.g. 1 + 2 + 3) the group would match another time and create another instance of &lt;i&gt;Addition&lt;/i&gt;. But we don't and therefore the rule is completed and returns the created instance of &lt;i&gt;Addition&lt;/i&gt; to its caller which was the second alternative in &lt;i&gt;Primary&lt;/i&gt;. Now the closing parenthesis is matched and consumed and the stack is reduced once more.&lt;br /&gt;&lt;br /&gt;We are now in rule &lt;i&gt;Multiplication&lt;/i&gt; and have the multiplication operator '*' on the look ahead. The parser goes into the group and applies the action. Finally it calls the Primary rule gets another instance of &lt;i&gt;NumberLiteral&lt;/i&gt; (value=2), assigns it as the 'right' operand of the &lt;i&gt;Multiplication&lt;/i&gt; and returns the &lt;i&gt;Multiplication&lt;/i&gt; to &lt;i&gt;Addition&lt;/i&gt; which in turn returns the very same object as there's nothing left to parse.&lt;br /&gt;&lt;br /&gt;The resulting AST looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_Ii_da0jTxAY/THI1VxExhTI/AAAAAAAAAPU/VwS7vvE7wuU/s1600/expression_ast.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5508523942294422834&quot; src=&quot;http://1.bp.blogspot.com/_Ii_da0jTxAY/THI1VxExhTI/AAAAAAAAAPU/VwS7vvE7wuU/s400/expression_ast.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 209px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The following video tries to explain what you just have read. The grammar is slightly different, but I'm sure this won't be problem for you ;-).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Associativity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is still one topic I should mention, which is associativity. There is left and right associativity as well as none associativity. In the example we have seen left associativity. Associativity tells the parser how to construct the AST when there are two infix operations with the same precedence. The following example is taken from the corresponding &lt;a href=&quot;http://en.wikipedia.org/wiki/Operator_associativity&quot;&gt;wikipedia entry&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Consider the expression &lt;span style=&quot;font-style: italic;&quot;&gt;a ~ b ~ c&lt;/span&gt;. If the operator ~ has left associativity, this expression would be interpreted as &lt;span style=&quot;font-style: italic;&quot;&gt;(a ~ b) ~ c&lt;/span&gt; and evaluated left-to-right. If the operator has right associativity, the expression would be interpreted as &lt;span style=&quot;font-style: italic;&quot;&gt;a ~ (b ~ c)&lt;/span&gt; and evaluated right-to-left. If the operator is non-associative, the expression might be a syntax error, or it might have some special meaning.&lt;/blockquote&gt;We already know the most important form which is &lt;b&gt;left associativity&lt;/b&gt;:&lt;pre&gt;Addition returns Expression:&lt;br /&gt; Multiplication ({Addition.left=current} '+' right=Multiplication)*;&lt;/pre&gt;&lt;b&gt;Right associativity&lt;/b&gt; is done using the following pattern (note the quantity operator and the call to the rule itself at the end):&lt;pre&gt;Addition returns Expression:&lt;br /&gt; Multiplication ({Addition.left=current} '+' right=Addition)?;&lt;/pre&gt;And if you don't want to allow multiple usages of the same expression in a row (hence &lt;b&gt;non-associativity&lt;/b&gt;) you write:&lt;pre&gt;Addition returns Expression:&lt;br /&gt; Multiplication ({Addition.left=current} '+' right=Multiplication)?;&lt;/pre&gt;Note that sometimes it's better to allow associativity on parser level, but forbid it later using validation, because you can come up with a better error message. Also the whole parsing process won't be interrupted, so your tooling will generally be more forgiving.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(This post has also been included into the &lt;a href=&quot;http://www.eclipse.org/Xtext/documentation&quot;&gt;Xtext User Guide&lt;/a&gt; since version 1.0.1)&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/24248206-15407873014621817?l=blog.efftinge.de&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 08:24:23 +0000</pubDate>
	<author>noreply@blogger.com (Sven Efftinge)</author>
</item>
<item>
	<title>Denis Roy: Better (some?) Wifi coverage at ESE</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/eclipsewebmaster/?p=628</guid>
	<link>http://dev.eclipse.org/blogs/eclipsewebmaster/2010/08/24/better-some-wifi-coverage-at-ese/</link>
	<description>&lt;p&gt;I’ve never been to &lt;a href=&quot;http://eclipsesummiteurope.org/&quot;&gt;Eclipse Summit Europe&lt;/a&gt;.  I’m told it’s because there’s not enough beer in Germany to accommodate my lavish consumption.&lt;/p&gt;
&lt;p&gt;Regardless, I’ve started working with the conference organizers towards providing better/more Wifi coverage at the conference in a manner that would resemble what is provided at EclipseCon.&lt;/p&gt;
&lt;p&gt;This is where we play the game of estimating how much Internet bandwidth you’ll use up, double the number, then double it again, and then have our calculations be demonstrably wrong once the conference is in full swing.  But that’s part of the fun!&lt;/p&gt;</description>
	<pubDate>Tue, 24 Aug 2010 19:31:39 +0000</pubDate>
</item>
<item>
	<title>Miles Parker: Making Eclipse More Welcoming</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1706439134994847071.post-5598398975426521950</guid>
	<link>http://feedproxy.google.com/~r/MetaBeta/~3/VmGC8bn5ZOw/making-eclipse-more-welcoming.html</link>
	<description>From the title you might be thinking I was going to talk about how we can encourage new-comers to get involved with and contribute to Eclipse, blah blah blah. But you'd be wrong. I'm actually going to talk about a thingie that shows up on your install when you first pull off the shiny shrink wrap of an Eclipse RCP / SDK Application / Product / Whatever.. Rather than get into the details -- the Eclipse documentation is quite good (as one hopes it would be!), and there are a number of &lt;a href=&quot;http://www.developer.com/java/ent/article.php/3698021/Eclipse-Tip-Making-a-Good-First-Impression.htm&quot;&gt;nice tutorials&lt;/a&gt; on it -- I'd like to discuss more generally what Eclipse offers, how it fits into the overall picture and discuss how it might be improved. There may be a few useful technical tidbits buried in here somewhere..&lt;br /&gt;&lt;br /&gt;I wrote most of this post back in February but have been too busy with other things to ever get back to it. But &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323452&quot;&gt;this bugzilla&lt;/a&gt; I received last night made me think that I wasn't the only one that has had trouble grasping the overall logic of the Eclipse User Assistance system, so I decided to spend the time to resurrect it. I hope it gets a little discussion going.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Drawing Users In&lt;/h3&gt;&lt;br /&gt;I've been thinking a lot about initial user experience lately as I've been getting ready to release more -- for lack of a better description -- consumer-oriented offerings. As much as I'd like to think otherwise, I keep getting corralled back to the view that no matter how well explained and functional P2 provisioning is or becomes a (large majority?) of people will want to click on a button on your website, download the software and run it. They don't care -- and in fact don't want to even know -- about the Swiss Army Knife. They just want the can opener. Maybe later they'll be happy to find out that they can also use it as a screwdriver (but anyway, isn't that what a butter knife is for?), but in the meantime it would be really nice if when they're rooting around in their drawers for it, it is labeled &quot;can opener&quot; in bright letters or better yet has some visual cues that make it look like it might be for opening cans.&lt;br /&gt;&lt;br /&gt;And while some people are like me (and probably you) in that they like to open everything up and experiment, other people like to take the direct route -- they'd like to pull the shrink wrap off of their new can opener box and have a nice little full color tri-folded diagram about how to use the can opener. So, while the rest of us are busy chatting on IRC about the most efficient way to saw the top off of a tomato soup can with a nail file, and writing bug reports requesting that the tooth pick be made out of mahogany rather than plastic (&quot;but mahogany has poor wear characteristics&quot;) they're sitting down for lunch. In the most brilliant marketing phrase out of the most brilliant marketing company of all time, these people are referred to as &quot;the rest of us&quot;, and they really aren't anything like &quot;us&quot;. If by us we mean, &quot;us software developers&quot;. When I'm in the kitchen, I prefer Can Openers too. And I use a Mac because there is a lot of technical noise and clutter I don't want or need to know about either.&lt;br /&gt;&lt;br /&gt;So, how to make a good first impression? How to lead your users into actually using your software? I don't want the results of all of my efforts to be the unused whatsit at the bottom of the drawer of lost gadgets. At the very least, I want users to tell me why my can opener is useless and send it back for a refund. In order to get to that point, I'm going to need them to use it to try to open just one can. And, if they've never seen a can before, along the way I need to let them know that food is stored in it, that they need to go and buy one at the store first (&quot;remember, you'll need to pay for it before leaving..you'll need money for that, which comes from..&quot;), etc.. And that's what I think initial user experience is all about. Not making assumptions about what users do and don't know while accommodating different levels of user interest, experience and curiosity.&lt;br /&gt;&lt;br /&gt;OK, enough technical blah blah blah -- to specifics. One of the many nice things about Eclipse is that it already has an enormous amount of infrastructure supporting User Assistance. And, one of the challenging things about Eclipse -- at least for me -- is that employing that infrastructure is going to involve some fiddly bits and dipping into a lot of different areas.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Help!!&lt;/h3&gt;&lt;br /&gt;You need some! Really. User's like it!&lt;br /&gt;&lt;br /&gt;There are many gaps in the overall Agent Modeling Platform, but the products I'm developing are focussed solely on developing Agent-Based Models and there is a lot to that -- users need to be able to figure out how to use the can opener, but they also need to now why and for what they might want to use one. We're lucky enough to have one Manual for an earlier related tool (written by Damon Centola), so I started with integrating that into the docs for Ascape a related tool I worked on for about ten years prior to moving to the Eclipse platform. That meant a lot of work just trying to parse a manual from Word to Apple Pages to HTML output to &lt;i&gt;readable, well-formatted&lt;/i&gt; HTML output --  and then moved on to write the Help as well as integrate that with other aspects of the system. Then I started in on creating some (pretty extensive and reasonably complete, I think) user documentation including design overviews, user tools, and examples. By the way, it sounds like an obvious point, but it's good to think a lot about how your documentation is organized. The basic documentation outline for the core Eclipse projects is very good, and while the overall design won't fit perfectly for every project, it's a good place to start and following the common outline provides a seamless experience to users as they move from one Eclipse related tool to another.&lt;br /&gt;&lt;br /&gt;The Eclipse TOC editor works quite well for all of this -- there is only one plug-in point to maintain and the maintaining hierarchical structures is easy. Even better, the Eclipse ecosystem now supports some really good tools for creating and most importantly maintaining help content and doing so in a distributed automated way. A number of months back I spent a great deal of time stealing and modifying XText's documentation system. Now we can write all of the AMP documentation in WikiText, launch an ant script, and get all kinds of docs automagically generated. When complete we had nearly two hundred pages of PDF text including the converted Ascape manual, as well as &lt;a href=&quot;http://eclipse.org/amp/documentation/contents/index.html&quot;&gt;online help&lt;/a&gt; and Eclipse integrated help.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Welcome!&lt;/h3&gt;&lt;br /&gt;The next piece is providing a way for users to be guided into actually using these cheat sheets, references and so on. For that, Eclipse has the welcome screen. The welcome screen is a really nice feature of Eclipse that is under-appreciated and a bit under-utilized. Part of that may be that it is surprisingly difficult to get up to speed with how to use it. There are a number of pieces that have to work together -- a theme I'll return to below -- and you have to poke around quite a bit to figure out where the points of integration are with other projects. For example, for my IDE build, I wanted to be able to turn off some help items that my users probably wouldn't need -- like plug-in development samples -- while keeping some they would, like for (the perennially problematic) SVN integration.&lt;img src=&quot;http://eclipse.org/amp/documentation/contents/images/users/WelcomeScreen.png&quot; style=&quot;float: right; margin: 20px;&quot; width=&quot;50%&quot; /&gt;&lt;br /&gt;&lt;br /&gt;What you end up with is really useful -- if users use it. But I've watched a fair number of neophyte users start out with the software from scratch, and what is the first they do when they launch the software? Click on the &quot;close&quot; button to get rid of the this weird view that is blocking the software! That's in large part due to the initial Eclipse start page that had a bunch of cool symbols on it but really, it's actually not at all apparent why it would be at all useful. So the first change to make for an IDE build is to change the style to Slate, which brings up the four or five main categories along with a description of why they might be useful.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Cheat Sheets&lt;/h3&gt;&lt;br /&gt;I'd already spent some time getting up to speed on Cheat Sheets. Cheat Sheets aren't something that I personally use a lot -- they are generally a bit to linear feeling for me -- but I'd probably benefit from doing so, just as I'd probably benefit from reading the damn manuals before blindly diving into implementation! My fellow developer and ABM tool user Ed Mackerrow has been pushing me to use them more as he's found that they work really well for easing people into tools.&lt;br /&gt;&lt;br /&gt;Now that I'm beginning to work with them a bit more, I'm starting to think of cheat sheets as less clingy versions of Wizards -- they walk you through doing something useful, but when you've done it a few times they don't hang around wanting to hold hands with you all of the time. And they're a lot easier to develop than Wizards.&lt;br /&gt;&lt;br /&gt;Generally the cheat sheet authoring process has been really straightforward. If you don't use them and have any kind of product or set of features involving getting people through two or more non-obvious steps, then you really need to try it. (Is there a cheat sheet cheat sheet?)&lt;br /&gt;&lt;br /&gt;But as with the Welcome system, the cheat sheet integration process is not so easy. There are some fiddly bits, things that seem more complex that they need to be. Most of that has to do with just mucking around with configuration stuff. In order to create and maintain a cheat sheets for multiple nested groups, one has to define separate cheat sheets for each sub-group, link those together, and then link those to plugin cheat sheet definitions. At each level, you create and maintain names and IDs. So for one group, we need:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Parent cheat sheet name and id&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Parent cheat sheet file name&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Group name&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Child cheat sheet names&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Plug-in&lt;/i&gt; id, name and client link.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you decide to change the name of one cheat sheet, that can can be one file name, three separate files, and seven text entries to maintain! For me this also creates a lot of cognitive dissonance. Coordinating these kinds of artifacts is a common problem in software design, especially within a large pluggable set of tools, but I think it comes up quite a bit in Eclipse infrastructure. I'll pick up on that general theme below. I'll also talk about how I think the user experience could be improved.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Connecting it all Together&lt;/h3&gt;&lt;br /&gt;One of the coolest and least appreciated aspects of bundled documentation is the ability to make the documentation interactive. You can call commands or refer to existing cheat sheets.&lt;br /&gt;&lt;h4&gt;Calling commands from Help&lt;/h4&gt;&lt;br /&gt;&lt;img src=&quot;http://eclipse.org/amp/documentation/contents/images/users/IntegratedModels.png&quot; style=&quot;float: right; margin: 20px;&quot; width=&quot;50%&quot; /&gt;If I'd known how easy this was, I would have done it much earlier. Something else you really should try, as it provides a nice solution that sits between cheat sheets and screenshot oriented tutorials in the suer experience. In my case, I thought it would be neat if user's could actually run example models while reading about them in the Documentation! So, here's how to call code directly from help.&lt;br /&gt;&lt;br /&gt;First you implement a live help action:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class ExecuteJavaModelAction implements ILiveHelpAction {&lt;br /&gt;&lt;br /&gt;    String javaPath;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Launch the Escap model.&lt;br /&gt;     * &lt;br /&gt;     * @see java.lang.Runnable#run()&lt;br /&gt;     */&lt;br /&gt;    public void run() {&lt;br /&gt;        IPath path = new Path(javaPath);&lt;br /&gt;        EclipseEscapeRunner eclipseRunner = new EclipseEscapeRunner();&lt;br /&gt;        IProject javaProject = ResourcesPlugin.getWorkspace().getRoot().getProject(path.segment(0));&lt;br /&gt;        IPath fullPath = path.removeFirstSegments(1);&lt;br /&gt;        try {&lt;br /&gt;            javaProject.open(null);&lt;br /&gt;            eclipseRunner.open(javaProject, fullPath.toPortableString(), fullPath.lastSegment());&lt;br /&gt;        } catch (CoreException e) {&lt;br /&gt;            throw new RuntimeException(e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Define the Java pah to the model node.&lt;br /&gt;     * &lt;br /&gt;     * @param data&lt;br /&gt;     * @see org.eclipse.help.ILiveHelpAction#setInitializationString(java.lang.String)&lt;br /&gt;     */&lt;br /&gt;    public void setInitializationString(String data) {&lt;br /&gt;        javaPath = data;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here, since I need to refer to a model within a project within the workspace, I need to discover where that workspace and project are. Otherwise the code is very straightforward.Then, we just need to define an embedded javascript to actually execute it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;a href='javascript:liveAction(&quot;org.eclipse.amp.escape.ide&quot;, &quot;org.eclipse.amp.escape.help.ExecuteJavaModelAction&quot;,&lt;br /&gt; &quot;org.ascape.escape.models.brook/edu.brook.sugarscape.GAS_II_1&quot;)'&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is covered nicely in the Eclipse help (as one would hope it would be!) though why not have a working example here!&lt;br /&gt;&lt;h4&gt;Calling Cheatsheets from Help&lt;/h4&gt;&lt;br /&gt;It's pretty easy to get to Help from Cheat Sheets, but what about getting from Help to Cheatsheets? It's actually pretty easy though for some reason it was at first opaque to me and isn't actually spelled out in Help anywhere. Instead it's one of those things where you have to put two and two together but it can be difficult to locate where those two twos are to begin with. So here is how it is done:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Please follow this &amp;lt;a href='javascript:liveAction(&quot;org.eclipse.ui.cheatsheets&quot;, &quot;org.eclipse.ui.cheatsheets.OpenCheatSheetFromHelpAction&quot;,&lt;br /&gt;&quot;org.eclipse.amp.escape.loadProjects&quot;)'&amp;gt;cheatsheet&amp;lt;/a&amp;gt;.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But cheat sheets still have some significant usability issues I think -- and like the other issues, they aren't really technical, but have to do with the overall design approach.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Hey, I still can't open this can!&lt;/h3&gt;&lt;br /&gt;Which brings us back to my reason for resurrecting this post. It's that whole can opener thing. The Eclipse user assistance capabilities, especially when compared to what's available on many platforms is quite complete. Overall, the Eclipse toolset and User Experience provides a powerful, world class set of user tools. There have been enormous efforts in improving the User Experience, most especially I think with provisioning -- but I still think we can do better. For example, it's hard to explain exactly why, but somehow the Eclipse User Assistance experience still seems a bit disjointed.&lt;br /&gt;&lt;br /&gt;Part of making the most of the tools is for all of us to (yeah, obvious, right) use them, and that means I think improving the tools for authoring and integrating help so that small teams can get up to speed on them quickly to produce good help. But part of it is being willing to rethink aspects of the user experience. And thinking clearly and in an unbiased way about how all of the different pieces fit together.&lt;br /&gt;&lt;br /&gt;How do we do that? I don't know exactly, but I've observed that one of the biggest challenges to the improvement of Eclipse is this attitude: &quot;We've always done it that way, and it makes sense to me..&quot; Well, of course it makes sense to you, you've been using the tool for five years! Then it's, &quot;Ok but, no one has ever complained about it, they should file a bugzilla&quot;. The last feedback you're going to get is from new users -- they don't know how to use the software, so how likely is it that they're going to know the culture of bug reporting? And so here's the problem with that response: new users don't complain, they just go somewhere else. Or, if they stick around, they quickly learn that that is just the way things are done and its not likely to change, because everyone is used to it. And more than anything else -- which constantly surprises me, knowing how imperfect most software really is -- they figure that they're just missing something that must be obvious to everyone else!&lt;br /&gt;&lt;br /&gt;Which is why I love the Bug that I mentioned at the beginning of the post. Here's a user that didn't get it, and let us know that he didn't get it. Now, I know Scott and he's not a dumb guy. He's actually a &lt;i&gt;really smart&lt;/i&gt; guy -- a Computer Science Ph.D. and just finished a postdoc at Caltech. And he's done a lot of development for ABM tools based on Objective C on OS X. So what's he missing? The issue he is having here is being directed to a cheat sheet from the welcome screen. &lt;img src=&quot;http://eclipse.org/amp/documentation/contents/images/users/CheatSheets.png&quot; style=&quot;float: right; margin: 20px;&quot; width=&quot;30%&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Eclipse developer (me) and platform (us) point of view: &lt;/b&gt; I've put together a great Welcome setup, and even included some sample models. All the user has to do is click on the Samples button, click on the Example Models button and he get's directed through the simple process of downloading and installing some example models from the version control system. Neat, huh?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scott's point of view: &lt;/b&gt; I clicked on a button and the window went away and nothing happened.&lt;br /&gt;&lt;br /&gt;Now Scott didn't know that he was being asked to use a cheat sheet. The Welcome screen just tells him that he's going to be able to load some example models. Well, if you've done this before, you know that you're gong to get a cheat sheet and you just need to follow the steps that are layed out for you. Once you know what a cheat sheet is, it's pretty clear what it's for. But what if you've never used one before? Cheat sheets actually open into a small window on the right side of your screen. They're surprisingly easy to miss. Not for you and me, but for a new user. Worse then all of this, loading some of the models (the one's I can't host on Eclipse for licensing reasons) requires SVN, and (as all long-time Eclipse users are only too painfully aware) if you haven't installed Subversion yourself, it won't work, and you won't know why. So even if the Cheat Sheet were obvious it still wouldn't work out of the box. Which means that I need to add something to the cheat sheet that says &quot;First you need to install Subversion..&quot;. Argh! I think it will actually be easier to just move the example models.&lt;br /&gt;&lt;br /&gt;Perhaps you have other User Experience examples to share. It's always a bit difficult to share examples because you end up critiquing a small aspect of work that someone has put a great deal of effort and thought into. But doing so is critical to having a culture of continual improvement. In that spirit, here are a couple of examples I've gleaned from users..&lt;br /&gt;&lt;br /&gt;What's the difference between Help Contents and Dynamic Help? And where does &quot;Search&quot; fit into that? Another one is the Eclipse downloads -- there have been improvements to the download page itself, but I still get questions all the time from users asking me what version of Eclipse they should download. Hey, that's easy, &lt;a href=&quot;http://eclipse.org/downloads/&quot;&gt;right&lt;/a&gt;? OK, for the Eclipse developers out there, we can find anything we need quickly and easily, but please imagine for a minute that you are a new user facing this matrix of choices. Now, there are all kinds of &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=273930&quot;&gt;good rationales&lt;/a&gt; for not changing things --  (yep) that's the way we've always done it, and conversely the users need to learn to use what we're trying to give them, and -- but I'll go out on a limb and say that user experience trumps pretty much every one of these.&lt;br /&gt;&lt;br /&gt;Perhaps you've got some ideas you'd like to share. Or perhaps I'm making a mountain out of a speed bump on the entrance ramp to the exciting world of Eclipse, but I'll just suggest that before you think &quot;that's obvious&quot; put your self in the mind of a new user. And then ask yourself &quot;is that really obvious, or am I just used to it?&quot;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1706439134994847071-5598398975426521950?l=milesparker.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/b8FXw1VWe19EO8VVKvYYmy1PnHE/0/da&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;true&quot; src=&quot;http://feedads.g.doubleclick.net/~a/b8FXw1VWe19EO8VVKvYYmy1PnHE/0/di&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/b8FXw1VWe19EO8VVKvYYmy1PnHE/1/da&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;true&quot; src=&quot;http://feedads.g.doubleclick.net/~a/b8FXw1VWe19EO8VVKvYYmy1PnHE/1/di&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/MetaBeta/~4/VmGC8bn5ZOw&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 24 Aug 2010 19:26:00 +0000</pubDate>
	<author>noreply@blogger.com (Miles Parker)</author>
</item>
<item>
	<title>Bob Balfe: New Attachment viewer with ODF thumbnails and JAR file support</title>
	<guid isPermaLink="true">http://blog.balfes.net/?p=1596</guid>
	<link>http://blog.balfes.net/?p=1596</link>
	<description>&lt;p&gt;As promised in the &lt;a href=&quot;http://blog.balfes.net/?p=1576&quot;&gt;last post&lt;/a&gt;, here is a new updated widget for the attachment viewer.  You can download the latest source files from the &lt;a href=&quot;http://www.openntf.org/internal/home.nsf/release.xsp?action=openDocument&amp;amp;documentId=50D0F49087AA318E86257788006C263E&quot;&gt;OpenNTF project&lt;/a&gt;.  If you want to learn how to install this into Notes 8.5.1 and above check out the &lt;a href=&quot;http://blog.balfes.net/?p=1526&quot;&gt;video I posted&lt;/a&gt; to show how to do that.&lt;/p&gt;
&lt;p&gt;Here is a summary of the support and you can also watch a video &lt;a href=&quot;http://blog.balfes.net/?p=1576&quot;&gt;here&lt;/a&gt; or below:&lt;/p&gt;
&lt;p&gt;- ODF thumbnail support added, .odp, .odt, .docx, .dotx, .docm, .dotm, .xlsx, .xlsm, .xltx, .xltm, .pptx, .pptm, .potx&lt;br /&gt;
- Modified Zip file to limit embedded text files to show only first 20K&lt;br /&gt;
- JAR file support – extended the ZIP provider to include Jar files&lt;br /&gt;
- New Text File support – .mf, .properties&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.balfes.net/sites/atviewer-pub/extension.xml&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-1451&quot; height=&quot;41&quot; src=&quot;http://blog.balfes.net/wp-content/uploads/2010/07/extension-xml.jpg&quot; title=&quot;extension-xml&quot; width=&quot;121&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-1596&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;</description>
	<pubDate>Tue, 24 Aug 2010 12:00:26 +0000</pubDate>
</item>
<item>
	<title>Ankur Sharma: Headless Build for Beginners - part IV</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5914783.post-2508007688980367675</guid>
	<link>http://blog.ankursharma.org/2010/08/headless-build-for-beginners-part-iv.html</link>
	<description>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Customizing the build&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Not always we want the build to happen according to the out-of-the-box scripts.In fact, customizations are almost always needed - be it fetching the sources or the way we wish to assemble them. PDE Build provides a set of templates which can be used to hook in the customize (add to and/or override) the default behavior.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;These templates are available in PDE Build plug-in (inside&lt;i&gt; templates\headless-build&lt;/i&gt; folder of &lt;i&gt;org.eclipse.pde.build_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;&lt;/i&gt;). The scripts and templates are one the main reason why PDE Build plug-in is a directory and not a jar.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;The purpose and usage of these templates have been explained nicely in Eclipse help under the topic &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/tasks/pde_customization.htm&quot;&gt;Customizing a Headless Build&lt;/a&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;These templates are&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;customTargets,xml&lt;/li&gt;&lt;li&gt;allElements.xml&lt;/li&gt;&lt;li&gt;customAssembly.xml&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: left;&quot;&gt;In short, the &lt;i&gt;customTargets.xml&lt;/i&gt; have various pre- and post- ant targets that &lt;i&gt;build.xml&lt;/i&gt; (or &lt;i&gt;productBuild.xml&lt;/i&gt; - in case you are building a product) calls before and after each process (like setup, source fetch, build, assemble, package, etc). Similarly, the targets in &lt;i&gt;allElements.xml&lt;/i&gt; and &lt;i&gt;customAssembly.xml&lt;/i&gt; gets delegated for various jobs.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;To use these templates we need to copy them in the build configuration directory (&lt;i&gt;c:\build\buildConfiguration&lt;/i&gt; in our example) where we stored build.properties file in previous steps. And then modify the appropriate targets. This is what we will do for building an update site in next step.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5914783-2508007688980367675?l=blog.ankursharma.org&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 24 Aug 2010 11:30:00 +0000</pubDate>
	<author>sharma.ankur@gmail.com (Ankur Sharma)</author>
</item>
<item>
	<title>Lars Vogel: Save your local Mylyn tasks</title>
	<guid isPermaLink="false">http://www.vogella.de/blog/?p=2965</guid>
	<link>http://www.vogella.de/blog/2010/08/24/local-mylyn-tasks/</link>
	<description>&lt;div style=&quot;float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;&quot;&gt;
		
		&lt;/div&gt;&lt;p&gt;If you are using &lt;a href=&quot;http://www.vogella.de/articles/Eclipse/article.html&quot;&gt;Eclipse&lt;/a&gt; you properly using &lt;a href=&quot;http://www.vogella.de/articles/Mylyn/article.html&quot;&gt;Mylyn&lt;/a&gt;. I recently got a new machine and wanted to migrate my local Mylyn tasks from one computer to another. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/check10.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-3065&quot; height=&quot;268&quot; src=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/check10.png&quot; width=&quot;255&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Local tasks stored in your workspace in .metadata/mylyn/tasks.xml.zip. The context for local tasks stored in .metadata/.mylyn/contexts… look for files labeled local-X.xml.zip, these have the context. You can back up the entire Mylyn data directory and put it into the same place on your new computer.&lt;/p&gt;
&lt;p&gt;Worked well for me!&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;http://twitter.com/davidcshepherd&quot;&gt;David Shepherd&lt;/a&gt; for the tip via &lt;a href=&quot;http://twitter.com/vogella&quot;&gt;twitter&lt;/a&gt;.&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt; &lt;/div&gt;</description>
	<pubDate>Tue, 24 Aug 2010 07:19:14 +0000</pubDate>
</item>
<item>
	<title>Neil Bartlett: OSGi Compliance Levels</title>
	<guid isPermaLink="false">http://njbartlett.github.com/2010/08/24/osgi-compliance-levels</guid>
	<link>http://njbartlett.name/2010/08/24/osgi-compliance-levels.html</link>
	<description>&lt;p&gt;Almost every week, I hear about new and existing Java libraries or frameworks becoming “OSGi Compliant”. This makes me happy as it indicates the traction that OSGi is getting as a platform. The only problem is that “OSGi Compliant” could mean almost anything… and therefore it means precisely nothing.&lt;/p&gt;
&lt;p&gt;For example, many libraries can be easily used in OSGi even if they don’t provide an OSGi descriptor (i.e., a &lt;code&gt;MANIFEST.MF&lt;/code&gt; containing &lt;code&gt;Bundle-SymbolicName&lt;/code&gt; etc.), so long as they steer clear of certain problematic coding patterns such as classpath scanning, unconstrained use of &lt;code&gt;Class.forName()&lt;/code&gt; and so on. Such libraries could reasonably be termed “compliant”. But another framework may have been deeply integrated into OSGi so that it can make use of services, receive configuration through Config Admin, and so on.&lt;/p&gt;
&lt;p&gt;It seems that we need a vocabulary that will help us distinguish these two cases, and those in between. We need to define, at least informally, some kind of Beaufort Scale for levels of OSGi compliance (if you’re feeling uncharitable towards OSGi you may prefer to call it a &lt;a href=&quot;http://en.wikipedia.org/wiki/Schmidt_Sting_Pain_Index&quot;&gt;Schmidt Pain Index&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The purpose of the exercise would certainly not be to admonish authors of libraries that rate near the bottom of the scale, nor to congratulate those at the top. Rather, it would help authors to communicate the depth of their support for OSGi in a more precise way, and it would help the OSGi community communicate to library authors how they can make their products more useful to us.&lt;/p&gt;
&lt;p&gt;To get the ball rolling, here are my initial thoughts. I do this merely to invite feedback rather than to attempt to impose my own classification.&lt;/p&gt;
&lt;table&gt;
	&lt;tbody&gt;&lt;tr&gt;
		&lt;th&gt;Level&lt;/th&gt;
		&lt;th&gt;Name&lt;/th&gt;
		&lt;th&gt;Notes&lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;-1&lt;/td&gt;
		&lt;td&gt;Non-compliant.&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;Difficult or impossible to use in OSGi. May be possible to use via an adaption layer or patching of the sources or binaries. For example, the library may rely on classpath scanning or invalid assumptions about the classloading hierarchy.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;0&lt;/td&gt;
		&lt;td&gt;Neutral.&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;Ships as a plain (i.e., non-bundle) &lt;span class=&quot;caps&quot;&gt;JAR&lt;/span&gt;, but can be used straightforwardly in OSGi if wrapped as a bundle or added to &lt;code&gt;Bundle-ClassPath&lt;/code&gt;.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;1&lt;/td&gt;
		&lt;td&gt;Compliant&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;Shipped as one or more OSGi bundles with correctly defined &lt;code&gt;MANIFEST.MF&lt;/code&gt;s. All dependencies are also Compliant and either shipped with the library or available separately from a repository. Package versions follow the &lt;a href=&quot;http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf&quot;&gt;Semantic Versioning guidelines&lt;/a&gt; (pdf warning).&lt;/td&gt;
	&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For many libraries, there is no need to go any higher than level 1. The higher levels are applicable to frameworks, which are more complex and may feature extensibility through plug-ins, custom configuration, logging, etc. Obviously I would like to see &lt;strong&gt;all&lt;/strong&gt; libraries reach at least level 1, but the OSGi community needs to do more to make this easier.&lt;/p&gt;
&lt;table&gt;
	&lt;tbody&gt;&lt;tr&gt;
		&lt;th&gt;Level&lt;/th&gt;
		&lt;th&gt;Name&lt;/th&gt;
		&lt;th&gt;Notes&lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;2&lt;/td&gt;
		&lt;td&gt;OSGi-Assisted&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;The framework is aware of OSGi, either in its core or via optional modules. Areas of the framework that are open to extensibility can use services for this, in addition to other mechanisms. The framework can cope with service dynamics without restarting the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt;.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;3&lt;/td&gt;
		&lt;td&gt;OSGi-Powered&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;The framework is based on OSGi. It publishes services that may be used by other parts of our system. Its own services may be replaced by our own service implementations. It takes advantage of standard OSGi services such as Log Service, Config Admin, Event Admin, &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; Service. However, despite all this it may still provide a way to run in non-OSGi environments.&lt;/td&gt;
	&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;A key concern for many frameworks as they seek to rise this pyramid is to remain usable outside OSGi, which is a goal I support. There appears to be very little information available on how to develop frameworks that are able to take advantage of OSGi without introducing a hard dependency on it. This is something I hope to remedy in future posts.&lt;/p&gt;
&lt;p&gt;What do you think of this taxonomy? Is it useful, or a waste of time? Should there more levels, or fewer? Please comment below, or link to your own blog.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span class=&quot;caps&quot;&gt;UPDATE&lt;/span&gt;&lt;/b&gt; &lt;a href=&quot;http://tux2323.blogspot.com/2010/08/osgi-bundle-quality-or-bundle.html&quot;&gt;Christian Baranowski blogged&lt;/a&gt; some thoughts about independent verification of bundle compliance. That’s a great idea, but my initial goal is less ambitious, i.e. simply to allow library authors to assert something meaningful about their level of OSGi compliance. I think that is a prerequisite before looking to verify those assertions.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span class=&quot;caps&quot;&gt;UPDATE&lt;/span&gt; 2&lt;/b&gt; BJ makes some excellent points in the comments below, which I entirely agree with. Be sure to scroll down and take a look.&lt;/p&gt;</description>
	<pubDate>Tue, 24 Aug 2010 07:00:00 +0000</pubDate>
</item>
<item>
	<title>Ed Burnette: &quot;I am not a villain,&quot; says alleged Android Trojan creator</title>
	<guid isPermaLink="true">http://www.zdnet.com/blog/burnette/i-am-not-a-villain-says-alleged-android-trojan-creator/2058</guid>
	<link>http://www.zdnet.com/blog/burnette/i-am-not-a-villain-says-alleged-android-trojan-creator/2058</link>
	<description>&lt;p&gt;Max Lifshin, an Android developer living in Russia, says his &lt;a href=&quot;http://www.androlib.com/android.application.net-maxicom-android-snake-jwjAj.aspx&quot;&gt;Tap Snake&lt;/a&gt; program is not a Trojan or virus, despite a &lt;a href=&quot;http://www.symantec.com/connect/blogs/androidostapsnake-watching-your-every-move&quot;&gt;warning from security software maker Symantec&lt;/a&gt; last week. Lifshin has been &lt;a href=&quot;http://www.computerworld.com/s/article/9180844/Update_Android_gaming_app_hides_Trojan_security_vendors_warn?taxonomyId=17&amp;amp;pageNumber=1&quot;&gt;vilified&lt;/a&gt; &lt;a href=&quot;http://phandroid.com/2010/08/18/snake-clone-tap-snake-is-a-trojan-says-symantec/&quot;&gt;in&lt;/a&gt; &lt;a href=&quot;http://news.techworld.com/mobile-wireless/3235936/android-game-tap-snake-hides-trojan-virus/?olo=rss&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://www.tgdaily.com/mobility-features/51144-android-tapsnake-trojan-tracks-your-every-move&quot;&gt;press&lt;/a&gt; &lt;a href=&quot;http://www.talkandroid.com/11321-tap-snake-application-is-really-a-trojan/&quot;&gt;for&lt;/a&gt; &lt;a href=&quot;http://techie-buzz.com/mobile-news/android-snake-trojan.html&quot;&gt;releasing&lt;/a&gt; the program, which was intended for parents to track their children’s whereabouts. Reached by ZDNet for comment, Lifshin insisted that his motivations were innocent:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The app is no more malicious than a motion detection camera - everything depends on the user’s intentions. It gives all the proper warnings and requires a set up, a conscious action, to report location. It can be easily used by mothers worrying about their kids’ whereabouts. In fact, I suspect the majority of users were indeed the mothers.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;For the program to work, the parent or guardian downloads and installs the innocuous looking game on their kid’s phone. During the installation process, Android asks for permission to access location information and to send and receive information to the Internet. After accepting these terms, the parent must open up a menu option and activate the tracking service with a unique key. Then they give the phone back to their child. From that point on, the game will occasionally upload its location to a server, where only somebody with the key can view it. Lifshin says:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The app is not really very different from Google’s Latitude. As any technology product, it can be put to either noble or malicious ends.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;The game can be uninstalled at any time. The program run by the parent to view location information isÂ called &lt;a href=&quot;http://www.androlib.com/android.application.net-maxicom-android-gpsspy-jwxCm.aspx&quot;&gt;GPS Spy&lt;/a&gt;. The Market description for GPS Spy openly explained how all this works, saying:&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;Download and install the free Tap Snake game from the Market to the phone you want to spy on. Press MENU and register the Snake with the service.Â Use the GPS Spy app on your phone with the same email/code to track the location of the other phone.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;However, the description of the Tap Snake game did not say anything about tracking, presumably so your child could look up the game for updates or reviews and be none the wiser. Until recently, Tap Snake was a free download and GPS Spy was $4.99. After the news came out, Google removed both apps from the Market. According to Lifshin,&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;What’s sad is that these “whistle blowers” have prompted Google to suspend the app and thus deprived me of income. They unfairly classified this app as a Trojan andÂ portrayed me as a villain, a malicious Russian developer working in the shadows.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;What do you think: is this a dangerous Trojan or a useful safety device for parents? Was Google right to ban it? Speak up in the Talkback section below.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 24 Aug 2010 00:00:58 +0000</pubDate>
</item>
<item>
	<title>Bob Brodt: LaMiPU (Part 2)</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/bpel/?p=23</guid>
	<link>http://dev.eclipse.org/blogs/bpel/2010/08/23/lamipu-part-2/</link>
	<description>&lt;p&gt;&lt;/p&gt;
&lt;h1 style=&quot;margin-top: 0.17in;&quot;&gt;&lt;span style=&quot;font-family: Liberation Sans,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Any resemblance to real applications, living or dead, is purely coincidental…&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;My &lt;a href=&quot;http://dev.eclipse.org/blogs/bpel/2010/08/18/lamipu/&quot;&gt;previous blog&lt;/a&gt;, described a business problem based on a &lt;a href=&quot;http://www.intalio.com/finnair&quot;&gt;case study&lt;/a&gt; by Intalio and one of its business partners. Before I go any further I should probably clarify the purpose of this blog, lest I be sued for misrepresentation.&lt;/p&gt;
&lt;p align=&quot;CENTER&quot; style=&quot;margin-bottom: 0in;&quot;&gt;DISCLAIMER&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;The case study and accompanying implementation presented here, while it may make references to actual implementations and case studies published by Intalio and/or its business partners, is entirely my own work and does not in any way intend to represent any actual original work performed by any business entity, anywhere on this planet or any other time/space continuum.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;The reason for this blog is to promote BPEL technology by teaching web service integration concepts based on real-world implementations, using BPEL as the orchestration tool, and &lt;strong&gt;not &lt;/strong&gt;to rip off other people’s work. The actual implementations presented here are based solely on my observations, &lt;a href=&quot;http://www.merriam-webster.com/dictionary/gedankenexperiment&quot;&gt;Gedankenexperiments&lt;/a&gt; and reverse-engineering of these real-world business problems and their solutions.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;I do not claim to be a Subject Matter Expert in the area of airline reservation systems, and the existence of any supporting systems described below is pure speculation on my part (based on life experience, internet searches and just plain &lt;a href=&quot;http://www.urbandictionary.com/define.php?term=pull%20things%20out%20of%20your%20ass&quot;&gt;pulling stuff out of thin air&lt;/a&gt; to suit my needs). The &lt;strong&gt;actual&lt;/strong&gt; availability, behaviour and capabilities of these systems may be much different than postulated here. As stated, the focus is on BPEL and web service orchestration, and any of these supporting services and resources will be “stubbed in” wherever necessary to present a working end-to-end solution.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;There, I think that just about covers it. Now let’s have some fun…&lt;/p&gt;
&lt;h1 style=&quot;margin-top: 0.17in;&quot;&gt;&lt;span style=&quot;font-family: Liberation Sans,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Identifying the Resources&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;As mentioned in the first instalment of this series, the primary design goal is to use open source software whenever possible and resort to rolling our own only when necessary. This means that we’re going to use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;a href=&quot;http://eclipse.org/bpel&quot;&gt;Eclipse BPEL Designer&lt;/a&gt; and Eclipse 		IDE&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Eclipse WTP&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;a href=&quot;http://jboss.org/riftsaw&quot;&gt;Riftsaw&lt;/a&gt; BPEL runtime&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Jboss Application Server&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;some Jboss-compatible WS stack 		(native or CXF)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;a href=&quot;http://community.jboss.org/wiki/JBossWS-JAX-WSTools&quot;&gt;JAX-WS&lt;/a&gt; for generating java 		services and clients&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;To make all of this happen there are quite a few services and database resources that need to participate. At a minimum, we will need the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Seat Availability Notification 	System (SANS) - this is the “client” that kicks off the entire 	process, although the Flight Reservation System may already have 	this data available. Starting at one hour before the scheduled 	departure time, this system needs to send messages to the LaMiPU 	process, one for each premium seat still available for that flight. 	Since the response from LaMiPU may take several minutes (depending 	on how long the customer interaction takes), this will have to be an 	async request/response.  LaMiPU will respond with either “accepted” 	or “rejected” indicating whether the customer has accepted or 	rejected the seat upgrade. The process may also respond with a fault 	under certain situations (e.g. if the flight has already departed). 	If “accepted”, the client marks the seat as “occupied”, and 	the seat previously occupied by the passenger (presumably an 	“economy” seat) as available. This economy seat can then be made 	available to stand-by customers, but that’s out of scope for this 	project. Most likely this client is specific to the airline and will 	likely have to be cobbled together from existing resources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Flight Reservation System (FRS) – 	this service returns the passenger list for a given flight. 	Passenger status includes whether or not they have already checked 	in for a flight.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Flight Scheduling Service (FSS) – 	this service returns the scheduled departure time for a given 	flight. A quick internet search for web services that already offer 	this functionality turns up quite a few hits, in particular: &lt;a href=&quot;http://flightaware.com/commercial/flightxml/documentation2.rvt&quot;&gt;http://flightaware.com/commercial/flightxml/documentation2.rvt&lt;/a&gt;&lt;a href=&quot;http://flightaware.com/commercial/flightxml/documentation2.rvt&quot;&gt; &lt;/a&gt;Not that our solution will use this service (because I didn’t 	want to be on the hook for subscribtion fees just so I could blog 	about BPEL) but it does provide a blueprint for an existing API that 	we can use. The airline will probably already have their own system, 	or subscribe to one.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Frequent Flyers Database (FFDB) – 	this system is used to look up checked-in passengers and find our 	“loyal customers”. Hmm, since we’re going to be using Riftsaw 	which is based on Apache ODE maybe we can take advantage of &lt;a href=&quot;http://ode.apache.org/external-variables-jdbc-mapping.html&quot;&gt;JDBC 	mapping&lt;/a&gt; of BPEL variables. Of course we’ll have to write a BPEL Editor extension to deal with this (another shameless plug for a future blog topic &lt;img alt=&quot;;)&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_wink.gif&quot; /&gt; )&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Credit Card Authorization System 	(CCAS) – used for credit card authorization and billing for 	upgrade fees. There are tons of these available, and the airline 	will have one or more which it uses regularly and which may already 	have a WSDL interface; our system just needs access to those 	services.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Interactive_voice_response&quot;&gt;IVR&lt;/a&gt; System – this 	is the fun stuff &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_smile.gif&quot; /&gt; check out &lt;a href=&quot;http://trixbox.org/&quot;&gt;http://trixbox.org&lt;/a&gt;&lt;a href=&quot;http://trixbox.org/&quot;&gt; &lt;/a&gt;LaMiPU will use IVR for interaction with passengers so we’ll 	write a web service using a top-down approach to building a java 	application. Hopefully we can get the &lt;a href=&quot;http://www.cstr.ed.ac.uk/projects/festival/&quot;&gt;text to speech&lt;/a&gt; feature 	working.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 style=&quot;margin-top: 0.17in;&quot;&gt;&lt;span style=&quot;font-family: Liberation Sans,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;The Work flow&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;Here’s the basic sequence of events, disregarding possible failure or exception conditions for the moment:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SANS client sends messages to LaMiPU, one for each available 	seat&lt;/li&gt;
&lt;li&gt;This message starts a LaMiPU process, using the flight# and 	seat# as the correlation key.&lt;/li&gt;
&lt;li&gt;LaMiPU sends a message to the FSS requesting departure time 	for the given flight#. If it’s too late to get the seat reassignment 	done before departure, LaMiPU replies to SANS with a fault message.&lt;/li&gt;
&lt;li&gt;LaMiPU contacts the FRS to get the list of passengers that 	have already checked in for a given flight.&lt;/li&gt;
&lt;li&gt;For each of the passengers returned in 4 that do &lt;strong&gt;not&lt;/strong&gt; already have a premium seat assignment (business or first class), 	LaMiPU searches the FFDB for those passengers. If the FFDB indicates 	that the passenger has &lt;strong&gt;not&lt;/strong&gt; already received a seat upgrade 	offer for this flight, LaMiPU prepares to contact that passenger 	using the IVRS. If there are no more passengers to contact, a fault 	is returned to the SANS client. NOTE: we could modify this logic a 	bit by offering seat upgrades to regular passengers at a much higher 	premium, but this is outside the scope of this project. Besides, the 	point of this exercise is not to sell out all premium seats but to 	demonstrate as many BPEL features as possible &lt;img alt=&quot;;)&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_wink.gif&quot; /&gt; &lt;/li&gt;
&lt;li&gt;For the passenger returned by 5, prepare a seat upgrade offer 	message for the IVRS consisting of the passenger’s name, the flight# 	and the price for the upgrade.&lt;/li&gt;
&lt;li&gt;If the passenger accepts the offer, bill his/her credit card 	and notify the FRS of the seat assignment change, wait for a 	response and send a verification message to the customer. Also 	update the FFDB to indicate that the customer has been contacted and 	accepted the seat upgrade. This becomes “interesting” 	information for marketing, and may lead to follow-on work to enhance 	the system ;). Finally, send a message back to the SANS with 	“accepted” status.&lt;/li&gt;
&lt;li&gt;If the passenger declines the offer, update the FFDB to 	indicate the customer has been contacted but has declined the 	upgrade. Send a message back to the SANS with “rejected” status.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is just the basic “happy path” flow. Keep in mind that there are all kinds of failure modes here which have to be dealt with. I’ll get into these in more detail in my next blog.&lt;/p&gt;</description>
	<pubDate>Mon, 23 Aug 2010 21:14:10 +0000</pubDate>
</item>
<item>
	<title>Doug Schaefer: Hypervisors drive Heterogeneity</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-16474715.post-5750733306433325145</guid>
	<link>http://cdtdoug.blogspot.com/2010/08/hypervisors-drive-heterogeneity.html</link>
	<description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_X6Gz24BqUwI/THLXrN1I00I/AAAAAAAAACU/rj0BmLOx1M0/s1600/lab.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_X6Gz24BqUwI/THLXrN1I00I/AAAAAAAAACU/rj0BmLOx1M0/s320/lab.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I have put together a pretty neat little lab here under my desk. As I always say, you have to use the tools to understand the needs of the users. You have to get into their shoes and see what you like and don't like. Then you have a good chance of building tools they'll actually use and like.&lt;br /&gt;&lt;br /&gt;My lab includes two &quot;embedded&quot; systems on the right. The top is a board that has a Freescale PowerPC P4080 8-core chip in it. I have attached my Wind River ICE JTAG unit to it to test some really heavy duty multi-core scenarios. On the bottom right, I have what looks like a basic PC, and it is, but it runs Wind River's hypervisor hosting three operating systems: Wind River Linux, vxWorks, and of all things Windows. I don't have the P4080 system booted up yet, but my intention is to run the Hypervisor there too with random combinations of wrLinux and vxWorks.&lt;br /&gt;&lt;br /&gt;As I put this together, it really drove home the need for an IDE platform that is heterogeneous. That's a hard word to pronounce, but what I really mean is an IDE that can target any operating system that can run in a hypervisor configuration, which is pretty much all of them. And that means an IDE that has plug and play support that lets you create the source for applications that can run on them all, build that source for any and all of the target platforms, and debug the application as it runs on one ore more of them.&lt;br /&gt;&lt;br /&gt;And, you guessed it, the Eclipse CDT C/C++ IDE is a great platform to do that with. We have build and debug support for the GNU toolchain for Linux and from Wind River we have commercial support for vxWorks and Wind River Linux, and upcoming in the next release of CDT, we'll have support for Microsoft's Windows SDK which includes Visual C++.&lt;br /&gt;&lt;br /&gt;As well, I'm about to embark on a very interesting journey with the Target Communication Framework as we advance it's debug capabilities to cover all of these platforms as well. With a common framework for agents that run in all these environments, we'll have the ability to plug 'n play capabilities into these agents and come up with tooling we haven't even dared to consider before. Am I pumped about it? You betcha. We've long had the advantage of plug-in architectures with our Eclipse-based tooling, and now we'll get that advantage all the way down to the target as well.&lt;br /&gt;&lt;br /&gt;And it's really these hypervisor scenarios that have brought me here. It's finally a concrete example where you really need the heterogeneous capabilities that have driven my work on the CDT. And, it's something to sell our employers with too :).&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/16474715-5750733306433325145?l=cdtdoug.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 23 Aug 2010 20:20:16 +0000</pubDate>
	<author>noreply@blogger.com (Doug Schaefer)</author>
</item>
<item>
	<title>Sven Efftinge: Xtext 1.0.1 (SR1) release and git migration on Wednesday</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24248206.post-7670537504361663701</guid>
	<link>http://blog.efftinge.de/2010/08/xtext-101-sr1-release-and-git-migration.html</link>
	<description>In the last two months Xtext got a great number of performance and memory footprint improvements, bug fixes and extensive documentation enhancements (most of them done by Sebastian while us others were on summer vacation :-)). We also fixed a couple of annoying bugs in Xpand's editor.&lt;br /&gt;&lt;br /&gt;You can find a detailed list of all &lt;b&gt;89 fixes&lt;/b&gt; in &lt;a href=&quot;http://bit.ly/drYYWl&quot;&gt;this bugzilla query&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The upcoming Xtext 1.0.1 (Helios SR1) release will be built on Wednesday.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Migration to git&lt;/b&gt;&lt;br /&gt;We are also happy to announce that this will be our last CVS based release, since we will &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=317923&quot;&gt;switch to git&lt;/a&gt; on the very same day. I also want to thank &lt;a href=&quot;http://www.ralfebert.de/&quot;&gt;Ralf Ebert&lt;/a&gt; for his excellent git training he gave us last week in exchange to an Xtext training. Git is cool! :-)&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/24248206-7670537504361663701?l=blog.efftinge.de&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 23 Aug 2010 15:11:14 +0000</pubDate>
	<author>noreply@blogger.com (Sven Efftinge)</author>
</item>
<item>
	<title>Bob Balfe: Why BrowserFunction is so cool</title>
	<guid isPermaLink="true">http://blog.balfes.net/?p=1593</guid>
	<link>http://blog.balfes.net/?p=1593</link>
	<description>&lt;p&gt;If you are familiar with the embedded browser in the Lotus products you may or may not have heard of &lt;a href=&quot;http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt/Eclipse%20SWT%20Browser/common/org/eclipse/swt/browser/BrowserFunction.java?revision=1.9&amp;amp;view=markup&amp;amp;sortby=rev&quot;&gt;BrowserFunction&lt;/a&gt;, most likely not!  The problem is this class is not very well documented and was part of E4 and is scheduled for &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/browser/package-tree.html&quot;&gt;Eclipse 3.6&lt;/a&gt;.  Notes 8.5.2 does however support this SWT class so you can begin to play with it once 8.5.2 is available.&lt;/p&gt;
&lt;p&gt;Why is this so important?  Well, just imagine, now you can completely communicate between Java and JavaScript using this.  You can use the SWT Browsers &lt;a href=&quot;http://help.eclipse.org/helios/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/browser/Browser.html#execute(java.lang.String)&quot;&gt;&lt;em&gt;execute()&lt;/em&gt;&lt;/a&gt; or &lt;a href=&quot;http://help.eclipse.org/helios/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/browser/Browser.html#evaluate(java.lang.String)&quot;&gt;evaluate()&lt;/a&gt; methods to execute JavaScript from Java and now you can execute Java from JavaScript using &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/browser/package-tree.html&quot;&gt;BrowserFunction&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This implies you could potentially write all of your UI using HTML/CSS/JavaScript technologies!&lt;/p&gt;
&lt;p&gt;The Attachment viewer is such an application, you can check out the code on &lt;a href=&quot;http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&amp;amp;name=Attachment%20Viewer&quot;&gt;OpenNTF&lt;/a&gt;.  I don’t use the BrowserFunction in the &lt;a href=&quot;http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&amp;amp;name=Attachment%20Viewer&quot;&gt;OpenNTF version&lt;/a&gt; but I have already begun to make an Lotus Notes 8.5.2 version of the plugin that has much better integration with the Notes client.  If you are writing side bar plugins and want to standardize on writing in a single technology you should check out the SWT Browser and the BrowserFunction support.&lt;/p&gt;</description>
	<pubDate>Mon, 23 Aug 2010 14:01:19 +0000</pubDate>
</item>
<item>
	<title>EclipseLive: Reminder - Eclipse 4.0 - the Next Generation of the Eclipse Platform</title>
	<guid isPermaLink="false">http://live.eclipse.org/962 at http://live.eclipse.org</guid>
	<link>http://live.eclipse.org/node/962</link>
	<description>&lt;div class=&quot;field field-type-text field-field-author&quot; id=&quot;author&quot;&gt;
  &lt;span class=&quot;field-item&quot;&gt;Boris Bokowski (IBM)&lt;/span&gt;
&lt;/div&gt;

&lt;div class=&quot;resource-icon&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://live.eclipse.org/files/ECLP_webinar.gif&quot; /&gt; &lt;/div&gt;  

&lt;div id=&quot;abstract&quot;&gt;
	&lt;span class=&quot;field-label&quot;&gt;Abstract:&lt;/span&gt;  
	&lt;div class=&quot;field field-type-text field-field-author&quot;&gt;
	  &lt;span class=&quot;field-item&quot;&gt;&lt;p&gt;As the software landscape changes, the Eclipse platform is also evolving in order to remain relevant and vibrant. Eclipse 4.0, the next generation of the Eclipse platform, arrived this summer.  The goals of Eclipse 4.0 are to simplify the Eclipse programming model, enable the platform for use on emerging web-based runtime technologies, and broaden participation in the development of the platform.&lt;/p&gt;

&lt;p&gt;Join Boris, lead of the Eclipse 4.0 project, for an overview of Eclipse 4.0 and a demo of some of the features which benefit users.&lt;/p&gt;

&lt;p&gt;Total running time will be approximately 1 hour&lt;/p&gt;

&lt;p&gt;8:00 am PDT / 11:00 am EDT / 3:00 pm UTC / 5:00pm CEST - &lt;a href=&quot;http://www.timeanddate.com/worldclock/fixedtime.html?month=8&amp;amp;day=26&amp;amp;year=2010&amp;amp;hour=15&amp;amp;min=0&amp;amp;sec=0&amp;amp;p1=0&quot; target=&quot;&quot;&gt;Convert to other time zones&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to Adobe for contributing their Adobe Acrobat Connect product to host this webinar.&lt;br /&gt;
&lt;img height=&quot;10&quot; src=&quot;http://live.eclipse.org/files/images/adobeconnect.jpg&quot; /&gt;&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
	  &lt;span class=&quot;field-item&quot;&gt;&lt;a href=&quot;http://del.icio.us/post?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Bookmark this post on del.icio.us.&quot;&gt;&lt;img alt=&quot;delicious&quot; src=&quot;http://live.eclipse.org/modules/service_links/delicious.png&quot; /&gt; delicious&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Digg this post on digg.com.&quot;&gt;&lt;img alt=&quot;digg&quot; src=&quot;http://live.eclipse.org/modules/service_links/digg.png&quot; /&gt; digg&lt;/a&gt; | &lt;a href=&quot;http://www.dzone.com/links/add.html?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Tag this post on DZone.&quot;&gt;&lt;img alt=&quot;dzone&quot; src=&quot;http://live.eclipse.org/modules/service_links/dzone.png&quot; /&gt; dzone&lt;/a&gt;&lt;/span&gt;
	&lt;/div&gt;
	
&lt;/div&gt;

&lt;div id=&quot;embedded&quot;&gt;
	  &lt;/div&gt;</description>
	<pubDate>Mon, 23 Aug 2010 13:28:09 +0000</pubDate>
	<author>lynn.gayowski@eclipse.org (EclipseLive)</author>
</item>
<item>
	<title>Eclipse Riena: Progress in a new bar</title>
	<guid isPermaLink="true">http://www.compeople.eu/blog/?p=427</guid>
	<link>http://www.compeople.eu/blog/?p=427</link>
	<description>&lt;p&gt;For a small scrum tool that we are currently developing on top of the &lt;a href=&quot;http://eclipse.org/riena/&quot; title=&quot;Eclipse Riena&quot;&gt;Riena&lt;/a&gt; framework, we wanted to visualize the progress of user stories and tasks carried out by a developer. We would usually use a ProgressBar widget to display such a progress. However, as we soon realized, this widget has a number of drawbacks.&lt;/p&gt;
&lt;p&gt;A ProgressBar is usually used to display the progress of a much shorter time span, a file operation for example. This assumption found its way into OS design decisions. For instance, since Vista, the ProgressBar on Windows features a highlight perpetually running back and forth to indicate that the process is still running. This is rather irritating when several ProgressBars are used on one view. Also, if a ProgressBar was hidden due to a scrolling operation and comes back into view, it gradually fills up to the value currently set. As with many other SWT widgets, the possibilities to alter color or design are very limited. We wanted to change the color when a task is completed to indicate the difference between “the estimated/allotted time has been used” and “the task has been completed”.&lt;/p&gt;
&lt;p&gt;Long story short, we wrote a new widget, the StatusMeter. It dynamically creates an image, giving us absolute control over all its properties.&lt;a href=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/07/currentstate.png&quot;&gt;&lt;img alt=&quot;Current state indicated by the new ProgressBar&quot; class=&quot;size-full wp-image-431 alignleft&quot; height=&quot;84&quot; src=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/07/currentstate.png&quot; style=&quot;margin: 5px;&quot; title=&quot;currentstate&quot; width=&quot;114&quot; /&gt;&lt;/a&gt; We now can change the color to reflect different states. There is a ridget in place so it feels like any other widget used in Riena. And since the main part of this widget is the image, it also gives us the opportunity to use it inside of table columns (for example via Riena’s ColumnFormatter). Thus we can now visualize percentages in table columns just as easy as we visualize boolean values with a checkbox.&lt;/p&gt;
&lt;p&gt;The widget is called StatusMeterWidget. If you want to use it in a table column, use StatusMeter directly to create just the image. Both are available via CVS. Feel free to send screenshots of how you use it in your application.&lt;/p&gt;</description>
	<pubDate>Mon, 23 Aug 2010 11:04:18 +0000</pubDate>
</item>
<item>
	<title>Ankur Sharma: Adding SpellChecking to custom editors</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5914783.post-4852621545638572218</guid>
	<link>http://blog.ankursharma.org/2009/08/adding-spellchecking-to-custom-editors_19.html</link>
	<description>&lt;div style=&quot;text-align: justify;&quot;&gt;Eclipse provides a nice framework to use spell checking in dialog and editors. Chris has tipped about it &lt;a href=&quot;http://eclipsesource.com/blogs/2008/10/03/tip-spellchecking-in-eclipse/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. However, if you are using a custom editor then you have to put few pieces together yourself. Consider an XML editor. We would want the spelling check only for the string in attribute values and not the XML Tags.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Let us try and implement this. We can start with the XML editor template provided by PDE.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;1. Create a new plug-in using &quot;&lt;i&gt;Plug-in with an Editor&lt;/i&gt;&quot; template.&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_dqhq-tO9EaM/SvM3zlxQ9HI/AAAAAAAACR8/AhM0EE53Lb0/s1600-h/new_plugin_wizard_xmleditor.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/_dqhq-tO9EaM/SvM3zlxQ9HI/AAAAAAAACR8/AhM0EE53Lb0/s640/new_plugin_wizard_xmleditor.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style=&quot;text-align: center;&quot;&gt;New Plug-in Wizard&lt;/div&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;2.  This will create a simple XML Editor by extending &lt;a href=&quot;http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/editors/text/TextEditor.html&quot; target=&quot;_blank&quot;&gt;TextEditor&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;3. The XMLEditor uses XMLConfiguration to set the source viewer configuration.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public XMLEditor() {&lt;br /&gt; super();&lt;br /&gt; colorManager = new ColorManager();&lt;br /&gt; setSourceViewerConfiguration(new XMLConfiguration(colorManager));&lt;br /&gt; setDocumentProvider(new XMLDocumentProvider());&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;Modify the constructor for XMLConfiguration and pass the preference store. It will be needed by its super class.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public XMLEditor() {&lt;br /&gt; super();&lt;br /&gt; colorManager = new ColorManager();&lt;br /&gt; setSourceViewerConfiguration(new XMLConfiguration(colorManager, getPreferenceStore()));&lt;br /&gt; setDocumentProvider(new XMLDocumentProvider());&lt;br /&gt;} &lt;/pre&gt;&lt;pre class=&quot;brush:java&quot;&gt; &lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;4. The XMLConfiguration basically hooks various listeners, providers and assistants to the Editor. The template generated code will have it sub-classed from &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/source/SourceViewerConfiguration.html&quot; target=&quot;_blank&quot;&gt;SourceViewerConfiguration&lt;/a&gt;. Change it to &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/editors/text/TextSourceViewerConfiguration.html&quot; target=&quot;_blank&quot;&gt;TextSourceViewerConfiguration&lt;/a&gt;. The TextSourceViewerConfiguration provides out of the box spell checker, spelling annotation, problem hover text, quick fixes, etc.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class XMLConfiguration extends TextSourceViewerConfiguration { //SourceViewerConfiguration {&lt;br /&gt;...&lt;br /&gt;public XMLConfiguration(ColorManager colorManager, IPreferenceStore preferenceStore) {&lt;br /&gt; super(preferenceStore);&lt;br /&gt; this.colorManager = colorManager;&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;The &lt;i&gt;preferenceStore&lt;/i&gt; will be used for checking dictionary and other preferences. They can be set from &lt;i&gt;Window &amp;gt; Preferences &amp;gt; General &amp;gt; Editors &amp;gt; Text Editors &amp;gt; Spelling &lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;5. Override the getReconciler function.  The implementation for &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/editors/text/TextSourceViewerConfiguration.html#getReconciler%28org.eclipse.jface.text.source.ISourceViewer%29&quot; target=&quot;_blank&quot;&gt;getReconciler&lt;/a&gt; provided by TextSourceViewerConfiguration uses a &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/texteditor/spelling/SpellingReconcileStrategy.html&quot; target=&quot;_blank&quot;&gt;SpellingReconcileStrategy&lt;/a&gt;. The SpellingReconcileStrategy will spell check the whole document. Since its an XML Editor, only quoted strings should be spell checked and the XML tags should be skipped.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;/**&lt;br /&gt;* Providing custom XMLSpellingReconcileStrategy to enable spell checking for only strings&lt;br /&gt;*/&lt;br /&gt;/* (non-Javadoc)&lt;br /&gt;* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getReconciler(org.eclipse.jface.text.source.ISourceViewer)&lt;br /&gt;*/&lt;br /&gt;public IReconciler getReconciler(ISourceViewer sourceViewer) {&lt;br /&gt; XMLSpellingReconcileStrategy strategy = new XMLSpellingReconcileStrategy(sourceViewer, EditorsUI.getSpellingService());&lt;br /&gt; Reconciler reconciler = new Reconciler();&lt;br /&gt; reconciler.setReconcilingStrategy(strategy, XMLStringPartitionScanner.XML_STRING);&lt;br /&gt; reconciler.setDocumentPartitioning(XMLStringPartitionScanner.XML_STRING);&lt;br /&gt; return reconciler;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;6. XMLStringPartitionScanner will be our custom document partition scanner to identify the quoted string. The template generated code will make use of XMLPartitionScanner. This class specifies the rules for identifying the XML tags and comments. Since, the quoted string are part of XML Tag only, we can not use this partition scanner. Therefore, we write our custom document partition scanner and at supply it to the reconcile strategy.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class XMLStringPartitionScanner extends RuleBasedPartitionScanner {&lt;br /&gt;&lt;br /&gt; public final static String XML_STRING = &quot;__xml_string&quot;;&lt;br /&gt;&lt;br /&gt; public XMLStringPartitionScanner() {&lt;br /&gt;  IToken stringToken = new Token(XML_STRING);&lt;br /&gt;  IPredicateRule[] rules = new IPredicateRule[1];&lt;br /&gt;&lt;br /&gt;  rules[0] = new MultiLineRule(&quot;\&quot;&quot;, &quot;\&quot;&quot;, stringToken, '\\');&lt;br /&gt;  setPredicateRules(rules);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;7. XMLSpellingReconcileStrategy will extend SpellingReconcileStrategy since it already knows how to collect spelling problem, etc. Only &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/texteditor/spelling/SpellingReconcileStrategy.html#reconcile%28org.eclipse.jface.text.IRegion%29&quot; target=&quot;_blank&quot;&gt;reconcile &lt;/a&gt;is what needs to be overridden.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class XMLSpellingReconcileStrategy extends SpellingReconcileStrategy {&lt;br /&gt;&lt;br /&gt; public XMLSpellingReconcileStrategy(ISourceViewer sourceViewer, SpellingService spellingService) {&lt;br /&gt;  super(sourceViewer, spellingService);&lt;br /&gt; }&lt;br /&gt; ...&lt;br /&gt; public void reconcile(IRegion region) {&lt;br /&gt;&lt;br /&gt;  AbstractDocument document = (AbstractDocument) getDocument();&lt;br /&gt;  IDocumentPartitioner docPartitioner = document.getDocumentPartitioner(XMLStringPartitionScanner.XML_STRING);&lt;br /&gt;&lt;br /&gt;  IAnnotationModel model = getAnnotationModel();&lt;br /&gt;  if (region.getOffset() == 0 &amp;amp;&amp;amp; region.getLength() == document.getLength()) {&lt;br /&gt;  //reconciling whole document&lt;br /&gt;  super.reconcile(region);&lt;br /&gt;  deleteUnwantedAnnotations();&lt;br /&gt;  } else {&lt;br /&gt;   //partial reconciliation&lt;br /&gt;   //preserve spelling annotations first&lt;br /&gt;   Iterator iter = model.getAnnotationIterator();&lt;br /&gt;   Map spellingErrors = new HashMap(1);&lt;br /&gt;   while (iter.hasNext()) {&lt;br /&gt;    Annotation annotation = (Annotation) iter.next();&lt;br /&gt;    if (annotation instanceof SpellingAnnotation) {&lt;br /&gt;     SpellingAnnotation spellingAnnotation = (SpellingAnnotation) annotation;&lt;br /&gt;     Position position = model.getPosition(spellingAnnotation);&lt;br /&gt;     String contentType = docPartitioner.getContentType(position.getOffset());&lt;br /&gt;&lt;br /&gt;     if (XMLStringPartitionScanner.XML_STRING.equalsIgnoreCase(contentType)) {&lt;br /&gt;      spellingErrors.put(spellingAnnotation, model.getPosition(annotation));&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //reconcile&lt;br /&gt;   super.reconcile(region);&lt;br /&gt;&lt;br /&gt;   //restore annotations&lt;br /&gt;   model = getAnnotationModel();&lt;br /&gt;   iter = spellingErrors.keySet().iterator();&lt;br /&gt;   while (iter.hasNext()) {&lt;br /&gt;    Annotation annotation = (Annotation) iter.next();&lt;br /&gt;    model.addAnnotation(annotation, (Position) spellingErrors.get(annotation));&lt;br /&gt;   }&lt;br /&gt;   deleteUnwantedAnnotations();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt; * Deletes the spelling annotations marked for XML Tags&lt;br /&gt; */&lt;br /&gt; private void deleteUnwantedAnnotations() {&lt;br /&gt;  AbstractDocument document = (AbstractDocument) getDocument();&lt;br /&gt;  IDocumentPartitioner docPartitioner = document.getDocumentPartitioner(XMLStringPartitionScanner.XML_STRING);&lt;br /&gt;  IAnnotationModel model = getAnnotationModel();&lt;br /&gt;  Iterator iter = model.getAnnotationIterator();&lt;br /&gt;&lt;br /&gt;  while (iter.hasNext()) {&lt;br /&gt;   Annotation annotation = (Annotation) iter.next();&lt;br /&gt;   if (annotation instanceof SpellingAnnotation) {&lt;br /&gt;    SpellingAnnotation spellingAnnotation = (SpellingAnnotation) annotation;&lt;br /&gt;    Position position = model.getPosition(spellingAnnotation);&lt;br /&gt;    String contentType = docPartitioner.getContentType(position.getOffset());&lt;br /&gt;    if (!XMLStringPartitionScanner.XML_STRING.equalsIgnoreCase(contentType)) {&lt;br /&gt;     model.removeAnnotation(spellingAnnotation);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;8. Putting it all together&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;The XMLStringPartitionScanner is our document partition scanner. It uses the &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/rules/MultiLineRule.html&quot; target=&quot;_blank&quot;&gt;MultiLineRule&lt;/a&gt; to locate the quoted string. XMLDocumentProvider adds it to the XML document.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class XMLDocumentProvider extends FileDocumentProvider {&lt;br /&gt;&lt;br /&gt; protected IDocument createDocument(Object element) throws CoreException {&lt;br /&gt;  IDocument document = super.createDocument(element);&lt;br /&gt;  if (document != null) {&lt;br /&gt;   IDocumentPartitioner partitioner = new FastPartitioner(new XMLPartitionScanner(), new String[] {XMLPartitionScanner.XML_TAG, XMLPartitionScanner.XML_COMMENT});&lt;br /&gt;   partitioner.connect(document);&lt;br /&gt;   document.setDocumentPartitioner(partitioner);&lt;br /&gt;&lt;br /&gt;   //Adding our string partition scanner to the document&lt;br /&gt;   partitioner = new FastPartitioner(new XMLStringPartitionScanner(), new String[] {XMLStringPartitionScanner.XML_STRING});&lt;br /&gt;   partitioner.connect(document);&lt;br /&gt;   ((AbstractDocument) document).setDocumentPartitioner(XMLStringPartitionScanner.XML_STRING, partitioner);&lt;br /&gt;  }&lt;br /&gt;  return document;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;XMLPartitionScanner is generated by the template and it locates XML tags and comments. Since quoted strings are part of tags, we added XMLStringPartitionScanner too.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;The XMLConfiguration finally wires all the content types to &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/presentation/PresentationReconciler.html&quot;&gt;PresentationReconciler&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;9. After thoughts&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;All the infrastructure is already in place for enabling spell checking. But custom editors need some extra wiring. If finer control is needed on the quick fix assistant override &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/source/SourceViewerConfiguration.html#getQuickAssistAssistant%28org.eclipse.jface.text.source.ISourceViewer%29&quot; target=&quot;_blank&quot;&gt;getQuickAssistAssistant&lt;/a&gt; function and for controlling the hover message &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/source/SourceViewerConfiguration.html#getTextHover%28org.eclipse.jface.text.source.ISourceViewer,%20java.lang.String%29&quot; target=&quot;_blank&quot;&gt;getTextHover &lt;/a&gt;will do the trick.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;10. Source code&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The archived project can be downloaded from &lt;a href=&quot;https://sites.google.com/site/eclipsepdeandme/attachments/org.example.xml.spelling.zip?attredirects=0&amp;amp;d=1&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;11. Disclaimer :-)&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;This code doesn't cover all the scenarios as it is just an example. These things I figured out while fixing the &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=286203&quot; target=&quot;_blank&quot;&gt;bug #286203&lt;/a&gt;. Feel free to add your suggestions and point out any mistakes you see.Eclipse provides a nice framework to use spell checking in dialog and editors. Chris has tipped about it here. However, if you are using a custom editor then you have to put few pieces together yourself. Consider an XML editor. We would want the spelling check only for the string in attribute values and not the XML Tags.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5914783-4852621545638572218?l=blog.ankursharma.org&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 23 Aug 2010 05:21:14 +0000</pubDate>
	<author>sharma.ankur@gmail.com (Ankur Sharma)</author>
</item>
<item>
	<title>Steffen Pingel: Preview of Mylyn Hudson connector available</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/mylog/?p=29</guid>
	<link>http://dev.eclipse.org/blogs/mylog/2010/08/22/preview-of-mylyn-hudson-connector-now-available/</link>
	<description>&lt;p&gt;I am happy to announce that EGit is not the only Eclipse project that had a successful Summer of Code this year. Just as the program is wrapping up, a first version of the new &lt;a href=&quot;http://wiki.eclipse.org/Mylyn/Hudson_Integration_for_Mylyn&quot; target=&quot;_new&quot;&gt;Mylyn Hudson connector&lt;/a&gt; has been uploaded to the Mylyn weekly incubator update site. I had the pleasure to mentor Markus Knittig who did a great job over the summer in getting the connector into its current state. While there is still quite a bit of work to do, I have already been using the connector on a daily basis to monitor builds.&lt;/p&gt;
&lt;p&gt;The Hudson connector is based on the Mylyn Builds framework which provides common infrastructure for integrating build servers with Eclipse. Most importantly it provides a Builds view.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-view.png&quot;&gt;&lt;img alt=&quot;Mylyn Builds View&quot; class=&quot;size-full wp-image-37 aligncenter&quot; height=&quot;278&quot; src=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-view.png&quot; width=&quot;518&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The view shows the status and health for subscribed jobs. Red indicates a failed build, yellow failed tests and green means a build was successful. The weather icons in the Summary column show how a build has been doing in recent history following the Hudson web interface.&lt;/p&gt;
&lt;p&gt;One really neat feature is the decoration of the view icon which shows the overall status when the view is in fast-view mode. When auto refresh is enabled the decoration icon will show a black or red X once a builds fails very similar to how the JUnit view indicates failed tests.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-view-icon.png&quot;&gt;&lt;img alt=&quot;Builds in Fast View&quot; class=&quot;size-full wp-image-38 aligncenter&quot; height=&quot;48&quot; src=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-view-icon.png&quot; width=&quot;35&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Subscribing to jobs, which are called plans in the Builds framework, is straight forward from the build server properties page which closely follows the settings page for Mylyn task repositories. All selected plans are shown and monitored in the Builds view.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/hudson-properties.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-39&quot; height=&quot;554&quot; src=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/hudson-properties.png&quot; width=&quot;525&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you feel brave and want try out the Hudson connector add the following P2 repositories to Eclipse 3.5 or later:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #666666;&quot;&gt;http://&lt;/span&gt;download.eclipse.org/tools/mylyn/update/weekly&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: #666666;&quot;&gt;http://&lt;/span&gt;download.eclipse.org/tools/mylyn/update/weekly/incubator&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Note that the connector is still work in progress and it is likely that the data model will change in future versions possibly requiring re-configuration of servers. I recommend checking the weekly &lt;a href=&quot;http://eclipse.org/mylyn/new/weekly.php&quot; target=&quot;_blank&quot;&gt;Mylyn New &amp;amp; Noteworthy&lt;/a&gt; every once in a while which will lists any significant enhancements or changes.&lt;/p&gt;
&lt;p&gt;The Mylyn Bugzilla lists &lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&amp;amp;short_desc=%5Bbuild%5D&amp;amp;product=Mylyn&amp;amp;long_desc_type=allwordssubstr&amp;amp;long_desc=&amp;amp;order=Importance&quot; target=&quot;_blank&quot;&gt;plenty of ideas&lt;/a&gt; how to move forward but I would love to hear from the community what features would be most valuable to you. Please feel free to file bugs against Mylyn or chime in on the discussion on one of the existing feature requests.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&amp;amp;short_desc=%5Bbuild%5D&amp;amp;product=Mylyn&amp;amp;long_desc_type=allwordssubstr&amp;amp;long_desc=&amp;amp;order=Importance&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-42&quot; height=&quot;190&quot; src=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-buglist.png&quot; width=&quot;405&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There has been talk about moving the Hudson connector in its own Eclipse sub-sub-project. Please drop me a line or comment on &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=308040&quot; target=&quot;_blank&quot;&gt;bug 308040&lt;/a&gt; if you are interested in getting involved.&lt;/p&gt;</description>
	<pubDate>Mon, 23 Aug 2010 01:29:08 +0000</pubDate>
</item>
<item>
	<title>Robert Konigsberg: Presenting the Google/Eclipse/Enterprise talk in Reston VA Oct 13</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-8055871.post-16282380428422632</guid>
	<link>http://konigsberg.blogspot.com/2010/08/presenting-googleeclipseenterprise-talk.html</link>
	<description>Brief note: I'm excited to be presenting the talk &quot;&lt;a href=&quot;http://konigsberg.blogspot.com/2010/03/learn-about-how-google-uses-eclipse.html&quot;&gt;Eclipse in the Enterprise: Lessons from Google&lt;/a&gt;&quot; at &lt;a href=&quot;http://eclipse-ecosystem.blogspot.com/2010/08/eclipse-government-day-and-eclipse.html&quot;&gt;Eclipse Enterprise Days&lt;/a&gt; on Oct 13 in Reston, VA.&lt;br /&gt;&lt;br /&gt;This looks like a great conference for people who support large Eclipse user bases -- you know who you are -- if you attended the &lt;a href=&quot;http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1633&quot;&gt;Eclipse in the Enterprise BoF at EclipseCon&lt;/a&gt;, this conference is for you. From the &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Enterprise_Days&quot;&gt;conference&lt;/a&gt; page:&lt;br /&gt;&lt;blockquote&gt;&quot;Attendees must be an employee or contractor of an &quot;Enterprise User&quot; of Eclipse technology. Enterprise users typically are responsible for the use of Eclipse by hundreds and even thousands of developers in their organizations.&quot;&lt;/blockquote&gt;Are you planning to attend this conference? Let me know.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8055871-16282380428422632?l=konigsberg.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 22 Aug 2010 13:00:50 +0000</pubDate>
	<author>noreply@blogger.com (Robert Konigsberg)</author>
</item>
<item>
	<title>Dave Carver</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1585332946379204379.post-429304812684438959</guid>
	<link>http://intellectualcramps.blogspot.com/2010/08/sometimes-we-try-to-take-short-cut-when.html</link>
	<description>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Sometimes we try to take the short cut when creating our Interfaces and methods.  For example, take the &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IWorkspaceRoot.html&quot;&gt;IWorkspaceRoot.delete&lt;/a&gt; method for an example.   &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It takes several different parameters:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;delete(boolean deleteContent, boolean force, IProjressMonitor monitor);&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most of the time this is implemented in code as the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;workspaceRoot.delete(true, false, new NullProgressMonitor());&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's a little difficult to understand just by looking at it without looking at the javadoc what it is doing.  The more parameters we add the more possibility for mistakes and more complicated the method's code.   There is a mindset that boolean parameters should be avoided.  That it is better to be more descriptive and create a few more method names:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So instead of the above we could have the following specific method names.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;deleteAll(IProgressMonitor monitor);&lt;/div&gt;&lt;div&gt;delete(IProgressMonitor monitor);&lt;/div&gt;&lt;div&gt;forceDeleteAll(IProgressMonitor monitor);&lt;/div&gt;&lt;div&gt;forceDelete(IProgressMonitor minitor);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yes it is four methods now, but each serves only one purpose.   The other method was doing at least four things depending on how the switches were set.   I'm sure others could come up with even better method names than I have.   It is important when we are designing API and interfaces to look at it from a user's point of view.   If it isn't clear from just looking at the method and its parameters what it is doing, then the method is too complicated and doing too much.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Resources:&lt;/b&gt;  &lt;a href=&quot;http://www.informit.com/articles/article.aspx?p=1375308&quot;&gt;Avoid Too Many Arguments&lt;/a&gt;.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1585332946379204379-429304812684438959?l=intellectualcramps.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 22 Aug 2010 02:07:30 +0000</pubDate>
	<author>noreply@blogger.com (David Carver)</author>
</item>
<item>
	<title>Matthias Sohn: EGit History View showing all branches</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/msohn/?p=3</guid>
	<link>http://dev.eclipse.org/blogs/msohn/2010/08/20/egit-history-view-showing-all-branches/</link>
	<description>&lt;p&gt;So far EGit’s History View could only display the commits reachable from the current HEAD.&lt;/p&gt;
&lt;p&gt;Here how this looks for the git.git repo when the branch remote/maint is checked out :&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_4&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-show-checkedout-branch.png&quot;&gt;&lt;img alt=&quot;git.git repo in EGit history view, origin/maint checked out&quot; class=&quot;size-medium wp-image-4&quot; height=&quot;123&quot; src=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-show-checkedout-branch-300x123.png&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;git.git repo, origin/maint checked out&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Jens Baumgart today added a little toggle button which will do all the magic :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/show-all-branches1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-6&quot; height=&quot;28&quot; src=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/show-all-branches1-300x28.png&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Together with my still pending change &lt;a href=&quot;http://egit.eclipse.org/r/#change,1359&quot; title=&quot;my change 1359 currently in review&quot;&gt;http://egit.eclipse.org/r/#change,1359&lt;/a&gt;&lt;br /&gt;
to also show all remote tracking branches this becomes “gitk -all for Eclipse” :&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_7&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-show-all-branches.png&quot;&gt;&lt;img alt=&quot;git.git in EGit, showing all branches, branch origin/maint checked out&quot; class=&quot;size-medium wp-image-7&quot; height=&quot;83&quot; src=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-show-all-branches-300x83.png&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;git.git in EGit, showing all branches, branch origin/maint checked out&lt;/p&gt;&lt;/div&gt;</description>
	<pubDate>Sat, 21 Aug 2010 01:23:26 +0000</pubDate>
</item>
<item>
	<title>Birt World: BIRT Flash and Gadget Scripting</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-14521551.post-8207792429549444473</guid>
	<link>http://birtworld.blogspot.com/2010/08/birt-flash-and-gadget-scripting.html</link>
	<description>In my last post I blogged about how &lt;a href=&quot;http://birtworld.blogspot.com/2010/08/birt-charting-scripting-overview.html&quot;&gt;Chart Scripting&lt;/a&gt; works in BIRT. If you are using &lt;a href=&quot;http://www.birt-exchange.com/be/products/birt-report-designers/actuate-birt-report-designers/features/?articleid=17169&quot;&gt;Actuate BIRT&lt;/a&gt;, you also will have access to Flash Charts and Gadgets. Scripting for these two report items is very similar to the standard Chart scripting model.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TG6k8uZZ9OI/AAAAAAAAAPA/Gz6ckW5hknI/s1600/image1.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507520757474391266&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TG6k8uZZ9OI/AAAAAAAAAPA/Gz6ckW5hknI/s400/image1.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 388px; height: 241px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Flash Charts&lt;/strong&gt;&lt;br /&gt;Currently Flash charts support 14 script event triggers that can be hooked to make chart modifications.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6lZQFoM2I/AAAAAAAAAPI/00TM_FM3gzg/s1600/image2.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507521247554581346&quot; src=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6lZQFoM2I/AAAAAAAAAPI/00TM_FM3gzg/s400/image2.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 263px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The event firing order is shown below.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6lkXz86sI/AAAAAAAAAPQ/3KXyehon3j4/s1600/flashchartorder.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507521438606486210&quot; src=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6lkXz86sI/AAAAAAAAAPQ/3KXyehon3j4/s400/flashchartorder.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 323px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see the order is very similar to that of normal BIRT charts. The before and after dataset filled events are fired first for each dataset (category and value). Next the beforeRendering event is fired and then the before and after draw series events are fired for each series. Between the before and after draw series events the before and after draw data point events are fired for each point in the series. The before and after draw series events (and the events contained in them) are fired for each series in the chart. After all series are processed, the before and after draw effect events are fired for each effect in the chart. Effects can be used to alter the chart at runtime, allowing font manipulation, blurring, glowing, shadowing, beveling, and animation of different objects of the chart. Effects are added to the chart using the effects editor. &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_GN1FyT5H8Kg/TG6l6_gX8gI/AAAAAAAAAPY/NWMx6vvkw_M/s1600/effects.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507521827218911746&quot; src=&quot;http://3.bp.blogspot.com/_GN1FyT5H8Kg/TG6l6_gX8gI/AAAAAAAAAPY/NWMx6vvkw_M/s400/effects.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 249px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Using the beforeDrawEffect event script you can alter any of the effects added to the chart. For example to turn off the shadow effect in the above chart you could use the following script.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawEffect( effect, fcsc )&lt;br /&gt;{&lt;br /&gt;var effectName = &quot;MyTitleEffect&quot;;&lt;br /&gt;if ( effectName.equals( effect.getAction().getName() ) ){&lt;br /&gt;if( effect.getAction().getShadow() != null ){&lt;br /&gt;effect.getAction().getShadow().setEnabled(false);&lt;br /&gt;effect.getAction().getFont().setEnabled(false);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The getEffect().getAction().getName() call returns the name of the effect as defined in the effect editor. This can be used to determine which effect definition your script is operating on. The getAction allows access to the different effect features. Note that if the effect is not enabled the getter method for the effect will return null. In the above script we first check to see if the getShadow method returns null before turning it off. &lt;br /&gt;&lt;br /&gt;Finally the afterRendering event is triggered.&lt;br /&gt;&lt;br /&gt;These events function much the same way as described in my earlier post. You will notice that event function prototypes are just a little different. For example instead of a chart and icsc parameter you will get a flashChart and fcsc parameter in certain events. For practical purposes these are just extended chart and icsc objects and still provide most of the standard object features. For example to set the chart title to the value of a report parameter using the reportContext, you could use a script like the following. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeRendering( flashChart, fcsc )&lt;br /&gt;{&lt;br /&gt;var parmChartTitle = fcsc.getExternalContext().getScriptable().getParameterValue(&quot;MyChartTitle&quot;);&lt;br /&gt;flashChart.getChart().getTitle().getLabel().getCaption().setValue(parmChartTitle)&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Flash Gadgets&lt;/strong&gt;&lt;br /&gt;BIRT Flash Gadget report items are used to display data in a unique dynamic graphic. Currently Actuate BIRT supports thermometer, cylinder, bullet, spark line, meter gauge or linear gauge gadgets. These gadgets also support server side scripting.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6m092-PcI/AAAAAAAAAPg/qgDjuCURAa0/s1600/gadget1.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507522823209237954&quot; src=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6m092-PcI/AAAAAAAAAPg/qgDjuCURAa0/s400/gadget1.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 374px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Twelve event triggers are supported and can be used to alter how the gadget is displayed. The events that are triggered will depend on the gadget and which features the gadget is using. For example this meter gadget:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TG6nAxhkfmI/AAAAAAAAAPo/Tho9JkLLHac/s1600/examplegadget.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507523026056674914&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TG6nAxhkfmI/AAAAAAAAAPo/Tho9JkLLHac/s400/examplegadget.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 206px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Produces the following event order.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_GN1FyT5H8Kg/TG6nODHAjRI/AAAAAAAAAPw/0KQjtRIHhIw/s1600/gadgeteventorder.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507523254115405074&quot; src=&quot;http://1.bp.blogspot.com/_GN1FyT5H8Kg/TG6nODHAjRI/AAAAAAAAAPw/0KQjtRIHhIw/s400/gadgeteventorder.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 211px; height: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The beforeRendering event is called first and can be used to modify the flash gadget before it is rendered. Next before and after draw region events are trigger for each of the three regions in the meter gadget. This gadget contains two thresholds, so the before and after threshold events are triggered next for each threshold. The gadget also contains two needles so the before and after draw needle events are fired. The threshold label contains a font effect and the threshold areas are animated. This produces before and after draw effect triggers for each. Finally the afterRendering event is triggered.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Retrieving Gadget Values&lt;/em&gt;&lt;br /&gt;BIRT Flash Gadgets use value definitions to link the gadget to a BIRT dataset.  The definitions are assigned in the Gadget Editor.  The runtime values for these definitions can be retrieved in script using the gadget object.  For example, in the beforeRendering you could use the following script:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeRendering( gadget, fgsc )&lt;br /&gt;{&lt;br /&gt; var vals=gadget.getResultValues();&lt;br /&gt; for( i = 0; i &amp;lt; vals.size(); i++ ){&lt;br /&gt;  if( vals.get(i).getValue() &amp;gt; 20 ){&lt;br /&gt;   //do something&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The number of result values will depend on the gadget.  For example, In a Spark Line gadget there will be multiple values.  In a meter gadget, there will be a result value for each needle value.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Region Events&lt;/em&gt;&lt;br /&gt;You can customize the colors, transparency, labels, and range values of any region using the beforeRendering or beforeDrawRegion scripts.  See the example below.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawRegion( region, fgsc )&lt;br /&gt;{&lt;br /&gt; if( region.getLabel().equals(&quot;A&quot;) ){&lt;br /&gt;  region.setColor(&quot;00ff00&quot;);&lt;br /&gt; } &lt;br /&gt;   //Display value range of region.   &lt;br /&gt;     region.setLabel( &quot;(&quot; + region.getStartValue() + &quot;, &quot; + region.getEndValue() + &quot;)&quot; ); &lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function beforeRendering( gadget, fgsc )&lt;br /&gt;{&lt;br /&gt; //First Region&lt;br /&gt; gadget.getRegion().get(0).setEndValue(25);&lt;br /&gt; //Second Region&lt;br /&gt; gadget.getRegion().get(1).setStartValue(25);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Threshold Events&lt;/em&gt;&lt;br /&gt;Thresholds, like regions can also be customized using script.  Virtually anything that is set in the designer can be changed in an event trigger.  For example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawThreshold( threshold, fgsc )&lt;br /&gt;{&lt;br /&gt;  if( threshold.getLabel().equals(&quot;MyThreshold&quot;) ){&lt;br /&gt;   threshold.setShowValueInside(true);&lt;br /&gt;   threshold.setShowValueOnTop(false);&lt;br /&gt;   threshold.setStartValue(10);&lt;br /&gt;   threshold.setColor(&quot;0000ee&quot;);&lt;br /&gt;  // Display the value range of threshold.&lt;br /&gt;   threshold.setLabel( &quot;(&quot; + threshold.getStartValue() + &quot;, &quot; + threshold.getEndValue() + &quot;)&quot; );&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function beforeRendering( gadget, fgsc )&lt;br /&gt;{&lt;br /&gt; gadget.getThresholds().get(0).setMarkerColor(&quot;ff0000&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;In these scripts, we change the starting value, color, label and label location in the beforeDrawThreshold.  The marker color is also changed in the beforeRendering script.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;AddOn Events&lt;/em&gt;&lt;br /&gt;BIRT Gadgets support the concept of an AddOn.  An AddOn allows the designer to place images, text, and various shapes on top of the gadget.  If the gadget contains an AddOn the before and afterDrawAddOn events will be triggered, allowing you to customize the AddOn at runtime.  For example, the following script customizes two AddOns.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawAddOn( addOn, fgsc )&lt;br /&gt;{&lt;br /&gt; // Change add-on styles. &lt;br /&gt; if ( addOn.getName().equals(&quot;TitleAddOn&quot;) )&lt;br /&gt; {&lt;br /&gt;  addOn.setLabel( &quot;Meter Gauge&quot; );&lt;br /&gt;  addOn.setFontColor( &quot;ff0000&quot; );&lt;br /&gt;  addOn.setFontSize( 28 );&lt;br /&gt;  addOn.setY( 35 );&lt;br /&gt; }&lt;br /&gt; else if ( addOn.getName().equals( &quot;ArcAddOn&quot; ) )&lt;br /&gt; {&lt;br /&gt;  addOn.setFillColor( &quot;ffff00&quot; );&lt;br /&gt; }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;AddOns can even be created and placed on the gadget at runtime.  For example the following script adds a text AddOn to the gadget using the beforeRendering event.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeRendering( gadget, fgsc )&lt;br /&gt;{&lt;br /&gt;  importPackage( Packages.com.actuate.birt.flash.gadgets );&lt;br /&gt;  importPackage( Packages.com.actuate.birt.flash.gadgets.impl );&lt;br /&gt;  &lt;br /&gt;  // Add a text add-on.&lt;br /&gt;  var textAddOn = GadgetsFactory.eINSTANCE.createTextAddOn();&lt;br /&gt;  textAddOn.setAddOnType( AddOnType.TEXT );&lt;br /&gt;  textAddOn.setName(&quot;DescAddOn&quot;);&lt;br /&gt;  textAddOn.setShowAddOn(true);&lt;br /&gt;  gadget.getAddOns().add( textAddOn );&lt;br /&gt;  gadget.setZOrderPosition(1);&lt;br /&gt; &lt;br /&gt; textAddOn.setLabel(&quot;This sample demonstrates how to add an add-on by scripting.&quot;);&lt;br /&gt; textAddOn.setX(2);&lt;br /&gt; textAddOn.setY(20);&lt;br /&gt; textAddOn.setFontSize( 12 );&lt;br /&gt; textAddOn.setHorizontalAlignment( HorizontalAlignmentType.LEFT );&lt;br /&gt; textAddOn.setVerticalAlignment( VerticalAlignmentType.TOP );&lt;br /&gt; textAddOn.setWrap( true );&lt;br /&gt; textAddOn.setTextBoxBorderColor(&quot;000000&quot;); //Black&lt;br /&gt; textAddOn.setTextBoxBackgroundColor(&quot;c0c0c0&quot;);&lt;br /&gt; textAddOn.setWrapMaxWidth( 30 );&lt;br /&gt; textAddOn.setWrapMaxHeight( 50 );&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;em&gt;Needle Events&lt;/em&gt;&lt;br /&gt;If your gadget contains a needle, the before and afterDrawNeedle events will be triggered.  Using script the needle can be customized.  The size, color, shape, and various other properties of the needle can be customized.  These events are passed a NeedleWrapper instance, which can be used to get the specific needle type.  For example the following two scripts differentiate between a normal gadget needle and a meter gadget needle.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawNeedle( needleWrapper, fgsc )&lt;br /&gt;{&lt;br /&gt;   importPackage( Packages.com.actuate.birt.flash.gadgets );&lt;br /&gt;   importPackage( Packages.com.actuate.birt.flash.gadgets.impl );&lt;br /&gt;   // Change needle styles.&lt;br /&gt;   needleWrapper.getNeedle().setShape( Shape.DIAMOND );&lt;br /&gt;   needleWrapper.getNeedle().setFillColor(&quot;2cf83a&quot;);&lt;br /&gt;   needleWrapper.getNeedle().setBorderColor(&quot;007f00&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function beforeDrawNeedle( needleWrapper, fgsc )&lt;br /&gt;{  &lt;br /&gt;   //Set Needle size to 25%&lt;br /&gt;   needleWrapper.getMeterNeedle().setSize(25);&lt;br /&gt;   needleWrapper.getMeterNeedle().setBackgroundColor(&quot;ff0000&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Effect Events&lt;/em&gt;&lt;br /&gt;The effect events were described above in the flash charting section.&lt;br /&gt;&lt;br /&gt;Several examples used in this post are available at &lt;a href=&quot;http://www.birt-exchange.org/org/devshare/designing-birt-reports/1253-flash-chart-and-gadget-scripting/&quot;&gt;BIRT-Exchange&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/14521551-8207792429549444473?l=birtworld.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 20 Aug 2010 18:29:21 +0000</pubDate>
	<author>noreply@blogger.com (Jason Weathersby)</author>
</item>
<item>
	<title>Bob Brodt: The Eclipse BPEL Designer Project - what’s the deal here?</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/bpel/?p=16</guid>
	<link>http://dev.eclipse.org/blogs/bpel/2010/08/20/the-eclipse-bpel-designer-project-whats-the-deal-here/</link>
	<description>&lt;p&gt;Unless you have been stranded on a deserted island for the last few years you’re probably aware that JBoss/Red Hat has been making some huge contributions in the middleware technology space, both on the tooling and runtime side. The announcements of &lt;a href=&quot;http://www.jboss.org/tools&quot;&gt;JBoss Tools&lt;/a&gt; (the community supported edition) and &lt;a href=&quot;http://devstudio.jboss.com/&quot;&gt;JBoss Developer Studio&lt;/a&gt; (the fully supported, enterprise version) represent an impressive offering of developer tools, plug-ins, APIs, UI components and execution engines that make the SOA architect’s life worth living again. The tooling is built on top of the Eclipse Workbench as a collection of plug-ins and is compatible with the current “Helios” release of eclipse.&lt;/p&gt;
&lt;p&gt;JBoss Tools combines best-of-breed open source and in-house developed software and packages it all up in a neat little bundle so that you can be reasonably assured all of the pieces are going to play nice together. This is no small feat, considering that some of the bits of open source software have all kinds of different version interdependencies and conflicts, a problem which Eclipse plug-in developers have simply accepted as the price to be paid for the privilege of getting to play with &lt;a href=&quot;http://www.eclipsecon.org/2010/&quot;&gt;really cool stuff&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of these components, which “yours truly” has recently become very involved in, is the &lt;a href=&quot;http://eclipse.org/bpel&quot;&gt;BPEL Designer &lt;/a&gt;project. It seems that while there has been lots and lots of interest in the community for an editor (other than &lt;a href=&quot;http://en.wikipedia.org/wiki/Editor_war&quot;&gt;“vi” or “emacs”&lt;/a&gt;) that offers not just an enjoyable user experience but also handles validation reasonably well, there has been little progress over the past three years or so. The reasons for the seeming lack of interest in the developer community to contribute to a product that is obviously of great interest, are unknown and unimportant. What is important is that we as a community rekindle the spark and start moving this project forward again.&lt;/p&gt;
&lt;p&gt;Because of my previous &lt;a href=&quot;http://dev.eclipse.org/blogs/bpel/about/&quot;&gt;experience&lt;/a&gt; building EMF/GEF editors, middleware and the like, I have [been] volunteered to “take the helm” and try to help in sparking interest in the community. Over the past few weeks, &lt;a href=&quot;http://dev.eclipse.org/blogs/wayne/&quot;&gt;Wayne Beaton&lt;/a&gt; has been extremely helpful in making this happen (thanks Wayne!) and, hopefully, in the next few weeks we will see a renewed energy over at eclipse.org/bpel &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_smile.gif&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Here are some ideas we’d like to see happen in the near future:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stabilize the code. It’s “pretty good” currently and will even [almost] build and run on Helios, but there’s always room for improvement.&lt;/li&gt;
&lt;li&gt;Start doing nightly or snapshot builds at eclipse.org and make them available to the community.&lt;/li&gt;
&lt;li&gt;Migrate the existing CVS repository to Git to ease the pain of source code management.&lt;/li&gt;
&lt;li&gt;Get on the eclipse release train. It’s very painful trying to jump a plug-in by more than one major release of eclipse and making sure that we’re always compatible with the current release goes a long way in community acceptance.&lt;/li&gt;
&lt;li&gt;Strongly “encourage” committers to use &lt;a href=&quot;http://en.wikipedia.org/wiki/Test-driven_development&quot;&gt;TDD&lt;/a&gt; methodologies to ensure code quality: submitting a patch? submit a JUnit or SWTBot test along with it, and get a prize!&lt;/li&gt;
&lt;li&gt;Move the project out of incubation and into a top-level project (WTP? SOA? Any takers out there?)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If anyone in the community has any other suggestions, I’d be more than happy to discuss them. We’re always looking for suggestions and help with bug fixes or implementing new features. Please email me at bbrodt@redhat.com, or simply reply to this blog post.&lt;/p&gt;</description>
	<pubDate>Fri, 20 Aug 2010 18:18:22 +0000</pubDate>
</item>
<item>
	<title>Jeff, Paul &amp; Simon: Second printing on the way!</title>
	<guid isPermaLink="false">http://equinoxosgi.org/?p=190</guid>
	<link>http://equinoxosgi.org/2010/08/second-printing-on-the-way/</link>
	<description>&lt;p&gt;I’m pleased to announce that demand for the &lt;a href=&quot;http://equinoxosgi.org&quot;&gt;OSGi and Equinox book&lt;/a&gt; has been quite high. Certainly not NY Times bestseller material but in the 6 months since it has been out we have shipped almost 3500 copies. For context, we are told that selling a total of 10,000 copies for tech a book is a very reasonable number so this is a great start.  In any event, the publisher is running a second printing next week as they are almost out of copies. Paul, Simon and I are just finishing up a few editorial changes and corrections to incorporate reader feedback (thanks!) and then its off to the presses.  Again.&lt;/p&gt;</description>
	<pubDate>Fri, 20 Aug 2010 14:34:22 +0000</pubDate>
</item>
<item>
	<title>Karsten Thoms: Tycho build works also for oAW 4.3 projects</title>
	<guid isPermaLink="false">http://kthoms.wordpress.com/?p=259</guid>
	<link>http://kthoms.wordpress.com/2010/08/19/tycho-build-works-also-for-oaw-4-3-projects/</link>
	<description>&lt;p&gt;Yesterday I showed &lt;a href=&quot;http://kthoms.wordpress.com/2010/08/18/building-xtext-projects-with-maven-tycho/&quot;&gt;how Xtext 1.0 projects can be build with Maven Tycho&lt;/a&gt;. So why shouldn’t the same setup don’t work for ‘old’ openArchitectureWare Xpand projects? This works like a charm. I took the simple project that the Xpand project wizard creates and added the POM, and it worked! You can &lt;a href=&quot;http://dl.dropbox.com/u/662339/Blogs/org.openarchitectureware.example.xpand.tycho.zip&quot;&gt;download the sample project here&lt;/a&gt;. See the POM below, a setup for other oAW Xpand projects should be rather similar.&lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;
	&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
	&amp;lt;groupId&amp;gt;p2.osgi.bundle&amp;lt;/groupId&amp;gt;
	&amp;lt;artifactId&amp;gt;org.openarchitectureware.example.xpand.tycho&amp;lt;/artifactId&amp;gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
	&amp;lt;packaging&amp;gt;eclipse-plugin&amp;lt;/packaging&amp;gt;
	&amp;lt;name&amp;gt;org.openarchitectureware.example.xpand.tycho&amp;lt;/name&amp;gt;

	&amp;lt;properties&amp;gt;
		&amp;lt;version.tycho&amp;gt;0.9.0&amp;lt;/version.tycho&amp;gt;
	&amp;lt;/properties&amp;gt;

	&amp;lt;build&amp;gt;
		&amp;lt;resources&amp;gt;
			&amp;lt;resource&amp;gt;
				&amp;lt;directory&amp;gt;src&amp;lt;/directory&amp;gt;
			&amp;lt;/resource&amp;gt;
		&amp;lt;/resources&amp;gt;
		&amp;lt;plugins&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;groupId&amp;gt;org.sonatype.tycho&amp;lt;/groupId&amp;gt;
				&amp;lt;artifactId&amp;gt;tycho-maven-plugin&amp;lt;/artifactId&amp;gt;
				&amp;lt;version&amp;gt;${version.tycho}&amp;lt;/version&amp;gt;
				&amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;
			&amp;lt;/plugin&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;groupId&amp;gt;org.sonatype.tycho&amp;lt;/groupId&amp;gt;
				&amp;lt;artifactId&amp;gt;target-platform-configuration&amp;lt;/artifactId&amp;gt;
				&amp;lt;version&amp;gt;${version.tycho}&amp;lt;/version&amp;gt;
				&amp;lt;configuration&amp;gt;
					&amp;lt;resolver&amp;gt;p2&amp;lt;/resolver&amp;gt;
				&amp;lt;/configuration&amp;gt;
			&amp;lt;/plugin&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;groupId&amp;gt;org.fornax.toolsupport&amp;lt;/groupId&amp;gt;
				&amp;lt;artifactId&amp;gt;fornax-oaw-m2-plugin&amp;lt;/artifactId&amp;gt;
				&amp;lt;version&amp;gt;3.1.0-SNAPSHOT&amp;lt;/version&amp;gt;
				&amp;lt;configuration&amp;gt;
					&amp;lt;workflowEngine&amp;gt;oaw&amp;lt;/workflowEngine&amp;gt;
					&amp;lt;workflowDescriptor&amp;gt;workflow/generator.oaw&amp;lt;/workflowDescriptor&amp;gt;
				&amp;lt;/configuration&amp;gt;
				&amp;lt;executions&amp;gt;
					&amp;lt;execution&amp;gt;
						&amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;
						&amp;lt;goals&amp;gt;
							&amp;lt;goal&amp;gt;run-workflow&amp;lt;/goal&amp;gt;
						&amp;lt;/goals&amp;gt;
					&amp;lt;/execution&amp;gt;
				&amp;lt;/executions&amp;gt;
			&amp;lt;/plugin&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;
				&amp;lt;version&amp;gt;2.4.1&amp;lt;/version&amp;gt;
				&amp;lt;configuration&amp;gt;
					&amp;lt;filesets&amp;gt;
						&amp;lt;fileset&amp;gt;
							&amp;lt;directory&amp;gt;src-gen&amp;lt;/directory&amp;gt;
							&amp;lt;includes&amp;gt;
								&amp;lt;include&amp;gt;**/**&amp;lt;/include&amp;gt;
							&amp;lt;/includes&amp;gt;
						&amp;lt;/fileset&amp;gt;
					&amp;lt;/filesets&amp;gt;
				&amp;lt;/configuration&amp;gt;
			&amp;lt;/plugin&amp;gt;
		&amp;lt;/plugins&amp;gt;
	&amp;lt;/build&amp;gt;
	&amp;lt;repositories&amp;gt;

		&amp;lt;repository&amp;gt;
			&amp;lt;id&amp;gt;p2.openarchitectureware&amp;lt;/id&amp;gt;
			&amp;lt;url&amp;gt;http://www.openarchitectureware.org/updatesite/milestone/&amp;lt;/url&amp;gt;
			&amp;lt;layout&amp;gt;p2&amp;lt;/layout&amp;gt;
		&amp;lt;/repository&amp;gt;
		&amp;lt;repository&amp;gt;
			&amp;lt;id&amp;gt;p2.eclipse.helios&amp;lt;/id&amp;gt;
			&amp;lt;url&amp;gt;http://download.eclipse.org/releases/helios&amp;lt;/url&amp;gt;
			&amp;lt;layout&amp;gt;p2&amp;lt;/layout&amp;gt;
		&amp;lt;/repository&amp;gt;
		&amp;lt;!-- At the moment the Fornax plugin is only available as snapshot --&amp;gt;
		&amp;lt;repository&amp;gt;
			&amp;lt;id&amp;gt;fornax-snapshots&amp;lt;/id&amp;gt;
			&amp;lt;url&amp;gt;http://www.fornax-platform.org/archiva/repository/snapshots/&amp;lt;/url&amp;gt;
			&amp;lt;releases&amp;gt;
				&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;
			&amp;lt;/releases&amp;gt;
			&amp;lt;snapshots&amp;gt;
				&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;
			&amp;lt;/snapshots&amp;gt;
		&amp;lt;/repository&amp;gt;
	&amp;lt;/repositories&amp;gt;
	&amp;lt;pluginRepositories&amp;gt;
		&amp;lt;pluginRepository&amp;gt;
			&amp;lt;id&amp;gt;fornax-snapshots&amp;lt;/id&amp;gt;
			&amp;lt;url&amp;gt;http://www.fornax-platform.org/archiva/repository/snapshots/&amp;lt;/url&amp;gt;
			&amp;lt;releases&amp;gt;
				&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;
			&amp;lt;/releases&amp;gt;
			&amp;lt;snapshots&amp;gt;
				&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;
			&amp;lt;/snapshots&amp;gt;
		&amp;lt;/pluginRepository&amp;gt;
	&amp;lt;/pluginRepositories&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/259/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/259/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/259/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/259/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/259/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/259/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/259/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/259/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/259/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/259/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/259/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/259/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/259/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/259/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&amp;amp;blog=6829080&amp;amp;post=259&amp;amp;subd=kthoms&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 19 Aug 2010 22:16:22 +0000</pubDate>
</item>
<item>
	<title>Zoltan Ujhelyi: New features in the Debug Visualisation plug-in</title>
	<guid isPermaLink="false">http://cubussapiens.hu/?p=1647</guid>
	<link>http://cubussapiens.hu/en/2010/08/new-features-in-the-debug-visualisation-plug-in/</link>
	<description>&lt;p&gt;After a month, some bugs from the &lt;a href=&quot;http://cubussapiens.hu/en/2010/07/here-it-is-debug-visualisation-0-8-0/&quot;&gt;Debug Visualisation version 0.8.0&lt;/a&gt; have been fixed. Most notably, the incorrect trimming of long titles, and a case, where arcs were incorrectly removed from the graph.&lt;/p&gt;
&lt;p&gt;Two minor new features were also introduced: it is possible to turn off name trimming, and the values of variables is now displayed as a hover.&lt;/p&gt;
&lt;p&gt;I created a screencast to show these new features (and also some other, as &lt;a href=&quot;http://cubussapiens.hu/en/2009/06/debug-visualisation-screencast/&quot;&gt;the last screencast&lt;/a&gt; was created over a year ago.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(If the embedded video does not show in your feed reader, you can &lt;a href=&quot;http://www.youtube.com/watch?v=bMSv5OKZ_no&quot;&gt;watch it on YouTube&lt;/a&gt;.)&lt;/p&gt;</description>
	<pubDate>Thu, 19 Aug 2010 17:59:04 +0000</pubDate>
</item>
<item>
	<title>Marcel Gorri: Post #12 – Simultaneously running – 19 Aug, 2010 – 13h04 (GMT-3)</title>
	<guid isPermaLink="false">http://sequoyahproject.wordpress.com/?p=86</guid>
	<link>http://sequoyahproject.wordpress.com/2010/08/19/post-12-%e2%80%93-simultaneously-running-%e2%80%93-19-aug-2010-%e2%80%93-13h04-gmt-3/</link>
	<description>&lt;p&gt;Joining an ongoing simultaneous release is something you won’t forget: lots of things to check, lots of things to make compliant, lots of milestones coming up, lots of things to check again for the next milestone… yeah, it’s a bit of a hush, hehehe! But it is a nice, warm feeling when you see things on schedule and even more when the release train ends and your project is there, with all other projects that were steps ahead of you! &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; /&gt; &lt;/p&gt;
&lt;p&gt;This happened for Sequoyah from the last months of 2009 to this June, when Sequoyah was adapting from being an incubation project and developing to maturity, to be released together with &lt;a href=&quot;http://www.eclipse.org/helios/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Eclipse Helios&lt;/strong&gt;&lt;/a&gt;. I am saying most of this for myself, but I don’t think it was much different for my teammates. The hush and the warm feeling are the same!&lt;/p&gt;
&lt;p&gt;Now, for Indigo release train, we are in a much more comfortable position, since we are already compliant with lots of those items, and we know a little bit more on how the process works (even though we still come with some newbie questions sometimes, as the guys on cross-project-dev mailing list would easily confirm, hehe). But for this release we already know when we should make our builds available for the aggregator, when will the packages come for us to test, which bugs to merge for the next build, and things like that.&lt;/p&gt;
&lt;p&gt;This was actually the reason I started to write this post:&lt;br /&gt;
&lt;strong&gt;we have joined the &lt;a href=&quot;http://wiki.eclipse.org/Indigo_Simultaneous_Release&quot; target=&quot;_blank&quot;&gt;Eclipse Indigo Simultaneous Release Train&lt;/a&gt;&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;As of today, we have our &lt;strong&gt;1.1.0.I20100816-0145&lt;/strong&gt; Sequoyah build available for the Indigo aggregator to build the composite repository for the first milestone. We have also made available a new build of the Pulsar plugins, namely &lt;strong&gt;1.1.1.I20100816-0515&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Things will probably change a lot before the RC weeks come next year, but it’s now a much more fun work to do, knowing a little bit of what to expect! I’ll try to share some more of my experience in the weeks to come. If it is not useful for you, maybe you just laugh a little, and that’s fine too! See you around!&lt;/p&gt;
&lt;p&gt;(posted by &lt;strong&gt;Daniel Pastore&lt;/strong&gt;)&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/sequoyahproject.wordpress.com/86/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/sequoyahproject.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/sequoyahproject.wordpress.com/86/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/sequoyahproject.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/sequoyahproject.wordpress.com/86/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/sequoyahproject.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/sequoyahproject.wordpress.com/86/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/sequoyahproject.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/sequoyahproject.wordpress.com/86/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/sequoyahproject.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/sequoyahproject.wordpress.com/86/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/sequoyahproject.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/sequoyahproject.wordpress.com/86/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/sequoyahproject.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=sequoyahproject.wordpress.com&amp;amp;blog=14347883&amp;amp;post=86&amp;amp;subd=sequoyahproject&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;</description>
	<pubDate>Thu, 19 Aug 2010 16:11:58 +0000</pubDate>
</item>
<item>
	<title>Chris Aniszczyk: Eclipse and GSOC Alumni</title>
	<guid isPermaLink="false">http://aniszczyk.org/?p=2626</guid>
	<link>http://aniszczyk.org/2010/08/19/eclipse-and-gsoc-alumni/</link>
	<description>&lt;p&gt;The &lt;a href=&quot;http://code.google.com/soc/&quot;&gt;Google Summer of Code&lt;/a&gt; program for 2010 has wrapped up recently.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://aniszczyk.org/wp-content/uploads/2010/08/eclipsegsoc.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-2627&quot; height=&quot;185&quot; src=&quot;http://aniszczyk.org/wp-content/uploads/2010/08/eclipsegsoc-300x185.png&quot; title=&quot;eclipse gsoc&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eclipse &lt;a href=&quot;http://wiki.eclipse.org/Google_Summer_of_Code_2010&quot;&gt;participated&lt;/a&gt; this year and I’m not sure how all of our &lt;a href=&quot;http://wiki.eclipse.org/Google_Summer_of_Code_2010&quot;&gt;projects&lt;/a&gt; did, but I can at least tell you how things went with the project I was involved with. I and the rest of the &lt;a href=&quot;http://www.eclipse.org/egit&quot;&gt;EGit&lt;/a&gt; team (mostly Matthias Sohn) mentored &lt;a href=&quot;http://luksza.org/&quot;&gt;Dariusz Luksza&lt;/a&gt; in providing some much needed enhancements to the EGit project. Dariusz started out with some smaller items such as adding tagging support but eventually moved on to more complicated endeavors like implementing support for the synchronize view. All I can say is that the project went really well and I recently was proud to &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/egit-dev/msg01377.html&quot;&gt;nominate&lt;/a&gt; Dariusz as a committer.&lt;/p&gt;
&lt;p&gt;In the past, there have been other successful transitions from GSOC alumni to committer. It’s even helped some people get jobs! For example, &lt;a href=&quot;http://blog.hantsuki.org/&quot;&gt;Remy Suen&lt;/a&gt; had to endure my mentorship four years ago or so and now he’s having fun working at IBM hacking on Eclipse 4.0 amongst other things. I’m sure there are other examples out there that aren’t coming to my mind at the moment.&lt;/p&gt;
&lt;p&gt;In the future, it would be good to see more projects at Eclipse.org involved in GSOC and mentoring students. Just a little of your time can have a positive effect on a student and the open source community as a whole. In my opinion, working with potential contributors and more importantly students, is one of the best things we can do for ourselves within the Eclipse community to keep things vibrant.&lt;/p&gt;</description>
	<pubDate>Thu, 19 Aug 2010 15:22:03 +0000</pubDate>
</item>
<item>
	<title>Chris Gross: A World Without Browser Plugins</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-30309527.post-1197928531015568748</guid>
	<link>http://blog.chris-gross.com/2010/02/world-without-browser-plugins.html</link>
	<description>...scares the hell out of me. Apple recently announced the iPad and unless you're living under a rock you've heard about it and probably the brouhaha over its refusal to allow Flash. Apparently the iPad won't allow &lt;i&gt;any&lt;/i&gt; browser plugins.  I am scared to hell.&lt;br /&gt;&lt;br /&gt;Web/browser-based applications are the future. We will continue to move further away from the desktop. Soon enough, almost all widespread software will be browser-based. Today that means HTML+Javascript, plus Flash, Silverlight, Java or any other plugin-based approach. If Steve Job's has his way, we won't have any plugins. The Open Web crowd want the same. So just HTML and Javascript. Regardless of how you feel about HTML+Javascript today, everyone has to agree that the rate of innovation here is very very slow. The HTML5 mess including the recent spat about video codecs shows us again that Design by Committee is the worst sort of process. &lt;br /&gt;&lt;br /&gt;Now imagine a world where this is the &lt;b&gt;ONLY&lt;/b&gt; avenue for new innovations in client-side languages and platforms. If we remove plugins this is all we have left. On the client side, there will be no new languages - just Javascript. There will be no new languages to sprout up like Java or Ruby have done in the past decade. Nope - Javascript is the standard. Nobody will have the motivations (i.e. there will be no money in it) or ability to add a new language to the browser standards. And there will be no way around this via plugins. &lt;br /&gt;&lt;br /&gt;Steve Jobs certainly has his master plan and hopes to make large sums of money on the iPad and the continuing dominance of the iPhone. But the Open Web folks seemingly come from a more philosophic/political agenda - &quot;The Web Should be Free&quot;. What happens when that comes true. What happens when we've successfully prevented all corporate interests from profiting off client technologies on the internet? Then certainly no companies will invest in the client technologies. We've salted our own fields. We've put our sole hope for new innovation in a committee process thats proven itself time and time again, both in general theory and in specific practice of these groups, to be slow and fraught with problems.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/30309527-1197928531015568748?l=blog.chris-gross.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 19 Aug 2010 13:53:45 +0000</pubDate>
	<author>noreply@blogger.com (Chris Gross)</author>
</item>
<item>
	<title>Chris Gross: ReviewMate - the best Code Review editor for Eclipse</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-30309527.post-6951702291184008541</guid>
	<link>http://blog.chris-gross.com/2010/08/reviewmate-best-code-review-editor-for.html</link>
	<description>We're proud to announce the public beta of &lt;a href=&quot;http://www.elementriver.com/reviewmate&quot;&gt;ReviewMate&lt;/a&gt;, the best (in our opinion) code review tool for Eclipse.  &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.elementriver.com/reviewmate&quot;&gt;ReviewMate &lt;/a&gt;is different from other code review tools because it allows you to add comments right in the context of the code itself.  No more entering code comments in awkward forms.  Simply highlight a few lines of code, click the Comment button, and your new comment bubble will appear in the right margin.  &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_PZ35OTegnzA/TG01EiqgwpI/AAAAAAAAADY/plsDmaj0uOc/s1600/reviewmate1.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507116271484846738&quot; src=&quot;http://2.bp.blogspot.com/_PZ35OTegnzA/TG01EiqgwpI/AAAAAAAAADY/plsDmaj0uOc/s400/reviewmate1.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 295px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks to ReviewMate's innovative technique for code formatting, almost any programming language can be handled by the ReviewMate editor.  Even formats like HTML and SQL.  If you're Eclipse IDE can format the file, so can ReviewMate.  &lt;br /&gt;&lt;br /&gt;Check out the &lt;a href=&quot;http://www.elementriver.com/reviewmate&quot;&gt;ReviewMate &lt;/a&gt;page on ElementRiver.com and sign up for the free public beta.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/30309527-6951702291184008541?l=blog.chris-gross.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 19 Aug 2010 13:52:25 +0000</pubDate>
	<author>noreply@blogger.com (Chris Gross)</author>
</item>
<item>
	<title>Peter Kriens: OSGi Community Event Sept. 29-30 in London</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-18772002.post-6504905095065500025</guid>
	<link>http://www.osgi.org/blog/2010/08/osgi-community-event-sept-29-30-in.html</link>
	<description>Just a small reminder that you still have to register for the OSGi Community Event, September 29-30 in London! We really have a very strong program this year, there are lots of very interesting presentations. From the program it is clear that OSGi is maturing in many verticals of the software industry. From the Appstore for the connected home market to the enterprise application twins Apache</description>
	<pubDate>Thu, 19 Aug 2010 10:16:28 +0000</pubDate>
	<author>noreply@blogger.com (Peter Kriens)</author>
</item>
<item>
	<title>Elias Volanakis: Last week in Riena: 3.0 announced, Web support, ESE talks</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=4608</guid>
	<link>http://eclipsesource.com/blogs/2010/08/19/last-week-in-riena-3-0-announced-web-support-ese-talks/</link>
	<description>&lt;p&gt;Here are three recent developments from Eclipse Riena, that you may otherwise have missed:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;• Version 3.0 announced&lt;/strong&gt; – we have updated the development plan, skipping the 2.1 release and shooting straight for a 3.0 release next June (Eclipse Indigo). While we strive to keep the bulk of the APIs unchanged, this move will grant us the flexibility to carefully introduce changes needed to support Eclipse RAP.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;http://www.eclipse.org/forums/index.php?t=msg&amp;amp;th=173449&amp;amp;start=0&amp;amp;S=1a023f7ee7e3326153e8c06e3bebc7f5&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;read the full announcement here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;• Riena goes to the Web&lt;/strong&gt; – We are excited about having all of Riena run on Eclipse RAP and are stepping up the effort.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;navigation 400 Last week in Riena: 3.0 announced, Web support, ESE talks&quot; class=&quot;alignnone size-full wp-image-4615&quot; height=&quot;357&quot; src=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/08/navigation_400.png&quot; title=&quot;Riena on RAP&quot; width=&quot;400&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In the last two weeks we have ported and committed the Riena Navigation to RAP. Thanks to recent improvements in RAP this was a breeze! We also have an automated build for this second platform. Lastly, we have worked to eliminate all compile errors when building against RAP. This should make further development more straightforward.&lt;/p&gt;
&lt;p&gt;If you want to follow the effort add yourself on &lt;a href=&quot;http://bugs.eclipse.org/302893&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Bug 302893&lt;/a&gt; and read the ‘&lt;a href=&quot;http://wiki.eclipse.org/Riena_on_RAP&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Riena on RAP&lt;/a&gt;‘ page on the wiki.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;• Riena at Eclipse Summit Europe &lt;/strong&gt;- Riena committers are participating at the &lt;a href=&quot;http://www.eclipsecon.org/summiteurope2010/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ESE, November 2 – 4 in Ludwigsburg&lt;/a&gt;. We have proposed following talks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1778&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Riena on RAP (Running Riena in the Web)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1779&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Riena on e4 aka “RCP 2.0″&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1780&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;SWT on Qt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1740&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Tutorial: dynamic UI – from domain model to RCP app&lt;/a&gt; (Riena+Modelling+RedView)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are interested in any of these topics: please follow the link and leave a short comment. This will help the organizers decide which talks to approve. Thanks!&lt;/p&gt;</description>
	<pubDate>Wed, 18 Aug 2010 23:02:07 +0000</pubDate>
</item>
<item>
	<title>Elias Volanakis: Eclipse RAP – What’s new in Helios? (Slides)</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=4597</guid>
	<link>http://eclipsesource.com/blogs/2010/08/19/eclipse-rap-whats-new-in-helios-slides/</link>
	<description>&lt;p&gt;Here are the slides from my “&lt;a href=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/08/201006-Bay-Area-DemoCamp-RAP-New-Noteworthy.pdf&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Eclipse RAP – What’s new in Helios?&lt;/a&gt;“ talk, which I gave at the &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_DemoCamps_Helios_2010/Bay_Area&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Bay Area Demo Camp&lt;/a&gt; in June. They capture the most interesting novelties of the RAP 1.3 release. You can find even more details in the &lt;a href=&quot;http://eclipse.org/rap/noteworthy/1.3/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;full release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/08/201006-Bay-Area-DemoCamp-RAP-New-Noteworthy.pdf&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;rap new in helios bd Eclipse RAP Whats new in Helios? (Slides)&quot; class=&quot;alignnone size-full wp-image-4601&quot; height=&quot;299&quot; src=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/08/rap_new_in_helios_bd.png&quot; title=&quot;Eclipse RAP – What’s new in Helios?&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I want to thank Oracle and AvantSoft for hosting and organizing the event.&lt;/p&gt;
&lt;p&gt;If you are interested in future Eclipse events in the Bay Area, please take a moment to &lt;a href=&quot;http://www.meetup.com/eclipse/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;join the Bay Area Eclipse User Group&lt;/a&gt; on Meetup.com&lt;/p&gt;</description>
	<pubDate>Wed, 18 Aug 2010 22:25:14 +0000</pubDate>
</item>
<item>
	<title>Stephan Herrmann: Object Teams rocks :)</title>
	<guid isPermaLink="false">http://blog.objectteams.org/?p=58</guid>
	<link>http://blog.objectteams.org/2010/08/object-teams-rocks/</link>
	<description>&lt;div style=&quot;margin: 15px; margin-bottom: 10px; text-align: center; background-color: #def4fe; border: 2px solid #c4c295; padding: 5px;&quot;&gt;
This is a story of code evolution at its best. About re-use and starting over.
&lt;/div&gt;
&lt;p&gt;During the last week or so I modernized a part of the Object Teams Development Tooling (OTDT) that had been developed some 5 years ago: the type hierarchy for OT/J. I’ll mention the basic requirements for this engine in a minute. While most of the OTDT succeeds in reusing functionality from the JDT, the type hierarchy was implemented as a full replacement of the original. This is a pretty involved little machine, which took weeks and months to get right. It provides its logic to components like Refactoring and the Type Hierarchy View.&lt;/p&gt;
&lt;p&gt;On the one hand this engine worked well for most uses, but over so many years we did not succeed to solve two remaining issues:&lt;/p&gt;
&lt;dl style=&quot;margin-bottom: 10px;&quot;&gt;
&lt;dt&gt;&lt;strong&gt;Give a faithful implementation for &lt;code&gt;getSuperclass()&lt;/code&gt;&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;This is tricky because a role class in OT/J can have more than one superclass. Failing to implement this method we could not support the “traditional” mode of the hierarchy view that shows both the tree of subclasses of a focus type plus the path of superclasses up to &lt;code&gt;Object&lt;/code&gt; (this upwards path relies on &lt;code&gt;getSuperclass&lt;/code&gt;).&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Support region based hierarchies&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;Here the type hierarchy is not only computed for supertypes and subtypes of one given focus type, but full inheritance structure is computed for a set of types (a “region”). This strategy is used by many JDT Refactorings, and thus we could not precisely adapt some of these for OT/J.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;In analyzing this situation I had to weigh these issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In its current state the implementation strategy was a &lt;span style=&quot;color: red;&quot;&gt;show stopper&lt;/span&gt; for one mode of the type hierarchy view and for precise analysis in several refactorings.&lt;/li&gt;
&lt;li&gt;Adding a region based variant of our hierarchy implementation would mean to &lt;span style=&quot;color: red;&quot;&gt;re-invent lots of stuff&lt;/span&gt;, both from the JDT and from our own development.&lt;/li&gt;
&lt;li&gt;All this seemed to suggest to &lt;strong&gt;discard our own implementation and start over from scratch&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;margin: 15px; margin-bottom: 0px; text-align: center; background-color: #def4fe; border: 2px solid #c4c295; padding: 5px;&quot;&gt;
Start over I did, but not from scratch but from the wealth of a working JDT implementation.
&lt;/div&gt;
&lt;h2&gt;Object Teams to the rescue: Let’s re-build Rome in ten days.&lt;/h2&gt;
&lt;p&gt;As mentioned in my previous post, the strength of Object Teams lies in building layers: each module sits in one layer, and integration between layers is given by declarative bindings:&lt;br /&gt;
&lt;a href=&quot;http://blog.objectteams.org/wp-uploads/2010/07/complete-2.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-50&quot; height=&quot;115&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/07/complete-2-300x115.png&quot; title=&quot;complete-2&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Applying this to the issue at hand we now actually have &lt;strong&gt;three layers&lt;/strong&gt; with quite different structures:&lt;/p&gt;
&lt;h4&gt;Java Model&lt;/h4&gt;
&lt;p&gt;The bottom layer is the Java model that implements the &lt;strong&gt;containment tree&lt;/strong&gt; of Jave elements: A project contains source folders, containing packages, containing compilation units, containing types containing members. In this model each Java type is represented by an instance of &lt;code&gt;IType&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Java Type Hierarchy&lt;/h4&gt;
&lt;p&gt;This engine from the JDT maintains the graph of inheritance information as a second way for navigating between &lt;code&gt;IType&lt;/code&gt;s. Interestingly, this module pretty closely simulates what Object Teams does natively, I may come back to that in a later post.&lt;/p&gt;
&lt;h4&gt;Object Teams Type Hierarchy&lt;/h4&gt;
&lt;p&gt;As an extension of Java, OT/J naturally supports the normal inheritance using &lt;code&gt;extends&lt;/code&gt;, but there is a second way how an inheritance link can be established: based on inheritance of the enclosing team:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;otj&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;team&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; EcoSystem &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; Project &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; IDEProject &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extends&lt;/span&gt; Project &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;team&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; Eclipse &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extends&lt;/span&gt; EcoSystem &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
   @Override
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; Project &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
   @Override
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; IDEProject &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extends&lt;/span&gt; Project &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here, &lt;code&gt;Eclipse.Project&lt;/code&gt; is an &lt;strong&gt;implicit subclass&lt;/strong&gt; of &lt;code&gt;EcoSystem.Project&lt;/code&gt; simply because &lt;code&gt;Eclipse&lt;/code&gt; is a subclass of &lt;code&gt;EcoSystem&lt;/code&gt; and both classes have the same simple name &lt;code&gt;Project&lt;/code&gt;. I will not go into motivation and consequences of this language design (that’ll be a separate post — which I actually promised many weeks ago).&lt;/p&gt;
&lt;p&gt;Looking at the technical challenge we see that the implicit inheritance in OT/J adds a third layer, in which classes are connected in yet another graph. &lt;/p&gt;
&lt;h3&gt;Three Layers — Three Graphs&lt;/h3&gt;
&lt;p&gt;Looking at the &lt;code&gt;IType&lt;/code&gt; representation of &lt;code&gt;Eclipse.IDEProject&lt;/code&gt; we can ask three questions:&lt;/p&gt;
&lt;table style=&quot;margin-bottom: 5px; background-color: #f4f4f4;&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt;What is your containing element?&lt;/td&gt;
&lt;td&gt;&lt;code&gt;type.getParent()&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f7e8e8;&quot;&gt;&lt;code&gt;Eclipse&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What is your superclass?&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hierarchy.getSuperclass(type)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Eclipse.Project&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f7e8e8;&quot;&gt;What is your implicit superclass?&lt;/td&gt;
&lt;td&gt;&lt;em&gt;??&lt;/em&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f7e8e8;&quot;&gt;&lt;code&gt;EcoSystem.Project&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Each question is implemented in a different layer of the system. Things get a little complicated when asking a type for &lt;em&gt;all its super types&lt;/em&gt;, which requires to collect the answers from both the JDT hierarchy layer and the OT hierarchy. Yet, the most tricky part was giving an implementation for &lt;code&gt;getSuperclass()&lt;/code&gt;. &lt;/p&gt;
&lt;h3&gt;An &quot;Impossible&quot; Requirement&lt;/h3&gt;
&lt;p&gt;There is a &lt;strong&gt;hidden assumption&lt;/strong&gt; behind method &lt;code&gt;getSuperclass()&lt;/code&gt; which is pervasive in large parts of the implementation, especially most refactorings: &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When searching all methods that a type inherits from other types, looping over &lt;code&gt;getSuperclass()&lt;/code&gt; until you reach &lt;code&gt;Object&lt;/code&gt; will bring you to all the classes you need to consider, like so:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;otj&quot; style=&quot;font-family: monospace;&quot;&gt;IType currentType &lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3F5FBF; font-style: italic;&quot;&gt;/* some init */&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;currentType &lt;span style=&quot;color: #000000;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
   findMethods&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;currentType, &lt;span style=&quot;color: #3F5FBF; font-style: italic;&quot;&gt;/*some more arguments*/&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
   currentType &lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt; hierarchy.&lt;span style=&quot;color: #000000;&quot;&gt;getSuperclass&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;currentType&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;/blockquote&gt;
&lt;p&gt;There are lots and lots of places implemented using this pattern. But, how do you do that if a class has multiple superclasses?? I cannot change &lt;em&gt;all the existing code&lt;/em&gt; to use recursive functions rather than this single loop! &lt;/p&gt;
&lt;p&gt;Looking at &lt;code&gt;Eclipse.IDEProject&lt;/code&gt; we have two direct superclasses: &lt;code&gt;Eclipse.Project&lt;/code&gt; (normal inheritance, “extends”) and &lt;code&gt;EcoSystem.IDEProject&lt;/code&gt; (OT/J implicit inheritance), which cannot both be answered by a single call to &lt;code&gt;getSuperclass()&lt;/code&gt;. The programming language theory behind OT/J, however, has a simple answer: &lt;strong&gt;linearization&lt;/strong&gt;. Thus, the superclasses of &lt;code&gt;Eclipse.IDEProject&lt;/code&gt; are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Eclipse.IDEProject → EcoSystem.IDEProject → Eclipse.Project → EcoSystem.Project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;… in this order&lt;/strong&gt;. And this is how this shall be rendered in the hierarchy view:&lt;br /&gt;
&lt;a href=&quot;http://blog.objectteams.org/wp-uploads/2010/08/othierarchy.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-57&quot; height=&quot;228&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/08/othierarchy.png&quot; title=&quot;othierarchy&quot; width=&quot;361&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The final callenge: what should this query answer:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;otj&quot; style=&quot;font-family: monospace;&quot;&gt;        getSuperclass&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;ecoSystemIDEProject&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;According to the above linearization we should answer: &lt;code&gt;Eclipse.Project&lt;/code&gt;, &lt;strong&gt;but only&lt;/strong&gt; if we are in the &lt;strong&gt;context&lt;/strong&gt; of the superclass chain of &lt;code&gt;Eclipse.IDEProject&lt;/code&gt;. Talking directly to &lt;code&gt;EcoSystem.IDEProject&lt;/code&gt; we should get &lt;code&gt;EcoSystem.Project&lt;/code&gt;! In other words: the function needs to be smarter than what it can derive from its arguments.&lt;/p&gt;
&lt;h3&gt;Layer Instances for each Situation&lt;/h3&gt;
&lt;p&gt;Let’s go back to the layer thing:&lt;br /&gt;
&lt;a href=&quot;http://blog.objectteams.org/wp-uploads/2010/08/hierarchy-over-structure2.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-54&quot; height=&quot;450&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/08/hierarchy-over-structure2.png&quot; title=&quot;Structural layer and Inheritance layer&quot; width=&quot;450&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
At the bottom you see the Java model (as rendered by the package explorer). In the top layer you see the OT/J type hierarchy (lets forget about the middle layer for now). Two essential concepts can be illustrated by this picture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each layer is populated with objects and while each layer owns its objects, those objects connected with a red line between layers are &lt;em&gt;almost the same&lt;/em&gt;, they represent the same concept.&lt;/li&gt;
&lt;li&gt;The top layer can be instantiated multiple times: for each focus type you create a new OT/J hierarchy instance, populated with a fresh set of objects.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is the second bullet that resolves the “impossible” requirement: the objects within each layer instance are wired differently, implementing different traversals. Depending on the focus type, each layer may answer the &lt;code&gt;getSuperclass(type)&lt;/code&gt; question differently, even for the same argument.&lt;/p&gt;
&lt;p&gt;The first bullet answers how these layers are integrated into a system: Conceptually we are speaking about the same Java model elements (&lt;code&gt;IType&lt;/code&gt;), but we &lt;strong&gt;superimpose different graph structure&lt;/strong&gt; depending on our current &lt;strong&gt;context&lt;/strong&gt;.&lt;/p&gt;
&lt;div style=&quot;margin: 15px; margin-bottom: 5px; text-align: center; background-color: #def4fe; border: 2px solid #c4c295; padding: 5px;&quot;&gt;All layers basically talk about the same objects,&lt;br /&gt;
but in each layer these objects are connected in a specific way as suites for the task at hand.
&lt;/div&gt;
&lt;p&gt; Inside the hierarchy layer, we actually do not handle &lt;code&gt;IType&lt;/code&gt; instances directly, but we have &lt;img src=&quot;http://blog.objectteams.org/wp-uploads/2010/07/role_obj.png&quot; /&gt;&lt;strong&gt;roles&lt;/strong&gt; that represent one given &lt;code&gt;IType&lt;/code&gt; each. Those roles contain all the inheritance links needed for answering the various questions about inheritance relations (direct/indirect, explicit/implicit, super/sub). &lt;/p&gt;
&lt;p&gt;A cool thing about Object Teams is, that having different sets of objects in different layers (&lt;img alt=&quot;Team&quot; class=&quot;alignnone size-full wp-image-51&quot; height=&quot;16&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/07/team_obj.gif&quot; title=&quot;team_obj&quot; width=&quot;16&quot; /&gt; &lt;strong&gt;teams&lt;/strong&gt;) doesn’t make the program more complex, because I can pass an object from one layer into methods of another layer and the language will quite &lt;strong&gt;automagically translate&lt;/strong&gt; into the object that sits at the other end of that red line in the picture above. Although each layer has its own view, they “know” that they are basically talking about the same stuff (sounds like real life, doesn’t it?).&lt;/p&gt;
&lt;h2&gt;Summing up&lt;/h2&gt;
&lt;p&gt;OK, I haven’t shown any code of the new hierarchy implementation (yet), but here’s a sketch of before-vs.-after:&lt;/p&gt;
&lt;dl style=&quot;margin-bottom: 7px;&quot;&gt;
&lt;dt&gt;&lt;strong style=&quot;color: #3b1f9f;&quot;&gt;Code Size&lt;/strong&gt;&lt;/dt&gt;
&lt;dd style=&quot;margin-left: 10px;&quot;&gt;The new implementation of the hierarchy engine has about &lt;strong&gt;half the size&lt;/strong&gt; of the previous implementation (because it need not repeat anything that’s already implemented in the Java hierarchy).&lt;/dd&gt;
&lt;dt&gt;&lt;strong style=&quot;color: #3b1f9f;&quot;&gt;Integration&lt;/strong&gt;&lt;/dt&gt;
&lt;dd style=&quot;margin-left: 10px;&quot;&gt;The previous implementation had to be individually integrated into each client module that normally uses Java hierarchies and then should use an OT hierarchy instead. After the re-implementation, the OT hierarchy is &lt;strong&gt;transparently integrated&lt;/strong&gt; such that no clients need to be adapted (accounting for even more code that could be discarded).&lt;/dd&gt;
&lt;dt&gt;&lt;strong style=&quot;color: #3b1f9f;&quot;&gt;Linearization&lt;/strong&gt;&lt;/dt&gt;
&lt;dd style=&quot;margin-left: 10px;&quot;&gt;Using the new implementation, &lt;code&gt;getSuperclass()&lt;/code&gt; &lt;strong&gt;answers&lt;/strong&gt; the &lt;strong&gt;correct&lt;/strong&gt;, context sensitive linearization, as shown in the screenshot above, which the old implementation failed to solve.&lt;/dd&gt;
&lt;dt&gt;&lt;strong style=&quot;color: #3b1f9f;&quot;&gt;Region based hierarchies&lt;/strong&gt;&lt;/dt&gt;
&lt;dd style=&quot;margin-left: 10px;&quot;&gt;The old implementation was incompatible with building a hierarchy for a &lt;em&gt;region&lt;/em&gt;. For the new implementation it doesn’t matter whether it’s built for a single focus type or for a region, so, many &lt;strong&gt;clients now work better without any additional efforts&lt;/strong&gt;.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;The previous implementation only scratched at the surface – literally worked around the actual issue (&lt;em&gt;which is: the Java type hierarchy is not aware of OT/J implicit inheritance&lt;/em&gt;). The new solution &lt;strong&gt;solves the issue right at its core&lt;/strong&gt;: the new team &lt;code&gt;OTTypeHierarchies&lt;/code&gt; assists the original type hierarchy (&lt;em&gt;such that its answers indeed respect OT/J’s implicit inheritance&lt;/em&gt;). By performing this adaptation at the issue’s core, the solution automatically radiates to all clients. So I expect that investing a few days in re-writing the implementation will pay off in no time. Especially, improving the (already strong) refactoring support for OT/J is now much, much easier.&lt;/p&gt;
&lt;div style=&quot;margin: 15px; margin-bottom: 10px; text-align: left; background-color: #def4fe; border: 2px solid #c4c295; padding: 5px;&quot;&gt;&lt;strong&gt;Lessons learned:&lt;/strong&gt; when your understanding of a problem improves, you’ll be able to discard your old workarounds and move the solution closer to the core. This reduces code size, makes the solution more consistent, enables you to solve issues you previously weren’t able to solve, and transparently provides the solution to a wider range of client modules.&lt;br /&gt;
Moving your solution into the core &lt;em&gt;could&lt;/em&gt; easily result in a design were a few bloated and tangled core modules do &lt;em&gt;all&lt;/em&gt; the work, mocking the very idea of modularity. This can be avoided by a technology that is based on some concept of perspectives and self-contained layers, as supported by teams in OT/J.
&lt;/div&gt;
&lt;p&gt;Need I say, how much fun this re-write was? &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://blog.objectteams.org/wp-includes/images/smilies/icon_smile.gif&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 18 Aug 2010 21:52:25 +0000</pubDate>
</item>
<item>
	<title>Hiroki Kondo (kompiro): Run customized process to notify JUnit results</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5228580140566195617.post-5257331714335159180</guid>
	<link>http://flymewiththeeclipseway.blogspot.com/2010/08/run-customized-process-to-notify-junit.html</link>
	<description>I made a plugin to run customized process to notify JUnit results. Before &lt;a href=&quot;http://flymewiththeeclipseway.blogspot.com/2010/05/notify-junit-results-to-growl-eclipse.html&quot;&gt;I introduced to notify JUnit results to Grows Eclipse Plugin before&lt;/a&gt;Then Ketan's comment, &quot;+1    for a custom command line preference this would be useful to people on other operating system&quot;. I agreed with him.So I made a plugin.If you'd like to install the plugin, &lt;a href=&quot;http://kompiro.org/download/junit.extensions.eclipse.quick.process_0.1.0.201008160012.jar&quot;&gt;could you please download jar file&lt;/a&gt; and copy to your dropins folder in your Eclipse.Default setting is to run growlnotify.If you want to customize that process, please open preference page and choose &quot;Java-&amp;gt;JUnit-&amp;gt;Process Notification&quot; like below.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_hTf_YhoVHDo/TGvsAIhjmrI/AAAAAAAAAKU/tYihAuLMZ4E/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-08-18+23.15.00%EF%BC%89.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;277&quot; src=&quot;http://2.bp.blogspot.com/_hTf_YhoVHDo/TGvsAIhjmrI/AAAAAAAAAKU/tYihAuLMZ4E/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-08-18+23.15.00%EF%BC%89.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If I use this plugin on Ubuntu linux 10.4, this plugin integrated with NotifyOSD.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://f.hatena.ne.jp/images/fotolife/k/kompiro/20100816/20100816064132.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;95&quot; src=&quot;http://f.hatena.ne.jp/images/fotolife/k/kompiro/20100816/20100816064132.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The process setting is like below.&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Osaka, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style=&quot;border-bottom-color: rgb(215, 215, 215); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(215, 215, 215); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(215, 215, 215); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(215, 215, 215); border-top-style: solid; border-top-width: 1px; font-size: 11px; margin-bottom: 1em; margin-left: 1.75em; margin-right: 1.75em; margin-top: 1em; padding-bottom: 0.25em; padding-left: 0.25em; padding-right: 0.25em; padding-top: 0.25em;&quot;&gt;/usr/bin/notify-send -i /home/kompiro/&amp;gt;eclipse/icon.xpm ${summary} ${detail}&lt;/pre&gt;&lt;br /&gt;If I use this plugin on Windows, this plugin integrated with &lt;a href=&quot;http://sourceforge.net/projects/snarlwin/files/Snarl/Current%20Release/&quot;&gt;Snarl&lt;/a&gt; and &lt;a href=&quot;http://sourceforge.net/projects/mozillasnarls/files/Snarl_CMD/&quot;&gt;Snarl_CMD&lt;/a&gt;.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://f.hatena.ne.jp/images/fotolife/k/kompiro/20100817/20100817155727.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://f.hatena.ne.jp/images/fotolife/k/kompiro/20100817/20100817155727.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;The process setting is like below.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Osaka, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style=&quot;border-bottom-color: rgb(215, 215, 215); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(215, 215, 215); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(215, 215, 215); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(215, 215, 215); border-top-style: solid; border-top-width: 1px; font-size: 11px; margin-bottom: 1em; margin-left: 1.75em; margin-right: 1.75em; margin-top: 1em; padding-bottom: 0.25em; padding-left: 0.25em; padding-right: 0.25em; padding-top: 0.25em;&quot;&gt;C:\Snarl_CMD_1.0\Snarl_CMD.exe snShowMessage 2 &quot;${summary}&quot; &quot;${detail}&lt;/pre&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;I think this plugin is not only use for notification. If you'd like to store testing log, you can use shell, script, batch, and so on.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Enjoy your testing!&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5228580140566195617-5257331714335159180?l=flymewiththeeclipseway.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 18 Aug 2010 21:36:31 +0000</pubDate>
	<author>noreply@blogger.com (Hiroki Kondo(kompiro))</author>
</item>
<item>
	<title>Karsten Thoms: Building Xtext projects with Maven Tycho</title>
	<guid isPermaLink="false">http://kthoms.wordpress.com/?p=239</guid>
	<link>http://kthoms.wordpress.com/2010/08/18/building-xtext-projects-with-maven-tycho/</link>
	<description>&lt;p&gt;Last year I showed &lt;a href=&quot;http://kthoms.wordpress.com/2009/07/20/building-tmf-xtext-projects-with-maven/&quot;&gt;how Xtext 0.7.2 projects can be build with Maven&lt;/a&gt;. It requires the installation of all related plugins as Maven artifacts in a Maven2 repository, which is a rather hard and &lt;a href=&quot;http://kthoms.wordpress.com/2009/09/24/xtext-0-7-2-artefacts-installed-to-maven-repository/&quot;&gt;error prone task&lt;/a&gt;. I was asked many times since then whether I would install Xtext 1.0 artifacts or even milestone versions into the &lt;a href=&quot;http://www.openarchitectureware.org/m2/&quot;&gt;openArchitectureWare Maven2 repository&lt;/a&gt;. Although I can really understand this requirement my hope was that I could avoid this and show a way to enable the build with &lt;a href=&quot;http://tycho.sonatype.org/&quot;&gt;Maven Tycho&lt;/a&gt;. Now the time has come that Tycho is mature enough and finally I had the time to do the necessary extension for the &lt;a href=&quot;http://fornax.itemis.de/confluence/display/fornax/OAW-M2-Plugin+%28TOM%29&quot;&gt;Fornax Maven Workflow Plugin&lt;/a&gt; to support the recently added &lt;a href=&quot;http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.tmf/org.eclipse.xtext/plugins/org.eclipse.xtext.doc/help/MWE2.html?root=Modeling_Project&amp;amp;view=co&quot;&gt;MWE2 workflow engine&lt;/a&gt;, which is used from Xtext now as default. Maven Tycho and the Fornax plugin will allow to build Xtext projects in the most natural way possible.&lt;/p&gt;
&lt;p&gt;A basic requirement for software builds is that everything can be build just from the sources. Also it is a good practice that no generated sources are checked in into a source repository. Unfortunately this often does not hold for Xtext projects, since it is a quite hard task to execute the Xtext generator in a build process. Yes, it is possible, but until now users often have to solve it again and again. Search the net, most projects seen there will just check in all the  sources. The Fornax plugin and Maven will standardize this behavior.&lt;/p&gt;
&lt;p&gt;What do you need to enable Xtext DSL builds with Tycho? Not much. Basically a &lt;a href=&quot;http://maven.apache.org/download.html&quot;&gt;Maven 3 installation&lt;/a&gt; (the beta is enough) and access to the internet to access the public repositories. A better idea is to use a repository manager in the intranet (like &lt;a href=&quot;http://nexus.sonatype.org/&quot;&gt;Nexus&lt;/a&gt;) to act as proxy for the public repositories. You will have to add some POMs to your projects. That’s it.&lt;/p&gt;
&lt;p&gt;I’ll show now how to enable the basic project that you get from the Xtext project wizard get build with Maven Tycho.&lt;/p&gt;
&lt;h1&gt;1. Install Maven 3&lt;/h1&gt;
&lt;p&gt;Download &lt;a href=&quot;http://maven.apache.org/download.html&quot;&gt;Maven 3&lt;/a&gt; from Apache, unpack it and put the bin folder on your path. Check the installation by typing ‘&lt;em&gt;mvn –version&lt;/em&gt;‘ in a shell. You should something like this:&lt;/p&gt;
&lt;pre&gt;mvn --version
Apache Maven 3.0-beta-1 (r935667; 2010-04-19 19:00:39+0200)
Java version: 1.6.0_20
Java home: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
Default locale: de_DE, platform encoding: MacRoman
OS name: &quot;mac os x&quot; version: &quot;10.5.8&quot; arch: &quot;x86_64&quot; Family: &quot;mac&quot;&lt;/pre&gt;
&lt;h1&gt;2. Create the Xtext project&lt;/h1&gt;
&lt;p&gt;Select in Eclipse &lt;em&gt;File / New / Project / Xtext Project&lt;/em&gt; and leave all the defaults. The project name should be &lt;em&gt;org.xtext.example.mydsl &lt;/em&gt;for this tutorial. The projects will be created and almost empty for now. The aim is to get everything build by just adding the POMs.&lt;/p&gt;
&lt;h1&gt;3. Adjust plugin manifests&lt;/h1&gt;
&lt;p&gt;With the default Manifests the build does not execute successfully. The build fails because it has problems to resolve the logging infrastructure. It is sufficient to add Import-Package entries to resolve SLF4J and Logback. Open the plugin Manifest of the &lt;em&gt;org.xtext.example.mydsl&lt;/em&gt; project, go to the Dependencies page and add the following Imported Packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ch.qos.logback.classic&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ch.qos.logback.core.joran.spi&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;org.slf4j&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Open the Manifest of &lt;em&gt;org.xtext.example.mydsl.generator&lt;/em&gt;, add the same packages and additionally&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;org.apache.commons.logging&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://kthoms.files.wordpress.com/2010/08/bild-87.png&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://kthoms.files.wordpress.com/2010/08/bild-871.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-242&quot; height=&quot;377&quot; src=&quot;http://kthoms.files.wordpress.com/2010/08/bild-871.png?w=722&amp;amp;h=377&quot; title=&quot;Dependencies&quot; width=&quot;722&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;4. Add POM files&lt;/h1&gt;
&lt;p&gt;Each project will get a POM file. A Parent POM will contain the common settings and will act as a reactor POM also. Normally the Parent POM is placed in the directory above the modules, or here the plugin projects. This would be the workspace root. In this example we will place the Parent POM in the DSL grammar project. To make builds easier this POM will have the default name &lt;em&gt;pom.xml&lt;/em&gt;. On the other side we have to add also a POM for the grammar project itself. Since it will be in the same directory we have to find another name, and we will call it &lt;em&gt;pom-grammar.xml&lt;/em&gt;. For the other projects (.generator and .ui) we will stay with pom.xml.&lt;/p&gt;
&lt;h2&gt;4.1 org.xtext.example.mydsl/pom.xml&lt;/h2&gt;
&lt;p&gt;The Parent POM configures the Tycho plugins and aggregates the grammar project, UI project and the generator. Also the required repositories are configured here. Note that the folder “src” is added as resource path, this will add this folder to the classpath. The workflow execution would fail if the workflow module cannot be found on the classpath.&lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;
	&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
	&amp;lt;groupId&amp;gt;p2.osgi.bundle&amp;lt;/groupId&amp;gt;
	&amp;lt;artifactId&amp;gt;org.xtext.example.mydsl.parent&amp;lt;/artifactId&amp;gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
	&amp;lt;packaging&amp;gt;pom&amp;lt;/packaging&amp;gt;
	&amp;lt;name&amp;gt;org.xtext.example.mydsl.MyDsl - Parent&amp;lt;/name&amp;gt;

	&amp;lt;properties&amp;gt;
		&amp;lt;version.tycho&amp;gt;0.9.0&amp;lt;/version.tycho&amp;gt;
	&amp;lt;/properties&amp;gt;

	&amp;lt;modules&amp;gt;
		&amp;lt;module&amp;gt;./pom-grammar.xml&amp;lt;/module&amp;gt;
		&amp;lt;module&amp;gt;../org.xtext.example.mydsl.ui&amp;lt;/module&amp;gt;
		&amp;lt;module&amp;gt;../org.xtext.example.mydsl.generator&amp;lt;/module&amp;gt;
	&amp;lt;/modules&amp;gt;
	&amp;lt;build&amp;gt;
		&amp;lt;!-- The src directory must be named as resource dir to put it on the build classpath. This is required to resolve the
			workflow module named in the .mwe2 file --&amp;gt;
		&amp;lt;resources&amp;gt;
			&amp;lt;resource&amp;gt;&amp;lt;directory&amp;gt;src&amp;lt;/directory&amp;gt;&amp;lt;/resource&amp;gt;
		&amp;lt;/resources&amp;gt;
		&amp;lt;plugins&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;groupId&amp;gt;org.sonatype.tycho&amp;lt;/groupId&amp;gt;
				&amp;lt;artifactId&amp;gt;tycho-maven-plugin&amp;lt;/artifactId&amp;gt;
				&amp;lt;version&amp;gt;${version.tycho}&amp;lt;/version&amp;gt;
				&amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;
			&amp;lt;/plugin&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;groupId&amp;gt;org.sonatype.tycho&amp;lt;/groupId&amp;gt;
				&amp;lt;artifactId&amp;gt;target-platform-configuration&amp;lt;/artifactId&amp;gt;
				&amp;lt;version&amp;gt;${version.tycho}&amp;lt;/version&amp;gt;
				&amp;lt;configuration&amp;gt;
					&amp;lt;resolver&amp;gt;p2&amp;lt;/resolver&amp;gt;
				&amp;lt;/configuration&amp;gt;
			&amp;lt;/plugin&amp;gt;
		&amp;lt;/plugins&amp;gt;
		&amp;lt;pluginManagement&amp;gt;
			&amp;lt;plugins&amp;gt;
				&amp;lt;plugin&amp;gt;
					&amp;lt;groupId&amp;gt;org.fornax.toolsupport&amp;lt;/groupId&amp;gt;
					&amp;lt;artifactId&amp;gt;fornax-oaw-m2-plugin&amp;lt;/artifactId&amp;gt;
					&amp;lt;version&amp;gt;3.1.0-SNAPSHOT&amp;lt;/version&amp;gt;
					&amp;lt;configuration&amp;gt;
						&amp;lt;workflowEngine&amp;gt;mwe2&amp;lt;/workflowEngine&amp;gt;
					&amp;lt;/configuration&amp;gt;
					&amp;lt;executions&amp;gt;
						&amp;lt;execution&amp;gt;
							&amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;
							&amp;lt;goals&amp;gt;
								&amp;lt;goal&amp;gt;run-workflow&amp;lt;/goal&amp;gt;
							&amp;lt;/goals&amp;gt;
						&amp;lt;/execution&amp;gt;
					&amp;lt;/executions&amp;gt;
				&amp;lt;/plugin&amp;gt;
			&amp;lt;/plugins&amp;gt;
		&amp;lt;/pluginManagement&amp;gt;
	&amp;lt;/build&amp;gt;
	&amp;lt;repositories&amp;gt;
		&amp;lt;repository&amp;gt;
			&amp;lt;id&amp;gt;p2.eclipse.helios&amp;lt;/id&amp;gt;
			&amp;lt;url&amp;gt;http://download.eclipse.org/releases/helios&amp;lt;/url&amp;gt;
			&amp;lt;layout&amp;gt;p2&amp;lt;/layout&amp;gt;
		&amp;lt;/repository&amp;gt;
	&amp;lt;/repositories&amp;gt;
	&amp;lt;pluginRepositories&amp;gt;
		&amp;lt;!-- At the moment the Fornax plugin is only available as snapshot --&amp;gt;
		&amp;lt;pluginRepository&amp;gt;
			&amp;lt;id&amp;gt;fornax-snapshots&amp;lt;/id&amp;gt;
			&amp;lt;url&amp;gt;http://www.fornax-platform.org/archiva/repository/snapshots/&amp;lt;/url&amp;gt;
			&amp;lt;releases&amp;gt;
				&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;
			&amp;lt;/releases&amp;gt;
			&amp;lt;snapshots&amp;gt;
				&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;
			&amp;lt;/snapshots&amp;gt;
		&amp;lt;/pluginRepository&amp;gt;
	&amp;lt;/pluginRepositories&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;h2&gt;org.xtext.example.mydsl/pom-grammar.xml&lt;/h2&gt;
&lt;p&gt;The build of the grammar project needs to execute the workflow &lt;em&gt;src/org/xtext/example/mydsl/GenerateMyDsl.mwe2&lt;/em&gt;. All other settings are already managed by the parent.&lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;
	&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
	&amp;lt;parent&amp;gt;
		&amp;lt;groupId&amp;gt;p2.osgi.bundle&amp;lt;/groupId&amp;gt;
		&amp;lt;artifactId&amp;gt;org.xtext.example.mydsl.parent&amp;lt;/artifactId&amp;gt;
		&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
		&amp;lt;relativePath&amp;gt;../org.xtext.example.mydsl/pom.xml&amp;lt;/relativePath&amp;gt;
	&amp;lt;/parent&amp;gt;
	&amp;lt;artifactId&amp;gt;org.xtext.example.mydsl&amp;lt;/artifactId&amp;gt;
	&amp;lt;packaging&amp;gt;eclipse-plugin&amp;lt;/packaging&amp;gt;
	&amp;lt;name&amp;gt;org.xtext.example.mydsl.MyDsl - Grammar&amp;lt;/name&amp;gt;

	&amp;lt;build&amp;gt;
		&amp;lt;plugins&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;groupId&amp;gt;org.fornax.toolsupport&amp;lt;/groupId&amp;gt;
				&amp;lt;artifactId&amp;gt;fornax-oaw-m2-plugin&amp;lt;/artifactId&amp;gt;
				&amp;lt;configuration&amp;gt;
					&amp;lt;workflowDescriptor&amp;gt;src/org/xtext/example/mydsl/GenerateMyDsl.mwe2&amp;lt;/workflowDescriptor&amp;gt;
				&amp;lt;/configuration&amp;gt;
			&amp;lt;/plugin&amp;gt;
		&amp;lt;/plugins&amp;gt;
	&amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;h2&gt;org.xtext.example.mydsl.ui/pom.xml&lt;/h2&gt;
&lt;p&gt;The build configuration of the UI plugin is even easier. Only the reference to the parent and the minimum project coordinates need to be configured.&lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;
	&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
	&amp;lt;parent&amp;gt;
		&amp;lt;groupId&amp;gt;p2.osgi.bundle&amp;lt;/groupId&amp;gt;
		&amp;lt;artifactId&amp;gt;org.xtext.example.mydsl.parent&amp;lt;/artifactId&amp;gt;
		&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
		&amp;lt;relativePath&amp;gt;../org.xtext.example.mydsl/pom.xml&amp;lt;/relativePath&amp;gt;
	&amp;lt;/parent&amp;gt;
	&amp;lt;artifactId&amp;gt;org.xtext.example.mydsl.ui&amp;lt;/artifactId&amp;gt;
	&amp;lt;packaging&amp;gt;eclipse-plugin&amp;lt;/packaging&amp;gt;
	&amp;lt;name&amp;gt;org.xtext.example.mydsl.MyDsl - UI&amp;lt;/name&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;h2&gt;org.xtext.example.mydsl.generator/pom.xml&lt;/h2&gt;
&lt;p&gt;The generator plugin must execute its workflow. Note that the &lt;em&gt;src&lt;/em&gt; directory and the compile directory of the grammar project are set as resource directory.&lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;
	&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
	&amp;lt;parent&amp;gt;
		&amp;lt;groupId&amp;gt;p2.osgi.bundle&amp;lt;/groupId&amp;gt;
		&amp;lt;artifactId&amp;gt;org.xtext.example.mydsl.parent&amp;lt;/artifactId&amp;gt;
		&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
		&amp;lt;relativePath&amp;gt;../org.xtext.example.mydsl/pom.xml&amp;lt;/relativePath&amp;gt;
	&amp;lt;/parent&amp;gt;
	&amp;lt;artifactId&amp;gt;org.xtext.example.mydsl.generator&amp;lt;/artifactId&amp;gt;
	&amp;lt;packaging&amp;gt;eclipse-plugin&amp;lt;/packaging&amp;gt;
	&amp;lt;name&amp;gt;org.xtext.example.mydsl.MyDsl - Generator&amp;lt;/name&amp;gt;

	&amp;lt;build&amp;gt;
		&amp;lt;resources&amp;gt;
			&amp;lt;resource&amp;gt;&amp;lt;directory&amp;gt;src&amp;lt;/directory&amp;gt;&amp;lt;/resource&amp;gt;
			&amp;lt;!-- Add the grammar classes to the classpath --&amp;gt;
			&amp;lt;resource&amp;gt;&amp;lt;directory&amp;gt;../org.xtext.example.mydsl/target/classes&amp;lt;/directory&amp;gt;&amp;lt;/resource&amp;gt;
		&amp;lt;/resources&amp;gt;
		&amp;lt;plugins&amp;gt;
			&amp;lt;plugin&amp;gt;
				&amp;lt;groupId&amp;gt;org.fornax.toolsupport&amp;lt;/groupId&amp;gt;
				&amp;lt;artifactId&amp;gt;fornax-oaw-m2-plugin&amp;lt;/artifactId&amp;gt;
				&amp;lt;configuration&amp;gt;
					&amp;lt;workflowEngine&amp;gt;mwe2&amp;lt;/workflowEngine&amp;gt;
					&amp;lt;workflowDescriptor&amp;gt;src/workflow/MyDslGenerator.mwe2&amp;lt;/workflowDescriptor&amp;gt;
				&amp;lt;/configuration&amp;gt;
			&amp;lt;/plugin&amp;gt;
		&amp;lt;/plugins&amp;gt;
	&amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;h1&gt;5. Execute the build&lt;/h1&gt;
&lt;p&gt;Now the build should be executable. Run ‘&lt;em&gt;mvn clean install&lt;/em&gt;‘ in the root of the &lt;em&gt;org.xtext.example.mydsl&lt;/em&gt; project. Here is an excerpt of the console log you should get. The complete log can be viewed &lt;a href=&quot;http://dl.dropbox.com/u/662339/Blogs/XtextTychoExample-ConsoleLog.txt&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;mvn install
[INFO] Scanning for projects...
[WARNING] No explicit target runtime environment configuration. Build is platform dependent.
[INFO] Resolving target platform for project MavenProject: p2.osgi.bundle:org.xtext.example.mydsl:1.0.0 @ /Users/thoms/temp/tycho/trunk/trunk/org.xtext.example.mydsl/pom-grammar.xml
log4j:WARN No appenders could be found for logger (org.apache.commons.httpclient.HttpClient).
log4j:WARN Please initialize the log4j system properly.
[INFO] Adding repository http://download.eclipse.org/releases/helios
[INFO] Adding repository http://download.eclipse.org/releases/helios
[WARNING] No explicit target runtime environment configuration. Build is platform dependent.
[INFO] Resolving target platform for project MavenProject: p2.osgi.bundle:org.xtext.example.mydsl.ui:1.0.0 @ /Users/thoms/temp/tycho/trunk/trunk/org.xtext.example.mydsl.ui/pom.xml
[INFO] Adding repository (cached) http://download.eclipse.org/releases/helios
[WARNING] No explicit target runtime environment configuration. Build is platform dependent.
[INFO] Resolving target platform for project MavenProject: p2.osgi.bundle:org.xtext.example.mydsl.generator:1.0.0 @ /Users/thoms/temp/tycho/trunk/trunk/org.xtext.example.mydsl.generator/pom.xml
[INFO] Adding repository (cached) http://download.eclipse.org/releases/helios
[WARNING] No explicit target runtime environment configuration. Build is platform dependent.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] org.xtext.example.mydsl.MyDsl - Parent
[INFO] org.xtext.example.mydsl.MyDsl - Grammar
[INFO] org.xtext.example.mydsl.MyDsl - UI
[INFO] org.xtext.example.mydsl.MyDsl - Generator
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building org.xtext.example.mydsl.MyDsl - Parent 1.0.0
[INFO] ------------------------------------------------------------------------
....
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] org.xtext.example.mydsl.MyDsl - Parent ............ SUCCESS [0.681s]
[INFO] org.xtext.example.mydsl.MyDsl - Grammar ........... SUCCESS [26.418s]
[INFO] org.xtext.example.mydsl.MyDsl - UI ................ SUCCESS [3.103s]
[INFO] org.xtext.example.mydsl.MyDsl - Generator ......... SUCCESS [10.844s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS&lt;/pre&gt;
&lt;h1&gt;5. Miscalleneous&lt;/h1&gt;
&lt;h2&gt;5.1 ANTLR 3 download&lt;/h2&gt;
&lt;p&gt;Xtext relies on ANTLR 3, which cannot be hosted at Eclipse.org due to incompatible licenses. Therefore Xtext has introduced an automatic download (FYI: This behavior is implemented in AntlrToolFacade) that you have to confirm once:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;*ATTENTION*&lt;br /&gt;
It is recommended to use the ANTLR 3 parser generator (BSD licence - http://www.antlr.org/license.html).&lt;br /&gt;
Do you agree to download it (size 1MB) from 'http://download.itemis.com/antlr-generator-3.0.1.jar'? (type 'y' or 'n' and hit enter)&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now an automatic build is not so responsive to questions like these. &lt;strong&gt;The plugin will confirm this download automatically.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;5.2 Workflow execution problems&lt;/h2&gt;
&lt;p&gt;If the Maven plugin does not execute the MWE2 workflow properly it is not so responsive at the moment to name the root cause. But when running the Maven command with “-X” it will output the full Java command including classpath to the console. Copy the full command and try to execute it from the same directory. This might help to detect the problem you have.&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/bin/java -classpath /Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.xpand/1.0.0.v201006150611/org.eclipse.xpand-1.0.0.v201006150611.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.xtend/1.0.0.v201006150611/org.eclipse.xtend-1.0.0.v201006150611.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.emf.mwe.core/1.0.0.v201006150535/org.eclipse.emf.mwe.core-1.0.0.v201006150535.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.emf.ecore/2.6.0.v20100614-1136/org.eclipse.emf.ecore-2.6.0.v20100614-1136.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.emf.common/2.6.0.v20100614-1136/org.eclipse.emf.common-2.6.0.v20100614-1136.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.apache.commons.cli/1.0.0.v20080604-1500/org.apache.commons.cli-1.0.0.v20080604-1500.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.emf.mwe2.runtime/1.0.0.v201006150446/org.eclipse.emf.mwe2.runtime-1.0.0.v201006150446.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/com.ibm.icu/4.2.1.v20100412/com.ibm.icu-4.2.1.v20100412.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.xtext/1.0.0.v201006170321/org.eclipse.xtext-1.0.0.v201006170321.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.emf.ecore.xmi/2.5.0.v20100521-1846/org.eclipse.emf.ecore.xmi-2.5.0.v20100521-1846.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.xtext.util/1.0.0.v201006170321/org.eclipse.xtext.util-1.0.0.v201006170321.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/com.google.collect/0.8.0.v201006170321/com.google.collect-0.8.0.v201006170321.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/com.google.inject/2.0.0.v201003051000/com.google.inject-2.0.0.v201003051000.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.antlr.runtime/3.0.0.v200803061811/org.antlr.runtime-3.0.0.v200803061811.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.emf.mwe.utils/1.0.0.v201006150535/org.eclipse.emf.mwe.utils-1.0.0.v201006150535.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.emf.mwe2.launch/1.0.0.v201006150907/org.eclipse.emf.mwe2.launch-1.0.0.v201006150907.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.emf.mwe2.language/1.0.0.v201006150907/org.eclipse.emf.mwe2.language-1.0.0.v201006150907.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.xtext.common.types/1.0.0.v201006170321/org.eclipse.xtext.common.types-1.0.0.v201006170321.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.eclipse.xtend.typesystem.emf/1.0.0.v201006150611/org.eclipse.xtend.typesystem.emf-1.0.0.v201006150611.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/ch.qos.logback.classic/0.9.19.v20100519-1505/ch.qos.logback.classic-0.9.19.v20100519-1505.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/ch.qos.logback.core/0.9.19.v20100419-1216/ch.qos.logback.core-0.9.19.v20100419-1216.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.apache.commons.logging/1.1.1.v201005080502/org.apache.commons.logging-1.1.1.v201005080502.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.slf4j.api/1.5.11.v20100519-1910/org.slf4j.api-1.5.11.v20100519-1910.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/ch.qos.logback.slf4j/0.9.19.v20100519-1910/ch.qos.logback.slf4j-0.9.19.v20100519-1910.jar:/Users/thoms/.m2/repository/p2/osgi/bundle/org.slf4j.log4j/1.5.11.v20100419-1106/org.slf4j.log4j-1.5.11.v20100419-1106.jar org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher /Users/thoms/Development/workspaces/oaw-v5-test/org.xtext.example.mydsl.generator/src/workflow/MyDslGenerator.mwe2&lt;/pre&gt;
&lt;h2&gt;5.3 Fornax Plugin Snapshot version&lt;/h2&gt;
&lt;p&gt;The Maven plugin org.fornax.toolsupport:fornax-oaw-m2-plugin is not released yet. Yesterday I have added the necessary support for MWE2 and deployed a snapshot version 3.1.0-SNAPSHOT. Some minor issues have to be solved before it will be released.&lt;/p&gt;
&lt;h2&gt;5.4 Missing log output&lt;/h2&gt;
&lt;p&gt;The plugin forks a JVM with help of the &lt;a href=&quot;http://cupi2.uniandes.edu.co/web/manualAnt/manual/api/org/apache/tools/ant/taskdefs/Java.html&quot;&gt;Java ant task type&lt;/a&gt;. At the moment the output from the forked JVM does not get redirected to the Plugin’s log. This is one issue to solve for the Plugin before release. It makes debugging problems a bit harder, but when copying the executed Java command that you get from the debug output and execute yourself you get a better impression of the error.&lt;/p&gt;
&lt;h2&gt;5.5 Download sources&lt;/h2&gt;
&lt;p&gt;For your convenience you can &lt;a href=&quot;http://dl.dropbox.com/u/662339/Blogs/XtextTychoExample.zip&quot;&gt;download the example project here&lt;/a&gt;.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/239/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/239/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/239/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/239/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/239/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/239/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/239/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/239/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/239/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/239/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/239/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/239/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/239/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/239/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&amp;amp;blog=6829080&amp;amp;post=239&amp;amp;subd=kthoms&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 18 Aug 2010 21:19:03 +0000</pubDate>
</item>
<item>
	<title>Paul Trevithick: XDI, Semantic Web and Higgins</title>
	<guid isPermaLink="true">http://www.incontextblog.com/?p=642</guid>
	<link>http://www.incontextblog.com/?p=642</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://www.incontextblog.com/wp-content/uploads/2010/08/xdi-semweb-and-higgins-v5.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-646&quot; height=&quot;584&quot; src=&quot;http://www.incontextblog.com/wp-content/uploads/2010/08/xdi-semweb-and-higgins-v5.png&quot; title=&quot;xdi semweb and higgins x3&quot; width=&quot;554&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I thought I’d start with the diagram above and add the explanatory text later. But for now, as I hope you can see, I’ve been trying to create a visual summary of these three tech stacks and how they implement different necessary capabilities for user-centric personal information sharing. More later…&lt;/p&gt;</description>
	<pubDate>Wed, 18 Aug 2010 19:25:19 +0000</pubDate>
</item>
<item>
	<title>Bob Brodt: LaMiPU (Part 1)</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/bpel/?p=10</guid>
	<link>http://dev.eclipse.org/blogs/bpel/2010/08/18/lamipu/</link>
	<description>&lt;h2&gt;Give me a lever and a place to stand and…oh yeah, maybe some duct-tape&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;When I first saw Intalio’s very excellent &lt;a href=&quot;http://www.intalio.com/finnair&quot;&gt;case study for Finnair&lt;/a&gt; I thought “wow, what a cool idea!” And what a perfect application of SOA technology to solve a very real problem that is forcing a lot of airlines to come up with &lt;a href=&quot;http://www.holidaylettings.co.uk/travel-resources/industry-news/airline-and-transport-news/airlines-raking-in-billions-from-hidden-extras/a-3-145-2433/&quot;&gt;creative ways of cutting costs&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Being a huge fan of &lt;a href=&quot;http://www.urbandictionary.com/define.php?term=Macgyverism&quot;&gt;MacGyverism&lt;/a&gt;, I then thought about how this application could be improved and how I would implement the solution with just a paper clip, a rubber band and &lt;a href=&quot;http://www.autoblog.com/2010/05/13/video-mythbusters-cars-and-duct-tape-what-could-go-wrong&quot;&gt;some duct tape&lt;/a&gt; - on a much smaller scale, of course. The end result should be nothing short of mildly impressive, considering that this project should cost about $20 in hardware (not counting the cost of an old clunker of a PC which had already been end-of-lifed) and $0 in open-source software. This project, affectionately know as “LaMiPU” (&lt;strong&gt;La&lt;/strong&gt;st &lt;strong&gt;Mi&lt;/strong&gt;nute &lt;strong&gt;P&lt;/strong&gt;assenger &lt;strong&gt;U&lt;/strong&gt;pgrade) will be the topic of my next several blog entries.&lt;/p&gt;
&lt;h2 style=&quot;margin-bottom: 0in;&quot;&gt;Backgrounder&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;If you’ve had to fly cross country on a commercial airline lately, you’ve probably noticed that the airplanes are invariably packed to capacity. That’s because in order to remain profitable, airlines must fill all available seats, usually selling the same seat (slightly) more than once at a &lt;a href=&quot;http://www.dailymail.co.uk/news/article-67221/Scandal-overbooked-holiday-flights.html&quot;&gt;ratio as high as 1.5 to 1&lt;/a&gt;. The seats that sell out less quickly and are sometimes left empty are, obviously, the more expensive business class and &lt;strong&gt;really&lt;/strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; more expensive first class seats because, let’s face it, how many of us regular folk can afford to plunk down $3K for a cross-country flight just for the luxury of a little bit of leg room and a &lt;a href=&quot;http://www.youtube.com/watch?v=XnS49c9KZw8&quot;&gt;comfy chair&lt;/a&gt;. Besides, if an airline overbooks the economy seating section and has to “bump” a couple of passengers to a later flight, there are usually plenty of volunteers willing to make the sacrifice and grudgingly accept a free flight voucher and a free stay at the airport’s red carpet room in exchange for arriving at their destination a few hours (or days) later. If they try to pull that stunt on some muckety-muck, the poor customer service personnel will probably have their ears chewed off.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;margin-bottom: 0in;&quot;&gt;Pulling ideas out of Finnair&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;So, as an airline company, how do you avoid flying your airplanes with lots and lots of those really expensive, money making, first class comfy chairs &lt;/span&gt;&lt;strong&gt;empty&lt;/strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; and &lt;/span&gt;&lt;strong&gt;unpaid &lt;/strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;for? Easy: offer them as “upgrades” (for a “small” fee) to your loyal customers enrolled in your frequent flyer programs; after all, making a &lt;/span&gt;&lt;strong&gt;little&lt;/strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; profit on those empty seats is better than making &lt;/span&gt;&lt;strong&gt;no profit&lt;/strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;. And besides, this frees up more of your economy seats for potential overbooking. It’s a win-win!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;The problem with this scheme however, is that you have to be able to pull this off in a very short period of time. First class no-shows will sometimes cancel their trip last minute (and get a partial, if not full refund for their ticket) leaving the airline holding the proverbial bag. The trick is to offer those seats to your loyal customers who you &lt;/span&gt;&lt;strong&gt;know&lt;/strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; will be on the flight because they have already checked in at the ticket counter. This leaves you with a time window of maybe 10-30 minutes to:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;discover 	the fact that one or more of your first class seats are empty&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;figure 	out who has already checked in, and which of those people are 	enrolled in your frequent flyer program&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;contact 	those people one-by-one in order based on seniority in the program 	and offer them the seat upgrade&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;wait 	for each of those people to make up their minds to either accept or 	refuse the upgrade; if they refuse, move on to the next loyal 	customer in the list; if they accept then…&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;pull 	their credit card information on file, and have them verify it while 	you still have their attention&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;wait 	for the loyal customer to fumble around in his/her wallet for the 	credit card&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;make 	the credit card authorization; if accepted send the loyal customer 	verification and somehow make available a new boarding pass in the 	form of printed or electronic media; if the credit authorization is 	denied, then go back to #3, lather, rinse and repeat.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Because this process is serial (each customer has to be contacted sequentially because you may only have one first-class seat to offer) it’s doubtful that this strategy would succeed if it were all being done manually. And &lt;/span&gt;&lt;strong&gt;that&lt;/strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; is what makes the Intalio solution so elegant.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Oh by the way…if I sound a little bitter, it’s not that I’m begrudging the airlines their profits, it’s just that I’ve been the victim of overbooking and have many times found myself the witless volunteer, accepting a later flight and a voucher (which, by the way, I &lt;/span&gt;&lt;strong&gt;still&lt;/strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; haven’t had a chance to cash in on yet &lt;img alt=&quot;:(&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_sad.gif&quot; /&gt; )&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;So now that you have a reasonably good understanding of the nature and complexity of the problem, the next step is to figure out what data resources are already available to be taken advantage of, and which pieces need to be filled in to build a working solution. And that, dear reader, is the topic of my next blog. Stay tuned…&lt;/span&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 18 Aug 2010 18:39:15 +0000</pubDate>
</item>
<item>
	<title>Kaloyan Raev: JPA Diagram Editor first milestone released</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/raev/?p=51</guid>
	<link>http://dev.eclipse.org/blogs/raev/2010/08/18/jpa-diagram-editor-first-milestone-released/</link>
	<description>&lt;p&gt;I am happy to announce that the JPA Diagram Editor project made its first milestone release - 0.5 RC1. Just follow the &lt;a href=&quot;http://wiki.eclipse.org/JPA_Diagram_Editor_Project#How_to_Install&quot;&gt;installation instructions&lt;/a&gt;, posted on the &lt;a href=&quot;http://wiki.eclipse.org/JPA_Diagram_Editor_Project&quot;&gt;project’s wiki&lt;/a&gt;, and you are ready to build your JPA model in a diagram. There is a nice &lt;a href=&quot;http://wiki.eclipse.org/JPA_Diagram_Editor_Project_Tutorial&quot;&gt;Getting Started tutorial&lt;/a&gt; to help your first steps. If you want to take a quick look before installing, then check our &lt;a href=&quot;http://www.youtube.com/watch?v=xZf6pOHX178&quot;&gt;demo&lt;/a&gt; on YouTube.  &lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;An example of a diagram created by the JPA editor&quot; src=&quot;http://wiki.eclipse.org/images/7/77/D1.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The JPA Diagram Editor is a new incubating project in the &lt;a href=&quot;http://eclipse.org/webtools/incubator/&quot;&gt;WTP Incubator&lt;/a&gt;. The project is &lt;a href=&quot;http://wiki.eclipse.org/WTP/JPA_Diagram_Editor/Proposal&quot;&gt;initiated&lt;/a&gt; by SAP and aims to contribute the existing JPA Diagram Editor from the SAP NetWeaver Developer Studio, and continue its future development in the Eclipse community. This contribution is based on the &lt;a href=&quot;http://eclipse.org/graphiti/&quot;&gt;Graphiti&lt;/a&gt; project - the new graphics modeling infrastructure in Eclipse.&lt;/p&gt;
&lt;p&gt;The official 0.5 version of the project will provide a stable release of the initial contribution. Due to the migration to Graphiti, there are some bugs to be cleaned and we are actively working on them. Nevertheless, we decided to release early to hear your feedback sooner. If you eventually find a bug, then please report it in the &lt;a href=&quot;https://bugs.eclipse.org/bugs/enter_bug.cgi?product=WTP%20Incubator&quot;&gt;WTP Incubator Bugzilla&lt;/a&gt; (use component &lt;strong&gt;wtp.inc.jpaeditor&lt;/strong&gt;). You can check the list of &lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;component=wtp.inc.jpaeditor;product=WTP%20Incubator;classification=WebTools&quot;&gt;already reported bugs&lt;/a&gt; if that bug has already been found - we are actively testing at the moment. &lt;/p&gt;
&lt;p&gt;Please, note that currently the JPA Diagram Editor supports only JPA 1.0 projects. This mean that you will not see the “Open Diagram” action in the context menu of JPA 2.0 projects. JPA 2.0 support is definitely on our radar screen. We will start working on it after releasing the stable 0.5 version. &lt;/p&gt;
&lt;p&gt;Any feedback is very welcome. Especially with suggestions how to evolve the project in the future months. We are available on the &lt;a href=&quot;http://www.eclipse.org/forums/index.php?t=thread&amp;amp;frm_id=114&quot;&gt;WTP Incubator Forum&lt;/a&gt; and &lt;a href=&quot;https://dev.eclipse.org/mailman/listinfo/wtp-incubator-dev&quot;&gt;wtp-incubator-dev@eclipse.org&lt;/a&gt; mailing list.&lt;/p&gt;</description>
	<pubDate>Wed, 18 Aug 2010 17:35:25 +0000</pubDate>
</item>
<item>
	<title>Dave Carver: Tip: Enabling JUnit Short Cuts</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1585332946379204379.post-8156742747072635880</guid>
	<link>http://intellectualcramps.blogspot.com/2010/08/tip-enabling-junit-short-cuts.html</link>
	<description>If you are trying to practice Test Driven Development, creating JUnit tests in eclipse can be a real chore at times.   I'm not talking about actually writing the tests, but trying to get easy access to the JUnit wizards.   The short cuts for creating these types of classes is missing by default from the File-&amp;gt;New shortcuts menu when working in the Java Perspective and the Plugin-Development perspective.    To enable these shortcuts, you must customize the perspective and go to the Shortcuts tab in eclipse:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_KrN73FFeGok/TGvzkP-PwoI/AAAAAAAAAak/GmckC9dt_hM/s1600/EnableJunitShortCuts.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5506762773479015042&quot; src=&quot;http://1.bp.blogspot.com/_KrN73FFeGok/TGvzkP-PwoI/AAAAAAAAAak/GmckC9dt_hM/s400/EnableJunitShortCuts.png&quot; style=&quot;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 302px;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By checking the JUnit option under Java, you will now get the JUnit and JUnit Test Suite options added to the File-&amp;gt;New menu.   Thus saving several tedious clicks through the File-&amp;gt;New-&amp;gt;Other-&amp;gt;Java-&amp;gt;Junit wizard.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1585332946379204379-8156742747072635880?l=intellectualcramps.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 18 Aug 2010 17:05:24 +0000</pubDate>
	<author>noreply@blogger.com (David Carver)</author>
</item>
<item>
	<title>Hiroki Kondo (kompiro): Where is DS Annotation?</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5228580140566195617.post-8722558936701084092</guid>
	<link>http://flymewiththeeclipseway.blogspot.com/2010/04/where-is-ds-annotation.html</link>
	<description>I used Declarative Service in my application, JAM Circle.&lt;br /&gt;Declarative Service is cool stuff.&lt;br /&gt;It makes to solve bundles startup order.&lt;br /&gt;But I confused a thing.&lt;br /&gt;How do I inject the service at startup time?&lt;br /&gt;I think services needs to initialize at startup.&lt;br /&gt;So I choosed the way to solve by singleton class like below.&lt;br /&gt;&lt;br /&gt;scr.xml&lt;br /&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;scr:component xmlns:scr=&quot;http://www.osgi.org/xmlns/scr/v1.1.0&quot; name=&quot;org.kompiro.jamcircle.kanban.ui.KanbanUIContext&quot;&amp;gt;&lt;br /&gt;   &amp;lt;implementation class=&quot;org.kompiro.jamcircle.kanban.ui.KanbanUIContext&quot;/&amp;gt;&lt;br /&gt;   &amp;lt;reference bind=&quot;setKanbanService&quot; cardinality=&quot;1..1&quot; interface=&quot;org.kompiro.jamcircle.kanban.service.KanbanService&quot; name=&quot;KanbanService&quot; policy=&quot;static&quot;/&amp;gt;&lt;br /&gt;   &amp;lt;reference bind=&quot;setScriptingService&quot; cardinality=&quot;1..1&quot; interface=&quot;org.kompiro.jamcircle.scripting.ScriptingService&quot; name=&quot;ScriptingService&quot; policy=&quot;static&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/scr:component&amp;gt;&lt;br /&gt;&lt;br /&gt;and implementation of Context class(The name inspired from &quot;ApplicationContext&quot;)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package org.kompiro.jamcircle.kanban.ui;&lt;br /&gt;&lt;br /&gt;import org.kompiro.jamcircle.kanban.service.KanbanService;&lt;br /&gt;import org.kompiro.jamcircle.scripting.ScriptingService;&lt;br /&gt;&lt;br /&gt;public class KanbanUIContext {&lt;br /&gt;&lt;br /&gt;private static KanbanUIContext context;&lt;br /&gt;private KanbanService kanbanService;&lt;br /&gt;private ScriptingService scriptingService;&lt;br /&gt;&lt;br /&gt;public KanbanUIContext() {&lt;br /&gt;KanbanUIContext.context = this;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static KanbanUIContext getDefault(){&lt;br /&gt;return context;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public KanbanService getKanbanService() {&lt;br /&gt;return kanbanService;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setKanbanService(KanbanService kanbanService) {&lt;br /&gt;this.kanbanService = kanbanService;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public ScriptingService getScriptingService() {&lt;br /&gt;return scriptingService;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setScriptingService(ScriptingService scriptService) {&lt;br /&gt;this.scriptingService = scriptService;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It's not good way(T_T)... KanbanUIContext is a singleton class and be used to call ServiceLocator Pattern. It is not easy to test by code...&lt;br /&gt;I haven't know there is no way to inject to use annotation for field injection.&lt;br /&gt;Is there any way to use annotation and field injection?&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5228580140566195617-8722558936701084092?l=flymewiththeeclipseway.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 18 Aug 2010 14:31:52 +0000</pubDate>
	<author>noreply@blogger.com (Hiroki Kondo(kompiro))</author>
</item>
<item>
	<title>Hiroki Kondo (kompiro): JAM Circle 0.8.0 released</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5228580140566195617.post-6978486004741816222</guid>
	<link>http://flymewiththeeclipseway.blogspot.com/2010/04/jam-circle-080-released.html</link>
	<description>Hi all!&lt;br /&gt;&lt;br /&gt;I'm glad to announce to release my RCP application JAM Circle 0.8.0!&lt;br /&gt;Download site&lt;br /&gt;&lt;a href=&quot;https://sourceforge.net/projects/jamcircle/files/&quot;&gt;https://sourceforge.net/projects/jamcircle/files/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Project Page&lt;br /&gt;&lt;a href=&quot;http://kompiro.org/jamcircle/&quot;&gt;http://kompiro.org/jamcircle&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;These are New Feature.&lt;br /&gt; * Migrated p2 base Eclipse platform&lt;br /&gt; * Added some Board customize extension point&lt;br /&gt; * JRuby Scripting Console&lt;br /&gt; * improved figures design&lt;br /&gt; * added Japanese resource&lt;br /&gt; * added Eclipes Plug-in Edition&lt;br /&gt; * fixed some bugs&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5228580140566195617-6978486004741816222?l=flymewiththeeclipseway.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 18 Aug 2010 14:31:46 +0000</pubDate>
	<author>noreply@blogger.com (Hiroki Kondo(kompiro))</author>
</item>
<item>
	<title>Tom Schindl: ESE 2010, e4 and my submissions</title>
	<guid isPermaLink="false">http://tomsondev.bestsolution.at/?p=1887</guid>
	<link>http://tomsondev.bestsolution.at/2010/08/18/ese-2010-e4-and-my-submissions/</link>
	<description>&lt;p&gt;The submission deadline for &lt;a href=&quot;http://www.eclipsecon.org/summiteurope2010/&quot;&gt;ESE 2010&lt;/a&gt; is over and there are many many submission. Let me first of all talk about my submissions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1694&quot;&gt;Adopt the e4 progamming model in Eclipse &amp;gt;= 3.6&lt;/a&gt; &lt;br /&gt;This talk discusses how you can make single sourcing for Eclipse 4.0 and Eclipse 3.6 happen without the use of backwards compat layer coming with Eclipse 4.0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1695&quot;&gt;Can developers adopt e4-RCP for Swing Applications?&lt;/a&gt;&lt;br /&gt;This talk discusses how Eclipse Application Platform 4.0 can be used with other UI-Technologies (e.g. Swing)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1785&quot;&gt;The way to Eclipse 4.0 and 4.1&lt;/a&gt;&lt;br /&gt;In this talk Boris Bokowski and myself will you provide a summary of the last 2 years of on going development of Eclipse 4. Things we achieved, things we failed, things we work on for Eclipse 4.1.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1892&quot;&gt;Eclipse 4.0 Hackfest&lt;/a&gt;&lt;br /&gt;If you want to discuss Eclipse 4 with others and some of the committers on the project. I think this is the right thing for you.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beside that I’m really amazed by the number of talks who are filed under the &lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/search.php?search=category+~+%27e4%27&quot;&gt;Eclipse 4.0 category&lt;/a&gt;. What I like most is that the submission are not only from Eclipse 4.0 committers (of course many of them are) but also from early adopters (like &lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1899&quot;&gt;The thrill of migrating a mission-critical RCP-application to E4: lessons learned from Jürgen Baier&lt;/a&gt;) and framework developers like &lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1779&quot;&gt;Christian Campo – Riena on e4 aka “RCP 2.0″&lt;/a&gt; and  &lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1802&quot;&gt;Matthias Zimmermann &amp;amp; Andreas Hoegger – Eclipse Scout “Querbeet”&lt;/a&gt;, tooling provides like  &lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1752&quot;&gt;Stephane Begaudeau &amp;amp; Jonathan Musset – Acceleo Code Generator, an experimental transition to e4&lt;/a&gt; to people who apply Eclipse 4.0 technologies in none UI-Environments like &lt;a href=&quot;https://www.eclipsecon.org/submissions/ese2010/view_talk.php?id=1685&quot;&gt;Gunnar Wagenknecht – Hot e4 stuff for building cool server applications&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/tomsondev.wordpress.com/1887/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/tomsondev.wordpress.com/1887/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/tomsondev.wordpress.com/1887/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/tomsondev.wordpress.com/1887/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/tomsondev.wordpress.com/1887/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/tomsondev.wordpress.com/1887/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/tomsondev.wordpress.com/1887/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/tomsondev.wordpress.com/1887/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/tomsondev.wordpress.com/1887/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/tomsondev.wordpress.com/1887/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/tomsondev.wordpress.com/1887/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/tomsondev.wordpress.com/1887/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/tomsondev.wordpress.com/1887/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/tomsondev.wordpress.com/1887/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=tomsondev.bestsolution.at&amp;amp;blog=7995503&amp;amp;post=1887&amp;amp;subd=tomsondev&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 18 Aug 2010 08:33:00 +0000</pubDate>
</item>
<item>
	<title>Eclipse Announcements: Attend Eclipse Government Day or Eclipse Enterprise Days</title>
	<guid isPermaLink="true">http://feedproxy.google.com/~r/eclipse/fnews/~3/1h_o9NfwjWM/20100818_gov_ent_days.php</guid>
	<link>http://feedproxy.google.com/~r/eclipse/fnews/~3/1h_o9NfwjWM/20100818_gov_ent_days.php</link>
	<description>Along with sponsors including Actuate, BandXI, EclipseSource, Oracle and Open Source for America,
     		the Eclipse Foundation is pleased to announce both the 
     		&lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Government_Day&quot;&gt;Eclipse Government Day&lt;/a&gt;
     		and &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Enterprise_Days&quot;&gt;Eclipse Enterprise Days&lt;/a&gt;.&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/eclipse/fnews/~4/1h_o9NfwjWM&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 17 Aug 2010 19:15:00 +0000</pubDate>
</item>
<item>
	<title>Donald Smith: Eclipse Government Day and Eclipse Enterprise Days</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-20309733.post-4211362192856701541</guid>
	<link>http://eclipse-ecosystem.blogspot.com/2010/08/eclipse-government-day-and-eclipse.html</link>
	<description>We're organizing two events this fall in Reston, VA.  Reston has the convenience of being a mere 15 minutes from Dulles (IAD) airport.&lt;br /&gt;&lt;br /&gt;The first event is &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Government_Day&quot;&gt;Eclipse in Government Day&lt;/a&gt;.  This event is for individuals working for, or contracting with, Government agencies and departments.  This is where I could use your help -- if you happen to have any friends or colleagues that are using Eclipse in Government, please do forward a link to the event wiki page or to this blog.  This event takes place on Tuesday, October 12th.&lt;br /&gt;&lt;br /&gt;The second event is &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Enterprise_Days&quot;&gt;Eclipse in the Enterprise Days&lt;/a&gt;.  This is a 2 day event (ending 3pm on second day to give people a chance to catch dinner time flights out) and is focused on IT, Architect and Development manager individuals who are responsible for Eclipse in Organizations with hundreds, or even thousands of developers.  The agenda on this event is still quite fluid and I have a few folks representing the enterprise helping me shape out the content -- if you have content suggestions, and/or are able to speak yourself, please do let us know!  Details are on the events page.  This event is Wednesday/Thursday October 13th, 14th.&lt;br /&gt;&lt;br /&gt; - Don&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/20309733-4211362192856701541?l=eclipse-ecosystem.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 17 Aug 2010 18:51:22 +0000</pubDate>
	<author>noreply@blogger.com (Donald Smith)</author>
</item>
<item>
	<title>Jesper Møller: Stuff you learn about when it breaks</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3318303833943079739.post-3046170641035993715</guid>
	<link>http://occasional-eclipse.blogspot.com/2010/08/stuff-you-learn-about-when-it-breaks.html</link>
	<description>&lt;div&gt;Somewhere in my basement I have a copy of &lt;a href=&quot;http://portal.acm.org/citation.cfm?id=5245&quot;&gt;Winograd and Flores' Understanding Computers and Cognition&lt;/a&gt;, required reading in some late-1990'es HCI course. Just about the only thing I remember from that book is this quote: &lt;i&gt;&quot;The word processor exists as a collection of hardware or programs only when it breaks down.&quot;&lt;/i&gt; This is in the sense that you don't think about a tool which doesn't get in the way, and only when it fails (or is missing), you notice it and start to analyse it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fast forward some 13 years, a few days ago, I finally got around to writing some better UI tests of WTP's &quot;XPath View&quot;, using SWTBot as the weapon of choice. Having read the SWTBot &lt;a href=&quot;http://download.eclipse.org/technology/swtbot/docs/videos/beginners/SWTBotGettingStartedIn5Minutes&quot;&gt;getting started docs&lt;/a&gt; and some &lt;a href=&quot;http://www.bonitasoft.org/blog/eclipse/swtbot-my-new-friend/&quot;&gt;useful&lt;/a&gt; &lt;a href=&quot;http://greensopinion.blogspot.com/search/label/SWTBot&quot;&gt;blog posts&lt;/a&gt;, writing my tests were soon well underway, using the fluent API provided. It is fun to watch the application speeding along like time-lapse film, like magic.&lt;/div&gt;&lt;div&gt;Everything went fine until I wrote code to switch the XPath view's active process from XPath1.0 to XPath2.0, using the view's menu. The API was pretty easy to figure out, but the view menu finder just didn't pick up the menu item I wanted.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's my breakdown: Why?&lt;/div&gt;&lt;div&gt;Well, it turns out that unlike regular menus and context menus, view menus are collected in a different fashion by SWTBot, by examining the contributions rather than enumerating the SWT objects themselves. Some corners cases are &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=291618&quot;&gt;not covered&lt;/a&gt;. Not a big deal, really, but it made me look at the source for SWTBot, which is quite a pleasant sight. Now it exists as real code in my mind, as does the Eclipse command framework implementation. And I also now &quot;get&quot; the Hamcrest Matcher framework which I've previously thought to be horribly over-engineered.&lt;/div&gt;&lt;div&gt;With my new knowledge, I can even &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=322668&quot;&gt;extend&lt;/a&gt; SWTBot. Nice.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_atpwbuZeUFk/TGpubxtZy9I/AAAAAAAAAFo/J3HVpLGHUS0/s1600/IMG_6358-resixed.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5506334917893147602&quot; src=&quot;http://1.bp.blogspot.com/_atpwbuZeUFk/TGpubxtZy9I/AAAAAAAAAFo/J3HVpLGHUS0/s320/IMG_6358-resixed.jpg&quot; style=&quot;float: right; margin: 0 0 10px 10px; cursor: pointer; cursor: hand; width: 320px; height: 213px;&quot; /&gt;&lt;/a&gt;Then fast forward two more days, while this blog post was sitting half-finished in my browser, Saturday evening, after historic amounts of rain in the area, my basement was flooded: The sewer couldn't contain the rain, and the system broke down and came very much into existence, as sewage water gushed up from the drains and toilet and my otherwise dry basement became a 20cm deep paddling pool, allover. Getting the water out took hours; getting the smell out will take days, maybe weeks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Like software, sewage is something most people would rather not have to deal with. It's supposed to be &quot;invisible magic&quot;, but in reality it is messy  and complicated, and when it doesn't work, it makes for a shitty situation -- yet our society very much depends on it.&lt;/div&gt;&lt;div&gt;The really strange part is the book: I haven't found it yet, not in the &quot;dry&quot; pile, the &quot;slightly damp but fine&quot; pile, the &quot;soggy yet perhaps readable&quot; pile, or the &quot;discard&quot; pile. I know that book must be down there somewhere, and when I find it, it's going back into my reading queue right away.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S: My flooded basement was a picnic compared to the &lt;a href=&quot;http://en.wikipedia.org/wiki/2010_Pakistan_floods&quot;&gt;flood in Pakistan&lt;/a&gt;. Consider donating to your favorite charity!&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3318303833943079739-3046170641035993715?l=occasional-eclipse.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 17 Aug 2010 16:57:23 +0000</pubDate>
	<author>noreply@blogger.com (Jesper)</author>
</item>
<item>
	<title>Eric Rizzo: Setting up .java files to automatically open with Eclipse on Mac OS X</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-518987099197087911.post-4360012735832661781</guid>
	<link>http://bewarethepenguin.blogspot.com/2010/08/setting-up-java-files-to-automatically.html</link>
	<description>With the 3.6 (aka, Helios) release of Eclipse, there is now support for opening files from the operating system command line or file browser directly into Eclipse. This has been a &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=4922&quot; target=&quot;_blank&quot;&gt;long-standing feature request&lt;/a&gt; (one of the oldest requests to ever have been implemented, in fact) and many people are happy to have it. Here is a quick tutorial on utilizing this feature under Mac OS X to associate .java files so that they open in Eclipse upon double-click from Finder. Although this demonstrates using .java files, you can do the same for any other file type; as long as your installation of Eclipse has an editor to handle that file type, it should work just fine.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Just to re-iterate, you have to have &lt;a href=&quot;http://www.eclipse.org/helios/&quot; target=&quot;_blank&quot;&gt;Eclipse Helios&lt;/a&gt; (version 3.6 of the platform) in order to take advantage of this feature. If you don't already have it, &lt;a href=&quot;http://www.eclipse.org/downloads/&quot; target=&quot;_blank&quot;&gt;go get it&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;In Finder, locate a .java file that you'd like to open in Eclipse; right-click (or Control+click if that's the way you roll) and select Get Info&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_3y0bheYoAmE/TGqef9o1VqI/AAAAAAAADhk/tTPudAV8IVU/s1600/Screen+shot+2010-08-17+at+10.31.39+AM.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5506387766372816546&quot; src=&quot;http://1.bp.blogspot.com/_3y0bheYoAmE/TGqef9o1VqI/AAAAAAAADhk/tTPudAV8IVU/s400/Screen+shot+2010-08-17+at+10.31.39+AM.png&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 279px;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;In the Info dialog, under the &quot;Open with:&quot; section, click the drop-down list and select Other...&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_3y0bheYoAmE/TGqfKbERRFI/AAAAAAAADhs/q8QKA7ZEnTU/s1600/Screen+shot+2010-08-17+at+10.37.55+AM.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5506388495827027026&quot; src=&quot;http://3.bp.blogspot.com/_3y0bheYoAmE/TGqfKbERRFI/AAAAAAAADhs/q8QKA7ZEnTU/s400/Screen+shot+2010-08-17+at+10.37.55+AM.png&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 242px; height: 400px;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Here comes the only tricky part about this process.&lt;br /&gt;In the resulting Finder dialog to select an application, navigate to where Eclipse is installed. You'll see Eclipse.app listed but chances are, it's disabled; you can't select it. You just have to enable it using the Enable: drop-down list at the bottom of the window, as shown here:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_3y0bheYoAmE/TGqgZvr-HsI/AAAAAAAADh0/2q0XqhJ8I_8/s1600/Screen+shot+2010-08-17+at+10.43.01+AM.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5506389858571919042&quot; src=&quot;http://1.bp.blogspot.com/_3y0bheYoAmE/TGqgZvr-HsI/AAAAAAAADh0/2q0XqhJ8I_8/s400/Screen+shot+2010-08-17+at+10.43.01+AM.png&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 380px;&quot; /&gt;&lt;/a&gt;Once you do that, you'll be able to select Eclipse.app.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Before clicking the Add button, decide if you want to select the &quot;Always Open With&quot; option (checkbox). Then click Add.&lt;/li&gt;&lt;li&gt;Back in the &quot;Info&quot; dialog, you can use the Change All... button to associate all .java files with Eclipse. Even if you don't do it now, you an always come back to this dialog and do it later.&lt;/li&gt;&lt;/ol&gt;That's it. Now when you double-click on .java files they will be opened in the Eclipse installation that you selected. If an instance of Eclipse is already running,      that instance will open the file. Otherwise, a new instance will be started.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/518987099197087911-4360012735832661781?l=bewarethepenguin.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 17 Aug 2010 14:53:24 +0000</pubDate>
	<author>noreply@blogger.com (Eric Rizzo)</author>
</item>
<item>
	<title>Kai Toedter: CSS Theming for Eclipse RCP 3.x</title>
	<guid isPermaLink="true">http://www.toedter.com/blog/?p=295</guid>
	<link>http://www.toedter.com/blog/?p=295</link>
	<description>&lt;p&gt;Eclipse 4.0 brought a great new feature: Theming RCP applications with CSS. Another good news is, this cool feature can also be used with RCP 3.x based applications. The following screen shot shows the RCP Mail Demo, styled with CSS:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.toedter.com/blog/wp-content/uploads/2010/08/mail-css2.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-298&quot; height=&quot;537&quot; src=&quot;http://www.toedter.com/blog/wp-content/uploads/2010/08/mail-css2.png&quot; title=&quot;mail-css&quot; width=&quot;643&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;How to run the Demo with CSS styling?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Checkout :pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse/e4/releng&lt;/li&gt;
&lt;li&gt;Import Project Set /releng/org.eclipse.e4.ui.releng/e4.ui.css.psf&lt;/li&gt;
&lt;li&gt;Checkout e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.widgets (see &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=322641&quot;&gt;bug 322641&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Cleanup org.eclipse.e4.ui.css.swt (see &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=322644&quot;&gt;bug 322644&lt;/a&gt;)&lt;br /&gt;
=&amp;gt; Organize Imports&lt;br /&gt;
=&amp;gt; Delete dependencies to org.eclipse.e4.core.*&lt;/li&gt;
&lt;li&gt;Start the CSS RCP Mail demo (project org.eclipse.e4.ui.examples.css.rcp)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The demo also provides dynamic theme switching. Here is is little excerpt from the defaul.css styling:&lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;CTabItem, Label, Tree, Text {
 font-family: &quot;Arial&quot;;
}

Shell {
 font-size: 12;
}

CTabItem, ToolBar, Button, CBanner, CoolBar {
 font-size: 9;
 background-color: white;
}

CTabFolder, CTabItem {
 background-color: #F0F1F7;
}
&lt;/pre&gt;
&lt;p&gt;If you would like to play around with the css, just edit the files css/default.css and css/colorful.css in the project org.eclipse.e4.ui.examples.css.rcp. I have submitted a short talk at &lt;a href=&quot;http://www.eclipsecon.org/summiteurope2010/&quot;&gt;Eclipse Summit Europe&lt;/a&gt; to explain a few more details.&lt;/p&gt;
&lt;p&gt;Have Fun!&lt;/p&gt;
&lt;p&gt;Kai&lt;br /&gt;
&lt;a href=&quot;http://twitter.com/kaitoedter&quot;&gt;Follow me on Twitter&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;If you like my blog, please feel free to flattr it &lt;a href=&quot;http://flattr.com/thing/50586/Kais-Blog&quot; target=&quot;_blank&quot; title=&quot;Flattr&quot;&gt;&lt;img alt=&quot;flattr this!&quot; src=&quot;http://www.toedter.com/blog/wp-content/plugins/flattrss/button-compact-static-100x17.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge&quot;&gt;
&lt;ul class=&quot;socials&quot;&gt;
		&lt;li class=&quot;shr-delicious&quot;&gt;
			&lt;a class=&quot;external&quot; href=&quot;http://delicious.com/post?url=http://www.toedter.com/blog/?p=295&amp;amp;title=CSS+Theming+for+Eclipse+RCP+3.x&quot; rel=&quot;nofollow&quot; title=&quot;Share this on del.icio.us&quot;&gt;Share this on del.icio.us&lt;/a&gt;
		&lt;/li&gt;
		&lt;li class=&quot;shr-facebook&quot;&gt;
			&lt;a class=&quot;external&quot; href=&quot;http://www.facebook.com/share.php?v=4&amp;amp;src=bm&amp;amp;u=http://www.toedter.com/blog/?p=295&amp;amp;t=CSS+Theming+for+Eclipse+RCP+3.x&quot; rel=&quot;nofollow&quot; title=&quot;Share this on Facebook&quot;&gt;Share this on Facebook&lt;/a&gt;
		&lt;/li&gt;
		&lt;li class=&quot;shr-twitter&quot;&gt;
			&lt;a class=&quot;external&quot; href=&quot;http://twitter.com/home?status=CSS+Theming+for+Eclipse+RCP+3.x+-+http://b2l.me/ahwcg6&amp;amp;source=shareaholic&quot; rel=&quot;nofollow&quot; title=&quot;Tweet This!&quot;&gt;Tweet This!&lt;/a&gt;
		&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/div&gt;</description>
	<pubDate>Tue, 17 Aug 2010 07:40:28 +0000</pubDate>
</item>

</channel>
</rss>
