it's been 25 years, I should do that again

Streamed

Rounding up a lot of PRs, finishing a stale one, filing new issues… then on to the UK Online Safety Act and what’s happened in the last couple days. To have fun after that, writing a silly CSS kludge for a desired feature and then beating it into submission.

scratch


topics
  PR review
    added ui to url updating ui to merge https://github.com/lobsters/lobsters/pull/1383
    brakeman issues in auth concern https://github.com/lobsters/lobsters/pull/1424
    help text/issue with brakeman https://github.com/lobsters/lobsters/issues/1426
    reject replacing our time_ago_in_words/how_long_ago https://github.com/lobsters/lobsters/pull/1423
    bump standardrb https://github.com/lobsters/lobsters/pull/1421
    propshaft https://github.com/lobsters/lobsters/pull/1410
    refactor to extract suggestions https://github.com/lobsters/lobsters/pull/1414
  OSA update
  x commit
  x fines
  x risks of process
  x open question on approval https://lobste.rs/s/ukosa1/uk_users_lobsters_needs_your_help_with#c_nep1s3
  x connections
  CSS abuse

maybe precompress assets for nginx serving
  https://github.com/rails/propshaft/issues/158
  https://nginx.org/en/docs/http/ngx_http_gzip_static_module.html#gzip_static
  yeah, great idea, filed https://github.com/lobsters/lobsters/issues/1427

lava layer antipattern
  https://mikehadlow.blogspot.com/2014/12/the-lava-layer-anti-pattern.html
  https://push.cx/large-refactors


update comment

Thanks for all the great comments here, especially the many people who've volunteered to speak with their representatives and policy makers.
I'm hopeful that we find a way through this situation, and based on what [we know of the Parliamentary approval process](https://lobste.rs/s/ukosa1/uk_users_lobsters_needs_your_help_with#c_nep1s3) that seems like the most promising avenue for giving time to make improvements.

I think it's important to highlight that I [fixed a bad link](https://lobste.rs/s/ukosa1/uk_users_lobsters_needs_your_help_with#c_wirxhf).
I wrote "the current, bad plan is that Lobsters will geoblock the UK before the law takes effect" and wanted that to link to the commit specifically to show that [the geoblock is pending](https://github.com/lobsters/lobsters/blob/259b9117edb8dfff289b54a68a17af6461f8815b/app/controllers/application_controller.rb#L98).
I want it to be unambiguous that in the same way the OSA is scheduled to take effect, so is our "current, bad plan".


To round up some other great parts of the conversation, c12 left
[two](https://lobste.rs/s/ukosa1/uk_users_lobsters_needs_your_help_with#c_nep1s3)
[comments](https://lobste.rs/s/ukosa1/uk_users_lobsters_needs_your_help_with#c_irv4m5)
that made a persuasive case that huge fines are unlikely.
Though there's still the problems that
[the process is the punishment](https://lobste.rs/s/ukosa1/uk_users_lobsters_needs_your_help_with#c_xrhbrz)
and [encouraging worse future censorship](https://lobste.rs/s/ukosa1/uk_users_lobsters_needs_your_help_with#c_zhrq6b).

Outside of this comment thread, I've gotten two very useful contacts.

First was an employee of a large site working on OSA compliance.
They made an email introduction to current Ofcom employees so that I can directly discuss these concerns with the regulator.
I've only gotten an out-of-office reply so far, but I primarily plan to ask for Ofcom to publish guidance appropriate to hobbyist and foreign sites.
I'm hopeful that I can talk directly to the people who have written the current statements we have been struggling to understand.

Second, a UK lawyer who has relevant professional experience named Neil Brown has publicly [announced](https://mastodon.neilzone.co.uk/@neil/113791789984235224)
that he is working on free resources to help small sites understand the OSA better.
I've [started talking to Neil](https://ruby.social/@pushcx/113795051071233083) in case hearing directly from a small site can improve his work.
I've been real concerned about the perils of playing lawyer, so I'm really looking forward to a resource that I expect to meaningfully advance the public understanding of the risks of the OSA.

This has all been great progress, and I really appreciate everyone who's contributed here and elsewhere to help.
Especially with the prospects of Neil's resource and talking directly to the regulators, I'm optimistic that this situation will improve.

posted -> https://lobste.rs/s/ukosa1/uk_users_lobsters_needs_your_help_with#c_l5lif8


title
  while my political opinions are the most moral and valid, sometimes people don't appreciate that
  it's been 25 years, I should do that again

post-stream
  reread vim manual (slowly)
  review new literature on concolic testing
    

Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.

Recording



04:26All right.

...33So let's see where we're at. Last stream. Let's do the intro. This is the Lobster's Office Hours stream, where if you have any questions about lobsters, the website that lives here,

...58That's an interesting title. I'll come back and read that one. So if you have any questions about the site, like how things work, the code base, the moderation decisions I've made, if you want to run a query against the database, this is your opportunity. You can pipe up any time. If I can't answer immediately, I will try and stick it in my scratch notes, and you can remind me to do so. And

05:34Let's see what else. Otherwise, if people don't have live questions and such, I work on the Lobster's code base. Or last stream, I worked a lot on writing this post and writing the little bit of code that went along with it, unfortunately. That's on my topic list.

06:08Still working on my lingering cough, so you may hear me clear my throat a bit. And I have my nice cup of hot tea to keep it minimized. I also have the cat. Hello, sir. We have kind of a Jeeves and Wooster thing going on where he's kind of a dummy, but I have to call him sir. If you haven't seen Jeeves and Wooster, it's excellent. let's jump into the pull request review while i'm just kind of getting warmed up and then i'll do the osa update and the osa the online safety act has been just a big stressful distraction on my last stream i described it as one of those games you play games in the very broad sense where your strategy fundamentally is Don't lose. You want to lose as little time and money and energy to a problem as possible. And even if you do well at a game like that, it's kind of draining. So yesterday, the CSS abuse, yesterday I saw a, let's see, I think he's, Justin Duke, who runs the button down email service and is an old coworker of mine, he put up a post and review of his January 2025. And he mentioned this post he had written last month about the order attribute. pushcx https://jmduke.com/posts/post/o…
And it kind of rang a bell. where like, oh yeah, you know, I've read about Grid and Flexbox and I've used them in this header, I believe. I think I went with Flex on this and for the mobile version. And so I've read about order and there was something about this post that sparked a ridiculous idea. And then I spent a few minutes playing with code Make I don't know like a you know a little DEMO scratch html file and then it worked and then I cackled for a while i'm building this up because it's so ridiculous so that's going to be. Just as self care, I want to code something fun because the online safety act is a drag man.

09:05So I'm going to start with a pull request review, but folks can feel free to chime in anytime with questions and stuff. And after the pull request review, there's the online safety act and then fun with CSS. I keep, so like my personal slang is I want to I keep wanting to say like, I'm going to commit a crime with CSS, but then I lean away from that kind of phrasing because the Online Safety Act literally does make running a forum a crime. And it just feels too confusing to be funny. So there was just a closed pull request that went stale. And I mentioned on last stream I thought it was going to go stale. Yeah, so this is... What is GitHub sorting by? Because it is not last activity. Ah, it was sorting by ID. There we go. I hope it remembers that because it's much more useful. So this pull request was a bug fix. And I don't remember the, did I mention the issue number? Is there an issue?

10:49I'm not sure if there's a separate issue for it. I'm not going to go hunt for it. But this one I dropped the ball on they open the pull request and I looked at it, which cleared the little blue. note on the side of it. And I was relying on that. For all these pull requests on stream. And I didn't yet have the stale bot in and working. So there was a bunch of stale stuff too, like those abandoned pull requests by the students. And I dropped the ball. I lost track of this for a while. And by the time I got back and apologized and said, oh, here's a review, here's some small changes, either this contributor has lost interest or they are just annoyed or just life happens. Getting to pull requests as a regular part of streaming is really helpful for encouraging people. So I wanted to look at this one and maybe pick it up myself because it's still a bug fix worth doing.

12:15nogweii sunsYo how's it going?
pushcx https://github.com/lobsters/lob…
Oh, hey Nagwe, been a second. I was just this morning catching up on a bug and you were the last commenter on it. nogweii yup :D
Is that what reminded you that I was streaming this morning? Oh, hey look, and you're mentioned here in this issue too. Well, it's been very busy. There is a... New contributor here Rahul 1990 Gupta, who has done a lot of pull requests to enable rails eight features, so a lot of that to review. Alright, so this one. Right there was some minor UI stuff.

13:09Keep doing that.

...20nogweii nice! sajHype
I wonder if there is a way for me to grab this branch. Yeah. Yeah. Having someone who's willing to take on all of those fiddly config setup and port over our odd background job to a proper job queue. Rahul has been... A very welcome contributor i've really appreciated what he's done. And he sounds like he said something to the effect that he's. If not a junior developer new to rails and so he's been finding it really good practice so that's really nice how that works out. Alright, so I want to, I want to grab this branch and. add to it. And I think I have to reopen to do that. And then I'll land a commit on top in the hopes that that lets me finish this, because I think this is a nice little feature worth improving. So I'm going to take this and jump over to the terminal. So let's get this up because I'm going to be in there in a second.

15:10It's going to be a fun one. Really? So I have this git config set up that is one of those safety things. This has come up on stream a bunch where I want it to force me to be deliberate about how I'm handling branches. But GitHub's default instructions for how to grab a branch and make changes and such, trips it every time, and I have to remember that I'm saying FF only. There isn't a way for me to say, just for other people's GitHub branches, I want this. Paper cuts.

16:03Oh, speaking of paper cuts, a little meta note. On my stream, I fixed... my archive, I fixed a bit of the JavaScript where there's this scroll thing. So you get like a little scrolling widget. I added something so that if you click play on a video, so I often have a minute or two of dead air at the beginning of a stream where I'm getting set up and kind of giving people a chance to see the Twitch notification and join. that means all of these vods start with two to five minutes of dead air so now if you hit play it looks at the transcript and it automatically jumps to one second before i start talking that's fun that was a cute little thing and then all of these are if i scroll in somewhere and click on align hey look we have jumped to that time code of that exact sentence and when i play can see this underline going that is it's a little rough but that is basically the sentence i'm on i didn't want to spend forever polishing it but i'm really proud of this one it's yeah see like right now it's not highlighting the sentence i'm on or maybe i'm in a minute of dead space or dead air but in general let's skip ahead maybe to somewhere it works

17:46must be not talking there or something there we go so see it scrolls the transcript and then the little underline moves as i yammer on and on i'm really happy with that these i've never seen anybody make stream archive pages like these so i'm just kind of making it all up there's no standard practice for these but it's a lot of fun and it gives me an excuse to play with some code too

18:24All right. So I've got that target URL, URL field value is data URL. Yes. And then the only thing was to add a message underneath the URL, which is real similar to, and so I had some example text.

...59And on the story form, we have the URL field. And then underneath, so underneath the title field, there's this little bit of help text that can be conditionally appear. So I'm just going to redo that. So we have this with the URL, we have the button. So it's in the box line underneath. All right. We'll have a P. I'll have to check on this CSS class. I think actions is what I want, but then I'll paste this message. Hello. Markdown isn't appropriate either for the HTML or the JavaScript.

20:24All right. Oh, this is one of my favorite little features. So the way title reminder works, and we're going to go look at that, is if there are one of these common separators, so a title will be like memory allocation in Rust dash by Alice Smith. It opens the little title reminder to say, hey, please remove extraneous components from titles. And if there is an update where this is open, but now there aren't any matches, it opens this little thanks. I like that feature. It's really cute. So we're going to say basically this.

21:22jangomandalorian Hey everyone! πŸ‘‹πŸΌ
So this is what updates the URL. And then What I would really like to have happen, oh, hey Django, welcome back, is if url field, if we are actually updating, doesn't equal data.url, we will open the, url updated view and then we will do the update that's really brief all right so let's go check the css for this because i think there was this so actions right so that's the the indenting and it is a little improper to reuse that but i've already reused it a couple of times so yeah One of these days we will totally rebuild the story form and other forms with CSS Grid, but that is not this stream. That is a open issue. If anybody is feeling like they would like to volunteer and make our CSS, oh my gosh, so much more reliable. The forms right now do a whole bunch of, they're very old school margin float, which means about once a year, something gets a little too wide and then wraps funny or jumps over to the side. It's funny, I have, in my previous job, I was like the designated guy for fixing float layout issues because I've just done so many of them over the years that I have an intuition for cutting through the bugs. And so I was like, I would occasionally get these DMs that I'm like, I hear I should hassle you about I have this weird float and I don't understand why it's over there, but I can't fix this whole page layout. That is not the thing I want to be recognized for as an expert at his job, but all right, whatever, take what I can get. Right. So let's see, there's that. And then, right. I wanted to grab the title reminder class. Yeah. And we will say that this is also true of the URL updated class. And I think that's everything. Let me double check the JavaScript. Does slide down JS reveal things as well? Because that thing had a display none. So it adds the slide down class, which might handle that. Back to the CSS. Yes, OK, so that adds the display block. Great.

24:39So that was, I should actually see this code, especially because we don't test our JavaScript. It's getting to where I'm tempted to have a JavaScript test suite. What are we at now? I'm looking at it off stream. We're at 823 lines of JavaScript. That includes blanks and such. frici Hey folks
Which is like, all right, we're pushing it. One of the reasons I'm okay with it is, hey, Freechi, welcome back. All of the CSS functionality is like these eight or 10 line functions max. More of it is even two or three lines. And so it's very easy to just look at it and test. Oh, we need a page that has a rel equals canonical on it, don't we? nogweii 2.3k lines? Yeah, I'd definitely feel like a JS test engine is needed
No, I can hack up the server to always do it. That'll be a lot easier to find.

26:002.3k lines. I'm not sure where you get that number. We only have 823 lines of JavaScript. If I said 2.2300, I was trying to say that most of these JavaScript functions are two or three lines. nogweii oh, 823 I missed the leading 8. whoops LUL
And the really complicated ones like this, I mean complicated, the long ones are like 10 lines, but there's not a lot of ifs, there's not a lot of conditional. Yeah. So. So this hits fetch URL attributes, which is. Oh, that's.

...51What is this route? Stories fetch URL attributes. which is here we go. And we will go ahead and say that.

27:12All right, so we're going to change from example.com to example.net. Does that work? I hit fetch. Hey, there we go. That's the exact thing I wanted. I figured this would work, but the number of times I have written three lines of code and then the world is on fire, it's pretty high. All right. So let's delete that and then grab Git. That's good. That's the CSS. That's my help text. All right. Helps to write a commit message.

28:24So where did my GitHub instructions go? Because now that I have this commit, why does it keep collapsing these? It says jump back to master, merge, no fast forward, patch one, clicked. And we'll push that up.

29:08Can't type this morning.

...55so .. the typos being sick has really messed up my sleep and so i can see that my typo root rate is through the root oh my god i can't even talk typo rate is through the roof and obviously i have a lot more disfluencies than usual here on stream and then if you look at my recent comments including here even where i am trying to be very careful i am making silly little grammar mistakes where i'm leaving out words like of, or to, or if. And I had a Mastodon post where I said, like, I wanted to say my understanding is, and instead I said my understand is, which, God, that would be terrible business speak, right? In the same way, like, my ask is, my understand is. God, I hope nobody actually does that. I feel like I just whistled past the graveyard with that. But it's really frustrating to see my error rate go up so high, especially when I'm trying really hard on this hard topic to communicate clearly and be very deliberate. All right. So I had peeked at this pull request from Rahul. We're going to... Oh, yeah. I should put this in the notes.

31:27Here we go. We will say... Added UI to URL updating UI merge. OK. And then. This one came out of. This one came out of refools. Other pull request. That is adding active job. ActiveJob is the Rails built-in background job processing framework, and it comes with a sort of sub app called Mission Control. It's a rack app, so you can just mount it in your Rails app under some URL. But because it's a separate Rails app, it doesn't share authentication automatically. And I said, hey, let's see what we can do here to allow it to reuse our existing authentication so that all the moderators can see the job board. And it looks like Rahul figured out that he could make it a concern, which is it's just Rails wrapping up a really common Ruby pattern in a really clean way. So it's not a ton of magic like callbacks or anything. And so this ends up pulling frici Ah relic code.
authentication code which is you know this is some of the earliest code in the code base if you look at the the blame on this stuff he's touching it runs straight back to 2012 because i've had to touch very little of this and it you can kind of i always spot it because jcs when he started didn't use much url generation And so where you see things like explicit string paths, that's one of those big markers that it's code that JCS wrote early on. Later on, after, I struggle on the exact timeline, but after a while, he started getting into using the route generator. But anyways, the earliest code, the err code, pushcx https://mikehadlow.blogspot.com…
One of my all-time favorite blog posts, because I've seen it so many times, is this one. The lava layer anti-pattern. And there's a lot of words, but I'll scroll down to the image and you'll get it. So time goes up in this. So like here's the earliest version of lobsters, where Routes are just strings very often in the controllers. And then second, like, oh, well we can migrate to URL generation and some of them get replaced, but not all of them. And then, oh, we can also do this other thing. And so when you have these, these incomplete migrations, it's sort of like layers of lava that come out of the volcano and mostly, but not completely cover the previous ones. And so then the net effect of after you've been in a code base for a few years, pushcx https://push.cx/large-refactors
is you look at how something works and you see like four different ways to do it depending on the age of that code as soon as i saw this it was one of those ah you've put into words this thing i have been seeing for years i fell in love with this post actually i have a little yeah yeah i'm kind of rabbit holing but this post i wrote about large-scale refactors is kind of where i've gotten a few years later with it and i'm the the clacking is me throwing these links into the scratch off stream here but the god i'm already going to start the dumb cough this is going to be a rough stream So yeah, that's a favorite post. This is working in a very large code base with a very sophisticated team at Stripe. Seeing the kinds of things that people had to do to wrap these really large refactors to avoid the lava layer anti-pattern was really interesting. And some of it is just a limitation of languages. There are very few programming languages where you can load FooLib version 1 and FooLib version 2 into the same running program. So this is all fine. This is all ported directly. I'm kind of rereading this to make sure the code didn't change. The GitHub UI could be clearer about moved code, but I understand why that's a really, really hard problem. Ah, right, so this one... did review this a little because i had hoped that he would look at it overnight because rahul is i believe operating on india standard time so he's basically 11 and a half hours off from me so last night i figured he was starting his day and i threw him a couple of comments where i think brakeman which is our security scanner that tries to prevent cross-site scripting threw some warnings at him because these changes are wrong they would end up displaying a bunch of raw html that we actually know is safe so all right i have to wait for him to finish touching those great can i just

38:36frici oof india, CST -> IST is a pain for discussion/review flow
yeah a big chunk of my in-laws work or i'm sorry live in india standard time and so i am very familiar with the set an alarm to wake up so that you can have a birthday call to someone or stay up a little late so that you can have a happy anniversary call to someone it's it's a fixture in my life Easy cat. It's okay. I unzipped my hoodie.

40:11I could do the same thing I did for Yawaramin, who didn't finish that PR. This one, Breakman, it is an excellent tool, but it is, well, I mean, the warnings that come out of it are kind of scary. And unless you've played with it for a while, it's not always clear why it's warning. And if you're not real comfortable with a code base, can be very surprising and there's one thing the one ui thing i understand why they're like this but there are certain harmless changes you can do that can cause it to find code that has been marked as safe and logged as safe to ignore with a note and everything and then brakeman will say i think it changed or think maybe it changed And then it will give this big warning, but its UI doesn't say ahead of time, oh, also, at almost exactly the same spot of code, I have this old note to ignore code that no longer exists. And so it's not clear that something has been edited. You really only see a UI of there is a new problem rather than anything that tries to say, hey, this looks like you just touched this code, and here's the old note. And that's I understand why the way their signature code which is very smart works it's a very hard problem, but it does mean that for first time contributors break man can be real intimidating. I wonder if there's. Actually, you know as long as i'm rambling about that one. Now that it's happened a couple of times. And I recognize what the pattern is. Let's make a note to the contributor doc.

42:41what i want to say here i want to say that they are not so much harmless as they have no effect what's the adjectival way of saying has no effect not idempotent right like harmless meaningless syntactic minor changes near known risky easeout ineffectual?
code so if you get an error out ineffectual yeah that's look at that i can't even spell changes a lot of people are going to get vip on this stream by catching my dumb typos and such all right so if you get an error out of it

43:58easeout not to imply ineffective
yeah not to apply ineffective i'm just going to leave it as minor changes, I think I think that's vague enough in the right way. So if you this is reversed let's put the actor version in the sentence so break man warnings you about code you didn't right. frici So *if* brakeman?
don't panic it's probably fine. You can, how do I want to say this? gsora_ hello folks!
frici Hey gsora_
You can look at config breakman ignore. Oh, actually, I don't expect anybody to read config breakman ignore. Like, I understand it, but that's, It's this big JSON blob, and it's perfectly clear to me what's happening because I've looked under the hood of Breakman. easeout good day :)
Yeah, I'm going to... Let's say the useful thing first.

45:42See look here's one of those grammar mistakes I said I think I said out loud, so if break man warns you, but I wrote so brick man warns you that's the kind of silly little grammar error that I keep making when i'm tired.

46:12And I actually, like, I'm going to get to it later on the stream. The CSS abuse, I actually stayed up like half an hour, 45 minutes later than I meant to coming up with that ridiculous hack based on Justin's post. So let's say explain breakman, which has intimidated a few computers. Push that up right now.

...51And I think this one, I especially wonder if it has prevented people from opening PRs because the way I see contributors, especially the more, the folks who are either junior devs or new to Rails have leapt into strange breaking changes like the ones that are in this pull request or have sounded kind of overwhelmed by it so i hope that helps it's a little i almost want a monkey patch break man so that in our build some equivalent of that of like hey if this part of your build is failing on lobsters It's okay. Push it and Peter will help you sort it out because it's complicated.

47:54Let's put that in line. You know, instructions are so much more effective if people see them right at where am I? If people see them right at the thing they are trying to do. So let's grab this.

50:29hey good morning he's out yeah i should have said hello and of course to gsor as well we're doing a pull request review and then into online safety act and then css abuse someone gets

51:10It's not help text, what would you call it? Assurance?

...41I think reassurance is a noun. Grammar. This is a feature request. It is a good first issue. I need like a weird label. I added that tag for visual design issues. I should add one for I'm doing something weird or I want something weird because sometimes people really go for those.

52:29tooxx_96 hello Hope u doing great
Oh, hey again, talks.

...39All right, so there's there's a feature request. This is one of those little paper cut kind of issues like the URL thing. You know, I guess it's funny. dr3ig you a word just before the link
I want to spend some time on the stream doing a really fun bit of coding because of the stress of the USA. And I think I am definitely rabbit holing into These nice, I left out a word before the link. I just, yep, you're right, I did it again. That's clearly the theme of my last couple of days. I just added. Thank you, Dre, good spot. If you weren't on earlier, I have said that my sleep has been messed up by being sick, and so I just keep making these dumb little grammar mistakes. So there's that, and then there's this, and I looked at this in email, and I'm going to reject it. So we don't use the internationalization framework in Rails. I mean, there's a little bit of indirect usage where we use pluralize, which leans on I18n, so I can't actually pull it out. which would be a little tempting because it uses a fair amount of our RAM size. pushcx https://push.cx/stream/2024-08-…
That one, you got to go way back a bit, but back in this one, Beirut and I realized that i18n is actually a big part of our, it is a non-trivial part of our memory footprint, and we don't use it directly. So on Rahul's other pull request, we have a helper named TimeAgoInWords and it bit him that there is an existing Rails helper called TimeAgoInWords that we're shadowing and something about the way that works made that unreliable. Like either he was getting a bug or it wasn't properly in scope and getting preloaded in the code he was writing perhaps and so the wrong thing was happening or an error was happening because its arguments are slightly different and so i had said on that other pull request well please just rename our helper and let's keep using it but then he opened this pull request to drop our helper and use theirs and i'm going to reject it because i don't want it I am happy with our wording. And I actually, I think I talked about this last stream. I really dislike that it says things like less than a minute ago. And where's the other one? So he tweaked some of it to get closer to our thing. But it ships with a bunch of stuff where it says things like about x years ago, and if you see a timestamp that is like five years ago this comment was posted, you know that's not accurate to the minute just by the fact that the unit is years. So the word about or less than is redundant.

56:26What was the other one? I didn't include in the notes the other one. Let's grab this and drop it in. All right.

...55Might as well add the link to the issue.

57:30So that noted.

58:32Thank you.

59:12think i'm gonna one of the things i don't like about this is that by using the internationalization framework the view code says one string or time ago in words this documentation says one string and then a different string appears on the page and there's no function call to follow it's just sort of indirect

01:00:31That's not too discouraging. I really do. I appreciate where his head is at with this one. This is along the line. Actually, let me say that.

01:01:23like it's it's similar in spirit is what i'm trying to say and i see that i just i don't want it it's one of those bits of copy that i'm real nitpicky about all right so i don't remember if i talked about this on the last stream because i'm pretty sure i merged this just an evening while alone but caius who is the maybe a very familiar name to folks who read the site he posts the what are you doing this week and what are you doing this weekend threads that i think are a wonderful bit of community building i i really like them they're not They're, you know, we have slightly relaxed topicality on them because especially on the weekend thread, people talk about, I'm going on a hike or I'm celebrating my birthday. And I think, I think communities need some amount of that just so people can talk about social stuff or understand like, yes, we mostly talk about programming, but all of this stuff, like I've been sick, so I'm writing more bugs. You got to talk about that human stuff somewhere. So he has been incredibly reliable about posting those threads for years. And Lobster's lore, fun fact, it's not automated. He has a calendar reminder, and he does it by hand every time. So something ticked for him in the last week, and he was like, wait a minute, I'm a professional senior Rails developer. Lobsters is a Rails app. I could contribute to Lobsters. And he opened a couple of pull requests, one that updated our Rails version. I think there was another one I already merged, and I'm blanking on it. Yes, YJIT in the test suite, which is, that's a nice oversight to catch. So the test suite should hopefully run a little faster on these builds. dpk0 re relaxed topicality, [insert rant about the time someone flagged as β€˜off topic’ my β€˜what are you doing this weekend’ reply about a medical problem i was dealing with]
And then also there was a bump to standard RB for the new Ruby, which includes just, this one is mostly just a change to gem file lock. And I appreciate this kind of, Oh, I didn't know this Rubyism. What is this? Silent stream? I don't think I've ever touched this code in the code base. Let's take a look at that. That's in utils.

01:04:27tooxx_96 did you work with django before ? if yes how does it compare to rails ?
Streams collect. What is this code? Okay, so I touched it once. This is going to be like a RuboCop commit. Yeah, that's a RuboCop commit. So I haven't actually edited this code and I don't know it. Talks, I'll answer in a second. Let me figure out what this is because it's an interesting little, oh yeah, so it's from 2013. Who uses this?

01:05:03The email parser. dpk0 very cool that Caius is now making Lobsters PRs!
nogweii Mail.rb might just do some `puts` calls?
dpk0 hopefully you don’t have to geoblock the UK else someone else will have to post those threads :-/
uses it to call read from string which huh i guess our the email parsing we're library we're using yeah well dpk yes especially because gaius has been such a long time contributor to the community dpk0 oh god mail.rb
nogweii mail.rb is a common library for handling email
dpk0 is that the gem that’s just called β€˜Mail’?
yeah i don't know what's in mail rb oh god it's starting so i don't know mail rb and i guess that's jcs shutting it up because a lot of stuff works on dpk0 right. eurgh. i have bad memories of that gem
nogweii yeah that's what I'm referencing @dpk0
Cronjobs. And I do know that Cronjobs, if they produce any warnings or errors, they will email you by default. And so that's probably why he wrote this code. So I am going to let that sleeping dog lie. And we are slowly moving to Action Mailbox. And actually... Yeah, there's a little bit more wiring I have to do for that. And then... This is maybe dead code very soon. Anyways, I didn't know a file null either. But thank you, Daphne and Nagwe, for explaining MailRB. Oh, I didn't realize Caius is in the UK. Oh, shit. God, I... So I joked in the chat room with Caius that I've never filed it as a feature request, but if he's a experienced Rails developer, maybe he would especially like to take this, but I think the site would benefit from having a Caius bot that posts those weekly threads that he does. Not that he's been unreliable or I don't love him for it, but we also have Quarterly job threads. We have annual post your battle station threads, which are like post a picture of your desktop, physical or screenshot. And then I want to say there's one more yearly thread that I'm blanking on right now. dpk0 yeah, i used to hang out with Caius at hack days, he’s a cool guy. dunno if he’d remember me. not like hack days are a thing any more anyway
And I think it would be a nice feature to have a bot that posts those sorts of things automatically. And maybe it would be especially delicious if Caius... wrote KayaSpot. I would absolutely name it KayaSpot. I'm not being cutesy about that name. I think it would be a very worthy naming because he's done those weekly threads for years. All right, so this is good to merge. And I will fix the GitHub pull request or merge message that is backwards. I wish I just had a button to swap the title and description. If anybody else uses Calibre, when you edit the metadata for a book, it is such a common problem that author and title are swapped that there's like a button in the UI to swap the author and title. And I would like to have basically that for merge messages. All right. So that's nice to have. tooxx_96 dont forget about my question plz
So that was 1421 oh I wrote the wrong. wrote the wrong message. frici don't think those "what thing or post battlestation threads" should be automated tbh. Them being manual gives another reminder that it's a human site run by and read by humans too. Not just random code things about random code things. (if that makes sense πŸ€”
frici )
So that was bumping standard rv oh yeah talks that's a great one to come back to now that I finished the thought about the pull request, thank you for the reminder So yes, I have worked with Django professionally and.

01:09:33frici Sorry I broke your concentration there LUL
Yeah, Fritji, I take your point, but a bunch of things, a thing that happens very often is, well, very often, a couple of times a year, someone thinks that we have monthly job threads and creates one, or they create one of those threads real early. So I've had, we had people post, which one? like one of the quarterly job threads got posted like three weeks early so there's kind of a thing where it's really tempting to be the person who posts one of those regular threads because you get all those karma points but then that encourages people to like post earlier and earlier and I don't want to be the no fun police who is like oh The quarterly job thread was posted six minutes before the quarter actually started. Like, I don't want to get into that first post kind of stuff that was on Slashdot for so long. frici Ah that is very fair
So that's why I lean towards scheduling it. You know, maybe, Fritchi, the right thing to do... Actually, that's a really good point. No, hang on. Going back to your point, I've talked about... how I would like to reduce how strict some of the rules are. So that's a great idea. So we have, oh, I'm even on the line. We have this code where brand new users are not allowed to submit domains we haven't seen before because very often this is self promo, which is a bad way for someone to start out. And less often it's just off topic because they're like, oh, here's a thing about a tech business and this site looks like Hacker News. So I'm going to assume the topicality rules are the same, which is an easy mistake to make, but frustrating to clean up after. And I would like to make this more permeable where a lot of these checks that are related to someone being a new user, we take their story and we stick it, the form object, and we like serialize that, stick it in the database in a queue, and then we tell the person who invited them, hey, someone you invited and is a new user just posted an article. Why don't you help out and check that it's topical and not self-promo? And then their inviter could approve it. And I'm not super dialed in on exactly what that rule is. It could be like, for the first 12 hours, their inviter could approve it. And then 24 hours, their inviter's inviter. Or after 24 hours, anyone who is a member that is active and in good standing, something like that, could see this kind of queued story. And if I build that story queue, which is where a bunch of that standing stuff that I've been working on on stream gets to, then kaios bot can post the daily and yearly and weekly and quarterly threads into that queue for a human to approve that's actually a really nice way of balancing it so it is not like there will be stories on the home page that say a bot did it i guess they would i guess on those we could rewrite it so that whoever sees it in the queue and approves it gets their name on it and it's pre-filled with the template, there's something there. I think that would be really nice. So thank you. I appreciate your point. That is a really nice little touch. So talks. Talks I haven't forgotten.

01:13:42dpk0 slightly choppy audio, might be on my end?
So you asked my opinion on Django. I have worked professionally in it for, I think if you added it up, something like five years. nogweii audio seems fine to me
Slightly choppy audio. I have the volume thing open.

01:14:02dpk0 okay, probably my internet
Where is it? See? I have the volume thing open for the workaround. All right. I hope it's just you, Daphne. Maybe try reloading. Sorry for your hassle. So literally yesterday, I was griping online on Blue Sky about how I can't use tools that are written in Python because they just keep breaking regularly. dpk0 it’s not raining there in Chicago, but it is snowing here in Berlin πŸ€”
I have this embarrassing situation where I have worked professionally in Python for years and I can't keep a working Python environment going either for tools or projects, although I haven't had a Python project in years. And someone pointed me to UV and it does exactly the thing I want. stay warm so embarrassing aside aside i've worked with django a lot and my opinion oh i've also twice i have inherited django code bases from adrian holovaty who is one of the co-creators of django tooxx_96 especially compared to rails
So I inherited the code base he wrote for the Washington Post and I worked there for a couple of years. So I've touched a lot of his code. And I've also touched his code on every block, which was a project he did after the Washington Post that I'm shortening the story, but I've made contributions to that code base. I don't want a rabbit hole there. So if you are deciding between Django and Rails, my answer is if you already know Python or Ruby, use Python or Ruby. If there is some library that is really well suited to the project you're going to make, That's how you should decide between them. I think they're both excellent, mature projects that are very similar. I prefer Ruby, so I work in Ruby. But having worked in Django, I think it's fine. tooxx_96 if i start from 0 ?
I think if you are deciding between Django and Rails, you kind of can't make a wrong decision. I would say if you're starting from nothing, go through the... The there's got to still be the so go through Django tutorial at least the first part or two to get a feel for it and then go through. pushcx https://docs.djangoproject.com/… https://guides.rubyonrails.org/…
The rails getting started guide. So I will paste both of these links. Depending how experienced you are with web programming and how much you end up fighting your Python environment setup, which is my personal. tar pit. What is it? My personal quicksand. Here we go. One of these will feel better to you. That's it. tooxx_96 ok thnks
That's how I would decide between the two if you're not familiar.

01:17:40know also if you do choose rails there are lots of little hobby things that you could practice on and you will get experience you will get feedback from a very experienced rails developer all right so that's merged so this one is neat i just traded email with rahul yesterday about this where he's tooxx_96 hobby ?
I don't think this one's ready for review yet, but we'll give it... Excuse me. Yeah, I gave it a quick skim. I don't think there are any... All right, so this one is pending after... I'm not sure what you're asking, Tux. Can you say more? This one is after Spock's departure. Okay, I'm just going to punt on that one for now.

01:18:37So I'm going to just open up his other three PRs. tooxx_96 sorry english is not my first language didnt understand what you said hobby project ?
So Rahul here, he said he's not especially experienced with Rails. I'm giving him lots of feedback about Rails styles and practice projects as he opens PRs. tooxx_96 oh i get u
That could be you, Tox. I don't know how I said the word hobby. Maybe what I wanted to say was practice project. nogweii yeah, as a personal project rather than professionally
In English, hobby just means something you do for fun. Lobsters is a hobby project for me. It's certainly not any kind of business. tooxx_96 ok ok understand thnks
Thanks, Nagwe. Better saying. God, I just can't talk today.

01:19:37What's your first language, if you don't mind me asking?

...45tooxx_96 french
tooxx_96 and arabic
So is this guy ready to go? Ah, French. Bonjour. And Arabic. Ah, there's a combination. Okay, there's some conflicts because of, this is probably because of either the Rails bump or the Ruby version bump. Why did he spend a lot of time on a test? What did he fight? So you added that and that. This is the most satisfying diff I have read in a while. It's not that I hate JavaScript or hate Node.js or anything. It is just a thing I don't want to have to explain and complexity I don't want to have in the production build pipeline that We already have complexity from keeping one production environment working in one programming language with RBN. Having a second one with Node.js, it's just complexity I don't want anymore. This is so nice to be able to drop a big dependency.

01:21:28So... tooxx_96 now that you re talking about js what is your experience with hotwire did you like it ? that what is not available in django ecosystem compared to to rails
have to double check that this is a valid refactoring especially there was a little confusion earlier in this pull request about how light and dark work and then this is just kind of rearranging things this is so i really appreciate that rahul is doing these kinds of things because i get pretty frustrated With this kind of like you just have to chase around how importing changes and all these fiddly little things, so I really appreciate that he seems to enjoy these. And then. oh that's beautiful so there goes the meta name equals story flag and then he did. Yeah, I'm blanking on it, but I think you're here. Who caught this on the last stream or the stream before? But someone pointed out that I was misreading Rahul's comment. dr3ig yeah, the data attributes
Oh, I think that was you, Dreg, because I didn't name them in the pull request. Anyways, I really appreciate that. This code looks so nice. I'm so happy with this. Yeah, the data attributes. Yeah, that was you that got that. Well, I just want you to take a second and say thank you again because this looks so clean and clear.

01:23:02So I can do foreshadowing here looking at this pull request. dr3ig just wait until you deploy it first :)
Lobsters only serves JavaScript if you are logged in. If you are not logged in, The site serves you no JavaScript. It is one of the reasons it's quick. Zero JavaScript on lobsters unless you're logged in. All right, so put that in your back pocket because we are going to come back to that when I start abusing CSS in, I don't know, close to the end of the pull request. So call it like 45 minutes, an hour, right? I'm kind of ballparking. So... And then here's more of this. There is so much just churn in here. pitrapen without sprockets, does it mean that JS isn't minified?
And I love Rahul for taking it on. Okay. Without sprockets, does that mean that JS isn't minified? My understanding is it will not be minified, correct. And Especially given that we only have 823 lines of JavaScript, the benefit of minifying over just gzipping, which NGINX does for us automatically, it's tiny. nogweii @Tooxx_96 I'm not pushcx, but I find HTMX more intuitive / helpful than Hotwire. Especially like that it's not tied to a specific framework
It's tiny, like 5% of 823 lines. Or what's the file size here? 25 kilobytes? Yeah. pitrapen fair enought, just calling it out. What about bundling of JS into single one, does that still happen?
so yeah, talks asked about hot wire. Let's get back to that. And, and Nogway has an opinion. I have only barely played with hot wire on a, a toy app that I made so that I could play with hot wire and other things. nogweii @pitrApen propshaft says no, use HTTP2 parallel requests, they're cheap
I don't have enough experience to have an opinion on hot wire. tooxx_96 @nogweii django community loves htmx
If I had more spare coding time, yeah. And then Nagwe beat me to answering Peter Apin's question. That is exactly my answer, is we serve with HTTP2, and that takes care of it. I don't have direct personal experience, but I've heard that answer many times, and I think that's fine. I've looked at HTMX a little bit. nogweii @pushcx just speedy gonzalez over here :P
All of the code looks really nice. I'm kind of tempted to make a test project to play with it. Yeah, or another stream regular. Oh, god, I'm blanking on his name. It's three letters, ARB68. pitrapen I've been out of rails world for 7+ years, no idea what the replacement of sprockets is nowadays
is also really fond of jumping to my conclusion before I can meander over to it.

01:26:44I want to echo his language back to him because this was Rahul's good idea.

01:27:48nogweii @pitrApen propshaft is being pushed as it, though there is also *-bundling gems. (css-bundling and js-bundling) which integrate the classic node.js build tool pipeline with Rails
dr3ig speaking of gzip, i remember seing some issue about Nginx and propshaft: I think the gist is that without the asset pipeline gzipping assets, Nginx has to do it on the fly for every request (not sure if there is a config to cache the results) https://github.com/rails/propsh…
nogweii DHH has taken the opinionated stance that build tools should die (to make it hyperbolic)
I want to be clear about who's doing these actions.

01:28:20pitrapen sounds good to me haha
dr3ig but i don't remember the conclusion to that issue
Let me catch up here.

...29Well, thank you for these answers, Nagwe. You definitely know more than I do about all this. NGINX has to do it on the fly. nogweii @dr3ig yeah, but nginx has been doing it on the fly for thousands of requests anyways :)
Oh, that is an interesting gotcha, Dreg. Oh, good. DHH has an opinion on something.

...52Revisit, hold on. I'm gonna, so this is the link that Drake just gave.

01:29:23frici DHH has an opinion? what a singificance must be a day ending in y sailsThink /s
nogweii @Frici LUL very true LUL
That's interesting.

...42dr3ig @Nogweii i thought for the asset pipeline with sprockets, they sprockets would generate gz files and nginx would serve them from disk
Yeah, so I'm reading this thread here and I'm kind of dreading seeing the name DHA to the top of a comment and then seeing some really strong opinion that dismisses what other people are saying.

01:30:24You know, this is almost exactly the code that I was writing in my head.

...37dr3ig sorry that i don't know the conclusion to that issue, and it might be just fearmongering. maybe it's not an issue anymore.
nogweii @dr3ig I don't recall it doing so, but haven't paid attention for a while. I know that nginx requires specific opt-in config to serve pre-compressed files from disk
The code in my head was a little bit more like dir.glob to find all the JavaScript and CSS files. And then... nogweii https://nginx.org/en/docs/http/… this is the magic nginx module that handles gzip-on-disk
loop them and just shell out to call gzip and leave them on disk next to it and then probably tweak the nginx config to look for a dot gz for anything that ends in css and js which is a little you know it's very custom to our setup but hmm

01:31:26Let me put this, I'm going to put this into the scratch.

...37So I'm tinkering with the scratch here.

...45I think this is 10, 10. And then I can't keep track of my clipboard. We're dead.

01:32:07What I really want is this.

...29The magic nginx module. So I've been reluctant to add nginx modules. Unless they come with Nginx by default. Just because I... Not built by default, should be enabled. nogweii it's part of nginx's stdlib, dunno if ubuntu compiles
Yeah, I don't know if that's on by default in Ubuntu's package.

...58gtfrvz very very likely
It's part of Nginx's standard lib, yeah. nogweii Haha!
Haha, Nagwe, I got there before you.

01:33:13That is the exact find the .gz file I was talking about. So let's put that in my notes too.

...29That's actually like... All right, hang on. All right, that's so little code. I want to know if... Oh, no, someone is trying to install it. Well, that's six years old. Is there a way? Yeah, see, like a decade old.

01:34:01nogweii @pushcx ssh into prod, run `nginx -V` to print version & all compiled modules
This one has a recent date. Those dates on Google are pretty unreliable. But we're going to read this, configure Nginx. Oh, thanks. That is exactly where I was about to get that way. So let's.

...33nogweii gzip static is in there!
What am I looking for here? Hey, look at that. There's Jesus. That's great. Oh, man. Well, thank you, Drake and I'll go you've you've made that very easy alright so let's let's file that as an issue. And on issues new issue.

01:35:47Dreg, Nagwe, do you mind if I name check you here? nogweii IIUC, nginx's behavior won't change before / after propshaft. Just makes it visible/obvious
Dreg, for you, because you've already said no a couple of times, I'm just going to default to no, but Nagwe, I'm happy to thank you here. nogweii I'm OK with being mentioned :)
I like giving credit on this kind of stuff. Oh, thank you, Nagwe. That's actually... Interesting, alright, thanks. This is performance. We don't get to use that one often.

01:37:57Okay.

01:38:50nogweii the example you link to is brotli compression rather than gzip, btw
Wait, let me say that.

01:39:08Oh, thank you. Let's note that too.

...19Rather. There's example code rather than something. This is broadly rather than Gzip. You know, I saw that and then it didn't click what I was seeing. All right. So it will need to add some edits together. Great. I don't have an opinion on. Broadly versus Gzip. Except. There is this nice module for it, and there isn't a nice module for Brotli. I want the thing that is basically free and involves no custom code. nogweii there is a nice module built by Google. Dunno if ubuntu packages it
All right. So there's that issue. Where am I? nogweii fair :D
That is totally plausible and not a rabbit hole. I'm going to go down on stream, I think. I've gone down a bunch. All right. So now we got...

01:40:31What was that issue number?

...46All right. And then last pull request to review. This one is really nice. So this one is by Rahul, who's doing all these nice Rails 8 features. And he's taken on a little bit of non, you know, app functionality. And this one is great because it is a... pushcx https://github.com/lobsters/lob…
pushcx https://github.com/lobsters/lob…
big refactoring to the controller for our god object and i've talked about it a whole bunch on stream so i'm not going to belabor it but i will here i'll share the link and i think this links does it yeah links i mentioned it over here a couple of days ago when i first saw it 1349 is my issue for the refactor and i am super enthusiastic for this. There was some minor stuff with routing. Oh, and then I gave him a different kind of merge conflict. So we added the test. This might be ready to go. All right. What is story finder? I don't know story finder. Oh, that's clever. Yeah, so all of these things are going to need this same logic. And he's carried over his use of concerns from his other pull request. That's really nice. He must have done that since we had that conversation about concerns. That's great. Great. So this is all bookkeeping. And here's, yeah, here's all of these actions that are coming out of here. And then that's to the concern. Ah, yeah, this, Freachy, I was talking earlier about how I would like to make that the new user restrictions more permeable there is this one of some tags can't be used by new users i think off the top of my head it's culture and maybe job i'd have to look in the database but it would be nice to it it exists because new users lacking a lot of context and enculturation. I think those tags mean a little bit different things than the community thinks they mean, and so we block it, but this would be another place where it would be great to make that more permeable.

01:44:16I am... Despite all appearances, I do not enjoy being the no-fun police and making these strict rules. I really like places where we can have human judgment in a scalable way. frici I don't think anyone really enjoys being the fun police but sometimes its unfortunately important
So instead of having rules like, well, if you say, fuck, we're just going to delete your comment, We have comment flagging where other people can say, that's not great. Yeah. Oh, there's a moderation decision that's maybe worth highlighting, actually. Speaking of the no fun police, Friji.

01:45:08So, no. No. pushcx https://lobste.rs/s/jbk3oe/stim…
We had this story submitted recently, simulation clicker, stimulation clicker, excuse me. And I saw this and I removed it when it was posted because it's a video game. And yes, we have a games tag. And like, you know, I think on the about page, one of the things I said is we have an art tag, but that doesn't mean all of art is on topic. And the submitter emailed me back. You know, you get a direct message when the moderator says, hi, I'm the no fun police and I deleted your story. They automatically always get a message. And this submitter responded to say, I think this is topical because it is a biting critique of UI. And traded a couple of messages and i had looked at it you know like i clicked into it and then realized it was a game and was like why are you submitting a clicker game and i removed it i looked again after the submitter pushed back and then i found a youtube playthrough and i was like oh oh i see what it's doing it's it's not you're submitting a game and in our discussion we realized like oh this is satire that's why you did it is it is making its rhetorical point by being a horrific example of the distractions of the modern web and tick tock and so They made that point to me and I realized I made a mistake. So I restored this story and I think I added the satire tag because it wasn't there before. And then there's been a bunch of discussion about it. I did ask the submitter here to explain why it was that they found it interesting and topical for the site. So anyways, long story short, Like I pointed them at the guidelines for topicality and I said like how would you address this and they directly addressed it, and when you show me my own words and say I think you're wrong about this. Quite often it's oh yeah I goofed I misjudged I was the no fun police and I didn't need to be the no fun police alright, so this is great bunch of route changes. Anyways, periodic reminder in case you needed it, in case you didn't get it already from the stream that I make lots of mistakes and I appreciate it when folks point them out. All right, so here's beautiful. There's that status 307 and a time bomb test. Great. So I will come back and delete those in a minute. This is ready to go.

01:48:56so great so with where's the the issue where i didn't describe the refactor here we go this is going to be satisfying watch i get to check this box oh actually rather than click the box yeah i would like to to link his pull request

01:49:25So we will edit and we'll check this and add the pull request. Actually, I think I think I can just say pound 1414 and it'll link even though it's going to strike through this text. Fine. Beautiful.

01:50:05confused on the above point as author of the story can also see suggestion within max edit minutes on edit page oh i know what i know what colonel is asking about here so there's in the form this is one of those where I try and explain what the moderator view of stuff looks like. And because nobody sees it, even when I say it, it's really hard for these descriptions to be clear. So in the form

01:51:18Oh, I'm misremembering. I thought there was like a, if mod check in front of this. All right. So this is the code I'm talking about. Come here. How do I kind of just never remember this. Why did you scroll up this to this? There we go.

01:52:04Just make it a link.

...43all right great great great that would be very nice if kernel will take on one of those so there's there's all the pull requests Reviewed and several issues reviewed. It's funny. This is, what did I merge two or three things? And then I filed two or three things. So one step forward, one step back. All right, let's pull it down with that code. And then since it bumped standard all RB, I need to bundle. gtfrvz miau
And then I have rails running. So let's bounce that tab. Cause I touched things. dr3ig cat cam
dr3ig pls
dr3ig :D
nogweii we heard cat
gtfrvz CoolCat
great okay meow did i did i type something wrong or are you riffing on the game oh you hear the cat the cat is not let's see if i can tempt him you heard the cat hey buddy Oh, yeah, you know the kibble, too. I bet the stream heard that. All right, come here. Look, it's going up here. dpk0 camera-shy cat
It's going in your... Hey. Hey, buddy. Come up here. Don't you want to be a star? I'll put you in movies. Come on. Come on. Up top. All right, he's thinking about it. Let's see what he decides. God, I haven't opened the cover on this webcam for a second. No, sir. Sir, you got to go up there. Where's the cat cam? Yeah, buddy. What on earth? Come on. The cat cam is misbehaving along with him. Come here, buddy. Come here. You hear it. You see it. I will give you one kibble as a down payment. And then I will put one here. You can see that, right, buddy? There's more. There's more. Come on, you're the smart cat. Right here. No? So a fat pigeon has landed on the outside steps and he's kind of distracted by the fat pigeon. So I don't think he is going to join the party today. Sir. Sir, you're adoring fans. gtfrvz man, in every culture pidgeons are always fat
Look, you know you can't eat the pigeon because you can't open the window. Why don't you go get the kibble that's right up in your favorite spot? Right up. No, no, he has declined. He is departing. Ah, sir.

01:56:03dr3ig @gtfrvz i bet not where people let cats roam outside
dpk0 would be interested in your modly thoughts on the Rpi 5 release announcement currently on the Lobsters home page
well what a shame i am sorry that he did not put in an appearance he was not ready for his close-up mr deville god there's an old meme right and weirdly the so i have obs up and There is another scene that turns on the cat cam, and the cat cam is not working, which is a very Linux moment that my random hardware device has failed in some mysterious way when I want to use it. So actually, I guess it's for the best, because it would be disappointing in a different way. dpk0 11 spam flags (because it’s a commercial product? because the price is mentioned in the submission title?), but someone makes the good point that hardware just costs money, and why should software releases be on-topic but hardware releases off-topic
Daphne, I haven't looked at the Raspberry Pi thing. But I did notice right at the top of the stream I was introducing the site, and I saw that it was grayed out, and I was puzzled by that. But I haven't looked at this.

01:57:36I wonder if the folks who are flagging spam are reacting to the phrase on sale as in this is running a sale. Cause we don't want to, I don't think we want to start getting a story every time something is on a sale, you know, it's price changes or they just, yeah, I think it's probably some combination of that language and the price.

01:58:18So usually, for my mildly thoughts, usually this kind of thing is fine. And we've had a number of announcements, I think specifically of the Raspberry Pi even. And to my memory, Basically, none of them. Yeah, so like one for SD cards are available. And I'm guessing this didn't get any flags. Nope. And then other things released. Yeah, these things are not getting flagged. dpk0 yeah, probably just the title i guess?
I think it's just this one had a poor title. So let me patch that up.

01:59:24And I'm going to add the release tag where release.

02:00:14frici I guess people think software runs on literal clouds so hardware talk is offtopic for a mainly software talk forum πŸ€”
frici or th title itself yeah
All right. thanks for drawing my attention to it. I would probably, so I've just tweaked it off screen to just say available now. And if we want to see the mod log message, I tried to explain my read of the situation of I updated a slightly misleading title with a pop to spam plug. This is an announcing a sale and we've had many on objection. So hopefully that helps. if so sometimes as a moderator my ui for this could be much better and for users my ui for this for them could be much better but i often end up dming people to be like hey why did you flag this as spam why did you say this is off topic can you tell me more about your thinking so that we can improve the guidelines improve the story flag text and if i had a nice feature for that if it was trivial to do i would send a couple of those now but since it's not and since the previous ones i recall correctly that they got zero flags reliably i'm gonna just go ahead and punt on that one Sir, sir, you're adoring public. I don't know if you guys just heard him rumble. To roll, sir. No? Oh, bud. So he does a trick where he plays dead, he flops down, and then he rolls back and forth as many times as we command. And he sort of, sometimes when he wants attention, he will lead into the trick himself. But He kind of made his noise where he's trying to get attention to do the trick, but then he just conked out in the sunbeam.

02:02:25All right. All right, so I have... Drunk a whole lot of tea. And I would like to talk about the OSA stuff without interruption. So I'm going to run and grab a bio break here for a minute. Let's flip that screen on. And then we will come back and talk about that exciting and frustrating news. I will be back momentarily. See you all in a sec.

02:04:27Thank you.

...56Alrighty. Thanks for being patient. I am back and the next cup of tea is brewing. gtfrvz whatcha drinking
Let's turn off that little note. pushcx https://lobste.rs/s/ukosa1/uk_u…
So the exciting one, the Online Safety Act. It is a cold and flu tea twitchtd hi, just joined.
from the indian grocery and i can't actually read the label but it's for cold and flu and it has lots of honey in it which helps i don't think you're on the last stream but i got my ass kicked by the flu and i have a lingering cough which is wonderful when part of my regular schedule involves three-hour talking blocks.

02:06:00Oh, hey, TwitchD. Welcome back. pushcx https://lobste.rs/s/ukosa1/
So we are just changing topics here to talk about the Online Safety Act. I will link this. Eagle-eyed viewers can note that I gave it a kind of cutesy short ID so that I could link it from messages. Actually, let's look at that code real quick because I want to talk about that. Oh, actually, let me just let's put that in my notes because so I pre wrote this message on the last stream. It got a couple of small edits. So even if you saw last stream or you read the scratch for the last stream, this does have some tweaks. One of the fixes is that I fixed a broken link to this commit. So I want to call that out. So this has been, what has this been? About two and a half days, because I posted it like midnight, my midnight on Monday, because I wanted it to be up first thing in the morning for UK time zones. or I guess I'm saying Great Britain time zones. See, I'm learning these distinctions. And I would like to post an update comment. So I'm gonna draft that on stream and talk about some of the things that I thought were really important in this discussion and that have happened in the background and the commit I wrote. I do actually feel pretty bad that that commit link was broken because I'm trying to communicate something really important and I'm not sure it was fully appreciated by some of the commenters here. I wrote, so the current bad plan is that lobsters will geo-block the UK before the law takes effect. I had wanted to link to it because if you read this commit, you can see like right here, This code is in production right now. The geoblock, unfortunately, is not a theoretical thing that will happen in the future. It is a pending thing. It is the actual plan that will take effect absent some change. And I feel like that sets the tenor of the discussion a little differently. I'm not trying to play chicken with the deadline. or anything it's no this this is what the future holds unfortunately please let's fix that future yeah that little jingle was the cat coming back yeah the fat pigeon left do you want to perform now now that the webcam doesn't work all right

02:09:14so i am not going to rehash the entire online safety act but if you haven't read this thread and you haven't read it while i've been rambling the very short version is it is a a censorship law that's aimed at any website where users can read things posted by any other users where any of those readers not users readers are physically in the uk and it is a very broad law that claims international jurisdiction And so even though Lobster's is an American site run by an American in America, the Online Safety Act threatens significant fines, more on that, and jail time for non-compliance. And I guess the two big, well, the three big points are There isn't one weird trick that will get us out of this. We can't say... Oh, UK users can't log in. Because it targets readers. We can't say... People have proposed a couple of one clever hack things. And unfortunately, they are not viable. the risks are kind of real. So talk a little bit about those risks mean in practice, because I included the OSA is headline number of $22 million, or 18 million pounds for those on that side of the pond. Because I wanted that stark number of that's the scale it is written for it is not written for a hobbyist threshold and Skade made some really good points here about that as did another writer who I believe is c12 do I remember their comment correctly yeah c12 left a couple of really nice comments about how The OSA requires that Ofcom, I mean, dollars are fungible, but requires that Ofcom, here it is, enforcement of the act must be entirely self-funded via fees and penalties. And since their rules, both what's written in the OSA and in Ofcom's guidelines point to Well, we're not going to go after the maximum penalty. We're going to scale penalties appropriately with whether something is in the UK so we can get at the money and whether it actually makes money. I think that is a compelling argument that the risks of ruinous fines are not so bad. So C12 left this and another comment if you want to control F their username. And then I had another discussion with Skade that I want to find here because I want to build on that.

02:13:16I really do appreciate for the folks that chose to comment on this that We kept the frustrated venting and flag waving to a minimum. And mostly, there's a lot of folks who are saying, I'm going to go talk to my MP. I'm talking to this rights group. Or I got some useful emails I'll get into in a second about, let me introduce you to someone. Let me make a connection. Excuse me. This is C12's other comment that I really liked. And I noted here that I think dpk0 there is one comment which is exactly the kind of arrogant US patriotism i advised against you including even as a joke
David Price- They made a nice argument. David Price- So so here's the one I was looking for where I was responding to skate so let's go look at. dpk0 and unsurprisingly responders were not happy
David Price- That comment there's one comment, which is exactly the kind of arrogant us patriotism events, yes, and you dropped off the stream, but I definitely didn't write any of that in the post and we had talked about. Asides and parentheticals. And I dropped a bunch of them. Actually, if you were to control F the last stream transcript, you will see me say your name Daphne a couple of times. dpk0 oooh
And I fixed the whole thing with allowing you to seek by transcript. dpk0 nice feature
So you can jump right to where I tried to mention you and refer back to things that we had talked about early in the stream before you had to drop out. I think I always called you Daphne, but I might have said DPK on one or two of those. dpk0 i don’t mind dpk or Daphne aloud :D
You can control F twice, I'm sure. And... Yeah, the, like... Yeah, yeah, I didn't think you did. I'm just telling you you'll have to control F twice rather than... I screwed up. I try and ask how people want to be addressed. Politeness matters a bunch to me. So Skade has left a bunch of great comments on this thread. If you don't want to read the whole thread, even just reading Skade's comments would be great because... Hold on, let me look at this profile photo. All right, I'm going to guess Guy. pushcx https://lobste.rs/s/ukosa1/uk_u…
So he writes a bunch that is very nuanced explanations of what's happening and how these processes work. And I really appreciate this kind of insightful, let's think about the motivations and the incentives to everybody who's involved in it. So I think these are great for getting at A level headed assessment of the risks and what actions to take I disagree with him about a couple of things, but in general I, these are just excellent I think I uploaded all of them i'm not logged in in this browser so you don't see it.

02:16:44So. I noted in the first stream that the structure of the Online Safety Act is there's a law with a whole bunch of rules. And the law also says this regulator, Ofcom, is going to develop further detailed rules and processes. And then we're going to check that off. And that structure of delegating to a regulator is very common in United States law as well. And Skade kind of breaks that down here and says, because one of the concerns we've had is there is so much in this act that's vague, where I think one of the best examples is in that piece by Russ Garrett that people keep referencing, because it is a solid summary of the state of things. But There is a carve out in the law that says. So this applies to everything where users can see material posted by other users great. It has a carve out that explicitly says, but if you have like a product site or a journalism site where people are reacting to your thing primarily. that's not covered, even if they can read other people's comments so. my understanding of what that's written for is if you have a t-shirt shop or you know an outdoor gear shop and people can leave reviews and say this is the greatest or this broke in 10 minutes you don't fall under the act however as russ notes very astutely there's some ambiguous language where if users can reply to each other maybe it gets back into being covered by the act so on lobsters like we have replies well that definitely puts us back under the act if you were that hypothetical e-commerce store if one user says this tent isn't waterproof and it rained through onto me and the next user says, that guy doesn't know what they're talking about. They must've forgotten to put the brain shield on top. Does that count as users directly interacting? Even though the features of the website are that it's a stream of product reviews on something that's not covered, maybe that gets back into direct user to user connection. And that's especially true of say, blog comments. and I noted later on of things like bug trackers.

02:19:56So, Skade talked about how the law is written in this vague way. And a lot of the things we're concerned about are deliberate parts of the design process that courts should decide the details of reasonableness. And this is part of the process of lawmaking. And I think this is a useful summary. US law does this too, quite a bit. And he warns, so yes, it's kept at liberty of the prosecutor, with the prosecutor to work out the details to set and evolve policy. pushcx https://www.russellsage.org/pub…
And the thing I said in return, and I'll share this link as well, because I think it's useful. And actually, I'll click this link, because I want to read from it. I tried to summarize this like three times, and then I was like, eh, the summary on the publisher's site is fine. There's a classic book in U.S. law. It's very famous. Even the title is very famous called The Process is the Punishment. And it talks about how, yeah, it's from 79. Even the process of getting exonerated for very minor crimes like shoplifting, the punishment is not you actually get convicted and sent to jail for a while. in real terms the punishment is before you even get to court you lose money from missed work you have to pay commission to bail bondsman you have to pay attorney's fee you waste your time and To make it clear, a lot of people are poor and live in precarious financial positions, and the sudden extra cost of you have to pay $100 to the bail bondsman, or you miss your shift at work, or you get arrested on a Friday and bailed out on Monday morning, so you missed two or three work shifts, now you've lost your job, that can push people into debt spirals. And so, especially for folks who are in precarious situations, the process is the punishment. And then, so I've talked about, I'm pretty convinced by the things C-12 said about, it's probably not worth worrying about the fines, but helping clarify the OSA by being subjected to it and fighting it is a... It's already burned more of my time than I want to put into it this week alone. And realistically, especially because of the international issues, being involved with anything with the OSA legally is like a three to five year project.

02:23:25There was another really good comment I want to highlight. Where are we here? So there was some, yeah, the flag waving I want to skip. Maybe there is something up there I need to tidy. I haven't reread the whole thread this morning before the stream. Here we are. So, there was some discussion about where the law came from and the political motivations the people who passed it and who now have the opportunity to repeal it and haven't or haven't yet. I'm pretty ignorant of UK politics, so some of it was useful. Last night I asked Wilhelm, so there's one available course that would be pretty good is Apparently before the law can be enacted, there needs to be, and I'm sorry if I get some of this jargon wrong. Part of this question was me asking about it.

02:25:09So parliament has to activate the act or basically say, okay, we told, we passed this law. The regulator has written the regulations as we demanded in the law. And now we have to check a box on that and say, okay, those regulations can take effect. And so I've called it an approval process and I asked if it has another like name. This user said that it has to be activated or there is a statutory instrument

...55dpk0 i am not sure the negative procedure applies here? the sources i saw said this has to be approved, which i assume means explicit approval
And so this is a really promising section because if the current parliament, who I understand from the other discussion, has changed party control, yeah, I agree that I don't think the negative process applies here. I think, and you know, don't put too much weight in my opinion here because this is not a political system I know at all about. dpk0 yeah i don’t have a real confirmation of that beyond it’s not what i strongly infer from the sources i’ve seen
there, you know, there was that previous stream about what you, where you taught me about what it means to be sovereign, but I agree with your analysis that they have to affirmatively do something before that March 16 deadline is real. So this is a, maybe my biggest open question. Let me actually grab that.

02:26:56is that is a really promising route to improving things or slowing things down so they can approve because as a practical political power question ofcom is required to implement the law as written and they could probably say something like Obviously, our priority is to not go after random little hobby sites like the London fixed gear and single speed forum.

02:27:36But I don't think they can actually say affirmatively and we will exclude independent hobby forums. like the fixed gear forum, like lobsters, because the law is written universally. And so Ofcom can't write regulations or can't announce policies that are explicitly out of sync. They can kind of nudge that direction by saying, well, that's not our priority, but it's just not what they have the power to do. They're bound by the law. So this process of getting parliament to not activate the law or to just kind of pause that until the law can get amended or until the regulations can be a little clearer at parliament's direction, something in that neighborhood feels like the most viable path forward.

02:28:50I don't think I saw this. I'm actually come back and see some of these committee debates. I would bet some of this is just procedural, but maybe some of this is substantive debate about what they were thinking as they wrote this law. That would be pretty interesting. DPK, what is a Hansard in this context? Lord's Hansard?

02:29:53dpk0 Hansard is the transcript of parliamentary debates
answered as a transcript of Parliament. Oh, then that's the thing that would be more interesting to me is. if there have actually been yeah so i said some of them i expect would just be procedural maybe i will come back and read some of those it doesn't it doesn't change much and i'm trying not to spend too much time but like what were you thinking guys That is at least a little bit of my question.

02:30:36So then the other thing I mentioned was there's been some behind the scenes stuff. So I'm going to bring the scratch up. So after all this stuff.

02:31:00twitchtd no worries, it's not a cat-astrophy
no i'm sorry if there are strange noises the cat is chilling on the desk and has decided to slap at the microphone so if he knocks it down we'll see how that goes this is not you know i'm a fancy pro streamer kind of stream so i don't have one of those arms that say road on the side i have a little plastic tripod that came with the desk to keep it to help isolate it from keyboard and mouse noise And the cat has decided like, oh, what's this cord? What's this cable? Not a cat to ask. All right, so in the two and a half days,

02:32:39Say this. I kind of want to link to Wilhelm's comment, but not this whole thing about debating politicians motivations. So I'm going to just link to my comment.

02:33:55just gonna say make improvements i'm trying to be optimistic and not tell the uk what to do which is a weird position to be in but you know they're your laws run them your way run your process to your political thing i'm gonna stay out of your politics as much as i can and whether that is you make improvements by ofcom or by amending the law or canceling things like I have political opinions there, but I'm really trying to keep it to, let's just remove this big, awful, vague threat so we can move on with our lives. So I'm trying not to say like, hey, the UK, why don't you replace your democracy with a Peterocracy? And while all of my political opinions are the most valid and most moral, Sometimes people don't appreciate that. Even when I explain it to them like that. Oh, there we go.

02:35:19Kind of a long one for a title. If you're not a stream regular, I title the archive pages by things that sound especially silly out of context. A lot of that is me being mad at myself about bugs.

...53I'm going to grab his two references. C12. Well, there. I should say I don't actually know C12's gender. And then where's the other one?

02:36:25Not that one. This one. Yeah. And so I'm not trying to be too fancy about it, but I'm trying to like the point of this stream, the work of this stream is writing this comment to help the make sure everybody is up to date and share as much of my thinking as I can, because a lot of this comes down to Peter made a judgment call that this is an unacceptable risk. And so I feel it's very important to explain my thought process and what's persuading me of things. And then I will get to the behind the scenes connection thing. All right, so I added this one. Split that. There's fines. Oh, commit.

02:37:51Here we go.

02:38:25Where is it?

02:39:13How do I?

...25Oh, I can't. This is the GitHub. Show me the. So I want the whole file.

...51Okay.

02:40:41I don't need to beat that one to death, talk about my rhetoric. I'm trying to say that I hate this plan and I want something better, but it is pending and I don't need to spend a lot of verbiage justifying myself over and over because folks seem to mostly get what's happening here.

02:41:19Pending is not the right word, right? Real and So I do appreciate when folks pipe up with questions and stuff, and you are very welcome to kibitz my language here. Like this OSA post was greatly improved by Daphne's questions and criticisms last stream. So what I'm trying to say is, I guess where I'm hanging up is, I am trying to say that it's happening, but also it is a future event and English grammar makes that sound contingent or optional. You know, I have an English degree. I don't have a CS degree.

02:42:53dpk0 going to happen
You know, Daphne, going to happen is good. You know what? That's it. That's the hassle, is I am trying to say if nothing else happens, if nothing changes, this is going to happen, rather than mjiig "will happen, unless..."?
Part of my decision is still pending like i'm trying to say it's not a contingent thing like. That. same way the USA will take effect. is scheduled to take effect, so is. Our. current bad plan how does that sound is that clear like that's the comparison i'm making like if the osa happens this happens that's it does not require an affirmative act by parliament or my vim editor It in fact requires, and God I hope for, an opportunity to delete that code. I mentioned on the last stream, but for anyone who wasn't there, it is literally the first time I have geo-blocked anybody. I've never written code to geo-block a country like that before. I don't like doing that. You know, maybe I just read the... Declaration of Independence of cyberspace at a impressionable age.

02:45:38You know, I almost want to write iterated game because like I've read a bunch of game theory, but let me not get into jargon. And the commitment.

02:46:20So now I want to grab those links. And then, where did I say it? Without getting, yeah.

...51was i think my best statement of the the jurisdictional issue i'm kind of rhetorically i'm kind of torn so like i definitely want to highlight other people's comments that have been very clear and i am torn for my own stuff between linking to it and just directly repeating it Because if I said it pretty clearly, I am trying to summarize and linking off to. So yeah, rather than obliquely say the obvious future problems and the still the problems that process punishment and

02:47:51I also say, let's search backwards.

02:48:08What am I doing? Just write in the comment.

...29okay i didn't say it in the way so i'm oh yeah i said it in email okay that's fine do i want to steal from that email right now no

02:49:03there we go all right so there's the risks of the process and the part about oh case law that is the risks of the process thing that i was talking about i just said it twice so then the big new thing is connections so outsider

02:50:02So the first very useful contact, let me just say two. So it's here. First, what do I want to describe them? I asked how they wanted to be described and they didn't respond. I'm going to use the generic nondescript. All right. Someone... I want the exact language. All right. So I'm grabbing my... That's how I wrote it.

02:51:16An employee of a large site working on OSA compliance.

...28They made an email introduction to current osa employees so that i can or not osa to current ofcom employees directly discuss these concerns with the responsible people you know it's not the responsible people because also parliament do i want to say some of the responsible people it's the regulator

02:52:57espartapalma Hi folk, nice to meet you again in this 2025
Oh, hey, it's my promo. Welcome back. Publish. I. Primarily, I have a few more questions to. I primarily plan to ask off on. Appropriate. To hobbyist and foreign sites.

02:53:30So just to pause a second in case anybody has questions. Someone emailed me and said, I can introduce you to people who are working at Ofcom. I looked up the person. They definitely are who they said they were. And the links were plausible. And they introduced me to a real Ofcom employee with their, you know, at ofcom.gov.uk address. who I looked up and I can see public articles that they've given about related regulation, although not exactly the OSA that I could find immediately. So I am trying to play telephone a little bit or, you know, internally get connected and being introduced, getting a warm introduction to a current employee who can introduce me to The people who are actually writing these Ofcom PDFs is my hope. I'm pretty optimistic about this.

02:55:01tempted to be smarmy here, but I'm not going to. You know, like, say that we're drowning in them or that we're confused by them.

...28I guess struggling to understand is not too hyperbolic. It's a weird thing because, you know, I know I'm writing for public consumption and that may include these actual regulators could come along and read this comment. Having even the writing process be a public performance on stream is a little funny.

...59Feels a little being John Malkovich. All right. So if there are any questions about that, I'm happy to elaborate. But that is the very useful thing. And then second, he has... Where do I have it? I have it on my personal browser.

02:56:25How do I want to describe this? So... So far... Before I get into this, let me drink some damn tea.

...45pushcx https://mastodon.neilzone.co.uk…
So, so far, I've only read a little about, I've read his law firm's website, but Neil Brown is a lawyer in the UK who has already worked on related topics and interacted with ofcom directly so i have said in a variety of polite ways that i don't put a lot of stock in programmers trying to make sense of the law because i left a longer comment about it on the first thread the lfgss one but experience working with lawyers and being friends with lawyers and being family with lawyers has just really brought home to me that as a non-lawyer here we dragons it is very easy to misinterpret something because you don't know the legal jargon or you are ignorant of how legal processes work And you can just immediately drive into the ditch. Just over and over, working with product counsel, that was clear to me where I would say, well, we'll just write this thing to say X, Y, and Z. And they say, well, if you do that, the whole thing will be thrown out by the judge because any second month law student would know that contracts have to blah, blah, blah. And I would say, well, I don't know that. And there's so many of these things. So Neil has publicly announced that he is working on a risk assessment of the OSA specifically targeted to small hobbyist services. And he and I have started chatting a little and I am going to See what we can get out of that guide because whatever an actual lawyer produces in the UK is much, much better than me attempting to interpret the law for myself or other non UK lawyers attempting to interpret for ourselves. And there are still a lot of ambiguities in the law, and I am certain that he will not be 100% certain in his guidance because there's a lot in the law. That is kind of vague. deliberately left open to discretion of prosecutors as Skade put it but I think this if he can put something out and I do hope early next week we'll see what his time allows I really think that's going to substantially advance the conversation so that we can have an a more accurate assessment of the risks and better decide next steps. And I'm a little in conversation with Neil. We'll see where that goes.

03:00:28I don't want to phrase that. Has experience with the OSA.

...39Because I'm not trying to... It's hard to summarize someone else's... Or maybe it's not so much with the... Obviously, he doesn't have experience with the OSA that doesn't even take effect yet. So I'm saying it wrong on that front.

03:01:01Who has relevant professional experience. Named Brown has. Publicly. announced that he is working on a free assessment on free resources to help small sites understand the OSA better.

03:02:10Directly with Neil.

...18How do I want to put this? Where's the, was it this? Dang it. I'm gonna have to fart around a second to find this. Cause I think you, did you reply to me directly? I replied to him somewhere. Let's go find me.

03:03:00Here was the thread where it came up. And then there was a false start there. I'm looking for this one.

...55What I want to say not help inform because he's not I don't get the impression he's done or anything i'm trying to say that.

03:04:11In case hearing directly from.

...28in case hearing directly from a alt site can improve his work. I've been real concerned about the limits of heralds of playing lawyer. So I'm really looking forward to a resource that I expect to meaningfully advanced public understanding of the risks of the USA. So I had said, God, if we even wanted to really understand our requirements, we have to hire a lawyer. And because the USA is novel legislation, that's going to be real expensive. And if we wanted to try and produce some artifact that would be useful to multiple people, you know, other communities, they're in the same boat, just fucking add a zero to the cost. Legal work is really hard, really demanding. The professional ethical obligations of writing well means lawyers don't write fast and lawyers are not cheap, especially with specialized experience. so neil publicly volunteering to produce exactly that is an incredibly generous gift and if i can tell him hey this is what it looks like from this side of the pond or hey you know it says this but like that's just not how moderation works and you would only think that not going to say it too spicy. It is not someone what someone would write if they had experience running a forum or working on a professional trust and safety team. So these two things I think are Like, I am very happy about the response the post has gotten. As bad as the situation is, people have said, oh, yes, we clearly understand the problem. It is a problem. Let's go work the problem and find one of these solutions or another solution. So I greatly appreciate everybody who has talked with me about this, whether that's on stream or by email or whatever, or in comments, of course. really hopeful and you know that have advanced our own understanding or made cases or or or and then these two things of a lawyer writing an actual guide and I say guide but writing an actual resource of some kind and The prospect of talking directly to the people at Ofcom who are writing these things. I'm really optimistic about all of this, I think. Yeah, and I should write that.

03:09:16What do I want to say here?

...55you

03:10:12dpk0 converation
don't need to yeah i'm not going to put on the hair shirt for that one all right got any typos i don't usually turn on spell check for the scratch notes oh it's definitely not using the same dictionaries firefox experience

...41dpk0 (needs an s
dpk0 )
Oh, it's an S in the middle. I get it. Conversation. Thank you. mjiig Very off topic, what vim feature/plugin is this spell checker?
All right. Turn off the spell checker. Won't let the government tell me how to spell. Why am I going to let the spell checker tell me how to spell? I don't think it's a... It's just... Yeah, it's just a setting called spell. dpk0 if you went to a public school you literally let the government tell you how to spell
Where if you turn on spell, it fires the spell checker. espartapalma with this new spell it has a better _colour_
And then there's a whole... interactive interface built into this. You got me there, Daphne. With this new spell, it has a better color. Oh, you can't put a U in color. Who does that? So let's grab this. And then off screen, I'm going to drop by the... espartapalma :thast_the_joke:
Thread here and paste. Paste my comment. Preview it. mjiig Oh neat, nice to use an editor I'll never stop learning how to use
Make sure there aren't any broken links. No. Correct markdown. Put on the hat. Post. pushcx https://lobste.rs/s/ukosa1/uk_u…
And then where's my post? So I have my post here. So here is the comment that I just wrote on stream.

03:12:46So MJIG, the way I learned Vim is I had a job that wasn't super demanding and I read the Vim manual, which is enormous, but I read it very slowly. I think my fastest rate was one chapter per week because you can only learn so many things at once. Like I can only learn one or two keyboard shortcuts a day. All right, let's just leave that there. And so just slowly doing that is a great way to learn some of the depths of Vim. And you know, now that I say that, it's been about 25 years. I should probably do that again.

03:13:48So we'll put that on the post stream.

03:14:05Get rid of the hedging. All right. So that's the OSA, the Online Safety Act. Does anybody have any questions, comments, kibitzing? mjiig I've been meaning to read the vim manual in depth, finishing my thesis research has been an annoying distraction from that sort of important project
news really insightful pushback on things i've said or opinions i've held like daphne regularly does i'm trying to drag you into helping more thank you or we can roll forward into css stuff i want to give folks a second because i know the viewing experience is a few seconds back Oh, great. Well, you know, take your time. It's not going anywhere. Was your thesis research CS? Are you the person who wrote that nice dissertation I posted the other day? One of my... It's so funny. This is...

03:15:14mjiig Sadly my dissertation doesn't exist yet, just the work that will go into it
One of my pet topics that almost nobody else on the site is interested in is property-based testing. So if you look at the stories about property-based testing, they are like all submitted by me. Yeah, that's one of those first 90% of the work kind of things. mjiig My work is CS, I study program logics
But I just submitted someone's PhD dissertation on property-based testing. This was such a great read. I will admit, you know, I didn't, Read all hundred and 79 pages and track down every reference, but I want to. dpk0 i’m considering writing yet another QuickCheck implementation in Scheme, i’ll be sure to submit it to Lobsters if i do ;-)
I love property based testing. It always feels like. Like it's like three years away from breaking into the mainstream. dpk0 (there are already like 6 of them but i have not-invented-here syndrome)
And it's felt that way for well for me for like seven years now, since I went to recur center which yeah that was 2017.

03:16:18Ah, wonderful. I would love to see your implementation of Quick Check. Thank you. Please do. You will have at least one upvote. I promise you. And somebody actually, another user commented on here who clearly, like, I was so hyped for this comment. I upvoted it so fast. Ooh, and maybe there's a third person who likes property-based testing because it got another one. don't know that's it's my pet topic i think it is so neat it is so clever and it's less mature and has bigger footnotes on it but the the possibility of moving towards concolic testing ah that's so neat that's like that's the big formal method slash academic thing that doesn't actually work in practice that i most want to come true it feels like where did i say it is there a good overview

03:17:37Does somebody see them? So concolic testing is sort of a hybrid. Ah, here's an excellent summary. It looks at the AST like a fuzzer, and then it looks at all possible inputs and code paths and outputs for your code, and then figures out the sets of all possible input that can cause program to branch down one path or another and uses an smt solver it's a kind of constraint solver so you give it logic puzzles like i don't know like algebra where you're like you know a or b and c or d what are all the values of a b c d that will allow this to evaluate true or dpk0 ooh
knowing some things and obviously there could be like a hundred more terms in this knowing all this can you prove that there isn't a solution and so you get proof-like assurances that your program does what you think while writing basically property tests it's so encouraging I'm so hopeful for that. dpk0 i hadn’t seen that idea before
I should do another literature review. It's been a few years. dpk0 i’ll have to read up on it
Where's my... So anyways, yeah, it's so neat. And there's... So the big caveat is state space explosion. where if a function has an if now there are two paths through it if it has a case now there are eight paths through it if it has a really hard one is if it has a loop now it has n many paths through it and especially as functions call each other this state space multiplies i mean it actually increases exponentially and i don't mean that in the the hyperbolic way that people say exponentially to mean a lot i mean it's literally an explanation literally a man my tongue today an exponential expansion of state space and that's really hard to handle and while hardware gets much better And academics tend to underestimate how much compute you can actually throw at problems. I like it. It feels like it's got a lot of potential. So anyways, that's just something fun. Let's do something else fun. Let's abuse CSS. All right. All right, let me get, let's make sure I'm in a good workspace here. dpk0 nothing makes you how few cycles of Moore’s law the last forty years or whatever have given us than working on an actually exponential algorithm
All right, so let's pull everybody down. Where am I going to be working here? I'm going to be in the story view.

03:21:09dpk0 +appreciate
Oh, yeah.

...15Yeah. And it's interesting. So it's been a couple of years since I've read the papers on concolic testing. But some of them, I had the vibe that they were academics writing them. I mean, obviously they're papers. What I mean is sometimes when academics talk about having big data sets or big compute, their sense of scale does not match the industry. And that's either because of, you know, the papers that they are writing into in response to that are a few years old or they are limited resources compared to big tech say but sometimes i see stuff that where they're like ah i don't know this could have a gigabyte of data and you know in some computer science places That's a lot of data and looping something a billion times is a lot. And then, you know, there are websites that do like a billion hits in a minute and it's not a big deal. So I don't know. We'll see. Oh, to finish the thought, when I read the Concolic testing stuff a couple of years ago, I got a little bit of the vibe of maybe this is big by academic scale, especially because so much of concolic testing seems amenable to memoization because if you do one part of the solution you don't have to redo it unless something in the ast that it depends on changes and so if you have a good type system and a good dependency graph it is a ridiculously parallel is one of those you know what is it embarrassingly parallelizable problems to me we'll see one of those things i wish i was rich so i could throw like you know a million dollars at all right so i got rails running let's close that out all right so we've got

03:23:53I need a demo story that has more than a couple of comments on it. And hey, look, fake data has made one for me. Do we have? OK. It would probably be better to have actual comments. It'll just be easier to read and understand what we're looking at. So let's go back to my own stories page there's got to be something i've submitted recently that got a few comments here we go.

03:24:40mjiig You might find the infer stuff interesting if you're unfamiliar with it, they describe it in terms of a backwards sort of program logic, rather than the language of property based testing, but I get the impression it ends up being similar, and from what I understand is used in practice at meta
And you know what just to make it better, I am going to log out.

...54So we have, good, we have a nice discussion with many nested comments. Oh, this is on in development mode. All right.

03:25:11So let's go grab,

...18So Justin working on button down has an admin table with some headers on it where there are these timing things and he wanted to make like a clever little chart And so he, you know, kind of a demo of this is he has these objects in order and trying to say, hey, you know, if this last one, if we want to say the last one is going to appear aligned right. And this is like, this is a real problem that I had with our header where there's a bunch of links and the last one is aligned right. So that was familiar. The infer stuff. mj do you have a link you could share i don't recognize it from that name so what he's done is he has these let me show you the This is written a little odd. He writes the after and then he writes the before. So if you have these elements and you want them to appear in order, you can sort in Django and print them. But then on that last one, you have to do a conditional to say, oh, well, this one is going to be the first and that one is going to be the last. And we're going to treat them differently and tag them differently. And he noticed that if they are arranged with flexor grid, you can use the order property. And this is, he's writing tailwind. So this evaluates to, I think, order colon zero or order colon negative one, something like that. You can he can loop and not have those conditionals and just write it once and say, well, we're going to use the group thing to shove the orders of that around. So let me summarize differently. What caught my eye here is a thing I remembered as a feature is with flex and grid, you can take HTML elements that are in one order and change their order. And it's convenient in Django because then just, you know, his loop is simpler and he doesn't have to worry about sorting first and he doesn't have to check on the way through. So, okay, that caught my eye, right?

03:28:32A feature that is occasionally requested is Someone saying they don't want to see nested comments. They want to see flat comments. And or instead of sorting by score, can I sort by newest? And the answer is no. But we can abuse this in a ridiculous way. Do I wanna, so I made a demo page for myself just to make sure I could do this, but I think it's, I think we'll just do this directly first.

03:29:29mjiig There's a public infer tool, but I actually don't know how much it corresponds to the work I'm talking about, which I'm only aware of through Peter O'Hearn's collected conference talks
So there's a, and this also combines with a, excuse me, a,

...46Okay. Thanks, MJ. There's an old CSS thing called the checkbox hack, where

03:30:09I can have a checkbox and say, where'd it go? Oh, it went up high. I don't want it up there. I want it down here.

...29Right? Hello, doesn't do anything.

...47So I have this comment subtree that prints the comments, right? So I can style that input, right? Let's say input. Let's just give it an ID.

03:31:12Let's say the label after foo is going to be bold, right? Is it font-style, font-family, font-weight? Why didn't I just grab that? Right, so obviously I can style the label. Hey, look, it's bold. What's interesting, the checked box hack is there is a pseudo selector called checked. Huh, so as I check the box, Hello turns bold, right? Well, it gets to be cleverer.

03:32:02Who doesn't have to be visible? So now I have a label that turns bold. This is CSS. This is not JavaScript. Okay. Weird, but okay. All right, let me show you where this is going. Well, we changed the font weight. What if we said, if foo is checked, and let's see, what's the best way to put this? know just to just to keep this little building demo simpler i'm going to swap the label in the input all right still works no label has to come second what did i do wrong here oh it's i want to say label followed by is that tilde That's plus and matches the second, but I want to match the first one has, okay.

03:33:52Well, that's gonna play a part here too. So that's fine. All right, so it works, great. If I have foo checked, say followed by,

03:34:25oh where's rh to spot where i'm going with this stuff early oh i called him arb earlier didn't i it's rh so

...53What if instead of saying ooh, do I want to start with the checkbox? No, I want to start with the select. All right, here we go.

03:35:27So the default will be. I'll figure a better title for that.

03:36:13Anybody see where I'm going with this? This is so dumb and it works. Oh, it works. You're going to say that. If we have a select that has an option and that option is checked and. That option has the value score and then it's followed by a comments subtree which oh if this is all li i really don't want to get into yeah let's

03:37:13so we have the unread marker and then i'll put this after that and so this guy immediately goes into an ol that's what i want that is followed by I need the basic one.

03:38:04Let me fill that in in a second. You're going to love that part. All right, so we have score. Oh, sorry. I have score.

...24So it is so fair to do silly things in code. I have spent so much time on the OSA lately, not just these streams.

...54All right, let's check for typos here.

03:39:07Good. So we have the select. There's that span hanging out. That's messing me up.

...24I may be able to follow that off. It'll be a little brittle, but I can handle that. So where's that?

...48So I grabbed that. Now we have that. And does the OL pick up? Now something's wrong in the selector. Because the OL should have picked up. Oh, it's the specificity of these many child selectors, probably. But none of them have a display. Did I just typo?

03:40:37So this guy, if I say default, we're not getting that. I want to say simplify it down to just this one. All right, so let's write some selectors live.

03:41:19All right, so found the selector.

...27Still have it. And I've got to fix quoting.

...39as an option with that value and your typo gray and if i said checked i found it i said unchecked all right so the option isn't picking up unchecked that's okay i can repeat the selectors if i said not

03:42:13It's a way of... What if I just said if anything is checked, it has a value? I guess the other thing I could do is change that word from empty string to default. Let's do that.

...44I'll call it nested. Threaded. Sure.

03:43:08I'm trying to apply to the OL. Let's remove. I guess I changed that thing. Let's change this.

...24Did I not carry it? This might be a form thing. Yeah. Load. Did I not save the file? Helps when you save files. Oh, I didn't change it in CSS and not the HTML. There we go. All right. The word threaded in.

03:44:04So that selector was going to become Can we say just unchecked? No. Can we say, oh, it was probably wrong because I should have said not checked. And that's close enough to correct syntax, huh? All right. So we will grab this app. So we'll say if it has an option that's not checked with the value threaded, put it into grid display. And add the red, because I want to see the red to make sure I got it. Ah, it's still there. Did I put the parent in the wrong place? Let's back that up.

03:45:12There it is. All right. So now there are these order values. And as we saw in Justin's post, you can put an order style on the elements. Actually, You know, I've been sucking down so much tea. I'm going to take a quick break. And if anybody wants to figure out where I'm going to go with this, this is fun. All the elements are on screen. I will give you a puzzle there. All of it, especially with the mention that we don't have JS. I'll be back in a sec.

03:47:08all right back to fun nobody got it no arh so these comments score newest oldest

...50There's the input, there's the ID, have a class on them. Let's add.

03:48:15So in Justin's code, Which, oh, to give full credit, Justin attributed to his co-worker Mary. He's using Tailwind to set order colon one, two, three, right? One, two, or three. But I realized this can combine with another feature.

...52css now has variables. So we could say define a variable.

03:49:10And then we could print.

...37numeric variable hey that's a number we could order by and if we order by newest we can order by the variable data timestamp

03:50:00And oldest is the same thing as saying that we're going to use that order and swap the flex direction, right? What is that called? I think Justin mentioned it. Or did I just pull that out of MDN?

...30There's a way to say we want to use the order, but we want to swap the direction, which is it's on the flex. That's the layout. Ah, shoot. The order that flex goes, here we go, could take one of four values. So if we change, if we say this one, if we say it is checked, the value is oldest, We will say flex direction column reverse. Let's set a default here.

03:52:11dr3ig can you flex-direction with display grid?
So I'm going to grab that and say that if it should be hidden, we'll just print. Oh, right. Good catch. There's an equivalent in grid, right? No, that's someone doing my own hack. Maybe I want flex then. Let's say flex. Because I want to... That's my question.

03:53:40let's go to flex i'll come back to grid because I would like these to be laid out as a grid instead of nested allies and all that, but that'll break all of this anyways so. Since i'm already not getting everything I want long term on one stream where i'm hacking up something. Instead of dealing with a giant stressful project. We will say display flex.

03:54:11Thank you for hanging out, Drake. I'm glad you're getting to enjoy this terrible idea. And on this one, we will just say, well, actually, let's just say, we'll just round it off to zero because CSS order does handle ties by resolving them in favor of source order, which is fine. for the comments with hidden score. So now every comment has an inline style. with two variables, and because I can reference those CSS variables, the order that this appears on can be altered by CSS. This is so dumb. this is a crime let's see if this works hold on please work come on first try oh i said i said column instead of row whoops here hold on i just swapped the word column for row oh come on you know you want to work so I didn't do this with nested stuff in my demo, so that's probably the issue. But the gist of it is we can change this select. It's not quite using it. And it will reorder the elements in the tree, not just break the layout of the page. dr3ig can you show the computed order in inspector ?
I couldn't stop laughing when I figured this out. It takes the checkbox hack. Oh, it's the, there's a double colon. Can I show the computed order in inspector? Probably. So we say by score. Let's inspect, come here. Let's inspect this comment that has score of three so i see the data score three and then in the layout oh it's oh so this is actually a hassle with the nesting because what i need to say is also when an ol Because we nest these OLs, I also want to say that every OL contained becomes a flex container. So it's applying the OL, and this is what we're seeing for the first couple. dr3ig the property is flex-direction not just direction, no ?
But the nested ones are not picking up the order because their parent doesn't have grid. Oh, you're right.

03:58:11dr3ig and row is default, you do want column (i thin)
Is that why I'm getting columns instead of rows. Let's find the parents fix that one first because it seems pretty tractable. So the top oil.

...45Do they need explicit widths? It may be that simple. If I grab. Where do you want to put it? Let's just say. Why is this not applying? anywhere because these allies have the class comment, right? I really don't want to change the whole thing to allies or to this or something. Hmm. They are devs, they're devs in. Oh, stuff just tweaked. so each the the maybe i do want to refactor it each comment is a div

04:00:14And each ally is a tree. I thought it was one ally per comment, but it's comment per sibling and all its replies, right? Yeah. I can't understand anything there. Hold on.

...42I never do this, but let's go over to the side. That would be nicer. Right. So this one is those, and then the other replies are allies. So if I say.

04:01:12I want oils to become rows default. I do want column. Do I? All right. I'll try column. That might have been enough to do it. I always get confused with the... Flexbox and grid stuff of, am I defining a row of things? And so each of my things as a column or am I defining a column? So each of my things as a row. Yeah, no, we're not getting any change. And I come here, did save and reload this. Let's say you have your order. Oh, it's the... So it's because all of these are so heavily nested. I have the... Yeah.

04:02:32So the OL is getting the right flex direction and everything. But the li's don't have the CSS variable, the divs do.

...59For this terrible hack, do I want... I could almost remove the extra structure of... the li because the only thing it does is indent and so if i had a rule that said i mean it it is this rule that's doing the indent oh god it would break the margin lines for showing parents this one of the reasons i want to move it over to grid is this css is got really complicated nesting that very closely has to mirror the structure and so it's it's brittle and i'm getting bitten by it because i can't reference the variable that's defined on the li and the way this is tied to the structure the li is printed externally right

04:04:11so the thread prints the li but at that point it doesn't know the score of the first comment to put the variable on here all right so so i'm going to bring this example up because i'm i'm The complexity of our nested HTML has caused this to drive into the ditch.

...55So I have this demo where there is an option with the HTML order, and that's what we're seeing at first here, right? B-A-D-C-E. but I can say vowels last and the vowels go last and I can say alphabetic and it snaps into alphabetic order. So where I ran into hassle is because our CSS is so deeply nested and the object I want to sort, or I'm sorry, our HTML is nested and the object I want to sort is not the object that is available as the child of the grid container, I can't quite write that selector. But I can take the select version of the checkbox hacks and use the very modern colon has to find that.

04:06:05and make a CSS-only re-sorter.

...25dr3ig it's unexpected(?) to me that variables are scoped to the element and `var()` is able to extract the right version of the variable
Right? That's the part that had me laughing. So I really only had used CSS variables from Kevin C's addition of dark mode to lobsters, but I was thinking about it and something about reading Justin's post, I had the brainwave of, wait a minute, if they are integers, like, cause every number is an integer and we have to call a function on it to make it a color, then that's a variable on the element

04:07:14It's so dumb. I mean, like, I keep coming to words like dumb or crime or sin because, like, this combination of features is not obvious. But how can you not look at this and laugh, right? Oh, man. I'm going to get this working. I'm going to have to... actually remodel the comments and the grid lines. It's the parent lines that are going to be complicated. dr3ig remove html nesting into flat structure and indent them via css ?
And I'm going to change this structure and break 200 CSS selectors because so many of them are written in this very specific parent-child style. But it's going to work. Mm-hmm. That's exactly it. And the nice thing about removing that nesting is it will almost certainly remove some bugs that happen because of the way we render nested partial templates. So we do all of this... where is it is it in threat yeah so this stuff about the comment depth tries to it gets used later on down at the bottom to try to add the correct number of slash li and ol tags And I say tries because it's wrong and buggy. And the visual display of the site is currently correct. But folks have pointed out we don't have a single great test case. But there are certain arrangements of comments and children where this does the wrong thing. And I think you get extra closing tags. on some pages. And the browser is made for putting up with bad HTML. And it's like, eh, I'm going to interpret what I think you meant.

04:09:57I would prefer not to lean on that, but it sleeping dog i have let lie if we just printed all of them flat and each one had wow right so here where's

04:10:45I think they have a depth. It's not a depth. It's not stored on the, where does depth come from?

04:11:04It comes from

...19Sorting that happens in the comment has an attribute here we go parents count.

...30So there's a. threading thing that happens in. The current model is the one thing i'm thinking of. let's.

...52what is setting it on these individual oh it's in the query that fetches them out that's where it is so there is a recursive common table expression and we say top level comments have depth zero and then the database has Minus one. Oh, this is the parent's comment. Where's the other one?

04:12:29And then when you do the recursive comment table expression where it's union all, and then there's the recursive part of it, that is my parent's depth plus one. So we just asked the database. And so the database knows when we bring these back, So we can just say, well, the order or the data of the depth is another CSS variable here, right? Let's see if that broke anything.

04:13:04All right, so data depth is one. Sure, that's the correct number. And for you, it should be two. So top level is zero, and then the rest are that. And then we can use calc to say that the indent is their depth times, right? I don't know what's going to happen with the parent lines. That's all just going to break enormously. Oh, hey, look, there's even an old comment from me where I'm like, oh, this thing is brittle AF. I'm going to break it now.

...45So what I would like is for that prior comment line thing, because that's That's the line, isn't it? Where's my... What do I even print that span for?

04:14:23I reference CSS that doesn't exist anymore?

...39And I knew it was brittle, but how is it working when it's broken? So here's part of it, the comment sibling tree line.

04:15:22So let's go up to the top. The top level, the story, renders the thread with all the comments. Great. At the inner level, each comment is a div.

...51I want to move I can't move the input inside. We'll leave the comment folder alone for the moment. We'll do some shotgun surgery here. And then each comment has details, byline, but it is just one comment. Great. So I'm going to call that good. And then in each comment, let's just comment this out for now. I'll come back for these tree lines.

04:16:40Actually, let's comment all of this out.

...58and instead of having an li yeah that right there i deleted one line that that broke half of the thing my comment is only going to the end of the you know whatever i'm using git so there's that don't need these variables anymore because we're going to try to... I'll leave them. I'll probably end up using them. And then we don't have this anymore. Is this OL matching? I don't think it's matching anything. Maybe that's the bug. dr3ig you just deleted some ol at the top
And then this is the sibling tree line. I'm just going to delete that for the moment. Yeah, I must have deleted the matching oil at the top. You're right. So this, everybody's flat, but they're in the right order. And let's look at the structure here. So what I should see, and I still have a comments subtree. So that's the parent of all the... Yeah, that's just reusing CSS in a not great way to get things indented the same. So that's...

04:19:05That's this. I'm going to leave that external stuff alone and just say, fine, we'll do all our stuff in there.

...20And now I have that.

...34On the CSS.

...48Why am I not on the CSS?

...59There's already a calc in the code base already.

04:20:06There's 40 of them. It's going to be an early one, right? Logo. Here we are. So on this one, we are going to say that a div. It has a margin left. It's calculated as 11px times the variable. What did I call it? Dash dash depth. Excel or data depth.

...59I don't actually think I need the data prefix on these. They're just kind of nice. I'll leave it and come back to it.

04:21:17So they need more than 11 pixels, but there's the structure restored. Not the tree lines, but they look right. Oh, and then my big hack here becomes I deleted that span. Let's just double check in the inspector real fast. We have the select and then we have a bunch of div comments. Great.

...53So what I want is kind of etiquette thread, don't I?

04:22:07So this gets, despite the name thread, this also gets called for not quite thread displays like the user's threads or the story, the search results. So I'm going to

...32move the select in here.

...57And then we are going to have one container, no nesting. And then I can say if we have that select, then this stuff starts kicking in.

04:23:39So this is redundant. And this one has a typo. So if you choose boldest.

04:24:08Line these up so I can spot typos better.

...21That looks pretty good to me. Hey, I think it works. Newest. So there's 1031. They're indenting still. I'll fix it. 1031. So it's 1728 for hours, 1624, am I going backwards? 1031.15, 1031.16, 1031.17. I think I swapped newest and oldest accidentally. This is 11-1. Why am I doing this to myself? I could just print the timestamp in the comment. So let's make every comment start with a display of the

04:25:37have a local for story no dang so i'll just print the it's going to be too many digits in this to look at i was going to subtract it off with a story time but 507 189.

04:26:12Oh, that's the issue. I said... Where's my CSS? I said oldest is backwards. It's newest that's backwards.

...29And then... So I can combine.

...40So if it's... Also, all of the ones where it's not threaded do not get indented for depth. There's a CSS specificity thing happening, isn't there? Where did I?

04:27:11Oh, yeah, they're not LIs. That's what it is. They are, in fact, a div.comment. And there it goes. So now if I sort by score, that's not working. These are in the thread order still. So we'll look at that. 14315.

...51Timestamps are so long, it's hard to read them. So I'm going to subtract this 1730 for all of them, just to make them easier to read.

04:28:21No other side.

...35It's a little better. All right. We are getting Are these increasing correctly? 95.070. Yes. So these are in order oldest first.

04:29:24And these...

...30weirdly this one comment is out of order no so is this one i'm gonna i'm changing that subtracted value just to and nudge all of these into positive numbers so they're easier to read all right so newest is wrong but oldest is right newest is not right our oldest is not right that just reset and score they just don't change dr3ig (created_at - 3.month.ago).hours
Come on, this dumb demo works. Let's look at them in the inspector.

04:31:05dr3ig if only there were some attentive viewers on stream :(
this is by score score is going backwards score descending is what everybody wants right yeah you know dreg i feel like i'm getting away with something that i'm making these these obvious errors you're not catching it usually you're like hey buddy It helps to put a close parenthesis on things. Look at that. It works. There's score. There's newest. There's oldest. And then back to threaded. That's it, right? If I can restore. And then does this work? So these use the checkbox hack. And clearly because the structure changed, it's filtering all of them. That's kind of funny. So let's go find that.

04:32:39So if we have a folder, I bet it's something about this. No, they are in an li.

04:33:26think rather than it's because of the so it's assuming nesting where it's saying, at this level, we can. So what we really want to do is say, well, first off,

04:34:01Whenever they're not checked, whenever it's not threaded, the comment folders should just disappear. And those have a class of comment folder button. Because it would be weird, too, if you're sorting by score, like, collapse a comment and then its random children somewhere down the thread disappear. And then... Where's that 11 that I copied? Oh, here. This would look a little better if it was, like, 28. dr3ig you're coughing way more than at the start, maybe it's time to stop
Probably have to go through all of this again for the mobile.

04:35:18Am I getting worse? I'm sorry. I stopped seeing it. And being on the trail where I feel like, ah, just one more code change. Just one more code. Just one more. Oh, it's about to work. It almost works. So tempting to toss everything. All right. So the comment folder is broken.

04:36:16I guess what I really want to do is...

...54I could have each comment list the short IDs of its parents.

04:37:27There's also a star equals to do text search. And they really would have to.

04:38:07Oh, I don't want these. I want the thread up, the CSS off to the side. Oh, I'm about to...

04:39:41Thank you.

04:40:00So if it's a sibling, do nothing. If it's greater than, we're indenting. But it's parents that I want. I'm mutating this data structure in such an ugly way. I'm trying to build it up so that we only pass through once, and each one is the list of all parent ones. Let's do this as

04:41:12If we're at the same level, we just leave it alone. If we've popped out, this is the whole hassle between short IDs and comment IDs, because each comment knows the database ID. And I don't want to make these pairs, but I need both pieces of data, don't I?

...56I could almost just zip the list against itself for this, but it's cheap enough to maintain if I'm just doing the object.

04:43:10So if we bump out three levels, we have to throw away three. I'm going to need the if, because this handles the zero case. What takes off the end of the array is that pop.

04:44:34Oh, it's not doing that because I got to pass that into the... Oh, but the way it gets inlined... Yeah.

04:45:05It looks like it should work, but it ain't working. Is it a thing about the depth?

...28It's a thing about dumb edits and Drake not looking over my shoulder.

...43So then I found.

04:46:26Unsafe, or is it the, yeah, it's the unsafe operator. So that part is correct.

04:47:12dr3ig you're not showing the code only the browser
Oh, it's the. Oh, I'm sorry. Yeah, I'm also getting tired and making mistakes, huh? No wonder you're not catching my silly mistakes.

...31Sorry, it's all about visible to me because, you know, I got the whole big desktop. If other folks are quiet. I'm not talking to save my voice.

04:48:14All right, Dregs, what's the bug here? And the second time through the loop, it's present.

...47We know it's present. Because it's printing, right? Like each one prints the previous comment.

04:49:15I think we're just not What's wrong with this? Let's print these depths.

...27These are fine. I'm going to delete that.

...57dr3ig you always pop from parents.pop
Always pop.

04:50:15yeah i'm putting them on and i'm immediately popping them off what do i want to say here is it like a plus one kind of thing oh i know i'm getting tired because that's just a like scatter shot what if i just randomly change this thing

...45So we have if 1 is greater than 0, 1 minus 0 times pop, pop, pop. Yeah. 3. Oh, you know, this is backwards. That's what it is. this is if we're outdenting so then we go from like depth one two three back down to one so it's wrong on this first one no it's here parents and then the two parents in order are these and then down here the parents is reset this has these four one two three four parents at depth three that's depth four that's correct that you should have four parents yes okay there we go yeah it it is that always pop thing all right so there's that and now instead of just printing those

04:52:17How do I want to get at that attribute? I want to say.

...58This is a hack.

04:53:09Just because I know comment is rendered elsewhere.

...19So if you check it, any following comment Hold on, any following comment?

...55I can't do reference, can I? So I want to select anything that has the same. I can't use a variable in a selector.

04:54:16So I want to say on the input, if I put the parent ID as a data or as a CSS variable on the input, then it would know close anything that includes me as a parent. But I can't dereference that, can I? Because I want to say data star equals, right, like some version of input I can't look up a value.

04:55:17And I can't do it as an inline style on the input where I have that variable in scope. because actually I'm selecting those things to close.

...39I don't see a way out of that.

...48That's kind of sad.

...54So like this one needs to recognize one, two, three. So they need to have something that ties them together. And I can dereference in one direction only, and I need two dereferences.

04:56:34I don't see a way to put that back on.

...45Hmm.

04:57:11dr3ig what if add all parents as classes and closes any class that contains itself
dr3ig does that also dereference?
Can't even do it with has, and has is my superpower. What if all parents has classes and closes any class that contains itself?

...35I'm not sure I follow what you're suggesting there. Let's look at the code. So we have the parents and we're currently printing them as data attribute. You're saying add them here as classes and like, you know, we could prefix them later with something, but so like this, you're suggesting. Then what are you thinking?

04:58:20Because if I say, I can't pair two things. I can't say like comment folder button data equals a and then dot comment also a. I can't tie those two things together. One clever CSS hack breaks another clever CSS hack. dr3ig tehn hide everything that has class --data-short-id
What kind of world are we living in? How do we get it? Then hide everything that has the class the class data short ID that looks like a CSS variable.

04:59:35dr3ig that would require to select by var(--data-short-id) and we cant' do taht
dr3ig right
Yeah, okay. Because what I really want

...55They just have to have some selectable value in common. I don't know, would that work?

05:00:32If I had a...

05:01:07comment has a folder what if i did it here i can dereference when i have both in scope right so i can say

...40It's even here, right? Like there's my ID.

...47We actually have an open issue to remove inline styles from lobsters.

05:02:09So when that's checked, any comment that has the attribute data parents that includes the string.

...42Wait. So if we have 100 comments, we have 100 CSS rules.

05:03:06Why'd you hide all of them? Why'd you do that? Did I not reload?

...32Instead of display none, I'm going to highlight them in a different way.

...48I'm not sure how it's over-selecting, but it's over-selecting. So this should only hide itself.

05:04:01Oh, it's the other code. I haven't removed it. Come here. Stop helping.

...19Where is this displayNone coming from? Or this collapse coming from?

...35this one yeah actually why is why is checking one changing the before for all of the others there's some bit of styling i haven't found that's old and kicking around and messing things up it's the comment underscore text that gets collapsed right because the details are still present

05:05:40Where is this line of code?

05:06:03Yeah, correct line number.

...44There we go. I'm a bad man. I'm a bad man. Check the box. It checks the kids. All right, so there's some kind of parenting thing happening there.

05:07:03But that works. And I've got to revisit the page because one of the things about the checkbox hack that can be occasionally a pain to debug see it should have been both of those is that when you reload the page the checks box check boxes stay checked which is very nice for users most of the time and a hassle for

...46a hassle for debugging because you end up carrying state between test runs.

05:08:06It's the sibling. There it is. That hides the comment text and then applies all that to this. the appropriate comments so if we change this guy back to the display none there's still the issue with the comment folders not selecting each other but there's comment folding that one really is ugly to make an inline style for each but I can't think of any other way to get both variables in scope or, yeah.

05:09:08And this doesn't have to use this clever data thing that's going to blow up if a comment gets generated with a six-letter short ID that matches another thing. It could be a series of classes of the parents. So like you said, Greg, of, well, let's put all the parents in here as classes. So instead of doing attribute, that's really enough. I don't know. I'll play with it. It probably breaks half the site. And there's that thing with... This probably needs to be a plus. These other ones probably need to be gone. But it works.

05:10:02And it makes the page interactive for just CSS. Yeah, there we go. Now these don't, here, didn't toggle. That's it. That's it. It mostly works. The tree lines are missing. Probably 10 other pages broke, but from threaded to sorted. Just that easy. Har har, easy. That took 90 minutes longer than I thought it would. dr3ig feels like you've beaten it into submission
Anyways, I'm going to end there on a fun note, refactoring a thing. You know, this diff is going to be ridiculous, right?

...51This diff is kind of wild, but it works. Can't argue with running code, right? And then... If I can restore the lines, the sibling lines, and check that the rest of the site doesn't blow up. dr3ig you know, you could just display two versions of comments, one flat and one threaded
So like this page uses threads. Does it blow up? Yeah, the folders. Oh, it's the inline folders, but it's fine. That's it. dr3ig :D
Oh, I'm not doing two versions. That's cheating. You know, the other bug, the other bug that you didn't spot is that these, this needs to get overridden when we get out of flat mode. Because otherwise in threaded mode, you can collapse comments. And then when you go to sort by score, they're still hidden. And their folders are hidden too. I'll fix that. Maybe I'll merge this. We'll see. All right, I'm gonna end. dr3ig bye
Thanks, everybody. Take care.