A healthy amount of bugs

Streamed

scratch


replies to https://lobste.rs/s/lyvlhn/should_we_have_low_content_low_effort_flag#c_mrczlx
  (many other expressions of this in IRC, PM)

implementing newest:
  home/index partial is shared between top, home, newest, newest_by_user, etc.
  1. edit home/index to see if it's showing /newest and insert this line
    kind of a sin for a template to check what action it's on
  2. duplicate home/index to home/newest and only modify that one
    cleaner, but risk that /newest falls out of sync with home/index
  3. templatize home/index
    already has @above and @below for inserting content
    could break the "everything above" and "everything below" to own partials
    home/index -> render those in same order
    home/newest -> duplicate above but with one more line of code
    home/hidden -> add class to list


stream:
x 'newest' last read code
x add session_token to rails log filtering


post-stream:
x add 'open volume mixer' to checklist
x investigate buffer underrun; link in browser
x file GH issue for endpoint for outside url -> losbters story/stories
x close-temp-window shortcut gave red warning on finished test tab
x vim: setting new terminals to 'nomodifiable' breaks committing w fugitive
    

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

Recording



02:22Alright, please let me know in the chat if my mic is set up, given how much audio hassle I had at the beginning last time, it would be handy to have a little bit of feedback. And then otherwise, yeah, I'll just kind of jump right in. Let's see, where were we? Let's fire up then. So I've got it. that code we worked on last time. And let's look at what actually happened over here. jangomandalorian Hey! Mic is choppy, not sure if it’s just me
So this was the diff from last time. So here's the old one on the left and the new one on the right. And this is where I got with changing the behavior so that Mike is choppy. Oh, God. I just dealt with this last time. And it's coming back. That's not great. I know my voice is a little rough because I went to the Green Day concert at Wrigley Field. But if Mike did not go to the concert, then Mike is probably not allowed. So what is happening here? I can turn that.

03:45All right, let's see if that's better. jangomandalorian That’s did it
I tweaked the audio settings a little bit. And Django Mandalorian, if you could tell me if the audio sounds better or worse or about the same that day. OK. So it sounds like we're going to have a tradition that every single stream starts with me angrily and confusedly sticking with the mic settings. itscryne Now its choppy again for me
jangomandalorian Ah! it came back
OK, that's great. I feel like a professional. Let me turn that down a hair. Alright. Now let's choppy again. Is it just choppy because I'm speaking in a louder voice sometimes? Was that sentence really loud and this one kind of normal? Is that it? I could just be peaking. I gave like a A and B there. It's a weird kind of performance to figure out how loud I'm supposed to speak. Let me try turning that down and adding a compressor. God, ages ago, I looked at what was involved in starting a podcast. I've actually read some stuff about audio filters. And so hopefully, that tiny amount that I know Means I won't goof this stuff up too badly. Alright. So I've tweaked some more settings. Is that reasonable? Do I sound normal? bitterbael it's still choppy
Will I still sound normal once I get back into presentation voice? I don't know. The magic of streaming. It's still choppy. God. Dang it. Thank you, Bitter Beef. focusaurus still choppy
But... I don't think it's the mic, because it seems to go away, but it's something in the settings. Oh, hey, Focusaurus, to recognize you from the site. .. jameslittle230 hi! 👋
Turn off the noise suppression so that y'all can hear. Flight's headed to O'Hare. Keep the threshold a little lower here. Ah, hey, James. .. Yeah. So if anyone's curious, because nothing is visually happening on screen, I'm ticking around in the audio settings, and everybody said you have to turn on noise suppression in case you're going to have like an air conditioner or something happening in the background. And that doesn't seem to have an effect on things. jangomandalorian That’s it
And noise gate is the one that on the last stream someone pointed out was a little bit too aggressive, because when I pause, it would have a noise floor, and then it would cut out the room tone, and so it sounded like, I don't know, I fell into a vacuum. And then I was sitting on the compressor. jameslittle230 there was a beep and then the audio got better
When you say that's it, are you saying when I turned noise suppression back on, it got worse or it got better? jameslittle230 and now it’s choppy again
I'm kind of just vamping to have more stuff to tweak. There was a beep, and then the audio got better. That's... So this is kind of ridiculous. The beep was not shocking. Yeah, the beep was I turned on the air conditioner because it's like 80% humidity here in Chicago. And I was hoping that the noise suppression would cover the whisper of it, but I wonder if the whisper was covering for whatever is happening when the mic is dead. Hmm. so for feedback i have a little a little audio can i pop this out oh yeah i can so i have this little guy this is all feedback i have and so it's not really actually telling me if things are choppy i can see when i'm peeking and i hit the red but i can't actually see when anything else is. So let's try being a little gentler with this ratio. This does update live at least. Yeah. So that seems fine. It's pulling me to a lower amount. Probably shouldn't be getting yellow. But then on the previous one, people said I was choppy when the input volume was down on the mic. So let's change it there. Okay. So I made one more off-screen change, and I'm going to camp for another sentence here. jameslittle230 still not good unfortunately
dpk0 no, it’s still choppy
If anybody can tell me that that sentence was good, I'll mess with it, and hopefully we can get back to actually, like, hanging out in BIM instead of hanging out in the OBS audio filter settings, which is not the fun stuff I wanted to stream. And... I don't know. It's a little tricky to do with 20 seconds delay between when I say something. It's still not good. God... paradox_625 I know you prob got this but been lurking and just listening it kind of sounds like your mic sensitivity or windows mic volume if your on windows
dpk0 (‘This room is in unique-chat mode and the message you attempted to send is not unique.’ is annoying when attempting to debug an issue like this)
focusaurus there are moments where it's fine but 95% choppy
at this point I'm going to start randomly googling copy audio on OBS sounds like my mic sounds like my mic sounds like my mic sounds like my mic sounds like my mic sounds like my mic sounds like my mic sounds like my mic sounds like my mic sounds like my mic

09:41Okay, I have turned off the unique chat mode. I can see why that would be super annoying for does it work or not, yes or no. Let me turn off the compressor. And everything looks like it's in the right neighborhood. And yeah.

10:02Bring this in. The last time I did this, I turned on the audio monitor for a second so I could hear it myself. And as crazy-making as it is to hear my own voice echo about three seconds late, it helped a bit. but I'm literally not hearing whatever's wrong. Not a cool lot of people. That's the screen share.

...49dpk0 it seems just as bad as before you changed any of the settings, to be honest
paradox_625 Wait you said you don't hear it?
Try the noise gate. I am sorry this is awful in an amateur hour. Yeah, no, paradox. I literally don't. When I turned on the monitor there, I hear my own voice coming back to me, but it's not choppy. It sounds perfectly clear. paradox_625 That sounds like it is network side then so check encoding stats?
I can't even talk in a sentence because I'm hearing my own voice on a three-second delay. jameslittle230 it’s getting worse, in case you’re wondering why you’re speaking and your chat isn’t responding
So if the monitor is not doing anything useful, I'm going to turn that off. Sounds like it's network side. Hmm. Where's that? Little stream health graph is fine. Oh no, little stream health graph now says unstable.

12:07pushcx Steam health now says 'unstable', super. I'm sorry for the chaos.
Let's put you back. Close this. Find the audio settings. Yeah, it's all the... It's just a visual. And the rest of this stuff is fine. Stream. How great did that sensor do? It's been fucked up. Audio encoder, there is only one option. Yeah, I'm not going to try and write some settings there live. That's not going to help out. There is nothing to tweak here.

13:03paradox_625 what kind of gpu do you have?
What kind of GPU do I have? paradox_625 6000 bitrate is kind of a lot and I think is overkill for programming
NVIDIA 3090, which is a ridiculously overpowered graphics card for me, given that most 3D games make me conscious. dpk0 what have you changed since last time? it seemed fine on Monday
6,000 bitrate is a lot. Probably. Let's tweak that. What have I changed since last time? Literally nothing. I closed OBS, I reopened it. You have seen me tinker with everything I've tinkered with. paradox_625 When I used to stream I used to run 5000 for gta rp and I have a 3080 it can't be changed unless offline though
Stream. Where was that bitrate? What's the terminal? What are the normal bitrate for? It's kind of like we are literally streaming a bin terminal. 5,000 and I have a 3080. All right, so let's just cut that in half and see what happens. I would bet I have to stop and restart streaming because the stream health hasn't changed its bitrate. I'm going to drop for two seconds here.

Recording



07So I'm reconnecting, and the stream graph is refreshing, and we'll see if the stream health wants to say, hey, you're wasting less bandwidth on video now. And my little stream preview looks pretty reasonable. paradox_625 Your not on wifi I assume right?
My viewer count is still zero, so I guess everybody got booted. That's great.

...36I am not on Wi-Fi. I do at least have an Ethernet cable running over to the router. But I am just on a consumer home internet connection, and while I pay for the extra bandwidth, occasionally it just doesn't like the weather, and it's been raining today. When I say it doesn't like the weather, I mean that in a literal sense. I think maybe there's a loose connection somewhere. pushcx I'm not.
paradox_625 whats speedtest show for you with stream running
Why does this still stay offline?

Recording



19And the bitrate is half of what it was. And it says excellent. paradox_625 I mean if there is thunderstorms that can cause it just simple EMF but I don't think to this extent or just audio
Excellent is nicer than unstable, right?

...38pushcx Is the video live? The twitch dashboard says different things.
jameslittle230 not live for me
Oh. There we go. dpk0 yes, it’s live
Now the dashboard is caught up to, say, how many viewers there are. Okay. dpk0 (you might need to reload the page)
So we're curious about speed test stuff. paradox_625 It went offline and then just came back after you restarted
dpk0 still choppy sound D:
Okay, I'm going to do this off-screen because I don't know if it prints my IP, and we don't need to play that game. Ah, it does print my IP. Look at me, having just a little bit of a sense of self-preservation. Still choppy sound and FML.

01:18The speed test is running, and it looks totally fine. I'm getting a standard download number and upload number. I'm not pulling it up on the stream here because it's printing my IP, but the graph is also very steady as opposed to peaking up and down. Yeah, that's totally healthy. The one thing I'm paranoid about is, is it actually using the right mic? Because it is the one in front of me and if I No, that's... paradox_625 is the frequency of your mic/audio output the same as audio settings in OBS?
dpk0 sound is okay now …
paradox_625 wait
So I have a webcam over here that I use for Zoom, but it is not picking up that one, and it's not picking up the one that's built into the monitor, because both of those are muted at the OS level. jangomandalorian Now is consistently ok
paradox_625 it sounds good now
dpk0 oh, maybe not
What is the frequency of my mic slash audio output the same as audio settings in OBS? I have no idea how to check that paradox. Now it's consistently okay. Okay, so... But maybe not. I'm not actually changing anything here, just different things are appearing for y'all. jangomandalorian buuu, it started to be choppy, seems like on and off
bitterbael @dpk0 spoke too soon haha
And I get no feedback whatsoever. paradox_625 yeah it was good for a solid few seconds
I still have the monitor running in my ear, and it's been fine throughout.

03:09Man, computers, how do they work?

...16paradox_625 rock go brrrrr
You know, I do actually know American Sign Language, so if I wanted to stream with the webcam on, I could just do it in a language that nobody speaks. It'd be hard to type at the same time, though.

...34Crap, this guy out again. So there's... To what Herodotus was asking, there's nothing here about frequency in the settings? I have a sync offset because it typically takes 18 milliseconds to render a frame, and I wanted to bring them into sync. I have never changed this on a stream when people have said it's choppy or not, so I'm going to leave that sleeping dog alone for a second.

04:07paradox_625 no it would be in overall settings either under output or audio
paradox_625 iirc
This has a sample rate. I can't change it, presumably because it's live right now, but it should match. It says 48kHz here. paradox_625 ok yeah that is the setting
I don't know if there's anywhere else I've seen an audio frequency rate. And audio encoding is cheap, and I have a big CPU, so I would be shocked if there was an audio encoding issue. I do have the OBS dashboard in the corner of my eye, and the CPU usage has not gone above 2% regardless of what I've done or said, so that part seems fine.

...57paradox_625 that should be fine though. It isn't like a weird frequency.
If there's anything else you can suggest chatting, I'm happy to look. I've got the... Let's bring this guy. Can I make this floating? Yep, that's full screen. Let's bring this up here. So I have the audio settings here. It just says this guy is the microphone. with no latency, and there is nothing like audio frequency settings available. So I think everything is fine on the Windows side. Not Windows side, the Linux side. paradox_625 linux or mac
paradox_625 oh nvm just heard linux
I've been running a Linux desktop for 25 years, but somebody said Windows, and I'm hearing myself in delay for three seconds, and I've got that like flop sweat going on because I'm on stage and dying. So pardon me if I say a bit of nonsense.

06:04Turn that off. Turn that off too, because it's just making me crazy.

...17jameslittle230 it was fine for a bit when you opened that window with the different settings
So yeah, I'm running an Arch Linux desktop and I have had the usual amount of Linux audio hassles, but the core settings for microphone and other stuff have worked fine. paradox_625 pacmd list-sinks that should list sample rates from pulse audio if pulse audio is your audio manager which is usually the default
Stream health has stayed fine, the FPS has stayed fine, I even set the FPS to 30 because if I'm just showing code, I really don't need 60 FPS.

...56All right, I'm going to go take a look at it. Yeah. Oh, if I actually run this, it's going to type my tool password on stream, and I don't want to have to mute. So I don't have this PACMD. What did I have for... I have a script for this.

07:35paradox_625 yeah don't do password on stream lol
Yeah, it's P-A-C-T-L. So I say... So I do have syncs. If you were looking for P-A-C-T-L rather than P-A-C-M-D, there's this, and it says, hey, same thing. I don't know what this suspended is out here. paradox_625 yeah 48 same thing
But this all looks fine. paradox_625 I forgot pipewire is the new thing now
Yeah, so this first one here, this is the one that's in the HDMI or something. And then if I scroll way up, this is also all normal.

08:33nogweii hello!
nogweii gotta love audio problems, eh?
is so the mic is a source yeah and so in the sources here let's see everybody is happy for 800 hertz running so there's one thing yeah it's pipefire oh hi again nogwell and hi again

09:19binaryxvoid king lobster
So this is the source that's running. This is the name of the microphone. It is connected by USB. Everybody looks happy. Volume is 107% because bulk seemed to like a little bit of a boost. Honestly, the one thing that seemed to fix it last time was I turned the input volume up to 140%. That's where I was last stream and when this stream started because I put it on my little checklist of stuff to do before the stream. So if I set that we're hanging nogweii @pushcx reminder, that's two "i" (eye) not L :P
out at 113 now. Alright, there's base volume, which... Well, I don't understand why decibels are always in negative. paradox_625 did 140 have audio popping?
Oh, thank you, Nagwe. Yeah, I have a kind of small font on the chat so I can see more. Did 140 have one audio popping? Not that I heard. shindakun Seems to be a bit better now
Let me turn that up. More to 130. All right. nogweii things are better now?
jameslittle230 improvement!
So I just turned up the input volume to 130. And it seems. imkillmaster it does seem better
Shindakun says it seems better now. binaryxvoid yeah, way better
jangomandalorian Yep, sounds better
Is it really just the input audio? paradox_625 yeah
All right. dpk0 we’ve had a few seconds before where it’s seemed okay …
Let's go all the way back up to 141. nogweii uh wow
binaryxvoid bad again
imkillmaster stuttering again
dpk0 oh, chop again
nogweii bad bad bad
I really appreciate folks saying whether it's better or worse. jameslittle230 oh no
jangomandalorian bad again!
dpk0 entirely serious suggestion: have you tried turning it off and on again?
shindakun oh it's back
I got to get that whole thing going where. And now it's back again. dpk0 reboot your whole computer?
Maybe it's just... imkillmaster sounds like a buffer underrun on pulse
I tried turning it off and on again. No. Honest to God, maybe it just likes me having the thing open. Oh, rebooting never fixes stuff for me. Never, ever. It sounds like a buffer underrun on Pulse. .. I'm Killmaster. Do you have any way of diagnosing or debugging a buffer under end on Pulse? paradox_625 I got to go lost track of time drs appointment good luck with the issue hopefully I catch you later
Because I'm using Pipewire, although there's still the Pulse audio streaming are set up in the way that old audio systems on Linux never die. They just get wrapped at a higher level. I could cry. dpk0 it is actually better than it was before, but still chopping occasionally
dpk0 but much more occasionally
imkillmaster lemme check
And the audio mixer only wants to bounce when it's recently focused. Sure. Sure, sure, sure. imkillmaster I've had a similar issue with an usb at2020
Yeah. So grab this guy. nogweii @dpk0 I haven't heard any choppiness
This is off, off, off. I could try turning this off again. We'll see how it goes. You had similar issues with an USB AT2020. That's the... I've seen that model and go by I don't know what that mic looks like. But I remember considering it. Yeah, it's a little stream health graph is solid green. It's just like a straight line with only the tiniest of wiggles in it. So I don't think it's a network thing. I don't think it's CPU because it's not going above 2%. dpk0 okay, yeah, now we hear background white noise (AC/room fan?) but it’s not chopping …
The mic is a reasonable different distance from my face. imkillmaster wait, does the sound get fixed when you raise the gain?
nogweii yeah video is fine
Yeah, you're hearing the AC. I'm going to turn that filter back on.

13:04nogweii @imkillmaster except if the gain goes too high
Does the sound get fixed when I raise the gain? jameslittle230 @imkillmaster it seems like that is what happened, yes
If you are talking about... Let me just pull that on screen.

...18dpk0 i think it’s good enough now
Yeah. So here is the... imkillmaster at 140% it fixes?
imkillmaster is it the noise gate on OBS?
shindakun Everything seems to be fine right now
imkillmaster it cuts off when the sound is low?
gain that i cranked up to 140 if that's what you're referring to if you think it's good enough now by god i would love to actually talk about code instead of struggling through audio i could spend some time offline messing with it and just recording myself 10 second snippets but if it's not is it the noise gate on obs the noise gate is not on imkillmaster oh
imkillmaster true
If you look at it, it's grayed out here. It's literally just off. I mean, I can delete it, but it's off. So I have nothing to say. jameslittle230 yeah pushcx if you want to move on to the fun part, it seems like all is good right now
I turned the compressor off, turned everything off, and it doesn't show in the monitor, which is especially awful for debugging this when I can't hear it. nogweii oh nooo
nogweii wtf
dpk0 oh ffs
All right. binaryxvoid oh noooo
If we are good for now, I'm going to jump in. Yeah, I see everybody screaming, so I'm going to assume it went bad again. dpk0 it works when you have the settings open?
I can't actually type fast enough and think about stuff to just put the words on the screen.

14:50nogweii lol
dpk0 maybe?
jameslittle230 i swear it’s good when that audio settings window is open
It works when I have the settings open. jameslittle230 and bad when it’s closed
That is sort of hilariously awful. Computers, how do they work? So I have the audio settings, and I will keep it right there. And it's bad when it's closed. And I have the input thing, so I will keep that open nearby here.

15:17jameslittle230 no the white window, not the obs window
dpk0 now it’s fine
If y'all are just gaslighting me and like, in a chat room somewhere, Haslan. vaporisometrico New here, love that glitchy voice
No, the white window, not the open. nogweii yeah it's here
binaryxvoid awe okay guys he figured it out, let's stop messin with him
nogweii er, it's fine
Okay, so the white window with the volume settings is open and over off screen. So y'all can't see it, but it's here. Love that glitchy voice. imkillmaster about the buffer underrun, the fix I used is the one on point 4.1 in the PulseAudio/Troubleshooting page in the arch wiki
jameslittle230 and it’s fine now that the white window is open offscreen…
Yeah, I'm totally playing with the... You know, if it's dumb, but it works, it's not dumb. binaryxvoid I'm dumb and I work
So I don't mind having the little volume settings window open. imkillmaster https://wiki.archlinux.org/titl…
imkillmaster 4.1 about halfway through the page
buffer under run kill master can you throw a link to that in the chat and i'll throw it open in the thing so i actually this is this is super fitting watch this i am gonna thank you let me leave that in the background for myself oh i was actually gonna set a come here it's gonna make a scratch file for myself so last time i said investigate so i didn't forget this stuff or you know lose what's left of my mind trying to keep track of this stuff so we'll leave that open over there Yes, I am using Vim as basically a terminal multiplexer with the tabs. So you can follow along which one I'm in at the top. The scratch is the scratch file, here's code. Number one is the Git log and will eventually be the Rails server. But for now I wanted to look at the diff. So I had set the streams topic to say a healthy amount of bugs, because the thing I have done online recently is gripe a bunch about bugs in, binaryxvoid this is the kind of content i subscribe for
dpk0 ‘exclusive bug content’
twitch and only one of them actually bugs me so i'll show you a different one that i haven't even griped about online so this is like exclusive bug content is over here in the dashboard they have this achievements page because they want to gamify streaming and get me to stream more and i got to reload it so you can see this hilarious animation down here it shows like this confetti thing of hey you reached 200 followers And then up here, oh, it changed on me. It said like 198 before I started the stream, so I kept this tab around. And that kind of like things being out of sync on the same screen, it drives me up the wall that single page apps do that all the time. I think what's happening there is that the main achievement window is on a multi-hour or a one day delay because it wants to see your stream average, which obviously it can't know until the stream finishes and some processing happens. But then there are other bugs like I can't turn on 2FA. And I went through the process this morning just before the stream of reporting it to tier one support, which was Boy, it told me a lot about how Twitch must be absolutely inundated with people who don't read the docs. Because it made me go through a bunch of steps to say, like, what category is your thing in? And here's the help article for that thing that you just asked for help on. And you have to scroll past a 10,000 word help article with lots of screenshots telling you to change your settings. So, oh, there's a thing. Speaking of changing settings. add open so i have a whole screaming checklist i'm going to add that one of sure if having the monitor open helps things have the monitor open i can deal with that level of you just have to wave a dead chicken over it and i think it's actually fine there is like a normal healthy amount of bugs that you have in a program like I mean, if you look at lobsters,

19:39We have, what is this, 44 open bugs right now. And that's actually fine. I don't love it, but it's fine because most of them are fairly small bugs. And so if the core Twitch streaming platform works, but minor stuff is broken, that's OK. And logging into Twitch was broken. if you have privacy settings turned on. Okay, I understand why Amazon, a company that makes tons of money off ads, doesn't really incentivize engineers to fix privacy bugs. Yeah, you can like do the math on that one yourself. So I don't want to say like, oh, Twitch is bad. I actually think Twitch is an incredible technical accomplishment. I am mildly annoyed at the bugs. And when you have a support system that has to protect itself from you know literally millions of confused people who don't read the docs and can't set up basic stuff and will just grab anyone for help because they don't know where to get help i understand that it's very hard to give feedback on this kind of stuff so hopefully being more approachable last stream i talked through making a change to how story scores worked, where we talked about three different approaches of, I could change this value of the vote, I could change the SQL here, or I could redefine the entire database structure for flags. And I went with the second one, which is what you're seeing on screen here, because The first one seemed janky, and the third one seemed like a lot of code to refactor for something I didn't have enormous confidence in. And boy, was that the right call, because this code didn't work out. And it didn't work out not for a technical reason, it didn't work out for a social reason, where when you look at the newest stories on lobsters, let's bring that up. You see a range of scores and like the median score is one. Cause that's what stories have right when they're submitted, their submitter is automatically uploading them. So their score is one. Ooh, there is this one guy. I'll talk about him in a second. jangomandalorian Unrelated question but where does lobsters runs? Is it hosted on any cloud provider?
We can gossip a little, but none of these stories have zeros or negative scores. None of them are punished looking. Where does lobsters run? It is hosted on DigitalOcean. pushcx https://lobste.rs/about
So if you go to lobsters slash about and you drop down to the end, the trivia section, let's grab that link over here for you. There is a little bit about our hosting setup. jangomandalorian Ye good ol’ DO
dr3ig lobsters is in the ocean, d'oh!
And it is actually super rare on the newest page to see stories that are flagged to the point that they're at a negative score, which is how scoring used to work. Lobsters are in the ocean. Yes, that is exactly how that works. And then before anybody asks, at the bottom of that trivia page, you can see that lobsters is just a cute domain hack. Oh, and then you can see my slightly snarky, where'd that about page go? Thanks, Firefox.

23:15pushcx lobste.rs/about#michaelbolton
dpk0 hahaha, nice easter egg
so if you're curious about the lobster's name it is under michael bolton oh man that is the second stream in the row that office space has been referenced so with the change where story hiding did a minus one instead of flagging doing a minus one many stories on slash newest would show a score of zero or even negative one which was very surprising and felt like a gut punch. Like it just literally felt bad to look at. Because usually when I look at that, I see something where it's like, check out our hot new startup. And it's like, all right, there's a story I'm about to delete by a guy I have to send a message and tell him he's messing up. bitterbael 🦞
And what actually happened was No, actually, people use hiding in a whole bunch of different ways. And there are people who read slash newest quite religiously or their feed readers have them reading slash newest quite religiously. And when they see a story they're not interested in, they immediately come to slash newest or they immediately click into the story and they click hide. And we don't see the hide link here because I'm not logged in. so the net effect of this was lots of stories on slash newest had a score of zero or negative and it just looked bad and it looked like like a really strong social rejection of what somebody had submitted and lobsters is funny that way because it's a code base for hosting a social space and you know there was that book Daniel Katz- Larry Lessig wrote what 25 years ago, where he argued that code is law, but in a really weird way code is the rules of reality, like it is the physics of this social space and so tweaking them to say. Daniel Katz- To give like very quick feedback of hey you submitted something and then it went to like hey people don't like you like that's the equivalent of you're standing at a party and. you try and say a funny story or share like an interesting anecdote and then like everyone turns around and walks away from you like that sucked that felt awful so i reverted that and apologized to people this morning yesterday afternoon yesterday and i want to look at the code here because like the code is fine the sql query is totally fine it just had a social bug the physics of sociability that it implemented sucked. So that's a really weird thing. Social systems are super hard to have a positive intuition or a confident intuition about. So like I wrote up a comment maybe two, three weeks ago about what I was going to change and it got dlamz hey pushcx! I've been really wishing I could have a lobsters version of the "what HN says" web extension so I can go from article -> lobster threads. is there any API or something I can use?
i want to say 30 upvotes so like pretty unanimous positive response and like one or two small not sure it's going to work but nobody had guessed what was about to happen so this was a really unpleasant surprise of yeah oh gosh you know i have the wrong diff up let's let's get the right default i actually have the the fix up. So this is the fix I made yesterday. And this is the one. Oh, I just opened 20 tabs. So I have a shortcut here to open a git commit as different tabs. And I forgot that this one touched like 20 files. So let's take a second to figure out which I'm looking at let's just close that for now that's the new one that's the spec that's also new it's also new this was the update to the replying comments view oh did that need a fix too no that's fine schema every file

27:38I got to touch that code.

...48So here is the change from last stream, and let's make this bigger. Hi, Delums. You've been wishing you could have a lobsters version of the what HN says web extension. I have no idea what the what HN says extension does. There is a endpoint called check URL dupe. nogweii @dlamz you're looking for an API to find a comment page for a given URL?
And I believe that if you hit this, it'll go ahead and but honestly, we would probably have to add an endpoint that says given a URL. dlamz @nogweii yeah
There are a couple of Ambitious there, it is possible for a URL to be submitted multiple times, so if you want to just one we would have to give you the latest we also do some normalization but yeah that's the kind of thing we could do. let's go ahead and say. This is the code, I wanted to write on stream but.

29:07That also would be fairly easy to hack out on screen. nogweii @pushcx can I take a crack on the new endpoint? I've been looking for an excuse to hack on the lobsters codebase :)
So the change last time said, let's just find all the hidings where the hider didn't flag in the story and didn't comment in the story. So that is the code that didn't work out. And yeah. Can you take a crack at the new endpoint? Yeah, absolutely, Nagwe. If you want to take a crack at the new endpoint, nogweii OH GOD
You just install OBS and you click the start streaming button and then I click raid and then we go all watch over your shoulder. jangomandalorian LOL
No, seriously, I would take a pull request for that. And if you compare against how, what is it? So you're going to land in stories controller. I want to give you some implementation notes. Oh, this tab. in some weird diff modes let's make a new tab Stories controller like this check URL dupe almost does exactly what you want so take a look at that and then the other thing you want to look at is where did that code end up I got moved around recently extras utils ah yeah here we go in utils there's this method called normalize that you're going to want to call on the input string that says like hey let's normalize the url because then you can look up the story by the normal the normalized url which oh there's even a convenient method for it Which at this point, I ever factored this stuff that this could be a scope. So Nagwe, if you want to make this into a scope too, if you're feeling ambitious. childz hi hello
And so there's that general concept because you can resubmit stories after a couple of months. And if you want to just return them in like most recent order in JSON, hi, childs. We are coding. I am putting Nagwe to work. So Childs, you will be assigned a PR and a bug fix in about 10 minutes when we figure out what your interest is. nogweii Nice, thanks for the help
And then, yeah, that sounds like a nice little endpoint. So Nagwe, I appreciate you putting your hand up. childz ohhh boy
And I am going to put it on my list for post-stream stuff. Let's post-stream. file github issue for so i will file a github issue for that endpoint that deloms wants and the reason i'm jumping on this and so positive is we've had this kind of request a couple of times and it just seems a little funny to me that we don't have it the thing i end up doing personally And again, like if you suggest a feature request for something that personally annoys me, it's going to get accepted pretty fast, but very often I end up wondering if lobsters has had a story before. I use the bookmarklet for submitting stories and the fastest way to find out if a story has been submitted before is to load the URL, click the bookmarklet as if I was about to submit it and then see if it's there before. I can definitely see the benefit to. dlamz I'll just sit back here and take my commission :)
dlamz thanks all, heh
a bookmarklet or extension that just says like take me to the lobsters discussion all right so with that done yeah so this was the code change from last time and it didn't work out and i have explained kind of all of the like social stuff of why it didn't work out if that made sense great if it didn't i can talk about it some more Oh, your commission. Oh, yeah, it's totally meant to quit Vim. One of the things I've been doing on the stream is marking people as stream VIPs if they catch a bug that I just wrote before I see it. So we have three or four of those people now. And I don't think there's a benefit to, like, dlamz LOL
Yeah, I don't want to reward you came up with more work for me to do, so I'm not going to give you VIP status for a feature request, but I'm glad to have it. But I will absolutely, Nagwe, if you want, give you VIP for submitting a PR. nogweii except I'm already VIP haha
The other thing I have done is I have invited people who have PR'd stuff to the site. The whole point of the invite system is it blocks spam, and it kind of nudges people to care a bit about their accounts. Oh, you're already VIP. You must have caught something on the last stream. Sorry, I didn't remember. Oh, shit, you've got the little diamond next to your name. I should have known that. binaryxvoid cant believe he didnt know that
See, this is me not knowing how Twitch works. All right. jameslittle230 what about “you came up with work for _other_ people to do”?
So where I wanted to go was, I can't believe he didn't know that. childz i've been a consumer of lobsters for a long time, never had an account.
There are lots of things I didn't know. binaryxvoid WOAH
came up with work for other people to do yeah actually yeah we'll call it the tom sawyer award if you can talk another chat participant into doing a feature request or doing a bug fix that's pretty great i will give you a dead rat and a string to swing it on which i make a lot of old people references and i feel like a 150 year old 175 year old reference to tom sawyer yeah jameslittle230 oh boy, new dead rat!
yeah all right so yeah so one of the things we learned i learned from talking to people about hey why are you hiding all these stories that someone submitted five minutes ago was that people use hide to express a bunch of different things for some of them it means And what I thought it meant for most people before Monday was, I think this conversation is going to be a trash fire and I don't want to participate. What it actually means for a lot of people is, boy, I'm just not interested in this. Or, and I thought that was kind of like in the neighborhood enough that it would help add dynamism to scores, but it turned out seeing negative numbers is just too unpleasant given the way the site has worked for the last dozen years. And so if hide has an even more anodyne use and that was fairly popular, and it just means I read this, there are a couple of users who hide a lot of stories because they have their favorite tags. And so if they like want to read everything about C++, they would come and read this story and then they would immediately click hide on it being like, oh, great. I read that story and I'm happy I read that story. There is actually. Let me fire up a terminal off screen so I don't flash too much stuff. All right. Let's go close that. All right. Yeah, cool. So here we are with a production login. Let's pull up the database. nogweii ohhhh you'll need to get used to "Chat" as a plural (2nd or 4th person depending on your perspective) LUL
So I am not going to include user IDs because we're not putting anybody on blast here, but we're going to say select count one from stories. What is it count one? Yeah. Count star from stories group by user ID order by count star desk limit 20. so oh yeah if chad is a second person plural or a fourth person plural i read a cute little blog post article saying that chad is the fourth person plural and i have i have some nibblings my niece who is like going to high school next week god that's weird i knew her when she was tiny was showing me her her various group chats because i asked her things like how does the socials work as a youth And yeah, the use of chat as a fourth person to talk to one's closest friends is just linguistically pretty great for me as an English nerd. So here in production, because this is a live MariaDB console, we say, how many hidden stories have the top users hidden? And there is one guy who has hidden 60,000 stories on lobsters.

38:25And we have had, call it 107,000 stories submitted. So he has basically hidden half of all stories on lobsters. So I sent him a message that was like, how are you using this feature? This is some unexpected behavior. Although it shouldn't have been unexpected because everything in social usage and everything in human behavior is a power law distribution. And the answer was, he really likes to read slash newest. And Lobsters now has a dozen, 13 years of archive, whatever it is. And when he finishes a story, he clicks hide. And when he loads the page and there aren't new stories, he's just slowly reading his way back through the archive. And so if we looked at like the date distribution of stories, he's just kind of marching back through somewhere in 2018 at this point. did not expect that behavior. nogweii huh! very interesting behavior, very cool
And that is totally a valid way to use the hide feature if you want. I also emailed him and was like, would you like a CSV of all the story URLs? And he was like, no, I just like going through it this way where I read, you know, I take breaks in the day. I'm kind of interpolating a little what he said because I didn't want to grill him because he's not doing anything wrong. But because I am the authority, if I start asking really pointed questions about why someone is doing something, It automatically sounds like, do you know why I pulled you over? Which is not how I want to be. jameslittle230 curious how you would expect the median user to hide new stories? I never use hide so this is very novel to me
So anyways, that's all totally fine. But that is the big social reason that that code change didn't work and had to be jameslittle230 *hide stories, sorry
childz i guess a 'mark as read' feature would be redundant with that sort of usage
how did i expect james asks how did i expect the median user to hide new stories and he never uses story hide i expected that the median was that people click hide when they think a story is either the story is so bad that nothing good is going to come out of it, or they think that the comment thread is so bad they just don't want to deal with it. Because not only is there this for browsing, if we go over to the comments, you see all of the newest comments here. So if you click hide on a story, a lot of people read slash comments to follow along, or they read slash active to follow along where people are continuing to leave stories. And if you're like, boy, do I not want to relitigate the borrow checker in Rust? I'm just going to click hide on this story. So that was what I thought was the median usage, was people just tapping out of a discussion. Just, nope, don't want to deal with that. So having kind of walked back the bug, and we can go to, yeah, here. I will put this link in the chat. pushcx https://lobste.rs/s/lyvlhn/shou…
I don't want to just read you my whole comment here because I wrote some more stuff about it. But I will put the link over here in Twitch chat in case you are curious about more of that fix or my more organized thoughts when I am not just talking off the top of my head as a live performance. Everything is better when I'm slowing down and writing. childz hmm, maybe a 'mark as read' could be nice to see a catalogue of things a user may have read.
And I thought, well, if people are using this hide to mark that they have read stuff, I've actually seen something nice. So I do read Hacker News, and I usually read it through this interface. So rather than read the front page of Hacker News where I would find myself checking it over and over and like browsing up and down to see if there are new comments. I read this interface. And since I haven't loaded it in the Twitch browser profile, again, you can't really see it. Let's turn on auto refresh and probably someone will submit a story in a minute, but this shows you all the stories that have made it to the front page. And it has a little line on it that says when. the last time you loaded the page was. nogweii I love "Hacker News Daily" for filtering a subset of H.N. links
And so I really like that I can look at this and see the newest stories without having to see all of the stuff change. And so I was like, well, if something is a good idea, let's just steal that good idea. Because if all these people have these this workflow where they hide stories to, you will have to, Nagwe, can you send me a link to Hacker News Daily? I don't know it and I am always happy to steal good ideas from any sources. No, nobody wants to submit things. I'll give that a minute and I'll come back. I'll show you the demo of what I'm gonna steal. But basically I wanted to say like, all right, if somebody is logged in, let's just go ahead and insert for them a little HR between the stories. from the last time they loaded slash newest. And this can just be a feature on newest. So with that in mind, let's make a migration.

43:48So we're going to make a migration. nogweii https://www.daemonology.net/hn-… - top 10 highest rated links from the past 24 hours, that has never been seen before (so zero repeats ever)
And close this, open up code tab. Oh, and I even fixed some of my Vim settings since the last thing. Oh, it's by the Tarsnap guy, Colin someone, Percival? They used Tarsnap for years. I have a lot of respect for that guy. He's an incredibly talented developer. I don't love his business sense, but he's a great developer. The thing I don't love about him is his business sense is that it is very programmery instead of businessy. arh68 dude won the putnam Kappa
That's for a later stream. Let's not go down that rabbit hole. Let's edit this migration. Yeah, won the Putnam. He is bright as hell. There is a hilarious comment. Oh, ARH, you were on the last stream. You caught a bug. Didn't I mark you as a VIP for that? You don't have a little diamond next to your name. arh68 it was a warmup bug SeriousSloth
I thought you did. ARH, are you the, I'm gonna trust your, it was a warmup bug. No, it was the one in the SQL query where I had the join syntax right, wasn't it? arh68 LUL ya joinless on
Where's the Twitch roles? Come here. Yeah, join list on. Okay, that was you. So I messed up. I thought I added you. So add new ARH 68. This is the worst interface. I have to go, like, find this other thing. And then we mark you as a view. Ah, I must not have clicked save. All right, there we go. All right. I redressed a wrong. Thank you for catching that bug. Come here. Migrate last thread. Why do I have an extra fuzzy finder open?

46:07Let's say this is a date time. Is this allowed to be null? Yes. I hate letting columns be null in the database. But at this point, it is semantically meaningful for users who have never loaded slash newest. It is also semantically meaningful for the existing many thousands of users for whom I would just have to make up a date, which that's fine. I would just make up now. But then I'm going to get bug reports where they're going to complain that when they load, they see the last right at the top instead of where they last actually load. So I don't want the bug report. Sorry, we're just going to handle null and I will eat it. Let's be explicit about it. I'm not happy. Fine. And default is also null. What even is data integrity? All right. So let's run that. Because otherwise

47:21Oh, look at that bug nobody caught. See, I'm keeping all the VIP to myself. There we go. And then... We're going to change this so that... Let's just go... We'll go right to the view. Yeah. Rails kind of wires all that up for us. nogweii I'm surprised ActiveSupport has yet to define `null` as an alias for nil LUL
So what I want to do is have this line so that people can see where they last read something, because if so many people are using hide for this kind of thing, it's not that I want to change their behavior on hide. It's just, hey, this would be a nice small feature for them. Let's make the site a little bit better, a little more comfortable to read. So we'll go over to views, stories. And then. Oh, we don't have a separate view, do we? all right so so this is a quirk of the site cool we're immediately into the weeds so the site does not super follow the rails crud resource urls and one of the ways it doesn't follow is A lot of the popular views like newest or newest by user or recent or top, this is all one controller instead of being individual resource kind of controllers, which is fine. I think this is actually an improvement for this specific use case. However, what happens is all of these share the same index or I'm sorry, the same template. So if I look at this, it's like, oh, well, oh, let's do something I fixed. I fixed my tag bar. So here is on the left. Here's a view of all of the methods in this class and such, just to kind of contextualize what we're seeing. See FIM is basically an IDE. And if I bop wrong along, looking for instances of the word index, we see wrong tab. Like it's here in newest by user it's here in recent. It's here and saved they all share the template, so this is going to get Brody kind of fast. Because if we look at us. Home index.

50:00what i'm basically doing is we have this loop where we say oh we're gonna oh we're not talking about heinous inline partial i had enough struggle busing on the stream especially with choppy audio not talking about heinous inline partial on the stream we're just not doing that there's this list detail view And we loop over all of the stories so here's the outside of the loop and then inside the partial inside the heinous in line loop we show things. And so what I want is to figure out if each. is to find the story that is just in front of the timestamp. So let's go look at the controller again for a second, because I have to make some logic for updating that timestamp. Controllers, oh, I can actually, it's been a couple of minutes. Let's go see. Now, somebody post something on Hacker News that gets to the homepage so I can demo better. Home controller. Go back to newest, close, close the tag bar. That's not helpful. So I'm going to say after the page is set up, let's say if there's a user now, see, we've got to do this after, after the rendering, if there's a user, which case do I want to make it an after act now? There's no reason to reach for the Rails go-to of hooks. It's funny, Nogwe, I know you said it a couple minutes ago about ActiveSupport has yet to define nulls and alias for nil. I actually set it up so that in the Rails console I can just say admin and it finds my user record because there are so many times that I have to log into the prod console to do things and I just don't want to have to find my own user record over and over. So I'm real big on those kinds of little aliases. So we have a user. Now we want to, what is it? There's even a Rails method for this, right? For touching a timestamp. Come here. Put you on the sideboard. And boom, look at that. So I use this doc browser called Zeal. It's quite nice. But there is like a touch. Is that what it's called? So let's see if we can find this in an active record. Yeah, here we go. We can just say saves the record with the updated attributes. No validation. That's fine. We can just do it live. If used with belongs to, we don't need that. Great. So let's move that back off stream. I spent a bunch of time since the last stream tweaking my awesome streaming layout to make it less likely that I flash stuff. Like you can see, I have been streaming for, what, an hour and seven minutes, and I haven't once managed to pull the Lobster's chat room onto the screen. I feel like this is a big success for me. So we will say user touch B. What did I just call the attribute?

53:54My working memory is shot by having to narrate and glance over at the chat and stuff, so we call it last read newest. And at this point. arh68 last_rest -> last_read..
dr3ig :last_rest_newest
I mean, we can just make this a one liner, right? What is it? I had a clever... Oh, congratulations on becoming a VIP, Greg. Greg? nogweii `/vip`
How do I... Can I do this in the chat? Boy, I don't want to have to load that darn... Guess I'm just going to have to keep that role page open and click through it because I don't see a faster way to mark somebody slash VIP. Oh, there we go. I was expecting a DR. There we go. Dreg, Dreg, congrats. dr3ig yay! VIP
Let's just swap that around. This could even just be... I don't... I don't love this in Ruby, but Rails is so committed to everything null all the time. Yeah, let's leave it like that. We'll leave it a little bit shorter. And Nagwe, thank you for pointing out that. Man, I have this sneaking suspicion you told me last stream and it didn't stick, but... Yeah, so if we automatically set that, that might be all we need. And now back over in the view. The way this works is it loops the stories. Come on, show me the demo. Nope, nobody is putting things on the homepage. You would think they would be busier on a weekday. I really should have loaded that before stream. arh68 there's definitely stuff on hn /newest, weird
I'm so used to it'll have a story or two in just a minute that I didn't think to prepare it. And so what we want to say is check the timestamp. Yeah, there's stuff on slash newest, but... that the thing I like about HCKR news is it only shows you stories that have managed to make it to the homepage. arh68 ah, semi-curated i see HahaThink
So it is not, you know, the overwhelming waterfall of stuff that gets submitted to slash newest on HN, which includes a lot of spam and stories that are just not that interesting. So we want to check and say, we have anything below no all right so we're gonna just save this we're gonna so my two choices for strategy are

57:37two strategies are one, I can edit home index to see if it's on the newest, showing slash newest and insert this line, or two, I can duplicate home index to home newest and only modify that one. And so like, exactly like last time that's why i'm i'm kind of putting this out in the notes like upside cleaner downside kind of a sin for a template to check what action it's on

58:38So like, this is the, this is just a trade-off of, do I want to duplicate the index? And then, you know, I say risk, but it is like a hundred percent certainty that I'm going to forget at some point that there is a difference between this list of stories and the other, or I can duplicate, or I can like commit this minor sin of having the action and The other thing is I try to minimize the number of conditionals that are in templates at all. And a conditional that kind of reaches up out of its scope and kind of fuzzes the software boundary is especially unpleasant.

59:37You know, the other thing I could do, so there's, like, this is the outside of the, oh, yeah, hey, you know, I said, boy, do I not want to do this. So here is an example of doing exactly that thing. And so are there any other examples already in here? Yeah. Oh, okay. No, it's just reference. so that the pagination works. The third thing I could do is, and I kind of lean towards this. So home index already has been below for inserting content, could break the everything above and everything below To own partials and then. Home index would render. Those in same order and home newest. Would. Duplicate above, but with one more line of code and then. Where did that bit about? Yeah. I would also create a home hidden to basically do whatever hidden is doing different, which I think is just adding a class.

01:01:18That's all right.

...28Yeah, everything in software is trade-offs. And so I was talking about, there is a healthy amount of bugs, there is a healthy amount of like, break the rules. Like last week, I was like, oh, well, there is a clean, we can refactor all of this stuff to models. Or I could just not do that. And not doing that turned out to be the right thing, especially in the face of uncertainty about the feature. So in this one, especially given that Especially given that we have already done that sin and already are damned for it. Like, why not repeat the bad behavior that worked out fine? arh68 third sin's the harm ? lol
Yeah. So let's see, do we want this above the story or below? So the timestamp is going to be the last time they loaded the page. And so if on the current iteration of the loop, The story is above or below? If the story's timestamp is newer, it gets the line below it, but we only want to print the line once.

01:02:51Oh, if I really wanted this in, I would move the touch here into the view. So let's say

01:03:13I'll style this a lot better in a minute and improve the UI. But what I really want to say is if the action is newest and let's make standard, I'd be happy. This story's created at, comes before, wait. third sins the harm this is only the second sin in this template i mean two is fine you know or maybe this is the wrong metaphor and we're gonna have anubis weighing my heart so i'm trying not to make a very basic like greater than or less than error so what does this want to be does it want to be If the story is before, I always have to think about it. With timestamps, it's not enough here that the story is before or after. I want to catch the transition from the story before or after. So I almost want to say, because I'm not going to use the Ruby flip flopperator, which is one of my favorite parts of Ruby, but kind of wild.

01:04:51So we'll say this. This. So we haven't printed the line yet, and this story was created. After, right, so we want to say, all right, there's no bug about it because I'm writing this out so I can think about it. Let's make this wider after.

01:05:29This makes sense, so if we're on the newest it's for it's a little better. And we haven't printed the line yet and the story that we're about to print was created. I don't think that's right, I think I wanted to say.

01:06:03I think I want it to say if the story was created. This is one of those dumb fiddly things in programming. If the story was created after. No, nobody wants to win and point out what I want this logic to be. All right. And you know, the other thing is I would like to print the last red line before the first story. So that's fine. Yeah, actually I think this is correct. All right. I never even started the rails server. dr3ig last_read_newest mght be nil >
Let's go ahead and do that. Oh, it's not up. Start the real server. Yeah, if last read newest is nil, it'll just say false, I believe. So if I said, story.last.created at, it's greater than nil. Oh no, it does give a, yep. All right, so.

01:07:34dr3ig can use .presence()
I was thinking of a SQL logic where if you compare anything with null, you get false. So you do have to check that they actually have the timestamp. Yeah, I could use presence, but this already is presence because I don't care about blank in the case of empty string or empty array. So this is more succinctly what I'm saying of just if it's a false value. So let's close that terminal out. dr3ig is @user is nil now
And then I'm going to log into the development server here. We're going to do this off screen because of the risk that I pasted my password on. In production, I have 2FA anyways. arh68 so you're gonna set that false to true right
yeah that also needs the see that's the thing with so they call it like the safe navigation operator i always want to call it the the nil propagation operator because if you use it you just end up having more and more nils and there is a syntax error in this somewhere that i am not immediately spotting but Can't actually load the page in dev. I'm going to set that false to true. Yeah. It's going to happen in here, like print the HR and then say, all right. So what is the.

01:09:27What is the syntax error that it's mad at me about? This all looks correct. Is it in this thing I just typed? So let's bring the angry syntax error on screen. We can all debug it together. So yes, it's something in this. When I reload, I get it again.

...57These syntax errors are not super useful, especially if You left a quote open because you just get the whole template.

01:10:10It's not particular about which side of the line the ampersands are on. I want to say this was a thing that I've seen a RuboCop for. Now I just don't get any source.

...32So this is my approach to syntax issues is I just like bang on it until I accidentally delete whatever the syntax error was.

...48No, it's not in the first half of the line.

...57It's not in the second half of the line, it's both.

01:11:04All right, so let's put it back the way I like it. And then if I just say if true. dr3ig my erb is rusty, but is that endif corect ?
All right. So it goes away if I remove the if. Am I failing at the basic syntax of an if? dpk0 yeah it should be end not endif in Ruby, no?
nogweii @pushcx endif is not a valid keyword
Is that end if correct? Oh, is it just... I've been writing Lua. Is it end verse end if? Yeah, it's end verse end if. And then what else are we mad about? You're also mad about where the ampersands appear.

...59I'm a professional. So I said I was hacking on my... streaming layout, and that loaded enough Lua in the brain that it knocked the Ruby out. Okay. Are you good? Nobody's submitting stuff. It's not making the homepage. I think what's actually happened is the Hacker News homepage is busy enough that it's into the meat of the day that it's not going to move around a lot. If I'd loaded it an hour earlier, I would have seen it. So we will just have one long thing. I can't stand that.

01:12:42All right. And then I already printed the newest line. Good. All right. So this tab was extra. This was the rails. This was my notes. dpk0 i used to know the exact right time of day to post on HN to maximize chance of appearing on the front page (basically, as you say, around the time the US wakes up)
All right. I am logged in here. And now we are going to say

01:13:17Let's load the Rails console and we're going to say. Store. We're going to do these in timestamp order at last. Limit 10 last. And we're going to say admin touch. What did I call it last read newest to. that timestamp. Can't write unknown attribute name. Oh, I thought touch took an argument. It does. I just have to say it's thinking that this is another column. I have to specify that this is the time I want to set to. Okay, there we go. We updated users. We set it to that. All right. So now if I look at this about 10 stories back, I should see a line. Nope. All right, let's play spot the bug. I am going to just insert some debugging here. And let's

01:14:51All right, so nil, nil, nil, nil, nil, nil. So this tells me the controller's not setting it correctly.

01:15:07So this has render. This has touch. Is there a touch bang? No? All right. So let's just test what that looks like. I said admin touch. Last read newest. We get a current timestamp. That back to where it was. So this syntax is right. And I know that I put it in the wrong place. No, it's in newest. Let's go ahead and just.

01:16:10Let's go back to. arh68 so if you want a story older than the timestamp, it's story < stamp ?
The rails output.

...22arh68 like is < > backwards i can't tell
You know, if this is nil, I must be... If this is nil when I manually set it... Yeah, it could be backwards. I never remember with timestamps. But this is not working. Like right here, attempting to read the user last read newest...

...54And I don't know if it's, it's not a value that's coming from the controller. Like I'm not passing it into the render. It's just directly reading it off of the user object. So like this lookup is wrong.

01:17:26Why isn't my log message printing? So lots of queries to load things. OK. We are going to take a moment while I undo the thing I just messed up. Let's go ahead.

01:18:01So there's. I just scrolled past something in the logs I shouldn't have. The session token, and I am not 100% certain that that's not the session token for. My prod login, so I just wanted to cycle that real quick and I'm going to double check that in my browser that's off screen. storage cookies so now that's that and yeah so this thing that might have been the same as the production value because like i said i'm using a restore so if somebody had made a cookie really really fast they might have been able to But it should be in the signed cookie thing so probably that was too cautious. that's Okay, I would rather be a little extra cautious, then you know have somebody borrow my session on prod.

01:19:15Alright. So I wonder if what's happening is that i'm not running the controller action, I think i'm running we're running. I am looking at home index, not home newest. Nobody caught it. All right. dpk0 is my sound broken, or your sound broken, or are you just not saying anything
So now do I see anything about 10 stories down? No, it's still nil. arh68 sounds fine
There we go. dpk0 okay, it’s my end. RELOAD PAGE
So now it's properly fixed. pushcx I guess the audio issues are catch
I've been talking. Oh, man.

01:20:07arh68 a lil quiet but fine
pushcx *catching
nogweii nah you're fine
bitterbael sounds fine
jameslittle230 all good here
A little quiet, but fine. dr3ig he's talking with pauses; but the pauses are dead silent
arh68 still haven't heard that background noise
Yeah, God, I... At this point, I'm a little gun-shy of touching anything anywhere in the audio panel, so we're going to just leave that alone. Still haven't heard those planes. Yeah, I have a little bit, but I guess there's just enough sound insulation. Alright. I've also... Well, I think I turned it off along the way, but I had a noise gate to avoid hearing that kind of stuff. But I would guess the noise suppression filter that's keeping out the air conditioner also keeps out the planes because they're that same kind of quiet rumble. Let's log out of that. So that's a little too much debugging right now. Yeah, so here's the line. And let's go back to the Rails console and set it back about 10 stories. And it doesn't appear at all. And of course, every page load, I'm going to have to change this, aren't I? Yeah, so let's get that terminal over here. So this part's fine, and I don't need that.

01:21:57Yeah.

01:22:08nogweii @pushcx very different question, so feel free to not answer immediately: How does one set up a dev env for lobsters on Arch? Are you using a pacman-installed mysql?
so we do have this set and if this is it no how does one set up a dev end for lobsters on arch am i using pacman installed my sql it's so it's maria db and you should be able to just install maria db it won't be the exact version that's in prod but i'm not using the brand new latest features of MariaDB in prod or in dev, I hope. And then otherwise, on Arch, I would strongly recommend using RBENV. Because if you have one Ruby project, you end up with multiple Ruby projects very soon. Or you end up with a branch where you have a different version of Ruby. So I use rbenv, and then rbenv comes with Ruby-install. We're covering a lot of packages. But I use that to install the Ruby for it. And then after that, it's just bundle install. So let's go ahead and... nogweii yeah, I already have deep ruby shell integration with rbenv, 'cause after 10 years of ruby I've learned better LUL
debug story created at user last read newest and make sure this is what I want

01:23:56This is the debug failing. It's failing in the render call. It doesn't see that this is happening here in the... Why would the last read newest be nil? Oh, because I just set it to nil. Wow. Does this not do what I expected? Yep. this needed to be created at. There we go, now I have a timestamp in there, okay. Wrong number of arguments, this is just debug being difficult. But I had loaded it so that reset my timestamp. All right, now we're getting somewhere.

01:24:59So we're getting false. Oh, let's this is not readable. All right, so. All of these have the same timestamp. They all have the same timestamp because this is test data that I manually inserted, and so all of them are going to have insert times that are half a second off from each other. Yeah. All right, so let's... This is a product of test data, so let's just go ahead and say...

01:25:51228, say 227. It's a reasonable time here. Looks like 59 will get us a dividing line between a couple of stories. Oh, you just you just did time zone math to me, didn't you? Because now that says 727 instead of.

01:26:19What's the right way to do this? The right way to do this is to grab this specific story.

...42And this specific story that I want to appear after is named 0E9JTP.

...59So it printed the line at the top. So let's go ahead and try that again. Just to see if it was that. Okay, no line at the top. I should have read. Which one is this? Is it U, U?

01:27:27What is the...

...43So it should be printing here and it's not.

...54And we see true, true, true, and then it changes to false. And so this, I didn't update the debugging as I updated that. So now I should see false, false, false, true.

01:28:17If I touch my admin, let's try that again.

...29All of these are true. And you print it at the top. nogweii hooray I've got a passing test suite locally\
8-15, you have the wrong date.

...50There we go.

...58So why is it not changing to true? arh68 tehy're equal ?
Right here where we got 28, 27.

01:29:14That's true, they're equal. Is it? And then all of these have 21, 27, 59, because this is all test data. I don't love doing this.

...35If this keeps going, I'm going to rerun the test data, but with a sleep one call between creating stories just to beautiful. Now it's in the right spot. Now it's in the right spot. Okay. So we'll go ahead and do that. Let's reset this so I can see it again.

01:30:03See, isn't that nice? And so it kind of gives you a visual line of the last time. Does it look like? Still no stories there. I'll never be able to demo there. I should look at their cookie and... That's a little much. So let's style this.

...31And... Let's go.

...39Isn't there? Yeah. So I am looking for a good place to put it. And so I'm going to put it here where there are hidden stories. I will sort this out in a second. But if we have an HR with the last read, newest. Let's just see what that looks like.

01:31:14See, I like that. That's nice. And then you never remember their syntax. What is it? It's, is it four? Yeah. So I can say.

...44Oh, it put it inside the HR. That's hideous. Okay, so let's say...

01:32:00dev_edventure a hello from indonesian rubyist
I mean, it's sort of... Hi, Dev Adventure. Hello from Indonesia. We are currently breaking things. and styling them. dev_edventure just realize this design similar to news.ycombinator.com
I could just say order is.

...23I said 002 PX solid. jameslittle230 hr is just a regular block element with a top border by default!
Let's just reuse this. Oh, there's no way this is right. I think this is. Just a regular block element with a top border by default. Is it? Okay. All right. Let's see. Ooh, wrong thing in the clipboard.

01:33:13Let's just be super explicit and not get into the... Yeah, see, it's still drawing it with this whole thing around it. So that part is correct. And then it ignored semicolons.

...35Isn't that tasteful? I think that's tasteful. Let's shove over last read the correct amount. which is going to be the width of that score, which is what 30. Okay. And I don't think that's a variable. I think that's just based on the content. This layout is, super, super complicated. No, that's not what I want. I've got it open here. Let's go just look for the score. Yeah, you don't have an explicit width on you, and so that's a little scary, because if it doesn't have an explicit width on it, then it's, I can, like, guess, and I can say, 0, 0, or 1m.

01:34:46And that like shoves it almost to the right place and now we're like one pixel off because somebody in here has a tiny margin or a tiny padding I would love to at some day rebuild this story list detail with. A proper CSS grid because CSS grid is actually really the right tool for the job for this sort of thing but. that is not a today thing because i'm trying to keep this stream to you know under five hours like last time we're coming up towards two and i'm i'm generally hoping that these will be in the neighborhood of two to three i feel like that's manageable without like a taking over my life i'm not trying to become a professional twitch streamer slash e personality Oh, man, an old coworker said that I should read a book by this Twitch streamer. It's called... What is it? I have it on my phone. I've been reading it since the last stream. It's called Before We Go Live, and the guy is fairly famous. I've actually seen his Slay the Spire videos. That was how I got pretty good at the game. But aside from the fact the book would really have benefited from having a professional editor... Yeah, boy, everything about being a famous Twitch streamer sounds pretty awful. And so do a lot of the people involved. The book is a lot of gossip and score settling too. Not my big jam. So I didn't put a big margin on this, did I? If I grab the whole, oh yeah, here we go. So this actually has an explicit margin left of 32 that's how it's getting shoved over so like I said it's 30 plus a little. So I could just visually see it and then let's explain what's happening here that. We are matching.

01:37:03And so I can't, I don't want to break out a CSS variable. That's a little overkill, but I can do this. This is interesting. So it brought in also the left margin of that. I don't know if that's classy or irritating. I'm trying to decide, should it run all the way to the left side and I'll nudge it in with padding? Yeah. Let's compare visually.

...38and then set that to zero.

...45Oh, man, it's a taste thing. Oh, I wish I could create polls. Oh, there's a topic to talk about for Twitch. Apparently, to make a poll, you have to be an affiliate. And I talked about being an affiliate on stream last time. arh68 i liked the first way, narrower
And I also, like at the beginning of this stream, I showed that bug on the achievements page where I'm about to hit the requirements to be an affiliate. arh68 but i could get used to either
But then if you are an affiliate or a partner, you are forced to run full screen video ads. And there are some like options. You can choose whether there are pre-roll ads or they are scheduled to go so many minutes or hours. But it's just like a forcible thing. And that's awful. I'm kind of allergic to ads. And so I don't want to do that. So let's go, let's put it down here, and duplicate, set this, and then, oh, there we go. So if I put the value back here, and I comment that back out, now I have the alternate in this tab. All right. Now we can play optometrist. Do you like one or two? One or two? I mean, either way, there's enough vertical rhythm that it kind of breaks the flow of the page in a nice way. And then this one, I don't know, I kind of like this. So I have kind of mentally thought about the page as having its left thing here. And these things are sort of hanging into the margin on a printed page. I don't know why I always find that kind of tasteful, that sort of outdent. And I know how the page is implemented under the cover because I have spent so much time fighting margins and paddings and float in CSS. I kind of like it. I think it's this way. I think I'm going to go with two. I would run a poll, but I can't. This guy doesn't want to give me a new story. Or maybe it's the fact that settings. Yeah, no. All right. All right. So we'll go with this. And then if too many people show up to paint the bike shed, I can revert it. All right. So now. That's nice. And I want to tweak this. If it's just a, if HR is just a div, can I just do, I don't, I think HR is special and I'm not allowed to do this. Why don't I use my proper commenter? Wow. Not that comment. Not that one either, geez. imkillmaster I just rejoined the stream, but shouldn't the grey links be on the bottom? Under "Last Read"?
I don't remember when I made that shortcut. Let's just do it by hand. So between the last stream, I went through and unfixed or refixed all the stuff I broke trying NeoVim a couple weeks ago. Shouldn't the gray links be on the bottom under last read? No, they're gray because they're deleted. imkillmaster ah okay okay
The test data just happened to delete them all at the same time, or I deleted them at the same time previously, but The short version is this is janky data. Yeah, all right, so let's save that. Yeah, I don't like that. I can't actually put stuff there. We're just going to make this a div. We'll be unsemantic. And the reason I want to change that and put the word last right up here is... Oh, now I blew it up. Why did the border go away? Because I have the class, the element name. Yeah, we'll just go ahead and get rid of that. This, it is not the way I would write CSS, but most of this style sheet includes both an element and a class name. And I kind of have kept that pattern because I try not to do that. Yeah, so let's here, if it's going to confuse people, let's just say story dot, order ID desk limit 10.

01:42:58jameslittle230 ooh, maybe just a div from the perspective of css, but there are still rules on the html side?
nogweii forgetting the colon again LUL
What are you mad about? ID desk is not a... There we go.

01:43:11Oh, and I busted the cache. Yeah, Snogway, you keep catching my bugs. At some point, I'm going to have to make an incredibly subjective line for at what point in complexity a bug has to be. So all right, now I undeleted all these stories. So that's a little less confusing. And if I go ahead and set my last red line back a little ways.

...44So the reason I've been switching this over from an HR is I kind of want to break this out and say, Like if this is the latest story, print something different. Although now that I look at it here, I almost want to just get rid of the words because it's kind of obvious what the function of it is. This is one of those things where URI is super fiddly because I am making a feature for power users who are very, very familiar with the site and So first off, every change is annoying because nobody likes to have things they touch all the time change on them. dpk0 i would get rid of the line and put a red (unread) in the story info line, like how it is with comments
dpk0 then you can put that on the front page as well
But once you get past that, things can be kind of unobvious because people know what they mean and they learn them over time and you can assume expertise. We don't have the tyranny of the marginal user. Put red, unread in the story info line like how it is with comments. dpk0 (although :visited CSS already does that really)
Then you can put that on the front page as well. No, because I do eventually want to come back and insert the number of unread comments. We had a feature request for that, and yeah, Visited does that already. And I think I just want it to be this one page, because this is the one place that stories are presented in strict temporal order. Without a filter, I should say. So do I want the words at all?

01:45:30That's pretty obvious what's going on there. The first time, you might wonder, what does it mean? But then you reload, and it's very obvious. I'm not sure it's obvious enough. nogweii I think not showing it if it's at the top is better
What if? arh68 maybe it could say "since yyyy-mm-dd"
I guess part of it is I wonder about the height of it. Yeah, if I don't show at the top, drrobotics if someone clicks the 5th story, the marker then appears after the 5th story?
Well, it's going to have to be a longer timestamp R because it's going to have to have minutes and seconds because as we learned very painfully, that matters here. And this wants to be just less than, not less than or equal. But I don't want to change that with testing. So what I was wondering is like, you know. If. Is above stories and I'll implement that in some way. Like blah blah. Do we say? Something else like all caught up. It's a little jaunty. The other thing is. Oh, you know what might be classy? What if I took this? Whoops, I left in an end. What if I took this and I changed this back to zero?

01:47:19This back to 32px of padding. in which case I can just say padding left. And then. drrobotics oh when you revisit the site the marker appears i guess
Isn't there a way I can bring the border up?

...42So what I'm wondering is if I could have like the dash here, the word last read and then the rest of the text up and if I put a negative margin on the border,

01:48:01I'm not sure if I can do that. No. Why did that open? I don't need the sidebar. No, I just lost the words entirely by doing that. Oh, because I didn't save both files. Yeah. Yeah, that's too clever. Let's not have an interrupted thing. Also, visually nothing on the site looks like that. So let's just keep that simple. Yeah, let's do the simplest thing. Simplest is usually best. All right. Good. Go ahead and close out of that. Let's look at the diff. All right, so we have this. It is nullable, which is no fun, but can't change that. nogweii oh, what should it do when you haven't read any of newest?
nogweii it shows at the bottom of the page right now?
get some more working space here so in this i added the one css class what should it do when you haven't read any of newest well the first time when you haven't read any of newest you just literally won't see a line it won't show at the bottom of the page because you newest is paginated theoretically if you were to your very first page load jumped to the very last page of newest, you would see, no, you wouldn't see it below anything actually, because it's on the individual story. nogweii ah, good
So no, it just doesn't show period, which I'm fine with. Yeah. And I had considered like, what if I set it so that for new users, everybody just defaulted to now, but then I'm going to get a whole bunch of bug reports. So I don't want to deal with that. So that's fine. is there a way to clean this up is this the nicest this can be of let me set a temporary variable and then and then it's not set and then if we have the value and if it's less than you know i think actually rails has a thing for this something in active support where if i say if Story dot last created at can I say before? No, there isn't a I swear there was a. Blue. Oh, it's before question mark. there we go so because i'm using the the nil propagation operator i can say if there is a last read newest and it is wait do i want before or after the alligator eats the bigger one let's just Let's just load it and look. Because at this point, I've seen the behavior enough time. I don't need that parentheses.

01:51:46Standard, why are you showing me a syntax error? I do need that parentheses. I do. OK. All right, so that, that's wrong.

01:52:10There we go. All right, so that's a little shorter. Now it's at least only, you know, a triple barreled conditional instead of a double barreled. That's less bad. And then we have this, which I can fix the spacing on. And then already printed is true. dr3ig you still need & before .after?
I don't think this can really get simpler unless somebody sees a nicer way. shurizzle Hi everybody
Like, this is just the painful reality of munching a bunch of state. You still need ampersand before dot after? No. shurizzle Have you thought about bringing lobsters on the gemini protocol?
So this is saying if there is a user, get their last writ. Oh, it can be a nil. Yep, you're right. Have I thought about bringing lobsters on the Gemini protocol? no i've never considered it i know a little bit about the gemini protocol because we've had a bunch of stories but it just didn't seem worth the time investment for me at least my general my general approach to should lobsters syndicate to this open platform is yes so dpk0 didn’t we have a Gopher version for a while :D
We have a Mastodon bot that reposts stories. We have the mailing list mode that posts stories and comments. We have the RSS feeds. We have some amount of JSON. Did we have a gopher version for a while? nogweii not officially, I think
I don't think so. arh68 http3 ? Kappa
No, I don't think so, period. nogweii there was the bbs version as an april fools
So if adding a Gemini version was not an invasive amount of code i would probably be fine with it because i am happy to have the site be more accessible in more places that are not like hey let's couple to a walled garden but it's not a thing i am going to code off the top of my head because i mean i scrolled through the bug tracker earlier on the stream there are plenty of things to actually fix and gemini is not super attractive. I don't get the feeling that it has a lot of popularity. And it's not just a numbers thing, because Lobsters is not about numbers go up. It's not getting us more access to more people in the way that Mastodon or Blue Sky do, where those messages kind of propagate. You know, it is easy to retweet and see things in new places. So like Gemini is not super attractive to me, but if you want to code it, drop by the IRC room and talk with me and I'll help you talk through adding it in a stable way. shurizzle Cool
If it's not going to add a giant maintenance burden, I like it. Hey, look, there we go. arh68 their HR is weird ......
It finally, this is the demo I wanted to have. Like we cloned this whole thing before we even saw it. But I like this feature. Now I'm poking it in the inspector, because I want to see how they did it. So they made a div, and then the div has a before. What's going on with the before? And then it has a span, and then another span. And they kind of do the hat trick of shoving stuff down. Yeah. It's visually interesting that it runs all the way to the left margin. I don't know if that's okay. Not all the way to the left margin. I'm just kind of in a funny zoom level. All right.

01:55:56Yeah. So we closed that one out. I think that's attractive. All right. Let's go back to get here. Do we want to add this? This looks good. This looks good. This looks good. Yes. Add DB schema changed. Yes, good, add. All right, last read, newest, add. All right, so everything is staged. And now that all the work is done, let's do some test-driven development. nogweii Opened a PR to make getting started easier, for later :)
dpk0 @Nogweii oh yeah, does that still exist?
So if we look at the specs, we do have some stuff for newest. Yeah, their HR isn't weird. It's actually a div with a couple of spans in it. The BBS does not still exist. And as far as I know, JCS has never shared the code for it. I still have a local branch with the code for the April Fool's gag I ran where I turned the site into a PHPBB forum. nogweii @pushcx DO IT
That's hanging around, so I could inflict that on people again with pretty easy notice if I wanted, but that's not a thing I'm actually going to turn on again. So we don't actually have any specs whatsoever that load slash newest.

01:57:32Yeah, so this is one of those things where the site has fairly thin testing on high level features and I've been adding stuff in like. I added a test for does the home page render because we didn't have one of those and I made a typo and blew up the home page, which was kind of embarrassing. Loads stories most recent. Most recent first. And. It updates the users.

01:58:14Yeah. So let's go ahead and say, let's make a user. Oh, does it have to be a, it has to be a feature spec. This is, I never remember this.

...41nogweii @pushcx phpbb's very first release was Dec 16th 2000. Set up lobsters to use the phpbb theme every year on it's birthday? :P
yeah it has to be a feature spec all right so let's before i go too far down this road there's no boilerplate i really like to do this kind of grab and clone. So let's throw away all these. Let's keep one to compare against. Okay, so we'll say feature slash newest.

01:59:26And let me say, say visit slash newest. And then expect. Let's give this a. I think I have to add that to the factory, right? Because that's now a new attribute. Yeah. So we will say last read newest and we'll just default that to one hour ago. Oh. Make the lobsters use the phpb theme every year it's on on its birthday, we do have a couple of date oriented things there are two novelty logos there's a Christmas tree and then in the summer there's a pride flag. Man turning on phpb mode once a year. it's funny I actually. dpk0 i would love it if phpBB mode were a theme i could just activate for myself
Because I pulled in the whole default phpb template that included the login and the registration page so just for funsies I turned on open registration so for the length of that April Fool's gag anyone could go to the registration page, and I want to say. call it 10 or 20 people did sign up and a couple of them were spam bots and i would not have guessed that there were so many phpbb sites left in the world that spam bots would still know and recognize the phpbb login structure it may have just been like a general form stuffing kind of code but hilariously we got some spam out of that i mean hilarious to me but

02:01:32nogweii that is funny! I'm surprised too.
Ooh, so time stuff, do I want to, in this test freeze the time so I can say time dot now, because otherwise we, we get in the hell where like, if this happens in the last millisecond of a second, and then this happens in the next millisecond of a next second, the timestamp is going to change. is there a. rail all right now our spec rails test timestamp approximate yeah you have the oh we have b within yeah i was wondering if i can use that on timestamps see this is the thing i don't want to do because it's just so wordy oh look he's even writing one second of time dot now yeah that's that is plenty of precision for this spec Great. Thank you, Dorian. So that looks good. And then I don't actually need to have created a bunch of stories. Whoa.

02:03:01Yeah, so for this one, I'm going to say,

...24two hours ago okay except i don't need the let bang because i'm here in a spec so we will say new old and then we will visit slash newest let's create see i want to see both so i guess i want three Story one, story two, three story. Oh, they'll never be. So ID is kind of a proxy order because it's also like an auto increment int. And so I don't want to get them out in the order I put them in the database.

02:04:24And I am trying to express that it's... This actually might blow up because it's not... This is an impossible situation where the newer one will have a lower ID than the older one. So let's do this in the order... Let's leave myself a comment about that.

02:05:05was auto incrementing not in the spell checker and it's kind of a you know infinitesimally small performance win and you got to pick up those nanoseconds here and there even if it makes maintenance painful forever So we'll visit slash newest, and then we expect, how do I say? So I want to say that we expect it to have content, but I don't actually know how on Rails to indicate ordinality. You get a ban. Goodbye, spammer. I appreciate that there are folks on Twitch who come by every single stream to explain or to exemplify why Lobster has that invite mechanism. And it's missing that kind of stuff that's so valuable to us.

02:06:42It is like page.body, right? If I say puts page body, I'll get the whole thing dumped out. Ooh, let's see if I fix the testing plugin. Yes, I fixed the testing plugin. Good.

02:07:02So I should just have a bunch of output, right? Slow startup. All right, so yes, that's the whole pod page body. And I, did I just blow in my whole tab? Cool. I blew away the whole tab, doing it live each respect newest. All right. So we expect that.

...46This is something I don't do often. Is it just string.index? No, I don't want a character. I care about a substring.

02:08:01OK, it'll take. Expect body.index older story. to be oh we did this last time was it be greater than the body index of the newer story why am i reloading that let's run the spec again cool So to fix that warning, let's put that in the scratch now.

02:09:10So if you saw that go by, it was when I run the spec. appears in this kind of like temporary buffer and when it's done i have a my own shortcut to just close all temporary buffers and it closed the wrong one cool so that needs some debugging but the test passes yeah great let's just run the whole set test suite

...49At least this time, I won't get any warnings out of Brakeman because I didn't do anything that looked like SQL injection. Ooh, got a failure. That might be the other new spec I wrote because I I didn't run that one. Undefined method email for stub login as. For instance, I must have said colon user instead of user. Yep. I only need to run that one spec again. But I didn't run standard and everything, so let's see where that gets us. arh68 dots dots green dots
So now we have a spec that newest loads, which is nice, because that's kind of a thing that's been missing. Not that I individually broke newest, but now that there's a bunch of newest specific logic. Dots, dots, dots, dots, dots, dots, dots, dots, dots. And no warnings. Good. All right. So let's take that. And then what was mine? Yes, I know. Fine. Let's break this spec because I'm always suspicious of any spec I haven't seen go red.

02:11:19So we should see just the second one go red. It expected a time zone to be within jameslittle230 apologies if missed this and for a slightly off topic q - what is the deploy process for lobsters like?
one of the other time zone why aren't these markedly diff oh it's days ago i'm not i was comparing the days instead of the hours all right so good now i've seen that what is the deploy process for lobsters like buddy you will see it in a minute we are going to deploy just as soon as I break this other spec and see it fail. So break it. I would have to show the stories in opposite order. I'm not sure I can do that. Yes. Why are you giving me these warnings?

02:12:16Let's run that again.

...22jameslittle230 ooh exciting! for whatever reason I assumed it would only happen off stream for op sec purposes
Oh, it turned the scope into an array, so I can't do that here.

...33Well, for OPSEC purposes, that would be pretty responsible, given that I already leaked what might have been my prod login cookie on stream. But I've been thinking about it more. arh68 surely it was a honeypot token SeriousSloth
The value of the random token that is inside the session cookie, it was, and the session cookie is called lobster trap. You would have had to have that whole thing and rails encrypts it. So actually I didn't leak anything important. That was not a value you could do anything with. But I should, oh, yeah, let's add session token to Rails log filtering. That one, we can do that on stream. That one's really easy because I just touched that code a couple weeks ago, so it's fresh. So I was going to go to the home index, and then I was going to say here at the last level, let's reverse it. Yeah. Come on, Vim. I tweaked using Vim as a terminal multiplexer is kind of new for me. And that it's only something I've had for a month instead of something I've had for 20 years, like most of my shortcuts. And so that's why they're not quite as fluent. Good. Good. All right. So I have seen both specs fail. on purpose even oh it's the it's warning me because of this heinous inline partial thing which i already said i'm not describing on stream if you already want to if you want to get into it you can see it in the code base and the commit message is pretty detailed i just don't want to rabbit hole for like 20 minutes talking about it so let's add the newest spec let's Yeah. So there's that. That's everything. Great. Yeah. Let's commit. so bam, bam. Why are you being awful? Why can I not modify my commit message? We're being, oh, I know why. Cause I let's go put that on the list.

02:15:03That one I'll handle off stream. So opening terminals in Vim, I had it automatically set the no modifiable flag so that I can close them easier because when a buffer isn't modifiable, Vim is a little happier to close it with some of my shortcuts. So slash newest, show a line for when the user last read. stories no less right great all right there's a nice commit now that header or that filter that was over in

02:16:04I mean, some of that was here, but this is the, so we have two kinds of, yeah, okay, it's pulling from application config filter parameters. Yeah, here we go. There we go. I wonder why I didn't sort that. I don't know. Yeah, I don't know why. I grabbed some list somewhere, and it included SSN. I cannot imagine lobsters asking anyone for their American social security number. That's kind of horrific to contemplate. We'll see. If COSA passes, though, that's a thing we would have to ask.

...58Save some hassle.

02:17:11Okay, so I've got two commits unpushed. And this one, make sure I didn't slip any debugging or anything in at the last minute. No, that looks good. I like that. Good. Close this. So James, for your question, lobsters is deployed with ansible which is very much one of those tools that is the least bad option it was set up by a previous contributor and it works and i am loath to break things that work but i don't love it and

02:18:12It doesn't work the way I think it should work, and it has performance issues. And when I say performance issue, each one of these tasks comes with a one-second overhead, and it floors me. I cannot imagine what it's doing, because if this was just a shell script that ran these as SH8, I've been talking long enough, I can't talk. If this was the suitably small shell script that you can imagine, it would run in 10 seconds instead of, I don't know, even this very small run where I forgot to, helps if I actually, oh, I did push it. nogweii each task is a zipped up python script that uses a fresh SSH connection
I must have done it so fast I didn't even see it. Sorry, this is my attention getting frazzled by presenting at the same time. Yeah, Nagwe says, each task is a zipped up Python script that uses a fresh SSH connection. There is a setting for not tearing down and setting up the SSH connection each time. But then it still fires up a Python interpreter for each, which is, I understand why they do it for isolation. It is not how I would have chosen to isolate things. nogweii kubernetes? LUL
I suspect the real awesome correct system for deployment would look very much like Nix, but its documentation has been so painful to me that I've bounced off every time I've tried to use it. so we don't use nix in prod kubernetes so that last red line is rolling out now if you are a logged in user hitting refresh it is worth mentioning that we do a phased restart of puma when we can so there are 20 prod 20 puma workers in production and we do a phased restart where one restarts it takes some amount of seconds like six to 20 seconds to come up and then once each worker has finished coming up and starts serving things puma restarts the next one so this phased restart means we never go that's not the way to say that every deployment doesn't include a like bounce the whole puma process and serve 502s for a minute But it does mean that the deploy is still going on, even though this shell script is done. jameslittle230 “we never go down” -Peter, 2024
And if you are loading up the site, you will see it in, you know, you will see it with 100% in about three minutes, but you will see it only about 50% now. never go down yeah i stopped myself in the middle of that sentence no i think actually i think the motto of my coding is if something is worth doing it's worth doing badly and yeah let me aside from you know me demonstrating that very clearly with the audio issues at the beginning of this and the previous stream there's a lot of stuff that it's okay to half-ass. And so like Twitch mostly works and has, you know, what, tens of thousands, hundreds of thousands, millions of active viewers at the same time. Like they've built an incredible technical infrastructure for all of this streaming. And yeah, the admin panel has bugs and I find one of those every couple of days. those bugs don't really matter besides raising my blood pressure a little like the core function of twitch works and works really well and that's kind of my coding philosophy and so that's why on lobsters like yeah there are bugs some of that is a little bit of like bait to get new users to contribute to the site but a lot of that is just like well it's okay to have some small things broken when The site functionally works. The core things are, can you load the homepage? Can you leave comments? Can you talk to people? Or to say it at a higher level, can you learn things? Can you share things? nogweii twitch chat is literally IRC
Can you be part of a community? If you can, it's okay that this number of unread messages is occasionally a little out of sync. I'm fine with that. Twitch chat is literally not IRC. And you know it's not because you've seen me ban people during this and their messages in the scroll back disappeared. IRC can't do that. nogweii it is IRC! they send a magic command
Also, if you log in, I think you get some scroll back when you first connect to a stream. And again, IRC can't do that. nogweii they have extended IRC
In the year of our Lord, 2024. They send a magic command? Alright, I am very suspicious that it is IRC under the covers, but I will say it is plausible that they have extended it in ways that make it feel less like 1989. Yeah. So, let's go back to the notes. Where are we at? We finished this.

02:23:58Yeah, so we get to have the very satisfying thing, crossing things off of the to-do list. And then this stuff I will do off stream. nogweii https://gist.github.com/hunterb… - "How to connect to Twitch with an IRC client"
I think that's a pretty good place. We're pretty much at the time I want it to be, around two hours and 40 minutes. So unless anybody has any last questions about how the site works or anything, I think I'll go ahead and wind down there. But that's the basic gist of it. nogweii @pushcx question: Is "Don't editorialize titles" an actual site rule?
jameslittle230 thank you for sharing your day with us!! very grateful
coding on lobsters and trying to make sure that it is a functioning physics for a society rather than every last bug. Cool. Well, thank you all for joining me again. It's been a lot of fun. Is don't editorial wise titles an actual site rule? Yes. If you go to submit and you look at the story submission guidelines, these are open by default. And it says don't sensationalize for new users who haven't submitted stories before this is open by default and then after you've submitted a couple of stories it's collapsed by default and I have submitted a couple of stories. yeah well thanks James nice hanging out with you all and now that I have that checklist item hopefully we will not start every stream with the next stream on Monday with everybody screaming at me for 10 minutes about the audio being terrible the next scheduled stream is going to be as usual Monday at 2 p.m Central Time so whatever that works out to in your time zone and

02:25:49Really? Really, Firefox? Did I want that? Is that at all close to what I typed?

02:26:02Oh, wow. Ouroboros. If you look at the schedule on Twitch, it will try to show it to you in your time zone. But I am still working on keeping this up to date. We are definitely on for next Monday. And I will see you all in a few days. arh68 take it easy y'all
imkillmaster ty for the stream
If you spot bugs, please report them to me. Take care.