When I say 'your' bug -- I'm the one who breaks things
Streamed
- Starting to think about story merging.
- How technical writing is like product design.
- Why journalists canโt spell.
scratch
Lobsters Office Hours - https://push.cx/stream
topics:
* re-blocking a scammy browser, investigating another
https://github.com/lobsters/lobsters/issues/761
https://github.com/lobsters/lobsters-ansible/issues/45
https://push.cx/google-ad-injection
* how technical writing is like product design
* PR Review
technical writing for board games: https://drive.google.com/file/d/1nkHWqYre866xihxN3MnHr5YFzY4gQWDT/view
educational marketing for products: https://bookshop.org/p/books/badass-making-users-awesome-kathy-sierra/8129899?ean=9781491919019
refactoring db structure as mentioned in https://github.com/lobsters/lobsters/issues/1298
dr3ig suggests: rename stories to submissions
gtfrvz suggests: name new top-level thing to epics
Peter idea: name new top-level thing headline
journalism misspellings: hed, lede - TKTK "to come" for placeholder text
title:
When I say โyour bugโ, *Iโm* the one who breaks things
Engagement!
post-stream:
add to google post https://apps.apple.com/us/app/google/id284815942
respond to last mod hat comment - misstated no activity on others' comments; was just not above average
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
03:15Happy Monday, folks. I'm Peter, and this is the Lobster's Office Hours streams, where we talk about anything related to the site, the codebase, the community. Lobster's the lunchbox, Lobster's the flamethrower. Definitely not Lobster's the weird self-help guy's fan club. and got a couple of topics lined up for today. Over the weekend, had a bunch of activity in the Lobster's chat room about. Oh, gosh, where should I start, actually? So there's there's two browsers at play here. There's. Let's do the easy one first, I guess. With a longer one first.
04:25Oh, and before I get into this, so on these streams, if you have any questions about the site or the code base, you can feel free to pop them in the chat room and I will respond.
It may take a second if we're in the middle of a different topic, but everything is welcome.
And let's see what else is going on here.
When I don't have site stuff that folks want to talk about, I tend to either ramble about something that's happened in the last couple of days since the last stream or work on code.
Last Thursday's stream was on Thanksgiving, so it was pretty short.
I just reviewed a couple of pull requests.
Those have all been updated, it looked like, this morning and then dealt with some browser nonsense and
Let's go ahead and jump into that.
Yeah, when I say browser nonsense, years ago, oh man, just over five years ago, there was this web browser that has a bunch of cryptocurrency plugins.
Where's the link to...
pushcx https://github.com/lobsters/lob… https://github.com/lobsters/lob…
So this whole thing is kind of spread across two issues.
One on Ansible, which is what configures our NGINX setup
and one on just the main site code base itself.
So it can be a little confusing.
But a couple of years ago, five years ago, there was this browser with a bunch of cryptocurrency features.
And one of the features was that it would pop up messages saying,
dpk0 evening
with somebody's name and picture saying, wouldn't you like to donate to my site?
What Brave didn't say is that these people had never heard of the browser and had no idea Brave was trying to take money in their name.
And then Brave, they popped up here in the comments.
I'm somewhere down here in the comments.
Oh, six years ago?
God, time flies when you're having fun.
They...
chamlis_ hiya
In the comments, they said, oh, well, we held those funds in escrow.
But that was a lie.
They just kept the funds themselves.
And when I say kept, I mean they were holding the funds themselves and calling it escrow.
Hey, Shamless.
Hey, DPK.
I am reiterating old drama here.
The point of escrow is it's a third party.
That's what escrow means.
And they used escrow to mean we are keeping the funds ourselves.
That's how they used it down here in the comments.
Where is that?
In escrow.
07:35yeah i work at brave tips to unverified publishers sit in escrow for the creator to claim they never identified anyone who kept the escrow for them so when they say in escrow they meant we are holding the funds that is not like that's the exact opposite of what escrow means escrow means there is a trusted third party and not a really kind of sleazy company that makes it look like someone is fundraising And then, Oh, it's even quoted right here. basically if somebody there's a lot here, cause it's all wrapped in cryptocurrency, but the short version of it was if somebody doesn't raise a hundred dollars in cryptocurrency, something about this 90 days thing. I don't know if that's like every 90 days or a rolling thing. And God, I really don't want to like dig back too deep into this nonsense from six years ago. But the short version of this was, we may allocate a certain amount of BAT contributed by Brave contributors towards our reasonable expenses incurred in facilitating publisher contributions. And it seems that what this meant in effect was if somebody didn't get a hundred bucks in cryptocurrencies donation, Brave would just keep it. And even until then, Brave didn't even tell them that they were using their name and photo for taking donations for you. I'm betting all these links are dead now. It's been six years.
09:29So that was pretty unpleasant. Yeah, all this is gone now. Web has a pretty short memory sometimes. So that's the pull requests. So I, where are we here? Years and years ago, added this line that says, hey, if the browser says it's brave, we don't need to deal with whatever this pretend fundraising thing is. Oh, there was the other bit of the they would send like one or two emails to a random address that they found for these publishers that they were taking donations supposedly on behalf of it was not a. Just did not seem like a serious effort.
10:21and I would have to dig into the history, but somewhere here right in the last couple of days.
Around the time of this issue I blocked brave because this was so so scammy and so misleading to me and I was.
Especially off put by the way that they claimed that there was an escrow and there wasn't.
And this isn't just me like accounting nerd nitpicking the whole point of escrow is to avoid the kind of misaligned incentives and.
misappropriation of funds that this whole thing feels like it yeah and so i said inventing a financial partner made their bid bad faith unambiguous to me that really was the thing that kind of tipped me over and then unfortunately it's funny because this is too like we are very open source and they are mostly open source i think
But then they created a whitelist that was...
So when you request a web page, your browser sends a user agent header that says, hi, I'm whatever browser.
And they decided that they shouldn't send... Yeah, here it is.
So this is a Brave employee saying, oh, Lobster's explicitly blocking Brave in the user agent field, confirmed with the site owner.
dpk0 fuck, thatโs Mark โDive Into Markโ Pilgrim
And so their reaction to this of someone blocking them for trying to fundraise using other people's names and likenesses and then keeping the money is that they decided they would start spoofing their user agent header to us.
dpk0 heโs still doing web stuff?
So they stopped admitting that they were brave and started claiming to be direct Chrome.
That's marked.
Oh, wow.
That is it?
That kind of breaks my heart.
I liked a bunch of his books.
jmiven hello!
The fact that this GitHub account hasn't been active for, what, a year and change?
I don't know.
Maybe he's not there.
God, I've read, like, all of this guy's books.
Yeah, dpk, that's a little bit of a gut punch.
I didn't make that connection, I don't think.
Hey, jmevin.
jmiven wow, I didn't realize it was him
So it's really frustrating to get targeted by a cryptocurrency project like this.
And it's really hard because the Lobster's code base is open source so that you can verify we're not doing anything weird and awful.
Like we do plenty of things buggy.
That's the theme of this stream, but there aren't secret bans.
Moderators can't push stories up and down the homepage.
There's just a lot of nonsense we don't do that people assume that we can do that you can verify yourself literally is not a feature on the site.
And sometime this weekend, a couple of people came by the Lobster's chat room and were like, hey, the site doesn't work in Brave.
And that was weird because as far as I know,
I actually have no way of knowing if they've decided to change their policy about spoofing their user agent.
And it was a little weird and ambiguous because...
So I deleted a comment in here.
A nice person came by and said, hey, here's maybe a way to block Brave and identify them that should work.
And I deleted it because if they're reading our issue tracker to figure out how we're blocking them, it is hard to continue blocking them.
They literally saw the commit where we blocked their user agent, so then they started not sending us a user agent.
So if I had left this comment, they would just...
It's also frustrating.
I hate that this cryptocurrency scam stuff sucks up so much time and energy.
And I kind of translated this idea over to nginx-config on maybe Saturday morning, Friday afternoon, somewhere in there, just so I could run nginx-t, which is the test my config, make sure there isn't any change, or make sure there isn't any syntax error.
And there was...
I kind of prepared it, basically, but I didn't deploy it.
I didn't restart nginx, and I didn't tell nginx to reload its config.
And having looked at the journalctl logs, I did not accidentally reload the nginx config.
And looking at my bash history, I only ran nginx-t.
But for some reason on Saturday,
Saturday, Sunday, like two, three people dropped by the Lobster's chat room and were like, hey, the site doesn't work in Brave.
So that's weird.
Like either somehow that accidentally went live and Nginx is weirdly aggressive about finding changes to its config file and hot loading them and not logging it.
I don't, that doesn't feel possible.
or maybe they stopped spoofing their user agent literally on Saturday.
It's an awful coincidence.
ghost_user_1984 Nginx is a bit of a mess when it comes to reloads.
Like the timing is so implausible that I don't know what to say there.
ghost_user_1984 :wave:
But as far as I can tell, oh, hey, ghost user, it's been a minute.
Yeah, I don't know if it did reload and this new config attempt worked or they stopped spoofing user agent
So I don't have a great answer there, and I spent... See, before the stream, I spent something like an hour and 15 on this, and half of it was trying to figure out for sure that nginx had not reloaded its conf.
And then the rest of it was like, okay, let's port this stuff into the Ansible config in a way that they're not going to trivially work around.
And...
I just don't believe the coincidence.
So somehow nginx reloaded and I don't see it in its log.
But the commit here, I kind of hate this.
So here's what we used to have.
We just ask if the user agent contains brave and we return 400.
this is you know so they stopped sending us our user agent so they stopped working so it's just been hanging out here as basically dead code for whatever five plus years and then i moved it into a snippet that is get ignored and i don't like this it compromises on our transparency goals oh i've pushed this commit is weird i either
I need to do a push or a push force.
This obviously is not valid nginx syntax.
I was thinking of JavaScript, and so I wrote it this way, but whatever.
The commit will either be replaced with a force push correct commit or another bug fix commit.
I hope the difference is small enough you can read around it.
But I hate that because they're looking in at our issue tracker,
I have to do this kind of, yes, we have mysterious secret rule for blocking abuse.
I don't know.
I don't see a great way to square this circle of wanting to be upfront, especially about anything related to blocks or bans because they are so big and painful.
And at the same time,
being targeted by a well-funded place with a bunch of experienced developers on full-time pay.
I don't know.
I'm kind of exasperated by the whole thing, not just that I have to spend time on it, but there's not a lot of options without putting just heroic amounts of dead developer time into trying to detect their browser in some novel way.
And they can almost certainly just, you know, even if they can't deliberately read it out of our source because we compromised there, they can afford somebody's full-time salary to figure it out.
So I don't know.
The whole thing sucks.
yay cryptocurrency if anybody has any great ideas for how to square this circle i'm all ears because i don't love this having to put part of the config in gitignore like that's
20:34So anyways, if you think of other ways to lock the Brave browser, I'm happy to have two or three things in snippets instead of just one.
dpk0 while weโre on unsquarable circles, if you could also do something about the dude who auto-reposts everything from Lobsters to HN thatโd be great too
And that's about the state of that whole hassle.
While we're on unsquareable circles, we could also do something about the dude.
dpk0 (i post to Lobsters because i want *intelligent* commentary)
Oh, Oscar Dorati?
chamlis_ maybe lobsters isn't important enough to them to bother keeping up with blocking more complicated than UA filtering
Yeah.
21:06dpk0 todsacerdoti
So let's see, he's... Toad Sardarati, yeah.
ghost_user_1984 chamlis, we've seen that not to be the case.
I knew the name, I just couldn't... Yeah.
I don't know them.
I think it's Todd Sacerdote, maybe, because it's his actual name.
And...
...35ghost_user_1984 While we aren't that big, we get enough traffic from folks who are that its painful for them.
Yeah, Shameless, I was genuinely surprised that Brave considered us worth paying attention to.
And this is all five, six years ago.
The site was noticeably smaller and got less traffic then.
chamlis_ oh they've bypassed something other than spoofing UA?
So I don't know.
Maybe it was just a developer on their team liked to read lobsters and then was annoyed that their browser broke.
Shamless, I'll tell you in a day or two.
So I deployed the new thing, whatever the timestamp on this is, an hour or two ago, two hours ago.
So if Brave loads lobsters tomorrow, then yes, they did some more custom work to work around our block again.
And I'm aware, so I didn't go into it, but I did link the
The issue here 45. there's a longer comment with like.
Four other things that have happened that all leave me feeling really bad about brave.
They had so if you did a search for like I think it was coin base or one of the.
Like cryptocurrency trading sites.
they would inject their own affiliate code into the links so that they got credit for your signup, which, and yeah, none of this stuff was announced beforehand.
chamlis_ this is a great advert for me to install brave so I can try and figure out what the new approach is hehe
Like they didn't put out a press release that was like, hey, wouldn't it be great if we injected our affiliate code into links so that we got credit for signing up people who happened to be using Brave Browser?
Aside from the fact that's probably a violation of the terms and conditions for the affiliate program.
Like, that's not my problem to enforce.
Anyway.
Ah, Shamless.
Look, Shamless, if you're gonna do that and break things... That is not where I would ask you to spend time.
ghost_user_1984 Fix pagination!
Like, please help fix bugs.
chamlis_ yeah fair
this is all kind of like interesting and exciting but like i would rather see your name here on the pull request licks fixing pagination sure that one could be good i still have a couple of tabs open for that one
please, please spend your time doing something productive.
Like I'm talking about this because this is the kind of thing I have to spend time on running the site that really doesn't show up on the site.
Like you could read the site for years and never know this happened.
And for whatever reason, we had Brave browser users who were reading the site and have no idea this happened.
And then over the weekend, we're surprised that the block started working again.
So I'm trying to highlight that.
And I guess also I am venting a little that I have to spend time on this.
But if you want to contribute to the site, please just pick anything else.
And if you want to do feature work, I have lists of feature ideas that I'll throw at you.
chamlis_ I remember a while back you asked for rails books for people who know another web framework. was there a winner there?
I try and put stuff in the issue tracker every so often.
chamlis_ I'm coming from Laravel
But I'm still dialing my feel for what people will get interested enough to volunteer for.
25:11Oh, a while back I asked for Rails books for people who know another framework.
Was there a winner there?
There was not, unfortunately.
I liked Michael Hartle's Rails tutorial, but it's now an online course that costs $40 a month.
ghost_user_1984 IMO the guides are still good.
And I didn't want to pay $40 a month to find out if it was still good, because I haven't looked at it in years.
pushcx https://guides.rubyonrails.org/
The Ruby on Rails guides are pretty good.
They do reasonably assume that you are a developer, so they're not like, hey, this is a variable.
But at the same time, they're more oriented around how the Rails code base is structured than the thing you want to do.
So if I was going to explain Rails to someone, I would probably start with,
basic install guide and then okay well let's talk about routes because that's kind of the outside in and then from the routes let's go talk about the controller for a second let's go down to talk about the models let's work our way back up and talk about the views hey it all works you saw something on the screen now let's talk about tests and the guides are more in the order of well we're a MVC framework so here's all the details on models here's all the details on views
Here's all the details on controllers.
So, like, it's fine.
They're pretty correct and comprehensive, almost to a fault.
But...
I don't know.
I'm sure there's... PragPrag has got one, right?
I don't know if it's... Yeah, here we go.
pushcx https://pragprog.com/titles/rai…
It's on the homepage.
I've read other stuff by Sam Ruby.
The name is not a bit.
jmiven yep I'm reading it at the moment
His name is just literally Sam Ruby.
I don't remember what I've read by him, but I just immediately have a positive connotation.
So I've liked something by him.
27:25Yeah, just skimming this, this is probably a slightly better guided introduction to Rails.
I haven't read a version of this book in
Gosh, 15 years?
But this would probably be my guess.
Oh, Jay Miven, you're reading this right now?
jmiven I like it :)
How do you like it?
...59You like it?
All right.
Not too specific?
Yeah, Rails now has quite a lot of batteries included.
And so, I mean, even just this sentence of new features is like right there, that's 100 pages of book, you know?
So, we'll see.
So the weirdest thing
So Brave has repeatedly injected ads into pages.
There was this donation thing.
There was the affiliate links.
There was another thing I talked about where they have a built-in ad blocker, but then the new tab pages have ads on them and stuff.
It's linked in the Ansible comment.
But they keep doing this where they inject ads.
And I was really surprised on, what was it, the 24th?
So what is that, Monday?
Tuesday?
pushcx https://push.cx/google-ad-injec…
That Google, on one of their browsers, has started injecting ads into the web.
This one is so weird.
So this is a screenshot from their own announcement post.
This is Google's screenshot.
So there's this listicle, and I found the...
have a link down here somewhere yeah in parentheses where this link that says osaka castle here and here in the photo caption they have injected this link that's not originally on the page so if i bring this up here this is just the most generic honestly this site kind of feels like seo spam
But this is the screenshot.
And so I don't see the injected ads because I'm using Firefox and not the Google app for iOS.
And even its name, it might be called Google search or it might be called Google app.
I don't have it and I don't have a personal Google account to test with.
So
ghost_user_1984 Its Google for iOS
And so if you click on the injected ad, it gets this special treatment.
You don't Google for iOS.
Okay.
So I guess I should take the capital A off of that.
Maybe throw quotes around it.
ghost_user_1984 https://apps.apple.com/us/app/g…
It's so hard to talk about these things sometimes.
30:48That's funny. I actually went to Osaka Castle a little more than a year ago. Did a big trip. Thank you guest user, I will let me throw that into my notes for later.
31:08To add it to the Google post.
So they get this special treatment where they open a card from the bottom of the page and.
They promote other Google properties like Google Maps.
ghost_user_1984 No, they are.
I don't know if Google is involved in this ticket thing.
I would guess not.
But part of the reason this really caught my attention was having watched lobsters boil the frog over, I don't know, a decade or so.
...51pushcx https://www.google.com/about/ho…
So there's this link, like notice this is google.com.
There's this press release they wrote that said, we sell advertising, not search results.
Why can't advertisers buy a better position in our search results?
The answer is simple.
We believe you should be able to trust what you find using Google.
From the beginning, our approach to search has been to provide the most relevant answers and results to our user.
Google search results take into account who links to blah, blah, blah.
And while we believe relevant ads can be as useful as actual search results, we don't want anyone to be confused about which is which.
Every ad on Google is clearly marked and set apart from the actual search results.
While advertisers can pay more to be displayed higher in the advertising area, no one can buy better placement in the search results themselves.
So this is kind of a weird press release because we now live in the world where you can buy the search results on google.com.
So what's happening there is it's a very old press release that they still have online.
And when they did it, Google ads looked, can I get a bigger version?
Google ads looked very different.
They had a colored background.
would say sponsored or sponsored link or sponsored links plural and they only appeared in the right column off to the right of the google search results and then pretty quickly thereafter they moved to be in colored boxes above the search results and then the colors got paler and paler over the years and you can kind of you can kind of imagine the series of a b tests of what color converts better
And even if you ask that in total naivety and with an open heart, the results are going to keep leading you towards if the ads become indistinguishable from the results, they get clicked on more.
And so as you scroll down this timeline, then they lose the results and they have a border.
And then they have less bold and the bold goes away and everything goes away.
And you know, you get down to, here's 2019.
At this point, I don't think they even have a drop shadow around him.
I think they have the word ad has moved down here underneath.
So you don't even see it above.
And when you watch the average user,
And i'm thinking here of all the debugging i've done for family, but when you watch people use Google, they no longer recognize that these are ads above the search results they think they are the search results.
And so there is like a narrow legalistic way in which clearly marked and set apart.
is true, and I am sure a lawyer could say it with a straight face in a courtroom.
But in a practical sense, you absolutely can buy Google search results because people can't tell them apart.
And I can't guess what happened internally here, but I would bet this is 15 years of trying to make quarterly numbers.
This is 15 years of, well, how do we make this product better?
Let's do a test.
And every test just kind of slowly nudges you towards a fairly bad place.
This is really unfortunate.
And so I see Google start out with, OK, so this link, it's hard to see in the screenshot.
It's a little small.
Oh, come here.
It's a dotted underline, which is uncommon.
Not unique on the web, but uncommon.
And it has this pale background on it.
It's gonna go away.
The underline is gonna disappear, or it's gonna become a solid underline.
The background is gonna disappear because every A-B test they do on these ads is going to push them to, they do better, they get more engagement.
People click on them more often.
less conspicuous they are the more they blend into the site and they are starting from a place that is farther down than this one because they don't even say the word ad next to them they have no you know we know from the context of this post that the background color and the dotted underline means that google injected this ad
But if you just found this in the wild, you would have no idea why this link has a slightly different styling or why the behavior is slightly different.
And the average user, the median user, if I sat down a focus group or a bunch of focus groups, as I am sure Google is likely to have done, would they recognize that it's different from the other links?
Probably not.
I really, I don't believe the median user would even pick up on the difference.
And I've had some people respond to me.
So this, my blog post got posted on Hacker News, which is a good place for it.
And I posted it on Blue Sky and Mastodon and people took a look at it.
We've been trying to reproduce it.
And I got some weird push get back because people are like, these aren't ads.
This is just, you know,
the world's largest advertising company adding links to keywords directed at their own sites.
I don't know how that's not advertising.
I can't give the definition for an ad and say that it's not advertising.
That makes no sense.
And this screenshot
is fairly non-commercial like it's light monetization of you're getting directed towards the google maps app you're getting directed towards google reviews probably google photos as well but this is definitely a house ad and there is
absolutely nothing that prevents them from taking bids on these they're an ad company it's what they do it's how google makes what 90 of its money i haven't looked at their last 10k but google cloud and the google app suite are not exactly killing it compared to ads
39:05So over the weekend I got a couple of negative reports from people who couldn't reproduce this specific ad but.
conveniently just maybe an hour or two before the stream over on mastodon somebody confirmed to me that they could see this, so this whatever, however, Google is rolling it out, probably, they are doing a test where.
you know, a 10th of a percent of all users get the ads enabled, or maybe 1%.
Because when you are deploying features at scale, surprising things happened.
It's just absolutely standard.
You deploy to a tiny, tiny sliver of your user base and then slowly ramp as you don't see errors, as you don't see weird user behavior, as you don't break the entire web because you're tweaking somebody's browser.
Oh, yeah.
While I was researching this, there was a...
I forgot all about this, but there was a feature called Microsoft Smart Tags in 2001 where Microsoft Internet Explorer injected links that were like this exact thing of...
If you had to... Oh, no, I'm confusing it.
Google AutoLink...
If you had the Google Toolbar, which was popular back in the day...
dpk0 the infinite treadmill of shit ideas
You could click a menu item to inject links like this into a page, and then smart tags just straight up.
Infinite treadmill of shit ideas.
I see how you get that.
Yeah, you know, it's the time is a flat circle.
Like, it's such a tempting idea if you are a browser to say, boy, you know, we are used in such an intimate way.
We see so much of what a person is looking at.
What if we just...
took the tiniest little taste.
What if we just made this small little change?
What if we said, I'm not even gonna...
The press release link is here if you want it, but it's overflowing with verbiage about what a favor they're doing to users, because this is so much easier to have all these added.
Maybe someone involved believed it.
I can't believe it.
But that's why this idea keeps coming up.
ghost_user_1984 Product management is just Vampire: The Masquerade with a asleep-at-the-wheel storyteller.
It's, I think it's one of those things where you just kind of get eventually blinded to having such a power and such a privileged position that you can't imagine how it's going to come off.
No ghost user i'm gonna I see your point but i'm going to disagree in a minute actually because of the other topic I kind of wanted to ramble about that is much, much shorter than this whole browser thing.
So i've tried to find help and I kind of sketched out a like well if we can.
reproduce these ads on a page that somebody controls we can paste in some javascript and start getting some debugging out so that sites can detect it because one of the big things that happened with microsoft smart links was or smart tags and there are still stack overflow questions around because you will still see the microsoft smart tags you could add a
html tag to the head of your page to block it and so it was ubiquitous people immediately added it to a ton of sites and then it's the kind of thing i want to say microsoft back down within six months but the code never went away because why would you delete it you don't know if it's load bearing
There is no way to opt out of this, according to Google's announcement.
There's no HTTP header.
There's no tag that you can add to your page to prevent it from injecting ads.
So I think that does make it strictly worse than the Microsoft version from 2001.
And over on Mastodon, just two, two and a half hours ago, somebody popped up and they were opted into
the experimental group.
Or even if it's not technically an experiment, the rollout group.
So I'm trying to arrange a time with them to recreate this because then I can update this JavaScript to say, hey, if your page has a link that has the class, you know, dot Google page ad injected or whatever the hell they
do or if you have a link that has this specific styling however they're doing it they're it feels real likely that they are injecting stuff into the dom because it's so much easier than trying to maintain a shadow dom on top that wouldn't be visible to the page they control the browser they could do it it just seems real unlikely especially on ios where everything is safari under the covers
At least in the US.
I don't know how it works in the EU with the DMA and everything.
44:39So anyways, this is not really anything super lobsters related. It's just so bizarre that there are two browsers injecting ads in the same week that this comes up. I don't know. I'm going to keep running that one down.
45:02So I've been going for a minute. I will remind that this is Lobster's office hours. If you have questions about the site, the code base, the community, happy to take questions and chat about it. And then otherwise I tend to work on code or occasionally be like, Hey, look at this neat thing I saw online. And unless anybody has any kind of questions or topics they wanted to discuss here, which you can just throw into the Twitch chat, I will show you another neat thing I saw online.
...46Excuse me.
Should have muted.
So I got my scratch file up.
pushcx technical writing for board games: https://drive.google.com/file/d… educational marketing for products: https://bookshop.org/p/books/ba…
And I'll just throw both of these in the chat.
That looks fine.
I saw this nice link.
It's about 100 pages of writing about the technical writing that goes into board game manuals.
Because a board game manual has to teach you how to play the game.
the actual process of learning how to play a game is not super fun and it's not always easy so it caught my attention i have a a minor in technical writing in college and i think a lot about how do you explain stuff so that people can get it and build on that knowledge
It is a big chunk of what I'm trying to do with this stream of, well, let's experiment and see if there's one more way of helping the site understand itself that is useful.
And it's driven changes to the site.
So I think we're doing all right.
So if you like board games and play board games, this, I think it's like a thesis, might be
really enjoyable for you because it is a look at the field of technical writing and the challenges in it through the lens of why is it so hard to read most board game manuals?
And if you don't play board games, I don't know that it would be interesting at all.
Maybe just pass entirely.
That's okay.
There's a pretty big overlap between programmers and board game players.
Not 100%.
And it also reminded me specifically of this exact page from Badass Making Users Awesome by Kathy Sierra.
And I think this came out of her blog, because I remember a slightly different presentation of it.
But she talked about when you see an ad for a camera, it looks like this guy on the left here, where
There is this cool picture of someone doing something cool and it's very interesting and it is in a compelling context, which Sierra talks about it as making, there is a compelling thing that your potential users want to do.
In this case, it is take really cool photos or be a photographer.
And the ad is like, check out this cool thing.
You will be cool if you do it.
And then when you actually buy the product, you end up with something like this.
With a manual that is not printed in full color with a cool picture of someone doing something exciting with wild color.
I assume this kind of gradient is really hard to capture on a camera.
49:16And so Sierra's book, Badass, is about
dpk0 what PDF reader app is that? (at $ork i just got a new Linux laptop, using Linux on the desktop for the first time in years and years, so still need to learn what all the best apps for basic stuff are)
If your product is going to help someone get better at something, get badass, to use her term, all of the things that you do in your product design, which includes the manual, need to reinforce that and be oriented to the idea of what you want is this.
What you want is, I took a really cool photo.
This is events, E-V-I-N-C-E.
...58I think it came in.
I think it's just a stock part of, yeah, it's a stock part of GNOME.
dpk0 ah, okay, cool. thanks!
I've played with others, including one that, I want to say the name started with a Z, I don't remember what it was, but it had Vim shortcuts and it was neat.
But every time I'm looking at a PDF, I just want to zip around with my mouse wheel mostly.
jmiven zathura
dpk0 (sorry, please carry on with what you were actually talking about, which was more interesting)
Anyways, welcome to a Linux desktop.
I've been here on Linux for ever.
Zathura.
Yeah, that's probably the one I'm thinking on.
Yeah.
I was getting towards the end of what I was talking about.
I know I've mentioned this book, Badass, on stream before, but I love it.
And if you do product design, which includes basically all programmers because...
You will never be given a perfectly unambiguous spec.
You will never be given a spec that cannot be improved upon.
This book is about how you understand what your users want to be good at and build the whole product around that.
And there is a big overlap between this kind of gap and in that long article on board game manuals
is a big gap between things like wouldn't you like to play stardew valley the cozy game around farming and wooing villagers and then instead the manual is you know the existing manual is more like this guy on the right where it's a giant complicated reference manual that people are intimidated by and kind of bounce off the game because of
And that one's especially interesting because I've got a couple of friends who are really interested in Stardew Valley.
They've never mentioned the board game.
They just play the video game, but they play it to death.
And the board game piece spends like 50 pages doing a complete rewrite of the manual.
So that's pretty interesting.
I've never seen the Stardew Valley board game, but I do like seeing really good technical writing.
The other thing about this link is it's written in a very conversational style.
It says somewhere in here, yeah, graduate essay.
But this is maybe some of the nicest academic I've written because it talks about things in a very casual tone and it has lots of images for examples.
And let's see, where's an example?
52:53It's just conversational, you know. By the time I reach page 18 of the rulebook, I would hope that I have many more of the game's rules memorized in my long-term memory, but those rules are specifically relevant to reading about executive actions on page 18. It's just casual. He's not just beating this rulebook to death with, like... By the time a typical reader reaches page 18, they are, you know, just putting it in first person, which a lot of academic writing doesn't do, is an enormous help. So he does a deep dive into this on Mars board games rule book and then another one into the Stardew Valley one. And they kind of talk about how you explain these concept difficult topics and what does it mean to have a dependency chart, right? So this is not NPM output. This is lesson plans of how do you get explicit about understanding what knowledge requires what other knowledge? So it's just a great introduction to technical writing. If you are going to write stuff, you could do a lot worse than to read that and try and think about that as you write docs or write readmes. Because there's a lot of just thoughtful concepts there. You know, the basic stuff of how do you understand what the manual is for and what job it's trying to do. Yeah. So that is how... Technical writing is like product design. That is the Peter saw a neat link and wanted to ramble section of the day.
54:46So now is a great time to ask about weird Linux questions.
dr3ig Do any boardgame manuals link to YouTube videos explaining rules?
But otherwise, I was going to roll into doing pull request review
So I believe Ashwin, do any board game manuals link to YouTube videos explaining the rules?
Yes.
And if you check out the link, he talks a lot about that phenomena of, are YouTube videos better?
Is there such a thing as visual learning?
How do we measure what better is?
There's a whole bunch on YouTube.
and then also you know some of the difficulties of a video are you can't really skim it in the way you can skim a manual when you need to find a specific rule so it can't be as good a reference but it can be a better tutorial because you kind of see everything
55:53dr3ig Videos have chapters these days and transcripts
So this one, some bot came by and hit the stats page bunch.
Yeah, chapters and transcripts, but it's still not.
If you have some complicated board game you're trying to learn and you have a 20-page rulebook, it's great to be able to go to section 4.3.a and say, oh, you can take two executive actions unless one of them is the reset action.
56:26So let's see.
...32All right. Ashwin here actually randomly ran into me on Blue Sky and then saw the stream archive where I reviewed his pull request on stream. So that's a very funny small world moment. Let's change. Did he put it back to? OK, so he slightly formatted the SQL query. He extracted this date format guy.
57:27This is. All right, so when I did the review on the last stream, I pointed out that. Well, I figured out that the difference was between execute returned, I think a hash and select all returned. An array. And he had a chunk of code that was. transforming what select all returned into what time series wanted and after a little investigation i kind of figured out well i kind of got to why bother so i left a comment that was like well first off we didn't need to inspect data in the middle because you were gonna The change meant you were always going to get an array of arrays instead of an array of hashes. We've lost his original code diff, unless it's visible here, maybe. Yeah, so you had this style of saying, for each row, is it a hash or is it an array, which was kind of puzzling because it would always be the new thing. And then I said just update the consumer to work with the change data structure. But when we look at the revision, he didn't update the consumer time series. He again is doing a transformation here to get select all to return the same thing. And then I don't understand this date format change. what is the the purpose of that and how does that even so you have to inject date format three times why i don't understand i have to ask
01:00:03dr3ig I think it's just to have a single definition maybe
The only thing that uses this query appears in one place and only gets used by one piece of code in time series.
So if the query produces a different data structure,
Rather than edit that data structure back to the old one, you can just have time series know the new, the current one.
Also, the break man warning is because you change the date.
Is it date format?
01:01:14so I'm really puzzled by this change to the date formatting because it just it takes this string and extracts it
...48I wonder if.
And then there's a sanitize.
Yeah, I wonder if this is.
gtfrvz @dr3ig a named sql parameter would be nice then.
That they tweaked something else in the query and that changed the break man signature and then break man complains and it's real easy to miss that.
break man will.
01:02:18When Brakeman complains that it sees something hinky, it doesn't often, until you know how to read it, it doesn't say, oh, also at the same time, this other signature from the exact same line and file went away. And that's like a real big clue. this old thing that used to be was explicitly permitted has been updated and the fingerprint has changed but you don't see that output from brakeman you see very loudly you see this thing is unsafe and then in quiet terms you see the old signature is gone and you kind of have to put that in your head together and then maybe this was trying to satisfy brakeman by saying well let's sanitize let's pass this string in explicitly using this thing instead of this so i don't know i have to ask i'm gonna
01:03:35I should have put that comment here instead of in a regular pull request comment.
...53So let's see how this one's doing. This one was a feature request that, oh, actually backing up GTFRBZ. there a way to pronounce that one that i'm not remembering get forevers get forevers i don't know a name sql parameter would be nice then it's i try not to guild the lily on these things like this is just to get this specific data as close as possible to the way the time series graph wants to consume it, rather than mess around with all the layers of indirection of trying to squeeze this into the active record interface. I was just like, let me just write the query and throw the rows over because we get the right thing. And I believe that was the right call because in the last however many years, this code has barely been touched. If we looked at the... This isn't going to go to the... No. If we looked at the stats controller history... Come on. I never know how to... App. Controllers. Stats controller. Oh, come here. Give me all the history. Yeah, so since it was introduced... four and a half years ago we'll say we added one thing this is rubocop this is rubocop this is rubocop this is the first code change so i feel pretty good about let's just do the simple thing rather than the proper thing because i don't know that a named sql parameter Like, they're not going to slip out of sync. It's one piece of code that's used in one place. And as long as it's so tightly coupled, it doesn't really need to be mature. I don't know. Maybe I'm just justifying cutting that corner. Does that make sense for what you were thinking about there?
01:06:20Oh, shit.
I was clicking around in the mod panel and must have misclicked.
Shit.
Because I accidentally banned ghost user in 1984.
Fuck.
I don't know how to...
So I just unbanned.
That's really frustrating UI.
I didn't even get a...
Oh, I see it was.
gtfrvz i agree. but once you pass three times the same parameter, a named one is better.
So there's a way to list the users who are in chat.
And when it closed, the band thing was right underneath it.
And I guess I extra clicked it.
gtfrvz comment on the diff, not on the original code
I'm sorry, ghost user 1984.
Once you pass three times the same parameter, a named one is better.
01:07:21Oh, it's a comment on the diff and not the original code. Oh, I see what you're saying. So you're saying a named parameter for the string substitution, not a named parameter in the SQL sense. I thought you were talking like the SQL variable, but you're saying for this guy, I follow.
...47Yeah, I see how you get there. Like if this had been, named, you could have just reused it three times. But at the same... I don't know. It's such a small query. They all have to match. I don't know. How do I... Whispers. Can I whisper to ghost user and apologize for accidentally banning? That was literally a misclick. I can't actually send them a whisper apologizing. Thanks, Twitch. I feel very secure, Twitch.
01:08:51That's... Are they lobsters under the same username? Nope. That's so frustrating. I hope they come back and look at the stream archive and they see me being embarrassed because that was a dumb little mistake.
01:09:18Maybe I should add block that control so I don't miss click it again.
dr3ig Can you retrieve his messages now?
dr3ig For the archive that is
Okay, so that meta distraction aside, there's this feature for adding search highlights.
So if you search for a term, it gets this nice yellow highlighting on it.
And I said that this was
jmiven they're not on irc either
i retrieve his messages now for the archive that is i have no idea that is a good question i think when i ban someone all their chat messages immediately disappear
They're not on IRC either.
God damn it.
So I think from this stream, that's it.
Poof.
His messages are just gone now.
And so there is going to be, in the transcript, me responding to stuff that's just not present.
So that's a really frustrating mistake that I made.
One click with no confirmation, no take backsies, and permanent deletion.
That's I didn't realize that the controls on Twitch were like, you know, Dark Souls Iron Man mode.
01:10:51Now I don't want to look at the users in chat and see if they come back, because what if I click it away and accidentally banned somebody else, right? It's so frustrating.
01:11:08Oh yeah. So on this one, on this one, Ashwin had kind of reached into the search object to call this strip operators with the params that were passed in, which was kind of mixing layers of abstraction rather than letting the search object handle the idea of separating out the types of terms, because you can search for text, you can search for story title, you can search for commenters.
...56And then this test, I was kind of genuinely surprised it passed. Oh, looks like he hasn't touched it. I misunderstood. I thought from something he had said on Blue Sky that he had updated both PRs. So there is nothing to change in this one. Okay. Or nothing to review in that one.
01:12:25So I got two more requests. You know, I should go through the history and see if ghost user... I'm going to do a quick rep off screen here.
...44Did they say another name? Yes. Ghost user 1984 said another name. They are, in fact, Hunter, a moderator of lobsters. That's pretty embarrassing. Okay. But I can message him because I know his name.
01:13:33so yeah hunter is 355 e3b that is the hex color code for hunter green so i just messaged them and said sorry about that this is the mistake i just made
01:14:09ghost_user_1984 I've been packing.
ghost_user_1984 And this happens.
all right so hunter is acknowledged and may come back may not i don't know what his availability is but i have at least apologized for my mistakes so i feel pretty good about that it has assuaged my guilt and it helps that it's somebody who knows that you know i did not ah hey welcome back you've been packing oh yeah you know you look away from the stream for two seconds and you get banned yeah it's that what's that there's like a
patent where commercials make you they said like what if TVs had a camera and so if the commercial demanded it the viewer would have to like stand up from the couch and strike a pose what was this thing Sony where's the there's a diagram for this
Is it this one?
Nope.
Yeah, here it is.
So this is what the stream is turning into.
Yeah, say McDonald's to end commercial.
And they have to stand up and say McDonald's because it's watching them with a webcam and listening.
And then they can go back to their show.
And I appreciate that their show is people murdering each other.
Like,
You can play the gun game on TV.
I do this at hotels sometimes.
You turn on the TV and you start flicking through the channels and you see how long it takes until you see a gun on screen.
jmiven 'MCDONALD'S' TO END COMMERCIAL
The gun game is, you know, it's kind of a single player game.
jmiven (sorry...)
And I don't know if it counts as winning or losing when you see one, but it won't be particularly long.
Yeah, now, JMiven, you have to stand up and say engagement or you get banned from the stream like Hunter.
That's apparently the new rule.
Engagement!
01:16:24jmiven :-D
This is the grim dystopian future of a TV that watches you watch TV.
I think that one got so much attention because everyone knew from Microsoft Connect and using virtual assistants that it was entirely technically plausible and could start getting rolled out almost immediately.
So a lot of people screamed at Sony and they did not roll it out, but God, I won't be shocked when it happens.
ghost_user_1984 The fun part is you can do that today with modern phones.
Most TV manufacturers are ad companies now, so.
folks know that right.
can do that with modern phones yeah pretty much.
But it's worth mentioning that pretty much every consumer TV you can buy.
snapshots what you're viewing every couple of seconds and does a photo hash to figure out what you're watching and then reports analytics.
And so, if your TV is on your home IP address which why wouldn't it be right it's connected to your wi fi.
If you ever buy something online from one of their affiliates, they literally know your name and who you are and where you live.
So all of that gets rolled up into search data.
Oh, Peter likes watching, I don't know, Law and Order or some other show.
And then we can search for
People who watch crime dramas and sell them and specifically on the web.
I don't know.
What would somebody who watches Law and Order on TV want to buy on the web?
Suits?
True crime thrillers?
01:18:15jmiven tasers
All right.
Tasers?
Yeah, I assume if somebody watched a lot of Law and Order, they would probably spend also a fair amount of time afraid of the world because you would think the whole world was crime.
That's getting into politics that I try and keep off stream.
So there was a bug recently that is not linked here.
And the bug is that
When I rebuilt the search engine, I basically broke relevant sorting.
pushcx https://github.com/lobsters/lob…
I failed to port it over, and then somebody noticed and reported the bug.
We'll find the bug in a minute.
Let's grab, if anybody wants to follow along, here's the pull request.
01:19:18Oh man, it's so nice when this kind of thing slots exactly into the existing structure there is the minor that instead of instead of doing this to term sql make a new variable that is like order sql That may be what is causing the build to fail, although it's probably also Brickman causing the build to fail, because now this is touching a signature of... raw sql query and probably i don't see the use of strip operators in here so it's gonna need that too it's weird that they oh but they can't reuse the yeah okay that's fine
01:20:31do we not already have a full text index on these fields that's blowing my mind because if we didn't have a full text index on those fields i would expect the search engine to crash the site every time somebody searches for something because that's a lot of text to go through in CTV schema.
01:21:06So we index story texts on title and description and body. Yeah. So we have one index that hits all three fields. I don't know why they would have to add individual indexes to the three different fields. Hmm.
...40Oh, for the weight. So the way the search engine used to work, it just kind of counted. It multiplied how many times the terms appeared in each by that number, as opposed to weighting things. I don't see that. No, they did the same strategy here. This description is a little odd because they didn't.
01:22:08Yeah, that's fine. Implemented full text search in the comment column to rate based on relevance.
...21Before, I'm so glad I put the lorem ipsum in here so people can generate something approximate. All right, let's take a look at the build. Yeah, so it's just break man warning. I'm surprised none of the SQL injection specs failed, actually. All right. Let's go review. This is great. This is wonderful that someone has decided to restore this functionality.
01:23:04Oh, wait. Let's look at the search model.
...14Terms SQL already is the name of the field.
...32Yeah, so this is the where clause. And then this is the one that's replaced. Yeah.
01:24:03I don't want to use a variable name. Have to track of which it is at which line of code.
...42So it matches against terms. Where does strip operator get called? Because if it gets called to create terms. Oh, OK. So as we build this terms array, it's already been applied. So OK. So that's why the tests against SQL injection didn't fail. It's because it's already done by the time it gets to here. Great. And if I had a type system, I wouldn't have to worry about that kind of thing.
01:25:35Okay, let's just...
...43Did I not click start a review on this? Dang it. Should have said this is all part of the review. That's okay. Is there a convert button? No. It'll be okay.
01:26:42On full text.
01:27:12Oh, we can't. I wonder if. Copy this. OK. I bet it's for the weights because the weights are separate and want to just match title. I wonder if that full text index won't let that work. Because it's one index, this part is complaining that it can't differentiate the different sections. Hmm.
01:28:08So... I'll just have to ask.
...53This one, I'm... Yeah, it may just be that we have to have redundant indexes to be able to weight the search terms in the search columns differently. I just don't know. Because the one part of the SQL query could use the combined index for finding out if the terms are present, and then the orders needs them separate I just don't know. Yeah. And I'm going to go ahead and ask a question or two rather than jump right to trying to debug it. All right. So then this thing. Yeah.
01:30:26You can't know that. For a is.
...51What's the let me find the exact. Let's be specific. Does it go in config? Yeah.
01:31:27I'm running break command dash I to inspect the new warnings and add a note that it's safe. Existing note. Can reuse the text of the existing note. This will in. We'll just paste that link in a second. in the great man ignore this urls so that ryzen here can just click cool So this is nice. This is a moderately hairy change. This is one of those places where, you know, the resulting patch is like six lines, but I know somebody spent a couple hours on this. And they clearly, I think these are the same weights that we had before, in which case they did spend extra time researching what it is. So I really appreciate this one. Did I actually say that? Shit, I forgot to say thank you. I said this is great.
01:33:11And then there's also the bug isn't linked here, so let's.
Here we go.
Oh, DPK, this is your bug.
Ah, it's already linked.
dpk0 i made a bug?
Oh, Ryzen must have put it in a commit message and I didn't spot it.
dpk0 oh, i *reported* a bug
Excellent.
dpk0 thatโs less disastrous
So, Daphne, your bug is getting fixed.
Yeah.
I mean, you didn't make a bug.
You identified.
Yeah.
Yeah.
When I say your bug, I'm the one who break things all the time.
You know, this is...
In the sense of whose bug this is, it's your reporting and it is absolutely my bug.
I introduced it.
I take full responsibility for this bug.
But anyways, I said your name in case you were also away packing engagement and you were curious about what we were just reviewing.
dpk0 stream title: When I say โyour bugโ, *Iโm* the one who breaks things
Cool.
This is going to be nice to merge.
It's always nice to restore functionality.
When I say your bug, I'm, oh yeah, that's, that's a good title.
I was thinking just, you know.
01:34:45You know, the, if I can philosophize for a second, I made the stream motto something mildly self-deprecating and I'm blanking on it now. What did I say? If it's worth doing, it's worth doing badly. A big chunk of this, I hope some of the value of this stream to folks watching is You can see that i'm not a omniscient 10x developer who's always right and especially if you watch a couple of streams, you will see me fixing stuff that I broke on the previous stream three weeks ago. The world does not actually demand perfection, the world just demands that you do stuff and learn from it and. These kinds of mistakes are not. What. these mistakes are not the end of the world is what i was going to say but i was totally i got hijacked by the pull request line that says bloster hsx wants to merge from ryzen so is this ryzen again with the second account so bloster has a fork and ryzen has a fork I suppose they know each other. And they open and closed this issue a couple of times for this pull request. All right, a lot going on here. Let's look at the code.
01:36:37Hiding merge stories removes the on link to in the comment title.
Oh, man, this.
As you would expect for a site that's about
ghost_user_1984 If "ifs" and "ands" were pots and pans...
comments this is our god object and there are so many ifs in this template hiding merged stories removes the on what is this bug
01:37:21If ifs and ands were pots and pans, what's the rest of that saying?
We would be in a swamp jazz band?
I'll play the dishwashing board.
ghost_user_1984 It's the middle of the "if wishes were horses" rhyme.
How do you merge submissions?
...49Hiding a merge submission. Oh, man. It's the middle of... Wait, there's a whole version of if wishes were horses?
01:38:07ghost_user_1984 IIRC its "there'de be no work for the traveler's hands"?
I don't know this one.
There'd be no work for the traveler's hand?
What?
For Tinker's hand?
...24ghost_user_1984 It comes up in DS9
pushcx https://en.wikipedia.org/wiki/I…
i definitely did not know this was part of a longer saying i only ever knew this i guess i also know the comes up in ds9 oh man then i missed that one because i have watched all of ds9 but it's been ages i guess twitch doesn't like commas in urls
...57There is also the Firefly version of this, which was, if wishes were horses, we'd all be eating steak.
01:39:12Clicking hide on submission with merged entries.
Not all comments from that submission are removed from my comment feed.
That's... Oh, man.
The story model is so...
The merged story model is...
really complicated in a way that produces an infinite number of bugs.
So the way the database model works is each story has a field called merged story ID.
That is the idea of the story it is merged into.
And the fact that a story is a top level concept and also the individual items
ghost_user_1984 I think this like the biggest mod footgun too.
is the source of kind of an infinite number
ghost_user_1984 I remember having to help unwind a bad merge in the console once.
ghost_user_1984 (like 4 years ago)
bugs because everything that joins against the story table which it's one of our two god objects so that's a lot of things how is this a mod foot gun hunter their source is merging yeah oh that's been a couple of years now since that one yeah i remember
there was one where either I swapped the merge target and the merge source, or I made like a chain of replies on accident of merges.
So if story A says I merged into story B and story B says I merged into C, things go to hell because they should all be merged into C.
But I don't, I think the validation prevents that, but honestly, I'm not sure.
There's some therapy dragons in the merging code.
So this is, if there's a story with a merge, and this one must have multiple links, if you have clicked hide on one of them,
01:41:27yeah so hide is implemented as the individual story because the code base kind of equivocates between is a story one individual submission like this or the whole thing because of merging and the real confusing thing about this particular UI is this line goes with this and this line I think is even produced by the same template
ghost_user_1984 This really wants a top level table which "owns" everything?
And when you click a hide button here, yeah, I would expect that the code only applies it there.
ghost_user_1984 So we have an one to many relationship?
Yes, yes, Hunter, you are correct.
I think it does want that.
So where did I put it?
Did I put it in this one?
01:42:32Merge stories. Just skimming this. Probably half of these are merge bugs. Where did I say it?
01:43:07pushcx https://github.com/lobsters/lob…
Ah, here we go, Hunter.
Here's the comment.
So just by virtue of reading all the issues, I've been thinking about this one for since before I became the site admin.
ghost_user_1984 (brb)
So call it something like eight years.
But we've had a lot of bugs because of how the database models merge stories.
And this is probably going to be the one that forces a remodel.
We should separate out a story, a thing that appears on the homepage with a title and a blank that is
each individual link and or text a user has submitted more stories will have exactly one but merge will have multiple and so if we get explicit about what is a story versus a blank i was going to use the word story for that top level table like you say oh funny this one says
It's the same issue.
I just didn't scroll down enough.
I was thinking it was funny that it says key gen.
01:44:20The the blocker here on this refactoring is very much that I don't have a name to rename these two. So if we looked at the schema.
...49Alright, so we have this create table stories.
And
Most of these fields would move off to a whatever model.
dr3ig Submission?
Except for, I would probably denormalize to include title, short ID, hotness, submission.
Maybe that's sort of, it's sort of just noun-ing the verb.
Like the verb is that you submit a link and a title and we call that a story.
And so there, like the noun is story.
I don't love just changing the part of speech as a way of naming things.
I don't have a better idea, though.
So you have definitely created the best idea that we have so far.
01:46:29Didn't mean to scroll. Yeah.
...39And maybe I have it backwards that the top level thing shouldn't be called a story.
It should get its own name and then the individual submissions should be stories.
That would require less just
incredible grunt work refactoring because you know half the tables in the database joined the stories so if i left stories the name of the individual bits and then the name for the high level thing is different what would that be i know on
What is it called?
One of the agile methodologies says that, oh, the individual tasks are called stories and then we group them up into sagas.
gtfrvz EPICS
That's a little too cute by half for me, especially because it feels real clunky to say that most sagas have one story.
Epics, oh yeah, I've seen that one too.
God, that throws me right into...
I think it's Jira still calls them epics.
I used it at a previous job.
01:48:12Epics.
dr3ig I like onelook to search thesaurus for related terms
That is also... Well, you know, GT, you have also created our current best candidate for...
...30Let's see, so this is 0.98.
...39So if we said refactoring DB structure, and it's mentioned in, so we got DR.
01:49:00I don't know OneLook. Is that a website or a desktop tool?
...23dr3ig Onelook.com I think
OneLook.com?
Yeah.
my sight line over the monitor, I can see my copy of Roger's Thesaurus.
And I feel like it is an essential development tool.
...47Oh, well, it has word games. I could make this a gaming stream. I'll play 3P on stream and people can yell at me when I don't see words.
01:50:04gtfrvz you could also make this a hottub stream
See what you have in the thesaurus.
Narrative with a beginning, middle, and end.
...17That is not a word, that's a typo. No?
...35This is not terrible. It's not rogits, but it's not bad at all, actually. So I'm glad to have some kind of thesaurus available online. Because if I'm out and about, why are some blue?
...55They weren't a second ago, right? What did I do that made them blue? I clicked nouns. I clicked back.
01:51:09All right, so there's some UI to learn, but that's a handy thing.
I could make this a hot tub stream.
I've joked about it.
If I really want engagement, I'll put on a bikini.
dr3ig You clicked below the definitions I think
You could tell from the sound of my voice that that probably wouldn't be too satisfying.
Separate out a story, I think.
Here's my homepage with a title.
What if we just said headlines?
I clicked below the definitions.
Oh, it's these things.
I'm hovering these buttons and it triggers.
Okay.
All right.
Thank you.
That solves it.
Actually, that's not bad.
01:52:05Because I was just kind of like thinking, riffing along the newspaper line.
the idea of a story comes out of the news.
Because I was thinking this, I closed it, the schema, almost all of these fields go over to the sub object, the thing that is the user submit.
and only a couple like title stay.
So what if we kind of renamed around title and said, yeah, this is the headline.
That kind of riffs with our front page.
We're using our newspaper terms.
If I really wanted to reach into my background, I could call it a head H-E-D.
There's a,
a weird habit in journalism jargon where a lot of the terms are deliberately misspelled.
So it's H-E-D for head.
It's... Oh God, I'm blanking on the others.
There's a head, there's a quote, there's... God, it's just been too long.
So ages ago,
From 2007, 2008 into 2009, I worked at the Washington Post and it was a really satisfying job.
And I kind of slipped in the side door to the newsroom and I would make websites that went along with stories.
There's a bunch of the stuff on it on my blog if you go through the tags for Washington Post.
But the other one that I don't know if I've done it in the Lobster's code base, but I know I still do it.
No, I don't have any.
dr3ig is lede from burry the lede a misspelling
The placeholder for text you don't have yet is not lorem ipsum.
You put TKTK because it's really easy to...
Yes, lead from bury the lead.
That is an intentional misspelling.
Excellent.
I was thinking L-E-A-D and I was pattern matching it to lead and so I couldn't get to lead because I was mispronouncing it.
But yes, that's another one.
01:54:37tk tk is it is the abbreviation for to come as in the text here is on its way and rather than abbreviate that as tc which actually shows up in words tk shows up in very few words and tk tk shows up in none and so it's very easy to say like as you're putting something in you could just throw in like tk tk and everybody knows it's placeholder text I still do it on projects. It just hasn't slipped into the Lobster's code base that I know. All right. So let's go back and look at this bug fix.
01:55:31How do they explain it?
...38When merge stories are hidden, there are no more comments with the plus on link to story. No. So this is, this is not it. So the bug here is if you're looking at this story, and you click hide, when he says, and I'm guessing based on Gustav as a name, when he says his comment feed, he's probably looking at slash comments or his user page slash threads. And then if he hides the story, a bunch of stuff disappears, but some of the others don't.
01:56:43Whereas what the pull request does, there's gotta be a example of it here. The pull request is just hiding this text inside the story itself. So this is, this is unfortunately not the right thing
01:57:42I'm not going to link these because I don't want to try and figure out which is their username.
...52And it's a sub thing, but they definitely got bit by the heinous inline partial here and they don't know it. I'm not going to get into that one though, but we talked about the crimes of the heinous inline partial on a previous stream, so I'm not going to rehash it, but Because comment is a got object, that partial gets copied into several other templates. And they edited the one that is effective on that page. Not all of them.
01:58:27Is it on the story view? Let's check that link. Comments, threads, that's... It's not that they're on the story. That has others merged into it or is merged into others that comments from all stories would disappear.
01:59:51Thank you.
02:00:09A lot of complexity. What's complex about it? Be specific. It's a complex join to carry through the query to every query. So because hidden stories links to a story ID, if we want to know what comments to hide for the user, we would have to join against hidden stories and throw out anything with that story ID. That's what happens now. then what doesn't happen now is join against the story model and then join again against the story model to find anything that points at the target story and hide those comments as well and then join again at the story model to find anything that the hidden story might be merged into and hide those comments so it's just I mean, I can picture it in my head. I don't know if that comes through on stream, but that's why I say it's gotta get refactored because that's complicated.
02:01:29I think I'm gonna, so here's a,
open source etiquette and practices kind of question.
This pull request didn't take the right direction.
And it's not a matter of, you know, make some tweaks and run the linter and fix the one test and I'll merge it.
It's not approaching the problem that's described.
Do I close it?
I don't want to discourage this person.
Let me just give it a couple of days and see if they close it themselves.
Because there is the off chance they look at this and they go, well, now I really want to solve the problem.
And then they volunteer to write the big complicated merging migration.
I don't know.
I guess I will leave it and see how it goes, right?
All right.
Yeah, it definitely doesn't say changes requested because it's just not headed the right direction.
All right, we'll see how that goes.
So that's all the pending pull requests.
Time for the ad read.
You can stand up and say McDonald's.
dr3ig Are you doing the advent of code problems?
This is Lobster's office hours.
If you want to talk about the site, talk about the guidelines, the community.
Am I doing Advent of Code problems?
No, it's been a couple of years.
God, when was the last time?
I think I did them in Haskell in 2017 as practice.
I don't think I made it all the way.
pushcx https://www.zachtronics.com/
and then otherwise really i like code puzzles and i like programming games like tis100 so like everything by zachtronics so zachtronics has made a bunch of programming games like oh man some of these aren't but
Moles, Exapunks, Opus Magnum, Schengen, TIS100, and Infinifactory are all programming games.
As is Spacechem.
And I only really can do so many hours of productive coding in a day.
And so as much as I love these games, oh man, TIS100 is...
As you can guess by my username of push CX I am a fan of an assembly game.
they're all wonderful, but they all kind of draw from that same pool of programming times as obviously does advent of code.
And so it's like well.
I could put a couple of hours of work into lobsters or into recheck or into my blog or into some programming project, or I could play a game.
And so usually with these games, I think I did all of TIS 100.
But on the other ones, I did enough to kind of get the basics.
And then I would rather put my programming time into an actual project rather than a game.
How about yourself?
Has anybody, actually, has somebody posted about Advent of Code on lobsters yet?
Usually there's a team.
Somebody sets up a, because you can make a group leaderboard.
02:05:52Oh, great. Some tips.
02:06:05Ah, well, that's neat that there's a Obster's Advent coming. Anyways, so no, I'm not personally doing it. I think it's really neat. It's just not where I choose to spend time. Spend enough time puzzling around this kind of stuff. And especially, like, some of it is hands-on keyboard time, and then some of it is the... I'm walking around the house and I'm like putting dishes in the dishwasher and knocking around and I have ideas around stuff. And if I'm working on something like Advent of Code, my background processing brainpower goes to the game instead of the actual project. So I would rather put it in the project.
02:07:01All right.
dr3ig I participated a few times in the past, but just like you I got plenty of other activities in the same "puzzle solving" category
still yeah yeah even just general puzzle kind of games can can drain from that same tank as you say
There's not a lot of...
I don't usually go for puzzle games very much.
Sometimes.
I mean, as you can guess by my avatar on sites, I really liked Bala.
Baba is you.
But I was almost saying Balatro, which is the game I played a bunch of this weekend.
Which is not a puzzle game, but it is a satisfying deck builder.
02:08:07Can you type? Are you new at typing? Here we go.
...27So over the course of a couple of streams, we developed this thing that got added to the user profile, where on user profiles it says, it says recent, but it's last six months of comments. How many of them are above average? And above average doesn't quite capture it because There is a second part, which is also not on stories that they submitted that are their own. And I did the simplest version of this. Is this the user? Did they check the authorship checkbox? And there's a bunch of caveats there where sometimes people are like, oh, it's my boss at the startup who wrote this, so I won't check the box. And it's not promotional, or I'm sorry, it is promotional, but it's not strictly authorship. And so people don't check the box, which this one I don't gripe about too much because it's kind of freighted. these things where we want to highlight things where the author is a user of the site we don't mean to privilege extractive promotion like look at my cool startup so i just did the simplest thing here and it said all right well we can catch some of these
02:10:28and in the i don't know two weeks since i deployed this it has been pretty darn useful there have been a number of users who this prompted me to recognize as soon as i look at them that they are using the site in extractive ways because they only submit their own links or they submit 90% their own links. I mean, almost all of, I think all but one of the people I've looked at, so call it five or six, they only submit their own links. One guy submitted a couple of other people's things, but then they're really only commenting on their own stories. or they're only leaving meaningful comments on their own stories so one of these cruxes where either either a comment is i see zero for this number a bunch and it's either because they're only commenting on their own stories or they're only writing thoughtful comments on their own stories and either way when i investigate further it's maybe they read the site a little bit but they're there to post their links they're there i should say here they're only here to post their links so this is turning out to be a really good indicator it's not a automatically dispositive but it's a strong clue that somebody is primarily doing self-promo.
02:12:29And I just left a comment the other day. Where was that?
...39Someone pointed out an example of this. Oh, she's just trying to rebut me. I will have to look back at that. I hadn't seen that he left a comment. But they said, you know, how are self promo bans enforced? The account should qualify. I didn't see that some of his, or his early links were really well received. They got good comments and he was an active commenter. So in the code sample, recent comments would have shown a bunch. But above average for the day was a flat zero. I will have to look back at these others. Oh, and I bet... I see what he's saying. So on these, he's linking to comments he's made on other stories. I shot myself in the foot. So here I wrote above average for the day. So I looked at this number and I said it was zero because it was. And then I miswrote it that the author doesn't comment outside his own posts when I should have said doesn't have well-received comments outside his own post. So that's my mistake.
02:14:25It's hard coming up with a rule of thumb. It's also hard talking about these things. Shoot. Well, speaking of I just get on stream and make mistakes all day, there's one.
...48All right, so I'm going to have to leave a comment about that.
02:15:11Playing with this has been... So there isn't a... There isn't a page where you can see all of a user's comments. You can see there are threads, which shows all the way up to the top level comment and all child replies, including other stuff. So it can be quite noisy. And then in the search engine, you can get a list of individual comments, but you can't get any kind of sorting. And even that threads page is not paginated. And when I was doing pagination a little on stream, the example I was starting to add it to was you could search for examples of comments that a hat had been used on.
02:16:10Yeah, maybe at some point it's time to add a user comments endpoint that has a bunch of ways to search and filter somebody's comments. It's not really a deliberate omission. I guess as much as I've thought about it, I haven't wanted to extend our slightly janky pagination system to more pages that I'll just have to fix later.
...46Hmm. And maybe if this thread view just showed the one comment they were directly replying to. Yeah, but some people have started reading slash threads for, did I get any replies? That's been a habit since long before I made the replies page or the inbox. Not to get into the territory where it's like, hold down space bar to heat your computer, that old XKCD. Which one is that?
02:17:38pushcx https://xkcd.com/1172/
So it's a very specific version of Hiram's Law applies to social software and
Hiram's law is that every observable behavior of an API, someone depends on it, and it would be a breaking change.
Observable means if you can ever notice it in any way, even indirectly, it's observable.
And so we have a page that's threads and not comments, and it existed before replies or the inbox,
dpk0 i am that person, hello
And so there are people, I am certain, who still read slash threads, you know, their username slash threads, to find replies to them.
So if I changed that behavior, it would break for them.
And I don't know that I want to break it for them.
Ah, hi, DPK, then.
Maybe if it showed one level of replies and click to see,
dpk0 yeah i like to see the whole thread
grandchildren do you look to see grandchildren replies or just your own direct replies so like so if there's you here yeah you like to see the whole thread even the siblings like comment e here that is also replying to a
02:19:17dpk0 hmm, sometimes
I mean, you know, this is not the worst case scenario.
We could leave the existing view alone and add another endpoint.
Yeah.
It's a reasonable way of seeing what kind of discussion is going on.
...44All right.
...57So I'm not sure what next step to take for this. idea of the above average. It's useful for mods. It's not quite so useful that because it does have like aside from the to do I guess I'm wondering if this should be something that is visible to oneself, like to the commenter directly, without being something that's widely available. Because I try not to build mechanisms that shame people. Because we get a bunch of... When somebody joins a community, a lot of people feel some amount of social anxiety. And I don't mean to the point that they have an anxiety disorder, just it is very normal to be nervous in a new social space. And Lobster's is a social space. And I don't want people's profile, I don't want people to feel like they have a profile that's gonna immediately get a badge of shame on it of saying, oh, you don't measure up. And so I don't think I wanna put this on a profile in a publicly visible way. And if you're curious, on this template on the left, you have to be a moderator to see this section.
02:21:45All right.
...56Maybe if there was something, there could be a section that said, if you are a user looking at your own profile.
02:22:08jmiven yeah I'm sure people would see that (consciously or not) as a metric to optimize
Yeah, I don't know that this is useful enough because it's just one number and you've got to go dig through your threads page.
Like it would be nice if both of these saying, oh, they've left 20 comments.
...30immediately want to click in and see what those comments are and above average i would like to both click in and see above and below so jay miven to your point that people would see that as a metric to optimize that's always an issue and i'm well i'm okay with the positive version of it so the positive version of it is people are incentivized to post interesting, thoughtful comments and contribute meaningfully to the community outside of their own stories. That's the positive version.
02:23:14But this presentation of how many comments are there and how many above average kind of automatically looks like a ratio. I put it in this order because It's like overview focus. If I had put it in the other order, it's obviously numerator denominator. And while it's expensive to leave really good comments, expensive in the sense of it takes lots of time and thought, it is cheap to post a bunch of comments and then delete or disown the ones that don't get that attention. And that is the bad version of this. That is the version that looks like leave spicy comments and only keep the ones that resonate. And so more conversations end up with a bunch of disowned comments or deleted comments, which is a bit confusing.
02:24:23dpk0 am off for the evening. if you have any more questions about my /threads use happy to answer, send them over the usual channels ;-) night
Have a good night, Daphne.
I don't think I have any questions, but your comment is enough to say that I shouldn't change the behavior of the threads page.
Like, I mildly want to, but...
I did know that it was getting used in all these ways and having you immediately point out that you're continuing to use it in these ways is like, yeah, you are not alone.
A bunch of people use it this way.
Let's not break their familiar workflows just because I feel like it could be tidier or because I want these other features that can be their own endpoints.
02:25:20So I guess what I'm working myself around to is this recent comments summary would be useful to show authors to themselves on their profile page. But it's going to call for the missing comments view that we've actually never had because we've always only had the Threads view.
02:26:06And if I'm following, see, this is kind of the, seductive bit of reasoning is well i know i want to do pagination anyways should i pick that back up like i'm making it into yak shaving of i have to finish that pagination attempt so that i can add these end points so that i can add this summary and really this summary could just be immediately useful
...47If I made like a five line change to this template.
02:27:07So let's do the less useful version, we will do the minimally useful version of this.
...22We don't have any. So that's actually a question on the user profile. We don't have any specific section that is visible to the user themselves. So let's look at a user's profile. Let's look at this guy. Just because I know I've filled in a whole bunch of sections. so there's an email field that is visible to the author and to the admin it's further down the page i want to say but there's no section on here where if you're logged in you see a like note to self here's some useful stuff and there really isn't much in the way of a site dashboard or status The only thing that we have like that is the heavily flagged warning. And that shows up at the top couple of pages like slash comments and the inbox.
02:28:41So I could put like a an hr here and have a this section is visible because you are logged in as pushcx you know this is only visible to you and moderators and if we put a literal border around it like i know that's ugly programmer css but i'm an ugly programmer so
02:29:19So that would work.
So one way, there's a, what is it?
pushcx https://bookshop.org/p/books/bi…
Is it Anne Lamott?
I think it's this book.
There's a nice book on writing by Anne Lamott.
And she talks about the value of writing bad first drafts that
really writing is editing.
You don't make something perfect the first try.
So sometimes you just have to get in the habit of writing the bad first draft.
02:30:38So I'm going to write the bad version just to kind of get a feel for it.
02:31:05This is And I'm going to keep using showing user because the admin can see it and that saves an extra query.
...21I'm just going to say or true because I want to just see the darn thing.
dr3ig Kinda see a theme with the "anything worth doing is worth doing badly"
Let's load up the Rails server tab in the background.
And then here.
...44yeah some of that is is just my own perfectionism where i know i'm prone to rabbit holing on stuff and wanting things to be perfect and perfect is the enemy of done so if i am willing to make the crappy first draft or the rough pass or the bad version then we can iterate on it to get to a pretty good version, even if that iteration takes weeks, months, years, rather than it's perfect, but it doesn't exist, or it only exists halfway in a branch, which is kind of where pagination has been hanging out for a minute.
02:32:44the code base is really inconsistent about whether css classes are named with hyphens yeah so like right here there's a hyphen and an underscore
02:33:14So let's have a div for user stats. This is going to be so ugly. 1px solid. Oh, and then it's going to be var. Let's just copy the above one.
...51So if I reload, yeah, the shadow is definitely not the right color there.
02:34:46Let's make sure it's not the selector that's getting confused here.
...59There we go. Put that on the right side. All right. So it's not the selector. It was just the color. Don't we have a? Yeah. Above average for the day. It can't just say above average.
02:35:25It has to say none on all the stories, right? So let's be specific.
02:36:06All right, that's.
...15Let's get it out of that form. Comments that were above average for the day. On others stories.
...36Yeah, that's real wordy. I don't love it, but that's OK. We can have a first draft. And then let's think about this style.
...51I just want to put a box around it, even though that's so ugly. I could just steal the flash style, right?
02:37:13I mean, it's informative like a flash. I guess if I want to steal that, I should just pick another fairly neutral color for it.
...30So this is here just for dev mode.
...50So I put this in and I said, and then these are the links and everything. That's fine, fine, fine. Cause the font stuff is happening elsewhere.
02:38:25OK, so let's duplicate this and put it here too. And we'll have to pick a new color. I don't think I want the text shadow.
...55See how close that gets. Oh, it's not flashing. This should be user stats. Why did the font size change so much? Is there somewhere in here that I set off? Oh, it's because of the P?
02:39:30Also, let's put this note at the bottom. Help text can go at the bottom.
02:40:05This is only visible to moderators and you swapping it around, we use it to. evaluating accounts for.
...46dr3ig Font changed because you put in the same group with h2
We use it as part of, I'm trying to explain how much weight to put on this, as context when, I guess I'm trying to say that we have, we look at it, it's relevant to self promo, but it's not dispositive.
it's it's informative it's not certain font change because i put in the same group with h2 oh you're right i didn't include the h2 thank you dreg good catch
02:41:40Guess I do need that bit that makes links not bold.
...51Guess not. All right.
02:42:15Kind of a sickly highlight in dark mode. In my personal browser, I'm pretty much always in the light mode, so I never really noticed it. What's the color here?
...39Oh, man. The user UI being huge is not helping me here, Firefox. BG target. OK. This says dark mode. I'm going to lose contrast if I increase this color, though. So maybe I will just leave it alone.
02:43:12What is BG accent used for?
...26Ah, the menus, just for menus. OK. Let's take a look at it. It's probably not right, but it's less wrong. Maybe that's not the color I wanted. That's a lot more red than I want. I also don't want this big margin above it, but we'll get there.
02:44:39There's an alter color at G accent. Oh, did I use the wrong? No.
02:45:17Give it a light shading. That's fine. That's totally reasonable. Now, where is this extra margin coming from?
...30Box P. Right, because it's all P's that are in any box rather than, sure, I don't think we need that. See that at the top of the page, don't I? No, because there's no p. All right. I want them to have a margin that collapses.
02:46:13But I'm either going to have a margin above or a margin below. Oh, I don't want to think about margin collapses. It's so painful.
...27It would actually look fine with more spacing, wouldn't it? As long as it was even.
...38That's fine. Just be bigger.
02:47:40Maybe it gets better if I split up the scope. Because then I can introduce these concepts one at a time.
02:48:18So if I move that over, then this guy can say, do that.
...42So this kind of goes back to that board game post and badass of, People have to actually understand this stuff. Making it clear.
02:49:19dr3ig Lobsters: the public board game
this one would say oh this has got to get the on above lobsters the public board game yeah i don't know what lobsters the board game would look like
...49I'm going to have to work on this language, but again, rough passes here. Thinking about it so long or else.
02:50:06Undefined method on other stories.
Did I get that wrong?
On other stories.
On other stories.
That seems fine.
Did I just not save?
I think I just didn't save.
Cancel.
Try again.
Ah, another BR here at the end.
OK.
This feels like one of those places where
I've got something, but it seems clear to me because I've been looking at it for like 15 minutes.
And if you saw this cold, it would be incomprehensible.
So if you are watching the stream and did not watch me iterate through all these versions of language, take a look at this box that's appearing on the user profile.
And tell me if this makes sense, what it's showing.
I feel like comments in the last six months is pretty straightforward.
But as soon as I'm layering on the filters, it's not clear to me that's what it's doing.
And some of that is just the visual design.
So let's indent.
Make it clear that it's subordinate.
I think that does help.
Set of also, which can mean a different topic.
We'll say and to mean that we're being conjunctive.
Filter to above average for the day.
jmiven I would even add an other level of indentation on the "and filtered to"
don't think above average for the day is going to make sense i think the filter part is okay i think if we just say above average i don't have to say for the day because it's kind of implicit and people get what it means to be above average i mean who doesn't want to be above average
I would even add another level indentation on the and filtered to oh oh that's Nice yeah I like that.
02:53:10I think that's clear. Writing is revising.
...29Valuating accounts.
...56It's getting to be a lot of words, but I feel like these are pretty important words for getting at this distinction between, no, are you really using the site or are you just doing self promo? We use it as context. What does that even mean? I'm coming back to my other phrase, it helps inform.
02:54:40espartapalma hi hello
I feel like a lawyer.
It goes to intent.
Oh, hey, Spark Palmer.
What did we just talk about?
I want to say last stream, something came up that had me thinking of you.
Did you report a bug recently?
Were you active in the bug tracker recently?
I feel like there was something here I had to follow up on that you had asked a question about, and now I don't remember what it is.
02:55:17Well, there was something that you... No, not new filter. I want to search. It's not actually helped.
...33Oh, and it helps if I type somebody's name right.
No?
I guess it doesn't.
How does adding a search term that doesn't match anything give me all results?
Do I have to say bye?
This is not working.
dr3ig What about instead of filtered: "... of those 60 on others' stories ... and only 24 of above average rating"
So if I click on.
This is only going to show me ones that I posted.
What about filter?
Yeah.
All right.
Not to rabbit hole.
It'll come back to me as part what I wanted to follow up about.
02:56:34jmiven yes!
Yeah, let's try that.
Let's look at what that looks like.
...44So that would get rid of this. And we'll say. 60 were on other stories and.
02:57:03Only 24 were above average rating. We always call it score instead of rating.
...25Let's make this a little more conversational. In the last six months, user has posted that many comments. in a semicolon i always do that and then i come back and revise until i remove it because it's usually indicating that i'm doing a run-on sentence but in the last six months user has posted 117 comments of those 60 were on yeah i think it just wants a regular comma how does this look So, Greg, I've tweaked your suggestion a little bit. Does that feel close enough to what you're suggesting? The last six months users...
02:58:21I guess I reached for this kind of format because I like putting the numbers on the right so you can kind of scan down it.
Because I feel like I'm going to look at this once and we're kind of, it's the trade-off, the eternal trade-off between does this make sense the first time you use it or is it efficient for a power user who knows exactly what it is?
And because we're a community site that people hang out on, I very often lean towards the power user side because people come back to the site every day.
And ideally, someone would look at this every so often.
jmiven maybe writing the user name instead of "user" would look better
So if they puzzle it out a little the first time, it went evaluating.
What did I do?
02:59:45dr3ig Just brainstorming :) just thought "filtered" sounded too nerdy
You know, Jay Miven, you say instead of user, that's a really good point.
There's kind of a perspective change here from everything is first person
to this is third person where I think that's part of the reason this kind of clunks.
03:00:15And this almost I'm getting distracted by this because it feels a little accusatory instead of contextual. All right, so If we put the username instead, then what did I get wrong?
...50It needs to be showing user, that's what.
03:01:05jmiven speaking of accusatory, I'm not sure about "and only N were above average"
six months so-and-so has posted this many comments
...37dr3ig Yeah, "only" sounds weird, especially if it turns out to be pretty high
jmiven ... but I don't have anything better
I guess part of it also is this indent format looks a lot like this story submitted, comments posted.
Only sounds weird, especially if it turns out to be pretty high.
Oh, that's a good point.
Yeah, there are certainly users who have they don't tend to write a lot or they just write really interesting stuff because they say they post when they have something really thoughtful to share.
So I see only, I understand how you intended it as further qualifying, further filtering, but it also comes off as minimizing.
03:02:54dr3ig Sorry to push you into yak shaving, maybe leave it as it was initially, and adjust on another stream
above average yes i think that score you had said rating but score is worth including what if instead of filtered i reiterated and posted to other stories and posted
Now, this isn't yak shaving.
There's no dependency chain.
This is just polishing.
Well, I mean, polishing is the hard part.
I don't think this is something I have to shove off to another stream.
This is one of those places where writing is a form of thinking.
And writing is forcing me, by virtue of explaining it, to say exactly what does this number mean?
Why does it matter?
Why this number and not something else?
Which is part of why I keep toggling between the explanation, and I really do like the indent version more for scanning,
dr3ig I mean you'd have a different perspective, and perhaps some more feedback from users
and the help text which is why is any of this here in the first place and i'm polishing and polishing and i'm really glad to get your suggestions to kind of knock me out of it but i think it is worth polishing because this this is the process and the value of streaming this stuff is this is the kind of detail i try and sweat to make sure that
people understand what the heck they're looking at.
It helps us evaluate whether users are participating or exploiting the site for self promo.
03:05:16And if I do that, I can definitely Get rid of this.
...46We usually say posted on.
...58grammatically this is kind of clunky because there's no subject in this sentence fragment and so the english thing would be to insert the word that to be a placeholder subject then it just becomes even more words and it's fine conversationally to say that but reading it the reader wants to stop and backtrack in the sentence until they find the subject And here it's literally two lines up, which is weird for text. And so I'm kind of forced into a headline style where there isn't a proper noun. You know, headlines tend to drop out pronouns and conjunctions. So I guess that's why I think the word and here is kind of weird.
03:06:53Conjunction, junction, what's your function?
Hooking up filters on SQL clauses.
jmiven this is the headline-themed stream
Everybody knows conjunction, junction, right?
pushcx https://www.youtube.com/watch?v…
This is the headline theme.
It really is, yeah.
I'm just going to assume that this is it, but if you were not alive in the 70s and 80s,
I'm singing a riff on a video about grammar for kids that was on kids TV when I was a kid.
Comments posted in the last six months.
03:07:44I think that's good enough.
...51so one thing that i do is sometimes when i can't write anything better i ship a bad version and when someone says hey what does this thing mean i'm forced to explain it again based on a reply to their inquiry and either that gets me to write a new version of it or and this is the secret moderator trick I say, would you like to help? Could you submit a pull request to improve the about page? And sometimes people do it. Can you suggest what better phrasing I should put? What would have made more sense to you? And that's also a secret moderator trick because it helps people realize I am not trying to find reasons to hassle you or Talk down to you. I am trying to collaborate with you. I want you to succeed. Because I very much want... I really do believe that some of these self-promo nudges help people become healthy participants for the site. Because I have seen a lot of times... So in the mod notes... So the mod notes is internally, there are notes by and for moderators. And if you try to submit a banned domain, or if you are a new user and you submit an unseen domain, this little tattle function, it's a little tongue in cheek, the name, but it's real obvious what it's doing. The code base inserts a note to moderators that said, Hey this person tried to do this thing. So when I go look at a user profile. and their very first story is self promo. And I see like five versions of them trying to submit self promo because they don't know when the new user period ends. And then the very first thing they do is self promo. Well, it gives me the context that they really, really want to promote whatever their things are. And so I can go in expecting that. But what I see much more often Much more often. Maybe three to one is a new user tried to submit something that was like a link to the blog post, their blog, or a link to their GitHub project. And they do that an hour or two hours after they create their account. Because there's the user joined time words ago. So this will say user joined 10 minutes ago. User joined two hours ago.
03:11:06And then also I go look at them and they've posted 20 comments. They came here and the first thing they thought of doing was self promo, but then they kind of got nudged by the restriction on new unseen domains into, hey, why don't you hang out and talk for a minute? And all the time I see that where someone tried to go for self promo right away, And when I go look at them again, 70 days later, they didn't get back into self promo. They're just busy commenting and having a good time and talking with folks and learning things they would not have thought to review or not thought to investigate on their own. There's a lot of serendipity on the site. And so by the time they come around to self promo, they've been a user for six months, nine months, a year, and they are a normal, healthy, participating user. So it's this kind of like... It just nudges people to do the right thing. And most people go, oh, okay, well, let me learn the community's norms and participate. And we get a really happy addition to the community rather than someone who just wants to post links to their own thing. Or just wants to post links to their own thing and... leave kind of vacuous comments on other people's stuff that looks like activity which reminds me i didn't put on my post stream now
03:13:12so i will correct that mistake watching me draft that one i think that can happen off stream if folks are super curious i can but it's just a shorter version of what we were just doing of trying to write something does it make sense does it make sense does it make sense okay post all right so i'm gonna Check on this and then I think i'm going to submit this so we got this new user stats got some dead code there. line is that 620.
03:14:09You know there's.
pushcx https://github.com/lobsters/lob…
somewhere there's a comment right there's an issue i submitted which maybe now i have an idea for moderation no moderators moderator ui yeah here we are shameless if you'd like to do something that's a big contribution this would be a real fun one
And maybe reusing the flash box here is enough.
But the mod UI really could use some highlighting and visual styling to make it clear that the moderator is seeing something because they are the moderator.
Because otherwise, it's not easy for me to always remember that most users don't see it.
Like this one, we just added this help text, but this is just for users.
I'm going to stop seeing these two sentences in about a week.
And then I'm going to forget that other people don't see this on others' profiles.
But there's also some UI where, God, there's corner cases in the code where if I submit a story and I click edit on it, I always get the user version of the edit form and not the moderator version of the edit form.
And then I don't know what happens if it's after the max edit hours.
I think it just breaks in a weird way.
So it would be nice if the edit buttons made it clear whether I'm seeing the moderator page or the user page or form, moderator form versus user form, which also need to be split out.
anyway having reused flash for that this style of it has a little bit of a highlight and a little bit of a shadow that might be enough i said like red and white stripe just to like danger stripe it or candy cane stripe yeah i'm coming to the end of the stream here i think that candy cane stripe if you don't follow me on blue sky or mastodon i did mention something on
Oh, it only came up on Blue Sky.
A local coder I know saw a little red car that had a Santa license plate.
And they did see like a Santa shaped person inside the coffee shop nearby.
And I mentioned that my dad is a professional Santa.
He has a big beard.
and works as a santa at corporate parties he's been on tv a couple of times it's something he started maybe gosh eight nine ten years ago somewhere in there yeah he's not like a mall santa like billy bob thornton he's a corporate party kind of santa he sings sinatra sometimes
as santa my dad's a big ham is what i'm saying makes good money at it though and i tease with the big ham the polite version it's just performer let's see what am i saying
03:18:13dr3ig Do corporations hire kids now?
Corporations hire kids now?
Have they ever stopped hiring kids?
I'm getting spicy about politics.
You know the answer to that question, though.
...28I didn't. Saved. Saved by having merged something in production. You see that? That was me forgetting to run our spec. see it's that kind of thing where i end up breaking the build or committing unlimited code because i just go like oh i'm done push so push the x is a reference to x86 assembly I feel like I could say push commits like CX because sometimes CX is an abbreviation for customers where you see those abbreviations where it's like Xmas. So maybe CX could be commits that are breaking because I push those all the time. So let's pull and rebase. That's fine. I don't need all of them. Ah, it's the action mailbox merge that I did on the last stream. I didn't have that locally. It didn't finish pulling, so it didn't rebase. Go on. Okay, now it rebased. Now I can push. Really, GitHub? You've got to find a whole bunch of bugs as I'm winding up the stream. So I'm going to pull these up. These are probably going to be... He's always... to be some random xml library has a denial of service in it i've gotten a whole bunch of these this a potential xss vulnerability in certain conditions and it was opened an hour ago all right
03:20:46Is there a CVE on this page? So let's grab that.
...58So this message is usually out of date because it's only based on what you pushed before. They don't scan between the head you push and then this. And yes, that resolved all five. So if I were to push again, you would not see that message. I'm going to go ahead and deploy. Why do I have two of these? Oh, the dash K. That's fine. Cool. So that new message is going to be rolling out to user profiles now, as is the setup for the Action Mailbox stuff, which I still have to wire up, which is why it wasn't deployed. But I will remember. I won't put it in the scratch because I won't remember.
03:21:56what is it called post to mailing list parse inbound mail so this is what a deploy looks like takes a minute or so because i usually just run the lobsters part of the cookbook i did run the whole thing earlier this morning when I was deploying the Nginx stuff. I try and do that regularly, but I don't always remember. It is very easy with Ansible to slip out of current with your deploy. So I'm going to wrap up. Thanks for tuning in and hanging out. I think I'm done coding, unless anybody has any last questions about lobsters. Oh, I deployed that wrong. Oh, you fool. Oh, nobody caught this bug. I left in the if true. Bad bug.
03:23:14And I'm doing that without running the test because blah. I just deployed something that's showing on everybody's profile for the next probably 62 seconds. 61, 60, 59.
...35Let's short circuit it.
We got the git clone.
So if I just off screen go SSH to lobsters and
lobsters puma if i restart where is it not restart because that's the hard one reload lobsters puma it's doing the phase restart so that knocked about 45 seconds off of that embarrassing i neither had i caught it fast enough that probably the phased restart hadn't even finished so that was
may be visible for 30 seconds to half of the viewers.
And it's not like there was anything private in there.
You can look at somebody's comments and back those numbers out yourself.
It's just trying not to shame somebody.
All righty.
espartapalma no questions about lobster, but keep us updated on the pie situation
So after hot patching a mistake, let's end the mistake stream.
yeah the pie situation oh yeah i'm on the home stretch there is one slice of pie left do you have the link there handy i can pull it up here we go so for thanksgiving we hosted the in-laws and a bunch of friends
pushcx https://bsky.app/profile/push.c…
and the in-laws brought an enormous costco pie this is like an 11 or 12 inch diameter pie and we all know the pythagorean theorem pi r squared so this is like the size of two and a half pies just absolute unit of a pie and i have been eating down the leftovers
But I have been informed that eating nothing but pecan pie does not count as eating down Thanksgiving leftovers, even if this pie is leftover from Thanksgiving.
So this is not an 18 ounce coffee mug.
This is a 15 or 16 ounce coffee mug.
03:26:18yeah anyways i've been having some fun and eating a lot of pie i want to say yeah i don't think i even included the context here but we didn't even eat half of this pie at thanksgiving so i have been heroically consuming an enormous amount of pie before it can go bad Anyways, having fun with that one. Feel free to send me your pie-related questions and also your lobsters-related questions. This has been Lobster's Office Hours. You have been wonderful. And I will see you at our next stream. It is Thursday morning, 9 a.m. Chicago time. And if you are not fortunate enough to live in Chicago, it may be a different time for you. So take care, folks. I will see you on Thursday. Bye.