Boba Quest: The Alley

As part of Boba Quest 🧋, I'm trying and reviewing a new boba shop each week whenever I have time.

After nearly seven years of conducting boba reviews, I have built up a decent ability to predict if the boba will be good or not. I will always get a drink so I'm not merely judging a book by its cover, but it's rare that I'm surprised.

The Alley in Montreal genuinely surprised me with its excellent boba tea. From the very first sip, I could tell this wasn't merely good boba, it was fantastic.

(Admittedly, I mostly picked this place because the anonymous Montrealer had declared it the king of Montreal boba...so it's really on me for being shocked at how good it was.)

Just two blocks over from my previous review, The Alley is right next to the Green Line's Guy–Concordia station. There used to be a New York City location that opened in 2019, but best I can tell, it's since closed down.

First boba shop I've been to with an indoor tree.

I ordered the Passionnément Deerioca (the menu was in French!), which is what they call their brown sugar milk tea with boba. I was not asked about my preferred sugar or ice levels.

  • Boba: 4/4 just perfection. Nicely sweet and exactly the correct chewiness. My first thought was that I had clearly forgotten how good boba could be and should probably downgrade some other places' scores.
  • Tea: 4/4 excellent; it melded smoothly with the boba without overpowering it.
  • Bonus: 1/1 the atmosphere in the store was really nice (there's even a tree inside!), I would've stuck around for longer if I had the time. I appreciated the deer iconography, I was initially quite impressed at how Canadian it all seemed (spoiler: it is not).

Total: 9/10. For those keeping track, The Alley is the fourth boba shop to earn a complete score. Whenever I'm next in Montreal, I'll make sure to visit again to see if it can earn the coveted tenth point for consistency.

About those deer...

The Alley is a Taiwanese chain, and the deer are also Taiwanese and endangered. TIL that Taiwan has deer; my sources tell me that they're even on the currency in Taiwan.

I'm slightly disappointed that the deer theme wasn't a Canadian thing, but I can't complain with boba this good. 🇨🇦


Do-the-work Git hosting 0.2

The next alpha version, 0.2, of my "do-the-work" Git repository viewer is now available; you can try it out on git.legoktm.com.

My previous post explained the rationale behind it; in short: this viewer is entirely client-side, which means it takes very minimal server resources to host. The clickbait version of this headline would call it scraper-proof.

You can obtain the newly rebranded "gib" 0.2 (aka git-in-browser) from git.legoktm.com. A signed build for WEBCAT (more on this later) can be downloaded from GitHub.

What's new#

I've written up a mostly complete changelog, the highlights are:

  • Render markdown files and images
  • Support downloading snapshots (tarballs)
  • Support downloading patches of commits
  • Display git notes
  • Rewrite names and email addresses per .mailmap
  • Support blame
  • Potentially faster git log lookups
  • Options to control how a diff looks

It's still nowhere near feature completion, but a lot closer to cgit. There was a lot of internal refactoring and in general just testing to verify behavior is as close to git as possible.

Performance#

There is a little bit of performance work in this release, such as support for commit-graph, but for a number of operations it's quite bad on what I'd consider to be a medium-sized repository. For a personal git host with mostly small projects, it's efficient enough!

I would like for 0.3 to spend a lot more time on performance.

xdiff#

Git uses a forked version of the xdiff algorithm for diffs, patches, blame, etc.; a standalone build is available as part of the libgit2 project.

Best I can tell, no one has actually done a 1:1 port to Rust. GitOxide uses a forked version of imara-diff (which AIUI is slightly different but pretty close), and there's a separate crate that statically links to xdiff.

Turns out it was relatively straightforward to compile the C code to WebAssembly, so I too punted on a Rust port. Never thought I'd be so happy to use C code instead of Rust.

WEBCAT#

WEBCAT is a project by Freedom of the Press Foundation (where I work!) to verify the integrity of in-browser, client-side applications to ensure they haven't been tampered with by the host. For example, CryptPad would sign their build, so you could be confident that the random hosting provider you're using hasn't tampered with it.

This is intended to be used by a future version of SecureDrop, so I wanted to get more familiar with it. In theory gib is fully compliant with what WEBCAT needs, but it's still a little buggy.

But if someone else did set up another gib instance, and properly registered the domain with WEBCAT, you could automatically verify they haven't tampered with it. There isn't that much practical advantage to doing so, since the hoster could merely tamper with the Git repositories themselves, but hey, it's cool!

Vibecoding#

gib is currently ~38k lines of code; probably 10% of it (and shrinking) was written by hand. I would've never been able to build something like this by myself in such a short amount of time.

I've largely used this as my "how far can I push LLMs" experimentation project; it's been interesting and just a little bit addicting. I think it certainly helps that I'm trying to reimplement well known functionality in a very different backend stack, rather than coming up with something novel.

I spot check the code and ocassionally tweak things by hand; I think the code quality is not terrible? The comments I missed rewriting/cleaning up are usually quite bad.

What's next#

Nothing, most likely. I worked on gib solely during vacation time, and now that school is starting up again, I would expect the project to go on hiatus.


Boba Quest: Machi Machi

As part of Boba Quest 🧋, I'm trying and reviewing a new boba shop each week whenever I have time.

Earlier this year, an anonymous Montrealer declared Machi Machi to be "an elite Boba shop for YUL".

I too am interested in having good boba, so I hopped on the plane to Montreal with my girlfriend, Kajol, so we could get Machi Machi. We met up with my friend Arlo to try out what the anonymous Montrealer tried: black milk tea with crème brûlée.

Machi Machi sits squarely between the Green Line's Guy–Concordia station and the Orange Line's Lucien-L'Allier station. For those not willing to make the trek up north just for some boba, there's also a location in Manhattan's Koreatown.

"Hello cutea. It's not just about a drink, but it's a way of life."
Truer words have never been written on a boba cup.

We ordered the black milk tea with crème brûlée, with boba, regular sugar (the ice quantity was fixed).

Arlo's review:

  • Boba: 4/4 he said it earned "top marks", and enjoyed the chewiness.
  • Tea: 3/4 he enjoyed it, but that "the flavours [sic] didn't push much beyond the milk".
  • Bonus: 0/1 it was nice, but nothing exceptional.

Total: 7/10 ultimately, Arlo said, "I would get it again."

Kajol's review:

  • Boba: 4/4 she said it had good chewiness, with good QQ.
  • Tea: 4/4 she liked it a lot, because you get bits of the crème brûlée as you drink.
  • Bonus: 0/1 she had wanted to give them half a point because of the cute cup and logo, but Boba Quest doesn't allow half points so she declined to give them a full bonus point.

Total: 8/10.

My review:

  • Boba: 3/4 the boba was slightly too chewy.
  • Tea: 4/4 because the crème brûlée is initially on the top and only later mixes in with the boba (despite my best attempts to mix it head of time), it really feels like you're getting two drinks in one.
  • Bonus: 0/1 agreed that it was nice but not exceptional.

Total: 7/10.

Just from walking around, the boba scene in Montreal looks far richer than I remember it being. Hopefully we'll have the opportunity to try a few more places before our boba vacation ends.


My free software toolkit for school, redux

Previously: 2018

I've tried my best to use only free software as part of going back to school, and for the most part I've been pretty successful.

I picked up a new Framework 13 right before school started. I appreciate having USB-C charging options on both sides and being able to move the HDMI port to either side depending on the configuration of the room.

Really I just like the orange color scheme I picked out for myself.

I installed Fedora Silverblue on it; I'm a really big fan of the whole atomic OS concept, it works quite well. I've been able to use Flatpaks for nearly everything.

Firefox: not much to say here, it just works.

LibreOffice: I take all my notes in LibreOffice, which is good enough as it's mostly just bullet points and a few tables here and there. All of our writing assignments are required to be submitted in .docx format, so my final step on every assignment is to convert my .odt to Word format. I think, but am not actually sure, Word may have better support for formatting and managing citations than LibreOffice. Its on my todo list to see what it would extra functionality writing an extension would give me.

Signal: our cohort's main group chat is in Signal, and so is my study group's. It wasn't even a thing I had to push for, it was the default that others chose! The only downside is that a number of people have set their profile name to a single letter or gibberish, so I've slowly had to set nicknames for everyone.

draw.io: I really like using draw.io to make a diagram version of my study guide, and my friends were pretty impressed with how nice they looked. During my first semester I used the website, but I've now switched to the offline Electron version.

Nextcloud: I store all of my school work in a self-hosted Nextcloud instance. I tried using the flatpak version of the desktop client but it had enough issues that I went back to the RPM version, which integrates with Nautilus much better.

Kiwix: one of my professors had a rule that if we were going to use our laptops, we had to be offline. I found myself wanting access to a dictionary to look up latin and archaic terms, so I downloaded the latest ZIM of English Wiktionary and used Kiwix to access it in class while staying offline.

KeePassXC: for reasons that make zero sense, our login sessions on Brightspace (LMS) and other CUNY websites expire after an hour, which is far too short, so you have to keep logging in, over and over again. It would be pretty hard to design a system to get people to hate 2FA more than this one. KeePassXC (and other password managers to be clear) lets me store a TOTP seed in the database and generate codes. So logging in becomes a dance of: Ctrl+B (copy username), Alt+Tab, Ctrl+V, Tab, Alt+Tab, Ctrl+C (copy password), Alt+Tab, Ctrl+V, Enter, Ctrl+Tab, Ctrl+T (copy TOTP), Alt+Tab, Ctrl+V, Enter.

Thunderbird is unfortunately not on this list because my school uses Outlook and they restrict OAuth access so I can't get it to work. Using webmail is actually awful, I can't believe that people have to deal with this for all their other email.


Review: The Odyssey (2026)

At some point in high school we read the Odyssey, and I really enjoyed it. I did not like Christopher Nolan's version.

Rating: 4/10

It really felt like he had read all of the different scenes in the story, figured out how to film them and then just shipped it as a movie. Anytime you base a movie off an established book (or poem!), there's a higher bar to clear to make it an engaging story, which wasn't met here.

Emily Wilson's critique resonated with me a lot. I can think of no good reason why you wouldn't include the whole "no man" gambit with the cyclops (and the cyclops didn't even look like what I imagined cyclopses look like).

It's funny that my main critique of a three-hour film is that it felt abridged and didn't go into suffient detail. Should've been a trilogy.


Review: Avatar Aang: The Last Airbender

Sixteen years of agony have finally come to an end, as the Avatar universe has finally received a movie worthy of its excellence. Avatar Aang: The Last Airbender is a nostalgic adventure that brings back most of the fun from the original television series.

The film was originally slated to be released in theaters, then it was leaked online, then Paramount cancelled the theatrical release, and then they backtracked just a little bit and did a one-week theatrical run in New York City and Los Angeles at a single theater each. I caught the very last show in NYC at 1:15am, and it was worth it.

I thought the movie did an excellent job coming up with a story that fit between the TV series and Legend of Korra without raising questions of why the latter never addressed it. It did require a bit of disbelief that some of the most important leaders of the world could all of a sudden abandon their posts when the Avatar asked, but hey, the gaang had to reunite for the nostalgia.

Unfortunately I don't think the movie would've done well as a general theatrical release. Most of the movie had no explainers for Avatar universe concepts, like bending, the spirit world, Republic City, and so on.

So I think it only works as movie for existing fans, but regardless, I am incredibly thrilled with that outcome. Rating: 8/10.

Spoilers ahead#

The coolest part was definitely the joint airbending that turned into tornado(!!) bending. I was not at all expecting a new bending mechanism.

It seemed a bit obvious that Tagah was a bad guy — otherwise why would he have been stuck in an air bubble prison for thousands of years. Using non-benders as the villain again felt unoriginal.

I appreciated that the entire plot revolved around a paradox: if Aang had never released Tagah or retrieved the staff, then nothing would have happened! But when Aang sees someone else trapped in an air bubble, just like how he was, he doesn't even stop to think before releasing them.

The ending was a bit cheesy with them discovering the herd of sky bison, but hey, it was cute. Nostalgia fulfilled.