tag:blogger.com,1999:blog-47402519305690901382024-03-05T19:53:21.717+01:00> /dev/null/wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.comBlogger38125tag:blogger.com,1999:blog-4740251930569090138.post-7236303883558904902018-03-01T18:26:00.000+01:002018-03-01T19:15:14.461+01:00The new Bling. Part 1: Nebula and OpalRecent studies [1] seem to suggest that companies are becoming tired of building web applications in favor of the rich client. Good news for the newly weds: Nebula and Opal!<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ162Ok_KZhqciIZPgdI10tUDfdcVdaJN5DIDVznn656wy3-EcEEPnFyNuMuI9qKnulL_fCtK-BJ95pAKh_Tc59uTEUcnV4D8N1wlU5GU5upBqqG1GhVkLkuJinEJSOm26Zcw09oyi8lY/s1600/opal.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="344" data-original-width="482" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ162Ok_KZhqciIZPgdI10tUDfdcVdaJN5DIDVznn656wy3-EcEEPnFyNuMuI9qKnulL_fCtK-BJ95pAKh_Tc59uTEUcnV4D8N1wlU5GU5upBqqG1GhVkLkuJinEJSOm26Zcw09oyi8lY/s400/opal.png" width="400" /></a><br />
You <a href="https://eclipse.org/nebula" target="_blank">might know Nebula</a>, which provides of a number of beautiful and functional widgets to spice up your RCP applications. You might not know Opal. Opal has been roaming freely on the internet and has been programmed largely by Laurent Caron.<br />
<br />
I have been chasing Laurent to join the Nebula project since 2014 and after some hard work over the last couple of months we finally did it:<br />
<br />
<br />
<div style="text-align: center;">
<br />
<span style="font-size: large;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">"two dozen new widgets have moved to Eclipse."</span></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
A great time to remove my blog from the mothballs (a Dutch saying, but you get the idea) and put some of Nebula's new widgets in the spotlight.</div>
<div style="text-align: left;">
<br /></div>
<h3 style="text-align: left;">
The new Bling. Part 1. The CheckboxGroup</h3>
<div style="text-align: left;">
Laurent, this is such a great idea! There are many times when you want to enable a group of widgets based on an initial selection. The whole boilerplate code of such a pattern in standard SWT is ugly as mud. Check this code and tell me if you recognize it:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"> proxyBox.addSelectionListener( event -> { </span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"> server.setEnabled(</span></span><span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">proxyBox</span></span>.getSelection();</span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"> port.setEnabled(</span></span><span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">proxyBox</span></span>.getSelection());</span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"> user.setEnabled(</span></span><span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">proxyBox</span></span>.getSelection());</span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"> password.setEnabled(</span></span><span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">proxyBox</span></span>.getSelection());</span></span><br />
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;"> });</span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"> </span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Enter the CheckboxGroup. On:</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://wiki.eclipse.org/images/e/ef/CheckBoxGroup1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="152" data-original-width="640" src="https://wiki.eclipse.org/images/e/ef/CheckBoxGroup1.png" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
and off:</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://wiki.eclipse.org/images/d/d6/CheckBoxGroup2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="152" data-original-width="640" src="https://wiki.eclipse.org/images/d/d6/CheckBoxGroup2.png" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
From Laurent's wiki documentation:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
You can set/get the text and the font of the checkbox, and you get the value of the selection by calling <span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: small;"><i>isActivated()</i></span>. </span></span>In case you want to set the state of this checkbox programmatically (and thus enable or disable the content of the group) you use <span style="font-family: "courier new" , "courier" , monospace; font-size: small;"><i><span style="font-size: xx-small;">activate()</span></i></span> and <span style="font-size: small;"><i><span style="font-size: xx-small;"><span style="font-family: "courier new" , "courier" , monospace;">deactivate()</span></span></i></span><span style="font-size: small;">.</span></div>
<div style="text-align: left;">
<br /></div>
The content, which is a Composite, is accessible with the getter <span style="font-size: small;"><i><span style="font-size: xx-small;"><span style="font-family: "courier new" , "courier" , monospace;">getContent()</span></span></i></span>.<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Pretty slick! And this is only one of the 24 new widgets! You can <a href="https://wiki.eclipse.org/Nebula_CheckboxGroup" target="_blank">get the CheckboxGrou</a>p from the <a href="https://www.eclipse.org/nebula/downloads.php" target="_blank">latest nighly builds</a>.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Cheers,</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Wim</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
[1] fake news</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com0tag:blogger.com,1999:blog-4740251930569090138.post-52796524230671144232016-03-17T15:06:00.000+01:002016-03-17T15:06:33.373+01:00IoT: Upcoming V3 release of the Arduino Eclipse plugin<br />
If you are an Eclipse and Arduino fan you should definitively try this project. On April 1 V3 will be released but stable downloads are already available from the nightly section.<br />
<br />
<span class="im">"With the release of version 3 of the Eclipse Arduino product,
nicknamed "Toddler", Project Lead Jan Baeyens brings us the next
big step in professional development for the open hardware Arduino
platform. The major features of this release are single install,
auto library include and an incredibly good integrated serial
monitor."</span><br />
<br />
<span class="im">Stable nightly downloads are here [1]</span><br />
<span class="im">Source code is here [2] </span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/x_JKcvqpxq8/0.jpg" src="https://www.youtube.com/embed/x_JKcvqpxq8?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span class="im"><br /></span>
<span class="im"><br /></span>
<span class="im">[1] http://eclipse.baeyens.it/</span><br />
<span class="im">[2] https://github.com/jantje/arduino-eclipse-plugin</span><br />
<span class="im"><br /></span>
<span class="im">Cheers,</span><br />
<span class="im"><br /></span>
<span class="im">Wim</span>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com0tag:blogger.com,1999:blog-4740251930569090138.post-38558504567209293092015-07-08T11:42:00.000+02:002015-07-08T11:42:23.503+02:00Unix Time to Date conversion in SQL for DB2 DB2/400 or iSeries or IBM iFor those of you who are in search of converting a UNIX Epoch Timestamp or whatever this is called to a readable date in DB2/400 SQL <a href="http://www.walkernews.net/2014/02/08/db2-sql-function-that-converts-unix-epoch-time-to-calendar-date/" target="_blank">may have found this posting here</a> [1]. However, this does not translate to the beloved IBM i SQL syntax so I converted it to something that will run on the IBM i.<br />
<br />
<h3>
The Function</h3>
<blockquote class="tr_bq">
<br />CREATE FUNCTION e2d (ept INT) <br />RETURNS CHAR(23) <br />RETURN <br />(CHAR(DATE(INT(ept/86400) + DAYS('1970-01-01')), ISO))<br />|| ' ' || <br />repeat('0', 2 - length(rtrim(mod(int(ept/3600), 24))))<br /> || rtrim(mod(int(ept/3600), 24)) <br />|| ':' || <br />repeat('0', 2 - length(rtrim(mod(int(ept/60), 60)))) <br /> || rtrim(mod(int(ept/60), 60)) <br />|| ':' || <br />repeat('0', 2 - length(rtrim(mod(int(ept), 60)))) <br /> || rtrim(mod(int(ept), 60)) <br />|| ' UTC' </blockquote>
<br /><h3>
How to use</h3>
The timestamps can be included with milliseconds which this function does not accept so you either change the function (or let me do it for $100) or strip the milliseconds from the value.<br />
<br />
<br />
<h3>
Value in File</h3>
<blockquote class="tr_bq">
> <b>select expected_start_date from item</b></blockquote>
Result:<br />
<blockquote class="tr_bq">
<b>EXPECTED_START_DATE </b> <br /> 1.368.965.867.668 <br /> 1.369.138.667.695 <br /> 1.369.138.667.658 <br /> 1.423.064.635.396 <br /> 1.356.951.946.378 <br /> 1.369.052.267.674 <br /> 1.358.246.021.420 <br /> 1.370.953.067.703 <br /> 1.369.052.267.689 <br /> 1.369.052.267.671 <br /> 1.413.212.245.996 <br /> 1.366.979.412.834 </blockquote>
<h3>
Value in File with Conversion</h3>
<blockquote class="tr_bq">
> <b>select e2d(int(expected_start_date/1000)) as expected_start_date from item</b></blockquote>
Result: <br />
<blockquote class="tr_bq">
<b>EXPECTED_START_DATE </b> <br />2013-05-19 12:17:47 UTC<br />2013-05-21 12:17:47 UTC<br />2013-05-21 12:17:47 UTC<br />2015-02-04 15:43:55 UTC<br />2012-12-31 11:05:46 UTC<br />2013-05-20 12:17:47 UTC<br />2013-01-15 10:33:41 UTC<br />2013-06-11 12:17:47 UTC<br />2013-05-20 12:17:47 UTC<br />2013-05-20 12:17:47 UTC<br />2014-10-13 14:57:25 UTC<br />2013-04-26 12:30:12 UTC<br />2013-02-04 16:15:57 UTC<br />2013-02-03 23:27:41 UTC </blockquote>
Cheers,<br />
<br />
Wim <br />
wim.jongman at remainsoftware com<br />
<br />
[1] http://www.walkernews.net/2014/02/08/db2-sql-function-that-converts-unix-epoch-time-to-calendar-date/wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com1tag:blogger.com,1999:blog-4740251930569090138.post-27471814295286413562014-04-13T21:28:00.000+02:002014-04-15T19:31:59.978+02:00How to contribute to Nebula with Gerrit<h2>
How to contribute to Nebula with Gerrit</h2>
This video shows how contributors can clone our git repo and supply patches through Gerrit.<br />
<br />
<br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/TBYlIYr19Gw?rel=0" width="560"></iframe>
</div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com2tag:blogger.com,1999:blog-4740251930569090138.post-69027602988637424132014-03-26T19:15:00.002+01:002014-03-26T19:15:36.670+01:00Nebula Newsletter Q1-2014 / Calling New ContributorsHere is a little summary of the work that has been going on in the Nebula Project over the past half year or so.<div>
</div>
<div>
</div>
<div>
<br /></div>
<br />
<b>New Committers</b><br />
<div>
Three new committers joined in 2013, <i><b>Dirk Fauth</b></i> for Gantt, <b><i>Xihui Chen</i></b> for Visualization and <b><i>Cedric Brun</i></b>
for Paperclips. A number of patches have already been accepted and
Xihui is having a lot of fun accepting multiple large patches for the
same code! </div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.eclipse.org/nebula/widgets/visualization/images/widgets.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.eclipse.org/nebula/widgets/visualization/images/widgets.png" height="175" width="320" /></a></div>
<div>
<br /></div>
<div>
We have two new committers joining the ranks. Just recently <i><b>Laurent Caron</b></i> joined after I invited him to get the <a href="https://code.google.com/a/eclipselabs.org/p/opal/">Opal widgets from EclipseLabs</a>
into Eclipse. The code has been accepted by our legal department and
after the committer paperwork is done I will help Laurent to get his
widgets into our repo and build system.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://opal.eclipselabs.org.codespot.com/hg.wiki/images/heapManager.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://opal.eclipselabs.org.codespot.com/hg.wiki/images/heapManager.png" /></a></div>
<div>
<br /></div>
<div>
We are currently running a committer vote for <b><i>Mirko Paturzo</i></b>. Mirko brings a lot of new energy to the Grid widget. Mirko has finished a really nice contribution to the <a href="https://www.eclipse.org/nebula/widgets/grid/grid.php">Grid widget</a>. Speed and memory consumption have been dramatically improved and currently Mirko is attacking the open bugs list for Grid.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.eclipse.org/nebula/widgets/grid/grid.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="157" src="https://www.eclipse.org/nebula/widgets/grid/grid.png" width="320" /></a></div>
<div>
<br /></div>
<div>
<b>Gerrit and other cool releng stuff</b> </div>
<div>
Thanks to <i><b>Mickael Istria</b></i>
we are running the smoothest Gerrit workflow. Our system is now
routinely being tested after every contribution to Gerrit. Accepting
patches has never been so easy. </div>
<div>
</div>
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<div>
Apart from Gerrit, Mickael has also setup a <a href="https://wiki.eclipse.org/Nebula/Builds#Sonar">Sonar instance</a> for Nebula. It gives you information about your code in the areas of <i>Duplications</i>, <i>Coding standards</i>, <i>Lack of coverage</i>, <i>Potential bugs</i>, <i>Complexity</i>, <i>Documentation </i>and <i>Design. </i>Please check it out. This brings me to:<br /><br /><div>
<b>Unit Tests</b></div>
Please provide Unit tests for your widgets people! <br /><br /><b>EclipseCon Europe Nebula Talk</b> </div>
<div>
I
have conducted a talk about the Nebula project and introduced a lot of
our widgets. I did not create a Powerpoint or Prezi presentation but
instead I used that other presentation tool: <span style="color: #660000;"><i><b>RCP and Nebula widgets</b></i></span>. You can check out the sources here: <a href="https://github.com/EclipseNebula/ECE2013">https://github.com/EclipseNebula/ECE2013</a>. By the way, the <a href="http://www.eclipse.org/community/eclipse_newsletter/2013/december/article3.php">presentation was voted #8 best talk</a> based on number of people attending and rates given. </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcFcE8jN7mcakgp6nK8s-6mUJEMCmVQn9dGahyphenhyphen7njssxT2XkO6Ja0jkOgECupszKWzlnUwdyRxg9QLoD-fs8ezekmdR4tiJlHtbV2Z_W1i5Fg_Lw6uuGzkjN-RJtsmp9kd6W-u16vDePU/?imgmax=800" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcFcE8jN7mcakgp6nK8s-6mUJEMCmVQn9dGahyphenhyphen7njssxT2XkO6Ja0jkOgECupszKWzlnUwdyRxg9QLoD-fs8ezekmdR4tiJlHtbV2Z_W1i5Fg_Lw6uuGzkjN-RJtsmp9kd6W-u16vDePU/?imgmax=800" height="212" width="320" /></a></div>
<div>
<br /></div>
<div>
<div>
<b>Project Lead </b></div>
</div>
<div>
In January, <i><b>Tom Schindl </b></i><a href="https://dev.eclipse.org/mhonarc/lists/nebula-dev/msg02759.html">resigned as co-lead.</a>
I want to thank Tom for all his work in the Nebula community over the
past years. I wish him the best of luck with his current endeavors which
are mostly focussed on Eclipse/JavaFX integration. Tom will maintain
his Nebula committer status. <br /></div>
<div>
I will be soliciting for a new co-lead in the near future. So please ask yourself if this is something that you want to do.</div>
<div>
<br /><div>
<div>
<b>Future of Nebula</b></div>
</div>
Spring has come. In a few days I will launch a discussion about the future of Nebula. <span style="color: #990000;"><b>Please start thinking about the things you do not like in the project so that we can discuss and change them.</b></span><br /><br /><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpGktWHfj3gl3DcyqY7L2bOIPHPYXTeJKB0wIiPj2VjvxolC9ulJAq932RAakoFl2q4l14jqAYUgYtf2Q38jlm3z374UoRfLvsTWgWsvNNdDap3XFIiy7oiwepwMd7khsyYdcwDQUy-Zs/s1600/V0z8hrbZ.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpGktWHfj3gl3DcyqY7L2bOIPHPYXTeJKB0wIiPj2VjvxolC9ulJAq932RAakoFl2q4l14jqAYUgYtf2Q38jlm3z374UoRfLvsTWgWsvNNdDap3XFIiy7oiwepwMd7khsyYdcwDQUy-Zs/s1600/V0z8hrbZ.jpeg" height="200" width="200" /></a></div>
<div>
<b> </b></div>
<div>
<b> </b></div>
<div>
<a href="http://static6.depositphotos.com/1003625/592/i/450/depositphotos_5927908-Luring-closer.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><b>Calling New Contributors</b></div>
Nebula is the easiest project in Eclipse to get involved in. We have <a href="http://git.eclipse.org/c/nebula/org.eclipse.nebula.git/tree/widgets">the clearest repo structure</a>, we have <a href="https://wiki.eclipse.org/Nebula/Contributions">the best contributor guide</a>, we have the least dependencies, every change you make can be build locally, we have the coolest <a href="https://wiki.eclipse.org/Nebula/Builds">Maven/Tycho/Hudson/Sonar build system</a>, an advanced git/Gerrit workflow and the most welcoming and friendly project lead (me <b>;</b>).
We will guide your first steps into the magical realm of Eclipse and
Open Source development. If you are an Eclipse newcomer and you want to
hone your open source contribution skills then Eclipse Nebula is the
place to start. Please reply here, contact me privately or send a mail
to the <a href="https://dev.eclipse.org/mailman/listinfo/nebula-dev">nebula-dev</a> list if you are interested.</div>
<div>
</div>
<div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
This
is all I could think of for now. If I have forgotten something, please
respond here, to the nebula-dev list or in a private mail to me and I
will make it right.<br /></div>
<div>
Happy coding,<br /><br />Wim Jongman</div>
<div>
<br /></div>
<div>
<br /></div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com1tag:blogger.com,1999:blog-4740251930569090138.post-73751805553495776982014-02-20T16:44:00.000+01:002014-02-20T16:45:19.352+01:00How to add your Hackergotchi to Planet EclipseI write this blog to test if my <a href="http://en.wikipedia.org/wiki/Hackergotchi" target="_blank">Hackergotchi</a> appears on <a href="http://www.planeteclipse.org/planet/" target="_blank">Planet Eclipse</a>. Normally you ask the webmasters to insert your Hackergotchi into the relevant files but now that we have Gerrit, the only thing the webmasters need to do is to check the code and accept your patch.<br />
<div>
<br /></div>
<div>
This is how I added my own Hackergotchi to Planet Eclipse.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.planeteclipse.org/planet/images/faces/wim.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.planeteclipse.org/planet/images/faces/wim.png" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>File a Bug</b><br />
<div>
First I filed a bug against Community/PlanetEclipse.org. You do this by clicking on this link[1]. You also have to sign the CLA. You can do that from bugzilla.</div>
<div>
<br /></div>
<div>
[1] <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=PlanetEclipse.org">https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=PlanetEclipse.org</a></div>
<div>
<br /></div>
<div>
Write down the bug number and the summary</div>
<div>
<br /></div>
<div>
<b>Get your Gerrit password</b><br />
<div>
Then you need to get your Gerrit password. You do this by clicking on this link[2] and sign on with your bugzilla e-mail address and password. After you have done this, a screen appears where you see your Gerrit credentials. Write them down.</div>
</div>
<div>
<br /></div>
<div>
[2] <a href="https://git.eclipse.org/r/login/settings/http-password">https://git.eclipse.org/r/login/settings/http-password</a></div>
<div>
<br /></div>
<div>
<b>Clone the git repository</b> </div>
<div>
Go to the command line and surf to the place where you keep your git repos and type</div>
</div>
</div>
<div>
<br /></div>
<div>
<span style="background-color: white; color: #353535; font-family: monospace; font-size: 12px; white-space: pre;">git clone https://GERRIT_USER_HERE@git.eclipse.org/r/planeteclipse.org/planeteclipse.org</span></div>
<div>
<span style="background-color: white; color: #353535; font-family: monospace; font-size: 12px; white-space: pre;"><br /></span></div>
<div>
Then go into Eclipse, open the "Git Repository Exploring" perspective, click <i>"Add an existing local git repository to this view"</i> and pick the planet eclipse repository that you have just cloned.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisRCqtno3XHYvlkcIbl__5bimxDO8LegkKumiY-AeJReuME4ASBo-nR5xjIaNmjd2FWCkNhFWl_f0Yl4l3artim9n5odelbPxo2ilcWWMk46pSMjRn9vBZRrYG8gJsG6JdBfAih0lbNjU/s1600/2014-02-20_1511.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisRCqtno3XHYvlkcIbl__5bimxDO8LegkKumiY-AeJReuME4ASBo-nR5xjIaNmjd2FWCkNhFWl_f0Yl4l3artim9n5odelbPxo2ilcWWMk46pSMjRn9vBZRrYG8gJsG6JdBfAih0lbNjU/s1600/2014-02-20_1511.png" height="245" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
Then import the "planet" project:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimEDuhrRRmBhOTffMgvKENQ40_2GKlEWm57BbQUNJzQdRNLLA9t5PucqY1cwxZsT1ahC6ark8M3nkqUKOXhNBw8eqIXZU76FQbREVKamKYDEPbGn_LaQnM3ursaQOipfFTB49dqsRBQco/s1600/2014-02-20_1539.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimEDuhrRRmBhOTffMgvKENQ40_2GKlEWm57BbQUNJzQdRNLLA9t5PucqY1cwxZsT1ahC6ark8M3nkqUKOXhNBw8eqIXZU76FQbREVKamKYDEPbGn_LaQnM3ursaQOipfFTB49dqsRBQco/s1600/2014-02-20_1539.png" height="239" width="320" /></a></div>
<div>
<b>Changing the content</b> </div>
<div>
Create a Hackergotchi. Mine is about 90x120 and you should also be in this range. Be creative. Make sure you have a transparent background. Once your Hackergotchi is created, open the package explorer and find the "planet" project. Then open the "output/images" directory and place your Hackergotchi in the "faces" directory. </div>
<div>
<br /></div>
<div>
Then open the "eclipse/feeds/community.ini" file (open in text editor) and find the link to your blog. Then just below the entry, make sure to put the following content just below your blog entry. </div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><b>[http://industrial-tsi-wim.blogspot.com/feeds/posts/default/-/Eclipse]</b></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><b>name = Wim Jongman</b></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><b>face = wim.png</b></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><b>facewidth = 96</b></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><b>faceheight = 122</b></span></div>
</div>
<div>
<br /></div>
<div>
Your name should already be there and the "facewidth" and "faceheight" variables should exactly match the image dimensions. The "face" variable should exactly match the name of the image you placed in "output/images/faces".</div>
<div>
<br /></div>
<div>
<b>Commit your changes</b> </div>
<div>
Committing your changes to Gerrit requires some additional steps. First write down the bug number in the format I show here:</div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">bug xxxxxx - bug summary</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><empty line=""></empty></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><empty line=""></empty></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><change-id> (click 1)</change-id></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><signed-off by=""> (click 2)</signed-off></span></div>
<div>
<br /></div>
<div>
Click on the project and select "Team/Commit ...". You have to add a Gerrit change-id and you have to sign-off the change. Then press "Commit"</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmlmL0zXG_sTn9w6WJmygIWGL3xZaQrbk08k26vxgjQKodli4ij_pqFrPNEnzJSUMiXeV9nA62UySiVc2-MCXRBQoBr8VEqFAR7sNB3n52sjI-XENZqTtVuCR01eTripar1x-upKLD7DM/s1600/2014-02-20_1556.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmlmL0zXG_sTn9w6WJmygIWGL3xZaQrbk08k26vxgjQKodli4ij_pqFrPNEnzJSUMiXeV9nA62UySiVc2-MCXRBQoBr8VEqFAR7sNB3n52sjI-XENZqTtVuCR01eTripar1x-upKLD7DM/s1600/2014-02-20_1556.png" height="319" width="320" /></a></div>
<div>
<br /></div>
<div>
<b>Push to Gerrit</b></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
Again go to the "Git Repository Exploring" perspective and right click on the planeteclipse.org repo. Then select "Push to Gerrit ...":</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCL9zGG7vGdSnlhA44ZgADxk33kLB6OTshrMe-xgqKjwpUht-jCT06yrOLWn_vd6BRbHf2hI7PC0UipxjVzs5mczXlYHK8aUv0ej_64DjIvgC0jyltJ0tubVwFST8sPk-jBFxoQQgVZe0/s1600/xx_gerrit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCL9zGG7vGdSnlhA44ZgADxk33kLB6OTshrMe-xgqKjwpUht-jCT06yrOLWn_vd6BRbHf2hI7PC0UipxjVzs5mczXlYHK8aUv0ej_64DjIvgC0jyltJ0tubVwFST8sPk-jBFxoQQgVZe0/s1600/xx_gerrit.png" height="219" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
On the dialog that appears type "master" in the field that follows "refs/for" in "Gerrit Branch". Then in the Login dialog box you type in your Gerrit password.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLBJbr2NxkAGlbKDvVgLYwMjA9L2xc46wVSfQ19yE7wenlDa4I2Gz-mvJ5u5o9wKeqofTWRdTR4XbbNjAXG82NJ6opbpAZGvr1dkWqrC9jOv8fFy-yymazRgBr6s3X-UEdkbD1dBkp35w/s1600/xx_gerrit3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLBJbr2NxkAGlbKDvVgLYwMjA9L2xc46wVSfQ19yE7wenlDa4I2Gz-mvJ5u5o9wKeqofTWRdTR4XbbNjAXG82NJ6opbpAZGvr1dkWqrC9jOv8fFy-yymazRgBr6s3X-UEdkbD1dBkp35w/s1600/xx_gerrit3.png" height="262" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
When EGit congratulates you with the push, you will see a link that looks something like this:</div>
<div>
<br /></div>
<div>
<a href="https://git.eclipse.org/r/#/c/22253/">https://git.eclipse.org/r/#/c/22253/</a></div>
<div>
<br /></div>
<div>
You should also be able to find it in Gerrit under "My/Changes"</div>
<div>
<br /></div>
<div>
Go to the bug again and enter this link in a new comment.</div>
<div>
<br /></div>
<div>
Happy Hackergotchi,</div>
<div>
<br /></div>
<div>
Wim</div>
<div>
<br /></div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com5tag:blogger.com,1999:blog-4740251930569090138.post-29588963336817557172014-01-19T15:18:00.000+01:002014-01-19T15:18:29.565+01:00MDialog and MWizardDialog supported by the E4 Model EditorWe have added support for the new E4 model elements. We ask you to play with this and help us figure out what additional API these parts need.<br />
<br />
To install the new E4 tooling you need to be on <a href="http://www.eclipse.org/downloads/index-developer.php" target="_blank">Luna M4 which can be found here </a><a href="http://www.eclipse.org/downloads/index-developer.php" target="_blank">(by the time of this writing)</a><a href="http://www.eclipse.org/downloads/index-developer.php" target="_blank">.</a><br />
<br />
Then you need to install the latest integration build of the model tooling <a href="http://download.eclipse.org/e4/downloads/" target="_blank">which can be found here</a>.<br />
<br />
After installation and restart you can play with the live model editor to see these new elements in action.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube-nocookie.com/embed/1zIKP_P1maY?rel=0&controls=1&showinfo=0" width="560"></iframe><br /></div>
<div style="text-align: center;">
<br /></div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com0tag:blogger.com,1999:blog-4740251930569090138.post-88052513253987482462014-01-09T19:13:00.000+01:002014-01-09T19:13:02.178+01:00CTRL+1 CTRL+1CTRL+1 is the Eclipse quick-fix key. I use it all the time but sometimes it predicts my intentions incorrectly. Take for example the following code:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhID-ju3bPPN_7gve37a12-O6NzxI75wi5ukO_IDfjls0Mzs35mhkku8Ht0vaXWwI8yTu3VFu6Dc4p5MQMKcdf2IPGkKvzjfDQN1Hor5RGHimGzMgct3NHfPhXaiTq3X_fD-EoPldQjU8U/s1600/2014-01-09_1852.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhID-ju3bPPN_7gve37a12-O6NzxI75wi5ukO_IDfjls0Mzs35mhkku8Ht0vaXWwI8yTu3VFu6Dc4p5MQMKcdf2IPGkKvzjfDQN1Hor5RGHimGzMgct3NHfPhXaiTq3X_fD-EoPldQjU8U/s1600/2014-01-09_1852.png" /></a></div>
<br />
I position my cursor on the field "composite_1" to rename it and press CTRL+1. What happens is the following: The tooling knows that my source contains errors and jumps to the next nearby problem to display the quick-fix options. Nice, but not what I wanted. <br />
<div>
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwy76P1ZkLbxu-NcQKqA17UU2J-JTUH5xXuw8GYp2i9szWuk2yoDyNFdwk_VlxOv9yjqYA3ybkQ2fm429Rh2huci78sn8nsf-Yca1IJAqA7rV5OjWc4YFtoYa0q7NxQyFQL2wPmi4IFgs/s1600/2014-01-09_1856.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwy76P1ZkLbxu-NcQKqA17UU2J-JTUH5xXuw8GYp2i9szWuk2yoDyNFdwk_VlxOv9yjqYA3ybkQ2fm429Rh2huci78sn8nsf-Yca1IJAqA7rV5OjWc4YFtoYa0q7NxQyFQL2wPmi4IFgs/s1600/2014-01-09_1856.png" /></a></div>
<br />
<br />
<br />
To get back to my original cursor position I press CTRL+1 again. The cursor jumps back and opens the quick fix dialog again but now on the correct position:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJyQsHnDQ2kYWkLNbhRISxDMIEs_6ZFacbu8tlG99ljDF6CQFjnQ6kOKbXRsehm7JvcX4W-r6Ocn42kKmkj-3vpcbmpYrqGD3gfTVNrDiAQ9Sl9W3wbcGLYBZ9fBeAr2j3qGryOf2uET8/s1600/2014-01-09_1905.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJyQsHnDQ2kYWkLNbhRISxDMIEs_6ZFacbu8tlG99ljDF6CQFjnQ6kOKbXRsehm7JvcX4W-r6Ocn42kKmkj-3vpcbmpYrqGD3gfTVNrDiAQ9Sl9W3wbcGLYBZ9fBeAr2j3qGryOf2uET8/s1600/2014-01-09_1905.png" /></a></div>
<br />
You probably knew this one but I thought I tell you anyway, just in case.<br />
<br />
Cheers,<br />
<br />
Wim<br />
<br />wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com3tag:blogger.com,1999:blog-4740251930569090138.post-20286955782238947222013-12-11T17:50:00.000+01:002013-12-11T23:08:41.699+01:00Manage your Eclipse Preferences with the Workspace Mechanic<h3>
Summary</h3>
<i>Workspace Mechanic </i><i>is a tool that will manage your Eclipse preferences. I recommend that you start using it. This blog tells you why and how.</i><br />
<br />
<h3>
What problem does it solve</h3>
<div>
Every time you start a new workspace in Eclipse, the preferences will be "reset" to their default values. This is <i>extremely</i> frustrating because it takes a lot of time to find all your carefully crafted settings and re-apply them. For example, one of the preferences that came up lately [3] is "Completion overwrites":</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtCPD9q80URyrHGbgN54VMm79Hsh1m5w-TFDRB1Dm057OVm1D9gIEMfpP9RKbMXTyVUxvDh3H0WEAkBv6SPS1_lZe0__dsxTzw2uuWuNcoRsjeDwAqMj2lAjB8V4GPp4t4Vs6Mr_C82us/s1600/completionoverwrites.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtCPD9q80URyrHGbgN54VMm79Hsh1m5w-TFDRB1Dm057OVm1D9gIEMfpP9RKbMXTyVUxvDh3H0WEAkBv6SPS1_lZe0__dsxTzw2uuWuNcoRsjeDwAqMj2lAjB8V4GPp4t4Vs6Mr_C82us/s1600/completionoverwrites.gif" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Unfortunately, the default is wrong (at least for me). The number of times I have changed this setting are countless. I want to set this preference only once and let a tool manage it for eternity. For every new and existing workspace. Interested? Read on.</div>
<div>
<br /></div>
<h3>
Workspace Mechanic</h3>
I had heard about Workspace Mechanic before but never gave it much attention until I <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=421571" target="_blank">read this bug</a> posted by <a href="https://www.lemmster.de/blog/index.php/category/work/eclipse" target="_blank">Markus Kuppe</a>. Markus wanted to have this tool in the default Eclipse distributions so I figured it was time I gave it a spin. Markus also provided a set of preferences to kickstart the configuration [2]. I like it so much that I'm even writing a blog about it.<br />
<br />
First, a <a href="http://en.wikipedia.org/wiki/Hat_tip" target="_blank">tip-of-the-hat</a> to <a href="https://twitter.com/kberg" target="_blank">Robert Konigsberg</a> for writing this tool.<br />
<br />
<h3>
What does it do<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLEYtDr7EEX_uvPXgeNVtCJI4dL6Tfzxufb-tgOOP2VLBNypdIKMwPzRvV8rSwrBO6U2ShujJh9CFCdkT_C2aIjd1Dyh55o41GG1iNollNDHrpjxxOIjIBUbSNP5wWz9zICrje1VcOPU/s1600/2013-12-11_1021.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLEYtDr7EEX_uvPXgeNVtCJI4dL6Tfzxufb-tgOOP2VLBNypdIKMwPzRvV8rSwrBO6U2ShujJh9CFCdkT_C2aIjd1Dyh55o41GG1iNollNDHrpjxxOIjIBUbSNP5wWz9zICrje1VcOPU/s1600/2013-12-11_1021.png" /></a></div>
</h3>
<div>
Workspace Mechanic will monitor your preferences and detect if one or more of these is not according to your.. well.. preferences! </div>
<div>
<br />
Workspace Mechanic has a little indicator to tell if your preferences are out of sync. It optionally shows a pop-up that will enable you to set them straight.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQYWX4ijt0TYv0pBzbfh9wO5ag5Z0vgWT-SX90ZThBf9-QMMf793gIPUxVoxw6-84LAPL6W2z4DBB33-y5kXt4hNaXnQKBjGuQ5lyIyokfBSwe6QaV72oim6pJ48amjHOgRZWmY7AwnJE/s1600/2013-12-11_1029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQYWX4ijt0TYv0pBzbfh9wO5ag5Z0vgWT-SX90ZThBf9-QMMf793gIPUxVoxw6-84LAPL6W2z4DBB33-y5kXt4hNaXnQKBjGuQ5lyIyokfBSwe6QaV72oim6pJ48amjHOgRZWmY7AwnJE/s1600/2013-12-11_1029.png" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEFzTKgWI84tRbBl8nEppFaTnzt-fBCUeefVyCXzA1UkXB559yZTNkGfuhxVAtsEfrBsRRzxpMmsayv3EOb1LZOipFN5BtaDdtSfhPwMVZTITErM_sR2gKOdRx-DTYrlI9adhusjo23Tw/s1600/2013-12-11_1030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEFzTKgWI84tRbBl8nEppFaTnzt-fBCUeefVyCXzA1UkXB559yZTNkGfuhxVAtsEfrBsRRzxpMmsayv3EOb1LZOipFN5BtaDdtSfhPwMVZTITErM_sR2gKOdRx-DTYrlI9adhusjo23Tw/s1600/2013-12-11_1030.png" /></a></div>
<div>
<br /></div>
<div>
You can also double-click the icon and Workspace Mechanic will set the out-of-sync preferences to the prefered state.</div>
<div>
<br /></div>
<h3>
Configure Workspace Mechanic</h3>
<div>
Install Workspace Mechanic from its update site <a href="https://code.google.com/a/eclipselabs.org/p/workspacemechanic/" target="_blank">[1]</a>. Then go to the command line and execute the following sequence of commands.</div>
<div>
<br /></div>
<b>git clone https://github.com/wimjongman/myWorkspaceMechanics.git<br />cd myWorkspaceMechanics</b><br />
<div>
<br /></div>
<div>
Now we have a set of sensible preferences that we can start with but we need to copy them to a place where Workspace Mechanic can find them. One of the default places is the <i><b>mechanic</b></i> directory in the <i><b>.eclipse</b> </i>directory in your home directory (replace <i><b>$home$</b></i> with your home directory.)</div>
<div>
<br /></div>
<div>
<b>mkdir $home$/.eclipse/mechanic</b><br />
<br />
Once this directory is created, copy all the <i style="font-weight: bold;">epf</i> files from the git repo into that new directory.<br />
<br />
<span style="font-weight: bold;">cp *.epf $home$/.eclipse/mechanic/</span><i style="font-weight: bold;"> </i>// or equivalent for your OS<br />
<br />
That's it. Restart your Eclipse switch to a few new workspaces and enjoy this great new tool. If it does not work, please look at its preferences! ;)<br />
<br />
Yours truly,<br />
<br />
Wim<br />
<br />
[1] http://workspacemechanic.eclipselabs.org.codespot.com/git.update/mechanic//</div>
[2] https://github.com/lemmy/myWorkspaceMechanics<br />
[3]<br />
https://bugs.eclipse.org/bugs/show_bug.cgi?id=423767<br />
https://bugs.eclipse.org/bugs/show_bug.cgi?id=423697<br />
https://bugs.eclipse.org/bugs/show_bug.cgi?id=423658<br />
https://bugs.eclipse.org/bugs/show_bug.cgi?id=423642wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com3tag:blogger.com,1999:blog-4740251930569090138.post-66599634757088906142013-08-05T20:16:00.003+02:002013-08-05T20:20:04.820+02:00A Giant Leap for Eclipse RCPIt is the end of my working day so I thought I give Eclipse Luna a spin in honor of t<a href="http://dev.eclipse.org/mhonarc/lists/e4-dev/msg07670.html" target="_blank">omorrow's all day test day</a> for Eclipse Luna M1. The reason for my curiosity was Eric Moffatt's answer to <a href="http://dev.eclipse.org/mhonarc/lists/e4-dev/msg07669.html" target="_blank">my question about the priority of the Eclipse mixed mode model</a> that allows us to use the e4 programming model in the e3 workbench. Sure enough I got a report when Lars was doing housekeeping for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=356511" target="_blank">bug 356511</a>.<br />
<br />
Lars mentioned that Eric had erected a new extension to the "views" extension point call "e4view" so I was eager to try this out. This is what I did.<br />
<br />
<h3>
Taking Luna for a spin</h3>
Pick up a copy of Eclipse Luna from the <a href="http://download.eclipse.org/eclipse/downloads/" target="_blank">Platform download page</a>. Look for the 4.4 Integration build link, ignore all the red you see, find the build for your platform and click on "(http)" to get the zip.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj96k56VI97AcIBoMyd65MIWlBWPhhno_PCOKrKclKQVA5fWzWjUDcrmMRQqXFQVlXEP6hiWG34badbe7I_jVUh5s01oIQqaZ3DWMIuerI5JgSdf8f8SF_k6oXor9K6R25yaGjKO6SmOvc/s1600/2013-08-05_1838.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj96k56VI97AcIBoMyd65MIWlBWPhhno_PCOKrKclKQVA5fWzWjUDcrmMRQqXFQVlXEP6hiWG34badbe7I_jVUh5s01oIQqaZ3DWMIuerI5JgSdf8f8SF_k6oXor9K6R25yaGjKO6SmOvc/s1600/2013-08-05_1838.png" /></a></div>
<br />
Then extract the zip and enter that directory to find the Eclipse executable and run it.<br />
<br />
<h3>
Creating the RCP application</h3>
<div>
With the information from the bug and the mailing list, I asked myself, what is intuitive? My first idea was to create an RCP application with the usual wizards and use the "RCP with a view" template and then extend this application to add an e4 view. This turned out to be exactly how it works.<br />
<br />
I took the first step and let Eclipse generate the little RCP application for me. Once the application was generated, I executed it once to see if it worked. As usual, no problems.</div>
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOrOqhrPj5fCZFqb0E42oS73imTwthvUl0fSV8Hn3CZHXs0dIVjLm0su2KfjDrjUhw8Ht5BmKRzdGnO_sxR5aZyhoYtlORbDkVF9hn00GbsoeEoQwyD3f2i_IETPxJwpfumQrF4TK1ybI/s1600/2013-08-05_2012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOrOqhrPj5fCZFqb0E42oS73imTwthvUl0fSV8Hn3CZHXs0dIVjLm0su2KfjDrjUhw8Ht5BmKRzdGnO_sxR5aZyhoYtlORbDkVF9hn00GbsoeEoQwyD3f2i_IETPxJwpfumQrF4TK1ybI/s1600/2013-08-05_2012.png" /></a></div>
<br /></div>
<h3>
Adding an e4 part</h3>
<div>
The next thing was to look for the new extension in the views extension point and there it was: </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJKAX1e3321JbW7-zq7OpOUA0xDkU73BL5rpUTJqDUawKCTHPY0UQdSBG3BCQ3pgf1ga9f-WWe88IQhUMdOjXhEoGk6UpvYflNThpuAh4NZozKl7Jzo1sUh1PxPuPSzTuTjY3_mOVFbeI/s1600/2013-08-05_1856.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJKAX1e3321JbW7-zq7OpOUA0xDkU73BL5rpUTJqDUawKCTHPY0UQdSBG3BCQ3pgf1ga9f-WWe88IQhUMdOjXhEoGk6UpvYflNThpuAh4NZozKl7Jzo1sUh1PxPuPSzTuTjY3_mOVFbeI/s1600/2013-08-05_1856.png" /></a></div>
<div>
<br /></div>
<div>
What crossed my mind is that the extension is called "e4view". I could have been called "e4part" since the difference between views and editors is no longer there in e4. </div>
<div>
<br /></div>
<div>
Another note is that Eric could have re-used the "view" extension since they both share the same structure. One thing that you get for free with that approach is the cross referencing in the manifest editor. More about this later.</div>
<div>
<br /></div>
<div>
<h3>
Creating the part</h3>
</div>
<div>
I clicked the <u>class*</u> link and the editor started the "create new class" wizard. I just pressed enter because the e4 views do not extend ViewPart. After the editor was opened, I re-activated the manifest editor and added the following dependencies to my bundle.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU0iy7HjX24vPwJVLooS91kGUdVxPr6HsQfhWD0ZBBa6N8OTyXctSO69hbh1AXvGG3r0Njiu6JyI1YZHPgfqNAog_r68uraNMB7hqVhV-I2l552kNyhyphenhypheniKiWxw-GUVLNpEzupRhoX0TqA/s1600/2013-08-05_1905.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU0iy7HjX24vPwJVLooS91kGUdVxPr6HsQfhWD0ZBBa6N8OTyXctSO69hbh1AXvGG3r0Njiu6JyI1YZHPgfqNAog_r68uraNMB7hqVhV-I2l552kNyhyphenhypheniKiWxw-GUVLNpEzupRhoX0TqA/s1600/2013-08-05_1905.png" /></a></div>
<div>
<br /></div>
<div>
<ul>
<li>org.eclipse.e4.ui.di<br />This contains the @Focus annotation.</li>
<li>javax.annotation<br />This contains the @PostContruct annotation.</li>
</ul>
<div>
Then I re-actived the java editor and created the following code:<br />
<br /></div>
</div>
<pre class="brush: java">package com.test.plugin.luna;
import javax.annotation.PostConstruct;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
public class E4view1 {
private Button button;
public E4view1() {
}
@PostConstruct
public void createPartControl(Composite parent) {
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.marginWidth = 5;
gridLayout.marginHeight = 5;
gridLayout.verticalSpacing = 0;
gridLayout.horizontalSpacing = 0;
parent.setLayout(gridLayout);
button = new Button(parent, SWT.PUSH);
button.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false,
false));
button.setText("Push me");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
}
});
}
@Focus
public void setFocus() {
button.setFocus();
}
}
</pre>
<br />
<div>
<h3>
Adding the e4 view to the perspective</h3>
</div>
<div>
Time to add this nice e4 view to the perspective. But how... I just followed a hunch and added the id of the "e4view" extension to the "perspectiveExtensions" extension point. Referencing the view (by clicking on the "Browse.." button) did not work because of the new name...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKmZGIsX5_lVAV98Lb27Mjm8OGailrNXgtXXnkV6h8NPekx0oZQdYq14QJBbaWHhEq2082WCBAtWNCFVEjM-BbcWImy2PH0J8piZe1fB06cr3l6KA0FSsBvUpeaJh-T_NAYijxwFb2BYI/s1600/2013-08-05_1924.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKmZGIsX5_lVAV98Lb27Mjm8OGailrNXgtXXnkV6h8NPekx0oZQdYq14QJBbaWHhEq2082WCBAtWNCFVEjM-BbcWImy2PH0J8piZe1fB06cr3l6KA0FSsBvUpeaJh-T_NAYijxwFb2BYI/s1600/2013-08-05_1924.png" /></a></div>
<br />
<div>
<h3>
Changing the run configuration</h3>
</div>
I saved all my files, opened the run configuration and added the following directives to the launcher<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0b-ahXzM2WImXluAdE4Jb4gbxgRyw3SX6iyc-uEkikn5vZIhgmzP1cPeboAAkb38MK8G0HqPFqaSU_j9NcLKZlYcFrdREIB_7602oGxesBPef03KqzOW3kUxq6ZrwHRyQQ48UDWfOZdQ/s1600/2013-08-05_1926.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0b-ahXzM2WImXluAdE4Jb4gbxgRyw3SX6iyc-uEkikn5vZIhgmzP1cPeboAAkb38MK8G0HqPFqaSU_j9NcLKZlYcFrdREIB_7602oGxesBPef03KqzOW3kUxq6ZrwHRyQQ48UDWfOZdQ/s1600/2013-08-05_1926.png" /></a></div>
<br />
<br />
<ul>
<li>-console<br />Should be a default option IMO</li>
<li>-clearPersistedState<br />This will clear the e4 model and rebuild it freshly from the filesystem. I suspected that my view would not be shown otherwise.</li>
</ul>
<br />
Then I clicked on the "Plug-ins" tab and pressed "Add Required Plug-ins". Subsequently I added all plugins with "gogo" in the name (3) and I added "org.eclipse.equinox.console".<br />
<br />
<div>
<h3>
Running the mixed mode application.</h3>
</div>
Then I pressed "Run" and behold; A truly mixed mode application appeared where my dependency injected view co-existed with a traditional e3 view.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMDwfrJrxhkbA0SRANMbCBiqOPX9BO94fPj8pjIFxEtSLbSnYi1IKhvqGUEmybczQmTluqRSguKYjgb5OX6RQEXGG4JJqwwedaxBqrRGWUSqtncAMSjPPhrQquK2mg7LITwQ2Dk8YLmcw/s1600/2013-08-05_1943.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMDwfrJrxhkbA0SRANMbCBiqOPX9BO94fPj8pjIFxEtSLbSnYi1IKhvqGUEmybczQmTluqRSguKYjgb5OX6RQEXGG4JJqwwedaxBqrRGWUSqtncAMSjPPhrQquK2mg7LITwQ2Dk8YLmcw/s1600/2013-08-05_1943.png" /></a></div>
<br />
<br />
<h3>
One small step for [a] man but a giant leap for Eclipse RCP</h3>
In my opinion this is the most important step in the history of Eclipse 4. This opens the door to start exploring the new programming paradigm for <b><i>everyone</i></b>. This seemingly little change truly is the bridge between old and new and I predict that we are in the rapids. Things could be happening real fast now the platform team has crossed this threshold. Companies can start working on the transformation from old to new, upgrading view by view which will trigger new ideas and changes.<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCy7vPGEpN9v8wGTBVOCVca4s-pqb3a3B2pgNc-VAQbyof2ihvxuB-Da6jvUH3glFrRTV2q2OvUcbfVNkV7KkJEWMF3hwUVPd5o4G7o9Yh1rZtuAvvuEyaJnR6tMoK3eEELLURHQqj8BU/s1600/5873544_orig.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCy7vPGEpN9v8wGTBVOCVca4s-pqb3a3B2pgNc-VAQbyof2ihvxuB-Da6jvUH3glFrRTV2q2OvUcbfVNkV7KkJEWMF3hwUVPd5o4G7o9Yh1rZtuAvvuEyaJnR6tMoK3eEELLURHQqj8BU/s400/5873544_orig.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.robertmoffatt.co.uk/1/post/2012/5/thuli-beri.html" target="_blank">photo by Robert J Moffatt</a></td></tr>
</tbody></table>
<h3>
Why Eclipse 4?</h3>
</div>
<div>
Curious why you should go to Eclipse 4? I have created a blog about this a while ago. <a href="http://industrial-tsi-wim.blogspot.nl/2012/10/why-eclipse-e4-egg-laying-woolmilkpig.html" target="_blank">You should definitively read it.</a></div>
<div>
<br /></div>
<div>
<h3>
Thanks..</h3>
</div>
<div>
Thanks to the platform team for this change and getting up to speed with the mixed mode changes so early in the development cycle of Luna. Great job!</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Cheers,</div>
<div>
<br /></div>
<div>
Wim</div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com4tag:blogger.com,1999:blog-4740251930569090138.post-10588236812289188802012-12-25T21:50:00.000+01:002012-12-26T12:27:49.065+01:00Running the Apache Felix Webconsole from Eclipse<span style="font-family: inherit; font-size: large;">I have been told about the Apache Felix Web Console a couple of times. During all of these occasions the guy telling me this had this peculiar look in his eyes. The look that makes you think: "Okay dude, I can see that you are serious. I have to check this out." </span><br />
<span style="font-family: inherit; font-size: large;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.istockimg.com/file_thumbview_approve/3827645/2/stock-photo-3827645-it-s-great-success.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" height="320" src="http://i.istockimg.com/file_thumbview_approve/3827645/2/stock-photo-3827645-it-s-great-success.jpg" width="213" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">The <a href="http://felix.apache.org/site/apache-felix-web-console.html" target="_blank">first time I went down there</a> I tried to follow the described steps. The page talks about an "all-in-one" install but it was nowhere to be found. Then I tried to install the individual components from the <a href="http://felix.apache.org/site/downloads.cgi" target="_blank">Felix download site</a> but for some reason I went from one un-resolved dependency to another. So, at that point, they lost me.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">Documentation... Once you are the expert you don't see where the newcomer gets lost. I am all to familiar with this. I believed we had created <a href="http://www.eclipse.org/nebula/downloads.php" target="_blank">the easiest installation webpage</a> for the Nebula community until I witnessed people trying to install. </span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">A few days ago I tried again, and basically with the same luck, <a href="https://issues.apache.org/jira/browse/FELIX-3830" target="_blank">so I started whining</a> and left it again. However, it kept bugging me and I decided to finally research it until I was finished. And, you guessed it, it turned out the be quite easy.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<h4>
<span style="font-family: inherit; font-size: large;">Installing Apache Felix Webconsole into an Eclipse Installation</span></h4>
<div>
<span style="font-family: inherit; font-size: large;">I am running <a href="http://www.eclipse.org/downloads/packages/eclipse-classic-421/junosr1" target="_blank">a fresh copy of the Eclipse Classic installation.</a> The first thing I did was to install the Felix webconsole. I <a href="http://apache.mirror1.spango.com//felix/org.apache.felix.webconsole-4.0.0.jar" target="_blank">downloaded the Web Console jar file</a> from the <a href="http://felix.apache.org/site/downloads.cgi" target="_blank">Felix download site</a> and dropped it into my Eclipse dropins directory.</span></div>
<div>
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMrYG8ALocg-YHng9mME6s9QeF0ShRet0LKrX9JGWreWpfPS-O7AjYwH6aMiMIRBEzBaKejaZWV5juyaSkChTj2OJ_IOrzLfhdvdEUps50gie31ZUCYTFY-ZhtqTE1TnT-BxwvErpa7ag/s1600/Screen+Shot+2012-12-25+at+8.39.37+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" height="83" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMrYG8ALocg-YHng9mME6s9QeF0ShRet0LKrX9JGWreWpfPS-O7AjYwH6aMiMIRBEzBaKejaZWV5juyaSkChTj2OJ_IOrzLfhdvdEUps50gie31ZUCYTFY-ZhtqTE1TnT-BxwvErpa7ag/s320/Screen+Shot+2012-12-25+at+8.39.37+PM.png" width="320" /></span></a></div>
<div>
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div>
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div>
<span style="font-family: inherit; font-size: large;">Next I installed the three dependencies that are mentioned on the webconsole homepage:</span></div>
<div>
<ul>
<li><span style="font-family: inherit; font-size: large;">Apache Commons IO</span></li>
<li><span style="font-family: inherit; font-size: large;">Apache Commons FileUpload</span></li>
<li><span style="font-family: inherit; font-size: large;">JSON</span></li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">All of the above dependencies can be found in the Eclipse orbit repository. So <a href="http://www.eclipse.org/orbit/" target="_blank">I visited the Eclipse Orbit site</a> and clicked <a href="http://download.eclipse.org/tools/orbit/downloads/" target="_blank">on the download link to the right of the page</a>. I always choose one of the latest stable builds a<a href="http://download.eclipse.org/tools/orbit/downloads/drops/S20121207152029/" target="_blank">nd this is the link</a>. That page contains the link to the P2 repository. </span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC7oGgO7t8jhFFfLlAE6qCz7r7OTM2UdxW3LUGb9M64DUj8r-YytJ5JY8ibWvGqk1760gbeUEXHh97su7_nxjpGLOGsuXcH5G3NOvhT_w_Z3oPvya_Mg5dMlgNz7-dsk1VHS3fdlxuLQc/s1600/Screen+Shot+2012-12-25+at+8.55.12+PM.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC7oGgO7t8jhFFfLlAE6qCz7r7OTM2UdxW3LUGb9M64DUj8r-YytJ5JY8ibWvGqk1760gbeUEXHh97su7_nxjpGLOGsuXcH5G3NOvhT_w_Z3oPvya_Mg5dMlgNz7-dsk1VHS3fdlxuLQc/s320/Screen+Shot+2012-12-25+at+8.55.12+PM.png" width="268" /></span></a><span style="font-family: inherit; font-size: large;">Inside Eclipse, I fired up the "install new software" dialog and installed the three plugins. Please take care of the following:<br /><br /><i>Web Console needs an older version of commons io, version 1.4.0. </i><br /><br />Un-tick the "show only the latest.." checkbox in the dialog as indicated in the picture and select the three features from the list.<br /><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia8D8GoyVmSt_BiFq_okCOENg2PrifzEFtFrdq8Kk0SNVEENd2ijyON9HDC1YsUpuYBe9JNdY4VNaZmX0LeUHPS_hsxYCFV9grovv9JZFvrQrXu-wzYbF2Tcd_Fa4eznEdbXEr2BzwoXc/s1600/Screen+Shot+2012-12-25+at+8.55.50+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia8D8GoyVmSt_BiFq_okCOENg2PrifzEFtFrdq8Kk0SNVEENd2ijyON9HDC1YsUpuYBe9JNdY4VNaZmX0LeUHPS_hsxYCFV9grovv9JZFvrQrXu-wzYbF2Tcd_Fa4eznEdbXEr2BzwoXc/s320/Screen+Shot+2012-12-25+at+8.55.50+PM.png" width="320" /></a></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">This should result in the following confirmation window:</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigCaDDz6SUmF7SseKOJH5pw2W7rmnwEbgn-7tHA68JChL2aw1HVO8Yupn8ry7IOfyVYAgpEMDHIWBHXECwZAatK5kBEMVy3CzKZHqRp4AXjctfrzs-IqlE2swXEUkzGaLMKb5JISymnhk/s1600/Screen+Shot+2012-12-25+at+8.56.04+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigCaDDz6SUmF7SseKOJH5pw2W7rmnwEbgn-7tHA68JChL2aw1HVO8Yupn8ry7IOfyVYAgpEMDHIWBHXECwZAatK5kBEMVy3CzKZHqRp4AXjctfrzs-IqlE2swXEUkzGaLMKb5JISymnhk/s1600/Screen+Shot+2012-12-25+at+8.56.04+PM.png" /></span></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">Press Finish and restart.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<h4>
<span style="font-family: inherit; font-size: large;">Starting the Apache Felix Webconsole</span></h4>
<br />
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">The Web Console needs a web server to serve its pages. Fortunately, Eclipse C</span><span style="font-family: inherit; font-size: large;">lassic comes with a build-in </span><a href="http://www.eclipse.org/jetty/" style="font-family: inherit; font-size: x-large;" target="_blank">web server called jetty</a><span style="font-family: inherit; font-size: large;">.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">After Eclipse has restarted, open the console view. From the console view, select to open the host OSGi console:</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMNK7UuCbJhKRi9uOCZS1460JVUXA_05QO65Ida8T_bCONZrh7EOe0PVZA81X-xFlJk6PQrc57-mrbxjyUwgnjVUKmD7BoaH1cc9Xekj8AiddBOw1KURDl0U_7kKNNSvB5rSt_6CBZT-o/s1600/Screen+Shot+2012-12-25+at+9.22.32+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMNK7UuCbJhKRi9uOCZS1460JVUXA_05QO65Ida8T_bCONZrh7EOe0PVZA81X-xFlJk6PQrc57-mrbxjyUwgnjVUKmD7BoaH1cc9Xekj8AiddBOw1KURDl0U_7kKNNSvB5rSt_6CBZT-o/s1600/Screen+Shot+2012-12-25+at+9.22.32+PM.png" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">On the console prompt type "ss jetty"</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFpaAWtOabKMqiD7ZswWAbeVdPAD8qAFu7z7CQnNMny8DtYsfftZlTmC0pLmqFx0TYNsYJGJ2OiPz5OdV8SWLTu6dYvOua8QG9iMaUKtVUBOd-ppRKFRCoK_xn2tyPmnFHq4yFuUZ9rfw/s1600/Screen+Shot+2012-12-25+at+9.24.11+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFpaAWtOabKMqiD7ZswWAbeVdPAD8qAFu7z7CQnNMny8DtYsfftZlTmC0pLmqFx0TYNsYJGJ2OiPz5OdV8SWLTu6dYvOua8QG9iMaUKtVUBOd-ppRKFRCoK_xn2tyPmnFHq4yFuUZ9rfw/s1600/Screen+Shot+2012-12-25+at+9.24.11+PM.png" /></span></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">I have number 93 so I type "start 93"</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiROUhyphenhyphen-LeImyXtdssgdpZphziUPl16Xu7DPJhUwfNzXK3YO_musyw1AW4HASwo8wgU9dlxqi_sEeB4H1YyG0aN51IKuG9_o1yfLvIYRedJX2H9ykSBGR2X99Kd6yzlqBZOP_vhYgQLng0/s1600/Screen+Shot+2012-12-25+at+9.26.09+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiROUhyphenhyphen-LeImyXtdssgdpZphziUPl16Xu7DPJhUwfNzXK3YO_musyw1AW4HASwo8wgU9dlxqi_sEeB4H1YyG0aN51IKuG9_o1yfLvIYRedJX2H9ykSBGR2X99Kd6yzlqBZOP_vhYgQLng0/s1600/Screen+Shot+2012-12-25+at+9.26.09+PM.png" /></span></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">As you can see from the error, there is a socket error. Permission Denied. This is probably because jetty wants to start on a low port. And this is not allowed if you are not root. So, we need to tell jetty that it has to start on a high port. Fortunately, this is documented on the webconsole homepage. Cool. It instructs you to pass the java system property:</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="background-color: white; color: #3b3b3b; line-height: 18px;"><span style="font-family: inherit; font-size: large;">-Dorg.osgi.service.http.port=8888</span></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">We can do this by adding this property to the eclipse.ini file and restarting.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicCnjUTS9th7kIg66EDAaFpPP8_JvCciI8cCnd_6CFaDJo1-qqwSZuiLqbYU7HwgSIj528G6pLyYb8P5sN4PB7GagnIWx5q7LRVj8yx9RJ5PA6CxIz_hmLAVVFfXeQty05Hiu8kR1mwnQ/s1600/Screen+Shot+2012-12-25+at+9.33.22+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" height="138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicCnjUTS9th7kIg66EDAaFpPP8_JvCciI8cCnd_6CFaDJo1-qqwSZuiLqbYU7HwgSIj528G6pLyYb8P5sN4PB7GagnIWx5q7LRVj8yx9RJ5PA6CxIz_hmLAVVFfXeQty05Hiu8kR1mwnQ/s320/Screen+Shot+2012-12-25+at+9.33.22+PM.png" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">Back in the Eclipse console we start jetty again and this time it is successful. So, let's visit the webconsole and do a little dance:</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><span style="background-color: white; color: #3b3b3b; line-height: 18px;"> </span><tt style="background-color: white; color: #3b3b3b; line-height: 18px;"><a class="external-link" href="http://localhost:8888/system/console" rel="nofollow" style="color: #1980af;">http://localhost:8888/system/console</a></tt></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">Aiiii. It is not working! Why? We also need to start the webconsole bundle. </span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">"ss webconsole"</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZknnRLpcuWeTOymI3Nrroot5Dx1UVTrSyYvKqQ8p0TrkRA9h9F89cbFc_OIKhLd0fRdQxs-n4aihToE5tl4Yq2BXClP5jV1nS-BBsu0tcf5EUOhcwRa6dJW40Ge5JhRDnSKKNCLOx6z4/s1600/Screen+Shot+2012-12-25+at+9.38.07+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: large;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZknnRLpcuWeTOymI3Nrroot5Dx1UVTrSyYvKqQ8p0TrkRA9h9F89cbFc_OIKhLd0fRdQxs-n4aihToE5tl4Yq2BXClP5jV1nS-BBsu0tcf5EUOhcwRa6dJW40Ge5JhRDnSKKNCLOx6z4/s1600/Screen+Shot+2012-12-25+at+9.38.07+PM.png" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><span style="background-color: white; color: #3b3b3b; line-height: 18px;"><br class="Apple-interchange-newline" /> </span><tt style="background-color: white; color: #3b3b3b; line-height: 18px;"><a class="external-link" href="http://localhost:8888/system/console" rel="nofollow" style="color: #1980af;">http://localhost:8888/system/console</a></tt></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">And now it works. Pretty cool!</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">Best Regards,</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">Wim</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit; font-size: large;">[1] http://felix.apache.org/site/apache-felix-web-console.html</span></div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com1tag:blogger.com,1999:blog-4740251930569090138.post-66641416139474154892012-10-07T20:47:00.001+02:002014-03-24T13:38:25.710+01:00Why Eclipse e4? (the Egg Laying Woolmilkpig)<br />
<div style="font-family: arial;">
The Germans have a great expression for something that is supposed to do everything. They call it "Die Eierlegende Wollmilchsau" and it is a combination of a pig, a sheep, a cow and a chicken. It is the ultimate machine that replaces all others. How does this translate to Eclipse e4 RCP? </div>
<div style="font-family: arial;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="font-family: arial;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQa_G3nno9b_wd7KYVadXqyUqxnYc8CGnK8uyQzal0_aU-xhQpnYsg_W4USGIQlPSw14-n92WA-oX5dGRj2hWA2XkqfyEiRXBncP1NenVnOHwKEuibVmGItjzAWEhy2yZgXNKLyxsJLx4/s1600/eier-legende-wollmilchsau1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQa_G3nno9b_wd7KYVadXqyUqxnYc8CGnK8uyQzal0_aU-xhQpnYsg_W4USGIQlPSw14-n92WA-oX5dGRj2hWA2XkqfyEiRXBncP1NenVnOHwKEuibVmGItjzAWEhy2yZgXNKLyxsJLx4/s1600/eier-legende-wollmilchsau1.jpg" height="196" width="320" /></a></div>
<br /></div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
We have started a cooperation with <a href="http://www.vogella.com/" target="_blank">vogel/a GMBH</a> and we have been trained by Lars in e4. The training lasts 5 days and it covers everything you need to know about creating an e4 application. E4 RCP consists of the new e4 specific technology combined with existing stuff like SWT and JFace.<br />
<br />
The reason why I joined the course is to get up to speed with the latest RCP developments. Here is a document of my experiences and why I think e4 RCP is better than Eclipse 3 RCP.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
<h3>
<b>My initial state of mind</b></h3>
</div>
<div style="font-family: arial;">
I did not think e4 was really something that would shock me. After all, I am a seasoned RCP 3 developer and have trained many people in how to use the framework. Sure, the application model looked nice but I really did not consider it to be more than an improved manifest editor. </div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
I lost some interest during the development phase because I saw a number of things fall off the wagon, like XWT and OpenSocial integration.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
What I did not realize is that I <b>missed the point</b> about core e4 technologies. </div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
Now that we know the gems of e4, <a href="https://twitter.com/industrialtsi/status/255320823949299713" target="_blank">we have decided to stop offering our courses based</a> on the old Eclipse 3 RCP applications and completely switch over. E4 is the future for Rich Clients. and when we say Rich Clients, we don't just mean Desktop.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
Let me try to explain why I think you should switch to e4. </div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
<h3>
<b>Reason 1, The 4th Generation of Frameworks</b></h3>
</div>
<div>
<div class="separator" style="clear: both; font-family: arial; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEqhWMYXfFGNnJi3jzDPTmYxgpYcirndhCak7OG0-542EfEoqWRCBLCtOvDZYBNgSeR7e29BBrQc70gVHPn0hQH29H5Kt6sKdxDc2or75KE1m7l99UT9NTC6p8oGaxA5ZjqkGAxYAIc-g/s1600/scaffold+men.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEqhWMYXfFGNnJi3jzDPTmYxgpYcirndhCak7OG0-542EfEoqWRCBLCtOvDZYBNgSeR7e29BBrQc70gVHPn0hQH29H5Kt6sKdxDc2or75KE1m7l99UT9NTC6p8oGaxA5ZjqkGAxYAIc-g/s320/scaffold+men.jpg" height="320" width="236" /></a></div>
<div>
<span style="font-family: arial;">A 3rd generation framework, like Eclipse 3 RCP, can be viewed as a big scaffold that you use to build your application with. In contrast to scaffolds </span><a href="http://en.wikipedia.org/wiki/Real_life" style="font-family: arial;" target="_blank">IRL</a><span style="font-family: arial;">, this scaffold never goes away and it will forever surround your application. </span></div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
If you use such a framework to create something, you typically extend or implement a class and implement the required methods. To give an example, to build an Eclipse View in Eclipse 3 RCP you need to extend ViewPart and because you need to do that, the scaffold needs to stay in place to support your application. </div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
Not only does this literally tie your application to the framework, another drawback of this mechanism is that code cannot be reused. I cannot use ViewPart outside the Eclipse RCP framework and if I wanted to re-use the user interface elements of a ViewPart inside the framework (for instance in a Wizard) then this is really hard and often requires serious refactoring.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
In Eclipse e4 you do not extend or implement framework classes because you strictly work with <a href="http://en.wikipedia.org/wiki/Plain_Old_Java_Object" target="_blank">POJO's</a>. All hooks into the framework are based on annotations which are completely ignored if used outside of e4.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
The <i><b>supporting function</b></i> of the e4 scaffold is much less then the old RCP. This means that an application based on e4 can be refactored to remove the framework. This is much harder in a third generation framework like Eclipse 3 RCP<b>*</b>.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
<span style="font-size: xx-small;"><b>* </b>do I hear impossible? Going once, going twice ...</span> </div>
<div style="font-family: arial;">
<br /></div>
<h3 style="font-family: arial;">
<span style="font-size: 19px; font-weight: bold;">Reason 2, No API, No Cry.</span></h3>
<div class="separator" style="clear: both; font-family: arial; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="font-family: arial; margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYSnSYuAmjciWKDjpEwvpr8joxcsV6zQUZSakj-JYwwA2hbHvZI9I62T8espZ_tmT9J1aHlPeH_YCrF9gK6lnV5B_wL92-EU8Qlydg6jo_o81mssypvaTnOeAzEbIOySjswXc4QPsKCP8/s1600/wvsman.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYSnSYuAmjciWKDjpEwvpr8joxcsV6zQUZSakj-JYwwA2hbHvZI9I62T8espZ_tmT9J1aHlPeH_YCrF9gK6lnV5B_wL92-EU8Qlydg6jo_o81mssypvaTnOeAzEbIOySjswXc4QPsKCP8/s320/wvsman.png" height="195" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">(Girls, just swap "Man" and "Woman")</td></tr>
</tbody></table>
<div style="font-family: arial;">
An extensive knowledge of the API is required in order to comfortably interact with the features of a framework. If you are a successful user of the Eclipse 3 RCP, then I congratulate you with your tremendous capacity to store abstract information in your brain. You must not only remember the various components that you use but also know where to get them. </div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
This has been inverted. You no longer ask for stuff through an API but you let e4 inject it.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
Suppose you want to do something simple as calling back the UI thread to update the user interface. The only correct way<b>*</b> in Eclipse 3 is to ask the workbench object like in this code snippet:</div>
<br />
<span style="font-family: arial;"><span class="Apple-tab-span" style="white-space: pre;"> <b><i> </i></b></span><b><i>Display display = PlatformUI.getWorkbench().getDisplay();</i></b></span><br />
<span style="font-family: arial;"><b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>display.asyncExec(runner);</i></b></span><br />
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
This has been replaced by the following code:</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>@Inject Display display;</i></b></div>
<div style="font-family: arial;">
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>display.asyncExec(runner);</i></b></div>
<div>
<br /></div>
<div>
<span style="font-family: arial;">No more tedious searches to get the framework objects. You just let e4 inject <b><i>everything</i></b> directly into your POJO. "But I already know the API", you might say. But what about your new co-workers? (see reason 7) </span></div>
<div>
<br /></div>
<div style="font-family: arial;">
<span style="font-size: xx-small;">* <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352992" target="_blank">it's true!</a></span></div>
<div style="font-family: arial;">
<br /></div>
<div>
<h3 style="font-family: arial;">
Reason 3, The Dynamic Application Model.</h3>
<div style="font-family: arial;">
E4 uses a dynamic in-memory model of the running application. The dynamic nature of the application enables you to create, change and destroy model elements at run-time. <br />
<br />
<div>
For example, it is very difficult to hide views from users in old RCP applications. One often needs guarding code inside the view to prevent the user from accessing it's content. There is no real concept of hiding views, especially if you also deploy your applications as plug-ins. In e4, you can iterate through your model, and based on the security level of the user you can perform actions (like deleting protected views from the model altogether)</div>
</div>
<div style="font-family: arial;">
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinL_lhhVPbGrzHTPyqV6t2nYUPOpZITI_wPWhJSrDnMBiKthyphenhyphenv17A-k8RFd60Nh2mN8yDczlDUl4uSMBUVa8ZoTd205aw2pu-RCpMI6yy2GYlI9i51tbgvBf8umfEywOwqD3VFlMeIZ7Q/s1600/tags.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinL_lhhVPbGrzHTPyqV6t2nYUPOpZITI_wPWhJSrDnMBiKthyphenhyphenv17A-k8RFd60Nh2mN8yDczlDUl4uSMBUVa8ZoTd205aw2pu-RCpMI6yy2GYlI9i51tbgvBf8umfEywOwqD3VFlMeIZ7Q/s1600/tags.jpg" /></a></div>
Model elements like views and commands can be tagged. Tagging enables you to add domain specific information to the e4 application model. These tags can be read at run-time and based on their values you can apply application logic.<br />
<br /></div>
</div>
<div style="font-family: arial;">
As an other example, you can generate a user interface completely from an empty model. Suppose you have a tool that generates an application. Instead of generating code in a static way, you could interpret information from a database and generate <b><i>a user interface on the fly</i></b>.<br />
<br /></div>
<div class="separator" style="clear: both; font-family: arial; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIocG52lgl8pV-B6yv44F8IlVZZm9jmHU5B99fFkm6X8gCWNsZE9lAlun3jo-VgCaX4ECpUPgt7xvtegIPFuTntpiJRngFu-8Eh74Ks85NoEQsrssrNpnQ5YYcykg_b36D19xL1e2HB_4/s1600/fly.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIocG52lgl8pV-B6yv44F8IlVZZm9jmHU5B99fFkm6X8gCWNsZE9lAlun3jo-VgCaX4ECpUPgt7xvtegIPFuTntpiJRngFu-8Eh74Ks85NoEQsrssrNpnQ5YYcykg_b36D19xL1e2HB_4/s320/fly.jpg" height="239" width="320" /></a></div>
<div style="font-family: arial;">
<h3>
Reason 4, Dependency Injection FTW.</h3>
<div style="text-align: justify;">
The e4 components are managed by the Dependency Injection Manager. The general concept of the Eclipse D.I. Manager is fairly simple; the various components of the e4 framework maintain a parented hashmap that contains all object instances that the D.I. framework can inject. This parented hashmap is called the D.I. Context.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh09J8ximKz4GdtdF_T8sUpR_k0ySqj9Md_B7e2I_W9roE3dfogGdwweNPZCGYEPgyF0XXLEJDqhqKgUXP8Wf0aKdg4OOvA9CGDW44kA3YHNKf5SXmiJOgd2wKejj4BLdr3V5aCUyLzg7E/s1600/baby-painful-procedure.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh09J8ximKz4GdtdF_T8sUpR_k0ySqj9Md_B7e2I_W9roE3dfogGdwweNPZCGYEPgyF0XXLEJDqhqKgUXP8Wf0aKdg4OOvA9CGDW44kA3YHNKf5SXmiJOgd2wKejj4BLdr3V5aCUyLzg7E/s320/baby-painful-procedure.jpg" height="171" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">I promise it will not hurt.</td></tr>
</tbody></table>
</div>
<div>
For example, the Eclipse bootstrap code is responsible for creating an instance of the Display class. This instance is then placed into the D.I. context. If any of your model objects (views, windows, menu's, handlers) require the correct instance of the Display class, it is simply injected by D.I.</div>
</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
Now what makes D.I. really super-super-cool and powerful is its capability to also create and maintain your own components. Consider the following class:</div>
<div style="font-family: arial;">
<br /></div>
<div class="separator" style="clear: both; font-family: arial; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz8uYBo0oIVQhj1bEQMvBpQ6LMTeb29aHvxfyPzV9JNek-cB7h94A65HBacadMtfUWJsZCwsZXjTDOi1Sx7OR5ia8usAfnKS78hfdMVpWBh1FQTVc-eJnUOxJwQtem_J1B2VduG8lG4Ug/s1600/super-cool.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz8uYBo0oIVQhj1bEQMvBpQ6LMTeb29aHvxfyPzV9JNek-cB7h94A65HBacadMtfUWJsZCwsZXjTDOi1Sx7OR5ia8usAfnKS78hfdMVpWBh1FQTVc-eJnUOxJwQtem_J1B2VduG8lG4Ug/s400/super-cool.png" height="151" width="400" /></a></div>
<div class="separator" style="clear: both; font-family: arial; text-align: center;">
<br /></div>
<div style="font-family: arial;">
If you ask the D.I. framework an instance of this SomePoorClass then it will first check the D.I. Context if the object already exists. If it does not, it will create it courtesy of the <b>@Createable </b>annotation. Not only will it be created but also the dependencies annotated with <b>@Inject</b> will supplied. As an additional bonus, if any of the injected objects change in the D.I. Context, they will automatically be updated in the SomePoorClass instance. If I would tell you this during the training, you would have noticed that my voice has shifted one octave to the higher pitch. Pure enthusiasm. Super-super cool!</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
<h3>
Reason 5, Communication</h3>
</div>
<div style="font-family: arial;">
Eclipse e4 is using a global event notification system. It is based on the <a href="http://www.eclipse.org/equinox/bundles/" target="_blank">Equinox implementation</a> of the OSGi Event Admin Service specification.</div>
<div style="font-family: arial;">
</div>
<div class="separator" style="clear: both; font-family: arial; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaWq9u9hQYPmSHXE-hQVC1LNx154TlkwW22f7hDa3kieH_hwZuHmjMi3oG-UxK2_sejUkZ8rD-83LW4PsfQ4C1xT5INvrYkmx00tYD7s9beLmiF6qRB260CnD4QJRJ7nLYPa7EaX4qThc/s1600/eventbroker.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaWq9u9hQYPmSHXE-hQVC1LNx154TlkwW22f7hDa3kieH_hwZuHmjMi3oG-UxK2_sejUkZ8rD-83LW4PsfQ4C1xT5INvrYkmx00tYD7s9beLmiF6qRB260CnD4QJRJ7nLYPa7EaX4qThc/s1600/eventbroker.png" /></a></div>
<div style="text-align: justify;">
<span style="font-family: arial;">A special simplified class is placed on top of this implementation and is called the IEventBroker. The implementation dictates that an event can be send with send(..) or post(..). The passed parameters are the topic string, which is a "/" delimited string and an associated object called the payload. The difference between send and post is that the former is synchronous and the latter is not. </span></div>
<div>
<span style="font-family: arial;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: arial;">In addition, you can use the broker to add a listener that will be called when a topic of interest arrives. </span></div>
<div>
<span style="font-family: arial;"><br /></span></div>
<div>
<span style="font-family: arial;">However, with the e4 D.I. framework in control there is really no need to register such a listener.</span></div>
<div>
<span style="font-family: arial;"><br /></span></div>
<div>
<span style="font-family: arial;">You can ask e4 to inject events directly into an interested method. Setting up an event listener becomes a trivial task. </span><br />
<span style="font-family: arial;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikB86MIXz7qMNLmyyS9sdeNsdCjrjYW8R2zLuF6gnBhgxEYtID99XavnPJvynBFTbuDDZFnLDUxCDnsSzNHPE4GtF4LfJFjH6AUbAEe_YdjnygiwVH7cVW69d47pwrYsbDnra9OActLoo/s1600/payload.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikB86MIXz7qMNLmyyS9sdeNsdCjrjYW8R2zLuF6gnBhgxEYtID99XavnPJvynBFTbuDDZFnLDUxCDnsSzNHPE4GtF4LfJFjH6AUbAEe_YdjnygiwVH7cVW69d47pwrYsbDnra9OActLoo/s640/payload.png" height="43" width="640" /></a></div>
<br /></div>
<div>
<span style="font-family: arial;">In this way you can handle your own events or tap into the events send by the framework. We all use the same global event bus.</span></div>
<div>
<span style="font-family: arial;"><br /></span></div>
<div>
<h3>
<span style="font-family: arial;">Reason 6, GUI Independent Rendering Engines</span></h3>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqmCezDL938-Sr2wm-eHGKewODrND2zQ_3j34kh1XZL_ZpjFVWR8lXs0H0NZVRoylJ1lvds7z9e4lVOB0jzERR1tbiBhbKPJj8_V9bmS1kJorhsRuLz7FhDLn2hzoR2nCSub__LWO8JGs/s1600/User_Interface.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqmCezDL938-Sr2wm-eHGKewODrND2zQ_3j34kh1XZL_ZpjFVWR8lXs0H0NZVRoylJ1lvds7z9e4lVOB0jzERR1tbiBhbKPJj8_V9bmS1kJorhsRuLz7FhDLn2hzoR2nCSub__LWO8JGs/s200/User_Interface.jpg" height="163" width="200" /></a><span style="font-family: arial;">As you know, Eclipse and SWT are married. It appeared to be a solid marriage but after Eclipse has discovered the temptations of the internet she is not so sure she want to be so monogamous as she used to be. </span></div>
<div>
<span style="font-family: arial;"><br /></span></div>
<div>
<span style="font-family: arial;">The Platform developers have equipped Eclipse with a GUI independent rendering framework. </span></div>
<div>
<span style="font-family: arial;"><br /></span></div>
<div>
<span style="font-family: arial;">As a result of this, there are several experiments with alternative rendering engines. Please check <a href="https://github.com/toedter/e4-rendering" target="_blank">Kai Toedters work on Github</a>, the <a href="http://wiki.eclipse.org/E4/RAP_Integration/Experimental" target="_blank">e4 SWT to Web</a> work by the RAP team, the <a href="http://eclipsesource.com/blogs/2012/07/16/eclipse-4-applications-on-rap/" target="_blank">blog describing the RAP rendering experiments</a> of Ralf and Lars and there is a rendering engine on <a href="https://github.com/semanticsoft/vaaclipse" target="_blank">github for Vaadin</a></span><span style="font-family: Arial, Helvetica, sans-serif;"><a href="https://github.com/semanticsoft/vaaclipse" target="_blank"> by <span style="background-color: white; color: #333333; line-height: 16px; white-space: pre;">Rushan R. Gilmullin</span></a>. </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="background-color: white; color: #333333; text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;">A special mention goes to the <a href="http://tomsondev.bestsolution.at/2012/09/27/efxclipse-0-1-1-released/" target="_blank">JavaFX rendering engine</a> by Tom Schindl. Tom has spent a lot of effort in this engine and creating <a href="http://www.efxclipse.org/" target="_blank">JavaFX integration for </a></span></span><span style="background-color: white; color: #333333; font-family: Arial, Helvetica, sans-serif; text-align: justify;"><a href="http://www.efxclipse.org/" target="_blank">Eclipse</a>. </span></div>
<div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;">This promises to take the framework you already know and love to render outside of the desktop. How cool is this?</span></div>
<div>
<br /></div>
</div>
<h3>
<span style="font-family: arial; font-size: 19px; font-weight: bold;">Reason 7, Steep Learning Curve / Shameless Pitch</span></h3>
<div style="font-family: arial;">
First let me tell you my own experience. 6 weeks ago, I had next to nothing e4 experience. Going through the vogel/a course, it took me 2 days to understand what was going on. Like I already said, I am an experienced Eclipse 3 RCP developer. It took me another week or so of fairly intense study to make me confident enough to teach e4 to others. For this study I used the e4 book Lars has written, the content available in the e4 wiki, the source code and the vast experience I already acquired through the years. </div>
<div style="font-family: arial;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht6SEoFZnZcJqiKAvhsfHDOyZRYiQiwwHONMKjrUdFB0ieQCLFITIjRdNNb5zrt7LzsAxtWDBHAaOdtmVLdQZe-v8UJgkQS31W1x9tW3_fkPyKmro0RTV11w2A1LDtNsyUo9lgea-ZBJc/s1600/baby-painful-procedure.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht6SEoFZnZcJqiKAvhsfHDOyZRYiQiwwHONMKjrUdFB0ieQCLFITIjRdNNb5zrt7LzsAxtWDBHAaOdtmVLdQZe-v8UJgkQS31W1x9tW3_fkPyKmro0RTV11w2A1LDtNsyUo9lgea-ZBJc/s320/baby-painful-procedure.jpg" height="299" width="320" /></a></div>
<div style="font-family: arial; text-align: justify;">
For me, the learning curve was very steep. Meaning that I could acquire a lot of information in very little time. Since then I have seen what the training did to other experienced RCP developers and it was basically the same. After two days the e4 concepts were clear. The other days were used to learn additional framework capabilities based on the concepts.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial; text-align: justify;">
To me and the other experienced RCP developers there was no doubt about the power and simplicity of the new framework. The concepts are totally cool.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
Another experienced programmer which had never done anything with Eclipse or SWT but had developed a large Swing application, was completely convinced of the powers of Eclipse e4 and OSGi. He had fully understood the concepts and was able to create an e4 application from scratch within a couple of minutes. </div>
<div style="font-family: arial;">
<br /></div>
</div>
<div style="font-family: arial;">
Can you do it without training. Sure. Go to Vogel/a's website and look at the wealth of information available. If that is not enough, go to the forum and ask questions. If that takes to long, buy the book. However, there is nothing like a good old crash course to erect the learning curve.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
Be aware that <a href="http://industrial-tsi.com/training-agenda/2012" target="_blank">my company</a> has adopted the same course materials and approach. So this last reason can be seen as a shameless pitch. However, there is the topic of my reputation.</div>
<div style="font-family: arial;">
<br /></div>
<div style="font-family: arial;">
<br /></div>
<h3>
<span style="font-family: arial;">Questions and Answer</span></h3>
<span style="font-family: arial;">Q. Must I Switch to e4 RCP? </span><br />
<span style="font-family: arial;">A. Yes. If your code is based on Eclipse technology you must move on. </span><br />
<span style="font-family: arial;"><br /></span>
<span style="font-family: arial;">Q. Do you need to switch today.</span><br />
<span style="font-family: arial;">A. No, but do not dwell in old RCP. Be decisive and start planning the conversion process. Plan new projects to be developed in e4.</span><br />
<span style="font-family: arial;"><br /></span><span style="font-family: arial;">Q. Is <a href="http://industrial-tsi.com/solutions/development/eclipse-training" target="_blank">the training</a> really needed?</span><br />
<span style="font-family: arial;">A. Only if you don't want to waste time.</span><br />
<span style="font-family: arial;"><br /></span>
<br />
<span style="font-family: arial;">Q. Is e4 stable enough to host my mission critical application today.</span><br />
<span style="font-family: arial;">A. Today? No promises but it is getting there.</span><br />
<span style="font-family: arial;"><br /></span>
<span style="font-family: arial;">Q. What do you mean? Does it contain bugs!?!</span><br />
<span style="font-family: arial;">A. That is a promise.</span><br />
<span style="font-family: arial;"><br /></span>
<span style="font-family: arial;">Q. Are there more questions?</span><br />
<span style="font-family: arial;">A. And answers too. <a href="http://wiki.eclipse.org/Eclipse4/RCP/FAQ" target="_blank">Check this.</a></span><br />
<br />
<div>
<h3>
<span style="font-family: arial;">Is it the Egg Laying Woolmilkpig?</span></h3>
</div>
<div>
<span style="font-family: arial;">Frankly, there is no framework that can match Eclipse RCP. The problem for me with other frameworks has always been the 80/20 rule. 80% possibilities and 20% struggle. </span><span style="font-family: arial;">Eclipse is programmed in and with Java. Anything is possible. </span></div>
<div>
<span style="font-family: arial;"><br /></span></div>
<div>
<span style="font-family: arial;">But you tell me. I love your comments.</span><br />
<span style="font-family: arial;"><br /></span>
<span style="font-family: arial;"><br /></span>
<span style="font-family: arial;">...</span></div>
</div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com9tag:blogger.com,1999:blog-4740251930569090138.post-80794792651166343062012-06-02T21:43:00.000+02:002012-06-02T21:43:16.493+02:00Eclipse base location uri for menusSince they are impossible to find on the net here is the list of all base location uri's in eclipse that are used in the org.eclipse.ui.menus extension point:<br />
<br />
<br />
menu:org.eclipse.ui.main.menu // the top-level menu<br />
popup:org.eclipse.ui.popup.any // all pop-up menus<br />
toolbar:org.eclipse.ui.main.toolbar // the top-level tool bar<br />
toolbar:org.eclipse.ui.trim.command1 // the top left trim (main toolbar area)<br />
toolbar:org.eclipse.ui.trim.command2 // the top right trim (perspective switcher area)<br />
toolbar:org.eclipse.ui.trim.vertical1 // the left vertical trim<br />
toolbar:org.eclipse.ui.trim.vertical2 // the right vertical trim<br />
toolbar:org.eclipse.ui.trim.status // the status line trim<br />
<br />
to access the menu/toolbar/popup of a part (view or editor):<br />
<br />
menu:partid //the part's chevron menu<br />
<br />
toolbar:partid //the part's toolbar (cannot contain other toolbars)<br />
popup:partid //the part's popup menu (register the context menu in createPartControl first)<br />
<br />
<br />
<br />wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com6tag:blogger.com,1999:blog-4740251930569090138.post-16831382603792310712012-03-18T17:45:00.001+01:002012-03-19T14:50:19.593+01:00Design a Nebula Logo and win $100<h4>The Short Story</h4>The Nebula project needs a new Logo. File a new logo design <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=373433">using this bug</a> and you could win $100.<br />
Showcase your logo here: <a href="http://wiki.eclipse.org/Nebula/Artwork">http://wiki.eclipse.org/Nebula/Artwork</a><br />
<h4>The Long Story</h4>The Eclipse Nebula project is slowly moving out of incubation. Artifacts of this process are going to be stable releases, continuous builds and easy to get documentation.<br />
<br />
A new design of the Nebula website will be part of this although I fear that it will be quite hard to get resources for this job.<br />
<br />
When looking at the great design of the <a href="http://www.eclipse.org/Xtext" target="_self">Xtext website</a>, I must admit that I am a little jealous. Because nothing drives production better than competition, I thought it was time for a new Logo for the Nebula project.<br />
<br />
A great designer is somewhere inside me, waiting to blossom, but, to be completely honest, when I show my creations to people, I often get advice to <a href="http://dev.eclipse.org/mhonarc/lists/nebula-dev/msg01871.html">hire some professional help</a>. Nevertheless, I was thinking that an Ambigram would make a nice Nebula Logo. When designed properly, Ambigrams are clear on their own but can be read upside-down as well. So after fiddling around with it a little bit, this was the result.<br />
<div class="rtecenter"><img alt="" height="131" src="http://wiki.eclipse.org/images/7/70/Nebula_l1.gif" width="200" /> <img alt="" height="91" src="http://dev.eclipse.org/mhonarc/lists/nebula-dev/pngLdLBoRoeHA.png" width="320" /></div>As you can read from the mail thread, it did not land well with the other readers of nebula-dev. Edwin Park replied with a promising design:<br />
<br />
<div class="rtecenter"><img alt="" src="http://dev.eclipse.org/mhonarc/lists/nebula-dev/pngJiuczZfRcR.png" /></div><br />
We decided to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=373433">open a bug</a> and make a real contest out of it. So far we have the following proposals. If you can do better, help us out and you could win $100. The logo will be chosen by the readers of the Nebula-Dev mailing list (you can <a href="https://dev.eclipse.org/mailman/listinfo/nebula-dev">subscribe here</a>).<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://bugs.eclipse.org/bugs/attachment.cgi?id=212239" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="108" src="https://bugs.eclipse.org/bugs/attachment.cgi?id=212239" width="200" /></a><span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; clear: left; color: black; display: inline !important; margin-bottom: 1em; margin-right: 1em;"></span></div><div style="text-align: left;"><a href="https://bugs.eclipse.org/bugs/attachment.cgi?id=212239" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" height="83" src="https://bugs.eclipse.org/bugs/attachment.cgi?id=212591" width="200" /></a><span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; clear: left; color: black; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><br />
</span></div><br />
<div class="rtecenter" style="text-align: center;"></div><div class="separator" style="clear: both; text-align: left;"><a href="https://bugs.eclipse.org/bugs/attachment.cgi?id=212408" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" height="46" src="https://bugs.eclipse.org/bugs/attachment.cgi?id=212408" width="200" /></a></div><div class="rtecenter" style="text-align: left;"> </div><div class="rtecenter" style="text-align: left;"><br />
</div><div class="rtecenter" style="text-align: left;"> <img alt="" height="76" src="https://bugs.eclipse.org/bugs/attachment.cgi?id=212413" width="200" /></div><div class="rtecenter" style="text-align: center;"> </div><div class="rtecenter" style="text-align: center;"><br />
</div><div class="rtecenter" style="text-align: left;"><img alt="" height="51" src="https://bugs.eclipse.org/bugs/attachment.cgi?id=212587" width="200" /></div><div class="rtecenter" style="text-align: left;"><br />
</div><div class="rtecenter" style="text-align: left;"><img alt="" height="80" src="https://bugs.eclipse.org/bugs/attachment.cgi?id=212608" width="200" /></div><div class="rtecenter" style="text-align: left;"> </div><div class="rtecenter" style="text-align: left;"><img alt="" height="80" src="https://bugs.eclipse.org/bugs/attachment.cgi?id=212609" width="200" /> </div><div class="rtecenter" style="text-align: left;"><br />
</div><div class="rtecenter" style="text-align: left;"> <img alt="" height="80" src="http://wiki.eclipse.org/images/thumb/5/55/Vhgr3.png/300px-Vhgr3.png" width="200" /></div><div class="rtecenter"><br />
</div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com2tag:blogger.com,1999:blog-4740251930569090138.post-55768038368369246852012-02-18T00:08:00.006+01:002012-02-18T06:57:53.970+01:00News from Eclipse Nebula<a href="http://www.eclipse.org/nebula/widgets/oscilloscope/images/scope.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="102" src="http://www.eclipse.org/nebula/widgets/oscilloscope/images/scope.gif" width="200" /></a>Every time I teach one of my RCP classes I take some time to discuss the Nebula project. An RCP application is not complete without at least one of these beautiful widgets. In our own applications we make extensive use of the Nebula project.<br />
<br />
About a year and a half ago I managed to get one of my own widgets in the project as well and so i became a Nebula committer. Yay!<br />
<br />
Tom, Nicolas and others did a lot of work restructuring the project at that time but it got stalled. IIRC this was mainly due to problems getting the Eclipse infrastructure working for us and Tom being buried in e4.<br />
<br />
However, this left us with an unfinished build, no official download site and as a result some of the widgets were self-hosted. In the mean time new widgets were offered to the project that did not get enough attention. A few weeks later, Tom send a <a href="http://dev.eclipse.org/mhonarc/lists/nebula-dev/msg01431.html" target="_blank">message</a> to the list. After pondering it for a while, I decided <a href="http://dev.eclipse.org/mhonarc/lists/nebula-dev/msg01448.html" target="_blank">to volunteer for the position</a> as project lead on a temporary basis (read: you will never get rid of me).<br />
<br />
<br />
<a href="http://www.eclipse.org/nebula/widgets/treemapper/images/treemapper.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="95" src="http://www.eclipse.org/nebula/widgets/treemapper/images/treemapper.png" width="200" /></a><b>Restructure</b><br />
Since then we managed to get the project going again. My first action as wannabe project lead was to move forward with Mickael Istria's Treemapper that was waiting to be accepted. I filed a <a href="http://wiki.eclipse.org/Development_Resources/Contribution_Questionnaire">CQ</a> to the <a href="http://wiki.eclipse.org/EMO">EMO</a> to get the Treemapper through the IP process.<br />
<br />
I could not know at the time that this was a smart move because Mickael proved to be a build magician and together with Nicolas we managed to complete our (Tycho) build, with test, signing and upload to the Eclipse download server. There are now only a few seconds between a check-in and the <a href="http://www.eclipse.org/nebula/downloads.php">availability of the code</a> on the Eclipse download servers.<br />
<br />
<br />
<b>Housekeeping</b><br />
The next steps in the restructuring was the move to git, restructure and refactor of the widgets (we are no longer in the swt namespace), the completion of the <a href="http://wiki.eclipse.org/Nebula/restructure" target="_blank">restructure documentation</a> and finally the <a href="http://wiki.eclipse.org/Nebula/restructure#Nebula_Project_Restructuring_Proposal" target="_blank">proposal of the new project structure</a>.<br />
<br />
<br />
<b>New Widgets</b><br />
In the mean time, new widgets are included into the Nebula project. So please allow me to introduce:<br />
<br />
<b>TreeMapper</b><br />
Mickael's TreeMapper widget can be used to link entries in two trees by using drag and drop. It can be used for mapping fields to tables, users to capabilities, eggs to sausages, and so on. <a href="http://mickaelistria.wordpress.com/2011/11/30/a-treemapper-widget-in-nebula/">Read all about it</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://www.eclipse.org/nebula/widgets/treemapper/images/treemapper.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="http://www.eclipse.org/nebula/widgets/treemapper/images/treemapper.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Picture Control</b></div><div class="separator" style="clear: both; text-align: left;">A widget made by Angelo Zerr and Pascal Leclerq. It is a widget for easy picture control. It enables upload and display of a picture and, it also runs in RAP. <a href="http://angelozerr.wordpress.com/2012/01/06/nebula_picture/">Read all about the Picture Control.</a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8qu_1YupzFrwnoI2ofvABOUk3tpAZOXOd1YbboYM2rDy__GJ6f3ueOTQlQPEzUJldk6feqNXLv8Cj8Qbs6ASg7aw1REX7zyfzoGe3SdWV44MEpDDLk8Xq-2cr30LCzQ9dJGEnAfzn1LQ/s1600/2012-02-17_2255.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8qu_1YupzFrwnoI2ofvABOUk3tpAZOXOd1YbboYM2rDy__GJ6f3ueOTQlQPEzUJldk6feqNXLv8Cj8Qbs6ASg7aw1REX7zyfzoGe3SdWV44MEpDDLk8Xq-2cr30LCzQ9dJGEnAfzn1LQ/s1600/2012-02-17_2255.png" /></a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><b>Pagination Control</b><br />
Another brand new widget by Angelo and Pascal is the Pagination Control. There are some good use cases when you have to work with large data sets. We know the pagination paradigm from the web but why should that not be available on the desktop. So here is a good alternative to lazy content providers and virtual trees and tables. Did I already mention that it also runs in RAP? <a href="http://angelozerr.wordpress.com/category/java/eclipse/eclipse-rcp/">Read all about the Pagination Control.</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTj8xdQhaPbXEKuzL-1C7f8SEJ9ek9K7fQN494cPf0rBLj7zcLMlHvDuFWneVq9o1CdmcamXf_APLThoRz2D5HtJXYulG6YCGIRylsl1xHW1YCy_poPun9NjNbcEm_PIXaaXihtSlPgYs/s1600/2012-02-17_2306.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTj8xdQhaPbXEKuzL-1C7f8SEJ9ek9K7fQN494cPf0rBLj7zcLMlHvDuFWneVq9o1CdmcamXf_APLThoRz2D5HtJXYulG6YCGIRylsl1xHW1YCy_poPun9NjNbcEm_PIXaaXihtSlPgYs/s400/2012-02-17_2306.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>NatTable</b></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: left;">Now it is time to wait for the <a href="http://www.eclipse.org/proposals/technology.nebula.nattable/">legal stuff to happen</a> in the NatTable proposal. NatTable is <a href="http://nattable.org/drupal/">currently self-hosted</a> so go over there and take a look. We have been using NatTable in our own product and we are very happy with it's versatility and speed. All the better that this is coming to Eclipse Nebula. Edwin Park will be the lead of the sub-project and we are looking forward to find a good place for NatTable in Nebula.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKmLNRpushAx3UmKD-rsvJVbEoI3tXKxSRdXIedTUjnN4MtyA7RAAJ_1GTWa9wFcoMxQYylQJkeLcsR139OUHJhPqWeUtX3-scAHsuSOmDbjrk8IIWgloNx1_WmWvrSOaQUSiGCtgD4us/s1600/2012-02-17_2329.png" imageanchor="1"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKmLNRpushAx3UmKD-rsvJVbEoI3tXKxSRdXIedTUjnN4MtyA7RAAJ_1GTWa9wFcoMxQYylQJkeLcsR139OUHJhPqWeUtX3-scAHsuSOmDbjrk8IIWgloNx1_WmWvrSOaQUSiGCtgD4us/s1600/2012-02-17_2329.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Example View</b></div><div class="separator" style="clear: both; text-align: left;">Checkout the widgets by <a href="http://www.eclipse.org/nebula/downloads.php" target="_blank">downloading them from our update site</a>. Make sure to also include the example view and the examples of these widgets. </div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Cheers,</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Wim</div><div class="separator" style="clear: both; text-align: left;"><br />
</div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com4tag:blogger.com,1999:blog-4740251930569090138.post-89211735521594887922011-03-04T18:07:00.001+01:002011-03-04T18:07:55.555+01:00Is Waldo a bundle? RELENG Problems!<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWZ89VWyqVR1BHOLBFtZLoBUT-wmd6wUzmOPMNWpui7CP8EOTYakJMjQrNbRdtVDb6Eq8V9E6S6AzXLsphMYd7BuvI8ZKlwwIiT_hVzgoT-pI3hhXi1c4RaoX0hrgnE4lQbe5O4tZjGVQ/s1600/waldo-curl-face.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWZ89VWyqVR1BHOLBFtZLoBUT-wmd6wUzmOPMNWpui7CP8EOTYakJMjQrNbRdtVDb6Eq8V9E6S6AzXLsphMYd7BuvI8ZKlwwIiT_hVzgoT-pI3hhXi1c4RaoX0hrgnE4lQbe5O4tZjGVQ/s200/waldo-curl-face.gif" width="25" /></a></div>Who has not enjoyed wasting time searching for Waldo. Searching for Waldo is fun, you look around a picture and you observe the picture in a very detailed way and discover things that you would never have seen otherwise.<br />
<div><br />
</div><div>However, looking for stuff is not alway's fun. "Au Contraire" as the French would say. Looking for stuff is the biggest time waster in the universe. It is the energy that feeds frustration and can drive a man to madness.<br />
<br />
<b>Feature Based Products</b><br />
<div>Feature based products are the way to go. They are easy in maintenance, p2 aware and we have some support for them in Eclipse. However, features are not a development artifact. They are releng artifacts.<br />
<br />
Then, after a few cycles of hacking at bundles, the time comes to bundle the bundles into features. Making a good separation into features requires some wizard like qualities, but to find the features for other bundles requires a fair amount of guessing, knowing and, of course searching.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgGGH_GAbhm4ARqdz37jLLUEXLhOhqsANNIv49imQOS4E5l13bn3-9A5ReFxlmIV49VERwfAKT4EfTBc5st8KsnXcTxTlBLLru_p_By5FZ1pEH6FxBqCm77lPL8vZ8qerfVrPcTtDJIbk/s1600/Wizard.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgGGH_GAbhm4ARqdz37jLLUEXLhOhqsANNIv49imQOS4E5l13bn3-9A5ReFxlmIV49VERwfAKT4EfTBc5st8KsnXcTxTlBLLru_p_By5FZ1pEH6FxBqCm77lPL8vZ8qerfVrPcTtDJIbk/s200/Wizard.gif" width="35" /></a></div><br />
<b>Look no more</b><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxew6Ojd6QyiNz6t7FLdKf9fV6zS5cAgfL4otaXB5UfMqHWLwVFMX-LEGuFyivnRSfgg1qiOXqkztmnZbaEJODVDJpZpvRcGjJNJ-liOPWIQDXNHtucmBXWe27uZSXxMaSSNDVAEox5Oc/s1600/WaldoExploring.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxew6Ojd6QyiNz6t7FLdKf9fV6zS5cAgfL4otaXB5UfMqHWLwVFMX-LEGuFyivnRSfgg1qiOXqkztmnZbaEJODVDJpZpvRcGjJNJ-liOPWIQDXNHtucmBXWe27uZSXxMaSSNDVAEox5Oc/s200/WaldoExploring.gif" width="50" /></a>Inside Eclipse there is some API that enables us to retrieve the installed features and go right into the bundles that are associated with that feature. Available in the Market Place is a view that is called the "Feature Explorer". It uses this information to show the current platform features and contains a search box. You type the name of the bundle into the search box and the view tells you in which feature(s) is it bundled.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTsvbO1PCN_5kmP2qQ2ZvPWte-TL9KXCgo1WDMMetZ6FtBpNhLhCcc36EtUQscvvc-AOdzECGbJeJWR5MCrp98QcchHi8qHsw1lXilU5LEZ0eONFhin8a01NZg31deh7TL-Y7HC0JrQA0/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTsvbO1PCN_5kmP2qQ2ZvPWte-TL9KXCgo1WDMMetZ6FtBpNhLhCcc36EtUQscvvc-AOdzECGbJeJWR5MCrp98QcchHi8qHsw1lXilU5LEZ0eONFhin8a01NZg31deh7TL-Y7HC0JrQA0/s1600/Untitled.png" /></a></div><br />
<a href="http://www.findwaldo.com/fankit/index.html">Thanks to the Waldo guys for letting me use their stuff! </a><br />
<br />
</div><div><br />
</div></div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com0tag:blogger.com,1999:blog-4740251930569090138.post-35889520438256713272010-08-16T23:49:00.008+02:002010-08-17T03:00:25.821+02:00Extreme Feedback from the Nebula: The Oscilloscope<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://gentecmedical.com/images/multiparameter-patient-monitor.jpg"></a><div style="text-align: center;"><b><span class="Apple-style-span" style="font-weight: normal;"><br /></span></b></div><div style="text-align: center;"><b><span class="Apple-style-span" style="font-weight: normal;"><br /></span></b></div><div><b>Extreme Feedback</b></div><div>When I was reading the Hudson manual a few days ago, I came across a section called "Extreme Feedback" where people are experimenting with feedback from the build system. Devices vary from <a href="http://wiki.hudson-ci.org/pages/viewpage.action?pageId=20250625">cute bears</a> to <a href="http://wiki.hudson-ci.org/pages/viewpage.action?pageId=38633731">traffic lights</a> and actual <a href="http://schneide.wordpress.com/2009/09/08/smell-if-its-well/">smell emitters</a>.</div><div><br /></div><div>Now I am looking for an genuine hospital heartbeat monitor to top all that. If you find one, let me know.</div><a href="http://gentecmedical.com/images/multiparameter-patient-monitor.jpg"><img src="http://gentecmedical.com/images/multiparameter-patient-monitor.jpg" border="0" alt="" style="float: center; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; cursor: pointer; width: 150px; height: 151px; " /></a><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_6bM27MVWNReyhhsq9SUP7SZ1aS9M7m84HdxbfWu_Vy4yXkC4oNImVySI1x8qOt2pUuSX4Fv7AurDx7rVDsZ0bcV9DfDg2yv4TDu4FVWsCq8W8tZsom10x801eXQxFvtAzpz5nMA163o/s1600/spike.png"></a><div><br /></div><div><b>Until that time ...</b></div>We are currently building a new software machine that is based on OSGi services. Some of these services are really important and without them the machine will not run. For example, there is the Store service to persist and retrieve data. I don't know why but a few months ago I got this idea that a dashboard with some heartbeat monitors would be a nice way to a) impress our customers and b) to get immediate feedback in case one of the services would die. <div><br /></div><div><div style="text-align: center;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-mdJ7eJkpdbQGYAv1j7XE0iZPZe9MzF6qJH0zwmmHCLVqJqktnRaTI9nIj7z2ytgGZeWkuRishA7ar1gUaE3LB7qYPAZvxyKRABEMPsOAit3sE0LFjVbnuvR4SZxlyOR2oew5IPnolms/s400/dash.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 282px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5506137661001033522" /></div><div>After playing around for a few hours on a sunny Sunday when I should really not sit behind my computer, the first version of the OSGilloscope was born. I especially liked the name, but changed it later. The first version was slow as a snail and consumed all of my CPU and I had to tinker quite a bit to be able to run many scopes without problems. </div><div><br /></div><div>After adding a few nice options, including sound (Heartbeat, Flatline, ..) <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316685">I asked the Nebula guys if they wanted to have it</a>, and they did!</div><div><br /></div><div>I have included the scope into the Nebula Examples view. If you want to take a look please follow these five easy steps:</div><div><br /></div><div>1. Start Eclipse with a new workspace </div><div>2. Create a java project</div><div>3. Create a file called widget.psf and <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.nebula/org.eclipse.swt.nebula.examples/widgets.psf?view=markup&root=Technology_Project">load it with this content</a> </div><div>4. Right click on the file and select "Import Project Set ..."</div><div>5. Open the nebula.product file from the example project and press "Launch an Eclipse Application"</div><div><br /></div><div>After this is done, open the Oscilloscope tab and play around with the options. It is a lot of fun.</div><div><br /></div><div><b>How to use the scope</b></div><div>If you want to use the widget please look at the included snippets project. You can just launch each snippet as a Java application. The widget comes with a special abstract OscilloscopeDispatcher class that keeps the animation running if you call the dispatch() method. </div><div><br /></div><div>It does that by putting a request on the Display queue with a delay of 10-n milliseconds. The higher the delay, the slower the scope will run. You can specify the delay by implementing the <code>getDelayLoop() </code>method. </div><div><br /></div><div>Off course, the scope wants to display a value. You get an opportunity to put a value in the scope every "Pulse". The value of the pulse can be specified by implementing the <code>getPulse() </code>method. If the pulse is 60 and the delay loop is 20 then every 1200 milliseconds something can be displayed in the scope. This can be a single value which will spike the scope by calling the <code>getOscilloscope().setValue(int) </code>method or</div><div><br /></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYppBfjrLDw6_AGkLpqdcAAl4pTvxNebe3WjDsXHqzfcAypZOr_YCJdIjFYm_ZEDOmUetLXzlOEIfUzXN9tjJsQtHOQAF_Kc0mcvBUp38SI-tnkXluwWLhJFZYFXpln6rCaRSqxsnFsKU/s400/spike.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5506143059342049458" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 124px; " /></span></div><div>it can be a value series by calling the <code>getOscilloscope().setValues(int[]) </code>method. e.g. the Oscilloscope.HEARTBEAT field will draw a heartbeat like shape. The aforementioned method can lose values if you overflow the stack. The stack is circular meaning that if you push too many values in the method then the tail will overwrite the top.</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1REKIHDViBRcUlk62t_k1VUO_UA93us5tVpWkZA9Bu-fS94LBDKnlmos0MWcGX1Gj3NjdJFTv1CgyDj2Vy5KuQ6EYEeWjnFghY7srtAIxx5-F0H41UCXCVggimIC62GUoGlIesLjsMsE/s1600/spike.png"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1REKIHDViBRcUlk62t_k1VUO_UA93us5tVpWkZA9Bu-fS94LBDKnlmos0MWcGX1Gj3NjdJFTv1CgyDj2Vy5KuQ6EYEeWjnFghY7srtAIxx5-F0H41UCXCVggimIC62GUoGlIesLjsMsE/s400/spike.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5506145266335896386" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 121px; " /></a>If you want to draw something in "real time" then the pulse must be set to one. This will give you the opportunity to input a value every cycle.</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_6bM27MVWNReyhhsq9SUP7SZ1aS9M7m84HdxbfWu_Vy4yXkC4oNImVySI1x8qOt2pUuSX4Fv7AurDx7rVDsZ0bcV9DfDg2yv4TDu4FVWsCq8W8tZsom10x801eXQxFvtAzpz5nMA163o/s1600/spike.png"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_6bM27MVWNReyhhsq9SUP7SZ1aS9M7m84HdxbfWu_Vy4yXkC4oNImVySI1x8qOt2pUuSX4Fv7AurDx7rVDsZ0bcV9DfDg2yv4TDu4FVWsCq8W8tZsom10x801eXQxFvtAzpz5nMA163o/s400/spike.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5506170407282955586" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 202px; " /></a></div><div>Alternatively you can register a listener that gets notified if the stack is empty. An example of this can be found in <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.nebula/org.eclipse.nebula.widgets.oscilloscope.snippets/src/org/eclipse/nebula/widgets/oscilloscope/snippets/Snippet4.java?view=markup&root=Technology_Project">Snippet4.</a></div><div><br /></div><div>Please give it a spin. All feedback is appreciated, even extreme feedback.</div><div><br /></div></div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com2tag:blogger.com,1999:blog-4740251930569090138.post-73247400343575065182010-06-09T08:38:00.018+02:002010-08-03T01:53:08.948+02:00Helios Bloghaton: Fun with Eclipse Remote Services - 1<div style="text-align: left;"><span class="Apple-style-span" style="font-style: italic; ">In many hotels there is no 13th floor, let alone a room with number 13. Everyone knows that there are 13 steps leading up to the gallows and if you suffer from <span style="font-weight:bold;">friggatriskaidekaphobia</span> then you don't like Friday the 13th.</span></div><span style="font-style:italic;"><br />Nevertheless, the OSGi Alliance decided to assign number 13 to the Remote Services chapter. This is particularly creepy since <a href="http://www.osgi.org/Download/File?url=/download/r4v42/r4.cmpn.pdf">the book</a> starts with Chapter 1 and then jumps straight to chapter 13. After chapter 13 the next one is numbered 101. It is as if the Alliance almost <span style="font-style:italic;">wanted</span> to proof that superstition <a href="http://en.wikipedia.org/wiki/Superstition">is just that</a>. </span><br /><br /><div><b>Eclipse Remote Services Implementation</b><br />And the proof sticks because Chapter 13 is a great chapter. ECF has implemented the remote services specification in February with the 3.2 release of ECF. Remote services come in two parts Discovery <a href="http://eclipse.dzone.com/articles/osgi-remote-services-ecf-0?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+eclipsezone/frontpage+(Eclipse+Zone)">[1]</a> and Distribution [<a href="http://eclipse.dzone.com/articles/osgi-remote-services-ecf-1">2</a>]. This article is about remote services in combination with the new Zookeeper based discovery provider.</div><div style="text-align: center;"><br /><br /><span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; color: rgb(0, 0, 238); "><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfFL1bYu9STFS8u-JCsdpma09TgCz6HuXKCDcgCyWDETkFcBtK9iSr6UaDHcc3kOQAnEvrH1eCU12AYcD2Pilcr3j4Gw3T6WvfzMzdxhpHkVX5Zixa00eO7RIS9k7pDi0H27EUjjlnJ9c/s400/shot2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5481252733071206274" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 339px; " /></span></div><div style="text-align: left;"><b>To the fun</b></div><div style="text-align: left;">We have created a few Example projects to show you how remote services work and the user interface of this one is depicted above. It uses a cool new SWT Widget which I have named <i>the OSGilloscope (w</i>atch out for a separate blog on this subject.) The other part of the UI consists of a tabbed folder. On one page a new quote is displayed every 15 seconds by a discovered remote service, and on the other page there is information about this remote service.</div><div style="text-align: center;"><br /></div><div style="text-align: left;"><b>Get the sources</b></div><div style="text-align: left;">Please fire up a Helios with a new workspace and get the two bundles needed for this example from <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ecf/examples/bundles/org.eclipse.ecf.examples.remoteservices.quotes.consumer/projectSet.psf?root=RT_Project&view=co">this project set</a>** (copy this file in a project, give it the extension .psf, right click and choose Import Project Set...).</div><div style="text-align: left;"><br /></div><div style="text-align: left;">** Our <a href="http://github.com/ECF/ecf-nonepl/tree/master/examples/bundles/">recent move of non-epl code to github</a> has rendered the psf file unusable for the <i>org.eclipse.ecf.services.quotes </i>project. <a href="http://github.com/ECF/Newsreader/archives/master">Please get these projects from github</a> and import it using "<i>File/Import../Existing projects into workspace"</i> and then point to the archive.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">If this is a fresh Helios then you also have to download the ECF components. Point your p2 to http://download.eclipse.org/releases/helios and get the Communication Framework extensions from the EclipseRT project.</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><b>Run it</b></div><div style="text-align: left;">Inside the consumer bundle there is a file ending with <i>.product</i>. Open it and click on the link <i>"launch an Eclipse application". </i></div><div style="text-align: left;"><i><br /></i></div><div style="text-align: left;"><i><span class="Apple-style-span" style="font-style: normal; "><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisNkyxp4w3Qwtkh2DLUDlqVLuKKrHJGif6xWbPvqmrbgWOMsnPr8PyZezFPKQhctvwAhZUYhaR0larKlrjSH8OIik1ZRmK5BW8sWiym_BHDEWYlYxrfPRGf2QcMSD1HZ_bnZdNLPjVnUA/s1600/shot3png.png"></a></span></i></div><div style="text-align: center;"><i><span class="Apple-style-span" style="font-style: normal; -webkit-text-decorations-in-effect: underline; color: rgb(0, 0, 238); "><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-joGGYkled8dJMmATnkWatRx70gi71CfayUquVv2tkIWtmwXK8xJIyTvOCco1qoVTkc4yrUF0mDRLykEq3M40cu68b6nDWYch2P2ZJzMtgGx_vG2cKG_HOWf_HbUl95EO8gU_BBEUfSc/s400/shot3png.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5481257426114229250" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 226px; " /></span></i></div><div style="text-align: left; "><b>Yazafatutu.com</b></div><div><span class="Apple-style-span">My server is named after somebody I once met in a dream. A long and strange story which I will tell you for a beer at Eclipse Summit Europe. This server is hosting the other side of this example and it uses ECF Zoodiscovery which in turn uses Apache Zookeeper from the Hadoop project. Zookeeper servers can be grouped to form a network of continuously synchronizing servers. Zookeeper is designed to replicate configuration data and it does that very fast and very reliable. </span></div><div><span class="Apple-style-span"><br /></span></div><div><span class="Apple-style-span">At Yazafatutu.com I have started an OSGi container and in there the ECF remote services and Zoodiscovery are running. Zoodiscovery is configured to run in StandAlone mode which means that there is no replication but only one central server. A so called hub-and-spoke configuration.</span></div><div><span class="Apple-style-span" style="color:#0000EE;"><span class="Apple-style-span" style=""><br /></span></span></div><div><span class="Apple-style-span" style="color:#0000EE;"><span class="Apple-style-span" style=""><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.melrosewheelchairs.com/images/sanjex-radial-spokes.jpg"><img style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 200px; height: 200px; " src="http://www.melrosewheelchairs.com/images/sanjex-radial-spokes.jpg" border="0" alt="" /></a><span class="Apple-style-span" style="color:#333333;">In this OSGi container there are three implementations of the QuoteService interface which is located in the other project you have just downloaded: </span><i><span class="Apple-style-span" style="color:#333333;">org.eclipse.ecf.services.quotes</span></i><span class="Apple-style-span" style="color:#333333;">. Each implementation resides in a separate bundle and the bundles are started and stopped one by one. Starting a bundle causes the Zoodiscovery software to broadcast a publication message to its clients. </span></span></span></div><div><span class="Apple-style-span"><br /></span></div><div><span class="Apple-style-span"><b>Eclipse Twitter</b></span></div><div><span class="Apple-style-span">Press the connect button on your user interface and your client will connect the the Zoodiscovery instance running on yazafatutu.com. After a few seconds, your OSGilloscope will come to live and quotes are shown every time a new bundle is started on the server. One of the three implementations of the QuoteService runs an Eclipse Twitter quote service. If you are on twitter then your quote could be there as well! </span><br /></div><div style="text-align: left;"><br /></div><div style="text-align: center;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH7njhZ-bXOL1AyquhiewN_QbHkf56fOh0XJhMyf4nHpDIQ_WOIZWNqrgJVFOplvGz94cIziDqQVU7ctbKdsHggH3TOklJdZDuCE9LKBl-BW7FM0prMTyUFkR3tYJV-6wWIf4fFuIX30w/s320/shot.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480061746963166882" style="cursor: pointer; width: 320px; height: 258px; " /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><b>The Info tab</b></div><div style="text-align: left;">The Info tab shows some information about the discovered server. Take a look at the "<i>component id"</i> property because that conveniently counts the number of times a service was published. You can see from its count that the ECF Discovery service can handle a few publications. It needs about 25 weeks to hit a cool million. At the time of this writing it has run about 4 days.</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><b>How does it work</b></div><div style="text-align: left;"><b></b>It is very easy once you know how. The application itself is a cross between a standalone Java application and an RCP, which is an interesting concept in itself. When the product is started, the Application class is given control. In the start method, the UI is setup and then a listener is installed to listen for service publications. This code is very easy to follow. For every service that comes in, it is checked to be a QuoteService. If this is the case then the UI is updated. The ECF remote services takes care of the remoting and your service is published as if it was a local service.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Please remember to place your code in a <i>try</i> block: You are working with <i>remote</i> services. If the remote server shuts down or decides to stop the service, the communication framework will throw an Exception. You always have to be aware of the fact that OSGi services are dynamic and remote services even more. Code in a defensive way suitable for network programming.</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><div style="text-align: left; "><b>How is the framework started</b></div><div style="text-align: left; "><b></b>Please look at the <i>Configuration</i> tab of the product configuration. A few of bundles are started to make sure that the underlying framework is initialized. The connect button of the UI does the manual work by creating a <i>Container</i> which is the ECF concept for an endpoint.<span class="Apple-style-span" style=" white-space: pre; font-family:monospace;font-size:13px;"> </span><pre>try {<br />zooContainer.connect(<br />zooContainer.getConnectNamespace().createInstance(<br />new String[] { "zoodiscovery.flavor.centralized="<br />+ getServers().getText() }), null);</pre><pre><span class="Apple-style-span" style="font-family:Georgia, serif;font-size:130%;"><span class="Apple-style-span" style=" white-space: normal;font-size:16px;"><span class="Apple-style-span" style=" ;font-size:16px;"><div style="text-align: left; "><a href="http://www.gemeenteschoolhoogstraten.be/07-08/Zuidpool/communicatie/image039klein.jpg"><img src="http://www.gemeenteschoolhoogstraten.be/07-08/Zuidpool/communicatie/image039klein.jpg" border="0" alt="" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 245px; height: 200px; " /></a></div></span></span></span></pre>Clients most of the time run in <i>centralized</i> mode and point to a server with configuration information and so does our client. We can remove the manual connect by setting the following Java options:<br /><br />-Dzoodiscovery.autoStart=true<br />-Dzoodiscovery.flavor=zoodiscovery.flavor.centralized=yazafatutu.com<br /><br /></div><div style="text-align: left; "><div style="text-align: left; "><b>Conclusion</b></div><div style="text-align: left; "><b></b>This is a small example on how to use the ECF Zoodiscovery from a consumer perspective. Various parts of Zookeeper can be configured to achieve an optimum for your specific needs and network. More information can be found on the Eclipse wiki about the configuration of Zoodiscovery.</div><div style="text-align: left; "><br /></div><div style="text-align: left; ">Many thanks to the developers of OSGi, Equinox, Zookeeper and ECF for enabling us to glue this together to this very useful piece of software. </div><div style="text-align: left; "><br /></div><div style="text-align: left; "><div style="text-align: left; "><b>Need Help?<br /></b>We can help you with professional services and training to implement this and other parts of Eclipse. Please drop a line to <a href="mailto:sales@industrial-tsi.com">sales@industrial-tsi.com</a> for more information.</div></div><div style="text-align: left; "><br /></div><div style="text-align: left; "><b>Links</b></div><div style="text-align: left; "><ul><li><a href="http://wiki.eclipse.org/ECF#OSGi_4.2_Remote_Services">ECF and OSGi 4.2 Remote Services</a></li><li><a href="http://wiki.eclipse.org/Zoodiscovery">ECF ZooDiscovery</a></li><li><a href="http://www.eclipse.org/ecf/NewAndNoteworthy.html">ECF Helios New and Noteworthy</a></li><li><a href="http://www.eclipse.org/ecf/downloads.php">ECF Downloads</a></li></ul></div><div style="text-align: left; "><br /></div><div style="text-align: left; "><br /></div></div></div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com4tag:blogger.com,1999:blog-4740251930569090138.post-13866700346950057712010-05-20T14:03:00.006+02:002010-05-20T14:38:15.785+02:00Opinion: The Class of Projects<div><span class="Apple-style-span" style="font-size:large;">This blog is about projects that are not backed up by companies. We, Eclipse users, are very lucky that there are still companies and individuals that invest in time and money for projects like Equinox, ECF, Platform, JDT, CDT, etc.. </span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">I learned from </span><a href="http://www.arnoud.engelfriet.net/"><span class="Apple-style-span" style="font-size:large;">Arnoud Engelfriet</span></a><span class="Apple-style-span" style="font-size:large;"> that there are three types of projects: Base, Commodity and Differentiator. </span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">Base:</span></div><div><span class="Apple-style-span" style="font-size:large;">If we look at end users, nobody gives a damn about the base because it is just not visible. What does a user care if Eclipse runs on Equinox or on a homegrown executable or if it runs on Swing or on SWT? However, it is needless to say how important these projects are.</span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">Commodity:</span></div><div><span class="Apple-style-span" style="font-size:large;">These are projects that are an expected part of the product but that are visible to the user. In case of a IDE, think of completion, refactoring, project management, team support, etcetera. The user cares about these things but they are a part of every Java IDE and if you don't have it, you are not in the game. However, it is needless to say how important these projects are.</span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div> </div><div><span class="Apple-style-span" style="font-size:large;">Differentiator:</span></div><div><span class="Apple-style-span" style="font-size:large;">Now we come to the interesting business projects because this is stuff that no other IDE has. Think projects as Mylyn, Swordfish, Rienna, etcetera. Needless to say how important these projects are. </span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">Differentiators form an interesting business area and you see that these projects are mostly backed up by companies who can and will help their committers and contributors with infrastructure.</span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">If you are a project that is a Base or Commodity project and not backed up by a company then it can be hard to get funding. A recent example is the Eclipse telecommunication infrastructure. </span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">I end up paying $40 every week for a teleconference call with our group because the foundation does not have a local dial-in for my country. Use Skype you say. Sure we will if it is possible but you know that Skype does not always operate as expected when teleconferencing with people around the world and we don't want to waste time with technical issues (thats the first time I ever said that). </span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">The foundation has no money to pay for this infrastructure. I respect that but who will pay for it then?</span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">In other words, it can be very hard for a Base or Commodity project to get proper funding. </span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">And this is also something that the Foundation should be aware of. It is logical that the parents are very proud of the children who are popular but the other children need attention too. </span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">Base and Commodity projects do not get enough attention. Not only in terms of funding, but also in terms of marketing power, love and mentions. When was the last time SWT was placed in the spotlight?</span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div><span class="Apple-style-span" style="font-size:large;">Therefore, I think </span><span class="Apple-style-span" style="font-size:large;"><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313479">bug 313479</a></span><span class="Apple-style-span" style="font-size:large;"> starts a good discussion. </span></div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com0tag:blogger.com,1999:blog-4740251930569090138.post-57708960127453729662010-05-11T23:28:00.006+02:002012-10-10T23:30:19.262+02:00Re: Patently Ridiculous<span class="Apple-style-span" style="font-size: medium;">After reading Ed's post about </span><a href="http://ed-merks.blogspot.com/2010/05/patently-ridiculous.html"><span class="Apple-style-span" style="font-size: medium;">software patents</span></a><span class="Apple-style-span" style="font-size: medium;"> I remembered a story that occurred around the time when I fell in love for the first time with the game of Go. </span><br />
<div>
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQFpS3uvPMpx8ssVDytic9aZE0A4_YDuNSP7ep1-C6y2elxqAKIBg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQFpS3uvPMpx8ssVDytic9aZE0A4_YDuNSP7ep1-C6y2elxqAKIBg" /></a></div>
<br /></div>
<div style="text-align: center;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">It must have been a good ten years ago, or more, when I frequently played on the </span><a href="http://www.pandanet.co.jp/English/"><span class="Apple-style-span" style="font-size: medium;">Internet Go Server</span></a><span class="Apple-style-span" style="font-size: medium;">. When you are a beginner you have to work your way up the ladder by winning games. One way of winning is to challenge players of around your ranking. </span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">When I challenged one of the lower rated players, I stumbled upon a guy who was hiding from his fellow Masters in Go by logging in with an alias. However, he forgot to unset the "open" flag so I found myself playing against a much stronger opponent. This is something you just cannot win (there is no such thing as luck in Go.) </span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">While we were playing and chatting, he introduced himself as Jean-loup Gailly. I Yahooed him (no Google back then) and found out that he is one of the authors of gzip and masters several other crafts very attractive to the inner-geek (like his work on pulsars).</span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">While I don't know his stance on software patents, I assume that he is against them. Jean-loup has analyzed several patents to make sure that the gzip software avoids all of them.</span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">Jean-loup on his website [3]:</span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">"</span><i><span class="Apple-style-span" style="font-style: normal;"><i><span class="Apple-style-span" style="font-size: medium;">I have probably spent more time studying data compression patents than actually implementing data compression algorithms. I maintain a list of several hundred patents on lossless data compression algorithms, and I made sure that gzip isn't covered by any of them. In particular, the --fast option of gzip is not as fast it could, precisely to avoid a patented technique.</span></i><span class="Apple-style-span" style="font-size: medium;">"</span></span></i></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">He continues by making an interesting remark: </span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">"</span><i><span class="Apple-style-span" style="font-size: medium;">The first version of the compression algorithm used by gzip appeared in zip 0.9, publicly released on July 11th 1991. So any patent granted after July 11th 1992 cannot threaten gzip because of the prior art, and I have checked all patents granted before this date.</span></i><span class="Apple-style-span" style="font-size: medium;">"</span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">I understand from this that patents are void if somebody can prove that the invention was done before it was filed. So filing patents for simple things might not be so damaging as it appears (somebody try to file a patent for the singleton pattern and see what happens). This is called </span><a href="http://en.wikipedia.org/wiki/Prior_art"><span class="Apple-style-span" style="font-size: medium;">prior art</span></a><span class="Apple-style-span" style="font-size: medium;">.</span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<b><span class="Apple-style-span" style="font-size: medium;">The big crunch</span></b></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">One interesting story of Jean-loup is about a compression technique claiming to be so effective that it could compress any file with at least one bit. Of course, a child can see that this would recursively compress the output file to zero bits. The US patent office worked on this patent for three years before finally </span><a href="http://gailly.net/05533051.html"><span class="Apple-style-span" style="font-size: medium;">granting the patent.</span></a><span class="Apple-style-span" style="font-size: medium;"> </span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<b><span class="Apple-style-span" style="font-size: medium;">--</span></b></div>
<div style="text-align: left;">
<b><span class="Apple-style-span" style="font-size: medium;"><br /></span></b><span class="Apple-style-span" style="font-size: medium;">[1] While I was researching for this blog post I found out that there is a </span><a href="http://www.gentgo.be/tetsuki/"><span class="Apple-style-span" style="font-size: medium;">free iPhone client</span></a><span class="Apple-style-span" style="font-size: medium;"> for Go.</span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">[2] </span><a href="http://en.wikipedia.org/wiki/Carl_Barks"><span class="Apple-style-span" style="font-size: medium;">Carl Barks</span></a><span class="Apple-style-span" style="font-size: medium;">, the famous Donald Duck cartoonist, once drew a story where Donald Duck and his nephews salvaged a ship by pumping thousand of ping-pong balls into it. The word goes that this story </span><a href="http://en.wikipedia.org/wiki/Serendipity"><span class="Apple-style-span" style="font-size: medium;">prevented granting</span></a><span class="Apple-style-span" style="font-size: medium;"> of a patent (</span><a href="http://www.starch.dk/isi/kroyer/schrooge.asp"><span class="Apple-style-span" style="font-size: medium;">unfortunately this appears to be a hoax</span></a><span class="Apple-style-span" style="font-size: medium;">).</span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;"><br /></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: medium;">[3] </span><a href="http://gailly.net/index.html#patents"><span class="Apple-style-span" style="font-size: medium;">Jean-loup Gailly's site</span></a></div>
wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com3tag:blogger.com,1999:blog-4740251930569090138.post-102884254296293022010-04-16T14:37:00.004+02:002010-04-16T15:01:15.577+02:00Invitation to a sunny party<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsxkfv3S1LeglkJ_BVjWevvfuvc1ADSYVsa7OnkPVwW-1KICTmTxfV2RuEfKAIFEkI5ALCOBvZUQMFdWnhu6MF9nOJuzpYWP4Sgy51abRCWX4iAPKs-wsa8IsITL7MAdcNUwLkbOirGYg/s1600/invitation_demo_camp.jpg"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 352px; height: 400px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsxkfv3S1LeglkJ_BVjWevvfuvc1ADSYVsa7OnkPVwW-1KICTmTxfV2RuEfKAIFEkI5ALCOBvZUQMFdWnhu6MF9nOJuzpYWP4Sgy51abRCWX4iAPKs-wsa8IsITL7MAdcNUwLkbOirGYg/s400/invitation_demo_camp.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5460715687167579778" /></a>Hi There!<div><br /><div>We would like to invite you to attend the Eclipse <a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Helios_2010/Nieuwegein">DemoCamp in Nieuwegein</a> which will take place at June 23. </div><div><br /></div><div>We will celebrate the Helios release at the end of June and the e4 release in July. </div><div><br /></div><div>The Eclipse DemoCamps are an opportunity to showcase all of the cool technology being built by the Eclipse community. This is also an opportunity for you to meet Eclipse enthusiasts in your area.</div><div><br /></div><div><b>Thanks</b></div><div>to the Eclipse Foundation for the text and Vahid "Pixels" Vafai for the cool graphics.</div></div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com0tag:blogger.com,1999:blog-4740251930569090138.post-62999814905482606942010-03-31T23:46:00.008+02:002010-04-01T01:05:54.339+02:00ECF Discovery: How many Zookeepers does it take to screw in a lightbulb?<img alt="image:zookeeperecf.gif" src="http://wiki.eclipse.org/images/a/ad/Lightbubl.gif" border="0" align="right" /><br />If you use OSGi remote services (See OSGi Compendium Specs chapter 13) you have to know the other end. In large installations this configuration can be quite cumbersome.<br /><br />At Remain Software we develop software to manage nodes in a network. We want our nodes to register themselves to us when they are in the network. This is fine if you manage a small office but not if you manage smart lightbulbs in a sky scraper.<br /><br />As soon as the lightbulb is screwed into its socket, it can tap some power to activate its OSGi runtime. The runtime will activate the ILightBulb interface with methods dim(int), on() and off() as a remote service. Now, how do we get this service to interested parties...<br /><br /><span class="Apple-style-span" style="font-size:large;"><b>ECF For the Win</b></span><br />The ECF discovery framework enabled us to create a Zookeeper based Discovery implementation. An addition to the already existing JmDNS (Zeroconf/Bonjour) and jSLP implementations.<br /><br />An <a href="http://hadoop.apache.org/zookeeper/">Apache Zookeeper</a> server will replicate configuration data between other Zookeeper servers. The Zookeeper servers know each other and clients know one Zookeeper Server. So the smart bulb (which runs OSGi or did I mention that already?) is preconfigured with the address of its nearest Zookeeper server or gets this information dynamically by some kind of IP broadcast.<br /><br /><img alt="image:zookeeperecf.gif" src="http://wiki.eclipse.org/images/8/89/Zookeeperecf.gif" width="640" height="400" border="0" /><br /><br />When the lightbulb publishes its Remote Service, ECF wakes up and publishes this service through the provided Discovery implementations. The Zookeeper discovery provider will immediately notify its nearest peers and the new lightbulb service is registered in all Zookeeper instances. When the Zookeeper instance that is connected to an interested party receives the data, the Discovery implementation will publish this service in that OSGi container.<br /><br />The Lightbulb Control Center is waiting for the ILightBulb service and magically creates a UI in its console (the sparkles DO NOT appear in reality. I made that up).<br /><br />The <a href="http://www.torranceca.gov/6866.htm">Building Maintainer</a> can now control the lightbulb.<div><br /><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX2Q-mreqL9ZyN_VJpUuQCceLm9A6z-6Jyou3IN47xmMM8AWUp4kS8Glwu79_g_Vo7I_3RE4a01mz1yo1TIP94Pk2-hhaJPlo4GumLP8wI1QUR_7LHpwZeRPLGGKg1YRZ_2-2Iv2o91o8/s1600/tinker.gif"><img src="http://wiki.eclipse.org/images/9/9e/Tinker.gif" border="0" alt="" align="right" style="cursor: pointer; width: 70px; height: 85px; " /></a></div><div><br /></div><div><b>More..</b></div><div>For more information or if you want to Tinker with the code, please <a href="http://wiki.eclipse.org/Zookeeper_Based_ECF_Discovery">visit the wiki</a>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX2Q-mreqL9ZyN_VJpUuQCceLm9A6z-6Jyou3IN47xmMM8AWUp4kS8Glwu79_g_Vo7I_3RE4a01mz1yo1TIP94Pk2-hhaJPlo4GumLP8wI1QUR_7LHpwZeRPLGGKg1YRZ_2-2Iv2o91o8/s1600/tinker.gif"></a><span class="Apple-style-span" style="font-size:large;"><b>Acknowledgements</b></span><div><span class="Apple-style-span" style="font-size:large;"><b><span class="Apple-style-span" style="font-weight: normal; font-size:medium;">Ahmed Aadel, one of the great developers working at Remain Software created the Zookeeper Discovery Implementation. Thanks to Scott Lewis and Markus Kuppe from our ECF team for support and Chris Aniszczyk for easy access to Tinkerbell (tm)</span></b></span></div><div><span class="Apple-style-span" style="font-size:large;"><b><span class="Apple-style-span" style="font-weight: normal; font-size:medium;"><br /></span></b></span></div><div><span class="Apple-style-span" style="font-size:large;"><b><span class="Apple-style-span" style="font-weight: normal; font-size:medium;">Animations done with the Gimp.<br /></span></b></span><br /></div></div></div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com3tag:blogger.com,1999:blog-4740251930569090138.post-11944575375507063292009-12-21T17:30:00.003+01:002009-12-21T17:38:11.548+01:00Am I Fragment or am I Bundle<div>Sometimes you want to know if there are fragments attached to a bundle so you can perform some logic. Eclipse's Platform class is able to help you in this area because it lets you get a list of BundleDescription objects like this: </div><div><br /></div><div><div><span class="Apple-style-span" style="font-size: small;">BundleDescription[] binfos = Platform.</span><i><span class="Apple-style-span" style="font-size: small;">getPlatformAdmin</span></i><span class="Apple-style-span" style="font-size: small;">().getState(</span><span class="Apple-style-span" style="color:#CC33CC;"><span class="Apple-style-span" style="font-size: small;">false</span></span><span class="Apple-style-span" style="font-size: small;">).getBundles();</span></div><div><span class="Apple-style-span" style="font-size: small;">for (BundleDescription bundleDescription : binfos) {</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-size: small;"> </span></span><span class="Apple-style-span" style="font-size: small;">if(bundleDescription.getHost() != </span><span class="Apple-style-span" style="color:#CC33CC;"><span class="Apple-style-span" style="font-size: small;">null</span></span><span class="Apple-style-span" style="font-size: small;">)</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-size: small;"> </span></span><span class="Apple-style-span" style="font-size: small;">System.</span><i><span class="Apple-style-span" style="color:#6633FF;"><span class="Apple-style-span" style="font-size: small;">out</span></span></i><span class="Apple-style-span" style="font-size: small;">.println("</span><span class="Apple-style-span" style="color:#3333FF;"><span class="Apple-style-span" style="font-size: small;">I am Fragment</span></span><span class="Apple-style-span" style="font-size: small;">");</span></div><div><span class="Apple-style-span" style="font-size: small;">}</span></div><div><br /></div></div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com0tag:blogger.com,1999:blog-4740251930569090138.post-63042780814180423292009-11-16T15:26:00.003+01:002009-11-16T17:10:50.673+01:00OSGi: GESUNDHEIT!This blog is about the <a href="http://neilbartlett.name/blog/2009/11/12/2-day-osgi-training-in-amsterdam-1st-2nd-dec/">upcoming OSGi course run by Neil Bartlett</a>. If you are writing moderate to large size Java applications and you have heard about OSGi but are still a little puzzled about what it does: OSGi is the biggest thing that happened to Java this century. Here are three reasons why this is the case:<div><br /></div><div><div>1. OSGi enforces modularity</div><div>Making systems modular feels good to every engineer. It is just a logical thing to do when systems grow. We define and design modules in our systems. But once implemented, they cannot be taken out or replaced by a better version because they get entangled so quickly. When coding OSGi style, this will not happen. Why? Read on.</div><div><br /></div><div>2. OSGi defines module boundaries</div><div>One reason modularity is enforced is because you define a clear entrance point in your modules which is the interface to the rest of your system. No unclear API due to many public classes, but a well defined set of visible classes that were meant to be API. The rest is hidden, public or not public. Why is this handy?</div><div><br /></div><div>3. OSGi helps you manage complexity.</div><div>Once you can see your modules as giant blocks of LEGO(tm) (having a clear interface) you can think about what the weak blocks are and how they can be replaced or hardened. Do all your work inside the module but be faithful to the interfaces with the outside world. This is how they build Skyscrapers. </div><div><br /></div><div>Although it sounds to good to be true, true it still is. And even though OSGi sounds like a sneeze, it is all about the GESUNDHEIT of your applications.</div><div><br /></div><div><a href="http://www.regonline.com/builder/site/Default.aspx?eventid=772414">We host an OSGi course in December</a>. There are a few places left. Neil Bartlett will be your teacher. By the way, Neil did write the book, a free book and the eye opening <a href="http://neilbartlett.name/blog/osgibook/">first chapter is right here</a>.</div><div><br /></div><div>Apart from the course we will take you on a Amsterdam by Night tour where you will get a good, but not too good, impression of the unique Amsterdam culture. It is about 30 minutes drive from the training location to the center of Amsterdam.</div><div><br /></div><div>See you there!</div><div><br /></div><div><br /></div></div>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com0tag:blogger.com,1999:blog-4740251930569090138.post-4930558895472646332009-10-06T17:58:00.005+02:002009-10-06T21:17:05.118+02:00Eclipse API tools: Execution Environments<span class="Apple-style-span" style=" line-height: 19px; font-family:arial, sans-serif;font-size:small;"><h2 style="color: black; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0.6em; margin-left: 0px; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(170, 170, 170); font-size:20px;"><span class="Apple-style-span" style="font-size:small;"><a href="http://wiki.eclipse.org/PDE/Resources/Execution_Environments">This content first appeared on the Eclipse Wiki!</a> </span></h2><div><br /></div><h2 size="20px" style="color: black; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; font-weight: normal; margin-top: 0px; margin-right: 0px; margin-bottom: 0.6em; margin-left: 0px; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(170, 170, 170); background-position: initial initial; ">Execution Environments in API Tools</h2><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://eclipsesource.com/blogs/2008/10/08/tip-eclipse-osgi-and-execution-environments/" class="external text" title="http://eclipsesource.com/blogs/2008/10/08/tip-eclipse-osgi-and-execution-environments/" rel="nofollow" style="text-decoration: none; color: rgb(51, 102, 187); background-image: url(http://wiki.eclipse.org/skins/eclipse/external.png); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; padding-right: 13px; background-position: 100% 50%; ">Execution Environments (EE)</a> are a neat concept within OSGi, however, things can become complicated when developing against multiple EEs. When you want to contribute code to Eclipse, chances are that you will be asked to downgrade your code to the lowest possible execution environment.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">For example, suppose that you want to contribute a Twitter client to Eclipse, or any other open source platform. If you are already accustomed to the OSGi way of working you would probably want to split your code into several independent bundles (AKA modules or plug-ins). At least you would provide a module named org.eclipse.twitter.core and one called org.eclipse.twitter.ui. To be really useful, it would be the bomb if the core bundle could run on, say, a watch. For watches, and other minimal devices there is a special Java environment which is a subset of Java 1.4 (without regular expressions unfortunately) called Foundation 1.1 or CDC 1.1/Foundation 1.1. There is also a Foundation 1.0 but this is really stone age and hardly not used. From what I know, Eclipse uses the 1.1 as a minimum level.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">Your org.eclipse.twitter.ui package would normally not require such a primitive environment, however, if somebody wanted to implement a twitter client on a watch, he or she could at least use your core to handle the difficult stuff.</p><a name="Specify_an_Execution_environment" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "></a><h3 style="color: black; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0.3em; margin-left: 0px; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: initial; border-bottom-style: none; border-bottom- background-position: initial initial; font-size:17px;color:initial;"><span class="mw-headline">Specify an Execution environment</span></h3><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot1.png" class="image" title="Specify an Execution Environment" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="Specify an Execution Environment" src="http://wiki.eclipse.org/images/4/4b/EEShot1.png" width="410" height="376" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><br />Execution Environments for a specific (plug-in) bundle can be specified in the manifest editor. It is generally only necessary to specify the lowest EEs that your bundles require. In the preferences there is also a section Execution Environments in the Java section. Just type "exec" in the preference search box to get the indicated page. This merely states which installed JRE's are able to provide the required Execution Environment. It is clear that a Java 5 JRE cannot provide a Java 6 Execution Environment. The other way around is possible but that generally provides more than is required and can lead to confusion.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot2.png" class="image" title="Java Execution Environments Preference Page" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="Java Execution Environments Preference Page" src="http://wiki.eclipse.org/images/5/55/EEShot2.png" width="731" height="311" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><br />For example, a Java 5 JRE can provide the "split()" method for String but this method is not available in Foundation 1.1. Even if your execution environment was set to CDC 1.1/Foundation 1.1 in your manifest file, this problem would only be detected when it was executed against a Foundation 1.1 JRE.</p><a name="Setup_API_Tooling" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "></a><h3 style="color: black; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0.3em; margin-left: 0px; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: initial; border-bottom-style: none; border-bottom- background-position: initial initial; font-size:17px;color:initial;"><span class="mw-headline">Setup API Tooling</span></h3><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">However, we want Eclipse to guard this and warn us when we try to use illegal (future) methods or classes. In order to set this up, we first have to get the available execution environments from the Eclipse update site. In order to do this, go to the preferences and type 'API' in the search box. Then select the "API Errors/Warnings" page. If you open the first section "General" and select "Error" for the "Invalid references ..." field, the "Supported Environments" box will be accessible and you can click on the provided link.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot3.png" class="image" title="Enable the Supported Environments dialog" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="Enable the Supported Environments dialog" src="http://wiki.eclipse.org/images/4/42/EEShot3.png" width="776" height="315" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><br />Clicking this link will open the familiar P2 installer dialog. Select the proper download site and then download all available Execution Environments.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot4.png" class="image" title="Downloading the Execution Environments" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="Downloading the Execution Environments" src="http://wiki.eclipse.org/images/f/f8/EEShot4.png" width="831" height="493" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><br />Make sure to switch on the required Errors and/or Warnings. There are convenient buttons available to flip all switches at once to the desired state. Be restrictive if you are serious about your execution environment.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot5.png" class="image" title="Result" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="Result" src="http://wiki.eclipse.org/images/1/12/EEShot5.png" width="553" height="430" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><a name="Activating_the_Project_for_API_tooling" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "></a><h3 style="color: black; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0.3em; margin-left: 0px; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: initial; border-bottom-style: none; border-bottom- background-position: initial initial; font-size:17px;color:initial;"><span class="mw-headline">Activating the Project for API tooling</span></h3><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">The last thing to do is to activate the project for API tooling, only setting the Execution Environment in the Manifest file will not do anything. Before a project is created, you are able to specify if the API Tooling must be activated by checking the "Enable API Analysis" field.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot6.png" class="image" title="Activate API Tooling" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="Activate API Tooling" src="http://wiki.eclipse.org/images/5/5c/EEShot6.png" width="478" height="476" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">This will set a project nature that in turn provides special builder classes to check for EE JRE incompatibilities (amongst other things.) If you have forgotten to check this box then you can also do it later. Right-click your plug-in project and select the "API Tooling Setup" option from the PDE Menu in the context menu. This will apply the nature after the project was already created.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot7.png" class="image" title="Activate API Tooling" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="Activate API Tooling" src="http://wiki.eclipse.org/images/4/48/EEShot7.png" width="630" height="805" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">A dialog box will appear to warn you that an API baseline is not set. You can ignore this if you only want to use the API tooling to specify the Execution Environment.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot8.png" class="image" title="API Tooling warning" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="API Tooling warning" src="http://wiki.eclipse.org/images/9/92/EEShot8.png" width="522" height="176" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><a name="Checking_your_Source" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "></a><h3 style="color: black; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0.3em; margin-left: 0px; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: initial; border-bottom-style: none; border-bottom- background-position: initial initial; font-size:17px;color:initial;"><span class="mw-headline">Checking your Source</span></h3><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">Surely, some of your sources will be showing the red cross. Open a source. Press CTRL+. (dot) to go to the first error and hoover to find the cause. This could look something like this:</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><a href="http://wiki.eclipse.org/Image:EEShot9.png" class="image" title="API Tooling in Action" style="text-decoration: underline; color: rgb(90, 54, 150); background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial; "><img alt="API Tooling in Action" src="http://wiki.eclipse.org/images/3/31/EEShot9.png" width="779" height="290" border="0" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; vertical-align: middle; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a></p><p></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><br /></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><br /></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">Many thanks to the PDE team for this great tool!</p></span>wimjongmanhttp://www.blogger.com/profile/10771216547823629599noreply@blogger.com1