Twitter Followers

June 4th, 2009

I've been posting tweets as events_ottawa on Twitter for the Ottawa Events site. Some people use an app like TweetDeck to show the results of searches and having a "what's going on this weekend" very sporadic post is, I think, useful - more useful than the spam that some of the other event type sites generate, listing every single thing going on. This means I'm editorializing somewhat, but in my opinion that's adding value.

I've been posting to Twitter more often than I've been posting to my blog - although even that isn't that often. Twitter takes away the requirement that I write enough to make a real blog post - it's more like IM than blogging.

It's fun tweeting but I have no idea why anyone would follow me.

Ad Value

June 2nd, 2009

One of the things that makes Google Ads so, well, not good, but at least tolerable, is that the ads are usually relevant to the page you're looking at.

A style of ads that has been popping up on many sites (literally) are the ads that appear when you hover over what looks like a link (often double-underlined).

For example:

200906020928
See the word "video"? Hover over it and you get an ad:

200906020929
... an ad for home insurance??

I'm reading a page about digital cameras. I'm hovering over a link whose text is "zoom". And the pop-up is an ad for home insurance.

And they really think I need home insurance, I guess, because it shows up when I hover over "DVD Players":

200906020931

Or even "control panel":

200906020931-1

There is zero value for me in this ad. It's not going to make me buy RBC home insurance; it actually does damage to RBC's brand in my mind. All it does is make me try to avoid accidentally hovering over any text on the page in case one of these dumb ads pops up.

Chore Tracker

May 21st, 2009

This isn't a big app but it's an app I've been meaning to build for a long time, and the barrier to entry - having to write a login system - made me keep putting it off. But now that I've got FlexAccount, I was able to go from File New to a deployed app in just a few hours.

Chore Tracker isn't a fancy app (and there's lots of room for UI improvement) but the gist of it is that you enter household chores that you'd like to happen at some regular interval, like vacuuming the stairs or changing the furnace filter, and it keeps track of them for you, giving you a sorted list of chores that are due with a "Done" button that you can press when you've completed a chore.

This app is really my proof of concept for FlexAccount. It let me go from nothing to a working cloud based rich client application in no time. I leveraged the account management, login, password changing, and forgotten password mechanism of FlexAccount and just spent time working on the stuff that was unique to this application.

I did discover one flaw in FlexAccount building this and I'll post an update for that. There's no setter for the User's userData field, which is where you can store whatever data you want to easily associate with a user - which in the case of Chore Tracker is the list of chores. The data is managed properly once it's set, so if you want to use FlexAccount in the meantime, add this line:

public function set userData(value:XML):void
{
vo.userData = value;
};

To the org.stevex.flexaccount.model.User class.

FlexAccount, a Simple Login System for Flex

May 6th, 2009

Here's a little project I've been working on, on and off, for some time: A login system for simple Flex-based applications with a PHP back end.

It's called FlexAccount, and there's information and a download at that link.

I posted it yesterday and this article by Jeff Atwood made me think of calling it out today. One of my goals with FlexAccount was to create something that's a reasonable representation of best practices, and that includes salting passwords in the database, using a unique, per-user salt.

If you start with FlexAccount, then you're storing passwords correctly.

Forms

April 29th, 2009

One aspect of forms that is kind of interesting is that a PDF "form" is really a bundling of an application, and the data that the use is creating with that application. I can't think of any other mechanism that merges these two things.

Traditionally a form is a request for information. You get a form to fill out to enroll your children in swimming lessons. You get a big honkin' multi-part form to fill out to do your taxes, or to make an insurance claim.

A lot of people build their forms in Word, or InDesign, or some other tool that focuses on the look of the form. That's fine if your goal is to make a form that users can print out and fill in, or use the Typewriter tool in Acrobat to type onto to fill in (that's a very handy feature), but there's so much more you can do.

A PDF form isn't just the presentation - what the form looks like. It's also a container that stores the data you fill out in the form, so that you can email the form back to someone, submit it over the web, or even print it and mail it back (with a barcode generated on the form so that smart software on the other side could retrieve the data from the form and put it into a database without someone having to type it in).

And it's not just those two things; it's also logic. Does your swimming lesson form have fields where you can type in the children's names? If the parent indicates they have two children they would like to enroll, then you can make the form "invalid" (and not let submit it) until the names of those two children are filled in. And also update the price to reflect the discount for having more than one child from the same family. Nobody likes having a form sent back to them asking for more information, so helping your users fill in forms and submit them only when they're properly filled in is a big win.

One of the reasons I'm writing this post is I was doing some googling for simple terms that someone might use when they want to create a form, like, "create a form", or form create and I was very surprised to see that PDF forms don't show up at the top of the list. We've got a great solution to this problem, that's being used for a huge number of forms, both online and offline, and yet we're not the first thing you'd find if you were a user trying to figure out how to make a form. Heck we're not even on the first page of Google results, which means we're essentially invisible for those terms. Even for the term form design, which has part of our product name in it, we're about halfway down the results page.

Part of the reason we're low on Google Juice could be the product name. "LiveCycle Designer" doesn't scream forms, does it? And another part is that we don't really promote Designer as a standalone product, because it comes with Acrobat Pro and with LiveCycle ES. Acrobat Pro also comes with the CS4 so you get Form Designer with that as well. In fact, if you've got Acrobat Pro, you've got two ways of designing a form: Acrobat itself, which is good for simple forms, and Designer, the dedicated form design tool. So it can be a bit hard to stumble onto Designer unless you already know what you're looking for.

And hopefully, this blog post will do it's little part in helping it be what you're looking for.

iTunes Pricing Games

April 21st, 2009

I don't understand the new iTunes pricing model. Even songs on the same album can be priced differently:

200904210811
Albums in Canada used to be $9.99; now some new albums are $11.99 or $12.99.

I know they aren't Apple's idea, but these pricing games are going to hurt sales.

iTunes Library Management: The Music Playlist

April 15th, 2009

The first article in this series invited you to clean some of the metadata in your iTunes library. You can visit that article here.

This time we're going to refine the set of songs that we want to work with.

Notice I said "songs". If your iTunes library is anything like mine, there are a lot of tracks in there that you don't listen to as music. Comedy albums, for example. Sometimes you might want a bit of Bill Cosby in your playlist, but if you're making a playlist for a party or music to listen to at work, chances are you just want the music.

And then there's the music that you have, that you only listen to at certain times, or that has nostalgic value. Songs for your kids. And so on.

The goal here is to make a master playlist that other playlists will pull songs from.

The way I do this is by creating a playlist that includes all the genres of music that I regularly listen to, and then excludes music in specific playlists.

We're going to use a feature called "Smart Playlists" to create these playlists such that they take care of themselves.

The way Smart Playlists work is that you define the criteria, and iTunes figures out what songs to include. iTunes comes with a few default Smart Playlists, like "90s Music", whose criteria includes all files with a date that falls within 1990 through 1999. We're going to do something similar, but with genres.

Create a new Smart Playlist ("New Smart Playlist..." on the File menu), and call it "Music".

Your Music playlist will include everything except what you specifically exclude.

A good place to start is excluding podcasts. Create a row that says "Podcast, is false".

Press the + button to the right of this row, and add similar conditions for all the genres you want to exclude.

200904130708

Now you've got a playlist that's just music, that we can draw songs from when building other smart playlists.

One useful thing you can do with the Music playlist is create an "Unrated Music" playlist that you can use when you feel like rating some music. If you check the Live Updating checkbox in the Smart Playlist dialog when creating the Unrated Music Smart Playlist, as soon as you rate a song it will disappear from that playlist. (This can actually make rating songs awkward, because once you rate a song, you won't automatically advance to the next song. To get around this, use the iTunes DJ feature to play songs from your Unrated Music playlist, because it won't immediately remove the song if it no longer matches the smart playlist criteria).

iTunes lets you rate every song from 1 to 5 stars. It's good to have a solid idea of what the star ratings mean when you're rating songs, because it helps to keep things consistent and you'll use the ratings to build playlists later, so the rating does matter. Here's how I define the 5 stars:

* Get rid of it. It's terrible, or broken, or a duplicate.
** A song I don't like much. Keep it, but don't include it in playlists.
*** An average tune that I don't mind.
**** A song I like.
***** A song I really love.

Of the 18200 songs in my Music playlist, the breakdown of ratings for my music is 6386 2 stars, 6649 with 3 stars, 4710 with 4 stars, and 455 with 5 stars.

I'd recommend adding an "My Rating is greater than 2 stars" criteria to the Music playlist, so that when you're listening to a song and you decide you don't like it much, you can rate it 2 stars and know you won't hear it again in an automatic playlist.

Where is the Xbox 360 Lite?

April 15th, 2009

The Xbox 360's hardware has been a disaster since day one.

I love my Xbox 360, but a lot of that love is in spite of all the things the 360 does to make me hate it.

I'm on my 5th console (although this one seems to be a good one - I've had it for a long time now). It's loud. It heats up. It's hardly elegant.

So my question is, where's the hardware redesign?

It's costing Microsoft a lot of money to keep replacing consoles. They just announced they're going to cover the E74 errors under the 3 year warranty, which is going to cost them a bunch more.

They've redesigned the chipset once or twice, but the basic structure of the console seems unchanged. They've tried to quiet the thing down by letting you copy games to the hard disk, but then they keep a hard disk big enough to take advantage of that prohibitively expensive. And is it that hard to get a quiet DVD drive? Sony seems to have managed.

What are Microsoft's hardware engineers up to?

Cross-Platform Version Control

April 13th, 2009

An interesting post by Eric Sink at SourceGear on some quirks you run into building a cross-platform version control system. I like this one:

Under Linux, checkin a file with a name that ends in a dot. Check it out under Windows. The trailing dot is probably gone. Now check the file back in and go back to your Unix system. If your version control system handled this badly, you've probably got two copies of the file, one with the trailing dot, and one without. Same goes for a trailing space.

iTunes Local Files Playlist

April 11th, 2009

I was recently traveling with my laptop and wanted to listen to some music. Most of my music is on a server at home, but when buy new music from iTunes or rip a CD, the default place for it is the Music folder on my laptop's hard disk. I move music to the server periodically, so there's usually a sampling of recent stuff on my laptop. I wanted to listen to some of this, but how to find it?

iTunes doesn't expose the file's location as one of the columns you can sort on, nor as one of the fields you can filter on in Smart Playlists. It looked like building this playlist within iTunes was out.

But iTunes also exposes actions in Automator, the Mac's often overlooked GUI based scripting tool.

Here's how to build an Automator action that will make a playlist in iTunes for all the music in a particular folder.

Launch Automator, and create a new Custom workflow. What this workflow is going to do is take a particular folder, find all the items in that folder, and add them to a playlist. This is very straightforward in Automator.

The first thing you want to do is get your Music folder. Use the "Files & Folders" / "Get Specified Finder Items" action for this.

200904132224

Once you find it, drag it to the pane at the right. You'll see the Get Specified Finder Items panel and its UI.
You could create a workflow that asked you for the folder to import, but in my case I always want to import the iTunes Music folder. Click the "Add..." button and add that folder. Now that panel should look like this:

200904130648

Now that you've picked the folder, you need to get the contents of this folder, and all its subfolders. "Get Folder Contents" will do this for you.

200904130649

Drag that into your workflow, below the first one. Make sure you select "Repeat for each subfolder found". And this feeds into the last action in the workflow: Adding the files to an iTunes playlist.

200904130655

Select an existing playlist or create a new one to add the files to, and you're done. The final workflow should look like what's pictured here:

200904130654

You can run this workflow from Automator, or save it to disk so you can double-click it whenever you need to refresh this playlist.

This workflow doesn't distinguish between music, podcasts, movies, or anything else that might be in your iTunes Music folder. If you want to filter this playlist so that it just shows Music, it's easier to do that in iTunes than in Automator. Create a new Smart Playlist that gets files from the playlist you just created and only includes music, for example:

200904130659

If you're interested in Smart Playlists and playlist management I'm working on a whole series on that.