Michael Grunder
@mgrunder.bsky.social
86 followers 70 following 170 posts
Open source code monkey. Maintainer of #phpredis and contributor to #hiredis and #libvalkey.
Posts Media Videos Starter Packs
Reposted by Michael Grunder
gettheorion.bsky.social
October 11 is International Coming Out Day.

I say it's long overdue for people to accept us for who we are. So, let me say this loud and clear:

We're here and WE'RE NERDS!

Oh, and some of us are gay, deal with it. 😎🖖🏻🤟🏻
custom design feature my interpretation of an American Sign language sign for "Nerd." two fingers are pushing up a pair of glasses. The 3 stars represent Orion's belt. behind the image are the colors of the Lesbian Pride flag. custom design feature my interpretation of an American Sign language sign for "Nerd." two fingers are pushing up a pair of glasses. The 3 stars represent Orion's belt. behind the image are the colors of the Gay Pride flag. custom design feature my interpretation of an American Sign language sign for "Nerd." two fingers are pushing up a pair of glasses. The 3 stars represent Orion's belt. behind the image are the colors of the Bisexual Pride flag. custom design feature my interpretation of an American Sign language sign for "Nerd." two fingers are pushing up a pair of glasses. The 3 stars represent Orion's belt. behind the image are the colors of the Transgender Pride flag.
mgrunder.bsky.social
Which logs? Do you mean the image alt text?
mgrunder.bsky.social
It does (at least with gcc and clang)
❯ clang-19 -std=c23 -Wall filequine.c
❯ ./a.out
// quine.c (requires a C23-compliant compiler)
// cc -std=c23 quine.c

#include <unistd.h>

const unsigned char me[] = {
    #embed __FILE__
};

int main(void) {
    write(1, me, sizeof(me));
}
mgrunder.bsky.social
Hey @thephd.dev was the real motivation behind #embed to make quines easier in C? 😆
// quine.c (requires a C23-compliant compiler)
// cc -std=c23 quine.c

#include <unistd.h>

const unsigned char me[] = {
    #embed "quine.c"
};

int main(void) {
    write(1, me, sizeof(me));
}
mgrunder.bsky.social
That seems bad but maybe they can make it up in volume. 😆
mgrunder.bsky.social
That seems to be the consensus, so that's what we'll do.

Also it's actually going to be 6.3.0RC1. I have no idea why I wrote 3.1.0 😅
mgrunder.bsky.social
They finally killed #PECL?

I'm in the middle of doing a #phpredis 3.1.0RC1 release. Trying to figure out if I should still do a release on PECL.

#php
A message about PHP's PECL being deprecated that directs you to publish your extension to PIE instead.
mgrunder.bsky.social
asshead-minifin is my goto headache medicine
mgrunder.bsky.social
Not requesting the feature, but do you think it will end up getting extended e.g. with WITHATTRS or similar?
mgrunder.bsky.social
The #Redis vector sets are really cool.

Just using basic movie information (e.g. "Title: , Genre: <genre>, Year: <year>, Synopsis: <synopsis>" results in quite good similarity searches.<br><br>Also the ability to `SETATTR` and `GETATTR` and filter on them is awesome.</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lvdx4h2ncc2r" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lvdx4h2ncc2r" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> <span>1</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lvdx4h2ncc2r" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> <span>2</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lvdx4h2ncc2r" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lvdx4h2ncc2r" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lv4okdi7522s" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· Jul 29</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">Hey <a href="https://bsky.app/profile/did:plc:ipt7y6qaf6fn7oeeduboqe44" class="hover:underline text-blue-600 dark:text-sky-400" target="_blank" rel="noopener">@antirez.bsky.social</a> <br><br>I'm implementing VADD for PhpRedis. My intuition is that I should send FP32 blobs by default.<br><br>Is this generally what clients have been doing?</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv4okdi7522s" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> <span>1</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv4okdi7522s" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv4okdi7522s" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> <span>1</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv4okdi7522s" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv4okdi7522s" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lv24rwyzsk2j" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· Jul 28</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">The logic to test for endianness at compile-time in C is actually unhinged.<br><br>I suppose we wouldn't want a miscompile on pdp-11 toasters.</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv24rwyzsk2j" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv24rwyzsk2j" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv24rwyzsk2j" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv24rwyzsk2j" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lv24rwyzsk2j" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lqorx6dmp227" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· Jun 3</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">Here you go</div> <div class="mt-2 " data-controller="modal"> <img src="https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreiczw75mrmcmysc65h3n5hfi73ra7z4sojcyy7h4h6r6shdgkqa3my@jpeg" data-action="click->modal#openWith" data-large-src="https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreiczw75mrmcmysc65h3n5hfi73ra7z4sojcyy7h4h6r6shdgkqa3my@jpeg" alt="Head of a tapeworm from a scanning electron microscope" class="w-full rounded cursor-zoom-in" loading="lazy"> <div data-modal-target="panel" class="hidden fixed inset-0 z-[100]"> <div class="absolute inset-0 bg-black/90" data-action="click->modal#close"></div> <div class="relative z-[101] h-full w-full flex items-center justify-center p-4" data-action="click->modal#stop"> <img data-modal-target="image" alt="" class="max-w-full max-h-full rounded"> <button type="button" aria-label="Close" class="absolute top-4 right-4 inline-flex items-center justify-center w-10 h-10 rounded-full bg-black/60 text-white hover:bg-black/80" data-action="click->modal#close"> <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg> </button> </div> </div> </div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqorx6dmp227" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqorx6dmp227" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqorx6dmp227" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> <span>3</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqorx6dmp227" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqorx6dmp227" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lqdnkhpcis2c" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 29</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">Maybe the real treasure is the threads we (a)waited for along the way.</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqdnkhpcis2c" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqdnkhpcis2c" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqdnkhpcis2c" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> <span>5</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqdnkhpcis2c" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqdnkhpcis2c" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lqd2hdbnas2g" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 29</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">Switch to rr so you can replay your failures over and over again</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqd2hdbnas2g" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqd2hdbnas2g" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqd2hdbnas2g" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqd2hdbnas2g" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lqd2hdbnas2g" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lpq27vrj5c2k" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 22</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">That does not sound fun. 😭</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpq27vrj5c2k" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpq27vrj5c2k" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpq27vrj5c2k" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> <span>1</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpq27vrj5c2k" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpq27vrj5c2k" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lpkpvst4zk22" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 19</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">how very dare you, smh</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpkpvst4zk22" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpkpvst4zk22" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpkpvst4zk22" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpkpvst4zk22" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpkpvst4zk22" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lpav5y5fek2h" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 16</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">If doing the evil shit has made them rich it's downright celebrated.</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpav5y5fek2h" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpav5y5fek2h" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpav5y5fek2h" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpav5y5fek2h" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpav5y5fek2h" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lpauyjufis2h" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 16</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">And all of the critical code runs on Python 2.7.</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpauyjufis2h" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpauyjufis2h" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpauyjufis2h" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> <span>2</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpauyjufis2h" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lpauyjufis2h" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lp7upwmlbk2w" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 15</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">Nice. Always liked these fun novelty commands.<br><br>Also, I think the Fischer-Yates shuffle might be one of the most useful little algorithms ever.</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp7upwmlbk2w" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp7upwmlbk2w" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp7upwmlbk2w" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> <span>1</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp7upwmlbk2w" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp7upwmlbk2w" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lp3q76bp522q" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 14</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">The genie is a paid actor</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3q76bp522q" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3q76bp522q" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3q76bp522q" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3q76bp522q" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3q76bp522q" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> <div class="w-full sm:max-w-[550px] sm:border-x border-t rounded-none bg-white digest-card card-clickable cursor-pointer group" data-href="/bsky/mgrunder.bsky.social/post/3lp3jtwr2nc2t" role="link" tabindex="0"> <div class="p-3"> <div class="flex items-start gap-3"> <div class="relative w-10 self-stretch flex justify-center" style="min-height:40px"> <img src="https://cdn.bsky.app/img/avatar/plain/did:plc:7uxh45ikinp4fe3uja2vfgbt/bafkreibic574mjt6krvbbvqfkcufept3fcpnmegcfxwaditkz3gmsfg6nm@jpeg" alt="mgrunder.bsky.social" class="w-10 h-10 rounded-full relative z-10" loading="lazy"> </div> <div class="flex-1 min-w-0 -mt-0.5"> <div class="text-sm flex items-center gap-1 whitespace-nowrap min-w-0"> <span class="flex items-center min-w-0 truncate"> <a href="/author?bsky_handle=mgrunder.bsky.social" class="font-semibold text-black hover:underline no-card-link">Michael Grunder</a> <a href="/author?bsky_handle=mgrunder.bsky.social" class="text-gray-500 ml-1 truncate hover:underline no-card-link">@mgrunder.bsky.social</a> </span> <span class="text-gray-500 ml-1 shrink-0">· May 13</span> </div> <div class="text-[15px] leading-5 break-words text-gray-100 bsky-reply-text">Those are clearly legitimate business expenses</div> <div class="mt-3 flex items-center justify-between text-gray-600 text-sm "> <div class="flex items-center justify-between w-[260px] pr-4"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3jtwr2nc2t" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg> <span>1</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3jtwr2nc2t" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3jtwr2nc2t" class="flex items-center gap-1 hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 1 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z"/></svg> <span>1</span> </a> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3jtwr2nc2t" class="flex items-center hover:text-black " target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg> </a> </div> <div class="flex items-center gap-4 text-gray-500"> <a href="https://bsky.app/profile/mgrunder.bsky.social/post/3lp3jtwr2nc2t" class="" target="_blank" rel="noopener"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg> </a> <span class="inline-flex items-center"> <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></svg> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </main> <footer class="border-t mt-6"> <div class="max-w-4xl mx-auto px-4 py-6 text-sm text-gray-600 flex items-center justify-between flex-wrap gap-3"> <span>© 2025 Lightnews</span> <div class="flex items-center gap-4"> <a class="hover:underline text-gray-700" href="/">Home</a> <a class="hover:underline text-gray-700" href="/rankings">Scholars & Rankings</a> <a class="hover:underline text-gray-700" href="/sitemaps">Sitemaps</a> <a class="hover:underline text-gray-700" href="/privacy">Privacy</a> </div> </div> </footer> <script> // Sanitize any legacy nav=1 param from links and the current URL document.addEventListener('click', function(ev){ try{ var a = ev.target.closest && ev.target.closest('a'); if(!a) return; var url = new URL(a.href, location.origin); if(url.searchParams.has('nav')){ url.searchParams.delete('nav'); a.setAttribute('href', url.pathname + (url.searchParams.toString() ? ('?' + url.searchParams.toString()) : '') + url.hash); } }catch(e){} }, true); document.addEventListener('turbo:load', function(){ try{ var url = new URL(location.href); if(url.searchParams.has('nav')){ url.searchParams.delete('nav'); var cleaned = url.pathname + (url.searchParams.toString() ? ('?' + url.searchParams.toString()) : '') + url.hash; history.replaceState(null, '', cleaned); } }catch(e){} }); </script> <script> function loadTwitterEmbeds() { try { if (window.twttr && window.twttr.widgets) { window.twttr.widgets.load(); return true; } } catch(e) {} return false; } document.addEventListener("turbo:load", function() { if (!loadTwitterEmbeds()) { var tries = 0; var max = 10; (function retry(){ if (loadTwitterEmbeds() || ++tries > max) return; setTimeout(retry, 400); })(); } // Re-hydrate Bluesky embeds after Turbo navigation by reinjecting the script try { var s = document.createElement("script"); s.src = "https://embed.bsky.app/static/embed.js?ts=" + Date.now(); s.async = true; s.onload = function(){ try { s.remove(); } catch(_){} }; document.body.appendChild(s); } catch (e) {} }); </script> <script> // Decorate links to lists (home/sections) with stored edition at click time (web only) document.addEventListener('click', function(ev){ try{ var a = ev.target.closest && ev.target.closest('a[data-apply-edition="1"]'); if(!a) return; var pref = localStorage.getItem('preferredEdition'); if(pref && pref !== 'global'){ var url = new URL(a.href, location.origin); url.searchParams.set('edition', pref); if (url.toString() !== a.href) { // Update href and let the browser/Turbo handle the navigation once a.setAttribute('href', url.pathname + '?' + url.searchParams.toString() + url.hash); } } else { var url2 = new URL(a.href, location.origin); if(url2.searchParams.has('edition')){ url2.searchParams.delete('edition'); var newHref = url2.pathname + (url2.searchParams.toString() ? ('?' + url2.searchParams.toString()) : '') + url2.hash; a.setAttribute('href', newHref); } } }catch(e){} }, true); </script> <script> // Track last list path (home or sections) for back navigation on digest pages document.addEventListener('turbo:load', function(){ try{ var path = location.pathname; if(path === '/' || path.indexOf('/sections/') === 0){ var url = new URL(location.href); var ed = url.searchParams.get('edition'); var stored = path + (ed ? ('?edition=' + ed) : ''); sessionStorage.setItem('lastListPath', stored); sessionStorage.setItem('lastNonPost', stored); } else if(path === '/trending'){ sessionStorage.setItem('lastTrendingPath', '/trending'); sessionStorage.setItem('lastNonPost', '/trending'); } else if(path.indexOf('/digests/') === 0){ // Keep lastDigestPath fresh when on digest pages to avoid stale fallbacks sessionStorage.setItem('lastDigestPath', path + location.search); sessionStorage.setItem('lastNonPost', path + location.search); } }catch(e){} }); </script> <script> // Remember to expand subnav when navigating to Frontpage/News without URL params document.addEventListener('click', function(ev){ try{ var a = ev.target.closest && ev.target.closest('a[data-subnav-trigger="1"]'); if(a){ sessionStorage.setItem('showSubnav','1'); } }catch(e){} }, true); document.addEventListener('turbo:load', function(){ try{ var onHome = location.pathname === '/'; if(onHome && sessionStorage.getItem('showSubnav') === '1'){ var el = document.getElementById('subnav-expanded'); if(el){ el.classList.remove('hidden'); } sessionStorage.removeItem('showSubnav'); } }catch(e){} }); </script> <script> // Remove any l=... language parameter from digest links to unify cache keys document.addEventListener('click', function(ev){ try{ var a = ev.target.closest && ev.target.closest('a[href^="/digests/"]'); if(!a) return; var url = new URL(a.href, location.origin); if(url.searchParams.has('l')){ url.searchParams.delete('l'); var newHref = url.pathname + (url.searchParams.toString() ? ('?' + url.searchParams.toString()) : '') + url.hash; a.setAttribute('href', newHref); } }catch(e){} }, true); </script> <script> // Remember previous page before navigating to a local Bluesky post via anchor document.addEventListener('click', function(ev){ try{ var a = ev.target.closest && ev.target.closest('a[href^="/bsky/"]'); if(!a) return; var prev = location.pathname + location.search; sessionStorage.setItem('prevPage', prev); sessionStorage.setItem('lastPostPath', location.pathname); }catch(e){} }, true); </script> <script> // Also sanitize card-clickable data-href: strip l=... if present document.addEventListener('click', function(ev){ try{ var card = ev.target.closest && ev.target.closest('.card-clickable'); if(!card) return; var href = (card.getAttribute('data-href') || '').trim(); if(!href) return; // Strip accidental wrapping quotes if((href[0]==='"' && href[href.length-1]==='"') || (href[0]==="'" && href[href.length-1]==="'")){ href = href.slice(1,-1); } var url = new URL(href, location.origin); if(url.searchParams.has('l')){ url.searchParams.delete('l'); var newHref = url.pathname + (url.searchParams.toString() ? ('?' + url.searchParams.toString()) : '') + url.hash; card.setAttribute('data-href', newHref); } // Navigate on card click unless clicking an inner actionable link if(!ev.target.closest('.no-card-link')){ ev.preventDefault(); var targetHref = (card.getAttribute('data-href') || href).trim(); if((targetHref[0]==='"' && targetHref[targetHref.length-1]==='"') || (targetHref[0]==="'" && targetHref[targetHref.length-1]==="'")){ targetHref = targetHref.slice(1,-1); } try{ // If navigating from a digest page to a post, remember this digest for back navigation if(location.pathname.indexOf('/digests/') === 0){ sessionStorage.setItem('lastDigestPath', location.pathname + location.search); sessionStorage.setItem('entrySource','digest'); } else if(location.pathname.indexOf('/bsky/') === 0){ // Navigating from a post to another post (e.g., reply): mark source as post sessionStorage.setItem('entrySource','post'); } // Always remember the immediate previous page when going to a post if(targetHref.indexOf('/bsky/') === 0){ var prevp = location.pathname + location.search; sessionStorage.setItem('prevPage', prevp); sessionStorage.setItem('lastPostPath', location.pathname); } }catch(e){} if(window.Turbo && Turbo.visit){ Turbo.visit(targetHref); } else { window.location.href = targetHref; } } }catch(e){} }, true); </script> <script> // Keyboard activation for card-clickable elements document.addEventListener('keydown', function(ev){ try{ if(ev.key !== 'Enter' && ev.key !== ' ') return; var card = ev.target.closest && ev.target.closest('.card-clickable'); if(!card) return; var href = (card.getAttribute('data-href') || '').trim(); if(!href) return; if((href[0]==='"' && href[href.length-1]==='"') || (href[0]==="'" && href[href.length-1]==="'")){ href = href.slice(1,-1); } ev.preventDefault(); if(window.Turbo && Turbo.visit){ Turbo.visit(href); } else { window.location.href = href; } }catch(e){} }, true); </script> <script> // Sync stored edition from current URL on list pages (no navigation) // Only update when the URL explicitly includes an edition param; otherwise keep prior preference. document.addEventListener("turbo:load", function(){ try{ var onDigest = location.pathname.indexOf('/digests/') === 0; if(onDigest) return; var url = new URL(location.href); if(url.searchParams.has('edition')){ var ed = url.searchParams.get('edition'); localStorage.setItem('preferredEdition', (ed && ed !== 'global') ? ed : 'global'); } }catch(e){} }); </script> </body> </html>