This week felt like a large outlier in terms of overall productivity, when compared to the last few weeks of working from home. After listening to it being discussed on the Cortex podcast, I went and watched Inside Bill's Brain, a three-part documentary that looks at the mind and accomplishments of Bill Gates. It does a great job of covering both Bill's philanthropic efforts in the recent decade, as well as painting the picture of what his youth was like, and how he ended up growing Microsoft into the behemoth it is today.
One of the things from the documentary that stuck out to me the most was the fact that Bill carries around a tote bag full of ~10 books at all times. One of the central themes covered was that he is a voracious reader, and does so at a remarkable pace (allegedly reading around 50 books per year). In the film, Mike Slade exclaims that Bill "almost always knows more than the other person he's talking to about whatever it is".
This made me realize that as much as alternative forms of media are great for consumption, there's a level of in-depth knowledge about certain topics that can only be achieved by reading books. Unfortunately, as much as I would love to read paper books and build up a nice bookshelf, I find reading on my phone/iPad/Kindle much more convenient. Following along with my yearly theme of "communication", I'm trying to set aside some time every night to get some quality reading time in without other distractions.
Conveniently, there's a page on Bill's blog where he posts book reviews and lists what books are currently in his book bag, which gives some inspiration for things to read. I'm currently making my way through Thinking, Fast and Slow, in which Daniel Kahneman discusses the dichotomy between "System 1" (responsible for instinctive and emotional thought) and "System 2" (the logical part of the brain), and how the interplay between the two results in many of the cognitive biases we experience.
On the surface, the iPad Pro's hardware makes it seem like a very appealing device: 120Hz refresh rate on the screen, Apple Pencil support, and cellular connectivity for on-the-go computing. The thing that has constantly held it back is, of course, the software. Every year, though, the software story of the iPad improves, with iPadOS' release last year marking Apple's decision to treat the iPad like a more complete computing platform rather than an oversized iPhone.
Using my iPad Pro as a reading device more and seeing the release of the new iPad-specific Magic Keyboard (which looks to me like the ultimate peripheral for transforming the iPad a computer replacement) has yet again led me down the road of trying to turn it into my daily productivity driver.
Every time I attempt to do this, I end up Googling "iPad as a development machine" to see what innovations or hacky workarounds people have came up with. One of the limitations of doing development on an iPad is that previously, you needed to have some sort of a VPS to SSH into to do work (though this is potentially changing due to experimental apps like iSH, which offers a local Linux shell).
Although I have a free-tier VPS for this very purpose, it would be nice to be able to remotely connect to my home computer, which is significantly more powerful and actually contains the files I need. Under this paradigm, the iPad acts as a remote terminal that I can use to access my main computer, regardless of whether I'm actually at home.
Previously, this would have required setting up a VPN which sounded complicated and I didn't want to do, but a couple of blog posts pointed to Tailscale, which creates a WireGuard-backed private network between all of your devices. Since they have a free tier for individuals, I decided to try it out, and it works great! By connecting my laptop and my iPad, I could SSH from my iPad to my laptop as if it were just another server on the Internet. As you might expect, I could also start a local web server on my laptop and access it from Safari on my iPad by hitting the same IP address, meaning real web development is on the table!
Since each unique device is assigned a static IP under the Tailscale network, I wanted to get a bit cute and assign each of my devices/servers a convenient alias (eg. hostname.ikeviny.dev
), since I've had this domain for a while but am not currently using it for anything. While this mostly works, I discovered that .dev
(like .app
) is one of the TLDs on the "HSTS preload list", which is a fancy way of saying that all modern browser will automatically redirect requests to http://foo.dev
to https://foo.dev
instead.
While this security-forward decision is great for users and the web in general, it's kind of a pain for development. If I start a local server on my laptop and try to access it from my iPad via the .dev
alias, because of the HSTS preload list, the request will be unconditionally transformed into an HTTPS and subsequently fail (since development servers are generally not configured to know how to serve requests over TLS). There are two ways around this: either hitting the IP address of the machine directly (not as pretty), or starting a TLS-compatible development server (a non-trivial amount of work).
That being said, my current setup seems promising, and I'll likely write up a more complete blog post to add to the global "iPad development machine" knowledge-base once I solidify everything. For now, I'm desperately awaiting the shipment of my Magic Keyboard.
Spending five years studying computer science has led me to write any sort of non-code prose in LaTeX, and my resume is no exception. I have a script that compiles the PDF and then uploads it to a Google Cloud Storage bucket. I had procrastinated setting up a continuous build for this since it's very low-effort to run the script, but moving my development environment onto my iPad requires leaning more heavily on various forms of automation.
I had been hesitant to try out GitHub Actions since up until this point, Travis CI does everything that I need from a CI platform and I'm already familiar with Travis' syntax, but one day I had a sudden urge to try out GitHub Actions. To my delight, it only took about an hour to create a workflow that was able to compile LaTeX and authenticate and push to Google Cloud Storage. Now whenever I push a new commit to my resume repository, a new version of the PDF is automatically compiled and uploaded.
This experience with Github Actions led me to finally build a horrible idea that I've had for a while --- a URL shortener powered by GitHub Issues. There are a bunch of websites that I reference or want to link people to on a somewhat frequent basis, but my way of retrieving the links is usually via a convoluted set of Google keywords that I vaguely remember. At work, we're spoiled with "golinks" to access most things, and I've wanted to have something similar for personal links as well.
A couple of hours and ~100 lines of code later, I had a working prototype. Modifying any of the issues in the repository triggers a build, which uses the GitHub API to load all open issues, parse the slug, URL, description, and categories from the issues' title/body/tags, and uses Jinja2 templates to generate a "nice" index page and redirect pages for each of the shortened links. The generated pages are committed back to the docs/
directory of the repository, which is statically served by GitHub Pages.
Now I can just go to kyap.me/tft-patch to get to the most recent patch notes for Teamfight Tactics, or go directly to kyap.me to look at all the links that I've bookmarked to spark my memory. I think I'm going to keep the no-CSS look, because it makes me feel like a cool, Web 1.0 Developerâ„¢.
Finally, to bring some solace to current situation, Vihart published a great video providing an overview of a four-phase, staggered roadmap to reopen the US in a safe manner through "testing, tracing, and supported isolation". I'm glad that in a time where things are looking dire and partisanship has somehow crept into the response to a pandemic of all things, there are still intelligent people from all political backgrounds trying to search for a return to normalcy.
Hoping to continue this productive streak into the next week. Stay safe everyone!