If you give a mouse a cookie you have to give a mouse a cookie banner
Streamed
Back from a break. Fixing instead of documenting dev passwords. Counting comments. Avatar upload. JS that polishes story submissions. Recent accessibility work, almost entirely by Federico. Relative timestamps block the single biggest perf win we could make. Schedule change: Tuesday afternoons and Thursday mornings.
scratch
topics
back from break
PRs
dev passwords https://github.com/lobsters/lobsters/pull/1993
couple bugs in flaggable comments https://github.com/lobsters/lobsters/pull/1988
tag releases https://github.com/lobsters/lobsters/pull/2000
ui improvements for 'hide' https://github.com/lobsters/lobsters/pull/1962
upvoted comments pagination https://github.com/lobsters/lobsters/pull/1986
edit own comment on /comments https://github.com/lobsters/lobsters/pull/1963
comment flagging https://github.com/lobsters/lobsters/pull/1991
issues
comment count https://github.com/lobsters/lobsters/issues/1994
mod origin editing is broken
title
post-stream
debug: comment flag not saved after #1991
github: cross off recovery code, unbork 2fa
finder/hack up linter for widely available baseline
is json/rss cached properly for caddy to serve
update stream schedule on /stream
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
03:16Howdy. I better get started then.
...24Hello. Been a second. I was out of town doing a bunch of travel, and then the inverse of having a guest, which of course takes up a lot of attention.
...45pushcx Welcome to Lobsters office hours, ask questions anytime!
so let's see this is lobsters office hours this is lobsters up on stream and this is just time to drop in and ask any questions about the site or how things are going moderation anything that's real interesting to you so let's throw in the chat office hours ask questions anytime yeah some kind of
blowing the dust off of the stream, but I think we're all set up here.
I tried to put a little go live announcement on Blue Sky, but they seem to be having a rough day.
04:38All right, so when
ChaelCodes You're back!!!
dhruv2038 hi
twitchtd hi pushcx, welcome back
folks aren't asking questions about the site i work on maintenance which is especially things like merging pull requests i have been getting a few in the last well i've had a couple come in the last couple of weeks and i got some yesterday oh hey chill yep i'm back and yeah there's a bunch of stuff built up there's oh yeah there's my other bug that i've been meaning to work on
Ah, hey Drew, nice to see another familiar face.
So, oh, Thomas.
I feel very bad about leaving your SQLite pull request so long.
I am not up to date on that email thread.
My inbox is a mess.
twitchtd it's all good, don't feel bad!
I love travel, but boy, is it hard to keep on top of responsibilities.
So what was my other thing?
Oh, yeah.
05:56Not origin. There's something.
06:07ChaelCodes lol
No, I'm constitutionally incapable of not feeling bad.
...21No, I know it's especially frustrating because I know it tends to turn off contributors.
The slower feedback they get, the less likely they are to return.
So any kind of break feels pretty bad.
ChaelCodes YEAH
graefchen Heya limesHi
I understand, and I'm sure Chael can speak to this, but any kind of break in the schedule is...
ChaelCodes I'VE GOT A STACK ON RUBYEVENTS
Pretty bad for streaming.
ChaelCodes I'm dying
dhruv2038 #1994 - that is a bug right
What is this?
You've got a stack on Ruby events.
I don't know what a stack is.
Oh, a stack of PRs.
Oh, no.
That's right.
You've been maintaining that.
ChaelCodes <3
Yeah, Chael, speaking of stuff you've got and Ruby events, I have a tab open for your talk on containers and dev containers from Tropical Rails, where it should be easier for me to find that again.
Then try to bring up my browser without throwing it up on the stream.
So we can jump over to our Rachel.
pushcx https://www.rubyevents.org/talk…
ChaelCodes Inspired by Lobsters
So this one, and I'm digging this out both because Chael is good people and a good speaker, but also this is a little bit related to lobsters.
And I understand at least some of this came out of the Docker and dev container setup that you did to code on lobsters.
Yeah, so I am really looking forward to seeing that talk.
Dhruv, I don't recognize 1994 off the top of my head, but yes, it is almost certainly a bug is my answer.
What do we have?
ChaelCodes 100% inspired by Lobsters, but not mentioned in the talk
Number of comments shown wrong.
Oh, I bet this is showing the number of merged comments.
54 avatars, 53.
I wonder if this is deleted versus undeleted.
Are there any removed comments in here?
Yeah, so there's one removed comment.
And because it's not spicy, I'm going to guess this is just a double post.
So this is like two bugs in one.
5307, 5507, it's almost certainly a double post.
Why am I not?
Why am I not logged into GitHub?
Man, the things that happen when it's been a minute since you've streamed.
Let me get logged in off screen.
09:23Two factor authentication failed. That's a new one. Did I hit enter too fast?
...36my name is pushcx my voice is my passport verify me did i get logged out of github in my personal browser and someone has taken over my github account no it doesn't look like it okay why why do you not like my totp code that's i'm gonna have a hard time merging things if yes i waited for that code to expire before i pulled it up but i'm gonna have a hard time merging things if i can't actually log into github hmm when's the last time i rolled that token
11:03Trying to figure out what the heck is wrong here.
I haven't...
I rolled that token quite a while ago.
On this device, right?
I'm checking something else here.
ChaelCodes It's relatable though
I am aware it is not thrilling viewing to just listen to me struggling with setup stuff off screen, but I kind of can't show off stuff on screen.
...40Yeah, cool. I am apparently locked out of GitHub 2FA. Let's try a recovery code.
...56Well, that worked. Okay. Well, there's my first Oh, come on, let's fight them. Thank you. All right. What was I doing? I was going to tag 1994 as a bug.
13:06Well, is it a bug or is it? It's sort of what do you expect to see there?
...18And yeah, actually, I think 53 would be the correct number because it's the number of comments visible as opposed to... We do render those tombstones where it's, you know, user removed this comment or moderator removed this comment. So... Yeah, I guess it's really just what do you expect that number is. Is it the number of comments you can read? Is it the number of comments that have been attempted to be posted?
14:03dhruv2038 lol
We've never really had, well, we have had a couple of like really garbage spam bots that have posted comments like, check out my travel agents to Tahiti, you know, like that kind of basement tier link building spam.
And I wouldn't want to see that included in the comment count.
And seeing a duplicate comment in the comment count is not...
It just doesn't feel like that counts as a comment.
15:19let's see user deleted this comment i don't remember the exact language user removed because that's what i controlled f4 right comment removed by author there's a funny typo in this if you're a moderator viewing these I think there's a, it says like the reason, right? Yeah, and I'll guess that off the top of my head.
16:45I'm not sure how to say that better. Maybe I'm really out of it, but I feel like I'm not explaining well. All right, we'll see how that goes.
19:01So I'm going to, no, not type. Don't use that field. I'm going to say bug, and I guess invalid. I missed the close button.
...20rebecaaras Yay lobsters office hours!
All right.
So let's see.
What else do we have?
Let's do one or two small ones here to get back into it.
Oh, I managed to break main the other day because I was clever.
If anybody reads the... Oh, hey, Rebecca.
I've really been enjoying your pull requests lately.
Thank you.
rebecaaras :D
I was just talking about how I broke main, and we saw that on your recent pull request.
Which one was that?
The...
...55Undo install.
No.
Is it one that I haven't merged yet?
Yes.
Didn't I?
rebecaaras You merged it
Oh, I'm on the issues, not pull requests.
I don't even know what I'm doing.
So this one, yeah, this one is fixed.
20:21pushcx https://github.com/lobsters/lob…
yeah yeah I just lost track of which I was looking at so if anybody is curious, this is rebecca's pull request, where I broke main day.
This is my.
One of my favorite patterns in software development is.
You force pushed.
The.
The original version of this pull request, Rebecca added to the developer documentation saying, hey, here's how you reset passwords for users at the console, something like that.
And I kind of thought about it and I thought about her issue and I went, well, you know, all of those passwords are useless because you can't know them and they're all hashed.
And these are all dev users, so let's just make all the passwords that come from the fake data task fake.
So rather than document something, let's just fix the inconvenience.
That's a nice little improvement to a nice fix.
So thanks for both reporting the issue and fixing it, Rebecca.
I appreciate it.
It's those little pain points that really put people off of contributing.
And I know it sounds silly, but I pretty firmly believe they add up.
So.
22:04Oh, man, that's awkward. All right. Nothing that's on stream, just a different thing. So, yeah. What else? We talked about that. Issues was... So let's see, what else do we have going on here? Anybody else in the pull requests? Let's filter down to open. Is anything else from Rebecca? I knew there was one more. Yeah. Let's take a look at yours right now. On comments and own stories. Yes, I skimmed this one. Why didn't I click merge on it? Oh, because I had a question. All right, so I reviewed this one. I knew it was familiar. Rebecca, on the off chance you've got any questions about my comment, I'm happy to talk through it.
23:34rebecaaras So I think I had a reason to do that weird thing using the arg user
rebecaaras But I forgot and didn't have time to check yet
yeah i i mentioned from a skim because i went through this pretty quick i was trying to get the worst thing yeah so maybe i missed something here but i couldn't when i skimmed i couldn't see a place where the past user was
The user passed in was different from the user object it was called on.
Okay, so if this is still pending, and did my comment about naming it for the role make sense?
Like when we show the user profile, we have the at user for the currently logged in variable and at showing user for the user that is currently being shown.
That's what I meant by what role is this object playing?
Because
rebecaaras Oh I see, like logged_user or smth
if it's something like viewer yeah yeah and
It seems a little odd then that it's here rather than over in the user model has a method like can flag.
Yeah, well, I went right back to it, I guess.
25:15But it looked like you were always passing in a user that was equivalent to self and then passing it off to this other object.
...36This is one of those places where object orientation is a little clunky, because we always have things, we have maxims like tell, don't ask, or kind of the law of Demeter, where they're like, oh, you shouldn't be digging around in another object's properties, which is what this is always gonna have to do, right? If it lives in story and comment, it has to dig over on the user object. And if it lives on the user object, it has to dig over on the taggable side. And either way, object orientation privileges the object that the method is defined on right like there is a hidden story argument to this if this was python it wouldn't be hidden we'd have that like self right here which is obnoxious in its own way i don't know all the time i i've been doing object orientation for 25 years, something like that. And I still, whenever there's these things like where we're comparing fields across two objects, I'm like, which side does it live on? I don't know, flip a coin.
27:18If Ruby allowed us to have a flagable interface, That said, oh, you have to have a user ID field on something for it to be flagable well then it would make a lot of sense for this to live on the user object. But we don't.
...44At which point I kind of toss up my hands and i'm like well let's just have a function that takes two things. Yeah, it really does look like all of these are getting at user, which is... Are they going through? Yeah, they're going through the at user object. All right, not too much more to say there What else can we look at? Let's just open all of these. I'm going to give Anubis a second because that one I have to make some weekend time for so I can get that merged. And then let's just run down these.
28:54This one's real nice. I already did one review on this where I proposed a tweak to the regex, and I think he just grabbed the suggestion. I didn't see from my email. Why are we here? But people don't often tag releases. OK. And then everything is green. Great.
29:27So we have a little bit of JavaScript on the story submission that is some of my favorite code on the site, because it fixes so many little issues that otherwise have been mod chores. So if you submit a link that ends in .pdf, it tags it as PDF. If you link to YouTube, or these other sites, it tags it as video. Same with the extension. you link to slideshare it tags it as slides man remember slideshare and there's some other stuff that's really nice like trying to detect if people are including blog names in titles because lots of people have titles that on their blogs that are like my testing strategy dash alicesmith.com and we don't include the alicesmith.com the author info or the site name and there's a little bit of a javascript hint in here it's not this particular function but it's nearby that just says hey it looks like there's probably a username or a author name or a site name could you delete that if so and so we don't have to be super smart about how do we recognize that alicesmith.com is alice smith the blog we can just be like yeah we see a hyphen in there and that's usually how people separate their post titles from their blog titles so there's that i really appreciate those kind of like it's not a hundred percent accurate but for the cost of one regular expression we get like 95 accurate and When I added that, oh man, I used to, you'd have to dig back in the mod log, but before I did that, I was fixing like five titles a day. And now it's, I don't know, one or two a week. Usually user suggestions get them before I even see them. Option two. Oh, this is big. Okay.
31:54I remember reviewing this, yes. And March 14th, so I must've looked at this right before I went out of town.
32:13Okay. Let's create a new table, create a new application record No, let's look at the failure. Hugo, you wouldn't happen to be here in the Twitch chat, would you? I thought Hugo had dropped by once, but it's been a minute. All right, let's take a look. Missing fail avatar. Self should have a table in the database.
...59That sounds like the avatar is inheriting from application record instead of whatever it should be subclassing. This might actually be, yeah, this is the first time we've allowed users to upload files, right? Let's take a look.
33:39How do we find the answer to this question?
...55There's a button for it, right? avatars expire and we just do it straight in the controller yeah so let's
34:46Where should it live? So we sort of have two avatars. There's the gravatar, which is just a URL on the user model. And then we have this new avatar class. So there isn't one place for them to live.
35:28I have the feeling more stuff knows this caster.
...38rebecaaras I'm still a little confused about which flow is the best. I force push to clean history, but it is also bad bc e.g. the original PR is lost too. Anyone does it in a better way?
Yeah.
...45A link to avatar image. So this avatar path, which flows for the best. so rebecca first off you absolutely did nothing wrong second jujitsu is a little nicer for this but that's kind of a big jump away from git it really depends
36:26on the team and sometimes even on the pull request i don't think i have a universal answer for that some teams i'm back up git is bad at this and github is worse at this and they make it your problem when it shouldn't be this there's sort of the question of are you generating a merge where you are saying like hey i am trying to land good code onto main in which case kind of the only thing that matters is what shows up in that merge commit on main and then there's am i trying to produce individual commits that make sense in context and maybe even can be used individually of each other as opposed to they all have to be used together or you know you have to have three out of four of the commits you have a broken build right and i say that github is not setting you up for success because or will get doesn't handle this well because it really wants to consider commits as immutable, which is what you want once they're on main but it's really not what you want, while you're revising things. And then I say github doesn't handle this well because. I mean, you saw there just literally isn't a way in the interface there that I could see that there was a previous version of your commit that was worth talking about. GitHub just kind of threw the history away. And from a version control system, if I can describe a feature as it just threw the data away, it's like, hey, that's kind of a flashing red warning light that we're not doing a good job of controlling the versions if the version control system doesn't have the history.
39:00And so there's this mismatch between are we producing commits or are we producing a clean merge And the answer is both. And I like how Jujutsu handles this a lot better. And I have some hope that another CodeForge wants to support what's called the interdiff model. This has got an interdiff. Has this come up on stream? Where did we talk about this? I thought I talked about it.
...48pushcx https://lobste.rs/s/kiqqjt/anno…
rebecaaras I see... that's useful to know
did not oh no somebody talked about it yeah i came up here on flirt i don't know the status of this
project but it is about building a pull request workflow where we are both where we are producing commits with the understanding that it's not just that the whole feature branch
is the draft we're editing on.
We are also drafting and revising each commit so that they are clear.
42:24Actually, you know, as I say that, our avatars are based on email. Is there even a field? There's show avatars. Okay, there is an avatar URL, but that's just generating a path to our local copy. Yeah, there's fetched avatars.
44:05ChaelCodes There's a new GitHub thing for stacked PRs
speaking of things github doesn't do well they don't do well at stacked prs so if i was going to take on the refactoring of pulling gravatar out to its own model i would want to do that in its own branch for hugo to build on top of right that's the stack of prs which
Every time I say it, I hate the word PR more.
It's a merge request.
The user is not requesting a pull.
You have to pull to look at it from the command line.
ChaelCodes https://github.github.com/gh-st…
They're requesting a merge.
It's been wrong forever.
...56But if I do that, there isn't a good way for... Yeah, they've just announced that.
That's where I was getting.
Is that...
ChaelCodes Pushcx moves to GitLab for MRs? lol
They are starting to incorporate that.
45:14I am definitely not in the beta.
Move to GitLab just for the... Do they call them merge requests?
I'm so unfamiliar with GitLab, I don't know.
ChaelCodes yes! 😂
If they had that and proper interdiff models, that would be...
Real tempting, although it's the interdiff model that's more interesting than the name.
Yeah, you know, it's been a minute since I streamed, but there are those three things I wanted out of a GitHub replacement.
There was the interdiff model and then owning all of our data, like issues and comments on merge requests, pull requests, whatever they're called.
And I think the third thing was it would be great if it was as popular as GitHub and everybody was already logged in so that we have the lowest friction possible to potential contributors.
And I realize I'm not going to get that third one.
46:28Avatar preference. I don't like that name. I think I want...
47:34I don't understand what's happening with this class. I think it's just a draft.
48:04dhruv2038 I have a feeling cursor will some day replace GitHub - only way they will survive
dhruv2038 yes yes it is an ide
cursor will drew could you say more about that i thought cursor was an ide that had a bunch of lm powered features maybe it's even a vs code fork so i don't immediately see how an ide would replace github am i you think that they will expand features to have
dhruv2038 yep yep
so many collaborative features that they'll replace GitHub.
It seems like a...
I see how it's complimentary, but that's a big jump.
Are they building a lot of collaboration stuff in then?
Clearly, I haven't used it if I have to ask if it's an IDE.
50:51Okay, I don't think there's anything more to say about these. No.
51:23dhruv2038 https://techcrunch.com/2026/02/… I feel cursor has a lot of experience with the things said here. I maybe "entirely" wrong.
dhruv2038 pun intended
let's look at that form yeah he didn't create his own oh no he created his own form it's nested inside the other form which is a whole different thing that
It kind of works, but it kind of doesn't work.
52:05All right, GitHub CEO.
...15I could have $60 million. Wait, that was a seed round? Wow. That's... What date is this? February. That's showing a lot of promise.
...42I would love to see the pitch deck that raised a $60 million seed round. Not that it's topical for lobsters, but like... I'm an entrepreneurial nerd. I've spent a lot of time working with startups. Yeah.
53:06CEO of Microsoft's GitHub for four years, leaving, what, eight months ago? Yeah, honestly, I wonder if...
...20dhruv2038 haha
I wonder if the pitch deck is like, slide one, I was CEO of GitHub.
Slide two, GitHub has a X billion dollar TAM.
Slide three, I am fundraising for Entire, which is going to eat that TAM.
...43God, $300 million valuation, that's just,
...52Hmm.
...58That's also a big seed round in terms of equity stake, like to sell 20% of the company in the seed round. Usually it's more like I don't know. eight to ten maybe going a little bit higher if you're including a y combinator stake but 20. universal semantic reasoning layer to allow multiple agents to work together is that just text because like the thing is none of the existing agents that we're calling them or LLMs do semantic reasoning.
55:00Maybe that's a, they've actually invented something and that level of magic wand is worth 30 million.
I don't know.
We'll see where that one goes.
Usually with startups, I'm like, well, we'll find out in 18 months when you go to raise your next series.
It's $16 million.
I don't know how you, I don't know how you spend $60 million or was it 30?
Yeah.
60 in 18 months to get to your series a on a normal and track kind of sign.
So maybe we'll find out in three years.
dhruv2038 ai defies science
All right.
56:10dhruv2038 and logic too -so anything is possible
Where's the... AI defies science and logic?
Hmm.
...41Trying to think of what's useful for Hugo here. Probably just.
57:08theyagich HeyGuys
dhruv2038 I mean to say - the investments at least.
Howdy , I don't know how to pronounce your names.
...42Oh, it's the Yagich, isn't it? Took me a second to parse. What does the bat mean next to your username? It is a badge. The bat is a hornet. Okay. I really am never going to learn Twitch emojis.
58:26theyagich it's from subscribing to someone who was playing hollow knight silksong when it released, it's the main character
Oh, oh, okay.
Thank you, I definitely didn't recognize that.
Oh, so I'm looking at it on a black background.
The two ovals in the bottom that are eyes, I thought they were just cutouts, and so it kind of was shaped like the Batman logo to me, rather than a face with two eyes and horns on its head.
I got it now.
59:03Combine you and zero other users.
...23Had to remove this auto magic. Oh, boy. This is going to be a... I'm going to see a bunch of TypeScript in this diff, aren't I?
01:00:11Looks like... Oh, I see. Okay. Federico really is fixing a bunch of stuff here.
...49Let's put this one in the notes. Let's do that before I lose track of what I'm doing.
01:01:12Background color inherent. I don't know. Seems like a no-op.
...25So if it's hidden by you, don't show the paragraph, sure.
Display inline.
Hide alert, hider.
Hide alert, hider.
All looks good.
Cat, do not help by clicking.
The cat's on the desk and he's getting into a flirty mood.
theyagich cat wants to review too
Oh, push-pulser.
Let's see if he settles down.
Cat wants review.
You know, he does hunt bugs.
It's actually hilarious watching him hunt a bug because, you know, he gets into it.
He does the whole thing where
His tail twitches, and he crouches real low, and he wiggles his butt, and then he pounces, and then he eats the bug, and then he makes the most disgusted, expressively disgusted face I have seen on an animal, let alone a cat.
It's just like .
It's like the Calvin and Hobbes face when he has to eat a food he doesn't want, and there are these wonderful cartoons.
theyagich LUL yeah
It's one of those faces.
And I'm like, buddy, buddy, you ate a bug.
Like, why did you eat a bug?
At what point are you a genuinely quite clever cat going to realize the bugs always taste bad?
ChaelCodes lol
All right, so...
theyagich the need to hunt overrides common sense
How do we?
Why are these swapped?
01:03:36Oh, I bet. I bet this is JavaScript being fun. What's type of undefined? No. What's type of null? Type of null is object. That's what it is. I get it.
01:04:00Who uses is object? Oh, a bunch of stuff.
...11yeah this is one of those foot guns that'll never get fixed in javascript but if we were to use a language that didn't have a null and compiled to say javascript among one of its several compile targets the need to hunt overrides common sense boy that is That is a very good way to put it. Also, and I'll forgive him this one because, you know, he evolved a year ago, but this cat also has trouble with the window because he would really like to pounce on a bird outside the window. so i don't know once or twice a year i hear this thunk of him clunking into the window when he tries to pounce on a bird and in his defense he did not evolve to deal with force fields but like in his offense buddy quit clunking your head trying to eat the birds you're never getting through the window you you i'm talking you to your adoring public The camera is not at all mounted somewhere that I can show him without putting my desktop on stream, and my desktop is... It's my working memory, and I just did taxes yesterday, so there is just personal shit all over my desk that I can't stream. Otherwise, I would be showing you the cat instead of just telling you about the cat. It's warmed up enough in Chicago that he started going back up on the filing cabinet, so he will join one of these streams fairly soon.
01:06:18theyagich my cat has given up on trying to catch the birds. she just looks at them wistfully through the window and reaches out sometimes. poor thing
Getting rid of submitter.
...31Oh, wistfully through the window, yeah. The most... This guy's... One of his other foolish behaviors is that Sometimes Crows will land on the back steps and He will like look at them hungrily out the back window and I'm like buddy that crow is as big as you are and has nine buddies and they are smart enough to like teach their kids about you if you piss off the crows and Number one, they will beat you up. You maybe will not win that fight, especially because you're outnumbered. And number two, they will come back and mess with you for the rest of your life. What is it? Crows can remember things for like five years? Yeah, that one's a bad bet. Please don't pick a fight with a crow if you get out, buddy.
01:07:43So take the. Submitter. This is. This is one of those things where I would not have named the. As long as we're touching this. Maybe we want to fix this, so like I know from reading this JavaScript for a long time, the submitter is not the person who submitted the thing, it is the UI control that is being used to submit. And I get that they are just repeating that naming, but yeah, let's not do that.
01:08:33Sir, sir, you're on the keyboard. Sir, ow. Buddy, oh, why are we so riled up? Why do we need our claws trimmed?
01:09:24sir stop clicking what did you do
01:10:11Not using the parent selector because you don't want it to throw. You just need to know if the submitter was inside. Wait, is closest added to the DOM now?
...32Oh, that's great. I probably used it and have forgotten it, but I'm I'm showing my age. I'm so used to having to call over to jQuery to find that.
01:11:00If that's all you want to know, why do you find the object instead of Yeah, it's not all you want to know because you use it.
...20Oh, no, I see you're finding the story. And then this is the the Boolean you wanted. Whether they're submitters, sir, sir, make good choices, sir. don't i have one of your toys here yes i do oh look oh look it's the snake oh it's your favorite enemy what if you were to pounce on the snake over there without stampeding across the desk okay no you don't understand the realities of modern media production sir
01:12:10Make good choices. That's the wrong choice, sir. He wants attention. I've mentioned this on stream, but he is a certified pre-owned cat, and his original humans did not give him enough attention. And he eventually, because every mammal needs attention, And like every mammal he lost the ability to distinguish between good and bad attention after long enough, and so he learned a trick, which is that if you put your teeth on someone you will always get attention. So occasionally when he's very bored he makes bad choices and puts his teeth on people that's why we've had to teach him so many tricks.
01:13:33know what the application JS.
01:14:13Thank you.
01:15:00groutnotout Ooooh hi there, have a good session
Oh, hey, bro.
Nat out?
Okay.
Thanks.
Welcome.
Twitch has shown me that you are new.
We are working on Lobsters.
If you have any questions about the site, you can ask anytime, or just watch over my shoulder as I maintain the site, which is mostly catching up on PRs, because I am so horrifically bad and behind on reviews.
01:16:16Things happen when actions trigger. Yeah.
01:17:04groutnotout Those reviews do not seem very timely no
Yep, you missed the start of the stream, but I was traveling and then had a guest for a while.
So these streams have been stopped for a month and I got in the habit of, I try and time box my maintenance of the code base to these streams so that it doesn't just take over my life.
So when they got disrupted, I did very little pull request review the last couple of weeks.
01:18:11groutnotout Okok
so the new handle story action says isn't there a oh no this is json data coming back yeah okay i was thinking this was data attributes not data as in whatever the heck response i got
So data and hidden in data.
I don't love that coupling.
That's going to be... Because I actually think this data is going to be the HTML, isn't it?
01:19:13let's look at handle story action.
...27yeah there's the.
...47Hmm.
01:20:14For each submitter. Hmm.
...29I hope the story object will not be present at this point. Yeah. Sir, I need the mouse. Yes, the one you've put your foot on. Yes, I'm touching your foot. Oh my god.
01:21:25groutnotout I'm on phone watching streams, not very productive 😔 brb
How big is your phone?
You can actually read the text on screen.
Wow.
Surfboard phone.
...47ChaelCodes Mine is normal sized, but I do the same
Yeah, I feel like we're doing...
The same thing a couple of ways.
I guess that's okay.
Your phone is normal sized.
All right.
Well, who am I to argue?
I'm not a big phone guy.
I've still got a 12 mini that I'm limping along as long as possible.
And, you know... As a...
nominal cubs fan there was a saying for years and years like ah maybe next year maybe next year there's always next year because they were the the losingest team in baseball i think they went 94 years between winning the tournament and so everybody would say well maybe next year it became kind of a self-reinforcing joke but now that is segged into
the iPhone mini where every year it's like maybe, maybe next year, they'll make another mini.
There are dozens of us.
groutnotout LoL no way
Yeah, it's funny, you look at Hacker News, anytime there's a story that is even vaguely related to phone sizes, or like odd phone factors, form factors, like a rollable phone or a foldable phone, and then
Like the three of us come out of the woodwork and are like, I'm still hoping for another mini, maybe next year.
01:23:29theyagich it'll happen any day now
I'm slowly preparing myself for the reality that it's not actually going to happen.
They're never going to make another mini.
No, no.
Stop hoping.
I'm telling you this as a Cubs fan and as a mini user, it's not going to happen.
You need to prepare yourself for that disappointment.
OK, so he broke out the save story stuff too.
That makes sense.
01:24:09Why does handle story action continue to exist at all?
...25Yeah, and if he's passing the event instead of a verb, I bet I'm gonna go find that story action is going to independently figure out, am I saving a story or hiding a story?
Next action in data.
theyagich i do wish my phone was smaller
Async form submit event, sure.
01:25:06in_security I'm still wishing my phone had a physical keyboard
pushcx https://www.xteink.com/
well i think everybody should wish their phone is smaller oh along those lines what is it the what are those cute little e-readers it starts with a i think it starts xe yeah z to ink zetting i don't know these are some cute little gadgets high insecurity
ChaelCodes Oh! Cool!
you are you are not alone in that one i bet yeah they make these eensy weensy little e-ink book readers and the scuttlebutt on these guys is that you really want to flash them with the open source firmware that some folks in the subreddit have put together
groutnotout !help
But yeah, if you have ever wanted a teensy weensy little ink reader like it's so tempting right isn't this the cutest little gadget and then, and then it magnets onto the back of your phone.
groutnotout LOL why I expect something like that
grout no bots here.
there's a fact on the.
archive page about it, but.
I don't have an API key.
anyways.
I don't need it, but I want it.
Such a cute little gadget, right?
theyagich i dont need it...
It is kawaii.
theyagich i dont... need it....
It has the kawaii nature.
Even if it doesn't have an anime girl drawn on the back of it, you can get a sticker.
ChaelCodes Do people accidentally turn the page while carrying their phone?
yeah yeah sorry to sorry to tempt folks like that but I just saw this in the last couple of days and so you know I'm going through that phase of don't I want it I think the screen locks but I don't know I'm trying to avoid actually watching a YouTube about it or reading the subreddit about it because if I start going down the rabbit hole then I'm actually buying any ink reader and I have
an e-ink reader that I use still.
I don't remember which Kindle model it is, but I've been beating this thing up for, oh God, 10 years now.
So it must be in that set that Amazon now says they're going to brick.
groutnotout normally phone can lock their orientation... so
That's also news for this last week.
Amazon was like, yeah, you know all those Kindles that are more than a few years old that work just fine?
Well, the next time you factory reset them, we're just going to fucking brick them.
Fuck yourself.
01:28:01groutnotout not an awful lot for me
Merge stories.
groutnotout ohoh i get it wrong mb
Speaking of stacked PRs, if I was farther ahead, this would be improved.
That's just how it's going to have to be.
...20MB? Megabyte? MacBook?
...37theyagich my bad
oh my bad man you use and your slangs i've got a couple nieces and nephews and misusing gen z slang in front of them is the funniest thing until they make it to like
13 or 14 it never occurs to them that i'm using it wrong on purpose and so i get to watch them cringe in horror at like do i explain it do i want to explain it well then he's just going to use it more and then around like 13 14 they figure out like oh he's doing this on purpose just to be difficult but yeah i think it is part of a good being a good uncle
groutnotout I should wrap my acronym behind backtick then
hassle them just a little bit you know with the little ones when they're like very young you can ask like how old are you and they'll be like i'm five and you can say oh that's funny me i'm i'm five as well and around like four or five they'll figure out that you are fibbing and they'll say no you're not which is you know good hassling you say oh yeah really i'm 500.
ChaelCodes <3
I think part of the reason
being a good uncle is saying absolute nonsense with a straight face because kids have to learn that adults say all kinds of nonsense so what i'm saying is it's basically therapeutic for me to troll my nieces and nephews and i mean some people would say that's heroic i don't i don't like to say that because i'm modest
But some people, you know, the Nobel Prize Committee specifically have said that that's heroic.
01:31:04in_security Open source firmware for the xteink: https://github.com/crosspoint-r…
Ah, insecurity, thank you.
in_security It's only 79
Yeah, that is almost certainly exactly what I am referring to, but I'm not clicking on that link because I don't want to spend $80 right now.
So tempting.
...26What a bargain.
...52Was anything actually a blocker here?
01:32:35vortism1 i have a question
Hey, FortSim.
Fire away.
I'm just getting to the end of this PR, so this is the perfect time to type a question.
...58vortism1 do you know what grpc is
Yeah, I know gRPC.
vortism1 can you introduce it to me
I...
It has been years since I've used it, so I don't think I could answer a second question about it.
No?
I don't really see how that one relates to the stream.
vortism1 i dont get why its used
I bet there's a Wikipedia page for it.
I've had some luck with Claude for these kinds of questions of what is it and why don't you just use...
Oh, what are its alternatives?
groutnotout veterans, about eink things
groutnotout This one is neat
Probably Rest or... Oh, what's the old one?
01:33:49groutnotout https://github.com/Szybet/Yatch…
dlamz soap baby
Not Wisdol.
Soap.
And Calm.
Yeah, DLAMS, you got it right there.
I was looking down because I was trying to remember.
But that exact kind of thing.
Aska...
vortism1 is this used commonly?
s claude the difference between soap and grpc and where they fit in the modern ecosystem grout not out yachi here is that's boy is that a neat little gadget i have a friend who wanted to make his own
watch so that is that is going right into my browser tabs to send to a buddy thank you i gotta get up for a second and throw the snake again sir
01:35:08So now the stream is going to get interrupted every 90 seconds as he fetches the snake and wants me to throw it again. I'm a hard life. Fix pagination. Well, it is smart to not try and clean up the pagination in general. That's been a famous bit of tar pit on the site.
...47scenes have to go past the end of all comments this was page 32 387 yeah all right let's take a look at this one oh wait let's let's get this in the notes for the archive let's type into the right window
01:36:23Oh, there's the snake coming back.
One second.
Oh, big hunter.
Big hunter, baby.
Are we ready?
Are we ready?
groutnotout is this commit messages that I just saw
Wow.
Yo, check.
Pounce.
01:37:12groutnotout or something else, that looks so long
all right that was a long one because sometimes the big boy wants to play but he forgets that the game is called fetch not throw and so i throw it and he just looks at me like okay and i'm like no you have to you have to go fetch it the game is not watch me throw it the game is you fetch it
...50Can I reload and get that back?
The way they present that there is the end of a function and the start of a function is this little
inline thing here and i always want it to be out at the indent of the function because i don't catch my eye on it all right comment query sure yeah this is one of those like
This is why you shouldn't do limit offset pagination kind of bugs.
It is fixed responsibly.
Yeah, this is great.
I'll kick off the build for this, but it shouldn't be able to break anything.
I'm OK that it's not tested because I want to throw this pagination code away anyways.
Let's get that running.
GitHub?
GitHub, where's my build?
groutnotout lol
GitHub.
All right, well, there we go.
Here is this stream's UI bug.
Aren't these guys, just as I'm saying, aren't these supposed to be animated?
It ticks in.
in_security https://www.githubstatus.com/ incident with codepages but gha seems fine?
theyagich i think you're a github whisperer
groutnotout react ftw
I don't know if they're just busy and so this is slow, but it is so easy to get this kind of jank in single page apps where
theyagich can you tell it to auto-merge all my PRs
You assume the UI is going to change instantly.
And then probably someone came along and added a network fetch in the middle, and now you just get this jank.
Diagach, have you contributed to lobsters?
theyagich no, i haven't
and i don't recognize your username if so i'm i'm doubly sorry about pronouncing it wrong earlier or are you just saying your prs to other projects because i am not in case you haven't noticed i am not the king of github yeah actually being ceo of github that would be
groutnotout backseat coding
That would be a rough job sitting here and griping about single page APP stuff like that's fun actually having to fix all of that that's not fun managing the people who fix that would be the worst.
Make good choices Sir.
where's your snake you didn't bring it back.
01:41:04dlamz did you see the projected GitHub traffic tweet? 1b commits in 2025, on track for 14+ in 2026
theyagich it's time we went back and rewrote github as a multi page rails app
dlamz makes me less mad at them tbh. even though the SPA stuff is awful
rejected github traffic oh yeah yeah i saw something like that that was that was wild and i've i've played with claude and so i have seen stuff like it requesting files for a repo one by one by hitting raw.github user content.com instead of
Hey, let me just clone the repo.
Let me just take a shallow clone of the repo at the specific commit I care about.
And instead, it just hammers the shit out of GitHub.
So I totally understand why they've been having outage issues, let alone how much more lines of code is getting posted up to them.
01:42:33in_security All of this happened in the middle of a migration to Azure too so it probably wasn't the best time for their load to 10x+
groutnotout I git clone depth=1 90% of the time..
Kit clone depth equals one.
Is that one history depth?
groutnotout yeah it is
I don't remember the argument.
Yeah.
graefchen But you are probably not an LLM-something. Whatever that is. limesO
Insecurity, yeah.
They really picked that corporate priority and then got overwhelmed by events.
This is why you shouldn't have priorities or want things, right?
Okay.
01:43:09I mean, grave Chen, you joke about are we calling it an LLM coding tool vibe coding agent, right? Just like what 15 minutes ago, I was griping about how it's called a pull request instead of a merge request. And that's been more than 20 years at this point.
...38groutnotout mr pr is a matter of acronym
slipped in under the wire because nobody could understand how Git worked.
...56All right. All these great bug fixes.
01:44:05Can't edit own comment in newest comments. OK.
...30I got to refresh myself on these two bugs. let's get this in here though actually that is not newest newest is stories this is slash comments is the newest stories newest comments editing a comment don't replace the whole comment container but only the container of the text comment
01:45:28graefchen I am happy that I know for what a LLM is designed and what it probably can and can not do ... but I have hoenstly no clue about what these tools *actually* are. limesO
groutnotout erb look like jinja no?
They're the future, Gravechen.
Aren't you ready for the future?
You're going to get left behind.
I can't even say it.
yeah yeah Jinja and ERB look a lot alike and they have a lot of the same faults that they are string templating so yeah editing comment orphans the reply
01:46:11I remember this.
...44So we're editing. Okay.
...59No, there's no way removing this class doesn't break something. Right?
01:47:20Oh, but this is comment box.
groutnotout lots of class name changed
So this is the one for the editing form, not the display.
groutnotout are they being purged
Oh, this actually does fix a bunch of stuff.
Yeah.
So what FedEmp has caught here is that we had semantic classes for the
display of an individual comment, and then also semantically for the form of writing a reply in this context.
And those are both comments, but applying the same JavaScript to them does not work as nicely as applying the same CSS to them.
So I worry that this might, like I'm surprised I don't see a CSS fix that says .comment.commentform container added here.
01:48:34Come on.
...41graefchen I have a very strong distain against people saying that LLM's have an ability, that they 100% do not have. But I also assume that everything an LLM produves is randomly generated and plausible sounding code/sentences that *might* be accurate, but in that regard they *should* not be trusted. limesSit
It's the OL.
The OL is, this is an old quirk.
groutnotout ohhh
groutnotout lots of selector
JCS tended to tag on element types like a kind of Hungarian notation prefix.
01:49:10Yeah.
...16pushcx https://github.com/lobsters/lob…
grout not out you saw that this is in case you haven't seen it the whole code base is open source if you want to browse around heck there are lots of bugs if you would like to learn your way around by coding i add more bugs every day okay
...4819 out of 76 out of 76 boy it's almost as if comments are important to the site that we should have 76 hits on it yeah so subtree so this one this is narrowly averting a bug because this one almost certainly should be li.comment and it's just because yeah if you were to reply to yourself
01:50:33It's funny, earlier this stream I merged a thing so you shouldn't see the flagger on your own comments. So I just patched that bug a minute ago, an hour ago. Yeah, now we have a div for comment text.
...54Subtree. And now here's comment form container because it gets quite different styling. yeah looking at the form look at the border that indent is too big but it's not something i want to touch right now then we're back into now the mobile layout okay i get it yeah and then the print okay that's a safe edit boy did that really look like it was dangerous but no
01:52:28chinmay22222 how do you still have the compact tabs
graefchen Seeing the old way to di css gets me a little bit into the itch to write that in a more modern style. I like css very much. limesSit Helped also the person taht posted on Lobster about their "weird" CSS issue. limesSit
groutnotout ....
chinmay22222 yeah
chinmay22222 i c
how do i still have compact tabs chin may is that up here at the top of the browser i don't know i have an old profile maybe i have a user script i didn't know i was supposed to be forced into non-compact tabs i use a
A vertical tab plugin over in my main profile and then this is just for twitch so.
01:53:08place comment text right that's.
...19How does that. oh so that was it was doing the exact same thing but now yeah okay this is actually a lot safer than i feared it was i thought that he was going to be parsing the response because the server was sending back the whole comment but no it's only been sending the comment text this time
01:54:00groutnotout do we have a safe way to visual check those? or just normal CI to check output
so most of do i have white space ignoring off is that what's happened here is that why i'm seeing such a big diff yes okay this is actually a pretty minor change it just removed a layer of indent
...34The safe way to visually check things is I would just pull the branch locally and load it in my dev server and look at it.
The reason I'm not doing it is
groutnotout oh ok
I have been staring at this CSS and HTML and JavaScript, especially for this object, for 10 years.
groutnotout holy
So I know it very well.
And then also FedAmp honestly probably knows the front end and this kind of JS a little bit better than I do at this point because he's been remodeling it extensively over the last six months.
So I have really high trust that he's not going to break stuff.
So yeah, I'm just playing computer in my head.
And there is the chance that I merge something that breaks.
Actually, the comment flagging has been broken for a minute.
That's been the thing I feel worst about leaving the last couple of weeks.
But yeah, it's what gives me confidence that this is going to work.
groutnotout oh at first I thought it is something else preventing you do that
I've read all this code 10 million times, and then I know Federico...
groutnotout lol
knows it very well and is thorough because he's built up a lot of trust with edits over time no no not at all we're doing the that matrix scene you know when neo asks cypher do you always look at it encoded it's just like no you get used to it
01:56:15All I see is comment, input form, submit button. I guess that makes me the bad guy. This is great.
01:59:00Wait, here we go. This is great. I get to make a dumb little reference that's only going to make sense to stream viewers. We're the matrix.
...58rebecaaras there is even some funny issues from fedemp, he's been trying all kinds of things to see if the front end breaks. it's fun
Yeah, yeah.
Actually, FedAmp...
has been a wonderful contributor.
It's not just these fixes.
in_security Is the system user new in the codebase?
He's been finding so much little UI jank.
02:00:19Is the system user new in the code base?
Yeah, just the last couple of months, maybe two or three months old.
and it fixes up a special case that was in the code base around private messages.
And when I replicated that into the, so Chao added a mod mail system and I've been slowly moving more and more stuff into it because it's so dang useful.
And this concept of getting a message from the system like,
users edited your tags on your story that doesn't come from an individual user it comes from the system or you get an automated message because you tripped one of the guard rails well that comes from the system and if there wasn't a system user all of the code had to special case messages or mod mail messages from the system user and we were using null as in the database as the sentinel value for that right so there's
all of those kinds of issues on top of the active record gem is, and Rails itself is not great at the null object pattern, which is frustrating given how often it wants to introduce nulls.
So the system user is me trying to reduce special cases.
And if you look in the, where is it?
pushcx https://lobste.rs/s/7fhahl/48_h…
search i just mentioned it on the site like three days ago so maybe you are reacting to this thread because i don't think i saw it flash by here but there was a meta post about having 20 000 user accounts registered and i left a longish comment that mentioned the system user there for anybody who didn't see it
So yeah, that's me trying to fix stuff.
At some point, I should probably flag that those users are not really users, that they are system accounts.
Right now, they just have a bio that says, I'm a system account.
Anybody could write that bio.
It would not be great if someone did that.
in_security Well at least I can't change my username to System
We're still small enough that people know they would get noticed and yeeted with emphatic vigorousness.
So it doesn't happen, but
Once again, like so, so many things on the site.
No, we have a literal username system.
That's why you can't.
There is also a couple of special cases of usernames you are not allowed to use.
I don't remember if system was in there before I added the system user.
Did it go over here?
No, I went over it.
It's still in the user model.
in_security https://github.com/lobsters/lob…
What's one support?
No, admin.
It's over in the username.
I knew I pulled it out of the model.
Thank you.
Yes.
That is exactly the code I was looking for.
Thank you.
02:04:42in_security Haha I was wondering to myself if lobsters ever got a security review and started looking at this and hadn't seen your comment about the system user.
theyagich hmm i should probably steal that banned usernames list for my project
I'm still mispronouncing it.
What you should do is take that list and search it to find a better, larger list, because I know it's incomplete.
I just don't remember the things I've seen missing off the top of my head.
But then you could also say thanks by PR-ing back some more names into that list.
As for whether Lobster's has gotten a security review, I know folks have run, so we've got stuff like Breakman set up to try and catch obvious issues.
groutnotout for mature working adult maybe... for general services may nsfw filtering
i take security reports seriously we don't have any kind of bug bounty program because we're not a business but i do try and make sure that folks get credit for it because that's that's the currency i have to pay him and so if you do find a security code base please
Please check in a dev instance.
It's easier than ever to run it in the container or in the dev container because of Chael's work.
See, I'm bringing it back.
If you test for security vulnerabilities against prod and I notice you in the logs, you will probably just get banned as someone trying to exploit the site.
So please don't do that.
But, you know, people have tried a couple of different ways
things I have gotten reports that look like somebody's running, checks.
But I don't think anybody has ever said, like, I do security reviews as a consulting service.
Can I do a, I'm going to do one of those on the Lobster's code base so that I have a case study, like that kind of thing.
I would love to collaborate on that.
That would be useful.
We've done one for performance testing and other kind of stuff.
And the code base has been reused for performance testing of Ruby itself.
groutnotout such feat
I'm just kind of guessing from your username and your question that you're interested in security.
So that's why I'm going on a minute.
02:07:35question mark because i'm talking and writing at this time so i'm using this adverbially
02:08:19Just the one commit, yeah. If that's still on rebase and merge, I almost certainly rebased multiple commits that I meant to squash. Oh well. It's only Git. You can't fix history.
...43Use anchor positioning so it won't overflow outside of the viewport.
...56groutnotout pretty ok no
anchor positioning there's no way there's no way that that is widely available baseline 2026 that's a couple of times so what i'm caught up on here is
I actually just, I put it in the readme a little while ago.
Let's pull up the readme.
Yeah, we have users that are unusually likely to use old experimental and even homemade browsers.
So we only use CSS in the widely available baseline.
And it caught my eye because I think I've had this conversation with Federico maybe twice now.
Yeah, homemade browsers.
I had someone...
give me a bug report where they were like, the layout on this specific page is wrong in my browser.
And I was like, oh, what's your browser?
You know, thinking I'm going to hear like Safari on an Apple Newton or something.
And he says, no, it's my browser.
I'm writing it.
groutnotout it's shaking my head
And I was like, that's, I love you, but that's a you problem.
I'm going to assume that that's you in your CSS layout engine, not lobsters.
And we have so many of them that that's why I set this widely available baseline standard.
We do make an exception for has because it's so useful.
And I don't try to make that more principled than just, boy, is has so useful for so many things.
theyagich haha yep, im also widely available + :has
It's not quite widely available yet.
But it's it's close right baseline 2023 yeah so anytime in the next couple of months colon has is going to become widely available.
02:11:22groutnotout noooo
Sir, we are talking about CSS standards, you cannot nip my fingers, while we are talking about.
in_security It'd be cool if caniuse had servo and ladybird
widely available out sir sir make better choices oh god sir why don't you go by webkit team they're the ones who have these bugs and i tease but like i can't tell you the number of times i pulled up can i use and it's it's mobile safari servo and ladybird
yeah all of that data is it okay yeah it's if you go to ah here's the link notice i'm tabbing it's almost as if my mouse is inaccessible by someone with teeth you you sir i know you are playing i know you are playing but like when you are playing still my finger should not go in your mouth
there is a page here somewhere about the baselines and they talk about how they set that where is it it's in this
02:13:06yeah this is the duck right so this one was interesting is they this is a total practicality move but they picked these seven browsers as their core browser set rather than create a
If a browser has X percent of usage based on as measured by some site.
And and I totally understand why they did this, because like tracking these web features across browsers is already an enormous project that must take a huge amount of work.
Adding a second layer of like.
let's figure out when a browser is popular enough that we want to add to our workload like that's legitimately a project in its own right just to make that decision so i can see wanting more browser engines on there but like realistically it's
theyagich @in_security i dont know if ladybird publishes what they support anywhere
I would bet to get a browser engine added to this, you have to show up very plausibly saying, me and my 20 friends will do all of the work of adding it and keeping it up to date.
And I don't know how you say that in a plausible way beyond maybe like,
theyagich i think its currently all just code-as-docs, but i could be wrong
dlamz it's really cool seeing ladybird come together
maintain a fork where you do that for six months or a year, which is, it is very unglamorous, but that's also why can I use is so incredibly valuable is they're doing a lot of very unglamorous work.
02:15:13in_security Yeah it's a pragmatic choice but it would be cool to track how the alternative engines are progressing
yeah for a while if you dig back on lobsters they used the lobsters home page as a rendering test that was kind of fun they were like it was i don't think it was an especially important milestone but it was a like milestone to work towards of what are the features on this page and that was watching them use our home page that way was part of what
informed my decision to explicitly adopt the widely available baseline standard because i was like oh there really are just so many nerds using odd browsers and that's that's just odd in the sense of it's not one of those big seven on the list right we have a unusually high percentage of unusually unpopular browsers and
as much as I would love things like the Popover API, which would fix several of these things.
And I'm bringing it back to this PR because Federico has made a couple of PRs trying to fix the unnecessarily clever things that the caches, the flag, and the other dropdown use.
is it caches flags maybe i'm just thinking of comment flagging as the other one and the popover api is perfect for it and too new and if we do it i know like number one we fix a whole set of bugs around those little pop-ups that have generated so many bugs over the years for us
But then also we just immediately break for every niche browser for three or four years and that's really core site functionality that's broken, and so I just can't bring myself to do it.
02:17:17theyagich omg popover is only baseline 2025?!
Oh and here's a mention I know I broke the site at least once when using popovers but this time it's different.
it's yeah yeah popover is very new and the css folks have been doing incredible work the last couple years i don't know what got them to change gears but like three or four years ago they were like you know those patterns that we see on every dang site on the web
What if they were part of CSS instead of everybody independently reinventing them with JavaScript and working in slightly different ways?
And it's been a wonderful time of plenty as a web developer these last couple of years using CSS.
It is just banger after banger, right?
As the youth say, you've got to yeet the bangers.
graefchen I think it was mostly because web devs realised that some things you can do with JS are more or less better do in CSS. limesLurk
I think that's how that one goes.
theyagich i dont like that they want css carousels though :D
It's been tremendously rewarding to use, and it is so hard not to use all of these new features the instant they come out.
graefchen *done
Grave Chen, that's fair, but they really do fix so many things.
Carousels, ah, carousels can go straight to hell.
Maybe there'll be a Firefox flag to turn off CSS carousels so I never have to see another carousel.
Every carousel is a corporate committee that could not bear to make a decision about what the hero image on their page was going to be.
02:19:17graefchen At least that is the impression I got from an Dylan Beattie talk. limesLurk
Only theirs that drop down will flip its side before overflowing.
...37groutnotout tab tab guy
groutnotout this style of navigation is so me somehow
oh that looks so nice that's yeah federico has been doing a whole bunch of work if you look at his earliest pull requests to the site he started doing front end
and fixes that were very accessibility related.
So he added a bunch of ARIA attributes and fixed tab index problems.
Jamamp_ and we love a11y fixes loadWow
And I love, because we are a text heavy site, especially because we use very little JavaScript, we should have excellent accessibility, especially to people who have reduced visibility.
Because we're all text, your screen reader
should be able to use the site and all of its features powerfully.
And I really appreciate that FedEmp has put more attention into that because it had been a couple of years since someone really did, and we started to regress on some of that stuff.
Actually, maybe his first thing was really core site UI.
These upvote arrows used to be filled in
groutnotout red/green no?
groutnotout ok maybe not that one
with light gray and if you had one of the color blindnesses and i can't remember the names not deuteroptia but like the second most common one they people with that could not see the contrast between the gray and the red and so it wasn't clear whether or not you had upvoted a story before because they looked identical
I didn't think it was.
Let's dig back on the issues.
It's in here.
It doesn't have to be open.
pushcx https://github.com/lobsters/lob…
Was it color?
What was it called?
This one.
This is the one I'm thinking of.
And was it Federico that fixed this?
02:21:58Yeah, so I did a hot fix on it.
Vec.
No, Vec fixed this one.
Okay.
I was thinking it's Federico because this was just right in time.
I want to say Federico showed up right around this time, within a month or so, and also started picking up a bunch of accessibility improvements.
And this, like, I'm really reluctant to change core UI.
groutnotout it's a thoughtful change...
like upvoting like where is the button that you click to say reply but this one was yeah no this is just that's not acceptable that's not usable yeah especially with the the noise of scrolling -that doesn't cut the mustard so i really have appreciated that
Federico has made so many accessibility things.
That's kind of a long tangent on why he's tabbing along here, but that's probably it.
It also makes it very easy to see which control he's using.
02:23:23theyagich man css anchors would be so nice
theyagich cant wait to use them in like 3 years
yeah they would be but they're so young yeah that's i was just whining about that i i know as a middle-aged guy i'm supposed to be like oh time is passing by too fast and i feel my mortality approaching but sometimes i'm like man can i jump in the cryopod for three years so i can use these nice css features
...57rebecaaras lol
Rip fan, winkle, rip fan, can I use?
Feels like there's something in there.
Rip can I ankle?
Nah, that's turning into a tinkle joke.
Nah, it's not there.
So we name an anchor.
Yeah, all this is.
groutnotout it's like C++ standard for my field
Position, position, absolute.
Oh, there's no way that doesn't break in something, because this anchor name.
Yeah, so he's added a position to the parent element.
Okay, well, no, that wouldn't break, no.
So position absolute, for anybody who is unfamiliar, kind of pins something in place
but in its stacking context.
So it is in the context of either the document, which is when it's fucking obnoxious, or it's in the context of whichever nearest parent element sets up a stacking context.
So that's what he's doing there.
I just kind of skimmed over it.
Position area.
Yeah, this...
theyagich the relative > absolute and absolute > relative relationship always bricks my brain a little
This is so much nicer than doing this in JavaScript it's it's just very clearly declarative instead of.
I have to run a JavaScript function in my head to understand where something is going to get laid out.
yeah.
02:26:09theyagich 100% agree, im SO glad we got css as a declarative language which is surprising given that it came at the golden age of OOP
I want to, I got to write a linter for these because like anchor positioning is famous enough that I immediately recognize that it's not widely available.
There's got to be a way for linting for these.
Like all of the data is here in this repo.
...47features, right? Oh yeah, here we go.
...57LmnAnchorPositioning.yaml. It's dist. Generated from .yaml. Okay, why do you have... If I'm a consumer, don't care about this warming so maybe this just has more info yeah baseline low and then yeah here's the name of all those properties we just saw max height max height is Not one of those. All right, so clearly there is a data model here. And I should learn what it is instead of just randomly skimming.
02:27:58Maybe it's just saying it touches those things. And then here's the name of the properties that it introduces, because this does not include that max height. I could parse this.
02:28:20I'm sure a linter already exists, but as long as I was looking at readme, I've been trying to write down the really weird quirks that the site has.
The other one is we do not want JavaScript in our build chain.
I am so burned out on JavaScript and the build chain that I am certain someone has written, like, a take this data and lint a CSS file.
But that's going to be JavaScript, isn't it?
But I could do this in Ruby.
groutnotout kkkk
Ruby loves YAML to a fault.
And then parse the CSS.
02:29:04Wait a minute. There's a gem for that, isn't there? Ruby dash toolbox.
...17CSS. There's one. Crass. That's what I'm thinking of. Yeah. There is a CSS parser. This kind of popularity, Rails depends on it.
...39Can I see the reverse dependencies of who builds on it? It's got to be Rails. You don't have a chart like that without one of you. Which one of you do you think?
02:30:05action pack why am i doing this aha it's already in loofah what is loofah rails html So who is using this? Something called loofah that I don't recognize.
...45OK, what are we using this for? Who uses this?
02:31:05All right, it is a transitive dependency of a transitive dependency. Rails HTML sanitizer. That one we use on purpose. Okay. No, action pack depends on it. Yeah, all right, I went the right direction. I just didn't dig far enough. so action pack into html sanitizer into loofah into crash so it's in there that's why it's so this is all a rabbit hole but anytime you see a chart like this on ruby toolbox you know rails depends on it and some of these are like flat flat flat and then like huge jump and that's a like oh rails started depending on it six years ago Anytime you see millions of downloads.
02:32:13So I could catch this.
There's all these properties.
Hmm.
ChaelCodes good to know
Yeah, I've only got about a half an hour left on this stream.
dlamz btw push do you have like p95 metrics or something for response times? the site has felt super sluggish for me recently
Oh, actually, no.
I started a minute late.
I really only have...
A few minutes left.
...35pushcx https://github.com/lobsters/lob…
D lambs you're feeling that because the site has been super sluggish for you lately.
We.
don't track.
Performance analytics I have thought about it and.
what's the.
All right, so I've been using Telebugs here for, it might be coming up on a year, at least six months.
Oh, okay.
And it's a nice Rails app that's like pay once for a self-hostable bug tracker, which is great.
That's a little more compatible with my budget than like 20 bucks a month forever.
Is there a... Oh, don't talk.
No, this is setup.
Why would you put setup on the...
I told him to not put setup on the homepage.
There we go.
There's an example of what the dashboard looks like.
dlamz yeah seems similar to sentry
Where it's, you know, all the kind of basic stuff you would expect where... Like, oh...
There was a no method error.
Gosh, it's almost as if Ruby has a problem with nil.
groutnotout cam jumpscare
Yeah, it's self-hosted sentry.
pushcx https://telebugs.com/ https://telesink.com/
But he started working on TeleSync, which I think is more events than analytics, but it gets a lot of that kind of stuff.
So we'll see where this one goes.
Is there a... Oh, here we go.
Yeah.
Whoa.
Okay, something clever happening with the back button.
That was not what I expected.
Okay, so this is just jobs.
dlamz it's ruby level though right? like if the lag was between nginx and ruby it might not detect it?
Oh, that's cute.
So he's doing an arbitrary event tracker.
All right, no, I'm misremembering.
Well, in any case, free publicity for this, because I like his stuff.
We've replaced nginx with caddy, but we would be able to see in the caddy log of hits, it logs the duration, and we could also match up that request against the Rails action log and subtract out
How long rails thought that took.
But realistically, I would not expect any gap there.
Because we don't have any custom code.
I wouldn't expect a performance problem where we haven't written code.
Yeah.
02:35:50So the last few months we have been getting slammed by scrapers that are overwhelming our caching and that was put that on my list. So,
02:36:17groutnotout im in SEA region.... nothing slow for me.
I was looking at the server logs the other day because I posted a comment and I was like, boy, that took a long ass time to post.
And I logged into the server and the load was 11.
It's a four core machine, so our load on a typical weekday is like 1.4, 1.5.
11 is a little high.
...44And whatever the heck that irritating bot was that was just slamming the shit out of us was it went away by the time I could really start analyzing it. And then I had something going on, so I was just like well I don't spend another half an hour digging back through the logs the bot finished its run the bots an asshole but at least it's done and gone. So. I did play around for a second and I saw something that catty to serve that implied that they had a funny extension. When I looked in the cache, they had like two dots. So I think I think something we touched there means RSS and JSON, which bots do hit pretty aggressively, are not getting reused, which would not help these slow page loads. But it's definitely not you. We have had recurring performance issues the last... That got filed in December, but it's been more like six months. We have our full page caching, and that's the only reason that we are able to run without a CDN in front of the site, like most Rails apps do.
02:38:21We're reaching the limits of that.
Pop traffic has stepped up so much.
The biggest pain, this is very silly,
The biggest pain is these relative timestamps.
So this thing, six hours ago, hold on, let's reload, let's go to slash next.
So where's, here we go.
Ooh, 25 comments in six hours.
This might be a little spicy, but these timestamps like 57 minutes ago,
mean that we can only cache this page for 60 seconds at a time right and i still have it on on deck here we use as little js as possible and we don't serve javascript to logged out visitors
These relative timestamps mean that we can only cache full pages for a minute or so.
And the cache is actually at three minutes right now because we've been dealing with so much struggle.
dlamz hmm, maybe some noscript + time tag stuff?
I was okay with them being wrong an average of 30 seconds.
I've been pushed into accepting that they are wrong an average of a minute and a half, right?
Yeah, no script and time tag.
I don't know where no script goes though.
So if we put in
the UTC time tag and a one liner of JavaScript to automatically calculate those once on page load, our story caches, instead of being recreated once a minute, could be recreated once a comment.
And like this story has an unusual number of comments for its youth, but that's 360 minutes
25 comments it is an order of magnitude better and the real case here is all of these stories that are hours old and have two or three comments which is more typical yeah yeah we could cache this story this page for literally 60 times as long or
You know infinite times as long, instead of every one minute, it would be 360 minutes like at that point you're not talking about where two or three X better it's a we're fundamentally different.
But it means.
kind of breaking stuff.
02:41:18And even if we make an exception that's like well we'll serve one line of javascript.
groutnotout lol
it's the camel's nose in the tent right if you give a mouse a cookie you have to give a mouse a cookie banner and i'm just reluctant to do it especially because they're
These break then for everybody who doesn't have JavaScript, which is not a trivial number of visitors to the site.
A lot of folks are especially conscious about privacy and security.
And so do not run JavaScript at all or whitelist individually per site.
And so then they're going to start seeing timestamps instead of these nice relative offsets.
02:42:23dlamz yeah :-/
So we're kind of in a box of these dueling constraints.
And I'm not joking that this one, these relative timestamps on stories and comments, they're why we have to cash bust all the time.
That's why we cash bust on a clock instead of in a background job.
And so like a lot of the other stuff we've done for perf
You know, like mentally, I have a, how bad is the perf cost?
Like how much win is a vote?
How much delay is there times how popular is it?
And this one is all of the pages on our site times 100 milliseconds to render a page.
At some point, like,
It's been hanging out as the best performance improvement for quite a while, and so I'm getting more and more tempted.
Because it's like, instead of taking that big win, I have to keep taking the smaller wins.
And I don't know which of these to compromise on.
I don't want to compromise on anything.
I'm a programmer.
I'm a weird absolutist about these things.
02:44:00dlamz hah
Maybe CSS will include a relative time spec for the time element.
And in four years, I can fix this.
Oh, I would absolutely make an exception for that one.
It's not colon has, but oh, man.
They're not working on it, are they?
...29Yeah, here's somebody's little project to do it. 2014.
...50It's only in the comments.
We'll get there.
When CSS solves this, I will be right there.
Three and a half years behind them.
No, I'm kidding.
I would be like three and a half minutes behind them.
The pain is like I'm being silly, but they're not going to do it because of localization.
This is English and CSS is global.
groutnotout sound plausible
And everybody's going to want to break these out a little bit differently.
So we count.
just now and then two minutes and then we count minutes up to hours, hours up to days, but like other sites are gonna wanna slice that differently and the matrix of how is this timestamp, this relative timestamp to be divided and then also time zones and then also localization is
02:46:01I mean once you get to that three dimensional matrix I don't know that CSS syntax has a nice way of handling that, let alone.
How much baggage that pulls in like someone's going to be like well.
Do we want to say 57 minutes ago.
If we just did one of the daylight savings times adjustments.
Do we want to say an hour 57 minutes ago?
Or do we want to say negative three minutes ago?
And then you're in hell.
That's why time should be illegal.
Not time zones.
A lot of people are like, let's just use one time zones.
dlamz reminds me of old forums where you configured your time zone
Those people are cowards.
They are only solving half the problem.
We need to outlaw time itself.
...58yeah well a lobster's easter egg is that you can have any time zone you want as long as it's chicago time oh oh there's a little
02:47:48It's not lost on me that Federico is slowly subsuming the JavaScript into TypeScript. He keeps catching bugs.
02:48:04Event target instance of HTML element. Oh, data set, that was the data that came up earlier. And data set key is not empty.
...22How did this break?
...47There's the flagger flagger stub.
02:49:03So it grabs the story flags out of the HTML, right? Then it makes the dropdown.
...20Dataset key.
...28Oh.
02:50:07Oh, so we just had one element named data rather than use the data set API properly. And Federico fixed that, but he didn't know there was this other bit of code that depended on it being wrong. And coupling. OK, I understand this fix now.
...41On the other side, the reason is not appended to the flag button. Reason is not appended to the flag button. Is that the text?
02:52:13That was another SPA bug there. GitHub, since there's only one commit, should have pre-filled with the commit message. It shouldn't have asked me to write a new one from scratch.
...43let's let's just grab my apology for here so oh i meant to say close let's fetch and oh i didn't remember to put up the
last call but we're kind of in the home stretch here of i'm going to get this deployed and then wind down the stream so if you have any last office hours questions well type quick because i'm going to run lobsters deploy and that should only take well i touched the gem file i think so i think it's going to take 35 seconds instead of 25 but not so bad
ChaelCodes Thank you for the stream! It was nice to see you back!
theyagich thanks for the stream!
yeah so it's been good getting back to the lobsters office hour stream oh there's an important thing i'm not gonna stream monday afternoons and thursday mornings i'm gonna stream tuesday afternoon and thursday morning i have some commitments on my schedule that are pushing stuff around and i didn't want to push the thursday morning stream to friday morning because then it
groutnotout schedule ok
hit some other stuff especially in the summer i like to get out of the city on the weekends or i go out to visit folks i know in the burbs and stay overnight and so it's harder to do a friday stream yeah no here we're getting up to 35. so yeah i should update the stream schedule man a lot of post stream stuff you can tell it's been a minute
02:54:48groutnotout that's new
All right, let's, you know, comment flagging is important.
groutnotout to me that we have /stream
We've had plenty more comments lately that should have been flagged.
So let's test.
Okay, yeah.
Comment, oh wait, let's actually do this with the console open.
Sorry, I'm doing this off screen because...
Mod UI includes a bunch of personal stuff.
So if I reload, yes.
And then I can unflag, and it's fine.
Did I see the score change?
02:55:30Reload.
...36pushcx https://push.cx/stream
If a bot shows up and starts making the site stall right now, I'm going to cry.
Oh, no, it's not slash stream.
It's push.cx slash stream.
I just knew it for myself.
Well, there's no JS error, but it looks like the flag didn't actually save.
All right, I've got to take a break, get some lunch, move around, Band-Aid my fingers from the cat.
Yeah, so I'm not going to keep streaming that, but like.
That's got to be highest priorities.
02:56:23Which.
...31All right.
in_security <3
groutnotout you 2
so there we have it thanks for hanging out folks i missed you we'll get back to a solid routine here feel free to email me or mod mail me if you have anything until the next stream which will be tuesday afternoon take care