After Working with Keynote…

Technology 3 Comments »

…I hope there’s a special place in software hell reserved for Mac Office’s PowerPoint 2004. I should be grateful that it even works at all on my MacBook Pro, but it was awful to use on my PowerBook G4, too. My favorite bits:

  • Highlighting white text against a light-blue background results in a white selection bar with white text. That’s right; you can’t see the text you’ve highlighted. Brilliant.
  • As with the rest of MS Office, the keyboard navigation hotkeys are slightly different than the any other Mac text editing program I’ve used.
  • Trying to select multiple slides in the outline view, or drag them around, or even just selecting one slide can all be tricky propositions. The UI is really flakey.
  • The program gets slower and slower as you use it until finally it takes more than a second to register a single keystroke. Restarting the application fixes it.

Of course, I should probably redirect my anger at those forcing me to author a presentation outside of the Keynote format

A Desktop Application Developer’s Conference?

Technology 9 Comments »

(cross-posted on java.net)

I’ve already talked about the Ajax conference that we over at Ajaxian.com are producing (May 10-12 in San Francisco; won’t you join us?). As I contemplate the great fun that we’ll have at that event, I’ve started thinking of my other love: desktop application development.

I spend the vast majority of my time developing Swing applications. I am more interested in desktop app development than pretty much any other programming discipline. As I work with other desktop application developers, I’m seeing a lot of gaps in our collective knowledge. Too many of us really don’t understand good UI design principles. Often, we haven’t taken the time to check out what our (WinForms, Cocoa, SWT, etc.) neighbors are up to. And, of course, wouldn’t it be nice to learn more from others about how to use our toolkit of choice more effectively?

Do you think it would be a good idea to hold a 1-2 day Desktop Application Development conference? I’m thinking such an event should have at least a 50% focus on user interface design issues (i.e., interaction design) with the other bit being about how to get the bits to actually do the interaction. I’m also wondering if it wouldn’t be a good idea to invite all desktop application development disciplines to speak and attend. I for one would be fascinated to hear talks from various foreign GUI toolkits about how their stuff works and what they’re up to.

Should it be a small, boutique, no-frills conference focused on intermediate/experts, or a larger, more general-interesting conference with a lot of introductory-level material? Should it have a Java-only focus, or is inviting the entire community interesting to you?

What do y’all think? Would holding such an event in the fall or winter of this year / early next year be a good idea?

My Dream Phone

Technology, Life 6 Comments »

I finally found my dream cell phone. I’ve gone through so many phones, from my first gray clunky Moto flip phone in 1995 to my trusty T-Mobile branded Sony Ericsson T610 (and a lot of Nokia in-between), and I’ve never had one I really liked. Every few years, when I go to buy a phone, I’m always so baffled that I can’t find something that really impresses me. Here’s a market segment that people for years have been predicting is the future and will outsell any other computing platform, and no one can truly get it right?

I recently set about upgrading my T610. My first try was the black Moto Razr first, but it drove me nuts! My main complaints are that its UI was very poorly designed and its Bluetooth sync didn’t interface well with my car. So, I returned the Razr.

Sony Ericsson K750i

In its place, I just bought an unlocked Sony Ericsson K750i. Oh man, what a phone! My two big complaints with the T610 were poor reception and slow UI. Smallish memory is also a problem, but I worked around it.

The 750i resolves those problems and much, much more. The reception on this phone is the best I’ve had for a cell phone; works great! The UI? Its the most intuitive, handy, responsive, and good-looking UI I’ve yet seen in a cell phone — the recent calls menu and event viewer screen are particular standouts. It has a built-in MP3/MP4/WAV player and plays videos too (MP4 and other formats). The Bluetooth (1.2 I think) is much faster than the Razr and the T610 and supports a “remote control” profile that lets me control OS X in some interesting ways (but I still prefer Salling Clicker for that). When syncing or transferring data, it displays granular progress indicators rather than the opaque “doing something” indicators on other phones I’ve used.

The phone works wonderfully with my car — much faster than the T610 and just as functional. Much better than the Razr. It works very well with my Motorola H500 bluetooth headset (discovers it quickly every time and gracefully disconnects). And wow! Salling Clicker works so well. I’ve never had a phone that is able to use the Salling Clicker Java client, and on this phone it rocks. Much better than the pure Bluetooth cilent the T610 used (I never tried with the Razr).

And, it has a built-in 2 megapixel camera that also works very well, and a memory card slot (Sony’s proprietary Memory Stick… grrr….).

But rambling about features, that’s not really the point. The phone reminds me so much of my Apple products: its well-designed, polished, slick, and Just Works, usually exactly the way I want it to. Its the first cell phone I’ve been truly satisfied with. I highly recommend it.

(I am aware that Sony’s new models, including a replacement for the K750i, are right around the corner, but I just can’t wait for them. Besides, with a whole new Bluetooth stack, I’m worried that it won’t work with iSync, Salling Clicker, and my car out of the box — and that’s a show-stopper for me.)

The Danger of Mucking with OS X Sleep

Technology 10 Comments »

Amongst the complaints I recently shared about my MacBook Pro was its tendency to slip into a coma. A reader shared the suggestion to change the MacBook’s power management settings such that the contents of memory are not saved to disk on sleep.

I did so, and man, hallelujah! Well, sort of. While flying home, my first battery ran out of power, so I did my usual Powerbook routine of sleeping the notebook and swapping batteries. Took me about 10 seconds total. And, when I opened up the laptop — nothing. The notebook was powered down.

Now, with my Powerbook, that never happened. Upon re-opening, it powered back up beautifully. With the MacBook Pro, however, I would open it up and it would be off. But, when you hit the power button, the contents of memory would be reanimated from disk. And, if you were lucky, you’d get back to work in a few minutes.

After changing my power management settings, however, you guessed it! You lose suspend-to-disk for memory and for whatever reason, the MacBook does not keep the system in sleep for any fraction of a second when you swap batteries. Add these two factors up, my friends, and you get complete data loss.

Nice!

There are some who say, “Nah nah nah, I always save my files before sleep, what kind of idiot are you?” Of course I saved my files before I swapped batteries, but man, I sure miss the good ol’ days of the Powerbook just working. If only it weren’t slow as molasses…

International “Focus Abuse Awareness” Month

Technology 2 Comments »

I am so sick of badly behaved focus behavior! I hate it when websites have onload handlers that do janky things with the focus, moving it to some arbitrary form field, not realizing that many users start interacting before the page is completely loaded. I hate it when desktop applications steal the focus, causing whatever I’ve been typing in some other appication to be lost.

Please, please, can we just all work together for a world where the active window keeps focus until the user decides otherwise? Where websites are smart enough to change focus only if you’re not currently interacting with the page, if they insist on changing focus at all?

MacBook Pro Update

Technology 18 Comments »

I’m loving my new MacBook Pro, but… it’s definitely far from perfect. I have these niggles:

  1. iTunes will every now and then choke on playing an AAC/MP3 for a second and then resume. I have a widget that constantly monitors by CPU usage, and when this happens, it’s really low (>0.2 load average). Hmm…
  2. Sometimes, the computer just locks up for a second or three. This is especially common when I use Adium. Each time, and its fairly frequent, I have this sinking fear that I’m suffering from the next problem on my list…
  3. My PowerBook G4 1.67 GHz seized up once a week or so; this baby does it two or three times a week and requires a hard reboot. When this happens, iTunes keeps playing the current song, the mouse cursor keeps moving, but I can’t do anything else.
  4. Sometimes, it doesn’t wake up from sleep. Uggggh! This is the cardinal sin. This is the single biggest reason I loved my PowerBook. It always went to sleep right away and always woke up right away. The MacBook, on the other hand, often takes more than a few seconds to doze off, and maybe one out of ten times, it never wakes up (and another 10%-20% of the time it requires a few attempts to wake up properly). Oh, how I miss the days when I didn’t have to worry about making sure everything was saved, etc. before sleeping. This glitch more than anything else makes me feel like I’m a PC user again.
  5. I travel a bit, and often hot-swap my battery. With the PowerBook, this was a dream. Close lid, swap out battery (without tearing fingernail to shreds), and open lid. In five seconds, I’m all done. The MacBook, on the other hand, swaps memory to disk, so its: close lid, swap out battery (with new cool switch mechanism that doesn’t require strong fingernails or a tool), open laptop, and wait for about a minute for the memory to be swapped back in. And, 20% of the time, wait another two or three minuets for the environment to stabilize.

But, on the whole, I’ve been pretty happy with the sucker.

Finally… Client Properties You Can Use

Technology 1 Comment »

One of the Java Swing GUI toolkit’s strong advantages is its flexible, easy-to-customize architecture. Swing isn’t easy for beginners, but once you grok it, there are a lot of great ways to customize the behavior, state, and appearance of a widget. Indeed, if maximum flexibility is your goal, you’d be hard-pressed to find a better toolkit on any platform.

I used to hand-code all of my Swing code, including UI layouts. Thankfully, over the past year or two, several high-quality graphical UI layout tools have emerged, the first of which (that I noticed) was JFormDesigner — which I still use. But there’s one feature I really miss from the current generation: client property support.

I find myself constantly using client properties to extend the functionality of Swing components. For example, I’m a big fan of externalized formatting for Swing components, like what Guy Romain is doing with the Fuse project. While Fuse is annotation based, I’m a simpler guy — I want to be able to define properties of Swing components in an external file (very much like a CSS file) and then apply those styles to Swing components by id (which I map to the JComponent’s name property) and by “class”. So, I can do something like:


JTextField.productCode {
    columns = 10;
    fontSize = 10pt;
    font-family = Helvetica,Arial,Dialog;
    border: 1dlu solid black;
}

and map that to all JTextField’s with the “productCode” class. Ah, so how do I assign the productCode class to a component? Subclassing is of course a bad idea. I maintain that you should never, ever subclass Swing components to add general functionality to them (if you ever hope to leverage a single third-party component).

The answer, of course, is a client property. I can define a client property key “org.galbraiths.clarity.styleClass” and set the value to “productCode“, and I’ve now got this great system for allowing all JComponent’s to specify a class for styling. (I actually apply the styles via a decoration mechanism that applies to all component hierarchies before they are displayed, but that’s another story.)

Alas, the current versions of JFormDesigner, NetBeans, and IDEA don’t provide any support for setting client properties. Ugh. So I have to write some kind of custom code all over the place to do this, which I’m loathe to do. I suppose I could, but, frankly, it makes my WinForms developer friends laugh at me, and I hate that.

Fortunately, that’s about to change. The next version of JFormDesigner introduces support for client properties. You go into the Preferences menu and define your standard client property keys, like so:

Add a Standard Client Property Key

and then the property pallette lets you set those values:

Edit Client Property Values

Nice! I’m one step closer to my dream development environment for my Swing framework. The next version of IDEA’s GUI builder will also support client properties; hopefully, NetBeans will too.

By the way, I’ll be talking more about this, and will be sharing some of my code under a license anyone can use, at this year’s JavaOne in my Swing session. If I’ve said something you particularly disagree with, make a rude comment to this blog, by all means, but even better — come and heckle! Chet can’t be the only one with rabble-rousers in the audience.

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Login