Lobster Roll(ing Release)
Streamed
Celebrating Lobsters’ 13th birthday!
Looking at the stats page showing all-time high comment activity.
A magnificent lobster oil painting that costs $3800 (but a print was $15).
Exploring how vibecoding tag affects comment statistics.
Fixing upvote button color bug for color-blind users with CSS tweaks.
(This got a lot of tweaks the next day or two.)
Reviewing notifications PR.
Why do browsers use the -webkit prefix on text-stroke? It is a mystery to everybody.
scratch
topics
Lobsters is 13 today! https://lobste.rs/s/8we4dn/lucky_13_lobsters
stats of comments without the recent vibecoding tag
lobster painting/print https://lobste.rs/c/wjbnbo
upvote button color bug https://github.com/lobsters/lobsters/issues/1641
css mystery of why -webkit-text-stroke hasn't lost its vendor prefix
maybe?
hatchbox deployment tidying
logrotate :(
test with email rep service
HSTS
hatchbox notes
title
Losbter Roll(ing Release)
post-stream
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
02:56dzwdz hello
dzwdz your avatar is broken on lobste.rs
Welcome to the Lobster's Office Hour stream, which I should probably make visible.
There we go.
marcoroth_ Hello World
Ah, hey, DC.
My avatar is broken.
Yes, that is a... Oh, hey, Marco.
dzwdz just special case it smh
That is a filed issue on github and I don't know how many others are broken, but it is kind of conspicuous that my avatar is broken, especially because i'm about to make an announcement post because who today is lobsters 13th birthday.
site was released on this date in 2012 so I am working on the annual announcement post just special kicks it I.
marcoroth_ Happy Birthday Lobsters!
I think I have so far avoided any, like, if user ID equals push CX in the code base.
I have been tempted.
Webster's 13th birthday stream.
pushcx Welcome to the Lobsters 13th birthday stream! This is also still an office hours stream so ask questions about the site anytime!
Is it also still an office hours stream?
So I'll ask questions about.
I'll try and get this in chat early.
All right.
So yeah, usual intro.
This is Lobsters.
We're a site.
We talk about programming.
This is office hours.
Anybody can drop in to ask questions about the site, the community, the code base, stuff that's happened and plans.
And when folks aren't asking questions, you can walk over my shoulder as I maintain the site.
which I may not do much of today.
So I am working on this blog post that's going to be the announcement blog post, and I'm kind of in the home stretch of it.
So let me grab the last couple of things I need.
So I needed this link.
05:05marcoroth_ btw, on RubyEvents we saw that if you show/request too many GitHub user avatars then GitHub blocks the requests with 429s. Not sure how you use them in lobesters though
because that's the 2024 post.
...16We do not actually use GitHub avatars. We use a service called Gravatar. which is part of the automatic family. There are open issues about shifting to active storage now that that is pretty reliable. I have a branch for it, but we haven't finished it because active storage doesn't really scale down to us where We have one server and want to be able to serve things out of active storage via our web server, which was nginx and is now pretty recently caddy. But active storage is really designed around this idea that you are paying for a storage service like S3 or B2 or one of these others. As opposed to now there's a file system it's a file on the disk let's help you manage a file on the disk, which is what would be perfect for our our size and needs. So.
06:31marcoroth_ oh, I see. I assumed you do because there are so many GitHub avatars
stories.
...51marcoroth_ or auto-generated GitHub-like avatars
You want to go over promise on that one.
Yeah, we.
So Gravatar, it's actually GitHub is copying Gravatar in that style of placeholder.
And.
Yeah, I think two issues open about avatars.
Avatars.
Yeah, so there's mine missing.
pushcx https://github.com/lobsters/lob… https://github.com/lobsters/lob…
Yeah, so there's 986 here about...
It would be nice to load from GitHub because lots of people have their things linked.
And then also it would be nice if we could let people just directly upload them.
So we've thought of a lot of this stuff.
This one was stalled for years before the development of libvips because...
image magic is wonderful software, but it does not have the greatest production security record, unfortunately, because it was never designed with the modern security environment in mind.
They could not have predicted what it would end up getting used for or what the security world would look like.
So there's that.
08:27dzwdz hm, so actually, about that broken avatar
you are comments and stories or favorites i'm going to grab these two from last year's post yeah so if anybody wants to spot a typo in the stuff you can see on screen i wouldn't mind the
pushcx https://github.com/lobsters/lob…
dzwdz do you think you could just remove the file from the cache or something
faitswulff minor typo “at all all-time high”
dzwdz to make it maybe fetch the correct one
extra eyes but otherwise i'm going to put this right into the form in a moment yeah the broken avatar is a different one that's here i was just responding to marco who is starting to recreate the stuff that we already worked out in the other one so i wanted to save him a minute
DZ, that is actually the first thing I tried with my avatar and that did not correct it.
faitswulff I’m assuming that’s supposed to say “at an all-time high”
At an all time high.
dzwdz keep gambling
Commenting is at, ah, thank you.
Yeah, you got it.
Thanks.
twitchtd hello
Alright, so there's did I hit everything I wanted to hit we got the title I went with lucky 13 we talked about it on the last stream that.
I needed a title.
10:03twitchtd happy 13th birthday
Oh hey, I was hoping you would drop in, Thomas.
You are actually, if you see on the screen here, I don't know your username on the site.
You don't strike me as a super private person.
twitchtd sure
We don't have to include it if you don't want it, of course, but I would like to include your site username if you're okay with that.
...30twitchtd thomas0
And...
dzwdz most gamblers quit flushing the cache right before they hit it big
yeah thomas zero okay because i searched a bunch for you and i could not spot an account that looked like you so now off stream i have to go look at your account to figure out like why i couldn't find you so many people have
PudottaPommin eyo, how's day
lot of different variations on their usernames or email addresses or other stuff that all right i should have found this with the search i did i must have just typoed in my search all right well lucky you came by oh yeah cache invalidation totally known as a famous pro sir why are you naked
The cat is not wearing his collar.
Ugh.
Ugh.
This stream is indecent.
The site is only 13, and the cat is naked in front of it.
What is this world coming to?
Alright.
I actually... That is like the first time he's gotten his collar off in... God, five years?
More.
The other cat, she was a little nudist.
She constantly got it off.
But all right, so let's see.
I'd like to invite people.
Interested.
dzwdz the other cat was a little nudist" "she constantly got it off
How did spell checker not check that?
Oh, there we go.
Epic_Ninja_Elephant Happy Lobsters, Birthday!
A lot of these are proper nouns and usernames or jargon.
All right, that's all right.
12:27I am not making the stream title of the other cat was a little nudist.
No, it is a funny thing, but it's going to be something related to the birthday unless I say something actually funny related to the birthday.
So I'm going to grab that and struggle with the Linux clipboard.
And let's actually preview before I post because, you know, reasonable odds I have a typo in the markdown.
Oh, yes, we do need a tag.
Let us use what I think is the most or least used tag on the site.
I guess I should have given the light mode warning.
dzwdz why are the side tabs so cursed
So here we go.
All right, let's give it a skim.
There's something about changing font and all.
13:33with that where's post i actually don't need emails about this one oh yeah and i can see that bug in the mod editing form why are the side tabs so cursed i for what it's worth it is the tree style tabs plugin rather than the new firefox vertical tabs feature
All right, there we go.
So we can grab that and hop over to newest to see it.
Why don't I see it on slash newest?
I just posted two seconds.
Oh, because I'm not logged in on this browser.
So it's cached for 60 seconds.
pushcx https://lobste.rs/s/8we4dn/luck…
All right.
You know, it's not cached.
anything but the front page and the top 30.
So let's share that link here.
Woo, I did the thing.
Oh, big boy, come here.
Cat needs affection.
We will see if he joins the stream.
That would truly make it a magical stream if he chooses to hop up to his perch.
All right, I'm going to...
close out the personal browser good all righty yeah this is great one more one more time around the sun one of the things i said on this oh actually before i do this
Let's put that in there and go hack code in prod, right?
15:32Current.
...38Where are we here?
16:01Here we go.
...07So let's call it the 13. Of course, this gets me every time that it's the opposite of Markdown.
...2913th birthday. Office hours stream is live. There we go. And then I have to.
...47Bounce.
That.
And then this page load might take up to eight or ten seconds, but it won't 502.
All that development work paid off.
There we go.
Look at that, I even got the link right.
Yeah, so deployment.
marcoroth_ I just realized I have no account on lobsters 👀 Can somebody in chat give me an invite?
When I made this list, I went through the contributors list for the last year.
dzwdz and i wasn't included smh smh
Yeah, Marco, we need an email address.
Please don't just paste that in chat because then I have to redact it from the log because nobody needs that kind of spam.
17:39dzwdz with my 0 lines of code
I kind of looked at who had submitted multiple PRs over a while, over the last year, and I made a cutoff of people who hadn't submitted more than one PR
dzwdz \j
PudottaPommin does twitch chat have honorable mention?
or like on more than one topic i don't know it was really hard to draw a line and i worried that i could offend the folks who didn't get listed nice to have an objective standard to make sure that there aren't hurt feelings however unlike you hunter 355 e3b
who does not appear in this log.
What?
No commits, no PRs, but did a ton of our update to deployment with me.
So he is not appearing in this Git log, which is, of course, the classic Monty Python bit.
18:49yeah this so this graph is nice but where's the other one there's going to be a graph heavy stream i guess yes so this one was the striking one where i don't know what honorable mention is our contributor graph over the last
marcoroth_ when did you start streaming?
marcoroth_ maybe related?
PudottaPommin "a commendation given to a candidate in an examination or competition who is not awarded a prize" :D basically, twitch chat did no real work, only backseating
guess i would call it here back to like last july is anomalously wonderful like this kind of big sustained interest is a very new thing for the code base and a very wonderful thing and a very rewarding thing when i think of the time that i've spent on office hour streams
And I do attribute this to doing the office hours because almost everybody who is in this list of regular contributors.
Yeah, actually, I think all of these people have come
the streams, so I am attributing them to the office hours streams.
20:29oh boy so yeah big oh where's my extra there we go big exciting day i'm if you look at the previous years they're kind of these are in the oddest order they're fairly short this one is a lot longer because this
Set of repeat contributors is so unusual and wonderful that I want to make sure they get a lot of public credit for it.
And if those contributors are watching like Thomas who's here, I really hope you are not especially shy of the limelight because kind of the only reward I have for people is attention and public credit and.
twitchtd I don't mind attention :)
No, I don't have to do it so, so this chart is just so wonderful and recording.
i'm so thrilled by it.
pushcx https://lobste.rs/stats
And I don't spend a ton of time on it here i'll share the link just for convenience, but if anybody hasn't seen our slash stats page.
I think there's a lot of interesting stuff in this.
I spend time every couple of months just to kind of check in.
So Lobster's is not a tech startup that took VC money.
We don't need to grow.
We don't need to hypergrow.
We don't need traction.
We don't have to scale.
We don't have to hyperscale.
We can just be a good place.
And
signups have been you know steady invitations have been steady but there is a big trend of user activity and we saw a decline here and because growth isn't super important for us i wasn't too panicked by this decline in active users because it is a normal part of
community lifestyle cycles that they grow and they shrink.
If it was a sudden sharp change in either direction, I would be concerned because a sudden growth or a sudden decline, both of those are bad.
And it's hard to explain if you haven't thought about it or you're used to business startups, sudden growth, how is that bad?
But it's very hard to acculturate people and get them used to community norms.
They have to do it through exposure and just kind of soak it in and see how do people talk here, what's rewarded with attention and good responses and upvotes as opposed to what's rewarded on other community sites that you may be more familiar with.
so the fact that this graph is fairly steady is good like we can survive a little more increase but if we have more active users on fairly steady inflows that means we're retaining people for longer which is also a really good sign of community health yeah with the benefit of hindsight a lot of this chart kind of correlates to covid and i can imagine for that year or two everybody being
busy with other things and other disruptions.
24:14dzwdz i'm actually surprised covid made the graph go down
So stories submitted per month is not at an all-time high, but that's okay.
There's only so much stuff that fits on one page.
Yeah, usually COVID made the graph go up, but I can't really think of anything else special that happened here in
call it mid 2020 where we went flat and then declined in 2021 like the story doesn't quite line up except if we were kind of flat when people got confused or not confused concerned about covet and then in 2021 early 2021 when pretty much the whole world had access to vaccines and could go outside again
yeah go outside you know don't spend your life arguing with someone on the internet right which of course the the 1x kcd i know by number don't be this guy so stories submitted per month has been level for a couple of years that's real nice
But these last two are real interesting.
They are larger versions of the active users per month, basically, where they show bigger swings.
But we are seeing all time highs in the number of comments and the number of votes made on the site.
And this one, this one is the most important graph for how active is the site because
VerteDinde Just entering now, but happy 13th birthday to Lobsters :D Congrats!
Writing a comment takes a significant amount of time where a vote just takes a click or a single tap.
And it's kind of a vote of confidence in the site.
Hey, Verite, welcome.
Thanks.
dzwdz i wonder what would that graph look like if you excluded the vibecoding tag
Where if someone takes the time to write a comment, they believe that it is worth their time and energy to
contribute to the community and you can see a real discontinuity here in the first call it year and a half of the site where right in here in 2014 it was a little bit after the invitation queue so we had an influx of new users and then
this is where lobsters the site became a viable community well the stories graph would go down right you know we could experiment with that give me a second and i'll bring it up i do run queries on the site so the thing about sites that's not obvious is that they have
A critical mass where people realize that other people are reading and that it's worth their time to contribute, and that is to use the youth parlance pure vibes where people look at it and they say oh yeah.
There is enough other people here that if I spend five or 10 minutes writing a comment.
It is not the same as if I just you know.
opened my door and shouted it out my window.
So here on office hour streams, we run queries, which how old is my local?
Oh, let's get you back to current.
Where are we, JJ?
28:24All right, now we're back in a good state. Running JJ and getting the same repo occasionally leads to some oddities. So how old is Peter's database?
...44Two weeks. I think that's close enough. So let's go look at stats. which is here, no. And if I said. So that is 120. So that doesn't change anything here. I'm going to leave the active graph alone and just do the stories graph, I think.
29:44dzwdz i'll note i meant the comments graph
And negations are always a little bit of a hassle, so we can say where
me on there but i gotta do the joins let's see how
dzwdz because that's much more interesting imo
Yeah, and as soon as I'm doing this, I want the Rails console so I can see the SQL.
Oh, you meant the comments graph?
Sure.
All right, so we want to say comment where we want to joins stories and paggings.
And what do I get out of this?
To story.
dzwdz you didn't remove the extra dot in that method fyi
Oh, I guess one becomes.
This.
Yes.
30:45I want to make it do this because it aliases the table. join taggings on stories where tagging's id is not 120 great but then we want to so that's gonna cross join this query the extra dot i guess i got it in an edit faster than i saw your comment
31:35so i want to say i throw a group by in here yeah can i throw it just distinct i know it's sloppy but for one off this is probably fine
32:15dzwdz Story..pluck
so delete that and that and run it all together standard rb you can sort out the style that looks looks good so if i now say stats bill commons graph cache and let's get the local server running so there's well here we can do it in a
By bringing a new window, will this graph resize?
I don't remember the layout on this page.
No.
So if I'm going to just have to toggle between them, I'll just make it a second tab.
33:09Where's my data? We just filled the cache.
...31Why do I get the feeling that I got this query wrong? Comments, interjoined stories. I get anything out of it.
34:05How was that column unknown, and why did it get swallowed? Oh, it's because there's a line break.
...19Yeah, okay. So that part is fine. But it's giving me all the...
...36Okay, so we are seeing multiple values for each date.
dzwdz also why DISTINCT?
This query looks correct.
There are 585,000 rows, which is, well, right off the top is like 5,000 lists.
Because of the join against stories, I didn't want to multiply and have each comment listed for,
each tag on the story.
twitchtd maybe filling cache is silently failing because you have Story..pluck (like @dzwdz said)
So if the story had two tags that were not vibe coding, it would appear twice.
35:27dzwdz wait isn't that inner join wrong
No, it's a different method that I didn't call.
We would have seen an exception for that.
Isn't that inner join wrong?
Yeah, probably.
Let's take a look.
Please.
So we want the comments.
...48dzwdz it will include stories that have other tags besides vibecoding
You know what I can grab instead of doing this by scratch?
Yeah, you're right is and I should just grab this is from the story model.
we can grab the tag filters.
Yeah.
So if I said joins to stories, I need the Rails console again.
dzwdz then you wouldn't need DISTINCT, and it will correctly count comments made in the same second
So I never remember this syntax, but I want to say I can say story dot filter tags and then we can just find the by coding tag.
I think it wants an array.
Did I not?
37:02And I. Yeah, there we go.
So now if I said comment, I said merge this.
PudottaPommin I can't find good answer, so I will ask you - is there way how to tag commit in JJ? CaitThinking
And then I want to explicitly joins two stories.
Story, because that's based on the association.
Yeah, it's called bookmarks in JJ.
PudottaPommin isn't bookmark branch?
So if you run JJ bookmark dash H, you'll get the intro.
Bookmarks map to.
It's I think it's sort of both.
twitchtd bookmarks are like tags
I actually haven't had to tag stuff.
TotalEcl1ps3 looks like django orm! Ruby looks fufun!
twitchtd they don't move automatically when you commit
TotalEcl1ps3 fun!*
So because, you know, lobsters is continuously delivered, not like a versioned product.
So I haven't had to make tags.
Yeah.
gmem_ Lobster Roll(ing Release)
Hey, total eclipse.
Yeah, this is the active record interface.
Very similar.
38:30Lobster's rolling release. Ooh, that's really good, GMen. Hey, did you see that you were highlighted in the announcement post today?
...53Let's see.
gmem_ Ooo, no I didn't! Been really busy at work :D Feels awesome
So if I can say this.
39:09PudottaPommin @twitchtd i will have to have another look at them then
Oh, you know what it is?
It's that the cache is disabled in development mode.
...26TotalEcl1ps3 Can I get an invite!
That's going to be part of it too.
pushcx https://lobste.rs/caht
Total Eclipse, if you look at here, I'll put the link in Twitch.
pushcx https://lobste.rs/chat
TotalEcl1ps3 Cool! Thanks for that!
oh and i'll type it again so i type it right lobsters if you check that out that is the best way to get an invite if you don't already know somebody on the site and someone is posting
dzwdz btw i probably already asked but are your dotfiles up anywhere? i'm curious how you've got fuzzy finding set up
a weird politics story it is actually
A little?
I don't know.
So I'm peeking off stream at... Did they actually make something?
Yeah, all right.
There is a little bit of development info in there.
All right.
Terrible title.
no i have my vim color scheme and i think alacrity config because people are always curious about the font is up and it's linked from the stream page but the rest of my doc files that's one of those things where it's like yep i could spend a dozen hours on that and not really get anything and then i'd have to maintain it so i have avoided that
41:38I think it's dev cache.
...55Dev colon cache. Okay, there we go. All right, so if I turn that on and then start this, and if that is reasonable, should be able to just say, build a common graph cache. Okay, so we see our queries running. No unique index found for name or columns for key hash. What did we do wrong here? We grabbed the created at. Oh, this is 39.
42:44This is something about the caching.
...53Why are you not caching?
43:12You can name.
...52Stats cache monthly graph. No unique index found. This is a very odd exception. I'm not immediately getting what it's about.
44:36Yeah, that's totally fine.
Why are you erring about the unique index?
dzwdz could you maybe post that query with the broken join in chat
DZ, I totally thought we would nail this chart in about two seconds.
This has turned into an odd rabbit hole.
46:17dzwdz no the previous one before you changed your approach
hmm all right let's just handle it something off screen there yeah i don't know what this is mad about unless somebody wants to guess at this i think this is where this rabbit hole is gonna end post that query with the broken join there isn't a broken join though the query runs this is some kind of ruby error so if i run this i should get that same list of you know
going to throw a limit 20 on here but oh this is let me get the line break yeah so the query is fine oh you want the old one sure should be here which should be above all this no it's scrolled off all right you wanted this one
47:37pushcx SELECT DISTINCT `comments`.`created_at` FROM `comments` INNER JOIN `stories` ON `stories`.`id` = `comments`.`story_id` INNER JOIN `taggings` ON `taggings`.`story_id` = `sto ries`.`id` WHERE `taggings`.`id` != 120;
dzwdz if you replace the INNER JOIN with a LEFT JOIN and add a WHERE whatever = NULL i think it should be fine?
dzwdz or a right join i always mix these up
dzwdz probably left join
dzwdz :
And could you be more specific about what you'd like to see set equal to null?
I would have thought left join, but...
Which I want to say is synonymous with inner join in MariaDB.
dzwdz fuck, right
You're thinking left outer join?
dzwdz maybe
Because a left join and an inner join, I think, are synonyms.
Yeah.
So how would you express that you don't want ones with the tag?
dzwdz ON ... AND taggings.id != 120 WHERE taggings.story_id = NULL or something
Because if I say where taggings.tagid equals null, that is kind of the opposite of the existing where clause.
So that's going to be no rows, regardless of whether it's right or not.
48:48OK.
...54So where taggings.storyId is null and taggingsId is 120.
dzwdz that should be part of the join
Let's see if I get anything.
Yeah, nothing for that.
49:21dzwdz sorry
gz can you slow down and write the comment or write the query you want to see and then paste it because this process of me trying to make edits based on partial fragments is not working no it's nothing to be sorry for because it's one of those things where a fix always feels like it's one tiny edit away but the the round tripping through my fingers is
And my interpretation of what you're typing and what part of the query is not helping.
So I'm going to take a second to pull this up.
Hey, we've got some nice comments coming in.
50:11Hello, sir.
I don't know what this reference is.
dzwdz SELECT DISTINCT `comments`.`created_at` FROM `comments` INNER JOIN `stories` ON `stories`.`id` = `comments`.`story_id` LEFT OUTER JOIN `taggings` ON `taggings`.`story_id` = `stories`.`id` AND `taggings`.`id` = 120 WHERE `taggings`.`story_id` IS NULL;
Jens De Pays.
...27dzwdz probably
Oh, very...
mybackhurtss_h o/ good morning, what fancy queries are y'all working on today?
political song oh but then they also have a song to sing for birthdays i get it all right oh you know kevin asks is anybody getting a tattoo about it i did actually get a
A piece of art about it.
I don't think I've mentioned this on screen.
Do I have the photo?
I actually haven't taken a photo.
Hang on.
Let me grab my phone.
I got to get up from the desk for two seconds.
Where are we?
51:30yeah all right so let me fire up the image program off stream this is the best way to show this so i picked up some art and i wasn't thinking of it as lobsters related or birthday related. It's obviously lobster related. This is all to make sense in a second, my rambling.
52:12veqqio Yay rambling!
veqqio Happy birthday!
So I went to a art show a little while ago here in downtown Chicago.
And I saw this.
dzwdz @mybackhurtss_h pushcx was showing us the graph of comments by month, and i asked what it would look like if we excluded the vibecoding tag
mybackhurtss_h oooo
PudottaPommin it looks huge
a pair of oil paintings of lobsters this top one here your classic red lobster is three foot by four foot ish just maybe five by four just absolutely enormous i stood next to the thing and just huge this was also thirty eight hundred dollars
And as much as I liked this big painting, I didn't $3,800 like it.
However, he was selling prints for $15.
mybackhurtss_h lol nice
So I have a, I don't know, a print the size of a sheet of paper.
And it's in my eyeline actually, just directly above the monitor.
53:27dzwdz time for a lobste.rs fundraiser
dzwdz 3800 should be easy to reach
Epic_Ninja_Elephant We need a lobster's theme with that image as background?
pushcx https://lobste.rs/s/pnysdr/lobs…
yeah so i also have hanging on my wall oh we just actually someone just pr fixed to this link you know you say that so years ago we held a fundraiser to celebrate the inclusion of the lobster
emoji into the newest release of unicode and we did a gofundme and i want to say by the end of it we were up in this neighborhood yeah so just over two thousand dollars we raised this was pure donation you know nobody gets a t-shirt
Nobody gets their name on the side of a building on a university campus.
This is just Unicode is a wonderful selfless project that causes us wonderful benefits for every project and incredibly interesting bugs.
But those aren't the Unicode Foundation's fault.
So we have raised money before for things, but
dzwdz we raised around $2000, it was 2018, now we have 2x the users
I don't think, I have a little, it so clearly came out of a laser printer.
veqqio @dzwdz we can commission a bigger one!
I have a little US letter size, so a standard sheet of paper thing in a frame that says that Lobsters is the silver sponsor of the lobster emoji.
dzwdz this painting is exactly within our reach
If we ever do hold a in-person Lobsters conference, I will have to bring both of these.
This painting is exactly within our reach.
dzwdz best i can do is $3.8
Buddy, if you have a spare $3,800, I think I have the artist's card on the back of my print and I can send it to you.
So yeah, we have, I guess I can just keep this up for a minute, right?
You can kind of, oh yeah, resizes.
There we go.
Big birthday.
So your query did run and it produced a bunch of,
Info.
So if I said group by the year of.
Rated app month created.
dzwdz does that amount of rows even look correct
Comments.
What else would we group by?
Yes, because as just posted in the birthday post,
we have something like 590,000 comments total.
Oh, and I should probably actually select things.
Count star as N. Yeah.
So all right, the last couple of months are...
Not what I wanted.
So we will bring this up.
Man, I can't manage Windows today.
So for 2025.06, this one is going to be a partial month in my database.
We should ignore the difference.
We can run this in prod.
So 05, we had 81 90.
So that's like 30 comments.
Oh, four 666 zero.
So that's like 20 comments.
So I need your, I need your query.
57:57dzwdz i must've messed up the query, that seems too low
And then I'm going to say, I'm actually going to filter this one rather than just hammer the production database.
What is with the MariaDB read line?
Oh my god.
All right, come here.
58:31PudottaPommin i always hate this cli sql tools
PudottaPommin you don't use ; and then it's all broken LUL
to you.
...55Alright, so for 06-7139 versus 7153. So DZ, it looks like, what, just under one comment today until last month, and now it's just over one comment today? I'm trusting that your query is correct there.
59:29Any other queries folks want to run? We can run stuff against the production database.
...44dzwdz when i had to use Microsoft SQL Server® i was a bit amused how bad their cli tooling was compared to, like, all foss dbs
Anything else happening in the comments?
...55PudottaPommin I have my fair share of dropping prod db in my past
Where can I, do we have anywhere I can post this image?
Imgur is still a thing, right?
veqqio yes, imgur works!
Haven't thought about it for a while.
Let's go ahead and say.
01:00:32I accidentally closed the image and had to find it again. So we got all that. This is fine. Let me do this before I forget what I was doing. Because I don't need to leave weird edits in and bite them later. All right, so we have this.
01:01:15I'm getting the file duplicated so I can run the, what do you call it, strip it, exif, data from it.
...49Does it still look? Great. So let's just, from column A to column B, can I just drag it in the imager? No, I have to click upload.
01:02:10pushcx https://imgur.com/a/MJRLVc8
Here we go.
...16So there's our lobster painting.
...27And off stream here, I'm going to type quick response.
01:03:09It's $3,800.
...42it's kind of funny reading these comments that two different people who i recognize as regular user kevin here actually is the contributor of dark mode to lobsters and they fixed a bunch of other css stuff that i can't remember off the top of my head did i get that link right there we go
01:04:21all right so yeah we've been going for about an hour which makes it a good time to give my usual bumper that this is the lobster's office hour stream if you've got anything about the site or the code base you can pop up anytime otherwise i usually work on the code base and folks can watch over my shoulder but we are kind of having fun that it is lobster's 13th birthday today so we also talked about
01:05:21And we say, that's a comment without the .
...35If folks don't have stuff to talk about, and between getting that post up and kind of talking through stuff, I think I've hit all of the meta topics I planned.
01:06:35veqqio I'm sad to have missed the meta topics!
veqqio What did we miss?
twitchtd lobsters 13th birthday
mybackhurtss_h is there any way to see if a post has been posted before?
yeah so let's see let's pull up i threw in another oh hey vec you yeah i threw in one more comment of what we had said guessing at that stats graph but oh hey vex see you in the comments there howdy okay everybody
I have tried to link the stats page a bunch of times, and it is very clear from these comments that people have not looked at the stats page.
To see if a post has been posted before.
Yeah, if you want to see a link has been posted before, the easiest way is to pull up the story submission form.
Here, let's do it locally.
And we can pick a, I'm going to log in here.
01:07:36veqqio Well, the previous link thing is bugged in a few ways :(
did i set my password to in development whoa why am i not going to the login page something is instantly redirecting me off the login page this is an interesting bug anyways i was going to say you can pull up the story submission form but
Now I'm distracted by apparently finding a bug in logging in.
mybackhurtss_h ah neat
Let's see what happens on the network graph here.
Yeah, so avatars.
01:08:22I slash log and giving me a 302. If I'm not logged in. All right, what's over on the rails? log for this this is local dev not prod so i'm not paranoid but we tried to get login we started to get well if this thinks i'm logged in oh it's the you know what this is this gets me every time i have to toggle the dev cache back off so it was sending me back to a page where i'm not logged in right no am i logged in on other pages that i haven't loaded yet yes all right so it is a caching issue yeah so Once it generated the cache, Rails was just going to keep serving it to me forever. Yeah. So if I go back to the local homepage, all right, that's all that was, local config. So if we go to submit, we can type, I don't know, github.com. Looks like no one has submitted the homepage of github.com before. What's something we definitely have? This link to Amalek. So it'll say, oh, hey, you've already had it. It's already been submitted. I don't know why it says twice. That's a new bug. But then it'll link you to instances where links like this have been submitted. And I say like this because we do some deduplication So if this link ended with slash index dot HTML, we would not consider it distinct or didn't have the trailing slash or there was a dub dub dub that was optional in front. So let's figure out that bug, because as long as I saw a bug, a real one, that's not the cache. Model story.
01:11:01OK, so something.
veqqio https://github.com/lobsters/lob…
So already posted recently must have gotten called twice.
...18What's 1529? Yeah, 1529 is an existing bug where some duplicate. Duplicates are slipping in. So. If it's a resubmit.
...38Who calls this?
...51This is a resubmit, but we didn't get the right error page. Oh, because it's it. It doesn't count as a resubmit unless it's been at least 30 days. Yeah. Recently,
01:12:27All right, so that's the issue is this function has a name that doesn't sound like a validation and it should only run once, but the view is also running it.
01:13:08Yeah, the Rails validations just aren't as expressive as I'd like. I just have to duplicate this code, I think. So if we have one that says, let's just do the check. It doesn't need to return anything. And then this one, yeah, I don't love the parallel logic,
01:14:12See, now we've got zero. Why are my options zero and two?
...46mybackhurtss_h -_- just realized the post I wanted to submit added a login-wall to the blog months after the post was posted
The stories controller did it.
It must be short circuiting instead of calling the validate.
01:15:06Yeah, so check URL do. There we go. Yeah, this is the one that needs to call the validation it checks about. Or that it cares about, excuse me. It's hard to talk at the same time, right? There's our bug. And if I said... Good. So let's.
01:16:32There we go.
Look at that.
So the
veqqio I picked up juju recently, after you recommended steven's guide. Thank you for it!
request conflict in jujitsu without having to stop and think about it i've tweaked the lobsters deploy script since the last time i ran it on stream here and my back hurts is that a medium post they seem to do that we remove paywalls like that
Oh, VAC, great.
dzwdz is scribe.rip still a thing
dzwdz seems like it
Yeah, we had an earlier question about tags, which I could take a second to look into Fedora's question about this.
01:17:53dzwdz re: medium login wall
I wanted to say it was in their VAC.
01:18:06pushcx @PudottaPommin https://jj-vcs.github.io/jj/lat…
Oh, no, there's actually a tag command.
I mentioned people.
...22Yeah, we've we've kind of gone back and forth and talked about it a bunch, but for medium there's things like scribe.rip or x even if we ignored the csam and the nazi stuff there's x cancel or other knitter instances for many mainstream news sites there's archive.is or what is it 12 foot ladder dot io so there are a lot of these ways around paywalls because so many of them are forests But we have generally said that if an author doesn't want their stuff to appear on the site we don't put it on the site. So one example is the hair programming language didn't want to be submitted to. discussion forums and news aggregators like lobsters until they reached 1.0 and they had a note saying this on their homepage. So I removed a story about it, and because it does the right technical thing, I banned that domain until they reached 1.0. And I wrote a ban message that said, you know, this isn't a ban because we want to get rid of them. This is a ban because they don't want to appear until 1.0. So I look at these sites with paywalls, and that is a really clear way of expressing that they don't want people reading their site. without giving over personal info, paying money, doing whatever requirement that the site owner has. Yes, there are technical things we could do to try and end-run them, but I want to respect these authors and let them run their sites the way they want. So if Medium doesn't want people linking to it, we won't link to it.
01:20:41I did pretty seriously consider it.
I want to say there's an issue where we talked about this.
Yeah.
Oh, it's still open.
pushcx https://github.com/lobsters/lob…
I thought we closed this a while ago.
Yeah.
So let me share the link.
So this was the best thinking about it.
But it was just that these sites were
really unpleasant to read with pop-ups and tons of javascript yeah
01:22:19There's one way to close a feature, right? Oh, you know, I meant to put that in the birthday post. The. I've got to do it off screen on my browser. I'm just going to click edit and throw in a sentence saying. That. We would love more contributors to the code base.
01:23:10We have.
many open bugs and feature requests.
I'm going to try to tag where that might go.
The first issues.
that don't touch on subtle community design.
I don't need to explain.
To make it easy to get started.
All right.
So save, haha, not delete.
pushcx https://github.com/lobsters/lob…
And I put it in here.
Yeah.
So I will share that link here.
So if you are watching this and thinking, gosh, I like lobsters so much.
How do I show that love?
The answer is pull requests.
And good comments.
01:24:42Oh, that's really sweet from JTM. I like these birthday posts. I think they're a. A nice reminder that. A community is a living thing. That people contribute to it, and that's where it comes from. It's not magic. They don't fall out of the sky. It is everyone choosing to participate. Alright, so having found and fixed a bug. As long as I have github up. So we are about halfway into the stream and say last updated. So streams usually start with me going through pull requests and issues, and in this case we're getting to it 90 minutes in because of all the birthday stuff. So.
01:25:42So this one is a bug followed by Nina Kali. Yes, had to check that it's an I and not an L. That the contrast on these is just too low for her kind of colorblindness. that it is, especially in isolation, really not clear has she upvoted this or not. That's a pretty significant bug to a really core feature of the site. If you upvote, you should know that you actually upvoted. So I linked a couple of related bugs, and I talked about it in the chat of, hey, if there's somebody here who knows CSS, You can help with this one because this really doesn't require any Rails knowledge. And a user, Regis, suggested, you know, you could hotfix and just say that comments that are upvoted can have a, can I just give a, oh no, it takes a site, not a, all right, I will have to come back to this then. That's... Shouldn't this image be reversed, where the thing you see through the glasses is grayscale? Wouldn't that make more sense if you were trying to demonstrate what someone has with colorblindness? Hmm. Well, that logo's questions aside, So I have fixed that with at least it's clear, even if you can't see the color well that you have uploaded a story or a comment so. I think that will turn around time was what like 30 minutes from filing I feel pretty good about that one for core bug. July 1 1118.
01:28:12July 1st, 221.
All right, so not 30 minutes, but right about three hours.
veqqio A few hours is still _amazing_!
So if somebody would like to help with that, there is still more to do.
And probably that is a good design issues.
Well, you give us credit for a couple hours from the report,
veqqio I'll jump on it!
but the upvote style hasn't, that part of it of colors hasn't meaningfully changed since 13 years ago.
So we have had that bug for two days shy of 13 years, which is not so amazing.
We've had a number of blind users and we fix stuff so that they can use screen readers.
We apparently do pretty well on that, but yeah.
Beck, if you have ideas, yeah, that would be great.
There are the two linked issues that have some relation because they are about upvoting and that UI control.
You could even roll in a feature where a user pointed out that when you
upvote if the server is slow it's really not clear if your vote has been persisted and the only way to know is to reload the page which updates those unread markers so hopefully the server is more performant now because since that bug was filed we've improved performance quite a bit but at the same time yeah if we go to the server it would be
for them to know that their vote wasn't lost.
And that one's kind of a trust thing.
They clearly saw something be unreliable in a way that caused them to stop trusting the site has persisted their upvote.
I don't know.
01:30:29Oh no, you know what I did? I touched that validation and I forgot to run the test suite. Let's give that a quick run. Probably fine, but I did tweak the behavior of that method. So if one of the tests assumes the validation is in that already posted method, it's gonna fail. Sloppy, I saw the bug and I just wanted to squish it.
01:31:06chamlis_ I hear it's somebody's birthday!
All right, still green.
Yeah, Chambliss.
And I hope you saw that you were featured in the birthday announcement.
There were a lot of words here because you have made a lot of contributions, both to the code base and to Office Hours streams.
So thank you and thank you.
chamlis_ aww, thanks <3
It's all really appreciated.
...39twitchtd reducing dep on JS is ++
Wow, cheers.
Yeah, so let's see.
n1000 Happy birthday Lobsters!
Yeah, Thomas, we are kind of in the home stretch on that.
Speaking of upvoting, I think that is maybe, it is one of the last things I know off the top of my head that the site depends on JS for, but that one's actually pretty straightforward to make optional.
01:32:24So let's see. I think... So Thomas was just here. I don't think there's any changes I have to look at in this PR, because over the last couple of days I have peaked, we talked about all this. Oh no, you've added commits I haven't seen. You added some tests. Wow. Man, who writes tests? I can't even remember to run them. Run backfill takes about 18 minutes. That's great. Set read at on the script. All right, let's take a look. Oh, and welcome, Nthousand. Thank you for the birthday wishes.
01:33:22So we have the controller with the pagination.
We touched that.
Have the update read at.
Read at clearly one of those funny English works.
Let's see.
twitchtd I've been using jj so all the commits show up as force pushed, something I think isn't great when using git backend
There's the jobs.
If I miss it, John.
Yeah, I'm still thinking about that red, because I can't... Well, Thomas, in your other spare time, after you totally rewrite notifications and then load test our database and then port us to SQLite, which I'm sure you'll just knock out in the next day or two, you can write JJHub, which has a very nice UI for stacked PRs and...
the jujitsu style of revising commits.
And then as long as you don't make the front end as janky as GitHub's single page app has gotten, we'll come and move over to your site.
01:34:56twitchtd haha
I have actually started thinking of, does it make sense to sort out Git bugs so that we can start exporting stuff from GitHub?
It's kind of hard to believe that they would actually manage to start losing all of those issue comments and PR comments that we don't have in our repo, but
know microsoft is kind of relentless about making money off of things and so much basic stuff has gotten funky in github's ui
01:35:54And you know one thing to look at before you before Thomas actually makes jujitsu hub is. There are tools like tangled where rather than have a central APP they lean into using the blue sky protocol APP pro for. Distributing. You scale a lot better if you don't have to have every repo in the world with its full history on your service, if you are an introduction. And Tangled does support Jujutsu, but doesn't really have in the way of like you can do it, not in that they have a whole bunch of Jujutsu specific features.
01:37:11Yeah, I remember this. Great. So here's the big chunk of the new stuff. I'm curious about the tests.
...45yeah kind of a placeholder value i was thinking about this and whether it should be, they were read at the time the script was run or read at the time the item was created because we can't tell what the actual thing is. It's tempting to go look at the read ribbons for anybody who's seen how the unread tracking work, but we do delete those after a year or two just to keep the database to a manageable size. And also. If it's been a year or two you're not going to be like Oh yes, I remember all 40 comments, except that one new one you're going to have to look again anyways.
01:39:04that's sort of an interesting.
limitation here that.
Because of the story user is following, you could get a notification through two different routes.
I think this is probably fine for now, but it is... Yeah, I wonder about... Should that actually be two notifications that are deduped?
Should it just be the one should we track whether like what is the source of this notification, why did we create this notification.
twitchtd recordnotunique is there for if a notifyjob starts while the script is running
I think we're okay.
not trying to make the perfect complete thing and just making a good thing.
Oh.
Hmm.
Okay.
I mean, it certainly will if it takes 18 minutes.
All right, so we have this started at...
This one...
messages do have a unread info but i don't remember off the top of my head if it's a boolean or a timestamp oh i'm thinking of the delete it no we have a has been read okay and it doesn't have
01:41:00twitchtd ya
yeah so in this redat is a nullable column right yeah so if i drop down
...31I guess I could just write the suggestion faster and I could write the English, right? This wants to be read at is set to message dot has been read. Then we'll use read at. Otherwise, we'll use nil. And since you're watching, I'm just hitting single comments. You can merge it immediately if you want it. But I do appreciate that you, like, I'm not doing it because I would appreciate having the second pair of eyes. That's part of reviewing.
01:42:15Sure. Locations, hidden story.
...26You know, this backfill script doesn't respect hidden stories or filtered tags.
...40Does notification creation? I don't remember thinking about them.
...53Okay, yeah, users flag, users hidden story. So if you leave a comment on a tag, on a story with a tag you have filtered out, do you want reply notifications? I sort of think no. I do want there to be a lot of effects for filtering where
01:43:33veqqio Which unupvoted triangle do people prefer, △ or ◭ then upvote uses (the current) ▲
I don't know, just generally it's affected.
...44The empty one, the half one is.
Honestly, if you want to do the thing with round tripping to the database, you could go from empty to half to full.
veqqio Ok!
But I think empty to full is probably more effective.
just to start with, because then it's almost just a CSS fix, I think.
Yeah, because we insert the triangle with CSS.
So you can fix it with just a line or two of CSS.
And I see Thomas has already changed things.
And then GitHub.
See, here's one of those things where I know that Thomas force pushed.
What changed?
GitHub doesn't know.
01:44:45twitchtd I didn't force push, I just committed your suggesion
Some notification.
marcoroth_ you can see the changes in-between force pushes
Thank you.
Kitchen create.
01:45:15Yeah, I am mostly griping that I got refresh, which is just like something changed and I clicked the button and the answer to what changed is start reading. Hope you memorized it all.
...49twitchtd &:good?
down on the tests but what thomas am i missing something or does nothing call dot good on notification create oh is it oh so you're filtering them out at read time oh i hadn't thought of that that's a way of restoring a lot of those badness detectors which run on
yeah so then you always make the notification yeah okay well then here i think up here in good comment can i ask you to add the tag filtering is there a nice method you can call for that
I don't think so.
We have a bunch of scopes.
I'm not sure we have a...
It wouldn't be on tag.
01:47:09Yeah, it's certainly not on tag filter.
...20Yes, we have the scopes. I'm trying to think if we have a instance level. No, we do not. So I think we probably want a method on, yeah, I'm trying to think of what API you want. And I guess we should just make something that exactly matches this one use case. So we want to ask like story dot. User has filtered. Right.
01:48:54I'm guessing at that API.
It's hard to juggle.
twitchtd Ok, I'll look into adding tag filtering for notifications
That sort of API design is something I'm not great at when I'm keeping up the stream pattern.
Thanks, Thomas.
All right, so we have this.
01:49:23So we build the user.
...32Oh, this is nice that we don't have to build. Show me these.
...57Yeah, there just isn't as nice an interface for Settings.
01:50:21You see the longest method name in the code base vote thusly on story or comment for user, because this is one of those. Tell me you have lots of scar tissue from writing see. method names were. You write method names like this after you have been burned by confusing arguments that are all integers because your type system is not very expressive.
...58We could shift that over to.
01:51:05You know call this vote bang and rename these two keyword arguments and. The method would be improved by that refactoring. The line wraps would be improved by that refactoring. It's good for stories with more upvotes than flags. Sure. I like that you do these sanity checks that your test data looks like you expect. Those have caught issues in the code base before.
...47twitchtd lots of copy pasta in those tests but they're all self contained
not good for moderated comments right makes sense it's good for other comments okay i think i would like to have the tag filtering but this is pretty much ready to go
Thomas is that something that you are hacking out right now yeah I would rather have the duplication and tests i'm very happy to have duplication and tests i prefer that style.
I have played with other testing libraries where they just do not have.
Our specs let to make it easy to share things between tests.
And I kind of like it.
It's not that hard to make a helper method if you are making identical things.
And then you have all your regular code toolbox of, am I starting to add arguments to this method?
And then you get your code sense tingling and you refactor.
You make multiple methods or otherwise separate them.
So, Thomas, I was going to ask, are you doing the tag filtering right now and I should keep the PR open or I should come and look back tomorrow?
Or, you know, in a few days.
There's no rush.
twitchtd I need to understand how tag filtering works first
But I've noticed that you turn stuff around pretty fast.
And I really appreciate it.
That's why I have snuck in a bunch of dev time.
There is the tag filters model.
So for each user, it has no real attributes.
01:53:46It's just a link between user and tag. If you look at the filtered tags, they're very simple. There is a little bit of complexity here for visitors. Opposing to users, visitors, people who are not logged into the site can use a cookie to filter tags, but you don't have to worry about that because they can't get notifications. So you could just say at user.tagfilter.
01:54:26Yeah, calculate the intersection between story.tags and user.tagfilter.tags, which is going to be a has many through, right? Yeah. So you could use that.
01:55:09twitchtd tag_filters says which tags to filter out?
twitchtd I've never used that feature before
Correct if it's present in tag filters, it means the user doesn't want to see it.
twitchtd ah ok, thanks
If you look at.
pushcx https://lobster.rs/filters
The filters page.
...26You can see that I mean, especially if you compare that to slash stats people mostly just don't filter things out.
That I.
pushcx https://lobste.rs/filters
lobster.art what is this site someone who's probably actually in the republic of serbia so yeah we have what was the stat here we have a hundred and no we have eighteen and a half thousand users and i think the most filters most filtered tags
I s 1300 people don't want to see meta stuff so that's like.
8% of the user base ish off the top of my head.
But, as with everything in social software, it is log normal distributed and the next most popular is like 348 at my skin.
So big step down every chart looks the same.
speaking of where's our recent famous edition back to the question earlier vibe coding has only picked up 286. all right i'm going to grab some water i'm getting froggy back in two seconds
01:57:16There we go. Getting better. All right.
...29So I'm going to spend a minute here on the, well, I'm going to peek at comments. Hey, lots of happy birthdays.
...51So this one, if anybody has noticed the name of the testing channel in the code base, you can peek in. And just this morning, I woke up to see that it was starting to report stories from the RSS feed. So that's wonderfully encouraging. This bot is coming along, so I don't think it's ready for a review, but I want to peek at it. Ah, great. So he split out the gem file like we were talking about. Here he says performance monitoring, but it is bug reporting.
01:58:47Yeah, so he's been busy getting the RSS feeds working and getting persistence working.
He's new to Ruby, so this one's not going super fast, and there may be some unfamiliar idioms in it.
We probably want to add Zite work at some point, but I don't want to dump a bunch of, you know, figure out this complicated Ruby stuff on him.
And I was kicking around, how do we want...
the Rails app to communicate with Mock Turtle, because they're going to run in two separate processes.
marcoroth_ isn't that Rss class going to conflict with the stdlib?
And it occurred to me, one thing we could wire up would be it has separate threads to watch RSS feeds.
marcoroth_ or not because its lowercase
Well, we could spin up a separate process
To have its own.
No, I think the standard lib one is all caps and we don't use it.
Or.
I don't think he uses it either.
No, we talked about, yeah.
So there's been some churn here on RSS where we talked about what libraries were available to use and then whether to just use no go Geary.
And I don't know where he's at right now.
02:00:32Yeah, so good. This is still a pretty rough PR, but that's okay. It is a work in progress. This is fine. You can just run that. I trust him. He's on the site.
02:02:04pushcx https://github.com/rails/solid_…
You know just saw the kuma where was it so we were talking about this a little.
In the moderator irc channel, so there is a total Lincoln here.
...29Figuring out, writing our own code for things like, solid queue includes a Puma plugin for it, for that process to manage a, Supervise is the verb from the code. A solid Q worker.
02:03:10And I think this is very close to what we want.
...37Cool.
All right.
So, no changes on the pull requests or the issues.
Oh my gosh, have I actually gotten ahead of things?
One comment on issues.
What do we have?
Oh, I wonder who this is.
So I talked to
veqqio Oh, I saw his profile picture recently on lobsters
someone on the last stream or in the irc channel in the last day or two about how we had experimented on stream with removing the font size yeah i don't instantly recognize it but
Like I say, most streams, I really struggle to remember all the usernames, especially for people who juggle three or four different usernames between GitHub, IRC, Lobsters, their blog.
All right.
02:06:28Do we have a Phoebe?
...38Nope. I'm curious, though. What is Taito United? OK. There was a 90s video game company called Taito, I think.
...57And this changed UI is getting me. It's still not consistent between my two browsers. Yeah, okay, there is a real... So they are Taito Corporation, not Taito United. I'm not misremembering. I know several things.
02:07:21veqqio https://www.taitounited.fi/
All right, so I will give my bumper, because we're just over two hours.
These streams usually go about three hours.
woosaaahh Hi everyone !
And if anybody has a question about the site or the code base or the community or a moderation decision, you can pipe up in the chat any time.
And then otherwise, I maintain things.
Hi, Woosa.
Welcome.
Or maybe that is some vowel I am too American to produce with all those triple A's.
veqqio I submitted the pull request btw
woosaaahh woo ssa is fine ;p
All right, so log rotate, bane of my existence.
I haven't figured that one out.
Let's do the HSTS.
That might actually be enabled already.
Oh, you did a, well, let's pull up the pull request right now.
02:08:31Move the hotfix, great.
...55Ah, okay.
02:09:10All right.
Yeah.
When you hover, what do you see?
veqqio hovering fills it in red
You should see the build red arrow.
...44marcoroth_ does that character have a different size? or is that just how GitHub shows it?
yeah i'm wondering if there's the potential that what we could do is the character has a different size github is matching their
length their line height or something because as you can see from the the diff we don't have anything special set here we just print the character and we have a font size set
Since VEC isn't touching anything related to size, that's what I'm trying to say.
Since VEC didn't touch anything related to size, we probably won't pick up any regressions there.
All right.
02:11:12marcoroth_ I was just wondering if it's depended on the system font
You know what?
Sometimes I get so into the code.
...22veqqio On twitch, they looked to be different sizes, so... mild fear On my browser at least, they were the same height. So I checked on 2 other browsers and on the phone, so I feel it's safe!
I forget to say thanks.
This is not going to fail anything on the build.
So I am just going to rebase it on.
...39All right, so let's.
veqqio But actually in twitch, they also aren't different! Just they loook different
marcoroth_ it's fine in my browser too, but it looks weird on @pushcx's 🙈
Oh, you're saying on Twitch, the outline and the triangle are different sizes.
They actually looked identical to me on Twitch.
veqqio (I used a ruler)
So there is some kind of...
It looks weird on mine.
Oh, they are different sizes.
How weird.
Yeah, I see it.
Now that you say it,
02:12:24I guess it's font specific. So what are we using here?
...36What do I want here? I want computed. I want the font.
...45But this doesn't tell me what font it's actually using. Oh, but check this out. That's kind of conspicuous that they have something called typography tokens so they're doing some kind of inlining styles to that all right see it's giving me the whole list i want to know which of these it actually picked
02:13:31All right, let's give this a second. The deploy is still running.
...54And then we can click over to 1641.
02:14:24veqqio On lobste'rs font, it's an outside border, and then the hollow inside is filled in
n1000 I see the same thing
n1000 different size I mean
let's reload and look at our upvote all right so these guys they are a different size right marco you are very observant so what this is so this is just a me thing it's an outside border and then the hollow
...58veqqio like the "border" is gone so there is a 1 pixel difference
marcoroth_ it's also broken in my browser
yeah so on both of my browsers they're slightly different so maybe this is a font thing on my local machine there's a way to make outlines of css outlines of emojis using css i've seen someone do it no what's her name
02:15:37frooberto same here
Next you can do that.
02:16:09So let's take this.
veqqio Add text-stroke: 1px var(--color-bg);
veqqio pushx
veqqio pushcx
So if I change this one back to three.
wait am i oh i'm on my i see your alternative or are you saying that that's to turn the one into the other i would rather use the same character both places
02:17:06because if we try to patch the difference between the two arrows then we're going to be into font hell so let's change this one back to a two and look at it locally
...51where's my i can't keep track of all my windows so if you're saying so vec is text stroke to build up or to outline i think to build up right so if i paste in what i saw on this other one
02:18:26That is not at all what I wanted. It's your red.
02:19:05woosaaahh I was away few minutes but wanted to say a big thank you for Lobsters ! I use it as my first/main tech news source
I'm missing something from that.
Yeah, okay.
...18Thanks. Flex. So we have a fill and outline emoji. It's just the height.
...47veqqio My solution didn't work on other browsers, hmpf
Are we accidentally filling in a background color?
...56No, we're overwriting that down here.
02:20:10Let's define this thing before. The thing with CSS is it always turns into shotgun surgery pretty fast. So why is this not outlined? Let's figure that out first.
...59veqqio 25b2 isn't outlined, 25b3 is the same shape inverted color with an outline
correct i was trying to set it so that we only use 25b2 the filled triangle what is underneath then that we're picking up
veqqio Oh, and put an outline on _both_ but the outline is white and then red, so it has the same impact? I see!
This is displaying like we're transparent and on top of something that's gray.
02:21:42Yeah, you got it. And so on the unvoted, it would just be transparent. And that gives us a great border around and then either drop that border and just be red or change its color to red. So if I turned off transparent, we're getting the color FG shape. So why is transparent this color? This is one of those stacking context bugs. I bet it doesn't understand what's underneath it.
02:22:34OK. So that's not an outline I like. But it is an outline.
02:23:07Who was the woman?
I think I follow her on Blue Sky.
marcoroth_ una?
Someone who did a really thoughtful version of this, and I'm blanking on her name, and I don't follow a lot of CSS people.
...31Una? I don't know who that is.
...47I'm searching off screen, but I don't think there's Anna Tudor. That's who I'm thinking of.
02:24:02She has done a bunch of CSS outlining kind of stuff with very clever layer effects.
So if I say from.
veqqio I have a good looking version!
anna tutor.esky social outline i'm rate limited because i'm not logged in in this browser yeah so she's doing these it looks like with
A lot of the stuff I've been seeing has been... Oh, do you?
That's great, you got me beat.
Stuff like this, but she's doing it on fonts, so it's SVG filters, which seems like a lot.
02:25:20Did you want to open a pull request, Jack? Did you already? Not just yet. Just closed the wrong browser. Let's get that.
...53veqqio Is this ok? https://imgur.com/a/gdOdkCr
Sir, you cannot lay nakedly on the mouse.
We are referring to the cat for anyone who doesn't understand that one.
I'm going to talk about somebody being naked on stream.
02:26:15Give me one second. I am juggling to get back to my window. There we go. All right. So let me pull this up. And then that link doesn't work for me. I just get a, oh, no, it does work. There are just so many lead gen stuff below. I couldn't tell that there was another. Sir, you are not helping, sir. Cat is fractious.
02:27:08That is exactly what I was going for, Beck.
...19How'd you do it? While I peek at this other PR.
...59Ah, that is a very clean expression of it there, Thomas. Thank you. Thomas, if you're still present, do you have any reason I shouldn't hit merge on your PR?
02:28:26twitchtd there's an n+1 query in there
There's an N plus one in there.
...34Oh, in the script, because it has to fetch...
It doesn't call a good comment on insert.
twitchtd nah, in the filtered_tags, I need to includes some tag data
twitchtd ya
But it's fetching the user's tag filters over and over when the user logs the page.
Is that the one plus n?
Yeah.
02:29:13So who calls you know this? Yeah, there's a different bug here. So I'll let you finish the thought.
02:30:08So this is why a bunch of the scopes like take the user so that you can have the user load that once.
...33Yeah, before you get
...42Yeah, I don't know how to express this nicely. Because before you get too far into this, it might be worth mentioning because it's going to touch on it. There is a bug here that because we're doing this filtering all the way on the front end, you may end up with a notifications page where Instead of seeing 25 items per page, you see two on the first page. So, say you accidentally go and get involved in a flame war, and then you think, wow, I am dunzo with this, and you click hide on the story, and your last 20 notifications disappear, and then force of habit, you load the notifications page, what's going to be on it? I mean, maybe if you got a DM in that time, you have that on it, but even on the all page, you could have, I'm assuming you chose the same per page of 25, right? You could have 25 be considered bad and filtered out.
02:32:04Yeah, 25.
...11I don't think that has to hold up this PR, though, because we're not linking to this from anywhere yet, and I would like to land this PR because it's big by our size, and I don't like big PRs.
02:33:03Yeah, so if we get the filter ready, I think we're there. All right. Beck, I see your new PR.
...40veqqio I am scared you will say webkit is bad :D
veqqio I dontknow the web ecosystem well.
This is, well, it's not that WebKit it's bad, it's I'm not using WebKit.
02:34:00Unless other browsers are interpreting it.
veqqio I'm on firefox
This MDN page kind of implies that they are.
...23Isn't there a regular just text dash stroke? No, there is not. Oh, show's fly now.
...48No, there is.
veqqio There was a text stroke. I tried that above, but it didn't work on all my devices
So what is the difference between text stroke and WebKit text stroke?
02:35:02Firefox and Edge specifically only support the WebKit text stroke property. Why do they do that?
...15grayhatter_ I think webkit is safari's magic
marcoroth_ this was before CSS was good
I just want to understand why this is still in a namespace, because I get the impression it's been around for ages.
grayhatter_ it hasn't been offically approved by the w3?
Right, but CSS has been aggressive about folding stuff in.
marcoroth_ text-stroke is available since 2017
Yeah, so this is 24 years old?
24 and a half?
23 and a half?
Can't do math on stream.
So if it's been available since 2017, really?
In eight years?
Firefox hasn't dropped the prefix?
That's so contrary to my experience that I feel like I'm missing something, and I have that little bit of fear that I am missing something important.
Oh, Chambliss, are you here to figure out the story?
veqqio grayhatter, come back <3
i'm naming her because she has a magic trick she does where i'm totally puzzled by something and she finds the obscure reference that i'm thinking of or explanation so this is me sending up the chamla signal it's like a big hyperlink in the sky in a spotlight
02:37:00grayhatter_ lol, hey veqqio
Oh, hello, still present.
I didn't think you'd be watching the stream.
...16Yeah.
So...
marcoroth_ I think that note was saying that firefox and edge used the `--webkit` prfix and not their typical -moz or -ms prefixes
Why hasn't Firefox brought a prefix from WebKit text stroke?
I'm basically just asking Gemini here, and it's going to make something up.
...46Right, but if it doesn't support regular text stroke,
marcoroth_ it does support the regular one
Yeah, that was garbage.
02:38:07It does support the regular one, but not according to can I use.
Can I use says Firefox and Edge specifically only support the property.
Oh, they don't, not using those other prefixes.
veqqio The regular one didn't work on all my devices. That was my first attempted fix. *confused*
They do.
...29marcoroth_ but read the first line there
and on this one regular one didn't work on all your devices okay all right let's take a look at this let's let's tinker let's revert this and then tinker
02:39:06So I said that before should use 25b2 with a text stroke. What was it, 1px? That's not it. 1px with a color.
...47veqqio Is there a reason we can't just do both like text-stroke: 1px var(--color-fg-shape); -webkit-text-stroke: 1px var(--color-fg-shape);
invalid property name.
marcoroth_ oh wow
I didn't typo it.
...56No, we should be able to do both. So, we are seeing something strange. And the strange thing is just that Firefox clearly has support for this. And it does what we want. It just has the vendor prefix on there. I don't know what to say. So let's can I ask you to feature proof this and just duplicate this line with text stroke etc. We don't need the rest of it oh i'm going to be super nitpicky can you swap these two lines, because I do like to alphabetize these we're not super strict about it. And I have not thought about vendor prefixes and how they translate because. We don't have many vendor prefix attributes anymore.
02:41:09Hmm.
...37marcoroth_ oh wait, does `stroke` work
marcoroth_ looks like text-stroke is not part of the CSS spec
Just stroke, let's try.
That's not a different thing.
Oh, you know, it could be something about the fact that this is a pseudo class, right?
So I'm not sure it did the right thing because I've got other,
stuff making it not visible.
The other ones flickered and showed it.
I don't think that's doing quite the same thing.
02:42:37marcoroth_ tailwind uses this one
yeah this is this is svg really it's not a weird little puzzle we have my
My concern here is that there's some reason it's still hanging out on the vendor prefix, but it really does say that everybody supports the vendor prefix.
And I don't know what's going on with this, but unofficial note.
02:43:35grayhatter_ looks like the whatwg abandoned it (left it to twist in the wind)
Okay.
veqqio Using both works for all the devices i have, but i e.g. don't have ios. idk!
I just feel like there's a story somewhere.
grayhatter_ no github issues about it
We will leave this as a mystery for the ages.
02:44:28twitchtd fixed the n+1 related to tags
twitchtd but now I realized we do a query per notification for votes and hiddenstories, not sure if you want me to fix that as well
cat why did we startle i don't know if you could hear but he just shook everything on my desk by going from dead asleep to leaping to his feet great for notification for votes and hidden stories yeah see and at that point this is such a railsy thing because it's so
limited in supporting queries and projections as first class objects that the definition of good is leaking out into preloading data for good, which is a little ugly.
yeah.
Can I just edit?
5B2.
02:45:57Why did you show it to me as spaces instead of tabs, then, if it's actually tabs?
This one is.
There it is.
HejiHyuuga happy 13 years!
No.
Don't try and help me.
02:46:16Hey, Hedgie. Thank you. On behalf of lobsters, because it is not me personally getting thanked here. All right.
...33We've let spaces creep in. I guess I should have written that linter. I guess I shouldn't make unrelated changes in someone else's PR.
...55Wait.
So the URL implies
Wait, that I'm... Yeah, I'm not doing this on master.
What?
GitHub.
Let's just abandon that.
veqqio I think I already did!
In fact, can you please indent with tabs, not spaces?
Because we use tabs, not spaces in this file.
02:47:31veqqio Reload it
Okay, there we go.
I was out of date.
Because I didn't even see the refresh.
So it looks like line 464 is still spaces.
Sorry to be super nitpicky, but I'm super nitpicky.
Also, this closing brace should be on its own line on 461.
Oh, I bet I was committing to your master.
Yeah, that's obnoxious.
GitHub pull requests would, I realize all of the stuff that GitHub proper has so much baggage and inertia that they probably could not meaningfully change the pull request experience, but we're kind of stubbing our toes on things that are not great about pull requests.
So we're all going to just have to wait for Thomas to release Jujutsu Hub or Tangled V2.
02:49:09twitchtd is there no jujutsu hub already? I would have assumed so
If there is one, I'm not aware of it.
I haven't even gone and looked though.
...21Alright, so we are coming to the usual three hours of office hour stream.
So
so hold on totally ready for this let's let's move this off of the green stuff because i'm looking at a pull request with a lot of green which is unusual and then so i don't i don't have a bell but i can say ding ding that we are getting close to the end of lobsters office hours and now i can't actually
veqqio Should I put these all on one line? .upvoted .upvoter:before,.upvoter:hover:before
read the text because it doesn't show for me but now is a great time to ask any last questions or you know submit a pull request and i will nitpick the ever living out of it apparently because that's the other thing i do one of the reasons i installed standard on the code base well i installed rubocop just because on pull requests
I wanted to stop having these please indent this slightly differently kind of conversations.
02:50:43If they fit, sure. If they're comfortable, sure. I don't know why it's split on two except maybe one of the contributors had the personal style of putting Splitting selectors on commas across lines to make it obvious that there are two selectors being ended together, because it could be visually easy to miss, but that is not at all the code basis style and is not super pressing to me when we have. What did we figure we're at like 1400 lines of CSS not a hell of a lot.
02:52:01twitchtd for my notifications pr, what should I fix for next time? I think you mentioned the &:good? filter potentially showing less than 25 notifications per page, and the 50 extra queries (2 * n + 1 where n = 25 notifications per page).
you should see extreme what is today oh you know what today is because it's lobster's birthday it's rex manning day you know thomas i think given that it's not live
I'm still tempted to merge it right now.
I mean, you know, not live, just not linked, because then we can load it up and look at it and play with a bit.
The seeing less than 25 per page, yeah, that's a bug we want to fix.
The n plus ones, yeah, that's a bug we want to fix, because people are going to see that and hammer the heck out of it.
Replies is a highly trafficked
piece of the site.
So we do need to be performant on it, even if we switch to a database that doesn't care about one plus end queries.
But since we're not linking to this, I am fine with rolling the things out into production.
I can take a minor performance regression and that slight oddity, that known issue.
If you feel comfortable with it,
02:53:36And speaking of getting every nitpicky thing I want,
02:54:09All right, so we've got that.
Let me pull that down locally.
veqqio Speaking of nitpicking, now I kind of wish I made 2px :D
So I guess the other way, Thomas, that I could say things is I'm happy with it if you are happy with it goes out with two minor issues.
2px, you had to say that just after.
We can change it.
Commits are free, right?
Let's go look at it.
...46Actually, I can see it locally, right?
Yeah, but at default to.
It is a little pale at default to.
It's.
No, it's not changing shape, it's just.
No, the.
It's a different size.
veqqio Did your local update?
Because it's a text stroke, it's around the outside.
So we do want another commit.
All right.
twitchtd I'm ok with pushing it out, I only know about the 2 issues mentioned and I don't consider them major issues.
Did my local update?
veqqio It was gray not red
It should have.
But let's check prod because we did just push it to prod.
All right.
So we have this.
Okay.
My local was not correct then.
02:55:45Oh, that's a difference with Jujutsu.
When you pull stuff down, you stay where you were.
So I was on UWL.
I stayed on UWL.
So I want to make a new empty commit on top of master at origin.
Yeah, it format more.
Right now we see that as the parent commit.
Yeah.
Oh, this is don't worry about this.
This one is because I've been tinkering in this local tab.
That's fine.
So broad, broad looks good.
That's what we care about.
Not Peter's computer.
Frici New vote buttons look interesting 👀 and that is positve interesting.
No one cares about Peter's computer.
And it looks very nice.
Let me reload my personal browser so I can click on it.
That looks great.
gtfrvz (hidden by 1 user)
Does it?
Yeah.
02:56:50Yeah, GT, people often hide meta stuff.
They're just not interested.
And I think that's totally fair.
I mean, this thread is going to be looked back on the last year of the site or talk about mod stuff.
If that's not interesting, that's OK.
maybe they are just really here for Pearl and they hide everything.
Oh, you actually, there is one user who uses the hide button to track that he has already read stories.
And so he has hidden a significant fraction of stories on the site because he's been slowly reading through the entire site archive.
So I want to say,
gtfrvz nice b2wGG
veqqio Fascinating
marcoroth_ @veqqio looks like the vote button is gray with a red outline on iOS on "hover", is that how it should be?
Frici LUL I love it.
more than half of all stories on the site he's hidden or maybe just dude is only on lobsters for pearl stories yeah you know social software you give people software and they do all kinds of things gray with a red outline on ios on hover all right hang on i have a ipad here let me pull that over
02:58:19and load it up man speaking of things being off screen this is off device okay so that looks fine especially when i zoom in and then i tab through things oh ios is not doing the tab index correctly i'm not logged in that's why why am i logged out on this device
02:59:01No, and I'm going to have to 2FA.
...09Doing all the security.
...38veqqio For me, it's black in the middle not gray. Personally, I'd say "close enough" since it'll still get the job done. Does it look bad?
marcoroth_ so it just doesn't override the color
i roll my totp code since i synced ah painful gray with a red outline marker i wonder if you're well no you shouldn't be able to be in any kind of intermediate state like that
I'm so puzzled.
03:00:16marcoroth_ if you tap and hold it
If you tap and hold it, I should be able to see that even not logged in.
...37veqqio If hovering, it should be the same as when it's been upvoted/clicked
but I don't.
Let me check a different iOS device.
...57Oh, I saw it.
marcoroth_ the `color: var(--color-fg-accent)` is grayed out in the inspect
Yeah, it's like...
03:01:14marcoroth_ so it takes the color from the fallback
gray with a red outline.
You know, I actually saw the inverse where it was red outline and gray interior when I hover on or like long press on iOS.
marcoroth_ oh my bad, that's what I have too, red outline
veqqio Inverse? That's the same as he meant
I wonder if we should just have all of these states specify what their text stroke.
Oh, okay, so Marco said it backwards.
Okay, so I can only reproduce it on one device, but I did reproduce it, which is strange.
No, Vic, his comment at timestamp, which doesn't show a timestamp.
He said it was gray with a red.
Oh, wait, what did I say?
I'm confusing the two of you.
All right, I'm getting tired.
I've been going for three hours.
I am donezo.
frooberto a base64 encoded svg background image could be used for the upvote which would make it consistent cross browser
The fix for this is almost certainly going to be that both states should specify what background and foreground color they want.
03:02:31marcoroth_ !important fixes it LUL
Yeah, Fruberto, but then we would have to add an image to the site.
...40frooberto yeah, my testing shows it would be about 300bytes per svg which is not optimal
and actually i don't think we use select two anymore oh it's cascading stuff i am i am definitely too run down to try and debug the css cascade absolutely not no so
This has been Lobster's Office Hours.
veqqio Have a beautiful day everyone!
Thank you all for tuning in.
Happy 13th birthday.
marcoroth_ are you going to be at RailsConf next week?
We will have Lobster's Office Hours on, oh, not next week.
Next week, I will be at RailsConf.
marcoroth_ yay!
I may see you there, throw me a DM.
And then I will pick up
woosaaahh Thanks for the stream !
the what's it called the office hour stream on the following monday which is where's my calendar so the next office hour stream will be july 15 usual time of 2 p.m chicago time and if not then i will see you again in a year for lobster's turn 14.
And that's good.
That means I have an entire year to think of something interesting about the number 14.
All right.
Well, thanks for tuning in.
I will see you all around the site.
Otherwise, take care.