It's the null object pattern for users
Streamed
Back from winter break with lots of PRs and issues to catch up on.
PR 1812 for Mastodon story images.
The slow migration of moderator functionality to a dedicated namespace.
CSS for inactive users, my mistake in naming inactive-user.
Adding database_consistency to the build.
BlueSky.
include <std_github_spa_gripe.h>
Typography bikeshedding.
scratch
topics
PRs
story images https://github.com/lobsters/lobsters/pull/1812
https://mastodon.social/@lobsters
aria >> and << https://github.com/lobsters/lobsters/pull/1850
aria user styles https://github.com/lobsters/lobsters/pull/1854
caching filename https://github.com/lobsters/lobsters/pull/1842
min DM length https://github.com/lobsters/lobsters/pull/1858
open graph tags https://github.com/lobsters/lobsters/pull/1857
save story https://github.com/lobsters/lobsters/pull/1862
database_consistency https://github.com/lobsters/lobsters/pull/1827
2fa guy
issues
mod deleting comments jumps to top of page
issue/pr sync with comments https://github.com/lobsters/lobsters/issues/1864
recent/newest https://github.com/lobsters/lobsters/issues/1861
typography https://github.com/lobsters/lobsters/issues/1859
tags field in safari https://github.com/lobsters/lobsters/issues/1801
pagination https://github.com/lobsters/lobsters/issues/1840
title
it's the null object pattern for users
post-stream
https://devblogs.microsoft.com/oldnewthing/20260119-06/?p=111995
sort out jj oneline alias
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
03:28corbob One of these days twitch is going to open a stream non-muted and I'm going to be upset... until that day, I will be upset that they're always muted LUL
obviously so yeah you know maybe I should get a like a royalty-free background music that I can play when I have this thing up you know a girl from Ipanema or something obviously that one's copyrighted let people test their audio it's a shame it wouldn't really test my audio but I remembered the workaround
corbob From what I can tell, if you go to the main page, it's not muted, and streams aren't muted when you go to them. But if you go directly to a stream it's muted.
ChaelCodes Hello!
pushcx This is Lobsters Office Hours, ask questions anytime in chat!
today for once so okay howdy i'm peter this is lobsters office hours this is lobsters on screen and ah maybe that's the difference is i'm i'm browsing different and so yeah here at lobsters office hours let me throw my message in chat
This is.
Asked questions.
Hey, Joe.
Nice to see a familiar face.
Your PR is one of the things I wanted to start out with.
04:43Yeah, so I don't have a big list developed, I was just going to go through The why pull requests. So yeah, when folks aren't asking questions about the site, the code base, the moderation decision, anything else, what, man, whatever this is, this has been like hanging out a couple of weeks. That flash message. How funny. I guess I have the same session.
05:21olexsmir github is funny sometimes
olexsmir often times
So yeah, I hope everybody had happy holidays.
I'm discombobulated.
I was taking a nap right before I was streaming, so I'm still waking up, which is part of why I'm so disconnected.
So yeah, I've been off for the holidays and some personal and family stuff.
And then there have been a few things that have got merged.
Otherwise, we've just been kind of in slow mode.
Let's see, when was the last stream?
Must have been like 12.15, so yeah.
I don't remember if I, on the last stream, I merged the dev container and the routes, or if that was after.
Must be after.
So yeah, not been quiet.
Probably the standout stuff in the pull requests that got merged between streams.
There's been a bunch of maintenance stuff.
Chael's couple of PRs are interesting.
This one fixed up the Ruby version and
Chael, do you have a link to share maybe?
Because I know you were talking about doing more with this.
Did you write a blog post about it?
I think you wrote a blog post.
Hopefully she's around and can share that.
ChaelCodes https://www.chael.codes/blog/20…
And then let's see what else.
Yeah, some small bug fixes.
ChaelCodes I did!
olexsmir wow i never saw .codes tld before
more cleanup one of the there we go thanks chael i knew i saw something about it so what was the other part this one about unused routes is a long time cleanup regular stream viewers will know
I have been slowly moving lots of moderation stuff into a mod folder or path for the URL.
And that actually came up in another of Chael's PRs.
ChaelCodes The mod mail one.
The big benefit to that one is... Mod controller.
Mod controller.
There we go.
ChaelCodes I admit, it made the logic really clean
yeah, was the mod controller has the require logged in moderation action or before action.
ChaelCodes Lots of duplicated scaffolding.
And I recently added this comment explaining what this is for.
So
ChaelCodes But it ended up really clean in limiting logic.
This kind of started with bugs in, really the first one was bugs in comment editing where, or maybe it was comment removing, but moderators had accidentally special powers with that.
And because all of the authorization checks kind of got pushed down into the model layer, they're not super well factored.
I've slowly been lifting them up to the controller level.
And then splitting apart actions and templates so that, for instance, now there is one form for editing a story as a user and there is one form for editing a story.
As a moderator and these are.
Very, very similar forms, as you can guess, they have mostly the same fields, the mods have one or two more fields.
But.
that redundancy means the templates don't they're not just peppered with predicates checking authorization checks over and over and the controller actions on the back end also aren't peppered with authorization checks because it knows either we are doing the privileged workflow or we are doing the regular user workflow so that whole
class of bugs where because moderators are regular users they can end up on both sides of the branch in a particular action so it was like if i think it was if a moderator edited their own story they were allowed to do it after the edit window had closed because they can always edit stories but then because it was their own story it didn't get mod logged because it was like ah the user is editing their own story
just messy messy so yeah this is a very small pr but this is a long-term cleanup i've been thinking about one of the things i don't love about github is this kind of long-term refactoring slash redesign slash cleanup there isn't really a place for it to live i mean like i could create an issue
and spin these things off as sub-issues, I guess?
I don't know.
I spent a lot of time thinking about GitHub, because it did some ridiculously unreliable stuff to me over the break.
And I tweeted that out.
Where do I have that?
vSky.
Where did it go?
11:26pushcx https://bsky.app/profile/push.c…
Ah, here we are.
...34You know how you can type the hash and then an issue number to link it? And you can do a full text search, but I was typing an issue number. It took all of these other issues from our repo. Actually, I don't know what the hell this is.
...59Wait a minute.
This one, I think is from our repo, these others are not.
And then in the second one, I don't think I caught that at first.
The second time I tried because I had to retype the comment.
These are all from like, so you notice I've gone off the end of it here with a space.
And
ChaelCodes vibe-coded~
graefchen Heya limesHi
some of these say 183 or 184 which is the first three digits of what i typed this one does not and all of these are from different repos yeah i don't know at this point they've been making a big deal out of vibe coding and redoing their whole front end maybe this bug came in
Multi-tenancy is such a pain where you have to always filter things to the right scope, and it's so easy to forget.
That's basically the long-term thing I'm talking about.
All right, so what else is happening?
This one, oh, is this ready to merge?
I couldn't remember if I applied to that.
What else is worth talking about?
We've had a couple of small PRs about
Aria.
Accessibility.
Making things nicer on screen readers.
Those are mostly from FedEmp.
I think there was one that wasn't.
And then... That's just about everybody.
pushcx https://github.com/lobsters/lob…
So yeah, I've got a few things to look at.
Oh, Chael, if you didn't see 1856, it was...
docker related i don't want to just tag you into everything docker but you are the expert right now especially after having done the dev container pr that i got merged all right so just because this is so busy yeah i think i missed opening this one
Let's take a look.
Let's go ahead and review some PRs.
14:49I think this one's got to be, if not very close to ready to merge. Hanging out ready to merge. Yeah, so there's my review.
15:07Yeah, that one. How am I not signed in? Wait i'm not signed in, but I still got that flash message about. I wasn't paying super close attention at the top of the page when I started the stream and I didn't notice if I was logged in, but I definitely noticed that your review has been submitted from the last PR I reviewed like a month ago. But i'm logged out. that's a funny combination of states.
16:06Oh, well, we're rolling that one wrong. All right. Pulling that off screen for a second and so I can deactivate and reactivate that. So I've got the auto fill thing and. It does OTP, but not in the smartest way. So where's. My settings. Settings. Security.
...53Sounds like passwords and authentication. Yes. Oh, because of my contributions on GitHub, two factor auth is required for your account. How exciting.
17:43All right, there's.
...50And all right, so we can go back to that now that GitHub secret is rolled. Not too worried that somebody knew my password in that five seconds, but still mildly annoying.
18:09Okay, so I missed this comment, or I would probably have merged this down. So let's take a quick spin through, because I think this one's ready to go. So we have a public story image. We use the gem.
...31Use the route. Nice. so if anybody doesn't know this pr this one is when we share stories on mastodon we try and include an image and right now that's just our logo every time but we might as well use the little card image that the blog has and then fall back to our logo but overlay our logo so people can get what the heck is going on as they're skimming so the short id the story short id If the image exists, serve it for an hour. Otherwise, give them the height. Check this again. Oh, because otherwise he wants to 404. That's fine.
19:51Oh, this is nice, the way it pulls things together now. So my last suggestion, the big thing was that he should extract this class because there was a bunch of file handling stuff that was all spread out and repeated, like knowledge of this path. This is a lot tidier.
20:29Let me find the image.
...44This part I'm reading more closely because, you know, grabbing other people's content, you always have to be very security careful. All right. This seems reasonable.
21:04Didn't know that one. I really appreciate that kind of comment.
...28Add the logo.
...40Go in the color space, sure. Shrink down. Drop it in the corner. And then there's the brakeman update. Mm-hmm. We have a top level route. Should it be under the story? No, because then it's going to fight with the titles. Yeah. Yeah, that's fine. We'll just keep it as top level. Okay, this is ready to go. Build a screen, right?
23:43make, not will like. Cool. All right, so we got that. I'm going to grab that.
24:07Let's fetch this locally.
Yeah, what even state am I in?
Am I on main?
Oh, I goofed up my alias.
Or I bumped JJ, and alias doesn't matter.
So I can still see the default.
Here's this.
Here's main.
And I'm back.
I was on main.
Yeah.
There were a couple of small things I did, like...
related to scrapers, because the aggressive scrapers definitely did not take the new year off.
So let's deploy that.
And then on social lobsters.
Yeah, so right now, these are all
pushcx https://github.com/lobsters/lob…
lobster's icons and when this deploys they should start including from the stories so i'm going to keep this tab open and we'll come back to it and just to promo we have this bot that posts stuff to mastodon if anybody is feeling real frisky i would love to have the same thing for blue sky
Personally, I'm a lot more active on Blue Sky.
25:50It's funny, there's a lot more programmers on Mastodon.
At least, I see a lot more programming activity on Mastodon, even having tried to find and follow programmers on Blue Sky.
ChaelCodes I think it's the open-source aspect
blue sky client is just so much nicer to use that it it just totally beat out any interest i had in scrolling mastodon which open source aspect oh yeah i do see a lot more open source coders on mastodon especially
ChaelCodes I think the open-source aspect is appealing to developers
ChaelCodes But you're absolutely right that Bluesky is more enjoyable
don't know my kind of middle-aged web developing open you know public languages like ruby and python rather than big commercial languages like i don't know javascript oh well but blue sky is also open source like all the you can run all those server components and
ChaelCodes It is?!
pspspseudo Hmm, would you want the lobsters site to work as the data repository, or would you want it to push to another one?
pspspseudo hi, this is jdpage from the site/irc
i constantly see stuff go down about people running personal database servers and things i don't know you signed in with another hi pseudo i'm not sure what you're asking a work as the data repository or push to another one
I would prefer to minimize our number of moving parts in productions.
JD page, okay, howdy.
So I don't really want to run a server.
I would really like to just have an account that we push stuff to.
I know at proto has a bunch of stuff that could kind of be built into the site.
pspspseudo yeah that makes sense
I would like to dip my toe in the water first and, you know, first let's hit parody with Mastodon and post stories so people can click follow.
The other stuff, I mean, we can come to it.
All right, so got an Aria.
28:27This one. Oh, more specific selector. The slash does not escape any character. It's a divider for the two different contents that should be rendered for normal and screen reader. I had no idea.
29:01So pseudo or JD page have you prefer to be addressed, would you be interested in writing the the blue sky posting bot. You can work off of the template of the mastodon one, but the second part, I guess, is not just the posting but it's also nice to let people link their accounts, so if we go look at like. My account. There is a special field for Mastodon where, just like GitHub, if you jump through the OAuth flow, it would be nice to have Blue Sky in this list too.
...41So yeah, there's a bit of functionality there.
And the OAuth one is, it's a little annoying to test, but worth doing.
I really do like that we can...
know one of the things about being a non-profit that's not super obvious is we don't have any reluctance to send people off to other sites so we don't try to when we link to an article we don't try and force it into a new tab so that you know oh well you have to keep the tab to our site open and we don't try to restrict people linking to their other
pspspseudo I'm realllll tempted haha, I've been wanting to dig into atproto stuff for a while, but I'm reluctant to commit if someone else with more time is gonna grab it
corbob "Link in bio"...
dlamz substack links on twitter get wrecked
social profiles or their personal blog except in anti-spam measures and so i think it's instagram infamously like you can't put links in posts you can only put one in your profile they may have loosened up on that i was never an instagram user but we would rather let you link directly to these things and show them off
31:02dlamz very annoying
corbob as the cool video creators say
Sudo, the blue sky thing has been hanging out for like, what, 18 months?
Two years?
Hold on, where's that tab?
Yeah, so I filed this just about a year ago.
And we had been kicking the idea around for a couple of months.
So Sudo, I really don't think you have to worry about someone picking it up.
Oh, and you know, now that we're a year later,
I wonder if this has been.
I don't know their docs to know if they would put a like yes, we did this and we merged it or if this proposal just stands unedited I guess it just stands unedited because it's been two years.
In any case.
...58Stubs tech links on Twitter get wrecked oh yeah. Yeah, Twitter for a long time is really. Reduced the visibility of links in their. Algorithm. Already printed on OK, so he's just cleaning up my white space error. Let's hide that for a second.
32:30Hello, I said apply and reload now.
milesfoob you might be able to add ?w=1 to the URL
milesfoob oh it worked
reload again i already hit that refresh at the top of the page but it stuck around all right github just three or four reloads just one more reload i'm good for all right so we call this nav which is nice to be semantic yeah it got there eventually i think it got confused because i opened all of these but then i rolled my 2fa token
So they're now in some kind of partial state.
And then it's going to be repeated a bunch of times because we do pagination many places.
I actually feel like we do.
No, no, don't get rid of this.
Why would you delete that?
34:13What an odd edit.
...23That's one of my least favorite games is wondering if somebody has used an LLM coding tool. And this edit is so weird. It's 100% unrelated. And it just obviously breaks the display of every page, because that's the site-wide footer.
35:01This doesn't feel like an LLM, though.
chamlis_ they might've been testing it still looked correct with that enabled and forgot to add the conditional back
This is a FedUMP remembers their previous contribution, because they wrote this helper.
...20milesfoob maybe a debugging artifact that snuck in? to force something to render? odd if 100% unrelated!
Oh yeah, chamless, maybe that.
I usually write true and rather than delete stuff, but I could see both happening.
corbob what chamlis_ said.
Yeah, I guess they are sort of near each other on the page.
That's a more likely explanation, especially from someone who I have never gotten an LLM vibe from.
...49All right, well, I had hoped I was just going to click Merge on this, but...
36:11pspspseudo I had to work on fixing up some LLM-generated code a few months ago and something I haven't seen talked about much is the feeling that you're slowly going insane because you can't get into the headspace of the person making the changes.
corbob Personally I might have just taken out the file check and replaced it with true as opposed to taking the conditional outlll
Happy New Year, Chalice.
Good to see you.
...19You know, pseudo, that is a really good point.
chamlis_ each PR review also features a voight-kampff test
And you could kind of hear that in my voice of like, why would you do that?
What's the relationship?
And then I calm down as soon as Chandler's had a plausible, hey, these things are next to each other on the page.
Yeah.
HPR review features avoid conf test.
You're not running the linter.
Why aren't you helping?
37:08chamlis_ happy new year! I've been pretty busy but I hope to be able to get back into the swing of open source soonish
Oh, great.
Well, if, if you would like open source to contribute to, we're still here.
But if it's anything else, please share what you end up working on.
Because you've been a great contributor to lobsters.
...30Alright, so that one's pretty straightforward.
Anything new show up here?
chamlis_ I want to see the css grid stuff through for sure
not yet windows 95 restarted faster if you held the shift key how did i not figure this out oh man going back to real mode
38:06Ah, that would be great.
milesfoob whaaaat? what I really needed was a way to make windows 2000 restart faster but not a relevant problem for me anymore ha
We had a little activity, speaking of CSS Grid, in the...
There's an issue about deeply indented comments.
...26I think it's this one.
pushcx https://github.com/lobsters/lob…
Yeah.
I'm not sure if this...
is new to you but reddit does dots so there's you know this thing is this far indented and then this is a reply and then this is a grandchild reply it's like oh that's you know it kind of shoves the metadata over a little and at some point you'd almost want to just get to a number but still like this is a pretty clean way to do it
39:11chamlis_ hmm, interesting
chamlis_ we have an upper bound on comment depth iirc so we could plan for every possible case
I probably don't actually need to get into the minutiae of comp files on Windows 95.
...30Yes, yes, we do have an upper bound. The one thing we don't have is a fixed screen size. I use an old iPhone Mini, so I have a particularly narrow screen size. Just makes me a good tester, I guess.
...48You know, as long as...
...57There is a...
pushcx https://support.apple.com/en-us…
not very well advertised feature for iphone users called back tap it's buried in the accessibility settings and you can double tap or triple tap on the back of the phone to trigger the action you want some people set it up with like the camera i set it up with the the rotation lock so my phone is usually you know 90 of the time 99 of the time it's rotation locked into portrait mode
But if I want to show off photos or view deeply nested lobsters comments is the second place position of why I use that.
I just tap on the back of the phone twice and then it unlocks and I can turn the phone and I can read all the comments a little easier.
And then when I'm done, straighten out the phone, tap it twice and get on with my day.
It's a lot nicer than opening the control center.
There's a visual indicator.
We can add a non-visual too.
That's the best practice.
Oh, OK.
I remember writing this helper a while ago.
Styled user link.
Or maybe it partially existed and I pushed more of these conditionals in.
That might be the case.
But this is a nice benefit of having done that.
Sure.
Yeah.
42:21right let's toss that one on let's get this into the notes so this one i went through that pretty fast but when you look at a story and someone is commenting There are CSS styles for whether they are the author, whether they are inactive, like they have deleted their account. That's what a bad class name. I should rename that to deactivated. I've been slowly. And then there's also one for whether the user is new, so you can kind of tell like oh if there's a blue username there's this so what files that user helper. let's not just instantly make a merge conflict for myself let's jump up on main external get program failed repo not found since I fetched. 40 minutes ago, this guy deleted their repo. I, I guess. All right. what was it? JJ get remote remove gray Hatter.
44:04kind of curious about that one because like i never delete my old repos my old forks on github from like i pr'd a typo into this and 12 years later i still have that repo all right so now let's make a new one up on main and we're in user helper so this caught my eye because i've been I've done a bunch of work in the last six months on user profiles to say things like user show to select the status for user will say explicitly banned by a user or user deactivated their own account. This used to just say like deactivated. And then people thought that especially if you're viewing it you're not a regular user people would look at this and think that they were seeing banned users and unfortunately not uncommon thing is if somebody has a fight they might say hey i'm done i don't want to be active on this site anymore at least temporarily or maybe indefinitely i'm going to deactivate my account and then if you looked like oh let's check out that drama it looks like they got banned and especially if they were the target of insults that I am there deleting. It is unfortunate that people think that they got banned for getting insulted. So I improved this and touched a bunch of other things to try and make it really obvious, you know, what happened when it happened. But I see that inactive. And I want it to say deactivated.
46:02because that's the language I've been using and trying to standardize.
But if we can get that difference between banned and deactivated.
So did inactive user.
Oh, right.
So speaking of bad names, inactive user is also another mistake of mine where if you disown your comments,
They go to a system user called inactive user.
And I should have called it like disowned commenter or something like that.
Did not, and it's still confusing to this day.
corbob That's like the GitHub Ghost user...
I have, okay, so no JS, it's just the application CSS.
...59chamlis_ should've called it alan smithee
Oh, I haven't seen the ghost user.
corbob When you delete your account, all of your comments get assigned to this user called Ghost.
Sounds like it's the same concept, just immediately from that name.
Alan Smithy.
Oh, that's a pretty good reference.
It's...
The connotation there that someone is no longer proud of their comment or had executive meddling on their comment is not exactly it, but yeah.
47:33Ah, Corbob, that is really similar.
On lobsters, when you delete your account, you can choose to disown all of your comments and stories to inactive user.
And inactive user is not a good name for that.
You can also, one by one, go through your old comments and disown them.
corbob Former User might be better than Inactive User
it's pretty uncommon but occasionally people are like oh i don't want to get tagged into this old discussion or i had this really strong opinion or just i could have said that better for whatever reason they want to disown an old comment they can't and despite the annoying name of it former user yeah but you can
It's that second use case I just mentioned.
I could go and click back to a comment I made five years ago right now and disown exactly one comment, not all of mine because I'm deleting my account.
And so the ability to do that is what has me hesitating to call it something like former user or deactivated user.
As opposed to just like disowned content or something like that or just disowned maybe that sounds like a triple a game disowned.
there's gotta be like nine games with similar names anyways.
So.
Right.
49:25pspspseudo You could special-case the display of that user to have a "friendly" name
I expect that to be green.
Whoa.
...34Special case, the display of that user to have a friendly name. I'm not sure what you mean.
...53Here we go.
I want the git id.
pspspseudo so it's owned by a user named "disowned-comments" but in the UI, it replaces the spot where the username would go with "(this comment was disowned)"
We're still interoperating politely.
50:35pspspseudo that lets you have neutral explanatory language
pspspseudo special cases suck but this is a special case
That's not bad, actually.
Hmm.
Like if you click through to the profile.
...51It has a reasonably good explanation of the feature now.
This has gone through a couple of revisions, but it explains why we have disowning.
And then it emphasizes
pspspseudo Not everyone clicks through, though
That this is not part of banning.
And I feel pretty good about having the description here on the profile.
When you see it on a comment.
51:22Threads for an active user.
corbob LUL I love that contrast: inactive-user. Status: Active User
Just 13 hours ago, so someone recently left.
That'll be in my mod notes.
...44Yeah, core Bob, that is one more reason.
...54It's the it's the null object pattern for users.
52:10Put that in here.
...17Kajas I know you sometimes drop in any chance you're around i'm looking at your PR again. This one. Not sure if there's anywhere for this one to go.
...46Printing the write to the cache is probably the sensible option. Oh, OK. So Kai did see my last comment and has updated since I last looked. OK, great. Patch the write method and test it through the cache method as that's public interface. Copy original. Catch ename too long doing nothing. All right. That would solve the issue. So this issue was a user had a multi-tag feed. So you can look at like, I don't know, java.rss. If you want multiples, you could say like java, perl.rss, java, perl, vibecoding.rss. And it will end all of those tags together and give you a feed. One user ended together like 40 tags. And it was long enough that it exceeded the file system's maximum file name length, because these get written to disk. That's how caddy serves them. And so with that long file name, instead of serving the page and then like writing the cache and an after hook it just threw a 500 which is no bueno so yeah good we got a issue number all right
54:47That's a nicer way of doing the RuboCop. I didn't know you could address it as standard. I thought the comments still said RuboCop, so that's nice twice. Round two. Ah.
55:31Okay, yeah, this is ready to go. Are there comments, or did I just read the code and understand it because it has good file names and things? Yeah. It has comments.
56:31I kind of wish there was a eBay squash and merge. I kind of wish there was just an interdiff approach like Jujitsu. We'll get there. Maybe East River Source Control will save me. This one came up in chat.
...57It's an odd comment. oh all of the old well we're making it more permissive so the old messages won't fail all right yeah
57:50Do we do these min lengths? I don't think we do a lot of asking the browser to. Yeah.
58:08Do we have a max length? I want to say maybe in one place we do. OK. We do have a max length.
...21Hmm.
...50This in my notes, kind of zipping through these pull requests. You didn't even remember to set up my timer. So I've been streaming almost an hour, which is a good time to remind that this is Lobster's office hours. If you have any questions about the site, the code base, the community, the stickers, you can ask at any time. And then otherwise I hack on the site. Closed.
59:27Totally duplicates 1827. What's 1827? Is this an open pull request or something? I don't think I've seen this at all yet. How did I not see this in our list of pull requests? Must be right there. Okay. All right. Let's come back to this one because it's going to be big.
01:00:14Open graph. If we had anything new, hit the home page. No, not yet. People got to submit great articles so I can see things show up. Only the comments page show open graph tapes, so I decided to add them on the homepage and the user pages. Oh, neat.
01:01:07Stories controller to use Rails application name. I think this is the thing we just touched in the other PR.
...24And they're talking to FedAmp who wrote that other PR. So yeah, I'm not worried about not spotting that one. This does look like a nice improvement. Yeah, that's just a good catch.
...51Title, image. So yeah, there's the existing one, and then the user, and then the homepage. Great.
01:02:18What's the thing they have the user description, the OG description tag? Yeah.
01:03:12It's called about. Yeah. And then, yeah, we don't have the markdown version.
...50Do we want a description for the homepage?
01:04:10If I put it here. Rails is really not oriented towards a code base being a template that other people will grab.
...29Yeah, I don't want to have to explain this to this submitter. Let's just go ahead and take this.
...48We could just do it in one.
01:05:10And then that was home controller, OG. So this is the index. What did that look like in the user controller? Now what did it look like in the stories controller? The script. Yeah. So if we said, property, wuji description, content, colon, comma, Rails application, g description. And then, are you yellow? Expected label. What's my syntax error?
01:06:18Colon. Should be a colon. There we go. And people think I don't use syntax highlighting.
...48You know, this is going to blow up production.
...59As soon as I deploy that commit. That's OK. And I think we're down to one sister site that's live now that I know of, so. All right.
01:07:22All right, so. I'm going to SSH over to prod and we do this off screen because our Production file, I think, has secrets in it. It might. Config initializers production. I only have a sample. Do we?
...56Oh, it's in. config environments production. But the initializer? Shouldn't this be in config environments? Is that just? No, that's a different thing.
01:08:43I guess we do all our overriding in config application.rb. Set. That's probably not quite right.
01:09:38Maybe this will configure as broke.
01:10:27You know, given that display it's going to have the word lobsters the title over it, so we can just put. yeah. see all that.
01:11:22Might as well keep kicking these things out the door.
Quiet Monday, if nothing new is showing up on the homepage in a half hour.
There was just a big meta thread about the homepage.
pushcx https://atharvaraykar.com/lobst…
I think that's actually on the home page still.
Yeah.
This is pretty neat, actually.
If folks haven't seen it, the attempt, the simulation of how things move on the front page is kind of cute.
It's nice for developing an intuition for it.
I have not checked in on that discussion in a day or two, but it's nice.
So there's this, this is merged.
Yep.
I got that listed, open graph tags.
So save story.
01:12:44Oh, making one more thing JavaScript optional. That's great. We are down to very few things, very few features requiring JavaScript on the site.
01:13:04Make sure to unmute. Free reader on. Let me jump back because the desktop audio was not running through OBS. Screen reader on. V-line mod edit. Let's adjust it. Hide link. Save button. Save button. Story saved. Save button. Story unsaved.
...51And what do we have on this one? Let's set this volume.
01:14:02Screen reader telly must suggest hide link. Save button. Space. Error. Can't find story. Oh, because it's. Yeah, if you don't have the. Oh, and if you hit that link without JavaScript, that's going to go in your flash and then just show up randomly on your next page. It's like the GitHub thing that I saw earlier. It's like they're both Rails apps or something.
01:15:00I feel like we do this a couple of times. Hmm.
...47Why is there ?
...54What is this getting used for?
01:16:24Why combine these two guard clauses?
01:17:24Why would you delete that? That has got to break the page.
01:18:07I don't know how deep into reviewing this to go, given that it's marked as a draft, but
...57I swear I recently said something about, yeah.
01:19:06It's over in my personal browser.
...14Let's see what this looks like. Yeah.
...55How did you remove this username? We need it. to use it, I'm pretty sure. I guess. Maybe it's not in this function. Maybe that's a bold edit. I don't know. There's a couple of things in here I don't totally follow. I don't type. I guess that must be dead.
01:20:26They're doing some amount of dead code elimination.
corbob it's funny that things that pose accessibility issues also pose testability issues
I think this might literally be the first async in this file.
...48Yeah, well, we don't have any testability issues because we don't test our JavaScript.
01:21:05I guess they saw that we only called on page load once and deleted it, but I actually liked that expressiveness.
...18Yeah. And this is all the forms getting updated. All right.
...59graefchen So little JS, so that it doesn't need excessive testing. limesO
We do, there is actually a JavaScript bug that drives me nuts right now.
Why don't I put that on my topic list?
01:22:14That's not a great description. There's some kind of 500 where if you are a moderator and you delete a comment, it throws an exception. And since there's It's like a link that is annotated. If the JavaScript falls through, you get scrolled to the top of the page, which is super annoying when I had a conversation where I had to delete like four or five comments the other day.
01:24:01So this one is already in the topic list. Okay. And database gems. Okay. So this one, there's been a issue hanging out for a while and worked through database consistency, which is a Ruby gem for catching, for catching misdesigns and active record where your code is not well coupled to the database so active record introspects on the database for some things but not others and it's very easy for your model and code or model and database schema to get out of sync and since they it is so predictable someone made a gem that detects the ways that they can get out of sync and we used it and made a lot of fixes and then forgot about it. And so... Oh man, if he really did all of the fixes, this is going to be a lot of stuff.
01:25:19Added a code comment at the top explaining the exceptions. Here's the final list.
...30Oh, wow, this is going to be this is really thoughtful. This is a lot of work. Rolling back the migrations and rerunning them, why would you do that?
...49GitHub, yes, I know I have had this tab open for more than 30 seconds, but I'd still like to be able to look at. Things.
01:26:03Okay. So step is six. They just backed up a little. All right. Cause running database consistency involves booting the app. Yep.
...32Sure. I don't think anybody can really refactor GitHub actions cleanly.
...47Only one validated session token. There were two? That's interesting.
01:27:06Really another change. This has happened a couple of times to us.
...32Spec needs action to pass a validation.
...42Sure.
...48Issues listed in this file don't need to be fixed.
01:28:05Oh, yeah, because if we... You know, honestly, this is such a huge amount of work. I'll take that kind of thing. All right. A couple of small conflicts. Probably. Let's take a look. Wow, this is... I expected someone was going to do, like, let's just bump the gem and add a build step. Okay, let's fix one thing. Let's fix two things. Fixing all of them. That's a lot. All right. So let's go through these. Index checker.
01:29:00That's why these checks are disabled. Model has one. because the validation is insensitive.
...20Which model? Maybe comment step. So these are the to-dos. Did I miss a commit? Yes, I missed two commits. All right. Let's go check this one. So it adds the step. Database setup just duplicated. And then regenerate the config. Sure.
01:31:04Yeah, he's really just working through all these. This is great. Def change. Oh, sure. Redefining the column to not be null. I'm surprised you can do them in that order.
...48This should raise.
01:32:05Let's go look at prod. Because if it doesn't, and it sure shouldn't,
...46Yeah, there aren't any.
01:33:37I'm not going to see that on others, but let's see. Add unique indexes to links.
...58These polymorphic joins, I didn't even know you could, Rails really supported them.
01:34:09Nice to have.
...51Hmm. I guess it's fine if...
01:36:21You can see that a hundred times.
01:37:15Getting the length.
...25I missed it on tokens. OK. I don't really mind the line wrap.
...40Someone's reading closely.
...58backed by foreign key without an on delete option a foreign key i don't want the on delete missing no this one
01:38:39See how these are handled.
01:39:06Wait a minute. I thought I was. It was weird that it said start a review. Maybe these tabs are open or I hope GitHub isn't losing my comments.
01:40:26Let's just commit.
...55So if I reload, okay, yeah. Now if I reload, it knows that I had all those comments. They're not lost, good. Thank you, GitHub. I would be very mad if you'd thrown away that work. I would actually really like a tool to export all of our issues and all of our pull requests with all of their comments to almost any structured format that's in the repo. GitHub is getting real unreliable and all that data is locked up in GitHub. It's the only place it is. And I want it in our repo or our tool. And I'm not ready to cut them out yet. So it's got to have some kind of repeated update. I should file an issue about this. Let's put that on the topic list before I distract myself too much.
01:42:24AtreidesNuts neat**
AtreidesNuts hey! didnt know you stream working on lobste.rs this is neay!
Okay.
Hey, Atreides, welcome.
...41Yeah, so I typically stream Lobster's Office Hours Monday afternoons and Thursday mornings, Chicago time. And this is my first stream back from a winter break for the holidays and some family stuff. I wanted to restart last week, but there was... My ISP said no. We were just having wild packet loss. But they got it cleared up.
01:43:35cactusscalp what's the biggest thing preventing migrating off of github?
Biggest thing preventing migration off GitHub.
So howdy and welcome, Cactus.
...48AtreidesNuts that's rough. just heard you talking about github. im definitely considering not using it as my default in 2026. not that im working on anything as popular as lobsters lol
Probably the biggest thing is that there is not a compelling alternative.
There are a bunch of alternatives that are like GitHub Lite, where they have basically the same features and the same workflow.
of a web-based issues and a pull request thing that you can leave comments on i've been using jujitsu for a while now and i would really like to have something that has native support for jujitsu features like change ids like editing diffs i want interdiffs if you've seen the jane street code review workflow
pushcx https://www.janestreet.com/tech… https://lobste.rs/search?q=comm…
pspspseudo I was gonna suggest a lobsters community forge but it sounds like there just isn't a forge that does what you want
got to be here yeah how jane street does code review this has some stuff about it i'll share that link there's one more i want to share i must have searched for it right commenter push cx get hub yeah here we go there's some more notes in some comments i made late last year about github
Not that top one, but... Somewhere in here about jujitsu.
Yeah, so Ctrl-F this one for jujitsu because it's more like six months ago.
So yeah, Cactus.
Migrating would be a really big cost.
It would be a ton of work.
And we would lose the network effects of GitHub.
GitHub has the unfair advantage that if someone looks at our code base and they see a bug that they could help with, they're almost certainly already logged in.
Whereas if we have something that's on a different website, you know, great, knock 70% off the top if we move to something like Codeburg or Forge Joe or GitLab or any of the others.
And that's best case, knock 60% off.
And maybe it's not so bad.
I don't know.
Maybe folks would be motivated.
I just worry about losing activation energy.
cactusscalp thanks for the comprehensive response
And then I guess that's my three things is number one, I would really like something that looks significantly different.
Number two is the thing I said first is I want our issues and our PR data and I want them in our repo because I don't want to be just locked into somebody else's website.
And then number three,
I want everyone to use it already, which I'm aware I won't get number three, but I want it.
But I left a bunch of comments here about six months ago about GitHub where I have been saying that it really feels the last couple of years like GitHub is stagnated.
They haven't introduced significant new features.
They kind of
I think I said frozen in amber.
Yeah, GitHub PRs feel very unfortunately frozen in amber because their popularity makes it very hard to fix the core UI design problems it has with multiple tabs, incoherent timeline, edited commits, missing comments, and now a steady drip of single-page application jank.
cactusscalp I've played with fossil-scm a bit, it's janky and nobody uses it, but the integration of a wiki and issue tracker just really appeals to me
If someone wants to make a competitor to GitHub, and I hear those East River source control folks do,
I think you have an incredible opportunity, because the dominant player is stuck in the mud.
graefchen GitHub also is moving to Azure currently as far as I know. limesLurk
Jujutsu interoperates, so you have your way to a new tool that is much nicer.
Yeah, Fossilisium, I like that.
I used to use track a bunch back in the day, and I had a lot of respect for track and fog bugs.
would like to not run our own forge our own tracker but yeah yeah github is really big has been spending the last year rebuilding as an spa and then is spending this next year moving to azure
And I understand why those are corporate priorities, but none of those as a user and customer are things I care about.
Like the only outcome to me has been that the front end has gotten unreliable.
And it's become a running joke that every time I do one of these streams, we see another bug in the GitHub front end.
I didn't know this.
01:49:34It's very funny because usually with big companies like Microsoft, you don't get these decisions made to pay down tech debt. Like, well, like they claim the SPA is and like moving to Azure is plausibly.
...59Usually there's some business person that goes but the users won't know so no we don't want to spend millions of dollars of development time on that because we won't make millions of dollars from customers because of it and then the nerds say and i say this affectionately as someone who's been on this side of the conversation many times oh but we'll be able to if we refactor we'll be able to develop so much faster and more reliable and it'll be more performant and the users love those things And then you get like one in 10 of these for factors that you want to do and putting my entrepreneurial hat back on. That's probably a fine call actually.
01:50:48timmarinin hi everyone
I don't think I'm the default types.
I think it became a big end.
Howdy, Tim Marin.
Tim Marin of India.
Yeah, big int.
We've been moving over to that.
I don't think there's anywhere we haven't.
01:51:21This is going to have more of those on deletes. Oh, it doesn't. Not bad.
...41Full reasoned session token intentionally have allow blank. Checker only wants presence true. Why do we have both?
01:52:34duplication is.
01:53:06Oh, I get it. He put them all at the top because you regenerate this file. Yeah, that's fine, actually. Most of the reference associations would be fine. Non-standard, but intentional.
...57Okay.
01:54:06You set up from above. Yeah, I don't love maintaining these things in parallel, but if they can't be, okay.
...39that you picked it up and put so much time into it. Thank you.
01:55:01I can see this is really thorough work. add few comments stop leaving comments on my
01:57:05All right.
...15This is needs to be in the review comment. Otherwise, I'm going to forget to click this button.
01:58:14all right man that is this is just a ton of work that's really generous of felipe all right so i have reviewed or merged all of the prs that was big okay
...48So we're also right at two hours on this stream, and I tend to stream for three hours.
You know, I don't have a alarm clock that goes off, so sometimes it's a little short, sometimes it's a long, but I'm aiming for a full three hours because it's been a minute since I streamed.
But this is a good time to mention that this is Lobster's office hours.
pushcx This is Lobsters office hours, if you have questions about the site, toss them in chat anytime!
If you have questions about the site.
and then chat anytime.
So let's see what else is on the to do list we've got.
Let's do two of a guy now.
So I got to do this off stream, which I realize is not exactly must see TV, but a user has emailed me that they lost their.
What was the name?
that they lost their 2FA and they'd like it reset from their account.
So let me just double check that they really own this account.
02:00:05Why don't I just do this in the browser?
...15Yes. And they're emailing me from that address. Okay, yes, this is legit. Let's SSH over to prod. And start a database console. One of those exciting maintenance thing that happens a couple of times a year.
...50And then let's email and say.
02:01:08cactusscalp some of the phishing emails I and my coworkers get at dayjob are surprisingly high effort
So you can log in with just your password.
Now I want to use the reset password low.
...40feels good that one's been hanging out for a second yeah you know no one has ever attempted to well that I have figured out after the fact I guess no one has attempted to fish a change to a lobsters account there was one person who emailed and said I lost the password to my account And I think I, and I'm not sure which of my email addresses I used. And I think he was probably himself, but I can't, you know, there's no way for me to be a hundred percent sure. So I can't give him the email address that's on the account. Cause that could be somebody else's private info and I can't. I sent him an email, but I got the impression he was one of those people who uses a lot of addresses and kind of rotates them for different purposes and privacy. And he just either didn't know to check that one or it was an alias he had turned off. I don't know. It was probably the guy, but I couldn't give him the account back. Only once, though, in what is that? Nine years I've been running the site? Eight and a half? Something like that. Let's take a look at this issue that bugs the heck out of me before I go look at the issues list. It's so funny that...
02:03:25So, Cactus, you asked about migrating off of GitHub.
This... Yeah, sure.
This kind of thing is why... Yeah.
Fetch.
graefchen One in how many users lobster has is small. limesOwo
So I just spent two hours coding on lobsters and I didn't even have to start my local Rails server because we have so many contributions that it could keep me busy for hours.
That's kind of wonderful.
That's so many very generous contributions.
I really don't want to lose those.
timmarinin would love to see atproto become “default internet identity”, but email is tough to beat
So something that had two-way sync to GitHub would be pretty nice.
I don't know if I want to manage like two queues, but there was somebody working on that.
It's in my GitHub messages.
pushcx https://github.com/lobsters/lob…
Tim, you joined after it, but if you would like to see App Pro to become the default,
02:04:46You could start integrating it into lobsters. Changed. Yeah, all right. So this is the... So this slipped in with which one?
02:05:28Oh, no, it's not.
So production is using...
Wait.
Come here.
No, it's modmails.
It's all the...
I get it.
pspspseudo Btw, I did some research because it felt weird to have to go through OAuth against Bluesky to validate if someone owns an ATProto DID, but I didn't turn up anything
So this is... Yeah.
These are all from Chael's recent PR.
And Chael doesn't have a prod backup.
And so her thing is using the new default collation for the table.
pspspseudo but i'm also sort of working at the moment so I didn't give it my full attention
But in prod, we're on a slightly older version of MariaDB.
And so we have the old collation.
Yeah.
02:06:35Yeah, you know, pseudo, could you leave that as a comment? If you can spare the attention or I can just tell me you don't have the attention, please. And I'll do it. But to mention that there's a better flow than OAuth or something else like, because I wrote OAuth because I was just kind of copying from the GitHub integration and the Mastodon integration. If there is a better way to do it with blue sky slash at proto i'm happy to have it i just want a way to authenticate that somebody has an account with a reasonably nice ui
02:07:39pspspseudo It feels like there should be, but i wasn't able to find one. I will take another look after I come home from the gym
All right, so let's log in.
I think this should be cxdev.
I thought I had reset it.
I thought I had a script to reset it.
Why am I doing this manually?
02:08:10Wrong terminal. Okay. So where's...
...55Sorry, making a note to myself. So I need a comment.
02:09:12I need test data.
...19Because the thing is, I usually use a backup of the prod database to see real stuff and test the backup system but otherwise there's just going to be too much mod info floating up on the screen so let's generate some fake data that takes a second to run let's go see if we can just spot the bug
02:10:03So it's got to be a recent edit, right?
...21In case you are tuning in, the bug is that when I delete something as a moderator, a comment, I get jumped to the top of the page. So it has some JavaScript error. That's said for mods, didn't it? Split delete functionality. Split comment deletion for users and mods. All right, so there's a smoking gun. So it's going to be one of these diffs. Probably this one, though. I don't see it.
02:11:29Maybe this endpoint isn't returning the right thing. Maybe the route, well, it's actually happening because I've had to delete comments.
02:12:13OK, here we are.
...20Well, it's at least not an obvious syntax error because it's not getting highlighted. Comment ID is comment get attribute data short ID, which. Looks right.
...42Yeah, we do it elsewhere, that style. And then we fetch with CSRF. So it must be something about that or the route.
02:13:03OK, so that's done. So we have some test comments now.
...12Thanks, Sudo. I don't know how long your message was hanging up there. It feels like it's been a second because I didn't see the chat, Joe. So mod, comments, delete. Why is it here twice? Like, that's harmless, but it's strange. Let's go check the routes.
02:14:23pspspseudo no worries! anyway i gotta bounce, thank you for doing this! this was fun/relaxing to listen to
Thanks.
I get that a bunch, that I have a relaxing stream, mostly by virtue of not being terribly exciting.
All right, so here we go.
Mod namespace, comments, only destroy.
All right, so this one is just repeated.
Yeah.
Let's look at this.
...52So there's a re-parent. That's kind of a tool. I don't know. Site data. Yeah, this is all the same thing. So we'll do comments, domains, identifiers, these things. I'm trying to alphabetize. That was easy enough. All right. So there's that duplicate route go, right? Right. But I don't think that's the bug. So I bring up the console. Just the console. I click mod delete. Yeah, so I got scrolled to the top. And then uncaught error in promise DOM exception, the operation was aborted. And I guess because it's a promise, that's not helpful. It doesn't give me a line number. That's a error. Something happened. Operation was aborted. See, undelete didn't do that. Hmm.
02:16:56So this has got to be the promise, right? The then. What do we see in BIM? Let me delete the comment off screen. So re-render the whole page. That's interesting. I didn't get scrolled up. It loaded the whole page that's interesting, so it did it got a delete to mod comments and then the ID. Action destroy status 200. So did this.
02:17:48Well, then this rendered the whole page instead of rendering just the thing I wanted. Starting a delete, processing a delete, loads the user, insert into moderations, insert into messages, create the activity, updates. All of this is the stuff that's supposed to be happening. Clears the caches or recounts in the caches. I should shove this out to a job. I might fix the deadlock issues.
02:18:49Yeah, then it updates the score.
02:19:03So it completed, and it logged that it completed it. Then it did a get to slash comments. Is it just that this thing is missing like a prevent default? Because it is an A, the comment moderator.
...42Yeah, that's it. It's just missing the prevent default.
...51So if I reload, let's delete. Hold on. I want to be down a little so I can see it. No, you still jumped back up.
02:20:39This fetch with CSRF.
02:21:02Where is it?
...10It doesn't special case the method. Oh, but Rails has the thing where it turns you into the verb, so that's fine. Everything worked. I wonder if it's this.
...31Did it come back with the location header?
...50timmarinin location replace would do it
Yeah, I mean, it would have the same effect, right?
...59Why didn't I see it in the network? How did you do that without doing the network? So we got it. We got all the things. Man. Minitest is being real chatty, but like, where's my delete? Put that back. See, I see the post to undelete. Clear.
02:22:42You know, I see it flicker like it's clearing. And then I don't see my actual request in here. Have I found a bug in Firefox?
02:23:08Let's go look at the mod controller.
...19aha, well, that's just the wrong thing. So yes, number one, it's got this location. Hold on.
...56Alright, that's not part of this recent PR. Okay. So this is just the wrong behavior. Instead of responding with a head okay, it should re-render the comments. Because that's clearly what this is expecting on the other side. And what I am expecting is the user.
02:24:27I have lost my ball. Comment. Show tree lines. Yeah. That one. I don't think we need to pass that.
02:25:32That's exactly what I wanted. That's the bug. That's the bug. I should have caught that. So someone recently submitted a PR to break out the mod comment stuff to its own controller, and I didn't catch they hadn't duplicated the old logic of re-rendering the comment.
02:26:02Let's just go straight to comment. I have false content type. Let's tidy.
...29If you edit. And then apply.
...45Delete. Yeah, we just render comment. Okay. Yeah. I'm doing the thing I want.
02:27:11great there's the bug that was really unfun when i had to delete half a dozen comments because i was it was a busy discussion and so like i pulled one and then i was at the top of the page and then i had to scroll and find it and then i was at the top of the page and i had to scroll and find it and i was at the top of the page one of these days i'm going to change it so that there is a proper like modal dialogue there Because the use case, usage is about evenly split of deleting comments between there's one comment, I'm going to delete it and write a message. And then the other case is it kicked off a thread and the whole sub thread should just go because it's off topic or it got real mean in response. And so I want to be able to fill in a second message that would apply to all the child comments and grandchild comments. I think that would be nice. It would save me some copy and paste. I've only wanted that for four years. Mod features are pretty low on priority. Issue PR sync. Oh, yeah, yeah. I was going to make an issue.
02:28:41And then I think I said sync in one of them. Was it a comment here or on HN? Yeah.
02:29:13Thank you.
02:30:19Like, I guess. Yeah.
02:32:03Of course that's in here.
...28Invasive. Really? That's a real word.
02:33:17I'm gonna say.
02:35:30You know what? Let me just get rid of that.
02:36:16To include it we're not going to get it, I was thinking of. Like if someone leaves a comment. If we have an issue 123 dot txt and someone leaves a comment on issue 123 it would be nice if that comment was represented also as a commit. you know what, I don't need to hold out for that or distract with that.
02:39:07All right, so there's my other issue. How am I doing on time? About 20 minutes left. Okay. Let's go look at the issues. Let's see if there's anything that I didn't give attention to. Yes. All right, so...
...37Looks like Chael organizing her work. And then a bunch of stuff. Let's look at the ones I haven't tagged yet, and then I'm going to come back for Chael's.
...56I don't remember reading this update a couple of days ago. All right. So let's grab this ID for the notes.
02:40:23Right.
So this one.
This one was interesting.
So this person dropped by the chat room to talk about the experience of reading the site.
They really didn't care for the font, but I'm fine with Helvetica and kind of resisted to changing it.
But they brought up font size, which is something that I played around with on stream a year ago where
pushcx https://github.com/lobsters/lob…
I deleted all of the font sizes from the CSS.
Oh yeah, I even linked it here.
So let me share this link for anybody.
And deleting all of them felt better.
Like honestly, the site just looked better.
And I left a comment, but I was seriously considering just like,
finding the smallest text on the site and bumping it up two points and then coming back in a month and doing it again until everything was up at browser default and I could delete everything.
And I kind of, we kicked this around in the chat room and as soon as the font size came up, like five, six people, and this was I think on a weekend, immediately five or six people said
oh yeah I have like a default font size override or a default zoom set or I'm just used to always doing like as I load a lobster's page hold control and like click up twice to zoom and then it's good I forget if yeah I thought Firefox had a way to remember the zoom site the zoom setting per site and
02:42:16That means if I did my very clever plan of ducking bike shedding by slowly boiling the frog and walking the font size up over six months or a year, there is a significant percentage of the user base who would end up really annoyed because they would have to keep changing that zoom setting.
02:43:21Oh, well. I didn't recognize Danny's username. But it looks like I gripe about their work all the time. No idea. But I do gripe about Firefox.
...54timmarinin optimal font size depends on a distance between screen and reader (I remember nice picture about it from ia writer company), on laptop i use 120% for lobsters, but on a phone its ok as is, imo
Yeah, Tim.
And I think it's fair to say that our existing font size is not a deeply considered choice.
It is a like the site creator stuck a finger in the wind and kind of went, oh, this looks reasonable.
And we've just never changed it.
So it's been 13 years.
And honestly, I could really just rather punt to the browser.
02:45:30timmarinin in 13 years the audience grew older and got poorer eyesight /j
It's called a font stack, right?
We repeat this a few places.
Hm.
02:46:05Okay.
...31There's a oh this one's got a comment what's this one for. let's copy this comment because I didn't. recognize why that was repeated. it's not the capitalization is different and I don't know if that matters with fonts.
02:47:02I don't know why this is specified here. I don't think it needs to be. The font size might be doing something, but I don't want the font size. All right.
...40It's not. Maybe I needed the dash m. I think commit does set the description and then runs new, right? Update the description and create a new change on top. Yeah. All right. So I just need the dash m.
02:49:14All right, so we'll get that.
...22This one.
This bug has come back a couple of times over the years.
pushcx https://github.com/lobsters/lob…
Chandler, speaking of CSS, great if you're still here.
1801.
Is possibly a a grid bug.
I know we reverted on this form, but.
This one has come back on Safari.
02:50:01Looks like folks have done some debugging that I haven't seen. Position absolute on 1648. Who's positioned absolutely? Did I read that wrong? Is that not? No, it's 1648. All right. Position. Oh, it's the TS control. I bet that's working around another bug. Oh, that line of code is me attempting to fix this same bug years ago. OK. Well, you know what? If that's it, I'm just trying to delete it. Just checking any other mentions of position absolute. Make sure that we don't have it like in a media query or something as well. No. All right, let's try that new commit command.
02:51:31Who saw it? Taise86 and Caius.
...48Oh, now I'm not on the commit I wanted for main. All right, I'll push it in a second. No, let's just go back. Drop this one. That makes me a new one.
02:52:33great it sounds like this is just a bug in upvoted let's peek at that controller real fast because this might be a 30 second kind of bug yeah you know what i'm gonna throw up the last call banner because i'm about five minutes from ending the stream so if you have questions of stuff you'd like to talk about let's talk about it voted must be in the comments controller right pages zero pages one Did we do anything in controller?
02:53:45Yeah, I'm not instantly seeing if you have less than 20. Oh, so this is over. There's a missing if in there.
02:54:03All right, so it renders what? The index action.
...12If page, if comments. Yeah, so it's assuming if there are any comments that there are more than a page, which is not correct.
...36Just trying to see if that pagination is done correctly somewhere else, and I think we just assume it's not. There's always a page. Yeah. All right, so this is not a two second fix.
02:55:56That's an interesting one.
02:56:3739. Hmm.
02:57:10That's not what I wanted. I want stories. Yeah, so here's that description.
...53know i feel like this one comes up every three or four years maybe it's worth doing oh you know to tie back into griping about github i saw that there was a discussion i think on hn i saw it where there was a project maybe ghost tty yeah
Is it ghost ty?
Yeah.
They have a practice that users can't actually create issues.
Users should create a discussion.
And then the maintainers create issues.
It's a really interesting workflow.
dlamz I saw that flow somewhere else recently too
I think it makes a lot of sense for a big popular project like there's which is you know.
hugely popular.
It does yeah D limbs yeah there was some threat on HN and the last couple of days, maybe week.
and You could throw this into this link into algolia and that'll probably turn up the comment but.
02:59:30I actually kind of like that. It's overkill for lobsters, but I do worry with lobsters. It just happened in the last two months that someone saw an old feature request, I think for embedding YouTube videos, and I had never seen it to triage it because I would have closed it. And unfortunately, potential contributor lost wasted their time attempting to implement it. And I had to close their PR and say, I'm sorry, I'm throwing your work away, which, like, I feel bad, they feel worse, because their time was wasted. And
03:00:26Honestly, if we had users cannot create feature requests, they have to create a discussion.
Maybe that would be better.
Anyways, this is all fine.
There is nothing wrong with this feature request.
I am happy to have it.
dlamz I say ghostie heh
it's just seeing an interesting practice in another repo because as soon as i saw it on ghost ty do you say ghost ty or ghost tty i don't use it so i don't know but as soon as i saw that practice i was like oh that actually is really nice and
timmarinin it sounds like “fish”
know i wrote up the issue ghosty that's that's much better i like that if like i wrote up the issue for exporting our issues on an ongoing basis i didn't remember put these in the scratch
03:01:40If we got to the point where we had issue123.txt, we would sort of automatically have that workflow where users would be contributing suggestions of issues rather than issues immediately. and that that workflow would just very naturally fall out of it especially if i would also prefer like these issues these are just github it's funny it's it's github showing its age but it's very transitional that these issues work very much like a mailing list because that's what they were designed to replace but every other issue tracking system really wants this top thing to be a canonical description of the best understood with the discussion underneath so and i'm going to say something heretical but Jira has a better UI for issues in this regard than GitHub because the top thing on Jira is a block of description that anyone can edit and then you have conversation underneath. And I cannot count how many issues we have in this repo where someone starts a discussion and we kick things around a while and where we get five or 10 or 50 messages later does not have a lot of resemblance to this very first message. And if you are a potential contributor, the only way to know the current state of it is to read all of those messages. And maybe you can shortcut by scrolling to the bottom and scrolling up until you find a summary from a maintainer. But then you have to know all of the maintainers because anyone can summarize an issue. It's so strange to me that GitHub added this discussions tab because that's really what issues is. There's no sense of tracking stuff. I mean, I've got this little bit of metadata. I don't know, it's just transitional. All right. So I'm gonna think about this one, but yeah.
03:06:15timmarinin even if discussions were absolutely the same, there is some sense in separating “issues issues” and “consensus finding issues”
Yeah, Tim, that's a good way to put it.
And, you know, unless the issue opener is a maintainer, who is like, I am absolutely certain of this issue, and I'm not going to change my mind.
They're all consensus finding issues.
...39What was the other one? Oh, this one. I'm over time. I'll pick up on Thursday if nobody gets it. This is, if anybody listening, let me finish this thought. Hold on. Let's get these in the notes. Typography issue and tags field in Safari and pagination.
03:07:22pushcx https://github.com/lobsters/lob…
So my little teaser is if anyone here would like to make a contribution, this bug fix would be like a 30 seconds minute kind of thing.
Just go look in the recurring file.
Read the job.
It has these five calls.
And then extract them up to...
recurring.yaml separated by, I don't know, two or three minutes.
Oh, any of these?
No.
Ooh, and it didn't work.
Huh.
Yeah, and if this is a substack link, it absolutely has a card.
That's weird.
I'm gonna have to debug that.
These did not get their image.
I wonder if I have exceptions in my inbox.
Well, I will go check and we will try and get that sorted out for next stream, which will be Thursday morning, 9 a.m. Chicago time.
Different times in different places, but I hope to see you Thursday morning.
or just around the chat room, around the site, around Blue Sky, which we may even integrate with.
And that's all I got.
Thanks for hanging out.
Take care.