0 00:01:56,300 --> 00:01:58,199 Hello. Hey folks. 1 00:01:58,370 --> 00:02:01,849 Happy Thanksgiving to the Americans. 2 00:02:02,319 --> 00:02:05,709 I mean, everybody can have a Happy Thanksgiving. They probably just don't care. 3 00:02:09,298 --> 00:02:10,169 So, 4 00:02:12,050 --> 00:02:17,309 so it's not gonna be a giant long nine hour opus or anything because we are having, 5 00:02:18,960 --> 00:02:23,320 oh my God, we're having eight people for dinner. So, including us. That's 10. 6 00:02:23,330 --> 00:02:25,539 So there is still plenty of prep to do, 7 00:02:25,820 --> 00:02:28,639 but I wanted to keep up the stream schedule of. 8 00:02:29,750 --> 00:02:32,089 So, speaking of the stream, 9 00:02:32,289 --> 00:02:34,889 this is Lobster's office hours 10 00:02:37,809 --> 00:02:40,070 and let's grab the browser up. 11 00:02:42,270 --> 00:02:43,130 So the first thing, 12 00:02:43,710 --> 00:02:45,830 so Lobsters is a 13 00:02:47,770 --> 00:02:50,869 social media website where people can talk to each other 14 00:02:51,830 --> 00:02:52,600 and, 15 00:02:54,949 --> 00:02:55,380 hey, 16 00:02:55,850 --> 00:02:56,559 Gaua, good morning. 17 00:03:01,419 --> 00:03:02,660 And what a funny morning. 18 00:03:02,809 --> 00:03:03,360 Um, 19 00:03:04,050 --> 00:03:04,820 so, uh 20 00:03:07,619 --> 00:03:10,679 I saw on the news, where would I just see that? 21 00:03:10,990 --> 00:03:11,839 Was it? Um 22 00:03:14,699 --> 00:03:16,039 Let's pull it off of here. 23 00:03:16,589 --> 00:03:19,440 Oh, no, it wasn't here. It was. 24 00:03:20,270 --> 00:03:22,460 Yeah, I don't have one in candy. Do I 25 00:03:23,910 --> 00:03:26,520 really prepared? Totally professional. 26 00:03:34,899 --> 00:03:36,360 So I was gonna grab the 27 00:03:38,080 --> 00:03:39,639 wild bit of news. 28 00:03:40,139 --> 00:03:41,279 This was the, uh, 29 00:03:44,210 --> 00:03:45,429 I saw a couple of links 30 00:03:46,429 --> 00:03:48,779 and uh pop up aside. This was the 31 00:03:49,490 --> 00:03:50,990 most interesting version. 32 00:03:51,649 --> 00:03:53,190 Yeah, I really like that. Um 33 00:03:54,080 --> 00:03:55,320 If you haven't seen 34 00:03:56,139 --> 00:03:58,080 HCR News. Um, 35 00:03:58,240 --> 00:03:59,970 I don't know how I found it 36 00:04:01,839 --> 00:04:03,259 but it's basically 37 00:04:05,839 --> 00:04:08,039 a filtered version of 38 00:04:08,179 --> 00:04:09,940 what we would call slash newest. 39 00:04:12,580 --> 00:04:13,279 And 40 00:04:17,209 --> 00:04:18,309 I don't know, it's, um, 41 00:04:19,558 --> 00:04:24,859 I really like that. It has the horizontal line for, here's where you last read. 42 00:04:26,459 --> 00:04:31,459 Although it is possible for things to pop in under it, it's uncommon 43 00:04:31,690 --> 00:04:33,630 and they pop in under it because, 44 00:04:33,859 --> 00:04:37,480 you know, you view at 10 a.m. and then at 10:05 a.m. 45 00:04:38,000 --> 00:04:43,040 they make it to the front page and then you come back at 11. And so the line will be 46 00:04:43,709 --> 00:04:44,359 or wait, 47 00:04:46,290 --> 00:04:47,829 maybe I'm saying this backwards. 48 00:04:51,700 --> 00:04:53,160 So after your view, 49 00:04:55,850 --> 00:04:59,040 uh anyways, the the order is based on when they're posted, 50 00:04:59,049 --> 00:05:00,890 not when they made it to the front page. 51 00:05:00,899 --> 00:05:01,630 And so 52 00:05:02,609 --> 00:05:05,989 it is occasionally possible for things to be under the line 53 00:05:06,160 --> 00:05:08,019 and new, but it's pretty rare 54 00:05:09,140 --> 00:05:09,799 and 55 00:05:12,010 --> 00:05:16,320 the uh I go on about that horizontal line because here on stream, 56 00:05:16,329 --> 00:05:18,579 a couple of months ago, I added the 57 00:05:19,010 --> 00:05:21,260 horizontal last red line to 58 00:05:21,390 --> 00:05:22,779 slash newest 59 00:05:23,019 --> 00:05:25,059 and that was pretty straight based on 60 00:05:26,000 --> 00:05:29,970 this front page for hacker news. I like it a bunch. It um 61 00:05:33,579 --> 00:05:34,920 It also just 62 00:05:35,690 --> 00:05:39,019 keeps me from refreshing the front page of hacker news. 63 00:05:39,029 --> 00:05:41,829 I'm aware I nominally run a competitor, 64 00:05:42,109 --> 00:05:44,320 maybe it's a nominal competitor. 65 00:05:44,589 --> 00:05:46,760 There's not a lot of actual competition in social 66 00:05:46,769 --> 00:05:49,559 media because everybody could be active on multiple sites. 67 00:05:49,570 --> 00:05:49,970 But 68 00:05:50,119 --> 00:05:51,709 people kind of assume that there is 69 00:05:53,429 --> 00:05:54,040 uh 70 00:05:57,380 --> 00:06:02,540 also it was a, an actual competition. Lobsters would be losing very, very badly 71 00:06:02,850 --> 00:06:04,059 or something like 72 00:06:04,200 --> 00:06:07,040 1% or less on, on any metric. 73 00:06:07,049 --> 00:06:10,600 You care to count like traffic or number of stories or anything. 74 00:06:11,869 --> 00:06:12,450 Um, 75 00:06:13,510 --> 00:06:14,489 but I enjoy reading 76 00:06:14,959 --> 00:06:16,959 hacker news and occasionally post there 77 00:06:17,720 --> 00:06:18,660 and, uh, 78 00:06:20,109 --> 00:06:21,359 I like the uh 79 00:06:22,170 --> 00:06:26,700 the slash newest kind of approach because it keeps me from just rereading the 80 00:06:26,709 --> 00:06:30,269 homepage or digging back into stories to see more comments and more comments. 81 00:06:32,500 --> 00:06:34,239 It's also why I mostly read Lobsters by 82 00:06:34,459 --> 00:06:37,350 Newest and Active and the mod dashboard. 83 00:06:38,589 --> 00:06:39,559 So yeah, g so 84 00:06:39,700 --> 00:06:42,450 this other, this other link, um 85 00:06:44,429 --> 00:06:48,329 I pulled up hacker news at the start there because that was where I first saw it. 86 00:06:48,609 --> 00:06:50,670 And then I found this link that was a 87 00:06:50,679 --> 00:06:53,959 little bit better and the most valuable thing that 88 00:06:54,940 --> 00:06:56,670 man, I am not the, 89 00:06:56,799 --> 00:06:58,279 the king of journalism, 90 00:06:58,649 --> 00:07:02,079 I mean, not that I ever was, but I have actually worked in journalism. 91 00:07:02,679 --> 00:07:06,440 And so my pet peeve is if you are going to talk about a law 92 00:07:07,070 --> 00:07:08,790 or talk about a court case, 93 00:07:09,670 --> 00:07:12,420 you have to link to it for the love of Pete. 94 00:07:14,489 --> 00:07:15,170 So 95 00:07:15,559 --> 00:07:16,290 this one, 96 00:07:18,190 --> 00:07:19,010 the uh 97 00:07:19,579 --> 00:07:20,420 uh where did it go? 98 00:07:21,880 --> 00:07:25,679 That was kind of bookkeeping stuff. So I'm real, 99 00:07:25,940 --> 00:07:29,910 I'm real cautious of playing lawyer, especially cross country 100 00:07:30,700 --> 00:07:31,760 because 101 00:07:32,160 --> 00:07:34,720 so much stuff that just looks like regular words 102 00:07:34,730 --> 00:07:38,839 turns out to be legal jargon and has special meaning 103 00:07:39,910 --> 00:07:40,690 and 104 00:07:44,559 --> 00:07:46,209 so many laws 105 00:07:46,880 --> 00:07:50,660 and contracts assume some basic knowledge of 106 00:07:52,380 --> 00:07:54,220 some legal precept 107 00:07:54,510 --> 00:07:56,160 that I'm oblivious to. 108 00:07:56,459 --> 00:08:00,559 And so it's really easy to be like, well, why don't you ask or to miss 109 00:08:01,380 --> 00:08:02,709 that? Something is implied. 110 00:08:02,720 --> 00:08:04,399 I don't have a great example off the top of my 111 00:08:04,410 --> 00:08:07,070 head because I'm talking about things I don't know about. 112 00:08:07,079 --> 00:08:07,459 But 113 00:08:07,730 --> 00:08:09,369 I've seen it enough times that, 114 00:08:10,230 --> 00:08:12,559 you know, I've asked a lawyer, can we include this clause? 115 00:08:12,570 --> 00:08:15,130 And they're like, no, that's illegal under the so, 116 00:08:15,329 --> 00:08:16,890 so active 117 00:08:17,250 --> 00:08:19,079 whoever and I'm like, well, 118 00:08:19,369 --> 00:08:20,570 really and they're like, yes. 119 00:08:20,579 --> 00:08:23,730 And then also it was litigated in Smith versus Ferguson. And 120 00:08:24,880 --> 00:08:26,489 you know, you just don't know this stuff. 121 00:08:27,429 --> 00:08:28,170 But the, 122 00:08:30,250 --> 00:08:33,140 the gist of this one is pretty short 123 00:08:35,669 --> 00:08:36,467 and 124 00:08:37,590 --> 00:08:38,250 all 125 00:08:38,380 --> 00:08:39,630 commentators, 126 00:08:40,080 --> 00:08:47,450 whether they are legal or journalist or otherwise seem to all be saying wtf at this. 127 00:08:49,979 --> 00:08:53,609 So I'm not super freaked out because it, there's a like 128 00:08:54,039 --> 00:08:55,520 we are ordering our ourselves. 129 00:08:55,530 --> 00:08:58,989 What I believe is ourselves the government to come up with guidelines 130 00:08:59,090 --> 00:09:01,590 for reasonable steps to prevent 131 00:09:02,729 --> 00:09:07,070 when it says age restricted, it means 16 and under or I'm sorry, it means under 16 132 00:09:07,719 --> 00:09:11,289 from having accounts with age restricted social media platforms. 133 00:09:11,299 --> 00:09:14,989 That is a, a new term this bill makes up and says 134 00:09:16,830 --> 00:09:19,380 it means anything that this bill applies to 135 00:09:20,609 --> 00:09:23,109 and that's the, the meat of it 136 00:09:23,630 --> 00:09:27,109 is right here and this part is pretty small. 137 00:09:29,140 --> 00:09:29,859 So 138 00:09:30,380 --> 00:09:34,030 the term it invents it age restricted social media platform. 139 00:09:35,309 --> 00:09:38,080 And if the sole purpose or a significant purpose of the 140 00:09:38,090 --> 00:09:42,580 service is to enable social interaction between two or more users. 141 00:09:42,590 --> 00:09:44,599 That that's certainly true of lobsters. 142 00:09:45,250 --> 00:09:47,799 The service allows end users, which 143 00:09:51,260 --> 00:09:54,159 why are they called end users instead of just users? 144 00:09:54,890 --> 00:09:55,469 I don't know, 145 00:09:57,020 --> 00:10:01,460 allows users to link to or interact with some of the other end users. 146 00:10:02,989 --> 00:10:04,969 I mean, that's a like yes, 147 00:10:05,210 --> 00:10:07,049 social interaction 148 00:10:07,530 --> 00:10:10,729 is interacting. So this one's kind of redundant but yes, 149 00:10:11,710 --> 00:10:15,080 the service allows users to post material on the service. 150 00:10:15,619 --> 00:10:18,809 Well, I mean, yes, you can leave stories and comments and 151 00:10:19,559 --> 00:10:21,859 even direct messages on lobster. So yes, 152 00:10:22,770 --> 00:10:26,119 such conditions if any are set out in the legislative rules, 153 00:10:26,830 --> 00:10:31,169 I I don't know what this means. Maybe this is a, we're gonna punt it to a uh 154 00:10:34,090 --> 00:10:34,950 what's it called? 155 00:10:35,140 --> 00:10:35,840 Um 156 00:10:36,299 --> 00:10:38,349 the government office for 157 00:10:38,849 --> 00:10:41,159 making every forum into a nightclub, 158 00:10:41,929 --> 00:10:46,030 whatever that bit about, you know, set up guidelines was earlier. So I don't know, 159 00:10:46,830 --> 00:10:48,409 I I am admitting right up front. 160 00:10:48,419 --> 00:10:51,679 I don't know what part of this means and this could be a pretty big escape hatch. 161 00:10:52,840 --> 00:10:56,320 But this is so weird of we're just gonna assume that 162 00:10:56,619 --> 00:10:59,140 social media is bad for people under 16. 163 00:11:02,979 --> 00:11:03,909 And uh 164 00:11:05,299 --> 00:11:06,119 where is it? 165 00:11:06,559 --> 00:11:07,869 Oh, yeah, there's a bunch of, 166 00:11:14,330 --> 00:11:16,909 so it's in legal jargon here 167 00:11:17,280 --> 00:11:19,390 of 500 penalty units, 168 00:11:20,960 --> 00:11:23,260 which sounds very, very video gamey. 169 00:11:23,489 --> 00:11:23,969 But 170 00:11:25,500 --> 00:11:26,979 the important bit is 171 00:11:27,919 --> 00:11:34,320 that translates to a Australian $50 million fine, which is $32 million. 172 00:11:34,330 --> 00:11:35,179 United States 173 00:11:36,099 --> 00:11:40,919 if they don't take reasonable steps to stop people under 16 from having accounts. 174 00:11:42,969 --> 00:11:43,390 That's 175 00:11:44,729 --> 00:11:46,510 so the penalty unit thing, 176 00:11:48,159 --> 00:11:50,809 my guess would be like, it sounds a little silly, 177 00:11:50,820 --> 00:11:53,750 but my guess is it's a way of standardizing 178 00:11:55,039 --> 00:11:59,710 penalties across legislation. Like this is just an abstraction. This is 179 00:11:59,950 --> 00:11:59,960 a, 180 00:12:00,530 --> 00:12:02,429 the legal equivalent of a variable 181 00:12:03,020 --> 00:12:04,750 I've thought for a long time that 182 00:12:05,479 --> 00:12:07,530 the law looks a lot like code 183 00:12:08,299 --> 00:12:09,880 if code had, 184 00:12:11,979 --> 00:12:15,159 if you could argue with the compiler because it was just a guy 185 00:12:16,570 --> 00:12:21,390 and if you had basically no tooling and 400 years of legacy code to deal with. 186 00:12:25,349 --> 00:12:26,080 So 187 00:12:28,260 --> 00:12:29,229 this is like 188 00:12:30,530 --> 00:12:32,789 from civil penalties import 189 00:12:34,030 --> 00:12:34,750 unit. 190 00:12:39,190 --> 00:12:39,380 Yes, 191 00:12:46,719 --> 00:12:48,210 I suppose that'll um 192 00:12:48,500 --> 00:12:49,179 I don't know. 193 00:12:49,549 --> 00:12:50,020 I'm 194 00:12:51,109 --> 00:12:52,280 maybe there's a uh 195 00:12:53,799 --> 00:12:55,429 maybe they shouldn't have written the whole penalty 196 00:12:55,440 --> 00:12:57,039 unit thing and there's a Yagi thing, 197 00:12:57,049 --> 00:12:57,340 but 198 00:12:57,520 --> 00:13:00,539 maybe it'll be really, really helpful if they ever have to uh 199 00:13:00,830 --> 00:13:02,919 replace their currency entirely. 200 00:13:04,280 --> 00:13:07,440 They're gonna drop Australian dollars and switch to the yen or something, 201 00:13:09,039 --> 00:13:12,210 then all they have to do is update that one define 202 00:13:12,219 --> 00:13:15,219 and I'm sure none of their legacy code will break. 203 00:13:19,070 --> 00:13:20,289 So this one's not 204 00:13:20,659 --> 00:13:22,090 super urgent. 205 00:13:23,020 --> 00:13:24,020 There's um 206 00:13:24,890 --> 00:13:28,780 like a year before it takes effect and there's this stuff about 207 00:13:30,580 --> 00:13:31,440 where the 208 00:13:31,679 --> 00:13:34,000 link to the PDF go and put that in the notes. 209 00:13:37,340 --> 00:13:40,320 There's that stuff about we're gonna pass it off to the other 210 00:13:41,609 --> 00:13:46,090 government department for research and implementation and guidelines and stuff. 211 00:13:46,099 --> 00:13:47,549 So, we'll see what this looks like. 212 00:13:48,270 --> 00:13:52,169 But it's just so weird. I had to mention it. 213 00:13:53,270 --> 00:13:55,530 I'm aware that this is politics and I try and stay 214 00:13:55,539 --> 00:13:59,729 out of politics but this one very directly affects the site. 215 00:14:03,250 --> 00:14:04,510 The whole thing where, uh, 216 00:14:08,320 --> 00:14:09,619 some random government 217 00:14:10,780 --> 00:14:11,799 decides that 218 00:14:12,400 --> 00:14:17,239 it's going to make a law that applies to every website in every country is, 219 00:14:19,940 --> 00:14:21,559 it's not scaling well, 220 00:14:25,090 --> 00:14:28,179 and it's not that Australia. I mean, Australia is the size of 221 00:14:28,580 --> 00:14:30,700 population wise, is the size of 222 00:14:30,950 --> 00:14:32,460 a medium US state. 223 00:14:33,830 --> 00:14:35,210 So this isn't, you know, 224 00:14:37,049 --> 00:14:39,280 a small Pacific Atoll or something. 225 00:14:44,520 --> 00:14:46,340 Ah, the whole thing is very strange. 226 00:14:47,440 --> 00:14:50,969 I would like to not ban Australia. I would miss Australians. 227 00:14:55,289 --> 00:14:56,549 So, all that aside, 228 00:14:58,989 --> 00:14:59,010 I 229 00:14:59,140 --> 00:15:01,969 wanted to do, uh, some pull request review. 230 00:15:02,849 --> 00:15:05,150 Oh, you know, let's swap that around, 231 00:15:05,460 --> 00:15:06,830 do a little out of order. 232 00:15:07,419 --> 00:15:10,750 I can do the other, uh, small bit, which is, this is Thanksgiving 233 00:15:12,690 --> 00:15:14,849 the, uh US holiday with, 234 00:15:15,650 --> 00:15:19,030 I mean, every US holiday everywhere has a complicated history. 235 00:15:19,950 --> 00:15:22,489 So we're gonna skip the meaning of the holiday 236 00:15:22,880 --> 00:15:25,750 and talk about the practical meaning of the holiday which is, 237 00:15:25,909 --> 00:15:27,390 have nice food with folks. 238 00:15:27,669 --> 00:15:30,489 Try and remember to, uh, enjoy things in your life. 239 00:15:31,760 --> 00:15:32,580 Don't ask 240 00:15:33,820 --> 00:15:37,080 lots of historical questions because you probably won't like the answers. 241 00:15:38,859 --> 00:15:39,239 Hm. 242 00:15:42,239 --> 00:15:45,260 So hopping back here to code, 243 00:15:47,539 --> 00:15:51,479 there was no movement on this one since the last stream. That's OK. 244 00:15:52,919 --> 00:15:53,809 And then 245 00:15:53,960 --> 00:15:56,669 action mailbox, you might remember 246 00:15:57,099 --> 00:15:58,289 a week ago. 247 00:15:58,500 --> 00:16:02,739 I left a review for this one. So I wanted to check in on this because 248 00:16:03,900 --> 00:16:06,390 GM had a minute to 249 00:16:07,169 --> 00:16:08,830 look at my couple of comments. 250 00:16:09,530 --> 00:16:13,309 I have glanced, but I didn't actually read 251 00:16:13,969 --> 00:16:15,349 his replies. 252 00:16:15,919 --> 00:16:17,270 So there was the one, 253 00:16:20,109 --> 00:16:23,409 ok. It says outdated. So presumably he incorporated that change 254 00:16:26,340 --> 00:16:29,469 and then I would suppose he rebased because 255 00:16:30,429 --> 00:16:32,289 there is a bunch of stuff here. 256 00:16:32,630 --> 00:16:34,530 Yeah, force pushed. Sure. 257 00:16:36,010 --> 00:16:37,309 So let's give it a quick scan. 258 00:16:37,320 --> 00:16:40,669 The other thing, I don't see the comment but it must have been rebased out 259 00:16:41,080 --> 00:16:45,070 was there was a to do comment left in the middle of the mailbox code. 260 00:16:45,640 --> 00:16:47,789 And if that is gone or explained, 261 00:16:48,260 --> 00:16:49,510 I will go ahead and 262 00:16:54,250 --> 00:16:58,950 yeah. So the to do was right here and I guess there wasn't anything extra. 263 00:17:00,809 --> 00:17:04,479 So we figure out if it's a comment, we figure out if the parent is a comment, 264 00:17:07,708 --> 00:17:09,769 if stuff is broken, 265 00:17:10,939 --> 00:17:13,800 we'll just kinda drop it in the bounced queue. 266 00:17:16,338 --> 00:17:17,739 We have to look at the 267 00:17:18,368 --> 00:17:19,118 oh man, 268 00:17:20,578 --> 00:17:22,198 years ago I 269 00:17:24,698 --> 00:17:26,279 made a 270 00:17:27,650 --> 00:17:30,800 ruby project to process mailing list archives 271 00:17:30,810 --> 00:17:32,510 because occasionally I like to read them. 272 00:17:32,949 --> 00:17:34,770 And so it would take a directory, 273 00:17:35,109 --> 00:17:36,349 well, take 274 00:17:36,699 --> 00:17:38,689 email in a bunch of forms and then try 275 00:17:38,699 --> 00:17:41,469 and figure out the threading which was fairly complicated. 276 00:17:41,800 --> 00:17:44,109 Yes, I've seen JW Z's algorithm. 277 00:17:44,670 --> 00:17:47,069 It is imperfect but a great start. 278 00:17:48,189 --> 00:17:49,010 And then 279 00:17:51,150 --> 00:17:52,930 every email client in the world. 280 00:17:53,130 --> 00:17:54,829 It's funny. Email is one of those 281 00:17:56,300 --> 00:17:57,579 long live standards. 282 00:17:57,589 --> 00:18:00,140 Where as soon as you open up the hood on something where you're like, 283 00:18:00,150 --> 00:18:01,469 this should be reasonable 284 00:18:02,310 --> 00:18:05,959 if you click reply in an email, how do I know which email you're replying to? 285 00:18:05,969 --> 00:18:08,390 And then you just immediately fall into 286 00:18:09,290 --> 00:18:13,260 40 years of legacy compatibility. Actually, it's longer with email. 287 00:18:13,270 --> 00:18:14,459 It's gotta be about 50 now. 288 00:18:18,819 --> 00:18:20,319 Asynchronous slack. 289 00:18:21,550 --> 00:18:22,329 Oh man, 290 00:18:25,609 --> 00:18:28,229 Slack is a Slack is one of those apps. 291 00:18:28,239 --> 00:18:31,469 I find a different bug in every single time I use it. 292 00:18:32,650 --> 00:18:34,000 They dragged me up the wall. 293 00:18:34,520 --> 00:18:35,109 Um 294 00:18:37,520 --> 00:18:38,020 It uh 295 00:18:39,319 --> 00:18:42,859 they keep putting all of their energy into weird collaboration 296 00:18:42,869 --> 00:18:46,349 features and then the actual but it's a chat room. 297 00:18:46,359 --> 00:18:48,010 I should be able to chat with people, 298 00:18:48,930 --> 00:18:51,390 the chatting features just don't work 299 00:18:52,349 --> 00:18:53,439 and her buggy 300 00:18:55,010 --> 00:18:55,560 and like 301 00:18:56,689 --> 00:18:58,479 I can just watch the UI 302 00:18:58,819 --> 00:19:00,420 slide around the app 303 00:19:01,260 --> 00:19:04,199 taking 200 milliseconds at a time to 304 00:19:04,560 --> 00:19:08,560 like update three or four times as I change from one channel to the other. 305 00:19:09,420 --> 00:19:10,079 It's just, 306 00:19:11,339 --> 00:19:15,199 it is the weirdest case of management prioritization where 307 00:19:16,619 --> 00:19:21,589 I I expect that they just keep wanting headline features to close deals instead of 308 00:19:22,800 --> 00:19:25,089 making the core thing work 309 00:19:30,489 --> 00:19:32,849 provided you use it in the browser. No, I can, 310 00:19:34,060 --> 00:19:35,849 I've seen so many browser bugs. 311 00:19:39,180 --> 00:19:40,079 Their app is 312 00:19:42,180 --> 00:19:42,469 Janer. 313 00:19:43,510 --> 00:19:44,810 I agree the app is Janer 314 00:19:44,949 --> 00:19:46,410 than the browser version but 315 00:19:48,189 --> 00:19:48,560 uh 316 00:20:00,510 --> 00:20:02,380 that's a totally reasonable couple of 317 00:20:03,079 --> 00:20:04,369 regular expressions 318 00:20:07,689 --> 00:20:11,099 looking at these. I just reread that classic. Um 319 00:20:14,489 --> 00:20:17,390 Actually, that would be a good one. If you have the day off, 320 00:20:22,010 --> 00:20:23,510 here's a classic, 321 00:20:23,819 --> 00:20:28,280 classic five year old, but still just such an excellent blog post 322 00:20:28,449 --> 00:20:29,260 about 323 00:20:30,260 --> 00:20:31,530 structure and code. 324 00:20:32,030 --> 00:20:34,109 It's probably a little more complicated than 325 00:20:35,229 --> 00:20:37,569 you could read while listening to me burble along. 326 00:20:37,579 --> 00:20:39,910 So just mute me if you wanna read it right now. 327 00:20:40,250 --> 00:20:42,000 But otherwise save it for the, 328 00:20:42,750 --> 00:20:44,170 it's a great holiday read. 329 00:20:46,410 --> 00:20:47,420 I put it on the, 330 00:20:48,180 --> 00:20:49,719 let's bring the show notes back up. 331 00:20:58,300 --> 00:20:59,670 She just um 332 00:21:00,119 --> 00:21:04,119 really nails with some clear examples. Um 333 00:21:05,439 --> 00:21:06,369 a great 334 00:21:06,979 --> 00:21:10,500 idea for how to think about code. And it's one of those where 335 00:21:12,479 --> 00:21:14,869 as I've interacted with junior developers a 336 00:21:15,219 --> 00:21:16,430 bunch of times 337 00:21:16,770 --> 00:21:20,239 they say, oh well, you know, I'm writing X and in my head, 338 00:21:20,790 --> 00:21:23,680 I can see like eight ways to write it and then I can't 339 00:21:23,689 --> 00:21:27,339 explain why I like one over the other and working with junior developers, 340 00:21:27,349 --> 00:21:31,310 which I started doing more of maybe 15 years ago, forced me to 341 00:21:33,099 --> 00:21:34,640 introspect a lot more 342 00:21:35,089 --> 00:21:38,890 and think about what it is that I like about a design versus another design. 343 00:21:38,900 --> 00:21:40,359 And how do I explain that? 344 00:21:40,819 --> 00:21:41,430 And 345 00:21:42,869 --> 00:21:45,849 explaining that forced me to get more rigorous about it and 346 00:21:46,050 --> 00:21:48,430 clear about the values even to myself. 347 00:21:48,439 --> 00:21:48,630 So, 348 00:21:48,640 --> 00:21:52,329 working with junior developers really made me a better programmer and this led to 349 00:21:53,430 --> 00:21:56,260 mostly that led to the Rails con talk I gave in. 350 00:21:56,390 --> 00:21:57,640 What was that? 2015? 351 00:21:58,959 --> 00:21:59,619 Um 352 00:22:00,520 --> 00:22:01,650 And this uh 353 00:22:02,099 --> 00:22:03,979 Lexi's Post here is 354 00:22:06,319 --> 00:22:08,339 exactly in that same vein. Of 355 00:22:08,810 --> 00:22:12,000 let's think through explicitly 356 00:22:12,199 --> 00:22:14,939 what's going on with this intuitive design decision. 357 00:22:15,640 --> 00:22:18,260 So I, I just love that post. It's a favorite. 358 00:22:21,270 --> 00:22:22,329 All right. So this is, 359 00:22:22,770 --> 00:22:26,189 this is the wild regular expression feature that I suggested. So 360 00:22:27,349 --> 00:22:28,130 that's in, 361 00:22:29,420 --> 00:22:30,349 that's fine. 362 00:22:33,599 --> 00:22:36,699 I occasionally get tempted to uncommon action text. And 363 00:22:38,130 --> 00:22:39,420 if we weren't a uh 364 00:22:40,719 --> 00:22:43,310 website that is aimed at programmers who are, 365 00:22:43,540 --> 00:22:44,780 I feel like mark down is 366 00:22:45,609 --> 00:22:48,859 ubiquitous enough that pretty much every programmer is comfortable with it. 367 00:22:50,729 --> 00:22:52,380 But action text is a little tempting, 368 00:22:54,790 --> 00:22:55,540 right? So 369 00:22:56,109 --> 00:22:56,939 there's that 370 00:22:57,739 --> 00:22:58,709 there's this 371 00:23:05,270 --> 00:23:06,810 active storage attachments. 372 00:23:13,160 --> 00:23:13,849 Oh, 373 00:23:14,119 --> 00:23:16,199 there's a topic um 374 00:23:18,660 --> 00:23:20,060 didn't put it on the um 375 00:23:20,239 --> 00:23:21,839 the stream topic list. 376 00:23:22,530 --> 00:23:26,189 So I'll think about this. I'll put it down for after 377 00:23:26,660 --> 00:23:27,339 um 378 00:23:29,989 --> 00:23:31,910 might be worth talking about Rail's credentials. 379 00:23:33,250 --> 00:23:36,959 So I see a few viewers have picked up real quiet here on a holiday. But 380 00:23:37,219 --> 00:23:41,420 since this is lobster's office hours, if you have any questions about the 381 00:23:42,020 --> 00:23:46,829 site or the community or the code base, feel free to 382 00:23:47,439 --> 00:23:48,790 ask any kind of questions. 383 00:23:50,079 --> 00:23:51,579 And even if you wanna, 384 00:23:53,270 --> 00:23:55,849 I should probably put it in the channel description, right? Like 385 00:23:56,209 --> 00:23:57,369 the queries thing of 386 00:23:58,050 --> 00:24:00,469 if you want to run queries against a production database, 387 00:24:01,959 --> 00:24:02,900 we can even do that. 388 00:24:05,199 --> 00:24:08,189 All right, then these tests are all 389 00:24:08,680 --> 00:24:11,349 the same. This is great. This is ready to go. 390 00:24:11,579 --> 00:24:12,709 There's that get help thing. 391 00:24:46,050 --> 00:24:47,150 This is actually 392 00:24:50,839 --> 00:24:53,939 thinking about this. This is safe to merge down, right? 393 00:24:54,359 --> 00:24:56,380 Because until 394 00:24:57,119 --> 00:24:58,060 I 395 00:24:59,459 --> 00:25:02,910 go in the answerable repo and change over the 396 00:25:06,849 --> 00:25:08,469 G sorry, any chance you're here 397 00:25:08,890 --> 00:25:09,709 or I'm sorry. 398 00:25:09,849 --> 00:25:10,780 Uh GM 399 00:25:11,459 --> 00:25:12,959 so many G's, I actually 400 00:25:13,510 --> 00:25:15,930 have a hard time remembering the difference between G 401 00:25:16,050 --> 00:25:16,119 so 402 00:25:16,290 --> 00:25:18,109 GM and G Wozniak. 403 00:25:22,030 --> 00:25:22,569 All right. 404 00:25:23,079 --> 00:25:26,890 Yeah, I can just merge this down because until I wire up 405 00:25:27,619 --> 00:25:30,319 post fix to deliver emails into it, 406 00:25:30,640 --> 00:25:32,270 it's just gonna sit here and hang out 407 00:25:33,209 --> 00:25:34,030 and then 408 00:25:34,420 --> 00:25:35,979 also 409 00:25:36,300 --> 00:25:39,390 I can test it from the command line myself. 410 00:25:40,189 --> 00:25:41,050 Bye. 411 00:25:42,839 --> 00:25:44,709 Putting an email in the post fix. 412 00:25:45,430 --> 00:25:45,439 Uh 413 00:25:46,400 --> 00:25:48,130 No, go a step higher. 414 00:25:49,439 --> 00:25:51,579 Yeah. So I contested in Prague before 415 00:25:53,069 --> 00:25:55,349 and I don't think there's anything wrong with this poor quest. 416 00:25:55,359 --> 00:25:57,930 It's just before I change over, I would really like to 417 00:25:58,239 --> 00:26:02,369 see it work because there's always, there's always those prod plumbing issues 418 00:26:03,329 --> 00:26:04,270 that was the uh 419 00:26:05,060 --> 00:26:08,920 the work from a previous stream I deployed that I just remembered a minute ago was 420 00:26:09,930 --> 00:26:12,469 I occasionally joke about how some of these raise the 421 00:26:12,479 --> 00:26:14,520 hair on the back of my neck or feel like they're 422 00:26:14,630 --> 00:26:16,469 more likely to break in prod 423 00:26:17,229 --> 00:26:17,949 and 424 00:26:18,189 --> 00:26:19,739 had a funny experience where 425 00:26:20,050 --> 00:26:22,930 the one I thought was gonna break prod was totally fine. 426 00:26:23,219 --> 00:26:24,849 And then the other one did 427 00:26:25,050 --> 00:26:26,119 break prod a bit. 428 00:26:27,449 --> 00:26:28,140 That's ok. 429 00:26:51,699 --> 00:26:52,959 Um Not very 430 00:26:53,270 --> 00:26:54,119 good but 431 00:27:02,140 --> 00:27:02,920 great. 432 00:27:04,680 --> 00:27:05,760 This is so nice 433 00:27:06,209 --> 00:27:07,339 to have this um 434 00:27:09,939 --> 00:27:11,150 rails plumbing done. 435 00:27:12,079 --> 00:27:14,609 It's funny, a big theme of 436 00:27:20,040 --> 00:27:24,609 a big theme of these recent 437 00:27:29,119 --> 00:27:31,119 pull request has been 438 00:27:31,989 --> 00:27:34,579 leaning more and more into rails features 439 00:27:34,890 --> 00:27:37,800 because Rails has picked up features for 440 00:27:38,930 --> 00:27:41,270 things that we had to do custom 441 00:27:43,979 --> 00:27:44,680 and 442 00:27:49,979 --> 00:27:52,040 as much as I've been pushing hard for it, 443 00:27:52,050 --> 00:27:58,119 the one place I really am increasingly tempted to lean away from it is Flex. 444 00:28:02,170 --> 00:28:03,709 Flex is a 445 00:28:03,939 --> 00:28:09,229 and it's a beta. The 2.0 release candidate just came out a couple of days ago. 446 00:28:09,589 --> 00:28:11,550 I know I've mentioned this on stream before. 447 00:28:14,800 --> 00:28:15,380 It's, 448 00:28:18,930 --> 00:28:19,790 let's see. 449 00:28:20,760 --> 00:28:22,589 How did I put it in that other? 450 00:28:25,300 --> 00:28:27,780 So it is a, a templating library 451 00:28:28,500 --> 00:28:29,319 or 452 00:28:33,550 --> 00:28:36,560 Ruby that allows you to 453 00:28:39,599 --> 00:28:40,459 just sort of 454 00:28:41,500 --> 00:28:43,599 uh it would replace er B 455 00:28:43,819 --> 00:28:47,859 and er B is a big pile of strings and not 456 00:28:48,180 --> 00:28:49,119 in a great way. 457 00:28:50,109 --> 00:28:52,640 So I said it over on, on blue sky that 458 00:28:53,969 --> 00:28:56,510 there was this thread I really liked. Let's 459 00:28:56,670 --> 00:28:59,660 just, I'll grab this, I'll share this so folks can click around. 460 00:29:00,150 --> 00:29:04,430 Uh Joel Draper here is the primary author of Flax 461 00:29:05,209 --> 00:29:05,869 and 462 00:29:08,099 --> 00:29:11,400 I said it's just Ruby all the right ways where 463 00:29:11,699 --> 00:29:12,520 it has 464 00:29:13,119 --> 00:29:16,280 less mental overhead because there's less stuff happening. 465 00:29:16,290 --> 00:29:20,180 You're not like context switching between strings in multiple languages. 466 00:29:20,699 --> 00:29:24,599 It's composable because it's Ruby, it's reusable because it's Ruby 467 00:29:25,030 --> 00:29:27,719 the tooling. Like instead of 468 00:29:29,099 --> 00:29:31,130 we get no linting on our 469 00:29:31,459 --> 00:29:35,439 b, I've been hesitant to add it because it's really complicated and 470 00:29:36,599 --> 00:29:38,489 the value is maybe not there. 471 00:29:39,310 --> 00:29:40,160 And then 472 00:29:40,689 --> 00:29:45,010 uh Joel also had a talk about safety where because 473 00:29:46,660 --> 00:29:53,160 Flex really does not work by slapping strings together in the way er B does. 474 00:29:57,010 --> 00:29:59,920 Flex allows a lot 475 00:30:00,239 --> 00:30:02,869 better safety around 476 00:30:03,119 --> 00:30:04,310 cross site scripting. 477 00:30:06,949 --> 00:30:07,619 So 478 00:30:08,189 --> 00:30:09,930 let me jump in. Um 479 00:30:11,900 --> 00:30:12,479 come here, 480 00:30:13,760 --> 00:30:14,849 where is my 481 00:30:16,890 --> 00:30:18,319 always hate this floating 482 00:30:20,060 --> 00:30:22,010 headers and footers that cover the page. 483 00:30:22,959 --> 00:30:23,560 So 484 00:30:23,930 --> 00:30:27,500 Flex has no dependencies. It's 2100 lines of standard ruby 485 00:30:28,709 --> 00:30:31,150 EB is not 2150 lines 486 00:30:31,530 --> 00:30:32,449 and it is not 487 00:30:34,199 --> 00:30:36,010 small and straightforward. 488 00:30:36,020 --> 00:30:39,849 I've gone into the air B code base a couple of times and it's, it's not bad. 489 00:30:39,859 --> 00:30:41,079 I'm not trying to insult it 490 00:30:41,699 --> 00:30:43,689 but it is complicated. It is 491 00:30:44,520 --> 00:30:45,969 a little bit of a climb 492 00:30:46,150 --> 00:30:49,030 and I've read a little bit of the flex code and it's just, 493 00:30:50,510 --> 00:30:52,410 there's very, very little magic. 494 00:30:53,550 --> 00:30:54,300 And 495 00:30:54,569 --> 00:30:56,300 so this person 496 00:30:56,459 --> 00:30:58,959 came along and had a couple of questions around 497 00:31:02,989 --> 00:31:07,880 what things look like. So they wrote themselves a helper called Simple Table 498 00:31:09,209 --> 00:31:12,680 or maybe this is from some gem I've never heard of called Simple Table. 499 00:31:12,689 --> 00:31:13,550 It doesn't matter 500 00:31:14,329 --> 00:31:17,030 where they passed in some records and then 501 00:31:17,900 --> 00:31:19,359 I guess they have columns. 502 00:31:19,540 --> 00:31:23,359 This is the list of columns and then it's gonna iterate over the records and print, 503 00:31:24,020 --> 00:31:28,890 you know, for each record call, record dot employee or record dot unit price 504 00:31:29,229 --> 00:31:30,719 and then build up a table 505 00:31:31,150 --> 00:31:32,030 which, 506 00:31:32,500 --> 00:31:33,560 ok, like 507 00:31:34,119 --> 00:31:35,670 this is fine, 508 00:31:37,689 --> 00:31:38,619 but it's sort of 509 00:31:39,369 --> 00:31:44,290 like, is this really er B at this point? No, this is pretty much just straight ruby. 510 00:31:44,300 --> 00:31:47,579 The only er B feature that's getting used here is 511 00:31:49,849 --> 00:31:52,239 we're gonna call these functions and slap them together. 512 00:31:52,250 --> 00:31:54,979 You will be almost might not as well be used here, 513 00:31:54,989 --> 00:31:58,150 but you have to have this special syntax before and after. 514 00:32:03,609 --> 00:32:04,859 Uh yeah, it's 515 00:32:05,069 --> 00:32:05,079 a 516 00:32:06,890 --> 00:32:07,670 partial. 517 00:32:08,260 --> 00:32:08,949 So this is 518 00:32:09,709 --> 00:32:10,359 he says you 519 00:32:10,500 --> 00:32:12,250 be, but he means 520 00:32:12,969 --> 00:32:15,780 action view here because this whole thing with 521 00:32:16,459 --> 00:32:19,109 how render builds on this stuff is 522 00:32:23,229 --> 00:32:24,760 happening in action view, not 523 00:32:25,000 --> 00:32:25,410 B 524 00:32:26,280 --> 00:32:26,939 and so 525 00:32:27,739 --> 00:32:30,420 Joel kind of ported his thing to, 526 00:32:30,949 --> 00:32:31,280 all right. 527 00:32:31,290 --> 00:32:34,569 Well, like if you just made a simple table component in flex, 528 00:32:34,579 --> 00:32:35,949 this is what it would look like. 529 00:32:37,500 --> 00:32:39,280 And it's basically the same code 530 00:32:42,640 --> 00:32:45,670 where it's like, OK, well, we have all these records, we're gonna loop them, 531 00:32:45,680 --> 00:32:47,099 we're gonna call the block for each. 532 00:32:48,160 --> 00:32:50,459 You can imagine what this is gonna look like. He doesn't 533 00:32:50,900 --> 00:32:51,739 give the 534 00:32:52,589 --> 00:32:53,729 components. But 535 00:32:55,050 --> 00:32:59,750 once you've read the 101 for Flex, you can kind of write them in your head 536 00:33:02,670 --> 00:33:03,609 and he gave 537 00:33:05,010 --> 00:33:06,170 maybe a slightly 538 00:33:06,750 --> 00:33:08,390 better example where 539 00:33:11,650 --> 00:33:14,420 this is what the Flex would look like and this is what the 540 00:33:14,530 --> 00:33:15,560 B would look like. 541 00:33:15,910 --> 00:33:18,449 And I think that he likes it in the 542 00:33:18,709 --> 00:33:19,349 B, 543 00:33:20,359 --> 00:33:24,540 you're just directly writing the html. It's kind of nice to be direct. 544 00:33:25,030 --> 00:33:26,900 But then again, you have to know 545 00:33:27,150 --> 00:33:29,939 this syntax and you have to know this syntax 546 00:33:30,439 --> 00:33:31,810 and all of this is string 547 00:33:31,949 --> 00:33:34,880 munging. And so like right here, either 548 00:33:35,180 --> 00:33:36,369 action view 549 00:33:37,430 --> 00:33:38,000 and 550 00:33:40,369 --> 00:33:41,550 Brakeman 551 00:33:41,760 --> 00:33:43,369 protect you from 552 00:33:45,219 --> 00:33:46,560 CS S injection 553 00:33:48,229 --> 00:33:49,300 or they don't 554 00:33:50,079 --> 00:33:52,550 and it's not at all visible and they have 555 00:33:52,560 --> 00:33:55,140 to know the context and you're kind of guessing that 556 00:33:56,010 --> 00:33:58,989 cause this percent equals, you could use it here 557 00:33:59,849 --> 00:34:00,300 in 558 00:34:00,540 --> 00:34:03,810 html text or you could use it here in like, you know, 559 00:34:03,819 --> 00:34:06,280 tr class equals column dot whatever. 560 00:34:09,040 --> 00:34:09,580 And so 561 00:34:10,629 --> 00:34:12,668 Joel did this really clever 562 00:34:13,688 --> 00:34:17,309 comparison where on the left here is the flex version of, 563 00:34:17,688 --> 00:34:19,618 well, if you kinda uncross your eyes, 564 00:34:19,628 --> 00:34:23,018 what actual feature is happening on these lines and you can see that 565 00:34:23,830 --> 00:34:25,570 these method calls 566 00:34:26,139 --> 00:34:27,770 and the IVAR look up 567 00:34:28,399 --> 00:34:29,280 and the block, 568 00:34:29,989 --> 00:34:31,050 these match 569 00:34:31,610 --> 00:34:32,610 that list of 570 00:34:33,270 --> 00:34:35,580 T head T RT D at 571 00:34:36,469 --> 00:34:37,250 column 572 00:34:38,458 --> 00:34:39,989 dot each with a block, 573 00:34:40,850 --> 00:34:41,350 right? 574 00:34:41,478 --> 00:34:43,750 You can see the, the shape of it matches 575 00:34:45,418 --> 00:34:48,197 and he says, well, there's one language, it's Ruby, 576 00:34:48,358 --> 00:34:50,158 you don't change to another language. 577 00:34:50,768 --> 00:34:51,829 It's a little bit of 578 00:34:51,958 --> 00:34:56,079 fib, you gotta know that you're output html, but that's, that's OK. That's fine. 579 00:34:57,419 --> 00:35:00,600 I have our look up, you do one of those, you have some method calls 580 00:35:01,300 --> 00:35:06,159 so you're not using a lot of language features. This is a smaller vocabulary. 581 00:35:07,010 --> 00:35:11,790 And then on the right here's the er B version that Gregory gave where 582 00:35:12,310 --> 00:35:14,290 there's the raw string, the raw string. 583 00:35:14,919 --> 00:35:15,550 Then 584 00:35:16,360 --> 00:35:19,280 after this syntax, you're changing into 585 00:35:19,810 --> 00:35:24,739 this er B context and you have to know that er B can handle 586 00:35:27,000 --> 00:35:28,580 what's effectively 587 00:35:29,800 --> 00:35:32,419 a string of Ruby that's gonna get 588 00:35:32,780 --> 00:35:33,100 veiled. 589 00:35:33,870 --> 00:35:34,570 And then 590 00:35:34,850 --> 00:35:36,370 this end down here, 591 00:35:38,530 --> 00:35:41,189 you know, if you've never looked at the er B source, 592 00:35:41,199 --> 00:35:45,070 it's worth looking at because something very clever is happening 593 00:35:45,620 --> 00:35:47,139 to make it possible 594 00:35:47,320 --> 00:35:47,850 to 595 00:35:48,659 --> 00:35:49,070 like 596 00:35:49,290 --> 00:35:50,159 email code 597 00:35:50,879 --> 00:35:53,969 with a raw string in the middle and run this all together. 598 00:35:55,899 --> 00:35:56,719 If you haven't, 599 00:35:57,379 --> 00:35:59,439 I it's, it's really worth a read. 600 00:35:59,449 --> 00:36:01,149 I don't wanna deep dive it now cause I'm 601 00:36:01,159 --> 00:36:03,199 trying to keep this stream short cause I've got 602 00:36:03,399 --> 00:36:03,840 like 603 00:36:04,850 --> 00:36:07,629 put some buns in the oven and that kind of stuff, but 604 00:36:10,370 --> 00:36:13,989 just an enormous amount goes on under the hood to make that work. 605 00:36:14,000 --> 00:36:18,340 And it's weird to look at where you're switching languages 606 00:36:19,100 --> 00:36:21,120 and I think Joel correctly 607 00:36:21,659 --> 00:36:23,000 highlights it here. 608 00:36:24,620 --> 00:36:28,459 Uh Well, you're working in two languages and I think you were before but 609 00:36:28,659 --> 00:36:30,639 you change in and out of the languages a bunch 610 00:36:30,649 --> 00:36:33,179 of times you use a whole bunch of different elements, 611 00:36:33,189 --> 00:36:35,179 you got different syntax, you've got 612 00:36:35,649 --> 00:36:39,879 the same amount of eye bars and lookups, but you've got all this extra stuff on top. 613 00:36:42,129 --> 00:36:43,429 So as much as I'm 614 00:36:45,850 --> 00:36:46,209 Yas 615 00:36:46,399 --> 00:36:47,739 finding the uh 616 00:36:50,840 --> 00:36:54,320 app more and more to be closer and closer to just 617 00:36:54,739 --> 00:36:56,060 stock rails, 618 00:36:56,810 --> 00:36:58,780 I keep getting tempted by flex. 619 00:37:08,750 --> 00:37:11,979 One of the things that's really impressive about flex is 620 00:37:12,739 --> 00:37:14,350 and I've, I've played with this a bit. 621 00:37:14,780 --> 00:37:16,270 It's really easy 622 00:37:16,850 --> 00:37:17,320 to, 623 00:37:17,679 --> 00:37:19,800 you don't have to do a big bang migration. 624 00:37:20,100 --> 00:37:24,870 You can do a partial migration like one component at a time. 625 00:37:26,899 --> 00:37:30,399 So that is the, the Siren song that keeps singing to me 626 00:37:31,199 --> 00:37:32,820 and pulling me away from 627 00:37:33,729 --> 00:37:38,909 rails aside from the general annoyance with rails. And that one guy who 628 00:37:41,639 --> 00:37:42,870 keeps wanting attention, 629 00:37:44,739 --> 00:37:46,399 not gonna rant about him on stream. 630 00:37:48,959 --> 00:37:49,770 So, 631 00:37:51,459 --> 00:37:55,320 got two pull requests from a first time contributor, 632 00:37:56,229 --> 00:37:57,479 Ashwin 47. 633 00:38:00,330 --> 00:38:01,679 Oh, what a super for. 634 00:38:02,850 --> 00:38:04,989 Turn your Discord into an open form. 635 00:38:05,570 --> 00:38:06,389 Oh, interesting. 636 00:38:11,669 --> 00:38:13,280 And I guess it's something that 637 00:38:14,000 --> 00:38:15,800 he is actively working on. 638 00:38:18,030 --> 00:38:18,899 That's pretty clever. 639 00:38:21,419 --> 00:38:24,360 I suppose he likes forums if he's over here contributing. 640 00:38:26,689 --> 00:38:28,469 So I picked today as pull requests 641 00:38:30,570 --> 00:38:31,260 and 642 00:38:34,820 --> 00:38:37,159 this first one is, 643 00:38:39,800 --> 00:38:40,610 it's searching 644 00:38:42,229 --> 00:38:43,110 where 645 00:38:44,419 --> 00:38:46,169 it's kind of a parsing hassle. 646 00:38:47,300 --> 00:38:48,379 But I've been trying to, 647 00:38:48,389 --> 00:38:53,639 to throw in different shapes of feature requests and bug fixes to the 648 00:38:53,949 --> 00:38:55,080 issue tracker 649 00:38:58,209 --> 00:38:59,310 cause a lot of stuff, 650 00:39:01,310 --> 00:39:05,840 a lot of stuff just hangs out here and people don't pick it up. But the things that are 651 00:39:06,780 --> 00:39:10,030 kind of plumbing shaped or have interesting 652 00:39:10,219 --> 00:39:13,320 CS puzzles seem people seem to pick up and like them. 653 00:39:13,840 --> 00:39:17,459 So I'm trying to post more of those. So this one was, 654 00:39:17,739 --> 00:39:19,989 it would be neat if when you search for stuff, 655 00:39:20,219 --> 00:39:22,520 it had mark tags around it to highlight it. 656 00:39:23,729 --> 00:39:24,310 But 657 00:39:26,060 --> 00:39:27,949 there is one big hassle 658 00:39:28,199 --> 00:39:29,909 and I wrote about it here. A corner case 659 00:39:31,110 --> 00:39:32,760 if you search for 660 00:39:33,639 --> 00:39:35,979 not a single term but a quoted term 661 00:39:38,600 --> 00:39:41,620 that ignores punctuation that are in the original markdown, 662 00:39:41,750 --> 00:39:42,580 let alone 663 00:39:43,689 --> 00:39:45,189 output in the html. 664 00:39:48,449 --> 00:39:51,010 So if you search for a phrase that 665 00:39:51,449 --> 00:39:53,149 is split across 666 00:39:55,100 --> 00:39:56,040 elements, 667 00:39:56,610 --> 00:39:59,080 it would be really nice to still highlight that. 668 00:39:59,540 --> 00:40:01,340 And so the search engine can't 669 00:40:01,479 --> 00:40:02,580 just be 670 00:40:04,629 --> 00:40:06,530 find the text and the page and 671 00:40:06,830 --> 00:40:07,570 highlight it. 672 00:40:14,989 --> 00:40:15,899 However, 673 00:40:16,760 --> 00:40:18,250 Ashwin left a comment that 674 00:40:19,020 --> 00:40:20,600 they missed that corner case. 675 00:40:21,129 --> 00:40:21,860 And so they, 676 00:40:22,439 --> 00:40:24,320 he did do the 677 00:40:24,770 --> 00:40:26,320 kind of naive version of it. 678 00:40:34,080 --> 00:40:36,159 So, you know, painting the bike shed 679 00:40:38,090 --> 00:40:41,909 a less nuclear color would be nice. That's fine. That's not a big deal. 680 00:40:43,580 --> 00:40:45,969 I like to be soft in the corners on it though. 681 00:40:50,760 --> 00:40:54,000 So basically he takes the search terms 682 00:40:54,639 --> 00:40:56,870 and he makes a regular expression 683 00:40:57,219 --> 00:40:58,120 out of them 684 00:41:08,439 --> 00:41:09,199 and then 685 00:41:10,050 --> 00:41:12,550 join stuff together 686 00:41:12,979 --> 00:41:15,070 so that he gets one regular expression, 687 00:41:15,959 --> 00:41:20,689 which all right, this is, this is pretty reasonable. I'm 688 00:41:22,699 --> 00:41:22,709 a 689 00:41:22,860 --> 00:41:27,189 little suspicious of this and would wanna see a test or two that 690 00:41:27,939 --> 00:41:29,600 punctuation would work. 691 00:41:32,129 --> 00:41:34,179 It really encodes a 692 00:41:35,330 --> 00:41:36,919 assumption about terms, 693 00:41:38,989 --> 00:41:43,199 I suppose, Redex dot escape handles it. But then there was something else that 694 00:41:43,939 --> 00:41:44,590 didn't. 695 00:41:45,969 --> 00:41:49,419 So we added this highlight search terms helper. 696 00:41:55,530 --> 00:41:55,939 Mm 697 00:41:58,879 --> 00:42:01,459 And then there's a bunch of stuff to thread it through 698 00:42:02,790 --> 00:42:03,800 the uh 699 00:42:04,209 --> 00:42:05,820 the various functions 700 00:42:06,459 --> 00:42:08,010 or the various templates. 701 00:42:13,169 --> 00:42:16,820 And it really, it caught my eye that he calls strip operators. Here. 702 00:42:17,719 --> 00:42:17,739 I 703 00:42:17,840 --> 00:42:19,610 gotta go look at the search model. 704 00:42:21,310 --> 00:42:21,929 So 705 00:42:25,979 --> 00:42:26,000 I 706 00:42:26,110 --> 00:42:27,229 started the darn 707 00:42:28,500 --> 00:42:30,959 them from the wrong buffer. Come here. 708 00:42:32,020 --> 00:42:35,610 I'm not gonna chase that around all stream. That's my uh my blog directory 709 00:42:35,770 --> 00:42:37,560 mean to start from the 710 00:42:39,600 --> 00:42:40,810 lobster source code. 711 00:42:50,590 --> 00:42:52,290 So we have a 712 00:42:52,770 --> 00:42:57,689 search parser that kind of parses an A ST out of the search to find operators like 713 00:42:58,050 --> 00:42:59,129 searching in the title 714 00:43:02,979 --> 00:43:06,439 and it splits things out into like terms and quoted 715 00:43:06,659 --> 00:43:09,479 which are the the parts of the search for, how to search them. 716 00:43:10,389 --> 00:43:10,929 And then 717 00:43:11,080 --> 00:43:14,969 strip operators is my least favorite part of the code. 718 00:43:14,979 --> 00:43:17,050 So I was really surprised to see it mentioned 719 00:43:17,830 --> 00:43:18,810 because 720 00:43:25,610 --> 00:43:26,709 this is 721 00:43:28,239 --> 00:43:30,889 not the same abstraction 722 00:43:31,139 --> 00:43:31,750 as 723 00:43:34,360 --> 00:43:35,449 I mean, this is the 724 00:43:35,770 --> 00:43:36,659 Oh Hey Hegy. 725 00:43:37,510 --> 00:43:42,689 So I was talking about one of the things I liked about flex is it can do context aware 726 00:43:43,469 --> 00:43:44,260 escaping. 727 00:43:45,310 --> 00:43:48,169 And this is sort of the opposite of that where 728 00:43:49,370 --> 00:43:49,860 it's 729 00:43:50,649 --> 00:43:53,070 just kind of slapping strings around. 730 00:43:54,290 --> 00:43:55,219 And so 731 00:43:56,419 --> 00:44:00,979 I'm just trying to match the databases ideas of what characters have to 732 00:44:00,989 --> 00:44:04,429 be escaped when you are searching in a string in boolean mode. 733 00:44:04,800 --> 00:44:07,110 And then it's nested inside of quotes. 734 00:44:08,879 --> 00:44:10,899 It is so hard to trust this code. 735 00:44:11,409 --> 00:44:12,250 I've put it off 736 00:44:13,080 --> 00:44:16,419 tests around it that I'm comfortable with it in production, 737 00:44:17,979 --> 00:44:21,379 but that it's actually an unusually large amount of tests 738 00:44:21,709 --> 00:44:23,419 for our code base. 739 00:44:23,709 --> 00:44:24,320 And 740 00:44:27,419 --> 00:44:28,030 I just, 741 00:44:30,070 --> 00:44:33,850 I hate that sequel is a string instead of a structured thing. 742 00:44:37,399 --> 00:44:40,060 If somebody would like to port link 743 00:44:40,370 --> 00:44:42,260 to Ruby, that would be very nice. 744 00:44:42,649 --> 00:44:45,459 That's almost Ruby object mapper. 745 00:44:46,070 --> 00:44:46,459 But 746 00:44:47,709 --> 00:44:48,090 yeah, 747 00:44:52,679 --> 00:44:56,860 so I was really surprised that he calls that strip operators. 748 00:44:57,709 --> 00:44:59,729 I think he's trying to get 749 00:45:00,909 --> 00:45:01,459 to, 750 00:45:02,000 --> 00:45:05,520 to switch between. What is the user searching 751 00:45:06,419 --> 00:45:06,959 input. 752 00:45:07,939 --> 00:45:08,479 Yeah, 753 00:45:08,969 --> 00:45:09,290 I mean, 754 00:45:09,300 --> 00:45:13,689 my favorite part of C# is how they keep stealing functional programming ideas from 755 00:45:16,010 --> 00:45:16,840 F sharp. 756 00:45:18,820 --> 00:45:20,709 All right. Not stealing, obviously 757 00:45:20,919 --> 00:45:22,899 boarding, migrating, translating 758 00:45:24,669 --> 00:45:27,370 and link is one of those. And it is such a good idea. 759 00:45:36,649 --> 00:45:39,550 I suppose this is the one place in the code. 760 00:45:44,090 --> 00:45:45,830 So it tracks 761 00:45:45,939 --> 00:45:49,360 the input that's cue the query variable, 762 00:45:50,909 --> 00:45:54,929 but it doesn't really have an internal abstraction layer of 763 00:45:57,669 --> 00:46:02,189 how that translates into a query. This class kind of is that abstraction layer. 764 00:46:03,419 --> 00:46:06,560 So I guess that makes sense that he called strip operators 765 00:46:07,929 --> 00:46:11,219 to know what's the thing that's gonna actually end up in the query? 766 00:46:17,840 --> 00:46:18,260 Just 767 00:46:19,560 --> 00:46:22,449 there's something about it that rubs me the wrong way seeing. 768 00:46:31,050 --> 00:46:32,649 So let's think about what it's gonna do. 769 00:46:33,169 --> 00:46:35,540 So if somebody searches for 770 00:46:49,250 --> 00:46:50,659 it translates 771 00:46:51,520 --> 00:46:53,340 or I guess it escapes, 772 00:46:53,520 --> 00:46:54,340 what do we call it 773 00:46:55,469 --> 00:46:56,409 formats? 774 00:46:58,669 --> 00:47:00,590 FDF 775 00:47:01,320 --> 00:47:02,860 kind of build up a table here. 776 00:47:03,989 --> 00:47:07,370 Like if you have an input with nothing interesting, it's just translated. 777 00:47:07,699 --> 00:47:08,850 You have, can't 778 00:47:09,530 --> 00:47:11,709 let me get rid of these quotes or this is gonna become 779 00:47:13,139 --> 00:47:13,840 confusing 780 00:47:17,139 --> 00:47:18,629 that still becomes can't. 781 00:47:19,850 --> 00:47:21,590 But if you search for 782 00:47:23,969 --> 00:47:25,439 like food 783 00:47:26,280 --> 00:47:27,159 bar 784 00:47:27,770 --> 00:47:28,750 that turns into 785 00:47:29,000 --> 00:47:29,189 a boo 786 00:47:29,439 --> 00:47:30,219 bar, 787 00:47:33,639 --> 00:47:36,179 we do not pass that punctuation through. 788 00:47:36,370 --> 00:47:37,659 And then obviously the 789 00:47:38,199 --> 00:47:41,939 the scary one is something more like this where 790 00:47:42,709 --> 00:47:47,489 if someone passed a single quote or a double quote through, we really, 791 00:47:48,159 --> 00:47:52,139 we don't even wanna try matching the perfect level of escaping, 792 00:47:52,300 --> 00:47:55,060 especially because it's just gonna get thrown away. 793 00:48:02,679 --> 00:48:05,139 And so when we're choosing what to highlight, 794 00:48:14,360 --> 00:48:16,969 when we're choosing what to highlight on the page. 795 00:48:19,120 --> 00:48:19,739 If 796 00:48:21,139 --> 00:48:21,709 come here, 797 00:48:23,620 --> 00:48:25,010 let's go look at the uh 798 00:48:27,820 --> 00:48:30,479 text here again. Now, I would like to see my example. 799 00:48:39,870 --> 00:48:43,290 So someone searched for types, comma whatever 800 00:48:49,429 --> 00:48:51,620 or they just searched for types comma 801 00:48:53,110 --> 00:48:56,689 the actual search executed would only look for the word types. 802 00:48:59,540 --> 00:49:02,699 And I think it's better to highlight 803 00:49:02,850 --> 00:49:04,479 and not include the comma 804 00:49:07,610 --> 00:49:10,070 cause we're not actually using it anyways. 805 00:49:12,530 --> 00:49:14,479 So here in my demo 806 00:49:15,399 --> 00:49:20,050 and I generated this demo by just editing the html in the inspector. 807 00:49:22,810 --> 00:49:24,939 You know, there's another possibility there 808 00:49:25,120 --> 00:49:25,830 of 809 00:49:28,689 --> 00:49:32,780 what is making some of these recent issues more attractive than others. 810 00:49:34,209 --> 00:49:38,550 And I guess one of the issues or one of the differences here is not just 811 00:49:39,080 --> 00:49:41,689 you're playing with the parser, it's kind of a CS problem, 812 00:49:42,310 --> 00:49:43,229 but also 813 00:49:44,129 --> 00:49:48,300 there's mock ups. It is very clear what the output is going to be. 814 00:49:50,719 --> 00:49:55,780 So I made this by hand and I highlighted the period just because it was there. 815 00:49:55,790 --> 00:49:57,060 And I was thinking of, 816 00:49:57,510 --> 00:49:57,719 well, 817 00:49:57,729 --> 00:49:59,979 if you found the start of the search term and then you found the 818 00:49:59,989 --> 00:50:02,939 end of the search term and you highlighted everything between you'd be fine. 819 00:50:03,679 --> 00:50:07,530 But if they had highlighted just correctly and sometimes 820 00:50:09,500 --> 00:50:12,780 it's a little funny that that period would be hanging out here. 821 00:50:12,790 --> 00:50:14,719 And if we imagine that um 822 00:50:15,560 --> 00:50:19,750 they were quoting a fellow Gen Xer who ended with a ellipse, 823 00:50:19,870 --> 00:50:21,580 you know, so if this ended dot dot dot 824 00:50:22,389 --> 00:50:25,090 It would be a little more obvious that the dot is 825 00:50:26,459 --> 00:50:28,439 not getting highlighted but 826 00:50:28,600 --> 00:50:30,679 that would be fine. 827 00:50:33,209 --> 00:50:35,840 It doesn't feel like it's incorrect or misleading. 828 00:50:35,850 --> 00:50:38,840 We're, we're kind of indicating what actual search happened. 829 00:50:40,189 --> 00:50:44,320 I think I'm talking myself into the use of strip operators being ok. 830 00:50:44,989 --> 00:50:46,209 And the result of 831 00:50:47,060 --> 00:50:49,080 finding these terms without. 832 00:50:51,219 --> 00:50:51,590 Yeah. 833 00:50:58,310 --> 00:50:58,989 Yeah. OK. 834 00:51:03,250 --> 00:51:04,050 All right. So if 835 00:51:06,620 --> 00:51:09,370 strip operators is fine, 836 00:51:10,629 --> 00:51:12,600 a little weird but fine, 837 00:51:24,600 --> 00:51:25,419 then I see. 838 00:51:27,570 --> 00:51:28,620 Why would the 839 00:51:30,010 --> 00:51:31,330 rent the seas get 840 00:51:33,129 --> 00:51:34,030 highlighted 841 00:51:38,919 --> 00:51:42,260 cause they get escaped but these get thrown away. 842 00:51:44,770 --> 00:51:46,379 Yeah, I don't understand that test 843 00:51:47,479 --> 00:51:48,719 and I have to come back to that. 844 00:51:56,149 --> 00:51:57,850 Yeah, I think my only gripe is 845 00:52:03,280 --> 00:52:05,360 guest strip operators is public. 846 00:52:08,219 --> 00:52:09,719 It feels weird. 847 00:52:10,590 --> 00:52:10,969 Yeah. 848 00:52:14,879 --> 00:52:15,739 All right. So 849 00:52:18,370 --> 00:52:19,550 I'll take the 850 00:52:20,320 --> 00:52:21,649 search model 851 00:52:21,889 --> 00:52:22,530 said it 852 00:52:23,280 --> 00:52:24,379 exposes, 853 00:52:32,530 --> 00:52:35,010 I guess the thing that confuses me here is 854 00:52:36,139 --> 00:52:36,959 it's using 855 00:52:37,469 --> 00:52:40,360 poems very directly instead of 856 00:52:41,629 --> 00:52:42,770 instead of using 857 00:52:45,370 --> 00:52:46,159 the 858 00:52:52,300 --> 00:52:53,570 search dot QE 859 00:52:54,320 --> 00:52:56,600 and it is readable. So yeah, 860 00:52:57,649 --> 00:52:59,399 let's just go ahead and make that a suggestion. 861 00:53:00,780 --> 00:53:02,169 I guess the part that really 862 00:53:02,629 --> 00:53:05,080 there's like so many layers of abstraction happening 863 00:53:14,070 --> 00:53:15,659 and then does it make sense 864 00:53:16,199 --> 00:53:16,929 or? 865 00:53:25,340 --> 00:53:27,409 So strip operators works on a single 866 00:53:29,870 --> 00:53:33,800 works on a single string. You can't actually pass in an array like 867 00:53:34,080 --> 00:53:34,889 he does. 868 00:53:44,689 --> 00:53:45,110 Yeah. 869 00:54:08,270 --> 00:54:09,489 Yeah. I guess the thing that 870 00:54:10,000 --> 00:54:13,889 most bugs me is he's kind of recreating some of the search work. 871 00:54:16,479 --> 00:54:18,939 So here we build up this terms array 872 00:54:19,419 --> 00:54:21,189 when we're doing a comment search 873 00:54:21,610 --> 00:54:23,689 because there are many kinds of operator. 874 00:54:24,820 --> 00:54:27,360 And I think what we actually want is to say, 875 00:54:32,419 --> 00:54:35,050 let's loop the parse tree 876 00:54:37,649 --> 00:54:38,419 and 877 00:54:40,540 --> 00:54:42,760 for the term or catchalls 878 00:54:43,330 --> 00:54:44,800 we'll call strip on it. 879 00:54:46,270 --> 00:54:47,139 And then, yeah. 880 00:54:48,959 --> 00:54:49,560 So 881 00:55:03,739 --> 00:55:06,320 what was the name of that function? I can see it off screen. 882 00:55:41,320 --> 00:55:41,500 Hm. 883 00:55:47,020 --> 00:55:47,050 Ok. 884 00:56:03,389 --> 00:56:03,459 I 885 00:56:04,199 --> 00:56:04,489 hope 886 00:56:06,719 --> 00:56:08,139 actually this should just be on the, 887 00:56:08,959 --> 00:56:09,379 yeah, 888 00:57:34,469 --> 00:57:35,580 operators. 889 00:57:36,510 --> 00:57:37,020 All right. 890 00:58:25,139 --> 00:58:25,919 Maybe. 891 00:58:36,699 --> 00:58:37,439 Yeah, 892 00:58:37,590 --> 00:58:39,229 I'll let him come up with his own name. 893 00:58:54,790 --> 00:58:55,459 Here we are. 894 00:58:56,290 --> 00:58:58,729 Hopefully that kind of nudges him towards a uh 895 00:58:59,070 --> 00:59:00,389 functional style. 896 00:59:02,750 --> 00:59:06,850 I don't think I need to be explicit because I can see a few ways to do this 897 00:59:07,399 --> 00:59:10,290 and if it's got a good obstruction on it, it is. OK. 898 01:00:08,969 --> 01:00:09,629 Here we go. 899 01:00:11,090 --> 01:00:12,139 I'm trying to, 900 01:00:12,699 --> 01:00:18,110 I am hedging a little to avoid saying you have to deal with quoted for this pr versus 901 01:00:18,820 --> 01:00:22,760 I will take it without, I'm not totally ready to commit because I can't 902 01:00:23,399 --> 01:00:26,439 imagine yet what the whole thing will look like. 903 01:00:31,600 --> 01:00:34,419 This is. This is a pretty decent start. 904 01:01:15,389 --> 01:01:15,879 I know 905 01:01:17,189 --> 01:01:18,360 strip note that 906 01:01:19,110 --> 01:01:20,090 punctuation. 907 01:01:29,219 --> 01:01:29,590 So 908 01:03:03,919 --> 01:03:05,229 yeah, I guess part of this is 909 01:03:05,879 --> 01:03:06,959 let me say that 910 01:03:36,320 --> 01:03:38,340 the understanding 911 01:03:40,550 --> 01:03:42,830 uh search syntax 912 01:03:43,060 --> 01:03:47,060 and how to format term stays within the search. 913 01:03:51,280 --> 01:03:54,379 I can hear my spouse starting to knock around in the kitchen. So we're 914 01:03:55,229 --> 01:03:59,149 immediately starting to wind up towards the end of this stream. 915 01:03:59,159 --> 01:04:03,510 Even if it's only been an hour, I'm not gonna hang up in the next five minutes, 916 01:04:03,520 --> 01:04:05,649 but in the next 30. 917 01:04:06,699 --> 01:04:07,719 So let me. 918 01:04:09,699 --> 01:04:10,199 Yeah. 919 01:04:12,479 --> 01:04:13,120 OK. 920 01:04:19,290 --> 01:04:20,100 I think 921 01:04:20,800 --> 01:04:24,550 if I look at the spec for the search model, 922 01:04:32,719 --> 01:04:34,500 I think the other thing would be, 923 01:04:36,500 --> 01:04:36,989 yeah, 924 01:04:38,590 --> 01:04:41,129 this uh doesn't permit sequel injection. 925 01:04:47,379 --> 01:04:51,040 This was such an unfun test to write because 926 01:04:51,590 --> 01:04:58,459 I am searching for inserting quotes into a string that is quoted multiple times and 927 01:04:58,469 --> 01:05:03,239 then in the spec I have to write quotes around my search and so it's just 928 01:05:04,129 --> 01:05:06,270 how many layers of escaping are there? 929 01:05:08,969 --> 01:05:08,989 Yeah. 930 01:05:16,649 --> 01:05:17,310 This one 931 01:05:18,129 --> 01:05:19,090 as a fun 932 01:05:19,439 --> 01:05:20,040 uh 933 01:05:20,310 --> 01:05:25,149 Actually all these 30 I even left a comment. These are real things. 934 01:05:25,159 --> 01:05:28,770 People run vulnerability scanners against lobsters all the time. 935 01:05:29,620 --> 01:05:30,840 And the way the 936 01:05:30,989 --> 01:05:34,520 vulnerability scanner works is it sees a box with 937 01:05:34,530 --> 01:05:37,229 the word search nearby and it starts stuffing random 938 01:05:38,399 --> 01:05:39,100 uh 939 01:05:39,889 --> 01:05:41,110 strings into it 940 01:05:42,850 --> 01:05:44,270 and it includes 941 01:05:44,709 --> 01:05:46,909 so it's trying to do sequel injection here. 942 01:05:48,209 --> 01:05:48,860 And these, 943 01:05:48,879 --> 01:05:51,689 the thing that's happening with these random 944 01:05:51,699 --> 01:05:54,669 strings like this or these random values 945 01:05:55,540 --> 01:05:56,229 R 946 01:05:57,949 --> 01:06:00,969 the bot is checking to see if 947 01:06:02,780 --> 01:06:06,760 on the page that comes back from the submitting the search form. 948 01:06:07,090 --> 01:06:08,540 Do any of these appear? 949 01:06:10,149 --> 01:06:12,290 Because if they appear, it's 950 01:06:12,820 --> 01:06:15,409 it kind of implies or that 951 01:06:17,209 --> 01:06:18,969 you have mis parched the query. 952 01:06:25,260 --> 01:06:27,189 Yeah. Yeah. Here's the other one. Pu 953 01:06:28,000 --> 01:06:28,580 So 954 01:06:30,080 --> 01:06:31,739 on the other hand, it also makes your 955 01:06:31,939 --> 01:06:34,600 queries really, really stand out 956 01:06:35,020 --> 01:06:35,739 in the 957 01:06:35,949 --> 01:06:38,530 weblog when I see you searching for gibberish, 958 01:06:42,709 --> 01:06:46,209 I understand some of this is just the background radiation of the internet. 959 01:06:46,219 --> 01:06:47,489 But also this is 960 01:06:49,070 --> 01:06:52,010 we're at nerd oriented site. And so nerds are like, 961 01:06:52,320 --> 01:06:55,090 I need an example site. So we get a lot of like 962 01:06:56,129 --> 01:06:58,449 the first web crawler someone has ever written 963 01:06:58,689 --> 01:07:00,500 with no rate limiting, no 964 01:07:00,899 --> 01:07:02,979 robots. TXT, no anything. 965 01:07:03,879 --> 01:07:03,949 Uh, 966 01:07:04,969 --> 01:07:07,840 and we get people who are like, what's a vulnerability scanner? 967 01:07:07,850 --> 01:07:10,270 Oh, I just installed one. How do I use it? 968 01:07:10,370 --> 01:07:10,560 Oh, 969 01:07:10,570 --> 01:07:13,570 let me run it against this website that I was just looking at 970 01:07:13,580 --> 01:07:15,879 in any other tab and then they run it against our prod, 971 01:07:16,620 --> 01:07:17,229 which is, 972 01:07:18,290 --> 01:07:19,419 it's real rude. 973 01:07:19,800 --> 01:07:21,489 That's also a good way to get your IP band. 974 01:07:27,959 --> 01:07:29,699 And I'm real aggressive about 975 01:07:31,510 --> 01:07:33,969 if production throws an exception, I'm gonna fix it. 976 01:07:34,590 --> 01:07:37,689 There isn't because our site traffic is low enough that, you know, 977 01:07:37,699 --> 01:07:39,669 I don't really worry about the, 978 01:07:39,830 --> 01:07:41,330 is it a one in a million 979 01:07:42,090 --> 01:07:45,439 ram got hit by a cosmic ray kind of error? 980 01:07:45,590 --> 01:07:47,070 That thing happens at scale 981 01:07:47,969 --> 01:07:49,639 doesn't happen at lobster scale. 982 01:07:50,860 --> 01:07:52,830 Although I have seen one or two things that were, 983 01:07:54,780 --> 01:07:57,979 it's strongly indicative of hardware failure on the client. 984 01:08:04,169 --> 01:08:06,739 So at this point, vulnerability scanners don't 985 01:08:07,399 --> 01:08:08,689 throw five hundreds. 986 01:08:10,580 --> 01:08:12,350 They do make me annoyed if I see them though. 987 01:08:30,660 --> 01:08:32,080 Yeah, I don't want this here. 988 01:08:33,509 --> 01:08:34,060 All right. 989 01:08:42,799 --> 01:08:42,850 OK. 990 01:09:00,269 --> 01:09:00,809 Well, 991 01:09:01,358 --> 01:09:03,328 does he need any for sequel injection 992 01:09:04,368 --> 01:09:05,417 for highlighting? 993 01:09:06,759 --> 01:09:08,890 No, as long as strip operators happens internally, 994 01:09:08,899 --> 01:09:11,339 I think that's fine because this is just, 995 01:09:11,709 --> 01:09:12,799 this is just highlighting. 996 01:09:13,709 --> 01:09:14,160 Yeah. 997 01:09:17,839 --> 01:09:18,529 Hey, chill. 998 01:09:18,810 --> 01:09:21,990 Uh so I am reviewing this pull request 999 01:09:22,220 --> 01:09:23,109 right now, 1000 01:09:24,099 --> 01:09:25,249 which is 1001 01:09:25,389 --> 01:09:28,758 my own feature request for highlighting search terms. 1002 01:09:28,769 --> 01:09:30,398 Is there supposed to be music? 1003 01:09:30,809 --> 01:09:32,398 No. Why do you hear some? 1004 01:09:38,339 --> 01:09:39,350 Oh I think 1005 01:09:43,620 --> 01:09:48,310 Chill. You're like a popular streamer, aren't you? As opposed to you know me a yacht? 1006 01:09:49,099 --> 01:09:51,979 I think I started following you on Twitch recently 1007 01:09:51,988 --> 01:09:54,559 cause I heard a podcast interview with you. 1008 01:09:58,169 --> 01:10:00,839 Was that you or was that somebody else? Were you on the 1009 01:10:01,240 --> 01:10:04,390 Dead Code podcast? No, it's just mentioned in the rules. 1010 01:10:04,770 --> 01:10:05,240 OK. 1011 01:10:06,040 --> 01:10:07,649 But you do stream code, right? 1012 01:10:19,620 --> 01:10:20,240 OK. 1013 01:10:20,899 --> 01:10:22,080 Yeah, I've clicked over. 1014 01:10:22,290 --> 01:10:24,729 I have an offscreen browser. I've clicked over your, 1015 01:10:25,200 --> 01:10:26,399 I see you do um 1016 01:10:29,240 --> 01:10:32,979 a bunch of stuff. You're on maternity leave. 1017 01:10:34,959 --> 01:10:38,029 You aren't the person I just heard on the now I have to find it. 1018 01:10:42,660 --> 01:10:47,620 So I ran into Jared Norman earlier this year at Madison Ruby. 1019 01:10:52,609 --> 01:10:53,560 No. OK. 1020 01:10:54,379 --> 01:10:55,439 Yeah, this is you. 1021 01:10:55,810 --> 01:10:56,680 I did just hear 1022 01:10:56,819 --> 01:10:59,439 a, an interview with you. This is why I was following you. 1023 01:10:59,689 --> 01:11:00,290 Uh 1024 01:11:00,660 --> 01:11:04,600 is you were just on this podcast and talking about how 1025 01:11:05,779 --> 01:11:08,970 streaming has meant a bunch of opportunities in your career. 1026 01:11:09,859 --> 01:11:14,240 This was a really nice, let's, let's share this in the chat and I'll stick it in the um 1027 01:11:14,979 --> 01:11:15,839 show notes. 1028 01:11:16,660 --> 01:11:18,040 Anyways, thanks for dropping in. 1029 01:11:18,879 --> 01:11:19,439 Uh 1030 01:11:25,040 --> 01:11:29,399 you know, it's not just a very black metal piece of podcast art. 1031 01:11:29,410 --> 01:11:35,359 He actually commissioned a musician to make a little like metal bumper. 1032 01:11:36,069 --> 01:11:38,390 And so it has someone doing the screamy metal 1033 01:11:38,399 --> 01:11:41,169 voice saying like Dead Code and then like playing 1034 01:11:41,439 --> 01:11:44,209 really heavy distorted guitar. 1035 01:11:45,000 --> 01:11:46,140 So uh 1036 01:11:49,729 --> 01:11:55,600 the first couple of episodes, he didn't know what a compressor was yet. I think. 1037 01:11:56,109 --> 01:12:00,669 So. The first couple, like the first three or four episodes, 1038 01:12:01,479 --> 01:12:03,740 his metal intro is a little bit loud. 1039 01:12:04,439 --> 01:12:08,339 Uh I mentioned if you're sensitive to that and then he started working with 1040 01:12:09,750 --> 01:12:12,950 um Mandy Moore who is a 1041 01:12:14,120 --> 01:12:15,399 sort of famous 1042 01:12:15,879 --> 01:12:16,680 tech, I mean, 1043 01:12:16,790 --> 01:12:17,620 to me, 1044 01:12:18,029 --> 01:12:21,799 a tech podcast producer and as soon as she came on board, 1045 01:12:21,810 --> 01:12:23,959 his audio took a step up in quality. 1046 01:12:24,620 --> 01:12:26,359 Yeah. Yeah, it does slap. Oh 1047 01:12:27,060 --> 01:12:27,069 I 1048 01:12:27,180 --> 01:12:28,120 actually have, 1049 01:12:29,689 --> 01:12:32,370 I think I have desktop audio wired up 1050 01:12:32,870 --> 01:12:35,500 and I could probably play it. But I, I will just 1051 01:12:36,000 --> 01:12:37,120 let's see if it works. 1052 01:12:37,540 --> 01:12:39,700 So if I unmute that 1053 01:12:40,290 --> 01:12:41,140 and that, 1054 01:12:45,459 --> 01:12:46,020 I think it'll 1055 01:12:46,680 --> 01:12:50,049 actually notice that you, you choose the advent of code. 1056 01:12:50,060 --> 01:12:51,759 If you ever want help with your, 1057 01:12:52,069 --> 01:12:55,709 if you like the box in the corner, you can put like a little excerpt. 1058 01:12:56,930 --> 01:12:59,120 It was real nice if you could just sweep it 1059 01:12:59,279 --> 01:13:00,919 and you could like the chat in there. 1060 01:13:01,580 --> 01:13:02,140 Maybe 1061 01:13:02,669 --> 01:13:03,189 he's pretty over 1062 01:13:03,290 --> 01:13:03,540 late. 1063 01:13:04,819 --> 01:13:06,080 Good idea. Good idea. 1064 01:13:07,330 --> 01:13:08,620 So it's the um 1065 01:13:09,149 --> 01:13:14,589 it is definitely not wired up correctly because you are hearing, 1066 01:13:15,279 --> 01:13:18,049 especially if that was faint. You were hearing the 1067 01:13:22,330 --> 01:13:25,779 my monitor is playing the audio and then my microphone 1068 01:13:25,790 --> 01:13:28,279 is picking it up as it reflects off of me. 1069 01:13:28,970 --> 01:13:33,850 So I'm not gonna debug audio on stream. That's a little too painful. 1070 01:13:34,770 --> 01:13:36,910 Also, it's gotta be a trip for 1071 01:13:37,779 --> 01:13:39,089 uh jail codes to 1072 01:13:39,830 --> 01:13:40,549 hear me 1073 01:13:40,899 --> 01:13:42,930 playing an interview with her. So 1074 01:13:43,959 --> 01:13:45,169 in any case, uh 1075 01:13:45,750 --> 01:13:51,140 where I was going with that trail is uh if you wanna start streaming after me, 1076 01:13:51,149 --> 01:13:55,540 let me know and cause I'm getting towards wrapping up in like 1520 minutes 1077 01:13:56,439 --> 01:13:59,339 and I will throw over to you or raid. 1078 01:14:00,129 --> 01:14:02,439 Yeah, when I had to start, 1079 01:14:04,200 --> 01:14:08,819 when I uh, like, started giving conference talks and I was like, ok, well, 1080 01:14:08,830 --> 01:14:11,930 now you have to watch your own conference talks so that you can improve. 1081 01:14:12,350 --> 01:14:12,370 Ah, 1082 01:14:12,490 --> 01:14:13,609 that's such a trip. 1083 01:14:14,330 --> 01:14:14,990 And 1084 01:14:19,870 --> 01:14:21,990 doing it with streams is even worse. 1085 01:14:22,000 --> 01:14:25,620 Cuz it's just me talking to an empty room for hours. 1086 01:14:25,629 --> 01:14:27,419 I've watched one or two of those streams. 1087 01:14:29,560 --> 01:14:31,740 Oh, that's ok. Your baby can code on stream. 1088 01:14:33,799 --> 01:14:36,299 Congrats. I hope you're having a good holiday. Actually, 1089 01:14:38,209 --> 01:14:38,990 I am. 1090 01:14:39,000 --> 01:14:41,160 So I'm gonna roll out in a bit because we are 1091 01:14:41,169 --> 01:14:44,229 also hosting a Thanksgiving and there's plenty of prep to do, 1092 01:14:44,450 --> 01:14:48,439 although we did most of it over the last couple of days. I feel so adult. 1093 01:14:48,549 --> 01:14:50,270 Like, we weren't up all night 1094 01:14:50,490 --> 01:14:52,310 the night before a big dinner party. 1095 01:14:54,669 --> 01:14:55,129 All right. 1096 01:14:59,700 --> 01:15:04,160 Ah, no, I have to watch my talk so that I can get better at them and I don't watch 1097 01:15:05,250 --> 01:15:08,629 all of my stream playbacks because it's like, all right, if I'm doing, like, 1098 01:15:08,640 --> 01:15:09,850 six hours of stream a week, 1099 01:15:09,859 --> 01:15:13,669 that's already kind of a full work day of streaming every week. 1100 01:15:14,180 --> 01:15:15,470 I don't need to double that, 1101 01:15:16,439 --> 01:15:16,979 but 1102 01:15:17,160 --> 01:15:17,919 I do 1103 01:15:18,580 --> 01:15:22,299 watch bits of it to make sure that stuff came across. Or 1104 01:15:22,750 --> 01:15:26,899 if I remember that, I sounded particularly funny. I wanna hear what that sounds like 1105 01:15:28,660 --> 01:15:33,439 or I'm just debugging my stream archives and then I have to like click play on things. 1106 01:15:35,910 --> 01:15:36,350 Yeah. 1107 01:15:38,720 --> 01:15:39,979 All right. So this is, 1108 01:15:40,910 --> 01:15:41,970 this is really nice. 1109 01:15:41,979 --> 01:15:44,509 I should make more screenshots in my future requests 1110 01:15:44,520 --> 01:15:46,370 cause maybe that's the thing that people are like. 1111 01:15:46,379 --> 01:15:46,770 Yeah, 1112 01:15:47,009 --> 01:15:48,720 I understand what this person wants. 1113 01:15:55,140 --> 01:15:59,290 I almost wonder if they should pass in the search object instead of 1114 01:16:00,240 --> 01:16:02,379 extracting stuff and passing it in. 1115 01:16:03,419 --> 01:16:04,439 I'll leave it as a No. 1116 01:16:51,810 --> 01:16:52,339 Great. 1117 01:16:55,649 --> 01:16:57,029 That's what I'm gonna say. 1118 01:16:58,370 --> 01:16:59,870 Let's request some changes 1119 01:17:23,479 --> 01:17:23,549 which 1120 01:17:24,580 --> 01:17:24,600 um 1121 01:17:33,459 --> 01:17:33,470 I, 1122 01:18:11,680 --> 01:18:14,100 I don't, I guess they are term terms, 1123 01:18:14,490 --> 01:18:16,459 not yet quoted term. Yeah. All right. 1124 01:18:36,729 --> 01:18:37,350 Oh Chill. 1125 01:18:37,359 --> 01:18:40,669 You know, if this is your first time tuning in, maybe I should have answered though. 1126 01:18:40,680 --> 01:18:42,790 What are you doing a little more broadly of 1127 01:18:43,819 --> 01:18:48,450 I run Lobsters, which is a big web form for discussing programming. So we are 1128 01:18:50,250 --> 01:18:52,629 reviewing code to search 1129 01:18:53,069 --> 01:18:54,169 a site about code 1130 01:18:54,830 --> 01:18:55,379 very meta 1131 01:18:59,009 --> 01:19:04,060 and on these streams also on off, they are kind of lobsters office hours. 1132 01:19:04,069 --> 01:19:07,750 There is a link under the description to 1133 01:19:08,220 --> 01:19:12,029 my web page where I kind of introduce things and have the archive for the stream 1134 01:19:12,970 --> 01:19:13,790 and 1135 01:19:15,069 --> 01:19:15,540 good. 1136 01:19:15,779 --> 01:19:16,479 That's so great. 1137 01:19:20,970 --> 01:19:21,950 All right. So 1138 01:19:22,279 --> 01:19:26,390 Ashwin, Ashwin actually opened two poll requests 1139 01:19:27,060 --> 01:19:28,259 and this one, 1140 01:19:28,549 --> 01:19:29,640 where am I on time? 1141 01:19:32,640 --> 01:19:34,890 I think we can take a look at it. So 1142 01:19:35,930 --> 01:19:39,740 as I mentioned, I like to make sure the site doesn't throw exceptions in prod. 1143 01:19:41,620 --> 01:19:43,700 Oh, as long as I'm between poll requests, 1144 01:19:43,709 --> 01:19:47,100 I am saying the bumper thing the same amount of times, but you know, 1145 01:19:48,020 --> 01:19:50,669 four times in 90 minutes instead of four times in 1146 01:19:51,109 --> 01:19:52,040 three hours. 1147 01:19:52,629 --> 01:19:55,640 But if anybody has any questions about the site, the community, 1148 01:19:56,339 --> 01:19:57,399 the guidelines, 1149 01:19:58,290 --> 01:19:59,859 why things are the way they are 1150 01:20:01,040 --> 01:20:04,700 happy to talk about those happy to run queries against the Proud Database 1151 01:20:06,200 --> 01:20:12,020 or otherwise, I do code review and try and keep the code base moving and in good shape 1152 01:20:12,709 --> 01:20:13,640 or at least 1153 01:20:14,350 --> 01:20:15,850 break it less. 1154 01:20:17,250 --> 01:20:18,029 So 1155 01:20:19,379 --> 01:20:21,490 something broke the 1156 01:20:22,129 --> 01:20:24,810 stats page which has our nice graphs on it. 1157 01:20:27,750 --> 01:20:31,810 So if I start up my rail server in the background 1158 01:20:31,959 --> 01:20:33,770 and let's go to 1159 01:20:39,129 --> 01:20:41,129 this will probably throw 500 1160 01:20:43,899 --> 01:20:45,879 I mean production is. So 1161 01:20:47,509 --> 01:20:49,720 um stats also, 1162 01:20:49,859 --> 01:20:50,830 yeah, there we go 1163 01:20:50,930 --> 01:20:53,689 is cashed because these are big queries that are like, 1164 01:20:53,700 --> 01:20:56,000 let's look at every comment in the database. 1165 01:20:56,009 --> 01:20:57,970 Let's look at every story in the database. 1166 01:21:00,009 --> 01:21:01,709 And as long as we're gonna write 1167 01:21:02,879 --> 01:21:04,959 giant complicated queries, 1168 01:21:05,410 --> 01:21:06,819 let's not add any tests. 1169 01:21:09,279 --> 01:21:11,689 I'm a little embarrassed that I didn't even have a 1170 01:21:11,700 --> 01:21:13,979 smoke test to see that the stats page loads. 1171 01:21:14,649 --> 01:21:16,990 So this is probably related to 1172 01:21:18,370 --> 01:21:19,299 a recent 1173 01:21:21,270 --> 01:21:25,529 change I asked for replacing, execute with select all. 1174 01:21:25,839 --> 01:21:26,689 So, I wonder 1175 01:21:26,910 --> 01:21:29,890 if I change this back to execute? 1176 01:21:33,939 --> 01:21:35,720 Will this immediately go away? 1177 01:21:39,540 --> 01:21:40,149 Um, 1178 01:21:47,779 --> 01:21:49,100 yeah, still thinking about it. 1179 01:21:52,060 --> 01:21:55,990 If it is thinking longer it's probably working. Yeah. 1180 01:21:56,200 --> 01:21:59,080 So this is what the stats page is supposed to look like. 1181 01:22:08,439 --> 01:22:09,799 So it is. 1182 01:22:12,259 --> 01:22:14,250 Yeah, I don't think I need to add that. So then 1183 01:22:15,100 --> 01:22:16,439 the fix that 1184 01:22:17,500 --> 01:22:18,520 Ashwin maid, 1185 01:22:19,839 --> 01:22:21,649 I'm a little suspicious of it. 1186 01:22:24,209 --> 01:22:26,149 So there's a thing 1187 01:22:26,250 --> 01:22:28,910 I've talked about how sometimes I look at code and I'm like, 1188 01:22:28,919 --> 01:22:30,629 ah a junior developer wrote that 1189 01:22:30,810 --> 01:22:33,029 this one pinged that sense where 1190 01:22:35,270 --> 01:22:39,890 instead of trying to fix the query or 1191 01:22:40,890 --> 01:22:43,109 fix something downstream 1192 01:22:45,439 --> 01:22:46,979 and say, OK, well, 1193 01:22:47,270 --> 01:22:49,799 the query is gonna output a slightly different format. 1194 01:22:49,810 --> 01:22:51,970 Let's change the way it consumes 1195 01:22:52,149 --> 01:22:52,740 data. 1196 01:22:53,779 --> 01:22:54,870 It says, well, 1197 01:22:54,879 --> 01:22:57,779 let's loop over all of the data and inspect it and 1198 01:22:57,790 --> 01:23:00,319 tweak things and then put it back and pass it off 1199 01:23:02,149 --> 01:23:03,450 and it's such a 1200 01:23:03,700 --> 01:23:03,709 a, 1201 01:23:06,529 --> 01:23:10,080 it's a thing that Junior devs do often where 1202 01:23:10,209 --> 01:23:14,109 they don't try and find the root cause of something or change 1203 01:23:14,629 --> 01:23:17,919 the output one place. They just kind of look at 1204 01:23:18,060 --> 01:23:21,189 data and munch it where the exception happens 1205 01:23:21,359 --> 01:23:22,629 to it occur. 1206 01:23:35,689 --> 01:23:37,609 The exception occurs 1207 01:23:38,919 --> 01:23:41,290 line 90 1208 01:23:42,839 --> 01:23:43,649 it was 90. 1209 01:23:46,669 --> 01:23:50,649 So we grab all the data, we turn it into an array and we flatten it. 1210 01:23:51,680 --> 01:23:52,379 Is this 1211 01:23:52,859 --> 01:23:53,660 all right? Hang on. 1212 01:23:54,490 --> 01:23:58,229 So let's grab a console and let's say, what's the model here 1213 01:23:58,870 --> 01:23:59,910 user? All right, 1214 01:24:03,870 --> 01:24:08,169 cause I think this might be as simple as is stuff coming back as a hash or an array. 1215 01:24:18,209 --> 01:24:20,990 What do you mean user out from users? 1216 01:24:23,390 --> 01:24:23,930 Fucking? 1217 01:24:31,930 --> 01:24:31,939 I 1218 01:24:32,040 --> 01:24:32,250 get it. So 1219 01:24:32,720 --> 01:24:36,729 this is like a weird trilogy thing where it doesn't play well with my pager. 1220 01:24:50,100 --> 01:24:52,129 And so I get just useless. 1221 01:24:52,509 --> 01:24:53,879 Ask the art stuff. 1222 01:24:54,859 --> 01:24:56,390 Julia Evans just had a great 1223 01:24:58,870 --> 01:25:01,399 a string of posts on blue sky about 1224 01:25:02,240 --> 01:25:04,080 how it is a like 1225 01:25:04,689 --> 01:25:09,169 guideline of writing shell stuff that you're supposed to detect. If your pager is 1226 01:25:13,120 --> 01:25:16,060 not a person and then strip out your 1227 01:25:17,120 --> 01:25:19,640 export pager equals 1228 01:25:19,979 --> 01:25:21,319 see if this wants to do it. 1229 01:25:28,120 --> 01:25:29,020 All right. That's better. 1230 01:25:32,000 --> 01:25:34,140 So it comes back as a result 1231 01:25:34,899 --> 01:25:38,709 and then it has rows and this is an array of arrays. 1232 01:25:40,410 --> 01:25:41,509 If I said 1233 01:25:41,939 --> 01:25:42,910 select 1234 01:25:44,089 --> 01:25:45,810 oh part of that is 1235 01:25:46,430 --> 01:25:48,770 I should just say select one because I care about the structure. 1236 01:25:48,779 --> 01:25:50,100 I don't care how many I get. 1237 01:25:50,810 --> 01:25:52,250 So select all 1238 01:25:52,660 --> 01:25:53,709 gets me 1239 01:25:55,000 --> 01:25:56,089 a result 1240 01:25:56,299 --> 01:25:57,640 with the columns one. 1241 01:25:58,709 --> 01:26:01,089 And if I say each 1242 01:26:05,830 --> 01:26:05,850 the 1243 01:26:08,370 --> 01:26:10,069 I get hashes back, 1244 01:26:11,609 --> 01:26:12,200 OK? 1245 01:26:12,750 --> 01:26:14,259 But if I say execute, 1246 01:26:16,339 --> 01:26:17,870 I get an array back. So 1247 01:26:19,479 --> 01:26:21,379 this is not a pull request, 1248 01:26:21,390 --> 01:26:23,020 I'm gonna accept because what happened is 1249 01:26:23,029 --> 01:26:25,899 we switched from execute to select all because 1250 01:26:26,029 --> 01:26:29,259 rails, plumbing works a little different. We don't need to blow out the 1251 01:26:30,379 --> 01:26:31,049 cash. 1252 01:26:34,379 --> 01:26:36,390 But having made this change, 1253 01:26:40,770 --> 01:26:42,109 this is never gonna get 1254 01:26:44,089 --> 01:26:45,490 an array back anymore. 1255 01:26:48,109 --> 01:26:49,700 It shouldn't be possible. 1256 01:27:09,970 --> 01:27:12,120 So if it's always gonna come back as 1257 01:27:13,839 --> 01:27:14,799 an array, 1258 01:27:25,649 --> 01:27:27,520 it's always going to come back as an 1259 01:27:28,990 --> 01:27:29,299 right? 1260 01:27:30,319 --> 01:27:32,439 No, it's always gonna come back as a hash. 1261 01:27:33,229 --> 01:27:35,250 Do I wanna just call values on everything? 1262 01:27:35,569 --> 01:27:36,890 Would that fix this? 1263 01:27:40,240 --> 01:27:41,120 All right. So 1264 01:27:41,629 --> 01:27:43,330 put it back into this state 1265 01:27:44,540 --> 01:27:46,589 and then down here 1266 01:27:51,709 --> 01:27:54,180 yield should grab the results. 1267 01:28:08,240 --> 01:28:08,560 So 1268 01:28:16,750 --> 01:28:17,660 like I might need 1269 01:28:17,919 --> 01:28:21,740 an extra layer of two A dot values dot flatten, but 1270 01:28:24,660 --> 01:28:26,339 it's something more like that 1271 01:28:26,740 --> 01:28:27,700 rather than, 1272 01:28:29,259 --> 01:28:31,990 yeah, for an instance of active record result. 1273 01:28:32,859 --> 01:28:34,470 So I'm gonna tweak that to say 1274 01:28:36,040 --> 01:28:36,990 to a 1275 01:28:37,589 --> 01:28:39,990 and then that should get me an array of hashes. 1276 01:28:47,560 --> 01:28:47,609 OK. 1277 01:28:54,040 --> 01:28:57,529 As I look at this, I'm not even sure what the flat is doing there knowing 1278 01:28:59,459 --> 01:29:00,540 and breaking things, 1279 01:29:15,790 --> 01:29:17,979 a defined method for an instance of array. 1280 01:29:20,020 --> 01:29:21,660 But the problem is that it's 1281 01:29:28,689 --> 01:29:30,950 so this is gonna throw an exception. I just wanna see the 1282 01:29:32,589 --> 01:29:33,240 glasses. 1283 01:29:34,200 --> 01:29:35,939 So these are all arrays. 1284 01:30:52,609 --> 01:30:52,640 OK? 1285 01:30:53,229 --> 01:30:53,259 OK. 1286 01:30:56,330 --> 01:30:57,930 This give me multiple roads, 1287 01:30:59,779 --> 01:31:00,240 huh? 1288 01:31:05,540 --> 01:31:05,669 It will, 1289 01:31:17,660 --> 01:31:19,399 this gets me two hashes. 1290 01:31:30,430 --> 01:31:30,490 Wait a 1291 01:31:30,759 --> 01:31:30,819 moment, 1292 01:31:32,270 --> 01:31:33,930 this gets me to a race. 1293 01:31:38,870 --> 01:31:40,430 So why does this not? 1294 01:31:45,160 --> 01:31:47,830 This goes and selects this stuff out? 1295 01:32:16,359 --> 01:32:17,419 Let's go into a bugger 1296 01:32:22,020 --> 01:32:22,370 like 1297 01:32:22,569 --> 01:32:23,209 this is 1298 01:32:23,390 --> 01:32:25,169 I'm clearly wasting time for de 1299 01:32:25,270 --> 01:32:25,790 debugging 1300 01:32:27,250 --> 01:32:27,879 debug. 1301 01:32:28,080 --> 01:32:28,520 Uh 1302 01:32:32,790 --> 01:32:33,330 There we go. 1303 01:32:34,450 --> 01:32:35,939 It's data class. 1304 01:32:36,819 --> 01:32:37,790 It's a hash. 1305 01:32:52,180 --> 01:32:52,209 OK. 1306 01:32:53,640 --> 01:32:55,180 Yeah. And I'm, I'm such a 1307 01:32:55,759 --> 01:32:58,729 old school din line guy that I rarely remember 1308 01:32:58,919 --> 01:33:00,810 to just drop into a debugger. 1309 01:33:01,669 --> 01:33:03,549 There was a really nice talk at 1310 01:33:04,779 --> 01:33:06,370 Rocky Mountain ruby. 1311 01:33:06,500 --> 01:33:07,200 I think. 1312 01:33:07,879 --> 01:33:08,689 Where was that? 1313 01:33:12,520 --> 01:33:13,540 If you wanna write. 1314 01:33:14,180 --> 01:33:14,879 Um, 1315 01:33:16,069 --> 01:33:17,129 a bunch of, 1316 01:33:18,649 --> 01:33:19,379 let's see. 1317 01:33:19,770 --> 01:33:20,910 I make sure I'm muted. 1318 01:33:28,310 --> 01:33:29,209 Where was this? 1319 01:33:29,649 --> 01:33:31,759 Oh, this must be a year or something ago. 1320 01:33:33,660 --> 01:33:34,200 Come here. 1321 01:33:36,270 --> 01:33:37,720 Where is the actual 1322 01:33:41,350 --> 01:33:42,850 try until you die? Here you go. 1323 01:33:43,609 --> 01:33:45,839 This was a nice talk about 1324 01:33:46,020 --> 01:33:47,770 features in pride. 1325 01:33:49,080 --> 01:33:52,310 And I started watching it and then I learned like five things and I went, 1326 01:33:52,319 --> 01:33:53,040 my brain is full. 1327 01:33:53,049 --> 01:33:54,939 I can't actually learn five things at once. 1328 01:33:58,979 --> 01:34:00,279 Uh, So I have to 1329 01:34:01,180 --> 01:34:02,669 come back and watch that again. 1330 01:34:08,810 --> 01:34:09,870 All right. So 1331 01:34:11,770 --> 01:34:12,589 that's it. Right. 1332 01:34:13,779 --> 01:34:15,129 Could not parse time. 1333 01:34:25,509 --> 01:34:27,149 Yeah, I don't understand. I'm 1334 01:34:28,020 --> 01:34:30,600 kind of dinking around cause I'm trying to, 1335 01:34:33,270 --> 01:34:35,759 I'm just gonna get that. Why am exception? Aren't I? 1336 01:34:36,729 --> 01:34:39,080 Cause this is what the coat already is? Yeah. 1337 01:34:47,310 --> 01:34:48,850 So this is not all right. 1338 01:34:49,350 --> 01:34:52,020 That's enough to say that this pull request isn't gonna do it. 1339 01:34:52,029 --> 01:34:56,069 Let's just punt it back. I like I look at these things and I want to tweak it, but 1340 01:35:15,470 --> 01:35:19,399 I gotta get it up on screen so I can actually say it correctly. 1341 01:35:22,740 --> 01:35:22,759 So 1342 01:35:24,049 --> 01:35:25,509 the race and 1343 01:35:26,600 --> 01:35:29,580 select all returns and array 1344 01:35:30,310 --> 01:35:31,290 hatches. 1345 01:35:37,919 --> 01:35:39,009 Thanks for 1346 01:35:42,509 --> 01:35:43,459 Tinker a 1347 01:35:43,560 --> 01:35:44,330 bit 1348 01:35:45,370 --> 01:35:48,450 and learn that this is bad. This is death. 1349 01:35:54,589 --> 01:35:56,580 This isn't going to be 1350 01:35:58,549 --> 01:35:59,680 changing the 1351 01:36:23,060 --> 01:36:25,830 today, the data of 1352 01:36:27,830 --> 01:36:28,439 the 1353 01:36:29,020 --> 01:36:32,049 class of the array elements 1354 01:36:37,109 --> 01:36:38,399 should always be 1355 01:36:39,089 --> 01:36:39,790 ashes. 1356 01:36:43,049 --> 01:36:47,990 Don't like this style of inspecting data in the middle 1357 01:36:48,910 --> 01:36:49,580 and 1358 01:36:51,270 --> 01:36:52,660 we came back 1359 01:36:53,890 --> 01:36:55,109 is either 1360 01:36:59,250 --> 01:37:01,270 either update the 1361 01:37:03,560 --> 01:37:04,339 query 1362 01:37:04,979 --> 01:37:06,379 and I don't wanna tell him to 1363 01:37:24,220 --> 01:37:24,839 There we go. 1364 01:37:27,109 --> 01:37:28,850 I feel like a very, 1365 01:37:29,819 --> 01:37:32,819 I hope I am being a competent open source maintainer 1366 01:37:33,069 --> 01:37:35,359 by saying like, hey, yeah, you got this. 1367 01:37:36,919 --> 01:37:41,020 It's really tempting, especially with this kind of like, oh, I almost have it bug. 1368 01:37:41,029 --> 01:37:45,339 Like I did not mean to rabbit hole for five or 10 minutes and try and fix it myself. 1369 01:37:45,720 --> 01:37:48,729 What I should have said to encourage a contributor is just like, 1370 01:37:50,000 --> 01:37:52,770 yeah, the styles off, you're mostly there. Why don't you? 1371 01:37:52,850 --> 01:37:54,870 I could have written this comment 10 minutes ago. 1372 01:37:55,669 --> 01:37:57,870 As soon as I saw the difference between execute and 1373 01:37:57,879 --> 01:38:00,330 select all I should have just come back and said, 1374 01:38:01,100 --> 01:38:02,100 please keep going. 1375 01:38:03,279 --> 01:38:04,370 It's the 1376 01:38:04,819 --> 01:38:06,569 uh the wanting to do it myself. 1377 01:38:07,259 --> 01:38:09,419 I am trying to get away from that and 1378 01:38:09,430 --> 01:38:12,080 encourage more people to contribute to the code base. 1379 01:38:12,089 --> 01:38:14,319 It is a heck of a lot more scalable than 1380 01:38:15,600 --> 01:38:17,310 me trying to do everything myself. 1381 01:38:18,970 --> 01:38:19,549 All right. 1382 01:38:20,259 --> 01:38:21,439 So with that, 1383 01:38:22,100 --> 01:38:25,339 I am gonna roll out. This is gonna be a very short stream. 1384 01:38:25,370 --> 01:38:29,259 Um Unless anybody has any last minute questions about 1385 01:38:29,750 --> 01:38:32,000 the lobster site or code base. 1386 01:38:32,930 --> 01:38:36,419 Uh And I understand from tail codes that she's gonna 1387 01:38:36,430 --> 01:38:39,189 start writing rails and contributing to the code base. 1388 01:38:41,740 --> 01:38:44,430 Oops, why is this bug still first, still open? 1389 01:38:45,479 --> 01:38:46,149 This is done 1390 01:38:49,819 --> 01:38:50,509 and 1391 01:38:53,009 --> 01:38:59,680 given that we have 100 and 26 issues open and she has a baby in her arms. 1392 01:38:59,689 --> 01:39:02,109 Probably she's only gonna close half of them today. 1393 01:39:02,250 --> 01:39:03,149 That seems reasonable. 1394 01:39:05,950 --> 01:39:06,350 No. 1395 01:39:08,669 --> 01:39:09,649 So, anyways, uh, 1396 01:39:09,660 --> 01:39:15,890 I hope everybody has a nice holiday and if you don't celebrate Thanksgiving 1397 01:39:16,160 --> 01:39:17,779 because you're not an American, 1398 01:39:18,459 --> 01:39:19,049 uh, 1399 01:39:19,060 --> 01:39:21,279 the most important part of it is eating too 1400 01:39:21,290 --> 01:39:23,649 much food and hanging out with your family. 1401 01:39:23,919 --> 01:39:25,450 So I hope you can do that. 1402 01:39:28,910 --> 01:39:30,069 That's about it. 1403 01:39:31,229 --> 01:39:33,899 Oh, you already write rails and you're considering contributing well, 1404 01:39:33,910 --> 01:39:36,899 then I will try and not actually like, put you on the spot. 1405 01:39:36,910 --> 01:39:39,430 I hope I don't put you off. I'm just being silly 1406 01:39:39,890 --> 01:39:41,299 but um 1407 01:39:41,640 --> 01:39:42,250 I am 1408 01:39:42,979 --> 01:39:47,359 very welcoming to contributors if any of this stuff interests you. 1409 01:39:47,830 --> 01:39:50,339 I mean, I break stuff on the site all the time. 1410 01:39:50,569 --> 01:39:53,080 There is lots of stuff that's tagged good first issue. 1411 01:39:53,089 --> 01:39:55,279 So you don't have to know much about the code base 1412 01:39:56,109 --> 01:39:57,000 and 1413 01:39:59,000 --> 01:40:00,250 if you uh 1414 01:40:00,700 --> 01:40:02,799 want an invite to the site, 1415 01:40:02,939 --> 01:40:06,450 just let me know and I will email you one so that you can poke around. 1416 01:40:06,990 --> 01:40:08,649 Uh I just have to get 1417 01:40:09,399 --> 01:40:11,620 an email address for you. If you're not already on the site. 1418 01:40:14,589 --> 01:40:16,419 That is true for anybody, 1419 01:40:16,640 --> 01:40:18,819 please please help me fix my bugs. 1420 01:40:20,379 --> 01:40:21,000 Alrighty. 1421 01:40:22,220 --> 01:40:23,209 Have a good holiday. 1422 01:40:23,950 --> 01:40:24,549 Take care.