Showing posts with label eclipse. Show all posts
Showing posts with label eclipse. Show all posts

Sunday, August 14, 2011

Planet Eclipse Is Misrepresenting Me

All,

Unfortunately the wrong feed URL for my Wordpress blog was fed into Planet Eclipse and so the following posts are not mine, even though they seem to have my name on them.
  • Robert Konigsberg: Senior Software Engineer
  • Robert Konigsberg: Cure for the itch
  • Robert Konigsberg: Java Developers (ALL LEVELS) San Antonio TX
  • Robert Konigsberg: 2 Fast thrice Furious
  • Robert Konigsberg: Eclipse CREDENTIAL_ERROR
The Eclipse bug around which all of this has been based has been updated with a request to correct the feed.

Thanks to Lars Vogel for pointing this out.

Friday, March 11, 2011

Workspace Mechanic 0.0.6 released to the testing update site

I think enough progress has been made on the Workspace Mechanic for Eclipse to give an update. Most of this you already know if you subscribe to the mailing list.
  1. There is now an update site for stable releases and one for testing releases.
  2. The Workspace Mechanic for Eclipse no longer depends on org.mortbay for JSON parsing. It also no longer depends on Mylyn because it has its own popup.
  3. Tasks may be specified by URL. Actually, it's slightly more complicated than that, but you can read all about it in the design document, which will eventually be turned in to proper documentation.
  4. Prettier icons.
  5. I've published tests for the project, and added many more in the last month.
  6. Lots of issues closed - too many to mention.
  7. I saved the most exciting thing for last. Michael Pellaton is giving a talk at EclipseCon which mentions the Workspace Mechanic for Eclipse, as well as his project: Eclipse Team Etceteras. If you're at EclipseCon, check it out.
Please try it out by installing it from the testing repository, and be sure to provide feedback!

Update: 11:07PM I've updated it to 0.0.7, adding relative URI task paths and supporting LASTMOD preference tasks supplied by URI.

Sunday, February 06, 2011

@RunAsJUnitTest, @RunAsPluginTest

After many idle months I'm starting to pick up work on the Workspace Mechanic for Eclipse, and that included finally publishing some of the tests that accompanied it.

And then, after starting to work on the tests some more, I realized I was missing something I used while writing plug-ins internally at Google, and so I copied them into the internal tests package. They're mostly documentation, but useful documentation. Here's the slightly reduced code for both of them. Their purpose should be clear:
/**
 * Declares that this test can be run as a JUnit test, and does not require
 * the trappings of running as an Eclipse plug-in test.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface RunAsJUnitTest {
}
 
/**
* Declares that this test must be run as a plug-in test.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface RunAsPluginTest {
}
Nobody likes running tests in the plug-in container if he or she doesn't have to. Surely, I'd much rather run nice fast JUnit tests, particularly when I've separated out code specifically for fast unit tests.

Of course, without infrastructure to support these, they're little more than documentation, but documentation that has type completion in the IDE.

So, what do you think? Would it be reasonable to have Eclipse support annotations like these? Do you think these have merit, or are utterly worthless?

Thursday, January 27, 2011

guava-osgi project gets a fresh update!

Thanks to Mikaël Barbero, the guava-osgi project has been revived!

At the new update site you can find bundles for Guava versions 3, 4, 5, 6 and 7. This is just in time for the imminent release of r08, and we will publish a plug-in shortly after its release.

Between me and Mikaël, guava-osgi will henceforth be updated just days after Guava releases. This is because Mikaël wrote a script that automates most of the nasty work.

Please give your thanks to Mikaël!

Sunday, August 22, 2010

Presenting the Google/Eclipse/Enterprise talk in Reston VA Oct 13

Brief note: I'm excited to be presenting the talk "Eclipse in the Enterprise: Lessons from Google" at Eclipse Enterprise Days on Oct 13 in Reston, VA.

This looks like a great conference for people who support large Eclipse user bases -- you know who you are -- if you attended the Eclipse in the Enterprise BoF at EclipseCon, this conference is for you. From the conference page:
"Attendees must be an employee or contractor of an "Enterprise User" of Eclipse technology. Enterprise users typically are responsible for the use of Eclipse by hundreds and even thousands of developers in their organizations."
Are you planning to attend this conference? Let me know.

Thursday, July 15, 2010

Eclipse Day at the Googleplex redux: Mr. Grumpy hits the big time

At the request of the Google Open Source Programs Office ... no wait, that's wrong. At the advice of the Google Open Source Programs Office ... no ... start again.

Due to an offhand comment by someone who just happens to work at the Google Open Source Programs office, I turned Ms. Wise and Mr. Grumpy into a big screen hit. You thought it took no time to turn $%$@ My Dad Says into a TV show. We're working at the speed of thought, here.

If you loved the Mr. Grumpy script, enjoy watching a computer try to pronounce "Aniszczyk."

Why wait to register for Eclipse Day at the Googleplex?

Ms. Wise and Mr. Grumpy were chatting over some tea:

Ms. Wise: Mr. Grumpy, aren't you excited for Eclipse Day at the Googleplex 2010?

Mr. Grumpy: No. Grump.

Ms. Wise: No? But Mr. Grumpy, why not?

Mr. Grumpy: Grump. I don't have any money.

Ms. Wise: But it's free!

Mr. Grumpy: Grump. I don't know when it is.

Ms. Wise: Wait, I can tell you: it's
Thursday, August 26, 2010
9:00am - 5:00pm
And it's at the Googleplex!
Mr. Grumpy: Grump. Nobody interesting is presenting.

Ms. Wise: Now I know you're being silly, Mr Grumpy. We've got Chris Aniszczyk. He's like the voice of Eclipse. And there's Xavier Ducrohet from Google, who's going to tell us about the new tools in Android development (I hear The Android is very hot these days.) There's a speaker from Tasktop -- they bring us Mylyn, and Ed Merks -- he's like Mr. EMF. (Does EMF stand for Ed Merks' framework?) And of course, Wayne Beaton, who at least once jumped into an icy river. He's so crazy, who knows what he's going to say? Honestly, the list goes on and on.

Mr. Grumpy: Grump.

Ms. Wise: And did you see the Ignite session on the schedule?Just when you can't imagine getting any more useful information - blamo!

Mr. Grumpy: Grump. I want to go to Google for the food.

Ms. Wise: Mr. Grump. Oh, Mr. Grumpity Grump. Google is providing lunch! And did I say the event was free?

Mr. Grumpy: Grump. I don't know where to register.

Ms. Wise: Listen, Grumpton McGrumpinator. it's right there at http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010. It's as easy as sending an email.

Mr. Grumpy: Grump. Those are all good points.

Ms. Wise: Then will you attend?

Mr. Grumpy: No. Grump.

Ms. Wise: But, Mr. Grumpy. Senior Grumhold Grumbling Grumpillious Grumper. Why? Why won't you attend?

Mr. Grumpy: Grump. Because Robert Konigsberg isn't presenting this year.

Ms. Wise: Oh ... yeah. Yeah. I forgot about that. Grump.

---

Don't be like Mr. Grumpy!  This is our best slate of speakers yet. Go attend Eclipse Day at the Googleplex 2010. Mention my name for 10% registration discount and a chance to win a new car!*

* New car is speck-sized and only available in invisible. It may or may not be an actual car. It may only be a firm handshake.

UpdateThis compelling story is now a full motion picture! Enjoy.

Tuesday, June 22, 2010

Downloading Eclipse via Bittorrent == Community (Helios edition)

Tomorrow is the public release of Eclipse 3.6, a.k.a. Helios. I reminded you last year why I prefer downloading via bittorrent. It bears repeating.

Those of us that have become Friends of Eclipse are eligible to download it today. Like last year, I'm using the bittorrent links. (If you're not a Friend of Eclipse, you'll have to wait until Wednesday.)

But here's why using bittorrent to get your Eclipse distribution is a contribution to the Eclipse community:
  • Downloading by bittorrent means you can seed many other users.
  • This gives the rest of the community faster access than a standard download.
  • For extra credit, download more distributions than you need, providing even more seeds. For instance, I don't use Windows, but many people do. I can make a difference for those users, too.
  • Any bandwidth you contribute so someone else can download Eclipse results in less bandwidth required by the Eclipse Foundation. In other words, you're saving money for the Eclipse Foundation
  • It gives me a chance to do another 48-hour analysis.
So, please, download via bittorrent. And, really, have you made your donation to become a Friend of Eclipse? Please don't make me get Ira Glass to ask you.

Thursday, May 20, 2010

A little fun with The Preference Recorder

Here's a clever little trick you can use with the Preference Recorder in the Workspace Mechanic for Eclipse:

Let's say you built a Preference Task that you want to apply to your workspace. So you put the .epf file in one of the registered directories.

Turn on the Preference Recorder. Let the Workspace Mechanic scan for, and run tasks. It should find your new .epf and offer to apply it, and any other tasks that fail the evaluation phase. After the repair phase completes, turn off the Preference Recorder and see what changes were actually applied.

Kind of fun. If you find that kind of thing fun.

Monday, May 17, 2010

The Preference Recorder

Earlier in the week we announced the release of the Workspace Mechanic for Eclipse on the Google Open Source Blog. This is a tool we have used inside Google for a couple of years, and with a bit of rewriting, made most of it available via open source. (We'd like to get the last piece of it out there, if more than anything, as an idea of what you can do with the Workspace Mechanic for Eclipse.) But this blog post isn't really about what we haven't released, it's about what we wrote specifically for the public release: the Preference Recorder.

This is a nice feature, and I don't want to underscore its usefulness. It'll probably help to think of it like an office suite's macro recorder -- turn it on, it listens to what you do, turn it off, and it builds a nice macro that recreates your steps. Same thing with the Preference Re: turn it on, it listens to preference changes. Turn it off, and it builds a nice file that recreates your steps!

One of the most common uses of the Workspace Mechanic for Eclipse is to propagate preference changes among workspaces.  Do parts of this sequence of events sound familiar?
  1. File > Export > Preferences
  2. Save to /tmp/first
  3. Window > Preferences
  4. Change preferences
  5. File > Export > Preferences
  6. Save them to /tmp/second
  7. $ diff /tmp/first /tmp/second > /tmp/delta.epf
  8. Tweak /tmp/delta.epf until it looks like you want. This includes adding preference metadata to match the format required for preference tasks.
What a pain!

So we wrote the Preference Recorder. It's much simpler!
  1. Right-click the Workspace Mechanic trim widget
  2. Preference Recorder > Start Recording
  3. Window > Preferences
  4. Change preferences
  5. Preference Recorder > Stop Recording
  6. Use dialog to select which preferences you actually want to export.

It'll spit the file out in a way that is compatible with the Workspace Mechanic, but heck, even if you don't want to use it to write tasks, it's a nice way to track your changes.

Friday, May 14, 2010

Update: Workspace Mechanic now has an update site

Sorry for not getting this done earlier today, but now the Workspace Mechanic for Eclipse now has an update sitehttp://workspacemechanic.eclipselabs.org.codespot.com/hg.update/mechanic

Also I renamed the mailing list from workspace-mechanic@googlegroups.com to workspacemechanic@googlegroups.com -- yes the hyphen has been removed.

Thursday, May 13, 2010

Announcing the Workspace Mechanic for Eclipse

If you saw the slides from my talk at EclipseCon back in March you may recall that we discussed a tool we had built for propagating preference changes across workspaces. Today, I'm happy to announce that the tool, now dubbed the Workspace Mechanic for Eclipse, has been released as open source. And, yes, it's EPL 1.0!

The Workspace Mechanic can be used in both single-user and enterprise modes to take on automating maintenance of all your Eclipse environments. Check out the project overview for details.

One of the coolest things we've added specifically for the public release is a Preference Recorder which listens to changes to preferences, and then saves them as tasks you can apply to all the other workspaces on your machine. Or, the planet. Why not?

The Workspace Mechanic has been tested on Linux and has been sanity tested on OSX. I'd love some feedback on Windows-compatibility issues, because I don't have a Windows machine to test on anymore.

Anyway, I just spent about 13 hours getting the final touches on the repository: fixing wiki content, fighting Mercurial, and finding an unpleasant bug (!) related to different versions of the JDK. (Isn't that supposed to not happen?). Drafting this post is like the last thing on my list, and I'm just all out of skill and energy, and a DVD box set just arrived, so how about I point you to the Google Open Source blog post, and I’ll go watch TV.

Please enjoy.

Monday, May 03, 2010

Apprenticeship Patterns is now Creative Commons Licensed

Apprenticeship Patterns has been open-sourced under a Creative Commons license, according to Ade Oshineye, one of the book's two authors.

Apprenticeship Patterns cataloges dozens of behavior patterns to help you perfect essential aspects of your craft. Compiled from years of research, many interviews, and feedback from O'Reilly's online forum, these patterns address difficult situations that programmers, administrators, and DBAs face every day.  [ref]
As is typical with patterns books, much of the information will have an "I already knew that" feel about it, but it's pattern books aren't about learning new information, they're about unlocking information already in your mind. In this particular case, Apprenticeship Patterns is written as a useful text for new engineers. This comes from the Goals section:
We have written this book in order to share solutions to the dilemmas that are often faced by inexperienced software developers. We’re not referring to technical dilemmas; you’re not going to find any Java design patterns or Ruby on Rails recipes in this book. Rather, the dilemmas that we focus on are more personal, concerning your motivation and morale. This book should help you through the tough decisions that you face as a newcomer to the field of professional software development.
I had the honor of reviewing this book and providing feedback to the authors prior to its publication. So, I think their goals are a bit misleading. I'm a very experienced engineer, and I repeatedly found ideas and inspiration from it. It's not a very long book, it's easy to read, and I think it's ideal for professional reflection. I've recommended this book to several people, and those that have read it have had very positive experiences.

So, as I said, the book is now available in an open source format. As Ade wrote in his announcement:
Just like we were one of the first O'Reilly books to experiment with using a wiki to get early feedback during the writing process we're also one of the first O'Reilly books to experiment with publishing our material under a Creative Commons license. Starting from today the book is now available here: http://apprenticeship-patterns.labs.oreilly.com/
How exciting! Now this book will become the next one I review in a reading group.

Addendum: Speaking of reading groups, one reading group has been videorecording its Apprenticeship Patterns sessions. Here's Episode 1, and a Search for further episodes.

Attribution: I lazily stole the title of this post from Ade's announcement.

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 http://guava-osgi.googlecode.com/svn/trunk/com.google.guava.site/. 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

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.

Contents
  • 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
Monday

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.

Tuesday

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.

Wednesday

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.

Thursday

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.
  • FLASHBACK!
  • 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.

Friday, March 19, 2010

Learn about how Google uses Eclipse

Hey EclipseCon attendees,

If you're interested in how Googlers use Eclipse to develop some of the products you use, come to our talk on Tuesday, 4:15PM:
Eclipse in the Enterprise: Lessons from Google 
Providing Eclipse tools to thousands of engineers at Google is a satisfying job, but it's not always easy. In the last two years supporting Eclipse at Google has gone from casual support by enthusiasts in their spare time to a dedicated team mandated to make engineers' lives better. We will talk about the plug-ins we've written and processes we've established to provide features, enterprise deployment and support, and even share some of the pitfalls discovered along the way. 
And then, come to the Eclipse In The Enterprise BoF on Tuesday at 7:15PM for an opportunity to discuss how Eclipse is used at your organization!
Hey, you! Yes, you -- don't you work for that big company? Are you supporting hundreds, maybe thousands of your Eclipse-using colleagues? Are upgrades and environmental consistency your problem, too? Are you constantly struggling with fitting your company's build system to the IDE and Eclipse builders? Is your source code base so large that you're continually fooling Eclipse into thinking it's smaller?

Then come meet your peeps at the "Eclipse in the Enterprise" BoF. Let's share war stories and ideas. Impress everyone with your clever solutions and work-arounds! We're all facing the same issues, so come, let's talk.

Monday, January 18, 2010

My talk at EclipseCon

This EclipseCon will be my fourth, but it will be the first year I give a talk: Eclipse in the Enterprise, Lessons from Google, with my colleague and friend, Terry Parker. This will be a fairly similar talk to the one we gave at Eclipse Day at the Googleplex, only condensed and brought up to date (we make new mistakes learn things all the time!)

Terry and I are very excited to give this talk at EclipseCon, and if there are any areas you would like us to try to focus on, don't hesitate to let me know.

Tuesday, January 05, 2010

Township Jitney Schedule: Software Development History

This past weekend I wrote an app for my local town: it displays a route, and schedule information, for the town's jitney. (In local terms, a jitney is a township-sponsored shuttle service for resident commuters to and from the train station.) You can see it at http://myjitney.appspot.com.

I'd like to discuss the short development history of this web application.

The Original Plan


The original plan was to write a public, custom Google Map to be shared with the other residents using My Maps, a tool that allows users to create customized maps.

The problem with My Maps is that each marker had be placed individually, and that's tedious: at least to me. What I needed was a programmatic way to feed a set of addresses, determine each address' coordinates (you know, latitude, longitude) and place markers in a custom map.

For that I wanted the Google Maps API in Javascript, and if I had to use the Javascript API for determining coordinates, I might as well use it to build the map from scratch.

The Prototype

The prototype was written in pure Javascript, using the Google Maps API. It was really basic; routes were stored in JSON (natch), and the whole app lived inside a Google Maps widget.

To get started with the API I found an excellent Google Maps API Tutorial written by Mike Williams. The relevant entries were the entries on Markers and info windows,  Polylines from XML and Geocoding Multiple Addresses.

In fact, I hacked a version of the geocoding example by adding all the jitney stop addresses, and from that I got the coordinates of most of the map markers. For those addresses that the API couldn't parse, I used a tedious trial and error process.

The prototype took five hours to write: one hour to parse and codify the data, one hour for figuring out how to get reasonable coordinates for each address, and three hours to get my head around Javascript. For me, writing Javascript is like this: trial, error, trial, error, google, trial, trial, error, trial, error, google, but by the end, I got a map that showed all the jitney stops and their paths.

Two issues with writing the app in Javascript were my basic lack of comfort with Javascript, and also, the app didn't render on my Android phone. I dreaded debugging a web app on an Android phone.

The Rewrite


So I needed to rewrite the app, and by need, I mean want. 24 hours earlier I could have just manually built a damn custom map with My Maps, but now I was committed to code and more code. For the rewrite, I chose GWT. The Google Web Toolkit is a terrific piece of technology; you can write web applications using Java in Eclipse, my preferred IDE, and with a debugger. Since Google provides a GWT implementation of the Google Maps API, it was reasonable to port the existing prototype to GWT. The Google Plugin for Eclipse, a fabulous tool that combined GWT, AppEngine, and Eclipse, made it dead simple to deploy the app to to appspot.com which meant a permanent home to the app, along with a back-end infrastructure in case there was ever a need for servlets or a back-end data store.

(This is a great time to point out that I think that GWT is magic, and the GWT team are a bunch of magicians.)

It took four hours to write a feature-equivalent version of the application using GWT. Most of that time was spent familiarizing myself with the various APIs and getting reacquainted with GWT.


I didn't want to go through the effort of learning how to work with the AppEngine database, so the rewrite still shipped the route data as java source turned into javascript. One of the great benefits of this turned out to be that the map loaded super-quick. So I moved the CSS to the HTML <style> tag, removing yet another server request.

Thanks to GWT the app ran perfectly fine on Android. But more important, thanks to GWT I could write code in a more familiar style, and easily manipulate the DOM outside the web page's map object.

So I did.

Spit and Polish


I spent two more days adding features and polish: a pretty display of the schedule. A list of the routes so each could be viewed independent of the others. A visual indicator of when a jitney will next stop at a certain route.

One of the features was to replace the straight lines from stop to stop with paths along the street. The township had a map that laid out the supposed bus paths, so the trick was finding the coordinates where the paths turn. That turned out to be surprisingly easy with this small piece of Java:

map.addMapClickHandler(new MapClickHandler()
  @Override
  public void onClick(MapClickEvent event) {
    System.out.println(event.getLatLng());
  }
});


Then it was just a matter of running the web application and clicking each spot along the path, feeding the console output back to the web application as intermediate points.






Before

After

Besides adding features, I spent a ton of time dealing with things like positioning and formatting. I spent 30 minutes building a general purpose route building API. I spent 15 minutes on a general purpose algorithm for calculating the center of a group of points. 30 minutes went into making a widget that looks like, but isn't quite, an anchor tag. I spent endless time playing with different types of GWT panels, setting widths, heights and spans. I played with CSS. I failed at CSS, and then I played with it some more. It seems I have the same development cycle for CSS that I do with Javascript: trial, error, trial, error, google.

Done.

By Sunday night the app was done, and so was I. But it's still not done. Even with such a small one-off project, there so many features that could be added. For instance, while the app runs on Android (and reportedly the iPhone) it's not really built for small phones. The individual links are too small to be useful.

But also, I'd like to use Street View to show each stop. Unfortunately, while a Street View API exists in the Javascript API, there's no equivalent in the GWT API. I probably spent about two hours before I recognized that it would involve another painful, endless cycle of trial, error, trial, error, google. Too bad.

Done?

Damn. While writing this post, someone provided feedback, requesting a feature that made too much sense not to implement. So instead of cleaning up this post I'm reading about geocoding again. I love writing software.