Blackberry PlayBook

I’ve had my PlayBook for a week and although my usage hasn’t been high due to FITC obligation (read: drinking & shenanigans), I have some reactions.

1. Size

Although I will never stop making juvenile comments when someone says “7 inches is enough.” I do think the PlayBook has an adequately-sized screen. *snicker*. I don’t own any other tablet, so I wasn’t as prepared for the your hands will not be as close together so typing on screen with your thumbs will be unlike your phone thing. Mind you, that’s a small thing and I doubt I am meant to actually do that much typing.

2. Casing

Ironically, this is one of my very few complaints. Because the edges aren’t bevelled, the exterior of the PlayBook feels almost sharp. It’s not terribly comfortable to hold for long periods. Since it’s a tablet, not being comfortable to hold may be an issue.

3. Usability

Double space, period. Do you know how used to that I am now? Tap space twice and it ends my sentence. I miss that. A lot.

4. Bezel Controls

Being able to switch apps by flicking from the outside of the screen in is pretty cool. Makes it a little difficult to program an app that potentially reacts to a lot of swiping. I see a lot of frustrated game developers doing the funky chicken when they realize that they’ll need to not have any activity within 100 pixels of the borders for fear that user will swipe themselves out of the game. Other than that, I really like it. And swiping up minimizes the app and swiping down can bring down that app’s general navigation. Pretty nice, indeed.

5. General, Quick Reaction

I really like my PlayBook. My app is approved and plays really well on it. It’s free, so if you have a PlayBook, download it and review it. *koff* moviesinhaiku!.

It’s powerful hardware. You can open a ton of apps and switcheroo them without sacrificing performance. The mini HDMI and presentation mode is pretty badass too. Sound is good, not too tinny from the installed speakers. The camera will record 720p video and I have used it a couple of times now as a video-blogging tool for my documentary. I guarantee I’ll be hitting it a lot over the next few years. I have a couple of other apps in mind, so I’ll likely make more.

If I can do a shout out: Rajiv from RIM was most excellent in helping me navigate the debug token installation thing. If you’re a user and not a developer, pretend like I didn’t mention anything at all. But as a developer *shakes fist*.

Festival/Conference Titles

Most recently I spoke at FITC Toronto 2011. Very fortunate to be included in MK12’s titles.

FITC Toronto 2011 Titles from MK12 on Vimeo.

I have been super lucky to be included in FlashontheBeach’s conference titles (being a speaker and all) in 2009 and 2010. After watching Buck’s F5 titles, I realized I never give more than a passing “good titles” comment. However a ton of work goes into them and I need to give them their due.

First off is Artillery’s titles for FOTB ’09

Flash On The Beach 2009 Titles from Artillerystudio on Vimeo.

Wonderfully done. Quiet, delightful and fun. I loved seeing my name in these.

Next up are Nando Costa’s magnetized FOTB ’10 titles.

Flash On The Beach 2010 Titles from Süperfad on Vimeo.

Just amazing. Thank you to John Davey for having me at his events. It’s been a real honour.

Help the Production of Influential

I am looking for an able-bodied individual to help me with recording at FiTC Toronto. The organizers of FiTC have graciously donated a pass to the event to someone who can give me a hand. It’s a pretty amazing value

Here are the requirements. The candidate is someone who:
1. Is willing to lose a lot of time you could be using watching sessions. I am looking to have you available for recording each afternoon between 1:30 (after lunch) and 5:30 (after the last session is over). The one exception will be Monday between 2 and 2:30 when I need my laptop for my session in the Voodoo Lounge. I intend to be available after my session and it would be cool if you were there to get oriented.

2. Is trustworthy enough to leave you with my equipment. There’s not a lot of it, but it’s mine and I’d miss it if it got lost or stolen.

3. Has some aesthetic eye for positioning, some level of attention to detail and willingness to work a repetitive task.

4. Is approachable and welcoming. If people are being directed to you for a recording and you’re not paying attention by being on your phone or surly, that’s not going to work out.

5. Is available April 27th for the FlashinTO Flash User Group meeting where I will be performing a test shoot and would like you there to run through the rigamarole with me.

Sound good? Email me hugh [at] influentialmovie [dot] com

I will reply to everyone but only one person gets the gig.

Thanks so much for reading and your interest in supporting the project!

FiTC 10 Year

FiTC 10-yr Banner

“No, I won’t be doing IronFlash this year.”

Over the past 10 years of FiTC, I have been proud to be included as a speaker 4 times. I also ran a live coding competition called IronFlash for four years straight. Once it was even televised on TechTV! Ah, the good ol’ days.

This will be my fifth go-around as a speaker and this time, I’ll be presenting in the Influxis Voodoo Lounge.

This has some exciting aspects to it;
1. Free beer.
2. 30-minute session.
3. Did I mention free beer?

In my session Film Fan to Filmmaker at 4:05 pm on Monday May 2nd, I will be showing a 30 minute review of 2010 that culminated in my launching of Influential – The Age of Digital, a documentary with a decidedly “digital twist”. Harkening back to my first foray into documentary filmmaking, wheniwas19, I will asking anyone and everyone to submit to Influential during FiTC using my laptop! So get ready to submit! I bought a swanky HD webcam just for this.

On top of everything else, Hot Docs is happening April 28 – May 8! For a newly-created documentary filmmaker, there’s nothing more exciting than over a week of documentaries being screened in one city. I’m also listed as a director for the event and will be attempting to hobnob as much as I can while it’s on.
So come to FiTC 10 in Toronto!

Influential – The Update

Online submissions via webcam are now being accepted! This is a big step for the documentary as it goes from theoretical to actual.

There are some minor notes to make. Be sure to verify your microphone is being picked up. After agreeing to let the site access your camera and mic, do a test recording. As simple as hitting Record, saying a few words and clicking Finish. Once you’ve verified your mic is being recorded, hit Retake and do your actual recording. Otherwise you can specify which mic is being accessed. (thank you to @puremvc for the heads up)

On the submission form, I am using a very large database for location. Consequently, when you choose a Country, then a Region, the amount of cities returned could be quite large and take a while for you to find yours. I will be implementing a filtering system into the form so you can type a couple of letters in to narrow the cities list down some. (thank you to @mykola for the suggestion)

Lastly, I will be adding an upload feature so you can use saved video files. Hopefully this won’t take too long to implement as I am sure some of you in the video industry would want to make your own superclean, pretty submissions. In the meantime, you can email hugh [at] influentialmovie [dot] com and I can submit on your behalf, if that’s the case.

No end of thanks to Influxis for the continuing support!

Please spread the word and let’s get as many people submitting as possible!

Invivo FlickApp

Although I haven’t posted in a couple of months, it’s not because I haven’t been busy. I’ve actually been overwhelmed by work, thankfully. It has a negative effect on personal work but it does pay the bills. One project last month was unfortunately for a proof of concept and I am not allowed to blog about it. That’s a shame, as I was quite proud of the final product.

On the other hand, I simultaneously worked on something I’d never done before; an AIR app running on a touchscreen. An AIR app that would be controlled by an HTML5 app running on an iPad! That’s right. Somewhere, Steve Jobs had a pleasure shiver run up his back. This was to be a slide presentation sales aid. The salesperson would be able to flick the slide from their iPad to the big screen, all nonchalantly, and continue their pitch on the touchscreen. Seeing this work for the first time was super cool.

This was an incredible learning experience. It was no surprise to my client that I had never written an AIR app before. Partly because I didn’t tell them I’d never written an AIR app before. Koff. Sorry, guys.

I’d love to get into the nitty gritty of this project, but I’m sort of under the gun time-wise on another project. I want to speak to a couple of things:

1. We used a socket server to do the cross-app communication. Until I was able to get into the actual environment, I used a XML socket server in the form of Oscar and controlled it from my iPhone using TouchOSC. This was thanks to Dr. Woohoo who had used something similar for a project. These two things gave me a leg up in building my app. I am very thankful to have so many knowledgable friends.

2. There are minor, but distinct, differences between XML socket servers and socket servers. Christian Cantrell has some really informative posts on how to implement a socket server. I highly recommend checking them out.

3. Be completely aware of what your client wants and try to write your app so it does more than it should, not less. It’s easy to scale back on functionality by simply not using it. It’s far more difficult to add functionality to a nearly-finished app.

4. Version your app when you create it. It makes it easier when you overwrite it on install.

5. Educate your client on aspect ratios. The iPad version is 4×3, while the touchscreen version is 16×9. That means two differently-similar designs.

Onsite, at the conference, the tech took a short video. I would have liked something a little more expansive and better framed, but beggars can’t be choosers.

I’m currently working on another AIR app. Well, technically, two AIR apps using iPod touches and the Oscar socket server. Very exciting! If there are questions, please feel free to ask them, I’m not unavailable.

The Waiting is Over

Twice now I mentioned Influential. Once, I talked about creating a wordmark. The second, I mentioned it as an upcoming project.

Launched

On Wednesday, January 26 I officially launched the support site and announced my newest project, Influential – The Age of Digital, a documentary chronicling a family tree of the digital world from the POV of people that have influenced others.

The intention behind this is to see where the roots of our industry lie by asking Who or what inspired you to do what you’re doing?.

As far as I know, this is the first documentary of its kind. I’ll begin by getting submissions via the website during the second, data-gathering, phase and from attending events with a camera.

Obviously, the first thought that comes to your mind is “How, Hugh Elliott, HOW can I help?!!?!”. If it’s something else like “You know, I bet a marmot actually makes a pretty nice pet.” I’d like to attract your attention with something shiny.

Help

Here’s how the documentary could really use help;

I’ve never officially made a documentary. If you have filmmaking experience, I could use some advice. On an equipment front, fund-raising stuff like that. I’d like to try and get ahold of a manageable camera (the Canon Mark V D looks wicked), at least for production blog type stuff. And then what kind of camera to use at events. Remember the end intention is a screenable documentary. Like cinema screen. So keep that in mind. I definitely want to see this on a screen and not look all sucky.

I’m relying primarily on word of mouth. I’ve attached the voice of the documentary to the website, Facebook and Twitter. If you’re able to spread the word, I’d be truly appreciative. Each stage of the documentary will require a fairly major push and I’ll be counting on the good graces of the industry I love to help get the word out.

If you’re a media type (journalist person) I am more than willing to do interviews as the project progresses. My email is hugh [at] influentialmovie [dot] com

If you would like me to come to your location to do a series of questions sessions for the content of the documentary, email me and let’s work it out. If you’d like to do your own location shoot and are willing to abide by the guidelines of the documentary, I am more than happy to send you the shoot guidelines.

Influxis

Jerry Chabolla and Richard Blakely of Influxis have shown incredible faith in this project by becoming production partners and executive producers. I am humbled and a little nervous that they’re going to be so involved. Thank you so much, Influxis!

I can always use more help in that regard. If you’re interested in providing funding or equipment, I’d be nothing but grateful and willing to have a discussion regarding what level of credit is required in the documentary and site. Hey, Canon! You hear that? I need a camera!

My PlayBook Experience

As I posted before, I attended the PlayBook introduction in Toronto.

Free PlayBook? Yes, please!

The main draw of course is the offer of a free PlayBook for an approved app in the BlackBerry app store for the PlayBook.

As it so happens, I also have been pursuing a personal project for the past year, Moviesinhaiku. This seemed like a good fit for a tablet app.

There are a lot of great resources on how to get started with developing for the PlayBook, so I won’t touch on that too much. What I’d like is to go over some features of my specific app and some decision-making involved in making those features work.

Without further ado.
(note: all images resized from original screen size)

What should a Movieinhaiku look like?

The first problem I wanted solved was how I wanted to display my haikus. I didn’t want anything too elaborate because;
A) I couldn’t guarantee performance
B) They’re haikus about movies. How elaborate do they need to be?

I have been keeping an updated XML file handy on the moviesinhaiku test site. Each haiku looks like this;

<haiku answer='True Grit'>
<imdb year='2010'>tt1403865</imdb>
<haiku_text><![CDATA[A man with true grit.<br/>Girl hires. Catch father's killer.<br/>Vengeance costs in time.]]></haiku_text>
</haiku>

The Moviesinhaiku logo is essentially two rectangles, black stacked on white. Made sense to simply continue that for the haiku “cards”

I don’t want to discount the ease or difficulty in using XML and Flash. I’ve been using the exact same class for a long time now MainImporter for importing pretty much everything. But I’m not really going to get into parsing XML.

One thing I decided to try that was new to me was use the Dictionary class. It seemed like a great tool to store all my haikus. I’ll be completely honest in admitting that I don’t get it entirely, but it’s primarily a set of keys. So I created my Dictionary and pushed in all the haikus created so I could reference them whenever I wanted.


haikuDict = new Dictionary;
for each(var haikuXMLnode:XML in haikuXML..haiku){
   var haiku:Haiku = new Haiku(haikuXMLnode);
   haikuHolder.addHaiku(haiku);
   haikuDict[haikuCount] = haiku;
   haikuCount++;
}

Haikus on screen

Once I had my haikus in the dictionary, I wanted to scatter them around. The easiest way I could think to do that was to use the Orbit class I’d written for the Particle book for GalaxyGoo. Throw a little random into the mix and you get a nice, little random orbital display.

Third party services

I wanted to try and give more information than just the title of the movie so, as can be seen in the XML node above, I copied the IMDB identifier for each movie. A friend of mine did some quick searching and located The MovieDB. I applied for an API key and got to work. I set up two classes to get the information from teh interwebz to my app.

The first class I called APIcontrol and in essence just holds my API information; key, listing url and some static constants. The API results can be returned in XML and JSON. I’d never used JSON before and once again decided I’d be better off learning something new than just staying in my comfort zone. The first thing I needed was the as3corelib from Mike Chambers housed at github.
Specifically, I needed one class for one function call

import com.adobe.serialization.json.JSON;
var jsonObj:Object = JSON.decode(event.target.data);

Once again, how to work with JSON is all over the lazy web so I’m not going to get into it. It’s pretty easy and I think I’ll use it more.

The second class I wrote was called ImdbWindow. Technically, I should have called it TmdbWindow, I suppose. However, I didn’t and don’t like living in regret. ImdbWindow grabbed all the information from APIcontrol and created a window using; the movie poster, the synopsis, the array of genres and the release date. Example below. One thing that was very important I’d taken from a post by Christian Cantrell about scaling your images for mobile. Please read it as it’s important.

Filtering

Something I thought really mattered when I started was filtering. I liked the idea of the person using the device being able to view the haikus based on release or by title. In addition, I wanted to be able to give that same person the ability to search by text. There are a few things to consider when doing this so let’s see if I can break it down.

1. When alphabetizing, remember that a lot of movies start with “The”, “A” and “An”. When I store my haikus, each one stores an alphabetical version of their title. Writing a getter/setter for an alphabetic version of the title is as simple as;

public function set alphabetic($str:String):void{
   var tmpStr:String;
   if
($str.toLowerCase().indexOf("the ")==0){
      tmpStr = $str.substr(4,$str.length);
   }else if($str.toLowerCase().indexOf("a ")==0){
      tmpStr = $str.substr(2,$str.length);
   }else if($str.toLowerCase().indexOf("an ")==0){
      tmpStr = $str.substr(3,$str.length);
   }else{
      tmpStr = $str;
   }
   haikuAlphaTitle = tmpStr;
}

As you can see, I do a substring check at the beginning of the title for my little culprits and create a string that has those removed. This way, when I’m alphabetizing, they’ll make sense. The getter, of course, is just a getter, returning the alphabetic title.

Now how does one alphabetically sort? Using arrays and the sortOn method, of course!

I have two separate sortOn functions; Year and Title.

private function sortOnYear(firstHaiku:Haiku, secondHaiku:Haiku):Number {
   var aYear:Number = firstHaiku.year;
   var bYear:Number = secondHaiku.year;
   if(aYear > bYear) {
      return 1;
   } else if(aYear < bYear) {       return -1;
   } else {
      return 0;
   }
}
private function sortOnTitle(firstHaiku:Haiku, secondHaiku:Haiku):Number {
   var aAlphabet:String = firstHaiku.alphabetic;
   var bAlphabet:String = secondHaiku.alphabetic;
   if(aAlphabet > bAlphabet) {
      return 1;
   } else if(aAlphabet < bAlphabet) {       return -1;
   } else {
      return 0;
   }
}


(sorting in action)

As can be seen from the above image, the search by title is also active. This ended up being pretty easy. Since all the haikus are in the Dictionary, I was able to just set up an onChanged event with the textField. Then I compare the searched term with the haiku’s title. If there’s a match, I add the haiku to the displayList

private function onSearchHandler(evt:Event):void{
   while (mainHolder.numChildren) {mainHolder.removeChildAt(0); }
   haikuHolder = new HaikuLayout;
   haikuHolder.addEventListener(HaikuEvents.ADD_SCROLLBAR,addScroll);
   haikuHolder.startXposition = stage.stageWidth*.5;
   haikuHolder.startYposition = stage.stageHeight*.5;
   for (var key:Object in haikuDict) {
      // iterates through each object key
      var haiku:Haiku = haikuDict[key] as Haiku;
      var titleStr:String = haiku.title.toLowerCase();
      if(titleStr.indexOf(evt.target.searchStr) != -1){
         haikuHolder.addHaiku(haiku);
      }
   }
   haikuHolder.initLayout();
   mainHolder.addChild(haikuHolder);
}

Of course, no matter how close I thought I got to finishing, something would intercede and remind me that the worst thing you can be is your own boss. Especially when it’s a personal project. More especially when you’re not too busy with client work. Most especially when you like a challenge.

Just as I figured I was nearly done, Matt Fabb tweeted;

@wheniwas19 Looks like a v1 app to me! That said feature request: hide the title. ‘Cause it’s fun guessing the movie just from the haiku.

Which should surprise no-one that knows me I glommed on to like a barnacle to a ship (weird metaphor). So i felt like Matt was right, people should be able to treat this like a quiz! Well, that doesn’t bring me entirely back to the drawing board. So I decided to give it a shot.

Building a quiz

First things first, let people type in their answer or give them multiple choice? According to my friend, Drew, “Don’t give anyone too much to input. Your margin for error increases. Which is true. Unless I wanted to create a massive dictionary full of spelling options, I’d be shooting myself in the foot. So multiple choice it is. Simple enough, I suppose.

My solution is about as smart as I get. I have a list of titles provided by the xml. A huge list of titles. Why not pick four titles at random from the list and use 3 of them as alternates in the multiple choice. How would one do that, you ask? Lucky for you, I know how one does that.

Random numbers that don’t repeat

For some reason, for as long as I can recall, I have been building little functions that make non-repeating random number generators. I have my little RandomRange class so I add this function to it.

public static function nonRepeat(max:Number, num:Number):Array{
   var tempArray:Array = [];
   for (var i:int = 0; i < max && num > 0; ++i) {
      if (Math.floor(Math.random() * max - i) < num) {          tempArray.push(i + 1);
         num--;
      }
   }
   return tempArray;
}

This is easily called using var randomArr:Array = RandomRange.nonRepeat(titles.length,4);

So here I have an array with four random titles. Now I want to make sure none of the four titles are the answer. Don’t want to double up, right?

var answerCount:Number = 0;
var answersArrArray = [];
for(var i:int=0;i < randomArr.length;i++){    if(titles[randomArr[i]] != answerTitleStr){
       answersArr[answerCount] = new QuizAnswer(titles[randomArr[i]],answerWidthNum);
      answerCount++;
   }
}

Now I definitely have an array of four answers that are randomly pulled from all the titles in my xml and are not the answer. But I do, absolutely want the correct answer in the four. So I pop it into a random position in the answersArr array.

var realAnswer:QuizAnswer = new QuizAnswer(answerTitleStr);
answersArr[RandomRange.retrieveRandom(0,3)] = realAnswer;

Then all I need to do is build my quiz. As you noticed, I have a class called QuizAnswer that’s basically a textField with a black background that dispatches an event when clicked. If it’s the wrong answer, the textField is dimmed and the MouseEvent is removed. Process of elimination.

Once the quiz is answered, the process of pinging the Movie DB occurs again. I added in the option of seeing the haikus with or without titles and that’s how the whole app loads.

It ain’t over ’til it’s over

Just as I thought I was out, Matt Fabb pulled me back in with his innocuous question:

@wheniwas19 I don’t want to add more work for you, but I assume MoviesInHaiku app links to your Etsy shop?

Long story short, yes. I did. After Matt asked, but whatever.

So that’s it. Maybe not the most informative PlayBook post, but there is some thought to what I do. I have submitted the app at a cost of $1.99 to perhaps recoup some of the cost of building one of these things entirely on my own and on my own dime. I hope it’s approved, I hope people buy it and I hope they like it. I’m sure if they don’t I’ll hear about it.

Ping Pong Story

Today I tweeted “i know i don’t have a billion followers but does anyone want to take a crack at writing a twitter story?”

@cassiemc reponded pretty quickly and when we decided that it might just be us two, I pulled the trigger. We both tweeted we were doing the story and I made it my status on Facebook. Consequently, we were quickly joined by others. Using the hashtag #pingpongstory, here’s the story, colour-coded based on contributions. Thanks so much guys. You made a slow Wednesday pass a little more quickly.

@wheniwas19
@cassiemc
@carloalducente
@tconvery
@CTKBdesign
@zoomber

The storm had been raging for over an hour. She sat and stared, mesmerized, as lightning flashed across the lake. There was somewhere she was meant to be, but couldn’t remember where. Hours later, and sopping wet, Sara showed up.

“You won’t believe who I just saw!”, Sara beamed. She was feeling somewhat unsettled after the storm, but smiled expectantly. Though she was 75 years older, Elinor felt girlish & sprightly around Sara.

“WHO?!” she hollered as she stood & nearly fell. Regaining her balance, Elinor watched Sara huff with pride. “Stan Lightly”

Elinor fidgeted with her glasses’ chain. “Stan?” “… Lightly? Wasn’t it Dan?” Thunder shook the house. The storm was strengthening as if they’d only passed through the eye.

“He had a pet grooming business years ago, remember? It’s where we used to bring Fluffy before the incident.” Sara explained

“Oh yes!” she beamed with pride. But as the words “fluffy” settled in her mind, she became sullen and sad. What Elinor knew that Sara didn’t was the grooming business was a front for Dan’s more exotic career. Hitman for the mob. You see, Sara didn’t see Dan by coincidence. Dan was following Sara to talk about Elinor’s gambling debt, he was worried. It was Dan’s mob boss that sealed Fluffy’s fate the day he decided the adorable Pomeranian would make a great drug mule As Elinor remembered the fateful day they’d found the idiotic mutt frozen in the lake, a shadow passed by the window. Elinor’s debt had mounted and Big Tony had “requested” Fluffy’s help in moving some product. Little dog, big bag of coke. Stan groomed Fluffy one last time before they buried her. Tony & Dan had opened the backroom door a slit & smirked at Elinor.

Then it dawned on Elinor “What did you do, Sara?” Elinor demanded. “You led them right to me!” Sara was slow to turn. “Me?”

She saw Dan & Tony. “Why are they standing in the hedge?” Sara asked. Elinor’s hand gripped a pepper grinder from the table. Lightning crashed as the lights went out. Everyone suddenly in the dark, all Sara and Elinor could hear is rain. Elinor flipped the lid on the grinder. “What the?” was all Sara could manage before the claymores in the hedge detonated. Flying through the air, flames and shrubbery swirling around Dan & Tony. Elinor reaches for her Fluffy patterned 9mm. Like bloody rain, pieces of Dan & Tony sprinkle the ground.

“Elinor?” Sara whispered. Elinor’s neck prickled. She turned. Elinor was sick of Sara’s innocence, her enthusiasm for everything. Why did she come here? Elinor raised the pepper shaker.

In the dark, Sara’s smirk was barely visible. “You know, I didn’t think you’d fall for that. Dan & Tony weren’t here for you.” Elinor, carefully watching Sara’s every move, slowly backed away knowing that this wasn’t the same Sara she once knew. This couldn’t be the same girl who brought her meals on wheels, who’d stroked Fluffy’s neck lovingly. Elinor’s eyes widened. The kitchen flared with lightning as Elinor ducked Sara’s swung fist. Betrayed by age, the young girl connected with a kick. Elinor clawed her way up off the floor by grabbing the lever from her slot machine. Coins poured over Sara’s head at the 777. As the slot machine tumbled and Elinor saw the pin pull from the grenade taped to the back, all she could think was

“Typical”.

The End!

I am definitely going to do this again. Thanks again, all you folks who participated and @cassiemc for being as enthusiastic to start as I was.

a developer