Four thousand scrolls in the briefcase
Streamed
PR #1780 for upvote arrows in high contrast mode. PR #1778 testing inbox controller. PR #1776 fixing fake_data, declined for wrong debugging approach. PR #1775 adding aria-current to navigation. PR #1774 using details element for story previews. PR #1742 splitting comment deletion logic. Moving comment score display from model to helper with number formatting. GitHubβs React rewrite and its impact on UI/UX. A revset for updating the crossover workflow with jujutsu. Issue #1771 searching by domain without domain: prefix. Production bug in IANA TLD fetch job, undefined method for string. Issue #1685 tag filters for visitors and CSRF tokens. Discount codes and coupons as magnets for bugs in e-commerce. Anubis vs Cloudflare. Thursday surprise stream will be special ~guest~ host @ChaelCodes working on modmail.
scratch
topics
PRs
upvote arrows on high contrast https://github.com/lobsters/lobsters/pull/1780
test inbox conrtoller https://github.com/lobsters/lobsters/pull/1778
fix fake_data https://github.com/lobsters/lobsters/pull/1776
aria-current https://github.com/lobsters/lobsters/pull/1775
use details for preview https://github.com/lobsters/lobsters/pull/1774
split comment deletion https://github.com/lobsters/lobsters/pull/1742
delete parentSelectorOrNull https://github.com/lobsters/lobsters/pull/1770
fix radio kb selection https://github.com/lobsters/lobsters/pull/1772
fix csp for images https://github.com/lobsters/lobsters/pull/1773
github in react https://www.remoteruby.com/2260490/episodes/13761017-viewcomponents-and-the-future-of-assets-with-joel-hawksley
jujutsu
jjcon https://www.youtube.com/playlist?list=PLOU2XLYxmsILM5cRwAK6yKdtKnCK6Y4Oh
jj crossover https://flames-of-code.netlify.app/blog/my-jj-workflow/
jj rebase -s crossover -d 'heads((crossover-):: ~ crossover::)'
issues
tag filters for visitors https://github.com/lobsters/lobsters/issues/1685
searching by domain: https://github.com/lobsters/lobsters/issues/1771
Thursday surprise ~guest~ host
title
post-stream
re-enable emails on bug tracker
username ui
anubis
story merging UI? https://lobste.rs/c/3ssni6
Transcripts are generated with whisperx, so they mistranscribe basically every username and technical term. They're OK but not great, advice appreciated.
Recording
04:45Epic_Ninja_Elephant whistles a simple tune
espartapalma hi hellou
Epic_Ninja_Elephant We need a starting-soon tune. Like they used to have in TV kitchen shows.
Or I'm sorry, Epic Ninja Elephant said that.
Yeah.
The licensing stuff is complicated.
I assume there's royalty-free music somewhere, but I don't know.
Oh, I should put on the actual stream instead of just leaving that graphic up.
Here we go.
05:20All right.
So welcome to Lobster's Office Hours.
This is Lobster's.
Epic_Ninja_Elephant Happy Monday, lobsters.
It's a place where we talk about programming and related topics, networking, hardware, mostly programming.
...41espartapalma I guess I need to elevate my membership to max-plus-ultra and ask for that witing tune
espartapalma *waiting tune*
pushcx Ask questions anytime!
and yeah it is a happy monday and it will be a fun thursday for the next stream but i'm gonna mention that at the end of the stream which will be about three hours i'll tweet about it if you have to bail early don't worry about it so let's go take a look oh i didn't put my usual comment that
ask and anytime so we got a couple of pull requests open got issues all right let's take a look let's i would prefer to start with the prs yeah looks like we got a bunch of stuff here i was mostly offline the last couple of days so
I have not peeked at any of these.
06:47And the Thursday stream got disrupted because my cat, who is usually very good, jumped up to the desk and he kind of flailed a bit and kicked my coffee cup and it just kind of
It didn't fall over and spill it kind of exploded upward and spilled and my pretty much my whole desk had coffee on it, including some paperwork I needed to take to the bank and.
Just.
It put me in a pretty bad mood.
So.
If you are curious, he may come around the street.
He was up on his filing cabinet the other day.
Epic_Ninja_Elephant I forget, lobsters runs on a Linux host, right? Not OpenBSD?
so it sounds like there's a very ironic issue here the upvote arrows are hard to see in high contrast mode firefox only allows blue for links and a primary color for text maybe that's in high contrast mode it's only the case yeah we're on
Ubuntu Linux.
And there's a little bit at the bottom of the About page about it.
A couple of virtual machines at DigitalOcean managed with Hatchbox.
And all of that config is in the Hatchbox directory, pretty much.
08:33Logo is invisible in high contrast mode. here they looked at high contrast mode so i would believe all this stuff is broken high contrast move forced by the os as opposed to So it's an option on the settings page.
09:27Why did they this? Why did they put the Logo inline. I do not understand this PR. I get most of these, but light and dark mode when the OS forces high contrast.
10:27Current traffic. Actually, I want to be on the next line.
11:00I, and where did the novelty, okay, it's at traffic novelty, so it lays on top. How does this not,
...32So the high contrast mode setting happens here.
12:01So this is
13:01That was kind of an interesting little error I made of, I am looking for a tab and I am looking for the element to the left. And so instead I missed this tab bar and I got that tab bar. Kind of shows off how people mentally model these things.
...49Epic_Ninja_Elephant "Firefox only allows blue for links"? Is that right?
Fix for the logo that's invisible in high contrast.
...57That's what they wrote, but I don't know. I've never heard of that. And then I have to go back over here to actually submit the... The more I look at the PR UI, the angrier I get.
15:04All right. See how that one goes?
...30And then what? Should I be working oldest first? Probably. Let's bring in the note.
...49So 1720 was, yeah, removing some old things and then finally some tests.
16:06I saw this tweak before in another PR.
...16Hmm.
...34Rails is so inconsistent about when things get a bang on the end. Sometimes the ones that write and pass validations get it. Sometimes it's just missing, even though that's what the bang seems to be the convention for. Let's see, so we've got the inbox controller. Marks the notification as read.
17:09OK, yeah. Even if the notification is not displayed, nice. Does not update the red add notification when notification is not displayed. So we make a comment. Say it was read at this time. Login as the author. Save the auth. Notify. Should display to be false.
...59All right. This looks solid, actually. Let me double check that I remember what we want to test. Yeah.
18:18OK.
...52So let's go ahead and add these.
One of these PRs is going to have a merge conflict about that dot bundle.
I know I saw it somewhere else.
We have comment score from model to helper.
Epic_Ninja_Elephant Oh my. I can force Firefox to only use four colours.
That's what is 15, 17.
Some of these are years old, these bugs.
Someone is digging back.
Epic_Ninja_Elephant This is amazing.
can force firefox to use only four colors that sounds really relaxing two digits yes i remember this this one was a i saw the bug coming
20:02I'm at the number with number to human. Okay. Translations. Translations. Oh, I'm suspicious of that word, translations. I really don't want to drag in the whole i18n framework. A fun fact that most people don't know about lobsters is in, like, the first year the site started so 2012 we did use the rails internationalization framework but it just became more of a pain to maintain and jcs pulled it out in 2013 or 14. i have deliberately avoided adding it back someone asked for it maybe a year ago and they were like But it's a big pain in the ass to maintain. And I was like, yeah, that's why I don't want to do it. And if it's a big pain for you, 100K and 100M.
21:18I guess 100K and 100M could be 0.1 million and 0.1 billion.
...31Man, it's a lot of upvotes for some lorem ipsum.
...43Why did I not see the, okay, test suite ran. Place this comment score for user.
...56So this one, comment score for user, this style of naming the arguments to the function is a very JCS code style because he wrote a lot of C where you get very little type protection about your arguments. And so he ended up putting the names of the arguments because I believe C still only has positional arguments.
22:33Do I want to pick that in it with this author that these can be keyword arguments not really.
...45turns the score value of the user can see returns to the user. that's wrong.
23:06If the user can flag. Really?
...19So my.
...39I don't think this is this is correct, but misleading.
24:08Well, Let's double check.
...17So if the user is no, we just don't even show them the score? That doesn't seem right.
...33Yeah, I think this is just wrong.
25:08Let's look at show score to user.
...21So if it's at least 36 hours old.
...36Yeah, so the tilde is the placeholder for you can't see the score. You can't see the score means either that you flagged the thing, because we don't want to give you the satisfaction of making the number go down, or it's just too new. And then the space is... Why a space?
26:10What was I thinking? Use CSS grid to lay out story pages. I think maybe we should always have a placeholder.
...35And the point of having a base is to keep the layout from sliding around a little bit.
...53Let's go look at the plane of this.
27:02Because with the revert, I just can't quite follow.
...18GitHub.
So that was GitHub breaking browser navigation.
Maybe because it was lazy loading these, I don't know.
Let's revert past that.
Well, there's the bug again that the text is not on the page, but if I scroll down enough, then they override the browser navigation.
It doesn't even scroll properly.
All right, this is the commit I was looking for.
Hide the scores on flagged stories.
There was a little bit of satisfaction of seeing the score go down.
Hey, look, it's that thing I was just talking about.
But why a space?
So it used to say, show you the score.
graefchen Heya limesHi
And if you can flag or downvote.
olexsmir I'm genuinely curious how did they manage to make github UX only worse over the years
Hey, Gravechen.
28:50The answer, AlexaMirror, seems to be React.
olexsmir oh
They redid the whole thing in React.
olexsmir it's always react
I was actually just listening to an old episode of the... What's the name of that podcast?
Remote Ruby.
And in an episode from... Where was it?
4-16-21.
Right?
Yes.
Let's find that.
I was just finding it on my home.
pushcx https://www.remoteruby.com/2260…
Here we go.
This is the episode.
Do they have a... Yeah.
So here's the link.
But
Joining us on today's episode, we have Joel Hawksley, an engineer at GitHub.
And
In this, he talks about how it sounds like it's the start of the project that just finally really started hitting core UI about 18 months ago, where they basically rewrote the whole front end of GitHub in React over the last few years.
30:32So it's kind of the, it was interesting to hear because the way he's talking about it, it's very clearly the beginning of that project and they believe they're doing it for accessibility, but he doesn't really, he elaborates on how important accessibility is to Microsoft, but he doesn't really say why that means these various pages need to be React instead of just HTML.
it's, I think it might just be that they have better test harnesses for things in JavaScript.
That's, that's a big guess for me, he doesn't allude to it.
olexsmir isn't plain html(and maybe some additional js) are accessible if you know what you're doing
But the way
rails views are so badly coupled to the controller layer and always have been it's very hard to test views in isolation in rails and so seeing view components which is a reusable and testable view library makes me think maybe that's why they decided to do it
yeah alexamir that's my understanding as well is it's a lot of put the right aria roles on things use elements correctly make sure you have fallbacks like i don't think there's anything react or javascript specific about accessibility but i am far from an expert on it so it's a just an interesting
interview because it's like reading a commit message where i know what changed but i don't know why i know how it changed but i don't know what the reasoning was speaking of not knowing the reasoning i just don't understand this space
graefchen And no JS can be even more accessible, the more so if you have bad internet.
I do it like this.
This is my code, too.
It's the worst part of it is I wrote this function or some version of it back in the day.
So let's go back one more.
I wish there was a better way to say I care about this function.
Why don't you let me just walk through its history?
33:21graefchen At least when using big js frameworks where the html file by itself would be way smaller.
function is not okay if you're going to override stuff okay so git is only overriding control f which is why i'm struggling to open this panel they do not override control g which is repeat the last search unless this panel is open
So that's one of those places where re-implementing browser UI, they have done it in completely and so they have broken it.
34:00Grifgen, could you elaborate? What about bad internet relates to JavaScript because Oh, no, you're agreeing with me. Sorry, I misread because I'm getting annoyed.
...33So this is this.
...46Don't show the down board summary for not showing scores yet. Yeah, I'm not seeing a reason for this function to have ever started. Where did the space part of this function come from? What was someone thinking then? Show nothing when the user can't downvote. The upvote with the dash looked weird. So only show a mark when there's something below it. The downvote. Oh, that UI is gone now. Change the dash to a tilde to look more in flux. So this is going way back to 2017. Lobsters originally had UI on story and comments where there would be the upvote arrow, the score, and then the downvote arrow that would open the flagging thing. And that UI was so similar to Reddit and HN that people just exclusively used, not exclusively, overwhelmingly used the flagging to mean disagree with someone. And so the flag reasons were not very useful because what it meant was disagree, there was just a second click where someone picked a random reason. That's gonna come up on Thursday. I don't think we need to keep this, so.
37:31graefchen There are also more problems when you have a lot of users that have old or outdated devices that take a lot of time to load data. But honestly it is more of a case by case thing you should decice when building a website. limesLurk
A lot of users have an older outdated advice.
A lot of time to load data.
Yeah.
38:21this one yeah this is a weird choice this should just be online 97.
...51separate step.
39:32Alrighty. I don't mind hassling me out on text. Let's see. That's why I usually have the Do Not Disturb set, but missed it today. So this... That's fun. That's a helper now. Where's this new... Oh, it's this thing. I didn't even realize we still had a... locale a new rails loaded this anyways probably going to be a minute before we have a comment with a quadrillion votes given that there are only eight billion people on earth and about eight of them use lobsters
40:35all right okay so that change is going to ripple down here what is this score formatted why is it a second
41:12score display wait this thing is returning a hash no no why is that not a string because they make it a second value
...39It's so they can have the score value in the title. Yeah, OK. Let's fix my other comment.
42:10with the delete button. So I used to just... Oh, piloting, all right.
...41Oh, because the number to... I get it, because number to human is going to blow up if it's a tilde. So that's why he doesn't want to do it in the view layer. I think the answer to that is to monkey patch string. Yeah.
43:28We already do monkey patch string, don't we? Yeah, in mail new activity.
...55There's another one somewhere.
44:05Apparently not. Got a comment explaining what it is, though.
...21Did it somewhere?
...37No.
45:30Okay.
46:39Should we call it a short score? An upvoter score, because it's next to the upvoters?
...54Upvoter score.
47:00So this can go away.
...18That's wrong.
...43Why would we ever have no values here? Because you see previews of comments.
...58And this user comment, show score to user.
48:10I'll comment show score. Yeah, it's got a bypass if the user is a moderator, so this part isn't correct.
50:02aerohess Reviewing pull requests?
0.1m and 0.1b.
...48all right so this one's nice you know i didn't demo what this is but i guess the screenshot makes it pretty clear that the goal is if we just yeah arrow has that's what we're doing if this number because has too many digits it'll break the layout and we it'll be a while i think our most upvoted comments now get i don't know like 200 votes most upvoted stories are in the same kind of neighborhood so it's a while but a thousand would definitely break this and that's you know it's not impossible that we hit a thousand if we had something exceptional happening because on any given day we do have that little hovering thing but we do have like actions from almost 3,000 logged in users. I mean, this says month, but it's not far off for the day. It's like on any given day, it's like 2,500 users, and then mostly those same people come back the next day. So it's not impossible to think that we could see a story or a comment with 1,000 upvotes really anytime something exceptional happened. All right. So it looks like different reality who submitted a couple of PRs here. They have been on a tear. So let's get this fix.
52:31Cause two errors regarding missing user and disabler. Oh, it's a nil in Ruby. Yeah, Ruby loves making nils. All right.
...50Why would this be nil?
...59This feels like junior dev code where they're fixing the line that threw the exception and not why it's getting nil passed into it.
53:22Oh, and it's in app models user? Absolutely not. Nope.
54:36olexsmir this pr feels like "if tests fail, fix the tests, not code."
aerohess What would have made this a better pr?
I'm going to leave this open so that
They can choose whether they want to close it to take a different tack or just edit their commits.
I've seen submitters who get a false start take both tacks, and I would rather let them decide rather than the harsh, I'm closing your PR, because that just doesn't feel good.
I can't type today.
55:37A group of related elements. There's already a visual indication for the currents. This sounds like a. Nice little improvement. If current equals path. Speaking of returning structured. Data. OK. Remember this code?
56:23Let's find some docs. Steps and breadcrumb list. This is very temporal. Several links in a breadcrumb or steps in a multi-step flow. Is it also for things like subnav? Set of pagination links. Okay.
57:04Yeah. Okay. It's not temporal. That seems fine then.
...13All right. Nice little improvement.
...41I could just check instead of guessing. Application. OK, it did use it in the main nav. Is it the sub-navs? No, the sub-navs I also have. But like this, then probably.
58:13Yeah. And then the stuff at the footer. Yeah.
...49Aero has which pull request?
pushcx https://github.com/lobsters/lob… https://github.com/lobsters/lob…
Are you talking about 1775 that I'm looking at?
aerohess The one you declined
Because I just saw your comment, or 1776 that I just declined to merge.
59:10Yeah, so 1775, what would have made this a better PR would be fixing the bug at the source.
And i'm not trying to insult them when I say it looks like junior developer code, it is a really common.
trait in junior developers it's just one of those like.
it's like hearing a really strong accent and being like I know what country you're from.
and
One of the things junior developers do is they find the line of code where the exception was thrown and they try to fix the bug there.
And especially in a dynamically typed language like Ruby, it is very possible, especially in a framework like Rails,
aerohess Wrong debugging procedure?
that really is happy to have mutable state and invalid and partial objects, what you really want to do is follow back through the exception stack to find where the bad value was introduced, not where it finally blew up.
And so that's what I was trying to nudge them for.
Wrong debugging procedure?
Hmm.
aerohess They were looking at it the wrong way
graefchen You might need to look further and new developers need to learn it. limesNoted
No, because they did land on where...
I mean, yes and no, like, yeah.
Like, yes, it's the wrong debugging procedure because they didn't find the source of the error.
Yeah.
olexsmir it's more like fixing the "result" of a problem, and not the cause
The other part of it is, as you gain experience, you will learn through bitter experience that if you just fix the line that threw an exception,
that function that through the exception considered the data to be invalid in some way it didn't meet that function's contract and if you don't fix that bad data at the source it's still going to be kicking around in your project and it's going to generate bugs in other functions yeah alexamir that's a good way of putting it that it's fixing the result and not the cause
01:01:35It's like, you know, in the winter, if your door blows open and you start getting cold, the fix is not put on a sweater to make yourself warm. The fix is to close the door, because the open door will cause other problems.
01:02:10aerohess I getcha
So let's give it a group.
...23aerohess Think about the whole thing rather than just one point
Ara, are you a junior developer?
...33graefchen It's mainly lacking experience. But that's okay. We have been all there at that point, or still are. limesSit
And if I wrote this helper correctly, this will actually be a pretty mechanical transformation.
Man, think of how many places in the code base we say link to.
And theoretically, all of them should have that.
01:03:06So link to different page also has some visual styling to it. Oh, maybe I don't want to put this in the footer. Yeah. Let's go double check that helper.
...34Current path. Class names, class. So you get the current page styling. Oh yeah, it really is intended only for use in nav. Let's go. Let's just delete this comment, I'm wrong.
01:04:08And I'm wrong because
This styling that applies if I start applying it everywhere is going to mess up the pages and it's not rate that we have this area thing coupled to styling now but it's not doing it at all.
Okay.
Let's pull that up.
aerohess @graefchen we can all improve
You know, this might be a good time to do my little bit about jujitsu.
And I've got the stuff I just pulled down from Maine.
01:05:05graefchen And we lear everyday. Like I did about Haiku and Poetry and how hard it is to design them just right. limesSit
So these are the pull requests I just merged.
And then this is empty, and I don't need it.
And then there's my little crossover commit that I used another time.
Yeah, so let's go ahead and jump over to main.
...38I don't need that empty commit.
...53So the idea of this crossover commit was to have a place where I'm merging all of the in progress feature branches to mark together and then above it have kind of long term feature branches.
So this is now in the wrong place.
It no longer is merging in main, but I figured out something nice.
pushcx https://flames-of-code.netlify.…
So pull that up here.
So last week, last Monday on a stream, I looked at this blog post, my, you know, there's life after Git where they talked about having this, having feature branches and kind of
aerohess alternative git practices?
laying out their feature branches on top of a multi-merge like this and that allowed them for their kind of short-term feature branches to see if they were conflicting with each other and then the long-term stuff could pick up or lose conflicts as they worked on things and i liked this a lot
Yeah, AeroHess Jujutsu is an alternative to Git.
It's interoperable, so that's why you see me on GitHub, but I am using Jujutsu, a different version control system.
And there's a couple links at the bottom to introductory stuff from this blog post.
And what I realized I wanted was a way to bump up the crossover point.
So, like, the crossover here
should consider main a parent.
And I wrote this fun little rebase command.
I'll probably make an alias for it at some point, but it says take the crossover, and it's dash S, so it'll grab its children too, and its destination will be, and then this is the fun thing.
I love the RevSet query language, because I just spent a few minutes reading that manual page, and I worked this out, and it says,
take the crossover back up one commit grab everybody after that is not wait hold on grab all of the commits right before crossover and exclude everything downstream of crossover so
me so i show you this and then i go over here and i run this and get the new crossover there we go so what happened here is the crossover commit bumped to make main its child and now it's up here you see that that is so nice and it's very
I mean, it's declarative and satisfying in the way SQL is, but I left all of these branches above crossover for these long-term ones, and then everybody else merges there.
So I know that none of the feature branches that I really consider to be active in progress work are going to conflict when they get merged down to main.
And then I can do my work on branches or on top of main, whatever, it's fine.
That's so satisfying to me.
I'm really happy with that.
pushcx https://www.youtube.com/playlis…
I got the other link to share.
aerohess is jj-vcs to work with your repo the right way?
I threw this on Blue Sky, but they just had a first jujutsu con talking about both some neat things you could do with it and having discussion sessions about developing JJ itself.
So if you're going to watch anything, I think the most interesting
is jjvcs to me arrow has i'm not sure what you're asking i thought the most interesting video for me ended up being the which one was it the discussion on tagging it was a wonderful example of very thoughtful developers
trying to figure out all of the different use cases for their code to support them.
Because tagging gets used both to mark things immutably and mutably and for branches and all of these other kinds of features.
And it was just a really thoughtful explanation of all the ways tags get used in version control systems
And it wasn't even a, and here's how we're making the perfect system at the end, because this is in progress work.
olexsmir @aerohess jj and git are different vcs, but jj can work on top of git repos, and jj is just alternative take on version control
And I think this kind of thing, getting to see someone work in progress and be really thoughtful and diligent is just some of the best programming talks you can see.
JJ at Google is also kind of neat because JJ came out of Google and they have some custom stuff, but
I think the real interesting summary is that they are slowly growing their pilot.
Not slowly.
Very deliberately growing their pilot.
And they're now going from... Don't hold me to these numbers.
I want to say like 100 engineers who use JJ at their work to a couple of thousand over the next few months.
The actual...
stats are in here and stuff but it was just interesting to see that they're just managing its rollout very well so anyways those are my two favorite talks all right so that one we'll leave that one's great to merge yeah this one actually god this really should be part of link two
And it's a shame it's not.
01:12:31Oh, this is an interesting one.
...42So one of the lesser known features on lobsters, because you have to be logged in and change a setting,
is you can see story previews and here you know it's just lorem ipsum but in the production site this is the first i don't know 500 bytes call it 200 words 300 words of a blog post which is a great way to not have to click through the link and real figure out what it's about if you are reading fast the people who like this feature really like this feature
aerohess @olexsmir just a preference?
However, it's kind of ad hoc, and it is nice to use browser features like details and summary a little bit more.
01:13:54olexsmir @aerohess yes
Jujutsu, I mean, yes, it's just a preference, but also it has features that Git doesn't.
And frankly, it has better features.
It's nicer to use.
It's safer.
It has better documentation.
And it lets me do things I want to do, like have that crossover for juggling feature branches.
That is really nice.
And
A big hassle I have always had with Git is that if you want to do a rebase to move commits around and you catch any merge conflicts, stop.
You have to deal with them right now, this instant, one commit at a time, even if you're moving 20 commits.
aerohess So its faster?
And that is a long, tedious distraction that you cannot predict.
olexsmir you mentioned that jj has better docs over git's, it reminded me of https://git-man-page-generator.…
how many merge conflicts you will get and in jujitsu if you move commits around like i just did with the commit with the crossover and there are commits they just get flagged as first class objects and they sit in the repository and i don't have to deal with them until i'm sure i want that order of commits and everything
01:15:31and page generator oh yeah oh my first one was can i drag this over the first one i got out of that generator was git murder bug report manifests which simref and mailmap last murdered the locals of a bug report optionally reapplying upstream chain this is very
plausible for a Git tool name.
olexsmir yeah seems like a part of git
God, in this text, the dense, jargony, you really want to know all of the implementation details of Git is so accurate to how the Git man pages read.
01:16:40aerohess I see
why why did you delete well i'm not gonna do something that blows up our queue
01:17:30There are two of them or just one. I can actually use this feature. There we go. Yeah.
01:18:04So now we just have, well specifically, this is list detail. And then it's replicated in the others because of the heinous inline partial.
...27This also needs to be done in single detail.
...39Is it single detail or is it single underscore detail? Let's get it right.
...51Run together.
01:19:00I'm getting the whole path.
...10Okay. So we have this story content and this becomes a details. That's fine. Then why are there two different colors?
...38Actually, there's three. so the details and then when the content is open oh that's right to avoid overwhelming it it's kind of a light gray and then when you open it becomes a darker gray that sounds great actually but shouldn't that match let's go look at the screenshots.
01:20:48pushcx https://lobste.rs/search?q=comm…
Oh, Arrow Hess, if you're still here.
...55So here's a link I've thrown in the chat a few times, but this is why I'm using Jujutsu.
It's a couple of comments on the site from me.
You have to scroll down to the oldest and then read up.
aerohess thx
But it might be useful.
So...
I may find text that is hidden, correct, correct, duplicated inside this summary.
Ah, that's why.
01:21:59Thank you.
01:22:24to detail this is right on top of the line of code i want to see yeah
...55This is nice. So I don't recognize Frem's name, but I really do appreciate that they are front end bug developer. Yeah, I'm mostly back end bug developer. They're getting us a bunch of front end improvements. All right. What else do we have open? Man, a ton. What a busy weekend it was. This one, I think we just had a comment. Yes, the bot is yelling at me. Hide.
01:23:37We will say that these are outdated just to reduce the churn. I'm being shamed by my own bot for not getting back to this.
...52So I tried a different workflow with this to post this PR and try and mostly just see if anyone was listening. The answer is not really no.
01:24:14Epic_Ninja_Elephant I feel attacked.
This one I've reviewed previously.
aerohess lol
It's probably ready to go.
Let's go check it out.
...39Yeah, now we get to now because I didn't click resolve on these. Now I just have to go through all of them because GitHub doesn't have a way to show me what's changed since I was last here. I don't know where to start. Let's start with, I guess, all of the resolved comments. Then also I want to start with I have to skim all the code for evil stuff. to make sure that I can just run the workflow, because that'll take a couple of minutes.
01:25:37All right, I remember this was short IDs. or lack thereof. Yeah, so I made a couple of suggestions so that he could just click to merge these.
01:26:15aerohess The lobste.rs css is soothing to me
Let's see if this is ready to go.
So now, when mods delete comment, it's just mods doing things.
We assume that the reason is there.
Delete by moderator.
Look at all of this code that doesn't have a bunch of ifs in it.
It's so nice to get rid of conditionals.
This is a bug, though, right?
Oh, no, that's right.
We made a second item called moderator.
And I bet the one is comment deleter.
Yeah, it's a couple lines.
All right, fine.
I'm just misremembering.
And then method delete.
That's very nice.
Delete for user.
01:27:11graefchen It is also relatively good looking code. Mainly because Ruby. limesSit
Why do we turn off record timestamps?
...22yeah arrow has the the general goal of the css is to not have a lot of it record timestamps he did oh i remember this he did this because he was using the updated at field yeah we can delete those so he was using the updated at column as when the comment was last edited and rails really wants that to be its own value for any time the record was changed in any way rather than like a business rule value for that. So we just want to get rid of those because also it lets us use the caching properly. Yeah. So I'm just going to get rid of this.
01:30:20GitHub, did you just throw away that comment? God damn it, GitHub. Aside from the getting slapped up to the top of the pull request.
...37Awesome.
...44GitHub.
Can I reload and then I can fix this line?
graefchen GitHub doing GitHub things limesHeck
no you just won't let me god damn it github because you don't see it as part of the pull request you didn't see the other one it's just up there in the diff that's fine i'll get it i think i can merge this down the comment is gone github
kind of a core philosophy of their pull requests has always been that you only want to be commenting on the diff of the pull request on the lines that are changed.
When a lot of the times I want to attach a comment to a specific line of code, even if it wasn't changed as part of the PR, because
It's context for the PR and there's no way for me to add a file.
And even if the file was touched and I want to go down 200 lines and touch that line, I can't add a comment on it.
And then the whole thing with suggestions being magic comments instead of commits is, I mean, that's GitHub's choice and it mostly reflects Git's
really lousy workflow for stacked prs it just doesn't have good support for them and so github has basically no support for stacked prs but then also you know if you want to put your uncharitable hat on it means more of your code is locked into proprietary github objects instead of just being a diff
as just being a commit in your history, like that one, two, three lines.
I just wanted to write a commit on top or write that in the merge commit.
marcoroth_ Hey
graefchen I have heard of Stacked PR. Might need zo look into it more. limesNoted
And GitHub does not expose UI for either of those options, which is why I'm going to pin all of my hopes on East River Source Control.
And I am sure they are going to give me
marcoroth_ They mentioned at Universe last week that you can comment on files now that weren't changed as part of the PR
jiu-jitsu based collaboration tool that i have always dreamed of with no downsides whatsoever stack prs is mostly just i mean here like if you have a branch that could be merged on its own and you make a branch off of that branch
the second one would be considered a stacked pull request because it is stacked on top of the first one.
And when you were evaluating the second one, you really only want to see its diffs from the head of the first one, not all the way back to main.
graefchen limesNoted
I mean, Marco, about what started that rant is literally 30 seconds before you arrived, I was clicking on this line of code because I can't do that.
I know there is the try the new experience, but it has the very dangerous copilot AI sparkles.
aerohess the scary llm sparkes
And since I'm already mad at GitHub, I definitely don't want to start clicking on a feature that implies it's going to use copilot.
01:34:50aerohess does lobsters filter those out
marcoroth_ yeah, maybe it only works on the "new experience"
graefchen More like the autocomplete on steroids sparkles. limesNodders
Yeah, Marco, that seems very plausible.
Arrow has filter what out?
aerohess LLM posts.
AI sparkles?
01:35:02I don't know if you hear the rustling and clunking.
The cat has discovered that because I got something in the mail, I have a cardboard box on my floor.
marcoroth_ oh maybe that's why they had "some of the comments are not visible in the old view" notice
graefchen Cardboard box on floor. Best cat plaything. limesHmm
no llm posts on the site are actually very controversial and the whole topic is and one of the strangest things is i keep seeing people say like every week i get another comment that's along the lines of well since lobsters loves vibe coding tools and that's the only acceptable opinion and then like 10 minutes later i'll get a comment from somebody else that's like well since lobsters always hates vibe coding tools and they're not acceptable
Yeah, Marco, I wrote a comment actually up here with a suggestion to delete a line of code, and then I accepted my own suggestion just to save this pull request author a hassle, and it just deleted my comment.
So there's just literally two comments missing up here.
I guess really only the one, because the second one is only a comment because suggestions are shoved into being a comment, but...
Yeah.
All right, so nice.
So what changed here?
Let's turn off white space for the 10,000th time.
graefchen Lobsters tries to be more indifferent to LLM tools. But the community sure as hell isn't. limesLurk
Yes, this should have moved out.
This is
This part of the check is redundant.
01:37:12aerohess What will we be complaining about in 10 years?
So let's make another suggestion.
Hey, Marco, if you want to watch another comment disappear,
Actually, we could fold this back in.
graefchen Something. Probably.
It only looks like this because of their intermediate.
Cancel.
Yes, throw it away.
graefchen The youth.
What will I be complaining about in 10 years?
Oh, I don't know.
Same shit.
Tabs for spaces, the global interpreter lock.
01:38:15Is there a matching end I have to get rid of?
If there's a mod delete, why isn't there a mod undelete?
aerohess Ah the youth! They vibe and code!
Hang on, this thing is wrong.
...42I didn't catch it before. infuser and
01:39:19So if I commit this, my comment just goes away. And the fact that I did that, disappears.
...41And we will just use the nil propagation operator here.
...53marcoroth_ but I think that always has been that way. When you resolve a comment they disappear
And then that's redundant.
It'll get updated with the hands partial.
01:40:04marcoroth_ it's still visible in the PR timeline
But I didn't resolve a comment.
I merged a suggestion.
Ah, small mercies.
01:42:23marcoroth_ committing the suggestion is also resolving the comment, I think
I don't often realize I completely goofed and forgot something like that.
There are a lot of half-baked features in the issue list.
So I guess that's not too surprising.
All right, update.
Oh, this one.
Hang up with test cases.
This one has conflicts.
Oh, because I merged the tests first.
I forgot this existed.
Yeah, and it's got there's that extra bundle I knew was going to be a change.
This is duplicated a gospel.
This is stacked PRs.
You know what that is?
aerohess stacked PRs?
Yeah.
So this is the feature.
And then that other PR that I already merged that should have been stacked.
And the GitHub UI didn't say it.
And I didn't have all of the open PRs memorized.
So I missed it.
So I think all of these changes were already merged in the other PR.
Yeah.
Arrow has just explained stack PRs a few minutes ago.
So it'll be in the stream archive about
What is that, an hour and 40 minutes into the archive?
01:44:51aerohess oh no, I just saw it and thats whats I thought
aerohess wasn't a question
cengiz_io hello there! first time here. I don't have much experience on RoR but I used to love it back in the day.
cengiz_io :D
cengiz_io thanks!
so yeah well welcome senjes if you would like to love it today we have lots of open bugs and i add more bugs every day so if you would like to practice your rails welcome back the other one of the regular things about the stream is i am constantly trying to recruit new contributors to whitewash my fence so
01:45:27Ah, this one.
...37So it's not a network error.
That's GitHub being aggressive about URL expiration.
cengiz_io believe me that sounds so much better than what I currently do as a living.
Nice.
Wow.
I have not seen that in the inspector before.
Ah, that looked really nice, actually.
I wonder if we could put a no break or something around those.
Story pages aren't working.
No worries.
Fixed.
01:46:17Hide white space. I didn't change anything, GitHub. Why'd you reload? There we go. Send the byline button. Outline revert. I don't know that one. Reverts the cascaded value of this property from its current to the values the property would have if no changes had been made by the current style origin.
...59pushcx https://developer.mozilla.org/e…
I did not know this one.
Let's throw the link in chat for anybody else.
Sanjas, what do you do as a living?
Is it different code or are you like working in a slaughterhouse?
I'm just trying to think of something that would be unenjoyable.
01:47:26graefchen Adding videos and pictures is always super helpful. limesSit
Revert notes that are similar.
Yeah, that makes sense.
...49All right. Down parent.
01:48:06No, it's not. Is it whitespace? If we said whitespace, no wrap. I think that would give us what we want out of this. Sequences. Let's preserve wrap. sort of line lines are broken in new line characters that's strange i didn't know there was any like outside of a pre-tag i didn't know there was anything in html that cared about new line characters or considered them separately from whitespace oh no browser compatibility is this in the well supported list Preserve Spaces, SVG. Shorthands are not. OK, so we're not using the shorthands.
01:49:45cengiz_io I'm an engineer at Canonical, working on Ubuntu kernels, trying to keep them secure and patched.
Oh, Engineered Canonical.
I hear a lot about your hiring practice for a company I've never really thought about working at.
cengiz_io *no comment*
Seems like every year somebody writes the same blog post about getting hired or not getting hired at Canonical.
aerohess Thank you for keeping ubuntu cool
In any case, thank you for keeping the Ubuntu kernels secure and patched, given that we're running them.
01:50:46cengiz_io it's a team effort really. but thanks!
Odd.
...52Your.
01:51:22Let's hit pre-preserve no wrap. Or actually, can I just directly newly available? That's trouble.
...41Yeah, especially if the name is a placeholder. All right, so let's just set white space to be
...55cengiz_io trying to become a kernel maintainer, that's my ultimate goal, then I will retire :P
Same as others.
01:52:03Preserve in ORAM.
...12Trying to become a kernel maintainer.
...19That's a big project.
...47cengiz_io nobody wants to be a maintainer I know. maybe I'm broken in a way.
I didn't know people didn't want to be maintainers.
I don't think that's broken at all.
cengiz_io :D
I mean, I run lobsters because I wanted it to continue existing in the world.
I just looked at that and I was like, well, I didn't start it, but I want to keep it running.
Being a maintainer is great.
I mean, you know, here in Chicago, we have a whole lot of like programming user groups.
I don't think any of them at this point are still run by their
original creators because you know after five or ten or twenty years of herding cats everybody taps out so i don't i don't think there's anything bad about being a maintainer
01:53:49marcoroth_ it's fun, but can also be stressful depending on the project
Hello, sir.
...57Yeah, I think also part of the stress is people who are attracted to being maintainers often feel they have a strong sense of responsibility.
And
cengiz_io yeah, I was always inclined to keep something running, rather than throwing it away
They don't always want to say no to things.
So like Lobster's is open source because it saves so much hassle with people understanding how site features work or did the moderators push a story up and down the homepage?
So that's a thing that happens probably daily on like Hacker News, but does not happen on Lobster's, but people would assume we do because it looks a lot like it.
Well, the source code's available, so you can go look.
But because the source code is available, we do attract a stream of people who want to pick up the code base and run it.
And then they want features and we do not accept their feature requests.
We take their bug fixes, but the goal is not to provide the best Reddit style forum software.
It's to run this one specific online community.
aerohess There isn't much to add to lobsters
graefchen Knowing and dealing with something outdated, it can be a hassle. But it can also be fun. limesSit
And so it's really tempting to get overwhelmed by people who want stuff that you can't provide.
I don't know.
It's hard to say no.
Maybe I just like maintaining stuff because I grew up in old buildings and you're always fixing things.
01:56:13Factor, parent selector, or null.
...20Closest. 2017. When did we rewrite parent selector or null? Probably 21.
...44Oh, I mean, we don't have any tests on this, though. I'm going to end its appearance until it find a node.
01:57:53cengiz_io it's very hard to keep balance right, I mean the project "archetype" evolves as we collectively discover new things to implement, yet there must be a clear vision or maybe call it a "straightener" ruleset that prevents the project from becoming a big ball of mud
graefchen Even if it ain't tech related.
aerohess @cengiz_io In order to achieve this, you need responsible people
cengiz_io @aerohess responsible + patient
that's in its place all right it's a nice little refactoring all right not refactoring really just deletion all right man so we're coming up on
The end of the second hour of the stream, and there are so many pull requests that I'm still working through.
It's kind of great.
graefchen In a industry that calls themself engineering, some do like to slack on the engineering part. limesSit
Fix focus ring missing for inputs.
Huh.
I don't think I knew that.
01:58:46Yeah, that's just a straight up bug. Where'd they go?
...57aerohess @cengiz_io + be able to deal with people
Why did we have this extra CSS?
01:59:07Be able to deal with people. I don't know. I didn't get into programming because I'm a people person.
...23aerohess you are dealing with people, their pull requests'
Let's...
cengiz_io yeah. dealing with people is the most challenging part.
Let's peek at the history of this to make sure I understand why we used to have that code.
2012, 6, 16.
Wow.
Hey, so this is an uncommon happenstance, but this line of code
predates the site launch, there is
not a ton of it that hasn't been touched in 13 years.
Yeah.
So that's funny.
I recognize this message.
This is the first commit message in the lobsters repo is conversion from PHP tree.
cengiz_io I used to run a community in my city, I never had an issue in a category that is non-people related.
Joshua started in PHP and then moved over to Rails.
I don't know how long he worked on PHP, but
All right.
Then let's see.
02:00:39Yeah, you know, I see problems like all technical problems or people problems at the heart of them.
I think that's pretty likely.
OK, so this one's from when the site was only three years old.
aerohess as you said, patience is necessary
And it's based on the auto-sizer.
That's fine.
And what happened here?
Oh, that's again the first commit, right?
Yeah.
And here, that's just the variable.
graefchen Herding cats is hard. But it is also a skill that needs to be learned. limesNodders
And then the last was 265.
02:01:33Yes, it was 285. OK, this stuff is safe to change. All right. Just doing a little Chesterton's fence work there, making sure I understood why this stuff was there.
02:02:03border color transparent.
...13All right.
...26cengiz_io I'm working on CVEs full time, and I've been called out names/yelled at/taunted by sector leading people many times, publicly. It's not fun, it requires a certain degree of not giving a f and persistence
Oh, because if he yeah, otherwise you'd end up with them changing size because we don't use the
modern box model.
...51aerohess @cengiz_io thats messed up
That's awful, Senjiz.
I'm sorry you've heard that.
I would not want to bother listening to people who insult me for actually doing the work.
I have a pretty strong F those guys drive.
I don't think I put this in the notes.
Yeah.
cengiz_io just do a quick search on linux kernel community and the gatekeepers. you'll immediately understand what I'm talking about
So many pull requests.
I can't hold all these pull requests.
aerohess They threaten you?
All right.
Yes.
Oh, I remember this one.
So this one I didn't want to merge because.
Oh, no, it was a different commit by the same author, right?
1773 was the other one.
02:04:05aerohess If people are knowingly harassing you, thats messed up
Yeah, 1762.
cengiz_io @aerohess my nationality was mentioned as a negative. that's how ugly they went.
aerohess @cengiz_io I think I know what you're talking about
So here's an instance where I said, I don't think this is the right strategy, and the user chose to close that.
I'm really sorry to hear that.
Whoever did that ought to get out of the community.
...41cengiz_io thanks. much appreciated
Okay, when it's ready for you, all right.
So this one, so we have a, oh, let's get this in the notes.
Content P, let's see.
Big CSP for images.
We have something like six stories.
I think I noted it in here.
Exactly five stories that include images.
cengiz_io it made me stronger though, I know that one day the community will be more welcoming and less elitist, and I will be there when it happens
And they were broken because of the content security policy because we forgot that any stories whatsoever had images.
02:05:25graefchen Insulting people based on their nationality is so much kindergarten behaviour. limesNope
Nice.
That's a really clear way to do this.
aerohess Some bullies never get their lesson.
And tests.
...46I feel that clear enough that we don't need to comment it this like can't have images is expressive enough that Yeah, that's clear. Great.
02:06:51cengiz_io it's interesting because when you meet them face to face, they are much nicer.
Arch down.
Does this one close?
No.
02:07:15All right.
aerohess @cengiz_io Everyone is tough on keyboards
That was a lot of progress.
Oh, and there's already a response to my comment asking for more work.
...29cengiz_io ditto
What changed?
Oh, he accepted the suggestion.
That's all.
...40Hmm.
...48pushcx https://github.com/lobsters/lob…
all right let's fix the sorting yeah so this this oh i picked ninja elephant if you're still here we have an open issue about that forced colors that you had
Epic_Ninja_Elephant I was just looking at that.
noticed you can do in firefox oh this is the so this is the bug for that god it's been three years
02:08:50Nope, it's not.
02:09:24All right, so we got that.
...54Filters, this one, somebody new reports this in the chat room. couple of days this one's actually getting kind of annoying oh someone may have diagnosed the bug clearing the session cookie the reason the tag filters cookie doesn't get saved because the default behavior protect from forgery is to use the session to store the csrf token okay what's the relation means not logged in requests can't have their csrf token verif oh
02:10:35I did not connect those two features.
...45And I even just saw someone say there's a new way to handle CSRF. Yeah.
02:11:43cengiz_io @pushcx I hope this isn't a too personal question but is lobste.rs your full time job?
does that where else do we clear section okay yeah okay so i was just thinking like wait a minute lobsters is not a business and it's not a job and actually more than that i don't even take donations for lobsters because i mean frankly a text-only website runs on beer money
aerohess How many beers?
I want to say we're still under $100 a month to run it, which as a software developer is, you know, comfortably hobby money.
Well, as an American software developer.
graefchen Many beers.
How many beers?
espartapalma 5 beers in US
aerohess yes
I mean, are we talking downtown Chicago beers or are we talking rural grocery store beers?
Five beers?
Oh, that must be Manhattan beers.
Chicago beers aren't that bad.
But it really is strongly dependent on your neighborhood.
02:12:49pushcx https://recheck.dev/
Anyways.
cengiz_io I live in Istanbul and bar beers cost $6 here.
No.
espartapalma like 10 beers, in a fancy bar
So to do the shameless plug thing, I do not have a full-time job.
I am starting this software product as a replacement.
Stumble.
Long walk.
Change protection forgery store cookie.
Some point seems long enough.
I guess it could be added to the exceptions.
Rails doc say it's encrypted.
See how that works.
02:15:02cengiz_io `recheck` sounds interesting. I'll read all about it. thanks
Yeah, Sanchez, I just, actually, as long as I'm in shameless plug mode, let's get, let's see, where did, oh, it's over in my other browser.
YouTube, Chicago, Ruby.
Here we go.
I'm grabbing a link off screen here.
aerohess no shame in plugging when you need it
Videos.
...32Oh, this is the wrong Chicago Ruby.
pushcx https://www.youtube.com/watch?v…
Oh, here we go.
All right, just took a little.
So I gave a talk at XORuby, which is a series of conferences, but they got beat to putting the video up, because I gave the talk again three, four weeks later at the Chicago Ruby users group.
so the first i don't know well the first 20 minutes of this video are like intro kind of stuff and then i gave a talk and i want to say i ran around 30 35 minutes and it's a introduction to why recheck exists and something like it is a missing tool in the toolbox of all web developers
02:16:35This one is a bug that people have run into a couple of times. Oh, and it was great that it got written up. I haven't been noting these issues.
...56And then what's the other one?
02:17:05This one I want to look at because I actually thought we had a good test on this.
...17Yeah, so you can search for...
cengiz_io you know what, this would have been a lifesaver for me 11 years ago
So when we made it, you could search without.
So this one...
failing this test is falsely passing ah senjas yeah so when i tell people about recheck the junior developers tend to be confused and then among the senior developers about 95 of them go i can think of a bug that this would have caught
And then 5% of them go, we have a homebrewed version of that at our job.
And we call it verifiers or double checkers or Integratron.
And it's awful because it was built out of duct tape and bailing wire, but we can never turn it off because it's load bearing infrastructure.
And so it's been very funny to work in this space where
I have to explain what the thing is, but when people get it, they really get it.
So what kind of search is failing?
Searching for the domain without domain colon doesn't work.
I wonder if the rule changed.
It's not getting passed to the search model.
02:19:03Actually, I wanted spec search.
...22It's at least partially working because this test is passing.
...33Just to double check, we will actually run the specs, although the build is green or I get an email.
...45So there's a query where story domains has domain value 2s. You know, if this test could be falsely passing, because the word appears if it's parsing it as the word domain, which does appear in that test. Okay. I bet the search parser slightly changed shape and this test is falsely passing. All right, so let's go look at the search model or search parser.
02:20:44cengiz_io I coded 50% backend of huge customer loyalty program platform back in 2014, data was all over the place 'cause the company had over 40 brands (and a massive datawarehouse) and all purchases were eligible for loyalty program (you know, you earn coins and crap on every purchase etc) and I had to hand code 20+ scripts in PHP!! just to check sanity of certain constraints
I should be as domain, that's correct.
02:21:06You earn coins and crap.
Yeah.
Well, you are going to love that talk, Sanjay, because the first example in it is also e-commerce.
And it was about how coupons were unreliable.
cengiz_io really? wow
So a very similar problem domain to what you're describing.
And yeah, this is...
I am not claiming that, you know, I have invented the perfect thing.
I am one guy who is reinventing a wheel many people have reinvented.
aerohess It is a step in the right direction.
aerohess Imagine how many mini problems like this could be solved in webdev
Because a lot of people have seen this issue and then been like, well, wait a minute, I can actually keep this from happening if... Well, because like one of the motivating examples is if you have a bug...
And you query your domain or your I'm sorry if you have a bug and you query your database to make sure that it's the only affected user right like how many users have bought something and got zero loyalty points when I know they should have gotten 100.
Eventually, like the fourth time you fix the bug you come up with the idea of hey I should take that query and I should run it automatically every day.
Because once a bug has been reintroduced a few times, you realize it is not going to stay dead.
Yeah.
Arrow has, I can imagine, a lot of them.
And I have notes for pages of notes for writing my own web framework to avoid many of these problems.
We'll see if I actually end up doing it.
Actually writing a web framework would be such a staggering amount of work, but I don't know.
Ruby's had a bad couple of months and Rails is pretty directionless, so maybe.
02:23:32cengiz_io we were tracking phpBB run forums for inconsistency posts and were reverse engineering the issue from their descriptions.. sigh.
I wonder if maybe the job is failing in production.
...42Let's double check that. That might explain why the tests are green.
...56That's pretty rough. So this goes into storage, IANA TLDs. All right. Let's log into prod.
02:24:15espartapalma weird, I'm reviewing a Discount Code thingy right now... it's kind of weird flex every single use case.
That's all the cached files.
Okay, the Ohana job is not running in prod.
That's why this is broken.
Let's figure out why.
Is it in recurring YAML?
...40Close these out.
...52yes every one month has this just not run in production because i merged this code a couple of weeks ago that's actually totally possible all right before i do anything in the console all right light mode warning i'm going to go look at the mission control on prod Where's that?
02:25:35Come here.
...41Sidebar, there we go. Does mission control know that it's a recurring task and does it think it's running? yes it thinks it ran it three days ago can i get the details yes pending pending why is this job pending for three days that's a lot of pending undefined method we have a production bug there we are 931 decode response undefined method for an instance of string all right so if the this is assuming a split happened didn't it let's go look at this list
02:26:49Yeah.
...59And then we will reject if it starts with a hash. We will map to what we want and then join things back up. Yeah, that's going to be the bug.
02:27:24discount code yeah you know any kind of special casing like discount codes coupons they become such a magnet for bugs and i worked on that the e-commerce app that is the example in the start of that recheck talk you could they were trying to incentivize people to
use the e-commerce with coupons and so it would be like oh your first order is through free or your third order is free or or or or you know like a hundred different conditions and i want to say when i was there i found eight different ways to abuse coupons to get infinite free product
cengiz_io I've been there.
And so like you could use a coupon and then, if you like changed your shipping address between when the order was placed and fulfilled.
It would not cancel the coupon and so, then you could reuse the coupon on a new address, even if the new address was just like you change your address back to the first one.
graefchen That's a lot of way of abuse. limesO
and for each of these.
cengiz_io some random person bought 4 pairs of socks and managed to gain enough bonus points to buy a full suit and we didn't know about this until they bragged about it publicly
had to go look in the database to see if they had been abused and i think the most one of the coupons had been used was like four times people were not intentionally realizing they were getting too much free they were just doing a couple of different things and accidentally getting extra stuff they weren't entitled to but not quite realizing the circumstances
02:29:15Oh, yeah, Senjus, that's how you hear about some of those bugs.
Especially, like, four pairs of socks is such a specific thing.
I bet you in, like, 30 seconds you knew who that customer was.
cengiz_io yeah
Especially with the second thing of, well, they bought four pairs of socks.
And second, they received a suit.
Yeah.
Do you send them a bill for the suit or you let them keep it?
02:30:08cengiz_io I think they wanted to hire the person as a QA
aerohess thats some next level dedication for getting benefits
espartapalma in the TV Series "Ghost" (the american one), a character did exactly that, it did abuse coupon codes to have everything free in the B&B the protagonist are owners :D
cengiz_io can't fully recall now
oh man forever ago in college i was working on a mud a text-based game if you think of wow but it looks more like this terminal than you know azeroth we had one player who was an incredible tester like
graefchen Multi User Dungeon limesPoggers
You could have a briefcase.
You could put a scroll in the briefcase.
Well, he would put 4,000 scrolls in the briefcase.
He would put 4,000 different kinds of scrolls in the briefcase.
They all had different descriptions.
Yeah, multi-user dungeon.
And he would just...
constantly did the strangest things and just broke the code all of the time and we loved him to death for it because he caught so many bugs i assume now you know decades later that he's working in qa or at least spent a while
02:31:19cengiz_io those people are built different.
So, what was it called?
Fetch IANA TLD's job.
You know, look at me.
Being sloppy, I didn't even run the specs before I pushed.
I'm also assuming with that commit message that I fixed the one and only bug.
graefchen Just do the most ridiculous and dumb things and you will inevitable find bugs limesD
I have really high confidence it fixed that bug with reject, but... All right.
All right, green test suite.
Let me kick off the deploy.
02:32:18So deploy is going to take about 30 seconds and then I will just bring up the job and run it again from the console because why not right.
cengiz_io I remember a tester waiting for the midnight second/millisecond in order to mess with the 3D secure payment process, he was right about that being an issue. Jeez.
And then we got to think about why didn't I get alerted that this job failed I bet it's over in the bug cracker I never turned email alerts back on.
...52It's over in the bug tracker and I didn't turn email alerts back on because the bug tracker had an issue where it was getting swamped. Let's turn the emails back on. I'm doing this off screen because I'm scrolling past keys and things. So where's the option for it?
02:33:37The other notifications page. No.
02:34:14graefchen Reminds me of Speedrunner setting times to a specific time to be able to abuse rng. limesD
speedrunner setting times huh i'm gonna have to search for that dang setting all right so all right here's the light mode warning because that deploy is done
And now let's click retry on this failed job.
Why do we have 3,500 failed jobs?
That's a lot of failed jobs.
Oh, it's this fucking Mastodon sink.
02:35:07I lost the flash.
Finished jobs.
I see it right here in finished jobs.
Did it go to the top of failed jobs?
No, it did not.
graefchen Real good speedrunner, specially for any% (finishing the game as fast as possible) Use some of the wildest thing you can imagine.
Where did it go?
Let's just start a new one.
...45Epic_Ninja_Elephant Unrelated, what is that purple ice berg extension you have in your browser?
cengiz_io @graefchen it was very similar. the transaction id generation was very predictable and they managed to "transfer" the payment of some other customer to their account by matching the submission Id. I asked for a 64bit UUID but the company (biggest telco op in country) gave me a 10 digit number instead.
I didn't fix it.
Undefined method, make dir p for class dir.
Purple iceberg, oh, that's Obsidian.
It's like a personal knowledge base kind of tool.
I like that it works as a bunch of markdown files in a directory.
I'm using it for a couple of things.
We'll see how it goes.
All right.
mkdir p is on while utils.
Yeah.
Except you never have to create storage, well, maybe on local development, right?
graefchen 10 digit number ... limesBlink
Yeah.
But how do you know what directory?
No, it should execute in the directory.
That's fine.
02:37:09I would rather, instead of fixing that,
...24And dev and test and production.
cengiz_io @Epic_Ninja_Elephant Obsidian is a huge beast if you're not careful. Some people are taking it too far, but I think it's a great tool for basic note keeping and bookmarking.
In production, if the storage directory doesn't exist, I want this to crash.
I want lots of things to crash, because the site is broken if that's missing.
02:38:00Can I run this locally? Yes.
...12That's a new exception.
This fucking OpenSSL bug.
The OpenSSL gem had a bug, and it has been rippling through every Ruby project I have.
So if I gem update open SSL here.
How did I not already fix this in monsters?
Yeah, it's not explicitly there.
It's like it's from the system Ruby.
graefchen I like Obsidian. Also their local first approach (in the olden games it would be called an program) is good. limesSit
And since I run like RBN to be able to have multiple versions of Ruby installed, I've had to do this a couple of times.
Because, of course, you never end up running one version of Ruby.
You run it nine across your various projects.
02:39:12Epic_Ninja_Elephant @cengiz_io I abuse Jekyll for those sorts of things.
Same stuff.
Yeah.
...29Yeah, obsidian is such a general purpose tool that it's tempting to pull that stuff in, kind of like Excel.
02:40:08cengiz_io @pushcx I think you can pass a debug logging variable to that binding right?
I'm not having a login problem.
I'm having a problem that it's pulling in the wrong version of OpenSSL.
And I don't know why, because I thought I already dealt with this for lobsters.
I just want to test it instead of writing and deploying and testing by running the thing in deployment in prod, because, you know,
It's embarrassing to have nine commits on main about one thing.
Well, but you know what?
I stream myself making bugs on Twitch.
I'm beyond embarrassment.
02:41:05cengiz_io what is `jj` alias?
Does anybody know off the top of their head if Solid Q has a way to clear
Because if I filtered the job class to the one that I fixed the bug in, I could just discard that selection and get rid of some of these irrelevant failed jobs.
02:42:03Epic_Ninja_Elephant @cengiz_io jj is a git-compatible vcs
cengiz_io oh
So if that's deployed, so just to save the light mode, I'm going to click on run on the fetch IANA job off screen.
pushcx https://lobste.rs/search?q=comm…
Yeah, Sanjay's, it's a, I actually can't add anything to Epic Ninja Elephant's description there.
So I will just, for the second time this stream,
I will link to a couple of comments I made on lobsters about why I use Jujutsu and how much I like it.
All right, now it is light mode warning because I have something wonderful to show.
The job ran cleanly.
So let's go see if we can search by domain in prod.
let's search stories and we will say domain github.com these are all on github and if i search for github.com these are all on github i think we're in good shape let's say domain example.com we have linked to example.com once that's someone must have pasted the wrong link what a weird url
All right, so that's fixed, and it's fixed for real.
02:44:29All right, so with that fixed, what else do we have? Oh, this is the one that we were just looking at the pull request for. So that's fine. The update must be that this pull request was opened. All right, so nothing there. This is going to be one of those streams where I spend all of my time Just reviewing pull requests. This is such a nice problem to have that there are so many pull requests, not fast updated most recently, that I can't get to everything in the three hours I usually stream for. That makes me really happy, like mildly annoyed. And I feel sometimes repetitive. Cause like I announced these streams and then I never get to the thing I announced. And then I post, you know, a week later, Hey, I'm going to do a stream about the same exact thing I said I was going to do a stream about.
02:45:31graefchen Many pull requests. No Anubis. limesNodders
Cool.
They would rather do it as a separate PR.
So what's failing in the test.
Correct.
You know, Gravechen, if you know Anubis, a lot of the stream was going to be me struggling to learn my way around it, so you could PR Anubis into it.
Or maybe I should just write it up as an issue and someone will submit it.
Expected to find a button disowned that's not disabled, but there are no matches.
Okay.
I broke this.
I broke this with one of my suggestions.
All right.
graefchen I only know one Anubis. And it ain't the program. limesNodders
suggestions i should just fix it what am i doing all right so let's write up an issue and it ain't the program yeah did you see a bright light and then
meet a guy with a head for a jackal carrying scales if so good luck i hear that if you submit a lot of pull requests your heart will be lighter than a feather you know because you get those pull requests off of your soul that's what they're saying
02:47:11What was that Saturday?
...40cengiz_io oh Steve Klabnik has a tutorial on it. Cool.
Yeah, Senjos, that was what got me into jujitsu because I had heard of it a few times and I was like, okay, okay.
And then I was like, well, if Steve wrote a tutorial, that's going to be a great intro.
And I just spent, I don't know, an hour or two working through the tutorial.
And I was like, wait, it's a little bit turned inside out because you make a commit before you edit it.
And I think it took me like two more hours and it,
the workflow became totally normal, especially knowing that jujitsu split makes it really easy to clean up after I forget to start a new commit.
And yeah, I mean, Steve didn't even finish what he planned for the tutorial, and I'm already writing, you know, wild rev sets and falling in love with this program.
cengiz_io he's a great person. sorry for bragging, we had a LOT of beers together lol
So good tutorial.
02:48:48graefchen Nah. It is just me Smartphone that is called Anibus. Because I played Assassins Creed Origins a lil bit. And also learned a little bit about Ancient Egypt. limesSit
Oh, you know him in person.
Neat.
pushcx https://lobste.rs/s/ghdv6w/i_se…
Yeah, so speaking of him, you should give him a congrats on his new job.
What is it?
cengiz_io yeah I used to contribute to rust compiler back in the day
Future?
Yeah, here you go.
I'll let you look at that.
Oh, neat.
02:49:28That was targeted.
...45What's that commit? This one. And grab this.
02:50:35cengiz_io iirc he just left oxide
Sanjay, you should click the link I sent.
It's down at the bottom of that blog post, but yes, he did, to go work at a company that is, they are not super specific about what they're building now, but it sounds like Jujutsu Hub, in short.
And I'm hopeful.
02:51:52cengiz_io he's always been so brave. good for him
espartapalma wait Klabnik is not longer on Oxide?
Yeah, as part, click the link a couple of lines up as of like a week ago.
02:53:12espartapalma that explain while all the focus on jj
cengiz_io (now I know who to nag about an invitation to lobste.rs lol)
yeah if if you've had a beer with a active user or many beers as opposed to you know running hobby websites i'm just trying to tie it back to the previous topic of how many beers does it cost to run lobsters did i finish that thought or did we get distracted into beers
Yeah.
Anyways, the end of that thought was I don't take donations because anytime you take donations, you immediately set up the assumption that people are getting differentially treated based on whether they did or didn't donate.
And it's not worth that hassle to take donations because the site is pretty cheap to run and getting cheaper.
02:54:15Let's put this part in bold.
...38cengiz_io how do you deal with AI scrapers? do they have any impact on lobste.rs traffic?
graefchen "I gave you my 5 Dollar, now I want my cookies." limesNodders
Do you have the video off, Sanchez?
I am typing this up now.
We are
cengiz_io aaah Anubis
We mostly have been just fine.
We have some basic rate limiting in effect.
It's in the config initializers rack attack.
Please read the bottom sentence of this issue that I am typing right now before you yell about it.
02:55:10cengiz_io that anime girl pops up
People jump about Anubis over and over, but like, yeah, the Jackal Anubis character is cute.
I think it is a very clever bit of entrepreneurship to put a slightly silly image on that page to incentivize companies that take themselves seriously to pay to remove it.
I think that is very clever.
I wish Katie lots of success with that.
Let's go find the up level domain.
Dang it.
02:56:14cengiz_io sorry I'm way too tired to track the screen, I was just listening to you and looking at the chat, I didn't notice the issue
Oh, Techro HQ.
All right.
graefchen It is indeed clever. And if not it sure as hell makes it that you might give the dev some money. limesNodders
And then where's the list of ASINs?
There was one call 10% data crawlers.
There we go.
...50And then there was just a PR I saw go by. So deny pathological. OK, so data bots deny pathological is what I want to be in. Data bots.
02:57:53no worries singes it's one of those things people have lots of opinions about and so they kind of jump to their familiar opinion when the thing i'm trying to say is haven't had a lot of problems with scrapers over the years you know this should be the very first sentence
02:58:25because we have a bunch of unlimited performance work, especially by using full page caching for logged out sitters to avoid even touching the app servers.
02:59:00So. We can take a very gradual. Conservative approach to increasing.
...22Integrations. I can do this.
...35breathing room to take a very should you challenge the least user-like at the many an unusually high percentage of power users unknown but probably single digit do not use javascript cannot solve JavaScript proof of work challenges because they're using strict privacy security controls or homebrewed browsers or other unusual steps.
03:01:20cengiz_io I'm very happy that we finally have a contender/alternative to cloudflare in this area. I don't know them well enough to compare them technically but at least there's one open source tool that some are agreeing to use/contribute.
cengiz_io I read that anubis does a calculation thing, that's all I know
Yeah, so they're taking somewhat different approaches.
A big part of why Cloudflare can be effective is because they're the man in the middle on an enormous amount of web traffic.
And then they present a captcha, but they do also do like a minor proof of work thing.
cengiz_io "proof or work" that's the word ok
Is my understanding like can you run javascript and load the capture at all, and if they have seen got italic and I wanted bold mark down.
wanted bold to make it really obnoxious.
03:02:08Two stars, not one.
...16Yeah, that's the term of art for it and Anubis is almost purely a proof of work calculation. It has some other heuristics like Are you attempting to curl from the command line or do you claim that you're curling from the command line? In which case you can pass through because we can't really present curl a proof of work and bots are at least not abusing that user agent. That one's a really hard trade-off. Are they using ridiculous user agents like claiming to use a version of Firefox that's 20 years old because you wrote the bot 20 years ago and have been updating it since, but not that user agent? There's all these kinds of things. But yeah, fundamentally, the thing Anubis can't do is man in the middle a double digit percentage of the web to notice bad behavior across multiple sites. And I would rather not add Cloudflare in front of the site. It is a little bit of a point of pride that Lobster's runs on a couple of VPSs that we configured rather than through some kind of managed service, do everything for you, cloud enterprise solution. You should be able to run a useful website on an old laptop on a shelf. And while we are not literally on a shelf, we are about that level of technical maturity.
03:04:30cengiz_io sounds sensible
Yeah.
All right.
We'll see how that goes.
Maybe somebody will pick that up.
Because clearly I'm not getting to it.
And I should spend these streams writing stuff up rather than not getting to things.
All right.
And I was kind of hoping this user would see the this contributor would see the failing test that I broke and out of the goodness of their heart, fix it.
But they didn't happen to come back.
And
GitHub is not good at collaboration, so I can't just be like, well, let me check out your branch and add a commit and shove it back.
Let's go look at this spec.
Maybe I'll spot it instantly.
Oh, you know what?
I'm going to throw up the last call banner.
because I usually run about three hours and we're a little over that.
So spec comment, spec features comment line 83.
So something in these logics broke.
03:06:03Yeah, this is the exact code that they're touching in the PR.
...19And I don't instantly recognize what would have failed. It's probably that thing that I almost changed back to a one-liner.
...35yeah it's this else because okay so bills failing because you broke this out into a nested conditional because This is split out into a nested condition. The goal is that you can delete young comments, which I think is 14 days, but disown after that to avoid running old discussions into Swiss cheese with lots of missing comments. The two buttons are mutually exclusive. The user should only see the one they're allowed to do. easiest fix would probably be to remove the
03:08:47So there's at least a bug diagnosed that they can fix.
cengiz_io this is the nicest and gentlest PR comment I've ever seen
And I think this is good.
All right.
Yeah, there's Anubis.
Man, I have light mode alert.
I need bright red alert.
We just had the time change here in Chicago yesterday.
So now it's dark at like 5, 430.
That is the nicest and gentlest PR comment.
Well,
Unlike the Linux kernel, I am not drowning in contributors and contributions, and so I have noticed that if I am nice and encouraging to people, they come back and they give me more contributions, and then my bugs actually get fixed instead of just hanging out forever in the bug tracker.
03:09:46It's also a bit of, you know, be the change you want to see in the world.
Oh, speaking of change.
cengiz_io 100% agree with that
So I didn't get to any of these things, but I said that I was going to explain the Thursday surprise at the end of
graefchen Being nice helps a lot to make things happen without collisions.
pushcx https://www.twitch.tv/chaelcode…
stream so the next scheduled Lobster's office hours is going to be Thursday morning Chicago time except instead of having a surprise guest we are going to have a surprise host so there is a streamer who has regularly come around and hung out in the
marcoroth_ yay!
stream chat named Chael.
She streams as Chael Codes.
That's obnoxious.
Oh, and I guess she is restreaming me now because that's like the stream 20 seconds ago.
I don't know which works.
03:10:50But I am going to take the Lobster's office hour stream to Chael.
graefchen Yesn't. Its complicated.
because she wants to make a fairly large contribution.
So she does these like marathon streams that are five or six hours long.
Oh, it's because I'm logged into, well, I don't know.
marcoroth_ you can recommend channels
Yeah, I don't understand the Twitch feature set, but somehow her stream is watching my stream so we can watch the infinite hall of mirrors here.
marcoroth_ RailsConf?
i ran into her at it must have been railsconf and we got to chatting about development so she is going to yeah i was just remembering which one it was because i went to a few ruby conferences and
she is going to pick up a moderator feature that has been on my back burner for, I don't know, a year and a half, because she thought that it would be interesting to work on that kind of internal plumbing, especially because those features have a ton of care put into them around giving users feedback along the lines of what Sanjay was just pointing out of,
If you gently nudge things, they tend to get better responses.
So early on on this stream, we talked about this upvoting errors on high contrast, where if you look at view, comment, comment, voter, we have functions like that PR I reviewed for should use show the score to the user.
So if a comment
only has a couple of votes on it and doesn't have a lot of flags and is not flagged by the current user.
Wait, did I say part of that backwards?
We have a bunch of logic around something as simple as should we show you the score for a comment.
And we do that because these kinds of little nudges let us cut down on meta conversations where like lots of people would leave comments if they got a single vote or a single flag.
And we kind of wanted to cut down on those meta threads.
And then also to discourage people from using flagging to punish.
You don't see the score anymore if you flagged something because you don't get that little satisfaction of watching the number go down.
And we have a lot of these little polish features around commenting, voting, flagging, and especially around the moderation features.
And so Chael was interested in taking on one of those and the, yeah, the sneak preview of it is going to be that we kind of have
dashboard set up for moderators that shows us recently flagged comments but it's not as useful as it could be because it's not immediately clear if another moderator has already responded to that comment whether they've seen that comment and decided it was okay it doesn't rise to the level that it needs to get deleted or if it is kind of in that intermediate error
area where it's worth messaging the user but not worth deleting the comment did that happen and so we're going to build kind of a work queue system around flagging but before we can do that we really need like a moderator mail system also so we can be more responsive and a mod mail system would allow a conversation between all of the moderators and an individual user
because a lot of the times when these things happen, when comments get flagged, anyone can respond, but we're not really set up in a way to know that another moderator has responded.
It's there, it's just a little clunky and that amount of friction has made moderating a little bit annoying in some ways.
And so Chael is taking on a feature for
us moderators so i'm going to hack up the the site footer because i assume that most of the folks who are here are here because lobster's office hours is live and i am going to have this link over to her channel because i am just going to join her channel as the disembodied voice i usually am she has the the fancy setup with a camera and lighting and
You know, not having a cat spill coffee into the keyboard at the start of the stream.
marcoroth_ FWIW you can co-stream now, so you chats are merged
So I do hope folks come back on Thursday because you will get a much longer stream from her that I will hang out for at least the start of.
The co-streaming thing, it has a clever name and it's messed up because I...
marcoroth_ ah lol
am hit by a twitch anti-spam control that they call a security control so i basically can't verify a phone number to twitch and i'm not allowed to co-stream and it's been an ongoing annoyance since this channel started it's also why i'm not an affiliate and not a partner because basically unless you use a cell phone provider that is vulnerable to sim swapping
you can't use a bunch of Twitch features.
And I realize how backwards that sounds.
It is backwards for me, but mostly it's there to prevent spam.
And they call it a security control because they don't want to accuse people of being spammers because you cannot write a help text to explain the modern
void landscape but like give them a phone number is the proof of work version of signups so like we raise the cost of an invite to lobsters or the login to lobsters by saying you've got to be invited by an existing user and just that little bit of increasing the cost of an account means that
I think maybe four times in 13 years have we seen that kind of bargain basement, cheap Viagra now kind of spam, where if we didn't have that cost, we would drown in it.
And for Twitch, they decided that they were gonna gate a bunch of features behind this phone number verification
But it just doesn't work if you have security needs.
So yeah, that's a minor annoyance.
But we did a tech test.
And I will at least be able to appear as a voice.
And obviously, because I can control a link, I can link to any dang channel I want.
cengiz_io twitch has a very generic audience so they probably had to resort to it
Intended funny did I do that.
yeah I did that on accident that's fine.
yeah well it's they have a mass audience, one of the things like this kind of feature lobsters can be really weird and unusual because we're small.
You know, you look at these stats graphs.
We add a couple hundred users a month.
cengiz_io I've seen some massive, MASSIVE spam storms in other channels hundreds of times. I've seen over 45k bots raiding channels with a single click.
In any month, I mean, we are as active as the site has ever been.
And in a month, we have 300 different logged in users.
Growth is not a goal.
Making money is not a goal.
Going to the moon and number go up is not a goal.
In fact, so, you know, I've said it, but
If the number of active users declined
sharply, I would be concerned.
If the stories submitted declined sharply, if the comments posted per month declined sharply, I would be concerned.
But I would be equally concerned if they increased sharply, because it would be damaging to the community in very similar ways.
And Twitch has, you know, American standard VC goals of growth at all costs.
03:20:32It's kind of funny like by having so I kind of kept an eye on the number on the dashboard i've had between 16 and 20 viewers on this stream is what twitch said.
I think that's logged in viewers I don't know if it also counts logged out.
graefchen Should also count logged out.
And that is not a lot of people, but that's enough to put me in the top like 5% of all active streamers, because it is such a long tail thing where like that pirate software guy gets 20,000 people watching his streams.
He's the top 0.1%.
graefchen Pirate Software limesYikes
And by only having like less than two dozen, I am still top 5% because so many of the other tens of thousands of active streamers are streaming to one or zero people.
03:21:31And yeah, I don't really know much about the guy besides he makes indie games and is the number one coder on Twitch.
I watched one of his streams and he was talking about
running a i think a ferret rescue which i guess is his hobby but i'm not really interested in that so i stopped watching i'm going down i'm totally distracting myself because i'm at the end of the stream and tired why was i talking about other rando streamers oh yeah twitch
it's it's very funny everything in social software is power law distributed so even though this is a very small stream to a couple of dozen people a couple a dozen which is rounding up rounding up to two dozen puts me in the top couple of percent of twitch streamers which is very silly i don't know mass media is unintuitive
So, anyways, continuing the general theme of doing things that don't scale, the next Office Hours stream will be over here on Chael's channel because she thought it would be fun to stream contributing to the codebase.
I don't know much about her community, but I do hope that it inspires more contributors because, I mean, if you've seen our open issue count, you know we could use it.
But that's the surprise for our next stream.
We will have not just a surprise guest, but a surprise host.
Hope I haven't ruined the surprise, but I figured I should explain it somewhere because I know a bunch of folks like to watch pretty regularly.
And I do appreciate the regulars and the kibitzing.
Anyways, this has been Lobster's Office Hours.
I will see you over on Chael's channel on Thursday.
cengiz_io thanks everyone
marcoroth_ see you! Thanks for the stream
cengiz_io have a great one
And maybe click follow or subscribe or whatever the button is labeled so that you get the announcement when we head over there.
I'll see you on Thursday.
Take care.