I find that the more time I spend detailing exactly what features and behaviours I expect from something I’m building, the faster and more successfully I’m able to actually build the thing I’m seeking. This is a truism of technology development (and an old boss would say, of project management), whether you’re a one-person shop or a team of thousands. However, it’s a lesson each person has to learn and digest to be able to figure out exactly what works best for them.
mini “Functional Spec” for MyPicasaPictures
Here’s a list of the features I’ve dreamed up so far, and the priority (1=high, 3=low) I’m personally assigning to them:
- Pri1: upload a currently-selected Picture to (the default, if such a thing exists) folder/album/library (or whatever Google calls its collections) on the photo-sharing server
- Pri1: enumerate and select the working folder/album/library when there are multiple folders to choose from
- Pri1: authenticate to remote server
- Pri3: cache remote server’s credentials securely, using DPAPI
- Pri2: view names and/or thumbnails of pictures already in the selected remote folder/album/library
- Pri3: enumerate and present the other metadata associated with each picture (e.g. Tags) and each folder/album/library
- Pri2: write the code so that it abstracts the service-specific logic – enabling future versions of this app to easily add support for other server-based Photo sharing sites such as Flickr, Windows Live Spaces, Facebook, etc.
- Pri2: Assign a new tag for a photo that has already been uploaded
- Pri3: enumerate existing tags from remote server, and allow user to assign tag(s) from that set (along with new tags not part of the existing enumeration, in a mix-and-match formation)
- Pri2: collect tags from the user for photo about to be uploaded, and submit the tags simultaneously (if supported by the photo-sharing service) with the upload, or right afterwards (if simultaneous isn’t supported)
- Pri2: upload a batch of photos all at once (i.e. entire contents of a local folder that has been explicitly selected by the user). Note: this may not be possible, as buttons or other controls cannot be added to the existing VMC UI.
- Pri3: pick & choose a set of photos to be uploaded (e.g. subset of a single local folder, subset of photos in > 1 folders)
- Pri2: delete existing photos in online albums (one at a time)
- Pri3: delete existing photos in online albums in a batch (e.g. a subset of one album, or a subset of photos that span multiple albums)
- Pri3: resize the photo(s) before they’re uploaded
- Pri3: enumerate and present “spinner”-based choices control for the user to select one of the photo sizes “supported” by the remote server (if there’s any sort of default/preferred sizes that the server chooses to assert)
- Pri3: rename the to-be-posted picture where another of the same name already exists on the remote site
Questions that keep coming to mind
- How do I implement client-side support for a SOAP- or REST-based Web Service in MCML apps?
- What “model” should I aspire to use for this kind of development? [cf. Gang of Four]
- Where will the entry point(s) for this add-in be located? Steven Harding crystallized a suspicion I had been gathering on this topic – “Unfortunately, you can’t add anything to an existing Media Center interface. So there’s no “Send This Folder to Picasa/Flickr” possible.”
- What exactly is a Start Menu Strip, and why are only two of them allowed at one time (and why does VMC seem to “punt” the oldest one out unceremoniously when a third is added)?
- What is the real difference between a VMC application and a VMC “background application” (other than the obvious visibility issue)? i.e. Under what circumstances would I want to use one approach and not the other?
- What does “running on the public platform” mean in terms of (a) additional functionality that’s possible, and (b) what kinds of security restrictions are lifted on apps running on that “public platform”?
- If the More Information (“i” button) is so strongly discouraged, how should we provide that kind of “added functionality” in context of the application, ONLY when the user wants it, and WITHOUT cluttering up the UI in a way that makes it harder for most users to get their basic needs met?
- Should we use a horizontal, multi-layer menu that’s presented on the Recorded TV screen?
- Should we try the vertical stack of buttons that stay resident for all contexts, such as you see when you browse the detailed info for a Movie?
- Adding new objects to existing Start Menu Strips?
- Adding new objects to existing “More Information” context menus?
- Adding new sorting/filtering options to existing collections of content e.g.
- I’d love to add “Show only Movies” to the “By Title” and “By Date” choices currently enabled in the Recorded TV collection
- I’d give my left…toe to be able to sort a TV show’s episodes by the “Originally Broadcast” date, so I could accumulate a bunch of episodes of some show and then watch them in the order they were meant to be seen, not in the order they happen to have been recorded
- Adding new tiles to the “More Programs” collections that are buried one click away from the Start Menu?
- 🙂 “I’ve watched a video on Channel 9 where Charlie Owen and a programmer (Mark Finocchio?) demonstrate how to do basic MCML. That was slightly more illuminating (though it took 35 minutes to get to the programming), but then I discover that you basically have to create your own buttons from total scratch. It really is back to the ark stuff.”
- 😦 “I’ll check in to the ability to catch the More Information button — last I recall the handler is there but didn’t work exactly as planned.” [sounds like one of those famous understatements of the year…]
- 😦 “There are only the very basic visual elements – ‘Graphic’, ‘Text’, ‘Colorfill’ and ‘Clip’. Everything complex – like a button, menu, scroller etc. must be built from those four visual elements.” [also see 😦 ]
- 😦 “This question comes up a LOT. Enough that I covered it in my blog… Please check out the article called ‘Scope in MCML’.”
Here’s the list of beginner articles I’ve seen multiple folks point newbies at, to get a feel for what I’m about to take on:
- VMC SDK‘s “Step-by-Step” walkthrough (linked from the Windows Start Menu once you install the v5.2 or v5.3 SDK)
- MCML: UI’s (Steven Harding)
- UI Properties: Making UI’s Flexible (Steven Harding)
- Model-View Separation (Steven Harding)
- Stage 1: A Basic Layout (Steven Harding) through Stage 11
- GData .NET client library “Getting Started” guide
- cURL client for testing upload of files to Picasa
Source code to investigate: (as it might have some hooks already worked out that I won’t have to learn from scratch)
- Discussion of Yougle app (watching Google Video, Flash, etc.)
- More discussion of Yougle, including mention of Registry settings he uses to unlock Pictures + Video functionality (for video, but might be useful down the line…)
- Review the samples that “emigrating” has posted to http://mytv.senseitweb.com/blogs/mytv/default.aspx, e.g.
- TwoChoiceExample (by AndyC)
- Web Client Software Factory (for lessons on implementing the web services client code in recommended ways)