<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Lego Mirror</title><id>https://blog.legoktm.com/</id><updated>2026-10-02T03:06:00+00:00</updated><link href="https://blog.legoktm.com/" rel="alternate"/><link href="https://blog.legoktm.com/feeds/all.atom.xml" rel="self"/><entry><title>Provisional relief in college athletics</title><id>tag:blog.legoktm.com,2026-10-01:/2026/10/01/provisional-relief-in-college-athletics.html</id><updated>2026-10-02T03:06:00+00:00</updated><author><name>legoktm</name></author><category term="LawSchool"/><category term="civpro"/><category term="labor"/><category term="lawschool"/><category term="sports"/><link href="https://blog.legoktm.com/2026/10/01/provisional-relief-in-college-athletics.html" rel="alternate"/><published>2026-10-02T03:06:00+00:00</published><summary type="html">I wrote the following as extra credit for my civil procedure class as an example of how provisional relief is used in the real world, specifically in the ongoing litigation around college athletics. This comes right as Congress is in the process of reversing the Supreme Court in order to…</summary><content type="html">&lt;p&gt;I wrote the following as extra credit for my civil procedure class as an example of how provisional relief is used in the real world, specifically in the ongoing litigation around college athletics. This comes right as Congress is in the process of reversing the Supreme Court in order to roll back one the biggest labor victories of the past decade.&lt;/p&gt;
&lt;p&gt;I&apos;m quite proud of what I submitted (I wrote twice the required length), so I&apos;m sharing it here in the original form I turned it in in.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Historically the National Collegiate Athletic Association (NCAA) put a significant emphasis on players being amateurs: playing for the love of the game and not money. Meanwhile, coaches and administrators raked in billions off the backs of unpaid athletes, who never saw a dime. The courts have finally started to catch up with this crisis; the Supreme Court unanimously ruled in &lt;em&gt;NCAA v. Alston&lt;/em&gt; (2021) that the NCAA’s restrictions against athletes from profiting off of their own name, image, likeness (NIL) was a violation of antitrust law. Justice Kavanaugh took it one step further in his concurrence, writing, “Nowhere else in America can businesses get away with agreeing not to pay their workers a fair market rate on the theory that their product is defined by not paying their workers a fair market rate. And under ordinary principles of antitrust law, it is not evident why college sports should be any different. The NCAA is not above the law.” And lawyers all across the country have taken his words to heart, beating the NCAA in just about every major court case since.&lt;/p&gt;
&lt;p&gt;Fast-forward to 2024, many college football players are being paid through the guise of NIL – in some cases earning generational wealth in a few years. So now plenty of other people want in on the money, setting up a legal battle over the NCAA’s previously ironclad eligibility rules. In short, athletes have four years of eligibility, but once you go pro (e.g. NFL, NBA) you can’t come back to NCAA sports.&lt;/p&gt;
&lt;p&gt;In 2024, Vanderbilt quarterback Diego Pavia sued the NCAA under the Sherman Antitrust Act, saying that the year he played football at a junior college shouldn’t count towards his eligibility because it limited his ability to profit in Division I football. He asked for a preliminary injunction to prevent the NCAA from enforcing its rules against him. Ruling in favor of Pavia, the judge walked through the same standards we learned in class: 1) likelihood of success on the merits: plaintiffs appear to meet the criteria the Supreme Court laid out in &lt;em&gt;Alston&lt;/em&gt;, 2) irreparable harm: many courts have found that being unable to play sports is irreparable harm 3) balance of equities &amp;amp; public interest: it’s narrow towards Pavia only, and the public wants free and fair markets. (The judge combined parts 3 and 4 into one analysis step.) The motion for an injunction ended up being the entire battle, as the NCAA granted all junior college athletes an eligibility waiver, leading to the dismissal of Pavia’s case for mootness.&lt;/p&gt;
&lt;p&gt;In 2025, the &lt;em&gt;House v. NCAA&lt;/em&gt; settlement was finalized, allowing colleges to directly pay athletes through revenue-sharing. The next fight over eligibility was for people who technically went pro, but didn’t properly make it, so they wanted to come back to college to earn a stable income (and presumably also to study).&lt;/p&gt;
&lt;p&gt;Despite having previously signed an NBA contract, former University of Alabama basketball player Charles Bediako tried to make a comeback, and sued the NCAA in early 2026 after they denied his eligibility. In state court, Bediako won a temporary restraining order for 10 days, allowing him to play. Five games later, the same judge – an Alabama alumnus – reversed his position, denying Bediako’s motion for a preliminary injunction. Bediako’s situation illustrates the different circumstances between temporary restraining orders and preliminary injunctions.&lt;/p&gt;
&lt;p&gt;Right as we were discussing provisional relief in class, two former University of Mississippi football players, who signed pro contracts and participated in NFL training camps, attempted to play at LSU with their former coach. A Louisiana state judge granted them a temporary restraining order against the NCAA from enforcing eligibility rules on August 19th. The Southeastern Conference (SEC), of which Mississippi, Alabama, and LSU are all members, then passed a policy banning former professional players. The players responded by filing for and receiving an expanded temporary restraining order that covered the SEC too on August 28th. After a hearing, the judge granted them a preliminary injunction on September 3th – two days before LSU’s first game on the 5th. Unhappy with the outcome, the NCAA and SEC filed suit in federal court asking for their own injunctions. As best I can tell, that litigation is still pending, but it may be moot. Multiple opponents threatened to cancel their games with LSU, and the rest of the SEC threatened to kick LSU out of the conference entirely, so in the end, the coach didn&apos;t add either player to the final roster despite both of them thoroughly winning in court.&lt;/p&gt;
&lt;p&gt;To some extent this whole situation is ridiculous, you can’t run a coherent sports league when random state judges – often alumni of the school in question – are issuing temporary restraining orders and preliminary injunctions and then flip-flopping each week. The NCAA also appears to not be interested in letting cases actually get decided on the merits to avoid the risk of losing. Instead it’s taken its case to Congress, which is working on a “Protect College Sports Act” to take away legal victories from athletes and “protect” coaches’ and universities’ profits.&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.supremecourt.gov/opinions/20pdf/20-512_gfbh.pdf&quot;&gt;&lt;em&gt;NCAA v. Alston&lt;/em&gt;&lt;/a&gt; 594 U.S. 69 (2021)&lt;/li&gt;
&lt;li&gt;ESPN: &lt;a href=&quot;https://www.espn.com/college-football/story/_/id/43131557/ncaa-division-board-grants-waiver-former-juco-players-appealing-diego-pavia-injunction&quot;&gt;NCAA grants waiver to ex-JUCO players while appealing Pavia ruling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ESPN: &lt;a href=&quot;https://www.espn.com/college-football/story?_slug_=vanderbilt-qb-diego-pavia-granted-injunction-allowing-extra-year-eligibility&amp;amp;id=43048561&quot;&gt;Vanderbilt&apos;s Diego Pavia granted injunction allowing for added eligibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.justia.com/cases/federal/district-courts/tennessee/tnmdce/3:2024cv01336/101902/41&quot;&gt;&lt;em&gt;Pavia v. NCAA&lt;/em&gt; Memorandum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AP: &lt;a href=&quot;https://apnews.com/article/ncaa-eligibility-kiffin-lsu-sec-ff59236793bdefab677ceb728599aa84&quot;&gt;Louisiana judge rules against NCAA, clearing path for former NFL players to join LSU roster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ESPN: &lt;a href=&quot;https://www.espn.com/college-football/story/_/id/49807088/judge-grants-injunction-pro-players-seeking-lsu-return&quot;&gt;Judge grants injunction to pro players seeking LSU return&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ESPN: &lt;a href=&quot;https://www.espn.com/college-football/story/_/id/49816309/sec-files-suit-vs-lsu-school-intent-play-pro-athletes&quot;&gt;SEC files suit vs. LSU over school&apos;s intent to play pro athletes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;USA Today: &lt;a href=&quot;https://www.usatoday.com/story/sports/ncaaf/sec/2026/09/03/ncaa-sec-lsu-court-case-nfl-player-eligibility/91586392007/&quot;&gt;NCAA, SEC, LSU head to court in player eligibility case. What sides stand to gain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;USA Today: &lt;a href=&quot;https://www.usatoday.com/story/sports/ncaaf/2026/08/27/judge-sec-punishment-block-sec-greg-sankey/91500197007/&quot;&gt;Judge issues order prohibiting SEC from punishing schools for players from pro rosters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ESPN: &lt;a href=&quot;https://www.espn.com/mens-college-basketball/story/_/id/47881339/judge-denies-charles-bediako-motion-injunction-play-alabama-crimson-tide-men-basketball-season&quot;&gt;Judge rules Charles Bediako no longer eligible to play for Alabama&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ESPN: &lt;a href=&quot;https://www.espn.com/mens-college-basketball/story/_/id/47682389/charles-bediako-gets-tro-alabama-return-ncaa-lawsuit&quot;&gt;Charles Bediako gets TRO for Alabama return in NCAA lawsuit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CBS Sports: &lt;a href=&quot;https://www.cbssports.com/college-football/news/conference-realignment-protect-college-sports-act-senate-revision/&quot;&gt;Senate softens realignment rules in revised Protect College Sports Act, opens door for movement in 2030s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Athletic: &lt;a href=&quot;https://www.nytimes.com/athletic/7579197/2026/09/09/lsu-sec-hearing-lawsuit-lane-kiffin/&quot;&gt;Is LSU vs. SEC feud cooling? Lawsuit hearing postponed, president says roster issue ‘moot’&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content></entry><entry><title>Speaking at Qubes OS Summit 2026</title><id>tag:blog.legoktm.com,2026-09-21:/2026/09/21/speaking-at-qubes-os-summit-2026.html</id><updated>2026-09-22T03:07:00+00:00</updated><author><name>legoktm</name></author><category term="SecureDrop"/><category term="fpf"/><category term="qubes"/><category term="securedrop"/><link href="https://blog.legoktm.com/2026/09/21/speaking-at-qubes-os-summit-2026.html" rel="alternate"/><published>2026-09-22T03:07:00+00:00</published><summary type="html">I will speaking (remotely) at the Qubes OS Summit 2026 at the end of October: Making Qubes and SecureDrop better, together. Here&apos;s the abstract: SecureDrop uses Qubes OS to power its next-generation journalist workstation because of its strong security properties. Over the years we have developed a good working relationship…</summary><content type="html">&lt;p&gt;I will speaking (remotely) at the Qubes OS Summit 2026 at the end of October: &lt;a href=&quot;https://pretalx.com/qubes-os-summit-2026/talk/JMDRXT/&quot;&gt;Making Qubes and SecureDrop better, together&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&apos;s the abstract:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SecureDrop uses Qubes OS to power its next-generation journalist workstation because of its strong security properties. Over the years we have developed a good working relationship with the Qubes team, including financially supporting development in a way that benefits all Qubes users. At the same time, SecureDrop has also benefited from improvements in Qubes that we never thought to ask for or could imagine. Instead of fearing the churn and busy work caused by major Qubes upgrades, we look forward to them because we get a new set of features that make our lives easier.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;After briefly introducing the SecureDrop Workstation for context, this talk will cover a number of features that the SecureDrop team asked for and/or financially supported, as well as features that Qubes introduced independently that benefited us. Some of these are big headline features, while others are small, niche ones. For example, we had a long running task to introduce per-source dispVMs to avoid journalists having to wait for a dispVM to launch, which was resolved by the introduction of preloaded dispVMs. Or the introduction of QubesDB’s vm-config, which allowed us to dramatically simplify our provisioning and configuration logic while improving our security posture through dispVM adoption.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Finally the talk will conclude with a small wishlist of upstream improvements we’d love to see and what we hope to accomplish next.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The talk is scheduled for 11:20am CET / 6:20am EST on Oct. 30, 2026; it should be recorded and likely livestreamed too.&lt;/p&gt;
</content></entry><entry><title>Forking rocket_dyn_templates into rocket_tera</title><id>tag:blog.legoktm.com,2026-09-05:/2026/09/05/forking-rocket_dyn_templates-into-rocket_tera.html</id><updated>2026-09-06T02:25:00+00:00</updated><author><name>legoktm</name></author><category term="Tech"/><category term="rocket"/><category term="rust"/><category term="tera"/><link href="https://blog.legoktm.com/2026/09/05/forking-rocket_dyn_templates-into-rocket_tera.html" rel="alternate"/><published>2026-09-06T02:25:00+00:00</published><summary type="html">I have forked the rocket_dyn_templates crate into a new rocket_tera one. I believe the approach I&apos;ve settled on will be better for both users and make it easier to maintain long-term. Background rocket_dyn_templates provides integration between the Rocket web server framework, and three different templating libraries: tera, handlebars, and minijinja.…</summary><content type="html">&lt;p&gt;I have forked the &lt;a href=&quot;https://lib.rs/crates/rocket_dyn_templates&quot;&gt;&lt;code&gt;rocket_dyn_templates&lt;/code&gt;&lt;/a&gt; crate into a new &lt;a href=&quot;https://lib.rs/crates/rocket_tera&quot;&gt;&lt;code&gt;rocket_tera&lt;/code&gt;&lt;/a&gt; one. I believe the approach I&apos;ve settled on will be better for both users and make it easier to maintain long-term.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;background-b53e&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Background&lt;/span&gt;&lt;a href=&quot;/2026/09/05/forking-rocket_dyn_templates-into-rocket_tera.html#background-b53e&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;rocket_dyn_templates&lt;/code&gt; provides integration between the &lt;a href=&quot;https://rocket.rs/&quot;&gt;Rocket web server framework&lt;/a&gt;, and three different templating libraries: &lt;a href=&quot;https://keats.github.io/tera/&quot;&gt;tera&lt;/a&gt;, handlebars, and minijinja. When I initially started working on Rust projects, I picked Rocket because of its similarity to Flask, and Tera because of its similarity to jinja (at the time minijinja wasn&apos;t supported).&lt;/p&gt;
&lt;p&gt;Rocket is un(der)maintained, to say the least. For me at least this hasn&apos;t been a major issue and honestly I appreciate there isn&apos;t a giant amount of churn in the ecosystem.&lt;/p&gt;
&lt;p&gt;tera 2.0 came out in June, and it has a lot of features I want, specifically: much better validation and components. I don&apos;t expect for &lt;code&gt;rocket_dyn_templates&lt;/code&gt; to get updated for it anytime soon, so I&apos;ve forked it into &lt;code&gt;rocket_tera&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;forking-b53e&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Forking&lt;/span&gt;&lt;a href=&quot;/2026/09/05/forking-rocket_dyn_templates-into-rocket_tera.html#forking-b53e&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As the name implies, this new crate only supports tera templates. I don&apos;t use handlebars or minijinja, and am not interested in maintaining such functionality.&lt;/p&gt;
&lt;p&gt;Plus I think slimming it down will make it easier to maintain by reducing the scope, at the cost of a little bit of duplication when someone else inevitably makes &lt;code&gt;rocket_handlebars&lt;/code&gt; and &lt;code&gt;rocket_minijinja&lt;/code&gt; crates.&lt;/p&gt;
&lt;p&gt;My goal is to just keep the existing shape of the crate while keeping it up to date with upstream releases.&lt;/p&gt;
&lt;p&gt;The Git repository at &lt;a href=&quot;github.com/legoktm/rocket_tera&quot;&gt;https://github.com/legoktm/rocket_tera&lt;/a&gt; retains nearly all the split Git history. I&apos;ve set up &lt;a href=&quot;https://crates.io/docs/trusted-publishing&quot;&gt;trusted publishing&lt;/a&gt;, which was quite straightforward.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;migrating-b53e&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Migrating&lt;/span&gt;&lt;a href=&quot;/2026/09/05/forking-rocket_dyn_templates-into-rocket_tera.html#migrating-b53e&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&apos;ve tried to make migrating as straightforward as possible with a pretty minimal set of changes. Upgrading is a two-step process and documented in &lt;a href=&quot;https://github.com/legoktm/rocket_tera/blob/main/UPGRADING.md&quot;&gt;UPGRADING.md&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In v1, all of the handlebars/minijinja code has been removed, which allows for some API simplification. Notably, templates no longer need a &lt;code&gt;*.tera&lt;/code&gt; extension, because we now know that all templates are tera :)&lt;/p&gt;
&lt;p&gt;v2 is primarily upgrading from tera v1 to v2, which has its own &lt;a href=&quot;https://github.com/Keats/tera/blob/master/MIGRATION.md&quot;&gt;migration guide&lt;/a&gt;. A number of upstream filters and functions were moved to a new &lt;code&gt;tera_contrib&lt;/code&gt; crate, so there are features in &lt;code&gt;rocket_tera&lt;/code&gt; to seamlessly make it work.&lt;/p&gt;
&lt;p&gt;Note: I have only issued RC releases for both, &lt;code&gt;1.0.0-rc3&lt;/code&gt; and &lt;code&gt;2.0.0-rc2&lt;/code&gt;; I&apos;ll wait about a week for any feedback and then cut stable releases.&lt;/p&gt;
</content></entry><entry><title>Proposal for a dedicated archive site for Wikipedia</title><id>tag:blog.legoktm.com,2026-08-28:/2026/08/28/proposal-for-a-dedicated-archive-site-for-wikipedia.html</id><updated>2026-08-28T20:20:00+00:00</updated><author><name>legoktm</name></author><category term="MediaWiki"/><category term="copyright"/><category term="internetarchive"/><category term="wikipedia"/><link href="https://blog.legoktm.com/2026/08/28/proposal-for-a-dedicated-archive-site-for-wikipedia.html" rel="alternate"/><published>2026-08-28T20:20:00+00:00</published><summary type="html">In February when English Wikipedia (and a few months later, all of Wikimedia) banned usage of archive.today (aka archive.is), there was a bit of a crisis in needing to find alternative archives. For reasons, archive.today was especially good at archiving some difficult websites that weren&apos;t available in the Wayback Machine.…</summary><content type="html">&lt;p&gt;In February when English Wikipedia (and a few months later, all of Wikimedia) &lt;a href=&quot;https://en.wikipedia.org/wiki/Wikipedia:Archive.today_guidance&quot;&gt;banned usage of &lt;code&gt;archive.today&lt;/code&gt;&lt;/a&gt; (aka &lt;code&gt;archive.is&lt;/code&gt;), there was a bit of a crisis in needing to find alternative archives.&lt;/p&gt;
&lt;p&gt;For reasons, archive.today was especially good at archiving some difficult websites that weren&apos;t available in the Wayback Machine. I know a lot of people used it to bypass paywalls, and for related or unrelated reasons, there was an FBI investigation into the site.&lt;/p&gt;
&lt;p&gt;I don&apos;t really have much sympathy for the archive.today operator after they &lt;a href=&quot;https://en.wikipedia.org/wiki/Wikipedia:Requests_for_comment/Archive.is_RFC#Background&quot;&gt;abused open proxies and/or a botnet to linkspam across Wikipedia&lt;/a&gt; over a decade ago, but I certainly get why they want to remain anonymous.&lt;/p&gt;
&lt;p&gt;Wikipedia editors have &lt;a href=&quot;https://en.wikipedia.org/wiki/Wikipedia:Village_pump_(idea_lab)/Archive_77#h-Better_solutions_for_archiving_web_pages-20260212113800&quot;&gt;started discussing&lt;/a&gt; what a better solution to archiving webpages could be, with much of the discussion focusing on copyright.&lt;/p&gt;
&lt;p&gt;As far as I know, no solution has actually materialized, so I thought I&apos;d at least write down my idea. I am not actually planning to implement this, so feel free to steal this idea, my only ask is that you give it a hella sick name.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;overview-afc1&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Overview&lt;/span&gt;&lt;a href=&quot;/2026/08/28/proposal-for-a-dedicated-archive-site-for-wikipedia.html#overview-afc1&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While a having a generic web archive is incredibly useful, I want to just focus on building a web archive that meets what Wikipedia needs.&lt;/p&gt;
&lt;p&gt;For basic features we want that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;editors can add new URLs to the archive&lt;/li&gt;
&lt;li&gt;readers and editors can verify claims cited to that URL after the link is dead&lt;/li&gt;
&lt;li&gt;editors should be able to use the archived copy to add other claims to articles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And that editors can reuse their Wikipedia accounts for authentication via OAuth.&lt;/p&gt;
&lt;p&gt;The workflow of my proposed archive would look like:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Editors visit a website, and take a copy.&lt;/li&gt;
&lt;li&gt;When uploading their copy to the archive, editors need to annotate the specific parts that are being used for citations.&lt;/li&gt;
&lt;li&gt;Readers can view only the annotated snippets that back up those citations.&lt;/li&gt;
&lt;li&gt;After paying a non-monetary fee, editors can view the full copy of an article in order to annotate other snippets to use as further citations.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I think this meets both Wikipedia&apos;s requirements and minimizes legal risk.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;user-generated-content-afc1&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;User-generated content&lt;/span&gt;&lt;a href=&quot;/2026/08/28/proposal-for-a-dedicated-archive-site-for-wikipedia.html#user-generated-content-afc1&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Unlike most other archives I know of, I would have users upload the archived content. By treating the archives as user-generated content, we get to take advantage of a number of legal protections, like &lt;a href=&quot;https://en.wikipedia.org/wiki/Section_230&quot;&gt;Section 230&lt;/a&gt; in the U.S.&lt;/p&gt;
&lt;p&gt;Editors would install a browser extension that when asked, would capture a &lt;a href=&quot;https://en.wikipedia.org/wiki/WARC_(file_format)&quot;&gt;WARC&lt;/a&gt; (or similar) of the URL, and then upload it to the archive. It would be nice if there&apos;s some cryptographic way to verify the request wasn&apos;t tampered with (e.g. looking at the TLS connection?) but even without that, uploads would still be associated with specific editors, so if someone was caught falsifying, we&apos;d be able to track it, just like you would deal with on Wikipedia.&lt;/p&gt;
&lt;p&gt;This also conviently works around the drastic increase in scraper blockers that have started to lock down the internet by doing it in the user&apos;s browser. For some very dynamic content, we might also want to capture a screenshot, so if it relies on some complex JS or APIs, we can at least display what it looked like.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;annotated-snippets-afc1&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Annotated snippets&lt;/span&gt;&lt;a href=&quot;/2026/08/28/proposal-for-a-dedicated-archive-site-for-wikipedia.html#annotated-snippets-afc1&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The biggest change would be that editors need to annotate specifically which part of the webpage is being cited. I think this is a good practice for citations in general.&lt;/p&gt;
&lt;p&gt;But because we&apos;d only publicly display the limited snippet, it would work around the archive being used to bypass paywalls. Displaying a limited amount greatly &lt;a href=&quot;https://en.wikipedia.org/wiki/Fair_use#3._Amount_and_substantiality&quot;&gt;works in our favor&lt;/a&gt; for a fair use claim; to quote Wikipedia:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In general, the less that is used in relation to the whole, the more likely the use will be considered fair.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We&apos;d need to develop some system to keep these snippets in sync with the on-wiki citations; I don&apos;t imagine it would be that complex to figure out.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;paying-for-full-access-afc1&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Paying for full access&lt;/span&gt;&lt;a href=&quot;/2026/08/28/proposal-for-a-dedicated-archive-site-for-wikipedia.html#paying-for-full-access-afc1&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While the snippets are sufficient for readers, editors might want to reference back to the full text for the purpose of expanding an article or just doing a more thorough fact check. I think we can still discourage the paywall bypass use-case by requiring editors to pay a small fee for access.&lt;/p&gt;
&lt;p&gt;But instead of charging money, editors can pay with Wikipedia edits, e.g. 5 edits per URL. I think this would provide a small bit of friction that editors would only use it when they actually need it, but not enough to actually stop someone who genuinely needs access.&lt;/p&gt;
&lt;p&gt;And of course if someone did choose to &amp;quot;game the system&amp;quot; to use it to bypass paywalls, they&apos;d only be able to do so by actually contributing to Wikipedia, so... still a win.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;moderation-afc1&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Moderation&lt;/span&gt;&lt;a href=&quot;/2026/08/28/proposal-for-a-dedicated-archive-site-for-wikipedia.html#moderation-afc1&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think it&apos;s quite difficult to launch a new site that accepts user-generated content, since you need to have a plan for content moderation. By building a Wikipedia-focused archive, we can piggyback on the existing Wikipedia community processes to help with this.&lt;/p&gt;
&lt;p&gt;If you get blocked on Wikipedia, then you&apos;re blocked on the archive too. Have advanced administrator permissions on Wikipedia? We can automatically give you extra permissions on the archive. And so on.&lt;/p&gt;
&lt;p&gt;I&apos;m not sure if that would be sufficient long-term or just a temporary thing to help while it bootstraps and gets established.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;last-thoughts-afc1&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Last thoughts&lt;/span&gt;&lt;a href=&quot;/2026/08/28/proposal-for-a-dedicated-archive-site-for-wikipedia.html#last-thoughts-afc1&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think the social and legal parts of this are far harder to get right; in comparison the technology seems pretty straightforward. I think it would be beneficial to have this be a separate LLC (i.e. not part of the Wikimedia Foundation) to isolate risk and allow for more flexibility.&lt;/p&gt;
&lt;p&gt;While I think I&apos;ve covered the primary legal bases, &lt;a href=&quot;/2025/07/04/a-small-change-in-plans.html&quot;&gt;IANALY&lt;/a&gt; of course, it&apos;s entirely possible I&apos;ve missed something. This is also a rather conservative proposal, and may have the consequence of shifting legal risk from the archive to individual users (though arguably that&apos;s how Wikipedia is already set up).&lt;/p&gt;
&lt;p&gt;There are probably refinements to be made, or if you think I&apos;m totally off, please, &lt;a href=&quot;https://en.wikipedia.org/wiki/Ward_Cunningham#Cunningham&amp;#x27;s_Law&quot;&gt;pitch your own proposal&lt;/a&gt;!&lt;/p&gt;
</content></entry><entry><title>Boba Quest: The Alley</title><id>tag:blog.legoktm.com,2026-08-25:/2026/08/25/boba-quest-the-alley.html</id><updated>2026-08-26T00:25:00+00:00</updated><author><name>legoktm</name></author><category term="BobaQuest"/><category term="boba"/><category term="bobaquest"/><category term="montreal"/><category term="review"/><link href="https://blog.legoktm.com/2026/08/25/boba-quest-the-alley.html" rel="alternate"/><published>2026-08-26T00:25:00+00:00</published><summary type="html">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&apos;m not merely judging a book by its cover, but it&apos;s rare that I&apos;m surprised. The Alley in…</summary><content type="html">&lt;p&gt;&lt;em&gt;As part of &lt;a href=&quot;https://legoktm.com/bobaquest/&quot;&gt;Boba Quest 🧋&lt;/a&gt;, I&apos;m trying and reviewing a new boba shop &lt;del&gt;each week&lt;/del&gt; whenever I have time.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;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&apos;m not merely judging a book by its cover, but it&apos;s rare that I&apos;m surprised.&lt;/p&gt;
&lt;p&gt;The Alley in Montreal genuinely surprised me with its excellent boba tea. From the very first sip, I could tell this wasn&apos;t merely good boba, it was fantastic.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/images/thealley1.jpg&quot; class=&quot;height-400&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;(Admittedly, I mostly picked this place because the anonymous Montrealer &lt;a href=&quot;https://michelinstarfinedinings.wordpress.com/2022/12/17/the-alley-montreal-the-current-king-of-the-bubble-tea-in-town/&quot;&gt;had declared it&lt;/a&gt; the king of Montreal boba...so it&apos;s really on me for being shocked at how good it was.)&lt;/p&gt;
&lt;p&gt;Just two blocks over from my &lt;a href=&quot;/2026/08/16/boba-quest-machi-machi.html&quot;&gt;previous review&lt;/a&gt;, The Alley is right next to the Green Line&apos;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Guy%E2%80%93Concordia_station&quot;&gt;Guy–Concordia station&lt;/a&gt;. There used to be a New York City location that opened in 2019, but best I can tell, it&apos;s since closed down.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/images/thealley2.jpg&quot; class=&quot;height-500&quot;&gt;
    &lt;figcaption&gt;First boba shop I&apos;ve been to with an indoor tree.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Boba: &lt;strong&gt;4/4&lt;/strong&gt; just perfection. Nicely sweet and exactly the correct chewiness. My first thought was that I had clearly forgotten how good boba &lt;em&gt;could&lt;/em&gt; be and should probably downgrade some other places&apos; scores.&lt;/li&gt;
&lt;li&gt;Tea: &lt;strong&gt;4/4&lt;/strong&gt; excellent; it melded smoothly with the boba without overpowering it.&lt;/li&gt;
&lt;li&gt;Bonus: &lt;strong&gt;1/1&lt;/strong&gt; the atmosphere in the store was really nice (there&apos;s even a tree inside!), I would&apos;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).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Total: &lt;strong&gt;9/10&lt;/strong&gt;. For those keeping track, The Alley is the fourth boba shop to earn a complete score. Whenever I&apos;m next in Montreal, I&apos;ll make sure to visit again to see if it can earn the coveted tenth point for consistency.&lt;/p&gt;
&lt;p&gt;About those deer...&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/images/thealley3.jpg&quot; class=&quot;height-500&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;The Alley is a Taiwanese chain, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Formosan_sika_deer&quot;&gt;deer are also Taiwanese&lt;/a&gt; and endangered. TIL that Taiwan has deer; my sources tell me that they&apos;re even on the &lt;a href=&quot;https://en.wikipedia.org/wiki/New_Taiwan_dollar#Banknotes&quot;&gt;currency&lt;/a&gt; in Taiwan.&lt;/p&gt;
&lt;p&gt;I&apos;m slightly disappointed that the deer theme wasn&apos;t a Canadian thing, but I can&apos;t complain with boba this good. 🇨🇦&lt;/p&gt;
</content></entry><entry><title>Do-the-work Git hosting 0.2</title><id>tag:blog.legoktm.com,2026-08-24:/2026/08/24/do-the-work-git-hosting-02.html</id><updated>2026-08-25T02:10:00+00:00</updated><author><name>legoktm</name></author><category term="Tech"/><category term="fpf"/><category term="freedom"/><category term="git"/><category term="llm"/><category term="rust"/><category term="webcat"/><link href="https://blog.legoktm.com/2026/08/24/do-the-work-git-hosting-02.html" rel="alternate"/><published>2026-08-25T02:10:00+00:00</published><summary type="html">The next alpha version, 0.2, of my &quot;do-the-work&quot; 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…</summary><content type="html">&lt;p&gt;The next alpha version, 0.2, of my &amp;quot;do-the-work&amp;quot; Git repository viewer is now available; you can try it out on &lt;a href=&quot;https://git.legoktm.com/&quot;&gt;git.legoktm.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My &lt;a href=&quot;/2026/06/14/do-the-work-instead-of-proof-of-work-for-git-hosting.html&quot;&gt;previous post&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;You can obtain the newly rebranded &amp;quot;gib&amp;quot; 0.2 (aka git-in-browser) from &lt;a href=&quot;https://git.legoktm.com/public/webgit.git&quot;&gt;git.legoktm.com&lt;/a&gt;. A signed build for WEBCAT (more on this later) can be downloaded from &lt;a href=&quot;https://github.com/legoktm/webgit/releases/tag/0.2.0&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;what&apos;s-new-4caf&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;What&apos;s new&lt;/span&gt;&lt;a href=&quot;/2026/08/24/do-the-work-git-hosting-02.html#what&apos;s-new-4caf&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&apos;ve written up a mostly complete &lt;a href=&quot;https://git.legoktm.com/public/webgit.git/#!/tree/CHANGELOG.md?h=0.2.0&amp;amp;render=1&quot;&gt;changelog&lt;/a&gt;, the highlights are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Render markdown files and images&lt;/li&gt;
&lt;li&gt;Support downloading snapshots (tarballs)&lt;/li&gt;
&lt;li&gt;Support downloading patches of commits&lt;/li&gt;
&lt;li&gt;Display git notes&lt;/li&gt;
&lt;li&gt;Rewrite names and email addresses per &lt;code&gt;.mailmap&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Support blame&lt;/li&gt;
&lt;li&gt;Potentially faster git log lookups&lt;/li&gt;
&lt;li&gt;Options to control how a diff looks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&apos;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.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;performance-4caf&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Performance&lt;/span&gt;&lt;a href=&quot;/2026/08/24/do-the-work-git-hosting-02.html#performance-4caf&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is a little bit of performance work in this release, such as support for &lt;a href=&quot;https://git-scm.com/docs/commit-graph&quot;&gt;commit-graph&lt;/a&gt;, but for a number of operations it&apos;s quite bad on what I&apos;d consider to be a medium-sized repository. For a personal git host with mostly small projects, it&apos;s efficient enough!&lt;/p&gt;
&lt;p&gt;I would like for 0.3 to spend a lot more time on performance.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;xdiff-4caf&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;xdiff&lt;/span&gt;&lt;a href=&quot;/2026/08/24/do-the-work-git-hosting-02.html#xdiff-4caf&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Git uses a &lt;a href=&quot;https://github.com/git/git/tree/master/xdiff&quot;&gt;forked version&lt;/a&gt; of the xdiff algorithm for diffs, patches, blame, etc.; a &lt;a href=&quot;https://github.com/libgit2/xdiff&quot;&gt;standalone build&lt;/a&gt; is available as part of the libgit2 project.&lt;/p&gt;
&lt;p&gt;Best I can tell, no one has actually done a 1:1 port to Rust. GitOxide uses a &lt;a href=&quot;https://github.com/GitoxideLabs/gitoxide/tree/main/gix-imara-diff&quot;&gt;forked version&lt;/a&gt; of imara-diff (which AIUI is slightly different but pretty close), and there&apos;s a &lt;a href=&quot;https://crates.io/crates/threeway_merge&quot;&gt;separate crate&lt;/a&gt; that statically links to xdiff.&lt;/p&gt;
&lt;p&gt;Turns out it was relatively straightforward to compile the C code to WebAssembly, so I too punted on a Rust port. Never thought I&apos;d be so happy to use C code instead of Rust.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;webcat-4caf&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;WEBCAT&lt;/span&gt;&lt;a href=&quot;/2026/08/24/do-the-work-git-hosting-02.html#webcat-4caf&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://webcat.tech/&quot;&gt;WEBCAT&lt;/a&gt; is a project by &lt;a href=&quot;https://freedom.press/&quot;&gt;Freedom of the Press Foundation&lt;/a&gt; (where I work!) to verify the integrity of in-browser, client-side applications to ensure they haven&apos;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&apos;re using hasn&apos;t tampered with it.&lt;/p&gt;
&lt;p&gt;This is intended to be used by a future version of &lt;a href=&quot;https://securedrop.org/&quot;&gt;SecureDrop&lt;/a&gt;, so I wanted to get more familiar with it.  In theory gib is fully compliant with what WEBCAT needs, but it&apos;s still a &lt;a href=&quot;https://github.com/freedomofpress/webcat/issues/229&quot;&gt;little buggy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But if someone else did set up another gib instance, and properly registered the domain with WEBCAT, you could automatically verify they haven&apos;t tampered with it. There isn&apos;t that much practical advantage to doing so, since the hoster could merely tamper with the Git repositories themselves, but hey, it&apos;s cool!&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;vibecoding-4caf&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Vibecoding&lt;/span&gt;&lt;a href=&quot;/2026/08/24/do-the-work-git-hosting-02.html#vibecoding-4caf&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;gib is currently ~38k lines of code; probably 10% of it (and shrinking) was written by hand. I would&apos;ve never been able to build something like this by myself in such a short amount of time.&lt;/p&gt;
&lt;p&gt;I&apos;ve largely used this as my &amp;quot;how far can I push LLMs&amp;quot; experimentation project; it&apos;s been interesting and just a little bit addicting. I think it certainly helps that I&apos;m trying to reimplement well known functionality in a very different backend stack, rather than coming up with something novel.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;what&apos;s-next-4caf&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;What&apos;s next&lt;/span&gt;&lt;a href=&quot;/2026/08/24/do-the-work-git-hosting-02.html#what&apos;s-next-4caf&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
</content></entry><entry><title>Boba Quest: Machi Machi</title><id>tag:blog.legoktm.com,2026-08-16:/2026/08/16/boba-quest-machi-machi.html</id><updated>2026-08-16T14:00:00+00:00</updated><author><name>legoktm</name></author><category term="BobaQuest"/><category term="boba"/><category term="bobaquest"/><category term="montreal"/><category term="review"/><link href="https://blog.legoktm.com/2026/08/16/boba-quest-machi-machi.html" rel="alternate"/><published>2026-08-16T14:00:00+00:00</published><summary type="html">Earlier this year, an anonymous Montrealer declared Machi Machi to be &quot;an elite Boba shop for YUL&quot;. 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…</summary><content type="html">&lt;p&gt;&lt;em&gt;As part of &lt;a href=&quot;https://legoktm.com/bobaquest/&quot;&gt;Boba Quest 🧋&lt;/a&gt;, I&apos;m trying and reviewing a new boba shop &lt;del&gt;each week&lt;/del&gt; whenever I have time.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Earlier this year, an anonymous Montrealer declared Machi Machi to be &amp;quot;&lt;a href=&quot;https://michelinstarfinedinings.wordpress.com/2026/03/16/machi-machi-montreal/&quot;&gt;an elite Boba shop for YUL&lt;/a&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Machi Machi sits squarely between the Green Line&apos;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Guy%E2%80%93Concordia_station&quot;&gt;Guy–Concordia station&lt;/a&gt; and the Orange Line&apos;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Lucien-L%27Allier_station_(Montreal_Metro)&quot;&gt;Lucien-L&apos;Allier station&lt;/a&gt;. For those not willing to make the trek up north just for some boba, there&apos;s also a location in Manhattan&apos;s Koreatown.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/images/machi-machi.jpg&quot; class=&quot;height-500&quot;&gt;
    &lt;figcaption&gt;&quot;Hello cutea. It&apos;s not just about a drink, but it&apos;s a way of life.&quot;&lt;br&gt; Truer words have never been written on a boba cup.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;We ordered the black milk tea with crème brûlée, with boba, regular sugar (the ice quantity was fixed).&lt;/p&gt;
&lt;p&gt;Arlo&apos;s review:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Boba: &lt;strong&gt;4/4&lt;/strong&gt; he said it earned &amp;quot;top marks&amp;quot;, and enjoyed the chewiness.&lt;/li&gt;
&lt;li&gt;Tea: &lt;strong&gt;3/4&lt;/strong&gt; he enjoyed it, but that &amp;quot;the flavours [sic] didn&apos;t push much beyond the milk&amp;quot;.&lt;/li&gt;
&lt;li&gt;Bonus: &lt;strong&gt;0/1&lt;/strong&gt; it was nice, but nothing exceptional.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Total: &lt;strong&gt;7/10&lt;/strong&gt; ultimately, Arlo said, &amp;quot;I would get it again.&amp;quot;&lt;/p&gt;
&lt;p&gt;Kajol&apos;s review:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Boba: &lt;strong&gt;4/4&lt;/strong&gt; she said it had good chewiness, with good QQ.&lt;/li&gt;
&lt;li&gt;Tea: &lt;strong&gt;4/4&lt;/strong&gt; she liked it a lot, because you get bits of the crème brûlée as you drink.&lt;/li&gt;
&lt;li&gt;Bonus: &lt;strong&gt;0/1&lt;/strong&gt; she had wanted to give them half a point because of the cute cup and logo, but Boba Quest doesn&apos;t allow half points so she declined to give them a full bonus point.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Total: &lt;strong&gt;8/10&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;My review:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Boba: &lt;strong&gt;3/4&lt;/strong&gt; the boba was slightly too chewy.&lt;/li&gt;
&lt;li&gt;Tea: &lt;strong&gt;4/4&lt;/strong&gt; 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&apos;re getting two drinks in one.&lt;/li&gt;
&lt;li&gt;Bonus: &lt;strong&gt;0/1&lt;/strong&gt; agreed that it was nice but not exceptional.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Total: &lt;strong&gt;7/10&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Just from walking around, the boba scene in Montreal looks far richer than I remember it being. Hopefully we&apos;ll have the opportunity to try a few more places before our boba vacation ends.&lt;/p&gt;
</content></entry><entry><title>My free software toolkit for school, redux</title><id>tag:blog.legoktm.com,2026-08-10:/2026/08/10/my-free-software-toolkit-for-school-redux.html</id><updated>2026-08-11T03:00:00+00:00</updated><author><name>legoktm</name></author><category term="LawSchool"/><category term="fedora"/><category term="firefox"/><category term="freedom"/><category term="kiwix"/><category term="lawschool"/><category term="signal"/><category term="thunderbird"/><link href="https://blog.legoktm.com/2026/08/10/my-free-software-toolkit-for-school-redux.html" rel="alternate"/><published>2026-08-11T03:00:00+00:00</published><summary type="html">I&apos;ve tried my best to use only free software as part of going back to school, and for the most part I&apos;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…</summary><content type="html">&lt;p&gt;&lt;em&gt;Previously: &lt;a href=&quot;/2018/01/31/my-back-to-school-free-software-toolkit.html&quot;&gt;2018&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&apos;ve tried my best to use only free software as part of going back to school, and for the most part I&apos;ve been pretty successful.&lt;/p&gt;
&lt;p&gt;I picked up a new &lt;a href=&quot;https://wikis.world/@legoktm/115532251891376816&quot;&gt;Framework 13&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;Really I just like the orange color scheme I picked out for myself.&lt;/p&gt;
&lt;p&gt;I installed &lt;a href=&quot;https://fedoraproject.org/atomic-desktops/silverblue/&quot;&gt;Fedora Silverblue&lt;/a&gt; on it; I&apos;m a really big fan of the whole atomic OS concept, it works quite well. I&apos;ve been able to use Flatpaks for nearly everything.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Firefox&lt;/strong&gt;: not much to say here, it just works.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LibreOffice&lt;/strong&gt;: I take all my notes in LibreOffice, which is good enough as it&apos;s mostly just bullet points and a few tables here and there. All of our writing assignments are required to be submitted in &lt;code&gt;.docx&lt;/code&gt; format, so my final step on every assignment is to convert my &lt;code&gt;.odt&lt;/code&gt; to Word format. I think, but am not actually sure, Word may have better support for formatting and &lt;a href=&quot;https://wikis.world/@legoktm/116989821298635409&quot;&gt;managing citations&lt;/a&gt; than LibreOffice. Its on my todo list to see what it would extra functionality writing an extension would give me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Signal&lt;/strong&gt;: our cohort&apos;s main group chat is in Signal, and so is my study group&apos;s. It wasn&apos;t even a thing &lt;a href=&quot;https://freedom.press/digisec/blog/encrypting-college-newsroom-signal/&quot;&gt;I had to push for&lt;/a&gt;, 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&apos;ve slowly had to &lt;a href=&quot;https://micahflee.com/are-your-signal-groups-full-of-people-name-things-like-l-or-sinicknames/&quot;&gt;set nicknames&lt;/a&gt; for everyone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;draw.io&lt;/strong&gt;: 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&apos;ve now switched to the offline Electron version.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nextcloud&lt;/strong&gt;: 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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kiwix&lt;/strong&gt;: 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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;KeePassXC&lt;/strong&gt;: 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: &lt;kbd&gt;Ctrl+B&lt;/kbd&gt; (copy username), &lt;kbd&gt;Alt+Tab&lt;/kbd&gt;, &lt;kbd&gt;Ctrl+V&lt;/kbd&gt;, &lt;kbd&gt;Tab&lt;/kbd&gt;, &lt;kbd&gt;Alt+Tab&lt;/kbd&gt;, &lt;kbd&gt;Ctrl+C&lt;/kbd&gt; (copy password), &lt;kbd&gt;Alt+Tab&lt;/kbd&gt;, &lt;kbd&gt;Ctrl+V&lt;/kbd&gt;, &lt;kbd&gt;Enter&lt;/kbd&gt;, &lt;kbd&gt;Ctrl+Tab&lt;/kbd&gt;, &lt;kbd&gt;Ctrl+T&lt;/kbd&gt; (copy TOTP), &lt;kbd&gt;Alt+Tab&lt;/kbd&gt;, &lt;kbd&gt;Ctrl+V&lt;/kbd&gt;, &lt;kbd&gt;Enter&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;Thunderbird is unfortunately not on this list because my school uses Outlook and they restrict OAuth access so I can&apos;t get it to work. Using webmail is actually awful, I can&apos;t believe that people have to deal with this for all their other email.&lt;/p&gt;
</content></entry><entry><title>Review: The Odyssey (2026)</title><id>tag:blog.legoktm.com,2026-08-10:/2026/08/10/review-the-odyssey-2026.html</id><updated>2026-08-10T23:15:00+00:00</updated><author><name>legoktm</name></author><category term="Press"/><category term="greece"/><category term="movie"/><category term="review"/><link href="https://blog.legoktm.com/2026/08/10/review-the-odyssey-2026.html" rel="alternate"/><published>2026-08-10T23:15:00+00:00</published><summary type="html">At some point in high school we read the Odyssey, and I really enjoyed it. I did not like Christopher Nolan&apos;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…</summary><content type="html">&lt;p&gt;At some point in high school we read the &lt;em&gt;Odyssey&lt;/em&gt;, and I really enjoyed it. I did not like Christopher Nolan&apos;s version.&lt;/p&gt;
&lt;p&gt;Rating: &lt;strong&gt;4/10&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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&apos;s a higher bar to clear to make it an engaging story, which wasn&apos;t met here.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.lrb.co.uk/the-paper/v48/n14/emily-wilson/an-uncomplicated-man&quot;&gt;Emily Wilson&apos;s critique&lt;/a&gt; resonated with me a lot. I can think of no good reason why you wouldn&apos;t include the whole &amp;quot;no man&amp;quot; gambit with the cyclops (and the cyclops didn&apos;t even look like what I imagined cyclopses look like).&lt;/p&gt;
&lt;p&gt;It&apos;s funny that my main critique of a three-hour film is that it felt abridged and didn&apos;t go into suffient detail. Should&apos;ve been a trilogy.&lt;/p&gt;
</content></entry><entry><title>Review: Avatar Aang: The Last Airbender</title><id>tag:blog.legoktm.com,2026-08-05:/2026/08/05/review-avatar-aang-the-last-airbender.html</id><updated>2026-08-06T03:45:00+00:00</updated><author><name>legoktm</name></author><category term="Press"/><category term="avatar"/><category term="movie"/><category term="review"/><link href="https://blog.legoktm.com/2026/08/05/review-avatar-aang-the-last-airbender.html" rel="alternate"/><published>2026-08-06T03:45:00+00:00</published><summary type="html">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…</summary><content type="html">&lt;p&gt;Sixteen years of agony have finally come to an end, as the Avatar universe has finally received a movie worthy of its excellence. &lt;em&gt;Avatar Aang: The Last Airbender&lt;/em&gt; is a nostalgic adventure that brings back most of the fun from the original television series.&lt;/p&gt;
&lt;p&gt;The film was originally slated to be released in theaters, then it was leaked online, then &lt;a href=&quot;https://freedom.press/action/tell-congress-to-investigate-paramounts-crooked-mergers/&quot;&gt;Paramount&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;I thought the movie did an excellent job coming up with a story that fit between the TV series and &lt;em&gt;Legend of Korra&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;Unfortunately I don&apos;t think the movie would&apos;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.&lt;/p&gt;
&lt;p&gt;So I think it only works as movie for existing fans, but regardless, I am incredibly thrilled with that outcome. Rating: &lt;strong&gt;8/10&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 class=&quot;header&quot; id=&quot;spoilers-ahead-5a1e&quot;&gt;&lt;span class=&quot;header-text&quot;&gt;Spoilers ahead&lt;/span&gt;&lt;a href=&quot;/2026/08/05/review-avatar-aang-the-last-airbender.html#spoilers-ahead-5a1e&quot; class=&quot;header-link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The coolest part was definitely the joint airbending that turned into tornado(!!) bending. I was not at all expecting a new bending mechanism.&lt;/p&gt;
&lt;p&gt;It seemed a bit obvious that Tagah was a bad guy — otherwise why would he have been stuck in an air &lt;del&gt;bubble&lt;/del&gt; prison for thousands of years. Using non-benders as the villain again felt unoriginal.&lt;/p&gt;
&lt;p&gt;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&apos;t even stop to think before releasing them.&lt;/p&gt;
&lt;p&gt;The ending was a bit cheesy with them discovering the herd of sky bison, but hey, it was cute. Nostalgia fulfilled.&lt;/p&gt;
</content></entry></feed>