Six AI coding tools you'll get cancer without in 2025
Streamed
Fixed a race condition in Origin.find_or_create_by! by switching to create_or_find_by.
Renamed TypeID slug fields to token.
Added a new vibecoding tag to Lobsters after analyzing AI coding tool discussions.
Slap fight detection and moderation tools for heated threads.
Implemented Rails.routes to work around a Rails misdesign.
Moving cron jobs to Solid Queue for better background processing.
scratch
topics
dupe comment form https://github.com/lobsters/lobsters/issues/1550
origin create_or_find_by https://github.com/lobsters/lobsters/issues/1549
feature req https://github.com/lobsters/lobsters/issues/1547
feature req https://github.com/lobsters/lobsters/issues/1548
typeid: s/slug/token
solidqueue readme
ai coding tools, slapfight detection
what to call a new tag https://en.wikipedia.org/wiki/Vibe_coding
routes - cleanup idea from wroc_love.rb talk
neovim ai thread https://lobste.rs/s/6san1l/neovim_users_what_ai_tools_are_you_using
merging ui
query to find stories having comments that are more highly-upvoted than the story
select stories.created_at, stories.short_id as short_id, substr(title, 1, 60), stories.is_deleted as x, stories.score, count(*) from stories join comments on stories.id = c
omments.story_id where comments.score > stories.score group by stories.id having count(*) > 1 order by stories.created_at desc limit 20;
title
six ai coding tools you'll get cancer without in 2025
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
03:40This is Lobster's office hours. And I did not put up the little about to get started screen. Oh, well, I'm sure you all figured it out. So this is Lobster's. I'm Peter. I run the site. This is a open door time where you can feel free to drop questions about the site or codebase in chat anytime. And then when folks don't have questions or ideas or queries or other fun stuff I hack on the site. Sometimes, on really good days, I fix more bugs than I insert. We'll see what kind of day it is.
04:38All right.
...45think there were any open pull requests and i only closed some minor stuff since the last stream i've been talking with channelists about the css stuff this is going to be related i bet and then this one is one of my bugs that i have on my to-do list for this stream yeah let's jump in what do we got
pushcx Feel free to drop questions about the site or codebase in chat anytime!
This is not a bug.
There are two stories.
05:45The site had an OOM crash when I was editing a comment, and I would actually have believed that it's possible to see two comment forms. What's the... There we go. This is the design. I forgot to do my usual thing.
07:38Still thinking about that one. All right. So that's that bug. All right. Oh, this one. This got a lot more comments than I remember seeing. I actually left one comment about how following this guide, I replaced one thing and filed a todo for another of ours.
08:31All right, what was this?
...48Let's grab that because that's got to go.
09:26Thank you.
...53just doing a little moderation all right
10:03So back to this. So let's see this one. There is a race condition. It bugs the heck out of me where we implicitly create these origin objects for domains and origins we haven't seen before. And this, the finder create by, gets me infrequent exceptions in my inbox. And so I updated it to create or find by, which is supposed to do the create and then return the object if not, which is I guess the behavior I would really have preferred, which is not, is it not documented? It does not work as expected. This performance is not the reason to do this. Correctness is the reason to do this. I want to have exactly one thing. I want to not have an exception. There's my old rant about Rails being wrong about the wrong single layer of cleverness.
11:43And I read this post. Let me grab this.
...57And it sounded like the right thing was going to happen. See, I don't care about benchmark. This is not a useful benchmark, but.
12:20We have this unique constraint and we use exception handling. So why is my inbox now full of, I don't know, like six months worth of these? Yeah, it's all like, did I? Identifier's already been taken. All right. So I changed origin. Actually, I'm getting failures about domain. Is that what the bug is? Line 79. No, that's this line. So in the domain method, find or create origin. And I can't pull up the trace back on stream because it's full of just tokens and usernames and ips but it's pointing at this exact line of code all right so i'm just gonna i'm gonna put this back the way it was my bitrate may be dropping let me know if i get choppy or anything All right, so I put it back that way and it's gonna check what gets thrown. Active record, record invalid. That's very nonspecific.
14:25And I guess that's what I'm going to have to rescue.
...42So what I want to say here, I want to say if
16:29no it's not right about it
17:05See, the annoying thing is I don't have the object in scope, do I? And I don't know what is on this exception object. Let's look at what zeal says.
...42So I'm checking creator find by first because I thought it was pretty good. Yeah. See, most of them do exist.
18:17See, I'm not getting this record not found. Oh, wait a minute. Is it the bang method? Is that calls create bang? Wait, why would I want that? Because the created record on the second thread would be invalid. Maybe I just want to call find or create by without the bang.
...49And then I'm going to have to double check any call site for find or create origin, because I don't think any.
19:08Should I?
...20I want to raise if validations fail. Where'd zeal go? I don't think I do. I think I just want to check find or create origin.
...53that doesn't actually handle exceptions see nobody's using exceptions for control flow here. So I think this probably does us. And I'm pretty good about, pretty relaxed about kind of YOLOing this without testing it to death because it's easy to recreate this data if it goes bad and broad.
20:39There's a small chance that the build is broken. That's OK. So let's go ahead and get rid of some of these.
21:05OK, I did get the build back to green.
...25So nothing there. Good.
22:08And we'll just get that deploying now. Give me a second to look at the depend about bug off screen.
...28That's.
...37Oh, I guess that's actually a real bug. I'm not super worried. It's a denial of service kind of bug. We'll take it. We'll bump it. If anybody's curious, it is that... I think we use NetIMAP somewhere under the hood, either if we're talking for... Actually, do we? We don't talk to IMAP servers, do we? This must just be Rails. Rails has net IMAP in it. Let's look. Yeah, that's just, we're not affected by this. I was thinking it was any kind of network request because I didn't see the IMAP write off. All right. But might as well just bump.
23:42Where's its ID?
...57And... It helps if I commit the code. And... Let's get another deploy running. All right. So that's good. That's good. Let's close out this issue.
25:36Hmm.
26:13Good.
...21So there's two bugs. And let me... Let me go ahead and... What do we have for options? Yeah. A couple of things that are filed as feature requests since the last stream. This one was pretty simple.
...53We have a required CSS class that we use all over the place, and there is an HTML attribute that says that a field is required that the browser will enforce. It's been around forever, so I don't know why we don't use that. We might as well get good client-side validations, right?
27:19Maybe somebody will take that. And then the other feature request was, let's put that in the list. This big long thing. I was on a call and so I had a minute to type this up, but there is a whole bunch of, scripts that we can move over to jobs and lean more and more on solid queue because I got that service running in production. Rahul 1990 Gupta, who contributed a bunch in January, February. Set up active job and solid queue for us, but I had to do that last bit of production config of like make a system D config file for the service. I guess it's called a service file, I don't know. And then just kind of audit things that could be scripts, or I'm sorry, should be jobs. And mostly that's the things that are our current cron scripts. So I went down our daily job that has a couple of tasks. I already took one out the other day. I don't know what it was now. And then we have like a job that runs every five minutes. And a couple of these are very easy. And this is contributor bait. Because this one is like these first two are a single line of Ruby. And so if someone moves that into a job class, and adds an entry and recurring dot YML, that's done. So fingers crossed I can bait some people into helping out with features. And then the other place I am doing some feature work was this type ID. And I had a conversation since the last stream and I realized I named things poorly. So I wanted to jump into that or anybody else can. I have that hanging out.
30:04have a let's look at this in the readme yeah i added these lines about solid q yeah that's fun and they kind of depend on that last feature request of replacing these things people don't set the site up very often so i feel okay updating it all right even before the work is totally done and that routes thing is i'm going to do that after this type id But that's a clever thing I saw on a Rails post. Or no, a Rails talk. Watched a bunch of Rails talks over the weekend. My exciting life. Alright. So...
31:37so on these i called them slugs and they should not be slugs slug is like the human readable part of a url and it's generally it's almost always mutable and it is usually optional on a url so when you look at a story we put the title up in the url I would call that a slug. I just got the wrong word there.
32:23And those should be called tokens. So this type ID, if you haven't seen it, here, let me save the share this link. and the repo name it is a kind of encoded uuid with a hungarian notation type on the front of it that is inspired by stripe ids and stripe calls them tokens so let's call them tokens especially because in six months i'm going to look at slug and i'm not going to know why i called it that
33:10I think if I do rename column, it'll also do the indexes. So let's find out. Let's just grab all of these and definitely do this. So we don't need to lock those tables in prod.
...44There is a rename column, right?
pushcx https://github.com/lobsters/lob…
Am I gonna be sad?
Mm, typo.
pushcx https://github.com/jetify-com/t…
But I guess there is a rename column.
I wouldn't have, actually, no.
I probably tried to evaluate that argument first.
Okay, good.
All right, so let's just, I don't think I had any code looking at these.
Yeah, all right, I called the class slug instead of token.
let's double check that so let's just look at hat right so it's renamed and then show indexes oh it even renamed
All right, Rails.
So I've always kind of thought it's overkill that it has things like rename column.
But that's actually really nice that the index renamed.
I like that.
So we'll do that.
And then let's move at models concerns slug to at models concerns token rb.
you
35:42okay then i don't know why vim thinks there's some output and so it keeps jumping when i'm super distracting you know doing this when i put all these includes in i was like oh you know we are actually unprincipled about the order of Do we do extensions and inclusions? Do we do belongs, associations, and then scopes? Do we do attributes? Do we do validations? So I kind of put them in a fairly consistent place, but I'm not happy with it. I tried to put them by accessors, but not everybody has an accessor, so it just kind of hangs out in the middle in a weird way in some of these. I don't know. I don't know. Rails style issues. Let's add that. Why did db change? You reverted my database? What in the heck? I saw this before. This is something weird that the database has done. This error schema, I played with. solid errors over the weekend. It was interesting to me because I independently had the same idea for exception logging and production to a separate SQL database. It doesn't attach any information about the request or the session, so I can't actually use it to debug anything. And I found a couple of bugs in it, and it hasn't been active in months. The main developer is busy with other projects. So I don't know. I kept my branch around, and maybe it'll reappear in a few months.
38:02I bet I've still got that. Did I leave that in my database? Hold on. Or I open my config database. Yeah. So I guess the config database, which is not in Git for good reason, still included errors. So that got recreated by running db migrate. So just commented that out off screen. And there aren't any secrets or anything in there, but I wasn't sure. So all right. Let's grab this database. Why are there these charSet things that constantly reappear? There is some tiny difference between prod and my local, even though my local is dumps from prod.
39:17Why is that deleted? I must have done something weird to this database. All right.
40:03And then what was the peaking off screen? It was 1545. All right, let's get that deployed.
...37I'm actually really happy with the solid queue in production already. The way it expresses recurring tasks is very readable to me after, you know, a couple of decades of struggling with cron job syntax and counting to like the fourth field and making sure that I'm getting that syntax correct and then never getting any errors. I can pull up the It's a little web interface on stream. There's nothing sensitive there. All right, so we're jumping over to light mode here. And I'm going to let that migration run in the background. But it's got just the one queue for background jobs. I can see that the worker is alive. I can see all of the tasks that are defined in that recurring YML. And I can even kick them off extra if I want. And then these jobs, I mean, who uses a UUID when you could use a type ID, but otherwise this is all very clear and let's see. Okay. So it looks like the migration finished fine off screen. So this was queued a couple of seconds ago. and the URL is the individual job. So if I reload it, oh yeah, it already finished. So this is just a query that runs on today. MonkeyPatch it to use type IDs. You know, I have, like everyone who's used Rails for five years, I have notes for writing my own web framework. And one of the first notes is, well, now it's just used type IDs for all of the primary keys for things. because doing that right from the start, it was so nice. So type IDs, hold on, let me think before I speak out loud.
42:45So type ID says it is a GUID format inspired by Stripe IDs.
And so what they're referring to is, is it?
Not API.
gtfrvz monkeypatch it to use type ids
If you look at the Stripe docs, let's say we're starting a payment.
That's the big one, right?
Where's the main payments?
43:33let's go with checkout because oh no this is not the i'm fighting the general docs i'm trying to find the specific say create a subscription oh here we go better
44:02So one of the nice things about this Stripe API is that, here we go, docs.stripeapi.com slash API. So it's been a second since I worked here. This is the view I was looking for. So when you look under the cover of what's going on the wire back and forth to Stripe, you'll always see these identifiers like this. where it's like price underscore whatever and sk test is like oh that's my my api key it is my secret key in test and it was such an innovation when stripe just put hungarian notation on the top of these things what 15 ish years ago and it's all over the place these tokens stripe calls them tokens So mostly Stripe has gotten away from abbreviations. I bet this is like an old one and they would certainly have named this product instead of prod because that mental mapping is no fun. But what's not obvious from outside and is not secret is that these are the primary keys for the objects in Stripe's database. And so all over the place where you are dealing with records in the database your primary key looks like that and it is so useful because when you are on an invoice item and you have some random token do you have the price token do you have the product token do you have the customer token do you have the invoice token and you never have to wonder because all of them have a little identifier on the front and it's so nice it is Absolutely the correct design decision and. I wish stripe would write this up as you know the how and why of why tokens look this way and everything that has gone into them because they've changed over the years, nobody gets it right on the first try. and I wish every website did this, which is why like every three or four streams I mentioned, Stripe, please write this blog post. I would like this to be a totally standard thing that every API does, every database table does. It's just, it's totally worth it. There is the like minor half-baked developer performance concern. I say half-baked because I'm not an expert on this. Oh, well, you know, am I losing cardinality if all of my keys start with story underscore or comment underscore? I don't care. I don't want to care. It's so worth it. So anyways, I'm really liking... Solid queue, I'm really liking type ID. I wanna lean more into that. One of these days I'll make my own web front end, web framework really, backend I should say. All right. So there's this open issue about type ID. There are plenty of Places to do it. Oh, I should update the word in here because I know I said slug.
48:25And you know it's funny because, when I was writing that up, I was distracted because I was actually listening to the call I was on but. I knew something was wrong with the name, but I didn't have a better name. anyways totally worth it just to get that. going. All right.
49:03I don't have to do all of this for story merging, but I did put all of this in because I want it for headline. And before I add a new URL and another short ID, I was like, ah, let me put in this thing I've wanted for awhile.
...36so there's that and this oh routes routes was my thing that was hanging out so oh i will include let me throw this link into chat
so this is where i picked it up was this talk and i think it was a talk at the rock love rv conference from i don't know two weeks ago i spoke there in 2016. it was a really it was a really nice conference every conference has a different vibe and this one there's a lot of care put into things a lot of people who are just there for the love of it it was not a
fancy corporate conference.
And I'm really proud of the talk I gave.
I think it's the best talk I've given.
And then I spent the next, you know, day or something at the conference with people coming up and asking me really smart questions or having really good observations.
So I have a really fond spot in my heart for that conference.
It is hard to get over there.
It is held in WrocΕaw, Poland, which is
pushcx https://www.youtube.com/watch?v…
not a big city in poland it's like a small university town and it was a project just to get there so i will have to find an excuse to be already in europe for future conferences just to get more of that travel
So this bit was clever.
A hassle I have had, and I know I've griped about it on stream months ago, is that Rails doesn't make routing available in the right scope.
It makes it available to your view templates and your mail templates.
And I think one other place I can't remember
But that's not enough.
You need it all the time.
You need it in, like when we send web mentions, which is a cron job in the background that needs to become a active job.
Hey, see, I'm bringing it back around.
52:18Because that's not part of the request response cycle, you have to jump through hoops to generate routes. And what that looks like is we ask our story model for its short ID URL. And you're like, oh, that's an odd name for an attribute. Well, it's not an attribute. It is a hacky method of kludgy method of putting, doing a route, and if you put it on a god object, because your model layer is global, congrats, now you've made it available everywhere in Rails. And it's ugly, but it's that, or we have a couple of places that do this style of Rails application routes URL helpers, So if you dig into the rails object, you can get at the helpers. This should just be nice. And then what came up in the talk was, oh, if you just call this routes method, or if you make a routes module, you can go and say,
53:59gtfrvz wroclaw is in the top 5 biggest cities in poland
my wrong directory because i deployed how do i how do i include this actually no that's unknown i'll have to go back and look at the talk again all right so
Yeah, all right, I'm getting this error.
This I thought was going to riff off of the modes.
All right, what if I say just pull it off of that object?
55:16yeah see that's what I want to be able to do all over the place.
...47So I would have to name this, but you see how it gets me where I want to be.
56:01All right. Oh, well, thank you for that correction. So I guess that tells you I was jet lagged to hell when I went over there.
...20because that's a pretty basic mistake to misremember.
...38Oh, historical capital, okay. You know, I guess that's what happens when you only spend time in the one technical building of the university and the closest coffee shop to the technical building of the university is you just sort of imagine you're in a farm town. That's my mistake. Well, thank you for the correction. My apologies to WrocΕaw.
57:05Small in comparison to Chicago. I mean, what is the population? The metro area is 1.2. I mean, that's a real city. I should have gotten that right. The Chicago metro area is like 11 million, so roughly 10 times as much. But honestly, I was thinking that In my head, I was thinking it was like a farm school, which is just very, very wrong. So I was a couple orders of magnitude off, period.
...49I guess what that says is I should come up with another good talk idea, and hopefully they'll accept it.
gtfrvz i only remember that because in some video someone said the exact thame thing as you
And then instead of being very busy with work...
And only like fly in for the conference and fly out after the conference I will have to go and play tourist for a week.
gtfrvz it's probably small in comparison to chicago
Obviously to learn right.
58:23So let's. let's go find this and. I am not going to play the whole video. Is there any chance there's a? All right. So I want to skim the transcript real quick here for route.
...53I liked this talk a lot, actually. I only took one or two things out of it because I've hacked a lot of stuff onto apps or he was using features in a very different way than me. But yeah, you see, there's my annoyance. But it was very clear I was hearing the voice of experience of someone who has used a tool a lot and has an opinion about it. And it is a well-informed opinion. Okay, so this, all right. Yeah, so I copied this code directly and correctly. Where did this custom come from? Accepts a bill. Like in my case, I have an account at buildings. Ah, okay. So he has. some custom routes that he wants for these other places. So I don't need that line, but I wonder This is just that my development application isn't configured. So let's match his code again. I'm going to leave that as a comment just because then it'll more closely match. So if I say reload. All right. The load is. There we go. But if I say story URL, I should get that error. Yeah.
01:00:42Yes, we have. It's I need some config. You would get it from host name. Right? Is that what it's? No, it's domain. Yeah. Yeah, it's domain. So that's the
01:01:39I see even in development mode.
01:02:13gtfrvz probably need either a request or some config
gtfrvz where else would you get the hostname
Just do that.
...21Guess not. That's not the one I wanted to run, though. This is. Yeah, it's not present there. Is it on the config? That's what I wanted. There we go. All right, so now if I say, like, routes.rootPath, And if I save route URL, now I have a very short interface to the Rails router. And like to your question, I think you're asking about a core misdesign in Rails that it doesn't take the host name from a config file, it takes the host name from the web server. And I get that you want to be able to serve multiple domains, but then let's treat that as a first class object rather than some implicit state that hangs around on a global object.
01:04:00It's this config application, yeah. So yeah, look, here it is kind of slopped into the sitemap thing again. Sitemaps are broken. If somebody would like to fix that, we have an open bug in the issue tracker.
...20Right, so we worked around that with, there is a custom method that we just kind of slap onto Rails application. to get the site's domain, and then it gets used all over the place. This is a kludge. All right. So I've just added the one thing. This should run clean.
...54But I would like to see it run because I kind of struggled. So as soon as that's green, and it is, yes. All right.
01:06:02So some of these, like this, we could have just been using this path in a bunch of places. And I'm looking at this story short ID URL right here. We use the model method for consistency, but we should just use the, yeah, use the router properly. And if we split this out,
...37just want to make sure we're going to generate the right thing which is the short id which i'm touching this after i just was touching the thing that said let's stop doing it so now with a potential refactor and a redesign in flight yeah let's just leave that all right so this one
01:07:09I'm wondering about if there are places where we generate just the short ID and some places where we're going to want the short ID with title. So I'm going to think about that.
...31So users show.
...41Let's pick something a little friendlier.
...49See, hacks on hacks. So here we stuff the short URL in an instance variable.
01:08:08So that one place in the template can pick it up.
...19Let's stand up the dev server. And that was layouts application.
01:09:08I guess I could use the link to helper, right? Hang on. This is going to be like a refactoring. Let's put that back. Let's duplicate this. Then we will say link to. Then this becomes story short. ID, right? Yes.
01:10:03So then there's the question of, is this going to get generated with a title on it or not? And I think not, but we'll find out.
...18What are we mad about? Did I leave off a close quote?
...33okay so then this one becomes see i'm not going to hit that routes object unless i have to this view should where's my route going to call it story short id story short id url that's how routes work no route matches show i didn't id is nil oh i didn't know how to It didn't know how to turn the story object into this, which doesn't story have a to param?
01:11:47It does, weird. So what if I do like that? Okay. Still the hit ID. See, I'm having to get really specific here. You're still mad. Oh, I didn't put the, Oh, this whole thing is cause it's nil. All right. So once again, bring it out of there. what it is because this is nil it can't look at the model and infer it with two gram so the home should be fine and then let's look at an individual story and then check that it's in the header yeah so here's the original then this became an a so that's wrong and then all the rest of that stuff got slammed on And this became a path instead of, oh boy, what a cluster. All right, so it's a link tag.
01:13:10Let's see what that gets us. Gets us an error.
...22Is that not the helper rails?
...45Google is really aggressive about that. Let me ignore what you searched for. Search for something else.
01:14:08Oh, it is an auto discovery link tag. You didn't want to just call it link tag to mirror the. There probably is a reason for that.
...28I don't want to know it. You should pass.
...46doesn't have a type.
...54Okay. So we have a fab icon and audio tag preload, but you didn't make a link tag. That's just the generic canonical.
01:15:34And nobody is talking about that. All right. So we will just use the generic tag helper. Because I don't want to jump in and out of string suit. What are you mad about?
01:16:09I can say link. And so then it was trying to turn a hash into a string.
...26So link rev is canonical. href is. And this one is like it's different, but it is correct for the environment. So this is what I want. Good. Good thing I looked at that. So if I change this to say if story, and let's double check that the home page still loads. Yep. Then I can drop that. Well, no, not this one. One down, how many? 82? No, I don't need to go. All right, just go one at a time.
01:17:55So it's been more than an hour and I will do my little bumper that this is Lobster's office hours, work on the website, Lobsters. If you have any questions about the site or the community or the code base, you can pipe up anytime.
01:18:13Otherwise I work on the site, which is what I'm doing now. So let's look at this stories builder.
...38I got an error. I shouldn't have been able to get an error. Maybe just, that might've been a 404. Yeah, okay, so I'm supposed to say slash RSS.
...56Great. So I want to replace this comments URL
01:19:12See now, this is a good second choice because I'm getting right at, yeah, I can do this one next too. I'm getting it right at whether we have the title included or not.
...42So I think if I do this, I'll get the same thing. No. Just straight up missing. This is the, I'm editing the wrong field. All right, hang on. Let's grab that. Undo.
01:20:10This down here.
...22It's not at story. That's why I broke it. It's just story in this context.
...34Getting an error here. Is this? Yeah, this must be error output that I'm grepping. Because otherwise, I shouldn't be seeing the raw name of that method.
01:21:02Sort. I typoed.
...14That's not correct. So instead of getting the title slug in there, got the full thing. So let's go look at the story model. How does that work?
...45title as url all right so that was calling story short id url fugitive is tricking me no it's not it it is it was calling story dot
01:22:26comments URL. Okay. So what it's calling the comments URL is the one that has the title on the end of it. And I don't love that. Let's call it the short ID title URL. I wondered if I could touch the routes again. Let's do it up here. That's dead. All right. So here, actually, it's just the same.
01:23:19I guess I want that, right?
...28There we go. That's correct. So instead of being the comment URL, it is the story short URL with an explicit title field added, which is fine. Yeah. All right, so let's just do all the rest of the uses of comments URL. So wait, what do I have to do? Audit for URL four.
01:24:14Oh, hey, DLAMs. Yeah, that was not our finest thread. There was, I don't think I have it here.
...32So, this thread on NeoVim, I'm throwing the link in my scratch notes.
01:25:04So I think it's generally fine that there is a contingent of folks that doesn't like LLM-backed tools.
dlamz any thoughts on the general anti AI sentiments on lobsters? and the related semi blow up in the neovim thread the other week
People are entitled to their opinions, no big deal.
...27I saw these comments when they were posted because I was watching this one pretty closely.
pushcx https://lobste.rs/s/6san1l/neov…
They weren't quite over the line, but maybe I should have pulled them because, like, eventually this went somewhere nice, but these two kind of real snarky comments are designed to, I don't know, they just are not charitable.
And the none one is, yeah, fine, great, you know, you're virtuous.
The second one is a,
kind of a backhanded insult at people who use these tools.
Yeah, there's a subtext on it, but it's not necessarily worth, I don't know, I should maybe have pulled this second one from Plouam.
And then it turned into a,
There was this dumb slap fight of two people who were like i'm a better programmer and then do you think you're a better programmer and this guy is a better programmer and it was just vacuous.
This is another one.
This car Mac down here, I should have pulled that.
I haven't been in the thread in a minute.
01:27:12Got to improve the moderator tools. There's been some plans for it that have been creeping up my to-do list, but I shouldn't have missed that comment.
...36dlamz there's a subtext on the none imo
Speaking of vacuous comments, 100% this.
That is what an upvote is for.
...46So yeah, there were some good links in here.
01:28:00I don't have much more to say unless you have another question.
Does that answer your question?
There's kind of a mix of...
I should have been stricter on the snarky comment and saved us a meta thread, but...
Overall, only one part of that was bad.
dlamz yeah, I just wish people would filter the AI tag. it really detracts from those threads
I guess one way I've seen it put is... Yeah, it's...
It's also just disagreement is not as pleasant as agreement of people automatically being all on the same page and collaborating with very similar goals.
So they are just automatically less pleasant threads.
But disagreement is not always bad.
The rudeness of, well, you're bad at coding or something, that's got to go.
Because there are a lot of ways to disagree that are not, let me make you feel bad.
01:30:07dlamz nah I was just curious. in general it feels like AI threads are just not super fun to be in
i guess another part of it is it comes back to being this guy where
There are some people when they disagree, they just cannot let it go and let someone be wrong on the internet.
And a big chunk of this is they haven't figured out that if you have to like jump on it and litigate it every single time and be unceasing and tell everyone why they're wrong and demonstrate for the readers that they're wrong.
you are way less rhetorically effective and persuasive than if you are friendly about it and you say, hey, there's this other thing it doesn't take into account, or there's an extra thing being traded off that's a bad trade-off.
And even if someone rebuts you, making your point and standing behind it and moving on and letting someone else have the last word
is way more rhetorically effective than I have to post the last comment.
So when you see me delete stuff and I use the word slap fight, it is like it half means that people were insulting each other and it half means that they just could not let someone else have the last word.
And when someone does that as a commenter,
They look weak.
They look wrong.
Because if they were right, they would have been confident and confident enough to let someone else be wrong.
01:32:28All right, so let's go.
...35This one definitely has the same. Let's do the one that's going to be easiest first. Well, this one's going to require a helper method.
01:33:17This arguably should live for folks who are big fans of ask, don't tell. I know that they feel like this should belong on the story model, but I am really trying to get things like URL generation off of the models. I mean, the story model is 1180 lines long. It would be nice to take 20 or 30 out of that. Hopefully it'll get shorter with the headline model that comes in with the story UI. So this one is if, let's just find the method. Yeah.
01:34:30Got to double check something. I think that's the explicit API of presence, right? That you get the value if there is one. I think so. I just have to see it. And I want to say I wrote that. Returns the receiver if it's present. Otherwise returns nil. Okay, yes. Just making sure that's not implicit.
01:35:47I think I want a method for this.
moussx_ Oh I missed that AI thread
moussx_ That sucks
Now that I've typed it a couple of times, then this becomes story.routes.storyTitleURL.
It's nicer.
01:36:33You don't like the precedence, right? Yeah. And do this again for have.
...57So again, this is going to get duplicated.
01:37:13Reasonable. So these I'm going to delete.
...26Hey, subheader, welcome. There's a link under the video to the FAQ, but yeah, I have very minimal syntax highlighting. If you look, you will see that there is some on the comments that literals are in cursive. and that there's a little bit in the gutter. You'll also see some when I manage to get errors or warnings out of the linter.
...57Yeah, Ghost User, I think you're probably pretty right on that. And I have thought for a little while, we talked in IRC about how
01:38:16Maybe a year or two ago, two years ago, someone proposed making an LLM tag and I kind of punted and I was like, yeah, let's revisit this in six months.
Cause it wasn't clear.
Is this going to be a flash in a plant in the pan or a whole thing?
subh3ader No syntax highlighting?
You know, Chandler's I know hacker news does that.
We have talked about that and I think that would maybe be okay.
I think we should, if you like that idea, no, it's not so hard to implement.
ghost_user_1984 honestly asking for folks to filter the ai tag is like asking my dog to not bark at the fox which hangs out in the neighborhood.
We could almost write the query right here, but I don't want to change gears too much from the URL stuff.
If folks want to talk about the meta stuff, this is office hours.
That's what it's for.
I can stash all of this.
01:39:19All right.
...25moussx_ LUL
So my database here on local is like, what, a week out of date?
chamlis_ I wonder, wrt to the neovim thread, if there's anything you could do heuristically when comments start getting more upvotes than the story they're on
So recent-ish.
01:40:17pushcx https://lobste.rs/s/rsuenc/tag_…
ghost_user_1984 oh that kills threads Chamlis
ghost_user_1984 itβs an interesting moderator signal but doesnβt really do anything helpful on a site this size
moussx_ It seems hard to implement though?
ghost_user_1984 I ran the math like five years ago
Everybody looks at that.
chamlis_ yeah I was gonna ask how many comments there are matching that criteria
So the slap fight I pruned has that pattern of it's just two users going back and forth and nobody else interacting.
moussx_ I mean, you'd still have to look at the comments right?
And it is vivid when it's two users being pricks to each other.
ghost_user_1984 yeah
But nine times out of ten, those are some of the best threads on the site because it is someone saying, hey, wait a minute, what about X?
moussx_ I see
And then someone says, oh, well, that relates to this thing and check out this book.
And then they say, oh, that's really interesting.
It's related to my doctoral thesis.
And they say, oh, can I have a link?
And then you see the exact same structural pattern of two users going like seven or eight replies deep.
ghost_user_1984 I think the more interesting signal is threads where there are a limited subset of users interacting I.
And it is way more common than a pissing match, but they look basically the same.
ghost_user_1984 *in a deeply nested subtree
You can sort of, you can tease it out with flags, but you can find it with flags anyways.
So yeah, I've, I've gone down that rabbit hole, especially it's been a couple of years now, but I did actually try and develop something on that.
Like, are we detecting a slap fight?
I think,
I called it a slap fight or a pissing match in the code.
I don't remember the branch anymore.
A duet.
Yeah.
Moose, the hassle with that one is it's hard to get a lot of signal out of that because low upvotes can also mean that it's an unpopular story.
No, you don't suck.
And neither does Ghost User.
This is...
we are coming up with a lot of stuff and I'm talking through what I have tried before, because maybe you will say, well, what about one more thing?
And I will say, oh, I haven't tried that.
And then we will get great signal.
That's just how ideas work.
So this one, low upvotes are actually pretty common because imagine they're off on like, I don't know, the formal methods tag that doesn't tend to see a lot of activity.
And then that has a lot of
moussx_ Then, a duet, where the upvotes are low/negative?
little back and forths because people don't know too much about it and then the people who are into it are really big fans so you can't really tell low upvotes as these comments are bad versus these comments don't get attention we could actually tell if we had i don't know one or two orders of magnitude more comments and votes
moussx_ But yeah, seems like a long rabbit hole
Then the voting confidence algorithm we use would be a lot more useful right now we just don't have enough cardinality in our voting patterns.
moussx_ I suck at moderation
yeah I.
So if anybody doesn't remember ghost user 1984 is hunter on the site or i'm sorry 355 E three be on the site and hunter to the government and.
I don't know you probably have several other next I can't keep track.
But saying being a sysop means you've sucked at moderation for long enough to guess what's reasonable.
It's a joke that the first thing that you should know about moderation is you are going to make mistakes, and they are going to be very public.
And it's okay.
The goal is not to be perfect.
And the goal is definitely not to get criticized in public, because you will.
The goal is to make smaller mistakes and make things better.
All right.
I do have to do the join, don't I?
No, I don't.
01:44:25ghost_user_1984 oh, no, being a sysop means that Iβve sucked at moderation for long enough to just be able to guess whatβs reasonable
Let's grab the.
...38I was just trying to think about avoiding. Yeah, let's just say let's grab the story score. And then. I want the. count from stories join comments on stories.id let's just do this part over equals comments.storyid where comments.score is greater than story.score group by story.id Order by story. I'm going to try and get out of this habit of ordering by story created ID.
01:45:43ghost_user_1984 I do need to run and go play board games tonight, but is there a lying left for me on 1483?
Yeah, there's timeouts, or there's just stop replies, or put something on the mod dashboard to say, hey, even if nobody flagged this, this is a problem spot to look at.
01:46:08ghost_user_1984 *anything.
It's not story score, it's stories, because Rails names tables wrong.
So is this, so is this.
See, this is one more thing I'm going to fix if I ever make my own web framework.
Created ID, created add.
...32chamlis_ and even if some heuristic was accurate, I'm not sure what you could do in response. enforce timeouts in deep threads with alternating users?
Why did we...
So...
Let's add... Come here.
Readline.
I want an idea how frequent these are.
Created... What did I type wrong?
ghost_user_1984 the thing is we really donβt know.
Oh, I went up twice.
Readline's fighting me.
All right.
Let's cut the title off.
01:47:16All right, good enough, but 20 isn't good enough.
...26chamlis_ in general, is a mod looking at the site regularly throughout the full 24 hours?
moussx_ Just having a light go on in the mod dashboard is enough, maybe with a single button to timeout both users
We don't actually have a lot of, this is a little bit intentional and a little bit happenstance and a little bit me being superstitious, but there are sort of, on lobsters, there are not a lot of mod actions, and so it,
like the penalties go delete story or comment and then the next one up is ban user there really isn't any middle stuff like timeout or lock this story or lock this sub thread or anything like that and so yeah kind of ban domain
I don't know if that's stronger or less strong than ban user.
Really depends on the context.
But...
It's... Well, not in self-promo, right?
So...
01:48:28I don't think it was an intentional design on JCS's part.
Correct, Moose.
We can...
ban a domain.
And when there's like a subdomain thing like github.com slash spammy startup, we can ban just that section of a domain.
But there isn't anything like lock thread or timeout user.
And I'm not sure it might be good and it might be bad.
So the case for it being bad is, boy, you really like
there is the scalpel of removing a couple of comments and then you reach for the big bad ban hammer.
That doesn't feel great.
ghost_user_1984 the only middle is ban domain
Maybe we want more proportional responses.
ghost_user_1984 which is a bit orthogonal?
The flip side of that is, especially because of the invite mechanism, Lobster's users, more than average, know the site's features and limitations and know that if you are getting comments deleted, the next thing the mod can do to you is ban you
Boy, that's a real clear idea that you should stop.
I don't know.
moussx_ what's ban domain? Banning links from the domain?
That might lead people to want to stop more?
ghost_user_1984 yeah
I mean, I have written Maus along those lines.
The thing that you can't see because it would be a
punishment is that I DM people and I have told many people hey last warning if you keep picking a fight in this thread hey last warning or hey you're done in that thread because you can't be nice about it if you're having a bad day take a break and so I
01:50:26The last warning is literally a message that is often exactly that explicit.
moussx_ I like timing out as a middle step, because that's a very strong "last warning" before a ban imo (like you're timed out for a week)
The weirdest ones from the trolls who want to fight, they're always like, is that a threat?
And my answer is like, it's the rules.
Like, I guess the rules are kind of a threat in that if you don't follow the rules, you will be yoked.
But it's not, it doesn't really feel like threat is the right word there.
I guess I should break out this thesaurus sometimes.
01:51:01moussx_ Fair
it's interesting see i recognize this butthole one that was griping or like mocking logos all right so here's your idea chanlis of do we want to look at when comments start getting more upvotes than the story they're on and i think
Unless this FreeBSD story, I don't recognize this one.
I mean, I recognize the title, but I don't remember it being a moderation hotspot.
...46moussx_ Oh ok, you're much more "human-oriented" than me :D
Oh, this was the one where people were correcting VermaDen.
I remember this.
Yeah.
So that one was kind of a that one was interesting for a different reason that the store the comments were getting there were several comments that were scored higher than the story because there were some pretty big errors in the story.
01:52:21chamlis_ oh speaking of, got a second hand roget's today
oh great chanlis the let's see that audio probably cut out because i turned around to look at mine because i love it the barbara what's her name something with a k barbara kipfer which edition actually it's i wanted to have it close on my desk right
and there actually isn't a great place for me to put it on my desk so i will turn on cat cam he's not present so my my thesaurus is this big orange volume sitting next to the cat's favorite spot
01:53:22Anyways, for anybody who doesn't know the context, one of my strongest oddball beliefs is that every programmer should have a printed thesaurus within arm's reach because it's an incredibly valuable tool. We have that joke that there are two hard things in computer science and the first one is naming things. Have a good thesaurus.
...57chamlis_ from penguin here in the UK, turned out it's a "concise" one, but still 800 odd pages
NoGoodNick_ Chamlis Amalk-ney?
Somebody wrote a book up there.
01:54:22chamlis_ ... busted
I wonder if I filtered this to...
NoGoodNick_ grateful to make your acquaintance
There's a bunch of these I don't recognize as having problem discussions, but some of them
Actually, this one feels like an even less strong signal.
So, Chambliss, I think you're correct in that sometimes what you're seeing is the story isn't very good.
But sometimes what you're seeing is somebody wrote an excellent comment, and I don't want to penalize the second one.
01:55:36That's some incredible variable naming that I don't know whether to hate it or love it.
mjiig On the flip side, I once saw a (possibly joke?) piece of code doing the tortoise and hare algorithm in two dimensions and once, which had named the pointers tortoise, hare, turtle and rabbit
So yeah, Chambliss, that's a good idea.
Let me throw this query in my notes because somebody is going to ask about it again in the future.
This is one of those perennial ideas.
01:56:24mjiig *at once
All right, so kind of popping our meta stack a little.
We had a thread, a meta thread two years ago about whether we should have an LLM tag.
And this was, was it actually in December?
No, this was after they'd been out a couple of months.
And
chamlis_ right, that makes sense
I think what we probably should do is create a tag called llm coding tools, because that is the thing that people get mad about and want to filter out.
And I go back and forth on whether it should be Ai coding tools or llm coding tools.
01:57:24How much.
yeah this one of is the tag gonna survive a hype cycle this was why i said like let's punt for six months and then nobody picked it back up but let's look at some recent no i want newest right oh slash t is we don't have down votes moose
We only have flags and like, yes, they are in the table, but we just don't have the traffic to get much signal out of them.
And because flags put things on the MAD dashboard, I have really pushed to...
So flags originally were a little downvote arrow here.
And when you clicked it, there would be the same reasons that you see when you flag something.
what ended up happening was everyone is trained into clicking downvote when they disagree with something by reddit and hacker news and so they would click downvote on something and they would get the pop-up menu on lobsters d lambs there are so many startups doing that and then once they got that pop-up they would say well i disagree and that's not one of the reasons so i will just pick
And then they would just pick a random reason.
moussx_ Maybe finding "controversial" comments might help too: if you find a thread where comments aren't popular (negative score or less than 50% upvote), for stories that have more than X views
And it made the mod dashboard pretty unusable because I got no signal.
I just got just absolute nonsense.
And I would be like, how is this spam?
And they would be like, well, they're repeating something I don't like.
moussx_ The X views threshold hopefully prunes out the low traffic
That's not what spam actually is.
moussx_ Oh mb
That's just you disagreeing with someone.
And we kicked around the idea of having a disagree flag that had a score of zero
moussx_ I haven't been on lobsters for a while :(
But the thing that happens, the thing that that doesn't do is that when people click the downward pointing arrow, they want to punish the person who made that comment and they want to see number go down.
And if number don't go down, it's not satisfying.
And so they will pick a different flag reason.
dlamz use LLMs for moderation ;)
And so that is why this column is called upvoters.
And Chandlis and I were just working on the CSS the last week.
And I've been looking at that name upvoters for a while because it
moussx_ makes sense
just called voters for the longest time because there were two things but now there's just one and so that name is a little bit of a relic but it's just trying to get signal out of flags because otherwise down vote means disagree and everything else goes to hell separating down vote as here's your disagree and flag as a no this is really bad thing that's sort of how reddit does it
I don't know that it's an improvement, especially until you're at their scale.
I don't know.
Anyways, reputation system for good flaggers.
NoGoodNick_ a reputation system for good flaggers?
I seriously consider one, right?
Like if the value of a flag is negative one, we could make the value of a flag equal to, you know, the number between zero and negative one.
That is the proportion of how many of the stories and comments you flagged or especially how many of the stories and comments new flag for that reason, did a moderator come and delete.
i've I think something like that might work.
And that one is it's less a reputation system and more.
At that point it becomes a, can you correctly predict the mods decision?
And right now there's a lot of noise in that signal because like I was just in that NeoVim thread and saw a comment I absolutely should have deleted nine days ago and I just missed it.
Right.
Yeah, it is sort of Bayes.
It is sort of this confidence calculation that we do on comment scores.
And you'd put a filter on it so it only looks back for six months, nine months, maybe a year.
I think before I do that, there are some things I need to improve in the mod tooling, and then I need to recruit more moderators.
And then at that point, something like a reputation system for good flaggers becomes,
chamlis_ you could bayes that up, for sure
better but moderation on the site has to get better before it can get more responsibility can get put on commenters if that makes sense a little bit of a brain dump there so how many of these are llm coding tools
02:03:05I guess this one, probably this one too. I was iffy on whether to keep this one because it's mostly drama in another community. I don't know. On the other hand, it also feels a lot like what UChicago did to me. Yeah, so this one, not this one. not this one definitely this one so wait hold on let me actually count got one two three four five six seven no eight nine call it 10 11 out of what the first we put 20 of these on a page right 20 or 25 25. I guess that's what 40% that feels pretty substantial. And that's just the last, not even two weeks.
02:04:54All right. So we got one, arguably two, three, four,
02:05:15Guess five.
...24Six. I should have caught that name.
...39Seven. Eight. Nine. 10 looks like another 10 11 so again 40 are of these are oh probably this one too oh no it's actually from meta i thought it was kind of an insulting title just skimming yeah these so if like 40 of these are ai coding tools ish that does seem to be the thing that makes people maddest yeah so like honestly just look at these comment counts like there is no vibe engineering 46 comments horseless intelligence 37 comments like whereas this one i actually liked this one why
02:06:44What is it called? They have a Claude Plays Pokemon bot. Why am I fighting the... There we go. The Claude Plays Pokemon bot is stuck in a cave or something. I don't totally know Pokemon the game, but... It's just an interesting exploration where they actually talk about what are the limits of these LLMs and you look at it and some of it is like, oh, actually, until someone ran this experiment, I don't think I could have realized that the way the agent interacts with the game should maybe have looked different. Is that cheating? I don't know. But it got one comment. were the AI coding tool ones. And if I skim back, they're the ones that are getting the big piles of comments. And a big chunk of it is people are mad about AI coding tools.
02:08:00Moose, could you expand on your statement a little bit?
pushcx https://arstechnica.com/ai/2025…
Oh, I was actually just talking to Katie.
moussx_ clickbaiting is working well :(
I don't know what to call them because they're Katie on the site and Z everywhere on their personal stuff.
...22They're doing some interesting things with Anubis, and I don't want to use Anubis because I don't want to take a hard dependency on JavaScript.
Lobster's has a really fat tail of unusual browsers and outdated browsers and homebrew browsers.
And I don't want to break, well, and also especially privacy conscious people who don't want to turn on JavaScript.
And so I don't want to take a depth on Anubis as is, but Katie is working on a version of it that can just work on the,
moussx_ And Anubis, because it's AI fighting AI
really before it hits the app layer kind of stuff i don't want to spoil their surprise you'll have to go look at their blue sky and mastodon feeds but i don't know tinkering title seems violent in a way that's fair i do occasionally tone down
clickbaity titles but I try and do it pretty infrequently unless there's something really misleading in a title or hey everybody who uses X is dumb I want to leave them alone but there is an art to writing a good headline on the other hand it's
moussx_ Just that the stories in the ai category here, have the most "engagement" (comments) when the title seems "violent" in a way
an evolutionary process luckily we're small enough for it not really to be a runaway but if you do something like reward clickbait but remove the worst of it like congratulations you have just created a war game against yourself where the game is figure out the most clickbaity title that the moderator won't remove and you will spend the rest of your life dealing with infinite edge cases
That's why a lot of the guidelines are pretty short, like no bigotry rather than like, let me list every ism that assholes do just like, ah, no, none of that, nothing in that neighborhood.
I'm not going to get into whether you are just, you know, making a discriminatory comment about somebody's ethnicity or their race, or is there even a difference between those two things?
Like was that misogyny or was that trans misogyny?
Like,
I don't actually have to care about the ontology of bigotry.
Just all of that can get yeeted.
And so the risk with clickbait is if we list all of the things not to do, like 10 LLM coding tools you'll die of cancer without in 2025, number nine will shock you.
Like, okay, I can think of six things wrong with that.
title, but if I actually list out the six in the rules, we have just started playing a real shitty iterated game.
02:11:39What did I just say was that title? That's actually, that's a great, so I make these stream archives have silly titles. What was it? Six, I have to dig in the transcript. Six AI coding tools you'll get cancer without in 2025. It was something like that. I'll find it.
02:12:03Yeah, a lot of community sites, you can't do it at like Facebook scale, but a lot of community sites have a catch-all like bad vibes kind of guideline of, hey, if you are playing the game of walking right up to the line and saying, I'm not touching you, we're going to yeet you for being a jerk anyways.
Or even if we haven't correctly predicted all of the ways someone can be rude,
you can get tossed for bad vibes.
moussx_ yeah, having long rules tend to attract the lawyer-types offenders
I think that is a pretty healthy idea for most communities.
...45So anyways, having skimmed the last three pages of posts in the LLM or in the AI tag,
...58I like the idea of a AI coding tool tag more. I don't love the name, whether it's like, I don't want AI tool. It's honestly just the length. If you look at our tags, they tend to be one or two words. I think it might actually be the only three word one. Yeah. And we are a little inconsistent, like formal methods we run together. I want to say another one. We have an underscore. No, I guess not. We just run them together. We're kicking around one about, especially in IRC, someone made a meta thread about whether we should have a tag somewhere in the neighborhood of logic programming. Merkle tree has a dash. Okay, yeah, that's me being inconsistent. That one is my mistake. All of the rest of them are run together. Thank you.
02:14:08So if we could come up with maybe an ideally one-word term for AI coding tools, don't say slop dev.
Honestly, maybe Vibe.
It's been embraced by the actual users, and it could be broad enough that if we had one that was just Vibe for AI and LLM coding tools,
Didn't O'Reilly just, so I saw this go by on, really, is there not?
Do I have to go to like slash books?
Oh my God, this is O'Reilly.
moussx_ merkle-tree has a dash
Where's your actual list of books?
Someone posted an O'Reilly cover that said like vibe engineering.
And some of the comments around it, I wasn't sure if it was a joke or not.
And I guess I'm not sure.
Cause you know, okay.
So this is just a blog post about vibe coding, right?
They didn't actually make a book.
02:15:42Oh, no, here we go.
And it comes up with a platform for their online course.
That's...
Mouse, you got there just before me.
Thank you.
That's...
moussx_ And maybe "vibe" will trigger the haters so much they will actually hide it?
It's a book on how not to read.
It's a movie on how not to leave your house and go to the movies.
Okay.
Yeah.
Yeah, it's going to be vibe or vibe coding.
So we're going to mush it together so it becomes one word if it's vibe coding.
What do we think, vibe or vibes?
I think singular.
Most of our tags are singular.
Except for formal methods, distribute system.
Things are inherently plural.
Right, so I don't want to say vibes because that's not what people are calling it.
I am hip with the slang.
I'm not a square.
Yeah, daddy-o.
So do we want to just call it vibe?
02:17:04moussx_ https://www.oreilly.com/library…
I'm not YOLOing this tag.
pushcx https://www.oreilly.com/library…
moussx_ yeah just found it too
I've been seriously thinking about it for months and we were just talking a bunch about it in the...
irc room that we never revisited the llm tag all right no the llm proposal that thread was like two years ago let me hop on irc
My back right here, let me just.
Right OK, so now I can put this up on stream, so this is the lobsters IRC channel and I don't usually have it open when I stream because I can't watch that and the slack chat slack twitch chat at the same time.
02:18:29moussx_ no one calls it "vibes coding" yeah
moussx_ I like it at least
About putting tools.
To be.
02:19:50moussx_ But you can post in the LLM proposal and see if it sticks
moussx_ oh ok
moussx_ technomancy spotted
regular reaction to the book.
Yeah.
02:20:16I guess we could also ask by coding. I was trying to see, did Google stop saying the number of hits? Yeah, I guess so.
...44By coder?
...59It's not actually useful anymore.
moussx_ LUL regular reaction to the book
Oh, there we go.
It's hiding under tools.
All right.
So one 52 for that 7 million for that.
02:21:54All right. Oh wait, Wikipedia has a page. Oh ho, Wikipedia has a page. All right. All right, it's gonna be vibe coding. I mean, obviously Wikipedia is right, right? It's only from, oh, it's more recent? February? It's only been two months? Feels like so much longer. So very much longer. All right.
02:22:54All right, so. What else we talked about? We talked about AI coding, tools, slap fight detection, iTerm.
02:23:28moussx_ Ha, I love how the wiki page for Vibe coding actually reads "or vibecoding"
Let's see, where am I here?
...41Oh, hey, Twitch again.
Or you're just TD, right?
Because you couldn't get just TD on Twitch.
moussx_ Wikipedia is the ultimate battlefront for edits/moderation
Yeah, I keep calling you Twitch.
All right, light mode warning.
Let's create a tag.
02:24:13moussx_ Indeed, it feels wayyyyy longer
This is where's all right.
Vim and Emacs are in tools.
We're going to just put this in tools.
...51twitchtd hi pushcx
know what i'm actually going to say no for new users it's not a media it's not an active tag hotness mod boy that's real tempting to put on there where's i thought that
Is it on filters?
twitchtd it's all good, twitch, td, both work for me :)
I thought there was a page listing the hotness mods.
02:25:36Oh, it's on the story submission form.
It should probably be elsewhere, but it's here in this dropdown, right?
Yeah, so announcement gets to double.
I've been really thinking about cranking the, yeah, culture gets a minor penalty.
Really cranking the penalty on video, actually.
moussx_ 100000
We've had a bunch of stuff, and it's just like, if we look at the YouTube domain, we've gotten a lot of things that really should just be articles.
We don't use hotness mod too much.
With our low vote count, it's hard for it to have too much effect.
02:26:46All right, so our standard mild discouragement is minus 0.25.
twitchtd ooh, vibe coding as a tag
I'm just going to repeat that.
Well, is that my opinion?
02:27:05No, it's really not. I'm going to leave it at zero. And then we're going to have a whole bunch of threads where we encourage people to filter out the tag.
...36All right, so let's go find and start tagging some stories because. Yeah, let's see, what's the. I don't want to go through two years of stories.
02:28:01Yeah, that seems real likely mouse.
Is it mouse or moose?
I guess there's two S's.
Or is it Mao SSX, because you're really into snowboarding?
More like Moose.
moussx_ I'd leave it there tbh
All right.
How do I want to do this?
...57That's 120. If I do it here, there isn't going to be a mod log message.
02:29:11moussx_ We just need to retag aggressively for the first few weeks, and then hopefully they'll just filter it out. Pretty sure it'll reach the top of hidden tags fast
I'm just going to do a totally different thing.
...28This is a open offer here to folks here on Twitch.
moussx_ more like Moose theoretically
If someone would like to go through the AI tag,
02:30:12moussx_ haha never had the ssx, feels nice to think about it
that off O'Reilly I get it they want to have a book about everything but I don't know I'll probably read it as one of those books where
I'm finding something to disagree with on every page.
I hate read books pretty regularly, actually.
02:31:11There's nothing like on the homepage right now about it, right?
...27Books have a lead time. Takes them a while to get written, get edited, get into print. August has got to be like an e-book edition. Otherwise, You know, I'm actually not so confident about book production timelines that I want to opine. I think it usually takes a couple of months to get a book printed and shipped over because most of the book printing happens in China. I don't know. Maybe they're just going to do an e-book release.
02:32:11All right.
...22moussx_ is it possible to look for multiple tags from the website? Seems like a list of "ai" + "prgramming" is going to be a nice first batch
Albynton it feels early to already have a book about it
moussx_ @Albynton The book is planned for August
oh yeah albinton yeah their term was coined in february and it's coming out in august and honestly even that feels very fast to me for a print book for an ebook it is fast but not ridiculously fast implausibly fast i don't know o'reilly does actually edit their books unlike some technical publishers that
Well, I actually can name because I don't like them.
All right.
We're kind of winding down about the.
What do you call it, the.
Vibe coding tag and.
The meta discussion around norms
dlamz being into AI and not into the term vibe coding isn't a tenable position
If anybody has more to say that, now is a great time.
Otherwise, I'm going to dig back into the routes here.
02:33:33dlamz gonna need to work on that
Albynton @moussx_ oh, it's not out yet? I missunderstood then. Sounds like a better timeframe
Geez, Peter, you're logged into prod.
Lost track of that.
All right.
...48This is why I started making a to-do list. I put it in the routes file. So it's over here. All right. Yeah, I was working on URL or comments URL. And then also. Yeah.
02:34:17What are you mad about? so this one can change to i don't think so just from my skim there of the tag i didn't see that it was used all the time but If I'm going to go over all of them anyways, I'd rather not have to do it twice. Or... I don't know. Just... It is one task to look at each story and figure out if the tag applies, and it is two tasks to look at the story and figure out if the tag applies or figure out if the tag was wrongly applied. I don't know. Well, good to have you, Moose. Alright, so...
02:35:28Bim, chill. I used git stash. You gonna yell about every file? Yeah, you are. Oh my god, Bim.
...58moussx_ Just going to say that listing all stories with both ai and programming is probably easier in the DB that in the app, and that's going to be 70/80% of the work to migrate stories to vibecoding
moussx_ gotta go sleep anyways. Always a pleasure to catch these office hours
Oh, this one got reloaded, actually.
That's why.
My edit got thrown away.
moussx_ fair enough
Alright.
Where's my...
I thought I named it.
02:36:33Ah, Vim was warning me that my work was getting thrown away. It's almost like Vim is a really good tool and I should have paid attention to it. What else work did I just overwrite?
02:37:11And from exciting meta to very unexciting refactoring. Lobster's office hours in a nutshell.
...47Good. Good. Good. We'll get there. One URL at a time.
02:38:18All right. Yeah, I got. Oh, that's my to do. All right. So if I got all of those now, my path. Yeah, a couple of those. Is there a benefit to these being a path instead of a URL? Not really. So.
02:39:19What do I want here?
...53How did I know there was going to be a broken build? Because I'm touching something important. Because I deleted that function before I did all of these updates. That's why. Yeah, that's fine. I just got to keep doing updates. Not in a safe place right now.
02:40:56So for the eagle-eyed, those are already edited because of heinous inline partial. So now I should be back to a green build because I deleted those methods before I had renamed or updated all the call sites. Looks like I may have missed one.
02:41:27That's interesting.
...33Who's failing? Application controller, app views, layouts, application, line 24. Is that the link tag?
...51Yeah, it is.
...59Is it edit forms failing? Yeah, okay, it's edit form.
02:42:10So this one really only appears on the story show page. So maybe I do want to take it back to... Yeah, this is like... injecting a value into the header for exactly one action.
02:43:00I mean, as long as that's what I'm expressing. Let me just say it in one place instead of coupling two parts of code together. Right? It's bad, but it's a self-contained bad. I know what I'm looking at.
...22Let's go back to that view source, make sure I didn't break anything.
...49I'm not seeing my link. Wasn't it up here? It was right after the fav icon. So it is missing. Well.
02:44:16Can't do this. I want to do it on the story show. I guess I never hit the right side of that. If is it current action? It's familiar. I know I've committed this in one time somewhere in the code base, right?
02:45:00Action name. OK. And then controllers and instance, that's why that failed, right? So this wants to be.
...36It's a windy one in Chicago today.
02:46:00Can I just ask controller name? There's got to be a way, right?
...17Controller underscore name. All right. Could have guessed that one. There's a whole thing with yield and named locations, and I just don't want to get into it. Let's delete that debug. I don't need it. I didn't rename action name.
02:47:19There we go.
...34All right. We're getting there. That's one down.
02:48:05I have to touch that, won't I?
...13Specs should be good. And so it is worth calling out since I've been streaming about two hours, 45 minutes, but I usually run about three hours. So if you have any last questions or comments on the site, now is a great time to get those in.
...47I guess I won't be doing too much work on merging, but the meta stuff was good today. So NBD.
...58Yeah, let me make a little... Let's see.
02:49:26All right, we're finding partials. So I think I can say, what is it, backslash that? No, that's just a, yeah, fun with regular expressions. I know in Vim it would be B, right? There we go. That's what I wanted. All right.
02:50:01So this one becomes
...43So comments URL, I gotta just put that in manually now. So that becomes,
02:51:23I saw short ID URL. And I saw a URL. Well, that one's what's the URL this story is pointing at. So that's fine.
...54Oh, why don't we have two of those? Hold on. Where's that curl line?
02:52:11I guess I lost it in the terminal. All right, let's grab. Just need that ID.
...30That's including all the comments, I guess. All right. Actually, I think I have the JSON thing installed, right? So I think I can just... So I saw it earlier on stream. Yes, all right, that's a lot easier. Yeah, okay, so we are including both the short ID URL and the comments URL. That's redundant, but fine. This is the sort of backwards compatibility I don't want to have to maintain because we don't have an API. We have a couple of things that can render as JSON because so many people want it. But then I know for the tokens, replacing short ID, I'm going to break any one of those scrapers.
02:54:14Here's one more place in the model that really wants that.
...44And I'm getting a real... There are just so many of these that I wonder how many... Oh, I deleted the methods. Well, at least half the test suite is failing. That's promising, because I worry that a bunch of these are going to be in untested stuff, and I'm going to have a typo, and I'm going to have broad 500s, and it's going to be tacky. I hate having to apologize for broad 500s. Oh. As I'm coming to the end of this stream, if someone knows another developer that they would want to raid, please let me know. This one is comment story comments URL. OK, so that's routes.
02:55:49Story, title, URL. Maybe I should take story out of that. It's a little redundant.
02:56:37Okay, so I got about 10 of these. I am not going to refactor that because I'm going to delete that in a minute, but it's not on my list. That's going to be a fun one to find.
02:57:24OK. There's somebody who's doing event sourcing in the RAID browser. That's tempting. I just picked up a book on event sourcing.
02:58:05Straightforward. OK, so there's that. All right, home stretch on this part of the routing stuff. And then I'm going to wind down the stream. So if you have any very last questions or comments, now is the time.
...26This one, not a great test. I should probably just say
02:59:41already got that one yeah did that one oh i wrapped around okay all right so there's all of the story comments url i didn't do all the story.comments path how many we got yeah that's enough that I'm going to punt. Green build? It'd be nice to end the stream with a green build. I'm going to end it either way. No. Some kind of typo.
03:00:21did something in a very popular template to break half of the build oh it's the because i deleted comments path it's because i'm halfway in all right that's fine we're gonna call that good all right is this yeah
...59Cool. All right, there we go. That's been Lobster's Office Hours. Thanks all for joining me. And I'm gonna hit the button to send everybody over to a stream about event sourcing. The next scheduled stream will be Thursday morning. There is a chance I will miss that one because of a family thing. that runs late on Wednesday, so that one's iffy. Best way to find out is to watch my Blue Sky or Mastodon feeds to find out. All right, folks, take care.