Road Trip - Day 5

I wake up to that disgusting cigarette smell, which motivates to get the hell out of this place as quickly as possible. I take a shower, no breakfast, I pack, and get out of the room to checkout. I see through a window a large indoor room, that kinda looks like it could be used for meetings, but it’s filled with plenty of furniture all over the place, lots of junk. This motel is really going down. I get in the car after checking out, then search for a nice coffee shop on my phone, I need comfort. I find one that’s on the other side of the city, on my way West.

I go back on the highway to cross the city to get to the coffee shop. There are hot air balloons in the sky North-West outside of the city, it’s pretty cool. I reach the coffee shop, called Prismatic Coffee. It’s in a neighbourhood of new condos, all the buildings around look recent. The place looks new too. I get an Americano and chat with the waitress. She tells me the hot air balloons are out every morning, whenever the weather allows it. The coffee is good, and it reconciles me with Albuquerque. I ask the waitress to put some hot water in my thermos so I can make some coffee with my Aeropress later, and I take off, heading towards Flagstaff, Arizona.

So back on Highway 40. The scenery looks better with mountains that start red at the bottom and are yellow on top. Again, it feels like a western movie. It then evolves a bit, on my right mountains are dry and red, on my left they’re covered with bushes and green. Again, I see long trains on the side, makes me think of my friend who came to hate try after a job she’s done that turned sour. I wind the clock back again as I enter Arizona, Pacific Time! There’s a tall mountain with snow on top in the distance, I think this is where Flagstaff is. I almost arrive in the city when I see the first sign to Los Angeles, I’m getting close!

I have lunch at Red Curry Vegan Kitchen. I have green curry with vegetable and rice. It’s good, spicy as I like it. After the McDonald’s incident, I’m happy that I avoided fast food restaurants, and managed eat well during the trip. It’s 1pm, and I should get going to see the Grand Canyon now. It takes over an hour and a half to get there. I make a quick stop to fill up the tank as I leave the city.

The road to the Grand Canyon is nice. It starts in a pine forest, there’s still snow on the ground, but not on the road fortunately! Then the road goes through a large open valley with tall yellow grass and snowy mountains on each side. Then back in the forest as I approach the Grand Canyon park. I haven’t had coffee yet and I feel it. I still have the hot water in the thermos, I just need to find a spot to make it. As I’m getting closer, there’s a sign on the side of the road that says there’s a wait time two hours. What?! I’m thinking about bailing. I stop at the visitor center to ask about it and the lady says it’s much better now and it’s probably about 20 minutes. So I go. It ended up being pretty fast. Also luckily I was in the fastest lane at the toll booth. There are more tourists than the last time I was here, but it’s not too bad. Picnic tables are spread around the parking lot, I can finally make coffee! Relief!

The Grand Canyon is still grand! Huge! We’re tiny. I really want to come back during a warmer season and hike down. I take photos, chat with other tourists, and take the time to appreciate the view. The sun is starting to set and the light in the canyon starts to fade, so I get back in the car to drive back to Flagstaff. The road from Flagstaff to the Grand Canyon makes a kind of loop. So you can get there from one side and leave from the other. Which is what I intend to do. I arrived from the West and will leave from the East. I guess I should have done it the other way to see the sunset but I don’t want to go back from the same road.

As I go on the East part, I stop at several more spots that offer nice views of the canyon. It’s still huge. The road goes down slowly and winding, it’s fun. I’m back in the city and the night has come down. I need to find a place to stay for the night. I drive on Route 66 to check on the various motels, I don’t want to repeat last night’s experience! I find one that looks good, so I stop and book it. The room has been renovated recently, it’s nice. And no cigarette smell!

Flagstaff is a major train hub, and a lot of cargo trains cross the city. And historically the train tracks are along Route 66, or is it the other way around? And because the motel I stay in is on Route 66, I hear trains. They’re loud and I hope they won’t wake me up in the middle of the night. I don’t have diner again as I’m not hungry. I get to bed around 10pm, today started not so well but ended up great!

Road Trip - Day 4

I wake up, and it’s already 7:22! Right, we lost an hour last night with daylight saving. Okay, I have a lot of driving today! This is the day I’m the least excited about as I’ll be going through the flyover states. I have the usual yogurt and oats, shower that works this time, checkout and take off.

But first, I stop by a Walmart right in front of the motel. I wanna see if I can return that debit card. Unfortunately they don’t refund them. I’m not surprised and was expecting it. The lady says I can try calling the assistance number. I’ll do it later. And if this doesn’t work, I guess I’ll have to set it up. To be continued…

I refuel, and go back on the highway. The landscape is boring, the sky is grey, and there are still lots of trucks on the road. I’m bored already. I could use some company… I continue to listen to the podcast I’ve been catching up. It’s more interesting than the drive so far today. I’m going through a couple of tolls, which are taking a toll (pun intended) on my cash reserves. I’ll have to figure this debit card soon.

I enter the state of Oklahoma, it bring me back memories from my last road trip here in 2013. The only thing I remembered from the state is the bright orange dirt. I make a stop in Oklahoma City to have lunch at The Loaded Bowl, a vegetarian restaurant not far from the highway. So far I’ve managed to find healthy restaurants while avoiding long detours. I try to find a parking space near the restaurant, but all spots are taken. I end up finding a small one and notice a flower pot at the end, so I get in backwards slowly and boom, I hit the pot! Damn! I go check it and there are plenty of scratches on the plastic bumper. I’m mad. I have a fancy luxury car, the base model that has plenty of nice things, but no rear-view camera or sensors! It should be standard!

Anyway, I go to the restaurant, there’s a no-gun sign on the door, which reminds me that weapons are legal in this state. I hate this, it makes me feel unsafe. One of the dumbest thing in the US. I have a breakfast burrito at the restaurant, it’s good and appeases me.

Back on the road again, I can’t wait to leave OKC and leave that flower pot behind. Thirty minutes after I leave the city, it’s starts raining. Then it gets foggy, the visibility isn’t great and I don’t see very far on the flat country. The windmills’ motors are hidden in the low-ceiling fog, I can only see the blades as they go down, then they disappear in the fog as they go up. Funny! The fog dissipates, and I finally see the red dirt. It’s not as bright as last time because of the grey sky. I’m bored again, and listen to more of the podcast until I finally catch everything up, no more episodes to listen to.

I enter Texas and remember that on my last road trip I stopped by the Midpoint Cafe, which is halfway on Route 66. Unfortunately it was closed 7 years ago, and I suspect it will be this time again. And it is. Mom calls as I’m there, we talk a bit and I’m back on the road. The landscape starts to get less flat, less boring. I enter New Mexico, and it’s raining again. And I’m bored again. I call my best friend as I keep driving. It’s nice to talk a bit and catch up, I feel less lonely. We hang up and I feel like I have a second wind. I make a quick stop to fill up the tank and decide I’ll reach Albuquerque tonight. It’s far, but it’s Mountain Time in New Mexico, so I wound the clock back again today.

The landscape is getting much better, with large desert valleys like we see in western movies. There’s a 100-car train going along the highway, it adds to the charm of the scenery. I wish I could take pictures, but can’t stop on the highway. The sky is getting darker as the sun is setting. However, as I enter a new large valley, the horizon looks clear and there’s a beautiful sunset in the back. It’s like the end of the tunnel, the light that guides me West. The colours are gorgeous. First it looks like there’s a fire in the horizon, then the colours turn from orange/pink to yellow/blue, until the night sets in. Still a lot of trucks on the road. We’re all going fast.

The road goes downhill as I approach Albuquerque. Again, I bet the scenery is beautiful but can’t see anything in the dark. I finally arrive at a motel near the highway. My credit card is denied, twice. Mmmh… I use another one, which works. I hope that credit card incident is a one-off. If it happens tomorrow, I guess I’ll have to call the credit card company. I’m tired and don’t want to worry about it tonight. I get in the room, it’s spacious, noisy (the highway), and smells like cigarette although they have a no-smoking policy. I bet the motel is old enough that people were allowed to smoke and it still smells.

I brush my teeth, the sink get clogged in no time. I’m too tired to go complain in the lobby, I wanna sleep, I’m tired. I turn the lights off, get into bed, then someone knocks hard on the door. What again?! I go look through the peephole, someone with their hat reversed is walking by, not really looking at the door. Maybe it was a mistake. I get back into thinking about that gun thing from earlier, maybe that guy is a dealer? This cheap motel that now makes me think it’s a shady place. I’m considering leaving and finding another place, but I refuse to worry about all this, I’m too tired, I need to sleep.

Road Trip - Day 3

I wake up, it’s 6:30am, I slept well. I do some stretches and push-ups, then go to the shower. I can’t figure out how to get the water come out of the shower head! So I use the water as it comes out of the bath’s tap. Old school!

I have more of the yogurt and oats for breakfast. I make coffee, pack my things, checkout and bring my stuff to the car, which is frosty. There’s a beautiful clear blue sky but it’s cold this morning. I remove the ice from the car’s windows, and quickly get in to warm up.

I’m heading towards the Indianapolis Motor Speedway. I’ve watched the famous 500 miles race several times, so I’m looking forward to seeing the track! As I get closer, I’m surprised that I can’t see the grandstands. With its banking, the circuit should stand tall, but I can’t see it even just a block away. When it’s finally in sight, I’m surprised that it isn’t that tall. I go through the tunnel under the track to get to the museum. There, I buy a ticket to get on a bus that drives around the track. I visit the museum as I wait for the bus to start boarding. There are a lot of cars that won the 500 miles, helmets of drivers who raced here, and the history of the track and races. They call for boarding the bus. I get in and we get started. It’s slow. We go on the track, the banking are definitely not steep at all! I went to racetracks that have much steeper ones. The bus stops at the famous “Yard of Bricks” at the starting line, so we can take photos. The tradition is that race winners kiss the bricks. I didn’t win a race here so I feel I don’t get to kiss the bricks.

Alright, it’s all fun, but I need to get going. Direction St Louis, Missouri, to see the Gateway Arch. I make a stop on the way in Effingham, Illinois, to have lunch. I found this nice corner restaurant called Joe Sippers. It’s a nice cafe that serves vegetarian food. I have a wrap. Several families stop by, looks like a popular place to go on a beautiful Saturday. I get back to the car, drink some of the coffee I made this morning, and go back on the road.

I arrive in St Louis around 2:30pm. Seems early? That’s because I moved the clock backwards as I am now on the Central Time timezone. I park near the arch, and get to the monument. It’s taller than I expected. The clear blue sky is perfect to take photos of it! Because it’s a nice Saturday afternoon, there are a fair amount of tourists, many teenagers on dates. I buy a ticket to go on top of the arch. The ascension is very interesting. Because it’s an arch, the lift can go straight, obviously. They built trams on each side that go to the top. The trams are made of 8 capsules each. The capsules swing as they ascend, like a ferris wheel. Genius! The capsules are tiny though, not recommended if you’re tall and/or claustrophobic. They can hold 5 people. The view on top is not very exciting, maybe because it’s still winter and there’s a lack of green trees and grass, or maybe because the city just doesn’t look great. I was more interested by the actual arch’s architecture and the trams!

I leave the arch around 4:30pm, back to the car. I research how far I could go, Springfield seems reasonable so I book a motel there. As I leave St Louis, I get stuck in a massive traffic jam on the highway, which ends up being the worst I have ever been in in my life. After an hour, I am finally back to a normal speed. There are a lot of trucks on the road, my mom would be horrified, she hates trucks taking over the country roads in France. The night comes down, I’m still driving. It looks like we’re going through hills, and I wish it was day time because I suspect the landscape is nice.

I finally arrive at the motel in Springfield. There are loud American muscle cars having fun on the road, I hope it won’t be like that all night. I get in the room, I’m exhausted, it’s 9:30pm, I didn’t have diner and don’t feel like going out to eat something. I’m not hungry anyway. I have some pita bread that I brought as snack, that’s good enough. I watch yesterday’s Lakers game against Milwaukee, the 2 best teams in the league, possibly a preview of the NBA Finals. The Lakers win, I can sleep happy.

Road Trip - Day 2

I wake up to the lovely sound of geese. Are they migrating North? I check the time, 4:47am. Damn! That’s too early, and I already feel very much awake! It’s supposed to snow a bit later this morning, so let’s just get up and drive further to avoid it.

I shower, pack, checkout, and leave. I need to fill up the tank and luckily there are plenty of gas stations around. I fill up, then go to a Walmart nearby so get some yogurt and a prepaid credit card.

You know when you get cash at the ATM with your credit card, the credit card company charges crazy interests? My banker recommended that I get a prepaid card as it’s an easy way to get cash at the ATM. The lady asks me how much I want to put on the card. $200 should be enough cash. Turns out you need to pay with a debit card to buy these kind of cards, can’t use a credit card. I don’t think much and pay with my debit card. As I leave I realize that was a dumb move. If I used my debit card to pay for it, I could just get cash at the ATM with my debit card. Facepalm!

I get back to the car, read the instructions to activate that prepaid card, sounds way too complicated, I start to regret this. $200 dammit! I’ll check it out this evening.

I get some oats that I had packed in Montreal, and mix them in the yogurt, and have my breakfast in the car!

Last night before going to bed, I looked for a place in Columbus where I could eat healthy food, I want to avoid fast food as much as possible. I found a vegan place, which doesn’t makes a big detour, so I set the directions to it, and start driving.

About an hour later, I feel the lack of sleep hitting. I need coffee. Good thing is I brought ground coffee, and an Aeropress for the trip. I filled up my thermos with hot water when I checked out earlier, so now I just need an appropriate place to stop to make the coffee.

I’m driving on a road the goes along Lake Erie, the lake looks massive, but the trees are still leafless and the sky is gray. Not so pretty. Looking at the names of the cities I cross, I feel like I’m going on a European tour. Hamburg, Dunkirk, Barcelona, Sevilla, Geneva, London.

I get back on the highway and enter Pennsylvania. There’s a rest stop, I can finally make my coffee! I find a table and make my coffee near a woman who is training someone to fill up vending machines. I tell her I’m making coffee, that I like good coffee.

“Oh it’s like my brother, he always goes to Starbucks!”

I say nothing. (But in my head I’m thinking “Starbucks is not good coffee., that’s why I make my own.”)

I have a few sips of this delicious beverage and keep going towards Columbus.

The drive is not fun, it rains, sometimes sleet, it’s windy at times too. The landscape is still flat, still with leafless trees.

I arrive at Porter’s Cafe in Columbus at 1pm. The neighbourhood doesn’t look too nice, but the place has the classic vegan/healthy vibe. I have the “Super Power Wrap”, which has falafel, guacamole and the usual vegan greens. It’s delicious, and I’m glad to have found this place.

As I’m eating, I look for what to do next. I want to visit the Indianapolis Motor Speedway Museum, but I won’t get there before it closes today. I’m thinking I could just drive to Indianapolis, find a hotel near the track and visit the museum tomorrow morning. Indianapolis isn’t too far, so I should have time to rest a bit in the evening. I need to rest. I book a hotel, and off I go!

The drive is the same as in the morning: rain, sleet, wind. The rain stops past Springfield, Ohio, but the wind is still present and the sky still gray, and the trees still leafless. Still, no rain is an improvement!

I arrive at the hotel in Indianapolis around 5pm. There's a TV in the lobby that broadcasts news about the spread of the coronavirus, someone is watching. I got to my room and rest for an hour, then look for a place to eat. There’s an Ethiopian restaurant 5 minutes away, I never had that kind of cuisine, that’s exciting!

Maps makes me go through a residential neighbourhood that looks sketchy, my Audi definitely doesn’t belong here. I arrive at the restaurant, the car still doesn’t belong, I’m hoping no-one will do something to it, but refuse to stress about it, there’s no reason to think people have bad intentions.

I get in the restaurant, which looks charming. It has an African vibe, and not a fake one. I have no idea what the food looks like and ask the waitress for a recommendation. I don’t really understand what she recommended, but nodded, and said I like spicy. I’m not picky and I’m sure whatever she brings will be good.

The service is long, and I’m getting hungry. Finally she arrives with a large plate. There’s some kind of crepe at the bottom, which is topped with marinated shrimps, and various assortments: lentils, beans, lettuce and tomato… She brings a smaller plate with what looks like thick cloth napkins, the same colour as the crepe. “It’s finger food.”, she says as she gets back to the kitchen.

I pick one of the napkins up and realize it’s more of that crepe. It’s spongy and thick. I guess I use it to pick stuff from the plate. It’s delicious, spicy but not too much, plenty of flavours, and the texture of this crepe is fun! As the waitress makes the usual quick “is this okay?” check, I ask her about the crepe, she says it’s a flat bread call injera, cooked on clay. I’m fascinated.

I’m almost done eating when I realize I ate way too fast. I’m so full, can’t eat anymore, please don’t talk to me about food until tomorrow!

I pay, and leave. The car is still in the parking lot, good. Glad I didn’t worry about it. I head back to the hotel, check some work updates, and get to bed, I need to sleep. It’s 9:30pm.

Road Trip - Day 1

2:42pm, I have just moved the car a few meters from its parking spot. “Let’s go!” I tell myself, ready for a 6-day road trip.

I don’t need music for now, I need to focus, I think while sipping coffee from the thermos. There’s more traffic than I expected on Montreal island at this time of day, no idea why but I’m going for the long run, so no need to worry.

30 minutes have passed and I need to pee already. Dammit! I just peed right before leaving. I hope it won’t be one of these trips where I need to take a pee break every hour! I won’t stop yet though, I want to leave Montreal island first, cross that milestone off the checklist.

I finally find an exit with a Tim Hortons close to the highway. I stop, go inside, someone’s already in the bathroom. I wait in line to buy something because I feel bad using the bathroom without being a customer. The door opens before I get a chance to place my order, I go pee, can’t wait. Relief!

I take two ‘Roussette au miel’, my favourite, and back in the car, back on the road, heading towards Toronto. But I’m not going to Toronto.

There are a lot of trucks on the road, everyone drives faster than the 100km/h limit, so I stay in the flow. The view along the road is boring, flat land with some leafless trees and patches of snow. Sometimes there’s a nice sight, but nothing very exciting.

I make a final stop in a rest area for another pee break before leaving the highway, direction the US border. I’m nervous every time I have to cross the US border. It’s the only country I’m always nervous getting in. I have no reason to worry, I’m a lucky white male, but we read so many bad stories that I’m always nervous.

“Hello sir! How are you today?”
“I’m great! Thank you!”, I answer, giving my passport to the border agent.
“Where are you going?”
“Los Angeles”
“Woah! What brings you there?”
“Yeah, long road trip. I’m visiting a friend.”
“How do you know him?”
“From France.”
“Is he an American citizen?”
“No, but he married an American lady.”
“How long are you going to be in the country?”
“A month.”
“When was the last time you were in the US?”
“Mmmmh… almost two years now.”
“Do you fly to Syracuse?”
“No, I usually go to New York City, my brother lives there.”
“Okay. Anything to declare? Food? Fruits? Vegetables?”
“I have snacks, but no fruit or vegetables.”
“Alright, have a good trip.”
“Thank you! Have a great evening!”

Phew! That went well! He was nice.

I’m crossing the few bridges over Thousand Islands, it’s a nice view as the sun is setting in my rear view mirror. I make a quick stop to let friends know I crossed the border. I can’t waste much time though, there’s still plenty of driving before I reach the hotel I booked. Over 3 hours, Maps says.

I follow the directions, as the night is coming down. Still a fair amount of trucks. Nothing to see, it’s dark.

It’s about time for diner as I reach Syracuse, and I just entered a toll highway. I don’t feel like leaving it, pay, and get back on it to pay again. I’m sure there will be a rest area with restaurants. And indeed, there’s one a few miles away, with a McDonald’s. Damn! I want to avoid McDonald’s! I’m thinking about waiting for the next rest area, but chances are the next fast food restaurant will be worse. Let’s play it safe, take a break and have “a delicious Big Mac”.

Diner over, I have a bit over 2 hours left to drive. That’s two hour-long podcast episodes, perfect!

I finally arrive at the Red Roof Inn in Hamburg, it’s 9:45pm. That was a good drive. I didn’t even fill up the tank! I get in the room, check my emails and work messages, read the news, brush my teeth, and go to bed.

Easy way to make more money

Yesterday I cancelled some insurance that I didn't need anymore. That's about $150 more in my bank account every month.

A couple of weeks ago I cancelled a few streaming services, that's another $25 per month.

A few months ago, I called my mobile carrier and managed to lower the price of my phone bill by $30.

If you add all of it, that's about $200 that I save every month compared to earlier this year. That's substantial.

You probably already know this, but these examples are a good reminder that the best way to increase our income is to cut expenses.

Bonus story: A couple of years ago, I had to be careful with my expenses, and tried to cut as many unnecessary things as possible. One of them was cookies, chips, sodas, and all other kinds of processed foods. I also reduced the size of my meals. Not only did I save money, but I also lost 15 pounds in 3 months!

I wake up when I wake up

One of the best things when I was freelancing was that I could wake up whenever I wanted. It doesn't mean I slept all mornings. I just stopped using an alarm clock. I'd naturally wake up at about the same time every day thanks to my body's internal clock rather than the dreading sound of an alarm.

One of the best things about working at Unsplash is that we manage our time however we want, as long as we complete our tasks in a reasonable time. So I can keep waking up without an alarm clock.

I use an alarm when I have something scheduled that I can't miss, but it's very occasional, no more than 10 times a year.

And in case you're wondering, I usually wake up between 6am and 7am.

10 years making iOS apps full time

This week I'm celebrating 10 years of making iOS apps. I don't know the exact day. I searched through my first projects, the oldest files date from March but I didn't use versioning back then and re-created projects from scratch quite often. The earliest 'proof' I have is a photo from February 13, 2009, when I created an account on the iPhone Developer Program.

I have been making apps full time since then. Just a couple of years after I started, people called me a senior developer, and it made me laugh because I didn't consider myself one. But I realized I was one of the few then who had worked full-time building apps when most developers were hobbyists, creating apps on their personal time while having different jobs.

It's been a fun 10 years, I worked on 31 apps, mostly as a freelance, and learned a ton from the many people. A big thank you to

  • Fred Brunel, for teaching me a ton about programming best practices, scoping projects, managing priorities, and shipping products.
  • Martin Dufort, for giving me a chance in the early days of iOS development, and for coining the term "Olislump."
  • Sam Vermette, for sharing your care for design and the awkward jokes, it was fun co-organizing CocoaHeads with you.
  • Hesam Hosseini, for the trust and respect you showed for me during the years we worked together.
  • Dan Robichaud, for showing me what it's like to work in a startup, and managing ever-changing priorities.
  • Luc Vandal, for your confidence in me, letting me work on your baby, Screens.
  • Adii Pienaar, I owe you more than you think, we still have a company together by the way.
  • John Mitchell, for showing me the business side of making apps, and how ruthless we should sometimes be.
  • Mikael Cho, Luke Chesser, and Steph Liverani for staying in touch all along my iOS developer career and giving me the opportunity to join the fantastic team at Unsplash.

Back on Ghost

This site is hosted on Ghost, a fantastic publishing platform, built by people with great values. I backed the project on Kickstarter almost 6 years ago and used it for several years. But I had to make budget cuts early 2017 and moved my site to a much cheaper DIY solution.

While that DIY solution was great for my wallet, it turned out to be quite complicated to write and publish content. So much that it discouraged me from writing. Many times, I thought about writing something, but the thought of going through this tedious process was enough just to give up.

I like to write and want to try more, and for the past couple of months, I considered moving the site back to Ghost. The price was what refrained me from moving forward. It's overpriced for my needs, but the thought of supporting this great team behind the project convinced me to pull the trigger yesterday.

It's changed a lot since the last time I used it, in a good way. The editor is a joy to use, and I'm very excited to be writing again!

We're all jerks sometimes

Yesterday I went with a friend in a neighbourhood I don’t know well. I parked the car in a snow-covered street, after we both checked the parking signage, and made sure it was okay to park there.

When we came back to the car, there was a ticket on the windshield; I was mad but pretty sure I would be able to contest it. As I was brushing off the snow from the car, I noticed I had parked in front of the driveway. I checked the ticket and yup, the description was right. I hadn’t seen that driveway when I parked, and clearly, I would have moved to another spot if I had.

I probably didn’t notice it because I was more focus on the signage (it’s a nightmare in Montreal), and it was all covered in snow, but these are not valid excuses, I should have paid attention. My friend told me she shared the blame, but while I appreciate the gesture, I drove the car, so I was in charge. It’s my job to pay attention, not hers.

I was quite angry at myself because I always to try to be nice to people and make it easy for everyone around me, but this time I was the jerk. I felt like this one wrong move on my part ruined all the moments I tried to be nice. I was angry and ashamed.

That’s a reminder that when I see a stranger misbehave, I shouldn’t think they’re a jerk/moron/dummy. We can’t make quick assumptions about people based on a single poor action from their part without getting more context. We’re all jerks sometimes.

Car dealerships' missed opportunity

Earlier this week, I went to Audi for my car’s annual checkup and to get the winter tires installed. They offered me a courtesy vehicle while they work on the car.

The few times Audi handed me courtesy vehicles, I was looking forward to testing an Audi model different than mine. Instead, they loaned me non-Audi cars: a GM and a Kia. I was disappointed. And this is where the dealership is missing an opportunity to sell new vehicles.

They could have loaned me a slightly-more-expensive-than-my-car A4, which may have convinced me to upgrade last year when I got a new A3. Courtesy vehicles are a great way to offer customers to test drive cars they might be inclined to buy in the future. It also helps retain customers.

By loaning other brands cars, it’s possible the customer might prefer the competitor’s models. What if I had loved the Kia (I didn’t)?

This time, I had a brand new Audi Q3, the SUV version of my A3. I was excited to try it. In the end, I was not impressed with that car, I prefer my A3, but at least I now know the Q3 isn’t for me, but I would recommend it to my mom.

Oh hey there!

Look who’s back here? What happened during this year and a half hiatus? More travels, new friends, new apartment, new job. The usual as per Oli’s standards. And what’s the deal with writing again?

Last week I attended an event where my friend Shelley talked about her passion for writing. She challenged herself this summer to write every day for 30 days, and succeeded, explaining that she allocated one hour to writing between 8 am and 9 am.

And I thought “I can do the same, 8 am sounds like a good time to write”. It’s currently 8:12 am on this cold Tuesday morning of November the 21st, here in Montreal, and I’m writing again.

Small Victories

As you read this, I won that post. What do I mean, you ask? Well, I believe life is about winning. Whether it’s a game, money, fame, a heart… we all want to succeed.

But all these goals we think about on a daily basis are the mid/long term ones. We ignore the small ones, like eating, being at work on time, buying the groceries, or even taking a shower. These are unconscious, or routine, goals.

And every time we complete these goals, we win. You’re hungry, you cook, you eat, you’re not hungry anymore, you won. That simple.

Think about all the little goals you’ve accomplished today, and compare that to the things you failed. I bet you had more victories than losses.

I know this is a candid way of seeing things. But seeing victories in even the small tasks nurtures a positive mindset. It’s also fun. And I don’t know about you, but I like having fun. And I just won that post. Boom!

I Don't Have Time For The Lazies

For the past couple of years, I have been contacted around twice a week by recruiters. Most of the time from LinkedIn. I rank them in three categories.

  1. The lazies - They just send me an invitation to connect on LinkedIn. I ignore them, even when sometimes they make the effort of adding a custom message instead of just leaving the default one.
  2. The average - They send me a message from LinkedIn before trying to connect. Usually they give details about the position they’re trying to fill in. I answer them, sometimes after several weeks, but I make the effort to answer them, because they took the time to write a message, even though it may be a canned message.
  3. The good ones - They send me an email to my personal address. That means they’ve done their job and tried to find more about me than just what’s on LinkedIn. I usually answer them within a day or two.

It’s not very hard to land on my site and find my email address. Yet, I’m shocked that very few recruiters send me an email instead of going through LinkedIn.

There’s a shortage of iOS developers, so you would assume that recruiters would try to do their best to attract them by doing a minimum of research. But no… most of them are lazy and just send an invitation to connect. I don’t have time for the lazies.

Rumours

Friend: Hey Oli, what do you think about that team acquiring that player?
Me: Is it official or rumours?
Friend: Rumours.
Me: Then I don’t care.

I don’t care about hypothesis, I care about facts. I don’t have time to speculate on rumours, I’d rather spend my time writing.

I Have No Clue What's Going On

Let’s get back about fifteen years ago. I was watching the half-hour newscast on TV, waiting to see the summary of a soccer game at the end of the broadcast. Five minutes in, bad news. Ten minutes in, bad news again. Twenty minutes in, more bad news. Twenty-five minutes in, sports should kick in, but guess what? Still more bad news. We reach the thirty minute mark and the show ends, nothing about sports. We went through thirty minutes of bad news, and no sports, not even any good news at all. I was pissed.

That night I decided to stop following the news. And over time, I became happier and more optimistic about everything.

At some point, I got back to following the news again. And you know what? My optimism started to fade out.

Three weeks ago I decided to cut the news again. Besides sports, I’m not reading the news online, I’m not watching the news on TV, I’m not listening to podcasts, I’m not reading RSS feeds, I’m not browsing my Twitter feed.

I have no clue what’s going on, and it feels good. Really good.

You're Not Fun Anymore, Twitter

Hey Twitter! How’s it going? I noticed you’ve become a great place to spread the word about inequalities, conflicts, unfairness, and so on. That’s amazing and I believe this is your best achievement so far.

How about me? Well… all this increasing sharing of injustice is not what I’m looking for when I browse my feed. Not that I don’t care about these, but I’ve always considered you as a fun place to hang out. You’re not fun anymore, Twitter.

Yeah I know… I could follow different people… but I’m lazy, so I’m gonna stop browsing my feed and keep posting meaningless and fun things.

No hard feelings,
Olivier

I Had To Redesign The Site

It’s always the same story. You start a new blog, write a couple posts, and for whatever reason stop at some point. Then you find all kinds of excuses to not write again. A popular one is that the site needs to be redesigned.

Yeah, right…

And guess what? That’s exactly what happened here. For the past couple months, I’ve been itching to write again, but because it didn’t look good on mobile, I believed I had to redesign the site before. Poor excuse, but I did it anyway.

Give Your App a Brain With a Flow Controller

One of the first rules a developer learns is to separate the code handling the data and the user interface. The link between the data and UI is usually done in a controller, or, in iOS, a view controller. In most projects, view controllers are interconnected and can be very dependent with one another. That’s where the flow controller comes in. It serves as a link between view controllers. It’s the brain of the app.

Technically speaking, a flow controller is a NSObject, and is very specific to the app you’re working on. Therefore it’s hard to have a base object to subclass. However, there are some rules to follow when architecting the app.

  1. Keep the application’s stateThe flow controller should always know what view controller is currently in charge. It should also poll the model objects to know the current context (feature locked/unlocked, logged in/out…).
  2. Manage the logic between view controllersThe flow controller should control the view controllers. Because it knows the application’s state, it knows when to present or dismiss a specific view controller, and which view controller should get the focus next. View controllers report to the flow controller through delegate methods so it can perform the necessary action.
  3. Orchestrate the view controllersThe flow controller should take care of the transitions and animations between view controllers. Centralizing this in an object makes it easier to replace a custom transition or change the app’s architecture (tab bar, navigation controller…).
  4. Prevent view controller dependenciesThe flow controller should remove dependencies between view controllers. They report to the flow controller when they require an external action and don’t know about each other, the flow controller does.
  5. Handle a portion of the applicationFor complex applications with a lot of view controllers, it may be better to use several flow controllers, each taking care of a different portion of the app and reporting to a master one. An application with a tab bar could have a flow controller per tab, and a main one that links them together.

I’ve used a flow controller in two projects so far, and it helped a lot organize and keep track of the workflow of the apps.


This post is based on a presentation I made at CocoaHeads Paris on January 9th, 2014. You can view the slides here.

Download a sample project here.

Universal App – From iPhone to iPad in 5 hours

This is the story of how I got to have an iPhone app work on iPad with a fairly different layout in just 5 hours of work. I’m sharing a few insights, but note this is not a secret recipe and it’s not be applicable to all projects.

This summer, I helped my friend Luc and worked with him on a new version of his company’s flagship app, Screens. Screens is a VNC client, an app that connects to a computer remotely and allows to control it. Early on, Luc had decided the app would be iOS 7 only, and that we’d start the project from scratch.

While at WWDC, as iOS 7 was unfolding before us, we exchanged about how the app could look like, and how we could take into account what we were learning that week: full-width images on iPhone, motion effects, blurs, tint color and so on.

Because the app already existed both on iPhone and iPad, we also knew from the start it would be a universal app. So as we debated on the app’s design, we considered both iPhone and iPad at the same time. Luc drew a few sketches and Thomas, the designer, quickly got back to us with pretty good mockups. The app’s design hasn’t changed much since these mockup.

They look different, yet they are the same

The app is composed of 3 main views:

  • saved screens: the remote computers you connect to often
  • discovered computers: the computers on the local network the and remote computers
  • the remote view that is displayed when you are connected to a computer

The last one is exactly the same on iPhone and iPad, it shows a full screen live view of the screen of the computer you’re connected to. We’ll focus on the first two views.

On iPhone, the saved screens is the main view, and the discovered computers view pans over. On iPad, they are laid out side by side.

Same view controllers, different storyboards

There is only one view controller for each view, then there’s a storyboard the iPhone layout and different storyboard for iPad. Some of the differences between iPhone and iPad are handled in the code, but most of the design and layout is done in these separate storyboards.

This is especially interesting in the case of the saved screens, where it’s a list on iPhone and a grid on iPad. You can now guess we went with a collection view. It’s even the same collection view cell object for both iPhone and iPad.

As we were thinking about the app’s design, we kept considering how we’d have to handle the development too.

Make sure all works on iPhone before moving to iPad

So this is how we approached the app’s development. We made sure we had all the functionality work on iPhone before even starting on iPad. Since we already knew how the app would look like on iPad, we knew beforehand we’d use a collection view instead of a table view on iPhone.

It took a couple of weeks to have something working pretty well on iPhone. At some point, though the app was still far from being perfect, we knew all the core functionality and logic was there for us to add the iPad layout.

Then it was breathe: set the project as a universal app, add the iPad storyboard and set the collection view’s layout properties, and handle some differences in the code when necessary.

In no more than 5 hours, the iPad version of Screens was working as well as on iPhone, with a different design. I didn’t expect it’d be so easy to be honest.

Plan ahead, design with development in mind

Imagine if we had used a table view on iPhone and a collection view on iPad. How would have we handled that? We’d probably have ended up with more files, a lot more code, and more pain to maintain that code.

I think the reason it went so fast is because of the way we planned the design and the development together. It doesn’t work that well for all projects, but whenever you can, try to think about development effort as you design your app.


This post is based on a presentation I made at CocoaHeads Paris on December 12th, 2013. You can view the slides here.

Solving Problems Like a Pinball

When solving a problem, imagine you build a pinball. The ball must reach the back of the play field when you hit it with the flippers. So the first thing to do is remove all the obstacles and make sure it reaches the back. Only then you can add the obstacles one by one while ensuring it keeps working every time.

That’s what my teacher used to say during programming classes. When starting a new project, or a new feature, start with the most basic thing, then iterate in small increments.

Need to add a label in a view? Place it at the center with a bright color so you can’t miss it. Then you can move it to its final position.

Need to connect to an API? Hard-code the URL and credentials and make the connection succeeds. Then you can create a view that asks for credentials.

Need to create a custom transition between views? Create a new ‘lab’ project dedicated to this task. Once it works you can move the necessary code to your big project.

Go the easy and lazy way first, then improve. Hard-code values, use bright colors, or even start a brand new little project and make sure that what you have to do works at its core. Once it works, you can add obstacles one by one.

It’s something we all know but sometimes forget. I found the comparison with the pinball quite funny so it stuck in my head.

It's Not Obvious to Everyone

I don’t use my phone as much as you do.

This is something my dad told me a couple times as I was teaching him a few features of iOS.

If you read this, you probably know more about iOS and technology in general than the average person. Many things that are easy and obvious to us aren’t to most people.

Observations

The following are a few observations I’ve made over the past couple of years. I don’t have numbers, but I’m pretty sure my usage of ‘some people’ should be more like ‘most people’.

Some people don’t use their phone extensively

For most people, a phone is just a tool to communicate and get entertained when they have time to kill. Because it’s not an object of real interest to them, they don’t have or take the time to learn new flows, icons, terms or read manuals (nobody reads manuals).

My dad often touches his iPhone’s screen inadvertently; that brings the current app to another view/state and he’s lost.

Some people hesitate to try when they don’t know the outcome

People are not adventurous by nature. On a computer they’re afraid to break everything if they try something. They approach phones the same way, and if an icon is unclear or a label confusing, they won’t touch it.

Some people don’t know the difference between similar technologies

What’s the difference between WiFi and 3G/LTE? To most people those are the same, they’re the Internet. As long as they are connected to the web they’re fine, how they are connected, they don’t care.

Some complain the Internet is too slow on their iPhone, they don’t notice the ‘E’ next to the carrier’s name, they don’t even know what that ‘E’ means.

What’s the difference between SMS and iMessage? The fact that it’s combined in the same discussion is convenient, but many people wonder why they have blue and green bubbles.

Some people don’t care about aesthetics

In the Talk Show’s 56th episode, John and Guy mention several people they showed iOS 7 didn’t notice the visual difference with iOS 6.

The phone is a tool, and people want to get things done with it. Take a unit converter app for example. Everyone want that kind of app on their phone because it’s convenient and can be useful sometimes. You spend hundreds of hours building the most beautiful unit converter app and charge $1.99 for it. It doesn’t sell because people prefer the ugly free competitor. To them both apps do the same job, but they choose the free one because they don’t care as much about aesthetics as they do about price.

Avoid confusion

Use words carefully

I know it’s annoying for most developers, but spending time to find the proper terms and sentences is very important if you want to avoid confusion. Avoid nerdy terms but be precise when it is necessary.

The iPhone’s manual used to be a great example. Big images, a few lines of text to explain all the main concepts and features. Sadly, nobody reads manuals and the iPhone 5S doesn’t ship with one anymore.

Stay close to Apple’s default behaviors and visuals

People are used to the default interface, if you try to differentiate your app too much, people will be lost. Icon for a delete action? Use a trash, not a cross. Back/Close button? Put it in the top left corner of the screen because that’s where it belongs on iOS.

iOS 7 is a big change and some developers are tempted to put borders around buttons or backgrounds to keep a button shape. But iOS users will get used to that new design, and quicker than you’d think because the apps they use the most are Apple’s, like Mail, Phone and Messages.

Spend time observing Apple’s apps, their flows, animations, and text. They’re not always perfect, but most of the time they solves problems the right way. And it’s a great source of inspiration.

Provide some help within your app

Whether it’s a walkthrough when the user launches the app for the first time, an overlay, a sample document or an embedded help web page, your app must provide some help for the user. And it has to be easily accessible, people won’t find it if they have to dig into a long view hierarchy.

It’s usually not a fun thing to work on, but you can make it cool, the perfect example being StatusBoard for iPad by Panic. The guide looks like a real manual, and it’s actually entertaining to experience the first time you launch the app.

The tip of the iceberg

I just scratched the surface here, there’s a ton more to say about improving the user experience for mass market apps.

We spend our days working on apps, we talk about development, technology all the time between ourselves. But sometimes we need to take a step back, and think about the guys who are not in our bubble. They are the majority, we are the aliens.

Many things in technology are obvious to us, but not to most people. We have to take that into account while we build products.


This post is based on a presentation I made at CocoaHeads Montreal on October 8th, 2013. You can view the slides here.

See Better, Feel Better

I wore glasses for most of my life. When I was in elementary school, other kids made fun of me for the ’fancy’ glasses I wore, or because I didn’t look cool. As a teenager, I was classified as a geek, before being a geek was hip. I got used to those remarks and easy stereotypes. It hurt, but I got used to it.

My glasses were the first thing I looked for as I woke up. I couldn’t see much without them. If I placed them in a unusual spot the night before, say on the coffee table in the living room, it could be a challenge to find them. Other times I forgot to put them away as I was going in the shower. Those who wear glasses all day know what I’m talking about. Glasses become part of us.

Every now and then people asked me why I didn’t wear contacts. The idea of ’putting my finger in my eyes’ kinda scared me. I also believed that nature made me so that my vision wasn’t perfect, and I had to deal with it the most basic way, with glasses.

In the summer of 2010, I decided I needed new glasses. I used the same pair for 10 years, which is way too long, so I was due for new ones. But then the idea of laser eye surgery popped. I had heard a few people saying the operation is very common and easy. I started reading a bit more about it and got an appointment at a clinic for an evaluation. I was a good candidate for the surgery.

I had the surgery on September 21, 2010. 10 minutes later, I didn’t need glasses anymore. I remember sitting on my couch a couple hours later, being able to read the time on the cable box on the other side of the room, and laughing of joy, excited. That was the moment I realized what happened. The next days were like a game of trying to read everything, and gauging how far I was able to read and see things clearly.

This surgery has changed my life in many ways. I gained more confidence in myself. The glasses were a burden that I got rid of, I felt I wasn’t considered as a geek anymore, I could be anyone. Kinda like Clark Kent becoming Superman.

My Road Trip Break

A very good friend of mine got married on March 1st in Los Angeles. I thought it’d be cool to do a road trip to get there. My plan was to take the train down to New York City to visit my brother before renting a car and driving for seven days to Los Angeles. I’d then stay a couple days for the wedding and finally drive back to New York over another five days.

Everyone who I shared my plans with told me two things: “Wow! That’s awesome, I wish I could do the same some time” and, “round-trip! You’re crazy! That’s a lot of driving!” To me, doing this round-trip doubled the awesomeness; I love driving.

As I knew I’d spend 12 days driving the car alone, I expected to take the time to think and reflect on life and other random things. I also planned to listen to music the entire time, because that’s what you are supposed to do on a road trip.

Turns out, I ended up doing almost none of this. I just watched the road, hands on the wheel, cruise control on, looking out at the scenery here and there. I didn’t listen to any of the podcasts I wanted to catch up on and never had the epiphany I thought I’d have while reflecting on my life.

I’m a little disappointed about that. I say only a ‘little,’ because, nonetheless, I did learn a few lessons from that road trip. One is that it’s important to take breaks from your every day life. The past couple of years, I’ve been so busy that I stopped allocating free time in my schedule. That road trip showed me that I was due for a good break.

The Morning Coffee Experience

Grande no whip mocha. That’s my drink at Starbucks. I’m actually not a coffee fan (I don’t like bitterness); however, I appreciate it when mixed with sugar and chocolate. I’m also not used to caffeine, so even a small dose has a big effect on me. The amount of coffee in the mocha is enough to kick-start my day.

I usually stop by my local Starbucks on the way to work three to four times a week. There’s a coffee shop with a better reputation a few blocks away where they prepare coffee with great care, and their mocha is delicious. Nevertheless, I prefer the experience at Starbucks.

There’s something we tend to overlook: the people who work in coffee shops have more impact on the world than they think. The way our mornings start has a big influence on how our day turns out. The more snags you experience, the worst your day may be. A good day usually starts with a good drink that wakes you up and makes you feel alive.

However, a good drink is not enough. What I enjoy the most about my local Starbucks are the nice, short conversations and the smiles the employees share when they hand me my mocha. This makes the difference with the nearby famed coffee shop, where they are so serious about their ‘craft’ that there’s no talks and no smile.

Now think about this on a larger scale. If those small talks and smiles work for me, imagine what it does to thousands of others. Working at Starbucks may not be the fanciest job in the world, but I’m pretty sure the people who work in those coffeehouse chains have a greater influence on the world than we think.

Professional Writer

When I was 18, I almost went to university to get an English literature degree instead of studying programming. I wanted to learn languages and write well.

Fast forward to today, I write hundreds of words a day and I’m fluent in several languages. Not the same kind of writing and languages I pictured back in the day though.

I write code for a job, the audience are my co-workers who read it, and computers that generate apps out of it. The languages I use the most are called Objective-C, C, Ruby, and Javascript.

At the time I gave up on the idea to go to university, I wanted to write for a large audience about sports or a sci-fi novel. I haven’t achieved any of this, but still, for the past 10 years, I’ve stayed in front of a computer writing… code.

It’s only a month ago that I made the link between those early aspirations and my current situation. Sometimes you give something up and think it’ll never show up again, only to later find out it never left.

I’ve recently started to write about sports, and learn Spanish. Interesting how things go in life.