These are my bad records
Streamed
Reviewed and merged PRs for fill_flagged_cache job and story repo hidden scope. Discussed the Hatchbox migration progress and configuration challenges. Added the new concatenative tag after community approval. Fixed a bug where users who doffed their own hats appeared as moderators in the mod log (issue #1591). Tried to fix TomSelect sorting to prioritize βvibecodingβ over βaiβ tag. Explored jujutsu version control after trying Steve Klabnikβs tutorial. Discussed removing Keybase integration due to its abandonment after Zoom acquisition.
scratch
topics
PRs
fill_flagged_cache job https://github.com/lobsters/lobsters/pull/1586
story repo hidden scope https://github.com/lobsters/lobsters/pull/1592
hatchbox update
https://github.com/lobsters/lobsters/tree/hatchbox/hatchbox
issues
dupe reposts https://github.com/lobsters/lobsters/issues/1588
edited comment duped https://github.com/lobsters/lobsters/issues/1590
new concatenative tag
https://lobste.rs/s/7q3ntz/tag_proposal_concatenative
https://lobste.rs/t/concatenative
totp should autofocus input
jujutsu https://lobste.rs/c/v6err1
shove 'vibecoding' above 'ai' in tomselect
modlog error https://github.com/lobsters/lobsters/issues/1591
rm keybase
https://keybase.io/blog
https://github.com/keybase/client/graphs/contributors
https://github.com/lobsters/lobsters/pull/661
fold wiki history into repo
MariaDB [lobsters]> with actual_mods as (select users.id, users.username from users join hats on users.id = hats.user_id where hats.hat = 'Sysop') select users.username, moderations.token, act
ion, reason from moderations join users on moderator_user_id = users.id where users.id not in (select id from actual_mods);
+--------------+---------------------------------------+---------------------------------------------------------------------------------------------------+--------+
| username | token | action | reason |
+--------------+---------------------------------------+---------------------------------------------------------------------------------------------------+--------+
| cflewis | moderation_01j6ax48wpfb4vas8qgv8vmg20 | Doffed hat "Go Team": Left project | NULL |
| teknoraver | moderation_01j79djrajfa5a56bbpmb6msde | Doffed hat "Red Hat employee": I quit | NULL |
| steveklabnik | moderation_01j8myn90rey8axkbw0hntxfqe | Doffed hat "Rust Core Team": I am no longer a part of the Core Team. | NULL |
| xyproto | moderation_01j8n06kdrf5n92txy802evnz3 | Doffed hat "Arch Linux Trusted User": This role has been renamed to Arch Linux Package Maintainer | NULL |
| untitaker | moderation_01jajsjdd5fva8qdwgmc2es9gp | Doffed hat "Flask Developer": left project a long time ago | NULL |
| grahamc | moderation_01jat93zq7fgmr8dm6fc411g2c | Doffed hat "NixOS Security Team": not on it anymore :) | NULL |
| enterprisey | moderation_01jdgt4btvfvear3hphy79104f | Doffed hat "English Wikipedia Arbitrator": No longer arbitrator | NULL |
| kragniz | moderation_01jhzbz2mafxrsbmmr3trh760c | Doffed hat "OpenStack Developer": No longer a core developer | NULL |
| ianopolous | moderation_01jmsbwaqxf2bbwws92cv8688k | Doffed hat "Peergos creator": Open source developers are not welcome here. | NULL |
| st3fan | moderation_01jnywh2rxekqa61seqmk8z3f7 | Doffed hat "Mozilla Developer": Left company | NULL |
+--------------+---------------------------------------+---------------------------------------------------------------------------------------------------+--------+
title
these are my bad records
post-stream
make the mass-tagging admin tool you've repeatedly done manually
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
48Epic_Ninja_Elephant Good morning.
Oh, let me turn on... Did I do that?
Alright.
Just making sure the banner shows up live.
And good morning, Epic Ninja Elephant, to you.
Which must mean you're somewhere west of me, I guess.
Because it is two in the afternoon here in Chicago.
Epic_Ninja_Elephant I hear bad audio stutter. Is it just me?
And Twitch really wants me to look at an ad.
Alright, thanks, Twitch.
Alright.
Nope, it is not just you.
It should be fine now.
My usual prep has gotten slightly stepped on and I missed to fix the
Epic_Ninja_Elephant Classic cat.
I missed the step to fix the mic because the cat is laying on the mouse, actually.
And it is hard to do anything with the cat laying on the mouse.
Should be good now.
Yeah, King Baby here is actually going to make a bunch of things a little harder.
But he had a big morning, so I don't want to hassle him too much.
We'll see how this goes.
Okay, so this is Lobster's office hours.
should sound reasonably good now.
And folks can ask questions about the site or the code base at any time.
You can see the lobsters homepage up on screen right now.
Alright, so the message in chat.
02:43pushcx Howdy, this is Lobsters office hours, you can throw a question into chat any time!
So hopefully folks see that.
And then I actually have a ton of stuff.
so there's probably no way I'll get through it in time, but we'll see how we do.
Yeah.
So I usually start these streams when someone doesn't kick it off the question, working on the, looking through the issues and pull requests.
Tridactyl installed in this browser profile.
I can't click on it.
Can I?
All right.
Well, that's better.
So I posted on Blue Sky and Mastodon of like, oh, hey, if you don't know, Rails is an open source project and would love contributors.
And a couple of people came by and opened some pull requests.
Can I?
All right, so let's take a look at them.
I'm learning all the keyboard shortcuts I don't know.
All right, so we have two brand new first time contributors.
Come here, copy this link.
And this is a fill flagged cache job.
And this is
04:21So let's see how we're doing here. All right. OK, so this is an issue about. Some clean up. Now, they also opened a. What do we think can be? The name like Hannah, I'm going to guess she. I feel pretty safe in that one. Can I go back? Oh, man. All right. What do we got for files changed?
05:15That's thoughtful.
...54That was not the tab order I expected. OK. All right, so we got the 10 minutes. I think this is supposed to be like once a day.
06:37Oh, that was my mistake. I said 10 minutes. I guess that's fine. We will trust previous Peter, who probably knew what he was talking about.
07:07So.
...13In short order, I prefer to ship the active. Can I have my way down? I wonder if I could. See, I've hesitated to add Tridactyl to this profile because it injects a bunch of stuff. And I'm trying to keep this one pretty plain. This profile, I mean. Mostly just so I can tell it apart from my personal. So assuming this finishes, I'm just going to merge it. Yeah, so let's go ahead and write.
09:14twitchtd Hi pushcx, last time you talked about infra and hatchbox, is the migration done or are planning on getting it done?
Oh hey TD I have it on my to do list to talk to.
or to talk about, but we can let me hit the.
Come here.
Alright, so I might as well chat while the build runs, but the so here's my kind of to do list of look at the PR look at the issues can just kind of bring up the hatch box update, so if we.
Let's see, can I guess, come on.
pushcx https://github.com/lobsters/lob…
We're testing my, oh, look at that.
I got the right keyboard.
So there is a branch
right now that you can see up on the Lobster's repo.
And I can bring it up here, actually.
And on the branch is a new directory called Hatchbox.
And in it, you can see probably the most important thing in it is the to-do list, although I am proud of where Hunter and I got with Caddy.
I have never seen Caddy, but luckily, Hunter.
Can I not click in?
All right.
No, I don't want the diff.
I want the there we go.
Just react being reactive.
So we did a bunch of stuff.
This is one of those places where
you look at the list and it's fairly short but there were a whole bunch of random little rabbit holes where we configured something and then got some weird message and chased our tails for 20 minutes and then figured out it meant something different than what we thought and then once we actually like read read the message with a little bit more knowledge it was a one-line fix and we moved on in 30 seconds so there's a lot of that kind of
hey, how does this thing work and what's needed?
And then the to-do list grew as we were working because there was lots of stuff that as we started moving over, it popped its head up.
So where it's at right now is a lot of stuff is done and I feel like we're getting to the home stretch.
The basic hosting is set up.
The new server is standing up.
It's got the code installed.
It can talk to the database.
Everything is nice and secure.
There is some logging stuff to sort out where Hatchbox has a very nice web user interface with you can click on stuff and see the logs.
And I don't want to break that.
But I also need the logs to show up on disk so that I can grep them because there's some admin tasks like looking for sock puppets that are
most easily done by just grepping the log.
And so I've got to figure out how to get those things to log to two different places.
And if you poked around the commits on the branch, you would see a first attempt, but it does not work.
I'll sort it out.
The other thing is, as you can see on line 42 there,
a kludge to run scripts as root.
So Hatchbox creates a user named deploy, and then that user runs the Hatchbox deploy script, which is the big value of the thing we are paying someone to maintain that functionally replaces our Ansible repo.
And what I really want is to be able to hook into that and say,
hey, run this script that's in my directory, but it needs to run as root.
And it's some amount of...
It is mostly one-time deployment stuff, like install postfix and make sure that that's wired up.
But...
I would like it to run on deploy so that we can change things, because if that's manual, then it's just a...
The server is going to once again accumulate a whole lot of state.
And if I ever want to roll over to a new server or add a second server, I have to come back through these notes and figure out, you know, what's the random manual changes I made to the server.
So the more of that I can get under version control, the better.
And that's kind of what else is, what's going on with the rest of this.
So like pre-build and caddy file there are,
They're like text areas on the Hatchbox UI.
And I would just show you, except the Hatchbox UI is really made for trusted users.
And so if I click around in that, it is immediately going to put a bunch of API keys and the encryption secret key base from Rails.
That stuff is immediately going to show up on stream.
So I can't actually show you the UI at all, which is
It's actually, it's very funny because they have the CSS to censor stuff, but the only stuff that they censor and redact in the admin is API keys to Hatchbox.
So I don't know, it's very funny because the net effect of seeing all of my apps API keys on screen, except for the Hatchbox ones is that like,
Hatchbox only cares about the things that are going to cause them a burden of help I got hacked and need to roll my keys.
But like your keys for your Rails app that secure all of your cookies.
Oh yeah, we'll just throw that up.
Someone can shoulder surf the shit out of that.
I don't think it's, you know, intentional or especially thoughtless.
It's just sort of a funny dichotomy.
Anyway.
So I set this up so that
caddy file here yeah i get oh yeah see look so i clicked on it with enter and the url updated but the file isn't actually on screen because react this is why you don't re-implement anchor tags as javascript is you miss an interaction and your site is broken
So I tried to make the setup as simple as possible.
And so if you paste, I paste this into the web UI, then you can see what the imports on two, three, 14, 15, that we basically hook back into files that live in the checked out copy of our repo.
So now the,
The post is just empty.
I just knew I'd want it eventually.
So this is the stuff that Hunter and I wrote and customized for the site to make sure that we were getting exactly what we wanted and to get the full page cache set up.
And now it lives in our repo, so we've got versioning.
We don't have any other kind of nonsense.
I feel really good about how this works, actually.
You can see this site slug value in a couple of places, both here and in, I think I put it in the pre-build script.
So that time it worked.
Okay, GitHub.
Yeah, and this one has a couple of error messages too.
So Jordy GH, who talks regularly in the chat room, we were talking a little about Hatchbox this morning and some other odds and ends.
A lot of the stuff that I've done on the site, heck, on the stream here in the last six months has been to lean into Rails more, to remove dependencies, to remove moving parts in our hosting setup, to make things smaller, more repeatable, simpler.
And that's been things like, actually, like this pull request right here to move the cron jobs into recurring tasks in Rails.
solid queue now all of a sudden deploying the site means you don't have to learn cron you don't have to have a script you don't have to have a ruby environment set up you don't have to make sure that that thing is wired to your email server so that you get emailed exceptions which are clearly not happening for me now because there's a thing that's broken and i haven't gotten an email about it but i used to when i first set the server up so anyways the the net effect of that is especially because i am touching
every darn provisioning and deployment step right now in this project i'm putting a little bit of extra time and effort into templating these things so that the instructions for starting a site with this code base are getting radically simpler and easier to follow so hopefully that means people will have a much better experience starting their own sites
So that'll be fine.
So if we've got that, and then she had another PR she said in the Ansible repo.
I should have just Control-F'd to move my little cursor.
19:30Yeah. Great. All right. So get down to the text area.
20:42Let's go ahead and say... Bring that in. And then... Hmm.
21:09What's this hanging out?
...25Oh, I remember this. So this was a hassle related to when we thought we had a memory leak in the site. yeah, this is obsolete and we're going to wind down the answer will repo hopefully over the course of the next week or so, so I think i'm just going to leave that and the other one alright, so if we got that great.
22:07So this is another one where. Let's get the... I gotta look at it before I run the workflow. Sure doesn't sound like a Bitcoin miner, but you know, I should look.
...40Why does it say... I don't understand why this author referenced they should be replaced with just stories. Okay, so they've moved the hidden scope. Ooh, and they've written tests. Did they not delete it from the story repo? Hmm.
23:22What's 1523?
ghost_user_1984 twitchtd, hatchbox was an experience
Yeah, I don't understand this comment on line 30 here.
...52Yeah, Hunter, having spent more time with it, I get why we were having some hassles with caddy file.
And I did the same thing you did where I was poking around in its output and I saw that the way it works is it builds the caddy file on our server itself.
and it just dumps it in slash tmp.
ghost_user_1984 oh good
So then I could get down to an edit loop to manually run that caddy-validate command, because we were talking about what the workflow for having a feedback loop was.
That's why I was able to get that all sorted out and then work out the imports and then fix the visitor matcher and then the regex and everything.
ghost_user_1984 I had to go and try to vibe something on my local laptop
because I could just radically shorten the feedback loop too.
Write the thing in Vim, save, run the command to load that, and then fire off my curl or my browser or anything.
Yeah.
All right.
Sorry, Kat.
You're OK. You're OK, sir.
Had to adjust the standing desk a little.
You're OK, buddy.
Oh, you're going to go up there?
I think we might get the supervisor.
So let me see if I can get that ready here.
He's thinking about it.
All right, so I do actually have the mouse again.
Man, imagine that.
There's the boss.
All right, so.
26:15berkandev is that an airtag on the collar
ghost_user_1984 also, I still have no clear idea what was up with mysqld.
yeah yeah he lives in the panopticon because we were giving some friends a tour and we showed them the back steps because every house in chicago every apartment building has like these attached wooden back steps and you usually get you know a nice little porch there and so we were showing them our little porch set up and he was like oh yeah i'm the boss i'll come out and see the porch set up and
had visions of having to chase the cat across the neighborhood and so at that point he got low jacked god i did that there was one year i went to a friend's new year's eve party and it got so hot you know that even in chicago in january we had to crack the window and somebody who
was definitely a couple of beers in opened a window that didn't have a screen and so you know we all party we all leave around two three in the morning i went home i crashed and the host who can be a little nervous sometimes when he woke up he called us and was like i need help the cat is missing and so we spent
new year's morning on like three or four hours of street sleep and maybe a little bit hungover running around the neighborhood searching every alley every backyard every front yard every bush every everything for the cat all right
So anyways, between that and this boy letting himself out on the porch, I'm pretty sold on putting a tracker on the cat.
He's got the microchip too, but he's black, right?
I don't need him getting run over by a car before I can find him in the dark.
So...
29:28Although there's possible exceptions.
I think I mentioned it on the last stream, but since then, I installed this Telebugs guy.
I did the math on this.
Compared to Sentry, in 13 months, we will break even on this decision because I pay six bucks a month to DigitalOcean
And then I think
Sentry's smallest team plan was $29 a month.
I don't know.
prime_coder sup @pushcx
I didn't... Yeah, see this?
And he's got this cute little calculator, but it leaves off that it has to be on a server that costs a couple bucks a month.
But in any case... Hey, Prime Coder.
Welcome.
It gives a nice little web interface for exceptions and
All of the mods now have access to it so they can see when the site is acting up.
I don't need to get hundreds or thousands of emails when exceptions occur.
It's a nice upgrade to the site.
All right.
prime_coder u pay that much for the server ?
So we'll go ahead and run that just so that this author, Nav Mike, who is also a new contributor.
Ah, Mikhail.
Okay.
gets that feedback, but I don't think I need to stick around to watch that end.
All right.
So that's great.
Couple of nice, PRS and talked about hatch box.
So.
Yeah, let's see, where are we with issues?
prime_coder @pushcx u got any good books for ruby rails
There are these two that I need to look at, and then a bunch of these are me filing bugs and feature requests.
pushcx https://guides.rubyonrails.org/
I've put a lot in the last couple of days of, okay, good books, guides, yeah.
So for Telebugs, I paid, yeah, 300 bucks once, and then that host is,
$6 a month.
I tried to run it on the $4 a month one, and it doesn't have enough RAM.
And then I want to say our production server costs $46 or $48 a month, something like that.
Lobsters runs for beer money.
It is a hobby amount.
pushcx https://pragprog.com/titles/rai…
And then the
Other book I would recommend is if you want a book book work through this.
If you are asking because you would like to contribute to the lobsters code base, I would love to see it, but if you're building your own thing cheers.
Sam Ruby has written a bunch of books, I think highly of his writing alright so.
Yeah, so I was talking about simplifying our hosting setup.
This is a little bit of one where we had to hand roll some functionality for caching, and then we used it in three or four different ways.
But now that Rails has its own cache, we can just drop that complexity.
We can use that.
We can adapt to the way the Rails one works.
and there's you know one or two things we'll have to do differently but it is worth it for reducing complexity and making it easier to onboard people to the code base next one so i have more about this later actually but we have the gist of it is no just for a profile we have this integration with
site called Keybase.
Yeah.
So let me show you something kind of vivid.
I did more research.
I did actually a lot of looking and a lot of stuff.
But right on five years ago, Keybase was acquired by Zoom.
34:07Can you guess where on the chart five years ago was?
It's when the commits basically stopped.
So Keybase was a nice way for people to have like a central ID thing and authenticate all of their accounts to one site instead of to others.
It has been getting some amount of maintenance, but if you poke around in the issues or the Reddit
you see lots of people talking about partial and complete outages or missing functionality it is unfortunately bit rotting because a site of that size and complexity needs more maintenance than they're able to give unfortunately for them and you know actually seeing that kind of thing that is part of why i am trying to lean into
rails more is because the easier it is to maintain lobsters and contribute to lobsters the less likely we are to blow up to a period where maintainers are busy for a while so we added our integration with keybase six years ago
And there was a big meta threat about it, including a Keybase employee showing up to discuss things.
If I have time on this stream, I will remove it.
If not... Oh, I left that off.
If not, I'll file an issue for it.
But the thing I was going to mention is that I...
prime_coder @pushcx iam kinda lost iam prom lag. Iam a just gratuated software developer but cant choose a solid prog lag to stay on. i try to look in my area what they ask mostly its laravel - Symfony - java - python and some ruby golang. i have a love for golang should i keep going for that ?
messaged a couple dozen active users who have what do you call it a couple of dozen active lobsters users who have keybase profiles linked from their lobsters profiles and
one person was like oh yeah i kind of use it a bit for work and everyone else said something like i forgot i even had this attached i might as well delete it now i don't know what it's for the couple of people who had issues said that they used this service called key oxide this came up three or four times and as far as i can tell it pretty much does what keybase did except it is
alive i see your question prime coder i'm going to finish my thought here and then amusingly they said you know oh why can i prove my identity online without key oxide and they say sure and they work through this demo and then one of the steps now you want to add your lobsters account to your identity you'll need to update your twitter buyer blah blah blah and so it's just kind of funny to see lobsters is one of the examples they reached for
So maybe we will integrate them.
37:31So if you're right at the start of your career, so first off, congrats on graduating.
That's not too easy.
And then I think I would say that.
The most useful thing to do is get that first job.
You don't get married to a programming language.
You will learn many over your career.
They will come and go.
Try not to sweat it too much.
So if there are a lot of Laravel jobs in your area,
ghost_user_1984 *cough* CoffeeScript *cough*
prime_coder iam from amsterdam netherlands
yeah i would say just learn some larabelle but i don't know your area but most places the best way to that's been a few years the best way to find jobs is to like meet people amsterdam okay to meet people at local programming meetups i can't guess what's available in your area because i live
ghost_user_1984 oh tons in Amsterdam
I don't know, seven or 8,000 miles away, which is what?
14,000 kilometers away forever.
38:58Yeah.
prime_coder amsterdam has indeed allot of meetups
prime_coder i should do that
So go talk to people about their openings because you can and will learn more and more languages over your career.
prime_coder hackatons
That's great.
then also even the people you meet there who aren't directly hiring can give you local career advice that is appropriate to the business and the culture that you have there because i can tell you what works on an american resume but that doesn't do you any good so go find the people this is
true of everything in life, but go find the people who are doing what you want to be doing and talk to them about it.
Because they will have lots of knowledge and they will have answers to questions you wouldn't think to ask.
prime_coder thanks for the advice gonna try that
Heck, that I wouldn't think to suggest.
This damn bug is back.
All right, so let's grab that.
Yeah, and you can...
40:20It's a little tempting to put the duplicate label on this, but it is not, you know, a duplicate issue.
Actually, it sort of is, but it's not worth reopening the old one.
This is probably not great for new people new to the code base
So one of the bits of advice I got from my mom when I was first looking for my very first job was if you don't have a job finding a job is your job so don't just go to the one meetup for your one favorite programming language do go to that.
Also go to the Laravel one.
Also go to whichever is biggest.
Also go to whichever is closest to your house.
Also go to the hackathon because it sounds fun.
You know?
grayhatter_ I heard somewhere that it takes on average 6 weeks of full time looking, so 40h a week, to get a SWE job
prime_coder <3 <3
So... Is there anything different in the URLs?
No.
Wait, they linked the same one twice?
grayhatter_ looking for a job is a job is *very* true
Yeah, I think this is a little confused because they accidentally pasted the same link three times.
41:47Oh, Greyhatter, that's an intimidating statistic.
I know I have told people in America that getting a first programming job is a giant slog.
prime_coder @grayhatter_ sometimes i get tired from it but i wil not give up
ghost_user_1984 jobs in general are a slog
Because from the hiring manager's perspective, it is very hard to evaluate potential coders, especially from a piece of paper that's not code.
prime_coder atleast i have a 4 day job atm also in it
And so they tend to do really unfair things like
grayhatter_ I'm looking for my 5th programming job, it's always a slog
drop the resumes that don't mention their exact keywords, even if the keyword is for a technology that they could teach someone in a week.
42:30But it does mean the whole thing is harder.
Yeah, okay.
So we've seen this exact URL three times.
grayhatter_ you just gonna grind the parts that suck
Let's grab that.
44:19prime_coder @pushcx @grayhatter_ iam trying to make a project for unmanaged servers a cms like project where u can manage your ssl cert ram error etc just plesk licenses. its rly fun to do
grayhatter_ I wish it didn't suck as much, or I had some advice or context to make it suck less, but, sadly, it just blows.... the silver lining is that even though it doesn't feel like it; it is a winnable task
prime_coder its hard but i learn from hard thingd
Oh, PrimeCoder, that's great.
That sounds like a pretty darn good way to practice.
prime_coder ye
It sounds like Plask or what's the other one?
cPanel?
Yeah.
pushcx https://hatchbox.io/
Hatchbox, which I don't know if you would connect it after TD asked about that.
grayhatter_ yeah, demonstrating you solve problems with code in your spare time is a huge signal of value as a SWE
This one does a lot of very similar things.
prime_coder iam going deep in the rabit hole like osi model stuf etc
It doesn't
host the server, so you go sign up.
We have a VPS on DigitalOcean, and then Hatchbox is going to manage the provisioning and deployment.
prime_coder cool
As soon as we're done injecting weird code into it to do the couple of things we're very particular about.
Oh, yeah.
Yeah, welcome to the industry.
There's a lot to learn.
All right.
ghost_user_1984 I feel like weβve earned a slot on that podcast to talk about the hatchbox migration process
ghost_user_1984 also prime, itβs worth writing stuff on a blog
And I think showing off that, especially as a junior developer, it is not so much about how much you already know as it is showing that you will be able to learn things is the big positive with smart hiring managers because the smart ones know that they will be teaching a lot of stuff.
The field is huge.
talk about the Hatchbox migration process?
If you want to go on his podcast, email him.
I don't think I need to.
ghost_user_1984 not to really get a following, but to get used to writing.
prime_coder @ghost_user_1984 u mean a blog on the web ? and write my project roadmap
A lot of that is going to be, I don't know, I imagine if he had me on, it would just be me confused by various things like how caddy files work.
46:15grayhatter_ yeah, 100%, that's something that cuts both ways, you want to look good to people you want to work with. Showing that you enjoy learning, sets you up best for places where you'd actually wanna work
ghost_user_1984 yeah, writing samples really Iβm
Blog on the web, oh man, you know someone is younger than you when they ask something like a blog on the web.
ghost_user_1984 really Iβm
It sounds like he's talking about the word we're saying, like a telegraph on the wire.
Yeah, and not telegram, the social network.
...38ghost_user_1984 really important to demo that skill
All right, this is an odd one.
Yeah, I'm not pulling up the code because I have a lot I want to get to, and I don't want a rabbit hole in this one.
But that's really odd.
...55veqqio It happened a few more times, actually
All right.
So what did we get here?
This is definitely a bug report.
47:17prime_coder i tested some stuf with golang vs php i made the same app in both env and my golang app was 200x faster and took 80% resource on the server
Second comment with the new text.
prime_coder less
That's a strange one.
...34I am going to have to dig through the server logs to see what happened here. Yeah, and I can't do that on stream because, you know, I'll immediately pull up this author's IP address and stuff.
48:00veqqio How did you select whole words in git without your mouse?!
Let's put that first because the most important thing is to be thankful so we get more bug reports.
...39veqqio Do you have vim bindings in your browser somehow?
In fact, if you double click a word, you get the word.
And if you triple, you get the whole line.
No, I was actually just complaining about not having my Vim bindings in the browser because the cat started the stream sleeping on the mouse.
49:20veqqio "without" the mouse. The crusor was low, but you selected multiple words in the middle, no? Maybe I missaw
bsandro VoHiYo hello pushcx and friends
Where was this?
It's in the issues.
I just left it as a comment the other day.
Is it now?
Let's just find it.
...59I tried to nerd snipe.
Hillel into helping.
I didn't quite get him.
prime_coder hi @bsandro
This one.
1209.
50:26Oh, hey, Bissandra. Nice to see you again. Oh, if my mouse was in the middle of it, I have some words. You can use control left and right. And then if you hold shift, maybe that's what you saw.
...53veqqio Yes! Had no idea! Thanks
Otherwise, I don't know.
Maybe you'll
You'll have to find the time code and ask me when I have the recording up, which is probably a couple hours later.
Yeah.
Oh, okay.
Well, there you go.
Yeah.
So control and then shift and then home and end work.
Yeah.
All that stuff's in muscle memory.
So I just sort of do it.
It just sort of happens.
I think about the high level of what I want and it happens rather than
51:36bsandro yes and then you press ctrl+w to delete a word and close the current tab :D
so there's that oh yeah v sandra i do that all the time yeah that's constant with when i was first standing up the server for hatchbox for the new hosting i went to digital ocean i told it start me a server and i wasn't
Epic_Ninja_Elephant Or esc which will auto-close most email client compose windows.
successfully ssh into it because i and i wasn't getting a good error message it was just automatically off denying and
The hassle there was I had rolled a new SSH key, but I forgot I have to pass the dash I name of the key.
And so it was just using my existing key and failing.
So I had to use the DigitalOcean, like they have a web console thing.
So like on their web panel, you click on it and you get a webpage that is a terminal to your server.
I think I closed that thing seven or eight times because I was at the bash shell and I wanted to delete stuff and I hit control W and the tab closed.
Then I got to rebuild where I was at.
That was... That made it harder.
53:00Yeah, so the other thing, I showed you one or two of these.
We have...
two more feature requests from me number one is rewriting mock turtle mock turtle was written in javascript the live version of it anyways was written in javascript by ghost user 1984 here and we were just chatting about it this weekend and i remembered to come back and file a feature plan for let's write this thing in ruby so we can put some good features in it
And if you were in the IRC channel this morning, you would have seen a lot of discussion of whether IRC is still any good.
But it's where the chat room is now, so it might as well be nice.
bsandro temporary solutions live forever
Man, we really...
It was so funny.
So I wrote that whole notes on Lobster's use of IRC and all the features missing.
And then...
grayhatter_ lol, I helped
grayhatter_ :D
four or five people just wanted to rehash that discussion de novo and i linked the document three or four times of we are having a discussion we have had many times for over a decade and they were like right but it's a client issue it's like that's that's literally in the doc you think this is not the first time this has come up i was a little exasperated
Yeah, Gray Hatter, you rehashed a bunch of the doc there.
And I appreciate that you did eventually change gears to starting to write your own doc.
Thank you.
But yeah.
So the other feature request is to use the full page cache a little better.
One of them is let's write some new code, which
This is a little belt and suspendery.
We've never set any other cookies under any other names, but let's just be sure of that.
This is one of those things that if you get it right early in a site's lifetime, you can force everyone to register the cookies they care about in a single place that is tracked and appropriate.
And if you don't, it's just like, oh, everybody with JavaScript invents their own cookie, and you will never find them all.
So better to get that right now at some point.
The other one is a bug I saw go by while I was testing the page caching on the new server.
We'll have to get that sorted out.
Yeah, that's the issues.
All right.
So we're right about an hour.
Okay.
Cool.
So this is Lobster's office hours.
We can talk about anything on the site that's interesting in the community, in the moderation.
And then otherwise I work on the site and I had lots of code ideas.
Let's look on the TOTP.
Yeah, because I think we have one of these.
veqqio Do we get a concatenative tag? 50 upvotes!
So where is it?
56:28veqqio :devil-emoji:
Oh, Beck, I don't think I saw...
I think I'm behind.
50 upvotes is a strong reaction.
...50I mean, not a lot of discussion, but this is clear, and it has a... A lot of good examples. I can see why people would say, I don't want to deal with that and filter it out. I can see why people who are enthusiasts would want an RSS feed. Yeah. Okay. Let's I'm not logged in in this browser and I don't want to be. All right. Let's all right. Light mode warning. Let's bring this browser up and then where's my languages. I don't know that we have another grouping of languages. It's not a practice. It's not really a platform.
58:04veqqio Yeah, under planguages, like apl or lisp (which are families)
Yeah, a bunch of these are kind of like, yeah, like APL is a group.
I thought there was one or two others.
...20Yeah, I think it's fine to put families in here. Okay, just making sure I'm gonna do something that's clear. And then where was your description?
...37Not privileged, no hotness mod. Great.
...51So let's grab that. Oh, that's a little bug because no stories are tagged. Let's grab the scratch.
59:27All right, how do we get... Did you do a title search of Forth?
Is that how you generated these?
veqqio Sort of, but it had mostly misses
This one, I should probably have made this for Forth four years ago.
Why did I miss this?
Four years ago,
May of 21.
I had a work thing going on that spring and was swamped.
Yeah, that's my mistake.
But putting the family together is nice.
01:00:19Okay. Hmm.
...38veqqio I mean, probably mroe than half of stories with just Forth aren't there. The searching is really bad. Mostly "and so forth" etc.
I'm trying to think about what backfilling this tag is going to look like.
...58Oh, you probably looked for the word forth as opposed to...
01:01:10veqqio While many appropriate stories had no marking, but I got them by looking at submissions from the subreddit
Do you see the title operator?
Or did some of these also say and so forth?
Because there definitely isn't any kind of negative searching in case someone used the phrase and so on in the title.
Oh yeah, that would filter it down.
...59really should make some tooling for this at some point so the thing with if i edit these stories like i could click on them and edit them one by one right and if i do that all of these submitters in this case that's you are going to get emails that their story has been edited which is especially surprising and frustrating for
folks who submitted something months and months ago and they haven't thought about it for ages.
veqqio I wasn't sure how you backtag so the goal was mostly fing enough to show it's an issue. I can try to hunt better but idk how to e.g. format it
Some of these are years old, right?
Yeah.
Oh, fourth bigoted essay.
Okay, Charmer.
So what I've done previously is manually write mod log messages and then collect up all their short IDs to include
which is what I did with vibe coding.
And I didn't think to make a tool then.
And it is not the thing I want to be doing right now.
So I am going to
01:03:42veqqio Am I the only one who sees a little window with a screen(?) over the bottom right?
so i just left a comment there for you so vec will get an email but that i added the tag and i'll backfill no you don't have to hunt better because i'm going to be writing that tool the if you are talking about all right so let me move my mouse around
This box here, that is the webcam.
veqqio Ah ok!
And this big black, yeah, my mouse goes under it on the stream, but the big black fuzziness at the bottom is the boss of the stream.
His name is Raz.
He is the king baby.
Oh man, he's kind of been a handful today.
All right.
Okay.
Yeah, sometimes he sits up, but he's facing away from the camera, so he's just kind of a fuzzy blob right now.
Most all winter, he doesn't go up there.
I think there must be a little bit of a draft because it's closer to a window.
I've been meaning to put a good light over it so that you can actually see him
Epic_Ninja_Elephant Streamer cat.
feels a little silly to get like one of those streamer camera ring lights for the cat but.
I mean he is the boss of the stream.
01:05:26Epic_Ninja_Elephant Four times the viewers, too.
yeah.
Alright, so I think we have something in here that focuses right yeah.
...43So I was running through steps, and I don't often have to log into production. But I noticed that this autofocus didn't work. And I think that was a browser thing. So I'm going to also add JavaScript for it, which I have to see the darn thing, don't I? Does it make it?
01:06:30Four times the viewers? Oh, I assume that if he had his own stream, he would certainly get more than me. I can make him bigger if we want more viewers, I guess.
...47gtfrvz cat vtuber avatar
Epic_Ninja_Elephant The more viewers, the bigger cat window.
So I have a personal browser off stream.
Okay.
So it is, it gets the ID T O T P code.
01:07:09It's a little redundant.
...20Yeah.
Well, that would be fun to rig up so that, yeah, or make him interactive.
Epic_Ninja_Elephant I'm only kidding.
Well, you know, if we're going to rewrite the IRC bot in Ruby, if that wants to behave,
There is an IRC gateway into Twitch chat, and maybe then I could finally write a chatbot for the stream that does that kind of fun stuff.
Let people vote on whether to turn the cat cam on or dispense treats to him or something.
I'll rig something up with an Arduino.
01:08:15Epic_Ninja_Elephant Twitch chat is still just IRC, right? I haven't connected with weechat in a few months.
on the hatch box branch.
I almost landed that in the wrong place.
Oh, speaking of landing commits in the wrong place, I have been playing with jujutsu the last couple of days.
There was a story on it on like Thursday or Friday, and I've skimmed a couple of other stories and said like, oh, that's kind of interesting.
I'll play with it sometime.
Frici it sort of is but the IRC part mostly getting phased out pretty sure
Frici also Greetings
And something about this one or the comments tipped me over into actually playing with it.
And I worked through Steve Klabnik's jujitsu tutorial.
So let's... Oh, hey, Fritchie.
Why does this keep happening?
01:09:08All right.
Well, not the one nine minutes ago.
Yeah, this one three days ago.
Right?
Yeah, here we go.
pushcx https://lobste.rs/c/v6err1
So Kevin, who is the author of Dark Mode here on Lobsters, left this comment.
So we will link that comment.
About Jujutsu.
And on Friday afternoon, I spent a couple of minutes starting to play with it.
Frici I keep meaning to check jj but the fact that every time i need to search i have to go 7 pages of anime and 2 pages of something else before i reach actual docs kills me
So they linked Klabnik's tutorial, which is, and I see Klabnik has shown up in the comments here.
It's not finished.
If you look at the to-do list, these grayed out ones at the end kind of fade out.
They're not written.
pushcx https://steveklabnik.github.io/…
Epic_Ninja_Elephant The lack of an index in jj is pretty great.
yet but this stuff was enough for me to play for i don't know 90 minutes two hours and it was actually really easy i don't know what to tell you about the anime i didn't see any anime i just went through steve's tutorial here yeah i'll give you the link straight to it yeah i was really
I was hesitant about the lack of an index.
That's a big change.
Frici I should probably just bookmark steve's tutorial link yeah
I like the way Steve chose to work through things here of, well, let's have a little repo and let's run a command.
Epic_Ninja_Elephant I came up on CVS and later Subversion.
And, you know, I ran, for every command he suggested running, I think I ran 20 more just kind of tinkering with things and looking at the log and reading the doc.
And if he says run jjnew, all right, well, what's the help text for new?
What are the other options?
You know, just kind of playing around.
but you could get through this thing in an hour or two and have an idea.
The, I haven't tried to use it on a project yet, but that's probably going to happen very soon because I was really impressed.
I have like a page of notes somewhere, about wanting to write my own UI for Git because the Git UI has some rough edges.
Epic_Ninja_Elephant I also use got in a few places.
And clearly the Jujutsu folks saw everything I did and then some.
Epic_Ninja_Elephant It has a way nicer UI than git.
Because they hit everything that I was annoyed about and then also put a whole new data model in it.
That sure wasn't in my plan.
Epic_Ninja_Elephant But still uses index.
I don't know.
It's very smart.
Yeah.
I actually started with...
rcs which is what cvs was built on top of and then yeah i made that move to subversion i used perforce a little bit for some work and then mostly it was subversion to get but jiu jitsu seemed really clever with the way you sort of make a working commit and then you revise it
It felt very comfortable very quickly in a way that I didn't expect for something that worked so differently.
Frici I never used perforce somehow but i am familiar with the RCS -> CVS -> SVN -> Git pipeline
So anyway, we zipped through that.
Did I hit commit on that?
Yeah.
01:13:06Frici with hg squished there somewhere
Yeah, I mean, Fruity, that's pretty much the standard open source pipeline.
Ah, there you go, Vec.
Now you can see the boss.
All right.
All done up there, sir?
You're going to come down to the desk?
veqqio Aww
There we go.
Peter is bad with OBS.
All right.
...35All right.
Frici which is probably why a number of mozillians seem to enjoy jj it gives a very this looks like hg but with some less painpoints kind of deal
So let's see.
Done there, done there.
What's next?
Let's just hack some more JavaScript before I do the bigger thing.
Yeah, I never, so you've got me be, because I never touched Mercurial.
know it has a lot of fans and it does stuff differently and a lot of people love it i have nothing i can say to it but if mercurial is as nice and friendly as jj well i was missing out by not using it all right so where's
01:14:44Epic_Ninja_Elephant Anyway, thanks for the stream and the chat. I have to go. Talk later, all!
Yes, this is what I want to tinker with real fast.
So let's get the... Well, let's get the... What are you doing over here, OBS?
01:15:00Let's stand up the server. Oh, I restored data, didn't I? Ah, see you around, Epic Ninja Elephant.
...33bsandro my first (work) programming language ever was actually ruby, and the vcs I used most extensively in my life is still Mercurial. No regrets, I think it all shaped me quite good :D
and you didn't see totb go by there because it's disabled in dev your first programming language at work was ruby neat cool well bisandra if you check out jujutsu you'll have to tell me how many very smart ideas it pulled from mercurial because i can't tell
ah the big baby is on my lap now here we go come on sir settle in settle in baby so i was going to look at the submit form so i was chatting with what did i break why didn't this format there must be a js error
01:16:29Did I forget a close quote on that last commit? Something like that. Yup, mismatched quotes, two of them. Oh, that's bad. Come here.
...51That's fine. Good thing I didn't hit deploy. Oh man. So I didn't talk it up, but one of the things I like most about Hatchbox, coming from Ansible is deploying a couple of lines of code takes, I don't know, rounds up to maybe three seconds. And right now, if I run a partial deploy of just our code, as opposed to running the whole Ansible cookbook, it takes two and a half minutes, something like that. It's irked me for years. But with hatch box, you know I click the deploy button and as fast as I can open the tab to see the output it's already done it's live on the site, we have a zero downtime deploy instead of 90 seconds of that hey if you see this message in a minute or two come by the chat room to tell us we broke the site alright so. yeah so hunter mentioned that. his most frequent bit of moderating lately is to swap the replace the ai tag with vibe coding and i think what's happening is folks start typing ai and because ai is lexically before vibe coding even though both match
01:18:24It looks like you are being recommended to pick the top one, right? Because, of course, it has a clever... Hold on a sec. I got a cough. Because everyone is used to... If you start typing in a box and it's searching, well, then it is ranked by suggestion, so they pick the top thing. So I am going to... ...cludge this... put the vibe coding tag ahead of the AI tag. How am I going to do that? So we find these datas. We have a sort field. Can we give many?
01:20:05OK, yes, we can give a list.
...15So we give the value. And what we want is to add a tiebreaker.
...49So there's that, and then let's see. It said, tell me which direction it's going to sort by default. No. Well, we'll find out pretty quick.
01:21:16and I am only going to do this on the new story form deliberately. Bigger. So we map it like this.
01:22:10Let's do it this way. It's probably going to sort ascending by first.
...19And did I get what I wanted there?
...31Yeah, so these got zero, and then vibe coding.
...46TT. All the nodes. This got a one. Good.
...58Where was that sorting thing? Direction.
01:23:32Or no. Descending. That did not do what I expected.
01:24:18Whoa, didn't filter at all. Oh, I'm in the wrong field, that's why. Where's my tomselect, where's my typing box? Okay, so tomselect is failing to load and I'm not getting an exception. So what did we change and did I mess up quotes again?
...55So this part's fine, that's the other fix.
This thing is unhappy.
I wonder if that documentation about sort field is actually applying to something else.
Like it's a global setting instead of a per item, because I kind of control left into the middle of things, so I didn't have context.
chamlis_ evening all
Yeah, so if this is in general configuration, it must be that when I...
I'm supposed to do that as the text starts up.
All right.
Hey, Jamlus, how's it going?
01:25:46Yeah, so this guy doesn't actually...
...57chamlis_ alright, thanks. long weekend here in the UK
want to support that oh what's the holiday we're having a memorial day here in the states which is why i can't run long we're going to walk right out the door to a social thing where's
01:26:49chamlis_ it's just a bank holiday, I don't know if there's any history there
oh if it's the UK man they have history about everything there was a I just saw a cute headline go by about somebody who I think it's when the water is high has to hang a bale of hay over the bridge as a notification and it's some centuries old law and they've forgotten why a bale of hay and why that particular bridge is
They don't even know what the law is.
I don't know.
Cute kind of article.
So this is breaking it, right?
gtfrvz thursday is Feast of the Ascension. you should know this as the new pope
So if I do that, come back here.
All right, yeah, now TomSelect is running.
chamlis_ yeah we all do that, my turn with the haybale is next week
So it won't actually let me sort by multiple fields.
Da Pope.
Chicago's been having a lot of fun with the idea that the Pope is from Chicago.
Your turn with the hay bale.
Oh, actually, wait, no, that's not it.
What if I give you an array with one item?
You load.
01:28:24What if I give you an array with data value as the tiebreaker? You load. OK, so that implies maybe I typoed the name of the data attribute or something. And so when it does the attribute lookup, no, that's correct.
...55except the field isn't called data-value. It's just called value. So it's the second part of this that's wrong?
01:29:17princessxen hewwo push-kun
What if I said sort by value descending, and that was the only thing I said?
oh hey princess all right okay so it was actually the second thing that was wrong and it was falling through to sort in the order given so this wants to be and then this can be the deep part not just value not data value
That is partially right.
and that it loaded, is it tie-breaking in the other order than what I would expect?
01:30:21No. What the shit? Do both of them need a direction?
...35And hey, wait a minute, shouldn't I be push senpai or something?
What's the honorific that means, like, authority figure?
I'm supposed to be the authority figure.
I don't know that I manage it much, but...
veqqio You have a shining gravitas, worry not!
Okay, so you're still backwards?
It just.
I wonder if it doesn't want to sort.
Oh, now we just get an error.
Shining gravitas.
01:31:22Corrupted content, what the shit?
...34twitchtd sortField doesn't seem to have a direction attribute documented, from what I can tell
Did not mean to select all of those.
The heck is corrupted content?
...49Except it is documented.
pushcx https://tom-select.js.org/examp…
It's where did I see it?
Yeah, I got it from right here.
So this is one of their examples.
01:32:10twitchtd oh I was looking at https://tom-select.js.org/docs/
And then it was another of their examples I saw that you could pass a list.
Yeah.
...46I wonder if it's that global setting I'm allowed to set multiple and it tie breaks. In this one, it'll only sort by one. Oh, OK, big baby. So let's just make the server do it. Let's not be too smart in JavaScript.
01:33:15twitchtd ah yes, if server can do it, that's probably better
Okay, so cut that down and then here.
01:34:17xalphaa2 hello
What are you mad about?
xalphaa2 looking twitch message ?
Hi, xAlpha2, welcome.
If you have questions about the site, you can throw them in any time.
Otherwise, I'm just busy breaking things.
Did I add a typo here?
Yep, I just said hello to you.
I don't know how big your lag is, but I guess reasonable.
I have the feeling I'm gonna get another new grad question.
01:35:02Okay, so.
...17xalphaa2 look ?
I said yes.
Hello, your username is xalpha2.
I don't know what else to say.
...30veqqio You're too nice!
Maybe I caught it as it was reformatting or something.
And it didn't actually do what I wanted.
I'm too nice?
I don't know what the alternative is.
Ah.
I actually can't message you.
I am not allowed to send DMs on Twitch.
01:36:07bsandro don't we all
Where's vibe coding?
Visualization, vim.
OK.
veqqio @xalphaa2 What're you paying?
awful hack worked.
...28Vecchio, I would bet against them paying. Maybe I'm a little cynical.
...53What am I missing? Maybe I should be asking the LLM so I can tell it value.
01:37:17Right. And then all of these are going to be backwards. Now if I reload, tomselect fails to load. What is happening here?
...35See, that time it worked. So something fucky is happening in my setup that every so often it's just failing to load.
...51That's making debugging very... Yeah, see, there it goes. Now it's ignoring it. Data... I called it tsValue. It's tsSort, isn't it? There it is. Now... Now I'm mad. I'm confused.
01:38:28I feel like I am just looking through a bug just as obvious as the one that writeAll that I just missed.
...43You know, xalpha2, if you want to write programs,
There's some resources for learning to make programs on Reddit.
pushcx https://old.reddit.com/r/learnp…
There's a...
I think it's Learn Programming.
Yeah.
Here you go.
01:39:05chamlis_ I'm not 100% sure even the original sortField was working, skimming the code I'm not sure the dataset gets merged in
But otherwise, this is not a good Twitch stream to get someone to act as your programmer.
You're not going to find anybody.
So where's...
...23chamlis_ value is special cased I think
Well, chamList, except if I change, if I sort by value descending, it does actually reverse the list.
Well, now, see, there's this intermittent error.
Then it goes away.
That's not ominous or anything, right?
x alpha two, hey, we're done with this topic.
Like, you are in the wrong place.
You should seek help somewhere else for this.
01:40:03There isn't a, no.
...31See,
Twitch is a little hardcore now, so it actually just deleted all of those things when I just said timeout.
I just said, pause them from chatting for a minute, and Twitch was like, yeah, sure, I'll rewrite history.
Twitch.
chamlis_ who will rid me of this turbulent priest
Now the archive is going to get fucked up because it's why are why are we talking to someone who doesn't appear in the chat?
veqqio :dictatorial-emoji:
Because it's just gone from the log.
Weird.
01:41:12So.
...23So, Chandler's, why does sorting by value, I can swap it between ascending and descending, but I can't do that when I name another field.
...40Okay. Well, I guess it's not minutes.
01:42:00All right.
...15So let's follow Chambliss' good idea of looking at the tomselect source, right?
I don't know anything else here.
chamlis_ then the fun part is the search/sort is handled by sifter, another library
Is it in the vendor directory?
Yeah, all right.
...49chamlis_ ahh I suppose that's all merged in
All the code is here, though.
I don't see somebody named Sifter.
Yeah.
01:43:18get score function pair search oh man we got some ravioli code where everything happens in another object we're compiling all the options it waits yeah none of this is so
...46You know, we didn't, let's try taking that back down. What if I just set a single field?
01:44:06Yeah, looks like it just ignored me. And these are appearing in their order in the source.
...21What's with the dollar sign order? Why is there a sigil here?
...30So if it's a string, okay, then it just makes it into field equals.
...44And I guess it doesn't want to take an array, or it passes it on. I would have expected as long as there is a type transformation turning a string into the object shape it wants, OK, it does turn it into an array. But then it doesn't say, hey, if you gave me a single hash, I'll turn it into an array. Has that been working by coincidence?
01:45:32And then it turns it into a field that's going to have 900 hits.
01:46:05twitchtd another idea is if you've vendored tomselect, the version you have vs the docs might be out of sync
It's going to have the word field, right?
You know, TD, that's a pretty good point.
We've entered tomselect two or three years ago.
That's plenty of time for it to drift out of sync.
...48Yeah, so it builds its array. It's all weighted. I wonder if there's something in this score waiting that's happening that I don't know. That shouldn't. They should all have the same value for that, or it's doing the text fuzzy matching.
01:47:45I thought this was going to be pack something up in a line or two all right all right i'm i'm cutting this one off this is this is getting ridiculous let's just take the typo fix i i didn't push that did i all right no good so i don't have to yeah all right so I don't even have to push a commit or push dash f. So let's instead say, let's make it someone else's problem. Let's make it future me's problem.
01:49:18Thank you.
01:50:25Remember your username on Hunter. If you're still here, I don't remember your GitHub username.
01:51:17veqqio @pushcx hmadison
Even if we do this, that waiting thing is probably going to kick in.
Because it's going to wait on the exact, like, one string starts with AI and has it in bold.
And one string, and thank you, Beck.
And one string has it in the middle.
So I bet as soon as you start typing, they're going to swap back.
01:52:21chamlis_ line 1408 of TomSelect_base.js looks like it gets the name from the dataset, so you might have to camelcase and take off the data- prefix
Oh, it doesn't like the data prefix.
I didn't actually throw away my code.
So what if I just called it ts sort with no punctuation and then stories show, no, stories form.
And then that one became
...51chamlis_ I think you need data in the HTML but then you need to follow this in the name to match the JS name https://developer.mozilla.org/e…
TS sort.
All right, let's leave that.
Leave that.
Reload that.
Yeah, there's our intermittent error.
I wonder if Rails is, like that's Rails doing the import map compilation in the background and after two or three seconds it finishes.
That's possible.
I wonder if, so if I take this and I say, why don't you work like that?
Yeah, it doesn't print anything about doing so.
01:53:46I don't know, second or third reload does it. Yeah, so these didn't all swap to be in the opposite order. Let's put those array markers back. Because it special cases string, but what if you pass a hash and it does something different and wrong there? Yeah, no, I don't know what's going on. I'm kind of out of patience with it. So I'm going to just write this up and throw it over the wall and maybe it never changes.
01:56:01Can't find the right noun there. That's a feature request. That's good. Did I have a front end? No, I just had to pull design. Yeah. If you know anybody who is a great front end designer and would like to donate some time to open source, we could use one. All right. A bunch of stuff tagged design here. And those issues seem to move along very slow. All right.
...36Yeah, so there's that. What am I at here? Just about two hours. So let's go back here.
01:57:17for anyone who's curious about that guy who was looking for a programmer i just saw that he sent me a bunch of dms on twitch and he has some kind of cheat bot for a game that is supposed to grind the character and i looked at the website real fast there It is not clear if he owns that and wants changes to it or if he wants a knockoff made of it. But either way, I saw that you have to disable your antivirus to install it. So anyways, there are maybe a couple, two, three dozen red flags involved in that little project idea. All right.
01:58:20So let's talk about a bug of mine.
Let's get this into the scratch.
So this one's annoying.
So I made it possible.
I'm not going to dig the commit out, but I made it possible for users to doff their own hats, which was one of these small
let's make the site a little bit more self-maintaining and easy for users because otherwise they have to see that the hat no longer applies and then think to message a moderator and ask the mod to do it.
So it basically never happened because it's a bunch of levels of interaction.
But if there's a little button in the UI that just says DoF next to a hat that they realize like, oh, I don't work there anymore, people would click it.
It would all be good.
pushcx https://github.com/lobsters/lob…
so as i wrote because the active user doing it is the user i marked them in the mod log as the person who did the action because they are i wasn't thinking there because that means
that they are going and showing up in the mod log.
So if we go look at slash moderations, most of these people
not moderators they are people who have taken off hats that's not great actually that one is this a different bug because that last one that so i looked at a couple of these but i don't think i looked at this xy proto user
Did they just...
It looks like the workflow...
So there's two... For the moderators, there's also the option to rename hats in a way that doesn't take off the old one.
I wonder if this is just passing around objects.
So let's go find...
Anything related to hat doffing because there's the bug there and then talk about.
What to do with.
I get it it's because this.
yeah they come in as the hat user.
And then that makes them the editor.
02:01:31And then a callback creates the log moderation. Yeah. Wait, this is just granting. Where's Dolphin?
02:02:10That's just an error. This should be. Wait, is it his moderator?
02:03:12Why is this? This is just the rename workflow. Does updated place specify? Yeah.
...28Why can users rename hats?
...52And this assumed it would only be called by mods.
02:05:02Why does this look like users are allowed to update in place?
...25Because that Seems like a disaster waiting to happen if someone changes their hat to say sysop.
02:06:02It's fine if somebody wants to take their hat off, but not.
02:07:41see if that broke any specs the second part of that this gets into a meta thing of what do we do with these bad mod log entries because there are whatever that is eight or ten of them that have users marked as moderators and they are not moderators and never have been moderators so the ui is wrong and very misleading
And I would like to be able to universally keep saying that I have not edited the mod log.
We don't delete things out of it.
We don't rewrite stuff.
But at the same time, can't keep presenting these formerly headed users as if they were moderators.
That's confusing and bad.
That's got to go.
twitchtd I think modifying for fixing bugs seems reasonable
And I linked the issue and I shared it in the chat room.
Yeah, but the thing is, it's reasonable for fixing the bug, but then I can no longer universally say we don't modify mod logs.
chamlis_ maybe an auxiliary table that lets you annotate specific modlog entries? hopefully rare enough it doesn't need any UI, just the console
I have to say we don't modify mod logs asterisk or in parentheses, except when there's a bug.
And then that gets into what's a bug.
Yeah.
And if I were a big jerk, I would say,
Hold on, let me say it differently because the hypothetical is complicated enough.
I don't have to have an I in there.
If there were a jerk administrator, they could say, oh, we only edit the mod log entries if there are bugs.
And then they could say like, oh yeah, well, this user was such a
disaster that I had to secretly ban them and that's practically a kind of bug and then they would ban someone and delete the mod log entry and they would say we only delete things and for bugs I don't know I just I don't like having to qualify or caveat that and so I came up with a silly way to do it of say well
As long as it's like eight records, let's grab their unique IDs and have the code filter out those eight records when it's figuring out who's a moderator.
And if it presents one of those mod log entries, just say, hey, there's bad data on this page.
It's a little roundabout, but it demonstrates that
we are committed to being transparent in moderation and having a public record of moderation and we're not going to you know put it on the merkle tree and make a whole immutable data structure out of it i think the level of complexity of no we don't have a way to edit it and we don't do that is enough i don't know
02:11:44Users are allowed to doff their own hats. Why didn't that go to doff by user, though?
...59Should've. Yeah, because that's a scenario of someone doffing their own hat. So this is wrong.
02:12:23no route i see it right there it's a oh it's a post and you wanted to get is it doff is the form and doff by user is the verb there's some of that kind of stuff here yeah okay so that's what's happening doff is the getting restful routes This is why I want to split more things off into mod controllers. All right. So this test can go back. It was testing the right thing. I don't need to be so hard on my past. So Chandler, your idea of like an aux table, if we were editing these things or like if this wasn't the first bug like this, I would be reaching for that. But right now that feels like a little more complexity than I want. Or maybe I could add a column. Ooh, actually, what if I added a column, like these are the columns on the ModLog table, created at moderator user ID, thing action reason. What if I added a fix up column that was just a text column that could explain what the bug was?
02:13:59I don't know. I hesitate a little to add it to the data model. But I guess nobody cares that it's the row in the database but me. They care about the UI.
02:14:28chamlis_ to me there feels like a difference between a column on the original table and a column on another table joined
Yeah.
chamlis_ even though relationally there's no difference
Yeah, I can feel it, but, and that's what I was saying of like, that's a implementation detail that maybe only matters to me.
Oh yeah.
But I guess, no, you know, channelists there is, because what I'm saying is I want to be able to say, we don't edit the mod log, but if it's in the same table, I'm editing the mod log, even if it's a field that's not having been present before.
Yeah.
Yeah, kind of jumping up and down the levels of abstraction between are we talking about what the users see and are familiar with versus what's the database structure?
And I know to some extent that this is a little silly because an evil admin has root on the database.
They could go fire off update queries and rewrite history.
I don't do that, and I guess being willing to jump through hoops to be able to say universally that I don't edit mod log entries or secretly delete mod log entries is worth the hoop jumping.
It's a way of demonstrating that commitment.
And so even if it is kind of overthinking it in a practical sense,
02:16:08It shows that I'm not the evil admin who deletes stuff.
The other thing is, and this is purely practical, but it wouldn't work.
And the person who does that, the evil moderator, they are going to get caught because people read the mod log.
The Wayback Machine reads the mod log.
It is trivial to write a bot that snapshots the mod log every so often and highlights diffs.
NoGoodNick_ db backups might have the old mod log
And as soon as someone catches you in a diff, sneaky moderator, you have burned all of your reputation.
So... DB backups.
Yeah, they would.
NoGoodNick_ yes
chamlis_ could you (for show as much as anything) have a little green light verify created_at=modified_at for every row in the table?
twitchtd cya later pushcx
You're talking about the evil admin situation?
They would show up in backups, but only the evil admin would have those backups, right?
02:17:07chamlis_ see ya
I'll see you, TD.
Thanks for dropping in.
Create modified.
Yeah, ChamList, but that's sort of...
I don't know what that adds.
Actually, does that table even have a modified at on it?
...33Oh, it does. So it's called updatedAt. That's the default Rails name for that timestamp.
...44I mean, there shouldn't be any, right?
chamlis_ if people are already trusting the code in prod is the code on github, that would "prove" nothing was changed after the fact
so let's select action reason from moderations where graded at does not equal updated at I'm going to be very surprised if there's any, there are rows.
Oh, so this one, oh, there's going to be the rows for the entries where I've had to manually add things.
So some of these are.
Like this one, we were talking about mass tagging.
This is something I manually wrote in the Rails console.
122 is large to me though.
Use sysop hat.
There's something in using a sysop hat.
I don't know what this is.
What is touching these records?
Oh!
Oh, I know what it is it's so updated at is.
rails is taken over it and said that.
updated at is the key for all of its Russian doll caching.
So associated records.
If so, first off there's some kind of.
This one where they appear over like one second later is something else.
But this is gonna be when the associated object changes, it's touching the updated at so that it clears the presumed cache we have of it.
So yeah, we had a whole bunch of this with comments
where we were using updated at to mean last edited at, and then Rails decided somewhere around Rails 5 that updated at could be its own cache key.
And I guess it did that to the moderations tables.
Yeah.
Why did this show up three times?
Oh, because I...
Deleting a story is different, but I don't know what we're seeing.
In any case, I don't edit mod log entries and delete them.
02:20:30But we do have a artifact that could be naively interpreted that way, I guess, with the created at versus updated at.
If people already trust the code, yeah.
Ansible has been public for as long as I've been the admin.
So what is that?
October 2017.
So you can see how the code gets deployed.
One of the benefits of the office hour streams is you can hang out and you can see there's no magic.
I'm not hiding an extra Git branch up my sleeve and doing something sneaky like that because, again, I understand that an evil admin with root on the server can pull all kinds of shenanigans.
But honestly, you can look at this and you can see that
we are not doing something incredibly clever.
We are instead kind of duct tape and chicken wire holding the thing together sometimes.
I would have streamed the Hatchbox setup this weekend with Hunter if it wasn't for all those darn API keys and deploy keys and stuff that would show on stream, because that very unexciting drudge work of
wiring things together and struggling with vague error messages for five or six hours.
That's most of what adminning the site looks like.
And it doesn't show up in the mod log that, you know, I lost 45 minutes to a catty error message that I didn't understand.
And if you just look at the mod log, you might be like, oh, Hunter doesn't seem to do much.
Because you cannot see all of the advice he gives in private.
chamlis_ I'm going retrograde to you - migrated a caddy site to apache today, will be writing ansible tomorrow
You cannot see all that time spent on server administration.
All right.
So where are we at?
So this fixes that core bug.
Oh, I didn't throw away this.
02:22:57I want to backtrack back that update in place shouldn't be linked by users. Or two users, I guess.
02:23:10Oh, wow. Chalice. So congrats. You and I are averaging out then. You know, like you canceled out my vote in the election.
...26You want to just swap sites. You can be in charge of lobsters, and I'll be in charge of whatever site you're running. So that's the hat edit form. Gets rendered where?
...52Nowhere that I can find. Oh, it's the known.
02:24:04What am I missing?
This goes to the hat controller.
It's implicitly rendered by name.
chamlis_ I'll rewrite in RoR if you rewrite in Laravel
So it's just this edit action, which should not be visitable by a user.
That code is really thinly tested, so I have pretty low confidence in this stuff.
You know, I've heard nice things about Laravel.
The backslashes all over PHP now are a little odd to me.
I think the last PHP version I used was 5, something like that.
Maybe it was a little later.
2005?
2006, I think.
I think I touched a script after, but I actually wrote a non-trivial amount of PHP.
So I am way out of date with that language.
So what links to hat editing?
02:25:26NoGoodNick_ NotLikeThis
chamlis_ I've only ever done it with Laravel, I wouldn't trust myself to write a secure site in straight PHP
Yeah.
Okay.
So I am closing a security vulnerability that though
They didn't see the link hat owners.
Let's get this fixed and deployed.
Could rewrite their own hats.
Not great.
02:26:31chamlis_ good spot
merge stuff so let's push this up get ansible running wrong get ansible running it'll just finish in two or three hours you know running the full playback does playbook does take 11 or 12 minutes one server hatchbox is so appealing
02:27:07So I forgot the issue number because I got myself worked up about finding a minor vulnerability. All right, so that fixes the bugs. We won't have more bad data.
...49Now I wanna get all of these entries. And you know, if there's eight or 10, how do I wanna do this?
02:28:07This is up to date. I actually just refreshed this yesterday or the day before.
02:29:27okay so that's correct so now let's select users.username and moderations token from moderations join users on moderator user It's users.id, where users.id. ID is not in.
02:30:09Select ID from actual mods. I am sure this is horribly performant, but n equals like eight here, so we'll make it. Let's grab the reason and action as well, just because I want to see what I'm doing. I am working. Yeah. Okay. So all of these, all of these are clear. And the reason should be over here. Not let's fix that too.
02:31:08So I half asleep when I wrote this like this is a couple of bugs. All right, so. This in the middle. is the thing I want. And the reason I want these tokens rather than their IDs is I would rather not blow up the sister sites too. So having confirmed that we understand where this bad data is coming from, and there are 10 of them, I keep saying like eight to 10 because I didn't count, but now we know there's 10. Did I miss a comma or something? Editing SQL.
02:32:12So is these are my bad records. Actually, you know what, let me grab all of this for the scratch.
...39And then grab these tokens and
02:33:18What do I want to call this?
...39That's reasonable. All right, so. That's. Dad.
02:35:06And explain that error when they appear. What are we mad about standard? Do not freeze immutable objects. What's the? I got it wrong, didn't I? That's it. Okay, so that's a symbol. Is it capital? Or is it W? W is what I wanted. It becomes an array of strings. Okay, that's good.
02:36:05Let's go up to the controller.
...18And now here, user.moderators. Why? Oh, because it's, all right. model user it's using a scope which is good but that's where chores yeah where you are currently marked as a moderator or because former ones and i am sure someone with the event sourcing would love to make a case study out of this i'm actually reading a book on event sourcing now because i daydream about Not having these kinds of bugs.
02:37:43Why am I writing a SQL injection?
02:38:05That ought to do it.
...20It needs parentheses. I thought it would be smart about the type, but I guess not.
...36OK.
02:39:03Never going to get to Keybase and Wiki, because I do have to run down about 15 minutes. All right.
...24So this, that fixes the dropdown.
...36No, I'm not on local. That fixes the dropdown.
...51OK. Now the frontend needs to do it. Not filtered out, obviously. Just print a message.
02:40:22Let's see. So for style, it's got to be below the table and above the pagination, I think. We could put it under. So one of the reasons I changed it that way by just not showing it here is you can also say, I think it's username equals pushcx. No. How does it do it? Let's just filter. Moderator equals pushcx. So if we said moderator equals xy proto, we'd still find it. And I don't know if these links are hanging out there anywhere. But it feels bad to delete them and have that log disappear. So let's say it at the bottom here.
02:41:32That's the way to say, so I want to say if moderations may not token. So I want to see if any of them intersect, which What is it? A equals 1, 2. B equals 2, 3. Is it A union B? No. A intersect. Enter. You start completing it.
02:42:22OK, I only want the Boolean, so it's a nice fit. All right, so if I said, hey, intersect empty list, no. OK, so hey, not, ooh, intersect.
...48I'm getting tired of making more typos.
02:44:04And then how does that look? This table includes one or more bugged entries. I don't have to call it bugged. Technically, they're not bugs, they're just entries.
...45User who doffed a hat. Let's say was, because I believe the bug is fixed now. Being optimistic.
02:45:15OK, and so if we go back to by me and reload, we should not see that, and we don't. Oh, there's another one of those big edits. That seems pretty good. I look at the div. I know I could just edit those 10 things, But this is not a lot of code. It's one thing I can write a fairly clear message that explains what happened. I can link to this. I will make sure to include the issue in the commit message. It is one, call it two lines of code here. I think that's acceptable.
02:46:21Erroneous data is a little fancy. We can just call it bad data. I wonder if future me in 10 or 20 years is going to be like, why do I have this weird ass code? What was this about? Why do I have to special case this forever now that we've ported to Laravel?
...51Sorry, future Peter of 2055.
02:47:22I should actually run the build.
...30Right? Maybe I didn't break anything worse. That's all right. I got telebugs now. Oh, look, I did break stuff. So I will have nice web UI to explain my errors. It's actually, oh, it's really nice. It's not just that I don't drown in emails. It's, ah, I depended on the bad. What spec was that? At least I wrote specs.
02:48:30So there's the off and then I'll do an edit. Good.
...47Online. What's that? 36. Yeah. Create. That's just the name of the spec. Come here. Let me just be correct here. Instead of a... I don't know why I made that a regex. Must have been tired. Speaking of tired, what did I get wrong in syntax?
02:50:04I wonder if I made that a regex just so I didn't have to mess with the quotes to escape them.
...17I had two, did I not?
...24That's also hat related. I'm just going to squash that down then.
...38I need a new terminal because I'm using Vim as a multiplexer.
...53What is it? Fixup? No, that drops the commit.
02:51:03If I say squash, it'll let me edit.
...17How funny. All this time and dancing to avoid editing the mod log, and it's like, oh, well, I'll just edit the commit. Oh, man. Editing commits with jujutsu is really nice. I could grow to like that.
...42All right. So wait. Let's do these in order. This one, I want to mention it first because GitHub is going to, as soon as I push, it's going to put that commit here.
02:52:23chamlis_ I read Steve Klabnik's tutorial months ago but I should really work through it. I only remember a few bits
yeah for what it's worth it took me like 90 minutes two hours something like that and i was not attempting to i was dawdling and playing having a conversation on the couch too so there's that so now i'm up in the terminal if i push in the terminal see now this comes after how annoying
Like that would have made it more confusing to have these commits in opposite order.
Okay.
We're going to do this.
Fix on the today's office hours stream.
CX stream.
What's the date?
5-26.
Every detail.
Defailed?
Man, I am running down.
dzwdz what would you think about a separate (Moderators) option in there btw
No, we're at three hours.
dzwdz i only just joined
So if you have any last questions you want to slide in before the end of the stream, now is the time to do it, because I'm about to end the stream when I get this posted.
A separate moderators?
dzwdz the idea being that you could filter out nick changes in the modlog
I'm not sure what you're asking for.
dzwdz yeah
On the log, this?
02:53:54Filter out Nick changes.
Oh, so it would say like anything by any moderator.
Yeah, that's, that's totally reasonable.
do you know rails?
Do you want to PR that?
I don't want to YOLO something into this right now because I'm just going to mess it up.
So if you want to pull request that, yeah, I would take it as a feature.
dzwdz even if i knew rails i'm too busy with uni stuff rn sadly
Could you make it say any moderator rather than the plural word moderators?
I think that might be a little better.
I guess if it says users, oh, you don't know rails.
Okay.
Oh, maybe I can yellow.
02:55:08and paste. This is definitely a place where I should copy and paste these IDs instead of trying to retype them.
...41straight to the
02:56:19dzwdz i was trying to find an old ban recently, and there wasn't really any good way to look at the bans with no other noise
dzwdz just for context
dzwdz nah, i've already found it
to find an old ban you can ask me and i'll help dig it up but yeah i can see how you would want that if you remember something from the username or the message you can ask me and if you'd rather ask off stream just dm me otherwise yeah i'll try and add that feature
...50I'm writing nonsense. I'll just leave it as was. OK, good. So if we got that. See when I choose users.
02:58:22Rails is either going to make this trivial or a giant pain. Let's see. Because if I say user dot moderators, will I get what I want in this join?
...42Let's ask the console.
02:59:04dzwdz what approach did go with for the modlog, btw? special casing it?
dzwdz er, as in for the hat issue
Yeah, if you look at the issue, you can see it.
But I listed the 10 IDs of those.
And so, well, first I fixed the bug.
And that actually looks good.
Guess not.
...39And then I made it say that when it is printing this table, if it prints one of those 10 records, put a little text underneath explaining why there's bad data.
...55Where moderation.users in. Yeah. say user id i guess why did that work down here i guess it works with a hash all right load oh i didn't have to reload
03:00:28dzwdz yay
That looks like it does what you wanted.
So if I said, what have the moderators done recently?
We get lots of me.
No, this isn't immediately working.
...55Yeah. I don't need to yellow more bugs into the moderations table.
03:01:12dzwdz looks like you're filtering on the wrong user
Didn't.
Yeah, it does.
Yeah.
...41That's a new one on me.
...47Page out of bounds?
Oh, because it's the pagination.
All the pagination is copied and pasted across the site.
So it's finding none of them.
dzwdz yeah sorry lol
yeah all right i'm not gonna keep trying to hack this out because i've actually got to wind down the stream so i can go to a holiday party yeah i'm just gonna leave this i'll come back and maybe tomorrow morning i can knock it out but i get why you want it and it seems like it should just be you know two lines of code
chamlis_ thanks for the stream!
Frici was still productive by the sounds of it!
so let me see if i can get that right all right well folks thanks for tuning in to the office hours stream been good to have you didn't get to everything on my list but got to a good amount of it yeah i talked about this at least even if i didn't do it oh the wiki history yeah we've had a github wiki for a while i was going to
take that repo history, make a branch out of it, fold it in.
Oh yeah, very productive.
I'm happy for you.
And then honestly close the Wiki because there's been a lot of confusion over whether it's official or not.
Is it actually useful for users and any GitHub user to be able to edit it?
Is anybody watching it in case there's,
abuse the answer is no so if we're not getting anything out of it except the list of sister sites let's just ask sister sites to pr their name into our repo and it's like the simpsons song monorail mono repo mono repo all right
chamlis_ johnny on the monorepo
so that is the end of today's office hour stream next one will be thursday morning chicago time you can see the calendar on twitch or on my blog but is it in the black and white version all right take care folks