If We're Measuring Our Config File in Megabytes, We're Probably Doing Something Wrong
Streamed
PR #1777 improving score display for stories approaching four digits.
PR #1796 adding dev container configuration, which is apparently different from Docker somehow.
PR #1626 moving webmentions to ActiveJob, with transaction commit timing.
PR #1786 adding Brakeman to CI with Dependabot instead of ensure_latest.
PR #1786 splitting out moderator comment deletion code.
uBlock Origin rule for hiding stories with combinations of tags like go + plt.
Logarithmic distribution of streaming revenue vs software jobs.
scratch
topics
ublock origin rule to hide stories with combinations of tags
PRs
score display https://github.com/lobsters/lobsters/pull/1777
devcontainers, docs https://github.com/lobsters/lobsters/pull/1796
webmentions to activejob https://github.com/lobsters/lobsters/pull/1626
search button layout https://github.com/lobsters/lobsters/pull/1792
brakeman to CI https://github.com/lobsters/lobsters/pull/1786
split out mod comment deletion https://github.com/lobsters/lobsters/pull/1786
high contrast https://github.com/lobsters/lobsters/pull/1780
issues
sister site spammed https://github.com/lobsters/lobsters/issue/1794
visitors tag filters https://github.com/lobsters/lobsters/issues/1685
mod comment undeleting https://github.com/lobsters/lobsters/issues/1582
not trying to be a Twitch affiliate/partner/etc.
https://old.reddit.com/r/Twitch/comments/1o1w1ed/an_inside_look_at_three_months_of_earnings_on/
https://levels.fyi
streaming breakdown
viewers/$
||
||
||
||
||
| \_
+---------------------------------------- percentile
^ me
title
post-stream
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
58Hello.
Happy Monday.
There we go.
So, howdy.
Welcome to Lobster's Office Hours.
pushcx This is Lobsters office hours, ask questions anytime.
Let's throw a message in chat.
01:25Yep. So, this is open hours for anybody to drop in and ask questions about the site, or otherwise I work on maintenance. After last Thursday's much higher energy stream hosted by Chill Codes, very interesting to see what a serious Twitch channel looks like. So when folks aren't asking questions, I work on the website. And a lot of that is reviewing issues, reviewing pull requests, hopefully merging pull requests. Let's take a look.
02:26I know some stuff that's happened over the weekend. Let's just go one at a time. Yeah.
...40This one is about improving the score display of stories, because we are starting to get into the neighborhood where it's not implausible that we see a four-digit score, which does not fit into our existing layout. Yeah. So let's take a look at this revision. Oh, and I gotta grab the number here for my notes.
03:27Oh, the boss just arrived. We'll see if he goes up on his perch. Do you want to say hello, sir? No? No. Alright. That's... What is this?
...59If this replaces it, this comment doesn't really add anything. And it has odd formatting. Why would this get called without a comment?
04:40Call to output our score.
05:17chinmay22222 is there a plan to allow blacklisting/whitelisting combinations of tags? i don't want to see go+plt because i think the language is not very smart, but people will also tag cli tools written in go with "go" and i do want to see those
chinmay22222 hmm
I can't quite imagine what that UI would look like.
gtfrvz choppy audio
filter tags kind of that would be really a pain in the ass to to do via
bsandro hello!
should be better now sorry about that thank you gt i'm off my stride what with forgetting the thing so chin may the the implementation of it would be painful like real painful unfortunately and the ui is a little complicated but i think you could do it with an ad block rule really cheap so if we picked this oh actually there's even a better one right
graefchen Hewu do ~ Chat and pushcx limesHi
yeah let's pick this one because it's plt and rust so if we said we want to find any story where are we here although even if you do block the story you'd still end up seeing the comments
Yeah, it would really have to be server-side.
This would get you like half of what you want.
Yeah, so I think the ad block rule you want is going to be... Where'd that go?
Yeah, so we've got a couple of Rust stories and a couple of PLT stories on the page.
So if we said...
Story has.
tag.
Is it not tag.
07:57Is.
08:06guess i would probably say li i'm just used to that one no li story has a tag that has the text actually no we have they do generate that's you could say a story that has the tag rust and has the
The tag plt.
Yeah.
pushcx ##li.story:has(.tag_go):has(.tag_plt)
So if we change rust to go, there's none visible right now.
chinmay22222 amazing, tysm!
But if you put that in your ublock origin config, that'll at least block the stories for you.
It won't get you the comments if you're reading off of this page.
But it's most of what you want.
09:07yeah so i'm i'm just trying to think through like i understand your use case there's a bunch of complexity both ui and back end to implementing it and it this is the first time somebody has requested that kind of feature so i
I don't know that it's something I want to accept as a feature request, because it's a lot of complexity for a really niche case.
And I know it doesn't look it, because it's on the homepage, but the way filtering works kind of ripples through the whole system and touches a lot of things.
chinmay22222 yeah a ublock rule is enough for me!
So I'm a little reluctant to take on that much complexity.
All right.
Anyways.
If you have other ideas, happy to kick them around.
Let me throw that on my topic list.
Hiding stories with combinations of text.
Yeah, I know my list is off screen.
I'll bring it on later.
All right.
What did I say about comments?
10:46I didn't catch the style issue before. Or.
11:01Yeah. All right. So are there any other calls to score for user?
...12No. All right.
...25The comments not gone.
...51graefchen UBlock origin is really really handy for that type of story filter. limesNoted
Ah, great.
Yeah.
I kind of wish Rails was a little more component-oriented because this only needs to be scoped to the stories stuff, but yeah.
Yeah, I was just thinking about that.
Years ago, we ran a fundraiser for donating to Unicode Consortium.
And I knew that some people really wouldn't wanna see, we had like a little progress bar because we were aiming to be a gold sponsor, didn't quite make it, became a silver sponsor, which was nice.
And when I announced it, I put the uBlock origin rule in there of, hey, if you block this ID, you will block the little progress bar and not have to see it.
And I think that helped a bunch for,
tamping down on the annoyance factor of doing a thing that a bunch of folks were not going to be interested in seeing.
13:12Alright. Alright, I think rather than ask them to rewrite this comment, I'll do it. And then I think this is the only remaining place score for user is called. So yeah. Upvoter score to be nil. Why would comment ever be negative or nil? It shouldn't be.
14:17Yeah, this is nil, this whole template is broken.
Same here, yeah.
And now I would like to know what this PR used to look like and GitHub doesn't show it.
There was a article just the other day on
pushcx https://lobste.rs/s/kiqqjt/anno…
lobsters about someone making a code review tool that they called flirt they're a student and it's very young sounding not the student the tool in that you know I look at it and it prints an entire hash when it could print the short version and
It's explicitly based on the somewhat famous Jane Street interdiff style of reviewing.
I don't know.
It sounds like it's going to be a long time before there's a usable software, but something that is better than this would be nice.
15:52Throw this up.
16:14And then grab that fetch.
...24I'm where I think I am, right? Yeah. Let's pick a new one on main. That's that. So let me talk through that. Deleting this, because this is used in a context where it can never be nil. And I don't like adding a different return type to it. I don't know what's going on with this indent. That's not a style we use. This is explaining this function in terms of one that no longer exists. And then these last two I mean this at this point Ruby is high enough level that this is just reiterating the. text of the method in a slightly different like. This is the code that's just below we have pretty descriptive method names and everything so.
17:50All right. So there's that. Let's see if there's any other polls ready to get merged. But I have to go back, not forward, because what I really want is a poll request sorted correctly by how recently they were updated, not by, I don't even know, whatever GitHub defaults into and will never fix. And even though these things aren't blue, all of them were touched since the last... How is this touched? Is it stalebot again, even though I just... Because stalebot's going to run every day, isn't it? All right. Ah, so this one on dev container, Chael told me a little about, I think she talked about it on her stream too, but she was using Docker for her dev container because she contributes to many projects and wants to have an easy setup. And most importantly, if she comes back to a project after months, a setup that is actually in working order and hasn't been broken because the operating system bumped to some version of a dependency,
19:39This is the kind of thing that's going to force me into actually learning Docker sometime. Oh, nice. That's clever. Let's review code before we click the button. Always, although the odds that, you know, Chael is a bad actor are rounds off to zero. So this is a different file. Wait, what is dev container? I thought this was just, this is a different project that's not a Docker file. So this is a hassle of audio communication. Every time she said dev container, or a development container, I thought she was talking about our existing Docker setup. I didn't know it was a separate project. So it's like a Docker container, but like what does this do that Docker doesn't?
21:20I have no idea what this project is doing besides being... Okay, so take the Dockerfile we already have and then add some basic tools it will need. I don't understand why this isn't another Dockerfile. Does anybody in the chat maybe use this dev container app?
22:21Oh, it's not using our Dockerfile, it's creating its own Dockerfile. Except its own is also Dockerfile.dev. The existing one is for dev.
...45That's not the file name of the existing one, right? It is the file name of the existing one. So it's... It's kind of a Matryoshka project.
23:21I get nervous about maintaining two different setups for development that I don't really know anything about, and the fact that the two of them look so similar...
...51So a lot of this is just pulling the setup steps over. We had talked about reorganizing this, and it made sense to me to clang. Am I? Why would you need clang? A Mac specific.
25:06easeout I naively think devcontainer is like a MS/Github/VS Code embrace and extend thing. But maybe it's more generic like LSP turned out
Ah, is it from Microsoft?
I didn't catch, ah, I see, I didn't scroll down to the footer.
That's very plausible.
...22So like this, reorganizing this stuff is fine.
...33This is fine.
...39So now there's a Docker Compose YAML plus a .dev containers Docker Compose YAML.
26:35second dev container specific compose file has been added this has the app container using sleep infinity as the command which allows the developer to shut down the server to do things without shutting down the container this also has a hard-coded ruby version because a dev container can't be passed in arg like make docker serve does wait so does this Yeah, we're never going to keep this in.
28:18RuggMatt vs code definitely uses dev containers... it's handy to setup the dev environment with docker when opening vs code with like a one click button kind of thing. it may also help if you wanted to use github codespaces to develop.
Broke, Matt, if you used it, why is this different than the existing Docker?
And I think you were on the stream on Thursday, right?
RuggMatt i was on the stream yes
You're one of Chael's regular viewers, I think?
29:02So it looks like the customization that's happening at this layer is just adding a couple of dependencies that we could add to the Docker file if they're important. And then this command to run and automatically set up the fake data, which is a convenience.
...28But I don't know what else we're getting. And she said something about sleep. yeah that the command is sleep infinity so then there's this other yaml file that what a weird ass tool that uses both json and yaml
30:00Albynton hai
understand why these why this config is split into two different files because it seems to be doing a lot of the same stuff like the port forwarding like we have port forwarding 3000 but then we have forward the port 3000 to 3000 I guess this is saying also start a container with
the database, but again we could just shove that into the existing one.
I'm really confused.
31:09What's its proper name?
...37RuggMatt what does the existing docker setup look like? Is it only used for dev?
Yes, the existing Docker setup is only used for dev, and it's just this one... What is this?
...56Where the hell did I accidentally include this file? Sorry, I'm distracted now by...
32:09Having accidentally included a file last week that somehow I piped the wrong thing. Yeah. All right. Well, at least it's harmless. That's so irritating. That's the one. Little knock I have on Jujutsu because you don't have to manually stage files. It's very easy to accidentally include extra files. So if I accidentally create a temp file or deliberately create a temp file, like in that case, it's very clearly I was piping something around and I typoed the command and it accidentally created a file, which is one of those things that happens, I don't know, every couple of months on the command line. Hmm.
34:14lolcatswag hellooo everyone
Howdy, lolcatswag?
I don't think I know your name, but you don't have the first time chat.
35:45graefchen Heya lolcat limesHi
GitHub, just let me see things.
36:24RuggMatt I think the json file just tells vs code (or whatever other editor) how to setup the dev container. the yaml file is just standard docker compose config.
let's just stick with one topic at a time i was going to say like the rest of this stuff looks fine json file tells vs code how to set up the dev container the yaml file is just standard docker compose config then why is the yaml separate from the existing
RuggMatt yeah i'm not sure... it could probably use the existing one
rotated8 Why is the Docker Compose separate from the Docker Compose?
PuercoPop Docker compose is different
so like we have an existing docker file and we have an existing docker compose yeah like this is almost identical why don't we have a second version of it this doesn't i really don't
PuercoPop its about container orchestration
PuercoPop Dockerfile defines how to build an OCI image
PuercoPop but things like network setup
Yeah, RotateAt8, that's kind of, I mean, this is called Docker Compose, but it's based on, it's about container orchestration.
37:53PuercoPop or even starting two containers (one for the db one for the app)
Things like network setup.
38:53rotated8 The dockerfile gives you an image, and the docker compose orchestrates several images. I think this one has lobsters and a db
PuercoPop they are part of docker compose
PuercoPop (or kube play if you use podman)
I don't actually use Docker or pod pan.
So
39:24All right, so this one is stalling out.
PuercoPop yeah no, I agree with you that maintaining an 'easy' development environment that the maintainers don't use is not a good idea
I remember this one.
...44Moving web engines to active job.
I mean, I was...
iffy about adding the Dockerfile in the first place, but I had enough inquiries from folks
that I could get that it was becoming standard.
PuercoPop the target audience is people that are not as likely to self-troubleshoot
But if this is like JS where there's a new standard that just layers on top of last year's standard, I guess it blows my stack pretty fast.
40:31All right, so let's. Let's get this merged manually.
...43PuercoPop and if you don't use it is harder to remote troubleshoot
Which probably the easiest way to do it is.
...55Yeah, so let's add JJ. Get remote. I think it's add, not create, right? Yeah. Add.
41:21I'm grabbing this URL off screen because I, as I'm saying, copy and paste, don't typo. I have a typo instead of copy and paste. All right, so let's do that. Let's fetch, which should hit and grab the Viv Shaw remote. Yep. So let's make a new commit that is 1626 and it's going to have the parents main. And.
42:23Merge mode tracking branch. Yeah, so that looks good. So let's look at what were my last two requests. Return if dev from the same thread. NQ after linked in the testing thread. Where was that?
...53so that's story persisted in stories controller.
43:28Can't return out of transaction block. Why do we worry about that?
44:08Why do you say return and then have a comment that says you can't return? Well, we will see if tests catch that.
...39Where was this? NQ after transaction commit Firefox goes in the job. And since we pretty much want it for everything, let's put it in application job.
45:42The PR has a green bill, but I have three fails. So here's what that comment was about.
46:03Ah, so it's can't return out of transaction block. No, it's not about being out of the transaction block.
...19It's about whether or not this stuff up here already redirected.
Yeah.
veqqio Hey
The Rails way of making features submit.
The Rails practice of making return and redirect a side effect is biting us.
...57so wait this had a return here and the build was green on the pr right it's not this one that was failing it's calling render down here if it falls through
47:36which case this code is a mess, but does this do the same thing that we're expecting? Yeah. So if the story is valid and not recently posted, or if it is a resubmit and you write a comment, which is broken. There's an open issue about that one. Then in a transaction, we'll save the story, and if it saves, and now we're testing resubmit again. Yeah, this has just grown pretty complicated over the years. Why bother creating a read ribbon, because when they view the story they'll get one anyways.
48:48yeah. I guess it just. saves one database round trip except not really because when they load the page 100 milliseconds later we're going to bump that timestamp anyways.
49:07I think that's fine.
...18And then in this case what we really want is just this up here.
...51I don't love how much nesting is happening here, but I don't want to go down the rabbit hole of trying to clean that up.
51:20And then what was the last thing? Oh, do.
52:17Do you wanna, hey, GitHub even realizes I merged it.
...49So, did I put this in the notes? Yes. Alright, this... Oh, this countercache. Huh, I didn't know somebody was picking this up. This I did September 1. I must have seen this. Oh, look, I have definitely seen this.
53:22OK, so this one has just kind of stalled. And there's not really anything I can do on this.
...44I'm not going to hassle them. So FedEmp is a new contributor who's made four or five PRs about front-end things mostly. Oh, more nested selectors.
54:17Pew reviewed. I don't know what that changed. Because I have not actually viewed this before, I don't think. Why is there a blank line?
...45And in this search. Is this introducing a new breakpoint?
55:20And 480 and 481. All right.
56:32Always say thanks. Where's search? And then shift us into a little layout.
...54Yeah, I'm not actually seeing a bug here. I mean, a little border is a nice improvement or a little margin between them, but almost overlapping is kind of different from actually overlapping.
57:19Oh, I didn't grab it for the notes though.
...31All right.
...40Oh, yeah, so this is great. This is a improvement for our contributors. Brakeman is our security winter and. It has a switch called ensure latest and when. break man runs it checks it startup if there's a newer version available and very conservatively halts rather than run an older version, because maybe the new version catches something that affects you and you want to know immediately. So. This always ends up catching up some random contributor who has no idea why a security scanner is yelling at them because the error message is not the clearest thing in the world and we can't customize it to add text like, hey, please tell the maintainer. So GitHub acquired, Microsoft years ago acquired Dependabot and it does give warnings about cves that affect us and it has an option for opening prs about dependencies and if we just do the one dependency we will get what we want better so this looks excellent And this of figuring out this eight layer lines of YAML is why I filed this as an issue rather than try and do it myself because I knew that would cost me like an hour.
59:56WhiskyFueled42 hey pushcx - hope you are doing well
Little distraction.
Hey, Whiskeyfield.
Haven't seen you for a sec.
Yeah.
I'm doing alright.
Alright, so let's just go ahead and bring this down.
01:00:36So this one has hung out for a minute and came up a little on Thursday. What point are we at here? Right, this nested conditional. okay so let's see okay so they didn't force push so github will actually deign to show me the code changed so this says if it's disownable do this yes this is the way i expected to see the code organized with the is moderator afterwards beautiful ready to go let's run the workflow let's put it in the notes all right But this will be ready to go. Where's my build? Where'd the build go? I don't know. OK, if I reload, there's the build. Why is this failing? Did the Brickman config... Brickman config still has ensure latest because they're on a branch.
01:02:14So I can merge without that. If this test goes green, we're still good to merge. Yeah.
01:03:11All right, so when that's done, I'm going to click the button.
...22Pick that up after I've updated the issue. Right, so the other thing is when comments are deleted, there is a code path for users to undelete their own comments if they think better of it. Comment deletion is pretty uncommon, so comment undeletion is very uncommon. That reminds me, speaking of deletion, has that been a week then? No, I was giving this person a week. There is a, has it been six days or did that round funny? Today is the 10th. All right, tomorrow. So there's a user who has posted some insults and then flew under the radar by when the comments were flagged, they would delete the comments. Which I should double check that doesn't remove them from the existing dashboard. We could do better with where Chael is headed with that page, but yeah. Oh, come on, cat. Why are you knocking all my stuff around? There we go.
01:04:42This is the exciting part of programming is literally just waiting for a thing to finish. Great. Let's go ahead and merge this.
01:05:15epidemian_ i have used commend undeletion! because i accidentally submitted the comment when trying to preview it, and so then i deleted and undeleted it after having finished to write the comment
so this came from 1582 which good is still open ah epitomain did you
You can't edit a comment when it's in its deleted state, right?
epidemian_ yeah, exactly
So you most of like copied the text off into your editor and then finished it off and then hit undelete and then edit and put it back the way you wanted it.
01:06:19yeah that kind of workflow it would be nice to allow you to edit it in the deleted state but honestly if we're doing anything around that i would really like to improve some kind of audit logging or history for edits because right now that history is
I can see your posts in the access logs and we are small and low velocity enough that I think maybe twice in eight years has someone tried the, like, I will post something mean and then wait until I get the response I want and then delete, you know, edit out the mean thing I said.
Like, it's a very rare thing.
epidemian_ maaaybe allow "full delete" if the comment is deleted in, say, less than a minute? "full delete" in the sense of not even showing the "comment deleted" state
So our lack of tooling for it is fine now, but it's one of those things we can only get away with because we have the invite system.
Yeah.
01:07:34Less than a minute. Yeah.
...42I'm not.
Like what's the use case for that epitomate?
espartapalma hi hellow
Is that something like, because the only thing that comes to mind where we would want someone to be immediately deleting a comment and treat it differently is, you know, Alice asks a question.
epidemian_ use case: i have fat fingers and i submitted unintentionally
Bob loads the page.
Bob writes a response.
Carol writes an excellent answer.
Bob finishes his comment.
You have fat fingers and submitted intentionally.
Yeah.
Oh, so I was just thinking of like redundant comments, but the hassle with redundant comments is you have to do a full page reload to see if there were any other sibling comments.
When you post a comment, you see it
appear on the page live but we are only replacing in your comment this unintentional submit so the hassle with that use case is if we do that any kind of job that notifies around the comment has to not send during that period of full deletion
01:09:13Because, you know, then someone, the person you are responding to, Alice in my previous example, gets a notification that Bob replied and then gets the text of Bob's reply, but clicks through and does not see Bob's reply.
And if there isn't a tombstone there and there isn't something in the mod log that looks like bad behavior on the part of the admin, rather than
You just have to know that there's a feature that the author can immediately remove a comment.
Yeah, yeah, I think that's actually so I'm thinking about the background jobs for notifications and they actually already.
don't go out immediately because we want to let people use the edit window, because you can edit a comment for the first however many minutes.
And so we delay the jobs to give people a chance to catch typos or, oh, when I read that back, it really doesn't sound like it sounded in my head.
Let me fix that.
The real problem with a full delete is
epidemian_ yeah, you're right. i'm a software developer too, i wouldn't like to suggest things that make everything more complicated hehe
anyone who sees the comment, which is going to be the person who's replied to, and anybody who snapshots the page on archive.org, anybody who has the RSS feed, anybody who has email mode enabled, all of those folks are going to end up in a situation where they have a legitimate record of a comment that exists but has vanished from the site.
And that looks real bad.
Yeah.
It's worth thinking of, though, because I do...
I think the code base, as much as possible, should try to support commenters so that they look their best, so they can put their best foot forward, they can edit comments to fix typos or correct explanations.
I don't know.
I think the cat grumbling on his way onto my lap just came up on the mic because that was a big grumble.
Hi, boss.
You want to go up and be on stream?
No?
You want to sleep on the mouse and inconvenience the whole stream?
That's a much better plan, sir.
Yeah.
So I take your point, and I do want to support the accidental submits.
Can you control enter to submit a comment on the site?
I never do it.
Or are you typoing by hitting tab and then enter?
01:12:11I don't think we get a lot of these and I don't know how I would find them in the database. Oh, and of course, hello again, Espartapulma. Espartapulma? I can't talk today.
...31Solar flowing.
01:13:11I think they call it ModCommonsController, right? That's not the... I don't know what it is about this Firefox profile, but it opens tabs in the wrong order where it's like, I'll just open a tab somewhere way down here instead of next to the one. So that's not what I wanted. Come here. And the fact that it loads it next to and then throws it down is... I understand why. web apps are janky and show intermediate state like that it's pretty obnoxious that the browser is getting that same kind of jank all right so there's that
01:14:48Why have I not reviewed this? I have seen this.
01:15:02I thought I left a comment on this.
...10I have to fix this tab ordering thing.
...20It's going to make me insane. Insert after current. Okay, let's trust you, robot. This is the sort of thing where you've probably stolen it from enough comments. Yes, that's what I want. All right, so 1725. All right, so hang on. No, it still did it. Is it because this tab hasn't reloaded? Firefox, what the shit? I guess Gemini lied to me.
01:16:18Where do I have to restart the browser?
...32Right there. What is that? Three is very suspicious of. Is this one of those cases where we have like six Different settings that are insert related after current focus related after current.
01:17:01From true to false.
...22reopen so related tabs open adjacent to the current tab i'm i'm trying to find out what the hell related means because i almost certainly want to toggle this what's an unrelated tabs which open at the end of the bar there's a pair of hidden settings yes so this is getting very firefoxy where what the does related mean
01:18:12No, you're still fucking doing it. Firefox.
...23This is changing the way I act in this browser when I'm streaming where I have started like opening lists of PRs and then I work them in the opposite of the order I want because Firefox opens the tabs in the wrong place. And it's pretty obnoxious that it does it even when I change the setting.
...48Okay, so the self promo guy.
01:19:02Put it in the story guidelines instead of doing the feature and didn't use the suggested text, they just duplicated the
01:22:00and then continue to overkill it.
...57all right fox i will fight you is this something stale
01:23:26so i asked a couple of questions and they touched the code but it still does this instance variable set stuff i don't understand what i mean i'll run the workflows because this is harmless but like They're not actually fixing the stuff I've asked about.
01:24:11All right, I'm just going to leave this one. I've said a couple of times what I want out of that one, and I'm not getting it. Maybe stale bottle nudge them.
...32So speaking of getting odd things, no changes to this pull request that, yeah. This is not fixing this at the right level of abstraction.
...59See if anything comes of that one before. Stillbot gets hit as well.
01:25:54So what do we have around novelty logo? All right.
01:26:16One of my favorite Easter eggs on the site is that the logo changes a couple of times here.
01:27:17How big is this SVG? Looks like about half a K, right? No, it's a full kilobyte.
01:28:56Need to duplicate the rules from application high in both light high and dark high. Let's double check.
01:29:30I guess the answer might be that I've tried to keep those files only color.
01:31:46Why is this? I just left a comment. Why is this unresolved? My comment is still here. So here's another GitHub's front end has gotten flaky, like it's in an impossible state. Let's see if my comment posted or not.
01:32:20so it did post but it didn't unresolve so my comment was invisible so there's a combination of this resolved ui is bad and the front end failed to maintain state correctly
...56Let's see where this one's at.
01:33:33Understand not wanting to give up the code.
01:34:09What am I trying to say here? The point of the... Speaking of, don't like to suggest things that make everything more complicated.
...46This one is not something that will show up here, but I also got an email from someone who complained that the page layout was broken, but it was this very self-centered guilt trippy thing about your site is so simple that it should support old browsers fine and it was like trying to slip in an insult doesn't make me think that i should cater to someone but regardless this has got to come back open not this the issue
01:35:51This is not. Oh, right. This was something that Fedamp caught.
01:37:33So it's 1752.
01:38:14Did I click Merge on something and I wasn't looking? Yep. Wasn't thinking about it. So we'll pull that down and we'll rebase, which is easy enough here. Rebase P onto main GitHub.
...43Good.
And then we'll push that up.
MartinJaniczek I should dedicate one weekend to trying out jj
And we'll get that deployed.
Because for those users in the older browsers, that's pretty obnoxious and kind of breaks the site.
Hey, Martin.
Yeah, you know, I got into jujitsu through Steve Klabnik's tutorial, I can find the link in a second here.
And
Honestly, it took me about two hours to work through most of the tutorial, because he has like a section at the end that's more advanced.
pushcx https://steveklabnik.github.io/…
And then I just started playing with it.
Yeah, here we go.
This is the one I'm thinking of.
01:39:37Where's the I wanted this. So yeah, I think in the first two hours, I worked through the first three sections. And then I read the like, okay, how do you work with GitHub? Because right, I'm pushing to GitHub. And I kind of like skimmed these things about an honest branches. I don't really love anonymous branches in jiu-jitsu yet. It's been a couple of months. I've done this other stuff. Now I've played with this, but yeah. I think you could just do sections 2 and 3, skim 4, read 5-2, and you're set. It's more... The reason I'm beating this to death is I think a tutorial is great because you can work through it and practice it and do it with your hand more than just read it. And then once you actually use it on a project is when you'll get comfortable with it fast or you'll say, this doesn't work like I want it to work and I don't like it at all and I don't want to use it. So the faster you get to a little bit of competence to play with it on your own project, the better. Yeah, I haven't thought for a minute about these real world workflows. I guess I'm always doing the edit workflow. Ah, shit, the bug was 1793 and I said the bug was 1752, didn't I?
01:41:30Yeah, I said 1752. That's not worth a forced push to fix.
01:43:13All right, so this is the one I just looked at. That hasn't had an update. This one is new, new, new, and new.
...37No, this is the layout one I just reverted. All right, where's the bolding?
...57Actually, we just fixed this, didn't we, by reverting. Yeah.
01:44:42Actually, do I still want to include that?
...53Really, what I would like to do is not see this again.
01:45:04Where did they put these commits?
...21I don't understand. This isn't a pull request, but they added commits. Where did they add commits? Because I don't see an open PR. Is it this one? Yes. How did I miss this when I was opening all the PRs? How did I miss this?
01:46:01Maybe I'm tired. All right.
...40What's the hover?
...51It is actually nice to have buttons slightly change color when you hover.
01:47:07What do I do with this one?
01:48:31Oh no, a dead site. Yeah, that's a dead site. That's a shame. Oh, come here. Let me just do it. So I was just talking about things we don't have to do because of the, invite system and unfortunately this site removed the invite system but then didn't really stay on top of moderation which they very much have to so they're getting hit by spam bots and are defunct
01:49:49There is so much spam on the web that if you wanted to run lobsters with open invites indefinitely, i think realistically the site would need probably six months of work from a full-time developer adding anti-spam features just to start but spam is an iterated game where you are in an arms race with the spammers So there is some amount of ongoing work you would need. And it's things like... Oh, man. And it's only six months if you integrate a third-party spam detection service. It's significantly longer if you try and do this stuff yourself. And I'm thinking of, like, Akismet. There's got to be a bunch of others. And then there's, like, you have to deal with signups and detect spam and... Oh man, it would never end. So this should go closed.
01:51:19This should go closed, right? There it goes. Pretty minor GitHub UI bug, but I would count that as a second bug because usually that live updates.
01:52:00dlamz i also think lobsters would be a lot less enjoyable if it got hugely popular
dlamz there's something nice about recognizing names
DLAMs, yeah, probably.
graefchen Doing Spam and Moderation on the open web sounds like one heck of a difficult job. limesLurk
One of the other values I've said on stream a few times, one of the other values of the invite system is it gives us a time to acculturate people because otherwise if we were linked from a more popular site like Hacker News, that's a thousand times bigger than us or Reddit, that's a million times bigger than us.
grave chen it's also a traumatic job i mean you have to deal with stuff like like child porn well child sexual abuse material to use the proper industry term for it that's me being old like for c-sam you take on a huge amount of like legal responsibilities and
It is very traumatizing to your moderators to see that stuff.
Or there's gore videos or other things.
Like, it is not just a hard job.
It is a traumatizing job.
pushcx https://bsky.app/profile/rahael…
There's a woman named Rahaley.
Yeah, I've linked her stuff before.
But she did...
trust and safety before the industry had that term.
She did it on live journal and has written a number of threads about moderation that are really good.
so if you search her posts for what kind of keywords would get you there, spam, moderation, trust and safety, probably the word accounts,
Almost certainly things like trauma, burnout, PTSD, tools.
Yeah.
I know recently she's been posting a bunch about musical theater or maybe it's just non-musical theater because she just went to see a show, but you search back and there's a lot about moderation.
01:55:00You know, I put it... I've been slowly, like, reiterating versions of this in the readme. Like, where is it?
...15Yeah. The hard part about starting a community is not the code base a new social site has to solve, the chicken and egg problem that nobody will want to participate on a new site until other people are participating. Before you start working with the code, make a plan for how you'll reach potential community members and what they'll find engaging about the early days. If you don't attract enough early users to reach a self-sustaining level of activity, the code doesn't matter. And then, yeah, the other part of it that might be... Let's put it in the place people will see it. Config, where is it? Production? I think it's production. No. Config application. That's what I thought. I must have typed up.
01:58:01Not a happy note. What a very valuable note to add. Yeah. Oh, that was 1794. Yeah. All right. Oh, it's not high contrast.
...29All right, so, oh, there was a little small thing I wanted to mention.
A thing that has come up a few times, share ID, don't need that crap.
pushcx https://old.reddit.com/r/Twitch…
A few times on the channel where this channel gets enough viewers that people have said like, hey, why aren't you a Twitch affiliate?
And why are you,
I mean running such a lo-fi stream with no promotion and no other things and the real short version of it is I ran into this link I think it went by on blue sky so this person streams 160 to 250 hours a month so that is greater than full-time job levels and
They have been at it for seven years, and they have an average of 100 to 150 users.
This channel averages, I don't know, 20 viewers.
And that might be rounding up, because when the stream starts, we're usually around 10 or 12, and then after an hour or two, I slowly edge up to 15.
So if you look at this person's earnings,
in one
month, they earned 2500.
In one month, they earned 1800.
In one month, they earned 3700.
And those numbers kind of do not move the needle for a software developer.
I mean, this person could be changing a career from software development if they love it.
But like,
Yeah, so stream 292 hours so someone did the math down in the comments, but their effective hourly rate is something like $10 an hour.
So.
It's a little better than federal minimum wage, but I don't think that reaches Illinois minimum wage.
And as a contrast.
This site has gotten so crudded up with pop-ups.
We're gonna have to close like three or four pop-ups here.
Yeah.
Customize.
Reject everything.
And then, yeah, then there's another thing.
pushcx https://www.levels.fyi/?tab=lev…
So this is, when it loads, it just picks three random companies.
Here, I'll share this one too.
corbob "federal minimum wage" in the land of the "Free" where minimum wage is less than half of many other countries LUL
But this site aggregates data about offers given to software developers.
And so if we look at these like senior.
Hey, Korbob, we don't do too much heavy politics on this channel.
02:01:46It depends on the company here, and I cannot imagine myself really working at JPMorgan Chase or Discover.
corbob fair, apologies
but my experience would put me up in the senior level or staff level.
And let's pick an actual tech company.
How about Apple?
If I was allowed a free hand on fixing issues, easy cat, fixing issues in the operating system, maybe I would be a senior software engineer or a staff.
I don't know their levels, but like,
rotated8 over seven minutes of ads an hour seems like it would hamper the interactivity you do so well in these streams, too
You look at a compensation number like 360k a year and the Twitch level of 36k a year or 50k a year does not really move the needle.
Maybe if I was a teenager, but like, are you kidding?
Oh yeah, that's seven minutes of ads.
Yeah, Chael, one of the reasons it caught my eye was Chael had mentioned she does a pre-roll ad where people have to sit through a couple of minutes of ads to start watching the stream.
And then I think even so, it still has intermittent ads.
I think that would be a vastly degraded experience to watch.
But I am also trying to say that the numbers, the actual streaming is not profitable.
There are streamers, so let's see one, two.
That's probably good.
We're going to make a little chart.
There we go.
So I have put.
So this will be like number of viewers slash revenue.
And this will be like percentile.
So for the top, I can see, I actually, I can't get, we're going to double the percentiles.
There we go.
The chart for how much money and how many viewers do you have?
looks like this yeah there we go so there are 40 little dashes so each of these percentiles is like four percent right did i do that right 40 i can't do math in my head when i'm talking so yeah there's 40 dashes each of these is two and a half percent there we go
So the famous streamers are this graph, the top couple of percent.
These are the people who have many hundreds or thousands or hundreds of thousands of viewers.
And then I'm down here.
graefchen I think only 5% of streamers have over 5 viewers, or something like that .... It is mindboggling
where if I have 15 to 20 concurrent viewers, that puts me somewhere in like the top four to 7% of streamers.
There are a few of these sites that kind of aggregate data, but they're all third-party scraped data.
Cause yeah, something like 5% of streamers have over five years.
That's roughly correct.
Yeah.
I'm a little above those folks with five viewers.
And then I didn't put any more underscores in because there is a very long tail of people who get, call it zero to two viewers.
02:05:52So it would be an enormous amount of work to attempt to crawl up into the top percent.
And realistically, like everything below the top 1% is single digit percentages of what I could earn as a software developer.
I mean, maybe double digit percentages, but I don't mean to exaggerate, but like, yeah, if this chart was just dollars, like,
Honestly, my actual earning potential as a developer with a lot of experience in startups is here or up here.
Well, and if I start my own, potentially up here.
Like, it's ridiculous.
So anyways.
I have said this point a couple of ways I just really liked that link of the guy who shared numbers and you look at it and.
There I hope people are not streaming for the money because they're not getting it.
I don't know the the flip side of this is streaming is big, so you know these buckets the the top 1% bucket could be what.
Maybe.
Maybe single-digit thousands.
I think there could be 5,000 streamers who are, like, earning not-poverty wages globally.
Yeah, I don't know.
graefchen Just earning from Twithc that is (not forgetting the crazy sponsorship money you *could* get). But you are probably better of when working a normal job and then streaming for fun (and maybe getting some extra money).
Because streaming is very, very popular, which surprises me.
02:07:58Yeah.
Oh yeah, and you know, the sponsorship money, hopefully that person is making other sponsors that wouldn't show up in the Twitch dashboard.
Because then, you know, number one, you don't have to pay Jeff Bezos a cut.
But also, it's potentially much higher.
And that's things like, I'm going to wear your hat on stream.
I'm going to talk up your product on stream.
I'm going to play your video game instead of somebody else's.
I know they do that kind of stuff.
dlamz gambling sponsorships are huge in certain ecosystems (counterstrike)
dlamz tons of money
I couldn't tell you off the top of my head, because I don't actually know a lot about streaming, that that really moves the needle, but like...
graefchen Financa like this, or however it is called is fairly intersting. limesNoted
If that shifts this graph to the right a little, I'm not sure it would be one full ASCII character.
Oh yeah, gambling?
Well yeah, and there are people who just play casino games on stream even.
I've seen...
know somebody who streams and they've mentioned that they've had inquiries for just obvious scammy casino apps and the obvious scammy part is if they play the casino game on stream
graefchen my brain is way to fried today, i guess limesO
something interesting and you know the game will be rigged for them so they can have an exciting stream and then the numbers that they will get paid to throw that up on stream are significant yeah anyways like i have said it a few ways everything in social software is log distributed like this and
especially anything like fame, is even more so.
And compared to the baseline of just go get a goddamn job as a software developer, the idea of streaming Twitch significantly is I do this to try to contain my lobster's time with some success.
tenac23 Damn, I thought about starting at some point, guess not quitting my job anytime soon
Oh, actually, have I?
Are there any?
Did I close any PRs?
Because I did actually peek at things over the weekend.
02:10:32Yeah, I saw this one, I think, on a stream.
Yeah, Tanak, just... And don't listen to me.
corbob I found streaming was a great way to timebox things and get things done that I wanted to get done but otherwise wouldn't spend time on.
Like, I'm obviously not in the top 1 or 2% of streamers.
I'm realistically, you know, 5, 6, 7, 8 or something.
Yeah.
You know, Corbob...
I also find it's not great for timeboxing, but that's I'm very hungry for contributors.
And if I give them feedback faster, they're more likely to take on issues and open pull requests and complete pull requests.
And so it still draws on me and then
If I wanted to be maximally productive, I would sure not be streaming because keeping up the patter and knowing that I'm on stage doing it knocks like a quarter to a third off of my coding ability.
I literally, I make more typos.
I can see myself writing things harder.
I struggle to write straightforward sentences.
graefchen Streaming is interacting. Interacting when coding makes you loose focus. Its ... complicated. limesLurk
look back at the stuff that i wrote on stream and i'm like oh that's goofy why did you say it like that and it's not just having the extra day or two of reflection that i'm coming up with great ideas it's smart on stream all right yeah so over the weekend we had a layout bug
That's fixed.
Oh, and this filters bug emerged this off stream too.
Why did I close this?
Was this actually fixed?
02:12:491784 see like you're seeing me struggle to remember something I should know cold because it just happened last week. Okay. yeah. yeah so I try and keep half an eye on the chat window because. I don't know, the original goal for office hours streams was just a place to have meta conversations. If you go back and read my initial post, I was just like, yeah, we'll just hang out and talk about site stuff and I'll demo the code base. And if folks aren't asking questions, I'll do a little coding. And the streams are now mostly coding. On the other hand, we've also had so many contributors that even if I'm not succeeding on the time boxing, and even if it's not a enormous piece of meta discussion, the like, is it the code frequency? One of these graphs is just ridiculous. It's been a second since I've looked at the chart, but the, It has encouraged so many more people to contribute to the code base that we've made big jumps on stuff.
02:14:26It's not pulse.
graefchen gh. must. do. data. crunching. limesNoted
Was it contributors?
Yeah.
Can you spot on this graph where I started working on the code base?
Right?
pushcx https://github.com/lobsters/lob…
This is the one I actually want to load, yes.
Yeah, here we go.
Grab this to share, but like... You can see on this chart that I started streaming a little over a year ago.
And getting all of these contributions has been enormously helpful.
We have fixed a lot of long-standing bugs.
We have been cleaning up
have finished refactors and oh i'll get to that someday kind of stuff i mean even just on this stream things like fixing the score display that would have hung out until it really publicly broke the break man thing that's been irritating contributors i might never have gotten to that honestly because the the willingness to take on a bunch of code for stuff that mostly works it just doesn't reach
that level of priority, you know?
So... You know, I guess the other thing I'm saying is if you combine this crappy chart and this chart and my point about
Boy, does it not make sense for me to be streaming for dollars.
But then you look at all of these free contributions that experienced developers are giving us.
In a mercenary sense, I am streaming for dollars.
That's...
graefchen To a certain extend. limesGiggle
That's not at all the way to look at a gift economy, but the value of these contributions from people is substantial.
It is enormous amount of valuable dev time.
02:16:56What's this one? This must be when I added standard RB or something. to have a giant added and deleted. Yeah. This one was nice to fix. So this one was a bug where tag filters when logged out, which I usually just say.
02:17:28call them visitors to differentiate them from users which is not the greatest terminology in the world because it's never clear there's no like cross the web visitor means someone who's logged out and as opposed to being a super set of user so i guess it's fine for my notes but not for actual code right
02:18:16what is this pr oh yeah so the fedamp has caught up i did just click through this this layout issue this is a stacked pr then about was this breakpoint in another one how did this comment focused on this comment and i didn't look at the rest of it yeah this is one of those i made a mistake because i was streaming where i didn't read the rest of the pr i focused on the one thing and then i must have answered a question and gotten distracted i'm not adding important what That's not a shortcut I want to take.
02:19:55What's changing in the view? Why can't GitHub remember my preference?
02:20:14OK, so we're fixing a couple of things.
...23Taking this out of the box is probably going to break the page right off.
...44You know, speaking of all things streaming, I'm going to throw up the last call banner, because I think when I finish this PR, I'm going to call it a little early. I have a dinner to roll out to, and I don't want to be in a terrible hurry. And we just got a couple inches of snow dumped on us, so the whole city's moving a little slow.
02:21:40dlamz is the inability to page through user comments intentional?
I mean, this is a, yeah.
corbob What a coincidence, I was just dropping my car off to get the tires changed over when I got the notification you had started your stream :)
I haven't thought about field sets for a while.
02:22:03Ah, so are you sitting in the lobby of a mechanics?
...28corbob I am not, I got a shuttle ride home
Ah, nice.
...46corbob I learned my lesson the last 2 times I waited and needed thousands of dollars in work done.
Yeah, I was thinking I've seen Chrome Set for a while.
If it has been in since Chrome 1 and Firefox 1, kind of a venerable feature.
02:23:03Well, good luck to your car.
Widely available since July 2015.
corbob if I don't stay there then there can't be expensive work HahaThink
But then those version numbers imply something closer to July 2000.
Are you a baseball fan?
Because you're getting superstitious there.
Yeah.
Yeah.
...42I mean... I guess this is a little semantic improvement, but it really is just the same structure. That's fine. Oh, you're shotgunning it into settings. Okay, just... I was worried they were going to touch all of our different things that could conceivably be called a field set. which would be a lot of churn.
02:24:31I don't know what this PR gets us.
02:25:28all righty all right and then nobody's hacking on stuff right away all right i'm not getting to any of this stuff today yeah at least make sure i'm not leaving my repo in a weird state again but
I'm going to wind down here.
The next office hour stream is going to be Thursday morning at nine Chicago as usual.
And I will almost certainly fail at time boxing and look at issues in PRs between.
Yeah.
Yeah.
I think I filed Anubis as an issue, didn't I?
Yes, I did.
So I can take it off of my mental to-do list and I should just work on the username and the story merging stuff.
Things that are very particular about moderation and very site-specific issues.
Alrighty.
Yeah.
So I'm going to end the stream here.
Thanks for hanging out with me, folks.
Hope to see you on Thursday.
graefchen Have fun. limesHi
And until then, take care.