<?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>Tom Schindl: E4 – A new area for RCP/RIA-Applications</title>
	<guid isPermaLink="false">http://tomsondev.bestsolution.at/?p=446</guid>
	<link>http://tomsondev.bestsolution.at/2009/07/02/e4-a-new-area-for-rcpria-applications/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;I’m on the road to prepare my example for the E4 talk I’m delivering on the &lt;a href=&quot;http://wiki.eclipse.org/EclipseApplicationDeveloperDayKarlsruhe&quot;&gt;Eclipse-Developers-Day in Karlsruhe&lt;/a&gt; and I have to say that in my eyes E4 is going to open up a new world for Eclipse-RCP-Developers.&lt;/p&gt;
&lt;p&gt;Though RCP-Applications written in 3.x might not look too bad no one can deny that the UI-Design is coming from an IDE background and compared to modern Web-UIs it looks boring (which is not a bad thing per se for business applications). The problem in 3.x is that it is very hard to impossible to change the L&amp;amp;F of your application.&lt;/p&gt;
&lt;p&gt;E4 provides different multiple solutions to fix the L&amp;amp;F:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Declarative-Styleing through CSS&lt;/li&gt;
&lt;li&gt;The possibility to define your own renderes to exchange Widget A through Widget B if CSS is not enough to theme your application&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To demostrate what you can achieve when you combine the 1st and 2nd possibility I create a small screencast &lt;/p&gt;
&lt;ins style=&quot;text-decoration: none;&quot;&gt;
&lt;div class=&quot;video-player&quot; id=&quot;x-video-0&quot;&gt;
 &lt;/div&gt;&lt;/ins&gt;
&lt;p&gt;where you see the famous E4-Photo-Application revamped&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://tomsondev.files.wordpress.com/2009/07/screen3.png?w=510&amp;amp;h=302&quot; title=&quot;E4 Photo Demo&quot; height=&quot;302&quot; width=&quot;510&quot; alt=&quot;E4 Photo Demo&quot; class=&quot;aligncenter size-full wp-image-456&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A second example application is our E4-Contacts-Demo created and maintained by &lt;a href=&quot;http://www.toedter.com/blog/&quot;&gt;Kai Tödter&lt;/a&gt; which shows advanced css-styles like radial gradients.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://tomsondev.files.wordpress.com/2009/07/screen2.png?w=510&amp;amp;h=285&quot; title=&quot;Contacts Demo&quot; height=&quot;285&quot; width=&quot;510&quot; alt=&quot;Contacts Demo&quot; class=&quot;aligncenter size-full wp-image-454&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I use this application to show you another nice thing you can do with E4’s declarative styling support. You can adjust the styling of your application while it is running so that you can experiment with various font and color settings &lt;strong&gt;WITHOUT&lt;/strong&gt; shutting down your application.&lt;/p&gt;
&lt;ins style=&quot;text-decoration: none;&quot;&gt;
&lt;div class=&quot;video-player&quot; id=&quot;x-video-1&quot;&gt;
 &lt;/div&gt;&lt;/ins&gt;
&lt;p&gt;If all this would not be enough you can run the &lt;strong&gt;unmodified code&lt;/strong&gt; (please take this literally) from the example application above in your browser using the RAP-Framework.&lt;/p&gt;
&lt;ins style=&quot;text-decoration: none;&quot;&gt;
&lt;div class=&quot;video-player&quot; id=&quot;x-video-2&quot;&gt;
 &lt;/div&gt;&lt;/ins&gt;
&lt;p&gt;&lt;img src=&quot;http://tomsondev.files.wordpress.com/2009/07/screen1.png?w=510&amp;amp;h=300&quot; title=&quot;E4-Rap-Screenshot&quot; height=&quot;300&quot; width=&quot;510&quot; alt=&quot;E4-Rap-Screenshot&quot; class=&quot;aligncenter size-full wp-image-450&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you are interested in E4 and what’s going on behind the scenes of the next major Eclipse-Release I hope to see you in Karlsruhe on Tuesday July 7th.&lt;/p&gt;
&lt;br /&gt;&lt;a href=&quot;http://tomsondev.bestsolution.at/2009/07/02/e4-a-new-area-for-rcpria-applications/&quot;&gt;&lt;img width=&quot;160&quot; src=&quot;http://cdn.videos.wordpress.com/M6XU68xj/finderschnappschuss001.thumbnail.jpg&quot; height=&quot;120&quot; /&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://tomsondev.bestsolution.at/2009/07/02/e4-a-new-area-for-rcpria-applications/&quot;&gt;&lt;img width=&quot;160&quot; src=&quot;http://cdn.videos.wordpress.com/cWHd8LW8/eclipseschnappschuss001.thumbnail.jpg&quot; height=&quot;120&quot; /&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://tomsondev.bestsolution.at/2009/07/02/e4-a-new-area-for-rcpria-applications/&quot;&gt;&lt;img width=&quot;160&quot; src=&quot;http://cdn.videos.wordpress.com/Doq8dIct/firefoxschnappschuss001.thumbnail.jpg&quot; height=&quot;120&quot; /&gt; &lt;/a&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/tomsondev.wordpress.com/446/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/tomsondev.wordpress.com/446/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/tomsondev.wordpress.com/446/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/tomsondev.wordpress.com/446/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/tomsondev.wordpress.com/446/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/tomsondev.wordpress.com/446/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/tomsondev.wordpress.com/446/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/tomsondev.wordpress.com/446/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/tomsondev.wordpress.com/446/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/tomsondev.wordpress.com/446/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=tomsondev.bestsolution.at&amp;amp;blog=7995503&amp;amp;post=446&amp;amp;subd=tomsondev&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Jul 2009 22:38:36 +0000</pubDate>
        <enclosure url="http://cdn.videos.wordpress.com/M6XU68xj/finderschnappschuss001_hd.mp4" length="13212672" type="video/mp4"/>
</item>
<item>
	<title>Martin Lippert: Slides from Talk at Java-Forum-Stuttgart 2009</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-18490491.post-6419816440265791623</guid>
	<link>http://martinlippert.blogspot.com/2009/07/slides-from-talk-at-java-forum.html</link>
	<description>Today I gave a talk on building dynamic applications with OSGi at the &lt;a href=&quot;http://www.java-forum-stuttgart.de/&quot;&gt;Java-Forum-Stuttgart 2009&lt;/a&gt;. This was mostly the talk I gave (and prepared) together with Kai Tödter and Gerd Wütherich for previous conferences. Here are the slides:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.martinlippert.org/events/JFS-2009-DynamicOSGiApps.pdf&quot;&gt;Patterns and Best Practices for Dynamic OSGi Applications (pdf)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The talk were in the main hall of the conference center and it was fun standing on that huge stage... :-) And of course I got completely confused during the talk while switching between the demo application and a slide showing a screenshot of that demo app - picking up every possible embarrassment... ;-)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/18490491-6419816440265791623?l=martinlippert.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Jul 2009 18:33:15 +0000</pubDate>
	<author>noreply@blogger.com (Martin Lippert)</author>
</item>
<item>
	<title>Bryan Hunt: Running Rational Team Concert (Jazz) on Eclipse 3.5 / Mac OS X</title>
	<guid isPermaLink="false">http://bryanhunt.wordpress.com/?p=125</guid>
	<link>http://bryanhunt.wordpress.com/2009/07/02/running-rational-team-concert-jazz-on-eclipse-3-5-mac-os-x/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://jazz.net&quot; target=&quot;_blank&quot;&gt;Rational Team Concert&lt;/a&gt; 2.0 has been released. With a little work, you can get the client running on Eclipse 3.5 and the server running on Mac OS X.&lt;/p&gt;
&lt;h2&gt;Server&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: normal; font-size: 13px;&quot;&gt;The Jazz team does not officially support running the server on OS X, and a download that runs on OS X out-of-the-box is not available.  With a couple of minor modifications, the Linux server download will run on OS X just fine.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the &lt;a href=&quot;https://jazz.net/downloads/rational-team-concert/releases/2.0/RTC-ExpressC-Server-2.0-Linux32.zip&quot; target=&quot;_blank&quot;&gt;Express C Server for Linux&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Unzip the download&lt;/li&gt;
&lt;li&gt;Launch the Terminal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cd jazz/server&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rm -rf jre&lt;/strong&gt; (the Linux JRE is obviously not needed on OS X)&lt;/li&gt;
&lt;li&gt;Edit &lt;strong&gt;tomcat/conf/server.xml&lt;/strong&gt;.  You need to modify the Connector specification for port 9443.  Search for &lt;strong&gt;SSL_TLS&lt;/strong&gt; and change it to &lt;strong&gt;TLS&lt;/strong&gt;.  Also change the next line from &lt;strong&gt;IbmX509&lt;/strong&gt; to &lt;strong&gt;SunX509&lt;/strong&gt;.  The resulting Connector specification should look like:&lt;/li&gt;
&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;
&amp;lt;Connector port=&quot;9443&quot;
               connectionTimeout=&quot;20000&quot;
               maxHttpHeaderSize=&quot;8192&quot;
               maxThreads=&quot;150&quot;
               minSpareThreads=&quot;25&quot;
               maxSpareThreads=&quot;75&quot;
               enableLookups=&quot;false&quot;
               disableUploadTimeout=&quot;true&quot;
               acceptCount=&quot;100&quot;
               scheme=&quot;https&quot;
               secure=&quot;true&quot;
               clientAuth=&quot;false&quot;
               keystoreFile=&quot;ibm-team-ssl.keystore&quot;
               keystorePass=&quot;ibm-team&quot;
               sslProtocol=&quot;TLS&quot;
			   algorithm=&quot;SunX509&quot;
			   URIEncoding=&quot;UTF-8&quot; /&amp;gt;
&lt;/pre&gt;
&lt;li&gt;Edit &lt;strong&gt;server.startup&lt;/strong&gt; and &lt;strong&gt;server.shutdown&lt;/strong&gt; changing JRE_HOME from &lt;strong&gt;`pwd`/jre&lt;/strong&gt; to &lt;strong&gt;/System/Library/Frameworks/JavaVM.framework/Home&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Launch the server &lt;strong&gt;./server.startup&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you want to make sure the server started correctly, you can &lt;strong&gt;tail -f tomcat/logs/catalina.out&lt;/strong&gt; and watch the server startup.  If you see any exceptions thrown, something went wrong.  If all goes well, the last message you see in the log should be:&lt;/p&gt;
&lt;p&gt;INFO: Server startup in xxxxx ms&lt;/p&gt;
&lt;p&gt;To get started right away, launch Safari and point it to &lt;a href=&quot;https://localhost:9443/jazz&quot; target=&quot;_blank&quot;&gt;https://localhost:9443/jazz&lt;/a&gt; login with User: &lt;strong&gt;ADMIN&lt;/strong&gt; and Password: &lt;strong&gt;ADMIN&lt;/strong&gt;.  You can use this admin account to create a personalized account.  Don’t forget to give yourself a Developer license.&lt;/p&gt;
&lt;h2&gt;Client&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;These instructions are not specific to Mac OS X – they should work for any OS.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;The Jazz team does support a &lt;a href=&quot;https://jazz.net/downloads/rational-team-concert/releases/2.0/RTC-Client-2.0-Mac.zip&quot; target=&quot;_blank&quot;&gt;Mac OS X Client&lt;/a&gt; as an incubator project, but the client is based on Eclipse 3.4.  You can download the client and get the jazz bundles to work in an Eclipse 3.5 environment.   The Jazz client has dependencies on the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eclipse.org/emf&quot; target=&quot;_blank&quot;&gt;EMF, XSD, SDO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eclipse.org/gef&quot; target=&quot;_blank&quot;&gt;GEF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eclipse.org/datatools&quot; target=&quot;_blank&quot;&gt;DTP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With the exception of SDO, all of the features can be installed from the Galileo update site.  To get SDO, add the &lt;a href=&quot;http://download.eclipse.org/modeling/emf/updates/releases/&quot; target=&quot;_blank&quot;&gt;EMF releases update site&lt;/a&gt; and install the SDO runtime from the EMF 2.4.2 release.&lt;/p&gt;
&lt;p&gt;From the downloaded client, move all of the sub-folders in &lt;strong&gt;jazz/client/eclipse/jazz&lt;/strong&gt; to your Eclipse 3.5 &lt;strong&gt;dropins&lt;/strong&gt; folder.  You could use P2 to install the contents of those sub-folders; however, you must manually check every bundle to be installed.  I’d rather spend 10 seconds doing a drag-and-drop rather than 15 minutes checking checkboxes.&lt;/p&gt;
&lt;p&gt;After you launch the client, you should be able to open the Team Artifacts view and create a connection to the repository at &lt;a href=&quot;https://localhost:9443/jazz&quot; target=&quot;_blank&quot;&gt;https://localhost:9443/jazz&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&quot;http://jazz.net&quot; target=&quot;_blank&quot;&gt;Jazz&lt;/a&gt; web site for tutorials on getting started.&lt;/p&gt;
  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/bryanhunt.wordpress.com/125/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/bryanhunt.wordpress.com/125/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/bryanhunt.wordpress.com/125/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/bryanhunt.wordpress.com/125/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/bryanhunt.wordpress.com/125/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/bryanhunt.wordpress.com/125/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/bryanhunt.wordpress.com/125/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/bryanhunt.wordpress.com/125/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/bryanhunt.wordpress.com/125/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/bryanhunt.wordpress.com/125/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=bryanhunt.wordpress.com&amp;amp;blog=7500940&amp;amp;post=125&amp;amp;subd=bryanhunt&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Jul 2009 18:22:16 +0000</pubDate>
</item>
<item>
	<title>Dave Carver: XText for RelaxNG</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1585332946379204379.post-6080954475267396484</guid>
	<link>http://intellectualcramps.blogspot.com/2009/07/xtext-for-relaxng.html</link>
	<description>So, I decided to try and create an XText Grammar for the &lt;a href=&quot;http://www.oasis-open.org/committees/relax-ng/compact-20021121.html#syntax&quot;&gt;RelaxNG Compact Syntax&lt;/a&gt;.  Mixed results so far, mainly having to do with my lack of knowledge on the XText grammar and it's mapping to EBNF.&lt;br /&gt;&lt;br /&gt;Here is what I have so far:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;grammar org.oasisopen.relaxng with org.eclipse.xtext.common.Terminals&lt;br /&gt;&lt;br /&gt;generate relaxng &quot;http://www.oasis-open.org/relaxng&quot;&lt;br /&gt;&lt;br /&gt;terminal Letter:&lt;br /&gt;   ID;&lt;br /&gt;&lt;br /&gt;terminal CHAR:&lt;br /&gt;   '#x9' | '#xA' | '#xD' | ('#x20'..'#xD7FF') | ('#xE000'..'#xFFFD') | ('#x10000'..'#x10FFFF');  &lt;br /&gt;&lt;br /&gt;terminal NewLine:&lt;br /&gt;   '#xA' | '#xD' | ('#xA' '#xD');&lt;br /&gt; &lt;br /&gt;terminal NameStartChar:&lt;br /&gt;   &quot;:&quot; |&lt;br /&gt;   ('A'..'Z') |&lt;br /&gt;   &quot;_&quot; | &lt;br /&gt;   ('a'..'z') |&lt;br /&gt;   ('#xC0'..'#xD6') | &lt;br /&gt;   ('#xD8'..'#xF6') | &lt;br /&gt;   ('#xF8'..'#x2FF') | &lt;br /&gt;   ('#x370'..'#x37D') | &lt;br /&gt;   ('#x37F'..'#x1FFF') | &lt;br /&gt;   ('#x200C'..'#x200D') |&lt;br /&gt;   ('#x2070'..'#x218F') | &lt;br /&gt;   ('#x2C00'..'#x2FEF') |&lt;br /&gt;   ('#x3001'..'#xD7FF') |&lt;br /&gt;   ('#xF900'..'#xFDCF') |&lt;br /&gt;   ('[#xFDF0'..'-#xFFFD') |&lt;br /&gt;   ('#x10000'..'#xEFFFF');&lt;br /&gt;&lt;br /&gt;terminal NameChar:&lt;br /&gt;   NameStartChar | &quot;-&quot; | &quot;.&quot; | ('0'..'9') | '#xB7' | ('#x0300'..'#x036F') | ('#x203F'..'#x2040');&lt;br /&gt;&lt;br /&gt;Model :&lt;br /&gt;   (elements += TopLevel);&lt;br /&gt;&lt;br /&gt;TopLevel:&lt;br /&gt;   Decl* (Pattern | GrammarContent*);&lt;br /&gt;    &lt;br /&gt;Decl:&lt;br /&gt;   'namespace' (IdentifierOrKeyWord '=' NamespaceURILiteral) |&lt;br /&gt;   'default' 'namespace' (IdentifierOrKeyWord) '=' NamespaceURILiteral |&lt;br /&gt;   'datatypes' IdentifierOrKeyWord '=' Literal;&lt;br /&gt;&lt;br /&gt;Pattern:&lt;br /&gt;   'element' NameClass '{' Pattern '}' |&lt;br /&gt;   'attribute' NameClass '{' Pattern '}' |&lt;br /&gt;   Pattern (',' Pattern)+ |&lt;br /&gt;   Pattern ('&amp;amp;' Pattern)+ |&lt;br /&gt;   Pattern ('|' Pattern)+ |&lt;br /&gt;   Pattern '?' |&lt;br /&gt;   Pattern '*' |&lt;br /&gt;   Pattern '+' |&lt;br /&gt;   'list' '{' Pattern '}' |&lt;br /&gt;   'mixed' '{' Pattern '}' |&lt;br /&gt;   Identifier |&lt;br /&gt;   'parent' Identifier |&lt;br /&gt;   'empty' |&lt;br /&gt;   'text' |&lt;br /&gt;   (DataTypeName) DataTypeValue |&lt;br /&gt;   DataTypeName ('{' Param* '}') (ExceptPattern) |&lt;br /&gt;   'notAllowed' |&lt;br /&gt;   'external' AnyURILiteral (Inherit) |&lt;br /&gt;   'grammar' '{' GrammarContent* '}' |&lt;br /&gt;   '(' Pattern ')';&lt;br /&gt;   &lt;br /&gt;Param:&lt;br /&gt;   IdentifierOrKeyWord '=' Literal;&lt;br /&gt;&lt;br /&gt;ExceptPattern:&lt;br /&gt;   '-' Pattern;&lt;br /&gt;&lt;br /&gt;GrammarContent:&lt;br /&gt;   Start | Define |&lt;br /&gt;   'div' '{' GrammarContent* '}' |&lt;br /&gt;   'include' AnyURILiteral (Inherit) ('{' IncludeContent* '}');&lt;br /&gt;&lt;br /&gt;IncludeContent:&lt;br /&gt;   Define | Start |&lt;br /&gt;   'div' '{' GrammarContent* '}';&lt;br /&gt;&lt;br /&gt;Start:&lt;br /&gt;   'start' AssignedMethod Pattern;&lt;br /&gt;&lt;br /&gt;Define:&lt;br /&gt;   Identifier AssignedMethod Pattern;&lt;br /&gt;&lt;br /&gt;AssignMethod:&lt;br /&gt;   '=' |&lt;br /&gt;   '|=' |&lt;br /&gt;   '&amp;amp;=';&lt;br /&gt;&lt;br /&gt;NameClass:&lt;br /&gt;   Name |&lt;br /&gt;   NsName (ExceptClassName) |&lt;br /&gt;   AnyName (ExceptClassName) |&lt;br /&gt;   NameClass '|' NameClass |&lt;br /&gt;   '(' NameClass ')';&lt;br /&gt;&lt;br /&gt;Name:&lt;br /&gt;   IdentiferOrKeyWord | CName;&lt;br /&gt;&lt;br /&gt;ExceptNameClass:&lt;br /&gt;   '-' NameClass;&lt;br /&gt;&lt;br /&gt;DataTypeName:&lt;br /&gt;   CName |&lt;br /&gt;   'string' |&lt;br /&gt;   'token';&lt;br /&gt;&lt;br /&gt;DataTypeValue:&lt;br /&gt;   Literal;&lt;br /&gt;&lt;br /&gt;AnyURILiteral:&lt;br /&gt;   Literal;&lt;br /&gt;&lt;br /&gt;NamespaceURILiteral:&lt;br /&gt;   Literal | 'inherit';&lt;br /&gt;&lt;br /&gt;Inherit:&lt;br /&gt;   'inherit' '=' IdentifierOrKeyWord;&lt;br /&gt;&lt;br /&gt;IdentifierOrKeyWord:&lt;br /&gt;   Identifier | KeyWord;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Identifier:&lt;br /&gt;   (NCName .. KeyWord) |&lt;br /&gt;   QuotedIdentifier;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CName:&lt;br /&gt;   NCName ':' NCName;&lt;br /&gt;&lt;br /&gt;NsName:&lt;br /&gt;   NCName ':*';&lt;br /&gt;&lt;br /&gt;AnyName:&lt;br /&gt;   '*';&lt;br /&gt;&lt;br /&gt;Literal:&lt;br /&gt;   LiteralSegment ('~' LiteralSegment)+;&lt;br /&gt;&lt;br /&gt;LiteralSegment:&lt;br /&gt;   '&quot;' (CHAR .. ('&quot;' | NewLine))* '&quot;' |&lt;br /&gt;   &quot;'&quot; (CHAR .. (&quot;'&quot; | Newline))* &quot;'&quot; |&lt;br /&gt;   '&quot;&quot;&quot;' (('&quot;') ('&quot;') (CHAR .. '&quot;'))* '&quot;&quot;&quot;';&lt;br /&gt;&lt;br /&gt;KeyWord:&lt;br /&gt;   &quot;attribute&quot;&lt;br /&gt;   | &quot;default&quot;&lt;br /&gt;   | &quot;datatypes&quot;&lt;br /&gt;   | &quot;div&quot;&lt;br /&gt;   | &quot;element&quot;&lt;br /&gt;   | &quot;empty&quot;&lt;br /&gt;   | &quot;external&quot;&lt;br /&gt;   | &quot;grammar&quot;&lt;br /&gt;   | &quot;include&quot;&lt;br /&gt;   | &quot;inherit&quot;&lt;br /&gt;   | &quot;list&quot;&lt;br /&gt;   | &quot;mixed&quot;&lt;br /&gt;   | &quot;namespace&quot;&lt;br /&gt;   | &quot;notAllowed&quot;&lt;br /&gt;   | &quot;parent&quot;&lt;br /&gt;   | &quot;start&quot;&lt;br /&gt;   | &quot;string&quot;&lt;br /&gt;   | &quot;text&quot;&lt;br /&gt;   | &quot;token&quot;;&lt;br /&gt;&lt;br /&gt;NCName:&lt;br /&gt;   NCNameStartChar NCNameChar*; /* An XML Name, minus the &quot;:&quot; */&lt;br /&gt;    &lt;br /&gt;NCNameChar:&lt;br /&gt;   NameChar - ':';&lt;br /&gt;    &lt;br /&gt;NCNameStartChar:&lt;br /&gt;   Letter | '_';&lt;br /&gt;    &lt;br /&gt;Name:&lt;br /&gt;   NameStartChar (NameChar)*;&lt;br /&gt;    &lt;br /&gt;Names:&lt;br /&gt;   Name ('#x20' Name)*;&lt;br /&gt;    &lt;br /&gt;Nmtoken:&lt;br /&gt;   (NameChar)+;&lt;br /&gt;    &lt;br /&gt;Nmtokens:&lt;br /&gt;   Nmtoken ('#x20' Nmtoken)*;&lt;br /&gt;&lt;br /&gt;QuotedIdentifier:&lt;br /&gt;    '\' NCName;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Some of the errors I can figure out...others are just baffling.  Particular the ones where it can't find the Rule even though it's been editted.   Help from the XText gurus out their would be appreciated.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1585332946379204379-6080954475267396484?l=intellectualcramps.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Jul 2009 17:03:06 +0000</pubDate>
	<author>noreply@blogger.com (David Carver)</author>
</item>
<item>
	<title>BioClipse: Bioclipse 2.0 Release Candidate 5</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-19419978.post-2150537204436310600</guid>
	<link>http://bioclipse.blogspot.com/2009/07/bioclipse-20-release-candidate-5.html</link>
	<description>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_h6tAVZXYvfs/SkzOKiZsOJI/AAAAAAAAAD0/_7cXzQoP0VE/s1600-h/bioclipse-banner_300w.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_h6tAVZXYvfs/SkzOKiZsOJI/AAAAAAAAAD0/_7cXzQoP0VE/s320/bioclipse-banner_300w.png&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 90px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5353880737465251986&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Today, Bioclipse 2.0 Release Candidate 5 (versioned 2.0.0.RC5) was released with primarily a fix in the atom typing done when editing chemical structures, and a less stricter handling of SDFiles. The release requires a fresh download from &lt;a href=&quot;http://sourceforge.net/projects/bioclipse&quot;&gt;Sourceforge&lt;/a&gt;, and we kindly ask beta-testers for bug reports on the &lt;a href=&quot;http://bugs.bioclipse.net/&quot;&gt;bugs.bioclipse.net&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/19419978-2150537204436310600?l=bioclipse.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Jul 2009 15:13:52 +0000</pubDate>
	<author>noreply@blogger.com (Ola Spjuth)</author>
</item>
<item>
	<title>Sven Efftinge: Xtext scopes and EMF index in action</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24248206.post-4023821900980796565</guid>
	<link>http://blog.efftinge.de/2009/07/xtext-scopes-and-emf-index-in-action.html</link>
	<description>&lt;span style=&quot;font-style: italic;&quot;&gt;This is a post about scoping and how to use the EMF index for that. It is in some sense a practical follow up on another blog post about the general idea behind &lt;a href=&quot;http://blog.efftinge.de/2009/01/xtext-scopes-and-emf-index.html&quot;&gt;indexing and scoping in Xtext&lt;/a&gt;. The topic is somewhat advanced and bleeding edge. This post describes the needed steps to get the current index based default scoping up and running. I've prepared a &lt;/span&gt;&lt;a style=&quot;font-style: italic;&quot; href=&quot;http://gallery.me.com/sven.efftinge/100036&quot;&gt;small screencast&lt;/a&gt;&lt;span style=&quot;font-style: italic;&quot;&gt; demonstrating the result in action.&lt;/span&gt; &lt;span style=&quot;font-style: italic;&quot;&gt;The example language can be downloaded from &lt;a href=&quot;http://www.efftinge.de/index-based-language.zip&quot;&gt;here&lt;/a&gt;.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Today, the common way to do cross resource references in &lt;a href=&quot;http://www.xtext.org&quot;&gt;Xtext&lt;/a&gt; is to do it via resource URIs. That is if you want to reference a model element (EObject) from another resource, you typically put the whole resource on the scope by adding a corresponding import. Example:&lt;br /&gt;&lt;pre&gt;import &quot;platform:/resource/my.project/src/othermodel.dsl&quot;&lt;br /&gt;&lt;br /&gt;//.. refer to elements from othermodel.dsl&lt;/pre&gt;The corresponding default scoping is very simplistic. Every object in the current resource and in the referenced resources can be referenced by its simple name (as long as it has a 'name').&lt;br /&gt;&lt;br /&gt;Although this is very easy to understand, it has it's limitation when it comes to more sophisticated design. If you for instance want to hide some elements or have duplicate simple names in different packages (this can be the case if you use elements, which are developed by others).&lt;br /&gt;&lt;br /&gt;In many programming languages we have the notion of namespaces, which are much more flexible and powerful. Java, for instance, is file system agnostic. Although it forces you to put the files into folders which correspond the packages, it ultimately is just based on namespaces (packages, types).&lt;br /&gt;That said Java's namespace mechanism is also a bit limited. For instance I cannot have imports in nested namespaces but only per file. And I cannot nest packages but only classes and interfaces.&lt;br /&gt;&lt;br /&gt;Scala and C# both allow to have multiple nested packages within one file and you can put imports per namespace, so that imported names are only visible within that namespace.&lt;br /&gt;&lt;br /&gt;In order to demonstrate how to use the index together with Xtext, I've implemented a &lt;span style=&quot;font-family: courier new;&quot;&gt;DefaultIndexBasedScopeProvider &lt;/span&gt;which implements a similar semantic. There's a small example I've prepared, where you can see how it can be used. It is mainly a matter of configuring the different implementations with &lt;a href=&quot;http://code.google.com/p/google-guice/&quot;&gt;Guice&lt;/a&gt;. Programming is not needed as long as you're happy with the defaults.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Here's how it works&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href=&quot;http://www.eclipse.org/emfindex/&quot;&gt;index&lt;/a&gt; registeres a builder, which is invoked on resource changes. In order to make your model elements visible, you'll have to contribute a so called Indexer using an extension point.&lt;br /&gt;&lt;pre&gt;&amp;lt;extension point=&quot;org.eclipse.emf.index.indexer&quot;&amp;gt;&lt;br /&gt;&amp;lt;indexer class=&quot;org.eclipse.xtext.example.DomainmodelExecutableExtensionFactory&lt;br /&gt;                  :org.eclipse.xtext.index.DefaultDeclarativeResourceIndexer&quot;&lt;br /&gt;            fileextensions=&quot;dmodel&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/extension&amp;gt;&lt;br /&gt;&lt;/pre&gt;Please ignore the &lt;span style=&quot;font-family: courier new;&quot;&gt;ExecutableExtensionFactory&lt;/span&gt;, which is declared in order to make any executable extension Guice aware, that is you can use dependency injection. This is a different topic and might be covered by another blog post.&lt;br /&gt;&lt;br /&gt;The actual class to be instantiated is the one after the colon (':'):  The &lt;span style=&quot;font-family: courier new;&quot;&gt;DefaultDeclarativeResourceIndexer&lt;/span&gt;, which delegates to an instance of &lt;span style=&quot;font-family: courier new;&quot;&gt;IQualifiedNameProvider&lt;/span&gt;, which itself is injected. This means that its implementation can be arbitrarily changed.&lt;br /&gt;The contract of a name provider is very simple: it computes a qualified name for an element, if it returns null, the element is not indexed and hence not referable.&lt;br /&gt;&lt;br /&gt;By default we use a &lt;span style=&quot;font-family: courier new;&quot;&gt;DefaultDeclarativeQualifiedNameProvider&lt;/span&gt;, which if not otherwise specified looks up a simple name (if there's an attribute 'name') and concatenates it to the qualified name of its parent. It's named 'declarative' because you're able to change the described default behavior per type by just adding a method like this:&lt;br /&gt;&lt;pre&gt;String qualifiedName(MyType foo) {&lt;br /&gt;  // compute different qualified name for MyTypes&lt;br /&gt;  // ...&lt;br /&gt;}&lt;/pre&gt;It will automatically dispatch to this method as soon as it has to compute a qualified name for an instance of MyType.&lt;br /&gt;&lt;br /&gt;With this in place we'll have our elements automatically indexed as long as they are in a project, which have the index nature enabled. Being indexed means that they are globally visible by their qualified name, which is comparable to how public Java elements are globally visible as soon as they are on the classpath.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;What's next?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In order to use the index and have it injected into your components (e.g. your scope provider) you'll have to configure the singleton instance from the index bundle into your Guice module. In the example the corresponding binding goes into the UI module and looks like this:&lt;br /&gt;&lt;pre&gt;public IndexStore bindIndexStore() {&lt;br /&gt; return EmfIndexUIPlugin.getDefault().getIndexStore();&lt;br /&gt;}&lt;/pre&gt;With that in place you can inject the index store by just adding a dependency in your code:&lt;br /&gt;&lt;pre&gt;@Inject&lt;br /&gt;private IndexStore store;&lt;/pre&gt;Guice will automatically put the instance into such declared dependencies.&lt;br /&gt;Now that we have a binding for &lt;span style=&quot;font-family: courier new;&quot;&gt;IndexStore&lt;/span&gt; we can add the index based scoping to the runtime module:&lt;br /&gt;&lt;pre&gt;public IndexStore bindIndexStore() {&lt;br /&gt; return new PersistableIndexStore();&lt;br /&gt;}&lt;br /&gt;  &lt;br /&gt;@Override&lt;br /&gt;public Class bindIScopeProvider() {&lt;br /&gt; return DefaultIndexBasedScopeProvider.class;&lt;br /&gt;}&lt;/pre&gt;Note the additional &lt;span style=&quot;font-family: courier new;&quot;&gt;IndexStore&lt;/span&gt; binding, which is overridden by the binding we previously added to the UI module, but is needed in order to use this stuff at runtime (i.e. without running within exquinox). So it gets active as soon as you run without UI.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;How the &lt;span style=&quot;font-family: courier new;&quot;&gt;DefaultIndexBasedScopeProvider&lt;/span&gt; works&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style=&quot;font-family: courier new;&quot;&gt;DefaultIndexBasedScopeProvider&lt;/span&gt;&lt;br /&gt;- looks up EAttributes with name '&lt;span style=&quot;font-family: courier new;&quot;&gt;importNamespace&lt;/span&gt;'&lt;br /&gt;- and translates the globally unique qualified name into shorter ones using those import statements.&lt;br /&gt;&lt;br /&gt;By default qualified names with or without a wildcard at the end are supported. For an import of a qualified name the simple name is made available as we know from e.g. Java, where&lt;br /&gt;&lt;pre&gt;import java.util.Set;&lt;/pre&gt;makes it possible to refer to 'java.util.Set' by its simple name 'Set'.&lt;br /&gt;Contrary to Java the import is not active for the whole file but only for the namespace it is declared in and its child namespaces. That is why you can write the following in the example DSL:&lt;br /&gt;&lt;pre&gt;package foo {&lt;br /&gt;  import bar.Foo&lt;br /&gt;  entity Bar extends Foo {&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;package bar {&lt;br /&gt;  entity Foo {}&lt;br /&gt;}&lt;/pre&gt;Of course the declared elements within a package are as well referable by their simple name:&lt;br /&gt;&lt;pre&gt;package bar {&lt;br /&gt;  entity Bar extends Foo {}&lt;br /&gt;  entity Foo {}&lt;br /&gt;}&lt;/pre&gt;Of course the following would as well be ok:&lt;br /&gt;&lt;pre&gt;package bar {&lt;br /&gt;  entity Bar extends bar.Foo {}&lt;br /&gt;  entity Foo {}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Disclaimer&lt;/span&gt;&lt;br /&gt;All this is in a very early stage. The index is not finished and its architecture is not settled down yet. Also the scope provider implementation might be changed in future (I'm sure it will).&lt;br /&gt;Additionally, there are other things around this which we have to work on before considering this mature.&lt;br /&gt;&lt;br /&gt;But as I know that there are a lot of bleeding edge users out there, I wanted to share the current state, so you might find a starting point to play with it. The index is an enabler for more advanced functionality in Xtext and in EMF based development in general. So expect it to become an important part in Eclipse Modeling.&lt;br /&gt;&lt;br /&gt;Feedback is highly appreciated and should either go to the &lt;a href=&quot;http://www.eclipse.org/newsportal/thread.php?group=eclipse.modeling.tmf&quot;&gt;newsgroup&lt;/a&gt;&lt;a href=&quot;http://www.eclipse.org/newsportal/thread.php?group=eclipse.modeling.tmf&quot;&gt; for Xtext&lt;/a&gt; (the scoping part) or to the &lt;a href=&quot;http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.emft&quot;&gt;EMFT newsgroup&lt;/a&gt; (the index part), because the index project is a component under EMFT.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/24248206-4023821900980796565?l=blog.efftinge.de&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Jul 2009 14:29:35 +0000</pubDate>
	<author>noreply@blogger.com (Sven Efftinge)</author>
</item>
<item>
	<title>Vasanth Dharmaraj: Portable Eclipse and Portable Java</title>
	<guid isPermaLink="false">http://www.vasanth.in/2009/07/02/portable-eclipse-and-portable-java/</guid>
	<link>http://feedproxy.google.com/~r/vasantheclipse/~3/K89c5s7hUQU/</link>
	<description>&lt;p&gt;I like portable software. I carry around a bunch of them in my flash drive. I just found out that both &lt;a href=&quot;http://portableapps.com/apps/utilities/java_portable&quot;&gt;Java&lt;/a&gt; and &lt;a href=&quot;http://portableapps.com/node/18591/&quot;&gt;Eclipse&lt;/a&gt; are available as portable versions at &lt;a href=&quot;http://portableapps.com/&quot;&gt;PortableApps.com&lt;/a&gt;. The Java version they have is Java 6 update 14 but Eclipse is stuck at 3.4.2. &lt;/p&gt;
&lt;p&gt;Eclipse uses portable Java, so Java need not be installed in the PC to run it. Nice. The portable version has some trouble finding the workspace but once you correct the path it works fine. &lt;/p&gt;
&lt;p&gt;I updated the Eclipse binaries in to the just released 3.5 and it work great too. Nice way to take Eclipse and your work with you.&lt;/p&gt;


&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://www.vasanth.in/2004/01/13/eclipse-tip-keeping-plugins-and-workspace-separate/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Eclipse Tip: Keeping plugins and workspace separate&quot;&gt;Eclipse Tip: Keeping plugins and workspace separate&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.vasanth.in/2008/08/18/eclipse-tip-java-editor-breadcrumb-navigation-bar/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Eclipse Tip: Java Editor Breadcrumb Navigation Bar&quot;&gt;Eclipse Tip: Java Editor Breadcrumb Navigation Bar&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.vasanth.in/2005/07/13/eclipse-tip-sharing-java-project-settings/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Eclipse Tip: Sharing Java project settings&quot;&gt;Eclipse Tip: Sharing Java project settings&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.vasanth.in/2006/06/05/eclipse-tip-grouping-java-problems/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Eclipse Tip: Grouping Java Problems&quot;&gt;Eclipse Tip: Grouping Java Problems&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.vasanth.in/2009/04/08/java-rides-on-google-app-engine/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Java rides on Google App Engine&quot;&gt;Java rides on Google App Engine&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?a=K89c5s7hUQU:TAAtha2eQn4:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?i=K89c5s7hUQU:TAAtha2eQn4:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?a=K89c5s7hUQU:TAAtha2eQn4:W9dqtTZ0I2U&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?d=W9dqtTZ0I2U&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?a=K89c5s7hUQU:TAAtha2eQn4:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?a=K89c5s7hUQU:TAAtha2eQn4:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?i=K89c5s7hUQU:TAAtha2eQn4:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?a=K89c5s7hUQU:TAAtha2eQn4:ByNYXvuKCJE&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/vasantheclipse?d=ByNYXvuKCJE&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img width=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/vasantheclipse/~4/K89c5s7hUQU&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 02 Jul 2009 14:24:53 +0000</pubDate>
</item>
<item>
	<title>Ed Merks: Talking About Connected Data Objects</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3879044552984472733.post-1443039228093249447</guid>
	<link>http://ed-merks.blogspot.com/2009/07/talking-about-connected-data-objects.html</link>
	<description>My personal Berlin tour guide, &lt;a href=&quot;http://thegordian.blogspot.com/&quot;&gt;Eike Stepper&lt;/a&gt;, and I did a &lt;a href=&quot;http://java.dzone.com/podcasts/galileo-podcast-series-cdo&quot;&gt;Galileo Series Podcast about CDO&lt;/a&gt; with James Sugrue the other day.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_rFZqMGOSYY8/Sky0myfifEI/AAAAAAAABPA/2NtW3M6RJDE/s1600-h/EikeAtCafe.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_rFZqMGOSYY8/Sky0myfifEI/AAAAAAAABPA/2NtW3M6RJDE/s320/EikeAtCafe.jpg&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5353852635518762050&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Eike and his rapidly growing team are doing some extremely cool things with CDO, so you might be interested to find out more.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3879044552984472733-1443039228093249447?l=ed-merks.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Jul 2009 13:46:29 +0000</pubDate>
	<author>noreply@blogger.com (Ed Merks)</author>
</item>
<item>
	<title>Greg Wilkins: Continuations to Continue</title>
	<guid isPermaLink="true">http://blogs.webtide.com/gregw/entry/continuations_to_continue</guid>
	<link>http://blogs.webtide.com/gregw/entry/continuations_to_continue</link>
	<description>&lt;p align=&quot;justify&quot;&gt;&lt;a href=&quot;http://docs.codehaus.org/display/JETTY/Continuations&quot;&gt;Jetty-6 Continuations&lt;/a&gt; introduced the concept of asynchronous servlets to provide scalability and quality of service to web 2.0 applications such as chat, collaborative editing, price publishing, as well as powering HTTP based frameworks like &lt;a href=&quot;http://cometd.org&quot;&gt;cometd&lt;/a&gt;, &lt;a href=&quot;http://camel.apache.org/asynchronous-processing.html&quot;&gt;apache camel&lt;/a&gt;, &lt;a href=&quot;http://www.igniterealtime.org/projects/openfire/index.jsp&quot;&gt;openfire XMPP&lt;/a&gt; and flex BlazeDS.&lt;br /&gt;&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;With the introduction of similar  asynchronous features in Servlet-3.0, some have suggested that the Continuation API would be deprecated.  Instead, the &lt;a href=&quot;http://wiki.eclipse.org/Jetty/Feature/Continuations&quot;&gt;Continuation API&lt;/a&gt; has been updated to provide a simplified portability run asynchronously on any servlet 3.0 container as well as on Jetty (6,7 &amp;amp; 8).  Continuations will work synchronously (blocking) on any 2.5 servlet container. Thus programming to the Continuations API allows your application to achieve asynchronicity today without waiting for the release of stable 3.0 containers (and needing to upgrade all your associated infrastructure).&lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt;Continuation Improvements&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;The old continuation API threw an exception when the continuation was suspended, so that the thread to exit the service method of the servlet/filter. This caused a potential race condition as a continuation would need to be registered with the asynchronous service before the suspend, so that service could do a resume before the actual suspend, unless a common mutex was used.   &lt;br /&gt;&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;Also, the old continuation API had a waiting continuation that would work on non-jetty servers.  However the behaviour of this the waiting continuation was a little different to the normal continuation, so code had to be carefully written to work for both.&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;The new continuation API does not throw an exception from suspend, so
the continuation can be suspended before it is registered with any
services and the mutex is no longer needed. With the use of a ContinuationFilter for non asynchronous containers, the continuation will now behaive identically in all servers. &lt;br /&gt;&lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt; Continuations and Servlet 3.0&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;The servlet 3.0 asynchronous API introduced some additional asynchronous features not supported by jetty 6 continuations, including:&lt;/p&gt;&lt;div align=&quot;justify&quot;&gt;&lt;ul&gt;&lt;li&gt;The ability to complete an asynchronous request without dispatching&lt;/li&gt;&lt;li&gt;Support for wrapped requests and responses.&lt;/li&gt;&lt;li&gt;Listeners for asynchronous events&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dispatching asynchronous requests to specific contexts and/or resources&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p align=&quot;justify&quot;&gt;While powerful, these additional features may also be very complicated and confusing. Thus the new Continuation API has cherry picked the good ideas and represents a good compromise between power and complexity.  The servlet 3.0 features adopted are:&lt;/p&gt;&lt;div align=&quot;justify&quot;&gt;&lt;ul&gt;&lt;li&gt;The completing a continuation without resuming.&lt;/li&gt;&lt;li&gt;Support for response wrappers.&lt;/li&gt;&lt;li&gt;Optional listeners for asynchronous events.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p align=&quot;justify&quot;&gt; &lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt;Using The Continuation API&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;The new &lt;a href=&quot;http://wiki.eclipse.org/Jetty/Feature/Continuations&quot;&gt;continuation API&lt;/a&gt;
is available in Jetty-7 and is not expected to significantly change in
future releases.  Also the continuation library is intended to be
deployed in WEB-INF/lib and is portable.  Thus the jetty-7 continuation
jar will work asynchronously when deployed in jetty-6, jetty-7, jetty-8
or any servlet 3.0 container.&lt;/p&gt;&lt;div align=&quot;justify&quot;&gt;
&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Obtaining a Continuation &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
The &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/continuation/ContinuationSupport.html&quot;&gt;ContinuationSupport&lt;/a&gt; factory class can be used to obtain a continuation instance associated with a request:
&lt;pre&gt;    Continuation continuation = ContinuationSupport.getContinuation(request);&lt;br /&gt;&lt;/pre&gt;

&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Suspending a Request &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
The suspend a request, the suspend method is called on the continuation:
&lt;pre&gt;  void doGet(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;  {&lt;br /&gt;    ...&lt;br /&gt;    continuation.suspend();&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;

After this method has been called, the lifecycle of the request will be extended beyond the return to the container from the Servlet.service(...) method and Filter.doFilter(...) calls.  After these dispatch methods return to, as suspended request will not be committed and a response will not be sent to the HTTP client. 
&lt;/div&gt;&lt;p align=&quot;justify&quot;&gt;
Once a request is suspended, the continuation should be registered with an asynchronous service so that it may be used by an asynchronous callback once the waited for event happens.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
The request will be suspended until either &lt;code&gt;continuation.resume()&lt;/code&gt; or &lt;code&gt;continuation.complete()&lt;/code&gt; is called. If neither is called then the continuation will timeout after a default period or a time set before the suspend by a call to &lt;code&gt;continuation.setTimeout(long)&lt;/code&gt;. If no timeout listeners resume or complete the continuation, then the continuation is resumed with &lt;code&gt;continuation.isExpired()&lt;/code&gt; true.  

There is a variation of suspend for use with request wrappers and the complete lifecycle (see below):
&lt;/p&gt;&lt;div align=&quot;justify&quot;&gt;&lt;pre&gt;    continuation.suspend(response);&lt;br /&gt;&lt;/pre&gt;
Suspension is analogous to the servlet 3.0 &lt;code&gt;request.startAsync()&lt;/code&gt; method.  Unlike jetty-6 continuations, an exception is not thrown by suspend and the method should return normally.  This allows the registration of the continuation to occur after suspension and avoids the need for a mutex.  If an exception is desirable (to bypass code that is unaware of continuations and may try to commit the response), then &lt;code&gt;continuation.undispatch()&lt;/code&gt; may be called to exit the current thread from the current dispatch by throwing a &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/continuation/ContinuationThrowable.html&quot;&gt;ContinuationThrowable&lt;/a&gt;.


&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Resuming a Request &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
Once an asynchronous event has occurred, the continuation can be resumed:
&lt;pre&gt;  void myAsyncCallback(Object results)&lt;br /&gt;  {&lt;br /&gt;    continuation.setAttribute(&quot;results&quot;,results);&lt;br /&gt;    continuation.resume();&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;

Once a continuation is resumed, the request is redispatched to the servlet container, almost as if the request had been received again.  However during the redispatch, the &lt;code&gt;continuation.isInitial()&lt;/code&gt; method returns false and any attributes set by the asynchronous handler are available.
&lt;/div&gt;&lt;p align=&quot;justify&quot;&gt;
Continuation resume is analogous to Servlet 3.0 &lt;code&gt;AsyncContext.dispatch()&lt;/code&gt;.

&lt;/p&gt;&lt;h3 align=&quot;justify&quot;&gt; Completing Request &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
As an alternative to completing a request, an asynchronous handler may write the response itself. After writing the response, the handler must indicate the request handling is complete by calling the complete
method:
&lt;pre&gt;  void myAsyncCallback(Object results)&lt;br /&gt;  {&lt;br /&gt;    writeResults(continuation.getServletResponse(),results);&lt;br /&gt;    continuation.complete();&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;
After complete is called, the container schedules the response to be committed and flushed.
  &lt;/div&gt;&lt;p align=&quot;justify&quot;&gt; 
Continuation resume is analogous to Servlet 3.0 &lt;code&gt;AsyncContext.complete()&lt;/code&gt;.

&lt;/p&gt;&lt;h3 align=&quot;justify&quot;&gt; Continuation Listeners &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
An application may monitor the status of a continuation by using a &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/continuation/ContinuationListener.html&quot;&gt;ContinuationListener&lt;/a&gt;:
&lt;pre&gt;  void doGet(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;  {&lt;br /&gt;    ...&lt;br /&gt;    &lt;br /&gt;    Continuation continuation = ContinuationSupport.getContinuation(request);&lt;br /&gt;    continuation.addContinuationListener(new ContinuationListener()&lt;br /&gt;    {&lt;br /&gt;      public void onTimeout(Continuation continuation) { ... }&lt;br /&gt;      public void onComplete(Continuation continuation) { ... }&lt;br /&gt;    });&lt;br /&gt;    &lt;br /&gt;    continuation.suspend();&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p align=&quot;justify&quot;&gt;
Continuation listeners are analogous to Servlet 3.0 &lt;code&gt;AsyncListener&lt;/code&gt;s.

&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt; &lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt; Continuation Patterns &lt;/h2&gt;&lt;div align=&quot;justify&quot;&gt;

&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Suspend Resume Pattern &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
The suspend/resume style is used when a servlet and/or filter is used to generate the response after a asynchronous wait that is terminated by an asynchronous handler. Typically a request attribute is used to pass results and to indicate if the request has already been suspended.
&lt;pre&gt;  void doGet(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;  {&lt;br /&gt;     // if we need to get asynchronous results&lt;br /&gt;     Object results = request.getAttribute(&quot;results);&lt;br /&gt;     if (results==null)&lt;br /&gt;     {&lt;br /&gt;       final Continuation continuation = ContinuationSupport.getContinuation(request);&lt;br /&gt;       &lt;br /&gt;       // if this is not a timeout&lt;br /&gt;       if (continuation.isExpired())&lt;br /&gt;       {&lt;br /&gt;         sendMyTimeoutResponse(response);&lt;br /&gt;         return;&lt;br /&gt;       }&lt;br /&gt;       &lt;br /&gt;       // suspend the request&lt;br /&gt;       continuation.suspend(); // always suspend before registration&lt;br /&gt;       &lt;br /&gt;       // register with async service.  The code here will depend on the&lt;br /&gt;       // the service used (see Jetty HttpClient for example)&lt;br /&gt;       myAsyncHandler.register(new MyHandler()&lt;br /&gt;       {&lt;br /&gt;          public void onMyEvent(Object result)&lt;br /&gt;          {&lt;br /&gt;            continuation.setAttribute(&quot;results&quot;,results);&lt;br /&gt;            continuation.resume();&lt;br /&gt;          }&lt;br /&gt;       });&lt;br /&gt;       return; // or continuation.undispatch();&lt;br /&gt;     }&lt;br /&gt;     &lt;br /&gt;     // Send the results&lt;br /&gt;     sendMyResultResponse(response,results);&lt;br /&gt;   }    &lt;br /&gt;&lt;/pre&gt;
This style is very good when the response needs the facilities of the servlet container (eg it uses a web framework) or if the one event may resume many requests so the containers thread pool can be used to handle each of them. 
 

&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Suspend Continue Pattern &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;

The suspend/complete style is used when an asynchronous handler is used to generate the response:

&lt;pre&gt;  void doGet(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;  {&lt;br /&gt;     final Continuation continuation = ContinuationSupport.getContinuation(request);&lt;br /&gt;     &lt;br /&gt;     // if this is not a timeout&lt;br /&gt;     if (continuation.isExpired())&lt;br /&gt;     {&lt;br /&gt;       sendMyTimeoutResponse(request,response);&lt;br /&gt;       return;&lt;br /&gt;     }&lt;br /&gt;     &lt;br /&gt;     // suspend the request&lt;br /&gt;     continuation.suspend(response); // response may be wrapped.&lt;br /&gt;     &lt;br /&gt;     // register with async service.  The code here will depend on the&lt;br /&gt;     // the service used (see Jetty HttpClient for example)&lt;br /&gt;     myAsyncHandler.register(new MyHandler()&lt;br /&gt;     {&lt;br /&gt;       public void onMyEvent(Object result)&lt;br /&gt;       {&lt;br /&gt;         sendMyResultResponse(continuation.getServletResponse(),results);&lt;br /&gt;         continuation.complete();&lt;br /&gt;       }&lt;br /&gt;     });&lt;br /&gt;   }    &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p align=&quot;justify&quot;&gt;
This style is very good when the response does not needs the facilities of the servlet container (eg it does not use a web framework) and if an event will resume only one continuation.  If many responses are to be sent (eg a chat room), then writing one response may block and cause a DOS on the other responses.


&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt; &lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt; Continuation Examples &lt;/h2&gt;&lt;div align=&quot;justify&quot;&gt;

&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Chat Servlet &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
The &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/xref/com/acme/ChatServlet.html&quot;&gt;ChatServlet&lt;/a&gt; example shows how the suspend/resume style can be used to directly code a chat room.   The same principles are applied to frameworks like &lt;a href=&quot;http://cometd.org&quot;&gt;cometd.org&lt;/a&gt; which provide an richer environment for such applications, based on Continuations.

&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Quality of Service Filter &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
The &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/servlets/QoSFilter.html&quot;&gt;QoSFilter&lt;/a&gt;(&lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/servlets/QoSFilter.html&quot;&gt;javadoc&lt;/a&gt;), uses suspend/resume style to limit the number of requests simultaneously within the filter.  This can be used to protect a JDBC connection pool or other limited resource from too many simultaneous requests.
&lt;/div&gt;&lt;p align=&quot;justify&quot;&gt;
If too many requests are received, the extra requests wait for a short time on a semaphore, before being suspended.  As requests within the filter return, they use a priority queue to resume the suspended requests.  This allows your authenticated or priority users to get a better share of your servers resources when the machine is under load.

&lt;/p&gt;&lt;h3 align=&quot;justify&quot;&gt; Denial of Service Filter &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
The &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/servlets/DoSFilter.html&quot;&gt;DosFilter&lt;/a&gt;(&lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/servlets/DoSFilter.html&quot;&gt;javadoc&lt;/a&gt;) is similar to the QoSFilter, but protects a web application from a denial of service attack (as best you can from within a web application). If too many requests are detected coming from one source, then those requests are suspended and a warning generated.  This works on the assumption that the attacker may be written in simple blocking style, so by suspending you are hopefully consuming their resources.   True protection from DOS can only be achieved by network devices (or eugenics :).

&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Proxy Servlet &lt;/h3&gt;&lt;div align=&quot;justify&quot;&gt;
The &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/servlets/ProxyServlet.html&quot;&gt;ProxyServlet&lt;/a&gt; uses the suspend/complete style and the jetty asynchronous &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/client/HttpClient.html%20HTTP&quot;&gt;client&lt;/a&gt; to implement a scalable Proxy server (or transparent proxy).

&lt;/div&gt;&lt;h3 align=&quot;justify&quot;&gt; Gzip Filter &lt;/h3&gt;&lt;p align=&quot;justify&quot;&gt;
The jetty &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/servlets/GzipFilter.html&quot;&gt;GzipFilter&lt;/a&gt; is a filter that implements dynamic compression by wrapping the response objects.  This filter has been enhanced to understand continuations, so that if a request is suspended in suspend/complete style and the wrapped response is passed to the asynchronous handler, then a ContinuationListener is used to finish the wrapped response.  This allows the GzipFilter to work with the asynchronous ProxyServlet and to compress the proxied responses.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;h2&gt;Where do you get it?&lt;/h2&gt;&lt;p&gt;You can read &lt;a href=&quot;http://wiki.eclipse.org/Jetty/Feature/Continuations&quot;&gt;about it&lt;/a&gt;, or &lt;a href=&quot;http://www.eclipse.org/jetty/downloads.php&quot;&gt;download&lt;/a&gt; it with &lt;a href=&quot;http://www.eclipse.org/jetty&quot;&gt;jetty&lt;/a&gt; or include it in your maven project like this &lt;a href=&quot;http://svn.cometd.com/trunk/cometd-java/server/pom.xml&quot;&gt;pom.xml&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt; &lt;br /&gt;&lt;/h2&gt;</description>
	<pubDate>Thu, 02 Jul 2009 11:11:39 +0000</pubDate>
</item>
<item>
	<title>Eric Rizzo: Screencast: Creating an Eclipse download package &quot;from scratch&quot;</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-518987099197087911.post-3704947999733060856</guid>
	<link>http://bewarethepenguin.blogspot.com/2009/07/screencast-creating-eclipse-download.html</link>
	<description>If the cave you've been living in does not have Internet service, then perhaps it will come as news to you that &lt;a href=&quot;http://www.eclipse.org/galileo/&quot;&gt;Galileo&lt;/a&gt; was successfully &lt;a href=&quot;http://www.eclipse.org/org/press-release/20090624_galileo.php&quot;&gt;released last week&lt;/a&gt;. It's a truly impressive feat to release so reliably so many projects &lt;a href=&quot;http://en.wikipedia.org/wiki/Eclipse_%28software%29#Releases&quot;&gt;year after year&lt;/a&gt; - you'd think that corporate internal and consumer software projects would take note and figure out what it is that enables the yearly release train to succeed when &lt;a href=&quot;http://www.codinghorror.com/blog/archives/000588.html&quot;&gt;so many projects deliver late, over budget, or not at all&lt;/a&gt;. But, I digress...&lt;br /&gt;&lt;br /&gt;Being a recent immigrant to the &lt;a href=&quot;http://www.theappleblog.com/&quot;&gt;Nation of Mac&lt;/a&gt;, I was among the glad to see the Cocoa port graduate from &lt;a href=&quot;http://wiki.eclipse.org/Development_Resources/Process_Guidelines/What_is_Incubation&quot;&gt;incubation&lt;/a&gt;. However, all is not 100% happy in Eclipse+Mac land. The &lt;a href=&quot;http://www.eclipse.org/epp/&quot;&gt;Eclipse Packaging Project (EPP)&lt;/a&gt;, the small group that produces those &lt;a href=&quot;http://www.eclipse.org/downloads/&quot;&gt;easily consumable downloads&lt;/a&gt;, the themed packages of plug-ins built on top of the core platform, has limited resources. And with limited people, they can not produce the packages for &lt;a href=&quot;http://www.eclipse.org/projects/project-plan.php?projectid=eclipse#target_environments&quot;&gt;every hardware/OS platform on which Eclipse is known to run&lt;/a&gt;. Of particular interest to me is the conspicuous absence of EPP package builds for 64-bit OS X. After &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=281501&quot;&gt;some discussion&lt;/a&gt;, it appears we the community can't make a 64-bit build happen until the first &quot;service release&quot; of Galileo, sometime in the Fall. I'm disappointed, but I (mostly) understand the position that EPP is in.&lt;br /&gt;&lt;br /&gt;So, what do we do if we want to make full use of all the 64-bit goodness of our operating system and Java 6 JVM? Well, it turns out that re-constructing the EPP packages from the &quot;base platform&quot; SDK is not all that difficult. Ekke Gentz has already blogged some &lt;a href=&quot;http://ekkescorner.wordpress.com/2009/06/30/galileo-epp-for-cocoa-64-bit/&quot;&gt;text+picture instructions&lt;/a&gt;; my screencast below brings the process to life.&lt;br /&gt;&lt;br /&gt;Note: the URL of the EPP update site used in the screencast is&lt;br /&gt;&lt;pre&gt;http://download.eclipse.org/technology/epp/packages/galileo/&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;        &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/518987099197087911-3704947999733060856?l=bewarethepenguin.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Jul 2009 22:25:48 +0000</pubDate>
	<author>noreply@blogger.com (Eric Rizzo)</author>
</item>
<item>
	<title>Kenn Hussey: On Falling...</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5620932762413494076.post-6293394229774849726</guid>
	<link>http://kenn-hussey.blogspot.com/2009/07/on-falling.html</link>
	<description>&lt;div&gt;It's been just under two years now since I left the mother ship for an &lt;a href=&quot;http://kenn-hussey.blogspot.com/2008/08/on-triads.html&quot;&gt;opportunity&lt;/a&gt; with Embarcadero, and I've seldom looked back... until today. On this day, when most other Canadians are celebrating the birth of our great nation and the freedom it affords its citizens, I'm faced with commemorating a new found freedom of my own. I've been exiled from &lt;a href=&quot;http://www.escapefromcubiclenation.com/&quot;&gt;Cubicle Nation&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;This isn't exactly the kind of change I had in mind when I wrote my last &lt;a href=&quot;http://kenn-hussey.blogspot.com/2009/06/on-galileo.html&quot;&gt;blog entry&lt;/a&gt;, but I'm committed to facing it with an open mind (seeing as I have no choice). I don't know what I'll be doing for income yet (if you have any suggestions, I'd love to hear them), but in the meantime I thought it would be an apt occasion to take another &lt;a href=&quot;http://www.wordle.net/&quot;&gt;wordle&lt;/a&gt; snapshot of my blog (exactly six months after &lt;a href=&quot;http://kenn-hussey.blogspot.com/2009/01/on-last-year-of-ohties.html&quot;&gt;the last one&lt;/a&gt;).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_5c_oC14Dr7M/SkvZ6IQ1RwI/AAAAAAAAAIw/5k5i_2p_yfA/s400/1July2009.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 211px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5353612174733690626&quot; /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So far, 2009 has been a &lt;a href=&quot;http://kenn-hussey.blogspot.com/2009/04/on-your-game-face.html&quot;&gt;challenging year&lt;/a&gt;. But, a friend of mine told me recently that a kick in the pants is still a step forward, and I'm inclined to agree. I really should be seeing this as more of a &lt;a href=&quot;http://kenn-hussey.blogspot.com/2008/10/on-beginnings-and-ends.html&quot;&gt;beginning than an end&lt;/a&gt;, and I'm sure that once I've landed with two feet firmly planted on my next venture, this will be obvious in hindsight. One thing is for certain, though. I'll not be looking back again.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5620932762413494076-6293394229774849726?l=kenn-hussey.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Jul 2009 22:22:01 +0000</pubDate>
	<author>noreply@blogger.com (Kenn Hussey)</author>
</item>
<item>
	<title>Chris Aniszczyk: Training for Eclipse Galileo and p2</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=2117</guid>
	<link>http://eclipsesource.com/blogs/2009/07/01/training-for-eclipse-galileo-and-p2/</link>
	<description>&lt;p&gt;As part of the Eclipse &lt;a href=&quot;http://www.eclipse.org/galileo&quot;&gt;Galileo&lt;/a&gt; release, we updated all of our training courses to reflect the latest release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/en/services/training/eclipse-rcp-development/&quot;&gt;Eclipse RCP Development (4 Days)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/en/services/training/eclipse-rcp-advanced-topics/&quot;&gt;Eclipse RCP Advanced Topics (3 Days)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/en/services/training/equinox-and-osgi/&quot;&gt;OSGi and Equinox (3 Days)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/en/services/training/equinox-and-osgi-primer/&quot;&gt;OSGi and Equinox Primer (1 Day)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/en/services/training/rap-for-java-developers/&quot;&gt;RAP for Java Developers (4 Days)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/en/services/training/rap-for-rcp-developers/&quot;&gt;RAP for RCP Developers (2 Days)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have also added two new courses to cover two popular topics, Equinox p2 and migrating to Galileo RCP:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/en/services/training/provisioning-eclipse-and-osgi-systems-with-p2/#lo-content&quot;&gt;Provisioning Eclipse and OSGi systems with p2 (2 days)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/en/services/training/migrating-to-galileo-rcp/#lo-content&quot;&gt;Migrating to Galileo RCP (2 days)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are also offering our courses online now. If you’re interested in any of these courses, please &lt;a href=&quot;mailto:training@eclipsesource.com&quot;&gt;email&lt;/a&gt; us.&lt;/p&gt;</description>
	<pubDate>Wed, 01 Jul 2009 18:41:04 +0000</pubDate>
</item>
<item>
	<title>Jens von Pilgrim: User Report: Migrate from oAW Xtext to TMF Xtext</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-4884093826755448868.post-6355060200754129698</guid>
	<link>http://jevopisdeveloperblog.blogspot.com/2009/07/user-report-migrate-from-oaw-xtext-to.html</link>
	<description>With Eclipse 3.5 comes the new version of Xtext, called TMF Xtext. Since I had to switch to Eclipse 3.5 in order to keep GEF3D running on the latest Eclipse version, I decided to migrate from the old openArchitecture Xtext (oAW Xtext) to the new TMF version.&lt;br /&gt;&lt;br /&gt;Fortunately the Xtext documentation contains a section about migrating from oAW Xtext to TMF Xtext. Frankly, I was a little bit afraid (never change a running system). But at least I hadn't implemented any content assist or other editor extensions yet, so I hoped that it wouldn't be too hard.&lt;br /&gt;&lt;br /&gt;Before you read on, please note that I'm only an Xtext &lt;i&gt;user&lt;/i&gt;. I don't know any internal details about Xtext. Maybe some of my problems can be solved more efficiently, if that is the case, I would be more then happy if you leave me a comment. My first intention was to migrate my already running grammar as fast as possible, with as few modifications as possible.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The Setting&lt;/h2&gt;&lt;br /&gt;I have written a model transformation language, and it consists of an Xtext grammar (with about 90 rules), an interpreter for executing the language, and other things which I didn't expected to be involved in the migration, as a debugger component or other user-interface stuff. An Xtend-based M2M transformation exists which modifies the generated ecore model in order to set some default values, add some workarounds for existing oAW bugs, and do other things. In order to migrate my application, I had to&lt;br /&gt;&lt;ol&gt; &lt;li&gt;migrate the grammar&lt;/li&gt; &lt;li&gt;adapt the M2M-transformation&lt;/li&gt;  &lt;li&gt;adapt client code which uses the model and the Xtext API&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;In the following old versions are highlighted with a light red back and the new ones with a light green background.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Migrating the Grammar&lt;/h2&gt;&lt;br /&gt;As described in the Xtext documentation, I had to replace &quot;Enum&quot; with &quot;enum&quot;, and add two new lines at the beginning of the grammar.&lt;br /&gt;&lt;br /&gt;Since &quot;with&quot; has become a keyword. Thus I had to rename &quot;with&quot; in my grammar :&lt;br /&gt;&lt;pre style=&quot;background-color: #ffeeee;&quot;&gt;&lt;code&gt;RuleXY: ... ( &quot;with&quot; with=Block)? ...&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;into&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot;&gt;&lt;code&gt;RuleXY: ... ( &quot;with&quot; &lt;b&gt;_&lt;/b&gt;with=Block)? ...&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This also caused some small changes in the model and the client code. Is there a way to use Xtext keywords as a reference names?&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Backtracking&lt;/h3&gt;&lt;br /&gt;Apparently the parser generation (or some settings) has changed, too. E.g., the following rule worked with the oAW Xtext version:&lt;br /&gt;&lt;pre style=&quot;background-color: #ffeeee;&quot;&gt;&lt;code&gt;ParameterReference: QualifiedParameterReference|SimpleParameterReference;&lt;br /&gt;SimpleParameterReference: type=Type (name=ID)?;  &lt;br /&gt;QualifiedParameterReference: type=Type name=ID;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The idea of these rules is to force the definition of a name in case of qualified parameter references and to make it optional in simple ones.&lt;br /&gt;Unfortunately these rules are not working with the new version. Since ANTLR is a LL-parser, there are some constraints on how to define the grammar. There is a &lt;a href=&quot;http://www.antlr.org/wiki/display/ANTLR3/How+to+remove+global+backtracking+from+your+grammar&quot;&gt;document&lt;/a&gt; explaining how to remove backtracking from a grammar, unfortunately some of the described techniques cannot be used with Xtext. In some cases I was able to fix the problem by rewriting my grammar, as in this example: I simply had to reorder the first rule:&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot;&gt;&lt;code&gt;ParameterReference: SimpleParameterReference|QualifiedParameterReference;&lt;br /&gt;SimpleParameterReference: type=Type (name=ID)?;  &lt;br /&gt;QualifiedParameterReference: type=Type name=ID;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;In some cases I couldn't find a solution (maybe it is possible, but I'm not an LL/LR-expert). Actually I'm not the first one with this problem, and there is a posting in the TMF newsgroup about this. If you cannot rewrite your grammar, you need backtracking (and lookahead). &lt;a href=&quot;http://dev.eclipse.org/newslists/news.eclipse.modeling.tmf/msg01108.html&quot;&gt;Thanks to this posting&lt;/a&gt;, I was able to fix the problem. I had to edit the MWE-file from&lt;br /&gt;&lt;pre style=&quot;background-color: #eeeeff;&quot;&gt;&lt;code&gt;&amp;lt;fragment class=&quot;org.eclipse.xtext.generator.AntlrDelegatingFragment&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;to&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot;&gt;&lt;code&gt;&amp;lt;fragment class=&quot;de.itemis.xtext.antlr.XtextAntlrGeneratorFragment&quot;&amp;gt;&lt;br /&gt;   &amp;lt;options k=&quot;2&quot; backtrack=&quot;true&quot; memoize=&quot;true&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/fragment&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Note that you have to install the itemis generator fragment from &lt;a href=&quot;http://download.itemis.com/updates&quot;&gt;http://download.itemis.com/updates&lt;/a&gt; as described in the Xtext documentation (page 62).&lt;br /&gt;Maybe I'm going to &quot;left factor&quot; my grammar in a future version, but for now I only wanted to get my application running.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Lexer Rules&lt;/h3&gt;&lt;br /&gt;In the oAW version, lexer rules were defined with the keyword &quot;native&quot;, which has been changed to &quot;terminal&quot;. Not mentioned in the migration guide yet: INT was redefined in the new version. I had rewritten the definition in the old version in order to remove the optional sign (as my language is handling this itself). This is the old INT definition:&lt;br /&gt;&lt;pre style=&quot;background-color: #ffeeee;&quot;&gt;&lt;code&gt;Native INT: ('-')?('0'..'9')+ &lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;And here's the new one:&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot;&gt;&lt;code&gt;terminal INT: ('0'..'9')+ &lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;In my case I could remove my own definition since the new one matches my requirements. In other cases, this might be a trap.&lt;br /&gt;&lt;br /&gt;According to the documentation, it should be possible to define the type of a terminal rule now. I tried this as follows:&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot;&gt;&lt;code&gt;terminal FLOAT returns ecore::EFloat: ('0'..'9')*'.'('0'..'9')+;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;As a matter of fact, the code is generated as expected, but the parser still returns a String, which leads to a ClassCastException. So I removed the type definition and added a convenient method to my model, as described below. I assume this is a bug or something, I will file a report later on ;-). Since the old version always returned Strings, my code was prepared for that, anyway.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;OrmPackage missing&lt;/h3&gt;&lt;br /&gt;I don't know exactly why or when, but at some point in time my grammar file contains got an error marker:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;- WrappedException: java.lang.ClassNotFoundException: com.sun.java.xml.ns.persistence.orm.OrmPackage&quot;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=281664&quot;&gt;bug seems to be fixed already&lt;/a&gt;, fortunately it is possible to generate the model and code from the grammar, even with this error.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Unassigned Actions&lt;/h3&gt;&lt;br /&gt;In the oAW Xtext version, a model element was assigned whenever a non-abstract rule was hit. My grammar contained the following rule:&lt;br /&gt;&lt;pre style=&quot;background-color: #ffeeee;&quot;&gt;&lt;code&gt;NullLiteral: &quot;null&quot;;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This rule is not working with the new TMF Xtext version. As found in the documentation &quot;by default the object to be returned by a parser rule is created lazily on the first assignment&quot;. Although I've read that passage, I was not aware of the consequences. In the new version, an element is not automatically created when the rule is hit, but only when an assignment is to be executed. That is, a rule which contains only terminals does not create a model element, as in the example above. While this first example is obvious, the problem is sometimes hidden. Here is another more tricky example:&lt;br /&gt;&lt;pre style=&quot;background-color: #ffeeee;&quot;&gt;&lt;code&gt;Block: &quot;{&quot; (statements+=BlockStatement)* &quot;}&quot;;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;If no &quot;BlockStatements&quot; are specified, that is in case of an empty block (&quot;{}&quot;), no block element is created at all. I posted that problem to the newsgroup, and Sebastian Zarnekow immediately &lt;a href=&quot;http://www.eclipse.org/newsportal/article.php?id=1189&amp;amp;group=eclipse.modeling.tmf#1189&quot;&gt;solved&lt;/a&gt; my problem (Thank you very much, Sebastian!).&lt;br /&gt;The solution is to use &lt;i&gt;unassigned actions&lt;/i&gt;, which forces the creation of an element of the specified type. So I had to change the rules above as follows:&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot;&gt;&lt;code&gt;NullLiteral: {NullLiteral} &quot;null&quot;;&lt;br /&gt;Block: {Block} &quot;{&quot; (statements+=BlockStatement)* &quot;}&quot;;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I figure this is a bitchy trap, especially if there is an optional assignment.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Model Changes&lt;/h2&gt;&lt;br /&gt;I'm already using an Xtend M2M-transformation to adjust the generated ecore model. TMF Xtext supports this mechanism, I simply had to rename my Xtend extension into MitraPostProcessor.ext (Mitra is the name of my language, by the way).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Enumeration NULL values&lt;/h3&gt;&lt;br /&gt;There are some adjustments necessary due to changed behaviour of Xtext. Most notable: There is no &quot;NULL&quot; value generated for enumerations. Also, it is not possible to define a hidden enumeration in the grammar, which might could have solved that problem. IMHO, this is a major drawback, as this makes a postprocessing of the created ecore file necessary.&lt;br /&gt;&lt;br /&gt;But they can be added to the M2M transformation. Unfortunately, I didn't got this problem solved with Xtend, I posted that to the &lt;a href=&quot;http://www.eclipse.org/newsportal/article.php?id=1174&amp;amp;group=eclipse.modeling.tmf#1174&quot;&gt;TMF newsgroup&lt;/a&gt;. This is at least one solution using Java, although I would prefer a pure Xtend solution:&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot;&gt;&lt;code&gt;process(ecore::EPackage p):&lt;br /&gt; addNullValue(p, &quot;VisibilityModifier&quot;) -&amp;gt;&lt;br /&gt; ... ;&lt;br /&gt;&lt;br /&gt;Void addNullValue(ecore::EPackage p, String toEnum):&lt;br /&gt; doAddNullValue( (ecore::EEnum) p.getEClassifier(toEnum) );&lt;br /&gt; &lt;br /&gt;Void doAddNullValue(ecore::EEnum e):&lt;br /&gt; JAVA de.feu.MitraPostProcessorHelper.addNullValue(org.eclipse.emf.ecore.EEnum);&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And this is the Java extension:&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot; class=&quot;Java:nocontrols:nogutter&quot; name=&quot;code&quot;&gt;public class MitraPostProcessorHelper {&lt;br /&gt;&lt;br /&gt; public static void addNullValue(org.eclipse.emf.ecore.EEnum e) {&lt;br /&gt;  for (EEnumLiteral literal : e.getELiterals()) {&lt;br /&gt;   literal.setValue(literal.getValue() + 1);&lt;br /&gt;  }&lt;br /&gt;  EEnumLiteral nullLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();&lt;br /&gt;  nullLiteral.setName(&quot;NULL&quot;);&lt;br /&gt;  nullLiteral.setLiteral(&quot;NULL&quot;);&lt;br /&gt;  nullLiteral.setValue(0);&lt;br /&gt;  e.getELiterals().add(0, nullLiteral);&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;In order to make a literal the default value, it must be the &lt;i&gt;first&lt;/i&gt; defined literal. This is why &lt;code&gt;e.getELiterals().add(0, nullLiteral);&lt;/code&gt; is required, simply adding the literal with &lt;code&gt;e.getELiterals().add(nullLiteral);&lt;/code&gt; doesn't work.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Java Body Annotation in the Ecore Model&lt;/h3&gt;&lt;br /&gt;In the old version, Xtext didn't create the genmodel and no code. I added this feature and I also edited the generated code after is was created using oAW extension. Since Xtext is doing the code generation now automatically, I didn't feel that comfortable with manually editing the generated model code anymore. So I decided to add Java annotations to the ecore model in order to add some tiny helper methods. This is how body annotations are added to an ecore model in Xtend:&lt;br /&gt;&lt;div style=&quot;width: 97%; height: 200px; overflow: auto;&quot;&gt;&lt;br /&gt;&lt;pre style=&quot;background-color: #eeeeee;&quot;&gt;&lt;code&gt;Void addJavaBodies(ecore::EPackage p):&lt;br /&gt; let ecorePackage = p.getEcorePackage():&lt;br /&gt; p.getEClassifier(&quot;Bounds&quot;).addOperation(&quot;isMany&quot;,&lt;br /&gt;     ecorePackage.getEClassifier(&quot;EBoolean&quot;),&lt;br /&gt;       'return upper==-1 || upper&amp;gt;1;') -&amp;gt;&lt;br /&gt;   ...;&lt;br /&gt;/*&lt;br /&gt;This is a hack in order to retrieve the ecore package itself. This is usually&lt;br /&gt;done with a Java extension, but I did not want to add a Java extension here.&lt;br /&gt;The trick is to retrieve the package by navigating to the container of an ecore&lt;br /&gt;type (here a String).&lt;br /&gt;*/&lt;br /&gt;cached ecore::EPackage getEcorePackage(ecore::EPackage p):&lt;br /&gt;  (ecore::EPackage)&lt;br /&gt;  ( ((ecore::EClass) (p.getEClassifier(&quot;MetamodelDeclaration&quot;)))&lt;br /&gt;    .getEStructuralFeature(&quot;type&quot;).eType.eContainer&lt;br /&gt;  );&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;create ecore::EOperation addOperation(ecore::EClassifier c, String strName, ecore::EClassifier type,  String strBody):&lt;br /&gt; setName(strName) -&amp;gt;&lt;br /&gt; setEType(type) -&amp;gt;&lt;br /&gt; eAnnotations.add(addBodyAnnotation(strBody)) -&amp;gt;&lt;br /&gt; ((ecore::EClass)c).eOperations.add(this);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;create ecore::EOperation addOperation(ecore::EClassifier c, String strName, ecore::EClassifier type, &lt;br /&gt; List parameters,&lt;br /&gt; String strBody):&lt;br /&gt; setName(strName) -&amp;gt;&lt;br /&gt; setEType(type) -&amp;gt;&lt;br /&gt; parameters.collect(e|((List)e).setParameter(this)) -&amp;gt;&lt;br /&gt; eAnnotations.add(addBodyAnnotation(strBody)) -&amp;gt;&lt;br /&gt; ((ecore::EClass)c).eOperations.add(this);&lt;br /&gt;&lt;br /&gt;create ecore::EParameter setParameter(List parameter, ecore::EOperation op):&lt;br /&gt; setName((String)parameter.get(0)) -&amp;gt;&lt;br /&gt; setEType((ecore::EClassifier) parameter.get(1)) -&amp;gt;&lt;br /&gt; op.eParameters.add(this)&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;create ecore::EAnnotation addBodyAnnotation(ecore::EOperation op, String strBody):&lt;br /&gt; setSource(&quot;http://www.eclipse.org/emf/2002/GenModel&quot;) -&amp;gt;&lt;br /&gt; this.createBody(strBody) -&amp;gt;&lt;br /&gt; op.eAnnotations.add(this);&lt;br /&gt;&lt;br /&gt;create ecore::EStringToStringMapEntry createBody(ecore::EAnnotation anno, String strBody):&lt;br /&gt; setKey(&quot;body&quot;) -&amp;gt;&lt;br /&gt; setValue(strBody) -&amp;gt;&lt;br /&gt; anno.details.add(this);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;API Changes&lt;/h2&gt;&lt;br /&gt;So far I found three API changes which required changes in my code. These changes are rather simple and briefly explained in the following.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;NodeUtil.getNode(..)&lt;/h3&gt;&lt;br /&gt;First of all, &lt;code&gt;NodeUtil.getNode(EObject);&lt;/code&gt; has changed. There is no type &lt;code&gt;Node&lt;/code&gt; anymore. I had to change my code from&lt;br /&gt;&lt;pre style=&quot;background-color: #ffeeee;&quot; class=&quot;Java:nocontrols:nogutter&quot; name=&quot;code&quot;&gt;Node node = NodeUtil.getNode(eobj);&lt;/pre&gt;&lt;br /&gt;to&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot; class=&quot;Java:nocontrols:nogutter&quot; name=&quot;code&quot;&gt;NodeAdapter adapter = NodeUtil.getNodeAdapter(eobj);&lt;br /&gt;AbstractNode node = null;&lt;br /&gt;if (adapter != null) {&lt;br /&gt; node = adapter.getParserNode();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Resources and Setup&lt;/h3&gt;&lt;br /&gt;For (JUnit) tests, I have to call a setup method in order to register Xtext's resource implementations and my model. This is now simply achieved via a generated setup method. This is the setup method I'm using now in JUnit tests:&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot; class=&quot;Java:nocontrols:nogutter&quot; name=&quot;code&quot;&gt;public static void setup() {&lt;br /&gt;   System.setProperty(&quot;org.eclipse.emf.ecore.EPackage.Registry.INSTANCE&quot;,&lt;br /&gt;   &quot;org.eclipse.emf.ecore.impl.EPackageRegistryImpl&quot;);&lt;br /&gt;   MitraStandaloneSetup.doSetup();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;No DSL-specific Editor Class&lt;/h3&gt;&lt;br /&gt;A little bit surprising at first is the absence of a DSL specific editor class, in my case &lt;code&gt;MitraEditor&lt;/code&gt;. Instead, the general Xtext editor class is used, DSL specifics are injected using Google Guice as described in the Xtext manual. Most surprising is the new syntax found in the plugin.xml which is used to inject things. Here is the declaration of my editor using the new notation (the plugin.xml is generated):&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot;&gt;&lt;code&gt;&amp;lt;extension point=&quot;org.eclipse.ui.editors&quot;&amp;gt;&lt;br /&gt;   &amp;lt;editor&lt;br /&gt;       class=&quot;de.feu.MitraExecutableExtensionFactory:org.eclipse.xtext.ui.core.editor.XtextEditor&quot;&lt;br /&gt;       contributorClass=&quot;org.eclipse.ui.editors.text.TextEditorActionContributor&quot;&lt;br /&gt;       default=&quot;true&quot;&lt;br /&gt;       extensions=&quot;mitra&quot;&lt;br /&gt;       id=&quot;de.feu.Mitra&quot;&lt;br /&gt;       name=&quot;Mitra Editor&quot;&amp;gt;&lt;br /&gt;   &amp;lt;/editor&amp;gt;&lt;br /&gt;&amp;lt;/extension&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The attribute &quot;class&quot; defines the Guice module to be created and the editor class. Unfortunately I need the editor class in order to add breakpoint markers (for my debugger plugin). The old version looks like this:&lt;br /&gt;&lt;pre style=&quot;background-color: #ffeeee;&quot; class=&quot;Java:nocontrols:nogutter&quot; name=&quot;code&quot;&gt;public class MitraBreakpointAdapterFactory implements IAdapterFactory {&lt;br /&gt; public Object getAdapter(Object adaptableObject, Class adapterType) {&lt;br /&gt;  if (adaptableObject instanceof MitraEditor) {&lt;br /&gt;    ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;How do I identify the mitra editor in the new version? First of all, instead of a generated DSL specific editor, an &lt;code&gt;XtextEditor&lt;/code&gt; is used (this class is found in plugin &lt;code&gt;org.eclipse.xtext.ui.core&lt;/code&gt;). Then the current language can be retrieved via &lt;code&gt;getLanguageName()&lt;/code&gt;. This is the new version:&lt;br /&gt;&lt;pre style=&quot;background-color: #eeffee;&quot; class=&quot;Java:nocontrols:nogutter&quot; name=&quot;code&quot;&gt;public Object getAdapter(Object adaptableObject, Class adapterType) {&lt;br /&gt; if (adaptableObject instanceof XtextEditor) {&lt;br /&gt;  XtextEditor xtextEditor = (XtextEditor) adaptableObject;&lt;br /&gt;  if (&quot;de.feu.Mitra&quot;.equals(xtextEditor.getLanguageName())) {&lt;br /&gt;  ...&lt;/pre&gt;&lt;br /&gt;Note that the name of the editor class has to be changed in the plugin.xml of the debug plugin accordingly.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Summary&lt;/h2&gt;&lt;br /&gt;After applying the changes described above, my language worked as expected (at least all the tests are green and my application is running). Since I haven't written any extensions for content assist or other UI things, I only had to adjust the grammar, my M2M-transformation and the code a little bit. If you do not have an M2M-transformation, you may have to add it in order to add the missing NULL values for enumerations -- I assume this is the case quite often.&lt;br /&gt;&lt;br /&gt;TMF Xtext adds some very nice features (grammar mixings, improved linking/cross references feature with ILinkingService, serialization with formatter, return types,  and tree rewrite actions). These features will simplify my hand written code immensely, and I'm looking forward using them. Last but not least, since Xtext is now part of the Eclipse modeling package, it is much easier to install an Xtext based DSL and editor.&lt;br /&gt;&lt;br /&gt;Last but not least: Kudos to the Xtext team! The new version looks really nice! And many thanks for the great and fast (newsgroup) support!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4884093826755448868-6355060200754129698?l=jevopisdeveloperblog.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Jul 2009 18:31:13 +0000</pubDate>
	<author>noreply@blogger.com (Jens v.P.)</author>
</item>
<item>
	<title>Dave Carver: Eclipse Galileo: Setting up PDT 2.1 and XDebug support</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1585332946379204379.post-7697139519093047446</guid>
	<link>http://intellectualcramps.blogspot.com/2009/07/eclipse-galileo-setting-up-pdt-21-and.html</link>
	<description>Typically when working on PHP files I don't have much of a need to setup a debugger.  However, I've recently had to go through some really nasty PHP 4 code.   It was one big massive mess of nested if then else statements no functions, and a crap load of global variables.  PHP is a good utility language, but some of the people writing the code need to read Uncle Bob's Clean Code book.&lt;br /&gt;&lt;br /&gt;My development machine is a Ubuntu box and I have eclipse Galileo Java EE package installed with PDT 2.1 added as well.   There is a decent blog entry at Hodge title&lt;br /&gt;&lt;a href=&quot;http://www.64bitjungle.com/tech/debugging-php-applications-with-xdebug-and-eclipse-pdt/&quot;&gt;Debugging PHP Applications with Xdebug and Eclipse PDT&lt;/a&gt;.   However you can simplify some of the steps.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use apt-get or Synaptic to install apache2, php5, php5-cli, and the php5-xdebug module.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Go to the terminal and restart apache2: &lt;code&gt;sudo /etc/init.d/apache2 restart&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Follow the rest of the steps outline in Hodge's article for making sure XDeubg is turned on and enabled.&lt;/li&gt;&lt;/ol&gt;There is no need to download and compile xdebug yourself, as it's already in the Ubuntu apt repository.  If you follow the rest of his steps for setting up PDT for XDebug, you should be ready to debug.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1585332946379204379-7697139519093047446?l=intellectualcramps.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Jul 2009 17:58:10 +0000</pubDate>
	<author>noreply@blogger.com (David Carver)</author>
</item>
<item>
	<title>Heiko Behrens: Xtext at DemoCamp London in June 2009</title>
	<guid isPermaLink="false">http://www.1160pm.net/?p=590</guid>
	<link>http://www.1160pm.net/2009/07/01/xtext-at-democamp-london-in-june-2009/</link>
	<description>&lt;p&gt;This Monday the &lt;a href=&quot;http://skillsmatter.com/event/java-jee/eclipse-democamp-2009&quot;&gt;Eclipse DemoCamp took place in London at Skills Matter&lt;/a&gt;. You will find a &lt;a href=&quot;http://www.infoq.com/news/2009/06/eclipse-democamp-london&quot;&gt;comprehensive review at InfoQ&lt;/a&gt; by &lt;a href=&quot;http://alblue.blogspot.com/&quot;&gt;Alex Blewitt&lt;/a&gt; where you can read about &lt;a href=&quot;http://sourceforge.net/projects/nattable&quot;&gt;NatTable&lt;/a&gt; (Dan Pollitt) and &lt;a href=&quot;http://www.jquantlib.org/&quot;&gt;JQantLib&lt;/a&gt;/OSGi (Richard Gomes) as well as &lt;a href=&quot;http://www.xtext.org&quot;&gt;Xtext&lt;/a&gt;. And thanks to &lt;a href=&quot;http://www.erenaykin.net/&quot;&gt;Eren Aykin&lt;/a&gt; you will find a &lt;a href=&quot;http://skillsmatter.com/podcast/java-jee/itemis-xtext-developing-domain-specific-languages&quot;&gt;video podcast&lt;/a&gt; of the latter, too!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This time I tried to spread the idea of DSLs with chess and different ways of expressing moves within the game. In the first part of my presentation I processed cryptic notations like “Rd2-c2″ or more natural equivalents such as “rook at d2 moves to c2″ to work with them as true Java objects and eventually visualized chess fields. Second, I tried to emphasize the value of DSLs in today’s software projects where we implemented another DSL live at the DemoCamp in the end. You will find &lt;a href=&quot;http://www.slideshare.net/HeikoB/xtext-at-eclipse-democamp-london-in-june-2009&quot;&gt;my slides at SlideShare&lt;/a&gt; again.&lt;/p&gt;
&lt;p&gt;It was quite informative to chat with the Eclipse folks in London afterwards. Most of them have a pragmatic view at modeling and tools in general. I really appreciate this! Thank you, &lt;a href=&quot;http://neilbartlett.name/blog/2009/06/26/calling-all-dsl-nuts-and-scaliens-in-london/&quot;&gt;Neil&lt;/a&gt;, for organizing this event and &lt;a href=&quot;http://twitter.com/njbartlett/statuses/2177688004&quot;&gt;inviting via twitter&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/HeikoB/xtext-at-eclipse-democamp-london-in-june-2009&quot;&gt;Slides at SlideShare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://skillsmatter.com/podcast/java-jee/itemis-xtext-developing-domain-specific-languages&quot;&gt;Video Podcast at Skills Matter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/news/2009/06/eclipse-democamp-london&quot;&gt;Review at InfoQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Source Code&lt;/h3&gt;
&lt;p&gt;Loading chess DSL text files as Java objects:&lt;/p&gt;
&lt;pre class=&quot;brush: java; collapse: true; toolbar: true;&quot;&gt;package org.xtext.example.chess;

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.xtext.resource.XtextResourceSet;
import org.xtext.example.ChessStandaloneSetup;

public class JavaTest {

	public static void main(String[] args) {
		String filename = &quot;some/path/MyModel.chess&quot;;
		Game g = getGame(filename);
		System.out.println(g.getWhitePlayer() + &quot; vs. &quot; + g.getBlackPlayer());
		for (Move m : g.getMoves())
			System.out.println(m.getSource() + &quot; to &quot; + m.getDest());
	}

	private static Game getGame(String filename) {
		ChessStandaloneSetup.doSetup();
		ResourceSet rs = new XtextResourceSet();
		Resource res = rs.getResource(URI.createFileURI(filename), true);
		return (Game) res.getContents().get(0);
	}

}&lt;/pre&gt;</description>
	<pubDate>Wed, 01 Jul 2009 13:44:11 +0000</pubDate>
</item>
<item>
	<title>Ekkehard Gentz: [galileo] Manage Plug-ins (bundles) of Eclipse Target Platform</title>
	<guid isPermaLink="false">http://ekkescorner.wordpress.com/?p=332</guid>
	<link>http://ekkescorner.wordpress.com/2009/07/01/galileo-manage-plug-ins-bundles-of-eclipse-target-platform/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Part 6 of my Galileo Reviews around Target Platforms. An Overview of this blog series can be found &lt;a href=&quot;http://ekkescorner.wordpress.com/blog-series/pde-and-targetplatform/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We finished part 5 with a Target Definition containing Plug-ins (bundles) from different kinds of locations:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-definition-w-location-from-directory.png?w=563&amp;amp;h=183&quot; title=&quot;target definition w location from directory&quot; height=&quot;183&quot; width=&quot;563&quot; alt=&quot;target definition w location from directory&quot; class=&quot;alignnone size-full wp-image-319&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Fine-tuning the Selection of Plug-ins&lt;/h3&gt;
&lt;p&gt;At the moment all Plug-ins from all added Locations are selected. You can display the Content together with your Locations on the first page checking “&lt;strong&gt;Show Plug-in content&lt;/strong&gt;” …&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/show-plugin-content.png?w=178&amp;amp;h=30&quot; title=&quot;show plugin content&quot; height=&quot;30&quot; width=&quot;178&quot; alt=&quot;show plugin content&quot; class=&quot;alignnone size-full wp-image-334&quot; /&gt;&lt;/p&gt;
&lt;p&gt;… or you switch to the “&lt;strong&gt;Content&lt;/strong&gt;” Tab where you have some more control.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-content-group-by.png?w=128&amp;amp;h=131&quot; title=&quot;Target Content Group By&quot; height=&quot;131&quot; width=&quot;128&quot; alt=&quot;Target Content Group By&quot; class=&quot;alignnone size-full wp-image-335&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can check if &lt;strong&gt;Source Bundles&lt;/strong&gt; should be shown or not and also &lt;strong&gt;group&lt;/strong&gt; the content:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Group by None (plain view, all Plug-ins sorted by ID)&lt;/li&gt;
&lt;li&gt;Group by Filepath&lt;/li&gt;
&lt;li&gt;Group by Location&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And as usual there’s a &lt;strong&gt;Search&lt;/strong&gt; field to make it easy to find Plug-ins:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-content-search.png?w=334&amp;amp;h=262&quot; title=&quot;Target Content Search&quot; height=&quot;262&quot; width=&quot;334&quot; alt=&quot;Target Content Search&quot; class=&quot;alignnone size-full wp-image-336&quot; /&gt;&lt;/p&gt;
&lt;p&gt;But the most important is the little ckeckbox which allows you to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select Plug-ins&lt;/li&gt;
&lt;li&gt;Deselect Plug-ins&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now its easy for you to fine-tune your Plug-ins and save the selection in the Target Definition file.&lt;/p&gt;
&lt;p&gt;There’s also the option to “Add Required” – you can test if after Selecting / Deselecting all Required Bundles are selected in your Target Definition.&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;em&gt;Attention: this option perhaps Selects Plug-ins you Deselected before without giving you an information which Plug-ins are re- selected to fullfill the requirements !&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Defining the Environment&lt;/h3&gt;
&lt;p&gt;Beside the “Content” tab there’s also an “&lt;strong&gt;Environment&lt;/strong&gt;” tab:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-definition-environment-tab.png?w=414&amp;amp;h=402&quot; title=&quot;Target Definition Environment Tab&quot; height=&quot;402&quot; width=&quot;414&quot; alt=&quot;Target Definition Environment Tab&quot; class=&quot;alignnone size-full wp-image-358&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If your Target Environment is the same as your IDE (running Host platform) is running from, then you can leave this empty.&lt;/p&gt;
&lt;p&gt;But its usual that you have some different Environments where your product should run – even if you only develop for one OS.&lt;/p&gt;
&lt;p&gt;per ex. under OSX you should test and run under JVM 5 cocoa 32-bit, JVM 5 cocoa 64-bit, JVM 6 cocoa 64-bit, JVM 5 carbon.&lt;/p&gt;
&lt;p&gt;Its a good idea at first to start with the same Environment then your IDE is running and later duplicate the Target Definition file for different Environments.&lt;/p&gt;
&lt;p&gt;Or another strategy could be to put all (OS – specific fragments etc) into one Target Platform Definition and have different Launch configurations using different Environments / Plug-ins / Fragments. But thats a story for another blog and outside of the “Galileo Review Scope”.&lt;/p&gt;
&lt;p&gt;The only thing you should have in mind now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if the Environment is empty – the Environment from your running Host is used&lt;/li&gt;
&lt;li&gt;if you enter values for the Environment this will be used as initial values if you create new Launch Configurations&lt;/li&gt;
&lt;li&gt;In your Launch Configurations you can overwrite the values from your Target definition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lets go back to the Preferences Page “&lt;strong&gt;Preferences -&amp;gt; Plug-in Development -&amp;gt; Target Platform&lt;/strong&gt;“&lt;/p&gt;
&lt;h3&gt;Updating Plug-ins (bundles) of your Target Platform&lt;/h3&gt;
&lt;p&gt;The Preference Page shows the active and all available Target Platforms:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/active-and-available-target-platforms.png?w=431&amp;amp;h=266&quot; title=&quot;active and available target platforms&quot; height=&quot;266&quot; width=&quot;431&quot; alt=&quot;active and available target platforms&quot; class=&quot;alignnone size-full wp-image-360&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As you already learned you can &lt;strong&gt;add&lt;/strong&gt; (and &lt;strong&gt;move&lt;/strong&gt;) or &lt;strong&gt;remove&lt;/strong&gt; Target Definitions from here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit…&lt;/strong&gt; is nearly the same then from the Target Definition Editor described above.&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;em&gt;Hint: I had sometimes the problem, that my selections of Plug-ins were destroyed, esp. if using the search-field on the Contents page, but it wasn’t easy reproduceable. So its a good idea to have a backup or put the Target definitions under CVS – then its easy to compare and restore.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;To see if there are &lt;strong&gt;newer versions of your Plug-ins&lt;/strong&gt; you can start a “&lt;strong&gt;Reload…&lt;/strong&gt;” – your Sources will be contacted and newer Plug-ins fetched. Double-clicking to Edit the Target Definition does the same job.&lt;/p&gt;
&lt;p&gt;But this works only, if its the &lt;strong&gt;same version&lt;/strong&gt; and only the &lt;strong&gt;Qualifier changed&lt;/strong&gt;. This means its great and easy to use if you always need the newest I-Build of the same Version.&lt;/p&gt;
&lt;p&gt;If you need a new Version (Update), then you should &lt;strong&gt;duplicate&lt;/strong&gt; the Target Definition (do this in your Workspace project), change the title and name to reflect the new version and select the Plug-ins with the new Version or choose another Software Site or Directory. Then its also easy to test per ex. 1.0.0.M1 and 1.0.0.M2 by switching the active Target Platform from Preferences.&lt;/p&gt;
&lt;p&gt;The next part of my blog series will explain you all the new cool views of Eclipse 3.5 helping you to get more informations about the Plug-ins from IDE and Target Platform.&lt;/p&gt;
Posted in Eclipse, Equinox, Galileo, P2, PDE  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ekkescorner.wordpress.com/332/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/ekkescorner.wordpress.com/332/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ekkescorner.wordpress.com/332/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/ekkescorner.wordpress.com/332/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ekkescorner.wordpress.com/332/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/ekkescorner.wordpress.com/332/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ekkescorner.wordpress.com/332/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/ekkescorner.wordpress.com/332/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ekkescorner.wordpress.com/332/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/ekkescorner.wordpress.com/332/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=ekkescorner.wordpress.com&amp;amp;blog=7691743&amp;amp;post=332&amp;amp;subd=ekkescorner&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Jul 2009 13:25:31 +0000</pubDate>
</item>
<item>
	<title>Laurent Goubet: Acceleo 0.8 is out</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3658502096185788177.post-6875067780517908893</guid>
	<link>http://eclipsemde.blogspot.com/2009/07/acceleo-08-is-out.html</link>
	<description>You might already know &lt;a href=&quot;http://www.acceleo.org/pages/home/en&quot;&gt;Acceleo 2.6&lt;/a&gt;, the open source model-to-text generator, and wonder how version 2.6 could come down to 0.8. The reason is quite simple : after four years of development outside of Eclipse, Acceleo is now taking a turn (for the better we hope :)) since we began rewriting it within Eclipse as the implementation of the OMG &lt;a href=&quot;http://www.omg.org/spec/MOFM2T/1.0/&quot;&gt;MOF Model to text Transformation Language (MOFM2T)&lt;/a&gt; specification. This change and our becoming an &lt;a href=&quot;http://wiki.eclipse.org/M2T/MTL_Relaunch_Plan&quot;&gt;Eclipse-hosted project&lt;/a&gt; calls for a mandatory incubation period, thus version numbers &quot;0.x&quot;.&lt;br /&gt;&lt;br /&gt;Acceleo 0.8 already offers basic solutions to &lt;span style=&quot;font-weight: bold;&quot;&gt;migrate existing Acceleo 2.x templates to the new syntax&lt;/span&gt;. This migration is still a draft and we are working on improving it so that most &quot;old&quot; templates can be migrated to the new syntax automatically, or with the least amount of manual editing needed. Compatibility with Eclipse itself is detailed on &lt;a href=&quot;http://wiki.eclipse.org/Acceleo#Compatibility&quot;&gt;Acceleo wiki page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This first release of Acceleo as the implementation of the MOFM2T specification already provides most of the tooling that can be expected from an M2T generator. A succinct list can be found on the &lt;a href=&quot;http://wiki.eclipse.org/Acceleo/New_And_Noteworthy&quot;&gt;New and noteworthy wiki page&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3658502096185788177-6875067780517908893?l=eclipsemde.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Jul 2009 13:25:07 +0000</pubDate>
	<author>noreply@blogger.com (Laurent Goubet)</author>
</item>
<item>
	<title>Thomas ten Cate: New build instructions</title>
	<guid isPermaLink="false">http://eclipsefp.wordpress.com/?p=78</guid>
	<link>http://eclipsefp.wordpress.com/2009/07/01/new-build-instructions/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Because of many problems I experienced with Darcs, I converted the EclipseFP repository to Git. I really like the clean and simple model and UI of Darcs, and I’m sorry to see it go, but it was simply too slow and too unreliable. Also, I removed all dependencies on Cohatoe. Without further ado, here are the new and improved instructions in case anyone wants to test-drive my current work.&lt;/p&gt;
&lt;p&gt;As usual, this assumes that you have GHC, cabal-install, and git. I tested only on Ubuntu 9.4, but there is no reason why it shouldn’t work on other Unix platforms. There may still be some issues on Windows.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get &lt;a href=&quot;http://www.eclipse.org/downloads/&quot;&gt;Eclipse Galileo&lt;/a&gt; (3.5), the distribution named “Eclipse for RCP/Plug-in Developers”. Extraction equals installation.&lt;/li&gt;
&lt;li&gt;Get the Scion source:&lt;br /&gt;
&lt;code&gt;git clone git://github.com/ttencate/scion.git&lt;/code&gt;&lt;br /&gt;
(&lt;a href=&quot;http://github.com/ttencate/scion/tree/master&quot;&gt;My &lt;code&gt;master&lt;/code&gt; branch&lt;/a&gt; corresponds to &lt;a href=&quot;http://github.com/nominolo/scion/tree/multi_proto_server&quot;&gt;nominolo’s &lt;code&gt;multi_proto_server&lt;/code&gt; branch&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;Build and install Scion, the library as well as the server program:&lt;br /&gt;
&lt;code&gt;cd scion/lib&lt;br /&gt;
cabal install&lt;br /&gt;
cd ../server&lt;br /&gt;
cabal install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Get the EclipseFP source:&lt;br /&gt;
&lt;code&gt;git clone git://github.com/ttencate/eclipsefp.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Import all Eclipse projects from these repositories into Eclipse. There are 26, so the &lt;a href=&quot;http://eclipse-tools.sourceforge.net/projecttransfer/&quot;&gt;Multi Project Import/Export&lt;/a&gt; plugin might come in handy.&lt;/li&gt;
&lt;li&gt;Wait for the build to fail. Yes, that’s right. It will complain about missing files, because ANTLR generated some that Eclipse doesn’t yet know about. Refresh the &lt;code&gt;net.sf.eclipsefp.haskell.core.jparser&lt;/code&gt; project, then wait for the build to succeed. (Thanks to Björn Peemöller for &lt;a href=&quot;http://eclipsefp.wordpress.com/2009/06/15/public-code-release/#comment-41&quot;&gt;pointing this out&lt;/a&gt;!)&lt;/li&gt;
&lt;li&gt;Hit Run, Run As, Eclipse Application.&lt;/li&gt;
&lt;li&gt;In the new Eclipse window that (hopefully) pops up, set the location of the Scion server via Window, Preferences, Haskell, Scion. If you installed it in a fairly standard location, the Autodetect button should do the trick; otherwise, just Browse.&lt;/li&gt;
&lt;li&gt;If something doesn’t work, turn on tracing. In the Run Configurations dialog, on the Tracing tab, you can enable tracing options for various plug-ins. These will output to the Console at the bottom of the host Eclipse window. To see the traffic between the Scion client and server, turn on the logs for &lt;code&gt;net.sf.eclipsefp.haskell.scion.client&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A known issue is that you have to save a file before it gets loaded into Scion, so you don’t get type tooltips and go-to-definition until then. This will be resolved in the near future, maybe tomorrow. After nine consecutive days of work, I’m taking a day off now.&lt;/p&gt;
&lt;p&gt;Again, please let me know if you tried this. Also let me know if something didn’t work, so I can improve it!&lt;/p&gt;
  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/eclipsefp.wordpress.com/78/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/eclipsefp.wordpress.com/78/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/eclipsefp.wordpress.com/78/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/eclipsefp.wordpress.com/78/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/eclipsefp.wordpress.com/78/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/eclipsefp.wordpress.com/78/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/eclipsefp.wordpress.com/78/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/eclipsefp.wordpress.com/78/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/eclipsefp.wordpress.com/78/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/eclipsefp.wordpress.com/78/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=eclipsefp.wordpress.com&amp;amp;blog=7738156&amp;amp;post=78&amp;amp;subd=eclipsefp&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Jul 2009 10:35:31 +0000</pubDate>
</item>
<item>
	<title>Jerome Benois: Quelques news Spring et Acceleo</title>
	<guid isPermaLink="false">urn:md5:1b8a36fb5a3a4604602be92073b6d75a</guid>
	<link>http://blog.benois.fr/post/2009/07/01/Quelques-news-Spring-et-Acceleo</link>
	<description>&lt;p&gt;Je suis très heureux d'annonçer la sortie imminente de la nouvelle édition
de &lt;strong&gt;&quot;Spring par la pratique&quot;&lt;/strong&gt;. La parution en librairie est
prévu pour &lt;strong&gt;le 9 Juillet 2009&lt;/strong&gt; et la version ebook est d'ores et
déjà disponible.&lt;/p&gt;
&lt;p&gt;Un grand bravo à Thierry Templier, Arnaud Cogoluègnes et Julien Dubois qui
ont fait un travail de titan sur cette nouvelle version. Vous y trouverez
toutes les nouveautés de Spring 2.5 et Spring 3.0 ainsi que des nouveaux
chapitres sur Spring Batch ou encore Spring DM.&lt;/p&gt;
&lt;p&gt;J'ai eu l'occasion de participer modestement à cette aventure et de
contribuer une annexe traitant de l'industrialisation des développements Spring
dans Eclipse. Vous devez vous doutez que cette industrialisation est basée sur
une approche dirigée par les modèles et utilise le générateur Acceleo &lt;img src=&quot;http://blog.benois.fr/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Cette nouvelle version atteignant pas moins de 680 pages, les annexes ne
seront pas inclus dans l'édition. Mais elles seront bientôt disponibles pour
tous en téléchargement sur le site dédié créé pour l'occasion : &lt;a href=&quot;http://www.springparlapratique.org&quot; hreflang=&quot;fr&quot;&gt;http://www.springparlapratique.org&lt;/a&gt;. La listes des annexes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Annexe A : SpringIDE&lt;/li&gt;
&lt;li&gt;Annexe B : Développement OSGi dans Eclipse&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Annexe C : Industrialisation des développements Spring dans
Eclipse&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aussi, je profite de ce billet pour relayer l'annonçe de Freddy sur un
événement à ne pas manquer &lt;strong&gt;&quot;Eclipse Acceleo Day&quot;&lt;/strong&gt;. La
communauté Acceleo se retrouvera le &lt;strong&gt;10 Juillet 2009 à Nantes&lt;/strong&gt;.
Cette événement se déroulera pendant les 10ème RMLL. Vous trouverez toutes les
informations ainsi que le programme complet &lt;a href=&quot;http://www.acceleo.org/wiki/index.php/EclipseAcceleoDay&quot; hreflang=&quot;en&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Inscrivez-vous vite, il ne reste que peu de temps avant la clôture des
inscriptions !&lt;/p&gt;</description>
	<pubDate>Wed, 01 Jul 2009 10:00:00 +0000</pubDate>
</item>
<item>
	<title>Alex Radeski: 64bit Cocoa Galileo Keyboard Problem Fixed (kinda)</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3650353534688561475.post-4016215621258583241</guid>
	<link>http://ezaero.blogspot.com/2009/06/64bit-cocoa-galileo-keyboard-problem.html</link>
	<description>I refused to give in to my keyboard problems I posted about &lt;a href=&quot;http://ezaero.blogspot.com/2009/06/eclipse-galileo-mac-64bit-cocao-yay-no.html&quot;&gt;yesterday&lt;/a&gt; and it looks like a bit of perseverance has paid off.&lt;br /&gt;&lt;br /&gt;My problem was to do the the Microsoft Keyboard Mac driver (no surprises there). Specifically the keyboard is a PC keyboard, and it also has a British layout. This is significant because the Mac British keyboard layout is fairly different, and although it worked with Gailieo the keys were all mapped incorrectly.&lt;br /&gt;&lt;br /&gt;In the image below you can see the Microsoft British layout. With this selected, neither the USB Keyboard or my MBP keyboard worked in Galilieo. So I searched around and came across a helpful fellow who produces a &lt;a href=&quot;http://www.gingerbeardman.com/UK.keylayout/&quot;&gt;home brew British PC Keyboard layout&lt;/a&gt; (also seen below). With this installed I have British keys, and 64 bit Galileo, yay!&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_TXM77jBy5IE/Skp4cWpbJ_I/AAAAAAAAAGM/k25Cdm67IyY/s1600-h/MacInputMapping.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_TXM77jBy5IE/Skp4cWpbJ_I/AAAAAAAAAGM/k25Cdm67IyY/s320/MacInputMapping.png&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 243px; height: 197px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5353223535594252274&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3650353534688561475-4016215621258583241?l=ezaero.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Jul 2009 08:35:11 +0000</pubDate>
	<author>noreply@blogger.com (alexr)</author>
</item>
<item>
	<title>Gorkem Ercan: New Java for S60</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-29853730.post-4461984029759300619</guid>
	<link>http://feedproxy.google.com/~r/Developing/~3/dqrMQ-KuIPI/new-java-for-s60.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://betalabs.nokia.com/apps/nokia-java-runtime-20-for-s60&quot; target=&quot;_blank&quot;&gt;Nokia Java Runtime 2.0 for S60&lt;/a&gt; (JRT 2.0) has been released for beta testing and now available from &lt;a href=&quot;http://www.nokia.com/&quot; target=&quot;_blank&quot;&gt;Nokia&lt;/a&gt; beta labs &lt;a href=&quot;http://betalabs.nokia.com/&quot; target=&quot;_blank&quot;&gt;site&lt;/a&gt;. This is a package that upgrades the Java runtime on the phone (tested with &lt;a href=&quot;http://www.forum.nokia.com/devices/5800_XpressMusic&quot; target=&quot;_blank&quot;&gt;Nokia 5800 XpressMusic&lt;/a&gt;, and &lt;a href=&quot;http://www.forum.nokia.com/devices/N97&quot; target=&quot;_blank&quot;&gt;N97&lt;/a&gt;) with this new one. This is the first time we are testing the independent release/upgrades of Java Runtime from S60 releases. In the future this will allow us to deliver the latest and greatest JRT to older phones. &lt;/p&gt;  &lt;p&gt;Some of the new features and improvements that will be noticeable (also listed on release notes) are one-click application installation, application launch user experience, and execution performance. I must tell about a feature that I am proud of and can be interesting to the readers of this blog. The Java installer in JRT 2.0 (the application that installs midlets) is itself a Java application. In fact, the UI(prompts etc. ) for the installer is developed using eSWT. I am very excited about the new installer because it proves that eSWT can be used to create native looking UIs, even ones that are integrated to the system.&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29853730-4461984029759300619?l=www.gorkem-ercan.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/b_yw5Za-ROEjV3ZH-ZZjYrLZgtk/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/b_yw5Za-ROEjV3ZH-ZZjYrLZgtk/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/b_yw5Za-ROEjV3ZH-ZZjYrLZgtk/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/b_yw5Za-ROEjV3ZH-ZZjYrLZgtk/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Developing?a=dqrMQ-KuIPI:iP8_KVe0q1Q:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Developing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img width=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/Developing/~4/dqrMQ-KuIPI&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Jul 2009 08:09:15 +0000</pubDate>
	<author>noreply@blogger.com (gorkem)</author>
</item>
<item>
	<title>Thomas ten Cate: Compiling and error reporting</title>
	<guid isPermaLink="false">http://eclipsefp.wordpress.com/?p=50</guid>
	<link>http://eclipsefp.wordpress.com/2009/06/30/compiling-and-error-reporting/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;During the last few days, I have been reinstating error reporting. Previously, EclipseFP would call GHC, collect its output in a Java string, and send that string off to Cohatoe (the now defunct bridge from Java to Haskell). A Haskell module would parse the GHC output using Parsec, return the result back to Java, where EclipseFP would do fancy things with the parsed output.&lt;/p&gt;
&lt;p&gt;If this all sounds very roundabout, you’re right. We are already interfacing with Haskell in the form of the Scion server, so why not let it do the compiling and send us (EclipseFP) the result in a formatted way? Thoughts in this direction are under way, but currently hampered by a few factors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scion talks with the GHC API, which is single-threaded. This means that during background compiles, every Scion-based function in the IDE would stop working. It should be possible to fix this by letting Scion itself do background compilation, while still servicing requests that do not need to communicate with the GHC API directly, but this requires much work inside the Scion server.&lt;/li&gt;
&lt;li&gt;Ideally, when a Cabal file is present, Scion should let Cabal do the building. Unfortunately, Cabal does not play well as a library, because errors will terminate the program. This has been fixed in the upcoming Cabal 1.8, to be released along with GHC 6.12.1 in September.&lt;/li&gt;
&lt;li&gt;When a Cabal file is not present, Scion should do something along the lines of “ghc –make”. However, the make functionality is currently still interwoven with the compiler itself. A consequence is that compilation results are only available after all modules have been compiled. A callback for progress reports is in the works for GHC 6.12.1.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the light of all these obstacles (especially the first one, which cannot be solved by installing a HEAD build of GHC) I decided to keep the current way of calling GHC as an external process. However, this meant that the output parsing had to be rewritten in Java. Moreover, because compiling a large project might take a while,  gathering up all output and processing it all at once is not the best approach. My new parser works directly on the output stream from the GHC process, so all errors will appear live in the IDE as soon as GHC spits them out.&lt;/p&gt;
&lt;p&gt;With that in place, I sprinkled on some UI code (oh, this makes it sound so easy…) and got things working again. Like error squigglies:&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;621&quot; alt=&quot;&quot; src=&quot;http://eclipsefp.files.wordpress.com/2009/06/error-highlighting.png?w=621&amp;amp;h=387&quot; class=&quot;alignnone size-full wp-image-57&quot; height=&quot;387&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can hover over the error to get the message. Note that an error marker is also shown in the left margin, and next to the scrollbar. This last one is very convenient if you want to jump to an error in a large source file. These are the kinds of features that Eclipse gives you for free, which is the reason why I chose to do Haskell in Eclipse in the first place. Unfortunately, an error marker on the icon of the editor’s tab is more difficult, so I left that out for now.&lt;/p&gt;
&lt;p&gt;The Project Explorer now also shows error markers on files that do not compile:&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;213&quot; alt=&quot;&quot; src=&quot;http://eclipsefp.files.wordpress.com/2009/06/error-decorations.png?w=213&amp;amp;h=320&quot; class=&quot;alignnone size-full wp-image-58&quot; height=&quot;320&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Parents of files with errors also receive this marker. This makes it easy to locate problems in a large project.&lt;/p&gt;
&lt;p&gt;Errors are, as usual, also reported in a special Problems view:&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;621&quot; alt=&quot;&quot; src=&quot;http://eclipsefp.files.wordpress.com/2009/06/problems.png?w=621&amp;amp;h=245&quot; class=&quot;alignnone size-full wp-image-59&quot; height=&quot;245&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It would be better if only the first line were shown, and could be expanded to show the additional information, but for a first attempt this will do.&lt;/p&gt;
&lt;p&gt;If parsing of GHC’s output might fail for some reason, an error will be reported in the Error Log (which contains Eclipse errors, not Haskell errors), and you can always see the raw output in the Console:&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;621&quot; alt=&quot;&quot; src=&quot;http://eclipsefp.files.wordpress.com/2009/06/ghc-console.png?w=621&amp;amp;h=245&quot; class=&quot;alignnone size-full wp-image-60&quot; height=&quot;245&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Very nice.&lt;/p&gt;
&lt;p&gt;There is, however, one small problem currently. This is caused by a mismatch between GHC’s notion of building, and Eclipse’s. When building, EclipseFP will visit all files in the project, then invoke “ghc –make” on them. It suffices to call “ghc –make” only on the file containing the main function, and GHC will take care of the rest. But not only is this approach wasteful: it will also lead to error markers appearing and disappearing as the same file gets compiled (as a dependency) multiple times. My plan for solving this is to add a project option to specify the main module and the name of the main function, so that we can call GHC only on that module. Much more efficient.&lt;/p&gt;
  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/eclipsefp.wordpress.com/50/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/eclipsefp.wordpress.com/50/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/eclipsefp.wordpress.com/50/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/eclipsefp.wordpress.com/50/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/eclipsefp.wordpress.com/50/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/eclipsefp.wordpress.com/50/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/eclipsefp.wordpress.com/50/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/eclipsefp.wordpress.com/50/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/eclipsefp.wordpress.com/50/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/eclipsefp.wordpress.com/50/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=eclipsefp.wordpress.com&amp;amp;blog=7738156&amp;amp;post=50&amp;amp;subd=eclipsefp&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 21:12:18 +0000</pubDate>
</item>
<item>
	<title>Thomas ten Cate: Little rant on modularity</title>
	<guid isPermaLink="false">http://eclipsefp.wordpress.com/?p=61</guid>
	<link>http://eclipsefp.wordpress.com/2009/06/30/little-rant-on-modularity/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;&lt;img src=&quot;http://eclipsefp.files.wordpress.com/2009/06/rcp.jpg?w=48&amp;amp;h=48&quot; style=&quot;margin-right: 2em;&quot; height=&quot;48&quot; width=&quot;48&quot; alt=&quot;&quot; class=&quot;alignleft size-full wp-image-66&quot; /&gt;And now, a little rant. Eclipse is, first and foremost, a Java IDE. It tries very hard to be extensible and flexible, so the Java functionality itself, like everything else, is a plug-in, or rather a set of plug-ins called the JDT (Java Development Tools). Very good.&lt;/p&gt;
&lt;p&gt;But unfortunately, there is a lot of code in the JDT that does quite generic things, like showing the error markers in the Project Explorer, or on the editor tabs. I often find myself digging through the JDT sources to figure out how the big guys do things, only to find out that they implemented quite common functionality in the JDT that would also benefit many other language-specific plug-ins. Other plug-in writers who want to use this functionality have a choice: either have their plug-in depend on the Java Development Tools, or reproduce all the code in their own plug-in.&lt;/p&gt;
&lt;p&gt;Depending on the JDT plug-ins would be a shame, because we’re trying to build a Haskell IDE here. Even though most Eclipse users will have the JDT already installed, we do not want to have to package it with an eventual “Hasklipse” (I hope that name doesn’t stick…) distribution containing an Eclipse platform for Haskell development. Moreover, it is not even always possible to use the classes from the JDT directly: often, they subtly depend on some Java-specific treat.&lt;/p&gt;
&lt;p&gt;The alternative, copying and pasting to your own plug-in, is therefore often the best option. It is not pretty, but it works, and it allows you to customize the code to fit your own plug-in better. But I sure wish it wasn’t necessary. For a poor Haskell plug-in developer, even more modularity would be very welcome.&lt;/p&gt;
  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/eclipsefp.wordpress.com/61/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/eclipsefp.wordpress.com/61/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/eclipsefp.wordpress.com/61/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/eclipsefp.wordpress.com/61/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/eclipsefp.wordpress.com/61/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/eclipsefp.wordpress.com/61/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/eclipsefp.wordpress.com/61/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/eclipsefp.wordpress.com/61/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/eclipsefp.wordpress.com/61/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/eclipsefp.wordpress.com/61/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=eclipsefp.wordpress.com&amp;amp;blog=7738156&amp;amp;post=61&amp;amp;subd=eclipsefp&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 21:11:08 +0000</pubDate>
</item>
<item>
	<title>Andrew Overholt: Going to GUADEC</title>
	<guid isPermaLink="true">http://overholt.ca/wp/?p=132</guid>
	<link>http://overholt.ca/wp/?p=132</link>
	<description>&lt;p&gt;&lt;img src=&quot;http://overholt.ca/blogimages/sponsored-badge-shadow.png&quot; alt=&quot;GNOME sponsorship badge&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Thanks to the generous sponsorship of the GNOME Foundation and GNOME Travel Committee, on Thursday I’m heading to the &lt;a href=&quot;http://www.grancanariadesktopsummit.org/&quot;&gt;Gran Canaria Desktop Summit&lt;/a&gt;.  This conference is a combination of GUADEC and Akademy and promises to be an excellent week of discussions, presentations, etc.&lt;/p&gt;
&lt;p&gt;I’ll be giving a &lt;a href=&quot;http://www.grancanariadesktopsummit.org/node/194&quot;&gt;talk&lt;/a&gt; on Eclipse, focusing on our work at the Linux Tools project and of course showing the CDT and Mylyn and all the other awesome stuff I can fit into 30 minutes.  I’ve been to GUADEC twice before and was really impressed with everyone’s enthusiasm.  I’m sure this year will be just as good and I look forward to the inspiration that comes from conferences like this.&lt;/p&gt;</description>
	<pubDate>Tue, 30 Jun 2009 17:51:49 +0000</pubDate>
</item>
<item>
	<title>Freddy Allilaire: Eclipse Acceleo Day program is available!</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6006560111132470551.post-1301493127466883553</guid>
	<link>http://freddyallilaire.blogspot.com/2009/06/eclipse-acceleo-day-program-is.html</link>
	<description>The first Eclipse Acceleo workshop will take place on July 10, 2009 in Nantes. More information available here: &lt;a href=&quot;http://www.acceleo.org/wiki/index.php/EclipseAcceleoDay&quot; class=&quot;moz-txt-link-freetext&quot;&gt;http://www.acceleo.org/wiki/index.php/EclipseAcceleoDay&lt;/a&gt;&lt;br /&gt;The complete program is now available with a lot of interesting talks dealing with Eclipse, MDE, DSM and of course Acceleo ;-)&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;text-align: left; width: 100%;&quot; border=&quot;1&quot;&gt;   &lt;tbody&gt;     &lt;tr&gt;       &lt;th&gt;Hour       &lt;/th&gt;       &lt;th&gt; Title       &lt;/th&gt;       &lt;th&gt; Presenter       &lt;/th&gt;       &lt;th&gt; Affiliation       &lt;/th&gt;       &lt;th&gt; Language       &lt;/th&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 09:00       &lt;/td&gt;       &lt;td&gt; Introduction       &lt;/td&gt;       &lt;td&gt; Etienne Juliot       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;OBEO&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; English       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 09:30       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Presentation of a DSM-oriented design and generation environment&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; Erlé Le Gac       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Capgemini&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; French       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 10:00       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;MDA &amp;amp; Acceleo deployment feedbacks&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; Vincent Fady       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Atos Origin&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; French       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 10:30       &lt;/td&gt;       &lt;td&gt; Coffee break       &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 11:00       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Acceleo, contribution to the industrialization of developments: Feedback from Bull-Centre de Services Paris&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; Olivier Leal       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Bull&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; French       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 11:45       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;An Open-source Model Driven software development toolset - Lesson learned from Orange Labs&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; Samuel Liard       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Orange Labs&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; French       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 12:15       &lt;/td&gt;       &lt;td&gt;Lunch       &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 14:00       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;MDSD Scaffolding and Acceleo&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; Cédric Vidal       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Proxiad&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; English       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 14:30       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Presentation of WISSS (Webapp Is Simple, Stupid and Secure)&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; François Gaudin       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;Makina Corpus&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; English       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 15:00       &lt;/td&gt;       &lt;td&gt;&lt;span style=&quot;color: black;&quot;&gt;Acceleo MTL: a standard alternative for code generation&lt;br /&gt;   &lt;/span&gt;&lt;/td&gt;       &lt;td&gt; Cédric Brun       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;OBEO&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; English       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 15:45       &lt;/td&gt;       &lt;td&gt; Coffee break       &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 16:15       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;EEF powered by Acceleo MTL - Acceleo MTL ... and punishment!&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; Goulwen Le Fur       &lt;/td&gt;       &lt;td&gt; &lt;span style=&quot;color: black;&quot;&gt;OBEO&lt;/span&gt;       &lt;/td&gt;       &lt;td&gt; English       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td&gt; 17:00       &lt;/td&gt;       &lt;td&gt; Panel       &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;       &lt;td&gt;&lt;br /&gt;   &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;This workshop is free but with mandatory registration (for organisation purposes). Registration details are available here: &lt;a href=&quot;http://www.acceleo.org/wiki/index.php/EclipseAcceleoDay&quot; class=&quot;moz-txt-link-freetext&quot;&gt;http://www.acceleo.org/wiki/index.php/EclipseAcceleoDay&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope to see you there :-)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6006560111132470551-1301493127466883553?l=freddyallilaire.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 14:38:00 +0000</pubDate>
	<author>noreply@blogger.com (Freddy Allilaire)</author>
</item>
<item>
	<title>Dave Carver: Eclipse: RelaxNG Tools</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1585332946379204379.post-5593657349729117939</guid>
	<link>http://intellectualcramps.blogspot.com/2009/06/eclipse-relaxng-tools.html</link>
	<description>Most people that work with XML have at least heard of DTDs and XML Schemas.  Both are widely used to provide a validation model for the XML document.   XML Schema has also been tried to be used as a general purpose modeling language and used within data binding frameworks for code generation.   However, XML Schema and DTDs do not necessarily work or are the best fit for all document designs.   XML Schema can be very heavy weight, overly wordy, and in general a pain to work with at times.   DTDs do not allow data typing, and personally I hate the DTD syntax.&lt;br /&gt;&lt;br /&gt;So, if you need the power that XML Schema can provide, but want an easier for humans to read language what are your alternatives.   &lt;a href=&quot;http://www.thaiopensource.com/relaxng/design.html&quot;&gt;RelaxNG&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=281529&quot;&gt;Bug 281529&lt;/a&gt; has been opened to help bring a RelaxNG set of tools and frameworks over to the Web Tools Platform Incubator.   RelaxNG provides both an XML syntax and a more human friendly Compact Syntax:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Sample Compact Syntax:&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;relaxng&quot; name=&quot;code&quot;&gt;&lt;br /&gt;element addressBook {&lt;br /&gt;  element card {&lt;br /&gt;    attribute name { text },&lt;br /&gt;    attribute email { text }&lt;br /&gt;  }*&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In some ways I think the RelaxNG might be a good place for &lt;a href=&quot;http://wiki.eclipse.org/Xtext&quot;&gt;XText&lt;/a&gt; and its DSL editor generation abilities.  The RelaxNG language is a doman specific language for XML validation.  It's compact syntax would seem to fit well into the range that XText can support.&lt;br /&gt;&lt;br /&gt;RelaxNG is very popular in the Document centric industries.   The Open Document set of grammars are written entirely in RelaxNG. A good set of open source tooling and integration within eclipse is missing for RelaxNG.   &lt;a href=&quot;http://www.oxygenxml.com/&quot;&gt;OxygenXML&lt;/a&gt; does contain RelaxNG support but this isn't an open source solution that others can use and contribute to build their own implementations.   It would be ideal if we could get all interested players together to work off a common framework to meet the 80% that everybody needs, and then extend where necessary the additional 20%.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1585332946379204379-5593657349729117939?l=intellectualcramps.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 14:24:25 +0000</pubDate>
	<author>noreply@blogger.com (David Carver)</author>
</item>
<item>
	<title>Ben Vitale: p2 UI policy and Declarative Services</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1968631882469464262.post-7274790823592126300</guid>
	<link>http://eclipse-ruminations.blogspot.com/2009/06/p2-ui-policy-and-declarative-services.html</link>
	<description>This is another post in what is becoming a short (so far only two) series about moving a product from 3.4 to 3.5.&lt;br /&gt;&lt;br /&gt;After I got my &lt;a href=&quot;http://eclipse-ruminations.blogspot.com/2009/06/debugging-pde-build-and-publisher.html&quot;&gt;build working&lt;/a&gt;, the next step was making sure that I could update from one product version to the next. I was especially excited about the resolution of &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=246060&quot;&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=246060&lt;/a&gt; which allows for .qualifier to be replaced in a product version. No longer would I have to manually increment the product version number for purposes of updating to and testing a nightly build.&lt;br /&gt;&lt;br /&gt;So my plan was:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Run PDE product build to generate version 1.0.0.abc&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unzip 1.0.0.abc to some location.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Run PDE product build again to generate version 1.0.0.def&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Launch 1.0.0.abc, point it at the repository for 1.0.0.def, and update.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Profit.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Unfortunately, when I launched 1.0.0.abc, the Install New Software dialog didn't have a way for me to add a new repository. Ditto for the preference page.&lt;br /&gt;&lt;br /&gt;Turns out there is a more robust set of p2 UI building blocks in 3.5, which is handy for RCP developers. That is described in great detail here: &lt;a href=&quot;http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application&quot;&gt;http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I should mention that the RCP-p2 example in 3.5 is leaps and bounds ahead of the one from 3.4 (there wasn't one) - so props to the p2 UI team on that.&lt;br /&gt;&lt;br /&gt;At any rate, the wiki page tipped me off that there is a UI policy which controls what components are showing and enabled. This policy is implemented as an &lt;a href=&quot;http://www.eclipse.org/equinox/bundles/&quot;&gt;OSGi declarative service&lt;/a&gt;. What really threw me for a loop is that I wasn't trying to do anything special with this policy. I just wanted the stock SDK one since our product is based on the SDK.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Debugging the Policy Behavior&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I stepped through the preference page code and discovered that the &lt;code&gt;SDKPolicy&lt;/code&gt; wasn't getting discovered as a service (it was just getting an empty &lt;code&gt;Policy&lt;/code&gt; every time). So this sent me down the route of launching with &lt;code&gt;-console&lt;/code&gt; to see the OSGi console and look for the policy service. After fighting with the filter syntax for the &lt;code&gt;services &amp;lt;filter&amp;gt;&lt;/code&gt; console command, I googled a bit more and found &lt;a href=&quot;http://wiki.eclipse.org/Equinox/RuntimeOptions&quot;&gt;these useful runtime options&lt;/a&gt; for spitting out verbose DS logging information. I turned those on but I didn't get anything logged. I was pretty stumped at this point. &lt;br /&gt;&lt;br /&gt;Then a light bulb came on: maybe declarative services wasn't running at all? A quick &lt;code&gt;ss ds&lt;/code&gt; at the console showed that it was &lt;code&gt;RESOLVED&lt;/code&gt; but not active! I did a &lt;code&gt;start&lt;/code&gt; to spin it up and all of a sudden a deluge of DS logging information printed out. And then &lt;code&gt;SDKPolicy&lt;/code&gt; started working, and voila my p2 UI was working.&lt;br /&gt;&lt;br /&gt;It turns out the root cause is that we had a custom &lt;code&gt;config.ini&lt;/code&gt; in 3.4 to specify a custom &lt;code&gt;osgi.instance.area&lt;/code&gt; location. This was screwing up the start level for the ds bundle. I switched the product to generate a &lt;code&gt;config.ini&lt;/code&gt; for me, did a new build, and everything worked. I plan to migrate the &lt;code&gt;osgi.instance.area&lt;/code&gt; configuration step to a &lt;code&gt;p2.inf&lt;/code&gt; file, which is what the platform releng guys do.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Useful Links&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[1] &lt;a href=&quot;http://wiki.eclipse.org/Equinox/RuntimeOptions&quot;&gt;Equinox Runtime Options&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;http://www.ibm.com/developerworks/opensource/library/os-ecl-osgiconsole/&quot;&gt;Explore Eclipse's OSGi Console&lt;/a&gt;&lt;br /&gt;[3] &lt;a href=&quot;http://hwellmann.blogspot.com/2009/04/getting-started-with-osgi-declarative.html&quot;&gt;Around the world in Java: Getting Started with OSGi Declarative Services&lt;/a&gt;&lt;br /&gt;[4] &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=256361&quot;&gt;p2 UI policy bug #1&lt;/a&gt;&lt;br /&gt;[5] &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=269873&quot;&gt;p2 UI policy bug #2&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1968631882469464262-7274790823592126300?l=eclipse-ruminations.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 14:06:31 +0000</pubDate>
	<author>noreply@blogger.com (Ben Vitale)</author>
</item>
<item>
	<title>Ekkehard Gentz: [galileo] EPP for Cocoa 64-bit</title>
	<guid isPermaLink="false">http://ekkescorner.wordpress.com/?p=351</guid>
	<link>http://ekkescorner.wordpress.com/2009/06/30/galileo-epp-for-cocoa-64-bit/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;You know from my Galileo – review – Blogs that I’m now working under OSX Cocoa-64bit.&lt;/p&gt;
&lt;p&gt;If you try to download one of the easy-to-start EPP Packages for Galileo, there’s no Cocoa 64-bit – download available.&lt;/p&gt;
&lt;p&gt;See a detailed discussion under &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=281501&quot; target=&quot;_blank&quot;&gt;Bugzilla 281501&lt;/a&gt;. Thanks to comment#39 from Markus Knauer there’s a Software Site wich helps you to get it:&lt;/p&gt;
&lt;pre&gt;http://download.eclipse.org/technology/epp/packages/galileo/&lt;/pre&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;I also updated my collection of Software Sites &lt;a href=&quot;http://ekkescorner.wordpress.com/eclipse/update-sites/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;
&lt;/p&gt;&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;Now its easy:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download &lt;a href=&quot;http://download.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/download.php?dropFile=eclipse-SDK-3.5-macosx-cocoa-x86_64.tar.gz&quot; target=&quot;_blank&quot;&gt;SDK Cocoa 64-bit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Install New Software from &lt;a href=&quot;http://download.eclipse.org/technology/epp/packages/galileo/&quot; target=&quot;_blank&quot;&gt;EPP Packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Select your Package&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;and you’re done &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;
&lt;/p&gt;&lt;h3&gt;Eclipse EPP RCP Cocoa 64-bit&lt;/h3&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;Use the EPP (P2) Software Site, choose your Package:&lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/epp-rcp-added.png?w=555&amp;amp;h=400&quot; title=&quot;EPP RCP added&quot; height=&quot;400&quot; width=&quot;555&quot; alt=&quot;EPP RCP added&quot; class=&quot;alignnone size-full wp-image-352&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;here are the Details:&lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/epp-rcp-added-details.png?w=624&amp;amp;h=274&quot; title=&quot;EPP RCP added details&quot; height=&quot;274&quot; width=&quot;624&quot; alt=&quot;EPP RCP added details&quot; class=&quot;alignnone size-full wp-image-353&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;&lt;strong&gt;Finish&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Restart&lt;/strong&gt;:&lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;
&lt;/p&gt;&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/epp-rcp-you-got-it.png?w=613&amp;amp;h=370&quot; title=&quot;EPP RCP you got it&quot; height=&quot;370&quot; width=&quot;613&quot; alt=&quot;EPP RCP you got it&quot; class=&quot;alignnone size-full wp-image-354&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;
&lt;/p&gt;&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;Now its easy to test all EPP Packages under Cocoa 64-bit &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p style=&quot;font: 12px Helvetica; margin: 0;&quot;&gt;
Posted in Eclipse, Galileo, OSX, P2  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ekkescorner.wordpress.com/351/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/ekkescorner.wordpress.com/351/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ekkescorner.wordpress.com/351/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/ekkescorner.wordpress.com/351/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ekkescorner.wordpress.com/351/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/ekkescorner.wordpress.com/351/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ekkescorner.wordpress.com/351/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/ekkescorner.wordpress.com/351/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ekkescorner.wordpress.com/351/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/ekkescorner.wordpress.com/351/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=ekkescorner.wordpress.com&amp;amp;blog=7691743&amp;amp;post=351&amp;amp;subd=ekkescorner&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/p&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 12:13:45 +0000</pubDate>
</item>
<item>
	<title>Alex Radeski: Eclipse Galileo, Mac 64bit Cocao Yay!, No keyboard, Boo!</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3650353534688561475.post-6515354957264092032</guid>
	<link>http://ezaero.blogspot.com/2009/06/eclipse-galileo-mac-64bit-cocao-yay-no.html</link>
	<description>So I've fully switched from Eclipse Ganymede to Galileo, at work and at home. At home I thought I'd try the the Mac Cocoa 64-bit version (available &lt;a href=&quot;http://download.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/index.php&quot;&gt;here&lt;/a&gt;) to give the new Apple JDK 1.6.0_13 for a spin.&lt;br /&gt;&lt;br /&gt;Unfortunately when I fire up the 64-bit Eclipse, I get no input from the keyboard. All mouse driven input woks fine, but I get no joy with the keyboard. I did a bit of fiddling to get it to work, but gave up and reverted to JDK 1.5.x. If &lt;span style=&quot;font-style: italic;&quot;&gt;The Internet&lt;/span&gt; has any advice, I'd love to get it working, it felt really snappy from what I could see...&lt;br /&gt;&lt;br /&gt;Since getting my Mac earlier this year, the (weak) Java support is my biggest gripe. Why is Java the poor cousin, my guess is that Apple doesn't want any competition from within, so it's easier to &quot;cripple&quot; Java in OS X. I won't bleat on any more about it, there are plenty more knowledgeable &lt;a href=&quot;http://landonf.bikemonkey.org/&quot;&gt;folk&lt;/a&gt; blogging about it.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;UPDATE:&lt;/span&gt; Looks like this is a &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=281497&quot;&gt;known issue&lt;/a&gt; with attaching PC keyboards to a mac and using Eclipse 64-bit Cocoa.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3650353534688561475-6515354957264092032?l=ezaero.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 12:13:09 +0000</pubDate>
	<author>noreply@blogger.com (alexr)</author>
</item>
<item>
	<title>Emil Crumhorn: Creating a Notification Popup Widget</title>
	<guid isPermaLink="false">http://hexapixel.com/?p=760</guid>
	<link>http://hexapixel.com/2009/06/30/creating-a-notification-popup-widget</link>
	<description>&lt;p&gt;In this article I will explain how to create a custom widget that displays a popup notification dialog in the bottom right corner of your screen (usually above the toolbar on Windows). Here’s what it will look like when we’re done:&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;397&quot; alt=&quot;Example Image&quot; src=&quot;http://hexapixel.com/wp-content/uploads/2009/06/tray_popup_example.gif&quot; title=&quot;Example Image&quot; height=&quot;147&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We could custom draw everything which would allow us more control over the widget, but for the sake of this article lets stick to using basic SWT components inside a normal Shell that we will make a bit prettier than your typical SWT Shell.&lt;/p&gt;
&lt;p&gt;(Do note this has only been tested on Windows, it’s quite possible tweaks are necessary for other platforms).&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-760&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;h3&gt;The Shell&lt;/h3&gt;
&lt;p&gt;What we want is a Shell that stays on top of our application (but not on top of all applications) and doesn’t steal the active focus or else it would show up in your task manager or move focus away from where the user is now. We also don’t any normal Shell “trim” borders, we’ll draw our own. Creating it is easy as all of our requirements are available via SWT flags. Thus we can create the Shell as follows:
&lt;/p&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;&lt;pre class=&quot;syntax-highlight:java&quot;&gt;_shell = new Shell(Display.getDefault().getActiveShell(), SWT.NO_FOCUS | SWT.NO_TRIM);
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;As we have SWT widgets inside our shell and we intend to use a gradient background on the shell itself, all the widgets need to be transparent. This is done by setting the Background Mode on the shell to &lt;code&gt;SWT.INHERIT_DEFAULT&lt;/code&gt;. This tells the widgets to inherit the background of their parents, and gives us what we want. So after we create the shell we simply call;
&lt;/p&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;&lt;pre class=&quot;syntax-highlight:java&quot;&gt;_shell.setBackgroundMode(SWT.INHERIT_DEFAULT);
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;So how do we get a gradient background on a shell? It certainly don’t support it by default. You can set a foreground and a background but that’s about it. The trick is to paint an image with the colors we want and use that as the shell’s background. To set it at the right time, we listen to the &lt;code&gt;SWT.Resize&lt;/code&gt; event on the shell and do it then with the following code;&lt;/p&gt;
&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;&lt;pre class=&quot;syntax-highlight:java&quot;&gt;_shell.addListener(SWT.Resize, new Listener() {
    @Override
    public void handleEvent(Event e) {
	try {
	    // get the size of the drawing area
	    Rectangle rect = _shell.getClientArea();
	    // create a new image with that size
	    Image newImage = new Image(Display.getDefault(), Math.max(1, rect.width), rect.height);
	    // create a GC object we can use to draw with
	    GC gc = new GC(newImage);

	    // fill background
	    gc.setForeground(_bgFgGradient);
	    gc.setBackground(_bgBgGradient);
	    gc.fillGradientRectangle(rect.x, rect.y, rect.width, rect.height, true);

	    // draw shell edge
	    gc.setLineWidth(2);
	    gc.setForeground(_borderColor);
	    gc.drawRectangle(rect.x + 1, rect.y + 1, rect.width - 2, rect.height - 2);
	    // remember to dipose the GC object!
	    gc.dispose();

	    // now set the background image on the shell
	    _shell.setBackgroundImage(newImage);

	    // remember/dispose old used iamge
	    if (_oldImage != null) {
		_oldImage.dispose();
	    }
	    _oldImage = newImage;
	}
	catch (Exception err) {
	    err.printStackTrace();
	}
    }
});
&lt;/pre&gt;
&lt;/pre&gt;
&lt;h3&gt;The Contents&lt;/h3&gt;
&lt;p&gt;Our shell consists of 3 sections, an image at the top left (which is a normal CLabel). Then a label that contains the header text (also a CLabel), and finally a label which represents our message (a normal Label). We use a Label at the end instead of a CLabel as Labels support wrapping and multi-lines better than the CLabel does. You could of course use pretty much any widgets you want. Here’s an outline of what section each label covers:&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;350&quot; alt=&quot;tray_popup_example_lines&quot; src=&quot;http://hexapixel.com/wp-content/uploads/2009/06/tray_popup_example_lines.gif&quot; title=&quot;tray_popup_example_lines&quot; height=&quot;99&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We use a GridLayout with some 5px margins (except at the top) and the widgets are created normally without any special magic, so I won’t show that code here (it’s all at the bottom for you to download). &lt;/p&gt;
&lt;h3&gt;Some Eye Candy – Fading&lt;/h3&gt;
&lt;p&gt;Shells support alpha values as of SWT 3.4, so we’ll use this to make our “appearing” and “disappearing” a bit prettier. All we need to do to make a shell fade in and out is to have a thread that loops and increases/decreases the alpha channel value for the shell. As we need to be on the Display thread to do this it’s easiest to do it all via a runnable that we let the Display object run for us at a given interval. &lt;/p&gt;
&lt;p&gt;We need to remember to continuously check to see if the shell is disposed as it can happen when we’re on a thread. When we’re finished fading in, we want the shell to stay visible for a certain amount of time, and then we want to fade out. So basically the chain is this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create shell&lt;/li&gt;
&lt;li&gt;Fade in shell&lt;/li&gt;
&lt;li&gt;Stay visible for X seconds&lt;/li&gt;
&lt;li&gt;Fade out shell&lt;/li&gt;
&lt;li&gt;Dispose shell&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All these timers are more or less similar in terms of how the code looks, so I’ll show one example here and for the rest you can look at the complete source downloadable below. We have some global variables here that should be explained. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FADE_IN_STEP&lt;/code&gt; is how much we increase the alpha value for each iteration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FINAL_ALPHA&lt;/code&gt; is a value that declares what the final alpha value will be for the shell when it stays visible. I find that a slightly transparent shell gives a better effect, so by default this value is 225 (out of 255 which is a solid [opaque] shell).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FADE_TIMER&lt;/code&gt; is how long we wait until increasing the Alpha value again. When the shell has reached it’s max-alpha value we call the startTimer() method, which is a thread that sleeps for a certain number of seconds before calling the fadeOut() method.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;&lt;pre class=&quot;syntax-highlight:java&quot;&gt;private static void fadeIn(final Shell _shell) {
    Runnable run = new Runnable() {

        @Override
        public void run() {
            try {
                if (_shell == null || _shell.isDisposed()) { return; }

                int cur = _shell.getAlpha();
                cur += FADE_IN_STEP;

                if (cur &amp;gt; FINAL_ALPHA) {
                    _shell.setAlpha(FINAL_ALPHA);
                    startTimer(_shell);
                    return;
                }

                _shell.setAlpha(cur);
                Display.getDefault().timerExec(FADE_TIMER, this);
            }
            catch (Exception err) {
                err.printStackTrace();
            }
        }

    };
    Display.getDefault().timerExec(FADE_TIMER, run);
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;h3&gt;Stacked Notifications&lt;/h3&gt;
&lt;p&gt;There’s one last thing we want to support, which is stacked notifications. Assume our notification shell’s entire life-span is about 5 seconds, what if we have another notify call before the first one has finished showing? We could dispose the first shell and replace it with the new one of course, but a much prettier approach is to simply move the previous shell up, and show the new notification below it. The effect of this is something like this (this screenshot was taken just as the old shells started to fade out, hence the higher alpha on them):&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;362&quot; alt=&quot;tray_stacked&quot; src=&quot;http://hexapixel.com/wp-content/uploads/2009/06/tray_stacked.gif&quot; title=&quot;tray_stacked&quot; height=&quot;431&quot; /&gt;&lt;/p&gt;
&lt;p&gt;What we do to achieve this effect is rather simple. Every time a notification shell is opened, we keep a reference of it in a static array of shells. When it’s faded out (and disposed), it’s removed from the list. Thus, when a new shell is created we simply check to see what’s already in the array and then set the location for each old shell in the array to &lt;code&gt;-heightOfNewNotificationShell&lt;/code&gt; (so to speak). Thus, the old shells move up to make room, but continue their fade-in/fade-out cycles just like before. &lt;/p&gt;
&lt;h3&gt;Further Improvements&lt;/h3&gt;
&lt;p&gt;Everything could be made prettier than it already is of course, perhaps you want an “X” close button, or different colored text, or rounded shell corners. None of that is in the current code, but the code should give you enough to go on to implement most of that without any major problems. &lt;/p&gt;
&lt;p&gt;Also note that I currently use &lt;code&gt;Display.getDefault().getActiveShell()&lt;/code&gt; for the parent shell of the popup. You may want to refactor it to use a more permanent shell as otherwise a disposal of whatever the parent shell was whenever the popup was displayed will cause the notification to dispose as well.&lt;/p&gt;
&lt;p&gt;The code is not perfect, it’s an example to build on (if you so wish).&lt;/p&gt;
&lt;h3&gt;Download Code&lt;/h3&gt;
&lt;p&gt;I’ve created an Eclipse project with the code and also the ImageCache/FontCache/ColorCache classes I use in the code (all they do is keep already used images etc in memory so that they don’t need to be re-created). There’s also a jar with the images I’ve used in this example. If you like them and want more like it, there’s a massive image pack with exactly these icons and more here: &lt;a href=&quot;http://code.google.com/p/gnome-colors/&quot; target=&quot;_new&quot;&gt;Gnome Colors Icons&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Do note you may need to adjust your CLASSPATH settings for the project to reflect the location of your SWT jars.&lt;/p&gt;
&lt;p&gt;To run the code, simply run the &lt;code&gt;Tester.java&lt;/code&gt; class and push the big button to create a notification. Push it again before the first one fades away to see the stacking. A random image will be used every time you push it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hexapixel.com/wp-content/uploads/2009/06/notification_widget.zip&quot;&gt;DOWNLOAD CODE&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Hopefully this gives you an insight into how to create a “custom widget” (without much custom painting). Have fun!&lt;/p&gt;</description>
	<pubDate>Tue, 30 Jun 2009 12:00:24 +0000</pubDate>
</item>
<item>
	<title>Laurent Goubet: EMF Compare graduated!</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3658502096185788177.post-558309606571631958</guid>
	<link>http://eclipsemde.blogspot.com/2009/06/emf-compare-graduated.html</link>
	<description>Galileo is out ... and with it came the graduation of EMF Compare to 1.0 at last!&lt;br /&gt;&lt;br /&gt;A great deal of improvement has been made in EMF Compare so as to improve user experience and effectiveness. This release sees the usual &lt;span style=&quot;font-weight: bold;&quot;&gt;new differences EMF Compare detects&lt;/span&gt; (reference order changes, resource dependencies, ...), and an improved support for the various VCSs (CVS, SVN, ...).&lt;br /&gt;&lt;br /&gt;The most outstanding improvement is the ability to &lt;span style=&quot;font-weight: bold;&quot;&gt;compare whole ResourceSets instead of a single model&lt;/span&gt;; allowing users to compare fragmented models as well as linked models (UML models referring to profiles, Genmodels referring to ecore models, ...) and thus detecting changes made in the selected models along with changes that can have taken place in their dependencies.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://wiki.eclipse.org/images/4/4f/CompareResourceSet.png&quot;&gt;&lt;img src=&quot;http://wiki.eclipse.org/images/4/4f/CompareResourceSet.png&quot; alt=&quot;&quot; border=&quot;0&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 658px; height: 410px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Thanks to a &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=262928&quot;&gt;contribution from Moritz Eysholdt&lt;/a&gt;, EMF Compare now provides a &lt;span style=&quot;font-weight: bold;&quot;&gt;patch format for model merging&lt;/span&gt;. This EPatch format is associated with a textual syntax thanks to XText, allowing for easier editing and improved readability of these patches.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://wiki.eclipse.org/images/d/d8/EPatch.png&quot;&gt;&lt;img src=&quot;http://wiki.eclipse.org/images/d/d8/EPatch.png&quot; alt=&quot;&quot; border=&quot;0&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 574px; height: 431px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The full list is available on &lt;a href=&quot;http://wiki.eclipse.org/EMF_Compare_1.0.0_New_And_Noteworthy&quot;&gt;EMF Compare 1.0 new and noteworthy&lt;/a&gt; wiki page.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3658502096185788177-558309606571631958?l=eclipsemde.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 08:08:43 +0000</pubDate>
	<author>noreply@blogger.com (Laurent Goubet)</author>
</item>
<item>
	<title>Ekkehard Gentz: [galileo] HowTo define a (complex) Target Platform</title>
	<guid isPermaLink="false">http://ekkescorner.wordpress.com/?p=309</guid>
	<link>http://ekkescorner.wordpress.com/2009/06/30/galileo-howto-define-a-complex-target-platform/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Part 5 of my Galileo Reviews around Target Platforms. An Overview of this blog series can be found &lt;a href=&quot;http://ekkescorner.wordpress.com/blog-series/pde-and-targetplatform/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You have successfully defined a Target Platform for &lt;a href=&quot;http://eclipse.org/riena&quot; target=&quot;_blank&quot;&gt;Riena&lt;/a&gt; following &lt;a href=&quot;http://ekkescorner.wordpress.com/2009/06/29/galileo-howto-define-a-simple-target-platform/&quot; target=&quot;_blank&quot;&gt;part 4&lt;/a&gt; of this series. But that was only a very simple definition – all was based on one location: the Galileo Software Site.&lt;/p&gt;
&lt;h3&gt;Target Platform Locations&lt;/h3&gt;
&lt;p&gt;But there are more kinds of Target Platform locations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Add Locations&lt;/strong&gt; lets you select sources where the Plug-ins come from:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-add-content-location.png?w=180&amp;amp;h=179&quot; title=&quot;target add content location&quot; height=&quot;179&quot; width=&quot;180&quot; alt=&quot;target add content location&quot; class=&quot;alignnone size-full wp-image-310&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;from Software Site (we already did this)&lt;/li&gt;
&lt;li&gt;from Installation&lt;/li&gt;
&lt;li&gt;from Features&lt;/li&gt;
&lt;li&gt;from Directories&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Add Plug-Ins from another Eclipse Installation&lt;/h3&gt;
&lt;p&gt;Thats really cool &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt;  you can select one of your Eclipse Installations and select this as your Source.&lt;/p&gt;
&lt;p&gt;As you already know I’m just working from a &lt;strong&gt;Cocoa-64-bit SDK&lt;/strong&gt; Installation. There’s another Eclipse 3.5 Installation on my disk: Eclipse &lt;strong&gt;EPP RCP Cocoa-32-bit&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/select-installation-rcp-32.png?w=375&amp;amp;h=283&quot; title=&quot;select installation rcp 32&quot; height=&quot;283&quot; width=&quot;375&quot; alt=&quot;select installation rcp 32&quot; class=&quot;alignnone size-full wp-image-311&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Select your Eclipse Installation Folder.&lt;/p&gt;
&lt;p&gt;“&lt;strong&gt;&lt;em&gt;Next &amp;gt;&lt;/em&gt;&lt;/strong&gt;” gives you a &lt;strong&gt;preview&lt;/strong&gt; of the content:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/select-installation-rcp-32-preview-content.png?w=375&amp;amp;h=283&quot; title=&quot;select installation rcp 32 preview content&quot; height=&quot;283&quot; width=&quot;375&quot; alt=&quot;select installation rcp 32 preview content&quot; class=&quot;alignnone size-full wp-image-312&quot; /&gt;&lt;/p&gt;
&lt;p&gt;“&lt;strong&gt;Finish&lt;/strong&gt;” adds the Location to your current Target definition:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-definition-w-location-from-installation.png?w=391&amp;amp;h=85&quot; title=&quot;target definition w location from installation&quot; height=&quot;85&quot; width=&quot;391&quot; alt=&quot;target definition w location from installation&quot; class=&quot;alignnone size-full wp-image-313&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Add Plug-ins from Features of other Eclipse Installations&lt;/h3&gt;
&lt;p&gt;Instead of selecting a complete Installation you can also select one or more Features of an Installation:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-platform-add-features-from-rcp32.png?w=335&amp;amp;h=265&quot; title=&quot;target platform add features from rcp32&quot; height=&quot;265&quot; width=&quot;335&quot; alt=&quot;target platform add features from rcp32&quot; class=&quot;alignnone size-full wp-image-314&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As before you select the Eclipse Folder of an Installation and then you’ll see the list of the Features contained at this Eclipse Installation.&lt;/p&gt;
&lt;p&gt;Normaly the list contains only the highest available versions. Sometimes you want to define a Target Definition from older Versions: then you have to check “&lt;strong&gt;use specific version&lt;/strong&gt;“&lt;/p&gt;
&lt;p&gt;You can select one or more Features and click “&lt;strong&gt;Finish&lt;/strong&gt;” to add them to your current Target definition.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-definition-w-location-from-features.png?w=516&amp;amp;h=255&quot; title=&quot;target definition w location from features&quot; height=&quot;255&quot; width=&quot;516&quot; alt=&quot;target definition w location from features&quot; class=&quot;alignnone size-full wp-image-315&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Add Plug-ins from 3rdParty Software Site&lt;/h3&gt;
&lt;p&gt;You can also add as much Plug-ins as you need from as much Software Sites as you need.&lt;/p&gt;
&lt;p&gt;As described in an earlier blog of this series you define all your SoftwareSites under Preferences.&lt;/p&gt;
&lt;p&gt;Let’s try the UpdateSite &lt;strong&gt;Ed Merks&lt;/strong&gt; &lt;a href=&quot;http://ed-merks.blogspot.com/2009/06/going-gaga-over-galileo.html&quot; target=&quot;_blank&quot;&gt;blogged&lt;/a&gt; about: “&lt;strong&gt;Galileo Plus&lt;/strong&gt;“&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/software-site-galileo-plus.png?w=370&amp;amp;h=196&quot; title=&quot;software site galileo plus&quot; height=&quot;196&quot; width=&quot;370&quot; alt=&quot;software site galileo plus&quot; class=&quot;alignnone size-full wp-image-327&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Select what you need – after clicking “&lt;strong&gt;Finish&lt;/strong&gt;” your Locations look like:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-definition-w-location-from-sites.png?w=402&amp;amp;h=196&quot; title=&quot;target definition w location from sites&quot; height=&quot;196&quot; width=&quot;402&quot; alt=&quot;target definition w location from sites&quot; class=&quot;alignnone size-full wp-image-316&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Add Plug-ins from Directories&lt;/h3&gt;
&lt;p&gt;As last option you can choose Plug-ins (bundles) stored in Directories. This is very handy if a Plug-in provider has no Software Update sites and provides only downlaods.&lt;/p&gt;
&lt;p&gt;Choose a folder containing Plug-ins (bundles):&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-add-content-from-directory.png?w=427&amp;amp;h=234&quot; title=&quot;target add content from directory&quot; height=&quot;234&quot; width=&quot;427&quot; alt=&quot;target add content from directory&quot; class=&quot;alignnone size-full wp-image-317&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Clicking on “&lt;strong&gt;&lt;em&gt;Next &amp;gt;&lt;/em&gt;&lt;/strong&gt;” gives you a &lt;strong&gt;preview&lt;span style=&quot;font-weight: normal;&quot;&gt;:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-add-content-from-directory-preview.png?w=306&amp;amp;h=228&quot; title=&quot;target add content from directory preview&quot; height=&quot;228&quot; width=&quot;306&quot; alt=&quot;target add content from directory preview&quot; class=&quot;alignnone size-full wp-image-318&quot; /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Click on “&lt;/span&gt;&lt;em&gt;Finish&lt;/em&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;” to add the content to your Target Definition.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;img src=&quot;http://ekkescorner.files.wordpress.com/2009/06/target-definition-w-location-from-directory.png?w=450&amp;amp;h=146&quot; title=&quot;target definition w location from directory&quot; height=&quot;146&quot; width=&quot;450&quot; alt=&quot;target definition w location from directory&quot; class=&quot;alignnone size-full wp-image-319&quot; /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Fine-tuning your selected Plug-ins (bundles)&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Now we have made selections from different kind of locations: Directory, Installation, Feature and Software Site.&lt;br /&gt;
You can do some fine-tuning we’ll talk about in my next blog “&lt;em&gt;Manage Plug-ins (bundles) in Eclipse Target Platform&lt;/em&gt;” &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
Posted in Eclipse, Equinox, Galileo, P2, PDE, Riena  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ekkescorner.wordpress.com/309/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/ekkescorner.wordpress.com/309/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ekkescorner.wordpress.com/309/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/ekkescorner.wordpress.com/309/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ekkescorner.wordpress.com/309/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/ekkescorner.wordpress.com/309/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ekkescorner.wordpress.com/309/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/ekkescorner.wordpress.com/309/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ekkescorner.wordpress.com/309/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/ekkescorner.wordpress.com/309/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=ekkescorner.wordpress.com&amp;amp;blog=7691743&amp;amp;post=309&amp;amp;subd=ekkescorner&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 30 Jun 2009 05:29:40 +0000</pubDate>
</item>
<item>
	<title>Kent Beck: Immovable Object versus Unstoppable Force: Capex and the Marginal Cost of Production</title>
	<guid isPermaLink="true">http://www.threeriversinstitute.org/blog/?p=268</guid>
	<link>http://www.threeriversinstitute.org/blog/?p=268</link>
	<description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;p&gt;One of the courses I study in the Farmyard Podcast University is economics. I like making sense of the world, and sometimes economics help make sense of the world. Sometimes. Sometimes it seems flatly contradictory. Here is one of those cases.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;http://www.britannica.com/EBchecked/topic/477991/theory-of-production&quot;&gt;theory of production&lt;/a&gt; states that in a competitive market, prices will stabilize at the marginal cost of production. That is, if I am a farmer with a bunch of wheat, I will be willing to sell my next kilo at the cost to raise that additional kilo. If seed, fertilizer, and diesel cost me $10 for that kilo, I will rationally take anything more than $10 for it. Since lots of other farmers are also competing to sell wheat, the price will fall to $10. I would be a chump to insist on a higher price and risk not selling at all. I would be a chump to sell for less than my cost of production. Price = marginal cost of production.&lt;/p&gt;
&lt;p&gt;The theory or production is used to “logically” justify a price of &lt;a href=&quot;http://www.wired.com/techbiz/it/magazine/16-03/ff_free?currentPage=all&quot;&gt;$0 for information&lt;/a&gt;. Since the marginal cost of production (the amount to distribute the next download) is essentially zero, so the story goes, the price for information will tend to zero.&lt;/p&gt;
&lt;h2&gt;Enter CAPEX&lt;/h2&gt;
&lt;p&gt;This theory takes a very narrow view of economics. Somebody has to pay for the tractor and the land. In this model, such costs get paid for out of an irrelevantly small slice of the price.&lt;/p&gt;
&lt;p&gt;Businesses divide the money they spend in to &lt;strong&gt;cap&lt;/strong&gt;ital &lt;strong&gt;ex&lt;/strong&gt;penditure, CAPEX, and &lt;strong&gt;op&lt;/strong&gt;erational &lt;strong&gt;ex&lt;/strong&gt;penditure, OPEX. CAPEX is money spent in anticipation of future gain, like buying a new tractor or writing a programming tool. OPEX is money spent in anticipation of immediate gain, like buying seed or paying this month’s bandwidth bill. The distinction between CAPEX and OPEX is important for tax reasons and because balancing the two in various ways can offer different business models.&lt;/p&gt;
&lt;p&gt;OPEX is really our friend the marginal cost of production by a different name. Bringing CAPEX into the picture highlights the absurdity of the “price = marginal cost of production” theory as OPEX trends to zero. That little “capital tax” added to every price becomes increasingly significant. What happens when price = marginal cost = $0? Like quantum effects, once you reach a certain scale the rules change. The Newtonian economics of “price = marginal cost of production” are overwhelmed by the need to finance the upfront capital. The form of solution to this has yet to emerge.&lt;/p&gt;
&lt;h2&gt;Is This Really a Problem?&lt;/h2&gt;
&lt;p&gt;One of the factors that has kept this dilemma from being a problem to date is increasing capital efficiency. A programmer today can produce software for much, much less than he would have required for the same functionality even ten years ago. In fields like journalism or music, the cost of doing an okay job has likewise fallen dramatically.&lt;/p&gt;
&lt;p&gt;The word “okay” is important in that last sentence. There is a difference between an &lt;a href=&quot;http://www.newyorker.com/arts/critics/books/2009/07/06/090706crbo_books_gladwell?currentPage=1&quot;&gt;article written by Malcolm Gladwell&lt;/a&gt; (on this very topic) and one written by, well, me. But if his costs money and mine is free and you don’t care enough about the difference, he can’t charge for his. I don’t care about charging for mine, because I make my money on, on, on… I’ll get back to you on that.&lt;/p&gt;
&lt;p&gt;Cracks are appearing in the system. One of my pressing needs is an efficient environment for collaborating in real-time on code. Many projects have started to provide such functionality, but most (all in the Eclipse world) have stalled short of solving the problem. Increasing capital efficiency in this case can’t overcome the size of the task of solving a difficult programming problem. The capital just isn’t there to solve the whole problem. A group of smart, poor graduate students can’t muster the capital necessary to solve it and a VC would have to be crazy to invest in it, given that no one will pay for a solution. And so a socially, economically significant problem goes unsolved.&lt;/p&gt;
&lt;p&gt;I don’t have a resolution of this dilemma. CAPEX is immovable but the pressure for “price = marginal cost of production” is unstoppable. One argument was that in a world of abundance, things that couldn’t be replicated easily, like one’s own physical presence, would increase in value. I am not finding that to be true, but I’m experimenting with &lt;a href=&quot;http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;amp;item=180375524276&quot;&gt;selling a remote pair programming session&lt;/a&gt;. I’ll get back to you on how it works. In the meantime I have some good ideas waiting for capital, I just can’t promise any payoff. I know I’m not alone.&lt;/p&gt;</description>
	<pubDate>Tue, 30 Jun 2009 02:55:18 +0000</pubDate>
</item>
<item>
	<title>Peter Friese: Getting Started with Xtext</title>
	<guid isPermaLink="false">http://www.peterfriese.de/?p=284</guid>
	<link>http://feedproxy.google.com/~r/FormFollowsFunctionEclipse/~3/gyutnkU_gww/</link>
	<description>&lt;p&gt;Xtext has been released as a part of the Eclipse Galileo release train on June 24th, 2009. Xtext is a framework for building DLSs (&lt;b&gt;d&lt;/b&gt;omain &lt;b&gt;s&lt;/b&gt;pecific &lt;b&gt;l&lt;/b&gt;anguages). In fact, it can be seen as a DSL for defining DSLs. &lt;/p&gt;
&lt;p&gt;In this article, we will develop a small DSL for defining entities. &lt;/p&gt;
&lt;h2&gt;Download and Install&lt;/h2&gt;
&lt;p&gt;Hop over to &lt;a href=&quot;http://xtext.itemis.com&quot;&gt;http://xtext.itemis.com&lt;/a&gt; and download an Xtext distribution matching your platform. We've got all major platforms: Windows, Mac OSX Carbon, Mac OSX Cocoa 64, Mac OSX Cocoa 32, Linux Gtk 64, Linux Gtk 32.&lt;/p&gt;
&lt;p&gt;To install, unzip the distribution file to a directory of your liking. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Windows users, please make sure you unzip to a directory near to your filesystem root! Eclipse contains files and folders with long names that might be hard to handle for Windows.&lt;/b&gt;&lt;/p&gt;
&lt;h2&gt;Create a new project&lt;/h2&gt;
&lt;p&gt;After launching Eclipse and creating a new workspace (or using an existing one), create a new Xtext project by selecting &lt;em&gt;File -&amp;gt; New... Project... -&amp;gt; Xtext Project&lt;/em&gt;. In this article, we're creating a DSL for describing entities, so let's go with the following settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Main project name: &lt;em&gt;org.xtext.example.entity&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Language name: &lt;em&gt;org.xtext.example.Entity&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;DSL-File extension: &lt;em&gt;entity&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Create generator project: &lt;em&gt;yes&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Click &lt;em&gt;Finish&lt;/em&gt; to let Xtext create the three projects that make up your DSL:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;org.xtext.example.entity - this project contains the DSL itself, including all back end infrastructure like the parser and the meta model.&lt;/li&gt;
&lt;li&gt;org.xtext.example.entity.ui - as the name implies, this project contains all UI centric code of the DSL: the editor, the outline, content assist and so forth&lt;/li&gt;
&lt;li&gt;org.xtext.example.entity.generator - this project contains a code generator which will transform the DSL scripts (aka models) you write in your DSL into something useful. In our example, we will create some POJOs and DAOs from our models.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upon finishing creating these three projects, Xtext opens a file &lt;em&gt;Entity.xtext&lt;/em&gt;, which contains a sample grammar, which we will change in a second.&lt;/p&gt;
&lt;h2&gt;Define the grammar for your DSL&lt;/h2&gt;
&lt;p&gt;Next up, we need to define the grammar for our DSL. To make things easier for us, let's first write down a sample model. Please open &lt;em&gt;org.xtext.example.entity.generator/src/model/MyModel.entity&lt;/em&gt; and key in the following text:&lt;/p&gt;
&lt;pre&gt;typedef String
typedef Integer
typedef Date mapsto java.util.Date

entity Person {
  String name
  String surName
  Date birthDay
  Address home
  Address work
}

entity Boss extends Person {
  Person* employees
}

entity Address {
  String street
  String number
  String city
  String ZIP
}
&lt;/pre&gt;
&lt;p&gt;Most of this model should be pretty obvious, but there are two things worth noting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We define our own list of data types to gain a certain degree of flexibilty, i.e. to map them to different types in the host language, as can be seen for the &lt;em&gt;Date&lt;/em&gt; data type, which gets mapped to &lt;em&gt;java.util.Date&lt;/em&gt; (we might also decide to map it to &lt;em&gt;java.sql.Date&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The star (*) denotes multiplicity. We might also have chosen square brackets (&lt;em&gt;Person[] employees&lt;/em&gt;) or something completely different - it's largely a matter of taste.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let's derive the grammar for this model. Open &lt;em&gt;org.xtext.example.entity/src/org/xtext/example/Entity.xtext&lt;/em&gt;, erase its entire contents and enter the following:&lt;/p&gt;
&lt;pre&gt;grammar org.xtext.example.Entity with org.eclipse.xtext.common.Terminals
generate entity &quot;http://www.xtext.org/example/Entity&quot;
&lt;/pre&gt;
&lt;p&gt;The first line indicates we want the new grammar to be derived from the (built-in) grammar &lt;em&gt;Terminals&lt;/em&gt;, which defines some basic terminal rules (like STRING, ID and so forth). If you're interested, &lt;em&gt;CTRL+Click&lt;/em&gt; on the language name to navigate to its definition.&lt;/p&gt;
&lt;p&gt;The second line defines the name and namespace URI for our own grammar.&lt;/p&gt;
&lt;p&gt;Let's now define that our DSL supports types. Add the following lines:&lt;/p&gt;
&lt;pre&gt;Model:
  (types+=Type)*;

Type:
  TypeDef | Entity;
&lt;/pre&gt;
&lt;p&gt;This tells Xtext that our &lt;em&gt;Model&lt;/em&gt; contains any number (i.e. &lt;em&gt;0..N&lt;/em&gt;, as declared by the &lt;em&gt;*&lt;/em&gt;) of &lt;em&gt;Type&lt;/em&gt;s. What exactly a &lt;em&gt;Type&lt;/em&gt; is needs to be specified. Apparently, a &lt;em&gt;Type&lt;/em&gt; can be either a &lt;em&gt;TypeDef&lt;/em&gt; or an &lt;em&gt;Entity&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;TypeDef:
  &quot;typedef&quot; name=ID (&quot;mapsto&quot; mappedType=JAVAID)?;
&lt;/pre&gt;
&lt;p&gt;A &lt;em&gt;TypeDef&lt;/em&gt; starts with the keyword &lt;em&gt;typedef&lt;/em&gt;, followed by an &lt;em&gt;ID&lt;/em&gt; making up its name. Following the name, we can optionally (hence the question mark at the end) add a &lt;em&gt;mapsto&lt;/em&gt; clause. The fragment &lt;em&gt;mappedType=JAVAID&lt;/em&gt; specifies that the &lt;em&gt;TypeDef&lt;/em&gt; will later have an attribute named &lt;em&gt;mappedType&lt;/em&gt; of type JAVAID. As JAVAID is not yet defined, we need to do so:&lt;/p&gt;
&lt;pre&gt;JAVAID:
  name=ID(&quot;.&quot; ID)*;
&lt;/pre&gt;
&lt;p&gt;So, a &lt;em&gt;JAVAID&lt;/em&gt; is a sequence of &lt;em&gt;ID&lt;/em&gt;s and dots, making up a qualified Java type name, such as &lt;em&gt;java.util.Date&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Next, let's define how to model entities:&lt;/p&gt;
&lt;pre&gt;Entity:
  &quot;entity&quot; name=ID (&quot;extends&quot; superEntity=[Entity])?
  &quot;{&quot;
    (attributes+=Attribute)*
  &quot;}&quot;;
&lt;/pre&gt;
&lt;p&gt;As you might have guessed, &lt;em&gt;Entity&lt;/em&gt;s start with the keyword &lt;em&gt;entity&lt;/em&gt;, followed by an &lt;em&gt;ID&lt;/em&gt; as their name. They may optionally extends another entity. Surrounding a rule call with square brackets means &quot;this is a cross reference&quot;, i.e. a reference to an already existing element.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Entity&lt;/em&gt;s do have &lt;em&gt;Attribute&lt;/em&gt;s (any number, to be precise), thus we have to define how &lt;em&gt;Attribute&lt;/em&gt;s look like:&lt;/p&gt;
&lt;pre&gt;Attribute:
  type=[Type] (many?=&quot;*&quot;)? name=ID;
&lt;/pre&gt;
&lt;p&gt;By now, you should be able to read this rule: an &lt;em&gt;Attribute&lt;/em&gt; has a &lt;em&gt;type&lt;/em&gt; which is a cross reference to a &lt;em&gt;Type&lt;/em&gt; (which is either a &lt;em&gt;TypeDef&lt;/em&gt; or an &lt;em&gt;Entity&lt;/em&gt;), it has an optional multiplicity indicator (the star) and - of course - if has a name.&lt;/p&gt;
&lt;p&gt;Your grammar should look like this by now:&lt;/p&gt;
&lt;pre&gt;grammar org.xtext.example.Entity with org.eclipse.xtext.common.Terminals

generate entity &quot;http://www.xtext.org/example/Entity&quot;

Model:
  (types+=Type)*;

Type:
  TypeDef | Entity;

TypeDef:
  &quot;typedef&quot; name=ID (&quot;mapsto&quot; mappedType=JAVAID)?;

JAVAID:
  name=ID(&quot;.&quot; ID)*;

Entity:
  &quot;entity&quot; name=ID (&quot;extends&quot; superEntity=[Entity])?
  &quot;{&quot;
    (attributes+=Attribute)*
  &quot;}&quot;;

Attribute:
  type=[Type] (many?=&quot;*&quot;)? name=ID;
&lt;/pre&gt;
&lt;h2&gt;Compiling the DSL&lt;/h2&gt;
&lt;p&gt;Now it is time to see the fruits of our labor. But first, we need to compile our grammar. Xtext will create:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a parser&lt;/li&gt;
&lt;li&gt;a serializer
&lt;/li&gt;&lt;li&gt;an Ecore meta model&lt;/li&gt;
&lt;li&gt;a full blown Eclipse editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;from this grammar. To make this happen, please select &lt;em&gt;org.xtext.example.entity/src/org/xtext/example/GenerateEntity.mwe&lt;/em&gt; and select &lt;em&gt;Run As -&amp;gt; MWE Workflow&lt;/em&gt; from the context menu. Xtext will now generate the entire infrastructure for your DSL and after a few seconds you should have a shiny new DSL including a great editor.&lt;/p&gt;
&lt;h2&gt;Taking it for a spin&lt;/h2&gt;
&lt;p&gt;Seeing is believing, so let's take the DSL editor for a test drive. Select the DSL project &lt;em&gt;org.xtext.example.entity&lt;/em&gt; and, from the context menu, select &lt;em&gt;Run As -&amp;gt; Eclipse Application&lt;/em&gt;. A second instance of Eclipse will be started.&lt;/p&gt;
&lt;p&gt;In this new instance, create a new, empty project (&lt;em&gt;File -&amp;gt; New -&amp;gt; Project... -&amp;gt; General -&amp;gt; Project&lt;/em&gt;. Create a new file &lt;em&gt;Sample.entity&lt;/em&gt; in the new project.&lt;/p&gt;
&lt;p&gt;You can now insert the model we designed above or enter a new model:&lt;br /&gt;
&lt;a href=&quot;http://www.flickr.com/photos/81029262@N00/3673405506&quot; title=&quot;View 'Getting Started With Xtext' on Flickr.com&quot;&gt;
&lt;/a&gt;&lt;/p&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/81029262@N00/3673405506&quot; title=&quot;View 'Getting Started With Xtext' on Flickr.com&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2574/3673405506_09fed234e1.jpg&quot; alt=&quot;Getting Started With Xtext&quot; border=&quot;0&quot; width=&quot;500&quot; height=&quot;411&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://www.flickr.com/photos/81029262@N00/3673405506&quot; title=&quot;View 'Getting Started With Xtext' on Flickr.com&quot;&gt;
&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/81029262@N00/3673405506&quot; title=&quot;View 'Getting Started With Xtext' on Flickr.com&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Leveraging the model&lt;/h2&gt;
&lt;p&gt;Now that we've got a fancy editor for our DSL, we want to transform the models we can create with this editor into something meaningful. This, however, will be the topic of the next installment.&lt;/p&gt;
&lt;h2&gt;More info&lt;/h2&gt;
&lt;p&gt;Feel free to discuss this article in the comments section of &lt;a href=&quot;http://www.peterfriese.de&quot;&gt;my blog&lt;/a&gt;. Should you have any technical questions regarding Xtext, we've got an &lt;a href=&quot;http://www.eclipse.org/newsportal/thread.php?group=eclipse.modeling.tmf&quot;&gt;excellent newsgroup&lt;/a&gt; where the committers answer your questions. We also offer &lt;a href=&quot;http://xtext.itemis.com/xtext/language=en/23946/professional-services&quot;&gt;professional (commercial) support&lt;/a&gt;, i.e. customized trainings to get your team up to speed. Just &lt;a href=&quot;http://feeds.feedburner.com/FormFollowsFunctionEclipse&quot;&gt;drop us a note&lt;/a&gt;, we're happy to discuss the details with you.&lt;/p&gt;
&lt;img width=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/FormFollowsFunctionEclipse/~4/gyutnkU_gww&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 29 Jun 2009 22:17:56 +0000</pubDate>
</item>
<item>
	<title>Scott Lewis: Early bird defines the worm!</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=2100</guid>
	<link>http://eclipsesource.com/blogs/2009/06/29/all-contributions-are-equal-early-bird-defines-worm-however/</link>
	<description>&lt;p&gt;In his posting &lt;a href=&quot;http://konigsberg.blogspot.com/2009/06/all-contributions-are-equal-some-more.html&quot;&gt;All contributions are Equal, some are more equal than others,&lt;/a&gt; Robert Konigsberg points out that contributing multiple ways of doing things can easily lead to more user complexity (e.g., by having multiple toString generators).&lt;/p&gt;
&lt;p&gt;This is true and in my view, a risk for any system that has many strongly-opinioned contributors (pretty much any large open source project).&lt;/p&gt;
&lt;p&gt;Toward the end of his post, he poses a process-level question about how to avoid the situation of some contributions being more equal than others…. I think the solution is the current de facto for Eclipse.org projects and that’s the (frequently unstated) reality that &lt;strong&gt;the early bird defines the worm&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When it comes down to it, those that initiate and then follow through on enhancements, fixes, documentation or other contributions get to choose when it comes to actual design decisions.  Inevitably, there are design choices that some disagree with, even when all discussion is had completely in the &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=26070&quot;&gt;open&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I think the truth of the &lt;strong&gt;early bird defines the worm&lt;/strong&gt; statement is that we should provide incentive to organizations and individuals in the community to be more aggressive about contributing to existing Eclipse projects. This is because  waiting for someone else to initiate, design, implement, test and document something often doesn’t work very well.&lt;/p&gt;
&lt;p&gt;To some, it may seem like Eclipse Project development is effectively subsidized by others, but this is not true.  Even for one’s own usage of Eclipse, contribution and community involvement with Eclipse.org projects pays dividends. There are many ways to contribute, from &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=26070&quot;&gt;contributing discussion/ideas&lt;/a&gt;, to &lt;a href=&quot;http://www.eclipse.org/projects/listofprojects.php&quot;&gt;planning&lt;/a&gt;, to &lt;a href=&quot;http://wiki.eclipse.org/TweetHub&quot;&gt;new example/app code&lt;/a&gt;, to helping to maintain &lt;a href=&quot;http://www.eclipse.org/orbit/&quot;&gt;existing code&lt;/a&gt;, to &lt;a href=&quot;http://wiki.eclipse.org/&quot;&gt;documentation&lt;/a&gt;, to &lt;a href=&quot;http://wiki.eclipse.org/Build_Workshop_2:_Build_Harder&quot;&gt;build support&lt;/a&gt;, to &lt;a href=&quot;https://bugs.eclipse.org/bugs/&quot;&gt;testing and bug reporting&lt;/a&gt;, to &lt;a href=&quot;https://bugs.eclipse.org/bugs/query.cgi&quot;&gt;providing bug fixes&lt;/a&gt;, to &lt;a href=&quot;http://wiki.eclipse.org/Google_Summer_of_Code_2009&quot;&gt;mentoring&lt;/a&gt;, and plenty of other kinds of support.&lt;/p&gt;
&lt;p&gt;In my view, these are the ways to get your contributions into Eclipse, and influence the community around the software.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://wiki.eclipse.org/ToString()_generation&quot;&gt;Here’s my understanding of where the toString() contribution originated.&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 29 Jun 2009 21:00:51 +0000</pubDate>
</item>
<item>
	<title>Kevin McGuire: Why choice reduces usability</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/kevinmcguire/?p=111</guid>
	<link>http://dev.eclipse.org/blogs/kevinmcguire/2009/06/29/why-choice-reduces-usability/</link>
	<description>&lt;p&gt;We usually consider choice as being a good thing, whether it be around choice of restaurant, chocolate bar, clothing, or technology.  Choice makes us feel empowered, and variety adds richness to life.&lt;/p&gt;
&lt;p&gt;Not surprisingly, embedded in the design philosophy of Eclipse is the notion that “choice is good”.  Clearly then, if some choice is good, more choice is better. And darn if Eclipse doesn’t give you a LOT of choice!  The preferences alone should make any humble programmer feel empowered to tweak the IDE into exactly the shape and behaviour you want.&lt;/p&gt;
&lt;p&gt;However, it turns out that in practice, while we believe we want choice, there is good research suggesting that more choice makes us less happy.  For an excellent book on the subject, I highly recommend &lt;a href=&quot;http://www.amazon.com/Paradox-Choice-Why-More-Less/dp/0060005696/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1246301891&amp;amp;sr=8-1&quot;&gt;The Paradox of Choice by Barry Schwartz&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’ve been pondering this a lot lately with respect to user interface design in general, and Eclipse specifically. What we often forget (and Schwartz does a great job of explaining) is that there is a cost to choice.  One must understand the choices themselves, one must be informed, otherwise we risk choosing wrong.  Not only does that comparison itself imply a cost (learning, weighing), but bad choices cost us more than good ones benefit us.  That is, we feel the negative impact of say losing $50 to a greater extent than we feel the positive emotional impact of winning the same amount.  Therefore, paradoxially, although we seek choice, we actually prefer not to choose.  There’s much more in the Scwartz book and I encourage you to read it.&lt;/p&gt;
&lt;p&gt;Thus a common misbelief in UI design is that giving the user more choice will increase the usability of the product.   It’s almost always not true.  What choice does is increase the &lt;em&gt;utility&lt;/em&gt; of the product, because you can use it for more things, or in more ways.  But it reduces the &lt;em&gt;usability&lt;/em&gt;, because the choice brings with it a cost that the user must bear.  (Note that I’m ignoring accessibility related preferences since these obviously increase usability for those who need them).&lt;/p&gt;
&lt;p&gt;A favorite example is the following dialog that you get post P2 update.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/kevinmcguire/files/2009/06/restart-dialog.jpg&quot;&gt;&lt;img width=&quot;500&quot; alt=&quot;&quot; src=&quot;http://dev.eclipse.org/blogs/kevinmcguire/files/2009/06/restart-dialog.jpg&quot; class=&quot;aligncenter size-full wp-image-112&quot; height=&quot;173&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now to be clear, I’m not picking on P2, this happens to be a good example, and there are many more throughout Eclipse.  Plus, I must confess that I had a hand in this dialog.&lt;/p&gt;
&lt;p&gt;The dialog is there to support the set of users who know under which conditions the workspace does not need to be restarted.  Personally, I refer to it as the “Feeling lucky, punk?” dialog.  Susan and I have had many discussions about this dialog and in keeping with the theme of “just enough rope to hang yourself with” decided to leave it in Eclipse for the power users.  For many though, it leaves you scratching your head, or even a little afraid.  These “some add-ons”, how do I know which they are?  Is there a list?  If yes, why doesn’t Eclipse have this list so it doesn’t have to ask me?  If such a list can’t exist, then what chance do I have? What happens if I say “No” and &lt;em&gt;don’t&lt;/em&gt; restart, will bad things occur?  If so, why do you let me do it?  If not, then why aren’t two choices sufficient?  What are the warning signs that I should’ve said yes, and then what should I do to fix it?  It’s asking me if I want to restart, but it’s giving a binary choice (yes/no), plus another choice, so will “Apply Changes” restart or not?  And if not, does it mean that “No” didn’t apply the changes?  I’m afraid!  Mommy!!&lt;/p&gt;
&lt;p&gt;Thus we’ve increased utility (advanced users can work more efficiently), but we’ve decreased usability (all users are forced to make a decision with no guidance, where the consequence of picking the non-default is unknowable at that moment).&lt;/p&gt;
&lt;p&gt;Next time you go to add a preference or provide a choice dialog, it’s worth considering the cost of the choice and it’s impact on usability.  Ask yourself, “Have I really benefitted the majority of my users in providing this?  Or have I benefitted a few at what cost to the many?”.&lt;/p&gt;</description>
	<pubDate>Mon, 29 Jun 2009 20:24:57 +0000</pubDate>
</item>
<item>
	<title>Ben Vitale: Debugging PDE Build and the publisher</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1968631882469464262.post-4892808147516269728</guid>
	<link>http://eclipse-ruminations.blogspot.com/2009/06/debugging-pde-build-and-publisher.html</link>
	<description>I posted a &lt;a href=&quot;http://www.eclipse.org/newsportal/article.php?id=1856&amp;amp;group=eclipse.platform.pde#1856&quot;&gt;problem&lt;/a&gt; to the PDE newsgroup last week about unexpected requirements in my product feature. This was in the context of moving a 3.4-based product to 3.5.&lt;br /&gt;&lt;br /&gt;The general issue was that the &lt;a href=&quot;http://wiki.eclipse.org/Equinox_p2_director_application&quot;&gt;director&lt;/a&gt; wouldn't install my product because of an unsatisfied requirement. It wasn't clear to me where this requirement was even coming from. Somewhere, there was some metadata in my plugins/features that expressed a dependency that had worked fine in 3.4 but failed in 3.5. My theory was that if I could capture when the publisher was generating the requirement, I'd be able to see the source of that requirement and squash it.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Tracing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First attempt was to turn on &lt;a href=&quot;http://wiki.eclipse.org/FAQ_How_do_I_use_the_platform_debug_tracing_facility%3F&quot;&gt;tracing&lt;/a&gt; for the p2 components. I managed to find the &lt;code&gt;org.eclipse.equinox.internal.p2.core.helpers.Tracing&lt;/code&gt; class which listed out the different options. I stuffed those into a .options file:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;org.eclipse.equinox.p2.core/debug=true&lt;br /&gt;#org.eclipse.equinox.p2.core/generator/parsing=true&lt;br /&gt;#org.eclipse.equinox.p2.core/engine/installregistry=true&lt;br /&gt;#org.eclipse.equinox.p2.core/metadata/parsing=true&lt;br /&gt;#org.eclipse.equinox.p2.core/artifacts/mirrors=true&lt;br /&gt;#org.eclipse.equinox.p2.core/core/parseproblems=true&lt;br /&gt;#org.eclipse.equinox.p2.core/planner/operands=true&lt;br /&gt;#org.eclipse.equinox.p2.core/planner/projector=true&lt;br /&gt;#org.eclipse.equinox.p2.core/engine/profilepreferences=true&lt;br /&gt;org.eclipse.equinox.p2.core/publisher=true&lt;br /&gt;#org.eclipse.equinox.p2.core/reconciler=true&lt;br /&gt;#org.eclipse.equinox.p2.core/core/removeRepo=true&lt;br /&gt;#org.eclipse.equinox.p2.core/updatechecker=true&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then the trick was to pass along those options to the &lt;code&gt;AntRunner&lt;/code&gt; app which drives PDE build. I added &lt;code&gt;-debug path/to/.options&lt;/code&gt; into my arguments to &lt;code&gt;AntRunner&lt;/code&gt;. Running the build again I got two things, neither of which were helpful:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Passing &lt;code&gt;-debug&lt;/code&gt; to the Platform also passes &lt;code&gt;-debug&lt;/code&gt; onto Ant, thanks to &lt;code&gt;AntRunner&lt;/code&gt;. So my Ant ran in debug mode which really clouded the issue with about 8mb of debug output.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The publisher only outputs two trace statements: start and finish. Nothing about what it is publishing. This may be a candidate for enhancement.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Based on these results, I reasoned that nobody else must be using this technique to solve their p2 problems. Moving on.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Stepping through the publisher&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next up: run &lt;code&gt;AntRunner&lt;/code&gt; with Java debug enabled so that I could connect remotely and set breakpoints in the publisher actions.  I added the appropriate JVM args to enable the Java wire debug protocol. Started the build again, connected up and started setting breakpoints in various publisher actions. &lt;br /&gt;&lt;br /&gt;Since the rogue requirement was getting added to my product feature IU, I added a conditional breakpoint in &lt;code&gt;FeaturesAction&lt;/code&gt; to look for that feature being processed.&lt;br /&gt;&lt;br /&gt;Then, since the problematic requirement was &lt;code&gt;org.eclipse.core.resources [3.4.0,3.5.0)&lt;/code&gt; I added another conditional breakpoint in &lt;code&gt;getVersionRange&lt;/code&gt; to watch for incoming feature entries with 3.4.0 as their minimum version. &lt;br /&gt;&lt;br /&gt;I did finally discover the problem: I had a bunch of old, outdated entries in my product feature's feature.xml, which included references to several different versions of o.e.core.resources. After I ripped those out, I had a successful build and director install.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Conclusions&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Do not pass the debug flag to &lt;code&gt;AntRunner&lt;/code&gt; for purposes of debugging platform code unless you are prepared to wade through volumes of output. (I guess this is a feature of AntRunner - &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=5672&quot;&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=5672&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It was not at all apparent to me to debug p2 actions by setting up a &quot;remote&quot; debug session with PDE build running inside of &lt;code&gt;AntRunner&lt;/code&gt;. But it was sure as heck helpful once I figured it out.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I am actually glad that I ran across this problem, and that p2 is enforcing these types of constraints, because it helped me clean up outdated dependencies in my feature.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;How are you debugging your p2 builds??&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1968631882469464262-4892808147516269728?l=eclipse-ruminations.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 29 Jun 2009 17:41:47 +0000</pubDate>
	<author>noreply@blogger.com (Ben Vitale)</author>
</item>
<item>
	<title>Robert Konigsberg: All contributions are Equal, some are more equal than others</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-8055871.post-9194892401228687699</guid>
	<link>http://konigsberg.blogspot.com/2009/06/all-contributions-are-equal-some-more.html</link>
	<description>This evening I read &lt;a href=&quot;http://www.horstmann.com/&quot;&gt;Cay Hortmann&lt;/a&gt;'s article on &lt;a href=&quot;http://weblogs.java.net/blog/cayhorstmann/archive/2009/06/upgrading_to_ec.html&quot;&gt;upgrading to Galileo&lt;/a&gt;. (For those of you who do not know Cay, he writes the fantastic &lt;a href=&quot;http://horstmann.com/corejava.html&quot;&gt;Core Java&lt;/a&gt; books. I learned Java from the 1.1 version, as well as both the 1.4 and 1.5 versions. He writes great stuff.)&lt;br /&gt;&lt;br /&gt;In the article he makes this comment:&lt;br /&gt;&lt;blockquote&gt;There is now an option to generate &lt;code&gt;toString&lt;/code&gt; automatically.     This is something I've wanted for a long time. Unfortunately, it is not     very good. &lt;a href=&quot;http://horstmann.com/corejava&quot;&gt;Core Java&lt;/a&gt; gives     these simple rules for &lt;code&gt;toString&lt;/code&gt;:  &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use &lt;code&gt;getClass().getName()&lt;/code&gt; to print the class name. Then         your &lt;code&gt;toString&lt;/code&gt; can be inherited.&lt;/li&gt;&lt;li&gt;When you redefine &lt;code&gt;toString&lt;/code&gt; in a subclass, first call         &lt;code&gt;super.toString()&lt;/code&gt;, then add the subclass data. &lt;/li&gt;&lt;/ul&gt;The Eclipse formatter follows neither of these eminently sensible rules.     Maybe in 3.6. &lt;/blockquote&gt;I've not yet seen the &lt;span&gt;toString&lt;/span&gt; generator, but having written more than enough &lt;span&gt;toString&lt;/span&gt; implementations, I've worried that such a code generator may be less than ideal. Similarly, I've seen the &lt;span&gt;equals&lt;/span&gt; and &lt;span&gt;hashCode&lt;/span&gt; generators at work, and I also tend to not want to use them.&lt;br /&gt;&lt;br /&gt;Given that I work for a company that has so much Java code that &quot;If code was ice cream, it would be a lot of ice cream,&quot; [Ref &lt;a href=&quot;http://javaposse.com/index.php?post_id=451742&quot;&gt;Java Posse 240&lt;/a&gt;, 9:15] in addition to having &lt;a href=&quot;http://google-collections.googlecode.com/svn/trunk/javadoc/index.html?http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/package-summary.html&quot;&gt;very helpful helper methods for &lt;span&gt;hashCode&lt;/span&gt; and &lt;span&gt;equals&lt;/span&gt;&lt;/a&gt;, I'd love more finely-tuned generators for such critical methods.&lt;br /&gt;&lt;br /&gt;But I feel a bit constrained by one of the basic rules guiding Eclipse contributions, as defined by the book &lt;a href=&quot;http://www.ebookdigger.com/contributing-to-eclipse-principles-patterns-and-plug-ins.html&quot;&gt;Eclipse: Principles, Patterns and Plug-ins&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;As the Contribution Rule reminds us, “Everything is a contribution.” And with many contributions, the possibilities are endless.&lt;/blockquote&gt;OK, so let's say I write my own generators for &lt;span&gt;toString&lt;/span&gt;, &lt;span&gt;hashCode&lt;/span&gt; and &lt;span&gt;equals&lt;/span&gt;.  Then there are two &lt;span&gt;toString&lt;/span&gt; generators in the IDE, one possibly better than the other. Why should the end user be forced to deal with two confusing UI contributions?&lt;br /&gt;&lt;br /&gt;Sure, there's also the recent object of my affections, &lt;a href=&quot;http://konigsberg.blogspot.com/2009/06/patch-fragments-redux.html&quot;&gt;patch fragments&lt;/a&gt;, but the patch fragment is a back-door lover.&lt;br /&gt;&lt;br /&gt;I want to remove the default contributions altogether, and replace them with something better suited to my environment. But that violates the Contribution Rule. Am I stuck with something less than ideal until Eclipse 3.6, or worse, forever?&lt;br /&gt;&lt;br /&gt;What's the solution here?&lt;br /&gt;&lt;br /&gt;PS: Has someone picked up on Cay's concerns and logged a bug?&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8055871-9194892401228687699?l=konigsberg.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 29 Jun 2009 16:23:52 +0000</pubDate>
	<author>noreply@blogger.com (Robert Konigsberg)</author>
</item>
<item>
	<title>David Green: Hudson Helper for Android</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1482979278030787271.post-5545038659639005688</guid>
	<link>http://greensopinion.blogspot.com/2009/06/hudson-helper-for-android.html</link>
	<description>&lt;p&gt;Recently I &lt;a href=&quot;http://greensopinion.blogspot.com/2009/05/hudson-helper-hudson-on-your-iphone.html&quot;&gt;launched Hudson Helper&lt;/a&gt; for iPhone and iPod Touch, enabling &lt;a href=&quot;http://en.wikipedia.org/wiki/Continuous_Integration&quot;&gt;Continuous Integration&lt;/a&gt; fans to stay in touch with their projects.  Android users can get in on the game now too, with Hudson Helper for Android.&lt;/p&gt;&lt;table width=&quot;100%&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_vw9l2nnub6c/SkRLRmlN2FI/AAAAAAAAAHQ/Dtv1IMkFURc/s800/hh-blog1.png&quot; alt=&quot;Hudson Helper for Android&quot; border=&quot;0&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Hudson Helper for Android provides all of the same features as the iPhone version including support for multiple servers and authentication.  New for this version are build controls: start and stop builds right from your phone.  CI can be even more fun with shake-to-build and sound effects.&lt;/p&gt;&lt;p&gt;To get Hudson Helper for Android, search for 'Hudson Helper' in the Google Market on your Android device.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1482979278030787271-5545038659639005688?l=greensopinion.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 29 Jun 2009 16:13:43 +0000</pubDate>
	<author>noreply@blogger.com (David Green)</author>
</item>
<item>
	<title>Stéphane Drapeau: SCA Tools Galileo Release</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/sdrapeau/?p=35</guid>
	<link>http://dev.eclipse.org/blogs/sdrapeau/2009/06/29/sca-tools-galileo-release/</link>
	<description>&lt;p&gt;The &lt;a href=&quot;http://www.eclipse.org/stp/sca/index.php&quot;&gt;SCA Tools project&lt;/a&gt; has seen an enormous amount of new development since the 2008 Ganymede release. We’ve added an &lt;a href=&quot;http://wiki.eclipse.org/STP/SCA_Component/SCA_XML_Editor&quot;&gt;XML editor&lt;/a&gt; to make editing and updating SCA-standard assembly files really easy.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://wiki.eclipse.org/images/d/da/SCA2M3XMLEditorAutoCompletion.jpg&quot; alt=&quot;SCA Tools 2.0.0 - XML editor&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For Java developers, it’s now possibly to create an SCA assembly definition and then &lt;a href=&quot;http://wiki.eclipse.org/STP/SCA_Component/SCA_Composite_to_Java&quot;&gt;generate Java code&lt;/a&gt; from it. And, if you want to start with some Java you already have, we’ve added a special introspector that will investigate your code and automatically produce an SCA assembly.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://wiki.eclipse.org/images/5/5c/SCATools-GenerateJavaSkeleton.jpg&quot; alt=&quot;SCA Tools 2.0.0 Generate Java and Introspect Java code&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once you’ve created your Java SCA project, you can then &lt;a href=&quot;http://wiki.eclipse.org/STP/SCA_Component/SCA_Java_Run_and_Debug&quot;&gt;run and debug&lt;/a&gt; it using the great facilities that Eclipse provides.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://wiki.eclipse.org/images/c/cf/SCA_Java_Run_and_Debug_runAs.gif&quot; alt=&quot;Run as&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We also have made sure that the SCA artifacts you might create are &lt;a href=&quot;http://wiki.eclipse.org/STP/SCA_Component/SCA_Builder&quot;&gt;properly validated&lt;/a&gt;, helping you spot mistakes early in the process.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://wiki.eclipse.org/images/6/69/SCAErrorMarker.png&quot; alt=&quot;SCA Tools 2.0.0 - Validation&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We even took the time to update the graphics, giving us a prettier SCA Composite Designer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.eclipse.org/stp/sca/screenshots/composite.png&quot; alt=&quot;SCA Tools 2.0.0 - Composite Designer&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For me, the most exciting feature is how we’ve developed the core SCA model to be &lt;a href=&quot;http://wiki.eclipse.org/STP/SCA_Component/SCA_MMExtension&quot;&gt;extensible&lt;/a&gt; by people who want to write in &lt;a href=&quot;http://wiki.eclipse.org/STP/SCA_Component/SCA_CompositeDesignerExtension&quot;&gt;extra capabilities into the tools&lt;/a&gt;. The heart of the model contains the SCA standard specifications, and different extensions have been created to support the key Open Source SCA runtimes - Apache Tuscany 1.4 and Frascati 0.5. Using the extension mechanisms, it is much more straightforward to &lt;a href=&quot;http://wiki.eclipse.org/STP/SCA_Project/Ontology&quot;&gt;add new concepts&lt;/a&gt; to SCA and extend the tools to include them.&lt;/p&gt;
&lt;p&gt;SCA Tools has been improved a lot. &lt;a href=&quot;http://wiki.eclipse.org/STP/SCA_Project&quot;&gt;Download SCA Tools 2.0.0 now!&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 29 Jun 2009 15:58:00 +0000</pubDate>
</item>
<item>
	<title>Shaun Smith: OSGi Persistence Slides from OSGi DevCon Europe 2009</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-7994778055369999579.post-364109598386715473</guid>
	<link>http://onpersistence.blogspot.com/2009/06/osgi-persistence-slides-from-osgi.html</link>
	<description>Here are the slides to a short presentation I gave on persistence at OSGi DevCon Europe in Zurich.  I had 30 minutes and wanted to do a demo to show that EclipseLink is running nicely in OSGi--it was tough cramming all this in but I did it without a moment to spare. Enjoy the slides and if they spark some questions you can post them here on the blog or on the EclipseLink newsgroup at http://www.eclipse.org/newsportal/thread.php?group=eclipse.rt.eclipselink or the eclipselink-users mailing list.&lt;br /&gt;--Shaun&lt;div style=&quot;width: 425px; text-align: left;&quot; id=&quot;__ss_1654794&quot;&gt;&lt;a style=&quot;font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/shaunmsmith/osgi-persistence-with-eclipselink?type=powerpoint&quot; title=&quot;OSGi Persistence With EclipseLink&quot;&gt;OSGi Persistence With EclipseLink&lt;/a&gt;&lt;div style=&quot;font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;&quot;&gt;View more &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/&quot;&gt;documents&lt;/a&gt; from &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/shaunmsmith&quot;&gt;shaunmsmith&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7994778055369999579-364109598386715473?l=onpersistence.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 29 Jun 2009 15:44:14 +0000</pubDate>
	<author>noreply@blogger.com (Shaun Smith)</author>
</item>
<item>
	<title>Polishin' Eclipse: Eclipse DemoCamp in Cracow - Round 3</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5067915972998518904.post-2279152485183608159</guid>
	<link>http://polishineclipse.blogspot.com/2009/06/eclipse-democamp-in-cracow-round-3.html</link>
	<description>This is the third time when Eclipse DemoCamp was organized in Krakow. On Jun 27 (Saturday) Eclipse fans from Krakow met in Baraka club at Kazimierz in Krakow.&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;width: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/wGqvN3XlUyIxkfpBovFjXg?authkey=Gv1sRgCIruyoeyzqTdXA&amp;amp;feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/_0blQxr9ItWs/SkjQSQVg4zI/AAAAAAAABzk/8COGViBALUE/s400/EDC_Galileo_Cracow_Baraka.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Kazimierz is an old Jewish department of Krakow. You can read more about it &lt;a href=&quot;http://en.wikipedia.org/wiki/Kazimierz&quot;&gt;here&lt;/a&gt;. For us important is the atmosphere there which is in favor for such events.&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;width: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/tF65lIl2axj09ImxLa3ZWw?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_0blQxr9ItWs/SkicHyFATWI/AAAAAAAAByU/40_VqcgInyw/s144/IMG_1631.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/oizUB1SWVuUsRFHjSa1leQ?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_0blQxr9ItWs/SkicJRM24GI/AAAAAAAAByk/NB12hQnlg3w/s144/IMG_1633.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/WcK24qHjFP3xN4zLill7zA?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/_0blQxr9ItWs/SkicMY4cQqI/AAAAAAAABzE/rbjrx_G-Buo/s144/IMG_1643.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/fzG7R7pXQykf1nJBSQo6Xg?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/_0blQxr9ItWs/SkicCW-4fjI/AAAAAAAABxc/Avzyzm1Suvs/s144/IMG_1615.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Since we wanted to celebrate the Galileo release, we didn't fill the whole time with talks and demos.&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;width: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/hJEg9B05KZHciqGU3Ey3PA?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_0blQxr9ItWs/SkicJ9sgCcI/AAAAAAAABys/lplWGdtHEI0/s144/IMG_1637.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/7Gbvx_Am2HQVRGYokP7Erg?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/_0blQxr9ItWs/SkicKho3CFI/AAAAAAAABy0/6IUtRl2kCAY/s144/IMG_1639.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/YHFWB6aoz_V8CC4DGtn9hA?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh5.ggpht.com/_0blQxr9ItWs/SkicE4A9ltI/AAAAAAAABx0/m8E-svj65ag/s144/IMG_1624.JPG&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;More than a half of the time was just chatting with beer and pizza in hands. This way we managed to answer more questions and meet more people personally than we could do otherwise.&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;width: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/TYS4KWFSno8P-KIKt-yMkQ?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_0blQxr9ItWs/SkicBF0zcTI/AAAAAAAABxM/XZV46m4byQk/s144/IMG_1613.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/e9eQDHCY_i5vn_nb7oHZzA?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_0blQxr9ItWs/Skib9pi1fUI/AAAAAAAABwk/Po29T16hIwU/s144/IMG_1607.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/pUYWzMnMT4Ps1GrrPoHmYw?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_0blQxr9ItWs/Skib_FsXDoI/AAAAAAAABw0/gG2Gxe-2Chc/s144/IMG_1609.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;People came despite the rain. I understand that this could be hard to wake up early on Saturday when it rains. However Eclipse people are tough guys and girls, so rooms at the club were full.&lt;br /&gt;&lt;br /&gt;Moreover we found a new application for laptops. Yet another proof that ThinkPads rules :)&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;width: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.pl/lh/photo/dHQFyC83hteFLCgPUMK0XQ?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh5.ggpht.com/_0blQxr9ItWs/SkicGc_PeFI/AAAAAAAAByE/cwtMi7drhYM/s144/IMG_1628.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The agenda and the list of attendees can be found &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_DemoCamps_Galileo_2009/Krakow&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Don't forget that the next DemoCamp is in November and you are all welcome. Cheers!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5067915972998518904-2279152485183608159?l=polishineclipse.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 29 Jun 2009 14:57:26 +0000</pubDate>
	<author>noreply@blogger.com (Szymon Brandys)</author>
</item>
<item>
	<title>BioClipse: Bioclipse 2.0 Release Candidate 4</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-19419978.post-2630184935924665332</guid>
	<link>http://bioclipse.blogspot.com/2009/06/bioclipse-20-release-candidate-4.html</link>
	<description>Today, Bioclipse 2.0 Release Candidate 4 (versioned 2.0.0.RC4) was released. The release requires a fresh download from &lt;a href=&quot;http://sourceforge.net/projects/bioclipse&quot;&gt;Sourceforge&lt;/a&gt;, and we kindly ask beta-testers for bug reports on the &lt;a href=&quot;http://bugs.bioclipse.net/&quot;&gt;bugs.bioclipse.net&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Hopefully this will be the candidate for the 2.0 release.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/19419978-2630184935924665332?l=bioclipse.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 29 Jun 2009 14:46:09 +0000</pubDate>
	<author>noreply@blogger.com (Ola Spjuth)</author>
</item>
<item>
	<title>Tom Schindl: Now that’s cool</title>
	<guid isPermaLink="false">http://tomsondev.bestsolution.at/?p=435</guid>
	<link>http://tomsondev.bestsolution.at/2009/06/29/now-thats-cool/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;If you are following my blog you may have noticed that I invested some hours this weekend in Eclipse-Databinding and GWT. &lt;/p&gt;
&lt;p&gt;It was Saturday in the evening when I got the Eclipse-Databinding working inside GWT and I started searching for a decent Table and TableTree-Widget (I looked at the code in the gwt-incubator but that didn’t made me happy). So I thought the RAP people are using Qooxdoo as the underlying JavaScript-UI library what would be if there was a GWT-Binding to this JavaScript-Lib using the GWT-native calling interface and so I started search for such a thing but apparently noone ever tried to write such a thing. So I started reading docs and studying libraries who use this native-calling interface – I’ve never written such a thing before – and voilá it was yesterday around lunch time when I had the first success because one of the GWT-Demos showed up.&lt;/p&gt;
&lt;ins style=&quot;text-decoration: none;&quot;&gt;
&lt;div class=&quot;video-player&quot; id=&quot;x-video-3&quot;&gt;
 &lt;/div&gt;&lt;/ins&gt;
&lt;p&gt;The Java code for this small application looks like this:&lt;/p&gt;
&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;
public class Button extends QooxdooApp {
	@Override
	protected void run(QxAbstractGui application) {
		QxHBox box = new QxHBox();
		box.setSpacing(10);

		QxComposite container = new QxComposite(box);
		container.setPadding(20);

		application.getRoot().add(container, QxOption.left(0), QxOption.top(0));

		QxButton btn1 = new QxButton(&quot;Button A&quot;, &quot;/icon/22/apps/media-video-player.png&quot;);
		container.add(btn1);

		QxButton btn2 = new QxButton(&quot;Button B&quot;, &quot;/icon/22/apps/internet-mail.png&quot;);
		btn2.setEnabled(false);
		container.add(btn2);

		QxToggleButton btn3 = new QxToggleButton(&quot;Toggle Button&quot;, &quot;/icon/22/apps/internet-web-browser.png&quot;);
		btn3.focus();
		container.add(btn3);

		QxRepeatButton btnRepeat = new QxRepeatButton(null,&quot;/icon/22/actions/list-add.png&quot;);

		container.add(btnRepeat);

		final QxLabel l1 = new QxLabel(&quot;0&quot;);
		l1.setDecorator(&quot;main&quot;);
		l1.setPadding(2, 4);
		l1.setBackgroundColor(&quot;white&quot;);
		container.add(l1);

		btnRepeat.addExecuteHandler(new ExecuteHandler() {

			public void execute(ExecuteEvent executeEvent) {
				int tmp = Integer.parseInt(l1.getContent()) + 1;
				l1.setContent(tmp+&quot;&quot;);
			}
		});
	}

}
&lt;/pre&gt;
&lt;p&gt;and now compare it too the original source:&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; name=&quot;code&quot;&gt;
/* ************************************************************************

   qooxdoo - the new era of web development

   http://qooxdoo.org

   Copyright:
     2004-2008 1&amp;amp;1 Internet AG, Germany, http://www.1und1.de

   License:
     LGPL: http://www.gnu.org/licenses/lgpl.html
     EPL: http://www.eclipse.org/org/documents/epl-v10.php
     See the LICENSE file in the project's top-level directory for details.

   Authors:
     * Sebastian Werner (wpbasti)
     * Fabian Jakobs (fjakobs)

************************************************************************ */

/* ************************************************************************

#asset(qx/icon/${qx.icontheme}/22/apps/media-video-player.png)
#asset(qx/icon/${qx.icontheme}/22/apps/internet-mail.png)
#asset(qx/icon/${qx.icontheme}/22/apps/internet-web-browser.png)
#asset(qx/icon/${qx.icontheme}/22/actions/list-add.png)

************************************************************************ */

qx.Class.define(&quot;demobrowser.demo.widget.Button&quot;,
{
  extend : qx.application.Standalone,

  members :
  {
    main: function()
    {
      this.base(arguments);

      var box = new qx.ui.layout.HBox();
      box.setSpacing(10);

      var container = new qx.ui.container.Composite(box);
      container.setPadding(20);

      this.getRoot().add(container, {left:0,top:0});

      // Two normal buttons
      var btn1 = new qx.ui.form.Button(&quot;Button A&quot;, &quot;icon/22/apps/media-video-player.png&quot;);
      container.add(btn1);

      var btn2 = new qx.ui.form.Button(&quot;Button B&quot;, &quot;icon/22/apps/internet-mail.png&quot;);
      btn2.setEnabled(false);
      container.add(btn2);

      // Toggle Button
      var btn3 = new qx.ui.form.ToggleButton(&quot;Toggle Button&quot;, &quot;icon/22/apps/internet-web-browser.png&quot;);
      btn3.focus();
      container.add(btn3);

      btn3.addListener(&quot;changeChecked&quot;, function(e) {
        this.debug(&quot;Checked: &quot; + e.getData());
      }, this);

      // Repeat Button
      var img1 = &quot;icon/22/actions/list-add.png&quot;;
      var btnRepeat = new qx.ui.form.RepeatButton(null, img1);
      container.add(btnRepeat);

      // Label
      var l1 = new qx.ui.basic.Label(&quot;0&quot;);
      l1.setDecorator(&quot;main&quot;);
      l1.setPadding(2, 4);
      l1.setBackgroundColor(&quot;white&quot;);
      container.add(l1);

      // Listener
      btnRepeat.addListener(&quot;execute&quot;, function()
      {
        var tempValue = parseInt(l1.getContent()) + 1;
        l1.setContent(tempValue.toString());
      });
    }
  }
});
&lt;/pre&gt;
&lt;p&gt;Afterwards I went outdoors because the weather was just too nice to stay inside but because of my great success in the morning I sat down and implemented a few more widgets to show you the GWT-Databinding example from &lt;a href=&quot;http://tomsondev.bestsolution.at/2009/06/27/eclipse-databinding-3-5-for-gwt/&quot;&gt;Saturdays post&lt;/a&gt; running on Qooxdoo-GWT.&lt;/p&gt;
&lt;ins style=&quot;text-decoration: none;&quot;&gt;
&lt;div class=&quot;video-player&quot; id=&quot;x-video-4&quot;&gt;
 &lt;/div&gt;&lt;/ins&gt;
&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;
public class TextLabelBinding extends QooxdooApp {

	@Override
	protected void run(QxAbstractGui application) {
		final QxLabel titleLabel = new QxLabel(&quot;&quot;);
		final QxTextField firstNameField = new QxTextField(&quot;&quot;);
		final QxTextField lastNameField = new QxTextField(&quot;&quot;);

		QxVBox box = new QxVBox();
		box.setSpacing(10);

		QxComposite container = new QxComposite(box);
		container.setPadding(20);

		container.add(titleLabel);
		container.add(firstNameField);
		container.add(lastNameField);

		application.getRoot().add(container, QxOption.left(0), QxOption.top(0));

		final Person p = new Person();
		p.setFirstname(&quot;Tom&quot;);
		p.setLastname(&quot;Schindl&quot;);

		DataBindingContext dbc = new DataBindingContext(QxObservables.getRealm());
		QxIWidgetValueProperty uiProp = QxWidgetProperties.text();

		dbc.bindValue(uiProp.observe(firstNameField), UBeansObservables.observeValue(QxObservables.getRealm(), p, Person.FIRST_NAME));
		dbc.bindValue(uiProp.observe(lastNameField), UBeansObservables.observeValue(QxObservables.getRealm(), p, Person.LAST_NAME));

		ComputedValue titleValue = new ComputedValue(QxObservables.getRealm()) {
			private IObservableValue last = UBeansObservables.observeValue(QxObservables.getRealm(), p, Person.LAST_NAME);
			private IObservableValue first = UBeansObservables.observeValue(QxObservables.getRealm(), p, Person.FIRST_NAME);

			@Override
			protected Object calculate() {
				return last.getValue().toString().toUpperCase() + &quot;, &quot; + first.getValue();
			}

		};
		dbc.bindValue(uiProp.observe(titleLabel), titleValue);
	}

}
&lt;/pre&gt;
&lt;p&gt;I’m going to look at the more complex controls when having the next free time slot but for now this is just plain cool, isn’t it?&lt;/p&gt;
&lt;br /&gt;&lt;a href=&quot;http://tomsondev.bestsolution.at/2009/06/29/now-thats-cool/&quot;&gt;&lt;img width=&quot;160&quot; src=&quot;http://cdn.videos.wordpress.com/DvKQYtna/gwtschnappschuss002.thumbnail.jpg&quot; height=&quot;120&quot; /&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://tomsondev.bestsolution.at/2009/06/29/now-thats-cool/&quot;&gt;&lt;img width=&quot;160&quot; src=&quot;http://cdn.videos.wordpress.com/0cB626zT/gwtschnappschuss001.thumbnail.jpg&quot; height=&quot;120&quot; /&gt; &lt;/a&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/tomsondev.wordpress.com/435/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/tomsondev.wordpress.com/435/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/tomsondev.wordpress.com/435/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/tomsondev.wordpress.com/435/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/tomsondev.wordpress.com/435/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/tomsondev.wordpress.com/435/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/tomsondev.wordpress.com/435/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/tomsondev.wordpress.com/435/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/tomsondev.wordpress.com/435/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/tomsondev.wordpress.com/435/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=tomsondev.bestsolution.at&amp;amp;blog=7995503&amp;amp;post=435&amp;amp;subd=tomsondev&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 29 Jun 2009 13:30:43 +0000</pubDate>
        <enclosure url="http://cdn.videos.wordpress.com/DvKQYtna/gwtschnappschuss002_dvd.mp4" length="2933760" type="video/mp4"/>
</item>
<item>
	<title>Andrei Loskutov: On Galileo train</title>
	<guid isPermaLink="true">http://www.jroller.com/andyl/entry/on_galileo_train</guid>
	<link>http://www.jroller.com/andyl/entry/on_galileo_train</link>
	<description>&lt;p&gt;
&lt;b&gt;&lt;a href=&quot;http://www.eclipse.org/galileo/&quot;&gt;Galileo&lt;/a&gt;&lt;/b&gt;? Me too :-)
&lt;/p&gt;
&lt;p&gt;
I've just released updates for two of my plugins: &lt;b&gt;&lt;a href=&quot;http://andrei.gmxhome.de/bytecode/index.html&quot;&gt;Bytecode Outline&lt;/a&gt;&lt;/b&gt; and &lt;b&gt;&lt;a href=&quot;http://andrei.gmxhome.de/datahierarchy/index.html&quot;&gt;Data Hierarchy&lt;/a&gt;&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
Highlights: 
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;&lt;a href=&quot;http://andrei.gmxhome.de/bytecode/index.html&quot;&gt;Bytecode Outline&lt;/a&gt;&lt;/b&gt; learned &lt;b&gt;&lt;a href=&quot;http://jcp.org/en/jsr/detail?id=292&quot;&gt;invokedynamic (JSR 292)&lt;/a&gt;&lt;/b&gt; 
&lt;/li&gt;&lt;li&gt;
and &lt;b&gt;&lt;a href=&quot;http://andrei.gmxhome.de/datahierarchy/index.html&quot;&gt;Data Hierarchy&lt;/a&gt;&lt;/b&gt; can show data for the base classes too.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Here is a screenshot which may explain &lt;b&gt;&lt;a href=&quot;http://andrei.gmxhome.de/datahierarchy/index.html&quot;&gt;Data Hierarchy&lt;/a&gt;&lt;/b&gt; better then words (check the &quot;UnreadFields&quot; class node). You see here the data hierarchy of the &lt;b&gt;&lt;a href=&quot;http://code.google.com/p/findbugs/source/browse/trunk/findbugs/src/java/edu/umd/cs/findbugs/ba/AnalysisContext.java&quot;&gt;AnalysisContext&lt;/a&gt;&lt;/b&gt; class:&lt;br /&gt;&lt;br /&gt;
&lt;img src=&quot;http://andrei.gmxhome.de/images/data_hierarchy_view.png&quot; /&gt;
&lt;/p&gt;</description>
	<pubDate>Sun, 28 Jun 2009 21:36:39 +0000</pubDate>
</item>
<item>
	<title>Doug Schaefer: Understanding the Mobile Killer App</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-16474715.post-6248020768227542710</guid>
	<link>http://cdtdoug.blogspot.com/2009/06/understanding-mobile-killer-app.html</link>
	<description>Clearly, with the success of iPhone and Blackberry and the buzz around Android and Pre, mobile already has its killer apps. But for someone new like me to this arena, I find it important that I try to understand what that app is and simplify the category so I can know where to focus what little time I have to play here. So this is what I've come up with, and I hope you have an opinion you can share in the comments to help guide me.&lt;br /&gt;&lt;br /&gt;Here we go. I actually think there are two killer apps happening in the smartphone market today. (I'll leave out the *book platforms for another post as that's starting to gel in my mind as well). Start by looking at the iPhone, including the iPod Touch. It's really Entertainment apps that have made the iPhone one of the most popular mobile platforms of our time. My son has a Touch. He has his mp3's there, he watches YouTube videos there, he plays games on it. It's probably what the PSP should have been if it had downloadable content. The platform pretty much comes with good multimedia apps, so if you want to make a hit, writing a good game is the place to start. And looking at most of the other platforms, especially the ones with 3D hardware acceleration, this is true across the board. Actually, you look at the real big picture, good games are popular on all computing platforms, even &lt;a href=&quot;http://en.wikipedia.org/wiki/Spacewar!&quot;&gt;Spacewar! on the PDP-1&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The other killer app is something a we talk lot about in the Eclipse community, especially my enterprise brethren. And that is thin web client apps. This is most obvious on the Blackberries that almost all business managers have today. Accessing e-mail from an exchange server on a small screen requires specialized software to ensure a good user experience. But I really think it goes beyond just e-mail. There are a lot of web services available in web browsers today. But web browsing on the small screen still sucks and likely will always suck. Writing a thin client that can present information from the web in a format suitable for the form factor is a real winner. The top Android apps I use are clients for gmail, twitter, and RSS. I'd love a good app that lets me write this blog, but I haven't found one yet. But I know the Google provides the API to do it and Twitter has a good API. Wrap those together and you got a customer. Or maybe I should be the developer ;).&lt;br /&gt;&lt;br /&gt;Of course, now I'm torn. I've always dreamed of making games, but never had the opportunity to do it. I know it's a lot of work and probably something I couldn't do well in my spare time. I'm also pumped by the &quot;mash-up&quot; possibilities writing thin clients for internet apps. And that's probably something I can do more quickly. Lots of fun. And a reason why I think the industry is going through a reinvigoration. Where the killer app for the desktop has come and the shine has gone (that killer app was office apps, browsers, IDEs, and games by the way). There's an opportunity to get in on the ground floor of the new generation.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/16474715-6248020768227542710?l=cdtdoug.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 28 Jun 2009 17:59:38 +0000</pubDate>
	<author>noreply@blogger.com (Doug Schaefer)</author>
</item>
<item>
	<title>Robert Konigsberg: Lies, Damned Lies, and Eclipse Upload Statistics</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-8055871.post-2603152690410429683</guid>
	<link>http://konigsberg.blogspot.com/2009/06/lies-damned-lies-and-eclipse-upload.html</link>
	<description>&lt;span style=&quot;font-weight: bold;&quot;&gt;Update: &lt;/span&gt;Added 4th assumption, Saturday, June 27&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://konigsberg.blogspot.com/2009/06/downloading-eclipse-via-bittorrent.html&quot;&gt;As promised&lt;/a&gt;, 48 hours ago I downloaded several Eclipse products across all five published platforms using Bittorrent. Now that two days have passed, and my downloads have been made available for others to upload, I thought I'd consolidate upload bittorrent upload data for the sake of gauging popularity.&lt;br /&gt;&lt;br /&gt;Some notes on my bittorrent process:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I downloaded the torrent files at about 10:30pm, two nights ago. I collected the data at about 11:30pm tonight. I'm calling it 48 hours. Anyone who cares enough, call the data police.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I did nothing to cap bandwidth for any of these Eclipse distributions.&lt;/li&gt;&lt;/ul&gt;I collected data on both megabytes uploaded from my bittorrent client, as well as ratio of upload to download. Since all copies of my products were fully downloaded, an upload ratio of 2.5 means that virtually 2.5 copies of that distribution were uploaded from my machine. Of course bittorrent doesn't ship data in full files, it's just pieces of the distrubutions, here and there.&lt;br /&gt;&lt;br /&gt;These are my three primary, and therefore, potentially disputable, assumptions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;More popular products will be uploaded by more people. &lt;/li&gt;&lt;li&gt;Upload ratios are a better measurement of popularity than megabytes uploaded. If product X is 50% larger than the size of product Y, equal bandwidth dedicated X and Y do not denote equal popularity. I just think people using bittorrent aren't really worried about the size of their Eclipse.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Similarly, I consider negligible any difference in compression ratios between the win32 zip file format and other gzipped tar files.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;48 hours of data collection is more than enough time to collect data, and taking more than the first 48-hours of data will not yield significantly different results.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I presume that files that are not as well seeded as others will take more time to initially download, and as such, will not contribute much to the other uploads during the first part of this process, and so may exaggerate the results slightly. Given that, I suspect the correctness of the 48-hour window will be the most disputed assumption.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Update&lt;/span&gt;: fourth assumption: People don't care about how long it takes, if they're using bittorrent. I assume it's a &quot;set and forget&quot; type of tool.&lt;/li&gt;&lt;/ul&gt;In retrospect, this turned out some really cool data. I'm very sorry now that I did not download &lt;i&gt;all distributions.&lt;/i&gt; This analysis suddenly suffers from its absence.&lt;br /&gt;&lt;br /&gt;Let's start with downloads by product:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=1&amp;amp;output=image&quot;&gt;&lt;img src=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=1&amp;amp;output=image&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here, the clear winner is the JEE distribution. Modeling, which is heavily discussed on the modeling blog and had a crazy number of talks at EclipseCon, has just under 25% the popularity of JEE. I haven't used &lt;a href=&quot;http://www.eclipse.org/webtools/&quot;&gt;WTP&lt;/a&gt; in a while but I hope, if it's this popular, that the developer docs reflect the popularity. (Please?)&lt;br /&gt;&lt;br /&gt;Next we move to downloads by operating system:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=2&amp;amp;output=image&quot;&gt;&lt;img src=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=2&amp;amp;output=image&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Wow, Windows, huh? That's a surprise, and also, not really a surprise. I'd love to see how these numbers compare next year. Will we see an complete inversion of Linux 32 and Linux 64 in a year? Two years? I predict four years.&lt;br /&gt;&lt;br /&gt;Let's look at all the download ratio data without grouping by products or operating system.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=3&amp;amp;output=image&quot;&gt;&lt;img src=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=3&amp;amp;output=image&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This chart really highlights both the JEE and Win32 popularity. I'm pleased to see the CDT platform is well used by the Linux32 community. I wonder why, on the Classic platform, OSX Carbon is uploaded slightly more than OSX Cocoa? Are variances on that scale negligible?&lt;br /&gt;&lt;br /&gt;I hear the Linux community say &quot;Rob,  &lt;i&gt;come on.&lt;/i&gt; We just shut down the spin machine from that ludicrous &lt;a href=&quot;http://www.microsoft.com/windows/internet-explorer/get-the-facts/browser-comparison.aspx&quot;&gt;browser comparison.&lt;/a&gt; How about something that reflects reality?&quot; Reality, whatever. You punks are lucky drawing charts is fun, so I'll do one more for ya. Here's the same data, with OSX and Linux products as single pieces of data.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=6&amp;amp;output=image&quot;&gt;&lt;img src=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=6&amp;amp;output=image&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Seriously, this does have something more interesting to say:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;RCP is more popular among the OSX and Linux communities than Win32.&lt;/li&gt;&lt;li&gt;Without JEE, Win32 is not nearly as popular a platform.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;CDT and modeling are not particularly popular among the OSX community.&lt;/li&gt;&lt;li&gt;CDT is loved by the Linux users.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I mentioned earlier that downloads by megabyte are not interesting to me. That doesn't stop me from graphing it. Here's a chart:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=4&amp;amp;output=image&quot;&gt;&lt;img src=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=4&amp;amp;output=image&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;and heck, here's another:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=5&amp;amp;output=image&quot;&gt;&lt;img src=&quot;http://spreadsheets.google.com/pub?key=rd_zaTCOSq0cJRSP1fgKySQ&amp;amp;oid=5&amp;amp;output=image&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Do these last two charts tell you anything different from the download ratio charts? I'll leave that up to someone else to discover. Add it in the comments.&lt;br /&gt;&lt;br /&gt;Here's the last three pieces of data I want to share tonight:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Total Uploads: 145&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Total MB uploaded: 18,781.1 MB&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Upload average (assuming 48 hours): 111.295 kbps&lt;/b&gt;&lt;/blockquote&gt;You could say, then, that 145 people got their instance of Eclipse from my bittorrent client.&lt;br /&gt;&lt;br /&gt;Thank you, Verizon FIOS. Thank you, Eclipse Foundation!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8055871-2603152690410429683?l=konigsberg.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 28 Jun 2009 03:55:21 +0000</pubDate>
	<author>noreply@blogger.com (Robert Konigsberg)</author>
</item>
<item>
	<title>Tom Schindl: Eclipse-Databinding 3.5 for GWT</title>
	<guid isPermaLink="false">http://tomsondev.bestsolution.at/?p=425</guid>
	<link>http://tomsondev.bestsolution.at/2009/06/27/eclipse-databinding-3-5-for-gwt/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;I’m a big fan of GWT but one of the real pain points when developing GWT applications is that there’s no databinding framework [*] available to synchronize your domain objects and UI-Widgets. &lt;/p&gt;
&lt;p&gt;As many of you know I’m an even bigger fan of Eclipse-Databinding because it is written so that it can be used with &lt;strong&gt;ANY&lt;/strong&gt; Model-Technology you want and even more important &lt;strong&gt;ANY&lt;/strong&gt; UI-Technology you want and in fairly every environment you want (or at least porting to it is possible without too much trouble).&lt;/p&gt;
&lt;p&gt;I’m happy to announce that the days without a databinding solution are gone forever now because yesterday in the night I made Eclipse-Databinding 3.5 compile under GWT and already wrote the first WidgetProperty implementations for Text and Label-Widgets.&lt;/p&gt;
&lt;p&gt;Take a look at this video to see it in action&lt;br /&gt;
&lt;ins style=&quot;text-decoration: none;&quot;&gt;
&lt;/ins&gt;&lt;/p&gt;&lt;div class=&quot;video-player&quot; id=&quot;x-video-5&quot;&gt;
 &lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The code used to create this small presentation looks like this:&lt;/p&gt;
&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.value.ComputedValue;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.ufacekit.core.ubean.databinding.observables.UBeansObservables;
import org.eclipse.ufacekit.ui.gwt.databinding.GWTObservables;
import org.eclipse.ufacekit.ui.gwt.databinding.IWidgetValueProperty;
import org.eclipse.ufacekit.ui.gwt.databinding.WidgetProperties;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;

/**
 * Entry point classes define &amp;lt;code&amp;gt;onModuleLoad()&amp;lt;/code&amp;gt;.
 */
public class GWTDatabindingExample implements
		EntryPoint {
  /**
    * This is the entry point method.
    */
  public void onModuleLoad() {
    final Label titleLabel = new Label();
    final TextBox firstNameField = new TextBox();
    final TextBox lastNameField = new TextBox();

    final Person p = new Person();
    p.setFirstname(&quot;Tom&quot;);
    p.setLastname(&quot;Schindl&quot;);

    DataBindingContext dbc = new DataBindingContext(
      GWTObservables.getRealm()
    );
    IWidgetValueProperty uiProp = WidgetProperties.text();

    dbc.bindValue(
      uiProp.observe(firstNameField),
      UBeansObservables.observeValue(
        GWTObservables.getRealm(), p, Person.FIRST_NAME
      )
    );

    dbc.bindValue(
      uiProp.observe(lastNameField),
      UBeansObservables.observeValue(
        GWTObservables.getRealm(), p, Person.LAST_NAME
      )
    );

    ComputedValue titleValue =
      new ComputedValue(GWTObservables.getRealm()) {
        private IObservableValue last =
          UBeansObservables.observeValue(
            GWTObservables.getRealm(), p, Person.LAST_NAME
        );

       private IObservableValue first =
         UBeansObservables.observeValue(
           GWTObservables.getRealm(), p, Person.FIRST_NAME
       );

      @Override
      protected Object calculate() {
        return last.getValue().toString().toUpperCase()
          + &quot;, &quot; + first.getValue()
        ;
      }
    };

    dbc.bindValue(uiProp.observe(titleLabel), titleValue);

    RootPanel.get(&quot;titleContainer&quot;).add(titleLabel);
    RootPanel.get(&quot;firstNameFieldContainer&quot;).add(
      firstNameField
    );
    RootPanel.get(&quot;lastNameFieldContainer&quot;).add(
      lastNameField
    );
  }
}
&lt;/pre&gt;
&lt;p&gt;If you take a close look to the sources above the first thing you’ll spot is the usage of &lt;span&gt;org.eclipse.ufacekit.core.ubean&lt;/span&gt; which is very light weight domain model implementation part of &lt;a href=&quot;http://wiki.eclipse.org/UFaceKit&quot;&gt;UFaceKit&lt;/a&gt;. The domain model has it’s own notification concept and a reflective API similar to EMF but is as light weight as possible. &lt;/p&gt;
&lt;p&gt;A domain object implementation looks like this:&lt;/p&gt;
&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;
import org.eclipse.ufacekit.core.ubean.UBaseBean;
import org.eclipse.ufacekit.core.ubean.notify.Notification;

public class Person extends UBaseBean {
  public static final int FIRST_NAME = 1;
  public static final int LAST_NAME = 2;

  private String lastname;
  private String firstname;

  public void add(int featureId, Object value) {
    throw new IllegalArgumentException(
      &quot;No multi feature with id '&quot;+featureId+&quot;'&quot;
    );
  }

  @SuppressWarnings(&quot;unchecked&quot;)
  public &amp;lt;V&amp;gt; V get(int featureId) {
    if (featureId == FIRST_NAME) {
      return (V) getFirstname();
    } else if (featureId == LAST_NAME) {
      return (V) getLastname();
    }
    throw new IllegalArgumentException(
      &quot;No feature with id '&quot;+featureId+&quot;'&quot;
    );
  }

  public void remove(int featureId, Object value) {
    throw new IllegalArgumentException(
      &quot;No multi feature with id '&quot;+featureId+&quot;'&quot;
    );
  }

  public void set(int featureId, Object value) {
    if( featureId == FIRST_NAME ) {
      setFirstname((String) value);
    } else if( featureId == LAST_NAME ) {
      setLastname((String) value);
    } else {
      throw new IllegalArgumentException(
        &quot;No feature with id '&quot;+featureId+&quot;'&quot;
      );
    }
  }

  public String getLastname() {
    return lastname;
  }

  public void setLastname(String lastname) {
    notifyListeners(
      new Notification(
        this,
        Notification.SET,
        LAST_NAME,
        this.lastname,
        this.lastname = lastname
      )
    );
  }

  public String getFirstname() {
    return firstname;
  }

  public void setFirstname(String firstname) {
    notifyListeners(
      new Notification(
        this,
        Notification.SET, FIRST_NAME,
        this.firstname,
        this.firstname = firstname
      )
    );
  }
}
&lt;/pre&gt;
&lt;p&gt;The reflective API has the advantage that it doesn’t need reflection to call methods and thus is directly usable within GWT applications where no reflection is available. This is only the start of the many things UFaceKit is going to provide to you starting from full GWT-Databinding support over JFace-Viewer like implemenations to it’s highlevel UI-Abstraction.&lt;/p&gt;
&lt;p&gt;For UFaceKit the support of GWT marks a new milestone because now we have a solution for another Java-Developer Community. We now support:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SWT/JFace – including a Java5 JFace-Viewer implementation&lt;/li&gt;
&lt;li&gt;Qt – Qt-Databinding and Qt-JFace-Viewers&lt;/li&gt;
&lt;li&gt;Swing – Swing-Databinding and Swing-Viewers (though this needs some TLC)&lt;/li&gt;
&lt;li&gt;GWT – GWT-Databinding and start of GWT-Viewers (Combo, List and Tree)&lt;/li&gt;
&lt;li&gt;UBean – a very lightweight model technology compatible with GWT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The sources are available from the &lt;a href=&quot;https://dev.eclipse.org/svnroot/eclipse/org.eclipse.ufacekit/develop/eclipse/virtual-structure/incubation&quot;&gt;UFaceKit-repository&lt;/a&gt; (you need to have the &lt;a href=&quot;http://code.google.com/intl/de-DE/eclipse/&quot;&gt;Google-Eclipse-Plugin&lt;/a&gt; installed) and an Eclipse 3.5 as the target (if you don’t want to see compile errors in your IDE)&lt;/p&gt;
&lt;p&gt;* Update there are databinding-frameworks (GXT, gwittir) but they force me to buy into their whole framework and even reach out into my Domain-Model if I understood them appropiately.&lt;/p&gt;
&lt;br /&gt;&lt;a href=&quot;http://tomsondev.bestsolution.at/2009/06/27/eclipse-databinding-3-5-for-gwt/&quot;&gt;&lt;img width=&quot;160&quot; src=&quot;http://cdn.videos.wordpress.com/xtBhOsV5/snapz-pro-xschnappschuss002.thumbnail.jpg&quot; height=&quot;120&quot; /&gt; &lt;/a&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/tomsondev.wordpress.com/425/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/tomsondev.wordpress.com/425/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/tomsondev.wordpress.com/425/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/tomsondev.wordpress.com/425/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/tomsondev.wordpress.com/425/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/tomsondev.wordpress.com/425/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/tomsondev.wordpress.com/425/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/tomsondev.wordpress.com/425/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/tomsondev.wordpress.com/425/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/tomsondev.wordpress.com/425/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=tomsondev.bestsolution.at&amp;amp;blog=7995503&amp;amp;post=425&amp;amp;subd=tomsondev&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sat, 27 Jun 2009 21:49:14 +0000</pubDate>
        <enclosure url="http://cdn.videos.wordpress.com/xtBhOsV5/snapz-pro-xschnappschuss002_dvd.mp4" length="1760256" type="video/mp4"/>
</item>
<item>
	<title>Madhu Samuel: Kudos to the Eclipse Galileo Developers!</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3399985190174266183.post-4502347577717971167</guid>
	<link>http://eclipse-info.blogspot.com/2009/06/kudos-to-eclipse-galileo-developers.html</link>
	<description>When 40% of all the commercial projects are failing due to one or the other reasons, the technique and style of the eclipse developers have successfully delivered one more annual release of &lt;a style=&quot;color: rgb(51, 51, 255);&quot; href=&quot;http://eclipse.org/&quot;&gt;Eclipse Galileo&lt;/a&gt;. This is one of the modern  wonders. Nothing more than a set of 'strong minds' are required for this kind of achievement.&lt;br /&gt;&lt;br /&gt;Any great idea can be spoiled by a careless mind. The same way, any small idea can be turned to a master piece by a great mind. The story of two magicians which wouldn't bring much excitement, when it got into the hands of a director like &lt;a style=&quot;color: rgb(51, 51, 255);&quot; href=&quot;http://en.wikipedia.org/wiki/Christopher_Nolan&quot;&gt;Christopher Nolan&lt;/a&gt;; it turned out to be one of my favourite movie and greatest hits. If you haven't watched the movie '&lt;a style=&quot;color: rgb(51, 51, 255);&quot; href=&quot;http://www.imdb.com/title/tt0482571/&quot;&gt;The Prestige&lt;/a&gt;', I urge you to watch it as soon as possible.&lt;br /&gt;&lt;br /&gt;The enthusiasm and vibrancy of the hundreds of minds in the Eclipse community, the electric current generated by their thoughts; these are still attracting lot of new people to the community. Framework projects, RnD projects, graphical projecs, modelling projects, bio projects ....&lt;br /&gt;&lt;br /&gt;There were many arguments last year. The complexity of some of the frameworks, the simplicity of some of the tools; the anger towards some of the eclipse processes; the sadness when the expected features had to be dropped out of the final delivery, the happiness when the customer/end user said '&quot;See this new feature, Wow'&quot;.&lt;br /&gt;&lt;br /&gt;Lot of emotions and lot of memories. The emotions which starts in the brain of a single person, when backed by the support of a highly motivated community results in successes similar to what happens in our Eclipse community.&lt;br /&gt;&lt;br /&gt;Open source is not a charity always. Hundreds of businesses are thriving upon the open source model. When one of the basic values of humans is followed, ie, 'give and then take'; it results in success and content feeling. When we are following our values, when we are backed by a community with the same set of values, we are at our best.&lt;br /&gt;&lt;br /&gt;Many team members were flexing their brain muscles for a long time. Then one of them said on 24th of June, &quot;Guys, we are done for the year&quot;; Its time to relax and celebrate now. Some celebrate the success over a cup of coffee, some over the dance floor and some with a vacation trip.&lt;br /&gt;&lt;br /&gt;Life goes on; Eclipse goes on; Next year &lt;a style=&quot;color: rgb(51, 51, 255);&quot; href=&quot;http://www.eclipse.org/e4/&quot;&gt;e4&lt;/a&gt; is one of the most anticipated outputs from the community.&lt;br /&gt;&lt;br /&gt;I dedicate this blog to all those gurus who developed the basic eclipse framework and donated it to the open source community; to those who still develop new frameworks in the open source; You people dared to go to the wild, never knowing the dangers behind the hidden rocks and trees, you cleared the path for the rest of us.&lt;br /&gt;&lt;br /&gt;I like to convey my gratitude to the hardwork of the hundreds of developers who has worked towards the success of galileo, &quot;Dudes, you all have done a great job. You guys are making our jobs easier&quot;.&lt;br /&gt;&lt;br /&gt;How can this kind of success be repeated in the high percentage of failing commericial projects?&lt;br /&gt;&lt;br /&gt;You need to think out of the bondaries of your organizations, you need to come out of your conventional thoughts, you need to use your brain for what it is designed. &quot;Share&quot; and put some thought behind it, you will start to get the returns. As &lt;a style=&quot;color: rgb(51, 51, 255);&quot; href=&quot;http://www.objectmentor.com/omTeam/martin_r.html&quot;&gt;Robert C Martin&lt;/a&gt; says, don't sprint, run the marathon. When your muscles get tired and gets deprived of energy, its your mind which needs to give strength. If the mind losses focus, then the body will fail, our actions become meaningless and the projects fail. &lt;input type=&quot;hidden&quot; id=&quot;gwProxy&quot; /&gt;&lt;input type=&quot;hidden&quot; id=&quot;jsProxy&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Focus on what you need to achieve. Put your mind and body for it. The results will follow. Its all a mind game. You are a reflection of your mind!&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;madhu&lt;/span&gt;&lt;br /&gt;&lt;div id=&quot;refHTML&quot;&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3399985190174266183-4502347577717971167?l=eclipse-info.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sat, 27 Jun 2009 07:46:09 +0000</pubDate>
	<author>noreply@blogger.com (Madhu)</author>
</item>
<item>
	<title>Erkki Lindpere: P2 Still Not Awesome</title>
	<guid isPermaLink="false">http://villane.wordpress.com/?p=89</guid>
	<link>http://villane.wordpress.com/2009/06/26/p2-still-not-awesome/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.eclipse.org/p2&quot;&gt;P2&lt;/a&gt; has surely seen a lot of improvement in Eclipse 3.5, but some functionality that was actually somewhat acceptable in the old Update Manager is still lacking awesomeness. I’m trying to install &lt;a href=&quot;http://dev.eclipse.org/blogs/yvesyang/2009/06/26/eclipse-ve-gets-revived/&quot;&gt;VE&lt;/a&gt; into Galileo (Eclipse for Java + M2Eclipse + Subclipse + Scala IDE).&lt;/p&gt;
&lt;p&gt;There are two usability issues with this. The first is that after selecting the “Visual Editor” feature from the site, I don’t have a “select dependencies” option. But from past usage of VE I remember that it requires Java EMF Model. So I select that too. A new user would not know to select this. I’ll have to navigate to the next page to find out if there are unresolved dependencies. And then we come to the second problem, which is this screen:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://villane.files.wordpress.com/2009/06/vemissingdeps.png?w=450&amp;amp;h=482&quot; title=&quot;P2 unresolved dependencies&quot; height=&quot;482&quot; width=&quot;450&quot; alt=&quot;P2 unresolved dependencies&quot; class=&quot;size-full wp-image-90 aligncenter&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Am I really supposed to decipher this text and take action based on that? No thanks, I’ll just skip installing VE this time, I don’t have actual need for it right now.&lt;/p&gt;
  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/villane.wordpress.com/89/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/villane.wordpress.com/89/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/villane.wordpress.com/89/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/villane.wordpress.com/89/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/villane.wordpress.com/89/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/villane.wordpress.com/89/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/villane.wordpress.com/89/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/villane.wordpress.com/89/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/villane.wordpress.com/89/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/villane.wordpress.com/89/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=villane.wordpress.com&amp;amp;blog=820948&amp;amp;post=89&amp;amp;subd=villane&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 26 Jun 2009 19:57:11 +0000</pubDate>
</item>
<item>
	<title>Gabe O'Brien: Everywhere a Tweet Tweet..</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1465360374490208232.post-1873395730252984983</guid>
	<link>http://darngooddeveloper.blogspot.com/2009/06/everywhere-tweet-tweet.html</link>
	<description>&lt;a href=&quot;http://3.bp.blogspot.com/_QMuHoBVpB0E/SkT7PaB3BKI/AAAAAAAAACg/eEJIcGkvdxk/s1600-h/Screenshot.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_QMuHoBVpB0E/SkT7PaB3BKI/AAAAAAAAACg/eEJIcGkvdxk/s400/Screenshot.png&quot; alt=&quot;&quot; style=&quot;margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 400px; height: 147px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351678499326723234&quot; /&gt;&lt;/a&gt;Not to be left behind in the buzz surrounding Twitter, the &lt;a href=&quot;http://www.eclipsecon.org/submissions/ese2009/&quot;&gt;Submissions System&lt;/a&gt; now tweets when a new talk is proposed. There are already three talks proposed on the &lt;a href=&quot;http://twitter.com/EclipseSummit&quot;&gt;Summit twitter&lt;/a&gt; page, new follower are always welcome.&lt;br /&gt;&lt;br /&gt;Not planning on presenting a talk at Eclipse Summit but still want to try out the tweets?  Then cruise on over to the &lt;a href=&quot;https://www.eclipsecon.org/submissions/demo/&quot;&gt;demo conference&lt;/a&gt; and propose a new talk.  The demo conference exists just to try out new features.  The Demo conference &lt;a href=&quot;https://twitter.com/eclipsedemoconf&quot;&gt;twitter page&lt;/a&gt; already has one follower (not sure how that happend).&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1465360374490208232-1873395730252984983?l=darngooddeveloper.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 26 Jun 2009 18:26:13 +0000</pubDate>
	<author>noreply@blogger.com (Darn Good Developer)</author>
</item>
<item>
	<title>Birt World: Passing JDBC ResultSet to a report</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-14521551.post-2724664458505703675</guid>
	<link>http://birtworld.blogspot.com/2009/06/passing-jdbc-resultset-to-report.html</link>
	<description>Nice article on how to pass a JDBC resultset to a report at &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://techieocean.blogspot.com/2009/06/how-to-pass-resultset-to-birt-report.html&quot;&gt;Techie.Ocean&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/14521551-2724664458505703675?l=birtworld.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 26 Jun 2009 16:56:01 +0000</pubDate>
	<author>noreply@blogger.com (Scott Rosenbaum)</author>
</item>
<item>
	<title>Yves Yang: Eclipse VE gets revived!</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/yvesyang/?p=32</guid>
	<link>http://dev.eclipse.org/blogs/yvesyang/2009/06/26/eclipse-ve-gets-revived/</link>
	<description>&lt;p&gt;I’m pleased to announce the come-back of VE in Eclipse stream after more than two years’ sleeping. Now the builds for eclipse 3.4 and 3.5 are available here:&lt;br /&gt;
&lt;a href=&quot;http://www.eclipse.org/vep/downloads/&quot;&gt;http://www.eclipse.org/vep/downloads/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;http://www.eclipse.org/vep/&quot;&gt;VE home page&lt;/a&gt; gets updated as well. &lt;/p&gt;
&lt;p&gt;I’d like to thank &lt;a href=&quot;http://www.eclipse.org/projects/lists.php?list=projectsforcommitter&amp;amp;param=nickb&quot;&gt;Nick Boldt&lt;/a&gt; who had done an excellent job to re-integrate VE into eclipse build system and update the Web page. &lt;/p&gt;
&lt;p&gt;Now, it is time to consider new features and the development plan for the next release 1.5. Please use ve-dev@eclipse.org to send us your feedback and requests.&lt;/p&gt;</description>
	<pubDate>Fri, 26 Jun 2009 15:35:08 +0000</pubDate>
</item>
<item>
	<title>Denis &amp; Karl: Galileo should go down …</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/eclipsewebmaster/?p=411</guid>
	<link>http://dev.eclipse.org/blogs/eclipsewebmaster/2009/06/26/galileo-should-go-down/</link>
	<description>&lt;p&gt;… as being the smoothest release I have ever participated in, despite the major constraint I had this year:  &lt;strong&gt;no extra bandwidth shall be purchased&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Here is how we pulled this off:&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;More bandwidth.&lt;/strong&gt; Since we got sooo many new &lt;a href=&quot;http://eclipse.org/donate/donorlist.php&quot;&gt;Friends of Eclipse&lt;/a&gt;, I bent the rules and added 12 megabits of bandwidth [1]. But — get this — for the &lt;strong&gt;pre-release only&lt;/strong&gt;.  Marker (1) shows the increase, and marker (2) shows a significant drop three hours into the release.  Unheard of!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/eclipsewebmaster/files/2009/06/f8a3ea08dab1d82c900f6a9758b22ac4.png&quot;&gt;&lt;img width=&quot;500&quot; alt=&quot;&quot; src=&quot;http://dev.eclipse.org/blogs/eclipsewebmaster/files/2009/06/f8a3ea08dab1d82c900f6a9758b22ac4.png&quot; class=&quot;aligncenter size-full wp-image-412&quot; height=&quot;97&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Early access.&lt;/strong&gt; Friends of Eclipse, mirror sites and Member companies all had early access to the bits, relieving some of the stress on release day.&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;BitTorrent.&lt;/strong&gt; In April, I didn’t have options (4) and (5) below, so with the no-extra-bandwidth rule, I had to set up something.  Actually, I suspect many Friends took advantage of their benefits by downloading and pre-seeding many of the files before release day.  More seeds == faster downloads.&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Eclipse Member companies.&lt;/strong&gt; They provided lots of bandwidth (and still are!) via the Get It Faster section of the download page.  Many thanks!&lt;/p&gt;
&lt;p&gt;5. &lt;strong&gt;Amazon Web Services.&lt;/strong&gt; This was a last-minute deal that was/is a true blessing, since I was able to redirect lots of the download.eclipse.org requests to AWS instead of our stressed mirror sites.&lt;/p&gt;
&lt;p&gt;6. &lt;strong&gt;Server virtualization.&lt;/strong&gt; Our own version of ‘the Cloud on demand’ — I enabled an extra virtual server node for www.eclipse.org on June 23 to handle the extra CPU power that would be required to handle the many requests.  I may just shut it off later next week, or I may just keep it around…&lt;/p&gt;
&lt;p&gt;I think we’re getting good at these annual release trains..&lt;/p&gt;
&lt;address&gt;[1] In reality, we get billed by the 95th percentile, so if I played my cards right, the extra bandwidth may end up costing us next to nothing.&lt;br /&gt;
&lt;/address&gt;</description>
	<pubDate>Fri, 26 Jun 2009 15:16:34 +0000</pubDate>
</item>
<item>
	<title>Neil Bartlett: Calling all DSL Nuts and Scaliens in London</title>
	<guid isPermaLink="false">http://neilbartlett.name/blog/?p=441</guid>
	<link>http://neilbartlett.name/blog/2009/06/26/calling-all-dsl-nuts-and-scaliens-in-london/</link>
	<description>&lt;p&gt;Are you interested in Domain Specific Languages (DSLs), Scala, finance or JavaFX? Are you in or near London?&lt;/p&gt;

&lt;p&gt;On Monday 29th June, &lt;a href=&quot;http://skillsmatter.com/event/java-jee/eclipse-democamp-2009&quot;&gt;SkillsMatter&lt;/a&gt; will be hosting the third Eclipse DemoCamp to be held in London. DemoCamps are fun, informal events for Eclipse developers and users to talk about what they are working on, with a strong focus on working demos and real life applications. This time we have a number of very exciting speakers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Heiko Behrens will be demoing &lt;a href=&quot;http://www.eclipse.org/Xtext/&quot;&gt;Xtext&lt;/a&gt;. This is an amazing tool for building DSLs — it allows you to define a simple grammar in EBNF notation, and from this it will generate a parser, Abstract Syntax Tree (AST) meta-model, and a fully-featured Eclipse editor with auto-completion, syntax highlighting, content outline, hyperlink navigation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Miles Sabin will show his work on the &lt;a href=&quot;http://www.scala-lang.org/node/94&quot;&gt;Scala IDE for Eclipse&lt;/a&gt;. Many people (including me) believe that Scala will be the next big language for the JVM, and it’s important to have tooling for it that is just as good as the tooling available for Java. Miles is doing a great job in making that a reality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Richard Gomes will be talking about &lt;a href=&quot;http://www.jquantlib.org/&quot;&gt;JQuantLib&lt;/a&gt;, an open source library for quantitative financial calculations in Java. Richard has been working on integrating JQuantLib with OSGi and (hopefully!) contributing it to the Eclipse Finance Platform project, and he will talk about the benefits and challenges involved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dan Pollitt will demo &lt;a href=&quot;http://nattable.org/&quot;&gt;NatTable&lt;/a&gt;, a high performance SWT data grid control that can be used to display huge quantities of rapidly changing data, and is used by a number of banks for trading applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I will demo the &lt;a href=&quot;http://javafx.com/docs/gettingstarted/eclipse-plugin/index.jsp&quot;&gt;JavaFX plug-in for Eclipse&lt;/a&gt;, which I have been working on for Sun Microsystems.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full details and registration instructions are on &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_DemoCamps_Galileo_2009/London&quot;&gt;the Eclipse Wiki&lt;/a&gt; site. Hope to see you there!&lt;/p&gt;</description>
	<pubDate>Fri, 26 Jun 2009 14:45:46 +0000</pubDate>
</item>
<item>
	<title>Michael Spector: Some (low quality) pics from Tel Aviv Eclipse Demo Camp</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-34385728.post-1654047148869874720</guid>
	<link>http://spektom.blogspot.com/2009/06/some-low-quality-pics-from-tel-aviv.html</link>
	<description>&lt;a href=&quot;http://1.bp.blogspot.com/_wOAHNRxmtSs/SkS39VFZY7I/AAAAAAAADmw/ul4rhivE0G8/s1600-h/25062009(005).jpg&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_wOAHNRxmtSs/SkS39VFZY7I/AAAAAAAADmw/ul4rhivE0G8/s400/25062009(005).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351604521482675122&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_wOAHNRxmtSs/SkS39IGP5RI/AAAAAAAADmo/cmYXPVIQfAw/s1600-h/25062009(004).jpg&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_wOAHNRxmtSs/SkS39IGP5RI/AAAAAAAADmo/cmYXPVIQfAw/s400/25062009(004).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351604517996586258&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_wOAHNRxmtSs/SkS38-pKz4I/AAAAAAAADmg/teGWZ_KUaAE/s1600-h/25062009(002).jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_wOAHNRxmtSs/SkS38-pKz4I/AAAAAAAADmg/teGWZ_KUaAE/s400/25062009(002).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351604515458699138&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_wOAHNRxmtSs/SkS38nFwexI/AAAAAAAADmY/YTDwbnuBP54/s1600-h/25062009(003).jpg&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_wOAHNRxmtSs/SkS38nFwexI/AAAAAAAADmY/YTDwbnuBP54/s400/25062009(003).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351604509136157458&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_wOAHNRxmtSs/SkS38cYYT2I/AAAAAAAADmQ/2sCYHRnZfzM/s1600-h/25062009(001).jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_wOAHNRxmtSs/SkS38cYYT2I/AAAAAAAADmQ/2sCYHRnZfzM/s400/25062009(001).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351604506261475170&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_wOAHNRxmtSs/SkS5GV063AI/AAAAAAAADnY/q3ZG0jxcHIs/s1600-h/25062009(013).jpg&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_wOAHNRxmtSs/SkS5GV063AI/AAAAAAAADnY/q3ZG0jxcHIs/s400/25062009(013).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351605775812451330&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_wOAHNRxmtSs/SkS5GKmDumI/AAAAAAAADnQ/NfU8nxXfa6A/s1600-h/25062009(010).jpg&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_wOAHNRxmtSs/SkS5GKmDumI/AAAAAAAADnQ/NfU8nxXfa6A/s400/25062009(010).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351605772797327970&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_wOAHNRxmtSs/SkS5F5cMNWI/AAAAAAAADnI/6tt3pIBJhdk/s1600-h/25062009(009).jpg&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_wOAHNRxmtSs/SkS5F5cMNWI/AAAAAAAADnI/6tt3pIBJhdk/s400/25062009(009).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351605768192537954&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_wOAHNRxmtSs/SkS5FoEiG-I/AAAAAAAADnA/ZNOknUJvnjI/s1600-h/25062009(008).jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_wOAHNRxmtSs/SkS5FoEiG-I/AAAAAAAADnA/ZNOknUJvnjI/s400/25062009(008).jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351605763529907170&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_wOAHNRxmtSs/SkS-NGNa2gI/AAAAAAAADng/UoUKDIP6Do4/s1600-h/25062009.jpg&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_wOAHNRxmtSs/SkS-NGNa2gI/AAAAAAAADng/UoUKDIP6Do4/s400/25062009.jpg&quot; alt=&quot;&quot; style=&quot;cursor: pointer; cursor: hand; width: 400px; height: 300px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5351611389437467138&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/34385728-1654047148869874720?l=spektom.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 26 Jun 2009 12:34:21 +0000</pubDate>
	<author>noreply@blogger.com (Michael)</author>
</item>
<item>
	<title>Prakash G.R.: Keyboard accessibility thru Command Framework</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1557780184357927241.post-7989849880617545097</guid>
	<link>http://feedproxy.google.com/~r/cypal/~3/jzeEc1ip9Z4/keyboard-accessibility-thru-command.html</link>
	<description>Keyboard shortcuts is usually much speedier than reaching out your mouse, moving it, pointing it to something and clicking. But there are some things which cannot be done that easily by keyboard shortcuts. For me, one of them is finding out a closed project and open it. Unfortunately, I've quite a large set of projects in my workspace and try to keep most them closed, when not used. In addition to that in the Package Explorer, I've the 'Closed Projects' filter on. So if I need to open a project, I've use the pull down menu, uncheck 'Closed Projects' navigate thru the working sets to find the right project and double click it. To enable keyboard access to this regular task, I decided to make use of &lt;a href=&quot;http://wiki.eclipse.org/Platform_Command_Framework&quot;&gt;Commands Framework&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The solution is to add a &lt;a href=&quot;http://blog.eclipse-tips.com/2008/12/commands-part-3-parameters-for-commands.html&quot;&gt;parameterized command&lt;/a&gt;, and in the values, I compute the projects which are closed. So when I press the awesome shortcut (Ctrl+3) it would display me the list of closed projects. With few keys, I can navigate to the project I want and open it. Lets see how to do it. First step is the command with the parameter:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;extension point=&quot;org.eclipse.ui.commands&quot;&amp;gt;
   &amp;lt;command
            defaultHandler=&quot;com.eclipse_tips.handlers.OpenProjectHandler&quot;
            id=&quot;com.eclipse-tips.openProject.command&quot;
            name=&quot;Open Project&quot;&amp;gt;
      &amp;lt;commandParameter
               id=&quot;com.eclipse-tips.openProject.projectNameParameter&quot;
               name=&quot;Name&quot;
               optional=&quot;false&quot;
               values=&quot;com.eclipse_tips.handlers.ProjectNameParameterValues&quot;&amp;gt;
      &amp;lt;/commandParameter&amp;gt;
   &amp;lt;/command&amp;gt;
&amp;lt;/extension&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
And the handler:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public Object execute(ExecutionEvent event) throws ExecutionException {
 String projectName = event.getParameter(&quot;com.eclipse-tips.openProject.projectNameParameter&quot;);
 IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
 IProject project = root.getProject(projectName);
 try {
  project.open(null);
 } catch (CoreException e) {
  throw new ExecutionException(&quot;Error occured while open project&quot;, e);
 }
 return null;
}
&lt;/pre&gt;&lt;br /&gt;
For the parameter values, I look for closed projects and return them:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public Map&amp;lt;String, String&amp;gt; getParameterValues() {

 IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
 IProject[] projects = root.getProjects();
 Map&amp;lt;String, String&amp;gt; paramValues = new HashMap&amp;lt;String, String&amp;gt;();
 for (IProject project : projects) {
  if (project.exists() &amp;amp;&amp;amp; !project.isOpen()) {
   paramValues.put(project.getName(), project.getName());
  }

 }
 return paramValues;
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
So finally, When I press Ctrl+3 and type OPN, I get the list:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://2.bp.blogspot.com/_hsp14iFkRLs/SkR2yIhfxzI/AAAAAAAAECA/D0u-kCTiq-Q/s1600-h/KeyboardCommands.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_hsp14iFkRLs/SkR2yIhfxzI/AAAAAAAAECA/D0u-kCTiq-Q/s400/KeyboardCommands.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/div&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;br /&gt;
This idea can be extended to provide keyboard accessibility to many functionalities. Say in an RCP mail application, you can add a command like 'Go To Mail' with parameter as the Subject/Sender:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://4.bp.blogspot.com/_hsp14iFkRLs/SkR539zueKI/AAAAAAAAECI/REDeNO2mVnQ/s1600-h/KeyboardCommands1.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_hsp14iFkRLs/SkR539zueKI/AAAAAAAAECI/REDeNO2mVnQ/s400/KeyboardCommands1.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Hmmm, if only the 'Built On Eclipse' mail app that I *have* to use, knows the existence of threads other than the UI thread :-(&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p style=&quot;border: 1px solid rgb(198, 198, 198); padding: 10px; color: rgb(51, 51, 51); font-family: 'Lucida Grande',sans-serif; font-size: 1.1em; background-color: rgb(255, 255, 198); margin-bottom: 10px;&quot;&gt; 
From &lt;a href=&quot;http://blog.eclipse-tips.com/&quot;&gt;Eclipse Tips&lt;/a&gt;
&lt;br /&gt;
Like the tip? Subscribe via &lt;a href=&quot;http://feeds.feedburner.com/cypal&quot;&gt;RSS&lt;/a&gt; or &lt;a href=&quot;http://feedburner.google.com/fb/a/mailverify?uri=cypal&amp;amp;loc=en_US&quot;&gt;Email&lt;/a&gt;
&lt;/p&gt;
&lt;br /&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1557780184357927241-7989849880617545097?l=blog.eclipse-tips.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;&lt;img width=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/cypal/~4/jzeEc1ip9Z4&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 26 Jun 2009 07:40:41 +0000</pubDate>
	<author>noreply@blogger.com (Prakash G.R.)</author>
</item>
<item>
	<title>Peter Kriens: Hi, We're OSGi. We mean no harm</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-18772002.post-4783818912693881805</guid>
	<link>http://www.osgi.org/blog/2009/06/hi-were-osgi-we-mean-no-harm.html</link>
	<description>Dear James,&lt;br /&gt;I read your interesting &lt;a href=&quot;http://www.eweek.com/c/a/Application-Development/Gosling-Whats-Good-for-Google-May-Not-be-Good-for-Java-254444/1/&quot;&gt;interview with eWeek&lt;/a&gt;. There were many parts where we agreed, but I was also slightly puzzled with your observations about OSGi. &quot;OSGi is this thing that kind of came from a different universe that's being used for modularity.&quot; I do agree that many people see the quality of the OSGi specs as out this world, but that seems a bit exagerated. I do agree we did not start out in the enterprise application space, we started in embedded world where space and performance constraints are pervasive, but after all I thought we both lived in the Java universe. However, this seems at odds with your remarks like &quot;So we needed something that was a lot &lt;span style=&quot;font-style: italic;&quot;&gt;lighter weight&lt;/span&gt;.&quot; and  &quot;... OSGi's just &lt;span style=&quot;font-style: italic;&quot;&gt;too much fat&lt;/span&gt;.&quot;&lt;br /&gt;&lt;br /&gt;Hmm, the OSGi core API is 27 classes. That is a all. Security, Module layer, Life cycle layer, and Service Layer. Exceptions, permissions, and interfaces. And one of them is even deprecated! Just the module layer in Jigsaw seems to have more classes, and they just got started ... Or did you mean the implementations? With Concierge at around 80k for an R3 implementation and Felix at 350k it seems a stretch to call us fat? OSGi is even deployed in smart cards.&lt;br /&gt;&lt;br /&gt;It's true, our documentation is a bit fat. The core is described in 300 pages. Though we have lots of pictures! And we have virtually no errata, despite the fact that OSGi has been used in tens of thousands of applications over the last decade.&lt;br /&gt;&lt;br /&gt;I'd like to tell you a little anecdote. In 1997 I tried to convince Ralph Johnson about Java. My key argument was that Java was so nicely small and therefore easy to understand. Only 11 packages! Ralph, a famous Smalltalker, looked at me wearily and said: &quot;Just wait.&quot; Oh boy, was he right. That lesson still drives me every day to keep OSGi lean and mean, annoying many people along the way, but I guess that is the price one needs to pay.&lt;br /&gt;&lt;br /&gt;If you think project Jigsaw will be leaner than OSGi, well, modularity is a problem where &lt;span style=&quot;font-style: italic;&quot;&gt;size does matter&lt;/span&gt;. You cannot demonstrate modularity with a Hello World because modularity solves the problem of large evolving code bases. [deleted]&lt;br /&gt;&lt;br /&gt;So, James, I think that are lots of details where we did not get it perfect, but OSGi's weight is not one of them. The misconceptions about OSGi at Sun stand to cost our industry a lot of money and pain in the coming years. Project Jigsaw's simplicity is a fallacy, hidden by the fact that they do not address the hard issues that OSGi has now been working on for over a decade. &lt;span style=&quot;font-style: italic;&quot;&gt;All&lt;/span&gt; major application servers are today based on OSGi, not because it was fun or a hype, but because they had no choice. These are applications in themselves that have a scale where modularity is not an option but a &lt;span style=&quot;font-style: italic;&quot;&gt;necessity&lt;/span&gt;. The success of open source will move many Enterprise applications in this same realm.&lt;br /&gt;&lt;br /&gt;If you believe that a simplistic solution can address the needed scale, well than indeed we do live in another universe. However, please remember that we're here as friends, to help, and mean no harm.&lt;br /&gt;&lt;br /&gt;Your's sincerely,&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.aqute.biz/&quot;&gt;Peter Kriens&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span align=&quot;center&quot; style=&quot;display: block; float: right; font-weight: bold; font-style: italic;&quot; class=&quot;Article_Date&quot;&gt;&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/18772002-4783818912693881805?l=www.osgi.org%2Fblog&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 26 Jun 2009 07:26:55 +0000</pubDate>
	<author>noreply@blogger.com (Peter Kriens)</author>
</item>
<item>
	<title>Doug Schaefer: Android NDK Release 1 is Out</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-16474715.post-8667827357798643744</guid>
	<link>http://cdtdoug.blogspot.com/2009/06/android-ndk-release-1-is-out.html</link>
	<description>I got a surprise today (aside from the passing of Michael Jackson), the Android Native Development Kit (NDK) team has &lt;a href=&quot;http://developer.android.com/sdk/ndk/1.5_r1/index.html&quot;&gt;put out its first release&lt;/a&gt;. They never really hinted on their mailing list this was about to happen, nor did they actually provide a real time line. But it's a good surprise.&lt;br /&gt;&lt;br /&gt;The purpose of the NDK is to provide the ability to write native libraries that the Dalvik Java code can call through the Java Native Interface (JNI). This is the exact same interface we're used to with desktop JNI so it's quick to use. As I've mentioned here before, writing native code allows you to take advantage of the underlying hardware that Java hides from you. In this first release, it's pretty basic, exposing only a few basic APIs such as the standard libc C run-time library, the math library, and libz for accessing compressed files. Just enough to accelerate some of your algorithms with direct execution by the CPU, which is ARM only right now.&lt;br /&gt;&lt;br /&gt;There is still a lot missing, and they have promised there is more to come. OpenGL ES and audio are the big items on my wish list. At least I have enough information to be able to set up OpenGL ES so that it'll run on my HTC Dream phone and the emulator. But there are no guarantees it will run on any of the upcoming phones since the ABI hasn't been locked down. The GLES shared library name is the biggy (e.g. PowerVR as seen on the TI OMAP chips names their libs differently) although the header files should be the same.&lt;br /&gt;&lt;br /&gt;The build system, though, has me very concerned. They've taken a lot of the concepts from the Android platform build system, which builds everything in one tree, and brought it to the NDK, including the restriction that everything has to be in one tree. I don't build software like that. I put my native code in the same Eclipse project directory as the Java. I'm also working on a library that I want to use in a number of different platforms as mentioned in my previous entry. Android is just one target, it's not the center of the universe.&lt;br /&gt;&lt;br /&gt;I also noticed this when I took a look at Moblin. There is a standard way you setup a gcc cross-development environment. GCC has the facility to define a sysroot that organizes include files, and libraries in a natural way. And that allows for multi-target projects with very little change to your makefiles. Don't assume you're the only build system that wants to build my code.&lt;br /&gt;&lt;br /&gt;One final nit, the Windows toolchain was built using Cygwin. Cygwin is a Linux emulation environment for Windows. As such it tries to hide as much of the Windows environment as it can, in particular when dealing with file paths. That messes up the CDT. We have some code that tries to deal with that, but the architecture is poor and we may loose that functionality over time. I'm a big fan of CodeSourcery and these guys are masters at building toolchains for multiple targets and run cleanly on Windows without Cygwin. Mind you, I'm pretty much solely on Linux now so that doesn't matter to me as much any more. But others in the community will care.&lt;br /&gt;&lt;br /&gt;Anyway, besides all that, it's a great start. Native development and standard native APIs will be a key success factor for Android. We saw in the game console market how important it was for game developers to be able to target multiple platforms. That larger market allows for larger budgets which, of course, allows for better apps. The Apple guys get that and the iPhone SDK is very good, and at least for 3D Graphics and Audio, very standard. John Carmack of id (Doom and Quake) is a huge fan of theirs, but I wouldn't mind seeing Doom titles running on my Android phone.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/16474715-8667827357798643744?l=cdtdoug.blogspot.com&quot; height=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 26 Jun 2009 03:39:56 +0000</pubDate>
	<author>noreply@blogger.com (Doug Schaefer)</author>
</item>
<item>
	<title>Remy Suen: Native widgets? Check. Native icons? Maybe not…</title>
	<guid isPermaLink="true">http://blog.hantsuki.org/2009/06/25/native-widgets-check-native-icons-maybe-not/</guid>
	<link>http://blog.hantsuki.org/2009/06/25/native-widgets-check-native-icons-maybe-not/</link>
	<description>&lt;p&gt;Eclipse-based applications looks and feels native thanks to SWT but once you start gandering at them icons, it just doesn’t quite hit the mark. For the readers out there that are familiar with the &lt;a href=&quot;http://tango.freedesktop.org/Tango_Desktop_Project&quot;&gt;Tango Desktop Project&lt;/a&gt;, the window below doesn’t look out of place at all, right?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://blog.hantsuki.org/wp-content/uploads/2009/06/native.png&quot; /&gt;&lt;/center&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;In the Eclipse world, the icons don’t really bother us at all since we’ve been looking at them for so many years. Unsurprisingly, for some &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=267844&quot;&gt;clients&lt;/a&gt; and &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=265834&quot;&gt;users&lt;/a&gt;, this doesn’t quite cut it and they want to customize them a little or they want the icons to match their own desktop’s. What if you could appease these people by adding a little ‘Theme’ menu at the top to flip around some options? Or what if the user could just define their own icon preferences…?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://blog.hantsuki.org/wp-content/uploads/2009/06/eclipse.png&quot; /&gt;&lt;/center&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://blog.hantsuki.org/wp-content/uploads/2009/06/tango.png&quot; /&gt;&lt;/center&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you’ve ever been troubled by icons like the two bug reporters above, e4 CSS support could be the solution to your problems. Feel free to comment on &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=281593&quot;&gt;bug 281593&lt;/a&gt; if this piques your interest. &lt;b&gt;You&lt;/b&gt; can help shape e4 into the next generation platform that you and your clients need! Join the e4 team, today! :)&lt;/p&gt;
&lt;p&gt;Note: I realize that in the Eclipse world we have very specific user interface and icon design guidelines so this may not be everybody’s cup of tea. But hey, if you’re not interested in this, feel free to work on something else! Let me tell you, there’s no shortage of work in the e4 project. ;)&lt;/p&gt;</description>
	<pubDate>Fri, 26 Jun 2009 01:58:48 +0000</pubDate>
</item>

</channel>
</rss>
