Category Archives: Culture

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.

 

Travel tip: Learn to drive manual

I recently spent time traveling in Europe.

As an American, driving an automatic car is the default since most cars are purchased automatic. Many people in the USA don’t know how to drive manual (or stick).

You will save yourself a bunch of money if you know how to drive manual and you’re renting a car in Europe. In Europe, manual cars are the norm and automatic cars are considered luxury (more expensive).

Optimizing for stable tools that don’t create perpetual work

Time is an incredibly important asset.

I come from a Ruby on Rails background. The progress of Rails updates & JS frameworks has been amazing & constant. Each new Rails patch brings with it some work to stay current. It’s not Rails’s fault since there are always new features or security issues that arise. Having a well maintained framework, such as Rails, is a huge boon for the community.

With any programmer tool, you generally want to be on the current stable release (for a variety of reasons including security & bug fixes). The issue is that upgrading to the latest stable version creates a never ending stream of (hopefully small) work.

Even if you went without a framework (Rails, Django, etc.), your server is running on a suite of tools. You’ll need to keep your OS (even LTS) and most likely nginx up to date.

Perhaps you want to outsource server maintenance, so you’re using Heroku. You’ll have to keep your configs compliant with the Heroku deployment framework & best practices.

What I’m getting at is that there are so many incredible tools available to developers today. Oftentimes, these tools are free and constantly get better & faster over time.

I’m wondering if there is, or if it would be possible to create developer tools that are optimized for API stability. No more figuring how to do things the framework-way every several months. Setup once, use forever. When you’re able to minimize the present value amount of time spent maintaining a tool, you’re freeing your future self to work on higher value tasks.