Do we still need a Save button?

Doing some basic mobile development for Android has led me to question a lot about what we take for granted with Desktop applications, and one of the reasons people find these smart phones and tablets a bit more intuitive to deal with. One of the big points is around the Save question.

Ask yourself for a moment, is there any desktop application you use where automatically saving every key stroke would be a bad thing? And for the few of you that can come up with an example, is that content that you are already explicitly versioning with some other system, like source code?

The existence of Save is part of what make computers fragile, or at least feel fragile, to people. You have to be ever vigilant of your data. The price of that vigilance is less productivity, as you always have to remember that you have to Save. Everyone has a moment when they lost some really hard work when they lost that vigilance for a short period of time.

In mobile, there is no time to Save. You have a mobile app open, you are waiting for a bus, and it shows up. You are done, and the phone goes in your pocket. If you had to remember to save, that state is lost. This is a much more natural interaction, and a much more expected one.

When you leave your house in the morning, you don't nail all your furniture to the floor. You have a pretty good expectation that when you return home your couch and tv will be where you left them, they won't all have been pushed to a corner, requiring you to reassemble your living room every night when you come home.

The way the real world works is when we push something someplace, it stays. The fact that personal computers broke this metaphor is part of what makes normal people get really nuts about computers. Yes, making software without a save button is harder for developers, but it creates a sense of durability that users really do resonate with. It's a best practice in mobile, and hopefully something that will bleed over into the desktop application space.

Not a UFO

On one of the photo sites I follow someone posted this image with a leading title that suggested this was a ufo confirmation:

In 5 of the 21 frames that make up the animated gif there are 2 red, a blue, and a green dot, all in a line (you might need to pull the image into your favorite image editor and zoom in to see the second red and blue dots).

Taking pictures of things in space isn't like taking pictures in your back yard. You don't take color images, instead you take long exposure black and white images with very specific color filters over your camera lens. The images are then post processed, having each filter corresponding to a different color.  These images are called false color for that reason.

This works pretty well for imaging things that don't move very quickly, but creates a very funny effect for things that are moving fast through the frame, because the object is in a different position in each color. This is what asteroids or satellites look like when they are captured in an astro photograph. The Sloan Digital Sky Survey has a whole chapter on their website on finding asteroids in their images. The pattern in the SDSS data is a little different because their imaging equipment is different than what we are seeing here. Galaxy zoo also has some really good information on funny things you see in CCD images.

Which raises a good question, what are we looking at? It turns out this is one of the sample runs of the Palomar 200 inch telescope showing off their adaptive optics in 2006. These 21 frames were taken from earth, through our atmosphere, with manipulators bending the mirrors on the telescope to reverse out atmospheric distortion. Really impressive stuff.

Update: given the rotational speed of Neptune, you are looking at between 3 and 4 hours worth of time elapse here.  That means you could calculate the angular velocity. This would push for it being an asteroid instead of a satellite because it is actually moving reasonably slowly in terms of degrees per hour.

Update 2: it could also be a moon of Neptune, many of them end up about that close, and orbit fast enough that they could move like that in the frame.

VMWare's new stand

Read over at James Governor's redmonk blog:

Maritz said that other major tech firms were still “consolidating the client/server stack” while VMware wanted to capture a new wave of application development.

“Developers are moving to Django and Rails. Developers like to focus on what’s important to them. Open frameworks are the foundation for new enterprise application development going forward. By and large developers no longer write windows or Linux apps. Rails developers don’t care about the OS – they’re more interested in data models and how to construct the UI. Those are the things developers are focusing on now. The OS will fade into the background and become one of many pieces. We plan to do the best job of supporting these frameworks.”

Or as he said to the analysts:

“Our goal is to become the home of open source and open framework-based development”.

I think this is really what the "post PC" era really means, desktop applications are going to become a niche market, only to be used if the task can't be done on the web, in the cloud.  Lots of really interesting stuff in that article that you should check out.

Programming is Hard

This is a great essay about not beating yourself up for feeling stupid when you try to learn something new in programming:

...

The problem is that while you've uncovered a wonderful world that makes coding seem so approachable and fun, you're unknowingly making a giant leap by thinking it's somehow also easy.

This might not seem like a big deal, but it's huge. Every single time (and this will happen constantly) you come across a concept that seems foreign or difficult or even just unintuitive, instead of thinking "It's OK. Programming is hard." you're going to be thinking "This is supposed to be easy. What's wrong with me? I must be stupid." These feelings will keep you from seeking help or pushing through to discover why things work the way they do, and that is what's stupid.

Programming is not always intuitive, it's inherently complex, and it's challenging. Once you start feeling like you've gotten a handle on it, you'll learn something new that will make things seem even more complex for a while. Your level of stupidity is certainly up for debate, but not being able to program without long hours of steady practice is not an indicator of intelligence one way or the other. The discomfort is normal, so get over the self-consciousness now and fight it whenever it appears in the future.

...

I agree, I wish I had this advice when I first entered the field. It took me the better part of a decade to come to the same realization, that you felt stupid because you were really learning a lot of new and unfamiliar stuff. It makes you grow as a developer, and as a person, and is also probably fending of future brain degradation in the process. My most recent experience was relearning the math for Where is Io.

I spent days just trying to understand what should be a simple coordinate transformation, so much so that I almost gave up the project multiple times for being too hard. But the problem was, I knew someone else had figured this out, so it couldn't be beyond me. A few weeks of banging my head against the table eventually got me past that. It would have been easy to just walk away, it was a hobby project after all, but pushing forward and overcoming the challenges made it that much more rewarding on the other side.

Speaking Tonight in New Paltz

Tonight I'll be giving the Mid Hudson Astronomical Association talk on the basics of celestial mechanics, and what I figured out to make my Where is Io application.  The talk picked up the poetic "Tracking the Movement of the Heavens" title somewhere along it's development.

This is going to be a tough talk, given how varied our audience tends to be, but I'm hoping that I've got enough hooks to get people in early, and plenty of meat for people that want to know more. The practice run through after work last night went quite well, the narrative turned out to be stronger than I realized, and I got some good feedback that definitely makes this a better presentation.  Thanks to Mike, Jeremy, and Sean for that.

Presentation Tips: 3 Good Moments

"A good movie is three good scenes and no bad scenes."

- Howard Hawks

Having just gotten back from CPOSC, filled with some very good presentations, I realized the old adage about movies applies to presentations as well. If you have 3 really good moments in your presentation, and nothing really bad, your audience will walk away satisfied. We're not all going to be TED Talk speakers, but setting the bar at 3 good moments is something attainable.

My Thoughts on the Central PA Open Source Conference

I love this new movement of small regional open source conferences that seem to be springing up everywhere. Democratizing the conference space by making it local and affordable is a wonderful thing. When I was at Ohio Linux Fest last year, I got told I should really check out what the folks in Harrisburg were doing with the Central PA Open Source Conference. Given that a trip to Harrisburg would also mean a good chance to visit friends in York as well, I submitted once their call for papers opened up. Having just gotten back from CPOSC, I can tell you they are doing some really great awesomeness there.

First off, the quality of the people at CPOSC is just really amazing. Every random conversation I ended up in was really compelling, and made me wish there was more time between sessions to have even more of those. I learned some very interesting things about mobile web development when I didn't know, I learned quite a few interesting Drupal tricks that are invaluable, and I found a really vibrant and welcoming open source community in Central PA.

The facilities were brilliant. We were in the Technology Building for Harrisburg University, on the 12, 13, 14th floors, which were truly state of the art. Touch screen controls for all the rooms, power wired to all the desks, really good chairs... just all around brilliant. The flat screen displays in the hallway we even flipping through Linus quotes all day, which while a little detail, really helped set the atmosphere.

The organization was really tight, which I always appreciate as a speaker. The speaking blocks were 50 minutes, with 10 minutes in between. The organizers ensured every session started on time, and ended on time, giving 10, 5, and 1 minute warning cards. The graphics on these included Veloceraptors and Wolves, which I didn't even realize until after my talk. A well run event is one that seems like no one is running it but, mysteriously, everything is just where it needs to be when it needs to be there. That's was CPOSC to a T. To everyone that made CPOSC happen behind the scenes, I applaud you greatly.

The schedule at CPOSC was great. The speakers and content were top notch. I've now learned that on the presentation win scale there is something even better than a perfectly in context xkcd comic to make your point: using video from Indiana Jones and the Temple of Doom to explain software architecture. My only regret on the speaker front is that by consuming one of the slots with my own talk, I inevitably collided with a talk I actually really wanted to see.  Oh well, thems the breaks.

Finally, my audience was great. I had somewhere between 50 - 60 people in my talk, all were very engaged, and really focused on what I was saying. I felt really good about how the presentation went (though I've of course got my mental list of things I'd change afterwards, it's never a good talk without that), but I did feel that I was on my game. I got a number of great questions at the end of the talk, and people coming up to me later in the day asking more questions and just striking up conversations that followed from there (see point 1 about the quality of the people being excellent).

I can't wait until CPOSC 2011, and will definitely do my darnedest to get down to it. Knowing how good the speaker pool is now, I'm going to have to make sure I keep my game up to play there.

A Few Tips for Casual Speakers

I enjoy speaking in public. I think I got the bug for it by doing theater in high school. When I took the job in the Linux Technology Center back in 2001 a big first part was to get known in the community, so I submitted papers all over the place. A few of my close friends even got to see my horrible first attempt at conference presenting at Urbana Illinois that year. But, you have to start somewhere.

So here are a few pieces of advice that I'd give to anyone that does public speaking.

Give Yourself Enough Time

If you are giving a talk with slides, start at least a week in advance building those slides. Much like a paper in college, if you wait till the last minute, you'll end up with the first draft only. Everyone improves after 2 or 3 drafts, especially if this isn't what you do all the time. I've seen a lot of people make the presentation cramming mistake.

Slides aren't an Essay, they are Supporting Materials

It's an easy trap to fall into, but the point of pushing big pictures up onto a projector is really to augment your talk with things you can't say. If people came to your presentation to just read text, you didn't need slides in the first place.

More Pictures

If your topic is something that requires mostly text, at least spice it up with a few small pictures integrated into at least every other page to mix it up. When I'm making slides now a days I find that if I've got 2 text slides in a row, it feels boring, 3 in a row, and I'm doing something wrong.

My favorite presentations are mostly pictures.

Don't Read Your Slides!

I consider this speaker Sin #1. The audience is not illiterate. When you put text on the screen the audience will read it faster than you can get to it. If you follow the previous suggestions and get rid of text in favor of pictures, this helps solve that.

Black Background

Seriously, it's a simple change, but it makes things look so much slicker. This was one of the suggestions from the presentation class I took that I was surprised by, but it's really true.

Practice Run

Make sure you take your talk through a practice run. If you can find a few people to listen to your run, great, but if not, just do it yourself in an empty room pretending their is an audience and a projection behind you.

At the end of every talk I've given, I've immediately realized something I wanted to change. I should have shortened that first bit, or man I wish those were in a different order. I'm bad on this one myself, but something I'm trying to force myself to do better.

Respect Your Time Slot

Part of the reason to do a practice run is to ensure you are close to your time target. When you got scheduled for a talk you were given a slot of allotted time, the audience was advertised to about it being that amount of time.

Whatever you do, don't run long. It's rude, and as long as your main talk is still going people aren't going to want to interrupt you to give you the hook. If the audience really wants you to stay longer, and wants more of your content, they'll ask lots of questions, and the host can decide how long they really can let things run.

If you are going to run short by a substantial amount (like having 20 minutes to fill an hour slot), and there really isn't content to fill the rest, tell the host in advance (and not right before the talk starts). This will give the host some time to pad in filler so it looks like the shorter duration was always the plan. It makes you and the host look good.

Avoid Dropping out of your Presentation

I fall into this trap quite often, where I want to show some code, so I got to an editor. It's rarely a good idea, because it breaks the flow of the presentation. Also, it takes you longer to find files, search for the right thing to show, change editor colors, or do google searches than you think.

If you are going to show code examples, copy them into your presentation. It takes a little more time, but it helps keep focus.

If you Make a Mistake, Move on

When you are actually in the heat of the moment, treat it as theater. If you miss a beat, whatever you do, don't back up, just keep heading forward. Maybe you'll find a place to insert the point later, maybe you'll get it as a question, and can expand off of that.

No one recognizes your mistakes nearly as much as you do, the audience may never have figured out that something went wrong.

Give More Presentations

The best way to get better at giving presentations, is to give more of them. If you've got a local user group for something you are interested, get on their speaker schedule regularly.

There are other, more minor tips I could make, but these seem to be the major ones that come to mind, though I'd love to hear other thoughts in comments. An remember, no one is perfect. I fail on many of these things in presentations I give, but remembering tips like these help make my presentations better.

And most importantly, remember to have fun in giving a presentation. The audience is getting most of their information not from your words, or your slides, but from your body language. If you are excited and having a good time, the audience will pick up on that, and will be far more engaged. So once the preparations are made, the slides are loaded, and the lights go down... enjoy the ride.