Sunday, April 25, 2010

My issues with Facebook privacy

"You are in a maze of twisty little passages, all alike"

Yep! I deactivated my Facebook account today.

This isn't the first time I've walked away from Facebook. Two things were different back then: back then I wasn't using Facebook correctly, and also I actively deleted the profile. This time, the profile is merely deactivated, which means logging in will restore the account. But more important, it's not me misusing Facebook: Facebook is misusing me.

Look, I actually like using Facebook. And I like being in touch with my friends who use it, too.

So why did you deactivate the account?
This afternoon my friend Sean said the following:
So, I headed over to this morning, and I saw a little ticker in the top right corner of the page scrolling my Facebook connections' updates. This is after I opted out of Facebook's idiotic Instant Personalization bullshit.

When we're talking about handing over personal data like this, I don't know what else to call it other than evil. I've been opted out of that "feature" from the moment they launched it, but Facebook is still sharing my data with other sites.

For the time being, I've logged out of facebook in my primary browser, and I'm not ever staying signed in there again. If this sort of thing continues (Facebook taking me visiting some random site on the Internet as implicitly granting them permission to hand over my personal data), I may go all out and nuke my FB account from orbit.
I checked and sure enough, it did the same with mine, even though I spent fifteen minutes trying to minimize my settings. The only way, it seems, to deactivate this, was by changing a setting on So, does this mean that in order to control Facebook information I must change settings not just on but also on any site that gets access to Facebook's data? That's just too much for me.

You might find this to be hypocritical since most of my Buzz content is public. The difference between Buzz/Blog and Facebook is in how I use them. Facebook is, for me, a place to connect with less technical-savvy personal friends. As I said upon my return:
Last month learned that many of my friends (the real ones, the ones I wanted to spend weekend time with) had joined The Facebook in the intervening time. All of a sudden there was this real value to returning to The Facebook, and so I have.
I discuss much more personal stuff with those friends than I would discuss on Buzz or a public blog. All of this is a long way of saying that you don't actually know what I share on Facebook, but more personal than this. If they're giving my personal life away to CNN, I can't use it.

What would make you return?
I have faith Facebook will address this, but I hope part of addressing this takes the form of consolidating their privacy controls. There are plenty of settings everywhere, but I do not have time to track them down.

And this is the crux of the problem: No matter how much time I spend tweaking Facebook's privacy settings, I can't help thinking I missed a setting someplace else.

While they're at it, they could address some other privacy issues:
  • Limit who can add me as a friend: Right now, friends-of-friends can ask to be my friend. I don't want that: I want to stop people from asking. Allowing people to ask to friend me is social pressure. I want to use Facebook without the social pressure of expanding my graph.
  • Put an end to the slogginess of setting privacy levels: By way of an example, there are some visibility settings that are listed as a choice between Everyone, Friends of Friends, Friends Only, and  Customize. Only when selecting "Customize", are you offered a second layer of settings, including "Only me." Why can't "Only me" be on top? Yet another way that Facebook cares about the social whole over the individual.
Why not just delete the account?
Because I like my friends, and Facebook is currently the easiest way to keep in touch with them. When Facebook puts me back in control of my data I'll happily return.

Aren't you some Google corporate shill?

I'm giving up an easy communications mechanism with my best friends, including the one who announced his baby's birth on Facebook, and nowhere else. And I'm walking away. My employer can't get me to do that. But careless treatment of my personal thoughts and opinions can.

What about staying on Facebook and educating your friends?

It's true. It's more effective to stay on Facebook and educate people than it is to run away. But this isn't about educating people, and it isn't about this bigger notion of The Wild Internet World And Peoples' Privacy. This is about The Wild Internet World And MY OWN PRIVACY.

Horse crap. You say plenty of public stuff on the web.
Don't define my comfort levels, asshole.

Update: Yes, it has been made clear to me that since CNN has the event stream via an iframe, they don't actually have access to my data. I considered redacting that portion of this post, but the important thing was still the confusion I have around the Facebook security settings. The crux of the problem, as commented, still stands: "No matter how much time I spend tweaking Facebook's privacy settings, I can't help thinking I missed a setting someplace else."

Sunday, April 18, 2010

Live: The Hitchhiker's Guide To The Galaxy

Before The Hitchiker’s Guide To the Galaxy was in any other form, it was presented as a radio series. The What Exit? Theatre is performing three stories from the radio series! I was invited to the opening night performance.

Of all the forms H2G2 has taken on, the radio series has always been my favorite. There’s no image of Zaphod or Marvin can match those in my head, which comes from mood and feeling rather than lines and color.

All other re-creations of H2G2 haven’t been very good. I'm used to being disappointed as an H2G2 fan, and in fact, after this long, I would call myself a tired fan, in the same way that I’m just tired of Monty Python. Over the years friends who said “Your mother was a hamster and your father smelt of elderberries” went from funny to clever to not funny to mildly annoying. “A ha ha ha ha,” I would say to such friends. “You put such a funny spin on it.”

So you can see, my expectations weren’t too high. I mean, would they use American voices for critical parts?

The lights went out and Journey of the Sorcerer played over the speaker. The actors walked on stage.

And the story began.

And it was pretty good!  The audio, the acting, even the accents! That’s the difference between a voice actor and, well, your buddy. One of the odd accent choices was the use of a US Southerner for Zaphod, which I think was based on a mix of Sam Rockwell’s portrayal in the movie and George Bush.

But here’s my one complaint of the show: One of the actors played his parts over the top. He read his lines as if to say “Hey everybody, this is a joke!” Yeesh,

OK, let it go.

Listening to the dialogue was like attending a Beatles concert: I knew the lyrics by heart. Well, mostly by heart. Like anything else committed to memory, I could mentally check out and check back in without missing any dialogue.

They performed three stories, but rather than performing the first three, they told the first, fourth and sixth. This meant they wouldn’t end on a cliffhanger, giving a conclusion to the evening’s show. But it also meant that Zaphod, Trillian and Marvin were not properly introduced.

Because they skipped episodes two and three, the emcee filled in the important parts of the plot. I wonder if the audience was able to keep up with the emcee’s pace, but of course I was able to keep up, and didn’t even need him to fill in the back story. Smug! But episode 2 is where we meet Zaphod, Trillian, Marvin and Eddie, so their introduction in episode 4 was jarring.

The emcee also used the in-between time to show clips from the movie and TV show to give a sense of two characters that do not get their due: Marvin, the Paranoid Android and the sperm whale. I used to repeat the whale’s dialog to my friend to our joint amusement.

Oh, hey, ├╝ber-fan nit: they changed part of the sixth story! I doubt anyone else noticed. But I noticed! There was only one way to address this: confront the emcee.

The emcee was pleased I was a big fan of the show. I think he was hoping people like me would come. But I had to confront him about this plot change! Remember, fans, if you confront people about stuff like this, be polite. It’s the difference between being a fan and an a-hole. In his judgment it was better to use the storyline he chose because would be better as a live presentation. I disagree, but it’s his show.

By the way I’m certain they also omitted the fourth episode scene where The Book explains the consequences of Arthur saying “I seem to be having this tremendous difficulty with my lifestyle.”


Rob, let it go.

Everyone I spoke with enjoyed the show, even a friend who knew nothing about H2G2.

Seriously, this show was wonderful, and rekindled my interest in the radio series. I’m listening to episode 7 right now, and I look forward to seeing it again next week. What would it take to get them to perform the other nine episodes?

Saturday, April 17, 2010

Seven on Seven

I had an opportunity to attend Seven on Seven, an event at the New Museum. The idea: pair up seven groups of one artist and one technologist. They were given twelve hours or so to create a project, and today they presented their findings. Each group was given 20 minutes to present with 10 minutes for questions.

The projects were as varied as they were fascinating. They were all in various levels of completion and success: some only managed to compete a full day of research, and some managed to complete a full project. Every project left me with things to think about, and some 

Here are short (and completely unfair) descriptions of the projects, just to give you a taste of the variety:
  • An umbrella with identity; it communicates and broadcasts its locations, images and audio at all times. Take it, leave it, it passes on to someone else.
    • The best part about this project was talking with the team afterwards. I spoke with them about a project I plan to take on this summer, and they gave me great ideas.
  • A new feature on Wordpress: Fun Mode.
    • Man, one of these days I should move to Wordpress, though not necessarily just because of Fun Mode.
  • A mechanical device that only changes when nobody sees it: this might have been my favorite because they actually dared to build something physical.
  • A proposal for allowing users to swap identities on Twitter. This was simultaneously wonderful and utterly preposterous.
    • The first half of the presentation I kept thinking about the film Bubba Ho-Tep: if only Elvis did this instead! The second half of the presentation I thought about my "The Real Mark Jackman" project, which was all about assuming my friend's identity on the web.
  • A video immersion project based on two key constraints: ten second clips identified by three labels only.
    • The two collaborators commented on how much they enjoyed working together and that they planned to keep building on this project.
  • A marketplace for guilt and absolution.
    • Nothing particularly concrete came from this, save a fascinating collection of data using Amazon's Mechanical Turk.
    • Best comment of the day referring to how easy it was to get information out of the Mechanical Turk: "People bared their souls for two cents."
  • An analysis of mental health that was, to be honest, a little difficult to follow. But they shared some of their research which was well-presented.
Congratulations once again to the presenters.

Monday, April 12, 2010

"We want you to be healthy, so we'll encourage taking your money."

I was frustrated by a comment made by Seth Godin on his blog where he suggests that Pepsi employees should be in favor of the proposed NYS soda tax (1 cent per fluid ounce):
The benefit of a tax is that it affects you and your competitors at the same time, so you all benefit from doing the right thing, as opposed to having to compete against someone who doesn't care as much as you do.
This argument seems short sighted, or possibly idealistic. First of all, look at soda. It contains sugar (just kidding, corn syrup) and caffeine, and kids are addicted to it. Go tell those kids that their soda will cost twelve cents more .. no wait .. let me update since soda is no longer sold in 12-ounce bottles at schools, so, twenty cents .. tell those kids they have to pay another twenty cents per bottle, and see if they fall on the side of the government or the soda companies. So, campaigning against the tax can be seen as representing the best interests of their customers.

Now let's look at what might be in the best interest of the company itself: how about a tax that is applied equally to all your competitors, and your company is exempt? Well, that's probably not going to happen, but either the tax law will pass or not. In theory if it doesn't pass, things can remain status quo and still sometime in the future Pepsi may reveal an alternative plan, posing themselves as a leading crusader against obesity. If it looks as though the law will pass, Pepsi can certainly use political influence to carve out exemptions for itself so while it hurts everyone, it hurts Pepsi just a little less. (Side thought: I can't see using the tax as a way to eliminate smaller competition, you're still left after the fact with the tax. Or at least, there may be better ways to eliminate smaller competition.)

Finally, I don't see this as a deterrent for purchasing soda, but a way to raise funds for the government. (I don't have data, but do cigarette tax increases actually reduce cigarette sales?) That's just a hard thing to convince your customers to get behind. "We want you to be healthy, so we want to hurt your pocket when you buy our product."

Yes, everyone should drink less soda and drink more local water, and corn syrup has long outlived its welcome. Maybe Pepsi can come out with a "drink responsibly" education campaign, or just plain replace corn syrup with sugar, but as long as it's the profit-making venture that it is, actually endorsing the tax would be stupid.

Saturday, April 10, 2010

Guava as an OSGi bundle

I have published an update site that hosts Guava (which hosts some of Google's core Java libraries), as an OSGi bundle for you to use in your Eclipse projects.

Before you use the update site, keep in mind: There are some kinks that need to be worked out. For example, it seems I didn't get source attachment right, and I'm keeping the version numbers low until the process runs more smoothly. But more important, URLs are going to change, so it is not a reliable site yet. Only use it to test and provide feedback on the set-up.

Feedback is welcome, but patches and (OSGi/Subversion) guidance will get priority over requests.

The update site URL is at It's got the r03 release, which contains the first binary distribution of Guava.

Thursday, April 08, 2010

Thought Experiment: First Response

Give the answer that first comes to mind:

Someone says to you: "I want your opinion. I hate the way [some computer language] handles [some problem] and I wrote a really ugly hack to get around it."

What's your first reaction?

a) You want to help the person solve his problem
b) You want to know the hack

Saturday, April 03, 2010

Controlling the Kokokaka Interactive Piano

Here's some fun I had with an afternoon hack session.

The start

To start, look at this video. Play with it. It's an interactive piano. Wait for the whole video to load, and then click the piano keys with your mouse. You'll see that clicking a key moves the video's position to the spot where that note is played. In other words, you get to play the piano on the YouTube video by clicking keys.

That was fun; I wanted to automate playing the piano with a script. Could I do it? Well, yes. For the most part.

Controlling the Mouse

This turned out to be rather difficult, and in the end I could not get it quite right. But it's good enough.

Since this was a Mac workstation, I assumed it would be an easy matter to get AppleScript to do this, but I gave up after about 45 minutes of trial and error. I couldn't even find an API, let alone a reliable one. (This also included a short foray into experimenting with the Automator. Nope, it wasn't going to work.)

I finally found an answer on Mac OSX Hints with a full example of how to build a command-line binary that positions and clicks the mouse.

The secret sauce of this example was the Quartz Events method CGPostMouseEvent.

Did it work? Yes. No. Not really. Calling ./click -x x -y y certainly sent the mouse to the correct position, but it didn't seem to actually generate the correct click event. Do you know what worked instead? Calling it twice. Yep.

./click -x x -y y ; ./click -x x -y y works.

Most of the time.

I tried all sorts of things, like creating delays in between the clicks, or delays between the mouse-down and mouse-up events. No luck. Anyway, this was the simplest correct solution. That's what they call elegance, you know: the simplest, correct solution. Doesn't feel like it.

I noticed CGPostMouseEvent was deprecated and replaced with the pair of methods CGEventCreateMouseEvent and CGEventPost. I replaced the code with the newer methods, which resulted in no reasonable change to the application. But I didn't switch back.

The major problems with this solution were not only that there could be a risk of skipping, it also, the browser seemed to get overwhelmed by these fake mouse events, enough so that the video would stop playing. The mouse click events would continue to be delivered, and the video would be repositioned in time to the correct spot, but the video was paused; so no music came out. The faster the music played, the more likely the video would halt. Too bad.

A final comment about mouse control. I found that this only worked with Safari. It didn't work well (or at all) with Firefox or Chrome.

// File: 
// click.m
// Compile with: 
// gcc -o click click.m -framework ApplicationServices -framework Foundation
// Usage:
// ./click -x pixels -y pixels 
// additional data found at

#import <Foundation/Foundation.h>
#import <ApplicationServices/ApplicationServices.h>

// Read more:

int main(int argc, char *argv[]) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  NSUserDefaults *args = [NSUserDefaults standardUserDefaults];

  int x = [args integerForKey:@"x"];
  int y = [args integerForKey:@"y"];

  CGPoint pt;
  pt.x = x;
  pt.y = y;

  CGEventRef evt = CGEventCreateMouseEvent(
      NULL, kCGEventLeftMouseDown, pt, kCGMouseButtonLeft);
  CGEventPost(kCGHIDEventTap, evt);

  evt = CGEventCreateMouseEvent(
      NULL, kCGEventLeftMouseUp, pt, kCGMouseButtonLeft);
  CGEventPost(kCGHIDEventTap, evt);

  [pool release];
  return 0;

Finding positions

Now I had a relatively reliable procedure for generating mouse click events. Where should I click the mouse?

This was easy to solve. I put the browser in the upper left corner and used Grab to get a shot of the full screen. Then I loaded the image in Gimp and used the cursor position indicator. Given a full screen snapshot, the cursor position on the loaded screenshot image would correspond with a mouse position click event.

From there I could generate positions on the display that, when clicked, would generate the correct results.

my %points =  (
    toggle => [18, 580],
    c => [20, 500],
    cs => [40, 300],
    d => [80, 500],
    ds => [120, 300],
    e => [140, 500],
    f => [220, 500],
    fs => [240, 300],
    g => [280, 500],
    gs => [320,  300],
    a => [360, 500],
    as => [400,  300],
    b => [430, 500],
    C => [500, 500],
    Cs => [530, 300],
    D => [560, 500],
    Ds => [610, 300],
    E => [620, 500]

Scripting the result

Coding up the controller wasn't very hard. I went through several versions, and settled on this:


use strict;

# system("gcc -o click click.m -framework ApplicationServices -framework Foundation");

my $tempo = 1;

sub _nap ($) {
 select undef, undef, undef, $_[0];

sub nap ($) {
 _nap($_[0] * $tempo);

sub note {
  my ($x, $y) = @_;
  system("./click -x $x -y $y");
  _nap .05;
  system("./click -x $x -y $y");

my %points =  (
    toggle => [18, 580],
    c => [20, 500],
    cs => [40, 300],
    d => [80, 500],
    ds => [120, 300],
    e => [140, 500],
    f => [220, 500],
    fs => [240, 300],
    g => [280, 500],
    gs => [320,  300],
    a => [360, 500],
    as => [400,  300],
    b => [430, 500],
    C => [500, 500],
    Cs => [530, 300],
    D => [560, 500],
    Ds => [610, 300],
    E => [620, 500]

sub play($) {
  my @notes = split(/;/, $_[0]);
  foreach my $note (@notes) {
      my ($key, $duration) = split(",", $note);
      $duration = 1 unless defined $duration;
      print "$key-$duration- ";
      my $rpoint = $points{$key};
      print "$rpoint ";
      my @point = @$rpoint;
      print @point . $point[0] . $point[1] . "\n";
      note @point;
    nap $duration;

sub scale {
 $tempo = .3;
 play ("E;Ds;D;Cs;C;b;as;a;gs;g;fs;f;e;ds;d;cs;c");

sub test() {
 $tempo = .2; 
 play ("c;d;e");

sub test2() {
 $tempo = .1; 
 play ("E;c;Ds;cs;D;d;Cs;ds;C;e;b;f;as;fs;a;g;gs");

sub twinkle {
  $tempo = 1;

sub fur_elise {
  $tempo = .5;
  "E;Ds;E;Ds;E;b;D;C;a,3;c;e;a;b,3;e;gs;b;C,3;e;" .
  "E;Ds;E;Ds;E;b;D;C;a,3;c;e;a;b,3;e;C;b;a,4;" .
  "b;C;D;E,3;a;f;e;d,3;g;E;D;C,3;f;D;C;b,3;e;" .

my %songs = (
  scale => \&scale,
  twinkle => \&twinkle,
  test => \&test,
  test2 => \&test2,
  fur_elise => \&fur_elise,

my $song = $ARGV[0];
print $song;
my $rsong = $songs{$song};

Notice that _nap is actually a call to the Perl builtin method 'select'? It's a bit of a hack I read about in a couple of places; this is one.

The final result

Did it work? You tell me!


Parting thoughts

It's too bad there was no easy way to get a reliable mouse click on the Safari browser. That would make such a difference.

Collecting this data from a script feels a little cheap. I'd much rather have a keyboard send events that control the video. Anyone who has a spare electronic keyboard and a couple of hours of spare time, let me know.

Friday, April 02, 2010

Uncle Bob Martin - EclipseCon 2010 Trip Report

These are the roughly unedited notes from the Thursday keynote from EclipseCon: Uncle Bob Martin on  Software Professionalism and the Art of saying "No"

There are lines you will not cross. We may make lots of compromises, but there are some lines you will not cross.

First, do no harm to the function of your software.

But you may introduce bugs, what about that? Doctors manage to swear this oath. Can they pull it off? No, sometimes they screw up and so do we, but it's a good target to hit. I may fail but I'll do the dilligence necessary to make sure my code works.

That means we're responsible for our imperfections. And we take responsibility when we do do harm to our software.

QA group is absurd. QA should FIND NOTHING. Why do we have a QA group? Because developers weren't doing their jobs so we had to create a whole new group to find their bugs! How did we get in a mode where we lost responsibility for our quality.

QA role should change completely, instead of being at the back of the process, have them at the front of the process, specifying what the quality criteria to be.

You do not release code until you know it works.

Manual tests are desperately expensive.

I'm not expecting that you will achieve 100%, I will demand that you achieve 100%.

Do no harm to your code

People do not want us to write software that is hard to change. There is an implicit assumption that software is easy to change. It is incumbent upon us to make sure software is easy to change.

There are two values of code, one is its function and another is its structure, its value to grow and change.

"Yeah, but they won't give us time." Baloney! That is your problem, not theirs.

How do you make software that is flexible?

Design and architecture are not the only keys to flexibility. Software must be flexible. To make sure your software is flexible, you must flex it.

Nothing makes code more flexible than a suite of tests.

Professional developers are not afraid to change their code under any circumstances because they rely on their tests.

Managers say "We want these kinds of people." But that allows you the right to say 'no.'

There are a whole bunch of things you can say 'no' to. One of those is schedule.

Manager says "Wait, you can go faster if you don't write all those tests."

You say "No, you can't go faster without those tests. We go faster with those tests."

"You can go faster without design on architecture."

"You can go faster without refactoring" -- "You can go faster when you can refactor your code."

The worst thing you can say when your manager pushes on you is "Well, we'll try." There is no trying.

HOPE is the project killer. Hope keeps managers from making the decisions they need to make. Hope keeps developers from being fruitful. It is your job as a professional is to destroy hope. One way to do it is through short iterations. Measure in continually shorter cycles in order to see how much progress you can really get done.

The agile process is not about people, it's about finding out how long it takes small projects to get done. It is a HOPE destroyer.

Say No To Dirt.

Bad code got written because a bunch of bad develoeprs thought it was their job to make the most hideous mess they could make in the shortest amount of time. How that mess got made I don't know but you have to get rid of it!

There is a meme: "We have to get to market, so get the code done quickly. Keep your code as clean as possible all the time." Our mothers tried to teach us this.

The only way to go fast is to go well. Anything worth doing is worth doing well.

Say no to dropping your disciplines.

Say no to your manager, but really, say no to yourself. You're the one that you have to say no to.

You know what your discplines are when you are under the gun. And when you abandon what you do under stress are your true discplines.

Say no to overtime.

I'm not saying don't work overtime, it's good to work some overtime. But you should know your limits. But when your managers enforce overtime, you have to know your limits. You have to be the one to stop yourself.

Say no to meetings.

Managers it is your job to keep your people out of meetings. Meetings are the bane of productivity at companies.

The instant a meeting gets boring, leave. I exercise that right, and I encourage you to do so too.

Say no to dumb restrictions on your development environment.

Who is working in a place where you can't bounce a process? (no changes to a development database?) Engineers need complete control over their environment. You should have absolute control over your environment. You should have absolute control over your facilities?

What does "Saying No" mean? 

You make your argument energetically. And then you work with your manager for some acceptable compromise.

EclipseCon 2010 Trip Report

I'm finally caught up on email, and can take a chance to thank everyone who was responsible for EclipseCon's success this year.

If you're just looking for the slides from my talk, have at 'em.

There were too many talks and too many conversations to list them here. So here are the highlights.

  • Monday (Working with OSGi, The Ribbon IDE, What's New with JDT)
  • Tuesday (Keynote: Oracle, JDT Fundamentals)
  • My talk: Eclipse in the Enterprise: Lessons from Google
  • BoF: Eclipse in the Enterprise
  • Wednesday (Keynote: NASA, Building e4 Plugins)
  • Thursday (Keynote: Uncle Bob Martin, Understanding Git at Eclipse, Vendor Booths: UI Testing, Vendor Booths: Microsoft)
  • Eclipse Day at the Googleplex
  • Feedback to the Conference Organizers

I love tutorial sessions. Working with OSGi: The stuff you need to know finally convinced me that services have a place in my bag of tricks, particularly because they explained that ServiceTracker is as evil as I thought it was. (Go declarative services!)

I was happy to see people taking some practical approaches to the overwhelming nature of the Eclipse IDE. The Ribbon IDE - a leaner, modern UI for Eclipse shows what's possible from an evolutionary perspective (rather than the revolutionary ideas like Code Bubbles) but I don't see The Ribbon IDE needs work, which the presenter admitted.

What's New in JDT? Not too much, I'm afraid. Some small stuff that's nice, but nothing that gets me out of my seat yelling bloody hallelujah. This isn't the fault of the presenters, there's only so much a small team can do. How about this: every year, What's New in JDT should take at least an hour, and be crammed full of new stuff that makes users and plug-in developers super productive, even more than the previous year. But this starts to touch on a larger issue which I won't go in to just now.

Wait a minute, did I just praise Eclipse for being evolutionary in one paragraph, and then admonish them for the very same thing in the next paragraph? Yes I did. I can do that because I'm a non-journalist blogger-hobbyist.


Keynote: Community and Adaptation: It's good to see Oracle participating in EclipseCon. They really didn't teach me anything new, but they were a polished pair of professional presenters.

I missed much of Tuesday preparing for my talk.  My coworkers attended the JDT fundamentals talk, something I've attended in the past. It's a great talk. Fortunately I got a minute with Oliver who explained something unexpected: if you create an Eclipse Java project, and already have class files built for code in your project's source folders, copying the class files into the source folders' output directories is a fine way to bootstrap your project and eliminate some double-building. The class files built by the JDT don't embed special Eclipse metadata.

Eclipse in the Enterprise: Lessons from Google
This was my talk. Terry was supposed to give it with me at first, but given the short amount of time, it made sense to dispose of what might be a microphone hand-off.

My guess is about fifty people attended the Eclipse in the Enterprise talk. People have asked for the slides; here they are.

I apologize for not leaving more time for questions. The 25-minute limit worked, but only by cutting it kind of close. If you still have questions, let me know.

BoF: Eclipse in the Enterprise: Lessons from You

This was the accompanying BoF session where other folks who had similar issues to ours could share their problems and solutions.  About 25 people showed up to this one-hour discussion about how everyone else deals with large Eclipse installation issues. You could feel the camaraderie when it came to some similar issues around support, scalability, and managing OSGi.  I took some notes, but I have to admit they only discuss high level topics, and are not very useful.

I did try to copy down the list of all companies that attended the BoF:
  • EclipseSource
  • JP Morgan Chase
  • SAP
  • Eclipse Foundation
  • Google
  • eBay
  • IBM
  • Ericcson
  • Netcetera
  • (If I missed you, feel free to drop me a line and I'll augment this list.)
One noteworthy thing: UDC. Nobody really uses UDC, though one person knew how to redirect UDC output to their own servrer, and append it with specialized information. Some of that information was passed around by email after the fact.


Keynote: Rocket Science and the Republic: Jeff Norris' keynote was the only one I missed. It was the morning after my talk, and I celebrated that night just a little too much and opted to sleep through the talk.  Ian Skerrett called it the best keynote ever

Building e4 Plug-ins: Interesting. The tutorial gave me a sense of just how different e4 is from the 3.x stream. It's clear that 3.x is going to be around for a LONG TIME (to support TV sets and what not) while e4 will support Java 5 and on. The takeaway: don't judge e4 by using the UI, judge it by using the API. Oh, and running their tutorial on OSX was wonderful. By wonderful, I mean, didn't work at the last step. Wah.


Keynote: Software Professionalism and the Art of Saying "No" by Uncle Bob Martin. What a great presenter. I took some good notes, and was left with all sorts of ideas. Those notes are published as a separate post.

Understanding and Using Git at Eclipse: Great tutorial. I'm ready to start using Git. They managed to keep much of the Eclipse part of Git until the end, which meant us non-contributors got plenty of value out of the talk. My android appreciated getting out of the hotel room to learn about git.

The last talk I attended was Mylyn Reviews - Finding a new Home for ReviewClipse. I love how Google's code review process makes me a better engineer. Anything that will help elevate software development from a being a group of individuals to a team of individuals gets my support.

Speaking of Mylyn, one of the Tasktop employees told me that people blaming content assistance timeouts on Mylyn are "shooting the messenger". According to the engineer, the timeouts are purely due to JDT, but the error dialog mentions Mylyn, so people assume that's the case. I have coworkers that have removed Mylyn because of this. I'll keep this comment in mind the next time such a support issue arises.

Thursday was my opportunity to finally view the vendor booths. I went to most booths that boasted automated testing tools. Once again, I'm still not convinced that there's a good UI testing tool that would solve my integration test problems in a way that integrates with our development process. That isn't to say the development process can't adjust, nor is it a reflection of UI testing tools in general. There's one I would like to play with in the near future, though. It would be inappropriate to mention it here.

Microsoft was there, both as a vendor and presenter! They've been there before, but I find the Eclipse / Visual Studio integration concept fascinating. I'm sorry for not really putting in the time required to understand it, as well as the opinion of an engineer intimately aware of both products.

Eclipse Day at the Googleplex

Many of you asked about whether Eclipse Day at the Googleplex would be repeated next year. Thanks very much for your interest. If it happens I promise to let you know.

Feedback for the conference organizers
  • This morning I was reviewing the site to find the speaker agreement I electronically signed, but could not. Next year would you please email a copy of the speaker agreement upon approval?
  • 25 minutes for most talks. Turns out that worked for me, rather well. From a personal perspective, it took a lot of time to cull my talk into the 25-minute period but in the end it worked just fine.
    • At the same time, speakers must realize that while their talk is listed as a 30-minute block of time, they are not entitled to speak for 30 minutes. They're also not entitled to speak for 25 minutes. They're entitled to a 25-minute block of time, with time on both sides to set up, test, and tear down. Anything else disrespects, the next speaker and his attendees, and all your speakers, who don't want to be late for their next talk.
  • Special props to the A/V staff at EclipseCon. They were instrumental at helping me set up and test my equipment in advance of giving the talk, making the actual set-up very easy.
  • Breakfasts with cereal and fruit. Thank you. Very much.
  • Online program guide: please default the online program guide view to the current day. I don't want to see Monday's program listing by default, anytime after Monday, until the end of the conference.
  • I don't want to have to power up my laptop or phone to get presentation summaries. Sometimes there's only two minutes to choose a talk while shuffling between the rooms. Please provide printed summaries of the talk.
  • I liked having the conference right next to the elevator to the hotel rooms.
  • I look forward to next year's logo adopting the new brand identity.
Miscellaneous notes from the conference

Here's a sheet of notes I scribbled while at the conference. What do they mean?

  • Stars awesome.
  • Credits list goes on forever.
  • Melinda Hsu Taylor
  • Greggory Nations
  • Tucker Gates
  • Lame accident
  • Whitfield
  • Property of Magnus Hanso!
  • GASP! The statue!
  • Better color for the crashed ship?
  • Black smoke loses its effectiveness now. Just the sound of the bad guy coming.
  • "It's good to see you out of those chains?"
  • Body switch?
  • Weak!
Oh, right I took these notes while watching Lost in my hotel room.