Wednesday, April 14, 2010

Bad UX or Bad Advertising?

Have you ever had the situation where you can't tell if an annoyance on the part of some software is caused by bad user experience design or bad marketing decisions? Of course, we could make a case that all marketing decisions are, by definition, user experience decisions. Still, I am left to wonder today when I made the usual move to click on a webpage background to focus my browser and inadvertently clicked on an advertisement I was not interested in.

I clicked on the margin of the page, which is my usual habit:


What I didn't realize was that a simple scroll upward would have revealed this about the margin:


Oh, you sneaky sneaky Visual Studio 2010 ad!

So, which was it?

Tuesday, April 13, 2010

Someone Do This So I Don't Keep Wanting To

I'd like to say it is for lack of time, but the blame is equally (at least) on the shoulders of a lack of motivation. This is the blame for why all these little ideas never get made. Here are a few things I would love to do/make, but would even more so love for someone else to have already done. There are things I really want to build, because I am excited about building them. There are other things I really want to build, because I am excited about using them. For the second group, I'd just as soon find that someone else will, is, or already has built it.

Del.icio.us Bookmark Post Generator

I'd like to collect and blog the links I find throughout the day, but I can't find a good non-manual way to do it. The method I blogged previously didn't really pan out, unfortunately. I want a web app that I can give my del.icou.us account and have link posts generated for me, with options.
  • Minimum and maximum links to include in a post
  • Minimum and maximum time to pass between posts
  • Email, auto-post to Blogger/Wordpress APIs, or manually generate

Todo Sync

We have lots of places where we track things to do, between our bug trackers and websites like Remember the Milk and Evernote. I'd love a tool that can collect and synchronize these in controlled ways. I want bugs assigned to me added to RTM and I want checkboxes from Evernote notes added, as well.

User-Script Online Editor

It makes sense, as low impact as userscripts are, they should be editable and forkable on the sites that host them. This sounds simple, right? I started to write this, but just haven't found the time to finish it. Do you?

Monday, April 12, 2010

I Will Not Blog About The iPad

I am only posting this to create a sense of public commitment to me against my continual urge to write something completely meaningless about the iPad, just to join in with everyone else.

Monday, April 05, 2010

Using Exploits To Improve User Experience: A Test Case

Many of us know about the neat trick you can do with the common blue/purple colors (without styling) of links, depending on which have been visited or not by the user. Obviously a UX plus to know what you've already seen, but we eventually realized this information could be exploited to learn all sorts of personal information about a user, simply by visiting one site that flooded the page with links to different places and inspected the colors. Recently, Mozilla announced the start of finally solving this problem.

This kind of makes me sad, and I'll tell you why. My first thought when reading the news was to come up with an idea to use this exploit for good. This is only "good" if you like wasting free time, which it has the potential to do.

Announcing, from PanTechnoCo, Always Always New: the link sharing service that only shows you new links.

Keep in mind, this isn't a product, but a toy. I just wanted to play around with the idea. You can post links and you can follow links. The site will show you all links you haven't visited yet, even if you visited them without following links from itself. If you had enough people to keep populating this thing, and you just kept reading, you could be in trouble.

Sunday, April 04, 2010

An Introduction To Vagrant

I spent my Sunday afternoon familiarizing myself with a tool who's Getting Started page has been sitting in my Evernote tickle file for a couple weeks. This is one of those many projects that fall under the ever widening category of "Stuff I Wanted To Do, But Am Glad Someone Else Did It So I Can Just Use It And Get On To The Next Thing." If you use virtual machines as part of your development process, or want to, and especially if you already use the excellent VirtualBoxVirtualBox, then Vagrant is certainly worth looking at.

The Setup (for Vagrant 0.2)


Now, the docs might need some updating and they seem to assume you're already a Ruby user, so they're missing a few dependancies that such a person would just happen to alread have. This is what I did, as an Ubuntu user who didn't even have Ruby installed. I'm also adding Virtualbox's Karmic repository to provide VBox 3.1, which Vagrant requires.

sudo apt-get install rubygems libxslt-dev openssl-ruby
sudo gem install vagrant
sudo bash -c 'echo "deb http://download.virtualbox.org/virtualbox/debian karmic non-free" >> /etc/apt/sources.list'


My machine installed Vagrant to /var/lib/gems/1.8/ so I added /var/lib/gems/1.8/bin/ to $PATH.

Each Vagrant box you build should have its own directory for configuration and should be run from their, so you can create a test project now.

mkdir test-vagrant && cd test-vagrant

Also, there are reports of issues on some 64-bit machines and I couldn't get the base image to run, but the Ubuntu Karmic image is running fine for me, so this got me started with my first Vagrant box:
vagrant-box add karmic http://files.vagrantup.com/contrib/karmic.box
vagrant init
vagrant up

The Point, What Is?

Why do this? What is the value in being able to quickly build, run, and clone virtual machines? Here are a few ways I'm already using them and will use them (more) with a tool like Vagrant to make it nicer.

  • Keeping a definitive base of my development environment. I always have an image of a machine that I consider my minimum requirements for whatever project I might be working on. This is an Ubuntu image with all the tools I use, my vimrc and my virtualenv/pip shortcuts, etc. When I start a new project, I clone this image and add to it.
  • Making my specific environments reproducible. This one I have tried and can now start doing seriously with Vagrant. For any project, I can maintain a script to build a development environment on top of my base. The benefits are two part. First, I can keep a clean record of what is required to work with a project. Second, when a change is made to my base, I can rebuild my development environment for all of my projects instantly. (Well, I can issue the command instantly, but I'll probably each lunch before its done!)
  • VirtualBox images can be portable. It might even be possible to move suspended images, but I'm not completely sure about this, yet. If it turns out to be something I can do, I'll be able to suspend a project on my desktop, running the box off a USB key, and then resume it on my laptop in the park. Even if I can't do this, I can still build identical environments on multiple machines, for myself or for other developers.
  • Replicating production and building local staging setups, machine the setups I have at Linode and EC2, will become something I can do with a minimal effort. I'm going to save a lot of time deploying to clones of my production machines running right here under my desk.

UPDATES:
April 5, 2010 - Added links to Vagrant and VirtualBox websites. Added step to include repository for VirtualBox 3.1
I write here about programming, how to program better, things I think are neat and are related to programming. I might write other things at my personal website.

I am happily employed by the excellent Caktus Group, located in beautiful and friendly Carrboro, NC, where I work with Python, Django, and Javascript.

Blog Archive