Category Archives: Culture

zsh PS1 setup

macOS Catalina uses zsh as the new default shell (instead of bash) in Terminal. This means that many people will be looking to re-setup their CLI with ~/.zshrc instead of ~/.bash_profile.

While customizing my .zshrc was a hassle, it was also an opportunity to clean up my profile and remove legacy settings.

Zsh offers an optional right side prompt, but I only used the left side prompt for now.

Here are some misc tips that I’ve found helpful:

  • For basic PS1 exports (time/date, current dir, user, etc), you can find examples here. Things like %D for the current date, %~ for the current directoy, and more.
  • In your PS1 export, you can start color formatting with %F{117} and end color formatting with %f. Replace 117 with whatever color your desire. You can find color codes here.
  • You can make your tab auto completion case insensitive (ignore case) by adding:
    zstyle ':completion:*' matcher-list 'm:{[:lower:]}={[:upper:]}'
    autoload -Uz compinit && compinit -i
  • You can show your current git branch with:
    autoload -Uz vcs_info
    precmd() { vcs_info }
    zstyle ':vcs_info:git:*' formats '(%b)'
    setopt prompt_subst

    Note: you also need to add $vcs_info_msg_0_ in your PS1 export line.

I’ve thought about creating a zshrc WYSIWYG tool, ala Halloween Bash, but I’ve shelved those plans since there’s only so much time in a day. With macOS Catalina inevitable for macOS users, more and more people are going to be looking for easy ~/.zshrc customization.

Kauai, Hawaii Trip Recap

Last month, I was blessed to be able to spend a few days in Kauai (Hawaii) with family. The island is green, tropical, and beautiful.

We stayed at the Grand Hyatt in the south side of the island. The resort was great and there’s plenty of things to do on the south side. Around Koloa/Poipu, where our hotel was, there were lots of great things to eat. We enjoyed shaved ice at Waikomo Shave Ice, where they use fresh fruit. Puka Dog was good, since they combine a hot dog with fruity relish & Hawaiian mustard. Puka Dog is famous since Anthony Bourdain ate there.

On the day with the best (relative) weather, we drove up to Waimea Canyon State Park. The view from the canyon lookout was great, but weather & visibility changes fast. As we were taking photos of the canyon, the area fogged up and we couldn’t see much. We drove to the nearby Kōkeʻe State Park, but we couldn’t see anything due to the fog & rain. As we drove down the mountain, the weather improved and we were able to get decent views from roadside lookouts.

Leaving Waimea Canyon, we stopped at the town of Waimea for lunch. There were plenty of shops, and we enjoyed the Shrimp Station. Heading back towards our hotel, we also stopped at the small town of Hanapepe. Hanapepe’s main street was small, and there was cool Lilo & Stitch art among the shops. Unfortunately, the Hanapepe Swinging Bridge was closed on our visit.

The next day, we went up to the north side of the island (by driving along the east side). We stopped by Opaeka’a Falls along the way, and it was worth it since the double waterfall is easily accessible near the parking lot. We checked out Kilauea Lighthouse, which is cool for bird enthusiasts. The lighthouse was windy and packed with visitors.

After the lighthouse, we headed to Hanalei. The Hanalei Valley Lookout was definitely worth stopping along the highway for a nice view. Hanalei was a cool town with lots of restaurants and shops. Unfortunately it rained a lot while we were there. We ate at Hanalei Bread Company and Wishing Well Shave Ice. Hanalei Bread Company was really popular, but they seem to run out of things. Wishing Well Shave Ice was really good, but we had to dodge the rain. I wish we stayed longer in Hanalei to browse the shops, but the weather was too much. We left to check out nearby Princeville, but Princeville seemed very hostile to visitors as there’s no public parking?

Besides driving around the island, we were able to enjoy our hotel pool & beach. We weren’t able to spend much time exploring the east side, but we did enjoy a plate lunch from Mark’s Place (get the Korean Chicken!). Having stayed on the south side, I would definitely recommend the south side. Kauai was fun, and there were wild chickens everywhere.

Using the MIYA Pro Mac Keyboard

I recently picked up the Ducky MIYA Pro Mac White LED 65% Dye Sub PBT Mechanical Keyboard. This seems to be a rebranded Varmilo keyboard as the cables are branded with Varmilo.

The form factor (tenkeyless) is nice and compact. The lack of numpad on the right gives me much more space for my mouse. As expected from a mechanical keyboard, the sound of the keys is noticeable.

I went with Cherry MX Brown switches. The keyboard typing feel is nice but requires more effort than a flat chiclet keyboard.

I went with this keyboard since I wanted different things: 1.) mac support, 2.) tenkeyless, and 3.) cherry mx browns.

The keyboard comes with an instruction manual in Chinese & English. I find the documentation to be lacking. You’d think a keyboard would be plug and play, but this keyboard is more complicated due to the top row sharing Number keys & Mac media/shortcut keys.

When I got my keyboard, it took me some time to figure out that Fn + A turns the keyboard into Mac mode. Fn + W would change it back to the default, Windows mode. I also had to activate “default mode” (it’s unclear to me what this means) by pressing Fn + D to be able to use the Number keys as numbers and have my Mac recognize the keyboard configuration.

Other things that confused me for a bit was the PgUp & PgDn alternating lights. Apparently one or the other never turns off? This is annoying for someone who values the little details and prefers certain aesthetics. I’ve read online that it lights up (one or the other) to indicate whether the keyboard’s top row is in Numbers mode or Media mode. To switch between the two, it’s Fn + PgUp for Numbers and Fn + PgDn for Media.

To use F1-F12, it’s Fn+PgDn, then Fn+F1 for F1 (and so on through F12).

As a software engineer, it took some time to figure out that Fn + Esc activates the backtick key (`).

Overall, the small form factor & hearty typing key feel are great. It’s unfortunate that a keyboard has a learning curve, but that’s the price to pay for a condensed layout where keys have double or triple duty.

hiatus

In the past, I’ve tried to post consistently (monthly) and the results have been mixed. I’ve posted some useful tutorials and lots of posts for the sake of posting.

For now, I no longer want to stick to a routine schedule of random content. With some (super minor amount of) time freed up, I’m sure I’ll be able to waste it surfing the web, working on iOS apps, or simply doing life.

I can still see myself posting content (tips, tutorials, observations, etc.) here, but it’ll be more intentional.

Best,
-Rex

Driving a rental car in Switzerland

Recently, I visited Switzerland for vacation (Sep ’18) and spent a week driving around sightseeing with family.

Disclaimer: you should do your own research (regarding topics such as driving laws).

While I’ve read many great things about the public transportation system (trains & buses) and I would encourage you to take their excellent train system, driving made sense for our situation.

Pros

  • Direct transportation. Walking between the train station & hotel each day is not trivial. The uphill hike from the train station to Gruyère didn’t seem easy either.
  • Flexible. Not being tied to a train/bus schedule allowed us to see more places.
  • Scalable. Having a large car makes sense financially with a large group. Our 8 day car rental was $400. A 2nd class, 8 day unlimited train ticket is over $400 for one person.
  • Storage capacity. Storing infant items, extra clothes, etc. in your car is very convenient.
  • Park centrally. All the city centers we visited had parking near the tourist areas (such as old town). The blue ‘P’ signs are very easy to find when you are looking for parking nearby.

Cons

  • Parking
    • Expensive. This goes without saying if you are planning a trip to Switzerland. Parking in the city center for a day is not cheap. Bern was particularly expensive to park in. In Bern, I made the tradeoff to pay more for parking and enjoy the city longer.
    • Coins. Older parking areas may require coins (if they do not accept credit card).
    • Tight parking. Many older cities (such as Zurich) have extremely narrow parking spots & turns. This is a huge factor if you care about not scratching your rental car. Drive carefully & slow.
    • Language. The parking signs may not have English instructions.
  • Speed limits. I did my best to stay under the speed limit everywhere. I was told (online & in-person) that speeding in Switzerland comes with big fines. Driving & constantly checking your speed makes for very stressful driving.
  • Expensive. The cost of car rental, parking, and gas quickly add up. However, I felt the cost of driving wasn’t bad compared to buying a few train passes.

Tips

  • While driving in Zurich, many parking garages would show “FREI”. This confused me initially as I read it as “free parking” (no cost). The actual meaning is “free spots” (parking available).
  • Not a big deal, there are a lot of tunnels to drive through around the country.
  • My rental car had a number of helpful features: current location speed limit display, parking collision detection, and standard GPS navigation. I’d highly recommend these features.
  • To stay under or at the speed limit, I often relied on my rental car’s cruise control system to set the exact speed. Beware because you will often enter lower speed areas, and you’ll need to lower your speed suddenly.
  • While driving in Switzerland, your headlights always need to be on. I set my car rental to have automatic lights. Easy.
  • I would recommend renting from Sixt at the Zurich airport. (I have no affiliation with them.) I was able to get my BMW 2 series rental quickly and received good customer service.
  • There are car free areas in Switzerland, so do not plan to drive to them.

Driving in Switzerland is not cheap, but it comes with many benefits. I would recommend driving in Switzerland if you are traveling with a large family or kids.

Crosswalk Aides

I recently went on vacation in Europe. When I visit a new place, I try to get a feel for the new environment by walking around everywhere. Things like the OK to cross icon always amuse me since they are different.

London has a ton of history (old buildings), but I found that it exceeded my expectations for modern accessibility. The signage throughout the subway and public areas (train stations, etc) was really easy to follow.

In the UK, cars drive on the left side of the road. This is the opposite from the US. This means people coming from the US have to look on the other side for oncoming traffic while crossing the street.

One particularly helpful affordance in London were these painted messages telling you which way to look:

There’s also both ways:

I appreciated these messages since they didn’t have to paint them throughout London. But they did and it helped me make sure I was looking the correct way for traffic.

Life Perspective

This post takes a more serious, rhetorical tone.

As someone in his 30’s, I’m going to repeat a cliché that I say a lot: time flies. It’s amazing how fast the years go by. You can choose to be a grown up and do grown up things (family, career, etc.), or you can choose to have less responsibilities (more freedom?); but time flies regardless.

One topic that has been weighing heavily on me is my time with family. The family that I’ve taken for granted. You may know what I’m talking about: parents, sibling(s) – the people that you saw all the time when you were a kid. The people that you spent all your time with doing mundane things like watching TV or eating a meal.

As a person living in a different region from my immediate childhood family, it feels really weird for me to see so little of them. The worst part is that even if I do see them, there is no real way to “make the time count”. How do you make your time count anyways? Time flies by and that day or week with them is in the distant past.

I’ve read an interesting piece, The Tail End by Tim Urban, that shares some of my sentiments. By not living near my parents or childhood friends, I’ve got very little % of the time left with them. I’ve already spent most of the time I’ll ever have with them (in the context of humans on Earth).

Urban brings up great takeaways:

1) Living in the same place as the people you love matters. I probably have 10X the time left with the people who live in my city as I do with the people who live somewhere else.

2) Priorities matter. Your remaining face time with any person depends largely on where that person falls on your list of life priorities. Make sure this list is set by you—not by unconscious inertia.

3) Quality time matters. If you’re in your last 10% of time with someone you love, keep that fact in the front of your mind when you’re with them and treat that time as what it actually is: precious.

The more I think about this topic, the more paralyzed I feel. Not in a literal sense, but more in a existential sense. How do I make the most of my time here?

To use a shoddy example: when I travel to a new place, I want to experience “all the things” and feel like I’ve done it all. Which is obviously impossible for any place that’s not super, super tiny. What I end up doing is walking around streets arbitrarily, take a bunch of bad pictures. This is a brute force / high level strategy to see a little of everything, but without any depth. I feel like I am not experiencing everything to its potential, and this feels like FOMO (fear of missing out).

I don’t have any satisfying answers to making the best use of our precious time. There is always a sense of FOMO in a world with endless choices. All I can do is prioritize between what I need to do and what I want to do. Everything else will be left behind, but that’s alright because ain’t nobody got time for that.

Anger Driven Development

As a programmer, it’s nice to imagine perfect productivity conditions: many well defined, small units of work lined up. If the work at hand is clear and you have ample time to get into a flow, you expect to finish many things. Unfortunately, real life rarely works out that way.

Instead of picturing an ideal, efficient scenario, I want to talk about a less than ideal productivity method that manages to pop up every now and then: Anger Driven Development (ADD). ADD in this context might mean different things to different people.

What ADD means to me is that I’m working on a task, get frustrated, and then refuse to be beaten. Some of my more productive times have occurred when I was so pissed at the situation that I refused to throw in the towel. I will NOT be beaten by a machine. The power of human will can be indomitable at times.

While driven to extreme frustration at what started off as an “easy task”, it becomes man versus machine. Man does not want to give up. Man refuses to give up.

Even if I was tired or had other reasons to put the work off until later, Anger Driven Development does not give me the choice to stop. Like taking a hammer to a screw and forcing it in through sheer will power and brute force, Anger Driven Development can be messy. Anger Driven Development can’t stop, won’t stop.

The most amazing part of ADD (besides the task that is now completed) is the sense of triumph at the end. While it always feels good to be productive and get things done, there are few things like the joy of victory after ADD.

Anger Driven Development would never be my modus operandi, but it inadvertently has its place in my toolbox.

Travel Overhead

Traveling to new places is fun and exciting. This year, I visited amazing parts of Europe and Hawaii. I really enjoyed Santorini and Waikiki.

One thing that seems to get overlooked in trip planning is travel overhead. On paper, if you were to go to three countries in Europe, that looks great! You’re accomplishing so much by checking out so many places. The reality is that travel can impose a heavy, relative overhead cost between destinations if not properly managed.

For example, if you have a flight at 2pm, your schedule for the day looks something like:

  • 11 am – pack and check out of the hotel
  • 12 noon – travel to the airport early enough
  • 1 pm – wait at the airport gate
  • 2 pm – board the plane
  • 2:30 pm – fly to your destination
  • 3:30 pm – arrive and possible baggage claim
  • 4:30 pm – arrive at your hotel and check in

Your 2pm flight blocked over 5 hours of prime vacation time.

When traveling, I’ve found that the daytime is the prime time to do things. Whether eating food, going shopping, or hitting the outdoors – you’ll want to do it when it’s actually open and the sun is still out. If you have a 2pm flight, chances are that you’ve used up most of your day’s prime hours, which means one less day of vacation you actually get.

Even without worrying about airport flights, staying at different hotels in the same area can really impact your trip. Coordinating your check out time (or late check out time) with travel time to the next hotel can be tricky. Not to mention finding time to grab lunch.

While those who travel much more than me have internalized all of this overhead stuff, I’m getting exposed to it and it frustrates me. Spending prime vacation time lugging bags around and waiting for a bus/plane is a huge waste and should be avoided (planned around) if possible.

Xcode Fix Code Sign error: No matching provisioning profiles found

While updating my pomodoro apple watch app, I ran into an issue building my app with the latest Xcode (v6.4). The error was:

Code Sign error: No matching provisioning profiles found: None of the valid provisioning profiles include the devices:
iPhone6
CodeSign error: code signing is required for product type ‘WatchKit App’ in SDK ‘iOS 8.4’

First, I double-checked that my device was registered by UDID in the Apple Developer portal under Devices > iPhone. My code sign error persisted, so I created a new profile under Provisioning Profiles > Development.

  • Under Provisioning Profiles > Development, click on the + sign at the top right
  • Select iOS App Development and hit continue
  • Select the App ID that corresponds to your xcode project and hit continue
  • Give the Provisioning Profile a descriptive name and hit continue
  • Download your profile. It ends in a .mobileprovision extension
  • Double-click on your .mobileprovision file
  • Let Xcode build your project again (and success!)

Debugging Xcode is scary since the error messages are not very helpful. Also, it’s easy to get confused looking in the Apple Developer Portal versus iTunes Connect.