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.

Meet OwlDeck, a New Mac Presentation App for Programmers and Markdown Geeks.

Today I’m launching the teaser site for my new app, OwlDeck.

OwlDeck is a new macOS presentation tool for programmers and geeks who need to display code and love Markdown.

If you are interested in OwlDeck I’d love for you to signup to its newsletter and email me your thoughts.

If you are interested in some behinds the scene stuff you can checkout the project journal I’ve been keeping over at Rested Experience. I hope to share more now that things are going public and timelines are set.

Really excited to be working on products again. :)

Rethinking My Music Storage

I’m not a huge music collector, at least not compared to some other people I know. I do have about 150 GBs of music in my iTunes collection — lots of it being video game soundtracks I enjoy listening to while I program.

A few things I have not liked about my historic setup:

  • Because the collection was 150 GB I could not store it on my main computer’s SSD (which was 256 GB in size).
  • iTunes sucks. I don’t want to get into details here but as a music player and organization tool it’s awful.

Some goals for my new setup:

  • I want to get rid of iTunes.
  • I’d like to store my music on Dropbox, preferably in a way where I can control which Music (if any) gets synced to my other Dropbox setups.
  • I have recently become a Spotify member. It’s got a nice collection I feel I can lean on AND it has some tools the player UI to support local files as well as streaming songs which I think will be key.

With all that said, what I’m up to:

First thing, I made a new iTunes library on my desktop and have started re-downloading my old iTunes music purchases. I have lots of music that is still DRM wrapped and these new downloads do not have such DRM.

Next, I’m going to slowly start to put the music into Dropbox. I’ll have a root level Music folder but inside I’m going to split the collection into Rare and Common. Common being for songs that are streamable from Spotify and thus being a folder I can selectively NOT sync on my other computers. The Rare folder will have all of my video game soundtracks and other albums I find to be incomplete or missing on Spotify. As I said, I like how Spotify can bring in local music into playlists and even lets you control the source folders and I’m hopeful this will work nicely.

We’ll see how it goes over the next few weeks. I’d love to hear if anyone else has an exotic setup like this.

Also, next up for a rethink is photos. Again, I’m really not happy with the current Apple solution and am thinking of alternatives. Feedback welcome.

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.

Pre-“Hello Again” Mac Event Thoughts

Having been a long time Mac user and developer it’s been very disappointing to see Apple ignore the hardware release cycle of the Mac platform over the last few years. I’m really anxious to see what’s going to come of the “Hello Again” event this week and I might even buy a new Mac depending.

Current Mac-state of Mind

So my main personal machine is a 2011 maxed-out iMac. I bought it after waiting and waiting for a proper Mac Pro update in 2011 that was never to come. Overall I’ve been pretty happy with the iMac. I have had to do a USB storage dance with some backups and media drives but overall it’s been a workhorse, with tons of days of Xcode and Warcraft under its belt.

Other Macs in my arsenal include:

  • A 2011 Mac mini which at times has served as a CI box but as of now is dormant (might be resurrected depending how CI plans turn out for my side project).
  • A 2012 Macbook Air which I use situationally. Recently for beta testing 10.12 over the summer and the occasional Philly CocoaHeads video capture.
  • My work provides me a high end Mid 2014 15-inch Macbook Pro. I’m trying to do a better job of keeping that machine in kind of a white room state just for work stuff with mixed success.

I also have a 27-inch Thunderbolt display and a 27-inch Dell display which I use to extend my Macs in various ways at different times.

To Upgrade or Not?

Technically speaking my 2011 iMac is working fine. It does have some issues: occasionally the wifi likes to disconnect, there are some color issues spreading out from the lower left corner of the display, the DVD drive broke (I bought an external one to supplement the occasional need) and the 256 GB SSD is not large enough to hold all my stuff anymore so I have an awkward HD layout with USB storage. The iMac also runs very hot. I suspect part of this is dust build up but have not investigated too much. While annoying, none of these issues are blockers.

The first big upgrade question is laptop or desktop? I’ve always leaned on the desktop experience for pure power but there are many things that push me towards a laptop as my main personal machine right now:

  • I could setup a very “swap” friendly environment that would allow me to have a home work station letting me plug in my personal or work laptop as needed.
  • Since I have a Gaming PC now I don’t need the graphic power of the Mac as much making laptop more feasible.
  • I am traveling more — more conferences, more work trips, single days at IndyHall (instead of a full time desk and me leaving the iMac there). A personal laptop for these days would help me with that home/work separation on the company laptop.

Other welcome improvements:

  • Retina Display. My iMac does not have a retina display and my hope would be that a new laptop from Apple would support this natively as well as support a future retina external monitor connection.
  • More SSD storage. Would be nice to consolidate my external drives into one big SSD.
  • If I go laptop, no need to upgrade two machines every year with a new OS, keeps all the software/licenses in sync.
  • Complier speed improvements. From a numbers perspective my iMac has a good CPU but I would hope improvements to the bus speeds and other architecture improvements would see some improved Xcode complier times.

I feel like in the process of writing this I’ve talked myself into a upgrade but we’ll see what comes out of Apple on Thursday. Enjoy the show.

Greetings, from the Ranch

One of the great perks of working at Big Nerd Ranch is that you are allowed to take one Big Nerd Ranch class a year. This week I’m taking the Front End Web class, and am really looking forward to it.

At nights we are encouraged to work on a side project to help practice what we are learning in the day. I think I’m going to work on a wiki app — with a few touches that I myself have an itch for, drag and drop image uploads, code syntax coloring, and more.

I’ll check in later through the week. Wish me luck.

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!

My New PC Gaming Computer

Final Parts List: http://pcpartpicker.com/list/4Wjcf8

I’m a fairly serious/casual gamer (as in serious love of many games, casual in that I can only play so many hours a week because of other life responsibilities). I play a lot of 3DS (Pokemon, Zelda) and I also own a Wii U, a PS4 and lots of other older/retro consoles.

I’ve been considering a gaming PC for a while. My main drive has been to support a mix of playing World of Warcraft and Final Fantasy 14. I’ve been playing both on my 2011-era iMac (Bootcamp-ing into Windows for FF14) but the graphics performance of the old machine was starting to become a real limiting factor. Additionally was the interest in playing some PC-only (or PC preferred) games, like Overwatch and Stardew Valley.

A few months ago I started assembling a parts list and talking to some other friends. Part of me just wanted to buy a pre-built system but for better or worse my geeky friends assured me the assembly wouldn’t be that bad and it would let me save some money or buy some better components.

My initial target was to spend about $1500 and go for a upper mid-tier machine. I wasn’t interested in VR right now and just wanted something to play games. After getting acquainted with the video cards and performance I choose the GTX 970. I had a full parts list waiting to go but I didn’t pull the trigger. This was around April and I was still traveling a bit. I was also working towards paying off my student loans and decided I’d do that first.

GTX 1080

When I came back to my parts list at the end of May there was the announcement of the new GTX 1080 and 1070. These new cards were destroying the performance charts and I started to get a little greedy. I kept up with the release, and noticing the 1080 was selling out joined an alert website to let me know where and when it became available. I eventually grabbed a Founder’s Edition directly from Nvidia. I will concede the upcoming non-Founder’s Edition cards are probably better cooled and cheaper but I was anxious to play and didn’t want to wait until end of June / July to get my hands on this thing. I splurged.

I came back and cleaned up my final parts list. I ordered the rest of the machine from NewEgg with a few pieces from Amazon. (Even if a bit more I’d prefer to buy from NewEgg and Amazon who are very easy to work with regarding returns and such.)

One item I was not planning to buy but did, was a new monitor. I was really hoping to get dual use out of my Apple Thunderbolt monitor (which I use with my iMac to extend my display) but as I did research it would seem hooking that up to a display port was not going to work out. I ended up buying a Dell Gaming S2716DG 27-inch monitor to make it work, and it does. I just am not enjoying using it with my iMac as much as my other Apple monitor since the colors aren’t matching like they used to.

Assembly

Workbench

After ordering the parts a week before, I sat at home Friday night and got started with the assembly. I took my time. I read the motherboard and other manuals as I slowly connected it all together.

Motherboard

Motherboard Mounted

Some things gave me trouble. It took a few attempts to get the motherboard mounted in the case. In general there was always a scary feeling of putting too much pressure on a part to get it to fit in. The case came with a ton of different screws and I had to take a lot of time to make sure I was using the right pair for the job.

All Done

Windows

I worked on Friday from 8pm till about midnight and then Saturday morning 9am until lunch to finish the assembly. Much longer than a seasoned PC gamer I’m sure — but keep in mind this was my first build since college and even then I had a lot of help from my roommate. Once assembled I was lucky in that it powered on into the BIOS right away.

Windows

Despite some known gaming headaches, I decided you use Windows 10. It installed fairly quickly. During initial setup I did opt-out of a lot of personalization features that do not interest me. My next challenge, getting the network card working.

My gaming PC is not near my cable modem so I need wireless connectivity and surprisingly this is not on the motherboard — I needed a seperate PCI card. The card I bought seemed to use PCI for the housing but also plugged into the USB on the motherboard. After spending some time downloading the latest drivers and playing the format game with some USB sticks I eventally installed the software but the card would not start up. It took some searching but I eventually found out I had to disable XHCI Handoff to enable the third USB connection on my motherboard which is what I was using to connect the wireless card. With all of that figured out, I had network access on my computer and began downloading some system updates and then some games.

The Games

I’m sure I’ll buy some more in time (and would greatly love your recommendations, email me) but for now the primary PC games for me are:

  • Final Fantasy 14
  • Overwatch
  • Civilization V
  • World of Warcraft (idle until Legion)
  • Stardew Valley (New, not played yet)
  • Rocket League (New, not played yet)
  • Undertale (New, not played yet)
  • Hearthstone (I play this on my iMac and iPad as well but there are some nice Windows-only analytics add ons I might try.)

Final Thoughts

I have mixed feeling about the time I spent doing the build. It does feel empowering to refresh my memory of how to do it all — but that said it’s not something I get a ton of enjoyment out of so let’s hope this box keeps ticking without too much maintenance in the years ahead. And while I do carry a little guilt about going for the super high end video card I also look forward to for the next few years being able to turn on ULTRA options without losing frames.

Clash of the Coders: Day 0

One of the many interesting benefits I get working for Big Nerd Ranch is the opportunity to participate in many fun and unique events. One of the bigger ones is called Clash of the Coders.

Clash of the Coders is an annual coding competition, whereby Big Nerd Ranch effectively “shuts down” for a a few days to allow developers to flex their coding muscles in to build something (anything) that is both wizardly and useful.

This years edition of “Clash” starts at 6pm tonight, Wednesday March 30th. While people are encouraged to brainstorm ideas and form teams ahead of time, no code shall be written until the event starts.

During the event we are treated to full time catering, shoulder and neck massages as well as other free-form geek activities. (I hear Christian will have his new Oculus Rift around for testing.)

While remote nerds can choose to stay remote and participate, anyone who wants to come into the office can. Last year I was at home and didn’t really get into it. This year I’m working out of the office so I’m anxious to see how it all works out.

As for my project and team, I’m still working on it. I have an idea and if need be will work on it solo but am also hosting a meeting after lunch for ‘Clash Singles’ to see if we can form some last minute teams.

At the end of Clash (Saturday, 6pm) we have a nice BBQ dinner (spouses and kids welcome) and we run a science fair of sorts, where people demo their work and answer questions. People are judged on project complexity, presentation and other factors. Bonus points are awarded if your team was interdisciplinary (mixing people of different departments) and if you were able to integrate any of the emerging technologies on our watch list. Top prize allows you to choose from list of high end geeky toys (think drones and musical instruments) with second/third prizes getting some nice Amazon gift cards.

I’ll post more as Clash gets going. If you have any questions let me know.