This Is Nowhere: Bloomsday Halifax
Oct 30, 2018 22:26

Part of the plan with This Is Nowhere has been that it should be more than just a one-off app - it should become a platform that can be used for lots of time-and-location-based applications. To help keep the system open and flexible I decided from the start to build several different projects with it. It's easy when you're working on a single project to craft everything specific to it, which then makes it hard to make it an extensible platform later on.

Not all of these different projects saw the light of day (or at least haven't yet) but one did, especially since it had a firm date attached to it: Bloomsday Halifax, on June 16, 2018.

Bloomsday

Bloomsday is an annual event which commemorates one of the keystones of literary modernism, James Joyce's "Ulysses". The book's two main characters, Stephen Dedalus and Leopold Bloom (where the name "Bloomsday" comes from), spend June 16, 1904 wandering around Dublin, Ireland, visiting real places and meeting real people. Every June 16, people retrace their steps in the streets of Dublin, and the event has expanded to many other cities around the world, substituting local buildings and pubs for the Dublin originals.

I attended a number of Bloomsday events when I was living in Toronto, where actors performed scenes from the book around the Beaches neighbourhood. When I moved to Halifax, Nova Scotia, I was surprised to find that there weren't any Bloomsday events going on here. We have some very similar architecture to Dublin, including a Martello tower, a large community of academics and intellectuals, and a whole lot of Irish pubs.

I'm not much of an event organizer, but over the last few years I've done my own personal Bloomsday, walking around Halifax and sharing my journey on social media. But for 2018, it seemed obvious to use this time-and-location based framework I was working on to build a Bloomsday Halifax app. Participating would simply involve using the app, so I wouldn't have to do any extra organizing.

Building in iOS With Swift

Since we had discovered that the pure web experience had a lot of problems for this kind of thing on mobile devices, I decided to use this project as a way to get started working on components in native iOS. I'd been doing occasional iOS development since I came out with my diary app Remembary back in 2010. Since this wasn't going to be a super complex app, I decided this would also be a good opportunity to learn Apple's new language, Swift.

I found Swift a little odd to work with: it clears away a lot of the vintage C cruft that Objective-C was saddled with, such as header files, obscure data types, and memory management headaches - but then it adds a bunch of extra things to worry about, such as having to decide up front and then track whether a variable might ever be null or not. Swift also still has to integrate with a lot of old and messy Objective-C APIs, so it ends up being nowhere near as clean as it could be otherwise. Maybe I've just been spoiled by using Ruby all these years?

Building in iOS let me integrate the ARCL library I had previously played with in some of the early tech demos. This library overlays images over the camera view like other Augmented Reality tools, but it places them in space using the device's orientation and GPS information. It seemed ideal for a project that's all about adding layers over reality.

The Shape of the Experience

Soon I had the basic shape of the experience: it was going to be a collection game, a bit like Pokemon Go. There would be a location specified for each chapter of the book. You would be told where a location was, and shown how far away you were from it. An introductory text would be available, explaining the chapter and the Dublin and Halifax connections. Once you got within a specified distance of the location, quotes from the book would show up, like the tappable captions in the This Is Nowhere app. Each location would also contain several notable items from the book (a bar of soap, a jar of "potted meat", a newspaper proof sheet, etc.) which could be collected at specific spots. You could open up the Augmented Reality view to see where these items were. Once you got close enough to an item, it would be "collected" and added to your personal inventory.

So was I turning one of the great works of world literature into video game? Yes, indeed I was. And I think Joyce would have been okay with that. Ulysses is full of experimental uses of text: a chapter set in a newspaper office is broken up with increasingly ridiculous headlines (kind of like this post), a late night party is written like a play script, a drunken walk home turns into a question-and-answer catechism. A mobile device video game is exactly the kind of thing Joyce would have done if it had been a medium available at the time.

Reality, Augmented

The Augmented Reality feature was a lot of fun to play with, walking around town and seeing things I had placed showing up like ghosts. The full plan was to have images of all the items appear hovering in space, but to get all that would have required a whole lot of research and image prep - so in the interest of "just do something so we can change it later" I made simple "will o' the wisp" images of a circle with a blur effect fading to transparency. This was supposed to be just a stand-in, but it ended up looking really great. For one thing, a properly drawn circle in a 3D space automatically looks like a sphere - so you get 3D for free, something which would be much more difficult to do with, say, a bar of soap or a rolled-up newspaper. It also lends a feeling of mystery to the hunt experience - you only know what you're finding after you've found it. Also, since current AR technology doesn't let you hide or clip items if they are 'behind' objects in the real world, it's less awkward if they already look like hazy spirits or magical orbs.

But unfortunately the combination of Augmented Reality and GPS just isn't ready for prime time yet. The main problem is that GPS positioning can vary quite a bit. This is slightly annoying on a map, but it's really jarring when you're looking at items visually represented in the real world. I'd be walking towards an item in a space, and suddenly everything would shift 50 meters away. Or everything would suddenly reset to sea level - not a problem at the beach, but awkward up the hill on Argyle street!

Augmented Reality is still pretty cool as an "extra" but I don't think it's quite ready to be the heart of an experience.

Removing Stuff

I had several other ideas as well: one of my favourite parts of "Ulysses" is a chapter called "The Wandering Rocks". It describes what different people are doing at the same time, sometimes in parallel, line by line. It's always reminded me of early computer text adventure games or the online MUDs which were like text-based precursors to World of Warcraft. I wanted to have people pick an alias from a list of secondary characters in the book, and then as they went to locations and collected items, the server would build a master narration of what everyone (only known by their aliases) was up to, like a crowd-generated version of the Wandering Rocks chapter.

Unfortunately I ran out of time before I could get all of that polished, and I never quite got the UI for selecting aliases working cleanly enough. So I removed those features. Hopefully they'll be back next year.

I had also toyed with only having the locations activated only during the time in which they take place in the book. I soon realized, though, that being forced to start at 8am and not finishing until 3 the next morning would make for an extremely long day. So I kept all the locations available at any time. I thought about having certain items only collectible during the official times, so those people who wanted to do it the "right" way would get a special achievement - but ran out of time to do that, as well.

A Last Minute Retreat to the Web

Augmented Reality and extra features weren't my only problems: a day or so before the can't-push-it-back June 16 live date, I discovered an annoying bug in how the captions show up which I just couldn't figure out. Given that I also still had to finalize a lot of the actual content to be used from the book, I had to make a difficult triage decision. With such a tight deadline, I went back to something that I knew worked, and ended up rebuilding the client as a single-page web app, recycling lots of components from my existing prototypes for This Is Nowhere. Due to the support issues of dealing with GPS permissions, I decided against promoting this event much and limited it to friends and people in the Zuppa Theatre community.

Yes, it turned out to be quicker and easier for me to build a JavaScript experience from scratch from existing components than to debug one mysteriously malfunctioning feature in Swift. Partially this was due to being very pressed for time: I've found stress interferes with the kind of clear, let's-step-back-and-take-a-long-look thinking required for fixing an obscure bug, while in many ways it actually improves my ability to put things together with tools and components I'm already comfortable with and know work properly. Unsurprisingly, when I came back to this codebase a week or so later, once the stress was off, I was able to find and fix the problem in under an hour.

Since it was now a web app, I had to ditch the Augmented Reality feature, and instead just had a little readout on the screen showing how far away you were from each nearby collectible item. It wasn't ideal, but it seemed to work okay.

Design

My other big regret with not being able to use the full native app is I had designed a very arch icon for the app:

This is several layers of in-jokes and obscure references - exactly the kind of thing Joyce's "Ulysses" is full of. It even echoes Magritte.

I'm also pretty proud of the visual design I gave the app. I used as a base the "Greek" light blue that the original edition of the book had on its cover, and I picked Libre Baskerville, an appropriately handsome vintage font, for most of the text. Then I used the bowler hat wherever I needed a visual icon, like on the tappable captions. The end result looks quite different from the This Is Nowhere app, simply from a few simple design and colour changes.

Mashups

I got so excited about the idea of this project that I even put together some pictures combining modern Halifax with 1904 Dublin to go on the event website - if you've seen my Starshipsstarthere site, you know how much I enjoy photo mashups!









In Two Places At Once

Even with all the shortcomings, there was now a way for people to experience Bloomsday in Halifax, without having to coordinate with venues and actors and musicians and all that. I could organize a whole day of immersion in the book without even having to be in Halifax.

Which is just as well, since I wasn't in Halifax for Bloomsday 2018.

2018 is the year of everything happening at the same time. June 16 turned out to be not only Bloomsday, but also the day of Maritime DevCon in Fredericton. We don't get software development conferences in Halifax for some reason, and so Maritime DevCon is the only dev conference I can attend that doesn't require buying an airplane ticket, and I didn't want to miss it.

But since the conference was happening on Bloomsday, I decided to present a talk about Bloomsday and this app. I enjoyed explaining Modernism to a room full of programmers. I managed to get a recording of it here:

Meanwhile back in Halifax, a few friends and colleagues were using the app and experiencing a new take on an old work of literature. I had some great feedback on the experience, which went into making the This Is Nowhere software better.

There's something maybe a bit deranged but also kind of magical about having a software experience that only works for one day a year. It's a bit like Brigadoon, but as an app. I'm looking forward to taking things to a much higher level for June 16, 2019.

Other Blog Posts
This Is Nowhere: Bloomsday Halifax This Is Nowhere: Why an HTML/JavaScript Single-Page App With GPS Is A Bad Idea This Is Nowhere: GPS and Wayfinding and More UX This Is Nowhere: The Single-Button UX This Is Nowhere: Don’t Just Stand There! This Is Nowhere: Finding My Duck Finding Burgers Fast: My DIY Halifax Burger Week Site "This is Nowhere" at PodCamp Halifax 2018 The Diary Diaries: Fixing Remembary's Facebook Connection Special Leap Day Edition of "Some Weird Things About Time" What's Up With Remembary Can't get pg_dump To Work Now That Heroku Has Upgraded Postgresql to 9.4? The Best Thing I Ever Did To Promote My App If You Build It, They WON'T Come #deployaday, My Big Hairy Plan for 2015 Extracting Plain Text from an NSAttributedString My Year of "Hits" Part 2: Remembary Rolling My Year of "Hits" Part 1: Remembary Rises (and Stumbles) Handy Little Test Method to Check for Translations in Rails Apps My Suddenly Slow-Waking MacBook Air Indie App PR: Keeping Control of Your Tone A Quick Note on 'clone' in Rails 3.2 My eBook Apps 2: iOS, JavaScript, and Ruby My eBook Apps 1: Introduction Quick Tip: No Sound on Mountain Lion My Upcoming Talk at PodcampHFX 2012: My Year of "Hits" starshipsstarthere.ca: Building at the Speed of Funny Screencast Tips Remembary's Cool New Picture Support Indie App PR 2: Keeping On Top Of User Feedback Indie App PR 1: How to Handle an App Disaster Giles Bowkett Diary Project 2 Remembary Video Congratulations! Welcome to Your Nightmare! How My iPad App Remembary Took Off Why You Should Have an App in the App Store (Even If You Probably Won't Make Any Money) PodCampHFX Remembary Presentation - Part 3 How I Used MailChimp Autoresponders to Promote Remembary PodCampHFX Remembary Presentation Part 2 PodCampHFX Remembary Presentation Part 1 Why AdWords Ads Don't Work for iPad Apps Remembary is Sponsoring PodcampHFX Why Can't I Resize my Views in Interface Builder? Momento and Remembary Concerning Remembary iPad-Friendly eBooks of Gracian's Art of Worldly Wisdom Project Report: PTOS2 A Quick Note on Encryption We're all LUsers Thoughts on HAML Friday Afternoon Hack - Getting Beyond the Basics Halifax Friday Hack and Back to Basics Quote from Wil Shipley FutureRuby Make Web Not War Busy Week I: Toronto Ruby Job Fair Employment.nil - the Toronto Ruby Job Fair Code Count: Ruby on Rails vs. C#/ASP.NET A Brief Note on Twitter The Hub Halifax and Mobile Tech for Social Change Deep Thoughts on Microsoft From The Accordion Guy The Two Kinds of Defensive Programming Presentation - Fixing Careerious: From C#/.NET to Ruby on Rails Enterprise! Presenting at Ruby on Rails Project Night - May 7th New Name and New Look for Careerious/Clearfit FutureRuby and More From Unspace Health Tips for Programmers This tables meme won't die Careerious - Ruby and Rails vs. C#/.NET Yeah I Use Tables For Layout, So Sue Me The Different Kinds of Done Giles Bowkett's RubyFringe presentation OfficeTime: Great Time-Tracking App for OS X Back With A New Look Non-DRY Feed torontorb Keeping Your Sanity With The Command Design Pattern shindigital Is All Grown Up! (according to the spambots) Startup Stars? I'm so bored! The Magic Words for RMagick Jennifer from Operations You see? Naming is HARD Business Software as Process Documentation Deployment note: 'execve failed' Steve Jobs on Market Research Why Canada Is Better for Entrepreneurs "Program first and blog second" Toronto Tech Collage The MacBook Air Is A Roadster RubyFringe! Quote of the Week: Steve Yegge Starting Up: Cards Great design tool: browsershots.org Starting Up: The Logo Quotes Of The Day: Hedge Fund Interview TSOT Ruby / Rails Presentation Night - Part 1 Moneyworks: Accounting Software for Canadians on OS X Starting Up: The Name Nice logo, but why is your site so bland? Welcome to shindigital.com