August 14, 2008

Farewell Big O, Hello Big G

Tomorrow is my last day at Oracle.

I was one of the early wave of employee bloggers at Oracle. I wrote my first entry five years ago, and was pretty productive on the blogging front for a while. Set up the once-very-popular Orablogs aggregation site that predated blogs.oracle.com by some number of years.

I managed to get a bit of coding done in the meantime. Somehow I became the architect for the extensible IDE platform that sits underneath JDeveloper, SQL Developer and other desktop tools at Oracle (it's kind of odd being referred to as an architect of something you didn't exactly... well... architect. But sometimes software engineering is a strange kind of engineering by any normal standards). I always believed that JDeveloper was a great tool with a lot of potential. I hope the excellent team of crack ninja Java coders who work on it can be given the freedom they need to continue to evolve it into a better framework in the future.

Oracle has been a great company to work for. There are so many things about it that I loved, and of course many other things I didn't love so much. But it's not a bad place at all to spend ten years of your adult life. I met some very fun and very intelligent people, made some really good friends, got the awesome-beyond-words chance to come to the USA, and worked on some really challenging and engaging projects. It's been a long road since that graduate offer back in 1998.

Soon I'll be starting life as a Noogler after a one week long stint of unemployment (my first ever since graduating!). Have no idea what I'll be doing at Google yet, but I hope it's a good chance for me to try something new, learn some fun stuff, meet some interesting people. You can keep up with the new adventures if you care at blog.dubh.org...

So long and thanks for all the bugs :) [Apologies to Adams]

August 17, 2007

Technorati

Technorati Profile

August 12, 2007

Java Coding Bloopers

I've posted the first in a series of Java Coding Bloopers over on my other blog. I'm posting them there, and not cross posting to my Oracle blog as I usually do, because it's painful trying to post code samples to the Oracle blog. The software we use mangles blog posts that contain code.

July 26, 2007

Building an extension to JDeveloper or SQL Developer is now easy

The "new features" collateral for the JDeveloper 11g technical preview didn't contain the slightest mention of it, but we added a lot of new tools in this release to make it easier than ever to build extensions for JDeveloper and SQL Developer.

Partly to figure out what works in terms of knocking together screencasts from my weird home machine setup, I put together a five minute video webcast demo showing some of the new functionality.

The demo shows how to build an extension that installs a simple "Hello World" item into the New Gallery.

Click here to see it. Let me know what you think, and if you're interested in seeing more demos of the new extension development functionality. All feedback appreciated :)


July 25, 2007

More on email inbox bliss

So far my attempt to maintain an empty inbox is working out pretty well.

One of the most effective things that worked was to get rid of folders. Previously, I was a folder freak: my email was "organized" into a bewildering,  ever changing, hierarchy of folders. Rather than making it easier to find stuff, it was actually much harder. Before I could find something quickly, I had to try to figure out which folder I had decided to put it into.

I draw a comparison between this and usage of, say, Google Search vs. a directory service like dmoz. Directory services categorize the web into a wonderful hierarchy. But in practice, it's almost always more effective to just search the conceptual single folder containing the whole web via google search.

I now have a small number of folders. Apart from the inbox, trash, and sent folder, the remaining folders can be categorized as:

  • A single @Respond folder. Messages that I need to respond to, but can't do so immediately because they require some investigation go here. I treat this like a todo list, and review it several times a day.
  • A single Archive folder. Anything that I don't need to keep track of actively, but might be interesting for future reference goes here. This is where the vast majority of email that I don't delete ends up.
  • Important short term projects for which it's convenient to collocate all the messages. I currently have a single folder that falls into this category, for tracking correspondence related to my green card application. Although I have several other important short term projects, none of them really need a separate folders.
  • High-volume, low value mailing lists auto filters. For instance, I have a folder called Bugs into which gets automatically filtered all notification emails from our bug database system. I rarely have to act immediately on such emails, but it's useful to review them once or twice a day. I usually mass delete the contents of these folders on a daily basis, since they're basically copies of information available elsewhere.

As a result of this, I now have roughly 5 folders (not including inbox, trash and sent). This works well for me. It speeds up the rate at which I can process incoming email, since there are fewer choices about which action to take for each incoming message.

Merlin Mann's 43 Folders site talks about this a lot. His recent tech talk on Inbox Zero summarizes a lot of the useful content related to email management posted on the site.

This entry is cross-posted from duffblog 2.0.

July 6, 2007

Asserting Control over the INBOX

Sometimes I'm a bit disorganized. Last week, after purging my INBOX of some 15,000 messages (discovering quite a few that I had read but not replied to in the process), I decided that it's finally time to assert control over my INBOX.

It's not the first time I've tried this. The lofty goal of maintaining an empty INBOX is very appealing in theory, but it's easy to get lazy. Before you know it, you end up with thousands of disorganized messages again.

The first step in this was turning down my "autocheck" frequency. I think a big part of the reason that I'm a bit disorganized is that email messages arrive in a constant stream throughout my day, and so I'm always processing them while doing other tasks.

My approach now is to set aside 5-10 minute periods every hour or so specifically for triaging email. Any email I can respond to, or action, within that period, I do so immediately. Anything else, I add to my TODO list on the excellent Remember the Milk service, and then archive the message to a folder.

The second part of this is making it easy (and I mean really easy) to archive messages. For any message I read in my INBOX, I must do one of the following immediately:

  • Delete it if it's spam, or automated email that I don't care about
  • Reply to it if it can be actioned within the 5-10 minute email period, then archive it to a folder or delete it.
  • Add a TODO item, then archive it to a folder.

I've pared down my list of folders to a minimum (3 main folders, with some extras for server side filtered automated email) so that it's easier to figure out the destination for any given message. Thunderbird makes it really easy to search for messages within a folder, so I realized that having a gazillion hierarchical folders was actually making it harder to find old messages.

To make it really easy to quickly move messages into a folder, I'm using the excellent keyconfig extension for Thunderbird to map a single keystroke to moving messages to a folder. For example, I can now hit Ctrl+J on a message to immediately move it to my "JDeveloper" folder. I can't overstate how useful this is. It's probably the single most effective thing I've done to make it easier to control my INBOX.

This entry is cross posted from duffblog 2.0

June 8, 2007

Bob Lee on Guice

A video of a talk by Googler Bob Lee on the Guice dependency injection framework is now online.

I went along to building 43 at Google with a few collegues on Tuesday to hear this talk. At about 1:00:35, you can almost hear me ask a question about whether it can inject into non-public constructors. I was pleased, although not particularly surprised, to hear that indeed it can... Ah... Blissfully clean APIs.

This was also my first visit to the Googleplex. Very interesting place... they have code in the restrooms. Blimey. :)

Aaanyway... Bob does a great job in the talk explaining why dependency injection is useful, and I think he convincingly demonstrated that Guice makes it all pretty easy. Now I just need to invent a fun side project as an excuse to mess about with it...

June 6, 2007

Microsoft punish VS addin developer

Microsoft recently threatened legal action against a developer because he had the tenacity to write a useful plugin for Visual Studio.

We seem to practically have to beg people to write extensions for JDeveloper... the approach Microsoft is taking with this seems rather counterproductive to building a healthy community plugin infrastructure around its product.


June 4, 2007

Aggregator code available

Fun, if somewhat geeky, weekend. I'm in the midst of modernizing the aggregator engine behind orablogs. Made some good progress, though...  For the first time, I managed to read the existing entries of all 151 existing orabloggers without something going disastrously wrong. And the new aggregator even picks up several garbled feeds that it couldn't handle before, thanks to ROME.

If you're interested, I've made the code available on the orablogs-ag google code project. You can view the source in the subversion repository, or check out a local copy. Bear in mind that it's a work-in-progress. It demonstrates a few possibly interesting things:

  • Some of the minor contortions necessary even with ROME to cope with extremely b0rked RSS and Atom feeds.
  • Using the most excellent tag soup to pass a universe of bizarrely formatted HTML through the wonderfully symmetric SAX API for processing.
  • Filtering HTML based on a whitelist to try to prevent XSS (cross site scripting).
  • Pushing data into a mysql database (yes, I know...) using JPA / Toplink essentials. Did I mention that JPA is a beautiful thing?
  • Multithreading using the executor framework in Java 1.5. The aggregator kicks of up to 25 threads (which is quite probably a little bit too aggressive) so that it can aggregate several blogs in parallel. The old one was horribly sequential.
Anyway, hope it's of interest to someone out there.

May 29, 2007

Take a drive by Redwood Shores

Google just introduced a new feature on Google Maps: Street Views. It's insanely cool. Check out this driveby of Oracle HQ in Redwood Shores...