Zack Apiratitham

My Top 5 Books of 2021


A couple of years back, I rediscovered the joy of reading physical books after having exclusively been buying ebooks for years prior. Since then I had bought more and more books, which filled up my bookcase faster than I could read them. So in an effort to not have shelves full of books I haven't read, I made a decision to suspend all my book buying activities until I clear out those I had piled up. Therefore a lot of books I read in 2021 were from this backlog, and this will remain the case going into 2022.

By pure coincidence, I read 23 books in 2021 with 17 of them being hard copies, the exact same numbers as in 2020. But I read 5% fewer pages than in 2020 with 8,078 pages, dropping the average book length to 351 pages and pages per day to 21.

Below are five books that made my 2021 top list, ranked by how long it took me to read from shortest to longest.

Conditional Citizens: On Belonging in America by Laila Lalami (2020)

Conditional Citizens cover

In this book Laila Lalami covers her experiences of being a neutralized US citizen and points out the various contradictions and ways immigrants are treated unfairly in the US. She shows how non-white citizens still face challenges and prejudices in this country despite the fact that they should have the same rights and privileges as any other citizen. As a person of color and noncitizen living in the US, it wasn't hard for me at all to relate to her stories and essays.

One starkly revelatory point she made was how the US labels its non-white citizens. Even after years or decades of assimilation and generations later, they are still labeled as hyphenated Americans such as Mexican-Americans or Chinese-Americans. But descendants of white immigrants are simply referred to as Americans and not English-Americans, French-Americans, etc.

This is a poignant book everybody should read to get a better view into the immigrant experience and what it means to be a conditional citizen in the US.

a white woman told McCain that “I can’t trust Obama. I have read about him, and he’s not, he’s not, he’s a—an Arab.” “No, ma’am,” McCain replied, taking away her microphone. “He’s a decent family man, a citizen that I just happen to have disagreements with on fundamental issues.”

[...]

The woman said Obama couldn’t be trusted because he was an Arab, and the rebuttal wasn’t about the lack of causality between the two; it was a reassurance that he wasn’t Arab, he was a family man. The second contradiction was between being “an Arab” and being “a citizen.” Clearly, Obama could only be the latter if he was not the former. (p. 17-18)

The End of Everything (Astrophysically Speaking) by Katie Mack (2020)

The End of Everything cover

Cosmology and astrophysics have always been subjects that captured my imagination since I was a kid. But as just a layperson, I find the subjects exceedingly difficult to get into with all of the advanced mathematics and equations. I've read quite a few popsci astrophysics books like Stephen Hawking's A Brief History of Time and Michio Kaku's Parallel Worlds, which truthfully were not light and easy reads for me. But The End of Everything by Katie Mack provided a refreshing perspective on the genre.

This book addresses the topic of how the universe could end, where most popular science media and discussions on astrophysics I've come across usually focus on the beginning. We all know that the Earth and all of its inhabitants will die a fiery death when the sun eventually engulfs us in five billion years. But Mack isn't interested in our insignificant rock's end and instead presents us with five ways the universe as we know it could meet its demise. With enthusiasm and humor, she takes you on a journey through each of them with all the astrophysics and quantum mechanics nitty-gritty details (some of which were not easy to grasp, I must admit). My personal favorite of the bunch has to be the incredibly anxiety-inducing vacuum decay with the expanding "quantum bubble of death" traveling at the speed of light destroying everything in its path by taking apart all of the elementary particles that are held together.

Being quite a short book with just over two hundred pages, it is by no means lacking in substance. She just doesn't go off on tangents and remains straight-to-the-point which was one of the reasons that made this book an enjoyable read to me. I highly recommend it for any space nerd out there.

Something coming at you at the speed of light is invisible — any little glint warning you of its approach arrives at the same time as the thing itself. There is no possible way to see it coming, or even to know that anything has gone wrong. If it approaches you from below, there will be a couple of nanoseconds during which your feet no longer exist while your brain still thinks it is looking at them. Fortunately, the process is also entirely painless: at no point will your nerve impulses be able to catch up with your disintegration by the bubble. It's a mercy, really. (p. 145)

The Anthropocene Reviewed by John Green (2021)

The Anthropocene Reviewed cover

I am no stranger to John Green as I've been a dedicated vlogbrothers viewer for years. But I've only read two other of his books: Looking for Alaska and Turtles All the Way Down. Though young adult genre isn't really my cup of tea these days, I nevertheless still find myself drawn to his writing, not for the plot or romance aspects, but for his nuggets of wisdom and ways of looking at the world. That's why I was so excited for The Anthropocene Reviewed, his first nonfiction book1.

This book is a collection of essays, adapted from his podcast of the same name. In each essay he reviews a facet of our human-centered planet on a five-star scale, kind of like Yelp reviews. But unlike Yelp reviews, the subject is used as a jumping off point for him to tell a more personal story and offer his perspectives on being human. Some essays are autobiographical and can be quite heavy in subject matter, some lighthearted, but all endlessly thoughtful. While I quite enjoyed the humor, of which this book does not lack, I couldn't help but also get emotional reading some of his more reflective and touching essays. Some of my favorites are: Harvey, Auld Lang Syne, googling strangers, and Super Mario Kart.

This is a personal love letter to planet Earth, to celebrate humanity and the wonders of being alive on this rock.

What does it mean to live in a world where you have the power to end species by the thousands, but you can also be brought to your knees, or to your end, by a single strand of RNA? I have tried here to map some of the places where my little life brushes up against the big forces shaping contemporary human experience, but the only conclusion I can draw is a simple one: We are so small, and so frail, so gloriously and terrifyingly temporary. (p. 273)

Project Hail Mary by Andy Weir (2021)

Project Hail Mary cover

The Martian was such a fun read for me with all of the space and science nerdiness. I knew then that I had to keep an eye on Andy Weir. With Artemis, I opted to skip it due to lackluster reception. But after seeing so many rave reviews about Project Hail Mary, I figured I would give it a go.

Without spoiling too much, the premise of this book is that our protagonist woke up all by himself with amnesia on an interstellar mission to save humanity. What followed was a thrilling ride not unlike The Martian with incredible wit, humor, and such care into details any science and space nerd will surely appreciate. This novel puts the "science" of "science fiction" in the forefront and where there's fiction involved with the science, it's not too wacky or ridiculous that it took me out of the immersion of the story. My brain was willing to play along and remained engaged through to the end. This one is definitely a must-read if you enjoy a good sci-fi adventure.

Broadly speaking, the human brain is a collection of software hacks compiled into a single, somehow-functional unit. Each “feature” was added as a random mutation that solved some specific problem to increase our odds of survival.

In short, the human brain is a mess. Everything about evolution is messy. (p. 202-203)

If Then: How the Simulmatics Corporation Invented the Future by Jill Lepore (2020)

If Then cover

I've heard quite a bit about Jill Lepore, especially from her widely-acclaimed These Truths (which I still plan to pick up one of these days), but it wasn't until when I acquired a signed copy of her most recent book If Then that I finally got a taste of her writing. This book tells a story about the now-defunct Simulmatics Corporation and its mission to target and manipulate US voters and consumers using behavioral data and prediction algorithms. Sounds pretty familiar right? It wasn't Facebook or Google who pioneered these techniques we've all become so familiar with in recent years. Over half a century before Donald Trump with Facebook and Cambridge Analytica, there was John F. Kennedy with Simulmatics Corp., both men succeeding at the same audacious goal with the help of machines exploiting the same kinds of voter data.

This book wasn't originally going make my top list as I felt that large parts of it were quite dry and dragged on a bit too long with all the political details of the day and lives of men who I didn't particularly care about. I also wished that she had touched more on the technical details of the algorithms they used to do these predictions. But in the weeks since I finished this book, it has been stuck with me and I kept catching myself thinking back to it, especially the epilogue which I think was the strongest chapter. She draws parallels to what's happening now in the 21st century, and shows us that these hubristic ad men in the 60s were not all that dissimilar from tech execs in Silicon Valley today. This story also serves as a cautionary tale, reminding us that we've been through this before and that we shouldn't only just look forward to the future but to also look back at our history and not repeat the same mistakes again.

But the study of the human condition is not the same as the study of the spread of viruses and the density of clouds and the movement of the stars. Human nature does not follow laws like the law of gravity, and to believe that it does is to take an oath to a new religion. Predestination can be a dangerous gospel. The profit-motivated collection and use of data about human behavior, unregulated by any governmental body, has wreaked havoc on human societies, especially on the spheres in which Simulmatics engaged: politics, advertising, journalism, counterinsurgency, and race relations. Its rise also marked the near abandonment of humanistic knowledge. [...] The future was everything, the past nothing: a void, the humanities obsolete. Apollo reached the moon. Icarus reached the sun, and his wings did not melt. Instead, the light blinded him. (p. 324)

What I'm Looking Forward to in 2022

  • The Hobbit and The Lord of the Rings by J. R. R. Tolkien. I have been putting off reading these for too many years. So now I am publicly committing to reading them this year.
  • Crying in H Mart by Michelle Zauner. I can always read more about the Asian American experience in the US. But I've also heard a lot about this book as it showed up in so many lists, and won the Goodreads Choice Awards for Best Memoir.
  • Klara and the Sun by Sir Kazuo Ishiguro. Another book that I've seen a lot of people recommending, including by my friend Indira. It sounds like it's going to be a really thought-provoking read.
  • Rationality by Steven Pinker. I read both The Better Angels of Our Nature and Enlightenment Now, and personally found his writing style right up my alley. This is a follow-up book to that series with a topic that I'm already quite interested in.

  1. The signed copy I have is a delight in itself as not only that it has such a beautiful cover but there are also Easter eggs hidden throughout: from the circle drawings on the endpapers to his review of the copyright page. ↩︎




Internationalized Domain Names Are Still Not Well Supported in 2021


Domain names are the face of the web and any time I had to register one my brain always defaulted to using Latin letters. For my own personal site here, despite its domain name being my first name I opted to use the romanized version of it, never thinking that there was actually another option. That was the case until recently when I realized that I could register a domain name entirely in my native Thai script.

This post chronicles the journey I took to get an internationalized domain registered and configured for this website.

Goals

I am by no means an expert in this domain (excuse the pun), so this is more of a documentation of my learning and the problems I ran into when trying to set this up for myself.

Here are the things that I'll go over:

  • The basics of internationalized domain names and how they work
  • Domain registration and configurations
  • Challenges and pitfalls I encountered
  • Support for them on the web

The Internet's Great Oversight

The creators of the web were mostly English-speaking Americans and this resulted in most of the standards and practices only being thought out from that standpoint. This has a lasting effect until today where the vast majority of domain names we see on the web use the limited ASCII character set, which consists of only Latin letters. This is due to the fact that the Domain Name System (DNS) was designed to only support ASCII which leaves out many languages and their native alphabets and scripts. While the Latin alphabet is the most used character set in the world, it certainly should not be the only character set supported for domain names. In order to correct this oversight, the standard for internationalized domain names was introduced.

Internationalized Domain Name

An internationalized domain name (IDN) is a domain name that contains one or more non-ASCII characters. This means it can contain Unicode characters which allows for domain names in various non-Latin alphabets and scripts. Since only ASCII characters are supported by the DNS due to its design, supporting IDNs is just a mechanism to work around this limitation without having to overhaul the deep-rooted infrastructure for the internet. The important goal the designers behind this standard had was to ensure that IDNs are interoperable with the existing infrastructure so its introduction would not break existing user-facing applications, such as web browsers or email clients. This standard was approved by ICANN and deployed in 2003.

The solution is just a matter of converting the Unicode domain name into its ASCII representation before submitting the DNS query. Doing so involves using an algorithm called Punycode which, as described in RFC 3492, "uniquely and reversibly transforms a Unicode string into an ASCII string". Everything from that point on remains the same. This means that browsers don't necessarily have to support this standard and they should still be able to locate resources specified at the ASCII version of the IDNs.

Internationalized Country Code Top-level Domain

Country code top-level domains (ccTLDs) have been around since the early days of the internet. You have probably come across them as domain hacks with the likes of .io (British Indian Ocean Territory), .fm (Federated States of Micronesia), and .ly (Libya) among many others. These are subjected to each country's requirements which means they can limit who can register them and for what purpose. A number of these ccTLDs also have non-Latin counterparts in their country's native script such as .cn + .中國 (China), .eg + مصر. (Egypt), and of course .th + .ไทย (Thailand). These are referred to as internationalized country code top-level domain (IDN ccTLD). Surprisingly they are quite recent additions to the internet, having only been available starting in 2010.

Converting Unicode to ASCII in a Domain Name

Converting an IDN into its ASCII counterpart involves a few steps:

  1. Split up the domain name into individual labels.
  2. Encode each label using the Punycode algorithm.
  3. Add a special prefix xn-- to each label.
  4. Put the full domain name back together using . to separate the labels.

As an example: for an IDN คน.ไทย, the individual labels are คน and ไทย. Encoding those labels yields 42c6b and o3cw4h, respectively. Adding the prefix and putting them together into a full domain name we get xn--42c6b.xn--o3cw4h.

You can visit http://xn--42c6b.xn--o3cw4h in your browser now and you should see that it gets decoded back to the Unicode form of คน.ไทย. Even though your browser displays the domain name in Unicode to you, in the background it first converts it to ASCII before submitting the DNS query, and everything from that point works the same way as any ASCII domain.

Registering วัทธิกร.ไทย

Having an uncommon name in English-speaking world, the domain name of this site is just my romanized first name: Vatthikorn. I would say that in itself is already pretty cool. But I think what's even cooler is to also have the domain name of my actual first name in Thai script with a Thai IDN ccTLD: วัทธิกร.ไทย. Not many people can say that they have not only one, but two domain names for their site that are literally just their first name.

To find the registrar for a ccTLD, you can of course just do a quick internet search, there's this list for every single one of them, each with its own Wikipedia page. You can also visit IANA's Root Zone Database page that lists all of the available TLDs with more details for them than you'll ever need. But a fun trick I discovered is to simply go to your terminal and use the whois command for your TLD:

whois ไทย % IANA WHOIS server % for more information on IANA, visit http://www.iana.org % This query returned 1 object domain: ไทย domain-ace: XN--O3CW4H [...contact details omitted for brevity...] whois: whois.thnic.co.th status: ACTIVE remarks: Registration information: http://www.thnic.co.th created: 2010-08-19 changed: 2020-08-24 source: IANA # whois.thnic.co.th Whois Server Version 2.1.6

So to thnic.co.th I went, and sure enough, my Thai name was not yet taken. To register it, I had to provide both the Thai name as well as its Latin counterpart. So I'm basically getting two domain names at once. They offer a few TLD options such as .co.th + .ธุรกิจ.ไทย (business entities) and .ac.th + .ศึกษา.ไทย (academic institutions). But the one I'm eligible for is .in.th + .ไทย which is designed to be used by Thai citizens.

Due to the fact that they have to verify my identity and eligibility, the registration was technically just a request which needed human review and approval before they handed the domain name over to me. After submitting the request, I then had to email them a proof of payment which I had to make via PayPal. The price was 856 baht/year (around 27 USD). And just mere five hours later — on a Sunday morning in Thailand too — I received an email back from one of their representatives saying that my request was approved!

A screenshot of an approval notice email

Setting up DNS Provider

My intention with this newly-acquired Thai domain name was to set up a basic 301 redirect to the main site. The forwarding service is not included with the purchase of the domain and they charge extra 428 baht/year (14 USD) for it which is ridiculous if you ask me. Having already spent a bit more than I wanted to on the domain name, I had to take matters into my own hands.

The DNS provider for this site is currently AWS Route 53. But in trying to set up วัทธิกร.ไทย on it, I learned that it doesn't accept domain names with Unicode characters and you have to convert them to ASCII first. That was a bit disappointing as I expected AWS to be more global and inclusive than this. On top of that, using Route 53 was going to cost me additional 50 cents a month. After some searching, I found that Cloudflare supports IDNs directly in their UI without requiring you to convert them to ASCII. Setting up an account and adding the domain name was such a smooth sailing process compared to AWS. Best of all, it's completely free for what I'm using it for.

Setting up Forwarding

Setting up forwarding using only the DNS can be done with a CNAME record but there are a couple of caveats. First, you can't do this on the apex of a domain. So while you can do:

www.example.com IN CNAME another-domain.com

You can't do:

example.com IN CNAME another-domain.com

This on its own was already a no-go for me since I didn't want to have to use www in my site's URL.

Second, this method cannot perform a proper redirect where the path and/or query components from the original domain are appended to the target domain. Say you want to have example.com/about forward to another-domain.com/about, this is not possible with a CNAME record. Doing that is a web server’s responsibility.

While you could absolutely go with a DIY route and set up a web server (like Apache or Nginx) to just do HTTP redirects with all the customizations you want, to me that seems overkill for what boils down to just a vanity domain redirect for my own amusement. There are also several free URL redirection services out there but I didn't want to add another link in the chain that could potentially break my setup.

As it turned out, Netlify, where this site is hosted, provides a domain alias feature that I can leverage to make this work the way I wanted to. Unfortunately, they also don't natively support IDNs in their UI so it has to be in its ASCII form.

A screenshot of a list of domain names with one being in Punycode

The next step is to add an A record for this domain to point to Netlify's load balancer IP address. Since I only want Cloudflare to act as a DNS provider, I made sure that this record is marked as "DNS only" instead of "Proxied". This keeps it strictly a DNS record and bypasses Cloudflare's other functionalities.

A screenshot of A record configuration on Cloudflare

After the A record was propagated, trying to load https://วัทธิกร.ไทย resulted in an error as the subject name in the TLS certificate returned didn't match the requested Thai domain name:

curl -I https://xn--12c7bd9bq4dxa.xn--o3cw4h curl: (60) SSL: no alternative certificate subject name matches target host name 'xn--12c7bd9bq4dxa.xn--o3cw4h' More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.

The problem here was that after adding an alias domain name on your Netlify site, the TLS certificate needed to be renewed so that the alias domain would be included.

A screenshot of TLS setting on Netlify showing the IDN included

After that was regenerated, วัทธิกร.ไทย finally loaded the content of this site. However, it didn't perform a redirect to vatthikorn.com (วัทธิกร.ไทย remains in the URL field in the browser). For this you can certainly set up redirect rules with Cloudflare but since I already have an existing _redirects file to have Netlify handle them for me, I wanted to keep all the configurations in one place. Doing this is just a matter of adding an entry for the domain name (of course it needs to be in ASCII as Unicode characters also aren't allowed here either):

https://xn--12c7bd9bq4dxa.xn--o3cw4h/* https://vatthikorn.com/:splat 301!

So now sending a curl to วัทธิกร.ไทย correctly returns a 301 response code with the location header pointing to the main domain name with the same path:

curl -I https://xn--12c7bd9bq4dxa.xn--o3cw4h/wwdc-2021-wish-list HTTP/2 301 cache-control: public, max-age=0, must-revalidate content-length: 64 content-type: text/plain; charset=utf-8 date: Thu, 02 Dec 2021 19:48:08 GMT strict-transport-security: max-age=31536000 server: Netlify location: https://vatthikorn.com/wwdc-2021-wish-list x-nf-request-id: 01FNYB1CN3F46QVZ4B5RS7T51Q age: 6

Some Finishing Touches

To finish this off, I figured why not add a little more fun to this by also creating a special URL for my About page all in Thai: วัทธิกร.ไทย/เกี่ยวกับ. The goal is to have this redirect to vatthikorn.com/about. This was easy enough to do using the same _redirects file, though it requires those Unicode characters in the path to be URL-encoded first.

Now the final configurations for these redirects look like the following:

https://xn--12c7bd9bq4dxa.xn--o3cw4h/%E0%B9%80%E0%B8%81%E0%B8%B5%E0%B9%88%E0%B8%A2%E0%B8%A7%E0%B8%81%E0%B8%B1%E0%B8%9A https://vatthikorn.com/about 301! https://xn--12c7bd9bq4dxa.xn--o3cw4h/* https://vatthikorn.com/:splat 301!

And that's all there is to it! You can now visit วัทธิกร.ไทย and it should take you to vatthikorn.com, and วัทธิกร.ไทย/เกี่ยวกับ to the About page.

Adoption and Support in the Wild

As I mentioned earlier, IDNs were first deployed back in 2003 so it's been around long enough to vote now. Thankfully, web browsers have had support for this since very early on. But what I wanted to know is if some of the popular social sites allow my newly-configured Thai domain to be added on my profile.

Instagram isn't having any of it. (But hey, you can put Unicode characters in the bio. So yay for emoji, right?)

A screenshot of a URL error on Instagram

While Twitter isn't even trying and just throws up this badly-formatted error message.

A screenshot of a URL error on Twitter

LinkedIn accepts it but converts it to the ASCII form for you, which is just lovely to look at.

A screenshot of LinkedIn with ASCII IDN

But GitHub and Letterboxd work very nicely on the web (though both of their mobile apps won't display it).

A screenshot of my GitHub profile with IDN

A screenshot of my Letterboxd profile with IDN


All in all, if there's one thing I took away from this exercise is that when developing software, we should really consider diversity and inclusion aspects from the beginning and not just take the path of least resistance and only support what we're familiar with. At the very least, making sure our apps are localized and have proper accessibility support should be on top of that list. For IDNs, the fact that it was an afterthought made adding support for it just a hack that is neither ideal nor elegant. The internet — with its great promise of allowing everyone equal access to information — should have been designed to work for everyone, not just those who speak English.

Thanks to Indira for proofreading and helping improve this post.

Further Reading




WWDC 2021 Wish List


See my other posts in this series: 2016, 2017, 2019, 2020.

It's becoming such a cliché now during this pandemic when we say that time is a weird concept. But the other day I was in for a rude awakening when I found out that it's almost June. I say this every year but this year really did fly by. On the bright side, we all know what this means: it's WWDC time! To keep on the tradition, here is my wish list for this year:

16-inch MacBook Pro with Apple Silicon

We all know it's unlike Apple to announce new hardware during their big event for new software, but I think this is the right crowd to announce this for. As previously mentioned, my current 2017 MacBook Pro is starting to make me feel like I could use an upgrade. And with how well-received the M1 chip has been, I have never been more eager to see the larger MacBook Pro get a refresh. The rumors this time around have started to really pick up with a couple of recent reports saying that there is a new 16-inch MacBook Pro with Apple Silicon coming very soon with "a redesigned chassis, magnetic MagSafe charger and more ports for connecting external drives and devices" as well as the HDMI port and the SD card slot. If these all turned out to be true, this would be the best MacBook Pro update in recent memory. It also would be an unprecedented backtracking from Apple. We just saw a similar thing happened with the new Siri Remote dubbed "The Apology Remote". So I think we stand a good chance of getting "The Apology MacBook Pro" at WWDC which would make a lot of people very, very happy.

Affordable External Display

I already said this last year, and I'm going to say it again: Apple needs a less expensive external display in their product line-up. The five-thousand-dollar Pro Display XDR is an amazing feat of engineering, but at that price nobody can justify that unless you are a media production company. We sorely need an Apple-branded display that is aimed more for the mass market. Think the 27-inch Apple Thunderbolt Display. They cannot honestly expect us to use the M1 iPad Pro (with Thunderbolt 3, no less) or these new Apple Silicon Macs with this insanely expensive monitor. Apple knows that the MacBook Pro is very popular among developers — no doubt among those in attendance at WWDC — and they connect their laptops to one or more external displays, myself included. I have been holding off on replacing my monitors in hope for a new Apple monitor for years. I am still using these two ugly mismatched 24-inch 1080p ASUS monitors (one of them being a hand-me-down) from my college days as my setup.

Again, here is all I'm asking: take out that 5K 27-inch panel in the discontinued iMac Pro (or the one you're putting in the new 27-inch Apple Silicon iMac), put it in an external display chassis, maybe add some bells and whistles like a webcam, USB-C ports, fancy speakers, etc., slap a $1,300-1,500 price tag on it (knowing Apple), and take my money.

Catch Up iPadOS with the Hardware

The iPad Pros are such powerful devices, and now with the M1 chip in them, they're as powerful as the brand-new iMac. iPadOS, on the other hand, needs a lot of work to catch up with the incredible hardware it's running on. I am really hoping that this year will be the year we see some significant improvements to iPadOS to unlock the device's potential. As a developer, I would absolutely love to be able to do some sort of software development on it. The multitasking model on it also needs some rethinking/refinements to make it easier to use and manage. I have been eyeing these new M1 iPad Pros ever since they were announced in April but am still holding out on them to see what they do with iPadOS 15.

Home Screen Widgets

The popularity of iOS 14's widgets surprised a lot of people, even Apple themselves. Knowing this, I'm fairly certain that Apple will iterate more on this feature in the upcoming iOS 15. My wish for that is for them to be more interactive as right now the only possible action is launching the app (or launch the app to perform actions in it). These widgets would be vastly more useful if we were able to use them to do things like checking to-do items off or controlling media playback right from the home screen. They could also go a step further and do away with the left-to-right top-to-bottom grid for the home screen and let us place items wherever we want on there.

HomeKit

I've recently added more smart devices to the Home app and found some of the controls and automations lacking. For example, the camera automation includes options to turn the camera on or off based on the location of the members of the household. But there is currently no way to do that based on time of day. This would be really useful as I would like my indoor cameras to record when I'm at home but only during the time when I would be asleep to keep an eye on the house at night. Also the HomeKit Secure Video only saves recorded clips at 1080p and I think there should be an option for us to store them at full resolution. Sharing the Home with household members could also use improvements as I found things like notifications and access to settings to be real flaky.

Shortcuts

While Apple made some good additions to Shortcuts in iOS 14, there is still a lot to be desired. Location-based automations need to run automatically without requiring user input. Right now by requiring confirmation, they fail at the very thing they're supposed to do. These automations need to also stop popping up as notifications every time they run, cluttering up Notification Center. Please just make it an option to turn these off.

Memories Management in Photos

I love the Memories feature that resurfaces old photos grouped based on people, places, or events into nicely curated collections. And putting this as widgets on my home screen makes it all even more delightful. However, I wish there were more controls built into this such as changing cover photo for each Memory or hiding Memories based on people, time periods, or places. I also wish they would add more inclusive holiday Memories to the mix like Chinese New Year or Diwali as the ones I've ever seen are only for days like Christmas or Independence Day.

Screen Time for tvOS

We already have Screen Time for iOS, iPadOS, and macOS, so adding this to tvOS is a no-brainer. I spend a lot of time on my Apple TV so I would really like to see some data here. I'm not sure what's taking them so long, it seems like it shouldn't be that hard to implement. I've been waiting for this since 2019 so I really hope this year is the year.




Apple Event Coverage on ATP


If you listen to Accidental Tech Podcast, you are probably aware of the running joke on the show about how incredibly long episodes covering Apple events usually are. During the most recent episode the hosts talked about how they were about to spend such a disproportionate amount of time discussing the Apple Podcasts announcement (which Tim Cook spent precisely one minute and quarter covering). That had me wondering about the exact ratios of time the guys typically spend talking about the event vs the event itself.

Unbeknownst to me, Apple in fact publishes their event videos with its own public RSS feed just like any other podcast. Now with the exciting realization that I won't have to manually comb through the archive of Apple media event videos, I whipped up a quick and dirty script to pull the duration data from the respective feeds and do the calculation for every ATP episode that covers an Apple event.1

So let's get the big question out of the way: which Apple event did they spend the most disproportionate amount of time discussing? That honor goes to the Mac event in November 2020.

A graph depicting the ratios between Apple Event vs ATP episode durations

The event itself clocked in at just under 49 minutes2 and the ATP episode discussing this came in at 2h 43m 45s making the ratio 3.34. This means that for every minute of that event, the guys spent 3 minutes and 20 seconds discussing it. That really should not come as a huge surprise as this was the shortest event they have covered so far. Plus what's more exciting to talk about than the very first Macs for the ARM transition that all of us Apple nerds have been anticipating for years?

And funny enough, in second place is the most recent episode from this past week's event, with the ratio of 2.57 (2m 34s per minute). If you're curious and too lazy to look it up, they spent 43 minutes and 34 seconds talking about that minute-and-a-quarter podcast announcement alone.

A graph depicting Apple Event vs ATP episode durations

Now let's look at some stats for all of the events they have discussed on the show. From the very first Apple event they covered (the WWDC 2013 "can't innovate anymore my ass" keynote) to the most recent one this past week, there were 27 events in total. Those events average at 1h 41m 9s while ATP episodes come in at 2h 12m 5s. This results in the average ratio of 1.47 (1m 28s for every minute of the event).

Since the pandemic, Apple transitioned to doing their events entirely online with shorter-yet-still-packed pre-produced events. The pre-COVID number is 1.24 (1m 14s) and the pandemic-era number, starting with WWDC 2020, is 2.38 (2m 28s). These recent short events really did come loaded with tons of stuff to talk about.

So in summary:


  1. I'm using the main feed of the show instead of the ad-free member or bootleg feed in order to keep the numbers consistent for its entire catalog. ↩︎

  2. Apple's shortest event ever in the archive actually. The second shortest being the October 2008 event with 52 minutes where Steve Jobs announced the unibody MacBook Pro. ↩︎




My Top 5 Books of 2020


If there was one good thing that came out of the horror of 2020 for me, it's that my reading habit got more solidified. Given that we can no longer go out to restaurants, sitting down to read a book after dinner has become a must-do daily routine. Even though I did not read as many books as I'd like with all the time available, this year I tried to read more widely by selecting novels and non-fiction topics I hadn't usually chosen. Trying to be a more critical reader, I also started taking better notes and highlights, and spending more time thinking about the ideas presented to me.

This year I read 23 books with 16 nonfiction and 7 fiction. While the number of books matches my 2019 number, the number of pages increased by 45% to 8,519 pages in total. This averages to 23 pages per day and 370 pages per book. In years past I almost always bought ebooks, but in an effort to build up a home library, I started buying mostly physical copies this year, so 17 of these I bought as hard copies.

The following are the five books that made my 2020 top list. Note that these are not necessarily books that came out this year, but just the ones that I read and found to be the most affecting and interesting to me personally.

How to Be an Antiracist cover

How to Be an Antiracist by Ibram X. Kendi (2019)

Like a lot of people this year, I was prompted to inquire more into racism in the US and to be better informed when it comes to these racial issues. Dr. Kendi argues that we cannot just simply be "not racist" as inaction against racism equates to helping perpetuate racism itself, and therefore we must actively be anti-racist to dismantle it. As a foreigner who spent a better part of my adolescent years in the US, his take on assimilation and "Americanization" as being inherently racist ideas hit me on a personal level and made me question my past actions in trying to fit in.



The Age of Surveillance Capitalism cover

The Age of Surveillance Capitalism: The Fight for a Human Future at the New Frontier of Power by Shoshana Zuboff (2019)

The Netflix documentary The Social Dilemma pushed me to check this one out. Before reading this, I had already been ardently against the shady practices tech giants like Google and Facebook put in place to make billions with our behavioral data, but this book opened my eyes to so much more. It is a deeply troubling but incredibly important book for our time and goes way beyond the issue of privacy. There is no doubt that these companies — especially Facebook — are in no small part responsible for the spread of anti-intellectualism, conspiracy theories, the rise of extremism, and the overall political discourse in recent years. We are living in a dystopian world where these companies know so much more about us than we realize and effectively have the means to control us. This was the longest book I read this year, coming in at 691 pages. It is not a light read but it covers a lot of ground, exploring virtually every facet of what these surveillance capitalists are doing to our society, how they're undermining democracy, and what it could mean for the future.


Dune cover

Dune by Frank Herbert (1965)

This one has been on my list for a long while, and earlier in the year I finally picked it up in preparation for the film adaptation that has since been delayed. I have not read that many sci-fi novels, so I figured if I were to change that I definitely have to read Dune. It became clear to me not long into the book that Star Wars was heavily inspired by Dune: The desert planet, dew gatherers on Arrakis vs moisture farmers on Tatooine, Bene Gesserit's Voice vs the Jedi mind tricks, to name just a few. I don't think I need to say much more about this book as we all know how original and highly-regarded it is.



Letters from an Astrophysicist cover

Letters from an Astrophysicist by Neil deGrasse Tyson (2019)

This is a collection of his responses to people who wrote to him. His perspectives, ways of thinking, and outlook on the importance of science and reason deeply resonate with me. I have a long list of quotes from this book so I'll let his words speak for themselves:

Once you confess to not knowing what you are looking at1, no logical line of reasoning allows you to then declare that you know what you are looking at. [...] To go from “We don’t know” to “It must be God” is another example of an argument from ignorance.

True science literacy is less about what you know and more about how your brain is wired for asking questions.

But one must always recognize the difference between knowing that something is true, knowing that something is not true, and not knowing one way or another. It’s the not knowing part that leaves singular events susceptible to inventive accounts (especially from conspiracy theorists) of what may have happened.

The world is no stranger to religious warfare—with abject slaughter of countless innocents in the name of one god or another. So [the] supposition that one needs God to behave or to give meaning to life—while it may be true for many people—is certainly not a pre-requisite to a fulfilling, law-abiding life.


Chasing New Horizons cover

Chasing New Horizons: Inside the Epic First Mission to Pluto by Alan Stern and David Grinspoon (2018)

This book chronicles the decades-long fight to get the New Horizons mission off the ground against all odds, and I must say that I did not expect it to be such a thrilling read. Truly almost a missed opportunity for generations to come, the mission was a race against time as Pluto traveled further away from the sun and, had they waited too long, would cause the atmosphere to dissipate, preventing any kind of atmospheric study from being conducted. It is also an amazing underdog story as the team at the Applied Physics Laboratory competed against the more experienced Jet Propulsion Laboratory to get their mission selected with such tight budgetary constraints and all the red tapes. The second half of the book went over fascinating insights and science behind the eventual fly-by in all of its glorious details. The story gave me such admiration for these people doing the remarkable work of advancing humanity's scientific knowledge.


What I'm Looking Forward to in 2021

  • A Promised Land by Barack Obama. This is what I am currently reading and will be into 2021. I was too young (and too far away) to pay much attention to US politics during the 2008 election or his first presidential term, so it's been such an insightful read so far.
  • How to Avoid a Climate Disaster by Bill Gates. I have been waiting for Bill to write a book for a long time now so I am eagerly looking forward to this one.
  • The Anthropocene Reviewed by John Green. As a Green brothers fan and Nerdfighter, this is a must-read for me.
  • To Sleep in a Sea of Stars by Christopher Paolini. I loved the Inheritance Cycle and have been looking forward to this for years. Despite that, I had no idea this came out earlier this year! Definitely will be the next novel I read.

Thanks to Jess for proofreading and helping improve this post.


  1. In answering a question about a UFO sighting, reminding us what the "U" stands for. ↩︎




Apple's App Tracking Transparency Feature


MacRumors:

Apple in iOS 14 is planning to introduce a new App Tracking Transparency feature that will let users know when companies want to track them across apps and website. Following outcry from developers like Facebook and ad networks unprepared for the change, Apple delayed the implementation of the anti-tracking functionality until early 2021.

Craig Federighi, in an interview with The Independent (via MacRumors):

“If we sell cars with airbags, and we decided to put airbags in our cars before someone else did, and customers want to buy those, I think it's great that we've provided that that choice,” he said. “We're not waiting for someone to require we do it, we're we're making that part of what it means to use our platform.”

I think Apple should have shipped this feature already. They are not outright banning this practice but only giving users the awareness and option to opt out. These companies have been operating these data mining and surveillance operations for way too long without much oversight. They are now complaining because they know that they are collecting users' data without their consent. And they know that most users, if given the option to opt out, would do so.

This is not about small businesses or whatever bullshit they come up with, it's about them needing as much raw materials as possible to extract behavioral data from. And those data are then turned into "personalized experiences" which in reality just means figuring out what we want, think, and feel and then selling that information to advertisers or worse.




M1 MacBook Air Benchmark


MacRumors (via Hacker News):

The M1 chip, which belongs to a ‌MacBook Air‌ with 8GB RAM, features a single-core score of 1687 and a multi-core score of 7433. According to the benchmark, the M1 has a 3.2GHz base frequency.

[...]

In comparison to Macs, the single-core performance is better than any other available Mac, and the multi-core performance beats out all of the 2019 16-inch MacBook Pro models, including the 10th-generation high-end 2.4GHz Intel Core i9 model. That high-end 16-inch MacBook Pro earned a single-core score of 1096 and a multi-core score of 6870.

That is crazy talk. The entry-level laptop without a fan beating out top-of-the-line 16-inch MacBook Pro! Imagine what the higher-powered variant of this chip could do in a desktop Mac with more thermal envelope and wattage.

My current 2017 15-inch MacBook Pro has been feeling slightly long in the tooth and I was considering upgrading to the then new 16-inch model until Apple announced back in June that they are transitioning to ARM. Now I am certain that my next Mac will be an Apple Silicon Mac. My hope is that before or during WWDC next year, they will announce a 16-inch model of this.




Introducing WidgetLink


A few weeks ago after iOS 14 came out, the App Store was suddenly flooded with apps designed specifically around the new Home Screen widgets and customization. Some of them are Widgeridoo, Widgy, and the most notable one being "Underscore" David Smith’s wildly successful Widgetsmith.

An idea with a simple premise popped into my head: I wish I can have customizable Home Screen widgets that can open any URL. Since I had already been looking for an excuse to properly learn SwiftUI, I figured why not just try to make this myself as a learning exercise.

widgetlink icon small

WidgetLink is a very basic app that lets you create widgets on your Home Screen that can launch any URLs. This is not limited to just web URLs but also any app’s URL scheme. This means that not only can it open web links but any app or action can also be performed with their provided URL schemes.

Now I’ll be the first to admit that this is not a very useful or unique app with its functionality. There’s probably only one other person who might even find this remotely useful. The way it works is also not very elegant due to a technical limitation that's not within my control: when the link is tapped, instead of opening the URL, it first launches the app before opening the URL in a browser.

You might also be thinking “but Zack, you can already do all this with a Shortcuts widget” and you would be absolutely right. But with that you can only fit at most 4 actions on a medium widget with little customization on how they look.

Customization is a big deal with iOS 14 and WidgetLink allows you to pick text and background color, number of rows and columns, link image and its shape to suit your Home Screen aesthetics.

This currently supports small and medium widgets. The small one, again, due to limitation of the OS, can only be used to launch a single URL. You can long press on the widget to edit and choose which URL to display.

On the medium widget, up to 15 URLs can be shown (albeit looking pretty crowded). You can reorder the links inside the app by tapping the Edit button in the list view. This ordering will arrange the links on the widget in a left-to-right top-to-bottom manner.

iPhone 11 Pro Max 0 Widgets framed
iPhone 11 Pro Max 1 Links framed
iPhone 11 Pro Max 3 Settings framed

Special Thanks

This wouldn't be possible without the incredible 100 Days of SwiftUI tutorials which helped me tremendously at learning the basics of SwiftUI enough to get me started on developing this app. Also I'd like to thank my girlfriend Jess for a small but important contribution she made by picking the main color for this app (#FF613D) because I could not decide for the life of me what color to use.

These past few weeks have proved to be a great learning experience for me with SwiftUI. The declarative syntax was little difficult to wrap my head around at first and Core Data was not the most fun to work with. But my brain is now in SwiftUI mode and it’s going to feel strange to context switch it back to work on UIKit again.

Anyway, if you happen to be that one other person who thinks this might be something you could make use of, I would be delighted and honored if you give it a try. And please don’t hesitate to send any feedback my way.




Post Round Review: Wekiva Golf Club


Course: Wekiva Golf Club, Longwood, FL, USA
Par: 72
Tee Box: White - 6,427 yards
Course Rating: 71.5
Slope Rating: 129

Date: 26 September 2020
Tee Time: 2pm
Condition: Mostly sunny
Heat index: 40ºC (105ºF)

It’s been a long while since I played any golf, with the last full round of 18 holes being back in March. But at last, in recent weeks, I started picking it back up and going back to the range as well as walking the short par-33 back 9 at a local club after work. This past weekend was my first full round of 18 holes back after a 6-month hiatus.

I hadn’t hit my driver in months and that club had always given me much anxiety: mostly due to my own lack of confidence. And with the course being a par-72 at a little bit over 6,400 yards, using my driver was all but inevitable. Before the round, I just warmed up quickly with my 56-degree, 7 iron, and the driver, which actually felt pretty good.

Hole #1 - Par 4 - 384 yards

The round was off to a good start with a drive perfectly down the middle of the fairway, maybe around 250 yards from the tee. I got on the green in 2 but three-putted for a bogey 5.

Current Score: +1

Hole #2 - Par 4 - 341 yards

Second hole saw another great drive down to about 70 yards, which I then overshot the hole by 20+ yards. Luckily, I was able to save par with an up-and-down.

Current Score: +1

Hole #3 - Par 5 - 500 yards

This was when things started to go downhill. The tee shot hooked into a bush and after an embarrassing lay-up flub, I was chipping my 5th shot from front-left of the green then two-putted for a double bogey 7.

Current Score: +3

Hole #4 - Par 3 - 169 yards

This par-3 saw me pulled way left of the green with a 6 iron. A noncommittal chip trying to avoid a tree branch put myself in a bunker which followed by a pretty decent shot out to about 5 feet. I then missed the putt and walked off with a double bogey 5.

Current Score: +5

Hole #5 - Par 4 - 369 yards

Now I got the pull bug in my head and ended up pushing the drive way out of bounds into a nearby neighborhood. I eventually got on the green in 4 but proceeded to three-putt for a triple bogey 7.

I just played the last 3 holes 7 over par. But I didn’t really have any expectation anyway and didn’t really care all that much.

Current Score: +8

Hole #6 - Par 3 - 142 yards

An easy GIR with a 9 iron followed by a two-putt par.

Current Score: +8

Hole #7 - Par 4 - 367 yards

A fairway hit, another GIR, and a two-putt par.

Current Score: +8

Hole #8 - Par 4 - 410 yards

Another fairway hit. I missed my approach shot just short of the green but managed another up-and-down for par.

Current Score: +8

Hole #9 - Par 5 - 480 yards

A fairway hit, green in 3, and a two-putt par.

Current Score: +8

Hole #10 - Par 5 - 529 yards

I pulled my driver left of the fairway again but a good lay-up got me on the green in 3 and two-putted for par.

Current Score: +8

Hole #11 - Par 4 - 409 yards

This hole saw a great drive to around the 150-yard marker with the pin tucked behind a front-left bunker. A soft 8-iron shot nicely drew from right edge of the green down to about 6 feet above the hole. That approach was the shot of the day for me. I sank that putt for the first birdie of the day.

Current Score: +7

Hole #12 - Par 3 - 178 yards

Coming up on this hole, I was feeling pretty good with my game, realizing that I just played the last 6 holes at 1 under par. This quickly resulted in a thinned 5-iron hooking 30-yard left of the pin. I managed to chip over a bunker on to the green but three-putted for a double bogey 5.

Note-to-self (for the hundredth time): Stop thinking about the score, especially when you’re doing well and feeling in the zone, because you almost always ended up messing it up right after.

Current Score: +9

Hole #13 - Par 4 - 374 yards

Hit another solid drive to about 100 yards, my favorite approach distance. A well-practiced 56-degree shot put myself about 15 feet short of the hole. I missed the birdie putt and walked away with a par.

Current Score: +9

Hole #14 - Par 4 - 432 yards

I again pulled my driver into the rough and had to hit the second shot around a tree with my 4 iron. Chipped on to the green and missed an 8-foot par putt for a bogey.

Current Score: +10

Hole #15 - Par 5 - 488 yards

Attempting to avoid the chronic hooking, I pushed my tee shot to the right edge of the fairway. It was a par-5 so I was able to lay up, got on the green in 3, and two-putted for par.

Current Score: +10

Hole #16 - Par 4 - 320 yards

My tee shot yet again pushed right into the rough but luckily I had a shot at the green with about 100 yards left. Put that on the fringe and walked away with a two-putt par.

Current Score: +10

Hole #17 - Par 3 - 145 yards

This was a par-3 over water with a deep bunker front of the green. Put my 9-iron tee shot left of the green and chipped on with a two-putt for bogey 4.

Current Score: +11

Hole #18 - Par 4 - 390 yards

On this last hole, I piped it straight down the fairway with about 130 yards left. A PW shot put that on the green about 20 feet short of the hole. I then unexpectedly drained that uphill putt for a birdie to end a solid back 9 at +2.

Round Summary

wekiva 26 sept 2020

In total I hit 44 out and 38 in for a ten-over 82. For the first round of 18 after a long break and almost no practice sessions, I am quite pleased with the result.

Fairways hit: 8 of 14 (57%)
Greens in regulation: 10 of 18 (56%)
Up-and-downs: 2 of 6 (33%)
Putts: 35
Three-putts: 3

Some Takeaways

  • My irons and approaches felt pretty good without any catastrophic miss-hits, except on the two par-3s which costed me 4 strokes.
  • My putting did save me quite a few stokes. On those holes that I parred, there were several 4-5 feet knee-shakers as well as a couple of 6-8 feet ones.
  • The driver definitely needs work to straighten out these push/pull inconsistency.
  • Mentally, I need to stop worrying about the score and just relax and focus on one hole at a time.



Apple Central World Opens Friday in Thailand


Apple Newsroom:

Apple Central World’s distinctive architecture is brought to life with the first-ever all-glass design, housed under a cantilevered Tree Canopy roof. Once inside, customers can travel between two levels via a spiral staircase that wraps around a timber core, or riding a unique cylindrical elevator clad in mirror-polished stainless steel

Really great looking store. The all-glass exterior with the canopy is pretty much identical to that of the Steve Jobs theater at Apple Park.

apple nso bangkok forum 07282020

The Apple logo on the Video Wall also has a cool design, spelling out “Krung Thep” in Thai.

In the Thai-language news site MangoZero, Patta.pond got a chance to do a quick tour of the store and has some more photos from the inside, including the Boardroom in the basement. And if you look closely, I think one of the framed photos is the Steve Jobs theater.