Archive for the ‘Reviews’ Category

GWT IDE Selection

I’m starting a new GWT project at work, so I wanted to select the best IDE for the job. I installed the very latest versions of these IDEs along with their respective GWT plugins:

  • Eclipse 3.5 (Galileo)
  • NetBeans 6.7
  • IDEA 8.1

I’ll warn you right now that this is not an in-depth review or comparison. I looked just deep enough to satisfy my own curiosity and to choose a tool for my own coding.

Eclipse

Eclipse has an advantage in that Google supplies the Google Plugin for Eclipse, ensuring the plugin generates the exact same directory layout as the GWT command line tools. After installing Eclipse and the plugin, I generated a sample GWT project and it ran perfectly in hosted mode.

This is where things went badly, however. As you may know, GWT services consist of two interfaces and a class:

  • MyService
  • MyServiceAsync
  • MyServiceImpl

For my first (and only) trick, I performed a Rename refactoring on MyService. Eclipse renamed that interface, but not the other interface or implementation class. Instead, Eclipse immediately lit up with errors, forcing me to manually rename the Async interface and Impl class. Epic fail.

NetBeans

NetBeans also supports GWT through the gwt4nb plugin. I generated a project and noted it creates a slightly different directory layout, but nothing that would introduce problems.

Like Eclipse, NetBeans failed the Rename refactoring test. Unlike Eclipse, however, NetBeans did not immediately indicate errors in the mismatched class and interface names. Thus, errors would only manifest later at runtime. I gave up very quickly.

IDEA

Unlike the other two IDEs, IDEA’s plugin does not yet support the new directory layout introduced in GWT 1.6. I initially assumed this would be a big problem, since you also see deprecation warnings when you launch your app in hosted mode.

In reality, however, the directory layout differences only manifest themselves in the output directories. The source directories are the same, so a simple Ant buildfile can produce a more standard GWT 1.7 WAR-style layout.

Of the three IDEs, IDEA is the only one to properly implement the Rename refactoring. When you rename your Service interface, the other interface and class both rename in unison.

Also, IDEA does a kick-ass job of keeping CSS styles in sync with styles referenced in GWT code. As I discovered today, when I define a style name in Java code, IDEA shows it in red and can automatically insert a new style class into my CSS file. I also refactored a <div> identifier in my HTML file, and IDEA correctly refactored the String reference in the Java source code!

Conclusion

I’ve used IDEA for years, and was initially put off by the fact that IDEA 8.1 does not yet fully support the new GWT 1.6 and 1.7 directory layout. In practice, this is a non-issue, and IDEA 9 will support the latest GWT conventions. IDEA’s first rate refactoring, along with tight integration with CSS classes and HTML identifiers really set it apart from the other IDEs.

Kindle Letdown

I was hoping for a lot more than this:

I certainly hoped the Kindle 2 would be a LOT less than $359. It also seems like it wastes a huge amount of real estate on the keyboard, a rarely used feature in a reading device. A soft iPhone-like keyboard would be great.

I plan to wait for the Kindle 3. At the rate technology evolves, I expect them to create my dream device at my dream price in a few years.

Outliers

I recently finished Outliers: The Story of Success, by Malcolm Gladwell. I thoroughly enjoyed it and learned a lot along the way. Gladwell challenges many deeply rooted assumptions about success, most notably the belief that successful people got where they are today by nothing more than hard work and innate talent. Instead, factors like your date of birth, family, birthplace, and sometimes random opportunities exert more influence than we like to admit.

Did you know that your month of birth can profoundly impact on the rest of your life? An incredible number of elite Canadian hockey players were born in January, February, and March. Why? Read the book to find out. Hint: this information may also help you decide to hold your child back rather than enroll them in Kindergarten early.

Other things I learned…

  • How rice paddies affect math test scores.
  • How summer vacation disproportionally harms poor students.
  • Why airline pilots from some cultures crash more often.
  • Perhaps “prodigies” aren’t so special after all.

I suppose Outliers will frustrate some readers. After all, if you were born in the wrong month, or year, or to the wrong parents, then how can you succeed?

I saved the best for last, the 10,000 hour rule. Gladwell argues that to become a master, whether it’s in computer programming, sports, or playing music, you need to practice around 10,000 hours. He backs this up with several case studies. This is fascinating, because it means any of us can choose to become masters at something.

Perhaps I can be a great comic artist after all. I need to spend more time practicing, that’s all. I don’t know if I can hit 10,000 hours, but I now know that my success is possible. I was not born with innate artistic skills, nor were other great artists. They paid their dues, and so can I. This is why I recommend Outliers.

Last.fm for Android

While waiting for dinner earlier tonight, I installed Last.fm on my G1. I don’t have a Last.fm account, so I signed up for a new one. While waiting for a response from the server, the UI froze. This screen is never good:

Android programmers need to know this: Never make network calls on the main application thread.

2008 Year in Review

This is the best year-end review I’ve ever written. I promise. 2008 was a year of contradictions. Around May/June, when gas prices spiked, we were told to expect sky-high oil and gas prices…”forever”. I don’t recall anybody predicting $1.35/gallon gas, yet that’s about what I paid this morning.

In 2008 we learned…with no advance warning…that the entire financial industry was suddenly frozen and we’d be thrown into an epic depression unless we instantly printed $700 billion within DAYS! If we didn’t see it coming, why was it so important to fix the problem quickly? Somehow the people who were blind-sided are the same people who now claim to know how bad things will be without bailouts. WTF.

2008 taught us that people will stop buying SUVs if gas prices go up enough. And as soon as prices drop, people will lose interest in the shitty economy cars, because tiny cars with wimpy engines and boring designs suck. GM sucks. Chrysler sucks. Ford sucks. Stupid tax policies on diesel fuels prevent Ford from selling their 65 MPG diesel car in the U.S.

  • On Jan 3, 2008, Blu-ray and HD-DVD were still locked in a battle for supremacy. HD sucked for consumers because there were two competing standards. On Jan 4, 2008, however, the war abruptly ended with this announcement from Warner Bros. On Feb 15 Wal Mart announced it would no longer carry HD-DVD, and on Feb 16 Toshiba halted production of HD-DVD hardware. Game over. You barely even remember this stuff by now.
  • Best tweet of 2008: “Batman: EPIC BALE”.
  • Funniest tweet of 2008: “Gordon Ramsay: one bad puffin eating mofo.”
  • Best line in a technical article: “Along with the data processing framework, Doug Cutting also included a fault tolerant, replicated, distributed file system with Hadoop just because fuck you.”
  • 2008 was not the year of Linux on the Desktop.
  • 2009 might be the year of Android on the Netbook.
  • Scala caught a lot of buzz during Jan and Feb.
  • Python 3000 came out. Jython saw a resurgence. Sun even hired two high-profile Jython developers.
  • Programmer of the year: Charles Nutter. Follow him on Twitter, he’s a machine.
  • Apple kicked ass in 2008. MacBook Air, Apple TV 2.0, iPhone SDK in March, iPhone 3G in July, App Store, MobileMe, Solid Aluminum manufacturing process for new MacBooks, etc.
  • Vista is about to die. Within the last few days, we learned Windows 7 beta is complete, and expect to see it released in mid-2009.
  • Yahoo is dying. Back in June we heard a lot about programmers and management leaving the company. Yang is out. Microsoft failed to buy them.
  • Google kicked ass in 2008. GWT 1.5 came out. Chrome 1.0. The Open Handset Alliance now boasts 47 members. Android 1.0 came out. They held their first Google I/O conference. Their apps continue to improve.
  • In 2008, New York Governor Eliot Spitzer resigned after we found out he used a hooker.
  • IL Governor Rod Blagojevich is caught up in a big scandal but so far hasn’t resigned.
  • On March 12, a woman became fused to her toilet seat after sitting on it for two years.
  • On March 14, Discover told us how the heck a woman became fused to her toilet seat.
  • Jack Kevorkian was released from prison and ran for congress. He did not win.
  • XM and Sirius merged.
  • Expelled: No Intelligence Allowed, is the least intelligent movie of the year.
  • Grand Theft Auto 4.
  • Midwest floods. Southeast droughts.
  • Georgia Hillbillies invent another fake Bigfoot story, get front page coverage on CNN.com
  • On Sep 10, they activated the Large Hadron Collider (LHC). It swallowed the entire universe and produced an identical universe on the “other side”. We didn’t notice, although everything is backwards now.
  • A bunch of iPhone Killers came out in 2008. Expect more in 2009. So far they all suck. The G1 is a good phone but it lacks multitouch. That’s weak.
  • Word of the year: FAIL.
  • Phrase of the year: EPIC FAIL.
  • A man named HUSSEIN won. Scary shit. His middle name is HUSSEIN.

That’s about it. Nothing else interesting happened in 2008.

VectorDesigner Initial Impressions

I saw a new version of VectorDesigner, so I figured I’d try it again. First, take a look at an image I made in Inkscape:

VectorDesigner claims it can import SVG, so that’s what I tried first. Here is the result:

Oops.

Editing Points

Like every other vector graphics app, VectorDesigner lets you edit individual points:

To get into this mode, you select a path and then click “Edit Path” in the toolbar. Unfortunately, it is very easy to accidentally click a few pixels away from a point, kicking you out of Edit Path mode. It requires too much mouse precision leading to pain in my mouse hand.

Sadly, I cannot determine a way to select multiple points and move them as a group. This is a feature I routinely use in other vector drawing apps, so this seems like a huge oversight.

Blurry Lines

I use “blurry lines” in almost every drawing I make. I used that technique in the avatar shown above, for instance, to make the cloud over his head. I also used that technique to create the Blue Cloud of Death.

I am unable to find a way to replicate this in VectorDesigner.

Gradients and Transparency

I also tend to use gradients and transparency quite a bit. Here is how it works in VectorDesigner:

This is a very traditional approach, with controls in a toolbar, separate from the drawing. It is functional, but uninspiring. With Xara (sadly, not available on Mac), you drag directly on the drawing when editing gradients and transparencies. The VectorDesigner approach gets the job done, but direct manipulation would be far superior.

Things I Like

Some things I like about VectorDesigner…

  • The GUI is fairly clean, with minimal clutter.
  • It seems to perform well, although I have not created anything complex.
  • The price is right.
  • It is easy to Unite, Subtract, and Intersect objects.
  • I like the arrows and other line endings.

Closing Thoughts

I realize this is not a comprehensive review, but VectorDesigner lacks some features I really want. Multi-point editing is essential, as is the ability to make lines and shapes blurry. Perhaps a future release will have those features. Until then, I’ll keep looking.

Chrome Process Notes

I ran through a quick and dirty comparison of Firefox 2.0.0.16 and Chrome 0.2.149.27, running on Windows Vista. I opened each browser side-by-side and added one tab at a time. As I added each tab, I noted the memory usage. I viewed these web pages:

Tab Page
1 google.com
2 cnn.com
3 digg.com
4 reader.google.com
5 stuffthathappens.com/blog
6 amazon.com

Memory Usage

I obtained these numbers from Vista’s task manager. Vista has many different “memory usage” statistics, and I have no idea what each implies. I do not claim these numbers mean anything other than…here are a bunch of numbers.

Here are the numbers from Vista’s “Working Set” column. Note there are multiple numbers for Chrome because each new tab opens one — or more — new processes.

Tabs    Firefox   Chrome
1       51176     11756 24164
2       78120     11756 12992 24852 25260
3       94084     11756 22080 24860 32304 23932
4       102992     6164 11756 22088 24860 20856 40040 23960
5       116008     6164 18820 11756 22088 24860 20860 43628 24868
6       134360     6164 18820 11756 22088 24616 24860 20444 49192 25624
Dropping back down to 1 tab:
1       111240     11760 35856

Note that Vista’s “Private Working Set” reports different, and lower, numbers:

Tabs    Firefox   Chrome
6       111476    1096 10792 4080 13852 16792 16656 12368 31608 18564

I should also note that many numbers were constantly changing, so these are all approximations. Vista’s task manager also shows many other columns:

  • Peak Working Set
  • Working Set Delta
  • Commit Size
  • Paged Pool
  • Non-paged Pool
  • etc…

Lessons Learned?

Not much! I’m no Vista programmer, so I don’t know how to interpret these numbers. Here is what I am comfortable saying:

  • As I added more tabs, Firefox slowed down. Chrome did not.
  • Each new Chrome tab adds one or more processes. It looks like the number of processes depends on what content is on the web site.
  • You’d need more detailed memory analysis tools to truly understand what’s going on.
  • As I closed tabs, Chrome stops the processes within a few seconds, freeing up memory. Firefox seemed to hang on to memory for a longer time. Again, these are just initial impressions with very limited tools at my disposal.

Chrome is fast, I’m writing this post using it, and it seems to work just fine. In the end, I’m happy to see another competitor because this puts more heat on the other browsers to improve performance and compatibility. This is the kind of browser war was can all be happy with.

A Bit More Info on Balsamiq Mockups

Peldi had some questions from my earlier post, so I figured I’d answer them here.

Arbitrary Lines

Mockups supports a Vertical Rule and a Horizontal Rule. These are two separate “line” components, each is locked to its axis. I was thinking it might be simpler to have just one line component, and let the user drag, drop, and resize the line to any position, length, or angle. This would make it more like a line from a 2D drawing tool, like this:

Shapes

Mockups has a rectangle shape, and you can resize and move it. I would suggest adding a few more drawing-tool-like features:

  • In addition to resizing the rectangle, let us rotate it to any angle.
  • As you mention, add an ellipse tool. Like the rectangle, let us drag and drop, resize, and rotate.

Honestly, if we had lines, rectangles, and ellipsis, each with resize and rotate capability, we could draw just about anything we wanted to. Hell, I could use Balsamiq Mockups to create my comics.

Arrows

Peldi mentioned an arrow feature in the works. One kind of arrow might look something like this:

I suppose this kind of arrow would just be a predefined polygon that I could move, resize, and rotate. If implemented properly, Mockups could include an entire palette of polygons, each would resize and rotate the same way. In theory you could even define your own custom polygons, given the ability to draw arbitrary lines and group things together.

The second kind of arrow would be much simpler: just let us specify the shape of the start and/or endpoint of any line.

Storyboarding

I agree, make this a standalone tool.

One More Idea

Take a look at the source code for the Napkin Look and Feel. This has a neat package called sketchers that draws “jittery” lines and makes polygons look like they are hand-drawn with some randomness. You might get some good ideas from that work.

Balsamiq Mockups

A few days ago, I drafted a blog entry where I imagined a GUI sketching and mockup tool. I was not aware of any such tool, so I came up with a handful of requirements:

  • Be incredibly easy to use
  • Allow rapid 2D GUI sketching
  • Support “storyboarding” to show transitions and behavior as you move from screen-to-screen

Realism Sucks

Most tools I’ve seen are not geared towards “sketching”. Instead, they let you layout GUI components that look like real GUI components. For example, check out the Pencil screen shots. Other than showing nonsense text, these layouts look too much like real GUI layouts. This is troublesome because extremely realistic mockups don’t leave enough “holes” for the imagination to fill in. (see my mention of Bill Buxton’s podcast near the end of this article)

Too Realistic

By showing people something that looks finished, you are not inviting feedback and creative suggestions. Instead you send the message that you’ve already worked out the details and this is what you plan to deliver.

Napkin LAF

The Napkin Look and Feel is a Java Look and Feel that makes your GUIs look like hand-drawn sketches:

While Napkin gives you the right look, it is not a sketching tool. While you certainly can use something like NetBeans to create GUI mockups, I feel that is too technical and limiting for many people, particularly in very early stages of design. IDE GUI builders are designed for programmers to create GUIs, not for super fast brainstorming.

Enter Balsamiq Mockups

Before I posted my blog entry, I wrote some thoughts on Twitter, and quickly received this intriguing response:

@burke_eric Hey maybe you’d be interested in my little lo-fi wireframing app? http://www.balsamiq.com/products/mockups

I checked it out, and Balsamiq Mockups is almost exactly like the tool I had imagined. Here is one of their sample mockups:

First Impressions

I tried out Balsamiq Mockups and found that it is indeed very easy to use. I created this mockup in a few minutes:

Everything works via drag-and-drop, and you can easily resize and edit components in place. Mockups saves its data in a simple XML format, making it easy to share drawings with other programmers. You can also export to PNG as shown above, and it is easy to copy/paste from one drawing to another.

I could rattle off the features, but you’d be better off just checking out the feature tour on their site. This is a very straightforward tool that works exactly as advertised.

  • A single user license is $79
  • Written in Flash, so is portable to a variety of platforms
  • Available as a desktop version (Adobe Air), or as a plugin for Confluence, Twiki, JIRA

My Suggestions

The main thing I did not see was the ability to draw simple lines and arbitrary shapes. Balsamiq gives you an extensive palette of standard GUI components, but I found myself wanting to add arbitrary lines, rectangles, and other simple shapes to my mockups. Mockups does give you horizontal and vertical lines; it is too bad they don’t offer an arbitrary line that I can drag around to any angle and location.

The other feature I found lacking was a storyboarding feature. This was one of the things I originally imagined before I knew about Balsamiq Mockups, and I only have a vague idea of what it would look like. I got the idea after listening to a podcast by Bill Buxton called “Sketching and Experience Design“, on iTunes University. That podcast was also where I learned about using sketches to leave “holes” for the imagination to fill in, as I mentioned earlier.

I’m not exactly sure how this would look and feel, but I do have this general feeling that discrete, static screen mockups are not enough to convey information. I think it is important to capture and show behavior in addition to the static screen layouts.

The story board has to be drop dead simple, allowing artists the ability to drag and drop, annotate with arrows lines and callouts, and rearrange at will.

Paper Prototyping

In many respects, pencil and paper (or a whiteboard) are superior to Balsamiq Mockups. See the Wikipedia Paper Prototyping article for some ideas. In particular, during the very early brainstorming phase, paper and pencil are probably the fastest way to crank out new ideas.

Continuing the Design Process

I think Balsamiq Mockups fits in nicely as “step 2″ in the design process. The screens created in Balsamiq Mockups are easy to share with remote team members, but are not so realistic that they stifle the imagination.

After going through a series of mockups, then perhaps you can move on to more detailed prototypes using a GUI builder like NetBeans along with the Napkin Look and Feel. Again, refer to the Buxton podcast to see how design evolves from sketches to increasingly detailed drawings.

Closing Thoughts

Balsamiq Mockups is a great tool, allowing you to rapidly create GUI mockups that do not look overly realistic. It is basically a domain-specific drawing tool, and it does the job very well. Balsamiq Mockups makes it very easy to collaborate with other developers by utilizing a simple XML file format.

Although I proposed a few ideas (simple lines and polygons, plus storyboarding), tools like Balsamiq Mockups are powerful because they are so simple. I am not actually convinced that adding full storyboarding is necessary; perhaps this is best left to another similarly simple tool.

Kingdom of the Crystal Skull

There are spoilers in here, you’ve been warned. I have not read a single review, these are my opinions after seeing the movie just now.

  • Every underground chamber is well lit, even at night.
  • A torch is always available, as well.
  • Scary looking natives have nothing better to do than hide in chamber walls waiting for intruders.
  • Unlimited numbers of bad guys can never shoot Indiana Jones, regardless of how many machine guns they wield.
  • Every other scene must show IJ casting the classic hat shadow.
  • He finds artifacts nobody else could find for hundreds of years just by blowing away some webs and pushing on some key rocks.
  • The bad guys always have operatives in far away places, always able to locate him. (They are geniuses when it comes to following and tracking Dr. Jones, but apparently complete morons when it comes to shooting machine guns or finding the artifacts themselves.)
  • Good guys can fall 50′ onto rocks and never break bones.
  • When a waterfall is involved, add a few hundred feet. No problem.
  • I did not detect the Wilhelm Scream in this movie. Amazing, considering how formulaic and predictable everything else was. Oops…according to Wikipedia, they DID use the Wilhelm Scream.
  • Didn’t they have a car chase in one of the other movies?
  • Space aliens? Are you kidding me?
  • A monkey army?
  • Gunpowder tossed in the air floating towards the box?

I give this movie 2 out of 10 stars. The first star is for the ants, which were cool. The second star is for my boys, who loved everything about this movie.