| Comments

I’ve never been so frustrated with a piece of software as I have been with iTunes lately.

NOTE: Yes, I work for Microsoft.  Yes I’m aware they make the Zune.  I’ve got years invested in hardware with iPods, and until someone makes an OEM integration kit as good as what I have, I can’t switch.  Truth be told, from a portable device player, I *do* think the Zune is better.  But let’s just leave that out of this argument for now.

In my home there are roughly 4 iPods floating around.  We have a library of over 5,000 songs both popular and not that are in our digital library.  That digital library is mostly MP3s, mixed with some iTunes purchased songs (although not since Amazon MP3 began).  That library sits on a shared drive on my Windows Home Server so it can be accessed through various streaming means (Home Server streams to iTunes software, XBOX, etc.).

Also in my home are roughly 6 computers ranging from desktop to laptops (mostly laptops).  These are used between my wife and myself (and one for the kids).

We all listen to music on our devices and via our machines.  We all want to listen to the same library, create our custom playlists and have them available everywhere.  We all want to be able to sync on whatever computer we want, but we’ll settle to be tied to one that you can pair with.


Yes, I’m looking at you iTunes.  I’m aware of the other options like Songbird, etc. but frankly I haven’t tried them out yet.  If you have and they will solve my woes, can you share your experiences?

Why does iTunes suck?  Easy…

  • It assumes 1 user/1 computer – the “library” is a local and static library unless the user interacts with it.  What I mean by this is it does not have the ability to monitor folders (like pretty much every other software out there for media does).  I want to point my iTunes library to my server share and whenever I add music to it via other computers, that other ‘libraries’ will be aware of it and just add it to my local library.
  • Portability sucks – try to transfer your iTunes library to another computer.  I dare you.  Navigate through all the Apple support suggestions and hacks online.  Frankly unless you are Mac to Mac migrating, it is not easy for a healthy configured library.
  • Not informative – one of my biggest issues is that when I configure the library to be a mapped drive (let’s say M:), if M: is not available for some reason, iTunes decides on it’s own without telling me that it is going to switch the library back to the local volume/hard drive.  Any future action (i.e., iTunes purchasing, Amazon purchasing, etc.) now doesn’t save to my server library.  WTF?!  Can you at least tell me: Hey user, that location you set for your library, ‘M:’ is not available right now…what would you like us to do.  Stop moving it around for me.
  • Home Sharing – what is this supposed to be again?  I thought this would save me.  I could have at least one place that would be the library and home share to other clients who could then use this feature to sync.  Um, nope.  This is basically the sharing they already had except with a new name.  Worthless.

I wish the iTunes team would put in their lab 3 iPods and 4 computers with 2 users and a library stored on the server.  Work toward making your software work in that environment as seamless as it does with 1 user and I’ll be happy.  Until then I have to navigate your changes and try my best to explain to my wife why the music we bough on the desktop is not on her laptop until she adds it to the library that is already mapped to the network share where the music already exists.  Yeah, that’s what I though.

| Comments

while preparing for the code trip, we have several 'on-board' needs.  one of which is a quick method to get our content encoded for consumption by devices and frameworks (i.e., silverlight).  we want a smooth method so that we aren't boggled down with multiple tools opening and changing settings, cutting and pasting, etc.

so, inspired by my colleagues post about using workflow to automate, i set about the task.  we're going to be making several assumptions along our production, one of which is we know we'll have multiple video/audio sources and that there *will* be some post-edit being done.  but once we have that post edit completed, we'll want all videos to feel similar (size, quality, etc.) and encoded for multiple uses.  i've pretty much decided that there really are 3 formats that would suffice the world: WMV, MP4, MP3.  if we get all of these, we can accommodate most.  here's how i justify that:

    • WMV: we'll have standard (4:3) and widescreen (16:9) format for viewing offline as well as online via silverlight (we'll be using the widescreen online most likely).  we'll also have a Zune formatted version for quick updating.
    • MP4: itunes, ipod, mac viewing in both standard and widescreen formats
    • MP3: audio format beloved by all

so the first step is to tackle the how.  if you don't know, expression encoder has a command-line interface.  this is especially helpful for a few things, namely our batch processing (you can also save job files and send in a job to the command-line interface quickly).  so the first thing i did was wrap the input parameters into a windows workflow foundation activity.  luckily michael did a lot of this for me in his webcast :-).  it basically abstracts all the possible input parameters and enables you to optionally send them into the activity:

for the mp4 encoding i'm using a piece of software that also has an command-line interface.  this one isn't as flexible so given my two known encoding types i'm pretty much hard-wiring in some of the settings and only enabling the size parameters for alteration.

mp3 version -- let's get to that later.

now that i have my activities (one for WMV, one for MP4) in an activity library, i'm ready for a client tool.  for our purposes, we don't need a fancy GUI tool, so i settled for a command-line interface.  in my client i added a sequential workflow and then added my activities.  i re-used the WMV activity 3 times to alter the different settings and then use the output of them to feed into my MP4 activity (used twice).  the resulting visual workflow looks like this:

the input to the command line looks for a source WMV file, title, description, author, album.  these input parameters are sent as named parameters to the workflow activity:

var namedArguments = new Dictionary<string, object>();

namedArguments.Add("SourceFilename", args[0]);
namedArguments.Add("Title", args[1]);
namedArguments.Add("Description", args[2]);
namedArguments.Add("Author", args[3]);
namedArguments.Add("Album", args[4]);

which are then mapped to properties of the activities:

the activity libraries also expose a few other properties that i'm passing in to my commands.  for example, i want each video to have a bumper intro and then an icon overlay in the right location.  i'm able to pass in these parameters which then map to expression encoder properties.  i'm also able to tell it to make sure to letterbox content that isn't native 16:9 aspect ratio for the standard format encodings.  the result of these activities is that i have three WMV files appropriate for my use.  expression encoder also generates thumbnail images of a frame in each video.  i've not much use for them, so i added the last workflow code to simply clean up the jpeg images generate (delete them) from the output directory.

one problem i had was that expression encoder exposes a lot of properties but not for metadata individually.  i wanted to embed the appropriate metadata for the WMV files for the title, description, etc.  luckily there is one input parameter for encoder that i can append to my other custom ones, and that is "/Preset" which enables me to provide certain presets that will be passed in and here is where it allows me to make metadata a part of that preset.  the input parameter looks for a literal xml file so i have to create one.  i added the template as a resource in my project:

<?xml version="1.0" encoding="utf-8"?>
            Value="{0}" />
            Value="{1}" />
            Value="2008, Microsoft" />
            Value="{2}" />
            Value="{3}" />
            Value="{4}" />
            Value="{4}" />
            Value="Podcast" />
            Value="{5}" />

and then when the user executes the command-line interface, i take their input, merge it with the xml here and output a temporary xml file that is then passed into the named parameter dictionary for the workflow activity.  when no longer needed it is cleaned up (on the workflow completed event handler).  now my WMV file is complete with formats and metadata.

for the MP4 format i chose to use the resulting output of the WMV file and do a single pass there.  the settings for the tool weren't ideal for adding overlays, etc. so using the resulting WMV file and same bitrates i'm just passing in the resulting WMV and creating two MP4 formats.  boom.  done.  the metadata actually *was* parameters i could send into this tool, so it was easy to ensure that metadata was in there.

now, on to the MP3 format.  sigh.  what i need is a tool that will enable me an WMV or MP4 input and extract the audio-only track into an MP3 file.  i found all sorts of tools that will do this, but none that can be automated from a command-line.  this is my last resulting automation problem for now.  if anyone has tips on how to do this, i'll send you a prize :-).

now on to decisions.  while we'll have several formats to offer viewers, we also want to have feeds with enclosures for readers.  that brings us to a decision.  podcast formats for enclosures only enable one enclosure.  so, dear reader, what do we choose?  i figure we offer a WMV, MP4 and MP3 feed uniquely...but then which format do we supply?  is this a lame question?  the widescreen will be the best quality, but will it render okay on all devices/readers?  what do you choose?

anyhow, a fun little project i finished (except for the MP3 -- prize awaiting) and thought i'd share how it is accomplished.  one little command "encodepipe.exe <file> <title> <desc> <author> <album>" and a few short minutes later i have all the formats i need.  the next step is to automate upload to a content delivery network so i don't have to pick and choose uploading!

we just posted the schedule for our trip, so if you want to subscribe to the feed to be notified when we'll start putting out some content, that would be cool.  real-time updates via twitter as well.  see you on the road!

| Comments


i'm writing this on the plane but i've just returned from 10 days in italy.  we visited venice, florence and rome.  i'm exhausted.  my feet are cursing me beyond belief and i felt like i walked 800 miles even though it was probably about 60.  i won't bore you with my slideshow, but share my thoughts on traveling abroad as an american used to certain technical amenities.

i will caveat with:

    • first trip to europe at all (fiji was my only other out of country experience)
    • i'm an american :-)

for this trip i thought i was going to experiment with technology abroad.  for this i brought:

my first problem was that i had the expectation that i'd be more 'connected' in italy.  bad expectation.  i had written this windows mobile application tapping into the built-in GPS of the device and plotting my points where we were walking - a bit of a 'where's waldo' for my trip so that friends/family could stalk follow us.  i had set up a facebook app and web site to use.  that turned out to be a complete bust.  here's my thoughts on some things.

internet access

as i mentioned, i thought i'd be more connected.  maybe we picked the wrong hotels (we didn't question any that our travel agent suggested which turned out to be a bad practice for two of them aside from internet access), but none of them had reliable (if any) access.  the first one in venice was just testing theirs out (they were kind enough not to charge us the €5 it cost for the day (that was the cheapest btw).  it sucked.  but they knew that too.  i think they were trying to share some connection with someone else and provide it as a service (at least that is what my poor translation resulted in).  we got it to work occasionally but it was VERY spotty.  what i learned was that the cities we were in (except rome) weren't really interested in being connected all too much.  it wasn't that much of a priority and fax was still king at the hotels.

the places where internet was available was expensive, like €10 for 15 minutes (roughly translated in US$ that is $15 at current exchange rates).  it was shocking really.  so my idea of having my GPS app didn't really work out at all. 

IMG_0745i also learned that because of that some other features i was planning on using my winmobile device for were useless, namely live maps and GPS integration.  i was thinking it would be awesome to get turn-by-turn instructions where we were.  the GPS worked great and centered our location each time.  the problem was the maps needed to be downloaded.  argh.  now this isn't a problem with windows mobile or live maps, but connectivity.  had i had my iphone (well, let's just say i wouldn't have been able to anyway with international data rates) i would have had the same problem in google maps...oh wait, iphone doesn't have GPS yet...nevermind :-).  you can see what it looked like on the image that is near this paragraph.  yeah, not helpful.  but if you do have a data plan or connective points, live maps on windows mobile rocks.


we didn't bring our mobile phones.  no need.  we decided screw it, we're on vacation.  in hindsight it would have been nice to get some local pre-paid ones so that the six of us could communicate in italy when we got split up or were meeting for dinner, etc.  however, since communication with our families in the US, we wanted to make sure we had some method.


i had brought one of my laptops for email (when we could because of connectivity), but also had loaded skype on my windows mobile device.  the problem with the wifi spots we encountered is that they weren't mobile friendly (most required a pop-up window for a timer).  because of this, that didn't work out that well.  i downloaded skype on my laptop and this was a phenominal experience.  we talked about an hour and a half total to our families and it cost about $1.88 for the entirety.  oh my gosh that is cool.  the quality was perfect, the other users didn't realize we were talking on a computer (and on the speaker phone nonetheless).  i had low expectations of skype -- but after using it, i'm going to be using it a lot more -- it was awesome, awesome, awesome.  way to go skype.


i already mentioned that my plan for gps-enabled navigation failed.  we did most of our vacation walking.  walking along streets that aren't on a grid system...or any other system for that matter.  we went old skool -- maps baby.  the maps given to us were quite good but in particular venice and florence had hundreds of little side streets and areas that could get you lost in a hurry.  one time we think we'd be heading in the right direction but were in fact going the opposite way.  this is were i assign mad prop #1 to the suunto d9.  i will first say that this is a dive watch first.  so the d9 is a bit overkill for the feature i'm talking about, but if you are a diver (and a geek), this is a must have.  search on ebays for good buys on it.  wireless pressure information baby, oh yeah.  anyway, back to the navigation.  the watch has an awesome built-in digital compass.  when we weren't sure where we were at, we popped over to the compass and got the exact reading and heading (not that headings were helpful on a paper tourist map, but it is just cool to say anyway).  having this compass reading was indispensable to us given we didn't speak the language.  i assume any compass would do (it was hard to keep our north point through all the streets and talking in between), but it wouldn't be as cool.  multiple time zones on the watch without having to reset my primary time was helpful as well.


Fontina di Trevi (Florence)i love my camera.  i decided not to bring my digital SLR for a few reasons, but primarily i didn't want to carry something so large.  i also had sold some lenses in anticipation for better lenses but hadn't replaced them yet.  so i opted for my snapshot camera, the Canon SD850 IS.  this camera is awesome.  seriously, i want you to know how awesome this camera is for a snapshot.  it can't compare to full-blown digital SLR with quality glass and a spectrum of range, but for snapshots, it rules.  the digic processor is the same as the canon digital SLRs (up to a certain model) so the quality of a photo is great. 


we took roughly 280 photos and most of them turned out great.  i did forget to bring a tripod, but managed to negotiate one down to €5 on the street for some night photos.  the street vendors nailed it, they were selling tripods and mini tripods like crazy.  italy is a beautiful site at night and all the sites (colleseum, vatican, bridges, etc.) and watching people try to take pictures with their flashes on their snapshot cameras was a bit comical.  i'm no pro, but i was able to help a family take a better picture in front of the trevi fountain (above) so that you could actually see their family -- their first shot used a flash and while the family looked great, but you couldn't see the fountain :-). 

having this camera was great and having the ability to do some short video clips as well helps in my overall vacation.  this was an essentially piece of technology (of course a camera is, but i mean on the level of features and quality that this provided).


i didn't really do much entertaining outside of the flights, but in-flight i needed my portable media device.  my largest one is an iPod (80G) -- note: new zune wasn't out yet, and i haven't had a chance to review one myself, but looks promising -- and i loaded about 15 movies and two tv seasons (the office and lost season 1).  having these at my fingertips was essential to my sanity over the long flights.  i hadn't seen lost before and was able to watch the complete season 1 and i'm hooked (got to go rent the others now).  i laughed my butt off watching my favorite episodes of the the office as well.

one of the other cool things was our flight back from italy.  we were on a newer delta plane that was equipped with a new in-flight entertainment system that was awesome.  it was a touch screen system on the seat in front of me.  they've appeared to partner with dish satellite tv so we watched the sunday night football game on the way home if you wanted as well.  there were on-demand movies ($5), HBO shows ($2 each), and in-flight games that enabled you to play with others on the plane!  i particularly liked the MP3 feature enabling me to browse their list of "cds" and create my own playlist and then listen to it (good quality and good recent selections as well).  you can read about this change on the delta blog site.  it was a very positive user experience for me overall.  i'm not a delta flyer, but i was very happy as a geek to see this level of technology being implemented in-flight.  bravo.

i have a bunch of other opinions about italy and my trip, but they aren't technology related, so i won't bother you.  thanks to the fine italian folks for their hospitality (except for the hotel staff at all but one of our hotels...very rude and not service-focused) and patience with my butchering of the italian language.

| Comments

well, even though i haven't seen them, i'm impressed with the announcement.  maybe i switched too soon, but i still stand by my decision based on my personal needs (car aftermarket oem integration).  regardless, here's what the new zunes will bring...

    • 80GB and 4/8GB flash versions
    • new Zunes will have new UI and features..."old" Zune users will get those features as well!
    • native codecs for h.264 and MPEG-4 -- no need for only WMV
    • WiFi sync to host machine
    • Podcast support!!
    • Zune software is completely re-written apparently and although i haven't seen it i'm hoping it isn't a re-badging of WMP still.
    • Zune music store is going to have DRM-free music in MP3 format for over 1 million tunes.

this is a pretty impressive lineup of features.  i think it is way cool that the software on the device is backward compat with original zunes.  to me, that is huge.  it acknowledges early adopters and doesn't leave those feeling like they are "stuck" with a v1 device...that is huge in my opinion.

the other features sound great as well.  i can't wait to see the new software to make a decision on how good it is.

| Comments

while traveling on my way to railsconf and the portland code camp, i headed to the airport (again).  from march-may i've redefined myself as a frequent traveler...mastering the security lines, figuring out what is and is not required, etc.

as a part of code camp, i'm bringing a zune to give away.  i should note that when i travel i bring my zune with me in my backpack.  the zune i was also carrying was on a carry-on and was brand new (in the packaging, etc.).  well, going through the security line...my backpack...made it fine.  suitcase...stopped.  they needed to look.

fine, no problem.  took me aside, opened the bag.  he proceeds to pick up the brand new zune packaging and opens it.  what?!  this is supposed to be a prize.  oh well, i guess you don't mess with the man...so he proceeds to break all the seals on the new packaging (sorry to whomever receives it).  he opens the zune and wipes the little handy wipe thing to scan for bomb residue, etc.  puts it in the machine...alarm.  loud noises.  weird.  a brand new zune made the hazardous material alarm trigger. 


this leads to a full re-search of my body, my backpack, and then an unpacking of my entire suitcase.  as he is unpacking my backpack, i laugh at the irony as he is taking out my zune from my backpack and does nothing about it especially after a new one just alarmed.

sigh, god bless america.