I’m Teaching a Half Day iOS Refactoring Workshop in July

When I re-entered the self-employed world last March and launched Zorn Labs LLC one of my main goals was to find a way to continue my education work. The first output of this effort has been workshops, specifically one on Refactoring iOS.

I’ve developed and taught the workshop for a local development studio Tonic Design and am now going to run it publicly.

iOS Refactoring Workshop

Throwing away bad code and writing something new from scratch is both risky and expensive. You need to avoid this temptation and instead learn to master small improvements over time.

Refactoring is the art of improving code without changing user behavior. Adding dedicated refactoring time to your workflow and sprints can pay for itself many times over in both added source code flexibility and application stability.

In this workshop we will review refactoring concepts from a high level and then explore example cases found in many iOS projects. As a group we’ll refactor and discuss the benefits of our changes. We’ll then work on our own (or in pairs) to execute what we’ve learned and then demonstrate the results for the class.

This workshop is targeted at those iOS developers who are getting over the hump of learning iOS and now want to know how to write higher quality iOS code. This workshop is capped at 12 people to make sure there is plenty of time for questions and individual attention.

Tickets for the half day workshop cost $189.00 even (we take care of all the ticketing fees). For more information on the agenda, see the event page.

Local performances of this workshop (and others in development) are available for corporate purchase. Contact us for more information.

Speaking at 360iDev, Come Join Us.

I’m happy to report some recent talk proposals were accepted and I’ll be speaking at 360iDev this August in Denver. I was already going to go to 360iDev regardless of the talks, I’ve heard great things from recent years, so this just makes the week that much more exciting.

360iDev Logo

My Talks:

Overcoming the Stress Surrounding Code Review, for the Betterment of Your Project and Career

Code Review is a practice where before a change is made to a code base, the code is first posted somewhere for peer review and critique. Code Review is an extremely productive way to catch problems before they are delivered to users as well as help individuals mature as programmers. In this talk we’ll explore Code Review by documenting the responsibilities of those involved, the person posting the code, the person (or people) reviewing the code, and then again back to the poster, as they react to the feedback given. In addition to the raw process of these stages we’ll also review the very human side of Code Review using real world stories, the good, the bad and the ugly. We’ll close with more general tips and tools that can help, as well as cover some of the how and why you might want to utilize these practices even in your own solo work. The best audience for this talk are people who are looking to improve their personal or team code processes. Those who attend will leave with very actionable strategies to execute productive code review on their own projects.

Starting, Growing and Running a Successful Developer Meetup

One of the most rewarding aspects of my career has been attending and then helping to run my local Apple developer meetup group. Meetup groups provide great learning opportunities but more importantly they provide great relationship opportunities for its members. In this talk I’ll share the story and lessons learned from running my local CocoaHeads chapter. After a quick review of the benefits and challenges of running a local developer group we’ll jump into actionable items for people starting, growing or running their own group. From defining success, to time expectations, marketing, sponsorship, planning content, tools and more. To close the session we’ll invite a few other group leaders from the audience to the front for a broad question and answer session about your specific issues and concerns. This talk is targeted at those who are running or would like to run a local developer meetup. It may also be helpful to those who attend a current group that needs guidance and/or focus.

If you are an iOS developer you should consider joining us. It’s going to be a great conference. Per CocoaHeads, use the coupon code “cocoacommunity” for 15% off all tickets.

Video: UIKit is Dead, Long Live UIKit!

Philly CocoaHeads held a joint meetup with our Android friends for Philly Tech Week. At said meetup there were a bunch of lightning talks, and I did one.

UIKit is Dead, Long Live UIKit!

With the introduction of Swift and the rise of functional programming ideals in the community, UIKit and its MVC heritage has become a bottleneck for new ideas. This talk speculates how Apple might overcome this in the years to come. Attendee should walk away with a curiosity about the other UI patterns being developed and a resource list to learn more.

UIKit is Dead, Long Live UIKit! from Philly CocoaHeads on Vimeo.

Related Reading:

I actually had a few vocal flubs in the recording (was a little stressed about the 10 minute limit) but figured I’d use the live one anyways since it has more humanity than me speaking to myself in my room. I hope you enjoy!

Introducing Zorn Labs LLC

As I alluded to after loosing my job at the end of January, I knew I’d take the majority of February to recover from my neck surgery and then get serious about work in March. We’ll it’s almost the end of March so I figured I’d do an update.

First, welcome Zorn Labs LLC, my new company. It will house my future consulting and product work.

Second, I am still looking for work. My goal is to find something 10-30 hours a week, doing iOS or iOS mentoring. To help express my skill set and goals I’ll point you to the new company site. I would appreciate all friends and followers to help spread the word.

Outside of setting up the new business and website, much of March has been spent towards marketing and planning. I had many lunches and coffees with prospects and friends. I even had a few offers but they sadly weren’t the right fit for me at this time. When I haven’t been marketing I’ve been trying to jumpstart some new web skills, refreshing my HTML5/CSS3 knowledge, getting deeper into Hugo template design for the new Philly CocoaHead website, and experimenting with Elixir and Phoenix.

For those interested in my Mac app project, you can also check out my project journal blog at: http://restedexperience.com. I’ve been trying to update that a little more often with my recent progress.

So that’s my March update. Thanks for the interest! More to come in April! :)

Accessibility

At the Apple event a few weeks ago they began with a short video on accessibility.

I’ve learned a lot about accessibility on iOS over the last few years. Apple’s products are some of the most accessible in the world and for all the frustrations I have with Apple, this is definitely one of the high points I’m proud of.

I was also really pleased to see our own Philly CocoaHeads give accessibility some attention at a recent Side Project Saturday event. A group of people worked on improving the accessibility of the Wikipedia iOS app.

Group of Programmers using Voice Over on iPhone

Anyways, I think the time is right for development agencies and indy consultants to put accessibility front and center. For them to say loud and proud, any app you hire us to build will have some basic level of accessibility.

Some people whom I bounced this idea off of thought it would be bad for sales. Maybe. But these are the probably the same clients who question code review because they think it is a similar waste of money. At the end of the day we all have have some level of standards onto which we execute our craft. People hire us because they can’t build software. They need us to point them in the right direction.

Somewhere out there, a construction agency is in a discussion whether or not to add a wheelchair ramp to the current project. Some people will add it because it’s required by law, others will add it because it’s the right thing to do.

The software industry moves incredibly fast, maybe even too fast. We don’t have regulations and inspectors like other industries. We have to regulate ourselves. The tools to improve access for our creations are ready. They work really well. They sit there, waiting for us to use them.


I don’t want to come off like I’m some know it all when it comes to accessibility. If you need real help with your app, contact my friend Austin who does consulting on the subject.

I do have some experience enhancing a few personal iOS apps and hope to make it a larger priority with my upcoming side project. Like a lot of things, I think the goal here is for continual learning and small, iterative improvements.

Should I Sell My Apple Watch?

I did not partake in the first release of Apple Watch. I was curious but not curious enough. I bought a Playstation 4 instead.

Last month Apple had its announcements. I wasn’t all that jazzed about the iPhone 7 (even though I am due to upgrade my iPhone 6) so I thought I’d try out the watch instead. I ordered an Apple Watch Series 2, 42mm Stainless Steel w/ Silver Milanese Loop. I also got a Cocoa Sport Band for a little variety.

It’s been about a month with the watch and I’m not sure I should keep it. Few notes:

  • I suspect a big benefit of the watch is quick glances at notifications — but for me, I’m actively trying to remove notifications from my life. I turn them off completely on the desktop and audit them on iOS significantly.
  • There is the health tracker / movement component, but for me it’s not a huge draw. I don’t do heavy workouts much. I do like to take the occasional podcast walk, but I feel like I get enough info from my phone’s step counter if I really cared.
  • I don’t like the pressure that I need to wear the watch all day to fill up my bars. I did not wear a watch before this and it still feels very alien. I like taking it off when I type on my laptop or after I wash my hands (it gets wet and doesn’t dry off right away).
  • I find myself constantly fiddling with the magnet strap. I like the band to be slightly tight and it feels like it get loose quickly if I move my arms a certain way (putting on my backpack, making my bed, etc.).
  • The sport band strap is too small for me (even with the larger of the two bands) — it technically fits but is too tight. One more hole would have helped.

Am I missing something? What do you love about your Apple Watch? Let me know. As of now, I’m looking for ways to sell it — I think the money for me would be better put towards a new Mac (should they ever be rev’d again).

Posted in iOS

CocoaConf DC 2016 Recap

Had the pleasure to attend and speak at CocoaConf DC this past weekend.

CocoaConf is a touring training conference for iPhone, iPad, and Mac developers. We bring some of the best authors, trainers, and speakers to the most passionate, engaged developers in a region—together, they make magic!

CocoaConf draws anywhere from 100-120 developers. It’s a very nice, comfortable size. Large enough to host a diverse collection of personalities and ideas, but small enough not to feel overwhelming. People actively mingle and you get to meet lots of new faces without much effort.

This was my third CocoaConf, and first as a speaker. My own talk was at the end of the first day and I spent ample time the previous weeks preparing to avoid the need to do last minute slide updates and miss sessions — and I’m glad I did so.

The sessions were really good at this CocoaConf. Sure it helps that iOS 10 is just out and there is still lots to learn, but even the talks that were version agnostic, covering patterns, architectures and bug hunting skills all got my brain spinning with ideas.

One cool benefit of my work scheduling is now I have a week of stay-home vacation and I can hopefully direct that post-conference enthusiasm towards my side projects and some extra experimentation. Specific items on my list:

  • Do more interactive prototyping of my side project and follow up with some user interviews.
  • Do some experimentation with Perfect to build a simple Swift API and host it on Linode.
  • Continue to polish up my RanchWeather app and start a blog series reviewing the code patterns.
  • Do some experimentation with Twilio authentication in preparation for a web app project.
  • Inspired by the journalling abilities of MarkD, dedicate the vacation week to a journaling experiment: Daily Journal, Project Journal, Tool Journal.

As for my talk, I think it went very well. One thing I really like as a speaker is the conference not only has a session review system but they encourage submissions of reviews with a raffle for prizes at the end so you get a lot of feedback. Most of my talk’s feedback was very positive and I appreciate the criticisms, both good and bad. Always room for improvement.

So yeah, if you are considering attending or speaking at a CocoaConf, do it. It’s very rewarding and worthy of your time. If it’s on the east coast you’re more than likely to see me there too — and if so, say hi!

Regarding Knight Rider and Delegation

One of the saddest aspects of being a Big Nerd Ranch instructor in 2016 is that students these days do not appreciate the Michael Knight is to Delegation, as RoboCop is to Subclassing discussion of yesteryear.

From Cocoa Programming for OS X: The Big Nerd Ranch Guide:

Delegation

Let’s start with a story: Once upon a time, there was a man with no name. Knight Industries decided that if this man were given guns and wheels and booster rockets, he would be the perfect crime-fighting tool. First they thought, “Let’s subclass him and override everything we need to add the guns and wheels and booster rockets.” The problem was that to subclass Michael Knight, they needed to wire his insides to the guns, wheels, and booster rockets – a time-consuming task requiring lots of specialized knowledge. So instead, Knight Industries created a helper object, the Knight Industries 2000, or “KITT,” a well-equipped car designed to assist Michael Knight in a variety of crime- fighting situations.

While approaching the perimeter of an arms dealer’s compound, Michael Knight would say, “KITT, I need to get to the other side of that wall.” KITT would then blast a big hole in the wall with a small rocket. After destroying the wall, KITT would return control to Michael, who would charge through the rubble and capture the arms dealer. Note how creating a helper object is different from the RoboCop approach. RoboCop was a man subclassed and extended. The RoboCop project involved dozens of surgeons who extended the man into a fighting machine. This is the approach taken by many object-oriented frameworks.

In the Cocoa framework, many objects are extended in the Knight Industries way – by supplying them with helper objects. In this section, you are going to provide the speech synthesizer with a type of helper object called a delegate.

What do you think the new metaphor should be?

Join Us at CocoaConf DC, Sept 9-10th

I’ve been to multiple CocoaConfs as an attendee and it’s with great pride I’m happy to say I’ll be a speaker at one soon.

CocoaConf Boston

CocoaConf is a traveling conference focused on Apple technologies that has been around since 2011. It’s big enough to have multiple tracks of content but small enough that you’ll have time to socialize with most of the other speakers and attendees throughout the event.

The 2016 “tour” is coming to a close. I’ll be speaking at the Washington DC CocoaConf (Sept 9-10) but if you are on the west coast you might want to consider San Jose, CocoaConf (Nov 4-5th).

When registering use code “COCOAHEADS” for 10% off!

I can’t wait to see everyone. If you will joining us, please come by and say hi. I’ll have some Big Nerd Ranch swag for ya.

The World Needs a Better Core Data

Lots of WWDC predictions out there this week. Here’s a dream of mine. Sadly one that I’ve given up on, at least from Apple.

A Better Core Data.

  • Tracking state is 1970s thinking. We should be tracking changes over time and rendering the current state of the object graph.
  • Migrations, the number one feature. As you add new entities to a store, you do so through a migration. Change a column name, you do it through a migration. The current Core Data migration story is embarrassingly complex and very fragile. We need to have trust in our migrations.
  • A single, focused, persistent store format. Allowing people to choose between XML, Binary, SQLite, InMemory and Custom adds more pain than it solves. Keep things simple. One on-disk format.