Modern Interview Prep

Brent Simmons: ”In production code, if a problem like this came up, I’d ask “How the hell did we get here?” and try to backtrack and figure out what insanity caused this, because it’s just not right.”

This mirrors my experience when I was interviewing back in 2014. Heck, I managed to get an interview at Google for an iOS development job – I can’t remember if it was on Maps or Chrome – and I was blown away by the interview process. I was sent a list of things to study. Not one had to do with iOS development. It was all about algorithms. I was given a month to prepare and a contact at Google that was meant to be a tutor to help me prepare.

Needless to say. I canceled the interview.

Brent is a thoughtful, battle hardened, Mac and iOS developer. He built one of the most beloved Mac applications ever built; NetNewsWire

But to most companies today, this means very little, if anything.

Xcode for iPad?

MacRumors: ‘because it “opens the door for ‘Pro’ applications to come to ‌iPad‌."’

Red sock.I picked that bit of a sentence from the article because it’s complete B.S. If folks want to bring Pro apps to the iPad they have the means to do it today on their Mac. Having Xcode on an iPad won’t magically make that any better. The Mac is the perfect tool for building Professional Mac and iOS apps.

Xcode on iPad would be fine. I can’t personally see using an iPad as my primary development machine. Mainly because I like using a bigger display for development. My 15in MacBook Pro display is about as small as I’d like to use.

If I could set the iPad on a stand of some sort, hook it up to my full size keyboard, mouse, and 24in display? That is something that may work.

We’re getting closer to that day, we’re just not quite there.

Not all nerds carry the latest iPhone

Do all Apple related podcasters believe every nerd carries around the latest greatest iPhone?

I’m a professional iOS software developer. Have been since 2009. Prior to that I made my living writing Windows and Linux based video viewing workstations. Prior to that I worked on a an extremely popular Windows desktop drawing and diagramming software. I’m approaching 30-years as a pro.

I carry an iPhone 7.

The sad state of my weblog

Last week I wanted to send a link to someone for a piece I wrote in 2014 about my fear of public speaking, which was really about the pressure I feel during interviews.

I searched for the title of the piece, found it, and when I clicked the link it 404’d. Why?

A few months back I mentioned moving to Micro.blog as my blogging service because I wanted static publishing and I just didn’t want to manage Hugo or another tool. Anywho, when I did the import from WordPress to Micro.blog if failed at some point so I only had a partial import. So I tried again and thought it ran to completion. I was wrong. It failed again.

After poking around I realized I only have posts from 2019 and the archive page is broken.

I am frustrated by this but willing to accept this shortcoming if I can eventually get my entire blogging history pulled into Micro.blog. Heck I’m even considering importing my entire Blogger history from 2001-2009 just to have it in a single repository.

I’m going to give it another go soon and see if I can get it pulled in. If that fails I’m going to see if Manton has any further ideas about how to get my WordPress content in a form I could push into Micro.blog. Even if I have to convert the WordPress export file to something better for Micro.blog I’m willing to give it a go. It would be really nice if I could put it into a JSON format Micro.blog would accept as an import format it can deal with.

Anyway. That’s the sad state of my blog today. Hopefully I can get it fixed, soon.

If I can’t get it sorted I will consider moving back to self hosted WordPress and call it good enough.

Welp, it’s only a matter of time before my wife switches back to an iPhone SE. It’s smaller and uses Touch ID, which she’s a fan of.

Someone forgot to tell Spring it’s time to come out. I’m a west coast boy so this snow in April stuff doesn’t compute. ❄️

Made our first ever pizzas last night. They were great! 🍕

I’m an impostor

Today is one of those days I question my ability or usefulness as a software developer.

It seems like 10-year olds are creating stunning applications and web sites and here I sit, two year old simple RSS reader that hasn’t shipped.

I’m struggling with the idea of not shipping the Mac version so I can start work on the application I’ve wanted to write for years and years. I’ve put that app off for so long I probably could’ve shipped it if I’d been dedicated to it for the last ten years.

I started Stream because I wanted a simple project to work on. Simple. Two years later. Still not finished.

I’ve predicted it’ll take at least 10-years to complete the thing I really want to do.

Another point to make. I’m so happy and excited to work on my own projects. It’s the type of excitement I had as a youngster. I couldn’t wait to get to work. I’d arrive about 6:30AM and work until 4PM. Day in and day out.

If only I had that kind of time for my personal projects.

I now have OPML import and export code in Stream. My big challenge now is where to put it in the UI?

Selfie I took 19-years ago in Oslo, Norway.

Yes, I want this

Daniel Gauthier: “From the moment you decided to get into iOS development, your career has been coloured by this vague idea that true success in this industry is nearly or completely single-handedly building something that grabs people’s attention. At the end of it all, you don’t just want to be “[Your Name Here]”. No, at the pinnacle of this climb, you want to be known as “[Your Name Here], creator of [Your Brilliant and Beloved App]”. Of course, rationally, you know there are loads of people who are living successful and fulfilling careers as employees at great companies, but a big part of you still feels that, as someone who can competently design and build software, you are uniquely positioned to create your own life’s work. That’s what you’ve been led to believe, anyway. And isn’t that the dream? Wouldn’t it be a shame not to try? You’re tired of deferring your dreams to your future self; it’s time to act!”

This is how I’ve felt for a decade, at least. A couple years back a friend transferred the code for his blogging application to me. I thought “This is it!" I’m going to get to work on an application loved by many and make my way into the indie development scene. Oh, and yes, I’m going to make a living doing it. Along the way I realized how much work it was going to be. After chatting with folks on Slack and other places I decided I should do something small. Something that I could complete in a short amount of time to prove to myself I could pull it off.

Here I sit. Two years later with Stream, my Twitter-like feed reader, about 80% complete. Oh, and I only have the iOS version that far along. The Mac version has a shared core but the UI is just a shell. After missing many self imposed deadlines, a change is jobs, and a move from California to Virginia, I’m finally back to work on it and I’ve made some good headway. But, then I kind of need to do the Mac version, right? Well, maybe not.

As much as I’d love to do the Mac version I may set that aside in favor of doing the thing I’ve always truly wanted to do: a diagramming tool. You see, I worked on a great Windows drawing and diagramming application; Visio. I had the pleasure of working with some amazing people for 10-years, over two separate stint with the company. I still miss the people and the product to this very day. It was the best time of my working life, but I digress.

On to the what I’m trying to decide. Do I finish off the Mac version of Stream or do I move ahead with my lifes dream of building a cross platform drawing and diagramming tool? Yes, you read that right, I want it to be cross platform. The idea would be to ship it on iPad first followed by Mac and Windows. My estimate, given the time I have to work on it at home, and how slowly I code, comes in at around 10-years time. Who wants to wait 10-years to complete a project? I don’t really want to but if I want to pull this off I have to put my head down and commit to it. Hell, there’s a chance desktop software will no longer exist in 10-years time. It may all be web stuff (ack!)

When I read Daniel’s piece I said “Yeah, that’s me.” It’s been me for well over a decade. I’ve sat on my butt dreaming about it but never writing a single line of code to pull it off.

I’ve discussed this with my wife over and over and over. I’d love to quit my day job and focus my efforts on my dream. That can’t happen, but I can shift my focus to begin working on the app of my dreams.

Here’s hoping I can get my act together. This is my retirement plan, writing and supporting an application until I drop dead behind the keyboard.

<img border=“0” src=“https://static.fahrni.me/misc/flowers.gif" class=“center” alt=“A wonderful bouquet of flowers.”/>

I’m not going back to the office until corona virus cools off for a while.

I’m grateful I work for a company that’s allowing employees to work from home when they feel the need to.

I felt that need today.

Stream Features and Bug Reporting

I Love RSS!Open Stream for iOS issues, if you’re interested. I’d imagine some of these will miss the 1.0 cut.

Please add anything you’d like to see or report a bug. I will look through everything reported and will decide what release it should go into or if I’ll do it at all.

I’ve been able to pick up the pace recently, just a bit. It still feels like I have a long way to go, but I do like that I’ve made quite a bit of progress with the last two BETA builds.

I have some bug fixes coming in the next build but I need to work through some UI improvements before doing it.

Watch this space.

Current iOS springboard.

Just wanted you two to know MB feeds look good in my upcoming feed reader: Stream. It’s been a long time in coming - and still needs work - but it’s stable and useful today. @manton @macgenie

I expect WWDC will be canceled this year over Coronavirus fears.

I’m just a weird dude. I now want a 2013 Mac Pro, because reasons.

Drafting posts for Micro.blog

Since switching to Micro.blog as the publishing system for my weblog I’ve been on the hunt for a good way to write posts in a draft form. I tried Bear and I love how it works, it’s absolutely beautiful. I was really close to purchasing the yearly subscription, then I realized I’m paying for Evernote.

I’m really torn. Both applications sync, both have text editors, but I use Evernote for clipping web pages and organizing by categories and tags. As far as I’m aware Bear doesn’t have anything comparable?

I didn’t realize sync was going to be so important to me. I guess I was spoiled by WordPress. I could start a post and revisit it. Micro.blog doesn’t have such a thing but I have a need to start on my iPhone and finish on my Mac or vice-versa. Update: Micro.blog does support drafts. Thanks, Mitch! If MarsEdit had an iOS version I’d definitely consider pulling the trigger on Mac and iOS versions.

If you’re using Bear or Evernote I’d love to know how you use them. If you have a different solution please share that.

Rose

Anyone know if Apple developed TV for Roku in house? It’s not up to what I would consider Apple standards. It buffers and stutters, a lot. I suppose it could be their streaming backend? Do they do it themselves or use another service for that? 🤔

Hope is fading.

From a co-worker on Slack: “The entire internet is held together with wet string and carefully arranged paper clips.” Truer words were never spoken. 😀

Developer Confessions

I’ve been an iOS Developer for just over 10 years now - 30 years of professional experience overall - and I still suck at Interface Builder and Auto Layout. 🤪

Stream Update

I’ve been able to work a little bit on my beloved side project, Stream. For those not following along, or those that have forgotten, Stream is my Twitter-like News Reader.

Life changed pretty dramatically for is over the past nine months or so. Our daughter, grand daughter, and son-in-law moved to the east coast. Kim and I had a two year plan in place to move back east so we could be near them, living in California doesn’t make for easy day trips to visit when we want. That is another story all together. Suffice it to say serendipity struck and we moved the timeline up, way up.

We arrived in Virginia November, 1 and moved into our new home. Yes, it was extremely fast. All the work surrounding the move meant I really needed to focus on all things related to the move and let the side project sit. Now that we’re settled in our home and I’m settled in at work I finally got Stream out of moth balls and worked on it a bit.

Crashing Sucks

I had sent out a few TestFlight builds to folks but I knew where the ugly parts of the code were. I pushed it out way too soon, I realized that after a couple builds. I should have finished all features before user testing became a thing. Live and learn.

I found two things that bugged me more than anything else; the app would crash on occasion and syncing feeds was way too slow.

A couple weekends back I was able to plant myself on the couch and work through the performance issue and the crasher. I can thank Brent Simmons for the most significant performance wins. His blog posts, tweets, and Slack messages about feed reading and general Cocoa Framework oddities have proven invaluable. I only hope I can pay his kindness forward at some point. Thanks, Brent.

Ok, on with the wins. The first two tips I picked up.

Handle 304 HTTP responses

This one was an instant performance boost if servers hosting feeds actually return it. If you’re making 100 network requests to update your 100 feeds it can be kind of slow to parse all the resulting data. But what it you don’t need to parse the results? Right! The data you don’t have to parse makes your code faster. Imagine that!

Create a hash of the response data

So, what if you ask for feed data and it hasn’t changed but the server doesn’t return a 304 indicating it hasn’t changed? Well, you create a hash of the response data and keep it for later. Next time you grab the feed, hash it and compare it to the hash you created last time.

One more thing

After reading Brent’s piece about KVO crashes I decided to stop using NSOperation and NSOperationQueue. I was only using it so I could create dependencies that would allow me to have a final operation that updated the UI’s data source. Now I don’t do that. I just rely on URLSession and URLRequest to do the job.

Not done

I feel a lot better about the performance but I know there will be more changes down the road. Moving forward I need to focus my effort on finishing the UI and adding some niceties like a share extension to add a feed and things like dark mode support. There are other things I’d like to do as well. Least of which is building a Stream Mac App. 😀

I’ve adjusted my personal expectations to ship before WWDC this year. Let’s see if I can make it.