Search: wenderlich

RWDevCon is 78 days away!

by Joey deVilla on January 17, 2018

If you’re looking for a conference that’s mostly iOS development tutorials, a couple of Android development tutorials, and a few inspirational presentations to help you make the most of those tutorials, you’ll want to attend “The Tutorial Conference”: RWDevCon 2018!

RWDevCon is put together by the people who put together RayWenderlich.com, the site for mobile developers. It got its start as an iOS developer site, but has since expanded to cover macOS and Android development, and from XCode only to also cover Android Developer Studio and Unity. I cut my iOS developer teeth by learning from RayWenderlich.com, and like the site so much that I joined their team of authors. Even though I run an iOS meetup here in Tampa, I’m on their Android team, because I like a challenge.

I’m also presenting at RWDevCon — a full-afternoon workshop on ARKit and a shorter “Intro to ARKit” tutorial. It’s going to be informative and entertaining, and you’ll walk away with not just the skills to write your own ARKit apps, but possibly a whole lot of app ideas.

RWDevCon takes place at the Westin Alexandria Hotel in Alexandria, Virginia. It has sold out three years in a row, so if you want to attend, the time to register is now. Here are the rates:

  • Conference only: $999
  • Conference + pre-conference workshops: $1,499
  • Companion ticket (gets your significant other or friend into the after-parties): $49

If you want to get better at mobile development and meet some of its brightest lights (and hey, you can meet me too), check out RWDevCon, or better yet, attend!

{ 0 comments }

If you’re interested in iOS development and are looking for a conference to attend next year, I highly recommend RWDevCon, the all-tutorial, mostly-iOS conference run by the fine people at the tutorial site RayWenderlich.com!

It takes place during April 5 through 7, 2018 in Alexandria, Virginia, and will feature…

…four in-depth workshops…

  1. Swift algorithms: build your own collection type, and while doing so, dive into the semantics, performance, and expectations of each Swift collection protocol. Then you’ll explore ways to write your code that takes advantage of this new knowledge.
  2. Machine learning: A hands-on workshop where you’ll harness CoreML and Vision framework and find out what machine learning is, train a model, and then integrate it into an app.
  3. Practical instruments: Finally learn how to use Xcode’s instruments to see how you apps works, find out where the bottlenecks are, and boost your app’s performance.
  4. And finally, the workshop I’m giving: ARKit — where you’ll learn about the features of Apple’s ARKit augmented reality framework, harness data from the camera and your users’ motions, present information and draw images over real-world scenes, and make the world your View Controller!

…and all these presentations…

  • Living Style Guides
  • Swift 4 Serialization
  • Architecting Modules
  • Cloning Netflix: Surely it Can’t be That Hard
  • Auto Layout Best Practices
  • Clean Architecture on iOS
  • The Game of Life
  • Android for iOS Developers
  • The Art of the Chart
  • Spring Cleaning Your App
  • Improving App Quality with Test Driven Development
  • Advanced WKWebView
  • Clean Architecture on Android
  • Getting Started with ARKit (that’s the one I’m giving!)
  • Custom Views
  • App Development Workflow
  • Integrating Metal Shaders with SceneKit
  • Xcode Tips & Tricks
  • Advanced Unidirectional Architecture
  • Embracing the Different
  • Lessons from the App Store

…and a party every night…

…all in a great venue:

Want to find out more? Visit RWDevCon.com!

{ 0 comments }

I’m presenting the ARKit workshop at RWDevCon 2018!

by Joey deVilla on August 14, 2017

I’m a confirmed speaker at RWDevCon 2018, which takes place Thursday, April 5th through Saturday, April 7th, 2018 at the Westin Alexandria, just outside Washington, DC!

I’ll be doing a couple of sessions, one of which is a half-day workshop on one of the hottest new technologies that’ll come out with iOS 11: ARKit, the augmented reality framework for iPhone and iPad.

If you’re wondering what’s possible with ARKit, check out the futuristic battle scene on a table from the demo by Wingnut AR at the WWDC 2017 keynote:

If you want to see what indie developers have been able to do with beta versions of ARKit, check out this compilation:

I’m not yet at liberty to discuss exactly what I’ll be presenting, but I can say this: it will be mind-blowingly good, and you won’t want to miss it.

There will also be workshops on:

  • Machine Learning with CoreML and Vision, with Patrick Kwete and Audrey Tam
  • Practical Instruments, with Luke Parham
  • Swift Algorithms, with Kelvin Lau and Vincent Ngo

You can find out more about the RWDevCon workshops in this article.

If you want to get in on some of this development action, follow this blog, and go register for RWDevCon 2018!

Early bird conference registration is $899, but if you really want to dive deep into AR and catch my workshop, early bird conference + workshops registration is $1,399.

RWDevCon is a conference where all the sessions are developer tutorials. It’s organized by the fine people at:

RWDevCon is a smaller conference with a few hundred attendees, but those attendees are part of the dedicated, tightly-knit community that frequents RayWenderlich.com. The focus on tutorials means that if you’re a developer looking to boost your iOS development skills, you’ll get a lot of bang for your conference buck:

The size of the conference, coupled with the nature of the community, means that you won’t just be another face in the crowd, and you’ll make friends and connections at this conference — those of you who were at the early RailsConf conferences in Chicago and Portland, or the Toronto conference RubyFringe and FutureRuby, or the GIANT conferences will know what I’m talking about.

I’m also told that they throw a good party:

In addition to tutorials, RWDevCon features a number of “inspiration talks”. Here’s one from RWDevCon 2017 — I’m an Idiot, by Rich Turton, in which he talks about how to leverage your inner idiot to make you a better coder, writer and communicator:

I’m looking forward to this event!

{ 0 comments }

I’d like to be the tech editor for the ARKit book!

by Joey deVilla on July 20, 2017

Hey, Chris! I’m Joey deVilla, part of RayWenderlich.com’s Android tutorial-writing team, and I’d like to be the tech editor for the upcoming ARKit book and lead the ARKit workshop and tutorial session at RWDevCon 2018.

Augmented reality experience

I wrote the recently-posted article Augmented Reality in Android with Google’s Face API, and in the process, I became quite familiar with Android AR. I took the basic application from Google’s Face API page and made it more fun and in the spirit of RayWenderlich.com…

…and even created some diagrams that Google didn’t provide in their documentation in order to help readers better understand the code:

Click the graphic to see it at full size.

Technical reviewer experience

I was the technical reviewer for this book, Packt Publishing’s Shopify Application Development:

Here’s my “about” page in the book:

I reviewed the code in the book and went a step further than the author did by testing it out not just on Mac and Linux, but on Windows as well. I provided some suggestions to make the book more useful for Windows users, which were then incorporated into it.

Programming tutorial experience

I started my personal tech blog, Global Nerdy, in August 2006, and since then have written over 3,000 posts which have acquired over 8.6 million pageviews. Here’s a small sampling of what I’ve written just for Swift:

If that’s not enough, here are some more articles:

As part of an “audition” for Pebble, they had me learn the API for their previous smartwatch, the inPulse, and write a developer tutorial for it. The end result is: The inPulse Magic 8-Ball: A Beginner’s Tutorial for Programming inPulse Smartwatch Apps.

You can also check out my GitHib account: https://github.com/AccordionGuy

Presentation experience

I was a developer evangelist at Microsoft from 2008 through 2011, where I helped organize TechDays Canada, a conference that took place in 8 cities where we’d take content from Microsoft’s big U.S. conferences and present them to Canadian offices. We’d either do the presentations ourselves, or train local developers in each city to give those presentations.

Here’s an article where I talk about the content for the 2009 edition of Techdays.

These days, I run Tampa iOS Meetup, the tutorial meetup for iOS developers in the Tampa Bay area. It gets great reviews from attendees (4.5 or 5 stars).

I also do presentations at Tampa-area Android and Xamarin meetups (that photo above is me at the most recent Xamarin Dev Days, where I gave a intro to Xamarin talk and demo).

I’ve also done a number of video tutorials, and not just for adults, either! Here’s an episode of Developer Jr., which was aimed at kids…

…and here’s a presentation mine at Ignite Tampa Bay 2015, where I gave a presentation in the Ignite format (20 slides only, and they auto-advance every 15 seconds), in which I make the case for “Florida Man”:

In conclusion…

I believe that I’m an excellent candidate for the position of tech editor for the ARKit book. If you’d like any further information or have any questions, please feel free to contact me at joey@joeydevilla.com.

{ Comments on this entry are closed }

 Losing my last job

As soon as I saw the look on my manager’s face on our unscheduled video chat, I knew what was happening. He’s only gotten through “I’ve got some…”, but I’d already ratiocinated the rest of his sentence: “…bad news: we have to let you go.”

I marked the date on my calendar: February 20th, 2017, a mere four and a half months since my first day on the job. The company had rejiggered their plans, looked at the budget, and decided that everyone on contract, including contract-to-hire people like myself, was being let go.

Because they’re good people, they would let me stay on to the end of my contract — early April 2017 — with a minimal work obligation. That gave me about 6 weeks of income, and I could spend most of that time looking for work.

I’m working with some advantages, I thought. A job search should take, what? 90, maybe 100 days on the outside for a guy like me.

As with many estimates made by programmers, it was a little optimistic.

The first steps I took

First, I notified my professional network.

I reached out in a number of ways: directly — either via email or some form of instant messaging — or through the standard social media channels (LinkedIn, Twitter, Facebook, and for a week, my blog. The blog thing became a little complicated, and I’ll explain in a few months). The important thing was to get the word out to all my professional contacts, running the gamut from close trusted friends to those people whose business cards I got at some social gathering.

I did this first because most jobs are found through networking. From my own personal history, every job and most of the consulting clients I’ve ever had were acquired through my personal network. Because of this, I treated it as my first, best step in my job search.

I then made sure that my professional documentation was up to date, most notably my LinkedIn profile and résumé.

Having a solid social network also meant that I’d have a bragging point that I could use in interviews, especially ones for jobs where I’d have some kind of marketing or communications responsibilities: a solid LinkedIn Social Selling Index of 79…

Many people in my network recommended me to prospective employers and clients by pointing them to my LinkedIn profile, as it’s an easy-to-find, detailed record of my work. I treat my LinkedIn profile as the template for my résumé:

For the most part, my résumé is simply my LinkedIn profile laid out like a traditional curriculum vitae and saved as a PDF document that I can mail to interested parties.

My Stack Overflow score puts me in the top 5% of contributors, so I decided to create a Stack Overflow developer story…

…and creating it led me to the happy discovery that I was also in the top 5% for their Python and Ruby topics, which is a nice thing to point out in technical interviews — most people who’ve interviewed me don’t have that kind of ranking in one programming language, never mind two.

Hint: Do not underestimate the power and reach of having a good network, and especially the power and reach those people in your network whom you don’t know all that well. Unlike the people you know well, who are more likely to see and hear the same things that you see and hear, your “weak ties” connect you to things that happen outside your own bubble and can lead you to opportunities that you might be otherwise unaware of. Stay connected to them! As you’ll find out later in this article, I found about the job I eventually took from someone I’ve never met in person.

WordPress job hunting trick #1: Turn the Quick Redirects plugin into your own personal URL-shortening service


If you have a WordPress blog and your own domain, you can use the Quick Page/Post Redirect plugin to turn your blog into your own personal URL-shortening service. I use it to point the easy-to-remember URL joeydevilla.com/resume to point to where my current-as-of-this-writing résumé lives: http://www.joeydevilla.com/wordpress/wp-content/uploads/2017/06/Resume-Joey-deVilla-June-2017.pdf.

Not only is the shorter URL easy to remember, but it’ll always be current. As I update my résumé, I can point the redirect to the updated version, so that when you go to  joeydevilla.com/resume, you know you’re going to the most up-to-date version.

I also use this trick to send prospective employers and clients to my app in the App Store — instead of saying “Go to the App Store and do a search for Joey deVilla, and that’s lead you to my Wine Crush app”, I say “Go to joeydevilla.com/WineCrushInTheAppStore”.

Hint: You’d be surprised how many people are impressed by the use of your own URL as a shortener. Even some techies who use WordPress regularly were surprised when I told them that I did it with a WordPress plugin. And finally, don’t underestimate the power of an easy-to-remember URL like [your-name-here].com/resume in a job search.

The Makers Hustle Harder hackathon

I made sure that I made an appearance at the GM Makers Hustle Harder hackathon, which took place at Tampa Hackerspace in February, a few days after I’d been served my notice. As a hackathon, it was a place where I could network with a lot of techies and show off my creativity and skill through programming.

It was also an opportunity to try out a new platform: GM’s in-car console system— called NGI, which is short for Next Generation Infotainment. I came up with an idea for an app: a referee for the car game classically known as “Chinese Fire Drill”, and it ended up looking like this:

Here’s how it worked:

  • Four people get in the car, close the doors, and someone starts the app.
  • When everyone’s ready, someone in the front presses the game’s start button.
  • If any of the doors are open when the start button is pressed, the players will be told to close all the doors first.
  • If all the doors are closed when the start button is pressed, the game begins. The app starts a timer.
  • Players exit the car, run around it once, return to their original seat, and close their doors.
  • The game ends when all four doors are closed, at which point the time it took them to complete the drill is displayed.

The app wasn’t pretty by any means, but that’s not what hackathons are about — they’re about working code in the time allotted. If you’d like to see the code, I’ve put it in a repo on my GitHub account.

With less than an hour’s effort, I had working code, an available vehicle, three other people to playtest the game with me, and two camera operators to record video of a test runs. We played the game twice, and we were giggling all the time.

The judges (pictured above) were greatly amused by my presentation and liked the app so much that they invented a new category of prize — Judges’ Fetish — just so they could award one to my app. I was an honor to be awarded, and it was yet another thing I could bring up in an interview to distinguish myself from other candidates.

Hint: If you can find a competition in your field — such as a hackathon if you work in software development, a design competition if you’re a designer, or a writing competition if your speciality is stringing words together into articles or magnum opuses — sign up! At the very least, you’ll meet other people in your field who may have heard of opportunities you haven’t, or might have connections to people you need to reach. You may also make new friends, learn something new, and if you’re very lucky and work really hard, walk away with a prize and a story to tell to friends and prospective employers and clients.

For more details, see my post My day at GM’s “Makers Hustle Harder” hackathon in Tampa.

WordPress job hunting trick #2: Use WordPress pages as custom job applications

Rather than fill out pre-formatted online job application forms or send the standard job application email, I started pointing prospective employers and clients to WordPress pages that I created specifically for them. The first one I made was for a company that I’ll simply refer to as “Delos” (as in Westworld), who were looking for a developer platform product manager.

They ended up saying “no”, but creating a page was still a worthwhile exercise, as it gave me a template on which I’d base many of my other custom job application pages.

Hint: People are pleasantly surprised when you create a page just for them. Very few people do this, and doing so will help you stand apart from the others who simply filled out a web form or sent an email. You can do this with any site under your control; if you have a WordPress blog, doing it as a page will save you a fair bit of time and effort.

Security issues and non-citizenship

In early March, an internet friend whom I’ve known for years contacted me with a great job opportunity. Things were going well — three great phone interviews and some really promising emails — until we hit a snag.

The company’s clients worked with sensitive data, and as a security measure, anyone working on their projects would have to be a U.S. citizen. I’m a Canadian citizen with a green card married to a U.S. citizen; while that’s the next best thing, it just wasn’t enough.

Hint: If you’re trying to land work in a country where you’re not a citizen, be aware of any restrictions on the kind of work you can do.

File for future consideration: teaching courses on LinkedIn Learning/Lynda.com

One of the first people from my network to reach out to me was Brian Jepson (pictured on the right), whom I met at the first O’Reilly Emerging Technology Conference, way back in 2002. In fact, that’s the one and only time we’ve ever seen each other in person.

He told me about what he was doing at Lynda.com, which is now part of LinkedIn, and what sorts of opportunities there were there. There are some interesting possibilities there, and I’m going to have to pick up that conversation with Brian at some point soon.

“Wine Crush”, re-skinning it, and using it as a foot in the door for other projects

Last year, I released Aspirations Winery’s Wine Crush in the App Store. It’s best described as “like that Candy game, but with wine!”. I made it as a promotional tool for friends of mine in Clearwater. If you have an iPhone or iPad, you can go here to download it (it’s free), or you can watch the video below to get a feel for what it’s like:

I’ve showed Wine Crush to a number of prospective clients, following it up with the question “Would you like to have a version with your own branding?” I even made prototypes for a couple of them so that they wouldn’t even have to imagine what such a thing would be like — they could see it:

This “Candy Crush-style game, but personalized for your business, with your branding” promotion got a few nibbles, and I think it’ll be part of my mobile app side hustle.

Part of the reason I wrote Wine Crush was so that I’d have an app to show to prospects and say “This is what I can do; let’s discuss what I can do for you. It paid off! The people at Aspirations Winery know a lot of people in the Clearwater area, and when a tourism official asked them if they knew someone who could help them build an app for tourists, they pointed that official to me. The official is currently reviewing a proposal that I submitted.

Hint: Use past projects as a template for projects that you can repurpose to create a unique proposal when looking for a job, or as a springboard for prospective client work.

“Han Solo”

A friend of mine, whom I’ll call “Chewbacca” (I’ll be using lots of sci-fi and fantasy names to obscure people’s and companies’ identities), referred me to a long-time friend whom I’ll call “Han Solo”. Han works at a major company on the west coast that was having yet another hiring spree.

We had a great conversation, but Han’s company was looking for people to work on-site, and they didn’t have any branches here in Tampa Bay. This would be the first of many times where my location would be the end of the conversation.

Geographically challenged

In case you didn’t know, the 4 most populated states in the U.S. at the time of writing are:

  1. California (39.1 million)
  2. Texas (27.5 million)
  3. Florida (20.3 million)
  4. New York (19.8 million)

Three out of four of these states are known for their opportunities in the field of technology, and I live in the one that isn’t, and within the state of Florida, the really big opportunities are in the Miami area, not the Tampa Bay area.

I spoke with a number of prospective employers — many of whom you’ve heard — and they asked if I was able to move to the San Francisco Bay Area, the Seattle area, Portland (Oregon, not Maine), or the New York City area. One took pity on me and said “Stuck in Florida, huh?”, but to their credit, followed it up with “Sorry, I didn’t mean to put it that way.”

As a state with a rapidly-growing population (we overtook New York a couple of years back to take the number 3 position), having all the goodies of being a vacation destination including great weather and lots of attractions, a low cost of living, a high tolerance for weirdness, and a decent number of retirees with money looking for things to invest in, Florida has the potential to become a tech powerhouse. I’ve decided to make it my mission to help this come about.

But first, I needed to land some work!

Dali Museum ideation session

The Dali Museum in St. Petersburg is more than just a place to see the largest collection of Dali’s works outside of Spain; it’s also home to the Innovation Labs, where organizations can participate in workshops to help them come up with solutions to tricky problems, brainstorm new approaches, and come up with creative ways to make themselves better.

Innovation Labs co-founder Nathan Schwagler put out a call for creative minds on Facebook, which I saw and responded to. He needed inventive locals who could be available for two weekdays during business hours to participate in an “ideation workshop” for a local business that was looking for ways to better serve its clientele, be a better workplace, and improve its business. The workshop would even pay participants a couple hundred dollars a day, feed them breakfast and lunch prepared by the museum’s café (which is quite good), and give them free admission to the exhibits. What wasn’t to love about this deal?

The workshop gave me a chance to hang out for a couple of days in beautiful surroundings with local creatives and businesspeople whose schedules were flexible enough to let them participate in the exercise. It also got me the opportunity to see (and even hold, with gloves) Dali artifacts that the public normally doesn’t get access to, including the palette in the photo above. I also got to have extended conversations with a couple of key people in the Tampa Bay business and tech scene, including entrepreneur Mark Sharpe and coffee shop owner and all-round impresario Roberto Torres.

Hint: Look for local events where there’s a call for people with expertise or creativity in your field. Opportunities and connections abound in these sorts of get-togethers.

“Rey”

“Rey”, who works in the RFID industry — where I worked in my previous job — found out that I was available, and we had a conversation about job opportunities. Alas, Rey’s firm was looking for people on-site, and they weren’t in Tampa. Here’s the page I made for Rey.

RayWenderlich.com

And from Rey, we go to Ray — as in Ray Wenderlich, who’s behind the go-to tutorial site for iPhone, iPad, Apple TV, and Apple Watch developers, from beginners to grizzled veterans.

I’d already been in conversation with the people at RayWenderlich.com about becoming one of their writers. In January, they put out a call for a co-maintainer for their open source project, Swift Algorithm Club. I applied for the position (you can see the text of the email I sent them here), but didn’t get it. However, as one of the top four applicants, they offered me the chance to submit an “audition” for some part of their site. They were expanding into Android tutorials, and saw that out of 1500+ tutorials at the time, they had barely a couple dozen covering Android. It would be a great place to shine, and also a great way to polish my Android skills.

For my “audition”, I wrote an app and matching tutorial, which eventually became this article…

…and I’m now part of the RayWenderlich.com writing team (I wrote a more detailed article about it here). They pay on a per-article basis, and seeing as they’re looking to fatten their collection of Android articles, I aim to make some “walking around money” and get some Android programming street cred at the same time.

Hint: Find places in your field that are similar to RayWenderlich.com for my field, and see how you can contribute. I’ve gotten a surprising amount of mileage out of my application to become a contributor to that site beyond becoming a writer there: I also landed a couple of speaking gigs, a couple of weeks of contract work, and a bevy of new contacts.

“Xander”

Here’s another custom page I made for another prospective employer, “Xander”, whom I was referred to by my friend, “Buffy”.

In case you’re wondering, these custom pages are the actual custom pages I made for prospective employers and clients — I’ve simply changed the names on most of them to preserve their confidentiality.

Job Club

In order to qualify for “re-employment benefits” in the state of Florida, you have to either:

  • submit proof of 5 job applications per week, or
  • attend a “job club” at a local employment assistance center.

Some weeks, I found it took less time to attend the job club sessions, so that’s what I did. In Tampa, we’re fortunate to have Career Source Tampa Bay running these events, and they do a fantastic job of organizing them, as well as actually getting to know the people who use their services. If you’re in the Tampa Bay area and are looking for work, make sure you contact them.

One of the first things they do at these sessions is to have everyone in attendance stand up and introduce themselves, “elevator pitch”-style. It’s a great exercise for people looking for work (and for someone like me, something I can do on autopilot), and it also reveals a great truth:

Many unemployed people aren’t unemployed because they’re lazy or untalented.

Through the introductions, I found that my job club peers were engineers, programmers, executives, scientists, nurses, teachers, mechanics, technicians, pilots, soldiers, and other people that don’t get conjured up by the popular imagination when the topic of unemployed people comes up. As everyone introduced themselves, I thought “What are these people doing here? In a world that made sense, they’d all be working.”

Naturally, I struck up conversations with several of my fellow job club members and fattened up my contacts list in the process. I guarantee that this will pay off in the future, and possibly even sooner than you might suspect.

Hint: Even if you’re not looking for work, make sure your have your own personal “elevator pitch”. There’s a lot of value in people knowing who you are and what you have to offer — and remembering it.

Each job club meeting has a guest speaker, and sometimes that speaker’s quite inspiring. One such speaker was Joanne Sullivan (pictured at the front of the room, above) who’s now Director of Community Relations for University of South Florida Health. Until recently, she was Associate VP Development for the University of Tampa until she was reorganized out the door, which was a mistake on University of Tampa’s part, and a challenge to which she rose and overcame. I took notes as she presented, and I should post them online soon. You could learn a lot from her, including how to conduct a job search, and she’s a grand master at networking, having  forgotten more about it that I’ll ever learn.

Other job club sessions felt like a less productive use as my time, particularly the one whose guest speaker proudly announced that they had been trained by the people behind “The Secret”, the claptrap philosophy/money-making scam that says your thoughts control the universe and that there’s a “law of attraction” that requires you to merely visualize what you want and you’ll have it. That speaker had us do a number of new-agey exercises, including drawing our name in a way that represented our true selves in less than a minute (the result of which is pictured above). At the very least, it was a chance to break out the set of colored markers that I keep in my backback for drawing diagrams for clients.

“Hufflepuff”

A number of announcements for community manager positions where remote work was acceptable started popping up, and the people in my network brought them to my attention. First came one for a fintech organization that I’ll call “Hufflepuff”, so I created a job application page just for the contact person, “Hermione”, which focused on my technical communications skills.

Someone else in my network hooked me up with a financial organization that I’ll call “Starfleet”. I ended up creating pages for three different people within that organization: “Riker”, “Data”, and “Jean-Luc”.

I even included a very, very simple “Super Mario”-style game within the page to show them I could create interactive games, simulations, and explanatory tools that could explain tricky concepts in a fun way, and that their audience wouldn’t forget:

Hint: If you can find a memorable way to use your skills to show what you can do for a prospective employer or client, use it.

Tampa Bay WaVE

Tampa Bay WaVE is a startup incubator located in downtown Tampa, and like a true tech evangelist, I have a contact there: one of their entrepreneurs-in-residence, Kenneth Young. He went to Silicon Valley in the ’80s to make his fortune in the RAM business (back when 640K would’ve been way more than anyone needed) and is now back in Tampa, hooking up nerds with rich people. He needed help with a couple of projects — a few hours of work at most — and I was only too glad to provide that help in exchange for a favor to be named later.

Hint: Do favors for people. They’ll pay off.

The app audition

Mike Traverso, one of the people behind the Tampa Bay Google Developer Group Meetups hooked me up with a company that decided to give me an app “audition”. If you’re a regular reader of this blog or follow me on social media, you already know this story. If not, here it is:

We’re ninety minutes into a one-hour interview when the CTO says “We like your breadth of experience. Now we’d like to test your depth. If we gave you a quick programming assignment, which would you prefer — writing an iOS app, or an Android app? You should go with the one you’re stronger in.”

I’m a much stronger iOS programmer than an Android one. The smart move would’ve been to answer “iOS,” and be done with it.

Instead, I replied “Yes, but you want a guy who can lead a team of both iOS and Android developers. You really should give me both.

The CTO raised an eyebrow, gave me a look, made a note on his pad, and said “Hmmm…I think I will.”

This is either a “total baller move” (to borrow a turn of phrase the kids are using these day), or the end of that job prospect. But for the job that they’re trying to fill, taking on that challenge was the right thing to do.

I decided to be like Han:

Click the photo to see the bad-assness at full size.

I submitted the iOS version of the app, and I created a video of the app in action:

I’m still waiting to hear back from them, but I’m working on the Android version in my spare time. Even if they never get back to me, the practice will be useful, and I can probably repurpose that code for another app.

Hint: Be like Han.

“Hogwarts”

During the dot-com bubble, I was a developer and developer relations guy at OpenCola, a startup founded by Cory Doctorow (whom you’ve probably heard of) and Grad Conn (whom you might not have heard of, but should). Grad is many things: sci-fi enthusiast, Disney fan, blogger, DeLorean owner, and more relevantly to my job search, General Manager for Microsoft U.S.’s Central Marketing Organization and advisor to many startups and rising businesses.

He was in the area, visiting Disney World. I drove to Orlando to meet him for a drink at the bar at the Swan, where we talked and I showed him some of the apps I was working on. We met for a grand total of 90 minutes, and driving there and back took a total of 180 minutes. Was it worth it? Damn right it was!

Grad hooked me up with a couple of businesses, and I created pages specifically for each of them, with a special section showing how I worked with Grad. Here’s one for “Albus”, who was a higher-up at a company I’ll call “Hogwarts”:

I think that at least one of these introductions will pay off.

George Brown College NFC project

My friend Maria connected me with a couple of her friends at George Brown College in Toronto who needed help writing software that would integrate an iPad with an NFC chip reader. Since there wasn’t time or money to get me an NFC reader to do development work on it, we ended up programming it with me dictating code over Google Hangouts. It was tricky, but in three hours, we got it working. I made some “take Anitra out for dinner on our anniversary” money with this gig, and got some Flomio NFC sensor programming practice too!

Appearing (and presenting) at local meetups

One of the best things you can do during a job search is to get out there among peers in your industry. In my case, I attended many tech meetups, and where possible, presented at them. It’s a little bit easier for me, as I’m the organizer of Tampa iOS Meetup.

Soon after being told I was being let go, I attended a session of the Tampa Bay Android Developers Group, which I parleyed into two presentations that I would give to Android developers — Augmented Reality in Android (which would eventually become my debut article at RayWenderlich.com) and an introduction to Kotlin for the local Google I/O 2017 Extended meetup.

As if that weren’t enough, I also did the opening presentation at Xamarin Dev Days 2017.

I also made sure I attended Tampa Bay Tech’s Powered Up Technology Festival at the Mahaffey Theater, where I got to chat with a number of people, including Nick, Sourcetoad’s Director of Projects and Partner…

…the Tampa Bay AI meetup…

…the Suncoast iOS Meetup where Juan Catalan gave a very-relevant-to-me presentation on crushing the iOS technical interview…

…the Millennial Impact Forum, for which I took the most comprehensive notes out there and where I made my first contact with Tampa Bay Lightning owner and Tampa real estate developer and general city revitalizer Jeff Vinik(I have yet to convince him that letting me play the National Anthem at the start of a Lightning game is an awesome idea):

…and the regular “salon” style gathering known as Café con Tampa, where the area’s movers, shakers, and idea-makers discuss ideas to make Tampa Bay a better place to live, work and play:

You might want to check out my notes from these Café con Tampa presentations:

Hint: At this point, do I even have to say it? Get out there, be seen, be heard, and talk to people!

Microsoft

Another high-up Microsoft I know, Jeff Sandquist, General Manager for Azure Platform Evangelism Experiences, reached out to me, so I had a great phone call with him and created this page just for him.

Big Fish

Through chatting with him at the Tampa Bay Android Developers Group, Scott Thisse introduced me to Sara MacQueen, CEO of Big Fish, a local mobile development shop. I sent Sara this custom page, ended up helping her team out with a project, and made some decent money too!

Sourcetoad

And finally, there’s where I decided to land: Sourcetoad, a place that’s doing some interesting things in web, mobile, and IoT, right here in Tampa (and biking distance from where I live), in an office where I’ll be working with other people face-to-face (for an extrovert like me, that’s a bonus, and hey, after 8 years of working from home, I’m due for a change).

My internet friend Cameron Barrett — whom I know through a mutual acquaintance, Ms. Fipi Lele — told me about the position at Sourcetoad, after which I created this page for and sent to CEO Greg Ross-Munro:

I also repurposed a “Frogger”-style game that I’d been working on and incorporated the Sourcetoad logo into it:

In the end, I went with Sourcetoad because they offered:

  • the chance to work on interesting projects and use my experience to help a company grow to the next level,
  • the opportunity to have local impact and help build up Tampa Bay’s tech and business scene,
  • a very short commute, and
  • the bonus of working with smart people — and face-to-face on a daily basis, which I’ve missed.

This article’s gotta to end sometime, right?

I could go on — there’s some more that I did during my job search — but I think you get the idea (and probably have better things to do). I worked all sorts of angles, got creative, and went the extra mile. And even with all this and a pretty good résumé, web presence, and social network backing me up, it still took five months between getting my notice and signing a new contract. I had worked on the job search a little longer than at the job it was to replace.

What you should take away from this is that you shouldn’t feel discouraged if your job search is taking longer that you’d hoped. That’s the nature of the working world these days, and you should do what you can to set yourself apart, maximize your network, and keep yourself sane during the process.

If your search was like most, you will experience these ups and downs:

Click the graph to see it at full size.

If you have any questions or comments, or would like me to elaborate on some aspect of my search, let me know in the comments! I’d be happy to expand on them if you think it’ll be helpful.

And finally…

Even if you’re taking a coldly pragmatic, Machiavellian approach to your job search, helping others in their job search is a good thing to do. You’ll do better in a healthy job ecosystem where people help each other out with a sense of community and cooperation.

And if you need my help, drop me a line.

{ 10 comments }

Hello, Albus!

by Joey deVilla on May 11, 2017

Hello, Albus! I thought I’d expand on the introduction that Grad gave and provide you with a little more information about me. I’d love to hear about what you need for Hogwarts, which Grad has spoken about in glowing terms, and look forward to the opportunity to chat.

What I can do

I’m a full-stack developer with PHP, SQL, and C experience (I even have a GitHub repo for a C project with a matching smartwatch tutorial), and I’m comfortable with programming beyond the desktop and the web, having done development on PalmPilot, iOS, Android, Windows Phone, Raspberry Pi, and even GM’s new in-car consoles. I’ve worked on various platforms in various languages, from CD-ROM projects built using Macromedia Director to desktop applications in Visual Basic and Borland C++Builder to web applications in PHP, Python, Ruby, and C# to mobile applications in NSBasic, C#, Objective-C, Swift, and Java.

As a consultant, I have successfully delivered all manner of projects to various clients, from completed applications to fully-designed implementation plans for major technology projects, including migrating employees at Canada’s largest telco from corporate-liable mobile devices to individual-liable ones, or overseeing the development of a survey site for IBM customers who spend more than $5 million on telecommunications annually.

Much of my career has been spent as a technology evangelist. I know how to talk to (and more importantly, listen to) developers, technology decision-makers, and customers and help them understand and make the best use of the tools, technologies, and platforms that I evangelized. I’ve done presentations, written white papers, articles, and blog entries, produced videos and podcasts, and even done that thing that developers hate most (but which I strangely enjoy): writing documentation.

And finally, as a rock and roll accordion player, I can bring the noise to any event, from a house party to SxSW Interactive to a major league baseball stadium — and hey, you never know when you’ll need that kind of musical expertise!

My history working with Grad

Grad and co-founder Cory address the crowd at the Series A funding party in Cory’s warehouse loft, which may have been the least expensive Series A party of the dot-com era.

I know Grad from my time at OpenCola, the dot-com-era startup that grew out of the IT department of ConnAd, Grad’s advertising agency.

As ConnAd’s work for their clients became more sophisticated, they found that they needed smart document searching and sharing technology that didn’t exist in the 56K modem/Napster era. Grad and company initially worked with simple hacks and crude scripts, and as they did so, it became increasingly clear to them that what they needed was a proper application to do what they wanted. What also became clear to them was that as valuable as such an application would be for ConnAd’s uses, it would be even more valuable as a general application for all sorts of businesses. That’s when they decided to create a company within a company, and when they started hiring developers — one of whom was me.

Grad soon found out that one of my talents was diving into code and technical specs and then creating materials that could explain them not only to my fellow programmers, but to decision-makers, executives, and prospective customers. Here are actual examples of my hand-drawn-and-lettered documentation posters that hung in the office and explained the GNUtella protocol, which was used by a number of peer-to-peer clients from that era:

If you ever need artisanal, hand-crafted documentation that distills esoteric tech information into useful, comprehensible notes, I’m your guy.

Thanks to my ability to talk to developers and non-developers, and gather and then share technical knowledge, OpenCola sent me to LinuxWorld Expo NYC in February 2000. I brought my accordion to the conference, which became a great conversation-started, and allowed me to break the ice with people who’d normally be a little harder to access including this guy:

I think he had an open source project of some note.

While hanging out with the Slashdot guys in their booth, a wandering TV news camera passed by the aisle. I leapt in front of it and started playing my accordion, and I parleyed that into an interview. The interview made it into the news and the OpenCola directors saw the news piece. When I came back to the office, Grad told me “You’re our director of developer relations now.”

A month later, when it was time to approach venture capitalists to fund the development of our application, we needed more than just charts and hand-waving, but some kind of working demo. I volunteered for the task, and at the end of a 48-hour period that started with gathering the initial spec and ended with deployment to our demo laptops, we had something that we could show — to three VCs in a single day.

In addition to accompanying Grad and performing the demos, I was also in regular touch with a friend with business development expertise throughout the day, getting specific advice for each VC. I later introduced Grad to the friend, and he was invited to join OpenCola soon afterward.

I’ll tell the rest of my OpenCola story with the timeline below:

My recent work experience

Until recently, I was the contract-to-hire Technology Evangelist for Smartrac, a Dutch-owned company pivoting from a purely hardware company that manufactured RFID tags and inlays (if you have a passport with an RFID tag embedded in it, the odds are good that Smartrac was behind it) to an IoT company combining RFID technology and cloud applications to build solutions to connect real-world objects to their digital representations in databases and software.

I would’ve converted to a full-time employee on Monday, April 3rd. That all changed at Smartrac’s annual general meeting in Milan, when the decision was made to cut costs by canceling all contracts, including those for contract-to-hire employees. (I think they’d have saved more money by canceling their many pricey business junkets, such as expensive annual general meetings in Milan.)

Still, I’m grateful to Smartrac for the adventure and opportunities that come from working in the international IoT space, which included:

  • a requirements-gathering trip to London to meet with the retail security systems specialists at Catalyst at the offices of fashion supply chain specialists LF Europe to gather requirements for an NFC enablement system for high-end fashion goods,
  • presenting a new IoT solution for factories at the National Retail Federation’s flagship conference in New York,
  • introducing Smartrac’s CEO, Christian Uhl to my friend Hampton Catlin, new technology director for Rent the Runway, in the hope of finding ways that Smartrac and Rent the Runway could work together.

I also wrote API tutorials, built demo applications, and scripted API demo videos, and met with major clients and partner organizations in the fashion and health industries to discuss their requirements.

A video that I wrote, produced, narrated, and edited on behalf of GSG for IBM’s NICO program.

At GSG, I worked closely with IBM’s NICO (Network Infrastructure Cost Optimization) team to build NICO Quick Assess, a custom online questionnaire (they didn’t want to use “canned” solutions such as SurveyMonkey for security reasons) that served as an initial enterprise telecom audit:

It was designed for an audience of finance and technology decision-makers at enterprises who spent at least $5 million/year on telecommunications and networking. Working with telecom auditors and IBM executives, I designed the questionnaire and oversaw its implementation.

As the CTO of Comprehensive Technology Solutions, I oversaw the development of web-based and mobile software, including a web app that helps medium- to large-sized enterprises move their employees from corporate-liable mobile devices to individual-liable ones, as well as an app that runs diagnostic checks on iOS and Android smartphones.

What I’ve been up to

I won the “Judges’ Fetish” prize at GM’s Makers Hustle Harder hackathon at Tampa Hackerspace. GM is holding hackathons in three cities this year to promote their new Next Generation Infotainment (NGI) API for their in-car dashboard consoles. The API gives developers unprecedented access to nearly 400 data points (speed, door status, fuel level, lateral acceleration, and so much more), the audio playback system, and navigation. Developers write apps for the platform using the HTML5/CSS/JavaScript trio and the NGI SDK, which includes an emulator. At the hackathon, developers had the chance to install their apps on actual cars’ consoles to try out their apps in real life.

The 'Fitness Fire Drill' app, shown running in GM's in-car console.

I contributed to one serious app (WeatherEye, which takes the car’s current speed and heading and displays the weather conditions 10 miles ahead) and put together a not-so-serious serious app (Shotgun, which determines who of a number of passengers gets to ride shotgun), but my winning app was one I threw together at the last minute: Fitness Fire Drill. It referees the car game classically known as “Chinese Fire Drill”. With all passengers in the car and all doors closed, the game begins when someone presses the start button. Players must exit the car and run around it once, return to their original seat, and close the door. When the last door is closed, the game ends, and the app reports the team’s time. The judges loved the app enough to invent a whole new category of app for the hackathon, simply as an excuse to award me a prize.

I wrote an Android app for an upcoming article at RayWenderlich.com, the premier site for iOS developers, which is expanding to cover Android and Unity development. My app demonstrates the use of Google’s Mobile Vision Face API to do face detection and adding cartoon features to people’s faces like Snapchat does. The code lives on my GitHub, under the name FaceSpotter.

I’ll also did a presentation at the Sun Coast Google Developers Group on the same topic on April 19th.

I’m currently working on a mapping app that takes Pegasus Transtech’s truck stop database and presents the user with an easy-to-read map of nearby truck stops, complete with information about each stop. It will be the basis for a tourist hotspot app that I’m pitching to the Clearwater Chamber of Commerce.

I spent a couple of days as a paid brainstormer for Nathan Schwagler, Founding Co-Director of the Innovation Labs at The Dali Museum. A good part of his work involves holding workshops to help client organizations overcome problems or chart new courses, and my local credentials as a techie, accordionist, and one of Tampa Bay’s most notorious Ignite presenters landed me this gig.

I continue to run Tampa iOS Meetup, a regular gathering for new iPhone, iPad, and Apple TV developers, where I’ve recently covered topics such as building your own “Angry Birds” game and writing “fortune cookie”-style apps. I’ve written a follow-up article that covered the material in the “fortune cookie” meetup and walks the reader through the process of building an app called Oblique Strategies, which suggests randomly-selected ways to break past a creative block. The project can be found on my GitHub account.

I’m in the process of revising an app that I posted to the App Store in July 2016: Aspirations Winery’s Wine Crush, a “Candy Crush”-style game with Aspirations Winery’s branding. I wrote it for my friends Bill and Robin Linville, the owners of Aspirations Winery. It’s available for free, so if you want to install it on an iOS device, use this App Store link. Alternately, you can watch the video above, which provides a quick overview of the app.

I’m helping one of the entrepreneurs-in-residence at Tampa Bay WaVE, a local startup incubator, with a web application for one of his mentees. They’re two non-technical founders who hired a development shop to build a web application, and the development shop high and dry. I’m helping them get their application to a presentable state.

I’ve been providing assistance to a couple of Interactive Media Management instructors at George Brown College in Toronto with a project running on an iPad equipped with a Flomio NFC chip reader. As web developers, they were unfamiliar with Xcode and Objective-C, and with a looming deadline and being based in Toronto, there wasn’t time to send me their spare Flomio reader to use for development as testing. We overcame these obstacles by pair programming over Google Hangouts, with me providing them with a crash course in iOS development and Xcode and sending them code snippets via chat. Their app now works, and it’ll be ready for their exhibition.

And finally, I’ve been playing the accordion in the strangest places. The video above was taken at Tampa’s Bay Area Renaissance Festival, where the band The Jackdaws invited me to join them on stage for Three Gypsies.

My online presence and work history

Global Nerdy is my technology and software development blog, and it’s been active since the summer of 2006. I’ve published over 3,200 articles in it, and the blog has almost 8.8 million pageviews over its lifetime. My personal blog — The Adventures of Accordion Guy in the 21st Century — which has been active since late 2001, has almost 27 million pageviews.

My resume is available online in a few different forms…

Stack Overflow logo

I have a Stack Overflow developer story that lists my work experiences and a number of accomplishments. You may also want to look at my Stack Overflow profile, where you’ll see that I was one of its earliest users (number 216). My reputation score of 6,550 puts me in the top 6%, and my answers have put me in the top 5% for Ruby and top 10% for Python.

I have a more corporate-looking work history on LinkedIn, where I post regularly. I have a 79/100 “Social Selling Index” score there, for what that’s worth.

Twitter icon.

If this sort of thing interests you, my Twitter account is @AccordionGuy, and I have 10.7K followers.

Resume icon

If you really want to go the traditional route, I have a detailed resume.

And finally…

Congratulations on making it this far!

I have a couple of videos to show. First, this one is my Sesame Street dream come true: a children’s show in which a puppet character and I show kids how to make the most of their technology. It was called Developer Jr., and Microsoft Canada sponsored the making of two episodes. In this one, “Junior” (the puppet) and I show kids how to make their own video games using Kodu:

I’d like to close with this video by New Relic, who make a software performance monitoring system. It features some of the software world’s brightest lights: Matz, Guido, Linus, DHH, Bill Joy, James Gosling, Sir Tim, Marc, Woz, Rasmus, The Gu, Sergey, Dries and finally Zuck. But guess whose picture they chose to use as “the face of the developer” at the 1:04 mark!

I have no relationship with New Relic — they somehow found that picture of me online and thought it captured the kind of developer that they wanted to feature.

{ Comments on this entry are closed }

Hello, Han!

by Joey deVilla on May 1, 2017

My name is Joey deVilla, and I’m a technology evangelist and developer by day, and rock and roll accordion-playing mobile developer by night. I’m looking for my next gig, and Chewbacca kindly pointed me in your direction. Thanks for your time!

Table of contents

Why I’m available for hire

Until recently, I was the contract-to-hire Technology Evangelist for Smartrac, a Dutch-owned company pivoting from a purely hardware company that manufactured RFID tags and inlays (if you have a passport with an RFID tag embedded in it, the odds are good that Smartrac was behind it) to an IoT company combining RFID technology and cloud applications to build solutions to connect real-world objects to their digital representations in databases and software.

I would’ve converted to a full-time employee on Monday, April 3rd. That all changed at Smartrac’s annual general meeting in Milan, when the decision was made to cut costs by canceling all contracts, including those for contract-to-hire employees. (I think they’d have saved more money by canceling their many pricey business junkets, such as expensive annual general meetings in Milan.)

Still, I’m grateful to Smartrac for the adventure and opportunities that come from working in the international IoT space, including a requirements-gathering trip to London, and presenting a new IoT solution for factories at the National Retail Federation’s flagship conference in New York.

Smartrac’s loss can be your lucky break!

I’m a full-stack developer with PHP, SQL, and C experience (I even have a GitHub repo for a C project with a matching smartwatch tutorial), and I’m comfortable with programming beyond the desktop and the web, having done development on PalmPilot, iOS, Android, Windows Phone, Raspberry Pi, and even GM’s new in-car consoles. I’ve worked on various platforms in various languages, from CD-ROM projects built using Macromedia Director to desktop applications in Visual Basic and Borland C++Builder to web applications in PHP, Python, Ruby, and C# to mobile applications in NSBasic, C#, Objective-C, Swift, and Java.

As a consultant, I have successfully delivered all manner of projects to various clients, from completed applications to fully-designed implementation plans for major technology projects, including migrating employees at Canada’s largest telco from corporate-liable mobile devices to individual-liable ones, or overseeing the development of a survey site for IBM customers who spend more than $5 million on telecommunications annually.

Much of my career has been spent as a technology evangelist. I know how to talk to (and more importantly, listen to) developers, technology decision-makers, and customers and help them understand and make the best use of the tools, technologies, and platforms that I evangelized. I’ve done presentations, written white papers, articles, and blog entries, produced videos and podcasts, and even done that thing that developers hate most (but which I strangely enjoy): writing documentation.

And finally, as a rock and roll accordion player, I can bring the noise to any event, from a house party to SxSW Interactive to a major league baseball stadium — and hey, you never know when you’ll need that kind of musical expertise!

Work history / online presence

My resume is available online in a few different forms…

Stack Overflow logo

I have a Stack Overflow developer story that lists my work experiences and a number of accomplishments. You may also want to look at my Stack Overflow profile, where you’ll see that I was one of its earliest users (number 216). My reputation score of 6,611 puts me in the top 6%, and my answers have put me in the top 5% for Ruby and top 10% for Python.

I have a more corporate-looking work history on LinkedIn, where I post regularly. I have a 78/100 “Social Selling Index” score there, for what that’s worth.

Resume icon

If you really want to go the traditional route, I have a detailed resume in PDF form.

GitHub's Octocat mascot, in various costumes.

You may also want to look at my GitHub account. Among the projects hosted there are:

Twitter icon.

If this sort of thing interests you, my Twitter account is @AccordionGuy, and I have 10.6K followers.

Plush mastodon.

And if you like to live on the open source bleeding edge of social networks, I’m on Mastodon! I’m @AccordionGuy on the mastodon.cloud server.

How technical am I? Well, in just the past few weeks…

The 'Fitness Fire Drill' app, shown running in GM's in-car console.

I won the “Judges’ Fetish” prize at GM’s Makers Hustle Harder hackathon at Tampa Hackerspace. GM is holding hackathons in three cities this year to promote their new Next Generation Infotainment (NGI) API for their in-car dashboard consoles. The API gives developers unprecedented access to nearly 400 data points (speed, door status, fuel level, lateral acceleration, and so much more), the audio playback system, and navigation. Developers write apps for the platform using the HTML5/CSS/JavaScript trio and the NGI SDK, which includes an emulator. At the hackathon, developers had the chance to install their apps on actual cars’ consoles to try out their apps in real life.

I contributed to one serious app (WeatherEye, which takes the car’s current speed and heading and displays the weather conditions 10 miles ahead) and put together a not-so-serious serious app (Shotgun, which determines who of a number of passengers gets to ride shotgun), but my winning app was one I threw together at the last minute: Fitness Fire Drill. It referees the car game classically known as “Chinese Fire Drill”. With all passengers in the car and all doors closed, the game begins when someone presses the start button. Players must exit the car and run around it once, return to their original seat, and close the door. When the last door is closed, the game ends, and the app reports the team’s time. The judges loved the app enough to invent a whole new category of app for the hackathon — “Judges’ Fetish” — simply as an excuse to award it a prize.

I wrote an Android app for an upcoming article at RayWenderlich.com, the premier site for iOS developers, which is expanding to cover Android and Unity development. My app demonstrates the use of Google’s Mobile Vision Face API to do face detection and adding cartoon features to people’s faces like Snapchat does. The code lives on my GitHub, under the name FaceSpotter.

I taught beginners how to write “fortune cookie”-style apps in Swift for the iPhone and iPad at Tampa iOS Meetup, a regular gathering of new iOS developers that I run. I followed it up with an article that covers the material in the meetup and walks the reader through the process of building a “fortune cookie’ app called Oblique Strategies, an app that suggests randomly-selected ways to break past a creative block. The project can be found on my GitHub account.

I’ve been providing assistance to a couple of Interactive Media Management instructors at George Brown College in Toronto with a project running on an iPad equipped with a Flomio NFC chip reader. As web developers, they were unfamiliar with Xcode and Objective-C, and with a looming deadline and being based in Toronto, there wasn’t time to send me their spare Flomio reader to use for development as testing. We overcame these obstacles by pair programming over Google Hangouts, with me providing them with a crash course in iOS development and Xcode and sending them code snippets via chat. Their app now works, and it’ll be ready for their exhibition.

Smart Cosmos logo.

I have continued with my work writing a tutorial for the Smart Cosmos RFID/real-world object virtualization API, using code examples in Ruby and PHP and Postman as a container.

Recent work experience

In my most recent role as Smartrac’s Technology Evangelist, I wrote API tutorials and scripted API demo videos, met with major clients and partner organizations to discuss their requirements, and performed demonstrations of the company’s integrated RFID hardware/cloud software platform at the 2017 National Retail Federation “Big Show” conference in New York.

A video that I wrote, produced, narrated, and edited on behalf of GSG for IBM’s NICO program.

At GSG, I worked closely with IBM’s NICO (Network Infrastructure Cost Optimization) team to build NICO Quick Assess, a custom online questionnaire (they didn’t want to use “canned” solutions such as SurveyMonkey for security reasons) that served as an initial enterprise telecom audit:

It was designed for an audience of finance and technology decision-makers at enterprises who spent at least $5 million/year on telecommunications and networking. Working with telecom auditors and IBM executives, I designed the questionnaire and oversaw its implementation.

As the CTO of Comprehensive Technology Solutions, I oversaw the development of web-based and mobile software, including a web app that helps medium- to large-sized enterprises move their employees from corporate-liable mobile devices to individual-liable ones, as well as an app that runs diagnostic checks on iOS and Android smartphones.

Technical writing

Global Nerdy is my technology and software development blog, and it’s been active since the summer of 2006. I’ve published over 3,200 articles in it, and the blog has over 8.6 million pageviews over its lifetime.

The name “Global Nerdy” came from “The Duke of URL”, an application I wrote to demonstrate Tucows’ “Namespinner” API, which provides a list of available domain names based on keywords that you provide it. You can see this API in action when you visit their domain name site, Hover.

Here’s a sampling of articles on Global Nerdy:

An in-depth look at one of my software projects: Wine Crush

This is a rather long section. You may want to get a beverage before reading it!

The projects that I’ve done with employers are covered under non-disclosure agreements, so I’ve chosen to discuss one that I did on my own: Aspirations Winery’s Wine Crush, a “Candy Crush”-style game with Aspirations Winery’s branding.

Wine Crush is an iPhone/iPad app that I posted to the App Store in July 2016. It’s available for free, so if you want to install it on an iOS device, use this App Store link. Alternately, you can watch this video, which provides a quick overview of the app:

I approached Bill and Robin Linville, Aspirations Winery’s owners, with a proposal to create an app for them at no cost to them other than the occasional free bottle of their wine. They would get something most small wineries don’t have — their own branded promotional app — and in return, I could add an app to my portfolio.

Building on a game engine

The goal of the app was to promote Aspirations Winery with a simple, addictive, enjoyable mobile game. The game didn’t have to be original; this was advertising that just happened to be a game rather than a game that just happened to contain advertising.

With this goal in mind, I decided that rather than build a game from scratch, I would start with an existing game engine, and then build upon it. I decided to base the game on “Cookie Crunch”, a basic “Candy Crush” game engine presented in a series of tutorial articles on the mobile developer site RayWenderlich.com. Code posted on that site is freely available for anyone to use in their own projects, and using their engine as a basis for my app would easily save dozens of hours of development time.

If you follow the steps in the tutorial article series, you will end with a basic “Candy Crush” game that looks like this:

The game has a single level; once you clear it, you play the same level again. The code has some “scaffolding” for adding different levels to the game, but implementing them was left as an exercise for the reader.

My plan was to take the basic game from the tutorial and expand upon it to include the following:

  • A title screen, which would present the following options to the user:
    • Start a new game.
    • View instructions on how to play the game. This would require adding a new “screen” to the game, which would display the instructions.
    • Visit Aspirations Winery’s site. This would be done by opening Safari and pointing it at Aspirations’ site.
  • Multiple levels. In the basic game, once the user cleared a level, s/he would be presented with the same level again. The finished game should feature a few dozen different levels, each one slightly more difficult than the last. The background image should be different for each level.
  • Gameplay features:
    • A hint button. When I showed the basic game to Aspirations’ owners, they requested a “hint” button similar to the ones that appear in “Candy Crush”-style games. When a player is stuck and can’t see any possible moves, s/he could press the button and be shown one of those moves.
    • “No possible moves” detection. There are times when no moves will be available to the player, especially on the more difficult levels. The game announce this to the player. If the player has at least two moves remaining, the game should tell him/her to use the “shuffle” button. If the player has one or fewer moves left, the game should end.
    • A target score display. This should display the number of points remaining for the player to reach the next level.
    • A “quit” button. This should cancel the game and return the player to the main screen.
  • Branding: The basic game features cookie-themed graphics and sounds. The final game should feature wine-themed graphics and sounds, as well as Aspirations Winery’s branding.

Phase 1: Language upgrade and some new graphics

Swift 1 to Swift 2.

At the time I started working on the app, the game engine in the tutorial was written in Swift 1, and the current version of Swift at the time was 2.0. Version 2.0 introduced significant changes to Swift’s syntax, particularly with error handling. I decided that my first step should be to port the game engine code from Swift 2, partly as an exercise in learning the new syntax, and partly in order to avoid having to pay off technical debt at a later date.

Xcode provided a Swift 1 to Swift 2 automated migration tool, but some of the changes in syntax were large enough that an automated tool couldn’t perform the migration. I first used the automated tool to migrate the code, which still left about two dozen parts of the code that needed to be migrated manually. I marked those parts with // TODO: comments, which makes them very easy to find within Xcode. I then manually migrated them one by one.

The migration process was relatively straightforward; I completed it and tested my changes over two evenings.

With the basic game upgraded to Swift 2.0, it was time to present a basic version to the client. I made some new wine-themed icons and an impressionist background used them to replace the original game’s cookie-themed icons and background. The game now looked like this:

Screenshot of an early version of Wine Crush.

At this point, it was still a single-screen game with just one level, but it was now something that the client could try out on their iOS devices.

Making test versions available to the client

Screenshot of instructions on how to install the beta version of Wine Crush.

There are only a couple of ways for beta testers to install test versions on their iOS devices. I thought about using the TestFlight beta testing service, but the process at the time was so convoluted and confusing to the client that I opted for the lower-tech method of sending them the application package, and having them use iTunes to install the package. I provided them with a set of easy-to-follow instructions for installing beta test versions, which you can download here.

New graphics

Aspirations Winery wine labels.

With a test version to play with, the client had a much better idea of what the final product could be like. They provided me with four of their labels, which they wanted to use a backgrounds for the game. We decided that as the player progressed from level to level, the backgrounds would cycle in round-robin fashion:

  • For level 1, wine label 1 (Swamp Juice) would be used as the background
  • For level 2, wine label 2 (Tropical Paradise)…
  • For level 3, wine label 3 (Catchin’ Some Rays)…
  • For level 4, wine label 4 (Crashing Waves)…
  • For level 5, we’d cycle back to the beginning and use wine label 1 (Swamp Juice) as the background.

They also provided me with some icons to replace the ones I used in the initial version.

Speaker icon.

In the basic game, a “crunch” sound is played when the player matches three or more items, which fit with its cookie theme. Since Wine Crush is wine-themed, I replaced that sound effect with the “clink” of a wine glass.

At this point, the game still had a single level, so I simply changed the background graphic to wine label 1 (Swamp Juice), replaced the game icons with the ones that the client provided, and then sent them a new version to try out.

Now comes the hard part

Any changes that I’d made to the basic game engine were superficial or relatively simple, what with changing media and updating programming language syntax. From this point forward, many of the changes I would make would require reverse-engineering the code in order to determine how to add the gameplay features that I wanted to implement.

Before adding any features, I reviewed the existing code, added comments where appropriate, and took some quick notes on what each class did. Here’s a sample:

Scans of Joey deVilla’s notes on the structure and organization of the Cookie Crunch app.

Click the image to see it at full size.

Adding gameplay features

I decided to add gameplay features starting with what I thought would be the hardest to implement, so I began with changing the game to support multiple levels. This was the first of many times where having done reverse-engineering before making any serious changes to the code paid off. Luckily for me, the game engine was written so that it would support multiple levels, but their implementation was left as an exercise for the reader.

The next task was to implement the hint button. Once again, my initial review and diagramming of the code’s structure made this relatively easy — game state is stored in the Level class, which represents the current state of the game board. It maintains an instance variable called possibleSwaps, which in turn is a set of instances of the Swap class, each of which represents a valid move.

Once I’d determined how to get the set of valid moves, it was a simple matter adding a new method, hint() to the Level class. It returns the first item in possibleSwaps if one existed, or nil if possibleSwaps was empty.

Now that I could identify a valid move, the next step was to find a way to show it to the user without affecting the game state. Once again, having done the initial reverse-engineering step paid off: it was clear to me that the GameScene class, which controlled the visual representation of the game state, was the best place to look. A quick review of GameScene’s methods revealed that it had a method for animating an attempt to make an invalid move: it swaps two game pieces, but then returns them back to their original positions. This animation was perfect for giving the user a hint.

I then had the minimum information required to wire up a hint button. Once I had the hint button working, I added a couple of additional related features:

  • A score penalty of 10 points for each use of the hint button
  • A boolean to track if the hint button has been used this turn (the score penalty should only count once per turn)

My initial reverse-engineering review also paid off for building a function that detects if the player has no valid moves. Once again, the place to look was the Level class, which has the swapsCount() method, which returns the number of valid moves available to the player. I harnessed this method to create a feature that tells the player that there are no valid moves available and if the player has enough moves remaining, tells the player to use the shuffle button to randomly refill the board.

Committing early, committing often

Diagram showing GitHub's GitHub workflow.

One of the key factors in my successfully finishing the project was consistent, constant use of version control, namely git. This was a particularly experimentation-heavy project, and there were many times where I would end up in a “blind alley” and need to revert back to a previous working version.

I decided to follow the same workflow that the GitHub team uses (see the diagram above), which is based on a set of simple maxims:

  • Anything in the master branch is deployable.
  • Working on anything new — adding a new feature, making a tweak, or even just refactoring — requires creating a new branch first, and working on that branch.
  • Commit to the branch regularly.
  • If the change can be confirmed as working properly, merge the branch into master.

Adding the other screens

Once I had all the gameplay features added, it was time to implement the other screens:

  • Title
  • Instructions
  • Aspirations Winery web site

Until this point, the app had only one screen: the game screen. When you launched the app, it went straight to the game. The next step was to restructure the app like so:

Click the image to see it at full size.

The game was self-contained, so making this change was relatively easy. I created a new view controller for the title screen, and made it the view controller that was presented upon app launch. I added a “play game” button to the title screen, and wired it so that pressing it loaded the game view controller. This change necessitated adding code to the game view controller that returns back to the title screen when the game ends or when the player presses the quit button.

The instructions button takes the player to the instructions screen, which is implemented as its own view controller. To simplify its implementation, most of it is taken up by a web view that displays an HTML page embedded within the app. The web view provides a lot of features that I wouldn’t have to implement — support for multiple fonts, static and animated graphics, scrolling — and makes it simple to edit the instructions.

The “visit Aspirations Winery’s site” button was the simplest to implement. It simply launches Safari and points it at aspirationswinery.com.

Fixing bugs and responding to feature requests

Cartoon depicting memory leak joke.

After I added the title screen, I noticed that the longer you played the game, the more it slowed down. That type of behavior usually indicates a memory leak, and after several runs of the app while monitoring its memory usage with the Activity Monitor, I confirmed that the app was leaking memory. It was a byproduct of bouncing back and forth between the title screen and the game screen; every time the player went from the title screen to the game screen, a new game screen object was created. After a handful of game plays, the device’s memory would fill up.

Once I found the cause of the slowdown, I changed way that the app switched between screens. I used some code that I remembered seeing in an iOS programming book that made use of a view controller that transitioned from screen to screen by explicitly loading the next screen into memory and unloading the previous screen.

Music note icon.

A couple of testers tried listening to podcasts while testing Wine Crush, and found that it wasn’t possible. The app’s sound channels overrode any other app’s sounds, including those running in the background, such as podcasts. They asked me if I could allow other app’s sounds to be heard even when the game was playing.

It took a little research and testing, but within an hour, I found out how to support audio channels from other applications.

Shipping

Six weeks after the start of the project, all the features that I planned to add to the basic app were complete, and my small group of testers couldn’t find any more bugs. Immediately after my final commit to version control, I submitted Wine Crush to the App Store.

The submission process was mostly straightforward. The only complication arose from the fact that the app is all about wine and features wine imagery. I had to specify that the app prominently features alcohol, which meant that it would be age-restricted in some countries and completely unavailable in some others.

The app was approved in less than 48 hours, and on July 7, 2016, it became available in the App Store.

And finally…

Congratulations on making it this far!

I have a couple of videos to show. First, this one is my Sesame Street dream come true: a children’s show in which a puppet character and I show kids how to make the most of their technology. It was called Developer Jr., and Microsoft Canada sponsored the making of two episodes. In this one, “Junior” (the puppet) and I show kids how to make their own video games using Kodu:

I’d like to close with this video by New Relic, who make a software performance monitoring system. It features some of the software world’s brightest lights: Matz, Guido, Linus, DHH, Bill Joy, James Gosling, Sir Tim, Marc, Woz, Rasmus, The Gu, Sergey, Dries and finally Zuck. But guess whose picture they chose to use as “the face of the developer” at the 1:04 mark!

I have no relationship with New Relic — they somehow found that picture of me online and thought it captured the kind of developer that they wanted to feature.

{ Comments on this entry are closed }