upbeat.it

by Cesare Rocchi

Celebration Test #1

One of the three words I picked for 2016 is celebrate. Let’s start practicing :)

Today was a kind of down day, in which I couldn’t get a lot done. I tried to work in first gear mode. I worked on the core of a new feature, then I had a walk and thought about my long todo list. Suddenly two neurons collided in my brain and I wondered: how is my done list?

When I got back from the walk I sifted through the log of activities in AppVersion, and it was a bit messy. But I saw I did a lot. Then I looked through the Trello cards of Podrover. It turns out that the done list is longer that the todo list, at the moment.

So I put together a changelog page for Podrover which, is good practice, helps demonstrating my commitment, and also bumps my morale.

Sounds like a win-win-win situation :)

Coworking

My wife had a great idea for Christmas. Her gift for me was a monthly subscription to a local coworking. We talked pretty often about my difficulties of working from home, especially when the schedule of our kids was pretty hectic. Her gift was perfect.

I admit I was a bit skeptical. For a number of reasons my main machine is now a Mac Mini, which I wouldn’t move back and forth. My secondary machine is a Mac Book Air 11”, great for conferences but not ideal for working. Or so I thought. The second concern was related to the commute. It’s around twenty minutes, so forty minutes a day.

I couldn’t be more wrong about my concerns.

The commute turned out to be a chance to discover and listen to new podcasts, which I’d have archived had I worked from home. And the less powerful machine? Turned out to be a great means to stay focused on one task at a time.

The best part is that the coworking is right near the sea, and I love the sea during winter. I had so many inspiring walks.

I am probably going to renew the membership, even if I will go just once a week. It’s good to change air sometimes.

Software Updates Are Complicated

If you think waiting for Apple to approve a new version of your App is nerve-racking you should listen to Episode 4 of the Code Breaker. It’s an interesting podcast that I recently discovered and season 1 is all about the question “Is it evil?”.

There’s a little segment in which they interview the folks behind Instapaper to talk about software updates in the Apple land.

But the best part is when they talk about the NASA that screwed something up in a software update to the International Space Station. The ISS orbits Earth about every 90 minutes. Can you imagine debugging a crucial problem having just a few minutes to communicate and then wait 90 minutes for the next chance to communicate? That’s nerve-racking! An Xcode crash is nothing compare to that :)

Give it a listen, I found the stories very fascinating.

P.S. Fun fact: the software running on ISS is made of around 4.5M lines of code.

Clean Networking Code

I can’t help but think that my networking code was cleaner before the introduction of blocks, before 2010. That doesn’t mean my networking code after that date sucks though :)

One of the things I liked the most when I discovered Objective-c and the Cocoa frameworks was the delegate pattern. I saw it and it clicked, just like that. To give you a bit of context I was coming from the world of Java, writing code to generate factories that in turn generated factories. Not exactly fun.

One thing that bothers me when I write code is switching between files. When I want to quickly make something that works, I put everything in a class. When it works as expected I refactor and split responsibilities into classes. I feel the result is more clear when I follow that process.

When I learned the delegate, keeping three files open wasn’t an annoyance, because the pattern was so clear to me. Object A asks Object B to do something, and when B is done it will tell A. And the cool part is that I can define the “vocabulary” that A and B use to communicate. Nitpicking, the only thing to pay attention to is the way objects are connected, weakly or strongly. But it is usually declared in one place, a property, easy to find and change if needed.

When blocks were introduced, everybody celebrated the good news, in spite of their sometimes complicated syntax. I can’t deny that blocks are easy to read. Object A calls a method of B and right from A I can see how the result returned by B is manipulated. I felt like Objective-c became a bit more Javascript-y. But this came with a drawback, the case of self.

With delegates you had just one way to screw up with the memory, when you declared the weak or strong ownership. Whereas within blocks, every time you use self, you have a chance to create a leak. I tend to like patterns when there are fewer things to remember and fewer chances to screw up. To provide a bit of context on this I am mostly a Product Programmer so code is a means to build something, the less attention I put on the means, the more I can put on the product.

A few days ago Marcus Zarra posted an interesting design for networking code, that clicked with me much like the delegate pattern did. It’s based on NSOperation. I was already planning to adopt the approach suggested by Apple in the Advanced NSOperation talk last year, but the one of Marcus is even more clear. In both cases network operations are small units, confined and testable. A design that fosters composability, which I like a lot.

I plan to build the networking code for the Podrover iOS app adopting this approach. It’s gonna be fun.

The Fallacy of Almost Free

The entry level tier of Parse was so generous that it felt like the service was free. I think this has led some developer to reason along the lines of:

I don’t pay for that service, so I don’t need to charge for my app.

Or

I can charge less, because I don’t have recurring costs for the servers.

That is unhealthy. Not just for developers but also for users. There’s probably gonna be some bending over backwards to port an app running on Parse somewhere else, with potential interruptions for the customers.

I hope that this misadventure is a wake up call for everybody, including me, to raise the bar and aim at a healthier ecosystem.

A few years ago I had a presentation titled “Choosing a backend for your mobile app: don’t roll the dice”. Since then the list of alternatives has grown like crazy.

If I had to pick I’d look for a sustainable one, that has been around for a few years. I’d look at their blog and try to read between the lines the message “we are here to stay”. It’s more relevant than having an SDK for the latest-and-greatest-cool-programming-language.

Cocoaconf Podcast Season 3 Is Here

I am honored to be the new host of the Cocoaconf Podcast. The first episode of Season 3 is out.

I had the immense pleasure to interview Brent Simmons. I had a lot of fun going back in time and walking with Brent along the streets he used to walk before the advent of the App Store.

At some point we stopped for a beer and the conversation got even more interesting.

Still here? Go listen!

Data Leak as Pipe Leak

I don’t know about you but when we have some kind of problem at our house we call somebody to take care of it. I can venture in plastering and painting walls but if there’s a pipe leaking I call the plumber. If some socket doesn’t work I call the electrician.

If things go on like this I feel like everybody will soon need an IT service that you can call for security related problems much like you call the plumber when a pipe is leaky.

Anything with a WiFi enabled chip connected to your DSL can send out something and I am honestly concerned. I wouldn’t be surprised to hear the news that the audio of people having sex on the couch was found on the servers of some corporation selling devices that you can pilot via voice. The fact that just by searching you can stumble on snaps taken from a camera feed placed in the room of a baby is creepy to say the least. While you can easily notice if a pipe leaks, you might not notice that a device that you bought to simplify your life leaks information out in the public. And when you notice it might be too late.

When we bought a TV I explicitly looked for one without WiFi. Yes, our couch might have witnessed some intercourse :)

I trust Apple devices because so far they have been very clear about their approach to privacy and we didn’t witness many screw ups. We have a few Raspberry PIs which are connected to the DSL via a special and very limited WiFi connection. None of them stores credentials for streaming services. I try very hard to not buy devices off the shelf without knowing what they send out and how, but sometimes I feel like I am paddling upstream, it takes a lot of effort.

As much as I’d like to order something using my voice while I sit on an armchair I am pretty sure an Amazon Echo is not gonna be part of our furniture.

Interview With Drew Wilson

It was fun interviewing Drew Wilson. My favorite part is:

Learning to code totally changed my life; being able to fully realize my designs all by myself was amazing. I immediately started building my own ideas.

Here is the full interview.

Three Words for 2016

I am picking my three words for 2016. The task sounded so easy, it’s just three words after all. For me it wasn’t. While I didn’t devote long sessions to think about it, I took a lot of micro moments to mull over it. Here they are.

Thank

As in say “thank you” more often and don’t think people owe me. How many times I found something done and I thought it was just owed? Many. When I come back from conferences my wife comes to pick me up at the train station. I think I never said thanks for that. Sure, maybe it’s “normal” that somebody you are close to comes to pick you up when you are back from a trip. Whoever comes, I’ll say “thank you”, just because they don’t have to. What about something we all benefit from, like open source software. I run scripts that pull in libraries, frameworks, operative systems. Some were written a long time ago, some others conceived by people not with us anymore. I build on top of these tools. Not only I didn’t say a lot of thanks, but I complained when they didn’t work as expected. Nobody owes me or you, any of that code and tools. And I feel that a “thank you” in this blog post is not enough at all. So I mulling over a few concepts to build something that fosters saying “thanks” to the authors of open source software.

Build

I confess that this is to feed my inner beast. I believe I couldn’t live without this word. This is the word that is gonna be with me for a long time. If I don’t build I am not happy. If I don’t make something I don’t feel well. It’s probably a disease, I just don’t know its name :) As for the why:

  • The joy of helping somebody to save time, stress or both.
  • The thrill of shipping something.
  • The fulfilment when I can say “I made this”

I look at the walls, doors and windows in my house and I am proud to say I painted them. I look at the trees in my garden and I feel good when I think I planted and watered them with the help of my kids. The cabinet below our TV? I made it with my father. We designed it, we built it, we painted it. I enjoyed every second of it. And I don’t even watch TV :) Last year I built AppVersion and Podrover, which I am launching soon. I enjoyed every single piece of code pushed to the production servers, in spite of the [issues that you need to monitor when you run services]. I have big plans for 2016. Nothing specific to declare. I just know I can’t ignore the inner beast that pushes me to make and ship.

Celebrate

This is to lock myself in. I picked this word because I usually don’t celebrate. Maybe it’s related the inner beast above, so angry to move to the next thing instead of recognizing achievements. It has also to do with my obsession against ceremonies. But sometimes a ceremony is a perfect fit. Some of my friends go out for dinner after shipping an app. A simple dinner, not a bachelor party with fireworks, but still a perfect occasion to celebrate and reflect on a milestone. It’s not about what you do to celebrate. It could even be popping a beer with your spouse in the living room. It’s about taking the time to stop and say:

  • Thank you for supporting me through this hectic times
  • I have achieved this
  • I want you to be part of it and celebrate with me

And I should not forget to be ready to take the time when my partner/friend wants to celebrate his/her achievements. It’s as much important, if not more.

This is the first time I adopt this strategy to pick just three words to live by during the year. I am excited about it. And you? What are your three words?

When I Forget to Celebrate

Only when I stop and really think about it I recognize I made steps in the direction I wanted to. But I don’t stop to celebrate often.

One year ago I started drinking a glass of water as the first thing in the morning. It helps me a lot, much more than coffee, which I drink after. I do it every single morning. And every single morning I forget to celebrate.

In December I promised I’d blog every week day until Xmas. I did it. And I forgot to celebrate. Up until now :)

I admit I am not great at celebrating my achievements. I enjoy the moment just … for a moment, then I move on towards the next goal.

I should stop more, to celebrate my achievements, big or small. This reflection gives me the opportunity to lock myself in. I am picking my three words for 2016. I already have two and I wasn’t sure about the third. It’s gonna be “Celebrate”.

Tomorrow I’ll write about the other two.