Would that make you a painstakeholder?

Streamed

Fixed a bug with comment links on merged stories. Reviewed merged PRs for Japanese titles and container deployment. Worked on updating CommonMarker with @chamlis_ to handle markdown rendering differences. Painstakingly compared old and new markdown rendering to ensure compatibility. Discussed username linking and how it affects comment rendering over time.

scratch


topics
  merged PRs
    jp titles https://github.com/lobsters/lobsters/pull/1667
    deploy in container https://github.com/lobsters/lobsters/pull/1669
  bug linking to comment on merged story: 
  story repository.top https://github.com/lobsters/lobsters/pull/1668
  CommonMarker https://github.com/lobsters/lobsters/issues/1234
  hatchbox deployment tidying
    logrotate :(
    test with email rep service
    HSTS
    hatchbox notes
  if time, small recheck preview

title
  Would that make you a painstakeholder?

post-stream
  2025-07-14 fix slug, missing transcript
  pragprog -> stream index
    

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

Recording



01:50Good morning. There we go. It's Friday. So this is a stream that's one day late. PudottaPommin good day sandra9WAVE
I'm not going to bother putting up yesterday's attempt to stream on the archive or anything, but for anybody who didn't see it, I was having terrible network issues where packet loss would jump to 100% every, I don't know, couple of minutes. Makes it hard to stream. Oh, hey, Pedota. And let's see. PudottaPommin I didn't catch any office hours in some time peepoSad
Yeah, so the ISP sent out a tech who was like, oh, man, you say this happens when it rains. I found a bunch of stuff that was exposed. Let me fix that and replace it. So hopefully things will be good from now on. You know, knock on wood. pushcx Welcome to Lobsters office hours, ask questions anytime!
yeah been a second since i've seen you but welcome back so for everybody else this is lobsters office hours i'm peter lobsters is the site you see up on the stream and you can let's throw this in the chat let's say welcome to lobster's office hours ask questions anytime So happy to talk about the site or anything, and then otherwise I maintain it. If people aren't asking questions for me to answer, write live. There's also, if you look, sometimes we did a little bit of this on Monday's stream where I will run queries against the production database. We did some on self-promotion by tag. Last stream, that was fun. So let's see when I'm not doing that. I do maintenance and let's take a look at the pulls and issues. Yeah, I got one from Nav Mike. And that's all there is to look at on this side. And if we do the issues. Yeah. This one is new, but I think it might just be also a recurring one. Oh, there was also, so let's grab this, a couple of small things I merged from, I'm gonna guess yuanji-dev, who apparently is setting up a Japanese language sister site. So not too much to say about these. Where's my, get the browser on the right side here. There we go. Set myself up. I just didn't make these. So the merge PRS there's me tweeting.

05:12Permit titles in Japanese. And then also, it sounds like he is going to deploy it in a container. I guess that's Kamal. I don't totally understand because this has been very obvious on previous streams. I don't know a hell of a lot about Docker. Again, wrong. Container. There we go. HejiHyuuga morning pushcx
This one, I really like this style where he left comments explaining what he was doing and a link to an example or a doc that was super useful for me and then wrote it in a way that wasn't going to break production. HejiHyuuga glad twitch isn't being difficult today
Hey, Hedgy. Hopefully things are, you know, stable and not blanking out constantly today. Yeah, no, it wasn't Twitch. It wasn't Twitch. It was... HejiHyuuga ahhh
the line from my apartment building to the pole. So let's take a look at this bug. God, it was a problem when we moved into this apartment. And then I can't remember if we called somebody out and they did something or it just sort of stopped on its own But it did stop for at least six months, eight months. Because I remember it used to happen at the start of these streams, which is now 11 months ago, if you can believe it. And then it stopped. HejiHyuuga 11 months already?!
And then got new neighbors. And when they were getting cable connected back on like July 1st, The cable guy disconnected us along the way, just playing around, wacky and crazy. And I had to go out and be like, no, seriously, you disconnected us. And he's like, oh, just give it a second. I was like, no, come on. And then, yeah, time flies when you're having fun. I was looking at the stream archive for something else. I could talk about that in a minute. Steam. Yeah, so we got disconnected. And then now that it rained a couple of weeks later, the whole problem started again. And I had flashbacks. pushcx https://push.cx/stream
And luckily, the guy who came out, even though he looked like he was about 12, he was very thorough. So hopefully, it's fixed now. So on the stream archive here, I was touching up the FAQ because a bunch of people have asked, like, how do I learn Rails? How do I learn Ruby? How do I learn to program? So I've put some of my favorite books in because they have come up half a dozen times. And then I went way down here to the end because I was looking at a template thing on the archive page. And the first one was August 10 of last year. HejiHyuuga that's awesome
So we're coming up on a full year of streaming office hours.

08:31Yep. Yeah, it's been a lot of fun. You know, when I started, I kind of jumped in with both feet because I was like, all right, well, let's give this a serious try. HejiHyuuga i'm guessing you've been enjoying the journey? since you're still trucking this much later
And I haven't at all expected that it was going to get a lot of new code contributors, but that's been wonderful. So this link went to the story header. That's really strange. I wonder if this is a collision that the story and the comment have the same ID. Because we have seen that, and I don't remember offhand. Yeah, I mean, I'm having a lot of fun. I'll have to do a proper retrospective in a few weeks when it's been a full year, but yeah. There we go. HejiHyuuga I'll still need to make good on submitting a PR one of these days
HejiHyuuga I did submit a bug report though so that's a start
Let's go take a look at the product. Oh, that'd be great. Any bugs catch your eye? You want help picking one That actually is a significant help. Sometimes people are like, oh, there's this bug. And I'm like, how long have you seen it? And the answer is months. It's like, well, you could just tell me. PudottaPommin telling you about bug would be too easy Kappa
Okay, so yes, we have the right comment.

10:33HejiHyuuga haha
Okay, so no. didn't have a the same short id so that's not the problem all right so let's figure it out i did just let's get the rails server started i did just get this updated so i probably even have this open bfs story what's the id

11:09Not that. Why do I have a pending migration? I restored an old database backup, not a current one. So actually, I made my database way out of date. I know what this is. All right.

...38All right. So I'm going to get that. Database is refreshing, and it's off stream because the database password goes by and such. That'll take looks like two or three minutes. We'll see about that. In the meantime, we can look at this one in prod then. Well, yeah, that's obviously wrong. Ask for a comment.

12:12and get a story.

...22twitchtd hi pushcx, glad to see your internet working again
Yeah, so the redirect linked the anchor of the header. That's strange. So it's gonna be comments controller handles those short links. ah hey thomas welcome so you have been asking about the recheck demo i will i think get to that today there's i want to work on the the delayed lobster stuff that's been hanging around about common marker and hatchbox and then i think i can get through those smoothly enough we'll see i've been thinking about them long enough that it's half written in my head you know

13:22So this is the from short ad. So it calls the comment target F with the located comment.

...44That's really surprising.

...52That's just a straight-up bug, right? Options should be... Hmm, we shouldn't be generating that route, right? Let's look at the network. Let's see what... Copy this link. I want to see what we get redirected through, because maybe there's a multi-step thing here happening. So this first one. First one said. Go to the story. Oh, I get it. So it went to the story with the correct comment fragment. But then the story page said, because the anchor fragment doesn't get sent up to the server. All right, so stories controller. No, let's just fix this one. Yeah. So instead of this being story, how do I want to do this?

15:49This one will need it too. chamlis_ afternoon!
That's not good at it. What did I just change? Oh, hey, Chambliss. And the rest of these look fine. All right.

16:18Just fixing a bug, and then I wanted to jump right into your testing your common marker PR.

...37So let's see the test suite go green, which I'm pretty sure I did not write a spec of this method. So probably I didn't break anything. Do I want to add a spec? Yeah. Yeah, I think so.

17:10chamlis_ is it worth putting that logic in the story_short_url method called at the end there?
Short story URL method at the end there. That's...

...33so the story short id method url is actually coming out of the rails routes so that is extras routes my thing for papering over rails misdesign but then this one is the short id so it's here on line 150 where if you name a route rails gives you two methods named Whatever that is, underscore path and underscore URL. So when this calls story short ID URL, it is calling this. And I can't really... chamlis_ ahh, missed it was a magic method
I could override it, but that seems like a suspiciously app-specific thing to override into Rails routing. I don't want to do that. I can't quite predict that one. It just feels off. Yeah. Rails has a lot of that. So we were going to look in spec routes. So it looks like I'm making a new one. Start from here, spec routing, commit spec rb, and then

19:18What do I want to say here? I need to have a story. Yeah. And then I need to create a comment to use. Comment on that story.

...47Round two. I think it'll say redirect two. I don't write a lot of these routing helpers.

20:03And I'm not sure if I'm testing the router or the controller that invokes it. So yeah, we'll give this a test run and see what happens. Because what I want it to do is to test where it lands. Maybe that wants to be a controller spec. Did I save this the right place? Yes.

...37Yeah, undefined method record redirect to. Yeah, so I don't want to. Routing spec, I want to control respect.

21:06Anything in here about a short ID? No.

...26And a Rex. Great idea to merge stories with Anchor. So let's go ahead and say I should have grabbed that code story. In this story, it is create a story. We will do a get. Can I just do a get to because I really do want to exercise the whole routing stack.

22:33Now, I know this will fail because it puts the title in, but I just want to see the error. Rollers, comments.

...59No route matches. Because the controller spec is forcibly choosing the comments controller. Can I?

23:20No examples found. What? Did I manage to hit enter in the exact moment our standard was rewriting the file? I must have. All right, I guess we're not making a controller spec either. I'm making a feature spec. I'm just going to keep pushing this test around the suite like a billiard ball under a rug.

24:10OK, good. So now let's see. In a feature spec, I have the page object.

...33Let's see if it has a location on it. Nope.

...56Current path. Okay, let's try that.

25:11skippyblender Hey if you were to start programming from the beginning again, what path would you go down?
So that's correct, but it's not the full URL. The anchor is missing. And then put that in. Hey, Skippy Blender. pushcx https://push.cx/stream
Good timing, because I was just saying on stream that I added that exact question to the FAQ. skippyblender Oh hell yea
skippyblender Thank you
So it's just here below the FAQ heading.

...47So let's double check. I'm sorry to say you're not going to love the answer, though.

26:02skippyblender That's where I'm starting
yeah so the option should be in there all right so skippy i've heard nice things about the odin project but it's been a couple of years since i've looked at it see now current url does include the anchor i wanted it includes the the domain i didn't want i'm okay with that

...37Okay. Well, you'll have to come back and let me know how it's going.

27:00This ought to pass now.

...11skippyblender For sure, I just got to commit
And by pass, I did not mean hang indefinitely. That's very strange.

...26All right. So what if I just said that is accessing current URL didn't and boy, do I not want to debug into a copy borrow for like a two line fix. Okay, so that's good. It's just that the short IDs don't match because we're generating test data each time. So that's fine. So we'll say story short ID. And then here we will say comment short ID. Great. So since that one, I have a lot of confidence in passing. I'm going to go ahead and make the new one. So we'll have a parent story. We'll have a merged story.

28:17We will put the comment on merged. And then we will assert that we are directed to the parent short ID with the comment short ID, which is the test or the thing we just fixed. Of course, I haven't seen it fail, so I'm going to have to comment out that code and come back. But what are we disliking?

...4910 verse 11 oh i put the oh yeah the very title dependent thing yeah i don't want to rewrite all of story short id path do i

29:18Yeah, let's put the title just in here. Frici an office hours on a friday? 😲
So then this can become... So what I'm thinking is that I want to kind of... Hey, Fritji, I was just thinking about you. Yeah, so yesterday I wasn't able to stream because of rain. We had a rain delay. But I was just looking at the stream archive because I was touching up some things and you were in the archive. You were in the very first stream. So howdy. Thanks for hanging out. It's been almost a year now. Frici wow it's been so long huh... time really flies
skippyblender that's some loyalty
Did I miss the hash mark? Oh, because I was replacing. ready to be done with this bug fix, and so I'm kind of rushing. On whose part? Mine or his? skippyblender Both I guess haha
Let's see, what are we mad about? I didn't include the C underscore. I'm not thinking, I'm just editing. So one thing is, I make a lot more errors when I'm Trying to keep up the pattern of running a stream. Pattern. Parent is the word title. Yes, this one. And this one needs the other hash. Yeah, so much punctuation. Which level of abstraction is the punctuation evaluated on? Because there are like four there. All right. And then if I put this back to say comment.story and comment.story, which is what it said before, then the second test should fail. And that is, yes, that is exactly the failure of the bug where we saw that anchor to the story because it was doing a double redirect. Great. What branch am I even on? So I was talking about demoing recheck. I left a lot of stuff in my repo. What branch am I on? Head detached. Okay. All right. So I should have run JJ status before I started. All right. So this is actually not bad. because JJ split makes it pretty cheap. So what I want to do is all of the things that are not related to recheck. Yeah. Let's put all the recheck stuff, all yours going in another commit now. Yes, that's the setup commit. Yes, and then this one is the fix for 1671. Okay. And then since I've been merging things on GitHub, let's make sure I'm up to date. Oh, okay. I guess someone deleted their remote and I needed to know that. Okay. Remote RM.

34:03Yeah, I could totally see failing in a workplace context, but in an open source context, that's not really it. I would like a warning, but I don't care. So let's rebase.

...44Reading closely.

35:13Was that BLZ two seconds ago? Yes.

...27There we go. OK. All right. So we've got a new commit, and this should Toggle to close because you see the fix. I left off the hash mark so it doesn't know. That's fine. So let's grab the commit ID.

36:07Great. And let's get that. deploying and then do a quick review of this possible SQL injection. Oh, maybe this one's going to be interesting.

...48What do we see? So this looks like the same kind of thing. And then what's this?

37:00Why are these intervals appearing? And why is this not an interval helper? What?

...20this looks like slop like this is correct for what it's doing but this is not correct in the context in a kind of conspicuous way where if you just went off the words that appeared i can see how you would get to this code but this

...59Frici Seeing CommonMark in the scratch reminded me of how markdown tried to be a unique thing and all it managed was validate XKCD 927 / standards
Well, I guess you'd get called by the interval helper.

38:22Frici and my soul just dies a little
I wonder if they saw... break man bail and then they rift on this

...59there's a abandoned brakeman warning that this thing which was deemed safe yeah so this is a little bit of belt and suspenders because This object that comes back, this length is reformatted by the interval helper. Yeah, there's the obsolete ignore entry. I can fix that one up, that's fine. All right, so let's double check my memory of interval helper.

40:26brainwane Hi Peter. Glad your net connection is doing better. Currently I'm turning a Fediverse thread I wrote yesterday https://social.coop/@brainwane/… into a blog post
brainwane :)
yeah there's nowhere to get sql injection out of this you can't pass an arbitrary string through you only get the strings back oh hey nice to see you brain white i'm gonna pull up your thread actually let me let me finish the thought i have here because i think i can just merge this and then we'll take a look at your thread brainwane oh ABOLUTELY, I didn't want to instantly distract you!
yeah anyways the tech they sent out was like 12 years old i feel very middle-aged looking at this guy if he was at his job i really hope it was like his first job after middle school no you're fine people distract me the whole stream it's kind of a game of how many conversation topics i can juggle because there's also the there's a little bit of delay in the stream also so it's very easy to slip into multiple conversations

41:27i i'm trying to think if i want to revise this myself or ask nav mic to do it let's let's meet in the middle here let's go ahead and say

42:18And this can go kind of do the line. All right.

...41Yeah, I'm happy to have that kind of armor plated a little. It's better to use this kind of substitution.

...54Both of these, actually. Yeah. I'm actually a little surprised Breakman didn't give a new failure that had to be addressed. All right.

43:27It's the, let me double check this command. Yeah.

44:26Alright, so that one's moving along. So let's go look at Sumina's fun distraction. Jungle primaries.

...44I don't think I really know anything about New York City politics and the council, let alone this introduction. or this service.

45:02Interesting project.

...14You mentioned energy usage. Have you seen Simon Willison's recent posts on LLM energy usage? brainwane I need to read those, I think I've just seen the headlines
He's pulled together a bunch of research.

...36Okay, I'm curious about Whisper, because I just put it into my pipeline. So there's that UV tool for managing Python tools. That's the first thing that has allowed me to, keep Python tools working on my computer. And so I installed Whisper with it, and I replaced the AWS transcribe that I did for these stream archives. And I guess I broke this last one. Why is this still placeholder? All right, hold on. Let's put that on the to-do list. That's not a rabbit hole I want to go down.

46:27I might have bugged it, but I replaced the AWS transcript with Whisper and it has the oddest behavior where it hallucinates repeated words and phrases. brainwane which version of Whisper?
So there would be me saying a sentence and it would just have the word and 20 or 30 times in a row in the middle of my sentence, whatever the current version is. Because I just installed it a couple of days ago. brainwane https://cortico.ai/news/insight… re hallucinations
How do you ask Whisper what version it is? Frici quietly
Frici (sorry)
And then I was going to say, not just single words. Sometimes it would repeat a sentence or a short phrase. It was very strange. brainwane (that analysis is from V2, a few years ago)
On the other hand, it costs zero dollars where AWS Transcribe was starting to get expensive.

47:47brainwane Oberoi uses something else, Deepgram I think, for his City Meetings thing
Yeah, and then I played with the different models because there's medium and large and large V2 and large V3.

48:01oh yeah i didn't even notice this but it's probably got the timing thing on deep gram okay so is this well it's got pricing and enterprise in the title so it's probably not appropriate for me because i was just looking to do my transcripts a little cheaper and more reliably because if i do them on my machine i can actually see if it runs

...54brainwane https://vikramoberoi.com/posts/… yeah, Deegram, as of March 2024.
Let's pull that in. Oh, diarization. That's on my to-do list.

49:25Yeah, I wonder what... I don't know what Pianote is. Oh, diarization. chamlis_ if you go the other way and use text-to-speech during the stream rather than speech-to-text afterwards you'll get the transcript for free
Oh, it's Pianotate. Anote? Pianote. There we go. I only occasionally have had voice guests on. God, but every stream would have to be 12 hours long because I can't type as fast as I talk. PudottaPommin you just prewrite every stream Kappa
especially if it shifted me from talking mode into writing mode. I mean, you all have seen how slowly I write posts and comments and things. Pre-write every stream. And the idea of streaming is, for me, one of the reasons I've stuck with it for almost a year now is it helps me time box my lobsters time because lobsters would like to take over my life and have, you know, 40, 60 hours a week of development and moderation stuff and the moderation side is pretty light at this point it's i have so many ideas for code things i could do and i would like to give every code contributor immediate response on pull requests and issues because that's there's a big difference between getting a response in a half hour or an hour or a couple of days anyway speaking of so that's why i turned those two little things around because i peeked at them in my email i don't actually think yeah i don't think i talked about these prs from this two days late person on the last stream i think they came in right after the last stream I don't have a lot to say about them. They were fairly small, but it's clear that they were trying to set up a local instance of the codebase because they're developing something against production lobsters, some kind of scraper or client or interactor, because they also left a couple of comments. The PRs were, you know, I ran into this issue getting set up. This got me set up. But then there was like this feature request for a feature the front end doesn't need. You can kind of see my comments on the pull requests and issues get a little more grumpy. Because I left like a confused one in here and then I left a like, okay, you're phrasing your feature request as a bug? Yeah, this one. And also you're touching on a rails miss design and you don't know it because you haven't looked at this repo. Because whatever his thought is and I don't actually want to take on a ton of maintenance work for somebody else like that. It was kind of rude it was like oh here's a two line fix for this header issue and then also 30 json endpoints that you get to maintain indefinitely. That's not actually a help.

53:05So this is where I wanted to spend time, was Chamelis' Common Marker PR. And this was why I updated my database. Yeah. I look now.

...37Yeah, OK, so that's up to date with yesterday afternoon. Great. So let's. Let's get over to that branch.

...57I made a bookmark for it. That's not helpful.

54:12I think if I know her branch name. Yeah, OK. So if I want a new commit, update common marker at channel list. Aha, exactly where I want to be.

...36pushcx https://github.com/lobsters/lob…
So we looked at, so for anybody who doesn't have context, what this pull request does is we have a dependency on common marker for rendering comments. And the way the code works has some basic memoization at the record level. So we save the markdown that the user writes for their comment, And then we also save the rendered HTML. And that's both kind of a cache to avoid a somewhat expensive operation, especially on longer comments. But then also, it's a stability thing where we render comments consistently, even though I think we started with our discount, which is a Might be a blast from the past for Rails coders on the stream. And then we moved... I don't remember if there was something intermediate. Maybe Chamelis knows because she's clearly spelunked this history. Then we moved to CommonMarker eventually, which is what we've been using. And we are now updating to the current version of this. The API has changed. She's worked through all of this stuff, but we see... differences between how comments are rendered. And some of them are really minor, like you can output a Unicode character or you can output the HTML entity for that, the ampersand, whatever, em dash, right? And those kind of minor differences, I don't care about. chamlis_ I think it started with a homegrown regex markdown implementation
brainwane On the Whisper hallucination/repetition thing: I think, based on https://github.com/openai/whisp… and https://github.com/openai/whisp… , if you ran into that issue with model "large-v2", it's worth trying Whisper again. "large-v3" and its successor (starting November 2023) fix the issue. The Cortico analysis was from June 2023.
i care about semantic differences of is this going to put paragraph breaks in a different place is this going to we caught that it was trying to enable code highlighting oh yeah that well i'm glad we're not running that anymore i'm okay being incompatible with that so i think what we just have to do is write a little script to loop over all the comments and re-render all of them. And I've done this in the terminal, but we also want to be able to sort of upgrade the old comment text to the new one to handle these minor syntactic differences and highlight any remaining semantic differences.

57:13brainwane OH INTERESTING
brainwane ok, good to know
hmm i actually saw it with large v3 and i saw less of it when i changed to large v2 i think is that not oh it's

...43Oh, I ended up just removing the mention of the model. So then.

...55Oh, OK, I guess I went back to large. OK, so I'm misremembering, so I this is why I check these things. I jumped around a bunch and I tried different models because I did like Google this problem and I saw people talking about the repeated text. I honestly wasn't reading closely enough to know if it was going to hallucinate and insert a word or two or really get a sentence odd. But when you run it, it scrolls the transcript on the terminal and just watching it go by, seeing 40 ands in a row kind of visually jumped out at me and then seeing the same sentence five times in a row visually jumped out at me.

58:50brainwane so, sorry, I think I got mixed up -- which model were you using where you got those repetitions?
It's one of those things where the stream archive, I have a pretty low quality bar for it because it's a free thing. It's not a critical dependency for anybody. Yeah. I think large V2 is where I was getting those repetitions, and I'm still seeing some on large V3, but fewer.

59:36I think there's a shorter way to boot rails. I think I can just say require.

01:00:04Thank you.

...38Too many dots.

...49Okay. There we go. Okay. So now we've got our walking skeleton. That is a strategy straight out of Pragmatic Programmer of get anything working first so that you're just debugging setup stuff. So let's see, you know, I should have put on that list of books I constantly recommend.

01:02:16Let's not say identical. We'll say acceptable. And then I did this before. Markdowner is what I want to invoke so that we're going through this. You know, it's funny, I realized off stream, some of these comments are going to fail to render because they do the username linking live when they render. So if I said at Alice, it would link to Alice's profile here on lobsters. if Alice changes her username, that continues to be a link to Alice's profile as if the Alice username still existed. And then we will see this now when I re-render the comment, you know, four years after I left the comment mentioning at Alice and she's changed to at Carol, we will see that as a, semantic diff so that's going to be a hassle along the way because usernames are not a first class object in our system but we are they are starting to enough accumulate enough functionality they probably should be but it's again it's one of those things that's pretty far down the list

01:04:27chamlis_ excellent point, hadn't even considered that
alex4tmm cant it be saved in the comment as refrence to the username instead?
Well, it gets harder than that, Alex, because when Alice changes to Carol or like Alice changes to Super Alice, right? People change their usernames because they just want a slightly different handle. Like I used to use the handle Malaprop online. This is forever ago. But then when I say forever ago, I mean like this was the mid-90s. late nineties and then like the entire world came online and many, many, many other people had that exact idea. And so it stopped being unique and usable. And so I changed to push CX and I don't care if folks get redirected from Alec Brock to push CX, but if Alice changed her handle to Bob, she may care a hell of a lot and not want that to be redirected. And have added a bunch of functionality and a bunch of text around the invite system and around changing your username to make sure to explain to alice hey if you change from alice to bob you're going to see that in the moderation log which you may not want and we do that there are so many so many use cases we're trading off against each other one of the sites Founding commitments is transparency and moderator actions. So if on Monday you load up Alice's profile and then on Tuesday Alice's profile 404s, what happened? Now on many sites what that means is Alice was banned by the mods and Alice is just gone and there is no indication Alice ever existed. Lobsters doesn't work that way, right? Like you can go look at the moderation log. And if you look at the moderation log, you will see Alice changed to Super Alice in the moderation log. And that is specifically for this scenario. So it doesn't look like the mods are secretly banning people. Because of course, an evil moderator could pull up the root database console and pull all kinds of shenanigans. And... We don't want to do anything that would look like that kind of evil has happened. So for username changes, we log those. And then we have a note saying like, hey, I got to work on that. I think it has to be a click-through thing because people, they see the form. And when people look at a form, they think about what they can do with the form and the shape of the form. And they mostly don't read the text on it.

01:07:21pushcx https://bookshop.org/p/books/do…
this isn't an indictment of them this is not a they're dumb they're lazy this is what's happening is that they are task focused when they come to do something computers have so much complexity so many distractions so much confusion that they end up pretty laser focused on the thing they want to do and so they've like hunt in for that exact form control brainwane Appreciating your not-blaming-users point here
alex4tmm so they just click without registering the info you mean
And they don't see all of the stuff around it because there are so many distractions and if you look at our settings page, I mean that form is like eight screens long, you have to skim. So just having help text there is not enough. Right, but it's not that they're not registering, although that's sort of the problem it's.

01:08:20Forms always end up overwhelming, and everyone has been trained by the computer that you're going to get. You're going to get a pop-up up here about, oh, they want to use your cookies, your location. You're going to get a chat box down here that says, hi, I'm Robot. I want to help you. You're going to get a cookie notification. You're going to get a, oh, and then a text message came in. And then... this thing it says you know the box says cancel but then the help text says don't you want to not cancel your upgrade subscription and stay on the regular plan because they want to trick you into staying subscribed to the streaming service or whatever right so everybody is used to this thicket of distractions and misleading stuff and they get really good at brainwane Yeah, a bunch of other intrusive, exploitative BS have really poisoned the well for anyone who actually needs to intrude on the user to tell them something urgent
stripping out all of that extraneous stuff and focusing on, I'm looking for a username field because I want to change my username, and then they don't see all of the stuff around. Yeah. Brainwave, that's another great way to put that. And so this book, Don't Make Me Think, which is one of those things that I hit everybody upside the head with. It's one of my favorite references. brainwane well, not intrude on, but draw their attention, interrupt them for a good reason
So it comes at it from the perspective of if you are designing a form, how do you understand that people are in this mindset and present to them a form that they will quickly understand that matches their preconceptions?

01:10:05brainwane yeah! understand their EXISTING mental model so you can adapt to it
brainwane Thanks for the heads-up about your experience. I am finding evidence that recent Whisper models still continue to confabulate sometimes, and I found some humor in this example: https://github.com/openai/whisp…
which if I had been thinking, I would have realized I'm two seconds from done with this script, and I would have started it running, because it's going to take a minute to run while I was explaining that. Yeah. The other place that I see a lot of that, do comment. What am I doing wrong? Oh, it's up here. This one needs to be class. So it's a, I thought humanize was what they called it. So if I said 3000, commons, no, commas, no, no, no.

01:11:04I just want the number, the thousand separator, and I don't want to like call split number with delimiter. No. No. All right. I'm not digging around in the helpers. We'll do without the comma.

...30All right. We are going to see. 59,000 dots that's going to take a second, although actually I just wanted to see this start we're going to let this run. For a little bit and then i'm going to actually edit this we only see do some of these. brainwane btw, people who make command line tools, if you want to better understand your users' mental models so you can choose better wording, argument structure, etc. that your users will more intuitively understand and find ergonomic, we did this with UX research and design work with pip, and you can too https://harihareswara.net/posts…
Because we're going to see errors right off of the BAT and we're going to go. We're going to go in reverse order because the most recent comments are probably mostly fine. It's those old ones, especially our discount ones that are tough. Oh, that's great. Yeah, I remember discussing pip with you and I was not a fan of pip. But that was years ago. So I'm curious what you wrote last year. Oh, I was going to say the other thing about understanding mental models is I've mentioned 30 by 500 on stream of this is the only entrepreneurship course I like in that It is a real repeatable process for understanding customers and doing customer research and then developing products in response to that customer research. This is not, I have a brilliant idea, how do I market it? This is not, I made a game, why won't they buy it? This is not, How do I get a brilliant idea and raise VC funding, this is the very specific skill of no start from customers and understanding what they want and how they see the world and then make something that well and interact with them and then make something that fits their needs.

01:13:22there's that and then. Let's just go ahead and start looking at these diffs.

01:14:00alex4tmm did the author of the book used that to make us buy the book? Kappa
the author of the 30 by 500 is an online course and yes she did and he obviously alex is also a author i guess it's mostly amy writing and alex managing stuff all right so here's a div okay so we have a diff of yeah so this is what i was talking about with semantic stuff. Why did we get multiple? Because I didn't exit. I really only wanted one. I want to start with one at a time here. So let's put that in there.

01:15:06I'm going to tweak something here just to make this easier for me to see. Both lines.

...31Got to do it the other way around. I'm just trying to put a dashed line between these things so I can visually spot where the one ends and the next starts. Yes, it's OK. I swear, it's you. It's you calling standard rb in the background. OK, so this is a difference between these quotes. So this is the canonical syntactic difference that I didn't care about. pushcx https://stripe.com/blog/api-ver…
So what I'm going to do is... And this... Googling for a thing. So there is a post from Stripe about how they do their API versioning, and I am going to steal basically this strategy. chamlis_ thanks brainwane, that looks super interesting. I know I struggle with a kind of "curse of knowledge" where I lose sight of UX issues as soon as I've internalised how to work around them
So under the hood, one of the things about the Stripe API is when you hit it, it pins the date you first start using the API. If you think instead of having a version number, it has like a date. And so if you send a March 2024 request internally, do they have a little diagram? alex4tmm these stripe guys are smart :)
They walk it through a set of transformations to bring it up to the current version API. And that's what we're going to do. Maybe in the full disclosure interest, it is worth mentioning that I was a Stripe guy for four and a half years. I did not work on that API, and that blog post was written more than a year before I arrived, so I don't get any credit for it. But when I arrived at Stripe, that was actually one of the first things I wanted to see. I wanted to read the code, and it you know, stripped of a hundred irrelevant details. That blog post is exactly what it looked like when I looked in 2018. alex4tmm oh cool, i was looking into sorbet at some point i found it interesting :D
So we are gonna say, yeah, I'm a fan of that Markdown, or I'm sorry, Sorbet. It's, I think it's great.

01:17:59Good. Now we're going to do the transformations, right? Ah, struggling. Where's my...

01:18:24So the old one is, it creates this. And then the new one is you get a curly quote. And both of these are acceptable.

...54Not even going to try and type a curly quote.

01:19:10All right, so we got the same comment. Let's find that. Here we go. Hell IP. Whatever this is. Just a thought. OK, so that's a ellipse. Hell IP is actually H ellipse. Let's make this a set of transformations. Because otherwise, we're just going to have the same code for each one, right?

...48Don't need that. We're doing do end. Jim Wyrick style. We are... Yeah.

01:20:05Let's grab all of that. That's a key. That's a value. That gets a comma. I'm real sloppy on style because I've gotten comfortable with standard RV. And it'll just reformat everything. Let's refill the clipboard. There we go. And grab you. We're going to see how many of these there are. There may be like a million of these, but this is the only way we're going to know for sure that we're rendering things correctly. All right. What's my syntax error? Extra parenthesis. There we go. Oh, that's not what I thought it would snap the style into. That's a little more readable. Okay. All right. that on the side because this is going to get longer all right wrong argument type symbol array because I made those actually into symbols accidentally one of the nice things about doing this and the reason I want to do the fat arrow style is because then I can also do regex if we see something else all right Who spots the next difference in this comment?

01:21:48chamlis_ is it the old or new commonmarker that's doing the html encoded versions? I'm surprised it either started or stopped being acceptable to use the unicode version
Is the difference a trailing new line?

...57The new one are using. This one that says markdown is the old version that's passed through the transformers, which I'm not outputting the right thing. This one is the, am I outputting the right thing and it's not actually replacing? Yeah, actually, we're seeing a bug in this script. So, oh, it's not, I gotta do it in place. All right, so now, I'm turning the original comment into this. chamlis_ there's an ’
And since there's still a difference between what I've turned it into and the new one, OK, so the difference is just empty lines between paragraphs. brainwane @chamlis_ Glad it might help! Yes, that "curse of knowledge" issue is so common that I think it's unusual and noteworthy if a practitioner DOESN'T experience it. The experience of becoming an expert usually includes forgetting what it was to perceive the world as a novice does
So we are going to say that slash p followed by rsqo. Oh, good eye. I'll get that next. rsqo.

01:23:06We'll turn this into slash p. Yeah, very true. So where was rsqo? Ah, companies. So we got a curly apostrophe.

...36Okay, so that was all the differences we saw in that comment. Now we're on to this one. That looks like the difference is... Because I don't have an extra... Okay, I do have an extra put, so let's get rid of that. We may need to pull in something that can generate a diff. Because the alternative is, I do like print out the code points. I wonder if this is like the commas are different or something.

01:24:37Definitely don't need to render this twice. Let's name these a little more clearly so I remember which is which. There we go. OK, so I can see a difference right instantly. And it's somewhere on the second line. No, it's on the third line.

01:25:16brainwane https://en.wikipedia.org/wiki/D… I learned about this from the late Mel Chua. "Stage 5: Expertise ..... Experts often struggle to precisely explain their actions."
There is an extra 10. It is a trailing new line. OK. Let's go ahead and just trim that, because I don't care about leading and trailing whitespace. And I don't want to care about that. I'm going to do it to both of them.

...41It's not trim? Is it strip? I never remember these. OK, it's strip. In SQL, it's prim, and I was just looking at this kind of issue in SQL. All right. chamlis_ I'd really love to be able to work on something with real user testing and feedback at some point, for sure
chamlis_ are you able to pipe them into difftastic somehow?
so this one is the rel equals ugc and rel equals nofollow okay that one's a little more painful to update but that's okay i Probably could. Really, I think what I'd have to do is dump them into two files and then shell out. For right now, while these are still easy enough to pop out at me, I'm OK with it. But that's probably where we're going to end up.

01:27:03So let's say if we have not quote plus this is my capture.

...30Why are you turning yellow? What are we mad about?

...41Because I'm writing it like a, you know, funny that the Ruby is the part I have the syntax error with, not the regex. All right. So then this should become a href equals backslash one followed by rel equals ug, ugc. Oh, I still have a syntax error. What are we mad about? Oh, the quotes. Yeah, let's just go ahead and say that so I don't have to think about escaping. OK. I lost the replacement. How did I not capture correctly? Is this one of those where it's not parentheses, it's backslash parentheses? There are so many regular expression engines, I can never remember these little quirks. So, no.

01:29:12OK, so that does match.

...22And it does grab the URL. So why is the script not?

...35Is it the backslash 1? I mean, I can do that. that'll work okay there we go there's one more comment down So a block quote is formatted differently. And again, it's a new line issue. I almost want to strip out all the new lines. But they're going to matter in pres. So we'll take a block quote that has that. Actually, we don't need regex.

01:30:37And that becomes a block quote with out, without.

...47No, it goes from without to with.

...58And on the other side, goes from without slash p.

01:31:26Oh, it's the slash on the block quote. I didn't add that, so we still had a difference.

...42OK. So this workflow needs to get sped up a little. I'm going to grab this and close that. What is it? And then here, we'll just run that every second.

01:32:16So what's the next difference here? So now I'm keeping it on screen. It is still this, all right, so we made block quote p. Oh, I got it. Slash p slash block quote needs to become slash p backslash n. All right, so wait one second. All right, so that matters. There isn't a new line between the two, okay? so if we have slash block quote and then a new line and then an open p the new one renders that without and got a syntaxer easily fixed

01:33:23You actually go from two to one, not one to two.

...32Those are pretty identical. Maybe this is where we get into divtastic because I don't have to drop into the code points again.

...49yeah so one of the ways i compare is like i just look at the end of lines because i can snap my eyes up and down and if they're different they pop out but those are the same all right i have diphtastic installed right good

01:34:30And instead of this, we will call. Seems legit. Failed to load command. No such file. It's not diftastic. It's dift. Can't find executable executive t. Clearly, that watch is running in a funny little environment. Can't find executable for gem divtastic. I guess it's just hanging around on my system or something.

01:35:33All right, let's just do regular diff. You say nothing. That gets returned. Is there going to puts? No. I typoed. Ah, that slash block quote needs to become slash block quote. All right. So there's A different difference.

01:36:10chamlis_ ndash
And I wish we had the. Some kind of inline. And.

...29I'm not. Ah, here we go. Good eye. I think that's just the regular hyphen, right? Yep. Okay. Something about a span. Data escaped character. That's an odd one. Is that some kind of a chamlis_ huh
anti injection very aggressive oh man that's a lot of logic i don't want to try and recreate

01:37:41Google, I put quotes around and you gave me a page without? I guess common marker is the gem.

01:38:03dlamz quotes are a suggestion to Google these days :(
To allow any post processing, why do I want that? I want to find code. chamlis_ I think you need to disable escaped_char_spans in commonmarker https://github.com/gjtorikian/c…
I want to find docs.

...27Wrap escaped characters in spantex. I mean, yes, but you've got to tell me more about whether I do or don't want to turn that off. Because I kind of want to turn that off, but then it's clearly a security control, right?

...56I mean, I see the option to disable it, but I don't understand the implications of disabling it. Because maybe there's some... xsx that that would interrupt and so if i transform this stuff to get rid of that then i'm going to silently also toss a security control so i think i'm going to go the other direction now

01:39:49chamlis_ seems it's not a security feature https://github.com/kivikakk/com…
And just do the same structure to figure out if these two are the same, because I I think I want to leave that enabled, right? I want all the XSS protection. It's not a security feature? Really? So this has to become a, I'm going to click on that link in a second.

01:40:21No, I want one character followed by a slash span. becomes just the one character. But we're not doing that to markdown, we're doing that to new rendered. Alright, so that was that different. Let me look at your link.

...50To know if the character was originally escaped or not.

01:41:05That's a weird one. Like, why that one period? It had a forward slash in front of it, not a back.

...23Yeah, and they're doing it around the at? Who escapes an at? I don't get this one. I'm going to leave it alone. I think I'm okay with this. Let's leave that in there. chamlis_ yeah caution is understandable
I don't know. I'm a little belt and suspenders because if the site gets hacked, it's going to be XSS first, right?

...47All right. So this one, we have some GTs that I cannot simply... All right. So we have... Alright, so second is we're inserting a bunch of attributes. Channels, if you're watching close, do you want to figure out about these anchor tags? Because I don't want to add a bunch of anchors to a strong tag. I don't understand that markup choice. A strong tag is not automatically a section heading of some kind.

01:42:33chamlis_ yep can do
And then, oh, a local link loses the UGC. That's interesting.

...49So let's make this one say HTTP. And then this one is, if it doesn't say that, then we know it's local and that doesn't get that. It didn't have the nofollow because it's relative.

01:43:35Okay. So now that part matches the GT thing. So if I transform. Yeah, I got the feeling that if I, well, if I transform a right angle bracket, it's going to break all these tags. rotated8 extra space at the end of your new match
I wonder if this is just.

01:44:13Okay, so this is a difference between the two of them. Extra space at the end of my new match. rotated8 line 23
Are you looking at a specific line of code here on the script?

...43rotated8 \\1" > shouldn't have the space
I'm 23. Oh, yep. How did I insert that? Oh, because I was pulling out the... I'm distracted? There's someone with a bullhorn outside.

01:47:19pushcx I'm muting a sec, real loud guy outside
chamlis_ it's the "header_ids" extension, it's a string option to let you set a prefix for the ID, so maybe false or nil will disable it?
pushcx some very strange thing happening, someone yelling really loudly
brainwane you are reminding me that it is within my power to just buy a bullhorn and that maybe it wouldn't be the worst idea to have one around for emergencies
chamlis_ text-to-speech wouldn't have this issue
chamlis_ by default it's an empty string which is why the id doesn't have a comment-specific prefix
All right, things have settled down here. Maybe it was just the worst car alarm in the world. What are we mad about? Extension must be a string, but the others are symbols. chamlis_ it doesn't like the false
Obviously, that's not going to work. If I change this standard, it's going to yell about the chamlis_ got FalseClass
It doesn't like the false. Okay. That was the difference.

01:48:09All right.

...17All right, sorry. I totally got derailed by the weird ass noises from outside. It was one thing too many. I had the stack overflow. So I'm going to actually change that 1,000 down to 100, because I get the feeling we're actually starting to make progress here. chamlis_ I've got to do a couple of things, back in ~5 minutes
not yet making it through 100 all right so it's the gt thing that it's taking all of the inputs greater than yeah all right we're gonna this is ugly so if i change that gt see in a bit i bet if i change this we're going to start seeing errors the other direction

01:49:22Now we have an error about a missing line. How do I get diff to print a context line?

...42I guess I don't.

...53Dash C.

01:50:09OK, whatever. Stop it. Whatever diff that's running is different than the one I'm running in the terminal.

...30Or not.

...37So the man page. Just doesn't match. All right.

...50Well, we'll turn on the other debugging, and that'll show it. After the strong, it removed a new line. So I think we can be pretty general about that one. Probably if we have a tag or a closing tag. Anything that's not that.

01:51:36Followed by two new lines. That can become just that, followed by one. I want to know that we're going back in time, because some of these edits have the potential To back us up. 53. I thought I started from ID descending. Oh, findEach overrides the order. So we are doing the oldest stuff first. That code highlighting. No. I'm confusing myself with the extra diffs.

01:52:34yeah so the pre is picking up an inline style and then also inside the code so there's something here in the code highlighting that didn't get turned off

01:53:09Syntax highlighter, can I turn that off?

...27Yeah, Chandler's already turned that off, but we're still getting something. It's a shame to lose her right as we run into this bug.

...51So I'm going to just ignore these for now.

01:54:32And then this one, so span becomes nothing, becomes nothing.

01:55:04What did I do? I didn't copy and paste. Let's just copy and paste.

...25OK. And then we got an extra slash span. Oh, yeah. OK.

...47Probably not catching it because it's multi-line.

01:56:03Can I just tag the regex as multi-line? Yes, okay, painless. What is different here? Oh boy. It's script, a piece of white space. Okay. pushcx Chamlis, when you're back, found some syntax highlighting still enabled
So in the old one, let's leave a message.

...39chamlis_ just got back
Let me go ahead and just say, This is going to be multiple white spaces. do you see online 37 and 38 on the, somebody had a three with a code. chamlis_ got it, thanks
I can find that comment again if needed, but P.

01:57:11Oh, look at that. We just went through 100 comments without a single error. So there's our first little milestone. So now, instead of saying limit 100, let's find 1,000, right? Ah, made it to 106. We're getting there.

...58Yeah, now I really... Actually, if I can run... Not as nice a workflow. Oh, I thought it was going to do the inline highlighting. Damn, that's what I wanted. chamlis_ oh, silly me, the plugins option is a separate argument to parse, not under options
To show me the exact... Is there a word mode? No. Aha. Aha. it's not highlighting the words let's go ahead and so i'm gonna comment these out so that we get back to that failing comment yep so plugins goes where then separate argument to parse not under the options okay so here

01:58:59Like this. That's a little different. Unknown keyword plugins. It does not go to parse.

01:59:36chamlis_ oh, parse does not have the option at all
Parse does not have the option at all. Yeah.

...52chamlis_ it's an argument to to_html, my mistake
It's an option to two HTML. Okay.

02:00:12Well, that didn't error. Yep, you got it. We stayed on this comment, so that means that wasn't it. chamlis_ oh nice, third time's the charm
All right, I'm going to break that up a little so I can actually see what's happening.

...35Oh, not that. Like that, they're keyword arguments. I've been playing with a Ruby style where chamlis_ curly quote on Betaworks
functions are allowed to have one positional argument but if i want to have two i have to instead only use keyword arguments and kind of coming across really nice i thought i had a I do.

02:01:31chamlis_ went from straight to curly
Don't you have a word dip?

...45The curly quote on beta works. How do you see these? Oh, my God. All right, so let's. It's probably. In this case. I feel like that's an error. That it's replaced a straight quote with a curly. I don't think that's a thing we want.

02:02:20So this is saying in parse, we can have options parse smart true, by chance options parse to smart false. We've gone from failing on comment 106 to failing on comment two.

...46because of the earlier stuff I did with these quotes.

...59Because all of those were smart insertions, I guess. I bet there's going to be a difference between our discount and common marker here.

02:03:44I jumped up to 177 at least. What was the commit ID you found that had the date that we switched over?

02:04:05It's this.

...14chamlis_ https://github.com/lobsters/lob…
So we made that change. Why is there like more than two weeks between these dates? I guess you revised something. So probably we deployed this around August 24th of 2012.

02:05:12chamlis_ ^ that's for switching to commonmarker
Oh, okay, so wait, August. So switching for common marker was when? 2017. Then what is this date I was just seeing? Okay, 2012. All right. Well, we're still in very old comments.

...57L-S-Q-O, didn't I? No, had R-S-Q-O.

02:06:08That got us a couple more.

...28This one is there's a close tag and an extra new line. Which this should have caught, right?

...42Unless there were multiple. Yep, there were multiple. So we turned like three into two, that kind of thing. The output of the new one is a lot more regular. Whereas I bet a bunch of these changes are from the original. You know, like someone hits enter three times between a paragraph and it persists it. So we have an M. Oh, here we go. This one, this might be our first semantic difference where this comment is being parsed differently. So let's want to grab this and then just for

02:07:56brainwane btw if any of you are in NYC and want to talk local civic tech or local politics let me know (am reminded because of the context of a blog post I'm finishing up)
Yeah, so we rendered this comment as having italics. That's what's saved right now, but the new one does not treat that star as meaningful because it has a space after it.

02:08:22So...

...30All right. I'm going to bite the bullet on that one, I think.

...43And say. I'm guessing it's not going to be the first one or the only one. So let's do this.

02:09:18graefchen Markdown is indeed weird. limesLurk
Yeah, markdown from different libraries over a span of 13 years. Almost exactly 13 years, yeah.

...35Oh, it's a meta comment. Why are we failing on this saying? Did I type the wrong ID?

...50chamlis_ now I wonder if there's a markdown "decompiler" you can run on the markeddown column
Why is it not skipping this one?

02:10:07would all be solved if it was a lisp and things were homo iconic homo iconicity solves every problem i actually found myself wanting more iconicity the other day so this one this is really interesting this one is an improvement where the link was missing the rel ugc or the rel no follow like that is straight up a bug but you know i say bug But I know we didn't add the nofollow at first. So we'll go ahead and do that. So if we have an ahref without anything, we do add the UGC.

...59No, where's my typo? So we have a link. Oh, oh, it's not that. That's an interesting parse. They left off the HTTP colon. They left off the protocol.

02:11:21So that might even be a thing in the common marker or common mark caught that this kind of relative style URLs. Yeah. Oh, what are we mad about? Oh, because I didn't switch these to, especially when dealing with tags, I should just have already reached for this.

...59All right, so we're at 244.

02:12:10So if we have an a href equals.

...43graefchen Seems like the "rel" is missing in the upper one. limesLurk
about so if we have an href that goes slash slash and then closes we're going to turn it into the ugc all right let's ask ruby what it doesn't like about my regex

02:13:20Yep, that is indeed the difference. So there's my string. And here's my regex.

...37And I missed the percent on the regex.

...46So it matched. If it matched, why didn't it replace?

02:14:06It's not one of those other ones coming along and undoing what I just did, right? There it is.

...23Juggling a lot of state. OK. So we're at 335. And I'm starting to notice that we're actually getting a little slow. So I'm going to stay.

...42Let's just start at 300. And we'll have to delete that at some point.

...56Oh, that's interesting. So it picked up the word www, and it inserted a link. www. it thought that was a link so that one looks like a bug do we think i don't think that's common marker i think that's going to be common mark

02:15:37chamlis_ the base rust thing is "comrak", by the way
How the hell am I going to find this? Cause this is everything is com rec. Thank you.

02:17:03All right, so yeah, I don't want to be in the weeds of their auto link parser.

...13But if they match, dub, dub, dub, there's some. Yeah, then they make inline. So they're doing, yeah. So do we want to accept that change? What's the comment? How bad does it look? Oh, right. It's not here. You got to ask for that comment. It's funny. We keep catching these metas.

02:18:15So I bet the only thing I can turn off on that one is auto linking entirely, right?

...52chamlis_ yeah :(
All right, I think I'm going to just accept that one and take a note of its ID. So it is 335.

02:19:24I'm doing this instead of transforming it, because I want to see if there are more of these.

...33What else do we have? This is some random entity. Oh, yeah. It's doing a HTML entity for that. chamlis_ we could fix that up in the tree traversal, I suppose
So that's ampersand hash 42 becomes a star. That's acceptable. That was weird. Why did I see that bundle there? We could fix that up in the tree forest. maybe let's think about that one for a minute because i maybe we want to report that one upstream because i don't think that's intentional www dot is technically a valid domain because domains can have a trailing period But realistically, you would never want to do that. If you were accepting www dot, you would accept every word dot because someone could have a local host name for my cat's in the tree, period. Well, tree, period. I might be. I might have tree in ETC hosts. Yeah, I think this is a bug.

02:20:49Oh, that's interesting. This one we definitely want to turn off. Something is transforming a plus one. Someone manually wrote, I want to see the exact input, but I'm thinking they wrote the colon plus one. And then the new version turns it into

02:21:19chamlis_ reading the GFM spec, I think it is a bug (the www. is supposed to be followed by a valid domain)
Yeah, they wrote colon plus one colon.

...27All right. You wanna report that bug? chamlis_ I can do, might take a shot at fixing it
And let's figure out this emoji.

...46because that's going to be an option or a plugin, right?

02:22:18chamlis_ it's shortcodes
Shortcodes. All right, so that's an extension. So I will go, no, here, I'll go.

...35Where's that highlight IDs I added? Header IDs, yeah, OK.

...49It's great to have you here on stream working through this with me, by the way. I appreciate it.

...58Hey, we finished another 100. chamlis_ no worries, it's me that didn't catch these extensions in the first place:)
We're up to 403. So I'm going to bump this. Actually, let's change that down to zero for a second just to make sure I didn't break anything ahead of me. And we're still on 403. Great. This these are so fiddly I mean I don't know how you practically could have caught these differences, without a copy of the production database.

02:23:35chamlis_ I'm confused why "ID DESC" is giving us the early comments first?
So this old one had key tags. I wonder if they manually wrote br.

02:24:02No, they wrote new lines. All right, so we have the changes in the BR. Okay, so the old one did not require an empty line before the four space style code. And the new one does. chamlis_ also it's <br/> -> <br>
don't think this person wanted a code block i think they wanted new lines or no yeah they wanted this like indenting okay

02:25:09chamlis_ (as far as I can tell either is acceptable)
The ID desk isn't. It's the findEach overrides ID desk. And I did findEach so that it wouldn't immediately blow the stack trying to load 600k comments. And at this point, we've started. Yeah. Oh, it's the BR. Yeah, you're right. It is. BR is very old style.

...49We're still going to get a diff about the, that's interesting. The new one inserts a new line after the br.

02:26:32chamlis_ you missed a \n on the RHS of that replacement
Why don't you like this?

...45br tag followed by something. I don't know if I just said br is always followed by a new line.

02:27:02Why is this not updating? chamlis_ line 26 now
You missed an N on the right side of that replacement. You're looking at line 25? 26. Sure about that? I was trying to do two changes. Oh, yeah, you're right. All right, thank you. It's starting to run together for me.

...44So how about this pre-code? The difference seems to be the old one did not require a new line before, the front one does.

02:28:13Because it's causing a series of changes there. I'm going to just accept that for the moment.

...26So 403.

...41chamlis_ > An indented code block cannot interrupt a paragraph, so there must be a blank line between a paragraph and a following indented code block.
chamlis_ https://spec.commonmark.org/0.3…
Ah, so the old one was non-compliant. Alright. The comment will still read okay. And we jumped from 403 to 465, so we're hitting fewer of these. Oh, that's interesting. So the Old one apparently required a space before bullet points, and the new one does not. So this one is a semantic difference, but it'll look nicer. So I'm just going to skip it. We'll see how many there are. I really don't want to write a regex for that.

02:29:50or 68. I wondered rotated8 this one is </li> on a new line rather than same line, no?
and get a diff bigger than would fit on the screen. rotated8 er- 465
This is the same thing because I see that leading dot and then these.

02:30:16Let me take a look.

...26Oh, I'm still, I was confusing myself because I was, well, let's leave that commented out. Okay. So the diff in the render was just whether there's a new line after a link. Okay. Huh. That's kind of a strange one. So let's just say if there is a let's do it like the slashes. So if there's a slash slash a slash ally, that becomes a slash a new line slash ally.

02:31:31Okay, and then this one, now that we're not seeing the whole comment view, you know, honestly, I wish I could ignore all of these new line things, because they're not meaningful in the HTML output. But if I strip out new lines from both to make them identical, then the diff is gonna be pretty unreadable.

02:32:06So one diff is this self-closing HR. I can see that one.

...25All right. And then the other one is a self-closing BR that I guess didn't need to have a new line after it.

...44Oh no, we backed up from 460 to 432. So I broke something earlier. What am I doing here?

02:33:09Oh, I get it. I'm trying to do... I'm trying to do a regex optional space without being a regex.

...29Okay.

...44rotated8 do you need an r at the start of line 28?
That's not it.

...55rotated8 5r{ instead of 5{
Do I need an R at the start of 28? I don't, because it just becomes a string. rotated8 aaah
But that obviously isn't what I was going for.

02:34:14Yeah. because I didn't actually use any reject syntax in there. So that's fine.

...31So there's that. Isn't that the exact diff we're seeing right here?

...44chamlis_ other way around?
Slash a slash li. Oh no, the old one had a new line and the new one removed it. chamlis_ yeah you got it (I think)
So wait, it's this thing is wrong. Hold on. We'll do a no op. All right. So we're at 465. So it looks like these two libraries are just inconsistent because 465 wanted to have a new line inserted. And 468 did not want to have a new line inserted. chamlis_ are we at the regex -> rdiscount lagrange point?
And I don't even want to think about whatever this difference was. So I'm just going to try doing this on both sides. No, we're only at 2012. That's not until... Oh, maybe. Maybe. 468. What are we mad about? That's not a useful diff.

02:36:21Yeah, it's literally just an empty line before the UL.

...47So if we have a closing tag, a new line, and then a ul no and then a new ul this one has where we have 468 this one will just have that new line ul no

02:37:23So wait, am I showing these in the wrong order? Oh my god, I'm fighting the terminal. Not how I want to.

...44All right, old one on the left.

...51New one on the right. New one gets rid of new lines. All right, I just showed them in the wrong order.

02:38:15We just jumped back a couple. Yeah, this is an inconsistency.

...28I bet it's different if it's a P tag versus... Oh, yeah. chamlis_ 24 Aug 2012 is that change point, that might be it
This one, li... Yeah. It's nesting lists. Something about nesting lists.

...5024 August. Oh, yeah. All right. Then we're changing gears. I would really like to... not add dates to this script because it's a little bonkers enough as it is but we'll see all right so let me let's run from zero up to 468 all right so everybody's fine there If we trust that those are okay, so 468 seems to be first.

02:39:43So I'm not going to check IDs below 468 again. I'm just gonna accept all of their differences. And from 469 on,

02:40:01Yeah, we're seeing nofollow is different.

...32yeah so if we see a nofollow with a title how did they write a no title with a follow a title blah blah blah can't talk i'm getting up there on time so much for ripping through a hatch box today i really hope there'd be fewer of these let's see the source

02:41:06Oh, deep cut for Markdown that you can have a title in here. I wonder why they did that.

...23All right, so the difference is if you specify a Markdown title, it's just this nofollow UGC thing. So here,

...42here, we may see a title equals quote anything that's not a quote plus that.

02:42:17I'm editing the wrong one. I'm still editing the wrong one.

...53The diff got bigger. All right, so this first one.

02:43:38twitchtd I don't mean to derail you but when you're finished if you could comment on https://github.com/lobsters/lob… so that I can fix whatever is wrong I would appreciate it. Doesn't have to be on stream.
Oh, yeah, let's take a look, because I'm kind of getting a little cross-eyed at regular expressions. Oh, that's a sumanist thing. I grabbed the wrong tab over.

...57Yes, Thomas, I meant linkified body.

02:44:18So why did we stop recognizing this? Because what was generated, because it was local to the site, it didn't add a nofollow.

...36So the old one must have known the site name or something.

...54twitchtd What about the second part to that question? :)
so i'm gonna say i thought the second part of that was just directed at vec about their bug report catch that google or github did a spa thing there where it didn't Scroll back to this thing because it lazy loaded in the comment. I was doing a bunch of GitHub stuff on Wednesday evening and I saw so much SPA jank.

02:45:45twitchtd ah ya, I see, did you have any idea oabout veqqqs comment? I don't think I understood the issue
So I actually can't.

...51I would have to go back and watch the last stream. Yeah. twitchtd ok, thanks
I can't explain better because I didn't totally understand what that behavior was at the time.

02:46:25If it's not something they can reproduce, I think I'm okay shipping with that because it sounds like it'll be a, it's a bug in the right direction of you see too much stuff rather than stuff goes missing. So I'm not super worried about it.

02:47:15I was gonna get this first link. All right, let's do, let's put that back and duplicate it. So we have an A with a nofollow, without a nofollow that starts HTTP that does not have a title.

02:48:10How is this diff still here?

...18So I'm editing line 31 on the left, and this JCS link should be getting corrected to add the rel UGC.

...42Well, let's drop back to the same strategy, right?

02:49:19So it did match.

...28Did something come along and strip off the UGC after? That is so strange.

02:50:05change these delimiters to match so I can look to line a little easier. Watch, you've got to reload that. That is not rendering correctly. Did my little command break? All right. So what's different?

...40I was supposed to add the rel UGC. chamlis_ I think the nofollow and ugc stuff has always been in our wrapper, so that might well have behaved inconsistently through the years
And it said it matched.

02:51:00I mean, it certainly might have, but this transformation on 31 should be getting rid of this difference. Because it matches this link, but it's not getting replaced with the rel UGC version of it. And it's like it's not running.

...46How is that still on the clipboard?

02:52:03Yeah, so it is finding it because it's printing the location of it.

...16Is one of these later ones stripping it out?

...30Yup, yup, that was it. This one somehow was detecting that. I get it, I get it, don't I? I bet.

...51because there's multiple links on the line. And one of those is acting greedy. And so it's grabbing everything from one link to the start of the next link. All right, that's not something I want to debug right now.

02:53:14Speaking of username changes, that might be a username change. Or when did the username shortlinking get added?

...49chamlis_ later I think, the Rdiscount implementation doesn't have any wrapping around it afaict
Yeah. so i'm just going to ignore that difference all right we're up over 500 so let's nudge this up yeah this is one of those gt things this is the kind of thing i was afraid of where when i changed the gt All right, so I bet now we're not going to see that difference anymore. And if I go back to 4.69, now one of them failed it. And it is that exact difference.

02:54:56We're up to 575, though. All right. I'm going to call that just a difference between the regex and our discount. Want to be there. What is this, like a leading space on the line? Yeah.

02:55:34576 the code was given a new line so this is just the maybe it's just the li's are going on a new line This sure feels like a difference between libraries.

02:56:30Commons.

...37No, you're still mad? What did I do? Oh, it's not. OK, so it's just going to be inconsistent about li's, if there's a tag after them.

02:57:37OK. Oh, here's another username linking. Do we know what ID number username links appeared in? Obviously, this one.

02:58:06Yeah.

...12So if I transform these, we're probably fine, right?

...21If I turn the username characters, and let's capture that.

...56To make it.

02:59:02Going into the back references.

...35What did I do wrong?

...42You need a character class and you need to be multiple.

...53And then you need to be an escaped quote. And then we're all happy, right? Hey, we're up into the 600s. 676. So let's go ahead and do this up to 675 for speed's sake.

03:00:21This is some other. Now the allies are behaving exactly the opposite of the thing I just special cased. I bet it's because there's something nested in here and the closing li isn't on the same line like if it puts a block tag like a ul inside the li for a nested list

03:01:10chamlis_ september 2012 for username linking https://github.com/lobsters/lob…
September 2012. So we'll hit it literally any day here.

...39Huh. a difference in spacing. So they both have a pre and a code. But the second one is probably... Oh, I had added that strip whitespace at the start of the line.

03:02:06I'd sort of hoped to get to a place where Like once we got to common marker, there were basically no changes. And then I'd end up writing this script to run on all of them. But this method of kind of marching through and accepting some of these is probably fine. And I can just accept that we won't have a comprehensive list of differences. Yeah, I only care looking once.

...45In which case, honestly, at this point, if I see failures and it doesn't look like I've got something structural I'm going to see a bunch of times, or it's like this annoying, whatever this li thing is that I don't want to try and write a regex for, I should just keep marching up the ID number and skipping these. I really don't care about this, and I don't want to figure out what that difference is. That's images. This second one, this is a bug.

03:03:53Wow. So the old one just rendered the markdown directly and this new one accepts it as an href and prints it. It's kind of ambiguous. I guess I'm fine with whatever gets printed in that case. Because it's Possibly invalid markdown. I don't know the corner case of not having link text. The exclamation I thought made it an image, but users wouldn't be allowed to make an image. So what number is that? 804? All right.

03:05:03twitchtd alright, fixed the linkified_body usage, and if we're going to ignore the bug we both don't know about :) then the pr has no more things from my end to be done afaik. I'm assuming you probably wont have time today since you're knee deep in regex but maybe next time you can check it out
Another GT.

...15Just going to keep turning this on and off, apparently.

...29Yeah, this one is in. Now that GT is OK.

...37I'm not really worried that the new one is going to have inserted a cross-site scripting bug. So I'm just trying to keep marching forward here. And we're up to 870. We are speeding up through the numbers, even as we're only 1,000 in. I'm sort of hopeful that we see fewer errors, especially once we hit the common marker error, which was 2018, I guess. So that's a ways off.

03:06:16So this one, we inserted links, but clearly there weren't any yet. And when I say we inserted, I mean this checking script.

...35It's more LI new lines.

...53who's hassling me nobody all right thomas which pr you're talking about the replace Is there a separate PR for just that bug fix, or did you put it into the PR that removes replying comments?

03:07:36twitchtd removes replying comments pr
What do we see different? It's a fucking GT again.

03:08:08brainwane Thanks for the virtual company - helped me finish the blog post version of the thread https://harihareswara.net/posts…
Something about that arrow syntax. OK. Oh, good deal, Sumanat. Thanks for sharing. Nice to hang out and hack on stuff.

...29That's interesting. That's a change in how the markup formats. It's going to change the comment render, isn't it? But that's OK. That's probably an improvement. Let's look at the old one. I just wonder how many of those we're going to have. Yeah, this one, the old one is arguably an error. Almost certainly an error.

03:09:15So the the thing about having company, in case anybody is curious about that as a strategy is some folks call that body doubling comes out of the I know it from friends with ADHD, where it is sometimes hard to get started working. But if you are sitting alongside someone who is also working, it can be a nice little kick in the butt.

...52And I mentioned that because folks who find it work for them may want to find other similar techniques and so if you know the the jargon for one you can find more sometimes

03:10:29Oh, we've leapt up into the late 900s. We really are picking up speed here on these. This one is something with different P tags around it. It's different. Oh, it's the fucking GT at the end. And that's commented out.

03:11:11So what's happening? The old one says, oh, I see. Someone probably wrote a script tag directly into their comment. And we're seeing the XSS protection a little bit differently. Yeah, also means you could specify a mirror, or this is kind of the bug that somebody said they saw. So the old one put a p tag around the script it escaped, and the new one doesn't.

03:12:04All right.

...50Let's just grab everything up to the next tag.

03:13:15What did I do wrong with syntax? Oh, it's not a comma. I keep thinking of these as pairs. That's why I keep making this instead of key value, key value, which they really should be pairs, but too late. Not changing them.

...51twitchtd thanks for streaming, I got to go do some stuff
So I still have this diff. See you later, Thomas. Thanks for dropping in. All right, so we have a, oh, I said GT, not the old T. It's a dumb typo, because I was watching the end of the line, too. I'm going to kind of put back the comma that standard RV pulled away from me. That is maybe the one place I disagree with standard RV, is they should have left trailing commas on. It's not like I want to write about that, though.

03:14:39I really don't want to think about the GTs.

03:15:07So it's putting out the script. All of that.

...31I'm not seeing a difference anymore.

...40I think the difference is the.

...52I don't know what the hell the difference is, I'm getting cross-eyed.

03:16:01Really? Let's get up to three.

...13chamlis_ %gt; and &gt;
watch please use the extra terminal space is it seriously thank you all right so i'm getting tired and i'm making silly mistakes

...40chamlis_ I don't blame you, this sucks
And I am pretty much over time on a full-length stream. Yeah, I mean, it sucks, but stuff like the difference in script tags, this is what gives us the confidence that we're not fucking up comments.

03:17:11PudottaPommin cmonBruh this is so painfull work
This is just some difference in the highlighting thing that I don't care about. I think the right word is painstaking. We are taking pain in it. And that I'm just trying to be deliberate about getting these comments right.

...37TheYagich would that make you a painstakeholder?
This is more user linking, isn't it? Yes, it is. It looks like the... See, I'm trying to get out of September because you told me that the difference was added or the username linking was September 2012, but you didn't say which day of the month. Click on that commit and actually see it though. September 10. Yeah, so this is the style of link it's inserting. Yeah, so they just put JCS and then this thing that I added is doing clever stuff now.

03:18:45So it looks like the original one didn't include the host name, and we do now.

03:19:01Who knows when that changed?

...24So it's a single slash to you slash at somebody. The new style is that is a... I know you don't like this. because it's not an app there.

03:20:02Yeah. Oh, I swear, GT. GD, the GT.

...21Pain Stakeholder, that's a good one.

...31Thank you. So we make the archive title silly things that usually that I say on stream, but every once in a while, if somebody's got like a great pun or a great joke, and I certainly haven't said anything remarkable. Yeah.

...54That's strange. Why did the old one mark this up? Oh, because it's the leading hash. It thought this was a title.

03:21:11That's funny.

...20So if the line starts with a strong, grab everything that is not a new tag to a slash strong. And then that becomes p with what they actually wrote. Yeah, that first one is a wrong markdown. We're getting a little slow. chamlis_ that will spoil the genuine titles, right?
I've got to nudge this. 1132.

03:22:15chamlis_ but the genuine titles will be strongs and get replaced with ps, I thought
no because markdown genuine titles requires a hash and then a space and honestly i'm not sure users are allowed to do that on a comment here i don't have a browser i'm logged in if you preview a comment real quick and you do like single hash space something you should not get an h1 tag out of it that would just be kind of obnoxious.

...51The genuine titles.

03:23:19I'm not sure I'm following.

...35So this one's interesting. The old one took that as a superscript and the new one didn't. chamlis_ if I type "# aaa" now that becomes a "<strong>aaa</strong>" and is supposed to, but that replacement will mean the new code will look wrong when it produces a strong instead of a p
And the new one is probably better for it. So I'm going to just accept that. If I type pound, that becomes.

03:24:04chamlis_ they both do
You're saying the new common marker does that?

...13So I thought this one was just a bug because it goes pounds and then no space.

...27chamlis_ we h1 etc into strong in our wrapper
chamlis_ we turn*
okay oh okay i didn't realize we were doing that all right i'm going to leave that commented out then i'm just going to skip ahead because i think we're okay yeah that's funny this this data set is big enough to really exercise markdown syntax. What is this question mark? Can you import data from? Ah, it's whether the question mark is recognized as part of the URL or not. This latter, I mean, it's right for this comment, but that's a minor change in behavior.

03:25:57No, wrong way. I mean, at this point, I'm kind of, whoa. All right, I was just saying something and instead we've got a interesting one. I was just saying, I feel like we're running pretty dry even as we're only a thousand comments in. Not even 1%, and I'm a little bored. But that's a real interesting change. It's 3ZD1098.

03:26:58huh it's some kind of email obfuscation where this old one is encoding it as html entities so that dumb bots don't error out and then i guess the browser recognizes it because when i highlighted it the browser was like yeah sure that's a mail too

03:27:35chamlis_ blimey
new lines oh my god it's new lines around ul's and li's again i almost want to make the oh here hold on back that up a little

03:28:05chamlis_ it might be too late for this but could you roundtrip both results through a HTML parser to try and normalise them
almost want to add like if the only difference between the two is white space just pass it yeah that would be fair now here's another male i bet that's Oh, Braintree. Well, they are local. They're in the merchandise mark downtown.

...50What did I do? 1265. Yeah.

03:29:11It's the LI again. We've gotten to a point where I'm running out of patience for those LIs and the ULs. Yeah, I guess I could give them both to Nokogiri. But its parse tree does, I want to say, preserve whitespace. So 1283.

...48Yeah, here's another invalid SUP.

03:30:07Yeah, I think it's really going to be if there's an SUP...

...30It's not followed by a space.

...40So this is not your tag. Plus. And that becomes just backslash one. No, I'm carrot backslash one and backslash two. Right. Yep.

03:31:21This is a difference in URL encoding the caret. And the latter one is correct. The caret should have to get encoded. What did they actually type for a URL? I mean, maybe the caret doesn't have to be, but Oh no, maybe it's me breaking things?

03:32:03Maybe the carrot is allowed. It's certainly safe to leave that one alone, though, or to encode that one.

...33Yeah, see, it's that text node in there.

03:33:23People complaining that they're... I said this. No blanks.

03:34:11Yeah. I actually now want to parse it, pass it as an option. Parse. Nil, nil. And that's slightly different. See, this is, yeah.

...39Yeah, it's doing some XML instead of HTML.

...53And I'm still getting a nail blank. Yeah, I'm not going to beat my head on trying to pull nocogarian. It's really...

03:35:18It's another fucking GT.

...33So I had really hoped that at some point we would start jumping along by 100 at a time instead of six at a time. And the fact that we're not picking up speed as we enter a modern era,

...51Just out of curiosity.

03:36:05Let's get up to a relatively modern era. I don't know when Common Marker got added, but somewhat recently, right?

...22Did not like that SQL.

...42My SQL is very relaxed about you gave me invalid data. Okay.

...59So now we're up into some common marker. And we're getting some minor whitespace differences, it looks like.

03:37:27And it's ul and li still.

...35Do I still have anything in here about it? Yeah, let's try commenting that out and see if I pick up any speed. Because that difference might have been still present.

03:38:09I can tell I'm not hitting a column with an index on it.

...23What's the difference? Yeah, this one's a curly quote versus straight quote. So this is... a smart quote difference it's the original comment using the input is a straight quote the old output so at one point we must have had smart quotes on

03:39:11So we've been inconsistent about it, whether we're transforming them

...53We're just hitting these. Well, isn't it one of The ones I had a tacky tweak around? No, I guess not. So they have a...

03:40:28Yeah, these non-semantic differences are killing me. The whitespace. 3D, 56, 908. So if we jump to 909. We're just hitting every comment along the way because there's some whitespace difference. Yeah. It says this.

03:41:07That was part of it.

...22This is some difference in TheYagich it's adding smart em dashes even?
is it this guy failing no but i think now we're seeing differences in eras of parsing where again we're just hitting every yeah so they originally wrote a double dash the old one transformed that into I don't know, either an N-dash or an M-dash. The new one left it as is. 356.

03:42:25Yeah, we are just... every single comment has some minor difference again this one is it a smart quote yeah it is all right so what if i put smart quotes back on And we're only having a, well, we jumped up half a dozen.

03:43:08So the answer of should we have smart quotes on or off is which comments do you want to break? Because we've been inconsistent over the years.

...21And it's not like a big break. People aren't screaming about it. But it is a difference.

...35I don't even see the one here. This feels like the World's Worst mobile game, where it's like, find the two pixel difference between these two images.

...53Oh, it's the PPRE thing again. We had a... Yeah, is that first one even valid markup?

03:44:14Yeah, the left one is not valid markup. What is the user type? user didn't do anything here this is just a that's a bug in common marker that got fixed some along along the way or the underlying engine realistically 357 oh

03:45:15What?

...21Oh, this is a change from the old style of links to the new style of links. So that one we're going to see a bunch.

...47Where? Why did this not catch that?

03:46:03Slash. Oh, because it's not. It's a absolute.

...18Yeah.

...31I think I'm getting too done for the day. Maybe just done in general, like we're not finding meaningful differences anymore. trying to think of the last of these that i would have cared about and it's like an hour back instead it's yeah it's like this thing that i don't want to write a regex for because i don't want to keep staring at it it's the white space around ul's and li's Yeah, it's this trailing pretag that's a bug in the underlying library. We jumped up by 40 there. PudottaPommin jipity regex it Kappa LUL
All right, so 9, 69, 9, 66, and then Instead of exit, let's just go. PudottaPommin I don't like AI, but I gotta hand it one thing, it's sometimes faster than going into docs for something
TheYagich you should have just gotten it right 10 years ago Kappa
Let's say, you know, I was not the primary maintainer 10 years ago.

03:48:21PudottaPommin you should have Kappa
Let's just look at the next 200 of these. Let's just type the variable name correctly.

...44So I only got two.

...54Why did I only get two?

03:49:02No, I got like five. So what is this saying? This is saying in the next thousand, there were only like five that were troublesome. It seems a lot better than we've been doing.

...28Let's cancel that watch because I think that's throwing me off here. Let that run for a minute. All right. Yeah, so the watch just wasn't refreshing. And if we just kind of skim these, 367. So it took 12,000 comments to get 200 bad ones. And the bad ones. Since I know what I'm looking for with these trailing Ps and the Us, they're just kind of popping out at me.

03:50:18This is going to be some fiddly difference between URL parsing, but they're both going to be good. Oh no, it's the user tag in there.

...34That's a user ping. Yeah, I mean, at this point, I am Cypher and I see the matrix and I can just skim these encoded and it pops out at me that all of these are like their user links, their code links with the pre. This one, the new one tags a language on it. Huh, somebody did a fenced code block with Python on it. That's what that is. We don't style it different in any way. So I mean, that's, I guess the first semantic difference we've seen in a while, but we don't care because we don't highlight the code. Oh, and here it is repeated. So yeah. All right, I'm going to sleep on it because at this point I am run down after staring at these for hours. But I feel like this is probably ready to go. These differences are so minor and not meaningful. And the ones that are meaningful are corrections to either bad markdown or things we don't want to allow or TheYagich it's a net positive change
And I guess on the smart quotes, I just come down in favor of maybe let's turn it off because, oh, it's certainly a net positive change.

03:52:30Just realistically here, we're not breaking comments. Yeah, Channels, if you're still here, let's turn off this data escape char thing. That's not meaningful. I think that's just for debugging. We might as well leave off smart quotes because programmers are real particular about that.

03:53:13Alright, I'm going to call it here. Let's go ahead and start closing these down.

...24What's this last number? 367540? Okay. Alright, so a couple of minor fixes there.

...55chamlis_ sorry I all but tuned out, if you could even dump a train-of-thought into the PR I'll be happy to address whatever
chamlis_ thanks for spending all the time chasing down the annoying differences
The train of thought is that this is mind numbing and not finding meaningful differences. So I think what we've found here with the header IDs, the short codes, the syntax highlighter, I think those are the only changes we need. Do you want to just grab a screenshot and you can take these three diffs? One, two, three, four diffs. chamlis_ is it practical to keep the old cache column around after this migration?
And then the other part of it is that escaped data char. If you want to turn that off, I think we're good to ship this. I'll sleep on it to make sure that I'm not doing anything rash.

03:54:53chamlis_ got the screenshot, I'll push the branch fairly quickly probably, but no rush to look at it again ;)
I think it is worth.

03:55:01I think it is worth a migration to re render all the comments.

...12I don't know. We don't do the Russian doll caching. But we could have comment bodies, not their header lines, because it has that relative timestamp in it. And I feel like we can trust solid cache at this point. And I wouldn't mind basically chopping the width of the comment table in half. Because there's only 600,000 rows, but migrations on it are slow just because it's such a wide table. TheYagich thanks for the stream!
wide rows you know yeah we're probably to the point that we could drop that it's not something i want in this pr but let's kick that around a minute all right so i'm going to roll out and i hope everybody has a good one And then I will be back on Monday for the regularly scheduled stream. brainwane bye!
Maybe even if it rains on Sunday night. Because I think that's fixed now. Which is a treat. PudottaPommin have a good one
chamlis_ thank you!
As this stream really beat to death, it's the little things that matter. All right. Well, thank you, Chambliss. This has been a lot of detail. I appreciate that you work through these very detailed PRs. Because this one is... I think one of the reasons this hung out for a while with nobody picking it up is it's just lots of fiddly work. And you've got to be very thorough and then... chased down 100 options that have changed defaults. I can see why nobody picked this up. I didn't want to pick this up, so thank you for doing so. All right. Well, I will see you all on Monday, I hope. Take care.