31 Days, 31 Products: Fin

Day 02: Fin

This post is part of a larger series where for 31 days I’m posting a story about a particular product or service I’ve come to enjoy.

Fin is an app for iOS that turns your device into a large countdown timer; particularly helpful for presentations and performances. Fin is a universal app that works well for iPad as well as iPhone. It even has Watch support.

I’ve been using Fin via an iPad mini at CocoaHeads and it really helps us stay on time with our busy agenda. I really like the color warnings when time is running out and generally how easy it is to reset / change times with gestures.

Fin is available from the App Store for $4.99 and you can find out more about it on its website.

iOS Mobile Design with Sketch at Big Nerd Ranch

I’ve wanted to get better at using Sketch for a while now and it looks like I might get my wish!

iOS Mobile Design with Sketch

At work we’ve revamped our mobile design class and it now includes learning Sketch alongside mobile design fundamentals. The class summary:

If you have basic design experience in UI, UX, web or responsive web design, this class will teach you to bring your designs to iOS in just five days.

In this intense week of learning about design for iOS devices, you will design an iOS app, from concept to delivery. With a focus on Sketch, you will learn a process that you can use in any future app design projects.

If this sounds interesting to you I highly encourage you to register and join us in January. I’m registered and really looking forward to the class.

24 Hours with My iPad Pro

I’ve always been a big fan of the iPad. I’ve owned an: iPad 1, iPad 2 (which I sold to upgrade to an iPad 3), an iPad mini (retina), and now an iPad Pro.

I’ve been pretty antsy for an iPad Pro since I saw the original announcement. I can’t say I have any unquie plans for it (outside reading Big Nerd Ranch book drafts in PDF format on a much bigger screen). Mostly I just want to experiment with the all the new features like the pencil and multitasking.

As of right now I have the iPad Pro itself (I went with the high end, 128 GB with cellular) and the keyboard cover. The pencil has been a little harder to come by so until then I’m making due with the 53 Pencil I bought a while ago but never really got into due to the smallness of the iPad mini. So far, it plus the larger screen is working out well. I look forward to comparing this to Apple’s version.

There are lots of great iPad Pro reviews out there so I won’t go into major detail. The things I’m liking a lot: the huge screen, the sound system and the battery life. The things that got me down a bit: the removal of the split keyboard (it’s hard to type holding the iPad Pro in portrait mode), lack of 3D Touch and the lack of the newer thumbprint scanner.

All that said, when it comes down to it, it’s about the software. I think I’ve spent $100 in new software playing around with things. If you know of some must have iPad software let me know cause I want to see how hard I can push this thing. Tomorrow should be a great test as I fly down to Atlanta to visit the home office of Big Nerd Ranch.

Sweating the Little Details of UI Copy

While user interface design is not a core responsibility at my current job I do believe it is an important skill in my field and I try to improve all the time. A large aspect of user interface design is choosing the right words. For example, a good UI designer when crafting an iOS alert will honor and consider Apple recommendations. Some notes from the HIG:

Place buttons appropriately. Ideally, the button that’s most natural to tap should meet two criteria: It should perform the action that users are most likely to want and it should be the least likely to cause problems if a user taps it inadvertently. Specifically:

  • When the most likely button performs a nondestructive action, it should be on the right in a two-button alert. The button that cancels this action should be on the left.
  • When the most likely button performs a destructive action, it should be on the left in a two-button alert. The button that cancels this action should be on the right.

Give alert buttons short, logical titles. The best button titles consist of one or two words that describe the result of tapping the button. Follow these guidelines as you create titles for alert buttons:

  • As with all button titles, use title-style capitalization and no ending punctuation.
  • As much as possible, use verbs and verb phrases that relate directly to the alert text—for example, “Cancel,” “View All,” “Reply,” or “Ignore.”
  • Use “OK” for a simple acceptance option if there is no better alternative. Avoid using “Yes” or “No.”
  • Avoid “you,” “your,” “me,” and “my” as much as possible. Button titles that use these words are often ambiguous and can appear patronizing.

My personal pet peeve isn’t mentioned in the HIG but is present in almost all systems that require a user account:

Forget your password?

I hate that phrase. I find it to be patronizing and judgmental. As if I’m suppose to remember every password I ever created for every little web site and service. Who could?

Additionally, it’s misleading. If I click a link labeled “New Comment” I expect to be provided a form to make a new comment. If click a link to “Forget your password?” do I expect some flashy animated GIF that will erase some data from my brain? What I want is a link to “Reset Password”. The link title “Reset Password” is clear, focused on the target action to be performed and does not have a hint of judgement.

Sweat the little things. Read and then reread the interface guidelines. Be able to explain why for all your interface choices. Have fun.

How To Play WWDC Sessions at 2x Speed

Now that all the new bits of iOS 9 and OS X 10.11 are in the wild you might find yourself wanting to get up to speed on some of the changes. One great resource to help you get started is Apple’s WWDC videos.

The WWDC video library has a lot going for it: HD and SD video sizes, slide downloads and now even full text search! The only real negative thing is the sheer amount of content out there. It can get overwhelming and time consuming to watch all the stuff you are interested in. Here’s the hint. Like podcasts, WWDC videos are mostly single voices speaking one at a time and if you have the tools to double the playback speed you’ll find them still very comprehensible.

Now for the tools. For downloading you can of course use the Apple website. I like this WWDC Mac app as well. Once you have the video file on your hard drive you’ll unfortunately need to look for something beside the built-in QuickTime player to help. Even with all its enhancements it sadly doesn’t have this tool of QuickTime’s past. The good news is you can still download QuickTime 7 and it works great!

After you open your movie in QuickTime 7 (you’ll find it installed in the Utilities folder), use the Window menu and choose Show A/V Controls. In this panel you’ll see a slider that let’s you adjust the playback speed.

QuickTime 7

Now you can watch your chosen WWDC videos in half of the time! Enjoy!

UPDATE: My thanks to Paul Brown who let me know that the native QuickTime player can playback faster, even if it is a little hidden. To increase playback speed, bring up the controls with your mouse, then option-click on the fast-forward control. This will increment playback speed by 10% each time you click. You can keep clicking this up to 2.0x playback speed but sadly the audio does not work at 2.0x, you’ll have to limit yourself to 1.9x to retain the faster audio. Thanks again for the help Paul!

Code Patterns Talk, Video Now Available

We’ve been trying to a better job of capturing our main talks at Philly CocoaHeads. You can find and subscribe to our small but growing collection of videos on Vimeo: https://vimeo.com/phillycocoa.

I did a talk last month reviewing a some iOS code patterns. The runtime is about 27 minutes. Feedback very welcome.

Some Code Patterns, Mike Zornek from Philly CocoaHeads on Vimeo.

This talk covers a handful of code patterns that were successful on my recent projects. Some of these patterns include Block Safety, "Tell, Don't Ask", Using DataSources for your network-based *Service objects.

Apologies the audience participation isn't well captured.

Philly CocoaHeads Website Relaunch Project

I haven’t had an active side project in the last few months. When asked I would tell people looking for a new job was my side project. Now that I have that new job search (and my Girl Develop It class behind me it’s time to kick something off; we’re going to rebuild the Philly CocoaHeads website!

When I took over the local chapter of CocoaHeads here in Philly (back in 2010 or so) the previous organizer had a Ruby/Markdown publish system setup. It was kind of neat but involved a lot of setup on the client box to get up and running. I had a few people posting to the site so rather than set up that system on each individual’s box I opted for WordPress. The WordPress site has done ok for us but we’ve been growing a ton and doing a lot more over the last year (workshops, video capture of meeting presentations). I’d love to start to centralize things like keeping track of our members and our money, overall there is a ton that could be automated and it’s time to make it happen.

I don’t want to do this alone and I also would love to start documenting the project as it unfolds. To get started we have a brainstorm session scheduled during Side Project Saturday. If you want to participate please consider stopping by. If you can’t stop by, but want to participate, let me know and maybe we can setup a Google Hangout call-in option. To capture notes I’m going to use Trello. The board is live and open to the public. (You will need to login with a Trello account to edit.) Feel free to start to document your ideas today.

Girl Develop It: Introduction to iOS Development

The Introduction to iOS Development class I’m teaching for Girl Develop It is open and tickets are for sale.

This class will provide attendees an introduction into iOS development through a mix of lecture-style presentations and lots of hands on coding exercises that in total will demonstrate what it is like to be an iOS developer.

The 2-day class costs $100 and will be held on Saturday Feb 7th and Sunday Feb 8th.

If you know of a woman in the Philadelphia area who is interested in iOS please let them know. Thanks.

An “App Architecture” Kata

At the last Side Project Saturday CocoaHeads event I ran a special little exercise. Here was how I described it.

I’d like to run a little event, (maybe after lunch?) for anyone who wants to participate. Should take like 45-60m.

You will be presented with a mobile app idea. It’ll be fairly basic and we’ll list all of the behaviors we need and some we’d like in the future. You will then pair up with someone and pencil out how this could be architected. Each group will then present their app architecture and answer questions, accept feedback from the rest of the group.

From Wikipedia: A code kata is an exercise in programming which helps a programmer hone their skills through practice and repetition. The term was probably first coined by Dave Thomas, co-author of the book The Pragmatic Programmer, in a bow to the Japanese concept of kata in the martial arts.

App architecture is one of those things I’m always trying to improve so I thought it would be cool to see how other people would solve similar problems.

We had six people participate. We started with a brief explanation of the app we were going to sketch out an architecture for. Then, we broke up into pairs of two. After about 40 minutes we came back and showed the group what we came up with.

Kata App Wireframe

The one group ended up documenting behaviors per screen. They did a great job of documenting the little things that developers might look over as assumed behavior (which add up fast). It was pointed out that it’s also a great idea to document the things you will not be doing since there tends to be lots of great ideas during brainstorms but when you are planning a sprint of a version target you need to be clear about what’s in and what’s out.

The other two groups (including my own) were more visual, using tools like OmniGraffle to draw representation of models, controllers and services. There was some common separation of responsibilities with slight differences: the one group making an “APIStore” that combined the state and networking and another (mine) that favored separate “Network” and “Session” managers.

Some of the more high-end abstractions I introduced included a FormController that could take a Form model (that had say a collection of FormFields) which described the form at a model level and then through a FormController might be able to render the form on screen through a TableView for a generic representation or maybe through specific outlets to a custom layout. It could also handle things like input validation. True, this is overkill for our one simple login form but assuming this app might grow to contain edit person forms at some point it might not be too bad of an idea (and plus the whole purpose of this event is to discuss interesting ideas).

I also took the time to introduce a pattern thats been out for a while but is a recent addition to my personal toolkit, that being ViewModel. You can read more about MVVM on objc.io. In short it’s a great way to centralize the code you use to transform model objects for user interface purposes and keep that logic out of the model.

In conclusion, everyone who participated seemed to enjoy the exercise and I would encourage you to replicate it amongst your own peers. It’s still up for debate if “Side Project Saturday” is the best venue for such things as many who come have their own stuff to work.

CocoaConf Boston 2014 Recap

After getting a solid recommendation from Curtis, who attended the Washington DC variant, this weekend I headed north to CocoaConf Boston. It was my first CocoaConf and so I went into the weekend with a lot of blurred expectations.

Spoilers: I say first with intention. TLDR; I had a really great time. The talks and speaker quality were really high and with luck I’ll be able to attend again during a future “tour”.

One of my expectations was size. I thought the attendee count was going to be a bit larger. It felt like ~130 but I’m not sure what the official number was. Not that a small count is bad for me but I’m used to educational events hosting more. I suspect part of this is that CocoaConf is hosting lots more venues now (three arguably “east coast cities” during this fall tour alone). This may make some events smaller but overall a win for the community so as to have more access for those who can’t travel far.

One thing that continues to make me proud is the people of our community. The attendees, the speakers and the event staff of CocoaConf are all incredibly friendly, approachable and inspiring. Meeting new people and catching up with old friends is a big reason why I like attending conferences and CocoaConf does a great job at supplying the “campfire” atmosphere to make that happen.

Daniel Jalkut's "Quit Your Job" keynote

As for my favorite talks I’ll mention a few:

Daniel Jalkut’s “Quit Your Job” keynote and Rob Rhyne’s “Make Them Care” session were both very inspirational. I leave Boston really hungry to jump into some side projects of mine and get back into the product game outside of my client stuff at work.

For technical wisdom I have to give it up for the full day “Swift Kickstart” workshop Daniel Steinberg ran as well as the Swift and Objective-C: Best Friends Forever session by Jonathan Blocksom. CocoaConf Boston is now cemented as the place and time where I really started to appreciate what Apple is trying to accomplish with Swift. This isn’t to say we aren’t in for a bumpy ride but at least now I have a good frame of mind as to the “why” behind it all.

Finally, it was great to meet the people that run CocoaConf. Rather than some large corporation, CocoaConf is actually a family affair. Dave Kline and his family run most of the operation and they seemed very dedicated to making sure everyone had a good time. For all their hard work I say thank you and hope to see you all again soon.