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

Showing posts with label usability. Show all posts
Showing posts with label usability. Show all posts

2016-01-18

Jelly Bean Keyboard - Cursor Keys

Ever wanted to add cursor movement keys to your text messaging experience? The Jelly Bean Keyboard includes this option, but it's somewhat hidden. Here's how to find and enable it.

First, download the app from the Google Play Store: https://play.google.com/store/apps/details?id=com.jlsoft.inputmethod.latin.jbk43.free&hl=en

Next, go into the settings applet, then find "Languages and input".


Now look for Jelly Bean Keyboard 4.3 you installed earlier from the Play Store, and tap the gear icon next to that to enter settings for the keyboard.


Here's the confusing / hidden setting part. Across the top, there's a "Standard Settings" bar, and under that is stuff like Auto-capitalization, Vibrate on keypress, Sound on keypress.

To the RIGHT of "Standard Settings" is a "JBK 4.3 settings" item, which you can access by swiping from the right to the left.


Now scroll down until you see "Key layouts". Below that are options for keyboard layouts when you're in landscape or portrait orientation. Next is an option for "Show arrows" which you can set to Never, Portrait, Landscape, or Both.


The result? This:


2011-09-01

HOWTO: Move around between desktops & windows with keyboard or mouse

Recently installed Fedora 15 KDE spin, partly because the XFCE spins wouldn't boot from CD but also because I've heard less-than-favourable things about Gnome3 and because I'm addicted to Konqueror as a graphical sftp/scp/ssh viewer, so figured might as well use kdm instead of xfwm4 or gdm.

Still having some problems getting my 1600x1200 (or 1920x1200) monitor to do anything more than 1024x768 on the VGA port of the video card (works fine on the DisplayPort connector, either directly or via a DP-to-DVI cable, but not on the VGA connector, even with xorg.conf hackery). That said the options for display/monitor management under KDE are much better than under XFCE, and this is the first time I've been able to get two monitors working without HOURS of hacking away at xorg.conf scripts. So... big props for this release *almost* Just Working.

Workaround I'm trying next is to install a second video card. Will update when/if that solves the problem once it arrives.

But video resolution aside, I did recently figure out how to set keyboard bindings for moving windows between desktops (thanks to David Fisco). From the K-menu, select System Settings > Shortcuts and Gestures > Global Keyboard Shortcuts > KDE Component: KWin > "Window One Desktop To The Left/Right":

... and for switching between desktops ("Switch To Next/Previous Desktop")

Also recently discovered some fun options for switching between windows (on all desktops). From the K-menu, select System Settings > Desktop Effects > Enable desktop effects > Effect for window switching: Present Windows (or any of the other options).

There's also System Settings > Window Behavior > Task Switcher > Effect: Present Windows:

You might want to set an animation for switching between desktops, though I find with multiple monitors this can be a bit dizzying. From the K-menu, select System Settings > Workspace Behavior > Virtual Desktops > Switching > Animation: Desktop Cube Animation. For something more subtle, try "Fade Desktop".

Finally, you may want to set screen edge behaviours, such as making Present Windows appear when you cursor to the top-center of your screen. System Settings > Workspace Behavior > Screen Edges > right-click a target zone:

2011-04-19

vim scripting: replacing timestamps

After weeks of manually updating compositeArtifacts.xml and compositeContent.xml files' timestamps using `date +%s000`, I finally snapped and went looking for a better way.

Using the Vim Tips wiki as inspiration, I cobbled together this keymapped string replacement function for use in Vim:

" add this to your ~/.vimrc file, then type '\ts' to update timestamp to current
fun! ReplaceTimestamp()
   let tstamp = strftime("%s000")
   exe ":%s#<property name='p2.timestamp' value='[0-9]\\+'/>#<property name='p2.timestamp' value='" . tstamp . "'/>#g"
   echo "New time: " . tstamp
endfun
nnoremap <Leader>ts :call ReplaceTimestamp()<CR>

2011-02-13

Simplifying The p2 Process, Part 3: Associate Sites

In Part 1 of this series, I looked at use of composite repos to provide a way of combining update sites into a single URL for ease of use and a single point of entry from which to do updates.

In Part 2, I discussed why we switched from using a collection of SDKs against which to build - using the now-deprecated brute-force "just unzip into eclipse root folder or dropins" approach - to using a single target platform update site so as to simplify maintenance and provide a reusable artifact for both build and workspace provisioning.


Now, let's look at the no-brainer that says that "less is more" when it comes to telling p2 from where to get updates, and that less effort for your user when installing is always a win.

If this sounds familar, I did blog about this briefly back in August. Since then, we've also added a quick XSLT script to remove the "Uncategorized" category that Tycho automatically adds for features which are listed in your site.xml but are not associated with a category. While this isn't strictly related to associate sites, it is about ease of use; while I applaud the desire to have everything belong to a category bucket (perhaps because the model Tycho's using requires it), the reason we'd rather hide these is to declutter the install view and not confuse people by suggesting features that won't work on their OS (eg., for which there's no XulRunner port).

But I digress...

Associate Sites

In the old days of yore, you could situate an associateSites.xml next to your site.xml in your "classic" update site, and Eclipse Update Manager would happily read that file and add those extra sites to your list of available update sites.

Then came p2, and while the old way still worked, it was no longer ideal. So, the new approach was to insert these associate sites directly into the p2 metadata for the site, content.xml and artifacts.xml (or content.jar and artifacts.jar).

This could be accomplished via a somewhat hacky appraoch - unpacking the existing metadata (content.jar) and shoehorning in the information at the bottom of the content.xml file, using an ant script (see "add.associate.sites" target, below) and a list of sites to be added:

<target name="add.associate.sites" if="associate.sites">
        <if>
                <and>
                        <!-- Defined in aggregateSite.properties -->
                        <isset property="associate.sites" />
                        <not>
                                <equals arg1="${associate.sites}" arg2="" />
                        </not>
                </and>
                <then>
                        <if>
                                <available file="${update.site.source.dir}/content.jar" type="file" />
                                <then>
                                        <unzip src="${update.site.source.dir}/content.jar" dest="${update.site.source.dir}" />
                                        <delete file="${update.site.source.dir}/content.jar" />
                                </then>
                        </if>
                        <!-- counter variable -->
                        <var name="associate.sites.0" value="" />
                        <for param="associate.site" list="${associate.sites}" delimiter=", 
">
                                <sequential>
                                        <var name="associate.sites.0" value="${associate.sites.0}00" />
                                </sequential>
                        </for>
                        <length property="associate.sites.length" string="${associate.sites.0}" />

                        <loadfile srcfile="${update.site.source.dir}/content.xml" property="content.xml">
                                <filterchain>
                                        <tailfilter lines="-1" skip="1" />
                                </filterchain>
                        </loadfile>
                        <echo file="${update.site.source.dir}/content.xml" message="${content.xml}" />
                        <echo file="${update.site.source.dir}/content.xml" append="true">  <references size='${associate.sites.length}'>
</echo>
                        <for param="associate.site" list="${associate.sites}" delimiter=", 
">
                                <sequential>
                                        <!-- insert into content.xml -->
                                        <echo file="${update.site.source.dir}/content.xml" append="true">    <repository uri='@{associate.site}' url='@{associate.site}' type='0' options='1'/>
<repository uri='@{associate.site}' url='@{associate.site}' type='1' options='1'/>
</echo>
                                </sequential>
                        </for>
                        <echo file="${update.site.source.dir}/content.xml" append="true">  </references>
</repository>
</echo>
          <!--  
    workaround for Tycho bug: uncategorized features in site.xml are put into
    "Uncategorized" category, rather than just being uncategorized (hidden) 
   -->
                 <copy file="${update.site.source.dir}/content.xml" tofile="${update.site.source.dir}/content.old.xml" overwrite="true" />
                        <xslt style="remove-uncategorized.xsl" in="${update.site.source.dir}/content.old.xml" out="${update.site.source.dir}/content.xml" />
                        <zip destfile="${update.site.source.dir}/content.jar" basedir="${update.site.source.dir}" includes="content.xml" />
                        <delete file="${update.site.source.dir}/content.xml" />
                        <delete file="${update.site.source.dir}/content.old.xml" />
                </then>
        </if>
</target>

So, now, instead of telling people to add multiple update sites to resolve missing potentially dependencies when installing, we can cause those extra sites to be automatically added at the same time they add the single URL for JBoss Tools. Now the additional sites need only be listed for reference, but no additional effort is required by the user.

BONUS HACK: to force a site that may already be listed (but disabled) to be added again, and this time definitely be enabled, you can add an extra slash into URL. Thus http://download.eclipse.org/birt/update-site/2.6 becomes http://download.eclipse.org//birt/update-site/2.6/, and as p2 sees a new site, it adds the new site (instead of ignoring it because it's already present but disabled. Again, a win.

Alternatively, you could cast an arcane spell using a p2.inf file in your feature's root folder or plugin's META-INF/ folder to add these additional, required sites... or do whatever processing you might need. I'm not sure if Tycho supports this yet, or how fully PDE supports reading this information. Got sample code? Send it to me as a comment below or via twitter to @nickboldt. Thanks!


In part 4, I'll talk a little about how to prevent your product build from getting updates from unofficial sources, and preload your product with the official sites from which to get updates. Because it's important to balance ease of use with prevention of unsupported features. SPOILER ALERT: may contain p2.inf instructions.

2010-04-15

Better Bootstrapping For Athena Projects

Inspired by Tycho and Maven, I've simplified the self-bootstrapping process for Athena builds.

Previously, you needed a start.sh script to fetch org.eclipse.releng.basebuilder and org.eclipse.dash.common.releng before you could run a build; if on build.eclipse.org this is done for you automatically. Or, if building locally (or on Windows), you had to fetch these yourself.

Now, you can simply tell your build.xml to bootstrap itself, and it will fetch those projects for you. You can also tell it which version of basebuilder or common.releng to use, rather than being tied to the defaults.

For details, see Getting Started - Bootstrapping.

2009-05-11

Automatic Eclipse mirror selection / Better download pages?

Have you ever wanted to fetch a whole stack of Eclipse project runtimes so you can build against them? For example, say you want all the Galileo M7 builds from Platform, TPTP, BIRT, DTP, WTP, and dependencies (EMF, GEF, XSD). You can find the URLs for each zip you want on the projects' pages, and download them one-by-one from the closest mirror, but that's time- and bandwidth-consuming, esp. if you want these on a remote server, not your local box.

Enter the "&r=1" option on http://www.eclipse.org/downloads/download.php, which will fetch from the closest mirror automatically.

So, now, you can script the M7 stack fetch like this:

for u in $*; do
  if [[ ! ${u##*file=*} ]]; then # add the r=1 suffix
    u=${u}"&r=1"
  fi
  echo "wget $u ..."
  wget --no-clobber "$u"
done

Then run it like this:

./fetch.sh \
"http://www.eclipse.org/downloads/download.php?file=/tools/gef/downloads/drops/3.5.0/S200905011522/GEF-runtime-3.5.0M7.zip" \
"http://www.eclipse.org/downloads/download.php?file=/birt/downloads/drops/M-R1-2.5M7-200905061338/birt-report-framework-2.5M7.zip" \
"http://www.eclipse.org/downloads/download.php?file=/birt/downloads/drops/M-R1-2.5M7-200905061338/birt-wtp-integration-sdk-2.5M7.zip" \
"http://www.eclipse.org/downloads/download.php?file=/datatools/downloads/drops/N_DTP_1.7/dtp-1.7.0M7-200905052200.zip" \
"http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/S-3.5M7-200904302300/eclipse-SDK-3.5M7-win32.zip" \
"http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/S-3.5M7-200904302300/eclipse-SDK-3.5M7-linux-gtk.tar.gz" \
"http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/S-3.5M7-200904302300/eclipse-SDK-3.5M7-linux-gtk-x86_64.tar.gz" \
"http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/S-3.5M7-200904302300/eclipse-SDK-3.5M7-macosx-carbon.tar.gz" \
"http://www.eclipse.org/downloads/download.php?file=/modeling/emf/emf/downloads/drops/2.5.0/S200905041408/emf-runtime-2.5.0M7.zip" \
"http://www.eclipse.org/downloads/download.php?file=/tptp/4.6.0/TPTP-4.6.0M7-200904260100/tptp.runtime-TPTP-4.6.0M7.zip" \
"http://www.eclipse.org/downloads/download.php?file=/webtools/downloads/drops/R3.1/S-3.1M7-20090505073946/wtp-S-3.1M7-20090505073946.zip" \
"http://www.eclipse.org/downloads/download.php?file=/webtools/downloads/drops/R3.1/S-3.1M7-20090505073946/wtp-jpt-S-3.1M7-20090505073946.zip" \
"http://www.eclipse.org/downloads/download.php?file=/modeling/emf/emf/downloads/drops/2.5.0/S200905041408/xsd-runtime-2.5.0M7.zip" 

So, now the only problem is that every project structures & styles their downloads pages differently...

  1. DTP -> choose file(s)
  2. GEF -> choose file(s)
  3. EMF/XSD -> choose file(s)
  4. WTP -> choose build -> choose file(s)
  5. Platform -> choose build -> choose file(s) & platform(s) -> click through warnings
  6. TPTP -> choose branch tab -> choose build -> choose file(s)
  7. BIRT -> More Downloads -> Recent Builds -> choose build -> choose file(s)

Am I the only person that finds this inconsistency annoying? Is it time for a more consistent UI? I'm exploring what to do for Athena-based builds, and welcome suggestions in bug 275682. What pages do you like best? Worst? Which are easiest to use? Hardest? Do you prefer the old blue-and-white pages? The purple Phoenix pages? The grey Nova pages? Any UI designers want to contribute?

Or, really, are downloads obsolete? If we could collect statistics on p2 jar downloads, I'm sure we'd see that most people prefer that approach, and I for one would certainly prefer to just build against a p2 repo (or 7) than a pile of zips. I suppose the hybrid solution for now is to provide zipped p2 repos for download, many projects do today (Modeling, GEF, PDT, VE ...).

2009-05-07

A Week Without Firefox

Last week I fired the Fox and switched to using Opera 9.6. Today, I'm back to Firefox 3.0 because while Opera has a few nice features, it ultimately lags behind FF (for me, anyway) in usability and functionality.

Here's how they stack up:

Opera 9.6's Pros

  1. Sidebar notepad feature
  2. Speed dial homepage
  3. Minimalist UI with sidebar (incl. a handy notepad app and the usual suspects (transfers/downloads, history, bookmarks). For web dev, there's some handy extras like Links (a list of all the links in a page) & Info (page metadata)... but then FF also provides these via a different UI
  4. Ability to do "g keyword keyword2" to search Google for those keyword(s) (Firefox just does this without the "g")
  5. Mouse gestures
  6. Single "Wand" password manager login for entire session (rather than per-window - see Firefox Cons below)

Firefox Pros

  1. Awesomebar searches within history allow minimal typing like "hu ec ve l ar" to pull up a long URL like https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-ve-1.4.x-Ganymede/lastSuccessfulBuild/artifact/
  2. Ability to create keyword associations for bookmarks, so that "b 272403" will load https://bugs.eclipse.org/bugs/show_bug.cgi?id=272403
  3. Tons of plugins/extensions, including: mouse gestures, Twitter, Delicious, Tab colouring & detach/merge, ...

Opera Cons

  1. Location bar only works with URLs and sometimes page names. Way more typing needed than in FF
  2. No ability to undo the closing of a tab
  3. Cannot reproduce FF extensions in Opera; Delicious and Twitter integration are not nearly as good; no tab colouration, single view of downloads, no Tasktop support.
  4. Cannot store username/password pairs for in-page login forms (only browser-level ones). Repeatedly having to log in to JBoss Hudson every few hours is a royal pain.
  5. Crashes unexpectedly but previous session can be recovered.
  6. Lame icon with a dropshadow. Retro, sure, but c'mon, they've had that for AGES, and it's just lame.

Firefox Cons

  1. Memory bloat
  2. Crashes unexpectedly but previous session can be recovered.
  3. When reloading a saved/crashed session, every single page requiring access to the password manager pops a login dialog; sometimes I get to enter my password 7 or 8 times, or hit ESC repeatedly to lose those tabs.

I also briefly tried Firefox 3.1beta4, but as none of my extensions work there yet, it's not much better than Opera at this point. It's supposed to be better on memory, and has new bells and whistles being added to the Awesomebar. It's also supposed to be implementing a lot of functionality I get now from the above extensions, such as better tab management.

So, ultimately, I'm back to Firefox 3.0.10.

2009-04-30

Behaviour Modification

Dave Carver's been talking a lot about Scrum, XP, and the EDP and where the suck is.

His latest post contains "in Pictures" in the title, but contains no pictures. So, with tongue planted firmly in cheek, here's one:


Image borrowed from basicinstructions.net

2009-01-25

Capturing Screenshots Made Easy: Scripting With xfce4-screenshooter

Since moving to Fedora 10 and casting off my old ties to Kubuntu, I've been rather frustrated with the available options for capturing screenshots under Gnome.

I've tried the gnome-screenshot tool, docked as a panel applet, but it only allows me to capture the desktop or selected window. No click-and-drag region select?

When I've needed to capture only a part of my screen or overlapping windows (eg., Eclipse dialogs) I've been forced to capture the whole screen then crop it down w/ GIMP. Or, launch GIMP first and let it do the region capture - but GIMP never remembers my settings from last time, so to capture a region after a 2-second delay, it's 8 clicks every time I start GIMP. Lame.

In both cases, it's cumbersome, and I always have to select the directory where I want to save, and then name the file.

This weekend, I discovered xfce4-screenshooter, which is significantly better in that I can capture an area of the screen and auto-save to a file without needing to specify a filename each time.

It can even redirect the capture to an application or the clipboard rather than a file, and provides all the dialog options as commandline flags so it can be scripted, too.

So, now, I simply wrap that application with a bash script that runs the screenshooter then opens my snapshot folder with Thunar, so I can preview the result with Ristretto or edit it with GIMP if necessary. One click to start the process, one click-and-drag to create the image. And no unnecessary dialog configuration, file system browsing, or clicking!

Here's the scriptlet, which I've set up as a Gnome panel shortcut to run /home/nboldt/bin/snap.sh:

#!/bin/bash
/usr/bin/xfce4-screenshooter -s /home/nboldt/Screenshots/ -h -r && \
  thunar /home/nboldt/Screenshots/ &

And here's my desktop, captured with only 2 clicks:

One might argue that it's too bad that these three tools can't just be merged into one. I'd argue that it's great that if you don't like one tool, you can find two others, each incrementally better than the next. Screenshot integration in GIMP is very handy, as is automatic capture to file (with incremental file naming). And, unlike in the Windows and Mac worlds, if the best tool for the job isn't available for one window system, I can simply cherry pick from another.

Still, nothing beats the feature set and usability of HyperSnap, but that's sadly a closed-source Windows application, and far from free. Proving that in this world, ultimately, you get what you pay for -- but there are some excellent free & open source alternatives.

2009-01-02

Clarifying Our All-In-Ones

In order to make it clearer what's in the various flavours of all-in-one zips provided in Modeling, GEF, and PDT, I've concocted some new icons to better differentiate them.

This is actually moving in the opposite direction from what I'd proposed in bug 240223 regarding Simplified EMF Downloads as we're now providing more, not less... but IMHO that's okay as long as the community is well served. If you have an opinion on update site vs. update zips vs. SDK zips vs. EPP bundles, please feel free to weigh in on bug 240223.

And if you hate the new icons, please let me know. Better still, design me a replacement. Thanks to iconeden.com for the source pixels.

2008-11-20

Gmail Themes

GMail adds themes! Wow. That's... uh, great. My favourite has to be the green-screen vax-like one. I'm sure the PINE/Mutt camp will be happy.


Entertainingly retro, but is it useful?

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-22

xubuntu 8.04: easy enough for grandma

I'm in love with the newest ubuntu for xfce, xubuntu. So much so that I've decided to install it on my mother-in-law's desktop (which keeps getting virii and trojans). Yes, it's really that grandma-friendly. (Time will tell whether I'm on crack or if they agree.)

However, I have a few minor complaints -- the usual "close-but-no-cigar" usability tweaks.

1. If you log in two users in parallel (it lets you switch between them) for some reason there's a pc speaker (system bell / system beep) every couple seconds once the second user logs in. This is of course incredibly annoying, but there's an easy fix.

First, disable it:

modprobe -r pcspkr

Then, turn it off for good by blacklisting the pcspkr module in /etc/modprobe.d/blacklist:

blacklist pcspkr

2. I immediately installed OpenOffice 2.4 (because abiword and gnumeric suck) and upgraded the Firefox 3 beta to the full release.

3. I also combined the two default taskbars (top and bottom of screen) into a single one on the bottom, because that's less weird for Windows people.

4. I had to manually force mounting of their old C and D drives (in /etc/fstab), just in case they need them. Thunar is great for adding quick shortcuts into the file browser (see screenshot below).

/dev/sda1 /media/sda1 vfat rw,noexec,nosuid,nodev,quiet,uhelper=hal,utf8,shortname=winnt,uid=999,gid=100,umask=007 0 0 /dev/sda3 /media/sda3 vfat rw,noexec,nosuid,nodev,quiet,uhelper=hal,utf8,shortname=winnt,uid=999,gid=100,umask=007 0 0

5. I had to add the volume control applet to the taskbar. Sure, having to add it is nowhere as annoying as having to remove MEPIS/KDE's fish tank app, but c'mon -- shouldn't this be there by default?

6. Firefox doesn't come with the Flash player pre-installed, for obvious licensing reasons. However, the latest Firefox, combined with the latest xubuntu, lets me install the whole thing without having to revert to apt-get or tar -xzf. Finally, the Plugin Finder Service in Firefox actually works! It finds the plugin, prompts for password (to run the install as root), downloads it, and installs it. And on restart of Firefox -- YouTube works.

But other than these minor tweaks, it's pretty much xubuntu out of the box, and a viable replacement for Windows XP and its non-stop barrage of virii & trojans.

Because really, what does your grandma need on a computer? Firefox, Thunderbird, OpenOffice, a file browser like Thunar, and of course, some card games (thanks, PySol!).

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:

On restart, I had a working visual editor:

2008-06-17

Toward Standardized Groups

June 5 marked the death knell for my conquest for world domination through Eclipse committer groups.

Before then, I was in a whopping 62 different linux groups on dev.eclipse.org, coming in third behind Kim and Sonia (80 and 79, respectively).

However, with Karl and Matt actively cleaning up these duplicate and often empty groups & standardizing the names, my numbers have dwindled to a mere 55. Sadly, I'll lose 4 more when we standardize GEF...

Still, consistency is better than world domination, right?

If your project needs some housecleaning, Karl's looking for volunteers to work with him on this effort. If you are interested, I'd recommend starting with a shared spreadsheet (eg., [1], [2]) to document your before and after states.

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...

  3. Check out some CVS project into your workspace. I used :ext:nickb@dev.eclipse.org:/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:

  8. In the Synchronize view, select the Change Sets presentation (the toolbar icon that looks like a file tree).
  9. 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.



  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.

  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.

  18. 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).

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

  21. Lo, that new file has vanished!

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