#dev 2019-09-03

2019-09-03 UTC
KartikPrabhu, tsrt^, Guest13833, [tantek], vika_nezrimaya, astrojuanlu[m], freethinkingaway, sacha[m], card[m], discord[m], aaronpk[m], iiogama[m], manfred[m], npfoss[m], Nebulous[m], sfroment[m], new0ne[m], Romaric[m]1, tom85[m], sander[m], drbh[m], ritewhose[m], Giyomu[m], romaric[m], andrewxhill[m], rittme[m], Lolicon[m], mikeal[m], gnunicorn[m], gorhgorh[m]1, macerbi[m]1, RealSnazzy[m], Tianyi[m]1, Keegen[m], Ja3ood[m], Tianyi[m], Senshi[m], vasa[m], gorhgorh[m]2, rklaehn[m], enricomarino[m], maparent[m], mZ[m], prtfw[m], cesarosum[m], placer14[m], Mairkur[m], CantiTurtleCoin[, gozala[m], drshamoon[m], celso[m], pierreboc[m], aeddi[m], celso[m]1, chris[m]1, oed3[m], AXEL-Lee[m], WidgetBotiocli1[, M[AXEL]Darr[m], CryptoEmpress[m], jenncloud[m], fozzie[m], Rick[m], AXEL-Brian[m], JeffMaherVegas[m, msena3[m], Expherience[m], silent_Activist[, carsonfarmer[m], lyon[m], eddy[m], hvergara[m], Clment[m], phynite[m], balupton[m], 21WAAAUAN, Lilz|BetaMe[m], Akshay[m]1, Gorka[m], NatoBoram[m], kanej[m], Oxy[m], AuHau[m], JustMaier[m], RockSteadyTRTL[m, 32NAA460F, aphelionzDiscord, JordanKrageDisco, AkshayDiscord[m], HeishDiscord[m], PermawebMatrixBr, brewskiDiscord[m, baluptonDiscord[, jimpick[m], oed3Discord[m], npfossDiscord[m], gorhgorhDiscord[, CantiTurtleCoinD, sanderDiscord[m], Valium[m], GorkaDiscord[m], dignifiedquireDi, dillonDiscord[m], AuHauDiscord[m], LSJI07Discord[m], RickDiscord[m], RealityDiscord[m, postablesDiscord, msena3Discord[m], wcharginDiscord[, kanejDiscord[m], hazDiscord[m], NebulousDiscord[, NatoBoramDiscord, manfredDiscord[m, aeddiDiscord[m], realChainDiscord, prcDiscord[m], ClmentDiscord[m], JayWelshDiscord[, corylDiscord[m], hyde__Discord[m], rxninDiscord[m], dpinnerDiscord[m, TH0RynDiscord[m], LeFDiscord[m], eshohetDiscord[m, pusherDiscord[m], sfromentDiscord[, BossMANDiscord[m, Kenzo3Discord[m], jamiedubsDiscord, fexra|TRTLDiscor, DiscordRSSDiscor, andrewxhillDisco, ritewhoseDiscord, cwchristerwDisco, thatguyDiscord[m, M5310Discord[m], JustMaierDiscord, braditzDiscord[m, RyonezCoruscareD, Dazuck-3BoxDisco, catmanDiscord[m], JerbsDiscord[m], ValiumDiscord[m], carsonfarmerDisc, M[AXEL]DarrDisco, GiyomuDiscord[m], OboDiscord[m], AXEL-BrianDiscor, KubeWorshipperDi, berDiscord[m], jgmDiscord[m], snapDiscord[m], tobowersDiscord[, cyluDiscord[m], MairkurDiscord[m, LokeLDiscord[m], thomasDiscord[m], M011000100111010, doodlemaniaDisco, porshDiscord[m], MichaelTenDiscor, buztedDiscord[m], SirMemesALotDisc, farhad312Discord, PhillmacDiscord[, RDeckardDiscord[, alphapapaactualD, vamsiDiscord[m], eddyDiscord[m], drbhDiscord[m], TianyiDiscord[m], Ja3oodDiscord[m], mZDiscord[m], foxcoolDiscord[4, sekiDiscord[m], abhi_Discord[m], flower88Discord[, lamborghiniDisco, JohnnyMilkshakes, pbvieDiscord[m], GuillaumeDiscord, KubeDiscord[m], RealSnazzyDiscor, rittmeDiscord[m], new0neDiscord[m], rozgoDiscord[m], gnunicornDiscord, dy5es41Discord[m, Microsoft_techni, combrayDiscord[m, denzukoDiscord[m, dqxDiscord[m], JeffMaherVegasDi, hubaDiscord[m], tom85Discord[m], jwheelerDiscord[, planetary_devDis, rklaehnDiscord[m, olizillaDiscord[, Dby0Discord[m], cristobalDiscord, vasaDiscord[m], XierumengDiscord, mZDiscord[m]1, nlkoDiscord[m], lyonDiscord[m], zegordoDiscord[m, nocentDiscord[m], KYZITEMELOS93Dis, aleDiscord[m], EugeneDiscord[m], sbpDiscord[m], chmanieDiscord[m, OxyDiscord[m], johanhermanDisco, alexmarcus[m], skillman623Disco, zwelsternDiscord, peterkDiscord[m], neohexDiscord[m], Turtle1331Discor, crestDiscord[m], CatManDoooDiscor, MaggieDiscord[m], ShadowLingDiscor, Luna14Discord[m], ddahlDiscord[m], zoink92Discord[m, M4eekDiscord[m], foxcoolDiscord[m, katakotoDiscord[, fozzieDiscord[m], ZedDiscord[m], dindustriesDisco, dhenzDiscord[m], SteffDiscord[m], NastyEbilPiwateD, jimpickDiscord[m, cwDiscord[m], Lilz|BetaMeDisco, benaszabDiscord[, codynhatDiscord[, celsoDiscord[m], hvergaraDiscord[, RomaricDiscord[m, sukarDiscord[m], kevinbird15Disco, grvhiDiscord[m], JungleHeartDisco, sprayDiscord[m], TryptophanDiscor, KarlDiscord[m], SenshiDiscord[m], mhzDiscord[m], ShmultzDiscord[m, rappelDiscord[m], CarboClanCDiscor, AtiqDiscord[m], NooooooWayyyyyDi, jmank88Discord[m, koalalorenzoDisc, drshamoonDiscord, ScottSmileyDisco, nyarlathotepDisc, pps96Discord[m], gregjeanmartDisc, malaclypsDiscord, megadogberthehim, OrkunDiscord[m], AblibuDiscord[m], KinnardDiscord[m, jenncloudDiscord, braditzDiscord[4, romaricDiscord[4, the_nikinDiscord, allgoDiscord[m], mattcDiscord[m], chinsuDiscord[m], panDiscord[m], nijynotDiscord[m, SchwartzDiscord[, h2Discord[m], DerekDiscord[m], SmileRobotDiscor, KinnardDiscord[4, sekiDiscord[m]1, xtream1101Discor, felixschlDiscord, cesarosumDiscord, jazzy-jeff^_^Dis, jessicaschilling, freethinkingawa4, bitspillDiscord[, marcocastignoliD, MesaDiscord[m], leoalvarezhDisco, SweatDiscord[m], aaronpkDiscord[m, paulmahoneDiscor, TeamIanDiscord[m, nebulerDiscord[m, TianyiDiscord[m4, gtsDiscord[m], DamirDiscord[m], CocoonCrashDisco, thestevewayDisco, bengoDiscord[m], deltaDiscord[m], enricomarinoDisc, modigDiscord[m], ExpherienceDisco, PamileissonDisco, felixschlDiscor4, n9tDiscord[m], cardDiscord[m], EdmundMDiscord[m, prtfwDiscord[m], jklepatchDiscord, placer14Discord[, sachaDiscord[m], aswiththewildDis, godparticleDisco, MatthDiscord[m], tangoDiscord[m], ArunDiscord[m], CryptoEmpressDis, UserDiscord[m], SuikaDiscord[m], silent_ActivistD, cristobalDiscor4, KisulkenDiscord[, funwhilelostDisc, HeysteinDiscord[, ithithDiscord[m], celsoDiscord[m]1, l^discordDiscord, UsDiscord[m], ryanchristoDisco, r5723013Discord[, JonwelDiscord[m], pierrebocDiscord, IgutinDiscord[m], ad87657Discord[m, amatuniDiscord[m, DioBrandonDiscor, lauren|Microspon, test123Discord[m, KinnardDiscord[7, OlegStotskyDisco, plexusDiscord[m], James|ColonyDisc, mikealDiscord[m], zazikiDiscord[m], ksDiscord[m], KeegenDiscord[m], RDeckardDiscord4, iiogamaDiscord[m, maparentDiscord[, te0dDiscord[m], LordFenixNCDisco, robinzzzDiscord[, johanhermanDisc4, marcusrbrownDisc, MisterGoreDiscor, leoalvarezhDisc4, zcopleyDiscord[m, macerbiDiscord[m, DiscordBridge[m], DaekiDiscord[m], boomshroomDiscor, vexlDiscord[m], PhiDiscord[m], chmanieDiscord[4, wngrDiscord[m], nofwayyDiscord[m, chrisDiscord[m], catman[m], TristanDiscord[m, PermawebEmbedDis, ngamboaDiscord[m, bushido711Discor, ptonerDiscord[m], PeevesDiscord[m], itsmekntDiscord[, willibuddyDiscor, thomasbDiscord[m, nilocDiscord[m], RichardLittDisco, sblinnDiscord[m], janttoDiscord[m], M[AXEL]JulianDis, Bads3ctor9700[m], capDiscord[m], AraratDiscord[m], ShokuninDiscord[, ivanDiscord[m], JaoheahDiscord[m, doorknob88Discor, swedneck[GMT1]Di, Discord[m]1, bekomotion[m], cannabysDiscord[, PrabhaavDiscord[, GelvenDiscord[m], RomainDiscord[m], ZapierDiscord[m], RockSteadyTRTLDi, GabrielBadGriefD, JeanDiscord[m], jee[m], swedneck__, grantcodes[m], Swedneck_, plindner[m], neilDiscord[m], jamietanna[m], myfreeweb, jgmac1106[m], malaclyps[m], zoglesby, Rixon, omz13[m], prtksxna[m], j4y_funabashi[m] and gldmbr joined the channel
#
vika_nezrimaya
hey :3 who's the author of http://waterpigs.co.uk/places/new/? I'm currently working on venues and checkin support, and this UI is beautiful
#
vika_nezrimaya
s/UI/UX
#
KartikPrabhu
Barnaby Walters. the name is in the site. I haven't seen him active here in a while
#
GWG
Neither have I
#
vika_nezrimaya
KartikPrabhu: I mean, yeah, what's their chatname?
#
vika_nezrimaya
ugh
#
vika_nezrimaya
just read
#
vika_nezrimaya
ok
#
vika_nezrimaya
:c
#
vika_nezrimaya
seems like code isn't open source
#
vika_nezrimaya
I want to know how that location input was built
#
vika_nezrimaya
I'm so slow at reading stuff ugghhhhh
#
KartikPrabhu
vika_nezrimaya: maybe looking at the source can help. The map seems to be from leaflet
#
vika_nezrimaya
Yeah, except this doesn't tell me anything about how exactly leaflet was used there
#
vika_nezrimaya
ugh
#
KartikPrabhu
yeah. I looked through his github but couldn't find anything useful
#
vika_nezrimaya
ok, another question - do I need to mark up something as p-content in like posts so they won't look empty in your readers?
#
KartikPrabhu
I don't think so.
#
KartikPrabhu
there is no implied p-content so if it is absent then that post will just have no content
#
vika_nezrimaya
I'm afraid in Indigenous this means the post will seem empty
#
vika_nezrimaya
and as I have like posts in my main feed now
#
vika_nezrimaya
I don't have filters on Micropub, sadly
#
KartikPrabhu
the post is "empty" in the sense that it has no content. but I guess Indegenous should have a way of displaying likes without content
#
vika_nezrimaya
In the "your posts list" activity they show empty
#
vika_nezrimaya
same as my "ate" posts (which is my new experiment)
#
KartikPrabhu
sounds like a problem with Indigenous
#
GWG
vika_nezrimaya: Indigenous for Android doesn't do reply-context.
#
GWG
It is on the Indigenous side.
#
GWG
It should just show a URL
#
vika_nezrimaya
GWG: well, then I guess I'll go file a bug
#
KartikPrabhu
:thumbsup:
#
[tantek]
vika_nezrimaya also check the /like page for How to markup including fallback content in p-summary for Readers that may not natively support like posts
jjuran, KartikPrabhu, vika_nezrimaya and qotta joined the channel
#
vika_nezrimaya
I thought development of h-card venue and addressbook will not take more than one day... but then I remembered I have to build a renderer for it
[tantek], cweiske and [KevinMarks] joined the channel
#
[KevinMarks]
It's pretty easy to do "show where you are on a map" with leaflet.
#
Loqi
[Kevin Marks] Coffee, cheesecake and chill
#
[KevinMarks]
You can use a cdn for the leaflet lib and css, and put leaflet providers js locally, then you can pick a map style. (some of those need an api key, but the openstreetmap and stamen ones don't) https://leaflet-extras.github.io/leaflet-providers/preview/
#
jamietanna[m]
vika_nezrimaya it could be you need a p-name at least? Then that'll get used if there's no p-content
vika_nezrimaya joined the channel
#
@janboddez
↩️ Could be the hosted service just works, but Ima conclude for now that Microsub server software just ain’t there, yet. And that’s okay: I can easily share—to my own site, even—from any regular feed reader.
(twitter.com/_/status/1168798880525365249)
cweiske, aleksip, [jgmac1106], [KevinMarks], [pawel_madej] and [grantcodes] joined the channel
#
@IndieWebLife
Island in the NetAn Indieweb Podcast: Episode 4 “Webmentions and Privacy” #indieweb https://islandinthenet.com/indieweb-podcast-episode-4-webmentions-privacy/
(twitter.com/_/status/1168852508195901441)
jeremych_ and [schmarty] joined the channel
#
@mikestreety
@samdking was reading your latest blog post (good one and remind me to talk to you about food pouches) and noticed the link in the footer doesn’t work. If you also do a rel=“me” you can start to think about adding webmentions to your blog :)
(twitter.com/_/status/1168876335374225408)
#
sknebel
Sigh. Not an required order of doing things :D
#
jeremycherfas
I wonder why that link wasn't clickable in Loqi's version
qotta and [snarfed] joined the channel
#
[snarfed]
hey aaronpk, how's OYG scraping doing?
[grantcodes] joined the channel
#
aaronpk
not good. I need to do some more work to slow it down
[Rose], [jgmac1106] and [snarfed] joined the channel
#
[snarfed]
ugh, good luck
#
[snarfed]
oh interesting they're now 405ing HEADs
#
[snarfed]
bridgy is averaging roughly 1qpm to instagram.com, with cookie, bursty. i'm hoping to remove cookie eventually but not holding my breath. granary instagram still 401s 😐
#
aaronpk
1/minute??
#
aaronpk
ok i'm gonna have to do some rearchitecting to implement proper throttling
#
[snarfed]
that's...higher than you expected? or lower?
#
aaronpk
um, slower
#
aaronpk
I don't have any real rate limiting right now, just different polling tiers, but everyone within a tier just runs on a loop
#
aaronpk
so for the dozen people or so who are checked every hour, every hour it'll go rapid fire make requests
#
aaronpk
and those definitely get blocked quick
#
[snarfed]
yeah bridgy account timers are all independent, not chained like that, and perturbed by +/-20%. also base polling tier for IG is just once a day
#
[snarfed]
also baseline poll if nothing has changed is just two requests, profile page and subsequent JSON data (`/graphql/query/?query_hash=...`), but i assume OYG is roughly the same
[tantek] joined the channel
#
[tantek]
[KevinMarks] probably a good idea to spend some time updating the /fragmentions spec (maybe move/consolidate all the '##' challenges / problems / examples into a "Deprecated" section near the bottom?)
#
[tantek]
there were still a few examples / discussions that used '##' in some of the prose
jjuran joined the channel
#
GWG
I feel like fragmentions are another area that hasn't gotten much discussion/love lately
[schmarty] joined the channel
#
[schmarty]
if they ain't broke...
#
GWG
[schmarty]: Have you implemented fragmentions?
#
GWG
I just think it os worth reviewing
#
GWG
I am revisiting a lot of old conversations about webmentions
#
GWG
And some aren't panning out, but it is something that I will write on
#
[snarfed]
yay, thanks GWG!
#
[snarfed]
votes for:
#
Loqi
[dshanske] #75 Remove webmention header if Pings closed
#
Loqi
[snarfed] #41 for mentions, show full content text if it's small enough
[calumryan] joined the channel
#
[tantek]
[schmarty] parts of the spec are "broke", hence why I brought it up to [kevinmarks]
#
[tantek]
or is that [KevinMarks] (I keep forgetting if lowercase/TitleCase or b&w or color icon is the right one)
#
[schmarty]
tantek: fair point about fragmentions being "broke"
#
[tantek]
!tell [KevinMarks] prime opportunity for you to comment here and let people know about Fragmentions already working like this and our experiences etc. https://github.com/WICG/ScrollToTextFragment/issues/25
#
Loqi
Ok, I'll tell them that when I see them next
#
Loqi
[tigt] #25 `##text=` instead of `##targetText=` ?
#
[tantek]
!tell [KevinMarks] comment in this W3CTag issue as well, to get Fragmentions in front of that crowd as an already working alternative: https://github.com/w3ctag/design-reviews/issues/392
#
Loqi
Ok, I'll tell them that when I see them next
#
Loqi
[nickburris] #392 Scroll To Text
KartikPrabhu, gRegorLove and gRegorLove_ joined the channel
#
jacky
every time I look for a way into the Dat landscape, I'm realizing that the only option might be this Unwalled Garden project
#
jacky
I think a bridge could be made via something like bridgy
#
jacky
though I'd probably mess around trying to build something myself
#
jacky
though this is welcoming (hah):
#
jacky
> The Unwalled.Garden philosophy about RDF is YAGNI (You Ain’t Gonna Need It). We see RDF’s complexity as a turn-off to developers and something we should try to avoid if we can.
#
[tantek]
Yes that was an amazing essay by Paul
#
[tantek]
I mean he's not wrong
#
ShokuninDiscord[
Hmm, so is unwalled garden an alternative to activitypub?
#
[tantek]
shokunin it's not clear what's an alternative to activitypub because that's a protocol level question and AP does so much (and doesn't do other things) that you have to weirdly cobble together and cut in order to make an "alternative". tl;dr "alternative to activitypub" is not a useful framing.
#
ShokuninDiscord[
fair. In this case I was thinking of activitypub as rss with permissions / comments / reactions
#
[tantek]
permissions is the big one there to unpack and better understand
#
[tantek]
there were bunch of discussions about reframing private as "friends mode" for what it actually means (rather than "private" usually means private-to-self in common language usage)
#
[tantek]
but that's probably worth a high level user expectation / feature discussion in the main #indieweb channel
#
[schmarty]
shokunin: haha "RSS with permissions" sounds inverted, as activitypub is mostly about delivering messages to your followers' inboxes at the protocol level.
#
[schmarty]
i recall discussions here that mastodon (and most software that federates with it?) doesn't actually consume the published Atom feeds when you follow someone
#
[schmarty]
instead, a successful subscription means that your account will receive notifications of new messages from the accounts that you follow.
#
[schmarty]
that was a long description because i forgot the word "push", haha. it's push, not poll.
#
[tantek]
Has anyone considered clustering (nearly) identical comments received from different people? E.g. you could make a "nice pile" out of 90%+ of the replies to this: https://twitter.com/SwiftOnSecurity/status/1168915870959226882
#
@SwiftOnSecurity
Firefox 69 arrives with third-party tracking cookies and cryptomining blocked by default https://venturebeat.com/2019/09/03/mozilla-firefox-69/
(twitter.com/_/status/1168915870959226882)
KartikPrabhu joined the channel
#
[snarfed]
interesting idea. facebook does this with happy bday, happy anniv, congrats, etc message. good prior art
[grantcodes] joined the channel
#
[grantcodes]
Clicked on the webpage inside the tweet and was confused at the lack of comments, but then saw the tweets. Nice
#
[tantek]
yes sorry I should have clarified, the @-replies to the tweet
JeffMaherVegasDi left the channel
#
jacky
ShokuninDiscord[: it's more of a "social" layer for Dat
#
jacky
to allow Dat to collect info that can be seen as socially useful
#
jacky
that's a nice idea actually
#
jacky
could be like "20 people said: X"
#
[snarfed]
a rare instance where the plumbing is just as difficult as the presentation, maybe more. how do we determine which replies should be clustered, where to draw the line, etc is fuzzy and nontrivial. interesting NLP work
#
[snarfed]
but yeah a simple MVP is just trim whitespace and punctuation and then case insensitive string equal
#
[snarfed]
(facebook really is worth investigating since it's more sophisticated, eg it clusters birthday with bday, congratulations with congrats, etc
djmoch joined the channel
#
jgmac1106
tantek an interesting idea, I thought about just a threshold, after 50 likes just display the number
#
jgmac1106
when post get a ton of webmention it can get unruly
#
jgmac1106
this one for example: https://quickthoughts.jgregorymcverry.com/2019/08/30/benpatrickwill-jockeys-also-hit-horses-with-whips maybe after X likes I just say this post was liked X times
#
Loqi
[Greg McVerry] @BenPatrickWill Jockeys also hit horses with whips to make them go faster. Results do not make that right either. Want students to pay attention, use better teaching. https://twitter.com/BenPatrickWill/status/1167358886397038597 #digped
#
[snarfed]
jgmac1106 i like collapsed facepiles for that, eg https://snarfed.org/2019-08-05_38215#comment-2738733
jjuran joined the channel
#
jgmac1106
maybe just use details/summary replies, mentions, likes, most engagement to least and the reader intent gets to decide to display
#
Loqi
Bruce
#
[snarfed]
number could be a nice addition, but also incentivizes the addiction cycle, which eg instagram and m.b have deliberately moved away from, so maybe not after all
#
jgmac1106
yes that part I like, it isn’t an accident a dunk tweet got my most interaction as of late
#
jgmac1106
I just meant the length of post…and now fb considering dropping like count
#
jgmac1106
manton++ for starting a postive trend
#
Loqi
manton has 12 karma in this channel over the last year (39 in all channels)
gRegorLove joined the channel
#
[tantek]
Good MVF description by [snarfed] "trim whitespace and punctuation and then case insensitive string equal"
#
[tantek]
I might exclude "?" as "nice" and "nice?" have decidedly different meanings
#
[tantek]
whereas "nice" "nice." "nice!" are similar enough
[Sadik_Shahadu] joined the channel
#
[tantek]
goodness sakes it just keeps going
#
[snarfed]
must be some infosec inside joke? new to me
#
[tantek]
would the presence of a gif (e.g. a /photo_reply) be sufficient to be different? presuming you want to show the gifs. or would you cluster by alt text?
#
[snarfed]
ugh, for an MVP i wouldn't even try to handle images
#
[snarfed]
text is hard enough
#
[tantek]
ok this was hilarious if only because the link preview in Twitter didn't say/show anything specific: https://twitter.com/bwinton/status/1168935334199083008
#
[tantek]
wonders if the geonerds know those rough lat longs by heart for this reason
#
[tantek]
snarfed, definitely not considering images for an MVF. Perhaps an explanation of the inside joke: https://twitter.com/RotoPenguin/status/1168918248609501186
#
@RotoPenguin
@SwiftOnSecurity .@twitter @jack When a post has a certain number in it, the like button should be replaced with a [Nice] button.
(twitter.com/_/status/1168918248609501186)
#
aaronpk
I need to remember those coords
#
jgmac1106
would a laptop near a mic cause feedback?
[tantek] and [Sadik_Shahadu] joined the channel
#
[tantek]
what is comments display
#
Loqi
Comments are displayed in the context of an original post, and may be a mix of syndicated reply posts from other sites received via Webmention, as well as locally created comments https://indieweb.org/comments-display
[fluffy] joined the channel
#
[tantek]
tried to capture the "nice" collapsing discussion there ^^^
[jgmac1106] joined the channel
#
jacky
I'm starting to dig into microsub
#
jacky
and I notice some of the routes are a bit oddly placed (IMO) w.r.t the HTTP verbs
#
jacky
I also might not be understanding if it's meant to be _only_ POST requests for Microsub
#
jacky
oh it _does_ mix verbs
#
aaronpk
POST and GET, forget REST
#
aaronpk
nobody follows REST properly anyway
#
jacky
lol HATEOS is regal
#
jacky
haha I _just_ caught that
#
aaronpk
Some day I'm gonna do a conference talk with my rant about REST
#
jacky
jgmac1106: re: laptop + mic; it can if the mic is on
#
jacky
hm this stuff around channel order feels a wee bit complex
#
jacky
like doing partial diffs it seems
#
jacky
is going to shelf support for that
#
jacky
lol wow there's a detailed algo below 🤯