Let the user opt out of getting a newsletter

Newsletter signup options

As a Microsoft Certified member you get a newsletter, and these are the options. Where’s the “No thanks” option?



Book review: Free

Free – Chris Anderson

(Note: I read this book in 2009, and this is a repost of a review I did then in Visual Bookshelf on my Facebook)

As with The Long Tail that I reviewed about last week, Chris does a wide and deep search on the topic. One can read the introductory chapter and feel that’s all there is to say on the subject, but they’d be wrong. Chris has a nice writing style and uses a lot of examples. There are some very interesting examples on how “free” has been applied, such as popularizing Jell-O in the USA and music bands in Brazil.

Conclusion: Read it, if you like the economic side of software development.

4 software developer uses for Dropbox

1) Static website host

You can use your dropbox to host small websites. They’re great for showing of concept mockups in pure HTML/CSS, just put the files in your public folder and you’re done. If you do some JavaScript you can even get applications running, like aggregating Twitter. You can even use it to create a start-page for your browser [2].

There are some frameworks you can “install” to get even more power on your dropbox site, like Drop Pages and TiddlyWiki.

2) Synchronize applications

There are two ways to keep some of your apps synced. One is just putting the config-files, chatlogs, etc in Dropbox. 

You can even synch your game saves! Some even support it out of the box, like Broken Sword for the iPhone.

The other way is using packaged apps for USB sticks (PortableApps), and putting the whole app in Dropbox. Personally I keep a copy of FileZilla with my sites in case I need to access one of my FTP’s. Others keep password apps like KeePass. I’ve tried having a browser synced, but noticed that the tabs I have open on one computer (work) isn’t what I want to see on another (home). Notepad++ with custom settings works great too.

3) Source control repository

Quite simply you can put a repository in Dropbox, in a shared folder with your team. It’ll work like a hosted repository and you’ll get free redundancy. The downside is that it doesn’t handle simultaneous checkins very well as it’s synching between computers.

4) Wireless transfer files to mobile devices

The Dropbox iPhone app can send files to apps that are registered for the file extension. So any .epub will prompt to send it to iBooks, which I use a lot on my iPad. The same with PDF and other files. I’m not a big fan of iTunes and I’m an even lesser fan of cables, so just putting a file in Dropbox and opening it in my iDevice is perfect. Most publishers will give you several filetypes if you buy an ebook directly from them. O’Reilly have good deals that include ePub, Mobi, PDF, APK and Daisyj, which is great since Microsoft Press works with them. Here’s a good tutorial.

Some extra tips:

Eating your own dog food

I’m a big believer in using your own product. If you don’t want to use it, why would your customer? (Salespeople: don’t answer that)

Google Labs recently released a nifty little project called Page Speed Online. You enter the URL for your website and it gives you a “Page Speed Score” out of a 100. The best part though is it gives you specific tips on how to increase your score! The tips are categorized in three priorities (High, Medium and Low) and complemented with “rules without suggestions”.

So the obvious question is: What’s the Page Speed Score for various Google products? Let’s find out!


Page Speed Score of 97 (out of 100).
Low priority: Make landing page redirects cacheable


Page Speed Score of 97 (out of 100).
Low priority: Leverage browser cachingMinify HTMLPut CSS in the document headRemove query strings from static resources

Page Speed Online *snicker*

Page Speed Score of 95 (out of 100).
Low priority: Leverage browser cachingMinify HTMLSpecify a Vary: Accept-Encoding header


Page Speed Score of 89 (out of 100).
Low priority: Optimize imagesMinify HTMLSpecify a character set


Page Speed Score of 88 (out of 100).
Medium priority: Leverage browser caching
Low priority: Specify a cache validator, Defer parsing of JavaScript, Minify HTML, Serve scaled images, Minify JavaScript


Page Speed Score of 80 (out of 100).
Medium priority: Minimize redirects
Low priority: Leverage browser cachingInline Small CSSOptimize the order of styles and scriptsPrefer asynchronous resourcesOptimize imagesMinify HTMLMinify CSSSpecify a character setSpecify a Vary: Accept-Encoding header

Wasn’t that interesting? Picasa the image site gets tips on optimizing images, and Chrome which puts speed in the tagline gets the lowest speed score.

One of my hobby projects is done in Java on Google App Engine with Google Web Toolkit (GWT) and gets two tips on JavaScript (one being “Minifying the following JavaScript resources could reduce their size by 10.5KiB (100% reduction).”, which sounds really positive!). The funny bit being that I can’t affect how GWT creates the JS… I’ll post when I finish the project and follow the tips.

What are your scores? Are you better than Google at their own game? Did you get any useful tips for your site?

[Updated 2011-05-16: Fixed some links and added YouTube]

This post was not intentionally left blank

Some manuals have pages that say “This page was intentionally left blank”. It made me laugh out loud the first time I saw it, then it made me think. When suddenly presented with nothing, how do you know if it was intentional or not?

I always try to follow the rule of least surprise and when it comes to UI-design my interpretation of it leans towards being a bit debug-friendlier of the choices. Sometimes a graphical design states something simple as “if the user doesn’t have shortcuts then don’t show the shortcut-list”. While some might thing it’s a nifty context based feature, I find it confusing.

From a coders view: If I don’t see the shortcuts list, does it mean it’s empty or that something is broken?

From a users view: If I don’t see anything because I haven’t added anything to it, how will I know it even exists or how to add stuff to it?

This is an actual example from a client. Their website doesn’t show the “My shortcuts” block if the user doesn’t have any. I prefer to always show the fields, but write something useful and friendly in it, like “You currently don’t have any shortcuts. Click here to add some!”. That helps me debug without being in a dev-environment and it should help the user as well.

I also apply this when replying to emails. It’s a bit irritating when you don’t get an answer. What does the silence mean? Is it some kind of agreement, or the person just hasn’t gotten around to write the answer yet?