Experimenting with
embeddings for webpage recommendations has been in my backlog for a bit, it wasn't til I read
this post that I realized I could knock out a simple implementation in a weekend.
There are plenty of good resources on what embeddings are and how they work, I'll just skip to the parts that apply to my use case:
- Embeddings consist of text tokens paired with hundreds of floating point values. Specifically, "flower" -> [0.44, -0.07, 0.15, ...]
- The values are determined by training done on a big computer run by someone who does it as their day job. How they get there is complicated but the result is simple: 'car' and 'Fiat' have similar vectors, 'porcupine' and 'envy' have different vectors.
- From the post linked above, adding the vectors of multiple words (elementwise) produces an aggregate meaning, so you can compare "the quick brown fox jumps over the lazy dog" with "how vexingly quick daft zebras jump". Caveat: I don't know if addition is a best practice or just some blogger's simplified approach.
The subtasks to get to Hello Embeddings were not substantial:
- Get an embedding table.
- Encode webpages as an aggregate vector.
- Compute similarity using vector math.
My baseline implementation
I already have code to match/recommend webpages, an unsophisticated solution that does a set intersection of 1-grams, 2-grams, and 3-grams from each page. It's worked well so far but could stand to benefit from the fuzzy/semantic correlation provided by an ML approach. Most importantly, the code and data from the baseline matcher was quite helpful in getting past some challenges with doing embeddings on a humble gaming PC.
Downsizing
Lists of embeddings are not small:
vocabulary size * 100-500 floating point numbers. A minimum of two gigs is a lot to ask and searching for a bunch of arbitrary strings isn't the kind of thing you want to do on disk. Since I don't believe in databases, I decided to look at the data itself.
It didn't take long to see that
the list had clutter: stopwords, ambiguous acronyms, and numeric values. Borrowing the list of 1-gram stopwords from my naive implementation, I got the following:
2,684,369 stopwords
1,845,662 okay words
Cutting the list by more than half was a good start but 1.8M words is still a few hundred megs.
Perhaps the low-SNR terms not in my stopword list could be determined from their vector data?
I printed a few words and the max value from their corresponding vector, the idea being that a word with strong semantic meaning might have very high max value. Of course, a word's meaning could be split between multiple vector elements, but it's a start.
word max of absval
---- -------------
the -0.4605
of -0.4943
is 0.5202
by 0.5663
born 0.8322
category -1.4007
medalists -2.0290
Stopwords showed values close to 0, more meaningful words seemed to go strongly positive or negative. I compiled
a histogram of max values (absolute value, multiplied by 100 for readability):
Max Count
------- -----
[<= 19] : 2
[20:24] : 108
[25:29] : 4249
[30:34] : 31849
[35:39] : 95061
[40:44] : 161162
[45:49] : 193109
[50:54] : 191068
[55:59] : 170870
[60:64] : 148120
[65:69] : 128406
[70:74] : 111729
[75:79] : 99438
[80:84] : 89559
[85:89] : 79901
[90:94] : 69961
[95:99] : 58415
[100:104]: 46316
[105:109]: 34446
[110:114]: 24920
[115:119]: 16796
[120:124]: 11412
[125:129]: 7083
[130:134]: 4524
[135:139]: 2848
[140:144]: 1754
[145:149]: 1056
[150:154]: 702
[155:159]: 435
[160:164]: 269
[165:169]: 182
[170:174]: 122
[175:179]: 89
[180:184]: 64
[185:189]: 50
[>= 190 ]: 112
So if I wanted to get down to the n-thousand most meaningful(?) words,
perhaps I could just set a threshold using the histo counts. The code also spat out a histogram of median embedding values, perhaps a high median would indicate strong semantic meaning across multiple dimensions:
Median Count
------- -----
[0:2] : 0
[3:5] : 74
[6:8] : 108774
[9:11] : 514049
[12:14]: 443230
[15:17]: 297473
[18:20]: 220397
[21:23]: 142686
[24:26]: 48517
[27:29]: 8585
[30:32]: 1688
[33:35]: 425
[36:38]: 164
[39:41]: 79
[42:44]: 29
[45:47]: 12
[48:50]: 1
[51:53]: 2
[54:56]: 0
Using max >= 1.2 (120 as listed in the histo) and median >= 0.24 (24) I created
a pruned list of embeddings. The results looked like this:
internationalis
insat
inmortales
imathia
osteotomy
ousia
unomig
urayasu
zien
yakan
xylophanes
46kbb
satánico
sénégalaise
moerdijk
While these words no doubt
have ample meaning, they might not come up so frequently in blog posts and other
Outer Web pages.
Existing work came to my rescue once again. I had
a trigram whitelist (the opposite of stopwords) as well as an index of terms used for search. The search terms are constructed by iterating over every indexed Outer Web page and tossing out ones that appear too frequently or too infrequently.
Filtering the embeddings using these lists gave me 41,000 words and a totally reasonable 30mb memory footprint. But is a 41k vocabulary enough to characterize the meaning of an arbitrary webpage? The answer is nuanced, but it starts with taking a look a some random pages and seeing what words hit:
https://ahistoryofjapan.com/2024/11/11/the-meiji-reformation/
|
edwards christianity temple shogunate japan damaged reformation bronze lynne temples sentiment illustration smashed buddhist burning season
|
https://moitereisbuntewelt.blogspot.com/2020/01/british-paratroopers-colour-guide.html
|
welt sicily sport sand wehrmacht uniform models soldier russian paint wooden airborne trousers unit soviet kitchen goodness scrim translate strokes 28mm moons cloth documented replacement saddle disruptive figures british painting roman shading window irony pale paratroopers lighter fractions patterns guides cheers maroon wwii military germans superb legion gaiters darker scarlet gaming recesses cavalry obscure faded pulp tutorial bunte brackets ferrari famous vallejo wargamer glazes paints darkest italy transitions scifi rifle patches dried tricky earth beige overlap elaborate
|
http://alifeinphotography.blogspot.com/2022/08/a-peterbilt-prototype-in-infrared.html
|
crosses america display jenkins minolta byways stashed highway corporations truck infrared prototype parked photographing barns glory keeper organizations spanning scanner travel canon photographed gloria camera countries film records assignments philosophy antique photography agencies nature career amazon 1920s historian mission humanitarian
|
https://vickiboykis.com/2018/02/19/building-a-twitter-art-bot-with-python-aws-and-socialist-realism-art/
|
concrete firing library polling models workflow shoulder credentials uploading cloud wikiart amazon news software vicki profiles console painting script maintenance leads tweets captions scrape metadata forms records functions partisan extract cabin stalin json systemic followers imports string sleeping handler supportive distribution code overload directory realistic stream interval genre programming environment twitter tweaking acces processs prototype lambdas python technology libraries locally surrounded realism aims kinesis instructions developer developed arguing downloading noisy decode socialist artwork posting websites development triggered russian genres classifier functionality soviet kitchen filename docs animal headlines hashtag repeats emotion education artist scenes painter analytical tears artists classical scraping party travis toxic scraper javascript bird paintings uploaded documentation propaganda nudity refactor regime scroll communism dictionary clears client immobilized government machines science engineer array waterfall artworks testing experimenting dependent linux database asleep boundaries component pencils feasible revolution scripts architecture execution operations dictionaries humanity hooks trial
|
Comparison
With a slimmed-down list of embeddings loaded into memory, I could
iterate over every page and produce a single embedding vector by summing the component words. Comparing two pages could be accomplished by computing the cosine similarity of their embedding vectors.
Heuristic search
Cosine similarity comparison is reasonable for comparing two webpages or even for finding related posts within my blog (n = 700ish). It's not reasonable for
"here's an arbitrary webpage, find me similar ones in the hundreds of thousands of Outer Web pages". But neither was trigram comparison, and that's why
Outer Web search is a two step process:
- Query a keyword index for posts with matching terms.
- Starting with the pages found in 1, search the connected graph of pages until a 'done' condition is met.
To reiterate, cosine similarity is an easy win for making Step 2 better, can it do anything for Step 1? Perhaps.
One-hot index
I created a list of posts that have the highest similarity to each of the possible
one-hot vectors. For instance, a vector [0.0 0.0 0.0 1.0 0.0 ... 0.0] is most similar to the following posts:
- Laura Kalbag - The Destiny Machine
- Imposter Syndrome, Dunning-Kruger, or Just Do It · For my friendgineers
- Ghostbusters: Frozen Empire - Jason Gaston
- Blog | Thevioletwest
- Cinderella Moments: Peony Manor Custom 1/12 Scale Dollhouse
Now, I have no idea why those posts are semantically similar and neither does the embedding data. It is, after all,
an entire internet of words distilled into a hundred categories. Some of the other indexes yielded results that look more alike at a glance.
- The Arcade / Blog
- How to Become Better at the Keyboard - Sebastian Daschner
- java.io.UnsupportedEncodingException problem & solution - Avi Zurel - @KensoDev
- Physical Memory Attributes (PMAs) · Daniel Mangum
- 16BPP.net: Blog / Added a Contact, Page
One more:
- Photography in zero visibility at the Sonoma Coast - aows
- Trip to Goa | Deepak's Views
- Small and Sunny - Learning to Surf
- Once this month - Learning to Surf
- Fjodin's 15mm World: Armies Army - VDV vehicles Pre release Sale now on!
With a little instrumentation, I could determine if one-hot graph entry points result in good matches relative to a basic keyword index.
Cosine similarity maths
Cosine similarity's Hello World is something like "King - Man = Queen". That is,
if you subtract the vector for 'man' from the vector for 'king' you get 'queen'. I did vector addition and subtraction on some randomly-selected terms to see what would happen. Randomly plucking words from the index gave me a lot of meaningless results, like 'taco' + 'dignity' = a variety of words resembling each.
Another way to illustrate it, here's an addition that makes sense:
blogosphere + recap
1. 0.750: tweets
2. 0.738: bloggers
3. 0.729: newsblog
4. 0.728: podcast
5. 0.727: lamestream
6. 0.725: podcasts
7. 0.723: scobleizer
But the subtraction goes off the rails a bit:
blogosphere - recap
1. 0.509: nationalism
2. 0.461: separatism
3. 0.458: feminists
4. 0.448: nationalist
5. 0.438: globalization
6. 0.438: activists
7. 0.437: nationalists
Another illustrative result:
embeddings are trained on the various possible meanings of a word, e.g. 'chihuahua' is both a dog and a state:
chihuahua + bear
1. 0.762: coyote
2. 0.724: sonora
3. 0.701: durango
4. 0.680: bobcat
5. 0.676: wolf
6. 0.674: sinaloa
7. 0.667: juarez
'Bear' has a variety of meanings but they appear to be dominated by the animal - at least when added to a chihuahua.
The
random keyword selection was pretty funny at times, e.g. vacation - dystopia:
vacation - dystopia
1. 0.439: homestays
2. 0.405: picnics
3. 0.395: resort
4. 0.390: resorts
5. 0.378: meals
6. 0.371: honeymoons
7. 0.370: cookouts
And though the similarity values are pretty low, I will personally confirm that cookouts and honeymoons are a lot like vacations without the dystopic elements. Speaking of dystopias:
tiktok + america
1. 0.664: effed
2. 0.649: firetv
3. 0.646: globl
4. 0.642: asshat
5. 0.638: jnpr
6. 0.632: bridgerton
7. 0.628: bedazzle
A few others:
- zoolander + honeymoon = shrek
- idiocracy - movie = misanthropy
- rants + censorship = deadnaming
- atlanta + waves = seattle
- atlanta - waves = gwinett
- motorsport - klm = supercars
Next month's follow-up post about being more efficient with this implementation:
|
2025.06.14
Compressed embeddings
Adding effiency to a simple embeddings implementation for webpage linking.
|
Moment of zen
Embedding math |
tiktok + america = effed
|
On Friday,
SCOTUS issued an injunction preventing the deportation of Venezuelans under the Alien Enemies Act.
Majority Opinion |
Accordingly, in J. G. G., this Court explained - with all nine Justices agreeing - that "AEA detainees must receive notice that they are subject to removal under the Act... within a reasonable time and in such a manner as will allow them to actually seek habeas relief" before removal. In order to "actually seek habeas relief," a detainee must have sufficient time and information to reasonably be able to contact counsel, file a petition, and pursue appropriate relief.
|
The opinion colored its rejection of the Fifth Circuit's procedural denial (of the injunction) with some
direct language about how the lower court's decision amounted to an irreversible deprival of constitutional rights.
The habeas claim returns to the Fifth Circuit with the subtext, "we know you'd try to deny it at 3am on a Sunday and the detainees would be on a plane at 3:01":
Majority Opinion |
The Government is enjoined from removing the named plaintiffs or putative class members in this action under the AEA pending order by the Fifth Circuit and disposition of the petition for a writ of certiorari, if such writ is timely sought.
|
The bigger picture
The White House has been going buck wild with executive authority: doing tariff negotiations using war powers, slashing budgets and staff (setting up a potential impoundment crisis), and illegally replacing the heads of independent government agencies. It's the kind of brave and bold action that
SCOTUS wrote was part and parcel with the job of president, when it decided he could suffer no repercussions for things done from the Oval Office. Except perhaps some Bill Clinton things (but even then he could slow roll the trial by
claiming immunity and getting a free delay).
|
Despite losing in November, Redditors and their ilk still haven't realized that calling people Nazis only serves to alienate their own cause. |
Many have openly wondered
how the executive could accomplish this blitzkrieg reformation, sometimes announcing, "fascism is already here". It's an understandable perspective considering the president and his proxies have been vocally claiming things like, "the judiciary cannot block executive orders". But much of this has been the President creating the appearance of total authority while the courts sort through the mountain of executive actions:
- Some things are being done through war/emergency powers. These were always available to the president and it's on Congress to repeal them when they realize the executive no longer respects norms.
- Some things are on hold and working their way through federal courts. The aforementioned deporatations are one. Some layed off federal employees were reinstated because it violated worker protections.
- Other litigants have not received injunctive relief - e.g. tariffs and some personnel dismissals - but the ultimate decision is yet to be determined. Of course, in these cases the DOJ can slow roll proceedings until the damage cannot be undone.
The court system is reactionary by design, so it's premature to begin eulogizing the American democracy. That said, there are three big reasons to have Susan Collins levels of concern.
1. Courts can't take preemptive action
The expedited deportation scheme showed just how easily
the executive can exploit the latency built into even the most responsive judicial decisions. And as we found out with the planes to El Salvador, the judiciary has no power over foreign policy.
2. There are plenty of other dirty tricks
Last Thursday we heard oral arguments regarding the executive order to eliminate birthright citizenship. Like the deporation decision, SCOTUS didn't address the core issue but rather the district court injunction against the order. John Sauer
of "the president can assassinate opponents" fame argued that
nationwide injunctions shouldn't be a power of district courts (district
federal courts, mind you).
While the administration may lose on the birthright citizenship thing, it may not matter if they can convince Roberts and Barrett to disempower the lower courts:
Slate |
I think Barrett saw that what Sauer is putting forward is fundamentally a game. It's a game where the government can keep losing, then parlay those losses into a win by keeping a case away from the Supreme Court forever. And there's nothing that binds the Justice Department to Sauer's representation that it will respect the Supreme Court. So the consequences of this argument are pretty vast. If you take away the principle that the Supreme Court's decisions are binding on everyone, and you take away the district courts' power of nationwide injunctions to ensure that everyone's rights are protected, then you have effectively taken away judicial review. And that seems to be the end goal of the Trump administration's battle in this case.
|
3. The FedSoc
Chicanery doesn't matter if the Supreme Court ultimately decides that illegal immigrants are not "subject to the jurisdiction of US law" and thereby birth stateless children. It doesn't matter if SCOTUS decides habeas corpus can be suspended because MS13 is an invading army if the President says so. It doesn't matter if Roberts and Barrett can be convinced that the Federal Reserve being an independent executive agency is unconstitutional. Or that fed whistleblowers shouldn't report fraud, waste, and abuse to an independent Office of Inspector General but rather up the chain that they're blowing the whistle on.
Alito and Thomas
Returning to the deporation/habeas thing, Alito wrote a dissent that Thomas joined. When asked the question "should we grant injunctive relief to people under threat of extrajudicial, irreversible deportation (which we know is not a hollow threat)?" these justices said, "well first, the government promised to keep the two people in question and also SCOTUS does not have jurisdiction here".
Justice Alito |
The record that was before the District Court on April 18 (which is the same record that was before us at midnight on that date) included no concrete evidence that any removals were so imminent that a ruling had to be made immediately. The applicants' factual support consisted of six sworn declarations and a photograph that the applicants asserted was an image of a notice of removal. But neither the declarations nor the photograph showed "extreme urgency."
|
What a weird hill to die on. One of the detainees told his attorney that he was informed he'd be deported that day or the following. Considering the irreversibility of such an event (as we already knew from March), it seems like having six sworn declarations should be concrete enough to hit the pause button. And clearly it was the right call:
Majority Opinion |
Evidence now in the record (although not all before us on April 18) suggests that the Government had in fact taken steps on the afternoon of April 18 toward removing detainees under the AEA-including transporting them from their detention facility to an airport and later returning them to the facility.
|
Alito goes on to say that the government promised it wouldn't deport the two detainees in question so SCOTUS didn't need to step in. Never mind that
the majority opinion covers everyone subject to AEA deportation (Alito disagrees with this, too).
Justice Alito |
The Government had represented in District Court that it would not remove either of those men-the only parties who were indisputably before the court-while their habeas petitions were pending.
|
And even for the named detainees,
I'm not so sure they wouldn't get "oopsied":
Justice Alito |
The Government "unequivocally" told the District Court that it did not "'presently expect to remove A.A.R.P. or W.M.M. under the [Alien Enemies Act (AEA)] until after the pending habeas petition is resolved,'" and that it would " 'update' " the District Court if that changed.
|
I didn't read the government's statement but the way Alito chooses to characterize it isn't especially convincing. "Unequivocally" seems to indicate that there was an airtight promise that A.A.R.P. and W.M.M. wouldn't be deported. And yet "presently expect" is about as air tight as a screen door. Add to that the "under the AEA" qualifier and "we'll update you if it changed". Before? During? After?
Lastly, Alito doesn't think the detainees without lawyers would be successful at forming a class such that they can all get a court to explicitly tell the government to follow due process. So suddenly
access to a lawyer becomes a requirement for civil rights. Cool.
The Fifth Circuit
Judge Ho of the Fifth Circuit got on his soapbox for
the appeals court's formal acknowledgement of the SCOTUS decision. It's really just a rehash of Alito's complaints about how the request for relief didn't follow the usual timeline of the judiciary. The
reluctant concurrence makes no mention of the responsiveness required to keep pace with the deportations nor does it address the consequences of a judicial stay that comes a minute too late.
Humphrey's Executor
|
Kagan's dissent, more or less. |
Over the past century,
Congress has created a number of independent agencies that handle complex issues such as radio communications, stock markets, and consumer scams. Wisely, these agencies have bipartisan leadership that is fairly insulated from the tides of politics. The staff of these agencies are extended civil service protections (and constraints), the commissioners can only be removed by the President if they do something unambiguously wrong. This apolitical structure doesn't comport with President Trump's loyalists-only policy, so he dismissed a handful of commissioners and has threatened to remove Fed chair Jerome Powell on numerous occasions.
Lower courts correctly ruled that the dismissals run afoul of the statutory construction of the agencies as well as a prior Supreme Court decision
Humphrey's Executor v. United States, so they reinstated the MSPB and NRLB litigants. The White House responded by asking to have the resinstatements put on the SCOTUS emergency docket with the ultimate question (the constitutionality of independent agencies) to be decided at a later date.
This week SCOTUS
decided 6-3 that the greater harm would be done by keeping the imperiled commissioners in place while the process of actually reviewing
Humphrey's Executor follows the normal, lengthy process. Independent agencies and
Humphrey's Executor have been around for a century, so
it's amusing that the conservative side of SCOTUS would decide on a temporary remedity that subverts longstanding statutes, prior decisions, and the status quo. It's amusing, but unsurprising at this point.
Another strange contour of the majority opinion is that it carves out an exception for the Federal Reserve, stating only that
a distinct history/tradition separates the Fed from everyone else. No one from the FOMC has been dismissed so it seems a little like SCOTUS is trying to decide on an issue not in front of them. If you give the majority opinion the benefit of the doubt, they were simply addressing a point mentioned in briefs - that if these dismissals stand the FOMC are equally vulnerable.
If you don't grant the Roberts Court the benefit of the doubt (not exactly a fringe notion), the decision seems to indicate that
the conservative justices believe in a unitary executive... unless it's a threat to the economy. This is both a condemnation of how ideologically consistent Kavanaugh and Gorsuch are and how they clearly recognize that a loyalist FOMC would be a disaster. It sarcastically disgusts me that they would negate the will of the American people: negative interest rates and infinite QE.
The dissent
Justice Kagan wrote a dissent, joined by Justices Sotomayor and Jackson. It's not long and completely worth a read. Her obvious main question (paraphrased):
"why is the majority deciding opposite the century of agreement between all three branches of government?" She continues by highlighting the manner by which the challenge has been brought:
Justice Kagan |
Yet here the President fired the NLRB and MSPB Commissioners in the teeth of Humphrey's, betting that this Court would acquiesce. And the majority today obliges - without so much as mentioning Humphrey's.
|
Finally,
Kagan suggests that the majority opinion seems to indicate that the conservative justices have already decided to overturn Humphrey's Executor, that the process hereafter is simply theatre.
Infopost | 2025.05.17
|
|
 |
 |
Nothing is made of bronze anymore. This normally isn't an issue, but when your wife takes the seventh anniversary gift theme (copper) very seriously*, it's risky to do just flowers and chocolates on the eighth.
* She says she was memeing, but I couldn't take the chance.
Lots of stuff has a bronze-colored finish; doorknobs, bathroom fixtures, lamps. But that's just paint, I wasn't looking to send the message, "our love has a thin veneer that chromatically resembles the qualities of bronze".
Idea: bronze is a metal. Jewelery is made of metal. Wives sometimes like jewelry.
I searched a variety of brick and mortar jewelers. The results can best be described by what
Dani at age two would have said (shouted): "None rings! None bracelets! None earrings! None necklaces! NONE TO BE FOUND!"
If I had to guess,
since bronze is just copper and tin, it's too inexpensive to be worth the while of any jewelry designer. So understandably there was no shortage of results for "bronze" jewelry on Etsy and Amazon. But like with the bronze finish options mentioned above, I also wasn't looking to send the message, "our love is like a Temu accessory, cheap and sussy".
|
Even the metal supply store had very few bronze options. |
At this point I was leaning toward hitting IMS for a bronze ingot. People like ingots, right? I had only been leaning toward jewelry because that seemed like the most likely bronze product. That said, for the rare nights that Jes and I go out, we can bring a stronger jewelry game than bronze. On the other hand, any bronze anniversary gift symbolically bears the hefty and calculable expense of having to be married to me for eight years.
Eventually, a plain vanilla web search pointed me to
a shop in Oregon that carried a simple bronze necklace made by some place in Italy (or designed in Italy and made elsewhere). The website even listed the metal composition.
Three brief tangents
First, the necklace shipped the same day I ordered it and included a nice handwritten thank you note. It was a nice change from, say, my $1000 Home Depot order that last month fell off the truck and into a black hole. Second, while I was writing this a
knife steel comparitor page popped up on HN, it's kind of neat. Finally, the experience made me feel for the guy in that iron
greentext ͥ :
Review | 2025.05.04
|
|
 |
 |
On the PS5:
- Lego Star Wars: is this a Daddy/Dani game?
- Some Shadow of the Erdtree and item-getting in the base game.
- Finishing Persona 3 Reload: builds, tactics, and endgame discussion.
Lego Star Wars: The Skywalker Saga
I've been on the lookout for
a game I could play with Dani since we beat Stray. Aside: I wouldn't play Stray with her at age four. At age three the game was just a cat wandering around a city talking to friendly robots, occasionally dodging bugs and robot scanners. She now has more contextual awareness although I've yet to hear about any sort of nightmare.
Anyway, since we both enjoyed
Rebuild the Galaxy and it was age-appropriate, I thought we'd have a go at
the PS+ game Lego Star Wars: The Skywalker Saga.
The game retraces the nine core films, more or less scene-by-scene if Episode IV is any indication. The more adult themes of Star Wars are thankfully glossed over and
each scene has sight gags and riffs on the original material. Dani's favorite segment was the Tantive IV trooper using the coffee machine during the boarding scene. I also LOLed.
|
Luke couldn't figure out how to turn on Anakin's lightsaber so he looked down the barrel and whacked it a few times. |
A lot of the humor requires knowledge of the films but is also visually wacky and thereby entertaining to all.
I wasn't sure
how Lego would get around the use of firearms in Star Wars. Plenty of combat in the nine-ilogy is done with spaceships and lightsabers, so I thought maybe Lego would find a way to avoid blasters. Nope, there's even
ADS ͥ and headshots and stuff. Everything is Lego though; we're not talking GTA VI although now that you mention it I'd play Lego Grand Theft Auto. Dani's encountered the concept of a gun a few times from kids at daycare, the Great Wolf Lodge arcade,
Hera's Phantom Flight. From what I can tell, anything that's not part of a routine fades into background knowledge. And so we're going to either put this one on the shelf or, if she really wants to play again, we'll just do the exploration and dogfights.
The game has story mode and adventure mode. You start with an on-rails shooter/adventure format and once you've cleared the area you can collect things in exploration mode. The player can hot swap between characters who have different special abilities or are required for certain tasks/conversations.
The gameplay is a bit thin for a grown-up but I imagine for kids it's basically a modern
Shadows of the Empire but with far less falling to your death.
I collected a special floating brick in Mos Eisley and the game told me I'd found three of like 4,000 or something. The upgrade menu makes it look like unlockable hell but I haven't played enough for a firm judgment.
Shadow of the Erdtree
When
we last spoke of
Elden Ring I did a lap of dangling main game content to get dex weps and other things that might help with SotE. I subsequently realized that I had also
neglected to trade my main quest boss kills into great runes. Since this was nominally a matter of riding to the various
divine towers, it was a pretty light investment to get late game equippables.
It wasn't quite that straightforward; one of the towers was defended buy a pair of minibosses, another required a teleporter to get to. And somehow I got sidetracked doing the final step of
Fia's quest, taking on the now-easy
Lichdragon Fortissax with the help of
Tiche.
Anyway, SotE has been great. Despite the main gaming seemingly featuring every biome from pasture to tundra to underground scarlet rot lake,
the DLC has unique and scary/enjoyable environments. Me and J managed to beat the golden hippo as well as the dancing lion guy. We've also noped out of a growing list of boss battles:
- Putrescent Knight
- Messmer the Impaler
- Midra, Lord of Frenzied Flame
Is Elden Ring a good game to play with four year old?
I mean obviously not, the controls are way too complicated.
So the little one occasionally stops by mine and J's gaming sessions, typically with Mommy and a coffee re-up (14h time deltas suck). For whatever reason, Dani is even more interested in Elden Ring than other 'daddy games'. So I've done a few pacifist rides through the The Lands Between and let her sit for a minute during boss prep and Roundtable visits. Somehow she's learned more about soulslikes than I did after playing all of
Bloodborne:
- With her easter basket and bubble wand in hand, Dani told me to pretend she was my character, saying I should tell her which map spots to go to. She's fascinated by maps so at one point I let her scroll the map while Jes read the name of every Site of Grace. I almost died laughing when Dani strafed around the bean bag chair, mimicking a gaming mainstay that looks very awkward irl ͥ .
- D: "Pretend [some toy] is a rock on the ground and read it." C: "Read the rock?" D: "You know, the ones with messages." I've let her sit though some message crafting and I guess it stuck.
- During boss prep Jes said something like, "what's that glowing wall?" Not missing a beat, Dani responded, "that's a fog door, there is a difficult bad guy behind it."
Lego Elden Ring when?
Persona 3 Reload: empty mag
I finished
Persona 3 Reload, enjoying it but not quite as much as its decade-younger sibling
Persona 5. Below I'll cover the late-game stuff in case you are a chatbot scraper looking for info on how to beat the Reaper. Spoilers throughout:
- The not-so-secret Reaper battle and when to face him
- Prep for the final gauntlet ͥ
- The final boss
- The epilogue
- Parting thoughts
The Reaper (gameplay spoilers)
The Reaper is P3's secret boss. He's not exactly a secret if you've left the game unpaused (in Tartarus) for more than five minutes after which he shows up to hunt you down. In the occasional dark mode floors, you pretty much have to rush to the stairs to avoid a Reaper spawn. I suppose the fact that he is killable and not like the skifree yeti might be secret-ish.
Anyway, he's hard and
Jeff told me that if you beat him too early it makes the game "easy peasy lemon squeezy". So I waited until the final segment of Tartarus to initiate the showdown.
|
My Masakado build for the Reaper battle. |
I spawned the Reaper at level 89-ish with my Siegfried persona equipped because he had all the auto squad buffs. My main character wore the 200,000Y
accessory that prevents all ailments, since charm or fear can end a battle quickly. After the first turn, the plan was to switch to Masakado for:
- Debilitate. From what I read, keeping the Reaper debuffed is necessary.
- Samarecarm and Me Patra, because he does a lot of damage and applies ailments.
- Enduring Soul in case he had a nuke or something.
- Passive damage/crit buffs.
- Resistance to light and dark.
I planned to do physical damage since the Reaper has no weaknesses.
Koromaru and my main managed to get some crits in him to trigger valuable All Out Attacks. So even though Yukari got feared and ran away, I still managed to succeed in my first attempt. Triggering the battle with full Theurgy gauges and good arcana bonuses was probably important as well.
I thought from what Jeff told me that the Reaper gave an OP item but
afaict ͥ itwas just
a damage resist accessory that isn't better than being ailmentproof or weaknessproof. The exp payday, on the other hand, sent me well above the difficulty curve, so maybe that's actually what Jeff said.
I was surprised to see the Reaper return when I encountered another darkness floor. I naively assumed that the Reaper had become the reapee. Well, Yukari got her second chance and this put me close to max level (99).
Turns out there is a secreter, finaler boss - a friendly sparring match with Persona 3's lawful-awkward NPC Elizabeth. I peeked at the gamefaq section on beating her and noped right out. I didn't really have a choice since you pretty much need to max every arcana to beat her and I had left one friend at level 6 and another at level 4.
January (gameplay/plot spoilers)
The P3 plot teases a boss confrontation for the few months leading up to the actual
final gauntlet ͥ which occurs at the end of January.
The overworld in January gets bleak as the world is overcome by Apathy Syndrome. I hate to say something trite like, "the overall vibe is the best part of Persona" but that's how it is.
For all of P3R I followed the minmax guide advice of
only visiting Tartarus once per month, since it consumes time that can be used to grow overworld stats. It doesn't hurt that climbing an entire Tartarus stratum is not prohibitively difficult nor is it enticing to grind experience.
When January comes around, there's a lot of free time in the evenings due to having maxed out stats and relationships. There's also new inventory at the antiques shop,
endgame gear that tends to be around 40% better in numeric stats than anything before it. But the gear requires acquiring heart items by unlocking final skill of each top tier persona. And so there's a strong push to hit the Adamah level of Tartarus multiple times in the final month.
It should be noted that
equipping the Growth 3 (and ideally Growth 2) to each persona means they get the benefit of battle experience without having to land the final blow.
Alas, running Adamah a bunch of times is rather dull.
Final boss/endgame (gameplay/plot spoilers)
The final sequence consists of a few floors of normal baddies that can be farmed for Theurgy (ult meter) followed by miniboss battles. Nothing was particularly challenging at Level 99 with decent gear.
The main Nyx mechanic is that
it progresses through each arcana with a new HP meter and resistances. My main could take its HP all the way down on critical hits, the other characters needed a couple of attacks. Using any Theurgy skills at this point would have been a total waste.
It was late in the evening on a school night, but
iirc ͥ the arcana phase was followed by a nuke that required a full squad heal.
For Nyx's final phase it basically just had a lot of HP. Everybody popped their ults and ended things pretty quickly.
Considering the game's focus on friendship, it might have made more sense for knocked out allies to be replaced by someone left on the bench the floor below. (I can't definitively say this isn't the case since no one got knocked.)
Then, like, the moon comes down to Earth and inside is an egg version of Nyx. Or something. It was pretty late at this point but I'm quite certain it was a dramatic final confrontation.
Epilogue (plot spoilers)
|
Was Aigis like the canon waifu or something? |
The epilogue consists of checking in with everyone three months after the final battle. Weirdly, the game decides to erase everyone's memories of the event (handwaving a lot of plot holes) only to give them back at the end of the epilogue.
Final thoughts (gameplay spoilers)
|
Persona and the art of motorcycle maintenance. |
Persona 3 Reload was a lot of fun but probably could have been condensed. I would have had a substantially improved experience simply by not taking a trip to the shrine (to do skill duplication) every day. The story and dialogue were better than a lot of JRPGs but the ending was pretty uninventive.
NCAA Jam
I was the only person to guess Florida.