longiclangs
Streamed
Logic languages tag. Safari bug with tag field, again (again). CSS font hierarchy. ARIA announcements. Thomasβs SQLite PR is cooking. Stuff I vibecoding reflections. Stream sniping coders. Moved tag editing to mod controllers.
scratch
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
05:03pushcx Welcome to Lobsters office hours, ask questions anytime!
Hey, folks.
Welcome to Lobster's Office Hours.
Ask questions anytime.
So this is Lobster's on screen.
It's web form.
I should read this one.
They're very...
There's a subtle distinction I sometimes make that's like, are we talking about using software or making software?
A lot of the articles we get are about using software, and especially if they're about, there's really not anything about implementation or even, they don't even have the same excuse that they're doing it by example.
I'm just kind of riffing.
I haven't actually tried to read this article.
Sometimes I remove stuff when it's especially about personal gripes rather than implementation, something to make.
So yeah, my top to-do list item, because I kind of work through maintenance when folks aren't asking questions.
is this proposal by VEC for a logic language tag.
06:40So there's that. And part of it, there we go, is an admin tool for filling new tags.
07:07Yeah, and I guess that's going to be the CLI tool. So this is a pretty uncommon event. And then, you know, actually creating this tag.
...30Let's see how this goes.
...39So let's see. On the last stream, last Thursday, did a bunch of font changes. I think that got one more small fix. Yeah, I actually should get to take a pass through the PRs and the issues before I get into this. a few things open yeah this one i merged on stream like last thursday and then something odd happened i'd have to look back at the office hours recording but it it didn't appear on the main branch i think what happened is that i did the rebase and merge and then i had to do a force push for the main branch on something else or i just bobbled that bookmark somehow anyways it showed as merged but did not appear on main so that's why there's a merge commit about that just now why was this updated two days ago
09:21Didn't know that that bumped things. OK. So let's take a look here. That hasn't changed.
...46I saw this one in my email, and it has a pretty big discussion going.
Soulcuttr Howdy
Well, for us, it's just me talking to the submitter.
10:03Okay, so howdy. Is it desirable? Boy, is it desirable. The overlap can affect them in the same sense as their potential outline. That makes a lot of sense. The size of variables that could be reused, that's also smart. Closes, what is 1867? Ah, that's this bug I filed. I had hoped someone would pick this up.
...48I almost wonder if it's worth switching box models, because this kind of... No, that would break half the page. The modern box model is so much easier, but migrating to it is painful. I've done it on a client project.
11:27I hope in this case, what's this one? FedEmp is, I'm pretty sure this line of code was written by Chamelis.
...50Lost track of where I was. Yeah, the labeled, yeah, it was written by Chamelis.
12:00The intention of using grids to avoid overlapping. You must know he's mentioning her own code, right? Hmm.
...37should be in its own semantic realm. The inputs should have sufficient space to not to display their focus out normally without overlapping nearby elements. Let's do it in the order proposed, because that's easier to read.
13:23Chambliss is having fun here. Are you present in the chat, Chambliss? She usually makes these in the afternoons. Oh, I know why. She made it longer because the second step, it's in the bug report, the second step of the two-factor enrollment had, I don't know, just submit like a one-word thing, so she must have edited to make it long enough to trigger the bug.
14:02chamlis_ just got here - your audio is sailing choppy seas at the moment I'm afraid
Oh shit.
Thanks for catching that.
Sorry about that.
I should be good now.
...22So Chambliss, I was just reading down your pull request to fix the button in some login forms and I was appreciating your William Gibson reference. looking at your discussion with fedamp which it's very cute that he links to your own code i i kind of want both fixes like you you both are suggesting things that would fix the problem yours with the borders would fix more future potential problems because it's it's more general but then also just semantically these submit is it a semantic thing logically these buttons should be on their own row that's what the form is trying to do it's odd that it's not and i know that's you know some of the history of the grid layout but yeah
15:34Which, before I open my mouth, it's 2FA enroll, right?
chamlis_ yeah, agreed
Is these just a button to verify and enable?
Is that the button I'm thinking of?
No.
It was the disable.
OK, cool.
16:08Soulcuttr sometimes I feel like flipping a coin to decide one way or another. Both just seems like so much work haha
chamlis_ I presume we want the submit button to span the whole width rather than make the left column wider if it's long?
Ah, yeah, they're just laid out with this.
Yes.
It should not try and fit in this left thing, especially for, you know, this very long button text.
In my head, because, you know, I started with HTML tables as the only way out, I'm thinking, like, you know, call span equals two, but obviously that's not...
how we would do it.
You have good taste in your form design, so I'm sure you would think of a proper semantic way to say that we are expressing that that row should span multiple columns in the grid.
chamlis_ we have `grid-column: 1 / -1` for that, yep
Whatever you name that, I'm sure will be clear.
17:06Ah, you're ahead of me.
...29Is it just P or check box? I think maybe you still want like a semantic thing, like a, let me be more specific. I think you want to add a class name to this selector, just comma, whatever seems appropriate.
18:50You know, I still, for these little things, I really like to have just rebase and merge.
Now let's see if I can avoid accidentally deleting it off of the main branch like I did with the other PR.
Okay, so that's there.
Oh, well, speaking of, I hacked up my prompt this weekend to actually show the
some jujitsu information like the change ID and fixed up the log that's been broken on stream.
A lot of this actually was fixed a weird layout thing, but just by turning off the graph.
A bunch of this was experiments with vibe coding.
My general take on vibe coding has been that
Well, first off, it wasn't very good for a very long time, but very long time.
After I just talk about how we laid out pages in the 90s,
Until Opus 4.5, the results were kind of meh, like sometimes they worked.
4.5 is a step up in quality that I've seen.
And then I'm still concerned about the resulting copyright of the code, so I don't do any vibe coding on lobsters or other repos that I care about and want to own and want the licensing to be enforceable on.
But for my jujitsu config file, yeah.
Yeah, that's kind of great.
Of save me some time looking up options.
And I don't learn the options.
I learn less.
But honestly, I don't want to be spending a lot of time in all of these config files.
And this is one of must be like eight or nine config files.
I had a big
Soulcuttr I don't actually _want_ to learn most individual tool config notation. It passes out of my memory quickly even if I learn it
session on sunday where i hacked up this a thing in my window manager just all these all these paper cuts for stuff in my local config all right so yeah olivia's fix is on main properly let's just jump over there actually i'm going to merge other stuff aren't i yeah we'll give it a sec i'm just
After accidentally unshipping that other PR, now I'm a little paranoid.
Yeah, Soul Cutter, it's... You know, I did the Unix thing of wiring together two really narrowly focused tools.
One is a background job that watches for changes, and then the second one is the thing I wanted to kick off on a change.
they each had their own config file and then the first one had a systemd unit and a systemd timer and then i think there was another file for a credential and so it's just like for that one little project wiring together two things i had like five config files i threw that at claude and you know just make a new repo in an empty directory tell it to write me the files
had basically the whole thing lined up in 15 minutes instead of what is going on with this config file and why is it like that and it was wrong about what one of the five should have been named but the error message out of the tool was like hey i looked in my default place and didn't find it and i was like oh i see what it is so it saved just just a ton of slog for
I wanted to set and forget that and like i'm sure i'll touch it in five years, so I left it and they clog right a comment explaining the files and how they fit together, but.
This one as long as i'm in the CSS.
23:29Soulcuttr comments that explain are good (so long as they're accurate)
Happy to have a new issue.
I hadn't seen this yet.
...40Yeah. And getting to the end and having Claude write a little documentation for each file, give a one line description of what its role is, then second, explain anything that has to change in sync between the two files you know that's like port numbers or names of sockets or you have to put the password in two places that kind of thing and then i manually go over the comment and i look at each file by copying and pasting the path out and i often like tweak those descriptions to what's going to make sense to me in Hopefully five years or more when I look at this again. And since it's just my local config or a utility for me that I'm never going to distribute because no one else has this specific problem. Hey, great. Nice to just get that done very fast. Some of these were paper cuts that have hung around for six months or more.
25:06So aggressive.
...14Yeah. I'm still logged in. Let's do an actual hard reload and then. All right. So maybe they deleted the image. Maybe it's their anti scraping.
26:22Who was it on the last stream who noticed? It was DZ. I don't remember. Is that his username on GitHub?
...42Presumably, this is the same person. Yeah.
27:36Thank you.
28:26Let's double check this and see this. It's faster, more accessible, and includes new features like commenting everywhere. Yeah, but it had an AI sparkle on it, so I'm not doing that.
...50twitchtd hi pushcx
No, this can't move off of the HTML setting.
29:04Hey TD I saw your you opened a brand new PR.
About sequel light it's here in my queue so.
We are currently working through.
All the front end ugliness I introduced last week, but that one is right here to go take a look at.
So.
twitchtd ah good i didn't miss it then
I don't know, maybe 15 minutes-ish.
I think these are all pretty small.
twitchtd ya no rush
And then we'll look at your guy.
30:52Is it. Let me just mirror type hierarchy yeah i've said i've heard a couple of names.
31:05Anything that was 13 should be set to normal yes.
32:16Is it called a font ladder? Is that just a name I've made up myself? Yes, it is. Is it called a type ladder? Thanks, Google.
...45OK, they call it a type letter. Logodesign.net. Who's that? Let's not go down the rabbit hole of figuring out
35:02So for extra large... Ah, sheet. Good to have that. I probably guessed wrong already. So let's see. 20-point font. That would be... I'm trying to think if we have anything that needs a 20-point font, because we don't even have an H1.
36:18Mirror your terms. Purpose.
...30Honestly, do we need a small.
...40To restate to your your suggested hierarchy by purpose.
...51I guess help texting forms. Is there anything else small? I don't think so.
38:24All right.
...46Sounds
You can tell I'm not a front end designer because I struggle to find the right words and make sure I'm coherent.
My usual strategy is just mirror back what anybody with any design expertise says.
Soulcuttr lobste.rs is peak web design
All right.
How do I?
39:24You know, it's funny, because I've seen people say that they really appreciate how fast our pages load, and it's like, yeah, we have a couple hundred lines of JavaScript that doesn't even run if you're not logged in, and we serve things out of a file cache, like, you know, Apache used to serve files off disk. That's why we're snappy. That's the primary reason. The other reason we will be snappier is TD's PR coming up.
40:22Soulcuttr In truth I 100% like how basic lobste.rs is. I'm all about sprinkles of JS instead of re-inventing webpages as JS apps
Yeah, I think it's also a really good fit for the purpose of running a discussion forum where yeah, basic HTML forms do the things we want.
We sprinkle in a little JavaScript on top to like, let you write comments in line as the primary thing, or to let you vote without a page reload.
That should be very little code.
And it is slowly becoming optional.
If you look at the, I think I put it in the readme recently as a description of an unusual bit of our design for contributors is that we don't use very much JS and are slowly making it entirely optional for users.
41:24Is it? I remember it was the first. Hang on. What was his name? Danny. I'm going to say Tommy.
42:53See, this person's doing it on the body. Oh, no, they're getting into this is the problem with it. Yeah.
43:55So FedEmp has a habit of seeing the notification emails from these and coming back in a few minutes. I'm going to keep this open. Did I remember to put this one in the topics? Probably not. Nope.
44:20We also talked about See, I said I'm going to keep it open and then I immediately close it. All right. Here we go. keeping. So let's put this over here so I can come back to it. This one's probably going to be ready to go. Yeah, we talked about the toast. Check the flash error. No, that's the old one.
45:41This is one of those like how projects slowly worm into your stack, but I've just made a bunch of contributions. So I generally trust his judgment.
46:07Okay.
...20Oh, that's interesting that the screen reader, so I have very little screen reader experience, but this implies, so if you don't remember what the next line of code here is, the literal next line is toast.textContent equals whatever the error message is. I would not have guessed that a screen reader would be like interrupting the main JavaScript thread to announce changes. That's genuinely surprising to me. All right. We have a live region for each post screen. Oh.
47:22OK, in that case, I guess I'm only nitpicky about toast.
...35Done too. It's nice for sighted people. Let me see where this PR is. I might request a very, like, shitty rename this ID. Yeah, so this is all same, same.
48:07Yeah, this is how they get you. Kind of would wish this could be local editor config, but on the other hand... I get mad I can delete them easy enough.
...48Await JSON, or that's an odd little pattern.
49:02It doesn't know if the response is going to come back. This is one of those where it wouldn't want to do it in a loop, but we're doing it literally once, so sure.
...20These are the things that TypeScript annotation caught. So that's like, OK, all right, there is a benefit to adding that tool, even if I'm reluctant to let it into the build.
...38Don't love the inline annotations. Let's see if we can just erase.
...54Where's the basic forms of the net?
50:17Okay, so there's that change. that a stream viewer caught last time of. Instead of saying, I think it was like live or important previously, that would really have been almost too high priority. And that was something I sure couldn't have guessed about ARIA. And then this is all the same. And it's repeated because it's heinous. Not the PR. That's the name of our feature. OK.
52:50Do I want the inline errors? It's going to be so weird on the.
53:03It's going to be so weird on the byline layout.
...13Break byline.
...21Maybe this shouldn't be called... Maybe it shouldn't be called aria-announced.
54:11know dynamic flash error
55:51So this one, I'm making a merge commit because FedEmp very explicitly was rewriting commits to get a nice clean history. And there's a couple of steps. So let's fetch. Let's get up on main.
56:17I said I was going to call it aria-announce.
...37I guess that's not JavaScript style.
57:01See, he called it just generically notify.
gtfrvz airaAnnounce, misspelled
Did I?
Thank you.
Oh, yeah, I must have gotten it.
A-N-N-O-U.
What am I?
British?
A-N-N...
Wait.
A-N-N-O-U.
Now it doesn't look like correct for anything.
gtfrvz a i r a vs aria
But that one didn't highlight, so it must be different.
All right.
Thank you, GT.
I appreciate the catch.
Aira.
I just couldn't even see it.
Alright, so who calls...
Wait, that's all the toasts, right?
That's all the toasts.
Who calls notify?
Just this one place.
So let's call it by what it does, which is...
Wait, functions and variables are in the same namespace, aren't they?
58:33Like I'm not worried the function is going to... Yeah, maybe that's a little too clever. Let's leave it as notify, especially if it's going to become more generic later. Yeah, I don't need to paint every like shed. Or I think it's a British phrase to put your thumbprint on it, where like the boss has to make a tweak I really try and avoid that this one is just I know if I read toast in a year i'm going to have the exact same way we shouldn't use the toast pattern.
59:271862. All right, so I didn't destroy any commits, right? Save story. All right, I can go back to quietly trusting my tools, I think.
01:00:00So this one came up a little last week and had a merge conflict.
...10Soulcuttr ^^ oh yeah, if you spot an error you get a million karma right?
I mean, the hover effect emerged.
Why isn't it showing me the line of code?
If you spot an error, you get a, oh, the icon GT has is not a,
Soulcuttr ha
rvz there we go should auto complete that oh nope i am out of vip slots again i guess i don't remember what the twitch threw me an error unable to add vip visit the achievements page on your dashboard to learn how to unlock additional vip slots and it's either more viewers or more subscribers but either way it's
an incentivization for something that not incentivized to do.
So GT, I will have to come back to you.
01:01:16All right, so wrong button. But I'm rebased, and I think this will be ready to go. Exposedly reset color when not upvoted. Since previously uploaded error will be triggering hover until next tab. This sounds like something I would have to look at on a touch screen to see. No.
01:02:00I don't remember seeing this go away. Maybe it was the merge conflict. i don't think so you
...54espartapalma Hi y'all
The URL for the notes.
01:03:35Oh wait, this says on hover, each arrow is rendered using a different... Oh, I think I get it. Hold on.
01:04:12Oh, hey, Sparkbomb. Nice to see you again.
01:05:03You could just do it in one comment.
...56Let me just slap that on.
01:06:11But it must be tweaking stuff right now. Yep. Which means I can go back to that other PR.
...291774. I guess that's this stream's instance of GitHub being unreliable because it's not clear if he was trying to comment on the old or the new.
01:07:01Especially from context.
...31It's also 1774 to 1744 who puts the higher number first.
01:08:01You know, there is a thing on Twitch where people are playing video games.
Obviously, that's what Twitch is all about.
That's the primary use case.
There's a thing called stream sniping where some streamer is playing a game
And one of their viewers watches the stream to figure out where they are or what's their strategy or otherwise, you know, learn secret information.
And, you know, from the name, the prototypical thing to do is get in the game with them and snipe them because you know where they are.
Watching GitHub update that diff in real time.
made me realize I'm set up for sniping because FedAmp forced push to rewrite that commit while I was doing stuff and the page updated live.
Now FedAmp, I'm not worried about, has made a bunch of very good contributions.
What is it?
Eve, the malicious attacker,
could open a reasonable PR and watch the stream and then force push, you know, half a second before I click that button or between clicking the first and the second, if they knew they had a low stream latency and GitHub wouldn't catch it.
It would be really tricky to catch because, you know,
would have to like not do all the clever spa stuff or to somehow show me the changes github is real
jmstevers i think streamers add a stream delay of like 3 mins or so to prevent that
especially bad at force pushes honestly that's why there's i keep coming back to the interdiff model that jujitsu makes a little easier anyway please do not stream snipe me into merging malware yeah jm stevers the a big delay is helpful but like
The point of lobsters office hours is so that I can talk with people and if chats take three minutes to show up.
That would not be good.
01:10:41You didn't make five Joe, you can There's I tried to say it in the issue.
01:11:00I can't comment on that, yeah.
...53Speaking of, how did my comment get duplicated on the right side? GitHub?
01:12:05It didn't give me the plus. Oh, now it gives me the plus. All right. I don't know how many bugs I just saw. Was that four? First, I didn't have the plus here, which by virtue of its presence now, I guess was a bug. And I left the comment on the left and while I was editing the comment it appeared on the right and then I submitted it was still hanging out. So okay, I guess that was only three bugs. GitHub. How the mighty have fallen.
01:13:17That's a small one. If anybody hasn't noticed this one, if you look at. We can get it fixed before the new month. This job that runs in the background here is getting killed after the first query because this loads a ton of. Not a ton. This loads enough data into memory. And then when it writes it out as SVG, that's basically one big string. And I would not guess that the SVG library we're using is particularly optimized for RAM size. And we don't do anything to force the... variables out of scope or anything so they get gc'd so anyways the background job is getting om killed so it's just like all right fine let's just split this up and run all these queries a couple minutes apart and we'll get that working again so that's nice what is more from fedimp which did he do the change because he got the other one while i was talking No, not yet. I will reload in a minute.
01:14:51Oh, we talked about this one that we can hint the browser to know maxes and mins. Yeah, I would rather just duplicate the number and be done than try and pick it off. So as much as Ruby is about introspection, Trying to pick off the minimum from an individual validation on a field. You would have to jump through some hoops and I know that one very well because of my work on recheck.
01:15:45Grab it for the list.
01:16:04All right, so Thomas, if you are still here, I've got your PR up. I see that you have flagged it as a draft. This is a continuation of 1705 which Oh, you can't reopen. Huh? That's, that's actually a bug. You should be able to I thought. Yeah, like the message I wrote implies you can. Thomas, are you still here?
...46twitchtd ya still here
pushcx https://github.com/lobsters/lob…
That's a bug.
So when you load 1705, you don't see a reopen button at the bottom?
There's already an open request from that branch.
Oh, well, now you're not going to see it because you have a second QR for the branch.
01:17:14twitchtd I don't see the reopen button
Yeah, that's...
That sounds like there's just a bug in the workflow or not that container.
I'm used to GitHub being the only thing up top.
I wonder if that's like a repo permission.
Let me pull this off screen.
Cause I don't remember what all is in the settings.
...47So under pull requests, there is nothing related to reopening. Hmm.
01:18:25This looks like missing functionality in one of the apps.
Yeah.
Disabled if you don't have the necessary permissions or if the last commit in the branch is not the exact one that is there when the PR was closed.
twitchtd oh that makes sense I pushed to the branch before trying to reopen the branch
that's not what i want like maybe this is a security control for a attack i can't think of i mean you know obviously it would be obnoxious if somebody not the contributor went through and reopened old branches but i guess this is just a limitation of github
Because people are describing this pretty casually five years ago.
Reopening a merged one.
01:19:46twitchtd that stackoverflow described the above situation
Just about reopening a PR.
You need rights.
...56All right, well, that's as much as I want to go down that rabbit hole.
chamlis_ I like that diffstat!
got distracted there but oh he pushed to the branch okay well in any case if you were other contributors want to reopen PRS and I have to click the button I would be happy to click the button oh my god you did the performance testing that's huge is there like a yeah here's the table
01:20:35The diff stat?
twitchtd it's an initial perf metric
Oh, wow.
That is a big diff.
...50twitchtd dunno if you want to do other perf metrics
Are these equivalent?
Yes, in development mode.
twitchtd I didn't turn on cache
I'm going to assume you didn't turn on the cache because then you would just get nonsense.
01:21:11yeah i'm just kind of that was me mentally thinking through how i would foot gun myself if i was doing it and so i'm not surprised you did it correctly on the first try huh i wonder why the standard deviation is a little larger So it's not surprising the difference is really small here in dev. Because you probably only have the data for. One run of the fake data task, right?
01:22:08twitchtd yes
Honestly, 18 milliseconds, if there is a like.
This big a difference with just fake data on a single story view, so the single story view is over 50% of all page views like this is the hot path.
So.
Another way to phrase it is that.
You got an 8% improvement and you know some of this is going to be static but.
I don't think we're typically serving dynamic pages in a single story page in 118 seconds to a logged out visitor.
And we'll see how it goes.
All right.
So, man.
01:23:10Did you... I can actually just Control-F, can't I? Yeah, so there's the new Docker. There's the Docker file and the dev container to remove MariaDB from. I'm going to add a comment just so you have a checklist rather than having to make a checklist as I Yammer.
...44twitchtd thanks
There's also this.
There's parallel setup.
01:24:10right there's going to be a million of these little syntax things and i'm going to spend six months stubbing my toe on every one of them you must have gripped for trilogy to catch that one
...47twitchtd that came up during rails s :)
Oh, yeah, of course, because you could just delete the gem and then it'll show you plenty of failures on the boot path or in the test suite.
Sure.
01:25:16twitchtd sqlite doesn't support "weeks"
Oh, I guess does SQLite not have the, yeah.
Yeah, I was getting there.
...40Yeah. Well, thank you for handling this without a user visible change. I appreciate that. You're going to get break man warnings out of this if you haven't seen that yet. Right, because I want to say I substitute those strings directly, and so, if you touch anything on that code path the warning jumps.
01:26:18Hmm, these...
...26I suspect that these would benefit from being metaprogrammed with, you know, take the field comment, because what else do we search? We search story titles, and then we search story texts. That seems like, you know, well, if there's three instances, we can think about abstracting it out.
...57But that's not a must do.
twitchtd oh that's a good point
So I will leave a.
01:27:44Soulcuttr nice insight
We have slowly picked up one or two concerns.
And if someone listening wants to be really spry on concerns, the other one we could extract is there's a parallel structure on a bunch of model where we have like comment and marked down.
Well, no, let me not do that.
We should probably just fix the caching thing and drop those columns to finish the thought for anybody else who doesn't know our model layer well.
There is a caching done at the model level where when you submit a comment, we render it to markdown once, and then we save that as an attribute on the comment.
And the same thing happens on direct messages and on story text and maybe one or two other places even now.
All of that should get punted into the fragment caching, which is mostly working out fine.
01:28:45The rest of, yeah, you know, I've been forgetting.
I mean to split rack attack into its own database.
It has a lot of churn and it wants different eviction policy than
Soulcuttr Many times I'm not sure about factoring-out duplicated structure. It Dependsβ’ but having the same shape can often be better than more-complex abstraction
the html fragment caching those can generally get cached for you know months oh god you rewrote the confidence order path stuff that's i'm sorry you had to learn that function i i don't remember if you were on one of the streams where i actually described
twitchtd oh for the recursive call, I think it might be better to keep the .joins instead of doing it my way, cause you can't chain things easier
This ridiculous thing, but I mean, I think one of the benefits is that we could probably rip this out, but
slow cutter yeah one of the i didn't mention it but one of the things i reach for is whether the code is going to change and that function to update the full text index is i think very unlikely to change or want to grow any optional arguments or anything and so it strikes me as a very good candidate
Soulcuttr ahh, if they change together
if these had to do something different then i would wonder the recursive call you must be talking about this one better to keep the dot joins oh you switched to doing a yeah i have not stuffed a raw query in dot from like that to know
But yes, I would like to be able to have an active record relation object back.
But honestly, this whole thing is a performance hack.
And I think it could probably go away.
Well...
So...
The part of it that's a performance hack...
is specifically this part here, where MariaDB doesn't have any kind of array type for an attribute, or I would have built up an array.
I think SQLite does, and so then it could be explicit about what it's doing.
01:31:58twitchtd I don't think sqlite has an array type
I don't know, Thomas, am I making sense about this?
I don't remember if we have discussed confidence order path before.
Oh, no, the thing it has is JSON.
It can become a proper JSON type.
01:32:24And rather than being Does it want to be... Okay, so let me put my thoughts into words so that I'm not jumping around between topics.
...52Turns...
...59relation this is fun otherwise you need to return turn to the previous joins strategy confidence order path is i've had to use strings to work around a limitation of MariaDB doesn't have an array type available. SQLite does JSON. Purpose of the hack is to, out of the database, sort comments. The bug, though, it is that's not completing. I know there's an open issue about this one.
01:34:16Yeah.
...44pushcx https://github.com/lobsters/lob…
Actually, Thomas, this is maybe the most informative comment for you because it explains what the hell the confidence order path is.
01:35:05twitchtd can you add that to the PR comment? in case I forget it
Yeah, and then I pointed at your previous PR or the issue.
...15Yes.
...32That uses strings to work around a limitation of MariaDB. which doesn't have an array type available. SQL does, JSON if not elsewhere.
...53Soulcuttr hot take: people avoid using JSON in databases too much. It can be nice for atomic-icity , but folks aren't as familiar with them as they are the other basic types. I admit to having to look up query syntax and stuff more, but ehh, small price to pay and I'll build that muscle (or LLM will for some)
There's a longer explanation of the problems with this kludge, but in short,
Because it loses precision sometimes comments are sorted are sorted parented correctly.
Did I talk about.
How much detail that I give about the fix.
01:36:42This one's just the bug.
twitchtd ya the query syntax always tricks me into not using json for a lot of things in dbs
OK. We don't need to materialize
No.
01:38:56select oh yeah this one this two line comment took like four very frustrating days when we first moved to DigitalOcean because I tried to use their managed database which was MariaDB and Maria db does not include this optimization and so, then the site was just constantly falling over because it couldn't optimize the query as well as Maria db. figuring that out was that was a painful debugging session. Because I want to say we deployed the site on a Sunday and traffic was low, and so we were a little slow but thought it was caches warming up and then we fell over Monday and I was in the work day and. That was no fun.
01:39:58Sure.
01:40:12schika999 I'm the greatest developer of all time
pushcx https://github.com/lobsters/lob…
i should probably be checking these off as i go but i don't know how github would handle if you force pushed so shika welcome thanks for being the greatest developer it is nice to have a
Famous person drop in and here is a bunch of our bugs that you could fix because I am not the greatest developer all time and I can't actually see them over the horizon.
...54So where's.
01:41:05schika999 make it open source and give me 10 hours and a can of beer
Yeah, speaking of code that's going to make Brakeman mad, it is open source.
We're, I think, two claws BSD.
...21As for the can of beer, if you fix any bug, yes, I would be happy to buy you a beer here in Chicago. Otherwise, I give stickers to folks who have contributed to the codebase. You just have to remind me that I do this, and I'll throw them in an envelope for you. I just shipped some to the UK over Christmas. They took forever to get there, but... Yeah. Yay. That's... That's much shorter and... Is that their full text search syntax, Thomas? That's... That's so much shorter.
01:42:22And I guess they assume Boolean mode?
...50Actually, this should have been, can I move this down one line? No. I guess it's the whole comment.
01:43:45badtuple Honestly, this PR is a great argument for sqlite where it makes sense. Alot of these queries are way more tractable at a glance.
Yeah, bad tuple, I try not to read too much into, like a lot of these are just syntactic changes, like this one here on 94 of story.
But then some of these in the search stuff is like, yeah, it's mostly that they have nicer syntax.
And I try not to credit someone
too much or a project too much for that because SQLite came along later and got to learn from theirs.
And there's also the possibility that this was not standardized when MySQL added it.
twitchtd sqlite's fts is still an extension btw
And then the standardization committee came up with a nicer thing.
But as a project, it's really hard to break compatibility with old syntax.
Oh, neat.
01:44:53schika999 is this actually office work for you? are you allowed to stream on it?
Hmm.
That's interesting.
01:45:02Shika, this is an all-volunteer project.
pushcx https://lobste.rs/about
There's a couple of links, but if you go to... No, I can't type.
pushcx https://push.cx/stream
Lobster's About and CX Stream.
This is an open source volunteer project, and I'm chatting with Thomas, who's Twitch TD here in the chat and wrote this PR.
...49That's nice that they happen to match the ISO format.
01:46:04Thank you for moving these out to parameters. Yeah.
01:47:01This is contentless delete tables in SQLite require all the columns when updating them. What is a contentless?
...35So this is the kind of virtual table that the full text index is built on top of.
They support both delete and insert or replace into.
But not really update.
twitchtd ya
I get it.
...57Good comment.
01:48:42Oh, this must have been satisfying to delete. The cop length. You know, I'm out of app models and I didn't see cop length get deleted, did I?
01:49:01Oh, no, there it is. I just scrolled by it and didn't catch it. Thanks. So let's head back to where I was. Ooh, a junk drawer.
...25You are writing functions to run in SQLite and you're writing them in Ruby, aren't you?
twitchtd yup
Oh, that's so fun.
This is such a neat feature of SQLite.
...43espartapalma expr.to_s.match?(matcher)
You know, given Ruby's small talk heritage that you have to implement if is, I don't know, there's a, like George Lucas says, it's like poetry, it rhymes.
twitchtd I mainly implemented these sqlite udfs in ruby to keep existing sql
standard deviation yeah that's used on the one dashboard i've been starting to write some gleam and it's funny how it uses pattern matching and destructuring rather than if and i am getting the hang of it but after writing with an if statement for so long you know it's what 35 years like
espartapalma can't it uses `match?` instead of `match` ?
always reaching for if and then i'm like oh no wait it's a case statement and i'm still new enough that every one of them is like a little delight like oh haha it's special
01:51:01You just...
Wait.
Thomas, am I understanding correctly?
Is this deleted just because you're planning to regen it from scratch?
Or... Oh, no.
It's just a large diff.
Ah, I misread.
This is GitHub breaking around.
I thought you just deleted the file because there were no more SQL injections and I was going to be really impressed.
Yeah, okay.
That's...
I will review that at some point, but not now.
And then you, yeah, can I?
twitchtd I deleted all existing migrations
That must be all of the big minus.
espartapalma GitHub is now very picky on how many lines you deleted, even if it's just 11 files
Please shove these into dbo migration.
01:52:07espartapalma it shows "too many lines!!", not rendering them
espartapalma I mean 11 lines
It's too bad this...
This isn't a file path tree, so I could just collapse the whole DB folder, because there's going to be, what, 200 of these?
...45Yeah. And we talked about how lightweight Lobster's pages are. And I am sensitive to GitHub. must be targeting a median device that is way more low end than the typical desktop is for like American developers or Western European developers, which is pretty much all of us and most of the site. I would expect that they are now targeting like a five-year-old Android phone. But at the same time, that's why you don't do an SPA where everything is a React component, because you have no performance budget left over after that.
01:54:34sure why are there oh right because title and description are copied to story texts yeah it made things simpler on the mysql side or mariadb side certainly makes it easier here too and no case collation to username
01:55:08Had not heard of that one. This should almost certainly be on tag and category as well.
...42This one this one i'm expanding because I just want to read it.
yeah so the default char set collation stuff is going to touch everything, but then otherwise.
DMC This was probably discussed in a past stream, but was wondering what prompted the styling changes to make the list bigger? (Not complaining, just noticed the cheese was moved)
This is smaller than I thought.
01:56:11twitchtd sqlite doesn't have unsigned an size
DMC i'm not sure what you mean by list.
And you're.
yeah Thomas I was going to talk about that, but DMC asked a question
...34So DMC it was last Thursday stream where I bumped the font size and then earlier we came back to a current issue about it. I'm not sure what you're referring to with list though.
...52DMC I meant the front page/landing page
pushcx https://github.com/lobsters/lob…
So this one earthbound kid here.
Yeah, this will link you back to it.
DMC Perfect, thanks, will read up!
But it's this linked
issue 1859 our primary font size has been too low from the beginning and back on last thursday we basically paved all of the font size declarations they were certainly not principled they were done haphazardly over the last 13 years not even in a consistent unit
And so then that issue earthbound kid is somebody else who noticed the change and she is very generously putting her hand up to put a proper I keep calling a type ladder.
I think she said it was a font hierarchy.
I don't know these design terms.
01:58:08These unsigns we have been leaning on this and i'm not worried a lot it's going to start generating negative numbers but.
...23yeah I guess for these ids it doesn't make sense to write a validation that they're positive. Because they're not user data. At the same time, if any were negative, I would be freaked out because that would be so weird that the auto incrementing failed.
...51Number of flags, app code actually maintains and we have some clever updating around this one. Yeah.
01:59:29Let me just... Yeah, it's missing.
02:00:15Would we get, no, we shouldn't be able to get a bug where like two users cause it to go negative because each user can only increment by one. Yeah.
...46DMC (Don't let me derail the sqlite bits): I noticed just now that it looks like the source for the repo is buried down in the trivia section of the about page (I was actually looking for it quickly to look for related issues like above) It may be worth pulling that link up to something more prominent
Thomas, I keep thinking about your unchecked box there for a migration, and I would really like to run that with a dump of prod, because I bet the performance numbers would be significantly better with a realistic amount of data.
DMC, that does seem worth doing.
Do you want to find a good place for it?
Because I want to say it was in the transparency commitment and that originally was like the third line of the about page and other stuff has snuck in.
02:01:36DMC Can do!
Maybe we lost it.
There probably is an inline one in the transparency section, but that's just a big block of text.
Let's go look.
I got here.
...55Yeah, so it's in ranking. And then, yeah, it's down in the transparency policy, but it's, you know. Paragraph three, so we are what is that a third of the way into this file? And then, yep, next one's down in the privy. So I can totally see why you missed it. If you can see a good opportunity to lift that up higher before people start skimming, that seems totally reasonable. So more user IDs.
02:02:48pushcx https://github.com/lobsters/lob…
Thomas, if you haven't seen it, there is an open PR, speaking of big PRs that were a lot of work, to add the database consistency gem.
And this does things like make sure that models that say, oh, we have a length validation of this comment.
Don't specify a number that doesn't match the SQL database.
And I see a bunch of these things where you are tweaking or removing like size, medium size, tiny.
There've been a couple of those.
I it's been a minute since I reviewed this.
Yeah.
And they've got a merge conflict.
If stale bot pokes this one, I think I would pick it up myself to avoid losing it because this is a significant amount of work.
02:03:55But I would really like to land this so that you could be downstream of it because it'll catch stuff where we assume something based on MariaDB and you're changing that assumption. we don't have a test that covers it because we do not strive for 100% test coverage.
02:04:53twitchtd ok, sounds good, there's still plenty left to change on this pr so I'll merge main whenever database consistency get's merged to main
Cool.
I just wanted you to be aware of it.
It's going to catch, well, consistency problems that might get introduced.
God, this is so much code.
Yeah, I guess I don't care what any of these indexes are named, so great to drop those.
02:05:34describe sql assumptions oh no well i hope this was useful to you yeah so we're back here at like we can probably toss all of the confidence order path stuff and including this entire test file i yeah well i guess just this whole top of it because that's all cop stuff this one was what delta stuff yeah i had hoped that we would not see any edits to search spec
02:06:32This looks like a bug. This looks like a SQL injection bug specifically. Maybe SQLite is syntactically different, and so it's not going to land in a quote. I don't remember if I tried to also test SQL injection at the top level.
02:07:11twitchtd if you look at the search scope above, it uses ? to fill in the resulting query
what you're seeing here is there a request search yes i have been because this search spec well if that's the case then probably strip operators could be completely deleted because strip operators is just a security control
to avoid me foot gunning myself, so.
Okay, so up at the top level, I did have, yeah, this was a real thing I saw in the logs.
If you could throw in like one or two more of like, oh no, I guess this has the most common case of throwing a single quote
Throw in a double quote.
02:08:24Speaking of the confidence order path, all of these tests were so that I could build confidence that I hadn't opened a SQL injection by manually building queries. So I love so much that you are using the question mark parameters to put data in, because that is getting to lean on the library more.
...54twitchtd ? removes a ton of sql injection rather than building up sql syntax yourself
And so any edit tosses my confidence out.
And so then I'm like, well, now I want more tests.
02:09:10twitchtd happy to write more tests if you want for searching
Yeah, exactly.
...22I guess I just want confidence that we haven't foot-gunned ourselves. I'll go up and read the search code again, but
02:10:25twitchtd ah ok, will look rming strip_operators
Thanks Thomas.
One of the reasons I was especially paranoid about that was
I wrote that well before I started streaming.
So this year that I've been streaming, we've had way more contributors and eyes on the code base than any previous time.
And so knowing that no one was going to check my work on this, I wanted lots of tests.
I feel a little more confident now.
02:11:18Where's the?
...37You made it. That's cute. Okay, that was a nice little bit of whimsy for a very large diff. Let me go put my eyes on search again as long as I'm having feelings about it. And I'm not being deprecated, I am. I program on hunches a lot where I'm like, I'm nervous about this code. I can feel that I'm nervous. Why am I nervous? I am definitely not a Spock coder.
02:12:17If keys first term, okay, so you're swapping these in order. Yeah, so this is more quoting happening. Button title. Strip operators, yeah. And Thomas, if you do look at the leading strip operators, flip through the blame on it, because I know I've edited it, I think, twice. And so those commits are going to be related to SQL injection. Because I want to say they shipped with one potential SQL injection that got caught a couple of days or weeks later. And then I thoroughly checked to make sure it wasn't abused and it had not been. But yeah, just getting rid of this in Boolean mode that required us to escape into single quotes.
02:13:25twitchtd from my understanding Story.search should be a nice replacement
That's very nice.
...34Yeah.
Yeah, I'm certainly agreed.
I hope understanding the search code wasn't too bad.
It's like one of the larger pieces of functionality in the site, which is funny, because it's not core functionality, but it's
twitchtd out of all the code, I think I'm still uneasiest about the search code
reasonably well factored into a parser, and then a thing that turns the tree into a query, and then the controller that runs it.
02:14:10This is great. Yeah.
...21You could also just use the strip operators test and like, if you
twitchtd I think you need to submit your review btw
moved those up to the request code just to throw them through the whole stack that would help build confidence because it's the like the parser is fine it's the generating queries that's concerning but with sql injection the whole point is breaking oh yes i do thank you i actually wanted to come out here and peek at your comment again but
Yeah, I look forward to running the migration test and then running this with full data.
Okay.
02:15:24Wow.
...4826126 this will probably take a couple hours to go live the recording in case anyone is wondering how i'm on stream talking about the link for the stream I set up for my links.
02:16:55twitchtd do you have any suggestions on how to migrate the mariadb data into sqlite?
Oh, I don't want to.
02:17:04I don't want to mention her, but. Where is this? Yes.
...33I have never done it.
...49twitchtd or just mariadb dump + regex + sqlite load
I think I did a MySQL to Postgres a dozen years ago for work, but
02:18:03I think we saw there were tools, right?
Yeah, I'm expecting, I think there's, it's going to be Maria DB dump.
And then I thought there were, that we saw a command line tool or two that at least did a first pass at the reject step.
And then
twitchtd I'll look around then it's been so long that I don't remember the tools
will do any cleanups required after which might be a little separate break task or something and then yes sqlite load and yeah i think the only other that gets to
I'll just tell you, and you can add it to your checklist up here.
The other thing up here is we need, backup steps sit in here.
No, lobsters Ansible.
So it's here, right?
No, they're calling.
Is it B two?
Is there a command line thing?
Yeah.
No.
God, did I do it by hand in prod?
02:20:07That's so annoying. Yeah, here we go. So the existing backups, there is a database tool called MariaDB Backup that does incremental outputs, and then we use Restic to back them up. And I don't know that I even, I don't think I added Restic to our Hatchbox config, did I? I want root deploy. Okay, no, it is here. Right, because there's Restic. There's the Restic job.
02:21:06Yes. So this is what backs up the prod config stuff, because there are a couple of config files that can't be in the repo, and so I wanted them in the backups. All right, so let's put that together.
...53current implementation. Let's be specific. The implementation in broad now for MariaDB. is a cron job that i thought this was doing it's been a long while since i've touched this automation i thought this was doing some kind of incremental thing maybe that's what the xb stream thing is about
02:23:36which is going to be lobsters, lobsters, blog, main, job.rb. That might even be right. Nope.
02:24:19Must have typo'd. Yep. M-A-I-O-N. This is why it's nice to copy and paste.
02:25:31There's me rambling about what I don't know about SQLite. But yeah, the other thought there is, as you get the tool working for converting a MariaDB dump into a SQLite load, where's my, hold on, there's a command I want to paste for you.
02:26:11That's not what I expected. That's what I expected.
...44twitchtd there's a way to safely backup sqlite databases, not copying though
So we'll check and there's no password in that.
02:27:06Yeah. It's one of those like, I don't know what it is, I just know enough about. Boy, the file system is kind of a weird key value store that it's worth thinking about. That would be one more place to throw in a comment linking to the docs so that this clueless maintainer understands what the heck he's doing. Or not breaking. Oh my God, have I been going for two and a half hours already? This has flown by today. How's this doing? Not touched. I guess FedEmp is not online at this second. All right, so got a half an hour left. Enough time to hack out something here, right?
02:28:13twitchtd thanks for the review!
Or do the rack attack thing.
I should do logic laying.
This has been hanging out a minute.
Well, Thomas, thank you for the work.
The thanks should go in that direction.
02:30:05Is the same list? No. How do I want to do this then? Do I want to CLI? Do I want to just kludge it by hand again? Do I want to punt and not backfill? I like the idea of not backfilling. Let's make the tag. I need a browser that's actually logged into prod though.
02:31:02All right, so.
badtuple oh yay! Very excited for this tag.
name is going to be logic langs no hyphen yes plural category is going to be languages description using clauses
Is there anything else, any other bike shedding about this one?
Description.
...51Nix. Is there another Nix language or is this Nix the package manager language? Oh, they're saying like these other tags. They're not calling nicks like prologue. I follow.
02:32:38dzwdz great, now someone will reimplement prolog in nix
Yeah, so this first one, I should probably have created it after this, but there wasn't a single strong consensus-y on what should the tag be named, what category should it be in, what should the description come by, even though it's well-defined and clearly wanted, and it kind of fell out of my head.
So I really I told that this directly, but I really appreciate that he picked this back up and reposted it.
02:33:16Okay. Alright, so I just clicked create so if we go to lobsters tags. It is now. Here.
...40in oh let's go back to so i'm trying not to drag my my personal browser on screen because every time i do that i end up flashing something personal so so i'm saying can we be proposing I let it, this is clearly a good idea, last merge. But I let it stall and lost track of it because there wasn't immediate consensus around the name description. This is. And.
02:35:16All right, so that's the tag. I'll put on sysup hat and post. So if I reload, yeah, here we are, down at the bottom. And then how do I want to do these?
...42dzwdz completely unrelated, but why does recheck.dev have a "jumpstart" logo instead
I think I'm okay punting on the unsure ones.
and just calling it a language tag.
...57DZ, because I have not let that one come up to the top of my list of priorities.
pushcx https://jumpstartrails.com/
There is a SAS, well, not SAS.
There is a Rails toolkit called Jumpstart Pro that I'm using for it that has a bunch of helpful e-commerce subscription stuff out of the box.
dzwdz lol
And I have not replaced the default logo that ships in the template.
02:37:08I should have mentioned Z three.
...23Probably a pie cap. It's OK, no one is looking, right? So let's go over here. And I will.
02:38:03Tweet this to include.
jmstevers misspelt longiclangs?
I don't want to get into adding everything, but like Zcat, Z3 and Pycat that I've actually heard of.
Oh, God, did I typo?
Thank you.
Longic.
That is that is not me being clever.
That's just a very dumb typo.
Thank you.
It is a type of it in the link.
badtuple too late. It's longiclangs now. The rest of the field will adjust NODDERS
Oh, thanks.
Thank you.
That's embarrassing.
02:39:04dzwdz i did not manage to get it on archive.md in time
dzwdz shit
rest of the field will adjust you know we had several large discussions about what the vibe coding tag should be called like one when it was added and then i think two or three more after well thank you for letting my my error fail but it's in the mod log it's in the mod log forever
change tag see here you go it's in here twice both my typo and my fix it is immortalized don't even need archive.org we have our commitment to transparency dz
dzwdz yeah i did see that
If you didn't see, you came up in a pull request comment a little while ago.
Like, you know, two hours ago.
Maybe you got a ping.
Longic langs.
See?
And here, it also lives in my stream archive, right?
Longic.
Maybe I just have a strange accent.
Oh, strange accent.
02:40:36dzwdz what if our 404 page had a sad lobster
pushcx https://www.youtube.com/watch?v…
Occasionally, we have talked about the joy that is the classic Chicago accent.
And occasionally, I have done it on stream.
There is also a very specific Minnesota accent.
And I just saw a very excellent documentary on it.
So there you go.
DZ, that could work.
I don't think we have anything now, right?
Yeah.
02:41:55The stream probably went to blue for a second there. Excuse me. I wanted to peek at something and I forgot to bring it to my off-stream section rather than jump over to it. Of course I haven't.
02:42:26dzwdz most of the image search results for "lobster" are dead lobsters, that's kinda disguisting
You know, the thing to do here would be to split out the editing to a mod controller and then put it in the mod controller.
...55dzwdz that's what happens when you get banned btw
dzwdz a lobster trap also has kinda negative connotations
yeah i would prefer not to put a dead lobster how about an empty empty lobster trap that would be fitting what happens when you get banned oh the dead lobster yeah
dzwdz we don't want to kill lobsters :(
You know, there is one page in the admin that uses a lobster emoji for us, where if we look at the list of recently flagged comments and there aren't any for the time period, you see a little red lobster emoji, which is kind of nice.
02:43:43dzwdz also https://drawception.com/game/w1…
It could be a lobster trap with the door open like it has escaped.
Session Cookie is actually named Lobster underscore Trap.
...59veqqio Carthago delenda est! Wait, logiclan... wait, it's done. Satisfaction!
dzwdz which was the first result for "sad lobster"
Drawception Sad Lobster.
02:44:11Oh, that's cute. Clever game. Yeah, Vecchio. And actually, we do have Latin in the code base in the pagination. It's in the search results.
...36veqqio Interesting
If you search for something and you find exactly one result, there's an Easter egg.
...53about once a quarter, somebody emails me or mentions in the chat room that they accidentally triggered that one and learned something.
02:45:34veqqio I like that this easter egg keeps on hatching!
Yeah, it's really rewarding that people keep running into it.
All right, so let's move this up.
02:46:31These.
...42And we'll make it a bring that down, I'm going to delete them, but resources tags.
Only.
Create.
All right.
dzwdz lobster on a keyboard in front of a crt
dzwdz water not found
I always want to put them in the crud order pairs of create new.
And then later, I always want them in alphabetical.
Create new edit.
02:48:03Water not found. All right. Pardon typing off screen. I'm mentoring. So there's that. Let's have controllers mod tags for RB.
...48Well, that's this code up here. There's new create edit update and the tag brands. Yep. All this comes out and now I can delete the required login admin. Well, actually mod controller only enforces that someone has a moderator. So let's, let's put it back here. Yeah.
02:49:51Why are you giving me yellow? Oh, it's index.
02:50:02Let's see how much it just broke.
...17Can't be nothing. Well, it's possible. Tag editing is early enough functionality. It may never have gotten a test. No, I guess we filled it back in some point. The other thing to do is move the views.
02:51:54251 i think maybe in in the next 10 minutes i can get through this part but i'm not going to get the mass tagger this time before the end of the stream and a big distractions come up off stream a a good one but regardless i'm not going to run long
02:52:28veqqio Good luck, have fun <3
What's this one?
Routing has no unrouted actions.
02:53:05It's called mod controller unless I typoed it.
...16Oh, it's in the mod namespace. That's what it is. Mod, mod, mod, mod.
...38tags, plural because Rails is wrong. Good. All right. And then let's go look at that request. Because it's just new edit, create update. Oh, I bet there's views I have to update with those links. Yeah.
02:54:19category at some point, huh?
...55Seriously, just shouldn't throw away form.
02:55:23This should also go to the tag. This is old code.
...37These are not pads.
...52This.
02:56:00Oh, it stubs the call for admin. I was going to say, how did this ever test anything? When the name is blank, this could be a model validation test. And it's already there.
...30no nobody else all right so that was all new tag next i want okay why is it new mod tag instead of mod new tag rails that's that's fucking obnoxious rail
02:57:18So that becomes edit. Wait, that one becomes... Wait, we have one reasonable one. Where is this duplicate coming from? Something silly is happening. Oh, it's the... I bet I didn't delete the... Let's wait. Yes, this becomes mod edit tag path.
02:58:03No, it becomes the goofy thing. All right. That's wrong, and I don't want to fight it.
...59I guess I got it. All right. Are there any date tag? Yeah.
02:59:16This should happen automatically, right?
...40Trying to think of a place we're reusing the form like this. We have enough business rules around editing stories and comments and the context that comments appear in that I don't think so.
03:00:35Saving does something a little similar. Can I just hope that you do the right thing, Rails? You're supposed to have magic, right?
03:01:34We don't have an APL tag, do we?
...45Or the new route doesn't have the tag in it. It calls it ID.
03:02:24There we go. And let's look at that form tag. Yes. No. Action goes to the wrong place.
...48Because Rails
I'm getting exasperated.
I'm going to punt on this rather than get mad at Rails.
Yeah, no, I'm going to call this a stream.
Even though I'm not really at a stopping point, this is irritating enough that I don't want to fight with it.
veqqio We appreciate your effort! Maybe make a slight comment to mark/save your work
Does the story form view mod stories edit?
What do you do?
Oh, no, you pass an array.
Okay, well, wait, that's how that works then.
I forgot about that.
View tag.
So this becomes the namespace and then the model.
And then we get the right URL generated, right?
Yes.
And if I go to new and go look at the form, it's doing a post to the right endpoint.
Okay.
So that's all correct then.
All right.
03:04:18Oh, cat is ready for me to stop streaming. It's pumping me.
...30So this is going to be all fails, right?
...53One of these needs to become a patch, this one. This is a model test again. No, it exists. Tags placeholder.
03:05:39Are you even doing non?
...52Let's pick one and work it.
03:06:23I changed this to redirect to the individual tag path. All these are failing because The stub is now in the wrong place. These are just auth failures.
03:07:23Let's throw that thing out. There's nobody, because it just got a redirect.
...49It is running, right? No.
03:08:30What am I missing?
...38If we post to mod tags, is that the correct route?
...56Yes, it is.
03:09:17I'm missing something obvious.
...34What code redirects to the home page? authentication.
03:10:26Next controller. OK, so this this clearly is not. Happening. Because we are getting an auth failure, let's just. Make them an admin.
...54OK, there we go. Anybody else failing? One. No route matches line 50. So I'm going to ship when I get this last bug squashed. So if you have any last questions about the site of the code base, now is the time to ask them. Otherwise, the next stream is Thursday.
03:11:34Ah, yep, this one, the expectation I changed to redirect to tag path.
...49That ought to be green.
Great.
Let's run the whole build.
Speaking of the whole build, oh, I never talked about the front end stuff.
I filed an issue asking for someone to create a gem.
pushcx https://github.com/lobsters/lob…
I ran into this, I think on HN, maybe on Blue Sky, but someone has started writing a JavaScript linter and formatter in Rust.
03:12:28New and edit are not explicitly defined on the controller. OK, I don't have to. Ah, you are catching a bug for me.
03:13:00We have wanted to have some kind of CSS linter and formatter and JavaScript as well because we've had some minor bugs about that and then also just lost time in PRs to nonsense like indentation or that single semicolon I added earlier this stream. And so even though this package is very new, story image 62, That's unrelated.
...48Story image 62. This is OK. This force encoding.
03:14:08I think there's a way to ask for a new string, but that's not worth fighting right now. And if they ever land frozen string literals, it'll just raise an error. So I'm okay punning on that. Cool. So the other one here is,
...43asking for someone to package these new projects up as a gem so that we can use them and others we have a another gem common marker in place that does exactly this so there's precedent and worked examples available fingers crossed somebody picks that up it would save some hassle all righty
Well, thanks for hanging out during the Lobster's Office Hour stream.
And next stream will be 9 a.m. Thursday morning, Chicago time.
darius1t ty for the stream! first time tuning in and it's been super interesting
Feel free to email me, DM me, whatever works.
Until then, take care.