All posts by Graham Miln

Making Movie Splitter

Miln Movie Splitter is my second product through Miln. It is also one of the fastest products I have developed.

Driven by a simple need Movie Splitter came together reasonably easily. That is not to say it was technically easy but the process from start to finish was clear and uncluttered by too many time consuming decisions.

New Cameras

Megan and I recently upgraded our cameras. We both opted for Canon point-and-shoot cameras after my positive experience with a PowerShot SX200 and my family’s experience with an A3200.

Our new cameras both came with a feature called Hybrid Auto. This movie digest feature creates a fun short movie as you take photos. While in Hybrid Auto the camera quietly captures a few seconds of footage before each photo. Those seconds of footage and the resulting photo are added to a summary movie of the day. The result is a surprisingly entertaining movie of the day’s events.

iMovie Frustration

Megan has been learning to film and edit. Her experiments led her naturally to want to incorporate the Hybrid Auto movie into her short films.

Try as she might, iMovie was unable to provide the frame accurate splicing of the Hybrid Auto movie she needed. The latest iMovie is great for home movies but does not attempt to provide individual frame control over the final product or the source materials.

After some frustration I noticed QuickTime Player and QuickLook both recognised each section of the Hybrid Auto movie as a chapter. This hinted that it should be possible to automatically find and slice the sections based on the chapter information.

An Opportunity to Play

This observation gave me something I have long been wanting. An opportunity to play with Apple’s new AVFoundation framework. This audio/visual library of code from Apple is reasonably new in OS X and iOS. AVFoundation underpins the audio and video handling of modern Macs and iPhones – and I had yet to delve in to see what it offered. None of my current work demanded it.

So presented with an opportunity to help Megan and play with the AVFoundation framework, I could hardly say no.

AVFoundation Fun

AVFoundation was surprisingly welcoming. The abilities I wanted had been added only in OS X 10.9 but that did not matter. Our Macs are up to date and Apple’s free upgrade path to OS X 10.9 means it is difficult to justify supporting older versions for brand new products.

Thanks to my work with Power Manager, I was comfortable with AVFoundation’s demand that most functions are asynchronous. That is, functions start and wander off into the wilderness of your computer only returning when the job is done. It means the calling code needs to be prepared to fire and forget for a while. Start the job and allow the user to get on with something else in the mean time.

The result is a much more fluid experience where you rarely feel any pauses or delays. Get the interface right and even the long running tasks feel fast or inconsequential enough not to frustrate.

Compare this to the traditional synchronous approach that starts and waits for completion before continuing. A synchronous approach is marked by progress bars, blocked documents, and long waits.

A New App

What came out of my experiments was Movie Splitter. An application that does one task really well.

The user interface was the biggest challenge for Movie Splitter. The final look and feel is deliberately light in tone.

Movie Splitter shipped with a document window of three parts. Mostly white, separated by titled sections: Source Movie, Sections, and an Export… button at the base. Simple and fairly unassuming for the brutish work it world save the user.

Miln Movie Splitter's document window
Miln Movie Splitter’s document window

Apple is tending towards a new look and feel. I have no idea when OS X will change its appearance but I will not be surprised when it does. The signs are there and clear for all who know where to look; a change is on the wind.

When the change comes, I hope Movie Splitter will be well placed to straddle both realms.

Iconic

I have always preferred iconic icons over the photo-realistic and often comic feeling icons common on OS X today.

Miln Movie Splitter's icons
Miln Movie Splitter’s icons

Icons should be strong and reproducible at many resolutions without great feats of effort; I am not a graphic artist and just can not afford the time such a burden would demand of me. Movie Splitter’s application and document icon still required artwork in many sizes just to produce something that looked good on retina and normal displays.

I am pleased with the final look of both Font Pestle and Movie Splitter’s icons. They feel cut from the same cloth.

Miln icons - cut from the same cloth
Miln icons – cut from the same cloth

Judgement Day

Submitting a new application for inclusion to Apple’s Mac App Store is a moment of mixed emotions. I have encountered too many stumbling blocks to feel positive about the experience. Getting Movie Splitter into the store took longer than normal. The first review led to a second and that delayed the process.

Until an application – a manifestation of your effort and hope wrapped up in a bundle of bits – is reviewed and accepted, it could yet be rejected. Rejection can be absolute with no chance of acceptance. Rejection can be a trivial change or something more subtle but you never know until all the work is done and you are ready to submit the application.

Movie Splitter was accepted into the Mac App Store. That was a good moment. One Megan and I have yet to properly celebrate; traditionally, launches require a decadent slice of chocolate cake or another treat.

Improving and Refining

I submitted a minor bug fix update for Movie Splitter to Apple today. A link to the included help book was not working. The update fixes it. I expect it will be a few days until the new version appears in the Mac App Store.

There are a few improvements I plan to make to Movie Splitter. I want to be able to integrate the application into a workflow. It seems ideal for the purpose but how depends on how Megan ends up using Movie Splitter. I would be tempted by AppleScript but I suspect Automator or another approach will be a greater priority for her. We shall see.

Follow Along

I am trying an experiment to see how effective a social site is for sharing updates and news about an application. In the past I would rely on my own site almost exclusively. For Movie Splitter, I thought an experiment would be fun.

If would like to be kept informed about Movie Splitter, like Movie Splitter’s Facebook page, facebook.com/moviesplitter.

Macabre Marseille

I did not expect to see such a macabre collection of artefacts: skulls, mummies of various animals, and shrunken human heads. The items were all on display in Marseille’s Centre de la Vieille Charité.

Mummified alligator
Mummified alligator
Mummified cat
Mummified cat
Mummified cat
Mummified cat
Mummified gazelle
Mummified gazelle
Mummified ibis
Mummified ibis
Mummified human hand with ring
Mummified human hand with ring
Decorated skull
Decorated skull
Decorated skull
Decorated skull
Decorated skull
Decorated skull
Shrunken human heads
Shrunken human heads
Shrunken human head
Shrunken human head

As residents of Lyon, we benefitted from free entry to the permanent collections of the museums housed within the impressive courtyard building.

Central church of la Vieille Charité
Central church of la Vieille Charité
Courtyard of la Vieille Charité
Courtyard of la Vieille Charité
Inner courtyard of la Vieille Charité
Inner courtyard of la Vieille Charité
Walkway of la Vieille Charité
Walkway of la Vieille Charité

Cherry Blossoms

I have been taking photos of the same tree for a couple of years now. The tree sits near traffic lights on Boulevard des Belges and is unassuming. Then for a few weeks, the tree becomes a colourful burst of petals and pink.

Composite of a tree blossoming
Composite of a tree blossoming (click to enlarge)

The composite image combines four photos over a short period of time. The photos age from oldest on the left to most recent on the right.

Four photographs used in the composite
Four photographs used in the composite

2014 March 20 – First signs of life after winter;
2014 March 27 – Buds appearing;
2014 March 31 – Blossom begins;
2014 April 05 – Full bloom.

The blossom is long since gone. Rainy days and the wind carried the petals to the ground. The tree is green now but once again unremarkable among the city streets.

Petals blown into patterns by the wind
Petals blown into patterns by the wind

During a walk into the city another blossom tree caught my attention and a short film of cherry blossoms was created.

More Squirrels

I am playing with a new camera and trying to figure out its limits, my limits, and how to get the most from it. It is going to take a while.

The newly released Canon PowerShot SX700 HS is lovely. Holding a shot still while zoomed in x30 is tricky but possible; although probably better left to a tripod when the shots are critical.

Below are a few photos and a short film of squirrels foraging in our local park. Most of the shots are taken at maximum zoom.

Red squirrel on a tree
Red squirrel on a tree
Red squirrel on a tree
Red squirrel on a tree

Amazon links on this page help support running The Work Life.

Exporting Contacts to CSV

An AppleScript to export name and e-mail addresses from Contacts.app on Mac OS X to a Comma Separated Values (CSV) file. The created CSV file is suitable for importing into numerous other tools and services.

I wrote this script for Mac OS X 10.9, Mavericks, but it should work without too many changes on most recent versions of Mac OS X.

To use this AppleScript:

  1. Launch AppleScript Editor from Applications > Utilities
  2. Copy and paste the code below into a new document
  3. Run the script
  4. On completion a contacts.csv will appear on your desktop
-- Save comma separated values (CSV) file to desktop
set exportPath to (path to desktop as string) & "contacts.csv"

set contactsCSV to "" -- variable to collect rows of addresses
set quoteString to "\"" -- constant to ease concatenation

tell application "Contacts"

	-- Repeat with every person in your Contacts
	repeat with x from 1 to the count of people
		set thePerson to person x
		set theirName to the name of thePerson

		-- A person may have multiple e-mails addresses, add one row for each
		repeat with anEmail in the email of thePerson
			set contactsCSV to contactsCSV & quoteString & theirName & quoteString & "," & quoteString & (value of anEmail) & quoteString & "
"
		end repeat
	end repeat

end tell

-- Write the CSV contents to a file
set exportFile to open for access file exportPath with write permission
set eof of exportFile to 0
write contactsCSV to exportFile starting at eof
close access exportFile