<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Tag: eclipse | AlBlue&rsquo;s Blog]]></title>
  <link href="http://alblue.bandlem.com/Tag/eclipse/atom.xml" rel="self"/>
  <link href="http://alblue.bandlem.com/"/>
  <updated>2012-04-20T11:39:08+01:00</updated>
  <id>http://alblue.bandlem.com/</id>
  <author>
    <name><![CDATA[Alex Blewitt]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Why OSGi qualifiers aren't working]]></title>
    <link href="http://alblue.bandlem.com/2012/04/osgi-qualifiers.html"/>
    <updated>2012-04-11T09:00:00+01:00</updated>
    <id>http://alblue.bandlem.com/2012/04/osgi-qualifiers</id>
    <content type="html"><![CDATA[<p>In my
<a href="http://alblue.bandlem.com/2012/03/human-tooling.html">previous post</a>,
I argued that the decision not to support SNAPSHOT ranges in OSGi was
a missed opportunity for the platform, perhaps one that will limit its adoption
in the future. Despite several vocal critics (largely arguing from a point of
not having used Maven and its SNAPSHOT versioning scheme), I decided to see how
much of a problem it really was.</p>

<p>The arguments of 'Maybe this would cause problems' don't really seem to be
borne out by the Maven repository, which has over 400G of versioned artefacts
that have gone through the -SNAPSHOT process during development and rarely, if
ever, has any problems in versioned code. (That's not to say mistake can never
happen; but it's easy enough to publish a new asset with a new patch version if
required, as has been done occasionally before such as the javax.jms releases.)</p>

<p>The problem with the existence of the OSGi build qualifier is that it means
Eclipse developers don't actually take care to version code properly. Instead,
the build process just spits out recompiled bundles, often without a
corresponding bump in version number where required or needed.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Using Humans to solve a Tooling problem]]></title>
    <link href="http://alblue.bandlem.com/2012/03/human-tooling.html"/>
    <updated>2012-04-04T07:00:00+01:00</updated>
    <id>http://alblue.bandlem.com/2012/03/human-tooling</id>
    <content type="html"><![CDATA[<p>I've just written up a piece at InfoQ on how
<a href="http://www.infoq.com/news/2012/04/osgi-snapshot">OSGi have abandoned -SNAPSHOT versions</a>,
and I thought I'd take a minute to explain what I meant by the 'human tooling'
problem.</p>

<p>The issue is whether or not SNAPSHOTs shold be built in a 'lower' numerical
namespace using <code>1.2.3-456</code> which sorts less than <code>1.2.3</code>. By encouraging
a difference between 'unreleased' and 'released' versions, it becomes clear
whether there are changes which are important, and allows developers to report
bugs against a specific version (instead of just 'the latest version').</p>

<p>According to both the <a href="http://semver.org/">Semantic Versioning</a>
and the
<a href="http://wiki.eclipse.org/Version_Numbering">Eclipse Version Numbering</a>
rules, the patch number (third segment) should be changed whenever there is
a difference between build artefacts. As I've listed on the InfoQ article,
that plainly doesn't happen in some cases:</p>

<ul>
<li>org.eclipse.cdt.codan.checkers.ui_1.0.0.201109151620.jar</li>
<li>org.eclipse.cdt.codan.checkers.ui_1.0.0.201202111925.jar</li>
<li>org.eclipse.core.filebuffers_3.5.200.v20110505-0800.jar</li>
<li>org.eclipse.core.filebuffers_3.5.200.v20110928-1504.jar</li>
<li>org.eclipse.core.variables_3.2.500.v20110511.jar</li>
<li>org.eclipse.core.variables_3.2.500.v20110928-1503.jar</li>
<li>org.eclipse.emf.ecore_2.7.0.v20110912-0920.jar</li>
<li>org.eclipse.emf.ecore_2.7.0.v20120127-1122.jar</li>
<li>org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506.jar</li>
<li>org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110815-1438.jar</li>
<li>org.eclipse.equinox.p2.updatesite_1.0.300.v20110510.jar</li>
<li>org.eclipse.equinox.p2.updatesite_1.0.300.v20110815-1419.jar</li>
<li>org.eclipse.jdt.compiler.tool_1.0.100.v_B76_R37x.jar</li>
<li>org.eclipse.jdt.compiler.tool_1.0.100.v_B79_R37x.jar</li>
<li>org.eclipse.jface_3.7.0.I20110522-1430.jar</li>
<li>org.eclipse.jface_3.7.0.v20110928-1505.jar</li>
<li>org.eclipse.ltk.core.refactoring_3.5.201.r371_v20110824-0800.jar</li>
<li>org.eclipse.ltk.core.refactoring_3.5.201.r372_v20111101-0700.jar</li>
<li>org.eclipse.pde.runtime_3.4.201.v20110819-0851.jar</li>
<li>org.eclipse.pde.runtime_3.4.201.v20110928-1516.jar</li>
<li>org.eclipse.ui_3.7.0.I20110602-0100.jar</li>
<li>org.eclipse.ui_3.7.0.v20110928-1505.jar</li>
</ul>


<p>The point of showing the cross-section of the above is not to highlight
specific projects, but to show this is a widespread problem that goes
across all projects. The problem is, there is no 'penalty' for leaving a
<code>1.2.3.qualifier</code> as the Manifest entry and just spinning out builds with
new build qualifiers in place.</p>

<p>The key advantage of having a different version numbering format between
release versions and pre-release versions is to ensure that at release, the
version number is updated appropriately. This means that the development
process generally follows:</p>

<ul>
<li>Create 1.0.0-SNAPSHOT for development</li>
<li>Do work</li>
<li>Release 1.0.0</li>
<li>Update version to 1.0.1-SNAPSHOT</li>
<li>Do work</li>
<li>Release 1.0.1 or 1.1.0 (or 2.0.0) as appropriate</li>
<li>goto 10</li>
</ul>


<p>The decision as to what to call the next number can either be tracked
by updates to the -SNAPSHOT itself (e.g. moving to 1.1.0-SNAPSHOT) or
can be deferred to later in the process. There's even tooling to help
you do that (the
<a href="http://maven.apache.org/plugins/maven-release-plugin/">mvn release plugin</a>) -- though this just removes the -SNAPSHOTS for you rather than
doing any semantic analysis.</p>

<p>This pattern is so common that it's even codified as a bullet point in
the Semantic Versioning specification:</p>

<blockquote><p>A pre-release version MAY be denoted by appending a dash and a series of dot
separated identifiers immediately following the patch version. Identifiers
MUST be comprised of only ASCII alphanumerics and dash [0-9A-Za-z-].
Pre-release versions satisfy but have a lower precedence than the associated
normal version. Examples: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7,
1.0.0-x.7.z.92.</p></blockquote>

<p>The 'pre-release versions satisfy but have a lower precedence than' sums
up the rule in a nutshell: in other words, anywhere a 1.2.3 is valid then
all 1.2.3-<em> are valid as well; anywhere a 1.2.3 is not valid then
all 1.2.3-</em> are not valid. So, in a range like <code>[1.2.3,4.5.6)</code> then any
pre-release state of 1.2.3-<em> is included, but any pre-release state of
4.5.6-</em> is not included.</p>

<p>This was even implemented successfully in Equinox, with an implementation
in <a href="http://download.eclipse.org/eclipse/downloads/drops4/S-4.2M6-201203151300/eclipse-news-M6.html#Equinox">3.8M6</a>.</p>

<p>Unfortunately, the concerns listed by the CPEG were out of touch with how
developers work outside of the OSGi space, and instead of reaching out
with a mechanism which would have been compatible for released artifacts
(whilst providing a SNAPSHOT style build system that would not be loadable
on older OSGi runtimes) it has been removed from the specification. Given that
OSGi R5 is a major release of the runtime, this would have been the ideal
time for introducing a new version syntax, and one that would have been
quickly adopted elsewhere.</p>

<p>So instead of having 'memorable' artifact names like <code>org.eclipse.ui_3.7.0.jar</code>
we'll be stuck with unmemorable names like
<code>org.eclipse.ui_3.7.0.v20110928-1505.jar</code> for the forseeable future in
the OSGi world. This causes more cognitive work for humans (trying to
remember the name) whilst introducing more opportunity for mistakes (by
releasing the same major/minor/patch with different builds).</p>

<p>This is what I refer to as humans solving the tooling problem, rather than
the other way around.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[EclipseCon 2012 Day 3]]></title>
    <link href="http://alblue.bandlem.com/2012/03/eclipsecon-day-3.html"/>
    <updated>2012-03-29T09:00:00+01:00</updated>
    <id>http://alblue.bandlem.com/2012/03/eclipsecon-day-3</id>
    <content type="html"><![CDATA[<p>The last day of EclipseCon 2012 is upon us! The new venue has worked out
really well by all accounts, and the timezone overlap has meant it is
easier for those of us who can't be there in person to follow the
<a href="http://twitter.com/search/%23eclipsecon">#eclipsecon</a> hashtag.</p>

<p>Today's keynote is on the
<a href="http://www.eclipsecon.org/2012/sessions/future-alm-developing-social-code-graph">Future of ALM</a>,
a look at how the recent advances in application lifecycle management tools
have enabled much tighter integration between developers and the IDEs
themselves. Should be an interesting view as to where these tools are going
over the next few years.</p>

<p>Today's OSGi experience kicks off with a
<a href="http://www.eclipsecon.org/2012/sessions/modular-and-extensible-osgi-shell">modular and extensible OSGi shell</a>,
which is a look at the new
<a href="http://felix.apache.org/site/apache-felix-gogo.html">Gogo shell</a>
from Apache Felix. This shell will become the default one for Eclipse Juno,
and is already available in the existing milestone builds. Gogo is a powerful
shell and can do a much wider range of things than the old Equinox one, but
takes a bit of retraining the muscle memories when it comes to controlling it
(for example, <code>lb</code> instead of <code>ss</code> to list bundles instead of show status).
There's also a couple of presentations on
<a href="http://www.eclipsecon.org/2012/sessions/eclipse-virgo-experience-cme-group">Virgo Experience</a> and
<a href="http://www.eclipsecon.org/2012/sessions/path-modularity-eclipse-virgo">a Path to Modularity with Eclipse Virgo</a>,
both of which provide a managed OSGi runtime environment (with web admin tools)
and can be used as a replacement for existing Apache Tomcat engines thanks
to the integration with the Tomcat web bundle.</p>

<p>Another must-see presentation is the one on
<a href="http://www.eclipsecon.org/2012/sessions/eclipse-xtend-language-made-java-developers">Eclipse Xtend</a>.
This is a language, built upon the runtime tools of Xtext, which 'compiles'
down to Java source code, and thus fits in with existing Java build tools.
Although it's possible to commit in the Java code (and just use a headless
Java compiler) it is also possible to commit the Xtend source files and
use the Maven plugin to compile the code as part of the build. The upcoming
2.3 release provides a way of debugging from source (rather than the
generated Java code) as well as some refactoring support. Unlike other
languages, since Xtend doesn't have its own compiler it has less bugs and
faster build times than more complex languages. And, it's backwardly compatible
across JVMs and releases, something which can't be said for some popular JVM
based languages. There's a follow up on
<a href="http://www.eclipsecon.org/2012/sessions/xtext-best-practices">Xtext best practices</a> later in the day as well.</p>

<p>There's a talk on
<a href="http://www.eclipsecon.org/2012/sessions/news-git-java-land">News from Git in Java Land</a>
which is by a couple of the core EGit/JGit developers, whose only problem
is that it overlaps with the talk above. Still, if you're into Git then
this will be a good state of the union; there's also a talk on
<a href="http://www.eclipsecon.org/2012/sessions/automatic-remote-project-synchronization-using-git">automatic remote project synchronisation using Git</a>
later as well.</p>

<p>My final pick for the day is on the
<a href="http://www.eclipsecon.org/2012/sessions/debugging-2012">time travelling debugger</a>,
which won the best tool at this year's award winners. If you've never seen
this in action before, then this talk is going to open your eyes as to how
much data it's possible to derive from a runtime system.</p>

<p>As this year's EclipseCon comes to a close later on today, I'd like to once
again echo <a href="http://alblue.bandlem.com/2012/03/eclipsecon-thanks.html">my thanks</a> for the
community award. Hopefully I'll be able to be back one day for EclipseCon!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[EclipseCon 2012 Day 2]]></title>
    <link href="http://alblue.bandlem.com/2012/03/eclipsecon-day-2.html"/>
    <updated>2012-03-28T09:00:00+01:00</updated>
    <id>http://alblue.bandlem.com/2012/03/eclipsecon-day-2</id>
    <content type="html"><![CDATA[<p>The second main day of EclispeCon kicks off with a look at the
<a href="http://www.eclipsecon.org/2012/sessions/building-plug-and-play-application-development-platform-car-future">plug-and-play car of the future</a>,
which is a joint platform called
<a href="http://www.buglabs.net/ford-buglabs">OpenXC</a>
between Ford Motor Company and
<a href="http://www.buglabs.net/">Bug Labs</a>.</p>

<p>Today's OSGi sessions include
<a href="http://www.eclipsecon.org/2012/sessions/best-practices-enterprise-osgi-applications">Enterprise OSGi best practices</a>,
<a href="http://www.eclipsecon.org/2012/sessions/enterprise-osgi-earthlings-meet-eclipse-libra">Enterprise OSGi for Earthlings</a>,
and <a href="http://www.eclipsecon.org/2012/sessions/osgi-cloud-quo-vadis">OSGi in the Cloud</a>.
Later on in the day, there's a presentation on the
<a href="http://www.eclipsecon.org/2012/sessions/apache-felix-web-console-web-based-osgi-framework-administration">Apache Felix Web Console</a>,
which is used in the <a href="http://karaf.apache.org/">Apache Karaf</a>
project. The final one is
<a href="http://www.eclipsecon.org/2012/sessions/dynamic-rias-equinox-and-vaadin">Equinox and Vaadin</a>.
For those that don't know, <a href="https://vaadin.com">Vaadin</a> is a UI
framework -- there's a set of
<a href="http://demo.vaadin.com/">demos available</a>
if you want to see more.</p>

<p>Sadly, the
<a href="http://www.eclipsecon.org/2012/sessions/how-github-works">How GitHub Works</a>
talk has been cancelled. I was fortunate to attend Zach's talk at QConLondon,
and I wrote up some
<a href="http://alblue.bandlem.com/2012/03/qcon-day-3.html">notes on my blog</a> at the time.</p>

<p>There are a couple of Orion related presentations today; if you haven't seen
Orion, then you can find out more at
<a href="http://eclipse.org/orion/">the Orion project page</a>, which includes
a demo project you can use to edit the content. There's an
<a href="http://orionhub.org/">OrionHub</a> which you can create an account
via the
<a href="http://www.eclipse.org/orion/getstarted.php">getting started</a> page.
The <a href="http://www.eclipsecon.org/2012/sessions/language-tooling-orion">LAnguage Tooling in Orion</a> presentation will look at the state of language
development, with a focus on the JavaScript tools. Later on, there's a talk
about
<a href="http://www.eclipsecon.org/2012/sessions/developing-cloud-apps-orion-django-and-mongodb-30-minutes-or-less">developing cloud apps with Orion</a>.</p>

<p>For those who still haven't made the leap to Git yet (and are one of the
<a href="http://eclipse.org/projects/scmcountdown.php">48% not using Git</a> yet)
then the
<a href="http://www.eclipsecon.org/2012/sessions/migrating-git-lets-git-party-started">Lets Git The Party Started</a>
should be a good introduction to how to use Git effectively within Eclipse.
You may also like to read my
<a href="http://alblue.bandlem.com/2010/02/git-for-eclipse-users.html">Git for Eclipse users</a>
piece, which subsequently got folded into the official
<a href="http://wiki.eclipse.org/EGit/Git_For_Eclipse_Users">EGit documentation</a>,
as well as my (now finished)
<a href="http://alblue.bandlem.com/2011/12/git-tip-of-week-finale.html">Git Tip of the Week series</a>. There's also a <a href="http://www.eclipsecon.org/2012/sessions/harnessing-peer-code-reviews">talk on Gerrit</a> under the 'Harnessing
Peer Code Reviews' title.
a</p>

<p>Finally, there's a great intro to
<a href="http://www.eclipsecon.org/2012/sessions/xcore-ecore-meets-xtext">Xcore</a>,
described by (EclipseCon lifetime award winner) Ed Merks as "Ecore meets Xtext", as well as
<a href="http://www.eclipsecon.org/2012/sessions/building-guis-windowbuilder">Building GUIs with WindowBuilder</a>.
Eric Clayberg has been working on WindowBuilder since before its acquisition
by Google, and has recently become open sourced after having been
<a href="http://www.eclipse.org/projects/project.php?id=tools.windowbuilder">contributed to Eclipse</a>.</p>

<p>Don't forget the BoFs tonight, as well as GitHub's sponsored showcase and
reception.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[EclipseCon -- Thanks]]></title>
    <link href="http://alblue.bandlem.com/2012/03/eclipsecon-thanks.html"/>
    <updated>2012-03-27T19:00:00+01:00</updated>
    <id>http://alblue.bandlem.com/2012/03/eclipsecon-thanks</id>
    <content type="html"><![CDATA[<p><img class="right" src="/2012/03/PlanetAlignment.jpg" title="The planets have aligned" >
The planets have aligned! (Well, in this case, the Moon, Venus above to the
right and Jupiter leaving towards the bottom right.)</p>

<p>More seriously, I'd like to thank Lars for nominating me for the
<a href="http://www.eclipse.org/org/press-release/20120326_awardwinners.php">Top Contributor award</a>
and for everyone who has voted for me. It was a real surprise to me
as I didn't even know the nominations were there.</p>

<p>It's a pleasure to use and write about Eclipse and be part of the community.
I hope to continue on in the next decade in much the same as
<a href="http://alblue.bandlem.com/2011/11/ten-years-of-eclipse.html">the last decade</a>,
although hopefully I'll be able to make it back to an EclipseCon sometime
in the near future.</p>
]]></content>
  </entry>
  
</feed>

