I will be a DJ and drop the base

Streamed

Merged several PRs from chamlis improving CSS and fixing PRISM gem issues. Investigated a regexp timeout error that mysteriously appeared after 14 years. Implemented UI improvements for merged stories, making them more visible in /newest and /recent. Extracetd a tempalte for merged stories with a cleaner design. Extracted a helper method to clean up avatar display logic. Discussed keyboard layouts and my experiments with the Norman layout on split columnar keyboards.

scratch


topics
  PR review
    fix markup https://github.com/lobsters/lobsters/pull/1520
    prism https://github.com/lobsters/lobsters/pull/1518
    css grid https://github.com/lobsters/lobsters/pull/1508
  regexp timeout https://github.com/lobsters/lobsters/issues/1521
  story merging https://github.com/lobsters/lobsters/issues/1456
    c0fc2c6 show merged stories on /newest and /recent
  keyboard talk
    https://keeb.io/products/iris-ce-keyboard
    https://normanlayout.info/
  https://www.folklore.org/Swedish_Campground.html


streaming question:
  Monday streams are more popular than Thursday ones
  maybe Monday should be a little earlier so it's easier for EU evening viewers
  maybe Thursday should be canceled to free up that 3h/w as 6 30m/d blocks
    gives faster responses to contributors, bugs, etc.
  (if you're watching this recording, please do let me know your experience)


title
  i will be a dj and drop the base


post-stream
    

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

Recording



04:22Did you do your taxes? It is Monday, the day before your taxes are due. Howdy, I'm Peter. This is the Lobster's Office Hour stream. And that's about that. So this is Lobster's. It is a website where we talk about computing. computer science, networking, hardware, algorithms, and so on. pushcx Feel free to ask questions anytime!
And this is office hours, so if you have any questions about it, feel free to jump up anytime and ask, and let me throw that in the chat.

05:09And then otherwise, I tend to work on the code base. Or otherwise fix things. Occasionally break things. Oh, I didn't put on the little footer. No, that's not the... Putting a little footer on Lobster's website that says that office hours is live. Sometimes I remember to turn that on. I have looked at wiring it up to OBS, but I'm actually not sure how to make a script that's interactive of, hey, do you want to do this, rather than this happens every time. So let's see where we're at. Ah, a bug fix, a build fix. And then Shamless working on stuff. So let's take a look.

06:21Shamless has been working through the grid. Okay. Huh. Yep, that's just a... Boy, she's thorough. All right. I don't think she's here yet to say thanks to, but. Just throw it on top.

07:14This is one more example of my ERB is string soup grape. So what did she do here? Oh ho.

...29OK, so on the last stream. I noticed this was going to get fixed in a later version of Ruby. Nothing interesting has happened here. If you explicitly update to Prisma, I thought Prism Was part of Ruby and compiled into it. build green on this. Great. Is this editable. Can I just.

08:15I never know what this GitHub UI edit, or is that just the, that's just the title. Yeah. All right. Let's just get this merged and then I'll fix it rather than keep messing around.

09:06All right, so we will throw this on top. chamlis_ hi, got the email about my PR being merged before the notification from twitch
And then with that, oh, I am not grabbing, grabbing links. Oh, hey Shameless. Oh, how funny. Well, I've actually just merged your other PR and then I realized, oh, I didn't grab the, URL of the other one for stream notes.

...53Yeah, so I set it on a comment there, but it didn't occur to me that Prism was just a in the standard library rather than something compiled into CRuby itself. So that's really nice. It was really refreshing to see a green build on the PR here. chamlis_ I thought it was compiled in too, I guess gems can override builtin stuff? it's definitely in the CRuby repo
Man, if folks really want working notifications of when I go live, I guess the best way to do it is to open a PR and fix stuff for me. Let's make sure my personal to-do list isn't full of crap. All right.

10:42So I got that. So let's grab this and then pull stuff down.

11:03Yeah, we're hitting the limits of my knowledge about CRuby.

...43OK, so that's great. I think that's all the pull requests that need attention. I don't have a notification here, Chamlus, for your grid, but I did take a look at this after the last stream, and it's continuing to look good. Yeah. Oh Oh, you think you'll get. Does not extend past all of the comments children. We should have got her up a layer in the grid, then that dom restructuring broke just about all the common related javascript oh yeah that is a whole hand hassle.

12:41How sweeping are the changes in the JavaScript? Let's take a look.

...52So there's a comment folder.

13:01chamlis_ if you'd like to tackle that, be my guest (you should be able to push to that branch I think)
This guy.

...26Yeah, so there's a lot of hits for comment in the JavaScript, of course, because it empowers a lot of it. Yeah, a lot of this assumes structure on the page. Let's definitely just do one giant refactoring at a time rather than two giant refactorings at a time. Otherwise, it'll never merge.

14:17It's odd to see you increase the specificity of these.

...34Oh, thank you for including prefers reduced motion, because I do.

15:03And this is repeated. I can't picture why the. Parent tree line that vertical line would break in my head. Honestly, if it broke when you were refactoring stuff, it probably means there's more. chamlis_ it didn't span past the children before, but it runs into the child's folder at the moment so it looks fine
invalid markup that i've put into the page especially with heinous inline partial it's and the way thread takes the nested has to build the nesting structure that's been hard to get correct all right didn't span past the children That looked really nice actually. Wow, that's sharp.

16:26Cool.

...38so chamla since you're the person who has spent the most time on this what's your opinion on this animation and putting the folder below the score as you like use it on the site and tinker with it do you like it do you feel it's better than keeping the folder above the score as in your previous screenshot just literally which do you like more And that should be the one we do. I don't know where that screenshot went. Oh, here it is.

17:25That's a weird error. Yeah, GitHub.

...37All right. Some kind of transient thing there, I guess. So, yeah. Maybe Chambliss has had to drop. I know it could be part of the workday there. I can never tell if they're perfectly aligned. It looks like maybe the folder is a pixel left on this one. chamlis_ I'm not sure really which I prefer
This was an intermediate thing, though, so it doesn't need to be perfectly polished, of course. And then this is the other way. All right, well. If you don't have a strong preference, or if you don't really have any preference.

18:57chamlis_ in my mind the folder on top works skeuomorphically, but I do like the folder being below for the vague "downvote" connotation you mentioned
It's clever. It might be a little distracting, but it is nice. The folder on top works schematically. yeah all right well then let's go ahead and the other value of the folder being under for that kind of vague download connotation is it might slightly decrease how many times i see people flag stuff because they really want to disagree and it feels like they get to punish the comment and this is a thing I've done a lot of UI work on because previously we had a downvote arrow here and that would open the flag menu and people just picked randomly and picking randomly meant disagree and there were certainly people who used it intended i guess is the best way to put it but it was frequent because hacker news and reddit are a million times more popular and they trained everyone that when you disagree you push that arrow and so when people disagreed they wanted to push the arrow all right so on this pr 1508

20:33Where do you feel on a, what's your sense of progress on it?

...45You've talked about wanting to look at basically the entire site and I was trying to say, it's okay to work incrementally. Have you continued to check these off? I haven't been checking the, chamlis_ I was going to leave that one there as a first self-contained step - doing the forms incrementally over time shouldn't be too bad in subsequent PRs
chamlis_ I haven't updated that top checklist, no
history of this comments edits but i bet if yeah okay

21:29So let me ask the exact same question in a slightly different way. What do you think needs to be done still for this PR before I should click merge on it? Because it looks great, both as structure and the layout things that you've tweaked to improve. And I get antsy when pull requests hang out a while. I always worry that they're not going to get finished or that something's going to distract.

22:18chamlis_ it's definitely feature-complete, but I'd appreciate if you'd test it locally too on prod data before I end up breaking the site for everyone by accident
Okay. So you think after I play with it with prod data that it's ready to go? Because I can't load fraud data right now. That takes a couple of minutes and I don't want to hold up the, well, the time is going to pass anyways. chamlis_ oh not necessarily the latest prod data, just something that didn't come from fake_data
Yeah, let me get that running.

...51Where's mine?

23:07Yeah, my current fake data, I've run the command a couple of times while working on it. And so I would have to replace my fake data to have anything that looks reasonable at this point. I think it's been even a couple of months since I refreshed. So the way I have it wired up to pull in prod data to localhost is that it pulls from the backup system because it gives me a reason to exercise the backup system. And so it's always nice to see that run. So that download is running. What else is kicking around here? This is OK. Let's look at the issues. There's a bug. chamlis_ oh no worries, even another pair of eyes on fake data would be useful
You know, I got something else about email in my email. Since I'll have to scrub through logs, let me just leave that one. All right. And then what else do we have going here?

24:26AnakimLuke heyo what u working on today?
This is missing. Oh, hey, Anakin. I'm kind of sorting out things to work on. So I've just merged two of Chambliss' small PRs and I've got a database update running in the background so that we can look at her CSS grid with real data. And then otherwise I'm just double checking on the state of things to make sure everything's moving along. Okay, so it wants to take on this.

25:40We use the lists of stories, story fields.

26:22What's the UI in group 1456? There we go. All right, so with that, That's all the issues that really needed attention for sure. pushcx https://github.com/lobsters/lob…
So that's kind of the later plan. Cause there's a lot to look through here. I'll show that link. Cause that's where I was planning to spend time, depending on how this stream goes. Cause folks can pop up with questions about the site anytime. And good. So what's next? Oh, this one looked like it might be a interesting bug and it was vaguely familiar after I pasted this in. So I got this 500 out of the production site, but a regular expression timed out. And I remember in one random place in the code, We did a regular expression and I vaguely recalled. Putting a timeout in it and maybe that finally got hit because the server was especially busy for a minute. let's see what it is reds line six. On thread that each I feel like i'm missing a line of the. Trace back like, yes, we are in the each. All right, come on, let me. So off stream here, I'm going to pull up my. Email and try and find this trace back real quick. Yeah, so it says threads line six. And if I look at the full thing. Because it said show 79, but that's going to be. going to be where it calls threads isn't it yep so not a useful traceback it's just saying somewhere here in this loop there's a regular expression that's timing out and it's going to be in the comment model right

29:27you know there's all our invocations of match so did i have a is this my log message no did i Hopefully. use the name timeout in anything related. Let's check. Neither of these are comment related. This is real. This is the one I'm thinking of. but that shouldn't have been invoked on this path.

30:37So we have a selector that gets called from valid selector. So I'm thinking this only gets used when a story is submitted. I try to keep logic off of the view path. So I don't know why this would be showing up here. But this is the only thing I'm thinking of that has a timeout on a regular expression. Let's check this exception message.

31:36Yeah. So that's where that's coming from. Yeah, it's literally the only regex with a timeout on it.

32:10So how do we get to this?

...22So this is me trying to re-derive whatever missing part of the stack trace was not in that 500.

...45You know here's a different question, so I did know which story was failing is this emerged story. No.

33:24So honestly, there isn't a origin selector on this domain. Because there really are only like four of those. So I don't know how we ever got to this code path. I wonder if this is just something that was deep in Rails. And that's why I'm not getting a full trace back because the chamlis_ can you monkeypatch Regexp.match to see if anything in Rails triggers on that GET?
notifier for exceptions tries to trim tracebacks out of or you know it stops when it hits the framework because yeah that's good odds that you've hit a bug in your app code rather than in rails all right

34:29oh there has to be so yes i could monkey patch regex match but i think there would be so many well first off we don't even know for sure that it's a call to dot match because when you create the regex you get back a regex object that has a timeout on it, matches only one of the methods on it. It's just the first one I thought of, and it's probably what we end up using. Where's valid selector defined? Yeah. So, and if I hit regex new, I would get the kitchen sink. There would be at the least dozens.

35:41chamlis_ good point
I think the way to figure out what this is would be to... That's not the one I wanted.

36:07year in the in this there is some setting i don't remember to tell it not to try to filter out the exception but Given that it took us 14 years to get one of these, that just doesn't seem worth running down. So.

37:16Hmm.

38:26All right.

39:30You know, I've only been the admin of the site for what? Seven and a half years. So not the full length of the site.

40:27I'm going to just go ahead and close this one. It was interesting. So I wanted to dig into this cause I did vaguely remember setting a timeout on a regex cause it was such a uncommon thing to do. I think I've done it in Ruby apps. I don't know, three times in the 20 years I've done Ruby. So it was tickling the back of my mind, but all right.

41:00did i put this in the scratch i don't think so no interesting little investigation didn't come to anything but interesting little investigation so nobody asked but for an office hours thing one thing worth talking about here is this blog.codingconfessions.com that's abhi9u, who has gotten many comments over the last year or so from folks asking, either asking questions and getting ignored, or saying, hey guy, all you seem to do is self-promo. How about you be involved in the community? And I've been really reluctant to hit him with a stick because his posts are generally excellent and very well received. But this last one, it's down here in the comments, but this is kind of... weird this image and it looks like llm stuff and then some of the other writing in here was unusually clunky it feels like we will need to cover the following internal like this reads like llm slop in a way where this blog was previously very good and the author has just been ignoring everyone asking about self promo or trying to handle stuff. So shortly before the stream, actually, I ended up blocking this domain so that Abhi has a chance to actually participate in the community rather than just dump links and move on. Cause it's very, very apparent at this point that he's not even reading comments on his own stories, let alone interacting on others.

43:33Self promo is a thing we've talked about some on the stream and it's a perennial topic. I have wanted to do more with story merging than and then get into things like self promo, but we'll see what the demands are.

44:20Very similar. What did he end up with for? OK. Not seeing the exact prompt. Yeah, it would have been really interesting if the minus into X faster had been independently reinvented by. GPT-4.0. I don't know. All right, so there's that. That's everybody. There's no more issues open. Oh, but by this point, we should have a nice green build here. Yeah, look at that. Thank you, Channelist. How lovely. Are there... All right. Okay. So my general plan, this is what, 45 minutes in, I'll do another little bumper that this is the Lobster's office hours stream. And if you have any questions about the site or the code base or why anything is the way it is or how it should be, you can pop up at any time and ask. and then otherwise I work on the site and its code base. Yeah, door's pretty much open. So let's see, with story merging, that was kind of my loose plan of my, I try to make sure I show up to streams with something that I would work on, because otherwise, you know, sit here quietly asking for, questions oh that was one question i had chamlus is since you are a regular is one of these streams monday or thursday easier or better for you and the reason i ask is that thursday streams get less attention and interaction and if i'm gonna spend yeah call it like three hours on a stream which is my typical If people aren't showing up to the Thursday one, maybe I should just split that up and do a half an hour the other six days of the week rather than really concentrating my time on the two streams and only lightly peeking at the issues and pull requests. I think fast feedback is generally really appreciated by contributors. chamlis_ the monday one is 8pm, thursday is 3pm, so thursday bumps into the workday here for me
and you are by far the most active one right now so i figured i'd just ask as i'm starting to think about whether the thursday stream is worthwhile ah okay let's check your comments about which word story

47:56So where I got with story merging was basically all of these. Except this last one.

48:24What was this one called? Merging UI. Let me make sure I'm up to date. Yeah.

...38And let's rebase this because I know there are typo fixes for. Hmm. Chris_Evelyn Hi! I mostly watch the videos of the streams (if available), because it's either a little late for me or work time. Thanks for doing those, btw :)
You know, when I was picking for the streams I was trying to pick one that oh hey Chris thanks for chiming in yeah I'm thinking about I was trying to say oh well if I do one in the afternoons it's more interesting and useful to maybe time zones west of me and if I do one first thing in the morning then it's more useful the time zones east of me but it honestly really seems to have landed that the reverse is true where more folks show up on the Monday streams because it's evening EU hours where's my so if I'm starting these at 2 p.m. US Central, so this is Chicago time. And then here's our European time zones of 8, 9, 10. Honestly, maybe I should just back it up on Monday, two hours to really hit evening hours for the EU. And then just skip the Thursday one and break that up. That's something to consider. Oh, I should put all this in the scratch that folks who watch the recordings.

51:29Yeah.

...39There's a couple options there really like I could stream an hour a day, three days a week. I don't know. I think the The big difference would be is if I streamed on the weekend, because then I would be streaming to US time zones, and most of our users are in the US time zones. But honestly, I'm just out on the weekends more often, and it would be very hard to keep a consistent schedule.

52:19Yeah, and I am not trying to be... What's his name? Thor, the pirate software guy who has, I don't know, 9 million subscribers.

...37The goal is not here to build me up as any kind of influencer. It's to provide a different channel for folks to talk about this site and the code base and other things just because Sometimes people find email or direct messaging intimidating. All right. So right now we're up on top of master. Great. Oh, I didn't push that. All right. So if we compare, yeah, so this is where looped the stories, I found their comments.

53:39And then each one gets a thread. Oh, I actually did include the public similar stories. All right, so,

...51In the background here, I have had the database refresh running. Frici 2pm CST is a pretty congested time for good reason, it does hit most timezones at a reasonable time maximizing who can catch you indeed. well probably except for oz TZs i guess 🤔
So if I switch from production to local, let's put it on the right, the Rails server is not booting. 2pm CST, is that US CST or Europe CST? Frici Also ahoy, recent times have been all kinds of crazy. CST is US, central in EU is CET
yeah australia and india i would like to hit but they are very hard for me to schedule for it's just the globe is inconveniently round that way and so if i'm streaming at you know now time it's the middle of the night for india and where's and it's early morning for australia

54:55Oh, is it? Thank you. I didn't... Never caught that difference. All right. Why isn't the local server starting? Oh, because I did the... I merged the Prism code and I didn't run bundle.

55:23Not done. All right. So it is rebuilding whatever the heck. All right. Now that should run instead of just exiting.

...42Hmm. Why are these? chamlis_ are you mid restore from prod?
Showing up is not run. It sure should be. No, the restore finished.

56:14These have all run in prod, like weeks ago in some cases. I'm really puzzled by.

...32Why would I be seeing this?

...41Hmm.

...56Forget it. Let's go look at prod.

57:12That's a query I ran for somebody the other day. Here we go. What am I looking for here?

...37Yeah, so these are all in here, right? It's the same. So 170347 is in here. So these ran in prod. Why would local dev think that these hadn't run?

58:10The thing that's strangest about it is it's only the last seven and it goes back a couple of months. And that's probably the last time I refreshed from the prod database. But then I wrote these migrations here locally. Some kind of odd Rails behavior is happening and I'm not getting it. I feel like I'm missing an obvious feature of Rails somehow. Like I'm running in the wrong environment. No, I restored to the development database. Otherwise, I wouldn't have even seen this. I wouldn't have been changing the database that the Rails server is running with.

59:15Honestly, I expected a hassle between test and development, not development and development.

...32I may have to chalk this one up to Rails being mysterious. Well, I'm going to let that keep running in the background. So the reason this is taking a minute is the comments table is very wide. And so migrations against it tend to take a little bit. And this one is very expensive because it has to loop. every comment and then set fields on all of them so it's basically we're doing a one plus n to ourselves and it's what's n here like 120 000 somewhere in that neighborhood so migrations that only have to run once typically don't get written in a very performant manner. All right. Hmm.

01:00:58Just throwing a note into the scratch of, hey, if you are watching a recording. Let me know what your experience is.

01:01:19All right, so. If. Story merging has all of this stuff.

...36This is the thing I had been planning for a long time that was going to change the way merge stories to display their comment trees. And I was not actually super confident in merging that one into production because when I looked at it, it looked weird. And I couldn't tell if it was weird just it's familiar UI that's changing or weird like it's a bad idea. So I would like to look at it some more. How many times have I tried turning this stuff off?

01:02:24I keep putting ads in.

...55There's also from recent discussions on the last stream, this idea of making merge stories have some more prominence for the newly submitted stories that get merged. Having thought about that a couple of days, they do seem excellent. Like the idea that I came on, riffing on what Deezy said on the last stream of maybe having newest and recent display those merged stories rather than just the top one, which we'll have scrolled off. Because that would be more attention to them I like that a lot. Let's put all of these in the to-do list. They're sort of orthogonal to redoing the comment tree. So I'm going to put them up here.

01:05:18I'm trying to figure out how to say this. What I'm trying to say is dude submissions that get merged for visibility.

...49And then let's see.

01:06:02Yeah. These two, whether there is like an unread tracking that makes it red. Yeah, I guess I could do both of them. might work especially well with the folder moving into the left column from chamless's pr all right so

...58So we'll take this and we'll put it here.

01:07:35And let's do this.

01:08:03Okay.

...09Alright, so that's that's pretty straightforward. And i'm going to. I think start on this first one. I think that really is a nice way to address the biggest complaint about how merged comments merge stories work.

...40don't just let that migration continue running in the background which it shouldn't need to run at all oh i get it i get it all right so what's happening there i'm not yeah all right i You've probably seen that I lean pretty heavily on my shell history. And the command I ran to restore from the, so I ran two commands. The first one was, hey, prod, take a database back up right now. Great, fine, ran clean. The second command I ran was, all right, let's restore the latest database backup from broad. But that doesn't actually do what I just said. The command actually has a date and it restores the latest one from that date. Actually, it might restore the first one from the date, but I know the backup system didn't run today so because it's monday so i auto completed that and i forgot i had to put in the date so i restored a database backup from you know just before these migrations so looking over at this other side of the stream from january 4th so that's why all these migrations had to run again finally the penny drops okay so that'll run for another 12 minutes it has a little eta countdown going but then i won't have to rerun the big giant slow migration or any of these other nonsense yeah okay if i had just read closer what i was running chamlis_ one fewer mystery remains in the world
or if I had more fully automated this, it wouldn't have happened. No harm, just a little confusion. All right, so yeah, it's nice to have that puzzled out at least.

01:11:24Let's go look at the story repo and look at newest yeah and what i what i sort of want is to already have refactored the database but the short version here would be to just drop this base yeah yeah i will be a dj and drop the base

01:12:03and hey at least it's not an all your base reference right right so model story oh i don't actually have to drop that i can just say merge

...31Forgot that I left myself that how nice.

...41So it was newest and recent where's recent.

...58hmm. This comment implies that it came... I wrote this before I added this if.

01:13:10Oh no, this is filtering. Okay, yeah, so I have to do what I... All right.

...42Let's just do the easy thing.

01:14:10How is this? Okay, okay, big sir. Cat's on my lap, and he's deciding whether he wants to face left or right, and whether he's getting enough petting. Cat cannot see him on my lap. Only when he chooses to sit in his usual spot up on the filing cabinet, so... Would help if I didn't put typos in. This one doesn't use the repo.

01:15:16The repo is kind of an odd bit of object orientation, because all of these should maybe just be scopes by now. But scopes were a lot less mature in Rails at the time it was written. I don't think I introduced it, did I?

...56yeah yeah and it used to have a little bit more config okay yeah and then there's recent all right honestly it could probably just get refactored into a set of scopes at this point

01:16:34why not in fact recent already has been it's interesting that newest doesn't respect Hidden stories. That's probably a bug.

01:17:25I'm going to put this back. And I'm going to make base more useful.

...48That's false. We're not going to say unmerged. Oh, yeah, OK. So I was just reading it backwards. Yeah, that actually does what I want. OK.

01:18:17That's the default. Oh boy, I'm going to run into... Ruby's difference between named args and keyword args is not how you would design this from scratch. I've been working on our Ruby gem the last, I don't know, month, six weeks, just kind of as a hobby project. And as an experiment, I leaned into What if I always used keyword args and never used named args? And honestly, it's better.

01:19:00But there's not really a way to, you know, as they say, you can't get there from here. That is not a small migration. All right. So let's just mix and match.

...19So if I do that. All right. And the database reload has finished off screen.

...56so can i start my server now without getting a Tobironic Evening from Sweden o/ Wonderful to see some Ruby here. Benn my fav language since 2007. I came for Rails 2.0 but stayed for Ruby :)
complaint please all right yeah so this is what the home page looked like I don't know half hour ago hour ago however long let's go look at recent

01:20:31Ah, wow. Welcome, Tob. Tobironic? Sure. Tobironic? Tobironic? I don't know. I'm a Midwesterner. Yeah, so Lobster's Israel's been around 14 or so years. All right, so this at least is not throwing an exception at me. But we're going to have to merge two stories to actually see this in action. So let's just merge these two. Why not? Right. gtfrvz just dont use any variable "names" and just index them by the amount of binders in the scope KappaHD
Tobironic Ahh yeah Lobster, I learned about it during the Brave drama :D
So the amount of binders in the scope. Hmm. You know, I was just playing with Ruby binding.

01:21:50So we will reset that and then log in.

01:22:00gtfrvz de bruijn index
And then jump back to slash newest here. Yeah, let's just edit these two. So what are you?

...32Okay, so this one still exists. And it has a pretty clear UI, because I handled that case. This one gets its number that actually all seems fine. This really doesn't want to move to the left though, because if it does, these all get taller. And that's awkward. So let's just leave that there.

01:23:12So this and slash recent are both fine and still show this.

...24I expected to see the SSH story here.

...40Oh, some of these have a voter to. So we might just be farther down. Let's dig a little. Now, these are going back days and days.

01:24:06OK, so. chamlis_ bringing back some painful memories banging my head against lean formalising some lambda calculus things
something here is not quite right with recent but the other one is fine newest and recent oh it's because it defaults to unmerged and i didn't update the controller okay that makes sense ah the brave drama yeah there was Tobironic They do a ton of shady things
was the weirdest thing because the brave drama was i don't know four years ago that they pulled nonsense and then they were spoofing their user agent header for years and years and they even like cited us blocking their scam as a reason to keep spoofing their user agent header it was kind of unpleasant to be individually targeted like that then they popped back on the radar just three or four months ago because i guess they stopped spoofing and so then we redid the whole what's up with brave browser and i improved that error message and then had that bizarre situation of oh yeah you know what if we knew the date of that was reading that a thread on the murder of that united health ceo because there was a weird backpack nerd thread and that came up the same time as we were redoing brave and i swear the two are related by backpacks all right so

01:26:09So if I do that, okay, this shows. Do we like this word merge? I think that's the best way to show it.

...28We'd have to do a more complex lookup to fill in the number there. This seems like reasonable UI, all right. This one...

...46I'm going to bump over to master. Put it there. Got to run the build first. There is probably a test for not showing merged stories. Let's double check.

01:27:13guess not. Be redundant.

...48And what's my? My number is 1456. All right. Well, I'm going to actually just deploy that. And that'll also get Chambliss' two little PRs from earlier in the stream deployed as well. Okay. Yeah. So I must have scrolled off and then lost the.

01:28:38And now I'm having trouble typing because the cat is in an awkward place. Great, great, great, buddy. Sir, the show must go on.

...51here it'll be it'll be in the browser in just a second because i pushed it up right

01:29:51And as long as I'm here.

01:30:17Just say changes. It's not really about the icon anymore. And I like the, yeah, see here, if it's narrow on mobile, it would be fine. I could put the merged icon in there. But when it's even just a little bit wider, it would look weird to increase this vertical space. So I think we're just going to have to live with it. that way which is not the end of the world yeah all right so now let's make actually let's let's log out so i don't need to be logged in for any of this It's not a get. It's a post or a put or a delete or something. Good. I just wanted to see it more like a user visitor view. All right. So with that,

01:31:58Let's add an issue. People seem to like some of these plumbing ones.

01:34:01Yeah.

...07I'm not going to write that thing about keyword args. That's probably not needed.

01:35:12It's not really a user visible feature, but it's not a bug. So I'm just going to tag it as something nice. Maybe someone will come along and refactor it.

...25So I think we have two things here where what I want to do is change list Am I about to unify list detail and story detail? So story detail looks a little different because it lists all of these and then it has this little summary line. And I guess what I'm saying is I would like for this to toggle the display into something very much like this. all right well that's refactoring sometimes you refactor and you go oh well okay i'll put it back maybe i'm about to do that that's kind of funny so then the thing that's different is exactly which of these links is being shown so and it's nice to have these on the screen at the same time that's why i merged the two newest stories into each other so in this case if they were both expanded these two things would be identical right i guess there's the question of do we show so here you only see the voters for the top level story but the idea of top level is sort of going away.

01:37:12So if we were looking at this second one here, if we expanded SSH, no, let me say it. Yeah, if we expanded SSH, maybe we would want to leave the voters next to the top level one rather than They're displayed next to this. And then, you know, the opposite here. Let's play with that a minute and see where we get.

...53Actually, let's go the other direction. Oh, this is... I thought I already deployed the point release. That's building a new version of Ruby. All right. That's... Now I kind of wish I had this in TMUX so I could keep this visible to me off stream.

01:38:32Ansible has worked for a few years at installing new versions of rubies. But since we only do it once or twice a year, it just feels riskier. And I would like to keep an eye on it.

...57Let me just get a second terminal up here.

01:39:18Let's see how much difference we have between these two templates.

...29Yeah, so there's the idea that we are considering the first one to be a little different. We are extracting classes to display from the first one.

...49This is just code moving up and down. Where's my big each here?

01:40:05Fintif is being particular about how I scroll. I shouldn't be able to move these out of sync with each other. It's a little strange. All right, don't wanna think about that. So that's fine. So we show the voters from the first one always, and then here's the loop.

...39And here's the whole pile of things being... Okay.

...58Isn't there a way to say ignore whitespace in VimDiff? Because the indenting is causing them all to look like they're... oh, you know, I should use diff-tastic instead of imdiff. Yeah. So the difference here is diff-tastic is a diff tool that understands the semantics of the file being diff. I believe it leans on LSP. I don't remember if it works for ERB because, again, string soup, but

01:41:43Let's compare.

...50So the description is a difference. The way these metal links get printed is a difference. Honestly, especially once this earlier on the stream, I looked at that issue where the comments link is broken and that new contributor was name starts with a u but i'm blanking on the full thing was figuring out what it should be and that's ready maybe i just want to drop list detail in favor of single detail that single detail becomes a little smarter i have a styled user link yeah it's still doing whitespacer it would have Sync fees and then we handle previewing little differently. So many little bugs that got fixed here.

01:43:19yeah so that at this point the remaining big difference will be the display of that summary line and the display of the story description which is not handled in this template so i don't have to carry about what is this This looks like me failing to exit Vim. Is that actually in the end of list detail? That's embarrassing.

01:44:07Tobironic the vim meme is real :D
Yeah, it's a typo I made while I was shuffling Windows around right now.

...16Yeah, that wasn't permitted. yeah you know i've been using vim since like 96 you think i'd know how to exit by now that's funny i've only had i've only been using vim as like a terminal multiplexer since i started streaming like four months ago maybe a little more i think i started in december six months god time flies And a shortcut that's only six months old to me is less familiar than one that's 20 years old. So I can see that with that, you know, quote unquote, young shortcut, I get more typos. All right. And off stream, I can see that the deploy has finished installing Ruby, has finished the bundle. That one also took a minute. This should only take another, 20 seconds. Okay, so it's... This is backwards. It should not be doing a phased restart. It has to do a full restart of PUMA.

01:45:39Is this going to say reloading or restarting?

...47Yeah, it got OOM killed an hour ago. Yeah, that says reloaded. We got to restart. All right, let's bring this up and go watch prod.

01:46:28Tobironic I used to be a heavy vim user but as I'm using a nordic layout (never learned international) it became very unpleasant for my fingers. Now I'm vibbing with Zed.
Oh.

...37See this coming up. Good. So it's funny you should mention it. Because. I use a like a standard QWERTY keyboard But then I've also, for a couple of years, been playing with columnar keyboards, especially, I've really liked these ones from Keeb.io, and I just got a Iris CE. There we go, that's good. So Prod should be back up here in a second.

01:47:26Can I get a big image? And I've found that if I use the standard American QWERTY on a staggered keyboard, you know, the typical standard staggered keyboard, I can maintain that and a different layout on a columnar keyboard. They're different enough that the muscle memory doesn't interfere.

...55okay everybody's booted you should be loading all right and so with the columnar keyboards that i've been playing with and i've used a An Ergodox, a Plank, a different version of the Iris, and just... Ah, good. Prod is happy. Just a day or two ago, I got an Iris CE and got that built. Ah, assembled. I didn't have to solder anything. Barely counts. The Ergodox, the Plank, the first Iris. I did solder those together. ..

01:48:55have been playing with the norman layout for a couple of years so it is intended for english and tries to keep most of the letters in the same place so you can kind of see like the bottom row barely changes i think n is the only key that moved but then the home row is much much better than qwerty Frici is it me or did your mic go all weird?
So anybody who's been a junior cryptologist knows that the most popular letters in English are... No, it was my mic going weird. I'm sorry if you heard that. There was some 747 banking, and it's like the first nice day of the year, so I have the window open. So that must have just come through. If everything is normal now, it was just the plane. Sorry about that. I was thinking about closing the door, but the cat's on my lap, so closing the window. Tobironic @Frici he just got excited when he transfered to keyboard tank :D
KeRDeJR Hello!
Tobironic talk*
So anyways, the junior cryptographers know that the most common words in English are, or letters in English are E, T, A, O, I, N, and then S, H, R, D, L, U. Howdy, welcome, Kurti Jr.

01:50:28So with the... Frici Also Norman reminds me exactly as you said what is the problem with most alt-keyboard layouts. 99% of them are very en_US centric so if you use any alternative keymap... welp LUL
With QWERTY on a staggered, I'm typically typing, I don't know, 110 words a minute, something north of 99% accuracy. It's much lower on stream when I'm trying to talk at the same time. And then Norman is, I don't know, I think I'm running around 45 or 50 words per minute, which is painful. And my accuracy is only like 96%. the difference between 96 and 99 you know mid 99 doesn't sound like a lot but oh it feels like a lot especially when i'm much slower to correct typos i heard about this one from gary bernhardt i have no idea how he found it but he tweeted about it i don't know 10 years ago something and i've played with it on a few keyboards since and i i really do like it but it's hard to get to grind up on, ooh, that's tariffs. That price has shifted a bunch since I was last here. Tobironic The main problem with nordic layout and vim is the placement of : ; { etc
Frici well normal is very qwerty like... it's workman/dvorak/colemak etc that makes it entirely different.
Either that or I bought the last one in stock. Or maybe I just chose like the B stock. I don't recall, I paid less. Here, let's share links. pushcx https://keeb.io/products/iris-c… https://normanlayout.info/
I should probably put them in the scratch file too.

01:52:28And it's very funny doing this layout with Vim because, like, the big question is, what do you do with HJKL, right? That's how you move around in Vim. I've certainly been doing that a long time. I left them on the letters HJKL because if I remapped the right hand, NIOH, that's Like H is switching sides, which right off, that's kind of weird. But I is insert and O is insert a new line. Like you use these all the time. And N to jump to the next thing I searched for. And then those three have to find another. And so it just sort of made sense to leave it on the letters and know that H is left pinky. And then L is... Or I'm sorry, H is right pinky and then L is right middle finger up. I don't know. It's weird to have the right key be left of the other. chamlis_ colemak puts j in the top row, k in the bottom row :|
But it kind of works. Because otherwise I would be shoving around keystrokes forever. And the idea of learning a new set of Vim keystrokes on top of a new layout would have made me nuts. Yeah, Colmac is real popular. think if i were to do it all again i might pick colmac instead of norman but norman had some slightly nicer stats and i don't know it just seemed like less disruption to pick up i know a couple of programmers who use colmac I played with using Norman on a staggered keyboard, but I could not maintain both layouts. I just started typing all the time in QWERTY and all the time in Norman, and it was incredibly painful. I gave it like a week or two, and it was getting worse, not better, so I bailed.

01:55:02I think I'm going to unify these. I think I'm going to move single detail onto list detail. And that's the way it has to be.

...35Yeah, yeah. All right. So if that's what I'm going to do, let's go back to the main BIM.

01:56:00There isn't the... Is there a smaller thing for me to nibble on before I do a bigger refactor? This one is done already. No, it really is the next thing.

...37Alright, here goes nothing.

01:57:08Do I want to make the local still called merge stories? Probably not. No, it does have to be. Yeah, I'm about to touch home index. That one barely gets touched.

...36Who else renders list detail?

...43Search home in the cabinet. Oh, this is mod UI, yeah. OK, so touching this one home index is going to probably force me to touch story repo.

01:58:17But if I do that, I think I'm making work for myself at this point. So one of the reasons I've been doing all these UI things is if I do all these UI tasks, it can inform what the database refactoring looks like. And I feel like I'm pretty confident that

...50I haven't I I feel like i'm pretty confident I know what the database structure should be. That. The top level concern should still be called story. and I don't have a great I was thinking of calling it headline but. when you hide stories they really happen on all of them so like if you hide one merge story out of if there are three links and you click hide on one of them the whole thing should go away all of them this doesn't actually work consistently right now nobody has reported it as as a bug but it's not, it's a combination of story hiding is not super, well, it's more common than it was, but merging is still very uncommon. reported the bug because you kind of have to dig to see it happening i know what's happening but all right all right maybe i don't want to do the views maybe i want to do the database because if i touch list detail or really if i touch single detail A lot of what I do there to update the scopes in the home controller is going to be reversed by what I do to do this refactoring.

02:00:53Yeah, and then I have a bunch of inventory hanging around, which is all of these. I'm going to buy some time to think by going back to this. Yeah. All right, I'm going to throw on the break notice here.

02:01:23Because I'm going to step away for a moment. Let's turn that on. Y'all can talk amongst yourselves. And I'll be back in just a second. And then we'll do that UI.

02:04:01OK, howdy, I'm back. All right.

...10Frici Welcome back
Let's let's pop off what I just did. Is this IRC? WB? OK, and then.

...35this back on top of master and update these. Let's take a look at what things look like. Yeah. So this is where the merge story view is headed.

02:05:09And I get what's happening here because I've touched this up for months now. But without many comments, this looks pretty goofy.

...27I think maybe this just wants a smaller view where instead of repeating the whole list detail, It's just the title, the submitter, no voters. I guess the caches link because that's particular to that, but like drop off the tags, drop off the domain. Yeah. Yeah, we'll simplify. We'll see where that gets us. And then I want another example to compare against. So let's find another merge story with lots of comments on it.

02:06:31What's the name of that field with the count? Stories count.

...58So let's grab this. Hopefully it's not something incredibly spicy and that's why there's merge stuff. Oh yeah, this one we saw before and I didn't want to deal with scrolling past. People get very opinionated about what Firefox is doing. Okay, so we have a,

02:07:30as if that's any less. All right, I'm gonna hang on to this one just for this one plus n. Let's try. Okay.

...48So we got this. And in the single detail, the story about summary, I'm not logged into localhost, am I? No. Huh, interesting that we even get into this code for a visitor. All right, let's fix the one plus N.

02:08:27Which is complaining that 146 of the single detail. DonTheDeveloper 17 raiders from DonTheDeveloper have joined!
Which calls for the summary for users, so that's nil. But that wasn't preloaded. So let's look at the stories controller and show. DonTheDeveloper o/
says let's find the story and if story merged into story we do that redirect yeah otherwise if you can see it so where is it getting loaded from hi don the developer welcome oh from a raider how many folks are you bringing oh 17. pushcx https://lobste.rs/
renethedev Hello, Peter!
pushcx https://github.com/lobsters/lob…
oh big pile of people so i should do my whole intro so hi i'm peter this is the lobsters office hours stream this is lobsters and if y'all have any questions about the site or the code base which is available up here on github you can just ask anytime don thanks for bringing some folks back or Yeah, it's done. That's the Raider. Sorry, I'm not super sharp with the Twitch UI. But you can ask any questions you have about the site DonTheDeveloper Cool! Yeah no worries. I'm going to grab something to eat. Have a great stream.
base here at office hours and when folks aren't asking asking questions i'm busy breaking the site like inserting oneplusn queries so i was running that down when you all arrived cool thanks for dropping in i'll have to can i ah there we go i can follow you so i can find you again in the future So yeah, sound off if you have any questions about lobsters, the site, lobsters, the community, lobsters, the code base, lobsters, the flamethrower. And then otherwise you can just kind of watch me struggle through code. So we have this vote summary. That's what's triggering one plus N. So that's going to be down here in the story loading, which It's not happening where I remember it happening. What is show doing? So lobsters is all about stories. These are the links and titles and URLs. And they are one of the two God objects of the system. So everything is always a little bit different. Okay, so we find merge stories find the merged stories we do the mod single preload but we didn't do the user preload did we no for presentation should have done it huh all right let's i want to still see this on screen so

02:12:02So we are calling mod preload with nil. So we don't load any of the moderator stuff. That's fine. We have the equivalent of that here. The vote summary trigger one plus N cause visitors don't see usernames. All right. So we say for presentation. This didn't load votes. Let's go look at that vote summary.

...55So if this is nil.

02:13:07if the user is the moderator you get the let's go ahead and add in

...40What did I just type while I was juggling everybody arriving?

...52Oh, it's the thing with hashes and keyword syntax. I have to put it before anything that's going to be a hash.

02:14:08OK, so it is showing. that vote summary to visitors. Yeah. I've been a user long enough. I don't remember what things looked like when you're logged out. So this is good. And then we should see the next three. Okay.

...31I was hoping for one where the merge stories would have some comments on them.

...46OK, so we have 51, 20, 19, nothing. There we go.

02:15:19OK. Good. So let's go ahead and take this.

...38And say that on the story show.

...52Instead of rendering the list detail, did I put it into?

02:16:32Ah, that's why it's not printing all of them. It's just doing OK, so. Let me just inline this.

...48Because what I want to say is that we are going to have a.

...57This.

02:17:28So no upvoter, no score. I want to be up in list detail.

...42No flagging, no hiding, no deleting.

02:18:11Yeah, and I'm getting rid of the can be seen by user check, because even if the merge story gets deleted, it would be weird to have comments broken out by nothing. So I think it's just going to have to work that way.

...40Tobironic Heading to bed now. Have a great stream o/
We'll include this.

...47Thanks for dropping in. Have a good one. Well, let's just duplicate it. Think about tweaks later.

02:19:03And then...

...16Don't do any of this, any of this, no tags, no domain, no preview. Well, no, no preview, but yes to byline, which I believe appears inside of details. Yes.

02:20:06We can shorten that to the nil propagation operator.

...29And we'll get the, where's the cached?

...56There we go. Oh, this doesn't want to be a div, because I was talking about putting it all on one line. So let's go ahead and delete that. And this one, a brand new template, and I'm already hassling with the string soup in ERB. All right, and then, yeah, let's include a comment count. All right. Let's see what that looks like. First, it's going to look like a syntax error because these bits I copied are all referring to a story variable instead of an MS. And I left the old thing in. So let's yank that out. And then let's find story.

02:22:14And come here. Change that to say MS. If Microsoft is gone.

...34Alright. Fingers crossed, let's do the simpler one first. Name error. Right, because classes doesn't yet exist. This one, I don't know that I want to style them differently. So let's just go ahead and delete that out. I can restore it later. It really wants to be a helper. It's not short ID. And we don't want to have that in there, because it's just going to mess up anchor tags to have a second ID of the same thing. All right.

02:23:26That looks pretty good. Yeah, let me add the pipe.

...58I almost want to hang like a bullet point or a lobster emoji or something, maybe even the merged icon just to, yeah, maybe the merged icon just to make it real clear so that like when you're scrolling quickly, let's look at this one, they kind of pop out at you. Yeah. They do differ by color. And you know, this HR is redundant at this point, especially with a giant gap like this. So let's pull that out. Where's the HR?

02:24:53And what did I add, a couple of BR tags? Yes, let's toss at least one of those. Good. And let's hang that merged icon in the left gutter. I am just making work for Chamlus. And if you're a recent joiner, Chamlus is a contributor who is refactoring the site to use CSS Grid. so that everything becomes a little more reliable because, yeah. So let's just grab that.

02:25:52Where's my icon?

02:26:03See what that looks like. OK, it's not horizontally centered, but it's good. I like that. The first one.

...25Yeah, the first one probably should have it. And at this point. I could get rid of the icon there. There's a famous rant from Steve Jobs about taking the Apple logo in vain because there was a period where... What is this? That's not a good hit there, Google. Some random thread. They used to have the command key. Actually, there were two command keys. And they had the... This is the one I wanted, folklore.org.

02:27:20pushcx https://www.folklore.org/Swedis…
They had an open apple that was just the outline. They had a closed apple that was solid. And then... Steve got Ben on a joint about it. It's ridiculous. We're taking the Apple logo in vain. We've got to stop doing that. And that was when they came up with the command key. It looks like the little octothorpe almost. But, you know, we can't take the merged logo in vain. The merge icon.

02:28:05All right, so we'll center this. And then, yeah. So what's?

...25Don't need that. And then where was that summary?

...33It's over in single detail.

02:29:06It feels like if I don't include something, it's not clear that this applies to everything instead of... We will take the Merge logo in vain for the moment.

...29Let's fix this.

...53I was hoping that would be very easy.

02:30:02Oh no, I am struggling to center something in CSS.

...20Yeah. All right, so it's not that.

...42This might be a good time to say that if you spot a bug before I do, you get to be a channel VIP. And that's certainly a hassle here where I have a bug that this is not appearing in the right place. And the correct, you know, the perfect fix would be wave a magic wand and Chamlus's pull request would be done and I would just merge and the grid layout would handle this for me.

02:31:20Did that get better? Yes. What is your shape? It has like a bare pixel left over. All right. Let's call that good.

02:32:00I think if I just bring this up.

...08Yeah. So how well aligned am I? Looks correct, except for the pixel that the merge icon isn't. It's not really a symmetrical icon. All right. That is the exact level of detail I want to fight with right now.

...36So this looks pretty good. I wonder if we could make this toggle all of the threads on that story. Oh, what if? What if I just put comment folder there? These pipes are overkill. Let's get rid of the pipes.

02:34:01Well, its location is wrong, but it... Oh, because it's attached by the short ID thing that I didn't want to deal with.

...19Okay. Why am I... Oh, it's just that they're different ages. That's why I'm not seeing the comment box in line.

...57I think that might be it. So the UI improvement plan was split the tree of comments by which merge story they're on with the list detail header. So we're going to say with a simplified header. Admin chore, split up threads. That one's me going through the whole fricking database. On a merge story, no top-level comment box, one in a 4-H, got that. Story description for each header, got that. Story similar for each merge story, got that. Yeah, okay, so let's edit the to-do list. And then, because the admin, that poor bastard who has to go through all the threads, he can do that after doing this.

02:36:06It's funny that a habit of replacing with with just a W is a thing I did because I was slow handwriting as a kid and I carried over into typing and nobody else does it. All right.

...38And GitHub. Must be a lot of work to flip that bit. All right, let's go look at the diff.

...54Light space.

02:37:05The CSS file is indented with tabs because it's like a micro optimization. It's one fewer byte to send per indent level, but realistically it's gzipped. And so the actual practical difference is going to be nil or very closely rounds to. I just don't feel like taking on the diff to Re-style all of those. All right. So this this only needs to happen on the single story view. I don't want to do that on the lists. Except it has to. Yeah, we'll just over select, I guess. So there's that. Let's make the.

02:38:12We'll use the null propagation operator, and we will propagate this duplicated code. I clearly just broke something. Why did that break? Oh, because what I would really like is hide avatars. All right, well, let's edit the others then.

...52Oh, I didn't put it in the... I didn't put it in my little simplified detail.

02:39:06Yeah, I didn't put the... I put the avatar icon, but not the username. Let's get that in there.

...37This needs either a little spacing to breathe or those pipes. Maybe I should make this... Yeah, that's the hassle here. These are not... What's the different structure? so this is a author card it goes details by line you author this goes details all right so i do need that byline span just watch i bet the application the byline is going to say div on it no okay it just says dot That's relief. All right. So then this whole section becomes part of the byline and all of this gets indented. There we go. Maybe a little more space so that breathes, but yeah, that looks great. I can put the pipes back now. I'm not going to undo tree that.

02:41:28Yeah, with the contrast turned down, that looks pretty good. And then let's put just a little bit of space to the left of the avatar username, like 1M. Honestly, what if I... What if I grabbed this? So HTML collapses whitespace, but if I have it in a span, no, it still gets collapsed.

02:42:10Come here. Yeah, I don't like that. I don't like that pipe. Oh, it's not in the byline. Even with the color, I don't think I'm going to like that pipe.

...24Yeah, it's too much.

...43That's what I want. Right there. What does this look like on mobile? I haven't even thought about that.

...57Oh, that looks pretty good, actually. If I go find the next one.

02:43:09Yeah, the bottom one looks good. And then here we go. Yeah, the color makes that clear. And then having the asymmetrical vertical gap, so there's a bigger space above, makes it sort of semantic spacing where it's like, ah, this title is more closely identified with these things rather than up here. Let's go look at this version in mobile. Yeah, that looks fine.

...57okay yeah the the heavyweight version of that was just too much too repetitive unclear especially with the zero comments version this i'm actually really happy with this i don't know anybody want to kick in opinions before i merge and deploy this Let's refresh that diff view and see if there's anything else I want to do. But I think this is ready to go. We don't display the. That's bugging me just because I know it's hot path. So let's drop that out. And then in the stories controller, right here, this should load, this should, all right, good. That's what I want. It's a little tacky that this is not its own scope. But this is all going to be cleaned up when I migrate the database and come up with the new database structure. So that's fine. It's OK to have a little ugly code for a while. We're going stepwise refinement. All right. So good. Good.

02:45:38You know, this could be simpler. It could be not user or user dot show avatars. As long as I'm touching the code.

...57Honestly, it could be a helper, couldn't it?

02:46:04How much refactoring do I want to do?

...20yeah so except when you're looking at user show all of the show avatar or keybase proofs that's a little weird but okay but all of the rest of these have the same guard on them. All right, I'll make a helper.

02:47:19There we go. E. L.

...54so this becomes

02:48:27I don't love this name because it's not I would like the semantics of the name to make it clear which positional argument is the user you're looking at and which one is the one viewing.

02:49:11And I don't have a better name right off. So I'm gonna leave that. Why are you giving me a... syntax error okay

...52Oh, let's actually see that the first one works. No. Oh, I didn't rename this variable to, say, viewer.

02:50:20Define method avatarPath for nil.

...30Oh, it's not for viewer. This one should be user as well. OK. Now let's go on with the refactor.

02:51:08Now that one's fine. You always see that even if you have avatars turned off. This one we get. This one. Come here. Good. And then search. Why don't you jump over to the right? I already did that one because it's repeated. That's heinous inline partial. So is this one? Yep. OK. All right. A helpful helper. I got to run the specs.

02:52:20Big div.

...26What did I call this? Oh,

02:53:05I wanted that to touch the commit. How do I?

...19Does anybody know offhand when doing commit amend how you touch the timestamp?

...35There's reset author. There's no edit.

...56There's reuse message, which is the opposite one. Reset author also renews the author timestamp. Okay.

02:54:12Okay, there we go. Two seconds. Because it was hanging out on this with branch for a while, it would just be too weird if such a significant change had the wrong timestamp on it. People are going to go look at this commit and wonder, what are we doing? All right.

...44Let's look at one more time. Touched so much code, I just have to look at it again. All right, so we include votes because those little inline guys will need it. Extracted this helper. Really could have been its own commit, but I don't want to schlep around to fix that. Indent fix. There's the line that looks much nicer. Okay.

02:55:47OK, that's fine. I was going to push it anyways. All right. Well, let's let's deploy that. Oh, man. Look at the time. So I have been streaming for two hours and 50 minutes approximately. I usually aim for three. So. I didn't put the I didn't run the build. And I didn't. I didn't put the name of the issue in the commit message. So that's, oh, Peter. Peter, you are gonna be doing a push dash F in a minute. Oh man, I really hope these are like, I reorganized some code rather than something is actually broken. All right, so what's home index? Oh, because I just copied them.

02:57:20I maintain this inline partial, aren't I? Yep. This one should be story user.

...41Let's try that again.

...51all right let's try that with fail fast huh so

02:58:27I guess I really should have made that helper its own commit. Just can't copy and paste, go around with that. That's coming from comments, comments. See, I'm getting myself with.

...43Getting myself with heinous inline partial.

...55OK, there we go. There are only so many instances of it. And only like two of them are original. The rest are propagated by heinous inline partial. So let's see a green build. And then I will push F and I will add 1456. Yeah.

02:59:37Peter's bad, poor chef. All right, let's deploy.

03:00:09So let's go ahead and when this deploy finishes, I'm gonna double check that that's good on this one story, because that's real. This one's just test data.

...33And then here, I checked all these boxes. And I should have this commit listed down here. Yes, good. Okay, so it's clear, hopefully, to whoever looks in the future. This one's gonna get noticed. And I still have to do this big admin chore, which I might just leave to next stream. Well, I mean, I'm not going to keep going. So I'm a little fried because I'm doing a full three hour stream, but I also spent hours doing my taxes. They're not so complicated, but there was some hangover from the complexity of last year's that was very complicated. Okay.

03:01:33okay that's great man that's been hanging around for a minute so this feels like a couple of big improvements for story merging cool so this has been lobster's office hours is there a way that we can see if Don the developer is streaming again and raid back at him. I don't know my way around the dashboard super well. Settings, content, community. Fucked if I know. Yeah, I have no idea where it is. Frici there is /raidbrowser but not sure if that helps much for regulars
would like to end streams with a raid but i just don't know how to find people that are worth rating on the regular if someone sees this and knows oh i know what i'll do katie who streams as princess xe there's a raid browser but not sure if that helps much what do you mean by four regulars Frici for finding people to regularly catch, it does help for anyone who is online right now though
oh and so doing that totally threw away my view of the chat so hold on not threw away just covered up oh so i can see For finding people to regularly catch does help for anyone who's online right now. Sure. It just seems nicer to send people over to someone who is actively streaming, and it's a benefit for them. Can I search? Is anybody else doing rails? No, but there are a lot of people doing something called Honkai Star Rail, which I only know from... really ooky reddit posts where redditors be horny for cartoons this is where i'm going with this one

03:04:21Anybody have a strong preference for someone I should raid? Yeah, I'll take suggestions, actually. Otherwise, I will just choose. Oh, there's somebody doing, what's it called, app proto development. We get stories occasionally. And there's a bunch of folks doing games.

...50Frici most content is javascript or unity dev on the dev category, atproto dev or cadey might indeed be what would most resonate with people who watch you 🤔
all right so if nobody has i'll try and remember to do this as a regular thing at the end of streams but this has been the lobsters office hour stream for april 14 and yeah no katie i was gonna ask them how they find folks to raid not Because they only stream on Fridays, is my understanding. They do occasional extras. All right. Yeah, so let's hope this works. Thanks for hanging out, folks. And the next scheduled lobster stream. Yeah, I was going to see this one in prod. The next scheduled lobster stream is Thursday morning, Chicago time. Look at that. Looking sharp. I like that. Yeah, I'm going to do the font size, but this is all great. A lot of clarity there. Frici Take care 👋
All right. Cool. Well, thanks for hanging out with me. Reminder, if you are an American, your taxes are due tomorrow. Better get on that.

03:06:21All right. Thanks, Fruity. Take care, folks.