Much ado about scripting, Linux & Eclipse: card subject to change

Showing posts with label workflow. Show all posts
Showing posts with label workflow. Show all posts

2010-02-18

p2 Repository Association And The Fine Art Of Forceably Enabling Disabled Sites

This week I've spent some time exploring how to associate p2 repo sites with other sites. The reason for this is that we publish features which depend on other publishers' features, and so would like to be able to have our update site automatically enable sites on which we depend in the end user's Eclipse.

The first attempt to do this was by using p2.inf files. Based on examples on blogs and in newsgroups, I added this p2.inf file into our BIRT Integration feature:

instructions.configure=addRepository(location:http${#58}//download.eclipse.org/releases/galileo/,type:0,name:Eclipse Galileo,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/releases/galileo/,type:1,name:Eclipse Galileo,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/eclipse/updates/3.5/,type:0,name:Eclipse 3.5,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/eclipse/updates/3.5/,type:1,name:Eclipse 3.5,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/birt/update-site/2.5/,type:0,name:BIRT 2.5,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/birt/update-site/2.5/,type:1,name:BIRT 2.5,enabled:true);
Unfortunately, this didn't work - I got this error while building:

 java.lang.IllegalArgumentException: No action found for: addRepository.

So, hoping that using a fully-qualified name for the action would help, I tried this:

instructions.configure=org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/releases/galileo/,type:0,name:Eclipse Galileo,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/releases/galileo/,type:1,name:Eclipse Galileo,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/eclipse/updates/3.5/,type:0,name:Eclipse 3.5,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/eclipse/updates/3.5/,type:1,name:Eclipse 3.5,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/birt/update-site/2.5/,type:0,name:BIRT 2.5,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/birt/update-site/2.5/,type:1,name:BIRT 2.5,enabled:true);

Success! The build no longer complained. Of course I wasn't getting any associate sites enabled when I added the new repo into Eclipse. Why, I wondered?

Thankfully, I was told that the now-deprecated Metadata Generator (org.eclipse.equinox.p2.metadata.generator.EclipseGenerator) doesn't support p2.inf files, so it was finally time to switch to Eclipse 3.5's Update Site Publisher (org.eclipse.equinox.p2.publisher.UpdateSitePublisher), which can be run like this as a drop-in replacement for the above application:

<echo>Run p2.publisher.UpdateSitePublisher using launcherjar = @{launcherjar}</echo>
<java jar="@{launcherjar}"
      fork="true" timeout="10800000"
      jvm="${java.home}/bin/java"
      failonerror="false" maxmemory="256m" taskname="p2">
 <classpath>
  <fileset dir="${builder.build.path}/plugins"
           includes="org.eclipse.equinox.launcher_*.jar, org.eclipse.equinox.p2.publisher_*.jar, org.eclipse.equinox.p2.updatesite_*.jar"
  />
  <fileset dir="${clean.eclipse.home}/plugins"
           includes="org.eclipse.equinox.launcher_*.jar, org.eclipse.equinox.p2.publisher_*.jar, org.eclipse.equinox.p2.updatesite_*.jar"
  />
  <pathelement location="${builder.build.path}/plugins" />
  <pathelement location="${clean.eclipse.home}/plugins" />
 </classpath>
 <arg line=" org.eclipse.equinox.launcher.Main -application org.eclipse.equinox.p2.publisher.UpdateSitePublisher" />
 <arg line=" -metadataRepository file:${updateSiteJarDir}/ -metadataRepositoryName "${update.site.product.name} ${update.site.description} Update Site"" />
 <arg line=" -artifactRepository file:${updateSiteJarDir}/ -artifactRepositoryName "${update.site.product.name} ${update.site.description} Artifacts"" />
 <arg line=" -source ${updateSiteJarDir}/" />
 <arg line=" -compress -publishArtifacts -reusePack200Files -configs *,*,*" />
</java>

Having switched out the deprecated app for its successor, I then discovered that using the instructions.configure touchpoint was way too late in the process to be of any use; this information is only used when you install the feature, not when you poll the repo for metadata. So to add the BIRT 2.5 update site I'd have to install the BIRT integration feature... which depends on the BIRT 2.5 site. I needed to inject this requirement in at an earlier point in the process.

So, the next step was to hit up #equinox-dev and ask for help, which I got from Pascal "LeNettoyeur" Rapicault, fellow IBM alumnus. He suggested that I append into the content.xml file in my repo the following information. Note that type 0 and 1 represent metadata repo and artifact repo, and options=1 or 0 is used to mark the site enabled or disabled.

  <references size='2'>
    <repository uri='http://download.eclipse.org/birt/update-site/2.5/'
url='http://download.eclipse.org/birt/update-site/2.5/' type='0' options='1'/>
    <repository uri='http://download.eclipse.org/birt/update-site/2.5/'
url='http://download.eclipse.org/birt/update-site/2.5/' type='1' options='1'/>
  </references>
</repository>

Success, I again thought, since the associated sites were finally being added and enabled into Eclipse when the repo was scanned for metadata. I even scripted this process so that it could be integrated into our build process, or simply reused, eg., to merge two update sites and add some associate site for optional feature installs.

But alas, every step forward brings another step backward, as I discovered that available but disabled sites are NOT enabled despite the instructions in the repo. In other words, I cannot force an existing, yet disabled site to become enabled because my repo requires it. I can only document the requirement and hope that users will RTFM without getting too annoyed.

So, what's the solution? Well, there currently isn't one. But if this scenario seems like something you'd like to see improved, please cast your votes & comments in one of these bugs:

2009-08-13

We Don't Need Another Repo

Re Wayne's blog about an Eclipse.org Maven Repo:

EMF has had an undocumented/unmarketed Maven2 repo for about 4 years now.

All you need is to take an update site zip, unpack it, rearrange the folder structure, and rename the jars. Then you create little XML files called .poms to describe the jars in the tree, and Maven-aware tools can read the tree. It's fairly trivial. http://download.eclipse.org/modeling/emf/emf/maven2/ is the URL, IIRC. About once every 2 years someone asks about our providing such a repo, and I give out the URL. Clearly not a huge demand for it.

One might argue that creation of such a folder structure is in the purview of Athena's publishing scripts, which today eases the process of copying your bits to download.eclipse.org, then unpacks your Update site so it can be scanned by p2 rather than downloaded as a single archive. It too is fairly trivial. I would not be adverse to converting my existing shell script for the EMF repo creation into a generic Ant script for use by Athena users.

Frankly though, I think it would be more valuable if the m2eclipse folks added support for reading/converting p2 repos. Publishing yet another file format would require another release-train-like workflow (we already have two: EPP and buckybuilder for Galileo) and more people maintain it. Even if every project published their own maven repo, we'd want for the sake of ease of use to aggregate them into a central place for easier navigation and discovery by maven tools. So, like with Ganymede, we'd have each project's bits copied to two places on disk for each build. (Galileo used composite repos to POINT at project repos rather than copying them saving tons of disk space and CPU cycles. AFAIK, Maven does not support this concept, but I could be wrong.)

There's also another benefit to having tooling to support converting from p2 repo to maven2 repo: the aggregate repo could be housed at apache.org and suck THEIR bandwidth and support resources instead. Thus just as Eclipse.org is upstream from Fedora's Eclipse project .rpms (which are upstream from Debian/Ubuntu's .debs), Eclipse.org p2 repos could be upstream from Apache's Maven repo(s). After all, Apache already collects maven artifacts for non-apache.org projects to facilitate the use and adoption of maven, so this is entirely in line with their standard operating procedures.

Thoughts?

Posted from Blackberry using Opera Mini, by the side of Shawnigan Lake, Vancouver Island, BC

2009-05-01

Just enough process

This entrace to a forested area in my neighbourhood used to be blocked by a fence with a chained gap wide enough to barely permit clearance for a bike, requiring me to duck to get through.

Recently, it was replaced with just enough of a barrier to prevent cars from getting in, without disrupting the flow or pedestrians, dogs, and cyclists.

Image

Sometimes a whole new approach can vastly improve how a community can gain access to resources.

2009-01-06

Blackberry Linux Mail, Calendar, Tasks & Contact Sync, Part 2

Things have improved since my last post, despite the fact that I managed to kill Thunderbird along the way and lost a good chunk of today figuring out to restore it. Luckily I can read French, or I may never have found the solution to the elusive -203 problem.

Aside:

To recover from a corrupt Thunderbird profile, create a new profile using thunderbird -ProfileManager, then transfer your data to the new profile. Easy-peasy.

Next, reinstall all your extensions. I use these 15 extensions.

I've also managed to get barry to work for backing up my Blackberry on Fedora. Turns out the problem is that it simply needs root privileges.

Here's how the data flows, drawn with JBoss Tools' jBPM Graphical Process Designer:

Image
click to enlarge

I don't yet have a solution for Zimbra contacts & calendar being accessible on the Blackberry, short of manually duplicating entries from one repo to the other. Still, 5 out of 7 data sources synched is pretty decent.

2008-11-18

HOWTO: Use the p2 Update UI to control where you install

A few months ago, I wrote about using the p2 director to control where you install plugins & features.

Here's the other approach I mentioned in that article -- using the p2 Update UI and a little filesystem trickery.

  1. Use the p2 Update UI (Help > Software Updates... > Available Software) to install what you want. When prompted to restart, click No -- DO NOT RESTART OR APPLY CHANGES.
  2. Open a console window and run ./moveInstall.sh foo 10 to move all plugins and features created in the last 10 minutes from ./plugins and ./features into ~/eclipse/eclipse-plugins-foo, then link them from ./dropins/foo.link.

    Note that the name, foo, is arbitrary -- it can represent the specific feature set you just installed (eg., "jet" for JET plus dependencies) or it could be something generic like "team", where I've got plugins for Mylyn, Tasktop, Subclipse, CVS, JIRA, and Bugzilla. You can also add/replace plugins & features in an existing folder by running the script again.

  3. Use the p2 Update UI (Help > Software Updates... > Revert Configuration) to revert the changes you just installed by selecting the timestamp of the configuration from BEFORE you installed the plugins & features in step 1.

    Since you moved the files when Eclipse wasn't looking, it simply removes the p2 metadata, but can't delete the plugins and features.

  4. When prompted, restart Eclipse. On restart, the new plugins & features will be loaded.

Because the new plugins & features are not in the Eclipse root, you can now use those plugins with multiple versions of Eclipse -- just copy the foo.link file into another Eclipse's dropins/ folder.

This is perfect for testing milestone builds without having to reinstall everything each time.

Of course it's so easy to do this in shell script I have to wonder why p2 can't do it under the covers so we can get back the old functionality from Eclipse 3.3...

2008-07-05

Visual Editor for Eclipse 3.4 Ganymede

There have been a number of questions in eclipse.newcomer lately about the availability of a visual editor for Eclipse 3.4 Ganymede.

So, I thought I'd see if VE 1.3 can be installed into Ganymede using p2 -- and in fact it's pretty easy to do.

As noted in VE Installation Guide, you can use the "Eclipse IDE for Java EE Developers"... but because I usually run with the Eclipse SDK, rather than an EPP bundle, I wanted to know what the minimum requirements are for VE, so I unpacked VE into Eclipse's new dropins/ folder, and started Eclipse with the OSGi console active, using this script:

#!/bin/bash
workspace=/tmp/workspace-clean-34
pushd ~/eclipse/34clean >/dev/null
if [[ $# -eq 0 ]]; then
        rm -fr eclipse $workspace emf-unpacked
        eclipse=eclipse-SDK-3.4-linux-gtk.tar.gz
        echo "Unpack $eclipse...";
        tar xzf $eclipse
        ve=org.eclipse.visualeditor-1.3.0.200709121813
        echo "Unpack ${ve}.zip into dropins"
        unzip -q ${ve}.zip -d eclipse/dropins/ve
        mv eclipse/dropins/ve/$ve eclipse/dropins/ve/eclipse
fi

vm=/opt/sun-java2-5.0/bin/java
echo "Using vm=$vm and workspace=$workspace"; 
./eclipse/eclipse -vm $vm -data $workspace \
  -consolelog -clean -debug -console -noexit -vmargs \
  -Xms128M -Xmx256M -XX:PermSize=128M -XX:MaxPermSize=256M
popd >/dev/null
What I found was that the console listed all the missing dependencies for the VE feature, making it easy to find the features I needed to install to fully enable VE. I fired up the Help > Software Updates and installed the following from the Ganymede Update Site: Image

On restart, I had a working visual editor: Image

2008-05-01

Welcome To The Machine

Looking for concert tix at Ticketmaster tonight, I got to talking about reCaptcha w/ SWMNBN, and found this video. Take a look.

Web 2.0 ... The Machine is Us/ing Us

In related news (or lack thereof), Terminator: The Sarah Connor Chronicles has not yet been picked up for a second season. C'mon, FOX, surely Summer Glau beating people up trumps another *freakin'* season of Family Guy or American Dad??

2008-04-26

Synch View Magic

Earlier this week, I opened bug 228701 asking for Mylyn filtering on the Synch view. (Please vote if you agree.) This afternoon in #eclipse-dev, Eugene pinged to ask why I don't simply use the Change Sets presentation in the Synch view, and Boris chimed in to tell me about bug 143419, "Strange tree rendering in synchronize view". Strange indeed.

I agreed I'd document my experiences with this view, but because Bugzilla is undergoing maintenance at the moment (thanks to our tireless webmasters!) and I want to share it while it's fresh, here's my account of how to make files vanish from the Synch view, though Mylyn continues to track them.

DO try this at home, as magic tricks in Eclipse are rare (e4 demo at EclipseCON with spinning views & scriptable UI elements notwithstanding), and this one's pretty cool.

Steps to reproduce

  1. Install the latest Eclipse 3.4 I build (I've got eclipse-SDK-I20080422-0800-linux-gtk.tar.gz.)
  2. Install Mylyn from its update site (mylyn-2.3.2-e3.4.zip).
    DO NOT unpack it first, just give the URL to Eclipse's new p2 / Install Manager or download the zip and hand it that. If you unpack it first, p2 doesn't seem to know how to find the features therein. But I digress...

    Image

  3. Check out some CVS project into your workspace. I used :ext:[email protected]:/cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.releng, from HEAD.
  4. Open Mylyn's Task List view (Shift-Alt-Q, Q). Create a new Local Task or open an existing Bugzilla task. Enable the task.
  5. Unfilter the Package Explorer view.
    This is one of my *very* few complaints about Mylyn -- I'm starting a new task w/ no context, yet it insists on filtering my view to show me my non-existent context, so I can't start selecting files on which to work until I unfilter the view. But I digress again...
  6. Open the Synchronize View (Shift-Alt-Q, Y).
  7. Configure the view as shown below:

    Image Image Image Image Image

  8. Image In the Synchronize view, select the Change Sets presentation (the toolbar icon that looks like a file tree).
  9. Image Create a new Synchronization. Type CVS, Resources to synch: Workspace. Hit Finish.
  10. Open some files in the Package Explorer view, and edit them. Watch as they appear in the Synch view as items under your Change Set (ie., as changes for your Local or Bugzilla Task)
    It would be nice if the Change Set title included the bug number, or could be configured the same way that commit comments can be. Not crucial, just a handy enhancement. For now, the task's title is sufficient.
  11. Pick some file in the CVS-backed project and copy it within the same folder. Notice how it appears in the Synch view as an outgoing addition.

    Image



  12. Here's where the magic trick starts. Made sure your audience is still awake.

  13. Disable your Task.
  14. Copy some file (could be the same one as before, or a new one -- doesn't matter as long as it's in a CVS-backed project. The new file will appear in the Synchronize view under a new <Unassigned> Change Set.

    Image

  15. Re-enable your Task.
  16. In the synch view, select the new file from under the <Unassigned> Change Set.
  17. As you select the file, it will be added to Mylyn's context for that task, and appear in the filtered Package Explorer. Note however that it didn't change from the <Unassigned> Change Set to your Task's change set. So begins the magic.

    Image

  18. Image In the Synchronize view, select the Workspace presentation (the toolbar icon that looks like a file tree).
  19. When you expand the tree, you'll see that your new file does appear as you'd expect. This tree should mirror what's in the Package Explorer (as in previous screenshot).

    Image

  20. Image Switch back to the Change Sets presentation, and get ready for your exit with flourish.

    Image

  21. Lo, that new file has vanished!

Image

Image from Happy Tree Friends - I Get a Trick Out of You.
Courtesy of Mondo Media / YouTube. Used without permission.

2008-01-29

Alice in Change

Still more changes & news to report:

  • With the explosion of new projects and components in Modeling, do you find installing all your bits to be increasingly a bit of a chore, even with Update Manager? Then come check out the Modeling Amalgamation Project proposal review tomorrow @ 1500 UTC!
  • Are you textually active? The drop by the Textual Modeling Framework proposal review, also tomorrow @ 1500 UTC!
  • Ever wondered why the EMF project uses Bugzilla's ASSIGNED state to mean "fix in CVS", and RESOLVED:FIXED to mean "fix available in a build?" Wonder no more. We've switched to a more logical workflow, using RESOLVED:FIXED and VERIFIED:FIXED and silently moved all the old bugs to VERIFIED to help with cleaner queries. For details, see bug 206558.

2007-11-12

Password Reset Hell

My Notes password expired on the weekend. November 11th, in fact. Apparently the 'lest we forget' messages about WWI and WWII this weekend made me forget about the triviality of my password expiry. Oops.

So, I logged in this morning to discover I couldn't get on my VPN network. Called lab IT support. Was told to talk call Corporate support, via the 888 number.

No, they couldn't just forward me there. No, there's no IVR automated option for 'Password reset' which auto-forwards my call there.

So, I called the 888 number, and got 4 options, none of which fit my problem. You'd think this would be a FAQ and thus merit a menu option, but apparently not.

Tried the "other resets" option, which tells me to use a website which I can't access because it's behind the VPN firewall. Woo, circles.

Backed up one menu and tried the password reset option for the old AT&T VPN client, which generated an email sent to me (which I can't access as I can't get on the VPN) and to my manager. Manager pinged acting manager, who pinged me on IRC. Thank the gods I managed to convince him to lurk in #eclipse-modeling!

End of story? Hardly. Password didn't work.

Called lab IT support again. Explained problem. Told to call the 888 number again, but this time pick 'Notes password reset' and then speak to a human. Why is 'VPN password reset' hidden under 'Notes password reset' in the IVR menu? Good question.

Called 888 again, chose the Notes option, and was told "for Notes password resets, go see the website ... or, if you tried that and it didn't work (way to instill confidence there), stay on the line and we'll let you talk to a human." (Yes, I'm paraphrasing.) Sat on hold about a minute. Got a human, who reset my password. Woohoo.

Manager pinged acting manager who passed it on to me and this time it worked. Logged into VPN. Story over? No, it gets better.

Fired up Notes. Notes password had expired (Notes has been nagging me for a week to reset my expiring password, but I didn't get any reminders about my VPN password's expiry, and had forgotten that they now expire on the same schedule). So, I can't check mail until reset the password. Used the new one so that they'd be in synch and expire together. All is well?

No, not yet. Checked mail. Found note with new *temporary* password in it, expiring in 24hrs. Damn, gotta pick a new one. Went to password reset website to set new password. Stored new password in password store for safekeeping.

Now I have to reset my Notes password again so that it's the same as the network one. Click File > Security > User Security. Prompted for password. Click Change Password. Prompted for password again. Why do I need to enter my old password three times (at login, to access security options, to change password) to change it? Good question.

An hour of productivity lost, including 4 phone calls and wasting the time of both my managers, just to reset a password. Must be Monday.

2007-10-19

The Three Laws Of Eclipse

Bjorn just posted his first draft of The Three Laws Of Eclipse, ostensibly in response (in part anyway) to my perceived piercing from yesterday. Clearly not everyone was amused by my attempt at levity, and for that I'm sorry. That was not my intent.

In my humble opinion, The Three Laws is *EXACTLY* what we need. Something simple, concise, and easily referenced. (Unlike the rambling blog entry that will now follow.) ;-)

A couple of years ago I took a course about presentation skills called Think on your Feet (developed by McLuhan & Davies -- yes, that McLuhan), and one of the big things it stressed was what I'll call 'the rule of three':

  1. Three bullets to a section, three items on a slide.
  2. Three aspects of a topic (points in time, degrees of complexity, etc.).
  3. Three parts of a talk (intro, content, summary).

The human brain works well with the number three, for many reasons I won't bore you with. If you have a chance to take the course, I highly recommend it.

The reason I mention it is because the 'Three Laws of Eclipse' works perfectly in tune with the guidelines from that course -- you have three major rules, and the rules break into no more than 3 subpoints. This would work great as a powerpoint (for execs, PMCs, ID people, lawyers, policy people) and also as a quick wiki/webpage, as currently formed (for the geeks). Different audiences, different format; same content, same themes.

Because it's simple, it's memorable. Because it's memorable, it will stick with people.

And because it will stick, we'll stop feeling that the rules change too often. Or that there's too many.

Just for the sake of contrast, have a look at this 29-section legal-ish-style document.

Now, look at this page, where we find an explanation and history (in the linked bug) about why the document was changed, and everything relevant is conveyed in 3 (well, 4) easily-digested sections.

As a side note, perhaps annual changes aren't too often. As David says, the need for change is normal. Perhaps, as Mik points out, the problem is communication. This is IMHO twofold:

a) announcements of changes are not communicated to Joe Average Committer -- this could be my fault for not being subscribed to the right mailing list. Should these be done on cross-projects-issues-dev@ and/or the eclipse.org-planning-council@ lists? Or as a committer-wide announcement like the notes Denis sends once in a while about outages and new infrastructure? I'd say all of the above.

b) changes (due to (a)) seem to happen without a stated reason for the change. Again, this could be just the way my brain works: I need to know WHY a change is happening, even after I've accepted it's a good thing. And I need to be able to easily look up when and why so that when I've forgotten something (as I am wont) I can be shown the error of my ways by my own search or that of a friendly reminder from Bjorn. (This works both ways -- I nag Bjorn, he nags me, and over time we both fix things and improve. Win-win.)

So while I could probably pull the CVS history of documents and see when/why, it's not nearly as friendly as having a quick note sent to the committership at large saying "this rule has been changed from ___ to ___ because of problems with ____ so we're trying a new approach this year." Or better, having a bug to point at, like this page with this bug.

Oh, and just in case anyone out there thinks that from up on this pedestal of mine I don't strive to practice what I preach, contrast before with after, when I realized that the Modeling Releng doc had gotten too big for wikipedia to handle it, much less human users. (It's still too damn big, but hopefully more manageable when chunked up into smaller docs.) I'm open to suggestions if you have a better way.

Seems that 43 years later, it's still true. The way you convey information is often more important than the information itself.

2007-10-05

Burn The Evidence

I recently graffiti'd the Eclipse Planning Counncil Agenda with my $0.02 because I saw something I felt was incorrect. Not being one to posture and postulate wildly w/o facts to back myself up, I also created this supporting document: EMF 2.3 Plan History.

Why? Because on a recent blog entry, Bjorn brought up some excellent suggestions about having a good communication strategy so that your consuming teams (users, developers) can properly be made aware of lumps in the gravy.

At first I was annoyed, because I thought he was throwing rocks at EMF. But because I know we did damn near everything but sending up smoke signals to get the message out, I'd like to instead underscore all the places you can document and announce your plans to help grow your community:

  • Architecture Council (meetings + minutes on website)
  • Planning Council (meetings + minutes on website)
  • Europa/Ganymede meetings (meetings + minutes on website)
  • website (4 places: home, news, downloads, docs -- reuse information widgets or database content to be able to inform people in many ways)
  • Eclipse wiki (project page, project category page)
  • project newsgroups -- don't be afraid to cross-post to related newsgroups
  • Cross Projects mailing list (cross-projects-issues-dev@)
  • Planning Council mailing list (eclipse.org-planning-council@)

We have no favourite channel. We use them all. Sure, it's a lot of work and could be construed as overkill, but IMHO it's worth the cost because it shows project maturity and respect for the people who use your code. Need a more instant-gratification or cost-benefits-analysis rationalization than the warm-fuzzy-feelings one? How about free testing? Tell people about your planned changes and they can adapt faster -- and give you feedback sooner.

Oh, well, time to crank up some Billy Talent and let the weekend begin.

2007-09-12

Compare Different

In my role as the weekend webmaster for Rainbow Cinemas, I have on occasion the need to compare local and remote (ftp or ssh) files between my staging server and the production website; I also have to compare files between my local Eclipse projects and my local CVS repo, to see why and when changes were made.

So, what do I use? Well, I run KDE on my MEPIS box, so I've set up Konqueror profiles for the various admin tasks I need to do. For the web, I split a Konq window into four panes and can drag/drop files between local and remote, and also compare local and remote versions of the site.

Image

When diffing files, I use Beyond Compare 2 (or Cirrus, their new beta), and have quite enjoyed it since the dark ages (circa Eclipse 3.0) when I first joined the IBM Toronto Lab (which isn't in Toronto anymore, but I digress). It's my not-so-secret weapon for releng work, web work, java work, ... really, everything. BC supports comparing/synching from local to a remote FTP site, but in most cases I find it slow as it has to download all the remote files, compare them to the local ones, and update the view. It's handy for single file compares or small folder compares, but doing entire trees requires a lot of patience as it builds the diff tree. So, more often than not, I just use Konqueror for swapping files back and forth, since its ftp and fish ioslaves rock. (This is perhaps the biggest reason I won't change to another wm like gnome or xfce.)

I can be pretty jaded sometimes when it comes to trying new software, especially if I've grown happy and complacent using a set of tools that I find work well. Switching to something new doesn't necessarily mean finding something better; often it just means time wasted and functionality lost.

While it's cool to use a mix of tools, sometimes it's nice when you can do everything in a single IDE. So, to that end, this past weekend I started playing with DSDP's Target Management (TM) offering. Very cool. It doesn't do folder compares yet, though there's been some talk about how that could be implemented either at the Eclipse Compare level or at the DSDP-TM level. I like being able to finally browse remote files within an Eclipse view (rather than in Konq or Konsole), but the absence of folder-to-folder comparison makes TM a bit of a non-starter for me, so far.

So, to that end, I opened bug 203001 to see if folder compares were possible, and now I'm realizing that it's both not a trivial thing to implement and also introduces some philosophical questions about "derivative work", "ethical competetion", "changing your business model" and "reinventing the wheel".

If there's a commercial piece of software, like Beyond Compare, with a superior (IMHO) diff engine, should they be persuaded to contribute to Eclipse? The current version of BC can be launched from inside Eclipse using Beyond CVS, and it does the job when Eclipse's internal compare isn't enough. But it's not a plugin, nor does it integrate into the IDE. It also requires WINE, but this is being addressed in Cirrus (BC3), with a linux-friendly qt version.

But should Scooter provide their code to Eclipse, and potentially lose customers in order to make Eclipse's Compare better?

If they did, they could grow their market share and get some good PR, but they wouldn't sell licenses. They could instead switch to a donation/swag model, I suppose.

Or they could sell a standalone RCP app version with just their compare stuff in it, so people could choose between the free integrated-in-Eclipse version and the paid standalone version. Problem is, integrated in Eclipse is much more useful IMHO so I'd think that would be a non-starter too.

What would you do, if you were were Scooter?

Conversely, if you were a committer for Eclipse Compare or DSDP-TM, how much functionality in BC would you attempt to recreate, given that you're reinventing the wheel, and that by giving it away for free you're taking business from a small company who's been in the biz of compare for years. I mean, sure, it would be great if all the functionality of BC was in Eclipse so that IBM could build on it and sell product based on it, but personally I'd feel a very dirty if by opening a feature request against DSDP-TM / Eclipse Compare I was helping IBM make money at the expense of all the good work Scooter has done over the years to make my life (and my job at IBM) so much easier.

Me, I'd just like to see a way to hook in different compare engines (eg., via a plugin like Beyond CVS), but is doing the work to allow what's in Eclipse Compare to be replaced by something else in Eclipse's best interest?

Yes, there'll always be competition in the marketplace, but how does a community like Eclipse compete ethically in a situation like this? And if open source is about enabling business to succeed faster/better/smarter/whatever (among other motivations), how do small companies survive if their product gets replaced by a free open source alternative? Does anyone have experience with their product being "Eclipsed" by something free?

Blogged with Flock

2007-08-27

Notes 8: Part 3: M'aidez!

After much digging and hacking I've found a number of places to go for help with the newest Notes offering. That's the good news. Usability score: +1

The bad news is that if you're like me and used to tracking bugs a la Eclipse Bugzilla or Sourceforge, you will be sorely disappointed with the options for bug reporting for Notes 8. Usability score: -1

I hate to bite the Big Blue hand that feeds, but there are much more efficient tools & processes to manage software development than the use of a discussion forum. Sure, it's a case of eating your own cooking +1, but I've used lots of Notes databases in my 8 years with IBM that were more user-friendly than this -1. Why is using Bugzilla (or sourceforge's tracker) such a big deal?

Well, for one thing, they're transparent, open source systems. For another, using a system like Bugzilla provides consistency across dev teams. Notes 8 is proudly 'built on Eclipse' +1 but hasn't adopted the Eclipse Way yet for issue tracking, so developers that work both sides of the fence (like myself) have to learn more than one system and in some cases, report issues in more than one place -1. So much for the mantra of 'do more with less'.

Anyway, here's a couple places to go for help, which it turns out are all linked from within Notes 8 itself under the Help menu (unless you're on the Getting Started page or a web browser tab, in which case they magically disappear) +1 -1.

  • Notes/Domino 8 Support Forum

    Well trafficked, but a bit of a pain to use -- cannot attach screenshots or log files without the use of some free service like imagebin.ca or pastebin.ca; cannot view an entire expanded thread in one page; follow-ups may be posted anonymously (as far as company name goes, anyway) so there's no enforced accountability; 4 different ways to search for my posts (only two produce results, albeit differently) +1 -4

  • Product Feedback Form

    This form proudly states "We value and review all comments, but cannot respond directly to them." +1 -1

Here's a few handy blogs +3:

Now, just in case it's perceived that I'm actively trying to embarrass or offend, I'm not. Let me clarify:

  • I blog to talk about things I like and things that bug me, with hopefully some balance between the two. By showing the things that bug me, it's my hope that those annoyances will be fixed, or that someone will share a hack / workaround, or prove me wrong. By talking about the things I like, I hope to encourage others to try those technologies or use a hack I've worked out. I'm a tester by nature, and I want software to work well. Think of me as the Penny Arcade of usability nerds, without the advertising, merch, comics, and clever dialogue. Oh, and the shipments of free software. And the write-ups in Wired. And 7-figure income. Yep, just like 'em.
  • I've signed up to be a Usability Tester for Lotus. Time will tell what that means.
  • And, as it's better than a boot to the head, I plan to hang out in the forum and try to help out as best I can. Of course this will also yield some of my own bug reports discussion topics from time to time, but it's all about balance.

As always, the contents of this site are my own and don't necessarily represent IBM's positions, strategies or opinions.

2007-08-20

Notes 8, Part 2: Great Personality

Today I decided to upgrade my mail template from Notes 7 to Notes 8:

  1. "Open" Menu > Favorite Bookmarks > Workspace
  2. Right-click your Mail icon (Your Name on Local).
  3. Application > Replace Design...
  4. Choose the Mail (R8) template.

After the update, I discovered some cool* new usability gotchas:

  • Inbox layout corrupted; had to restart Notes. Fine after restart. Question: if this is a "Built on Eclipse" tool, why not just prompt me to restart, like any other Update?

    Image

  • The option to default-sort my inbox in 'order arrived' appears to be gone.
  • When first opened, my inbox now shows me my 5 month old mail at the top of the box, rather than my most recent arrivals. Clicking the date column sorts in reverse, but puts the selection at the bottom of the box so I have to scroll back up to see today's mail. Oy.
  • I can't column sort up AND down anymore, just in one direction.
  • Down the left, the Folder icon & its accompanying text can be clicked to open... but only the icon can be clicked to close. The Tools menu, however, only opens/closes via the icon. In both cases, however, the cursor becomes a hand over the text even if clicking it does nothing.
  • If you scroll-wheel over the inbox scrollbar, it will move up and down without moving the inbox contents; scrolling in the inbox itself (not over the scrollbar, over the contents) does move the content (and the scrollbar too). Clicking and dragging the scrollbar also works. Related to this, I can scroll up and down in the SameTime contacts widget, but when I pick someone's name, it always jumps back to the top and I end up selecting a completely different person. (This seems to only happen after the initial startup; after that it's fine.)
  • In the screenshot below, note the completely useless tooltip telling me that my cursor is over the 'preview pane'. Uh, thanks.

Image

zx suggested I have a look at the OS theme (File > Preferences... > Windows and Themes > Theme > Operating System Theme). I wonder if this ability to reskin SWT will be donated back to Eclipse one day. This is pretty cool, since it means I can reskin Notes by just changing my KDE preferences. Very cool.

Image

Anyway, as I said the other day, I'm pleased with Notes 8, despite its usability gotchas great personality. It's the little touches that make the Notes experience so very unique. ;-)

* Why cool? Because while being odd, they're quirky enough to be entertaining, yet not annoying enough to be character flaws.

2007-08-18

Notes 8: Better Than Notes 7, Still Room To Improve

Notes 8 has been released, and because I know people who know how to get things, I've managed to score a copy to try it out. Compared to Notes 7 and its less-than-Linux-friendly forebears, Notes 8 is an absolute delight to install as an upgrade to Notes 7.

  1. Download zip & unpack
  2. $ sudo su
  3. # chmod +x setup.sh; ./setup.sh
  4. # exit
  5. $ /opt/ibm/lotus/notes
  6. Configure Notes (same as in Notes 7)

Image

However, putting on my Usability Police hat...

  1. The installer still doesn't create a K-menu shortcut -- though that's a KDE-needs-to-reboot thing. It also doesn't create a desktop shortcut, presumably because RHEL and SLED (the officially-supported platforms) put their users' desktops in different places than the MEPIS/Kubuntu convention of ~/Desktop or because no one's ever thought to ask root where to create the .desktop file. Also, there's no notes.png for me to make my own shortcut, just a notes.ico (which can easily be converted with GIMP, but still).
  2. Databases are now called "Applications". Why? Search me -- after 8 years of using Notes mail & application databases, not enough people were confused by the concept, so it was time to rebrand. This begs the question -- if my mailbox is now my Mail Application, wtf is Notes itself? My Mail Application Application?
  3. I created a custom 'Home' page involving two frames -- Inbox & Calendar. It accepted it & saved it, but then didn't display it -- just the 'welcome to Notes' page. Then, I hit 'just give me the default' and my page appeared. *Weird*.

    Image

  4. Notes 8 still features the Workspace, but it didn't find any of my existing Notes 7 databases (even though they're referenced in the same folder), so I'm going to have to recreate all those all over again (as I did when moving from Notes 6 to 7). The good news is that the Workspace is now pretty much irrelevant because the "Open" menu / Bookmark Bar provides about the same functionality, without the ugly (albeit colourful) Workspace tabs.

    Image

  5. File > Import still only works with structured text and Lotus 1-2-3 spreadsheets. Why can't I migrate from an old Workspace or Desktop file to a new one?

Usability issues aside, here's some of the new features I discovered:

  1. Notes 7 was built on Eclipse 3.0.2. Notes 8 leaps ahead two years and is built on Eclipse 3.2.2, including EMF 2.2.2, GEF 3.2.2 and XSD 2.2.2. Strangely, it includes PDE and JDT too, not just the RCP and platform stuff. Why? No idea.
  2. Notes finally remembers non-Notes (Internet) addresses when composing an email!

    Image

  3. Browser settings are now global, rather than per-Location.
  4. The "Office" location is now called "Online", which contrasts better with the "Offline" location (previously called "Island"). Kudos on finally using the same terms as all other mail clients with this capability -- though I still prefer the way Netscape Mail (and now Thunderbird) handles the "Work online/offine" toggle, with its "plugged in / unplugged" icons.
  5. Preferences are no longer split into multiple submenus (File > Preferences > Location Preferences, File > Preferences > User Preferences) -- instead, they're in one centralized multi-page Eclipse-like Preferences dialog. However, File > Security > User Security is a still separate preferences page. Mail/Calendar settings are still done within that database (which makes sense because those are per-database, not global).
  6. I can run Notes 7 and Notes 8 at the same time -- which is handy because I have to manually recreate all my "Applications" in my new Workspace. However, running Notes 7 on the same desktop/workspace file messes up Notes 8 (see below).
  7. UPDATE: The SameTime (7.5.1) / Day-At-A-Glance / (RSS) Feeds sidebar rocks. Turns out that yes, you can break it apart (Open In New Window) or reorder the views, despite my previous comments. Oops. It also remembers where I left it (including detached SameTime window).
  8. The new "Open" menu can be modified by simply dragging shortcuts around to reorder them. How do you add a new shortcut/bookmark? Open some application/database and select Create > Bookmark, then put it in your "Bookmark Bar" (aka "Open" menu).
  9. There's a new "Show Thumbnails" button next to the new "Open" menu, which is a neat feature, but about as useful as the password entry box's distracting/changing "keychain" icon and "XXX = one typed char" protection system (image above).

Unfortunately, things got a little hairy after trying to run Notes 7 and 8 at the same time:

  1. I shut down Notes 7, but now my Notes 8 Workspace was blank. Notes 8 itself wouldn't shut down, so it was time for some killall eclipse java. That didn't work either, so I had to kill -9 the notes2w process.
  2. Now, Notes 8 wouldn't start -- instead I got this li'l beaut':
    This software has encountered a problem and needs to close.

    Then this, slightly more educational (though equally useless) message:

    Failed to login
    CLFRJ001OE: Notes initialization failed

    And finally, this console log:

    2007/08/18 01:19:55.328 CONFIG eclipse.buildId=build20070731-1521
    java.fullversion=J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223ifx-20070714 (JIT enabled)
    J9VM - 20070713_13151_lHdSMR
    JIT - 20070109_1805ifx5_r8
    GC - 200701_09
    BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US

    Framework arguments: -dir ltr -personality com.ibm.rcp.platform.personality -product com.ibm.notes.branding.notes -plugincustomization
    /opt/ibm/lotus/notes/framework/rcp/plugin_customization.ini
    Command-line arguments: -os linux -ws gtk -arch x86 -dir ltr -personality com.ibm.rcp.platform.personality -product com.ibm.notes.branding.notes -data /home/nickb/lotus/notes/data/workspace -plugincustomization /opt/ibm/lotus/notes/framework/rcp/plugin_customization.ini ::class.method=com.ibm.rcp.core.internal.logger.frameworkhook.writeSession() ::thread=main ::loggername=com.ibm.rcp.core.internal.logger.frameworkhook
    2007/08/18 01:20:00.706 SEVERE CLFMW0008E: Error returned from bootstrap dll during init call. Closing down the client ::class.method=com.ibm.workplace.noteswc.NoteswcPlugin.writeToLog() ::thread=main ::loggername=com.ibm.workplace.noteswc
    2007/08/18 01:20:06.009 SEVERE CLFMW0030E: Error Initializing Notes, Check the logs for details of the error ::class.method=com.ibm.workplace.noteswc.NoteswcPlugin$1.done() ::thread=main ::loggername=com.ibm.workplace.noteswc
    2007/08/18 01:20:06.513 SEVERE CLFRJ0013E: Notes initialization failed ! ::class.method=class com.ibm.workplace.internal.notes.security.auth.NotesLoginModule.initialize() ::thread=ModalContext ::loggername=com.ibm.workplace.internal.notes.security
    2007/08/18 01:20:08.199 WARNING CWPST0306W: Exception calling proxy method ::class.method=com.ibm.rcp.internal.security.AbstractProxy.invoke() ::thread=main ::loggername=package com.ibm.rcp.internal.security

    java.lang.reflect.InvocationTargetException
    ...

On restart, I had a shortcut in K-menu > Office, and Notes 8 once again worked and let me log in, even without being VPN'd (though the built-in SameTime 7.5 client complained about not being able to connect, as I'd expect). Too bad there's no Zap Notes 8 available yet. UPDATE: To Zap Notes 8, just run nsd -kill.

CONCLUSION: After 3 and a half hours of poking at it, I'd say at this point Notes 8 is visually and functionally better than Notes 7. It's easier to install, adds some nice new features, doesn't introduce any significant annoyances, fixes a few old issues, and stays true to its roots. Kudos!

2007-08-14

Notes 7: Crash Different

Like a fool I spent 30 mins composing a detailed email this afternoon in Notes, including colour, font styles, and tables. Why a fool? Because any time I'm busy doing something in a java-heavy application and haven't saved it lately, it dies. I just have this gift, apparently. Anyway, tout à coup and as if on cue, Notes died on me. I couldn't edit, save, or exit. I could however see my wallpaper. Go, go, gadget UI thread!

Image
Glacial Potholes in Shelburne Falls, MA, as seen through Notes 7

It was time to zap Notes and restart. Amazingly, I only lost a few minutes worth of editing. Why?

File > Lotus Notes Preferences > User Preferences ... >       Basics > [x] AutoSave every [n] minutes

Image

I didn't know Notes had this feature, but I was very glad to discover it there today. Notes 7 may still crash fairly often on me, but at least it's made the experience less painful than before.

2007-07-11

Windows: A Survival Guide

*ponderous sigh*

After several months of enduring painful multi-monitor support (like cursor rendering problems and the inability to have monitors at different resolutions) and even more painful support for LEAP (for wifi access at work) ... I've finally given up on Linux on the Laptop and gone back to Windows XP.

This comes at a time when I no longer have my own cube at the Lab, because as Wassim puts it, I'm now "working from exile." Ed and I have elected to go mobile to save Big Blue some real estate costs (and to *cough* help the environment by staying home more).

Along with our switch to mobile status, Marcelo and Dave have moved too. They were made to give up their windows in D3 and now sit in Upper Middle Cube-land over in B3. So, to preserve the balance in the universe, Marcelo and I have gone back to Windows. (For those keeping score, that's 2 down, 2 up.)

Today was my first day at IBM without my own cube, sweet cube. Because of the aforementioned LEAP problems and because I no longer have a second monitor keeping my desk from blowing away in the breeze, it was time to revisit my Windows partition. I spent a portion of the afternoon setting up cygwin for the first time, including apt-cyg (a commandline way to update cygwin a la apt-get from the Debian/Ubuntu world). Then, in order to faciliate migrating my desktop settings from my linux partition into cygwin, I discovered Ext2 Installable File System For Windows.

This kicks ass and almost makes life in Windows bearable. It supports both ext2 and ext3 (if properly unmounted), and allows me to read & write into my linux partition via a mounted drive letter (though I haven't dared to try writing to it yet!). With this I can browse naturally w/ Windows Explorer or even with cygwin.

Next up to install was Pidgin, aka Gaim 2.0, which now supports Sametime natively, and imported my old Gaim 1.5 settings & buddy lists automatically... except where it lost my IRC buddies/chats and forgot which plugins I had enabled. Meh, close enough. Interface is a bit cleaner than the old Gaim 1.5, but I don't like the new icons.

Anyway, all the apps I use daily are back, bar one:

  • Mail/IM: Gaim + Meanwhile -> Pidgin; Notes 7; GMail; Thunderbird
  • Web: Firefox 1.5 or 2
  • Development: Eclipse 3.3 w/ phpeclipse, shelled, eclipsecolorer, mylyn; Cirrus or Beyond Compare w/ WINE -> Beyond Compare 2; (g)vim/Kate -> EditPlus
  • Console: Konsole --> cygwin console
  • Filesystem: Konqueror --> ???

Does anyone know of a filesystem browser that works for Windows that allows pane splitting and supports tabs & ssh? Anything's better than Windows Explorer, but I really miss Konqueror!

Maybe I'll have to play with Cygwin/X to see if I can get Konq back that way...

2007-06-23

And Now For Something Completely Different...

Much like Ian's post the other day, I've always wanted to blog that line. Anyway, it's been brought to my attention that of late I've been apparently posting less-than-positive things about Eclipse, so to balance that out, here's my top three cool UI features in Eclipse 3.3, in order from oldest to newest:

#3: Use PDE UI to generate an Ant build.xml script for a plugin project

This has been around for years, true, but it's certainly top on my list of time-savers. Here's a quick HOWTO for taking a plugin and ending up with a versioned, Update Manager-compatible OSGi bundle.

  1. Create, import, or extract a plugin project from CVS.
  2. Right-click the plugin's plugin.xml and select PDE Tools > Create Ant Build File.
  3. Open the Ant view (CTRL-3, Ant or SHIFT-ALT-Q,Q > Ant) then drag the newly-generated build.xml into that view to see all the available targets. It's like the Outline view, but you can launch targets by double-clicking them.
  4. Double-click the build.update.jar target to run that build. You should see a new jar created in the root of your plugin project. (If you don't, select the plugin project's folder in the Package Explorer, Project Explorer, or Navigator view, and hit F5 to refresh.)
  5. You can run other targets, like src.zip to create a source zip, or edit them to suit your needs. If you delete the build.xml you can always regenerate it from the latest template.

#2: Use Package Explorer + Working Sets + Filters to clean up your view

I've been using these for at least a year by now, but only recently discovered that they behave differently in the Package Explorer than in the other filesystem views, like Navigator and Project Explorer. The best by far, for me, is the way the Package Explorer does things. Here's a shot of how one of my rather project-heavy workspaces looks in the Navigator view, compared to the Package Explorer with Working Sets set as my Top Level Elements:

Image

To make this work, open the Package Explorer view, then click the menu icon (an arrow pointing down in the top right corner of the view -- I'll just call it Menu for simplicity). Here's a few things you can do to alter your view:
  • Toggle Working Sets / Projects:
    Menu > Top Level Elements > {Working Sets | Projects}
  • Select what Working Set(s) to show (when TLE = Projects):
    Menu > Top Level Elements > Projects, then
    Menu > Select Working Sets...
  • Select, create, edit, or delete Working Sets (when TLE = Working Sets):
    Menu > Top Level Elements > Working Sets, then
    Menu > Configure Working Sets...
  • Hide closed projects, empty packages, libraries, non-Java files, etc.:
    Menu > Filters

#1: Use Autopin UI Tweaklet to manage open editor tabs

This is my most recent discovery, and once you get used to it, a great new way to manage editor tabs.

First, download & install the Tweaklet plugin(s) from either the Platform UI Incubator downloads or updates site.

Then, marvel as a whole new way of working with tabs is revealed: you only ever have one tab in use until you start editing that file. When you do, the Autopin tweaklet automatically pins the tab, and subsequent files are opened in a second one, then a third, and so on.

Like Working Sets, this is also fantastic when dealing with massive workspaces or when you have a lot of files that reference other files. Eg., when drilling down from one Java class into another and into another to find the method you need, or for PHP scripts that include() or require() others, again, looking for methods or variable declarations, or even in concert with the full-text search (CTRL-H, first tab) to find that elusive build-related metafile which needs to be fixed, without ending up with 20 open files. Kick ass.

The bottom line here is that there's lots of hidden features in Eclipse to make your life easier and your work more efficient. And because we all work a little differently, there's lots of ways to tweak the way the UI behaves to accomodate all our differences. Eclipse is you? Aye!

2007-06-04

Managing Plugins and Features with Link Files and Extension Locations

After loitering and latering (but no lootering!) in IRC for a few hours today, I've come to the conclusion that not enough people know about .link files. I guess I could wiki this, but I thought I'd blog it instead.

Scenario 1: You're an Eclipse user. You use Eclipse a lot. In fact, you use multiple versions of Eclipse for testing, debugging, and even *gasp* developing. You waste a ton of time unpacking zips and running Update Manager.

Scenario 2: You use Eclipse and occasionally do something silly like deleting files outside of Eclipse or updating CVS files using commandline CVS instead of the click-click-wait method in Eclipse. (This is usually not a problem, but can sometimes lead to ...)

Scenario 3: Something Wicked This Way [Came] and your Eclipse has become corrupt. It's time to blow away your config files, .metadata files, or run with -clean. If that doesn't work you probably have to reinstall (oh crap) everything -- Eclipse + all your trusty plugins. You could also copy carefully from the busted Eclipse to the minty-fresh one, but that's both time consuming and possibly dangerous. Is there a better way?

Scenario 4: You produce a product based on Eclipse but want to keep your stuff and Eclipse's stuff separate when you bundle it all up for easier digestion by your users. Maybe for license reasons, maybe for legal reasons, maybe just for file system hygiene or to make support easier.

Scenario 5: You're a control freak and just like to keep stuff in different places according to your own particular... um... idiom.

In all of these scenarios, .link files can help. Here's how to set one up:

  1. In your Eclipse install folder, create a links/ folder next to features/ and plugins/.
  2. In your eclipse/links/ folder, create a textfile called whatever.link. This file need only be one line, with newline and no trailing slash(es), and can be called anything ending with .link.
    path=/home/nickb/eclipse/eclipse-plugins-phpeclipse
    -or-
    path=D:/eclipse/eclipse-plugins-phpeclipse
    -or-
    path=D:\\eclipse\\eclipse-plugins-phpeclipse
  3. Unpack a zip full of plugins and features into the path specified in your .link file.
    /home/nickb/eclipse/eclipse-plugins-phpeclipse/
        eclipse/
            plugins/
            features/
  4. Start up Eclipse. Check Help > About to see if all your plugins and features are listed.
  5. Rinse, lather, repeat.

You can have lots of .link files and lots of install locations, which allows you to easily swap between different versions of plugins and features for testing purposes, or to share an install location between multiple Eclipse installs. And, when you upgrade Eclipse, you can just copy the old links/ folder into the new Eclipse and voom, all your old plugins and features are there. Please note that when changing between versions of Eclipse, sometimes things will end up disabled, if the new Eclipse won't work with the old plugins. If this happens, you can easily switch back to the old one, look for an update, or download a new zip.

You can also manage your plugins inside Eclipse. So, if you prefer clicking to typing, you can convert a .link file location into a Update Manager (UM) install location, so that you can use UM to install updates to plugins that you created by unpacking a zip, or just to reuse an existing folder for later UM installs. Here's how:

  1. Complete steps above. Verify all your plugins & features are properly available in Eclipse.
  2. To convert a linked folder to an "Extension Location" as used by Update Manager, you just have to put a single file in the eclipse/ folder inside the linked folder. Here's a sample:
    $ cat /home/nickb/eclipse/eclipse-plugins-europa/eclipse/.eclipseextension
    id=org.eclipse.platform
    name=Eclipse Platform
    version=3.3.0
  3. Remove or rename the .link file that references the folder you just converted so that you're not trying to add the same plugins twice.
  4. Start up Eclipse. Check Help > About to make sure you no longer have the plugins & features you just disabled. Then launch Help > Software Updates > Manage Configuration > Add an Extension Location to re-add those plugins & features.
  5. Restart Eclipse.