POPULARITY
On this episode I sit down with Squint, a hardcore punk band from St. Louis, MO. We talk a brief history before jumping into their debut LP "Big Hand". Before we get to some stories we talk about their music videos and getting to tour Europe. Be sure to follow Squint and check out "Big Hand"!!! This episode features the songs "Well Wisher" and "Pack Rat" from the album Big Hand. You can find Squint at the following links: Instagram: https://www.instagram.com/squintstl/ Twitter: https://x.com/squintstl Bandcamp: https://squintstl.bandcamp.com/ Merch: https://sundaydrive-records.com/collections/squint Packrat Music Video: https://www.youtube.com/watch?v=pEl436FetXo _______________________________________ You can find Beers With Bands here: Facebook: https://www.facebook.com/BeersWithBands2 Twitter: https://twitter.com/BeersWBandsPod Instagram: https://www.instagram.com/beerswithbandspod/ Bandcamp: https://beerswithbands.bandcamp.com Everywhere else: https://linktr.ee/BeersWithBands Logo and Banner design by Kaylyn Chileen Instagram: https://www.instagram.com/madam.fortress.mommy/ Website: https://kaylynchileen.art Beers With Bands intro by Thomas Allen of Say Days Ago and Last Autumn Say Days Ago: https://www.instagram.com/saydaysagoband/ Last Autumn: https://www.instagram.com/lastautumnband/
We dive into a series of harrowing and humorous stories revolving around unexpected eye injuries.
Nick Sweetman is one of Toronto's most prominent graffiti artists. Last February I was walking down Lansdowne Avenue in Toronto with my friend Michael Bungay Stanier, who was our guest back in Chapter 48, and as we strolled under a giant bridge I saw a giant ... well, it looked like a photo! But it wasn't a photo. It was a massive spray-painted image of a Hooded Merganser, and at the very bottom corner was a signature that said "Nick Sweetman." Looks like a photo, right? Look at that eye! That bill! But I discovered there's this Toronto mural artist named Nick Sweetman and turns out I've seen the guy's stuff all over the place. He paints pollinators, birds, insects, and animals of all kinds... He painted a whale shark I've ridden by on my bike for years without knowing it was him! Squint and you'll see the 'Sweetman' underneath its cavernous mouth. So I decided to reach out to Nick Sweetman and ask him about doing a unique partnership with me and 3 Books. He was game! We found a 750 square foot brutalist bare concrete wall behind a subway station in Toronto begging to be beautified. And now 11 months later I am very proud to present... After I spent six months getting approvals from the Toronto Transit Commission (shoutout to Cameron Penman, David Nagler, Kerry-Ann Campbell, and Councillor Dianne Saxxe!), Nick started painting the wall behind Dupont Station on September 17th, 2024 (my birthday!) and finished it up on November 1st. What resulted is honestly the most beautiful piece of public art I have ever seen. I know I'm birdy biased but Nick's beauty, his eye, his senses—they just know no bounds. He doesn't use stencils! He's not tracing anything! The guy is literally just looking at a dirty, bare, curved 750-square-foot wall and, NO BIGGIE painting 16 HYPERREALISTIC LOCAL BIRDS ON IT! Over the six weeks of painting I pulled out my recorder many times, Nick's friend and fellow graffiti artist Blaze Wiradharma (@blazeworks) pulled up with his video gear, and then genius editor Scott Baker (@adjacentp) rolled in to edit our first-ever 3 Books audio-video documentary experience. Listen! Watch! Be amazed by the wonder of Nick Sweetman! We explore questions like: Why did Nick leave the wine drinking art gallery world for dirty street corners? What do people who have owe to people who don't? How do we see the crustaceans in our parking lot? And ... do we still have a shared reality? We talk about mural painting, graffiti, street art, what it means to live in a world where humans overtake everything and, of course, Nick's 3 most formative books. We even get a live splice of Leslie teasing out his third book in real-time which is pretty special! I highly recommend you WATCH this chapter if you can as we put so much heart and soul into making Nick's masterpiece come to breathtaking visual life. But, of course, as we flip the page to Chapter 144, you can always just listen in on Apple or Spotify, too.
I remember a simple yet enchanting holiday moment—it began with my grandparents standing beside the Christmas tree. Its lights were glowing gently in the early evening, and the house carried that pleasant hush that settles in once the day's bustle has quieted down. They leaned toward me and said, “Squint your eyes, and you'll see the lights better.” Naturally, as a curious child, I obliged. In an instant, those bright points of color blurred into radiant halos, as if each bulb had become a tiny star in its universe. It felt like stepping into a world shaped by whispers and warm glances, where small acts—like narrowing your eyes—could turn the ordinary into something magical... Podcast Notes: https://ancestralfindings.com/spinning-old-christmas-yarns/ Genealogy Clips Podcast: https://ancestralfindings.com/podcast Free Genealogy Lookups: https://ancestralfindings.com/lookups Genealogy Giveaway: https://ancestralfindings.com/giveaway Genealogy eBooks: https://ancestralfindings.com/ebooks Follow Along: https://www.facebook.com/AncestralFindings https://www.instagram.com/ancestralfindings https://www.youtube.com/ancestralfindings Support Ancestral Findings: https://ancestralfindings.com/support https://ancestralfindings.com/paypal #Genealogy #AncestralFindings #GenealogyClips
This week we turn the show into a Dungeon Crawl podcast. Oh, and we discuss whether or not hardcore is art. Spoiler alert: it isn't. Unless it is. Also, yes, we had some audio difficulties with Matt's track this week. We should have it fixed for next week. I'M SORRY DON'T HIT ME.On this week's Right Profile:Dungeon CrawlSquintAmerican Thrills Check Us Out:PatreonSixth and Center PublishingMusical Attribution:Licensed through NEOSounds.“5 O'Clock Shadow,” “America On the Move,” “Baby You Miss Me,” “Big Fat Gypsy,” “Bubble Up,” “C'est Chaud,” “East River Blues,” “The Gold Rush,” “Gypsy Fiddle Jazz,” “Here Comes That Jazz,” “I Wish I Could Charleston,” “I Told You,” “It Feels Like Love To Me,” “Little Tramp,” “Mornington Crescent,” “No Takeaways.”
Podcast #716 puts on a brave face with help from Pizzicato Five, Night Court, Cast of Thousands, Squint, Alvilda, Lola Lola, The Jackets, & The Cure.
Podcast #716 puts on a brave face with help from Pizzicato Five, Night Court, Cast of Thousands, Squint, Alvilda, Lola Lola, The Jackets, & The Cure.
Everyone that listens to this podcast knows that I ride for Inspector 34. Their debut album, Love My Life was my album of the year when it came out and this is proving to be one of my favorites this year. Seriously, these guys are critically underrated and they deserve to be in your earholes. Also, this ep is fun if you enjoy musicians actually discussing the recording process. This band reps both coasts and everything inbetween and you won't regret listening. Links: Inspector 34 - "Squint Your Ears" on bandcamp: https://inspector34.bandcamp.com/album/squint-your-ears "It's Three O'Clock, Go To Your Sink, Pour Some Milk, And Start To Think ...About This Terrific New 'Beach Boys' Tribute From The Sad Milk Collective!!!": https://sadmilkcollective.bandcamp.com/album/its-three-oclock-go-to-your-sink-pour-some-milk-and-start-to-think-about-this-terrific-new-beach-boys-tribute-from-the-sad-milk-collective Sad Milk Patreon: https://www.patreon.com/sadmilkcollective/posts MELLOW HARSHER: "THIS CAN ONLY BE AS TERRIBLE AS WE ARE" A Documentary: https://www.youtube.com/watch?v=NyBaW5NYmFE Full Livestream of the episode: https://youtube.com/live/y5VCEMS6QeI?feature=share OUR DISCORD: https://discord.gg/2stA2P7pTC https://www.youtube.com/flyoverstatepark EVERYTHING ELSE: https://linktr.ee/FlyoverStatePark --- Support this podcast: https://podcasters.spotify.com/pod/show/albumconcepthour/support
“For now we see in a mirror dimly, but then face to face. Now I know in part; then I shall know fully, even as I have been fully known.” - 1 Corinthians 13:12 Maybe you remember with me how that phrase in King James was, “through a glass darkly.” As a child I always imagined myself peering into a glass orb at some magical world, (maybe even Heaven), but not quite making out the shapes. That held some real mystique for me. I had no idea nor care what this could have to do with love, which was still an icky concept to me anyway. Alas, that was when I was a child. When I became a man, I put away childish things and got back to fairy tales. I have since learned that it was ‘glass,' as in Alice's ‘looking glass.' The mirror mix-up reminds me of the astronomer Percival Lowell, who was convinced that he was seeing spoke-like features on the surface of Venus, yet unable to replicate the findings for other observers. As it happens, the ambitious stargazer had unwittingly turned his telescope into an ophthalmoscope and was actually just seeing the blood vessels in his own eyeballs reflected back onto his vision. Alice, too, thought she was peering into an alien world, when it turns out she was only learning about herself. But how does focusing on yourself help you love God and others? Isn't love about self-denial? Well, we often cause hurt to others merely by being ourselves around them. They need us to be better, and love demands we try. So, I'm starting with the man in the mirror, and I'm asking him to change his ways. Squint with me this Sunday and we'll see what we can see about all that.
“For now we see in a mirror dimly, but then face to face. Now I know in part; then I shall know fully, even as I have been fully known.” - 1 Corinthians 13:12 Maybe you remember with me how that phrase in King James was, “through a glass darkly.” As a child I always imagined myself peering into a glass orb at some magical world, (maybe even Heaven), but not quite making out the shapes. That held some real mystique for me. I had no idea nor care what this could have to do with love, which was still an icky concept to me anyway. Alas, that was when I was a child. When I became a man, I put away childish things and got back to fairy tales. I have since learned that it was ‘glass,' as in Alice's ‘looking glass.' The mirror mix-up reminds me of the astronomer Percival Lowell, who was convinced that he was seeing spoke-like features on the surface of Venus, yet unable to replicate the findings for other observers. As it happens, the ambitious stargazer had unwittingly turned his telescope into an ophthalmoscope and was actually just seeing the blood vessels in his own eyeballs reflected back onto his vision. Alice, too, thought she was peering into an alien world, when it turns out she was only learning about herself. But how does focusing on yourself help you love God and others? Isn't love about self-denial? Well, we often cause hurt to others merely by being ourselves around them. They need us to be better, and love demands we try. So, I'm starting with the man in the mirror, and I'm asking him to change his ways. Squint with me this Sunday and we'll see what we can see about all that.
EP124 of the #ATIpodcast w/Barrett "Bear" Lewis welcomes back Brennen Wilkinson of SQUINT a #SaintLouis #HardcoreBand from @SundayDriveRecords ! SQUINT: IG: https://www.instagram.com/squintstl/ X: https://twitter.com/squintstl FB: https://www.facebook.com/squintstl/ BANDCAMP: https://squintstl.bandcamp.com/ SUNDAY DRIVE RECORDS: https://www.sundaydrive-records.com/ Like, Listen, Enjoy, Subscribe to the ATI Podcast collective anywhere you get your podcast audio. https://flow.page/atipod #SQUINT #SQUINTSTL #SundayDriveRecords #ALLTHINGSINSANE #Hardcore #MelodicHardcore #jonmarkson #STLhardcore #AvacadoBooking #funeralforafriend #leavingtime #hallowsuns #feverchild #ustour #EuropeanTour #BigHand #PackRat #Magic #Sunshine #STL #everclear #thirdeyeblind #lit #somuchfortheafterglow #FamilyGuy #SoftKill --- Support this podcast: https://podcasters.spotify.com/pod/show/ati-podcast/support
Acclaimed Aussie author Craig Silvey spoke to Clairsy & Lisa as his book Runt gets turned into a movie, filmed in York and is set to hit cinemas soon. He told the guys the amazing process about finding Squint, the dog who plays Runt in the film.See omnystudio.com/listener for privacy information.
A lot goin' on here.See Privacy Policy at https://art19.com/privacy and California Privacy Notice at https://art19.com/privacy#do-not-sell-my-info.
This time around we're diving into the Father's Day campaign from Bottega featuring A$AP Rocky and shot by Carrie Mae Weems, Rihanna named the face of J'adore Dior, the overuse of Lil' Wayne's ‘A Milli', Jordan's shot back at Adidas, Black Nepotism, and much more. Tap in via the link in our bio to subscribe on YouTube, or listen wherever you find podcasts!
Abrimos con nuestra portada, el descubrimiento de la estupenda voz de la vocalista armenia Astghik Martirosyan que en el 2023 presentó Distance. La guitarra de Julian Lage suena de nuevo en La Montaña Rusa, esta vez con Squint, álbum publicado en 2021. Nuestro Clásico de la Semana fue la tuba de Ray Draper que junto a su Quintet firmó el clásico Tuba Sounds en 1957. Desde Italia escuchamos de nuevo al contrabajista Dario Piccioni con Caffé Tevere, de 2022. Aunque parezca mentira, hacía ya unos cuantos programas que no escuchábamos la música de John Zorn y sin que sirva de precedente, hoy volvemos a su universo de la mano de sus Bagatelles, estas del 2022 y el volumen 14, con el trompetista Peter Evans. Descubriremos la música de la vocalista y pianista lituana Liva Dumpe que este 2024 ha publicado Talskatis. Y cerarremos con el pianista alemana Julie Sassoon y su Quartet, con el estupendo Voyages de 2021.
Ivana debunked Trump R-word accusation! Calls: Should I keep my dog? She's all I got! Self-righteous phony MLK! Should we hate communism? The Hake Report, Tuesday, May 21, 2024 AD TIME STAMPS * (0:00:00) Start * (0:00:47) Topics: Trump R-word? (NOT the criminal story) * (0:02:17) Hey, guys! Amazin' T— Baby (JLP tee) * (0:04:31) Ivana denies Trump R-worded her * (0:12:53) Other lies: Stormy, Cohen * (0:15:48) Evil Joe cherry-picking lies, "hate crimes" (root lie: Anger) * (0:17:57) JONA, NC: Work clocks, Angel communication * (0:21:18) JONA: Switching jobs? Integrity Dr. * (0:26:20) DONALD, NY: My dog, she's all I got * (0:40:14) DANIEL, TX: Keep the dog! Adaptable. JLP, Sandy * (0:49:18) JOE, AZ: Huskies, Cohen, Trump R-word cases * (0:54:26) JAIME, MN: Did a turkey; Having dogs vs children * (0:59:46) Steve Taylor - "Cash Cow (A Rock Opera in Three Small Acts)" (1993, Squint) * (1:06:02) Super: Great show (Greggatron) * (1:06:28) Coffee: Dolton, IL mess! FBI investigation! * (1:08:08) Coffee: Nefarious anti-FE plan to rid of Sean! * (1:12:02) Coffee: Terri apology * (1:12:44) Coffee: MLK mind-reading? (Hake goes off!) * (1:19:56) MARK, CA: Joe lies vs Crishaun; MTG, Crocket, AOC. MLK. * (1:24:18) MARK: MLK exposed. Good black leaders. Evil: Hating Satan? * (1:34:19) Super: Jimmy Carter 100 in Oct! * (1:35:05) TERRI, OR: Sexual misconduct, Mark, Media, Divorce * (1:49:02) THOMAS, CA: Racism word, Bigotry, hatred of God's image, Adultery * (1:52:09) Knights of the New Crusade - "Ain't No Monkeys in My Family Tree" (2004) BLOG https://www.thehakereport.com/blog/2024/5/21/the-hake-report-tue-5-21-24 PODCAST / Substack HAKE NEWS from JLP https://www.thehakereport.com/jlp-news/2024/5/21/icc-cries-war-crimes-on-bibi-france-agrees-hake-news-tue-5-21-24 Hake is live M-F 9-11a PT (11-1CT/12-2ET) Call-in 1-888-775-3773 https://www.thehakereport.com/show VIDEO YouTube - Rumble* - Facebook - X - BitChute - Odysee* PODCAST Substack - Apple - Spotify - Castbox - Podcast Addict *SUPER CHAT on platforms* above or BuyMeACoffee, etc. SHOP Spring - Cameo | All My Links JLP Network: JLP - Church - TFS - Nick - Joel Get full access to HAKE at thehakereport.substack.com/subscribe
Economy vs "nightlife" rant! Calls: Smearing white views! Why evil? White humans? What's authority? Kristi Noem shot her puppy, playing "man"! The Hake Report, Tuesday, May 7, 2024 AD TIME STAMPS * (0:00:00) Topics * (0:03:09) Hey, guys! Coo-al Hake tee (Don't jump to conclusions) * (0:06:21) Cost-of-living crisis killing "nightlife" (London, etc.) * (0:36:15) DAVID, FL: Economy, Insurance spiking, American dream * (0:48:43) Chat: Best of times now! Opportunities, Rome's downfall * (0:50:19) JOE, AZ: "Himmler," 3/5ths Compromise, COWARD! * (0:53:43) JOE: Agree with "Himmler"? Fear-mongering, H.R. 350 * (1:03:27) Steve Taylor - "Sock Heaven" (1993, Squint) * (1:10:35) Rumble: Azzmador on Irish: white, but low class * (1:12:58) Coffee: Hake AI Cantopop song (realDonaldTrump) * (1:15:25) Coffees: "Muslim dood!" Spanking? Dime for homeless? * (1:19:08) AMAN, India: Q's Why go through Hell? * (1:25:21) AMAN: Why God allow evil if he hates sin? * (1:28:22) ALEX, MT: Ireland Aryan, white humans, women (cusses) * (1:35:45) ALEX, TN: Cussing? Authority? Vs Dominion * (1:45:51) ALEX, CA: Kristi Noem shouldn'ta shot her dog * (1:49:39) MARK, CA: Coward, 3/5ths Compromise * (1:50:53) twothirtyeight - "Modern Day Prayer" (2002, You Should be Living) BLOG https://www.thehakereport.com/blog/2024/5/7/the-hake-report-tue-5-7-24 PODCAST / Substack HAKE NEWS from JLP https://www.thehakereport.com/jlp-news/2024/5/7/judge-juan-mercham-contemptuously-threatens-trump-with-jail-hake-news-tue-5-7-24 Hake is live M-F 9-11a PT (11-1CT/12-2ET) Call-in 1-888-775-3773 https://www.thehakereport.com/show VIDEO YouTube - Rumble* - Facebook - X - BitChute - Odysee* PODCAST Substack - Apple - Spotify - Castbox - Podcast Addict *SUPER CHAT on platforms* above or BuyMeACoffee, etc. SHOP Spring - Cameo | All My Links JLP Network: JLP - Church - TFS - Nick - Joel Get full access to HAKE at thehakereport.substack.com/subscribe
Another black cop killer. Travis Kelce, modern male with T. Swift. Pro-Palestinian protesters: masking vs Virus Fear and Doxxing! The Hake Report, Tuesday, April 30, 2024 AD TIME STAMPS * (0:00:00) Topics: Kelce, Cops, black French singer * (0:02:47) Hey, Jesse! * (0:03:00) Hey, guys! Get a Job Teespring (not Hake!) * (0:06:06) Suspect kills four police in Charlotte, NC * (0:19:09) Same evil spirit everywhere (Nick passport bros) * (0:24:16) Travis Kelce, T Swift, sign of the times * (0:37:35) Supers: Respect, Hater, Apology due? * (0:42:58) Coffee: Zest, hate, dislike * (0:46:34) RICHARD, NC: Friendly people at campuses * (0:54:11) RICHARD: Trump in contempt, gag order, hush money * (0:56:24) Steve Taylor - "The Finish Line" (1993, Squint) * (1:03:44) DLive chest * (1:04:28) Supers: Lin Yen Chin, PTSD, suffixes, mouth-breathing * (1:07:38) Supers: Joel Friday, OJ marriage advice; Sea Moss, "Remiss" usage * (1:10:50) Racism in France: Mali black female Francophone singer (Aya Nakamura) * (1:19:50) French: Racism humiliates France! (Nick the Anchor Baby… Mali geography) * (1:29:30) JEFF, LA: Did you forgive your mother? Yes. *CLICK* * (1:30:16) CJ was right: Know nothing about everything, something about anything * (1:31:57) Coffee: Not a stalker, You won't hear from me! * (1:36:14) Antifa-BLM-Palestine MASKED protestors: Covid, Doxxing, was illegal * (1:51:09) twothirtyeight - "The Spoiled One" (2000, Regulate the Chemicals) BLOG https://www.thehakereport.com/blog/2024/4/30/the-hake-report-tue-4-30-24 PODCAST / Substack HAKE NEWS from JLP https://www.thehakereport.com/jlp-news/2024/4/30/hake-news-tue-4-30-24 Hake is live M-F 9-11a PT (11-1CT/12-2ET) Call-in 1-888-775-3773 https://www.thehakereport.com/show VIDEO YouTube - Rumble* - Facebook - X - BitChute - Odysee* PODCAST Substack - Apple - Spotify - Castbox - Podcast Addict *SUPER CHAT on platforms* above or BuyMeACoffee, etc. SHOP Spring - Cameo | All My Links JLP Network: JLP - Church - TFS - Nick - Joel Get full access to HAKE at thehakereport.substack.com/subscribe
Calls: Brainwashed young'uns! Hater callers! Simone Biles' husband vs fans! Angry phone calls! Socialist Obamacare debate! Cortisol addiction! The Hake Report, Tuesday, April 23, 2024 AD TIME STAMPS * (0:00:00) Start/Topics: Gaza drama, Simone Biles, Coffees * (0:01:32) Hey, guys! Better…Not Bitter (BOND tee) * (0:03:17) STEVE, NY: Anti-racist kids Church, cringy, hallucination, grandparents, beer * (0:07:28) STEVE: Teaching about racism, a setup * (0:10:45) STEVE: Cringe, zoomer lingo, 61yo, younger generation * (0:12:22) NEAL, TX: Didn't cry, mother died * (0:16:00) Palestine drama in colleges (Occupy) * (0:22:47) GREGGATRON, Midwest: FE/RE pastor: Bible denier * (0:25:31) GREGGATRON: William, Joe, getting along * (0:26:28) GREGGATRON: Nitpicking calls, hate, addicted to Hake * (0:29:49) GREGGATRON: Joe, Tony, Maze, own show, Mark * (0:31:34) Simone Biles, husband Jonathan Owens, fans mad * (0:39:20) Simone Biles: Mental Health, * (0:42:46) DAVID, FL: Joe, Mark, complainers * (0:45:18) DAVID: Bounty hunters at Nissan (2017) * (0:46:57) DAVID: Ever been in a fight? * (0:50:56) DAVID: Protester college kids * (0:52:02) DAVID: Called Ilhan Omar office: Wicked and evil * (0:53:17) DAVID: Climate, BLM protests; Israel, Iran, Trump * (0:56:54) DAVID: Calling politicians, being mad * (0:58:17) Hake called politician offices, and Home Depot * (0:59:45) Steve Taylor - "Jesus Is for Losers" (1993, Squint) * (1:05:28) Coffees: Mark, why talk to Joe, white guilt (Anchor Baby!) * (1:07:37) Coffee: Terri apologies * (1:09:04) Coffee: Boring yesterday! You owe apologies! (Cameo) * (1:10:45) Coffee: Mocky mott! * (1:11:32) Rumble: Octopuses, not octopi * (1:12:26) DANIEL, TX: William, Joe, don't whip. Not my coffee * (1:14:03) DANIEL: Civil War killing power: riflery, hospitals * (1:21:33) JEFF, LA: Why you treat Mark differently from Joe? *click* * (1:23:59) JOE, AZ: Thx, pastor friend used Mark's calls * (1:26:31) JOE: Obama not socialist, he cut deficit; Obamacare * (1:41:20) JAIME, MN: Evil Joe. Mark addicted to cortisol * (1:44:45) JAIME: Politicians want/need money, Ilhan Omar in MN * (1:44:38) Sorry, Lawrence in Idaho! Call me tomorrow! * (1:48:54) twothirtyeight - "This Town Will Eat You" (2000, Regulate the Chemicals) BLOG https://www.thehakereport.com/blog/2024/4/23/the-hake-report-tue-4-23-24 PODCAST / Substack HAKE NEWS from JLP https://www.thehakereport.com/jlp-news/2024/4/23/universities-polluted-with-israel-palestine-war-drama-hake-news-tue-4-23-24 Hake is live M-F 9-11a PT (11-1CT/12-2ET) Call-in 1-888-775-3773 https://www.thehakereport.com/show VIDEO YouTube - Rumble* - Facebook - X - BitChute - Odysee* PODCAST Substack - Apple - Spotify - Castbox - Podcast Addict *SUPER CHAT on platforms* above or BuyMeACoffee, etc. SHOP Spring - Cameo | All My Links JLP Network: JLP - Church - TFS - Nick - Joel Get full access to HAKE at thehakereport.substack.com/subscribe
That's all you have to do! Chicago's best morning radio show now has a podcast! Don't forget to rate, review, and subscribe wherever you listen to podcasts and remember that the conversation always lives on the Q101 Facebook page. Brian & Kenzie are live every morning from 6a-10a on Q101. Subscribe to our channel HERE: https://www.youtube.com/@Q101 Like Q101 on Facebook HERE: https://www.facebook.com/q101chicago Follow Q101 on Twitter HERE: https://twitter.com/Q101Chicago Follow Q101 on Instagram HERE: https://www.instagram.com/q101chicago/?hl=en Follow Q101 on TikTok HERE: https://www.tiktok.com/@q101chicago?lang=enSee omnystudio.com/listener for privacy information.
(Part 24 of 30) Who's Buying You? Until You Sell Yourself, You Won't Sell Much...Ch. 24 Understanding Sells: Squint with Your Ears; Listen with Your Eyes
Joël conducted a thoughtbot mini-workshop on query plans, which Stephanie found highly effective due to its interactive format. They then discuss the broader value of interactive workshops over traditional talks for deeper learning. Addressing listener questions, Stephanie and Joël explore the strategic use of if and else in programming for clearer code, the importance of thorough documentation in identifying bugs, and the use of Postgres' EXPLAIN ANALYZE, highlighting the need for environment-specific considerations in query optimization. Episode mentioning query plans (https://bikeshed.thoughtbot.com/418) Query plan visualizer (https://explain.dalibo.com/) RailsConf 2024 (https://railsconf.org/) Episode 349: Unpopular Opinions (https://bikeshed.thoughtbot.com/349) Squint test (https://www.youtube.com/watch?v=8bZh5LMaSmE) Episode 405: Retro on Sandi Metz rules (https://bikeshed.thoughtbot.com/405) Structuring conditionals in a wizard (https://thoughtbot.com/blog/structuring-conditionals-in-a-wizard) Episode 417: Module docs (https://bikeshed.thoughtbot.com/417) Episode 416: Multidimensional numbers (https://bikeshed.thoughtbot.com/416) ruby-units gem (https://github.com/olbrich/ruby-units) Solargraph (https://marketplace.visualstudio.com/items?itemName=castwide.solargraph) parity (https://github.com/thoughtbot/parity) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville, and together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: Just recently, I ran a sort of mini workshop for some colleagues here at thoughtbot to dig into the idea of query plans and, how to read them, how to use them. And, initially, this was going to be more of a kind of presentation style. And a colleague and I who were sharing this decided to go for a more interactive format where, you know, this is a, like, 45-minute slot. And so, we set it up so that we did a sort of intro to query plans in about 10 minutes then 15 minutes of breakout rooms, where people got a chance to have a query plan. And they had some sort of comprehension questions to answer about it. And then, 15 minutes together to have each group share a little bit about what they had discovered in their query plan back with the rest of the group, so trying to balance some understanding, some application, some group discussion, trying to keep it engaging. It was a pretty fun approach to sharing information like that. STEPHANIE: Yeah. I wholeheartedly agree. I got to attend that workshop, and it was really great. Now that I'm hearing you kind of talk about the three different components and what you wanted people attending to get out of it, I am impressed because [laughs] there is, like, a lot more thought, I think, that went into just participant engagement that reflecting on it now I'm like, oh yeah, like, I think that was really effective as opposed to just a presentation. Because you had, you know, sent us out into breakout rooms, and each group had a different query that they were analyzing. You had kind of set up links that had the query set up in the query analyzer. I forget what the tool was called that you used. JOËL: I forget the name of it, but we will link it in the show notes. STEPHANIE: Yeah. It was helpful for me, though, because, you know, I think if I were just to have learned about it in a presentation or even just looked at, you know, screenshots of it on a slide, that's different still from interacting with it and feeling more confident to use it next time I find myself in a situation where it might be helpful. JOËL: It's really interesting because that was sort of the goal of it was to make it a bit more interactive and then, hopefully, helping people to retain more information than just a straight up, like, presentation would be. I don't know how you feel, I find that often when I go to a place like, let's say, RailsConf, I tend to stay away from more of the workshop-y style events and focus more on the talks. Is that something that you do as well? STEPHANIE: Yeah. I have to confess that I've never attended a workshop [laughs] at a conference. I think it's partly my learning style and also partly just honestly, like, my energy level when I'm at the conference. I kind of just want to sit back. It's on my to-do list. Like, I definitely want to attend one just to see what it's like. And maybe that might even inspire me to want to create my own workshop. But it's like, once I'm in it, and, you know, like, everyone else is also participating, I'm very easily peer pressured [laughs]. So, in a group setting, I will find myself enjoying it a lot more. And I felt that kind of same way with the workshop you ran for our team. Though, I will say a funny thing that happened was that when I went out into my breakout group with another co-worker, and we were trying to grok this query that you gave us, we found out that we got the hardest one, the most complicated one [laughs] because there were so many things going on. There was, like, multiple, like, you know, unions, some that were, like, nested, and then just, like, a lot of duplication as well, like, some conditions that were redundant because of a different condition happening inside of, like, an inner statement. And yeah, we were definitely scratching our heads for a bit and were very grateful that we got to come back together as a group and be like, "Can someone please help? [laughs] Let's figure out what's going on here." JOËL: Sort of close that loop and like, "Hey, here's what we saw. What does everybody else see?" STEPHANIE: Yeah, and I appreciated that you took queries from actual client projects that you were working on. JOËL: Yeah, that was the really fun part of it was that these were not sort of made-up queries to illustrate a point. These were actual queries that I had spent some time trying to optimize and where I had had to spend a lot of time digging into the query plans to understand what was going on. And it sounds like, for you, workshops are something that is...they're generally more engaging, and you get more value out of them. But there's higher activation energy to get started. Does that sound right? STEPHANIE: Yeah, that sounds right. I think, like, I've watched so many talks now, both in person and on YouTube, that a lot of them are easily forgettable [laughs], whereas I think a workshop would be a lot more memorable because of that interactivity and, you know, you get out of it what you put in a little bit. JOËL: Yeah, that's true. Have you looked at the schedule for RailsConf 2024 yet? And are there any workshops on there that you're maybe considering or that maybe have piqued your interest? STEPHANIE: I have, in fact, and maybe I will check off attending a workshop [laughs] off my bucket list this year. There are two that I'm excited about. Unfortunately, they're both at the same time slot, so I -- JOËL: Oh no. You're going to have to choose. STEPHANIE: I know. I imagine I'll have to choose. But I'm interested in the Let's Extend Rails With A Gem by Noel Rappin and Vision For Inclusion Workshop run by Todd Sedano. The Rails gem one I'm excited about because it's just something that I haven't had to do really in my dev career so far, and I think I would really appreciate having that guidance. And also, I think that would be motivation to just get that, like, hands-on experience with it. Otherwise, you know, this is something that I could say that I would want to do and then never get [chuckles] around to it. JOËL: Right, right. And building a gem is the sort of thing that I think probably fits better in a workshop format than in a talk format. STEPHANIE: Yeah. And I've really appreciated all of Noel's content out there. I've found it always really practical, so I imagine that the workshop would be the same. JOËL: So, other than poring over the RailsConf schedule and planning your time there, what has been new for you this week? STEPHANIE: I have a really silly one [laughs]. JOËL: Okay. STEPHANIE: Which is, yesterday I went out to eat dinner to celebrate my partner's birthday, and I experienced, for the first time, robots [laughter] at this restaurant. So, we went out to Hot Pot, and I guess they just have these, like, robot, you know, little, small dish delivery things. They were, like, as tall as me, almost, at least, like, four feet. They were cat-themed. JOËL: [laughs] STEPHANIE: So, they had, like...shaped like cat...they had cat ears, and then there was a screen, and on the screen, there was, like, a little face, and the face would, like, wink at you and smile. JOËL: Aww. STEPHANIE: And I guess how this works is we ordered our food on an iPad, and if you ordered some, like, side dishes and stuff, it would come out to you on this robot cat with wheels. JOËL: Very fun. STEPHANIE: This robot tower cat. I'm doing a poor job describing it because I'm still apparently bewildered [laughs]. But yeah, I was just so surprised, and I was not as...I think I was more, like, shocked than delighted. I imagine other people would find this, like, very fun. But I was a little bit bewildered [laughs]. The other thing that was very funny about this experience is that these robots were kind of going down the aisle between tables, and the aisles were not quite big enough for, like, two-way traffic. And so, there were times where I would be, you know, walking up to go use the restroom, and I would turn the corner and find myself, like, face to face with one of these cat robot things, and, like, it's starting to go at me. I don't know if it will stop [laughs], and I'm the kind of person who doesn't want to find out. JOËL: [laughs] STEPHANIE: So, to avoid colliding with this, you know, food delivery robot, I just, like, ran away from it [laughs]. JOËL: You don't know if they're, like, programmed to yield or something like that. STEPHANIE: Listen, it did not seem like it was going to stop. JOËL: [laughs] STEPHANIE: It got, like, I was, you know, kind of standing there frozen in paralysis [laughs] for a little while. And then, once it got, I don't know, maybe two or three feet away from me, I was like, okay, like, this is too close for comfort [laughs]. So, that was my, I don't know, my experience at this robot restaurant. Definitely starting to feel like I'm in the, I don't know, is this the future? Someone, please let me know [laughs]. JOËL: Is this a future that you're excited or happy about, or does this future seem a little bit dystopian to you? STEPHANIE: I was definitely alarmed [laughter]. But I'm not, like, a super early adopter of new technology. These kinds of innovations, if you will, always surprise me, and I'm like, oh, I guess this is happening now [laughs]. And I will say that the one thing I did not enjoy about it is that there was not enough room to go around this robot. It definitely created just pedestrian traffic issues. So, perhaps this could be very cool and revolutionary, but also, maybe design robots for humans first. JOËL: Or design your dining room to accommodate your vision for the robots. I'm sure that flying cars and robots will solve all of this, for sure. STEPHANIE: Oh yeah [laughter]. Then I'll just have to worry about things colliding above my head. JOËL: And for the listeners who cannot see my face right now, that was absolutely sarcasm [laughs]. Speaking of our listeners, today we're going to look at a group of different listener questions. And if you didn't know that, you could send in a question to have Stephanie and I discuss, you can do that. Just send us an email at hosts@bikeshed.fm. And sometimes, we put it into a regular episode. Sometimes, we combine a few and sort of make a listener question episode, which is what we're doing today. STEPHANIE: Yeah. It's a little bit of a grab bag. JOËL: Our first question comes from Yuri, and Yuri actually has a few different questions. But the first one is asking about Episode 349, which is pretty far back. It was my first episode when I was coming on with Chris and Steph, and they were sort of handing the baton to me as a host of the show. And we talked about a variety of hot takes or unpopular opinions. Yuri mentions, you know, a few that stood out to him: one about SPAs being not so great, one about how you shouldn't need to have a side project to progress in your career as a developer, one about developer title inflation, one about DRY and how it can be dangerous for a mid-level dev, avoiding let in RSpec specs, the idea that every if should come with an else, and the idea that developers shouldn't be included in design and planning. And Yuri's question is specifically the question about if statements, that every if should come with an else. Is that still an opinion that we still have, and why do we feel that way? STEPHANIE: Yeah, I'm excited to get into this because I was not a part of that episode. I was a listener back then when it was still Steph and Chris. So, I am hopefully coming in with a different, like, additional perspective to add as well while we kind of do a little bit of a throwback. So, the one about every if should come with an else, that was an unpopular opinion of yours. Do you mind kind of explaining what that means for you? JOËL: Yeah. So, in general, Ruby is an expression-oriented language. So, if you have an if that does not include an else, it will implicitly return nil, which can burn you. There may be some super expert programmers out there that have never run into undefined method for nil nil class, but I'm still the kind of programmer who runs into that every now and then. And so, implicit nils popping up in my code is not something I generally like. I also generally like having explicit else for control flow purposes, making it a little bit clearer where flow of control goes and what are the actual paths through a particular method. And then, finally, doing ifs and elses instead of doing them sort of inline or as trailing conditionals or things like that, by having them sort of all on each lines and balancing out. The indentation itself helps to scan the code a little bit more. So, deeper indentation tells you, okay, we're, like, nesting multiple conditions, or something like that. And so, it makes it a little bit easier to spot complexity in the code. You can apply, and I want to say this is from Sandi Metz, the squint test. STEPHANIE: Yeah, it is. JOËL: Where you just kind of, like, squint at your code so you're not looking at the actual characters, and more of the structure, and the indentation is actually a friend there rather than something to fight. So, that was sort of the original, I think, idea behind that. I'm curious, in your experience, if you would like to balance your conditionals, ifs with something else, or if you would like to do sort of hanging ifs. STEPHANIE: Hanging ifs, I like that phrase that you just coined there. I agree with your opinion, and I think it's especially true if you're returning values, right? I mean, in Ruby, you kind of always are. But if you are caring about return values, like you said, to avoid that implicit nil situation, I find, especially if you're writing tests for that code, it's really easy, you know, if you spot that condition, you're like, okay, great. Like, this is a path I need to test. But then, oftentimes, you don't test that implicit path, and if you don't enter the condition, then what happens, right? So, I think that's kind of what you're referring to when you talk about both. It's, like, easier to spot in terms of control flow, like, all the different paths of execution, as well as, yeah, like, saving you the headaches of some bugs down the line. One thing that I thought about when I was kind of revisiting that opinion of yours is the idea of like, what are you trying to communicate is different or special about this condition when you are writing an if statement? And, in my head, I kind of came up with a few different situations you might find yourself in, which is, one, where you truly just have, like, a special case, and you're treating that completely differently. Another when you have more of a, like, binary situation, where it's you want to kind of highlight either...more of a dichotomy, right? It's not necessarily that there is a default but that these are two opposite things. And then, a third situation in which you have multiple conditions, but you only happen to have two right now. JOËL: Interesting. And do you think that, like, breaking down those situations would lead you to pick different structures for writing your conditionals? STEPHANIE: I think so. JOËL: Which of those scenarios do you think you might be more likely to reach for an if that doesn't have an else that goes with it? STEPHANIE: I think that first one, the special case one. And in Yuri's email, he actually asked, as a follow-up, "Do we avoid guard clauses as a result of this kind of heuristic or rule?" And I think that special case situation is where a guard clause would shine because you are highlighting it by putting it at the top of a method, and then saying like, you know, "Bail out of this" or, like, "Return this particular thing, and then don't even bother about the rest of this code." JOËL: I like that. And I think guard clauses they're not the first thing I reach for, but they're not something I absolutely avoid. I think they need to be used with care. Like you said, they have to be in the top of your method. If you're adding returns and things that break out of your method, deep inside a conditional somewhere, 20 lines into your method, you don't get to call that a guard clause anymore. That's something else entirely. I think, ideally, guard clauses are also things that will break out of the method, so they're maybe raising exception. Maybe they're returning a value. But they are things that very quickly check edge cases and bail so that the body of the method can focus on expecting data in the correct shape. STEPHANIE: I have a couple more thoughts about this; one is I'm reminded of back when we did that episode on kind of retroing Sandi Metz's Rules For Developers. I think one of the rules was: methods should only be five lines of code. And I recall we'd realized, at least I had realized for the first time, that if you write an if-else condition in Ruby, that's exactly five lines [laughs]. And so, now that I'm thinking about this topic, it's cool to see that a couple of these rules converge a little bit, where there's a bit of explicitness in saying, like, you know, if you're starting to have more conditions that can't just be captured in a five-line if-else statement, then maybe you need something else there, right? Something perhaps like polymorphic or just some way to have branched earlier. JOËL: That's true. And so, even, like, you were talking about the exceptional edge cases where you might want to bail. That could be a sign that your method is doing too much, trying to like, validate inputs and also run some sort of algorithm. Maybe this needs to be some sort of, like, two-step thing, where there's almost, like, a parsing phase that's handled by a different object or a different method that will attempt to standardize your inputs and raise the appropriate errors and everything. And then, your method that has the actual algorithm or code that you're trying to run can just assume that its inputs are in the correct shape, kind of that pushing the uncertainty to the edges. And, you know, if you've only got one edge case to check, maybe it's not worth to, like, build this in layers, or separate out the responsibilities, or whatever. But if you're having a lot, then maybe it does make sense to say, "Let's break those two responsibilities out into two places." STEPHANIE: Yeah. And then, the one last kind of situation I've observed, and I think you all talked about this in the Unpopular Opinions episode, but I'm kind of curious how you would handle it, is side effects that only need to be applied under a certain condition. Because I think that's when, if we're focusing less on return values and more just on behavior, that's when I will usually see, like, an if something, then do this that doesn't need to happen for the other path. JOËL: Yes. I guess if you're doing some sort of side effect, like, I don't know, making a request to an API or writing to a file or something, having, like, else return nil or some other sentinel value feels a little bit weird because now you're caring about side effects rather than return values, something that you need to keep thinking of. And that's something where I think my thing has evolved since that episode is, once you start having multiple of these, how do they compose together? So, if you've got if condition, write to a file, no else, keep going. New if condition, make a request to an API endpoint, no else, continue. What I've started calling independent conditions now, you have to think about all the different ways that they can combine, and what you end up having is a bit of a combinatorial explosion. So, here we've got two potential actions: writing to a file, making a request to an API. And we could have one or the other, or both, or neither could happen, depending on the inputs to your method, and maybe you actually want that, and that's cool. Oftentimes, you didn't necessarily want all of those, especially once you start going to three, four, five. And now you've got that, you know, explosion, like, two to the five. That's a lot of paths through your method. And you probably didn't really need that many. And so, that can get really messy. And so, sometimes the way that an if and an else work where those two paths are mutually exclusive actually cuts down on the total number of paths through your method. STEPHANIE: Hmm, I like that. That makes a lot of sense to me. I have definitely seen a lot of, like, procedural code, where it becomes really hard to tell how to even start relating some of these concepts together. So, if you happen to need to run a side effect, like writing to a file or, I don't know, one common one I can think of is notifying something or someone in a particular case, and maybe you put that in a condition. But then there's a different branching path that you also need to kind of notify someone for a similar reason, maybe even the same reason. It starts to become hard to connect, like, those two reasons. It's not something that, like, you can really scan for or, like, necessarily make that connection because, at that point, you're going down different paths, right? And there might be other signals that are kind of confusing things along the way. And it makes it a lot harder, I think, to find a shared abstraction, which could ultimately make those really complicated nested conditions a little more manageable or just, like, easier to understand at a certain complexity. I definitely think there is a threshold. JOËL: Right. And now you're talking about nested versus non-nested because when conditions are sort of siblings of each other, an if-else behaves differently from two ifs without an else. I think a classic situation where this pops up is when you're structuring code for a wizard, a multi-step form. And, oftentimes, people will have a bunch of checks. They're like, oh, if this field is present, do these things. If this field is present, do these things. And then, it becomes very tricky to know what the flow of control is, what you can expect at what moment, and especially which actions might get shared across multiple steps. Is it safe to refactor in one place if you don't want to break step three? And so, learning to think about the different paths through your code and how different conditional structures will impact that, I think, was a big breakthrough for me in terms of taking the next logical step in terms of thinking, when do I want to balance my ifs and when do I not want to? I wrote a whole article on the topic. We'll link it in the show notes. So, Yuri, thanks for a great question, bringing us back into a classic developer discussion. Yuri also asks or gives us a bit of a suggestion: What about revisiting this topic and doing an episode on hot takes or unpopular topics? Is that something that you'd be interested in, Stephanie? STEPHANIE: Oh yeah, definitely, because I didn't get to, you know, share my hot topics the last episode [laughs]. [inaudible 24:23] JOËL: You just got them queued up and ready to go. STEPHANIE: Yeah, exactly. So, yeah, I will definitely be brainstorming some spicy takes for the show. JOËL: So, Yuri, thanks for the questions and for the episode suggestion. STEPHANIE: So, another listener, Kevin, wrote in to us following up from our episode on Module Docs and about a different episode about Multi-dimensional Numbers. And he mentioned a gem that he maintains. It's called Ruby Units. And it basically handles the nitty gritty of unit conversions for you, which I thought was really neat. He mentioned that it has a numeric class, and it knows how to do math [laughs], which I would find really convenient because that is something that I have been grateful not to have to really do since college [laughs], at least those unit conversions and all the things that I'd probably learned in math and physics courses [laughs]. So, I thought that was really cool, definitely is one to check out if you frequently work with units. It seemed like it would be something that would make sense for a domain that is more science or deals in that kind of domain. JOËL: I'm always a huge fan of anything that tags raw numbers that you're working with with a quantity rather than just floating raw numbers around. It's so easy to make a mistake to either treat a number as a quantity you didn't think of, or make some sort of invalid operation on it, or even to think you have a value in a different size than you do. You think you're dealing with...you know you have a time value, but you think it's in seconds. It's actually in milliseconds. And then, you get off by some big factor. These are all mistakes that I have personally made in my career, so leaning on a library to help avoid those mistakes, have better information hiding for the things that really aren't relevant to the work that I'm trying to do, and also, kind of reify these ideas so that they have sort of a name, and they're, like, their own object, their own thing that we can interact with in the app rather than just numbers floating around, those are all big wins from my perspective. STEPHANIE: I also just thought of a really silly use case for this that is, I don't know, maybe I'll have to experiment with this. But every now and then, I find the need to have to convert a unit, and I just pop into Google, and I'm like, please give me, you know, I'll search for 10 kilometers in miles or something [laughs]. But then I have to...sometimes Google will figure it out for me, and sometimes it will just list me with a bunch of weird conversion websites that all have really old-school UI [laughs]. Do you know what I'm talking about here? Anyway, I would be curious to see if I could use this gem as a command-line interface [laughs] for me without having to go to my browser and roll the dice with freecalculator.com or something like that [laughs]. JOËL: One thing that's really cool with this library that I saw is the ability to define your own units, and that's a thing that you'll often encounter having to deal with values that are maybe not one of the most commonly used units that are out there, dealing with numbers that might mean a thing that's very particular to your domain. So, that's great that the library supports that. I couldn't see if it supports multi-dimensional units. That was the episode that inspired the comment. But either way, this is a really cool library. And thank you, Kevin, for sharing this with us. STEPHANIE: Kevin also mentions that he really enjoys using YARD docs. And we had done that whole episode on Module Docs and your experience writing them. So, you know, your people are out there [laughs]. JOËL: Yay. STEPHANIE: And we talked about this a little bit; I think that writing the docs, you know, on one hand, is great for future readers, but, also, I think has the benefit of forcing the author to really think about their inputs and outputs, as Kevin mentions. He's found bugs by simply just going through that process in designing his code, and also recommends Solargraph and Solargraph's VSCode extension, which I suspect really kind of makes it easy to navigate a complex codebase and kind of highlight just what you need to know when working with different APIs for your classes. So, I recently kind of switched to the Ruby LSP, build with Shopify, but I'm currently regretting it because nothing is working for me right now. So, that might be the push that I need [laughs] to go back to using Solargraph. JOËL: It's interesting that Kevin mentions finding bugs while writing docs because that has absolutely been my experience. And even in this most recent round, I was documenting some code that was just sort of there. It wasn't new code that I was writing. And so, I had given myself the rule that this would be documentation-only PRs, no code changes. And I found some weird code, and I found some code that I'm 98% sure is broken. And I had to have the discipline to just put a notice in the documentation to be like, "By the way, this is how the method should work. I'm pretty sure it's broken," and then, maybe come back to it later to fix it. But it's amazing how trying to document code, especially code that you didn't write yourself, really forces you to read it in a different way, interact with it in a different way, and really, like, understand it in a deep way that surprised me a little bit the first time I did it. STEPHANIE: That's cool. I imagine it probably didn't feel good to be like, "Hey, I know that this is broken, and I can't fix it right now," but I'm glad you did. That takes a lot of, I don't know, I think, courage, in my opinion [laughs], to be like, "Yeah, I found this, and I'm going to, you know, like, raise my hand acknowledging that this is how it is," as supposed to just hiding behind a broken functionality that no one [laughs] has paid attention to. JOËL: And it's a thing where if somebody else uses this method and it breaks in a way, and they're like, "Well, the docs say it should behave like this," that would be really frustrating. If the docs say, "Hey, it should behave like this, but it looks like it's broken," then, you know, I don't know, I would feel a little bit vindicated as a person who's annoyed at the code right now. STEPHANIE: For sure. JOËL: Finally, we have a message from Tim about using Postgres' EXPLAIN ANALYZE. Tim says, "Hey, Joël, in the last episode, you talked a bit about PG EXPLAIN ANALYZE. As you stated, it's a great tool to help figure out what's going on with your queries, but there is a caveat you need to keep in mind. The query planner uses statistics gathered on the database when making decisions about how to fetch records. If there's a big difference between your dev or staging database and production, the query may make different decisions. For example, if a table has a low number of records in it, then the query planner may just do a table scan, but in production, it might use an index. Also, keep in mind that after a schema changes, it may not know about new indexes or whatever unless an explicit ANALYZE is done on the table." So, this is really interesting because, as Tim mentions, EXPLAIN ANALYZE doesn't behave exactly the same in production versus in your local development environment. STEPHANIE: When you were trying to optimize some slow queries, where were you running the ANALYZE command? JOËL: I used a combination. I mostly worked off of production data. I did a little bit on a staging database that had not the same amount of records and things. That was pretty significant. And so, I had to switch to production to get realistic results. So, yes, I encountered this kind of firsthand. STEPHANIE: Nice. For some reason, this comment also made me think of..., and I wanted to plug a thoughtbot shell command that we have called Parity, which lets you basically download your production database into your local dev database if you use Heroku. And that has come in handy for me, obviously, in regular development, but would be really great in this use case. JOËL: With all of the regular caveats around security, and PII, and all this stuff that come with dealing with production data. But if you're running real productions on production, you should be cleared and, like, trained for access to all of that. I also want to note that the queries that you all worked with on Friday are also from the production database. STEPHANIE: Really? JOËL: So, you got to see what it actually does, what the actual timings were. STEPHANIE: I'm surprised by that because we were using, like, a web-based tool to visualize the query plans. Like, what were you kind of plugging into the tool for it to know? JOËL: So, the tool accepts a query plan, which is a text output from running a SQL query. STEPHANIE: Okay. So, it's just visualizing it. JOËL: Correct. Yeah. So, you've got this query plan, which comes back as this very intimidating block of, like, text, and arrows, and things like that. And you plug it into this web UI, and now you've got something that is kind of interactive, and visual, and you can expand or collapse nodes. And it gives you tooltips on different types of information and where you're spending the most time. So, yeah, it's just a nicer way to visualize that data that comes from the query plan. STEPHANIE: Gotcha. That makes sense. JOËL: So, that's a very important caveat. I don't think that's something that we mentioned on the episode. So, thank you, Tim, for highlighting that. And for all of our listeners who were intrigued by leaning into EXPLAIN ANALYZE and query plan viewers to debug your slow queries, make sure you try it out in production because you might get different results otherwise. STEPHANIE: So, yeah, that about wraps up our listener topics in recent months. On that note, Joël, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeee!!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at: referrals@thoughtbot.com with any questions.
See you in institute!
EP106 of the #ATIpodcast w/ Barrett aka "Bear" welcome #BRENNEN of #Squint a #StLouis #Hardcore band from Sunday Drive Records! Barrett & Brennen, Lead Vocalist & Lyricist for Squint, open the chat w/ Brenna's early musical influences, including punk rock and metalcore. Brennen also talks about his personal growth and struggles with drinking during this time. He discusses how he rediscovered #hardcore music, in a more modern context and personal fitness during COVID; which in-turn led to his own personal growth. In the final act, the boys talk about the formation of Squint and their quick rise in the heavy music scene. The convo covers such topics as: recording vocal demos in a Home Depot parking lot, the inception SQUINT, the various backgrounds & influences of each band member, the relationship between Squint & #SundayDriveRecords, music catalog (now streaming), and their recent recording experience in the North East- heading toward an exciting new album to be release in 2024! SQUINT: IG: https://www.instagram.com/squintstl/ X: https://twitter.com/squintstl FB: https://www.facebook.com/squintstl/ BANDCAMP: https://squintstl.bandcamp.com/ LISTEN: https://dthw.sh/squint-feelitall hate5six set 1: https://www.youtube.com/watch?v=S4dVj50lIzM #Hate5six set 2: https://youtu.be/qQ2BRf0sBJ0?si=m9ZoiJdMtBTZo-Kj SUNDAY DRIVE RECORDS: https://www.sundaydrive-records.com/ Like, Listen, Enjoy, Subscribe to the ATI Podcast collective anywhere you get your podcast audio. https://flow.page/atipod --- Send in a voice message: https://podcasters.spotify.com/pod/show/ati-podcast/message Support this podcast: https://podcasters.spotify.com/pod/show/ati-podcast/support
In this episode, Brad and Tom dive into the revelation that the new Vulcan RipSaw gun appears to be based on the Stormer platform. Using screensharing, they analyze the similarities and differences between the two markers. Elsewhere, they welcome a new listener, showcase some impressive listener artwork and debate the merits of various anodizing companies. As always, hijinks ensue - especially when Brad vows to play Doom on a Luxe Idol if it's ever possible. Tune in for expert analysis, chaotic conversations and endless laughs from the herd. Support us by supporting our ad sponsors Save 10% with code "BIGDADDYG" Defconpaintballgear.com Experience one of New Brunswick's premier paintball fields. Moncton Paintball Pop the cool smoke. Rip Kingz Keep your game consistent. Ninja Paintball --- Send in a voice message: https://podcasters.spotify.com/pod/show/maritimepaintballpodcast/message
Memes: Squat and Squint Meme - "The first one that I'm going to describe is of a black woman and she's in this like light pink kind of jacket blazer, these black pants, and she's outside and she's kind of leaning down and she's like what I assume out of breath, tired, just like, 'Oh, my gosh, what, what, what am I doing?'"Drew Scanlon Reaction Meme / White Man Blinking Meme - "The second meme is of this white guy. And he's, I'm guessing maybe sitting, but he does this kind of blink thing. And I feel like I use that a lot when someone says something or does something that I'm like, 'Really, is that actually happening? Is this actually what we're doing?'"Follow us on Instagram @memesmetaphorsandmagic to view the meme(s) for this episode. And learn more about your personal year number with this free resource I made especially for you! Metaphors:MEMES AND METAPHORS ARE BRIDGES.MEMES AND METAPHORS ARE CONTAINERS.MATCHING A MEME WITH YOUR EXPERIENCES IS GOING THROUGH A ROLODEX OF EXPERIENCES.COMMUNICATION IS SENDING."Keep little things little." (MANAGEABLE MATTERS ARE SMALL IN SIZE.)"Let my light shine." (MY LIGHT IS MY POSSIBILITY AND MAGIC. THE DEGREE MY LIGHT IS SHINING REFLECTS MY CIRCUMSTANCES.)"Life's about choices." (LIFE IS A NEVER ENDING SERIES OF CHOICES.)LIFE IS A CREATIVE PROCESS.TWITTER/X IS A DUMPSTER FIRE.Underlying, or primary, metaphors:CONSIDERING IS WEIGHINGIMPORTANCE IS SIZE.EXISTENCE IS VISIBILITY. (aka "Representation matters.")CIRCUMSTANCES ARE WEATHER.GOOD IS BRIGHT/BAD IS DARK.KNOWING/UNDERSTANDING IS SEEING.MORE/POSITIVE/POWERFUL IS UP.Magic:8 Expression Number (Numerology)Communication® (Gallup CliftonStrengths®)Connectedness® (Gallup CliftonStrengths®)Context® (Gallup CliftonStrengths®)Ideation® (Gallup CliftonStrengths®)Intellection® (Gallup CliftonStrengths®)Responsibility® (Gallup CliftonStrengths®)Strategic® (Gallup CliftonStrengths®)Woo® (Gallup CliftonStrengths®)Type 2: The Helper (Enneagram)ESFJ Myers Briggs TypeSupport and Connect with Mika!Read her Dissertation! Unapologetically Black: A Sista Circle Study Highlighting the Brilliant, Bold, and Brave Leadership Approaches of Black Women in Student Affairs by Dr. Shamika KarikariFollow her on Instagram @thecincymamaFollow her on Twitter/X @MikaKarikariResources:A Hidden Wholeness: The Journey Toward an Undivided Life by Parker PalmerThe Enlightened Eye: Qualitative Inquiry and the Enhancement of Educational Practice by Elliot W. Eisner The Art of Gathering: How We Meet and Why It Matters by Priya ParkerFoundations of Meaning: Primary Metaphors and Primary Scenes by Joseph Grady
David Gale was the first significant client that hired my old architecture/planning firm, back in 2001. Dave was already a successful developer of master-planned communities in Lee's Summit, Missouri, and we worked together for several years to create Kansas City's first and largest Traditional Neighborhood Development called New Longview. Cutting out the jargon, that means the first new, walkable community planned along the lines of older communities.Gale Communities has worked for years on the Winterset developments in Lee's Summit, and Dave has brought his passion and vision to suburban development. My experience is, he's always tried to push the envelope of quality development, while maintaining a sharp focus on what is profitable. He blends a deep knowledge of marketing and business, with a Canadian's eye on creating community.Twenty years later, I really enjoyed having this conversation with Dave. His perspective has always been unique in the KC market, and his success speaks for itself. Hopefully, his work can inspire younger people about what is possible and the difference they can make in the lives of people through thoughtful development.Find more content on The Messy City on Kevin's Substack page.Music notes: all songs by low standards, ca. 2010. Videos here. If you'd like a CD for low standards, message me and you can have one for only $5.Intro: “Why Be Friends”Outro: “Fairweather Friend” Get full access to The Messy City at kevinklinkenberg.substack.com/subscribe
Welcome back, everyone. It's been a minute, but it looks like that minute is up—the tenth season of The Anhedonic Headphones Podcast is upon us. It's the 54th episode overall since the show began, and in the first episode of the new season, Kevin welcomes his first in person guest in three years, Anastasia Stier. The two talk about poor mental health, how you never grow out of being an emo kid, and fixating on Julien Baker. For additional information about Anhedonic Headphones, please click here; or follow Kevin on Instagram and on Twitter. And please give the podcast he co-hosts with Alyssa Savino, A Reasonable Day, a listen. Intro Music: “6 Underground,” written by John Barry, Chris Corner, Liam Howe, and Ian Pickering; performed by Sneaker Pimps. Becoming X, Clean Up, 1997. Closing Music: “Numb,” written by Beth Gibbons, Geoff Barrow, and Adrian Utley; performed by Portishead. Dummy, Go Disc, 1994. Music Credits: “I Won't Stay Long,” written by Sam Nash; performed by Sixpence None The Richer. Sixpence None The Richer, Squint, 1997. “Telethon,” written by Emily Haines; performed by Emily Haines and The Soft Skeleton. What Is Free to A Good Home?, Last Gang, 2007. “Reckless” written and performed by Tilly and The Wall. Wild Like Children, Team Love, 2004. “This Is Our Emergency,” written and performed by Pretty Girls Make Graves. The New Romance, Matador, 2003. “Empty,” written and performed by Metric. Live It Out, Last Gang, 2005. “Sea of Love” written by Philip Baptiste and George Khoury; performed by Cat Power. The Covers Record, Matador, 2000. “Buttoned Down,” written and performed by Straylight Run. The Needles The Space, Universal, 2007. “This is The Last Time,” written by Aaron Dessner, Bryce Dessner, and Matt Berninger; performed by The National. Trouble Will Find Me, 4AD, 2013. “Hurt Less,” written and performed by Julien Baker. Turn Out The Lights, Matador, 2017 “I'll Never Smile Again,” written by Ruth Lowe; performed by Tommy Dorsey and His Orchestra and Frank Sinatra. Victor, 1940.
Scott & Tim Sports Show Season 7 Episode 10 “Holiday Extravaganza 2023!” with Squint Martindale 12/2821/2023 Huge show! We go big by covering a ton of different sports topics. It is too long to list! NFL, MLB, NHL, Golf, College Football Playoffs and much much more. We bring back Squint Martindale who gives us some great trivia questions. Follow us on Twitter: @scottohsman @tboyle15 Instagram Scottohsman Tboyle15
Squint is a FIlm Director and photographer who leads visual composition, brand strategy, and creative director for some of the biggest celebrities and companies in the world. From Michael Jordan to Michael B. Jordan, Squint has captured iconic images of the most well-known faces of our generation in a manner that exudes authenticity. From Apple to Nike, the boldest brands in the world turn to Squint for his creative vision and execution. As comfortable in a room full of venture capital billionaires debating rap music as he is in a room full of hip-hop stars debating tech investments, Squint's authenticity is contagious. He is too caring to clout-chase and too busy to brag. Squint pours high-octane love into the world. And that love comes back to him. Squint grew up in Palo Alto and his favorite place in the world is the nearby Bay Bridge, which connects the global hub of technology, San Francisco and the mecca of arts and activism, Oakland. Squint doesn't just move between these worlds, he weaves them together. Squint has written and produced shows with NFL Super Bowl winner Marshawn Lynch, shot magazine cover photos for Harley Davidson, and directed a documentary for Grammy award winning artist Lecrae. From television programming to print, the deliverables Squint produces lead to increased revenue for his clients and collaborators. Squint's role extends beyond the production of media content to developing and operationalizing the strategies for shaping clients' public identities in ways that center their authenticity and unique flavor. Throughout his career, Squint has worked with brands including HBO, ESPN, YouTube, Google, Facebook, Lyft, Monster, Roc Nation, Bleacher Report, Beast Mode Productions, No Script, and Shoe Palace. His client roster includes Stephen Curry, Draymond Green, Aaron Gordon, Frank Gore, and D'Angelo, H.E.R and Goapele. If you are lucky enough to get to know Squint, one day he might hand you his phone and show you beautiful photos he's snapped of some of your favorite artists and athletes that capture the humanity so often obscured by fame. Squint studied photography and film direction at the Academy of Arts University, and studied design as a Fellow at Stanford University's d.school. He is now passionate about supporting the next generation of artists and entrepreneurs through his work with StreetCode Academy, a nonprofit organization that is preparing the next generation of technology leaders. Whether it's for Fortune 500 companies, world class athletes, or local nonprofits, Squint's mission is as clear as his camera lens: to capture the full essence of his subjects and what they represent to themselves and to the world. His clients see him as a friend first. Ask anyone who has worked with Squint and they will tell you the same thing—no matter what they are working on, they always want him involved. While this is undoubtedly due to his perspective and technical talent, it is also due to the foundation he builds of trust, sincerity, gratitude, and the secret ingredient that makes everything Squint touches special: love.
Podcast #673 celebrates the guitar with honorees Raspberries, Leatherman, Values Here, Squint, Why Bother?, Outtacontroller, Obra Negra, & Netherfrost.
The time has finally come for us to cover Steve Taylor properly on the show. He's come up many times before so we're diving into his 1993 record, Squint, in honor of its 30th anniversary. Will we cross The Finish Line with both hands raised, or will we too buckle under these Curses? We spent some time on The Moshing Floor, and we're ready for that old-time Easy Listening.Visit colliderecords.com and use promo code “churchjamsnow” for 20% off your first purchase!If you like what you hear, please rate, review, subscribe, and follow!Connect with us here:Email: churchjamsnowpodcast@gmail.comIG: @churchjamsnowTwitter: @churchjamsnowFB: https://www.facebook.com/churchjamsnowpodcastPatreon: https://www.patreon.com/churchjamsnowpodcast
Greta's stuffed Octopus, Rashida Tlaib last week. Tons of calls on Religion: Islam, Koran, Bible, "truth," history, and IMMIGRANTS! The Hake Report, Tuesday, October 24, 2023 AD TIME STAMPS * (0:00:00) Start* (0:02:32) Topics: Greta's octopus, Rashida mess last week…* (0:04:38) DAVID, FL: Devalued dollar, Trump haters* (0:08:54) DAVID story: immigrants, early passing, giving* (0:14:34) DAVID rapture, Matt 24, Hake tunes out* (0:16:50) ALEX, TX: Bitcoin, scam, valued number on screen* (0:20:20) ALEX: Islam origin, vocal inflection, uptalk* (0:23:31) ALEX: External vs internal truth? Confidence, love* (0:28:02) Greta Thunberg's stuffed octopus* (0:32:13) Rashida Tlaib, Dr Omar Suleiman, hospital explosion (old)* (0:38:46) JAIME, MN: JLP interviews, Islam, Jewish writings* (0:47:48) JAIME: Corruption in the Bible?* (0:56:49) Joel Friday TV* (0:59:03) "Cash Cow (A Rock Opera in Three Small Acts)" - Steve Taylor (1995, Squint) * (1:05:17) ZEUS, FL: Bible convo, version, Ethiopian, Solomon* (1:16:40) Research, Gnosis, Gnosticism* (1:18:02) JESSE, GA: Islam, Abraham, Josephus, war, Dracula, Ethiopia* (1:28:01) CHUCK, NJ: Economy, Immigration, Oil, 10 Commandments* (1:46:04) Supers: Trump vs US haters. Fertility propaganda!* (1:51:23) HECTOR, NM: Nixon removed gold standard* (1:53:22) "Children, Children" - The Donut Man (2001, Praise Him)BLOG https://www.thehakereport.com/blog/2023/10/24/the-hake-report-tue-10-24-23 PODCAST by HAKE SubstackLive M-F 9-11 AM PT (11-1 CT / 12-2 ET) Call-in 1-888-775-3773 – thehakereport.com VIDEO YouTube | Rumble* | Facebook | X | BitChute | Odysee* PODCAST Apple | Spotify | Castbox | Substack (RSS) *SUPER CHAT on asterisked above, or BuyMeACoffee | Streamlabs | Ko-fi SUPPORT HAKE Substack | SubscribeStar | Locals || SHOP Teespring ALSO SEE Hake News on The JLP Show | Appearances (other shows, etc.) JLP Network: JLP | Church | TFS | Hake | Nick | Joel Get full access to HAKE at thehakereport.substack.com/subscribe
This week, Gaspare shares his revolutionary new co-teaching communication technique: The Squint Method. Meanwhile, Joe discovers a new button that will take the podcast to a whole new level, and the guys read the spookiest listener email yet.
THURSDAY HR 5 The K.O.D. - His highness contemplates a statue of himself. The City of Orlando wants ides to develop the space under I4 Monster Messages & Hot Takes Bring the cone heads back?
Get Ready! This is a super rad episode. Wiley and Mic chat with Logan and Nick of Anklebiter. They talk about the bands origin, the story behind their name, straight edge, their latest record and more. It's a great convo with some really great people in a kick ass band. Next up, Brennen from Squint drops in to share their new single "All". Coffee and Hardcore is super stoked to drop this episode. Here we go! Anklebiter Bandcamp Linktree Merch "Pearl" Video Squint Bandcamp Merch Coffee & Hardcore Setlist Featuring Anklebiter and Squint --- Support this podcast: https://podcasters.spotify.com/pod/show/coffee-and-hardcore/support
The Ten Minute Bible Hour Podcast - The Ten Minute Bible Hour
ESTHER 2:1-4 Thanks to everyone who supports TMBH at patreon.com/thetmbhpodcast You're the reason we can all do this together! Discuss the episode here Opening song, "A Premonition" from the album, "The Clamour and the Crash" by Jeff Foote
I Don't Wanna Hear It Podcast221 - Deep Dives For Dummies: Epitaph Records (Part 1)We finally arrive at our punk rock ground zero: the almighty Epitaph Records. Mr. Brett created a crack-fueled juggernaut that fucked every major label right in their goddamn face for the entirety of the 1990's. This is their story. At least, according to us and our farts.Check out more of our stuff at I Don't Wanna Hear It and join the Patreon, jabroni. I mean, if you want. Don't be weird about it. Oh, and we publish books now at WND Press because we want to be bankrupted by a dying medium.We now have a Big Cartel where you can buy shirts, pins, mugs, and coffee.Also, you should listen to our 2021 Christmas special: A Black Metal Christmas Carol, our 2022 Halloween special: Ghoulie Ghoulie Ghoul, Where Are You?, our 2022 Christmas Special: How the Stench Stole Christmas, as well as Mikey's true crime podcast, Wasteland and Shane's psychology podcast, Why We Do What We Do.Aaannnddd... our good buddy and frequent third host Matt Moment is in a great hardcore band called Contact. Check 'em out! You can preorder their upcoming record, Before and Through and Beyond All Time right here from Patient Zero Records.Episode Links:For My SinsDomainSquintInto the Unknown by Bad ReligionSuffer by Bad Religion No Control by Bad ReligionRancid '93 by Rancid Against the Grain by Bad Religion White Trash, Two Heebs, and A Bean by NOFXSmash by The OffspringLet's Go by RancidPunk In Drublic by NOFX...And Out Come the Wolves by Rancid
Shout out to our Aries queen and guest, @misskeea!! Cydney and Shanna's knowledge of Aries get tested in a fun game of Taboo...who are you betting on? The sex work industry is ever-evolving and we have questions LOL! Also, fuck all the creeps who hide behind their power and religion and take advantage of others. Listen to the end for a juicy #whorestory from our guest lmao
Decades of Horror | Movie Reviews of 1970s Classic Horror Films
“The only good thing about this port is the inn of Abu Jamil the Squint, who, for six months, I have been dreaming of his roasted sheep's eyes.” Ah, yes. […]
Gen-Z, blacks, women against 2A in TN! Hake takes black callers (some entertaining). "Irregardless" per Fake News dictionary! The Hake Report, Friday, April 7, 2023 AD TIME STAMPS * 0:00:00 Forget you, fascists! Jesus loves you, commies!* 0:01:37 Topics: Dems ousted! Michael Steele, Hillary mad* 0:03:17 Hey, guys! Forest Home tee* 0:05:53 TONY, CA: Why Republicans going to jail?* 0:16:22 WILLIAM: blacks today haven't gone through anything!* 0:25:20 JOHN, KY: C-word; Young white leaders post-Trump?* 0:36:48 Michael Steele, ex-RNC, kisses up to evil Gen-Z!* 0:47:16 Goofy afro-male Justin Pearson preaching* 0:51:31 Gloria Johnson hugs Justin Jones (Olivia Troye tweet)* 0:54:18 "Jesus Is for Losers" - Steve Taylor (1993, Squint)* 1:00:20 Supers: God, music, libs, homeless, the white world* 1:05:34 HAMZA: "WeLL rEgULAtEd MiLiTiA," caring about kids* 1:13:33 Anger causes murder, chat on Hamza* 1:15:39 "Irregardless" is a word, per Fake News dictionary!* 1:22:58 Supers: Good Friday, fake news, govt regulation, slavery* 1:25:27 JESSE, GA: Let staff be armed! To libs: What is a man?* 1:29:17 MAZE, OH: black family got land given back to them* 1:39:32 Olivia Troye, White House TRAITOR!* 1:45:17 Hillary: Ricky Vaughn fooled thousands of my black voters!* 1:49:59 JOE, AZ: I don't want you banned. I met Michael Steele.* 1:52:25 JC, AR: We dislike each other.* 1:54:07 FYI: JLP's YouTube live shows get deleted! * 1:55:01 "Easter Rise Up" - Mary Rice Hopkins (2004, Sing Through the Year)BLOG https://www.thehakereport.com/blog/2023/4/7/two-black-dems-ousted-quiet-the-woman-next-fri-4-7-23 PODCAST: SUBSTACKThe Hake Report LIVE M-F 9-11 AM PT (12-2 ET) Call-in 1-888-775-3773 thehakereport.com VIDEO YouTube | Rumble* | BitChute | Facebook | Twitter | Odysee* | DLive PODCAST Apple | Spotify | Castbox | Podcast Addict | Pocket Casts | Substack (RSS) *SUPER CHATS on asterisked platforms, or Ko-fi | BuyMeACoffee | Streamlabs SUPPORT / EXCLUSIVES Substack | SubscribeStar | Locals || SHOP Teespring SEE ALSO Hake News on The JLP Show | Appearances elsewhere (other shows, etc.) Get full access to HAKE at thehakereport.substack.com/subscribe
Anti-2A female-minded libs! WEAK female-minded Repubs! Women playing politics! Horrific crime-ridden cities!The Hake Report, Thursday, April 6, 2023 AD TIME STAMPS * 0:00:00 Intro / Smartmouth anti-gun military gal* 0:02:50 Topics: Anti-2A libs, political women, crime-ridden cities* 0:05:18 Hey, guys! 100-percent cotton is best, no polyester!* 0:07:24 CHRISTOPHER: "Love" your enemy? (atheist)* 0:20:50 DENNY, BULGARIA: Story of Hassan-i Sabbah infiltration* 0:27:27 Lawrence O'Donnell (MSNBC) and armed forces lady again* 0:35:17 TN Republicans vs 2 blacks and a "lady" * 0:54:51 "Curses" - Steve Taylor (1993, Squint)* 1:00:45 Supers: Why evil operates thru the left* 1:02:07 ART (sorry, kids!) women different roles from men!* 1:12:49 Wisconsin Supreme Court: Ronna McDaniel on abortion* 1:19:37 El Salvador's Nayib Bukele on Trump indictment* 1:23:44 WILLIAM: "Hush money" and lies are not crimes* 1:28:35 Super: Bring back kids' music! Women! Evil against Trump!* 1:31:10 Crime in SF: CashApp guy killed! London Breed. Newsom.* 1:41:19 Chicago: 800 murders, highest in 25 years!* 1:42:51 NYC smells, per MTG. AOC mad at truth!* 1:45:42 JC, AR: Rasputin! Why do you hate me?* 1:50:27 NATE: Talking and laughing wild, phone breaks up!* 1:53:33 Discrimination; Trump a false solution to self-created problem?* 1:57:23 "Jesus Washed Judas' Feet" - Lust Control (1989, Dancing Naked)BLOG https://www.thehakereport.com/blog/2023/4/6/female-minded-pro-crime-libs-against-guns-thu-4-6-23 PODCAST: SUBSTACKThe Hake Report LIVE M-F 9-11 AM PT (12-2 ET) Call-in 1-888-775-3773 thehakereport.com VIDEO YouTube | Rumble* | BitChute | Facebook | Twitter | Odysee* | DLive PODCAST Apple | Spotify | Castbox | Podcast Addict | Pocket Casts | Substack (RSS) *SUPER CHATS on asterisked platforms, or Ko-fi | BuyMeACoffee | Streamlabs SUPPORT / EXCLUSIVES Substack | SubscribeStar | Locals || SHOP Teespring SEE ALSO Hake News on The JLP Show | Appearances elsewhere (other shows, etc.) Get full access to HAKE at thehakereport.substack.com/subscribe
Gavin Newsom's values. Callers on Trump indictment (and "full-auto" 2A). "Trans" madness. "Knowledge Is Poison" Hake tee. The Hake Report, Wednesday, April 5, 2023 AD TIME STAMPS * 0:00:00 Gavin Newsom: "Campaign for dEmOcRaCy!"* 0:04:08 Topics: Trans mess, Attack on Trump (Pardon Assange?)* 0:06:34 Hey, guys! MDD appearance! Knowledge is Poison tee* 0:12:12 HAMZA trolls Hake: Bush "stole" (disavow) Gore's election!* 0:19:15 WILLIAM: No "assault weapons" (full-auto); black family murder* 0:30:53 Supers: Apples vs. Oranges (semi-auto); Hake's fave pet? * 0:38:23 ALEXIS: I was mad at Trump indictment, till I read the Bible!* 0:48:44 Canada's "deadly serious" HaTe SpEeCh bill; "Zoey" Tur* 0:58:36 "The Finish Line" - Steve Taylor (1993, Squint)* 1:05:23 Supers: "Ribs" vs. Ladies, "Richards" clarification* 1:09:51 MAZE on Trump indictment ("bright" = dumb to her)* 1:21:29 MAZE vs Super Chats (Azzmador)* 1:29:41 Super: 1 Timothy 2: 12, "SHE MUST BE SILENT"* 1:31:11 ART on Trump and Maze, etc. (phone system problem!)* 1:38:54 KimDotcom on Trump: shoulda pardoned Assange. Fool.* 1:45:34 Wisconsin elects pro-abortion female "justice"* 1:53:45 Knowledge is poison tee; Banana Republic defined (Azz)* 1:58:47 "Stop It (Trump Remix)" - Placeboing (2016)My appearance yesterday: Should Trump Have Been Arrested and Charged? Hake vs Mathew on Modern-Day Debate (TheHakeReport blog post) (video on YouTube) BLOG https://www.thehakereport.com/blog/2023/4/5/the-hake-report-wed-4-5-23 PODCAST: SUBSTACKThe Hake Report LIVE M-F 9-11 AM PT (12-2 ET) Call-in 1-888-775-3773 thehakereport.com VIDEO YouTube | Rumble* | BitChute | Facebook | Twitter | Odysee* | DLive PODCAST Apple | Spotify | Castbox | Podcast Addict | Pocket Casts | Substack (RSS) *SUPER CHATS on asterisked platforms, or Ko-fi | BuyMeACoffee | Streamlabs SUPPORT / EXCLUSIVES Substack | SubscribeStar | Locals || SHOP Teespring SEE ALSO Hake News on The JLP Show | Appearances elsewhere (other shows, etc.) Get full access to HAKE at thehakereport.substack.com/subscribe
Trump "arrest" today! Callers: Easter's evil! Wear MAGA hats to work? NASA diversity! "Trans" pastor against 2A! The Hake Report, Tuesday, April 4, 2023 AD Catch Joel Friday TV on YouTube after The Hake Report! TODAY, Tuesday, April 4, 2023 AD, at 5 PM PT (8 ET), catch Hake vs. Mathew from Caught in the Middle on Modern-Day Debate — about Trump's "arrest." TIME STAMPS * 0:00:00 George Santos supports Trump amid persecution* 0:07:10 Topics: Astronauts, Zelensky, Tatarsky, preacher dudette* 0:08:55 Hey, guys! Josh Donaldson Yankees jersey* 0:11:55 CJ, TX: Why Easter is all wrong vs REAL holidays* 0:28:16 Supers: MTG for Trump, April Fools politicians* 0:35:51 KEITH, IL: Be fearless men, protest, boycott libs!* 0:48:13 DANIEL, TX: Wear a MAGA hat at work if you feel* 0:55:04 "Sock Heaven" - Steve Taylor (1993, Squint) * 1:03:08 "Diverse" NASA astronauts for moon mission* 1:11:23 Supers: Hake's song socked! Socks darned for eternity?* 1:13:08 FREDERICK, CA: Trump charges, Egyptian "passover"* 1:25:48 Storm's a'blowin' through the South and Midwest* 1:27:23 Zelensky unconcerned at terror attack in St. Petersberg* 1:30:49 Female "trans" preacher scapegoats guns, cites Jesus* 1:38:29 Ron DeSantis signs bill: Concealed carry w/o permit!* 1:42:23 Super: Females in chat; Joel Friday TV next* 1:42:56 NATE FALSE START* 1:43:22 BRIAN, NC: Josh Donaldson, competitive Yankees player* 1:47:31 NATE, CA: I'm buying a ford! (Cusses… disconnects!)* 1:49:24 ART, OH: Banned Mark! Gay Santos! Democrat wars!* 1:55:56 Closing: Libs are pro-criminal! Uncle Tom II…* 1:57:01 "I'm Troubled in Mind" - Spiritual Workshop Paris BLOG https://www.thehakereport.com/blog/2023/4/4/the-hake-report-tue-4-4-23 PODCAST: SUBSTACKThe Hake Report LIVE M-F 9-11 AM PT (12-2 ET) Call-in 1-888-775-3773 thehakereport.com VIDEO YouTube | Rumble* | BitChute | Facebook | Twitter | Odysee* | DLive PODCAST Apple | Spotify | Castbox | Podcast Addict | Pocket Casts | Substack (RSS) *SUPER CHATS on asterisked platforms, or Ko-fi | BuyMeACoffee | Streamlabs SUPPORT / EXCLUSIVES Substack | SubscribeStar | Locals || SHOP Teespring SEE ALSO Hake News on The JLP Show | Appearances elsewhere (other shows, etc.) Get full access to HAKE at thehakereport.substack.com/subscribe
Joël has been pondering another tool for thought from Maggie Appleton: diagramming. What does drawing complex things reveal? Stephanie has updates on how Soup Group went, plus a clarification from last week's episode re: hexagons and tessellation. They also share the top most impactful articles they read in 2022. This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. Maggie Appleton tools for thought (https://maggieappleton.com/tools-for-thought) Squint test (https://www.youtube.com/watch?v=8bZh5LMaSmE&themeRefresh=1) Cardinality of types (https://guide.elm-lang.org/appendix/types_as_sets.html) Honeycomb hexagon construction (https://www.nature.com/articles/srep28341) Coachability (https://cate.blog/2021/02/22/coachability/) Strangler Fig Pattern (https://shopify.engineering/refactoring-legacy-code-strangler-fig-pattern) Finding time to refactor (https://thoughtbot.com/blog/finding-the-time-to-refactor) Parse don't validate (https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/) Errors cluster around boundaries (https://thoughtbot.com/blog/debugging-at-the-boundaries) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot that has basically become a two-person book club between me and Joël. [laughter] JOËL: I love that. STEPHANIE: I'm so sorry, I had to. I think we've been sharing so many things we've been reading in the past couple of episodes, and I've been loving it. I think it's a lot of the conversations we have off-air too, and now we're just bringing it on on-air. And I am going to lean into it. [laughs] JOËL: I like it. STEPHANIE: So, Joël, what's new in your world? JOËL: So, in a recent episode, I think it was two episodes ago, you shared an article by Maggie Appleton about tools for thought. And I've kind of been going back to that article a few times in the past few weeks. And I feel like I always see something new. And one tool for thought that Maggie explicitly mentions in the article is diagramming, and that's something that we've used as an industry for a long time to deal with conditional logic is just writing a flow diagram. And I feel like that's such a useful tool sometimes to move away from code and text into visuals and draw your problem rather than write your problem. It's often useful either when I'm trying to figure out how to structure some of my own code or when I'm reviewing a PR for somebody else, and something just feels not quite right, but I'm not quite sure what I want to say. And so drawing the problem all of a sudden might give me some insights, might help me identify why does something feel off about this code that I can't quite put into words? STEPHANIE: What does drawing complex things reveal for you? Is there a time where you were able to see something that you hadn't seen before? JOËL: One thing I think it can make more obvious is the shape of the problem. When we describe a problem in words, sometimes there's a sense of like, okay, there are two main paths through this problem or something. And then when we do our code, we try to make it DRY, and we try all these things. And it's really hard to see the flow of logic. And we might actually have way more paths through our code than are actually needed by the initial problem definition. I think we talked about this in a past episode as well, structuring a multi-step form or a wizard. And oftentimes, that is structured way more complex than it needs to be. And you can really see that difference when you draw out a flow diagram, the difference between forcing everything down a single linear flow with a bunch of little independent conditions versus branching up front three or four or five ways, however many steps you have. And then, from there, it's just executing code. STEPHANIE: I have two thoughts here. Firstly, it's very tragic that this is an audio medium only [laughs] and not also a visual one. Because I think we've joked in the past about when we've, you know, talked about complex problems and branching conditionals and stuff like that, like, oh, like, if only we could show a visual representation to our listeners. [laughs] And secondly, now that makes a lot more sense why there are so many whiteboards just hanging out in offices everywhere. [laughs] JOËL: We should use them more. It's interesting you mentioned the limitations of an audio format that we have. But even just describing the problem in an audio format is different than implementing it in code. So if I were to describe a problem to you that says, oh, we have a multi-step form that has three different steps to it, in that description, you might initially think, oh, that means I want to branch three ways up front, and then each step will need to do some processing. But if you look at the implementation in the code, maybe whoever coded it, and maybe that's yourself, will have done it totally differently with a lot more branching than just three up front because it's a different medium. STEPHANIE: That's a really good point. I also remember reading something about how you can reason about how many branches a piece of code might have if you just look at the structure of the lines of code in your editor if you either step away from it and are just looking at the code not really able to see the text itself but just the shape that it makes. If you have some shorter lines and then a handful of longer lines, you might be able to see like, oh, like these are multiple conditionals happening, which I think is kind of related to what you're saying about taking a piece of code and then diagramming it out to really see the different paths. And I know that that can also be obscured a little bit if you are stylistically using different syntax. Like, if you are using a guard clause to return early, that's a conditional, but it gets a bit hidden from the visual representation than if you had written out the full if statement, for example. JOËL: I think that's a really interesting distinction that you bring up because a lot of languages provide syntactic sugar for common conditional tasks that we do. And sometimes, that syntactic sugar will almost obfuscate the fact that there is a conditional happening at all, which can be great in a lot of cases. But when it comes to analyzing and particularly comparing different implementations, a second conversion that I like to do is converting all of the conditional code to some standardized form, and, for me, that's typically just your basic if...elsif...else expressions. And so any fancy Boolean operators we're doing, any safe navigation that we're doing around nil, maybe some inline conditionals, early returns, things like that, all of the implicit elses that are involved as well, putting them all into some normalized form then allows me to compare two implementations with each other. And sometimes, two approaches that we initially thought were identical, just with different syntax, turned out to have slightly different behavior because maybe one has this sort of implicit branch that the other one doesn't. And by converting to a normalized syntax, all of a sudden, this difference becomes super obvious. To be clear, this is not something I do necessarily in the actual code that I commit, not necessarily writing everything long-form. But definitely, when I'm trying to think about conditional code or analyzing somebody else's code, I will often convert it to long-form, some normalized shape so that I can then see some things about it that were not obvious in the final form. Or to make a comparison with something else, and then you can compare apples to apples and say, okay, both these approaches that we're considering in normalized form, here's what they look like. There's some difference here that we do care about or don't care about. STEPHANIE: That's really interesting. I find it very curious that there is a value in having the long-form approach of writing the code out and being able to identify things. But then the end result that we commit might not look like that and be shortened and be kind of, quote, unquote, "polished," or at least condensed with syntactic sugar. And I'm kind of wondering why that might be the case. JOËL: I think a lot of that will come down to your personal or your company's style guide. Personally, I think I do lean a little bit more towards a slightly more explicit form. But there are plenty of times that I will use syntactic sugar as well, as long as everybody knows what it does. But sometimes, it will come at the cost of other analysis techniques. You had mentioned the squint test earlier, which I believe is a term coined by Sandi Metz. STEPHANIE: I think it might be. That rings a bell. JOËL: And that is a benefit that you get by writing explicit conditionals all the time. But sometimes, it is much nicer to write code that is a little bit more terse. And so you have to do the trade-offs there. STEPHANIE: Yeah, that's a really good point. JOËL: So that's two of the sort of three formats that I was thinking about for converting conditional code to gain more insight. The other format is honestly a little bit weird. It's almost a stretch. But from my time spent working with the Elm language, I learned how to use its type system, which uses a concept called algebraic data types, or some languages will call these tagged unions, some languages will call these sum types. This concept goes by a lot of different names. But they're used to define types into model data. But there's a really fun property, which is that you can model conditional code using this as well. And so you can convert executable code into these algebraic data types. And now, you can apply a lot of tools and heuristics that you have from the data modeling world to this conditional code. STEPHANIE: Do you have a practical example? JOËL: So a classic thing that data modelers will say is you should make impossible states impossible. So in practice, this means that when you define a type using these algebraic data types, you should not be able to create more distinct values than are actually valid in this particular system. So, for example, if a value is required to always be present for something and there's no way in the system for a value to become not present, then don't allow it to be nullable. We do something similar when we design a database schema when we put a null false on a column because we know that this will never be null. And so, why allow nulls when you know they should never be there? So it's a similar thing with the types. This sort of analysis that you can do looking at...the fancy term is the types cardinality. I'll link to an article that digs into that for people who are curious. But that can show you whether a type can represent, let's say, ten possible values, but the domain you're trying to model only has 5. And so when there's that discrepancy, there are five valid values that can be modeled by your type and an additional extra five that are not valid that just kind of shake out from the way you implemented things. So you can take that technique and apply it to a conditional that you've converted to algebraic data type form. And that can help find things like paths through your conditional code that don't line up with the problem that you're trying to solve. So going back to the example I talked about earlier of a multi-step form with three different steps, that's a problem that should have three paths through your conditional. But depending on your implementation, if it's a bunch of independent if clauses, you might have a bit of a combinatorial explosion. And there might be 25 different paths through that chunk of code. And that means three of them are the ones that your problem wants, and then the extra 22 are things that should quote, unquote, "never happen," but we all know that they eventually will. So that kind of analysis can help maybe give you pointers to the fact that your current structure is not well-suited to the problem that you're trying to solve. STEPHANIE: I think another database schema example that came to mind for me was using an enum to declare acceptable values for a field. And, yeah, I know exactly what you mean when working with code where you might know, because of the way the business works, that this thing is impossible, and yet, you still have to either end up coding defensively for it or just kind of hold that complexity in your head. And that can lead to some gnarly situations, and it makes debugging down the line a lot more difficult too. JOËL: It definitely makes it really hard for somebody else to know the original intention of the code when a conditional has more paths through it than there actually are actual paths in the problem you're trying to solve. Because you have to load all of that in your head, and our programmer brains are trained to think about all the edge cases, and what if this condition fires but this other one doesn't? Could that lead to a bug? Is that just a thing that's like, well, but the inputs will never trigger that, so you can ignore it? And if there are no comments to tell you, and if there are comments, then do you trust them? Because it -- STEPHANIE: Yes. [laughter] I'll just jump in here and say, yeah, I have seen the comments then conflict with the code as well. And so you have these two sources of information that are conflicting with each other, and you have no idea what is true and what's not. JOËL: So I'm a big fan of structuring conditional code such that the number of unique paths through a set of conditions is the same as the sort of, you might say, logical paths through the problem domain that we haven't added extra paths, just sort of accidentally due to the way we implemented things. STEPHANIE: Yeah. And now you have three different ways to visualize that information in your head [laughs] with these mental models. JOËL: Right. So from taking code that is conditional code and then transforming it into one of these other representations, I don't always do all three, but there are tools that I have. And I can gain all sorts of new insights into that code by looking at it through a completely different lens. STEPHANIE: That's super cool. JOËL: So the last episode, you had mentioned that you were going to try a soup club. How did that turn out? STEPHANIE: It turned out great. It was awesome, the inaugural soup group. I had, I think, around eight people total. And I spent...right after work, I went straight to chopping celery [laughs] and onions and just soup prepping. And it was such a good time. I invited a different group of friends than normally come together, and that turned out really well. I think we all kind of had at least one thing in common, which was my goal was just to, you know, have my friends come together and meet new people too. And we had soup, and we had bread. Someone brought a spiced crispy chickpea appetizer that went really well inside of our ribollita vegetable bean soup. And then I had the perfect amount of leftovers. So after making a really big batch of food and spending quite a long time cooking, I wanted to make sure that everyone had their fill. But it was also pretty nice to have two servings left over that I could toss in the freezer just for me and as a reward for my hard work. And then it ended up working out really well because I went on vacation last week. And the night we got back home, we were like, "Oh, it's kind of late. What are we going to do for dinner?" And then I got to pull out the leftover soup from my freezer. And it was the perfect coming home from a big trip, and you have nothing in your fridge kind of deal. So it worked out well. JOËL: I guess that's the advantage of hosting is that you get to keep the leftovers. STEPHANIE: It's true. JOËL: You also have to, you know, make the soup. [laughs] STEPHANIE: Also true. [laughs] But like I said, it wasn't like I had so much soup that I was going to have to eat it every single day for the next week and a half. It was just the amount that I wanted. So I'm excited to keep doing this. I'm hoping to do the next soup group in the next week or two. And then some other folks even offered to host it for next time. So maybe we might experiment with doing a rotating thing. But yeah, it has definitely brought me joy through this winter. JOËL: That's so lovely. What else has been new in your world? STEPHANIE: I have a clarification to make from last week's episode. So last week, we were talking about hexagons and tessellation. And we had mentioned that hexagons and triangles were really strong shapes. And we mentioned that, oh yeah, you can see it in the natural world through honeycomb. And I've since learned that bees don't actually build the hexagon shape themselves. That was something that scientists did think to be true for a little bit, that bees were just geometrically inclined, but it turns out that the accepted theory for how honeycomb gets its shape is that bees build cylindrical cells that later transform into hexagons, which does have a lot of surface area for holding the honey, though the process itself is actually still debated by scientists. So there's some research that has supported the idea that it's formed through physical forces like the changing temperature of the wax that transforms it from a cylinder shape into a hexagon, though, yeah, apparently, the studies are still a bit inconclusive. And the last scientific paper I read about this, just to really get my facts straight [laughs], they were kind of exploring aspects of bee behavior that led to the hexagons eventually forming because that does require that the cylinders are perfectly the same size and are at least built in a hexagonal pattern, even though the cells themselves are not hexagons. JOËL: Fascinating. So it sounds like it's either a social thing where the bees do it based off of some behavior. Or if it's a physical thing, it's some sort of like hexagons are a natural equilibrium point that everything kind of trends to, and so as temperature changes, the beehive will naturally trend towards that. STEPHANIE: Yeah, exactly. I have a good friend who is a beekeeper, so I got to pick her brain a little bit about honeycomb. [laughs] MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: So in the past few episodes, we've talked about books we're reading, articles that we're reading. This is kind of turning into the Stephanie and Joël book club. STEPHANIE: I love it. JOËL: That got me thinking about things that I've read that were impactful in the past year. So I'm curious for both of us what might be, let's say, the top two or three most impactful articles that you read in 2022. Or maybe to put it another way, what are the top two or three articles that you reference the most in conversations with other people? STEPHANIE: So listeners might not know this, but I actually joined thoughtbot early last year in February. So I was coming into this new job, and I was so excited to be joining an organization with so many talented developers. And I was really excited to learn from everyone. So I kind of came in with really big goals around my technical growth. And the end of the year just passed, and I got to do a little bit of reflection. And I was quite proud of myself actually for all the things that I had learned and all the ways that I had grown. And I was reminded of this blog post that I think I had in the back of my mind around "Coachability" by Cate, and she talks about how coaching is different from mentorship. And she provides some really cool mental models for different ways of providing support to your teammates. Let's say mentorship is teaching someone how to swim, and maybe helping someone out with a task might be throwing them a life raft. Coaching is more like seeing someone in the water, but you are up on a bridge, and you are kind of seeing all of their surroundings. And you are identifying ways that they can help themselves. So maybe there's a branch, a tree branch, a few feet away from them. And can they go grab that tree branch? How can they help themselves? So I came to this new job at thoughtbot, and I had these really big goals. But I also knew that I wanted to lean on my new co-workers and just be able to not only learn the things that I was really excited to learn but also trust that they had my best interests in mind as well and for them to be able to point out things that could help my career growth. So the idea of coachability was really interesting to me because I had been coming from a workplace that had a really great feedback culture. But I think this article touches on what to do with feedback in a way that I hadn't seen before. So she also describes being coachable as having two axes, one of them being receptiveness to feedback and the other being actionability in response to feedback. So receptiveness is when you hear feedback; do you listen to it? Do you work through it? How does that feedback fit into your mental model of your goals and your skills? And then actionability is like, okay, what do you do with that? How do you change your behavior? How do you change the way you approach problems? And those two things in mind were really helpful in terms of understanding how I respond to feedback and how to really make the most of it when I receive it. Because there are times when I get feedback, and I don't know what to do with it, you know, maybe it just wasn't specific enough. And so, in that sense, I want to work on my actionability and figuring out, okay, someone said that testing would be a really great opportunity for me to learn. But what can I do to learn how to write better tests? And that might involve figuring that out on my own, like, what strategies work for me. Or that might involve asking them, being like, "What do you recommend?" So yeah, I had this really big year of growth. And I'm excited to keep this mental model in mind when I feel like I might be stuck and I'm not getting the growth that I want and using those axes to kind of determine how to move forward. JOËL: I think the first thing that comes to mind for me is the episode that you and I did a while back about the value of precise language. For example, you talked about the distinction between coaching and mentorship, which I think in sort of colloquial speech, we kind of use interchangeably. But having them both mean different things, and then being able to talk about those or at least analyze yourself through the lens of those two words, I think, is really valuable and may be helping to drive either insights or actions that you can take. And similarly, this idea of having two different axes for receptiveness versus...was it changeability you said was the other one? STEPHANIE: Actionability. JOËL: Actionability, I think, is really helpful when you're feeling stuck because now you can realize, oh, is it because I'm not accepting feedback or not getting good feedback? Or is it that I'm getting feedback, but it's hard to take action on it? So just all of a sudden, having those terms and having that mental model, that framework, I feel like equips me to engage with feedback in a way that is much more powerful than when we kind of used all those terms interchangeably. STEPHANIE: Yeah, exactly. I think that it's very well understood that feedback is important and having a good feedback culture is really healthy. But I think we don't always talk about the next step, which is what do you do with feedback? And with the help of this article, I've kind of come to realize that all feedback is valuable, but not all of it is good. And she makes a really excellent point of saying that the way you respond to feedback also depends on the relationship you have with the person giving it. So, ideally, you have a high trust high respect relationship with that person. And so when they give you feedback, you are like, yeah, I'm receptive to this, and I want to do something about it. But sometimes you get feedback from someone, and you might not have that trust in that relationship or that respect. And it just straight up might not be good feedback for you. And the way you engage with it could be figuring out what part of it is helpful for me and what part of it is not? And if it's not helpful in terms of helping your growth, it might at least be informative. And that might help you learn something about the other person or about the circumstances or environment that you're in. JOËL: Again, I love the distinction you're making between helpful and informative. STEPHANIE: Yeah. I think I had to learn that the hard way this year. [laughs] So, yeah, I really hope that folks find this vocabulary or this idea...or consider it when they are thinking about feedback in terms of giving it or receiving it and using it in a way that works for them to grow the way they want to. JOËL: I'm curious, in your interactions, and learning, and growth over the past year, do you feel like you've leaned a little bit more into the mentorship or the coaching side of things? What would you say is the rough percentage breakdown? Are we talking 50-50, 80-20? STEPHANIE: That's such a good question. I think I received both this year. But I think I'm at a point in my career where coaching is more valuable to me. And I'm reminded of a time a few months into joining thoughtbot where I was working and pairing with a principal developer. And he was really turning the workaround on me and asking, like, what do I want to do? What do I see in the code? What areas do I want to explore? And I found it really uncomfortable because I was like, oh, I just want you to tell me what to do because I don't know, or at least at the time, I was really...I found it kind of stressful. But now, looking back on it and with this vocabulary, I'm like, oh, that's what true coaching was because I gained a lot of experience towards my foundational skill set of figuring out how to solve problems or identifying areas of refactoring through that process. And so sometimes coaching can feel really uncomfortable because you are stretching outside of your comfort zone and that your coach is hopefully supporting you but not just giving you the help but teaching you how to help yourself. JOËL: That's a really interesting thing to notice. And I think what I'm hearing is that coaching can feel less comfortable than mentoring because you're being asked to do more of the work yourself. And you're maybe being stretched in some ways that aren't exactly the same as you would get in a more mentoring-focused scenario. Does that sound right? STEPHANIE: Yeah, I think that sounds right because, like I said, I was also receiving mentorship, and I learned about new things. But those didn't always solidify in terms of empowering me next time to be able to do it without the help of someone else. Joël, what was an article that really spoke to you this last year? JOËL: So I really appreciated an article by Adrianna Chang, who's a developer at Shopify, about "Refactoring Legacy Code with the Strangler Fig Pattern." And it talks about this approach to moving refactoring code from one implementation to another. And it's a longer-ranged process, and how to do so incrementally. And a big theme for me this year has been refactoring and incremental change. I've had a lot of conversations with people about how to spot smaller steps. I've written an article on working incrementally. And so I think this was really nice because it gave a very particular technique on how to do so with an example. And so, because these sorts of conversations kept coming up this year, I found myself referencing this article all the time. STEPHANIE: I really loved this article too. And this last year, I also saw a strangler fig tree for the first time in real life in Florida. And I think that was after I had read this article. And it was really cool to make the connection between something I was seeing in nature with a pattern in software development or technique. JOËL: We have this metaphor, and now you get to see the real thing. I was excited because, at RubyConf Mini this year, I actually got to meet Adrianna. So it was really cool. It's like, "Hey, I've been referencing your article all year. It's super cool to meet you in person." STEPHANIE: That's awesome. I love that, just being able to support members of the community. What I really liked about the approach this article advocated for is that it allowed developers to continue working. You don't have to halt everything and dedicate time to refactor and not get any new feature work done. And that's the beauty of the incremental approach that you were talking about earlier, where you can continue development. Sometimes that refactoring might be paused for some reason or another, but then you can pick back up where you left off. And that is really intriguing to me because I think this past year, I was working on a client where refactoring seemed like something we had to dedicate special time for. And it constantly became tough to prioritize and sell to stakeholders. Whereas if you incorporate it into the work and do it in a way that doesn't stop the show [laughs] from going on, it can work really well and work towards sustainability and maintenance, which is another thing that we've talked a lot about on the show. JOËL: Something that's really powerful, I think, with that technique is that it allows you to have all of the intermediate steps get merged into your main branch and get shipped. So you don't have to have this long-running branch with a big change that's constantly going stale, and you're having to keep in sync with the main branch. And, unfortunately, I've often seen even this sort of thing where you create a long-running branch for a big change, a big refactor, and eventually, it just gets abandoned, and you have not locked in any wins. STEPHANIE: Yeah, that's the worst of both worlds where you've dedicated time and resources and don't get the benefits of that work. I also liked that the strangler fig pattern kind of forces you to really understand the existing code. I think working with legacy code can be really challenging. And a lot of people don't like to do it because it involves a lot of spelunking and figuring out, okay, what's really going on. But in order to isolate the pieces to, you know, slowly start to stop making calls to the old code, it requires that you take a hard look at your legacy code and really figure it out. And I honestly think that that then informs the new code that you write to better support both the old feature and also any new features to come. JOËL: Definitely. The really nice thing about this pattern is that it also scales up and down. You can do this really small...even as part of a feature branch; maybe it's just part of your development process, even if you don't necessarily ship all of the intermediate steps. But it helps you work more incrementally and in a tighter scope. And then you can scale it up as big as changing out entire sections of a framework or...I think Adrianna's example is like switching out a data source. And so you can do some really large refactors. But then you could do it as well on just a small feature. I really like using this pattern anytime you're doing things like Rails upgrades, and you've got old gems that might not convert over where it's like, oh, the community abandoned this gem between Rails 4 and Rails 5. But now you need sort of a bridge to get over. And so I think that pattern is particularly powerful when doing something like a Rails upgrade. STEPHANIE: Very Cool. JOËL: So what would be a second article that was really impactful for you in the past year? STEPHANIE: So, speaking of refactoring, I really enjoyed a blog post called Finding Time to Refactor by a former thoughtboter, German Velasco. He makes a really great point that we should think of completeness in our work, not just when the code works as expected or meets the product requirements, but also when it is clear and maintainable. And so he really advocates for baking refactoring into just your normal development process. And like I said, that goes back to this idea that it can be incremental. It doesn't have to be separate or something that we do later, which is kind of what I had learned before coming to thoughtbot. So when I was also speaking about just my technical growth, this shift in philosophy, for me, was a really big part of that. And I just started kind of thinking and seeing ways to just do it in my regular process. And I think that has really helped me to feel better about my work and also see a noticeable improvement in the quality of my code. So he mentioned the three times that he makes sure to refactor, and that is one when he is practicing TDD and going through the red-green-refactor cycle. JOËL: It's in the name. STEPHANIE: [laughs] It really is. Two, when code is difficult to understand, so if he's coming in and fixing a bug and he pays the tax of trying to figure out confusing code, that's a really great opportunity to then reduce that caring cost for others by making it clear while you're in there, so leaving things better than you found it. And then three, when the existing design doesn't work. We, I think, have mentioned the adage, "Make the change easy, and then make the easy change." So if he's coming in to add a new feature and it's just not quite working, then that's a really good opportunity to refactor the existing design to support this new information or new concept. JOËL: I like those three scenarios. And I think that second one, in particular, resonated with me, the making things easier to understand. And in the sort of narrower sense of the word refactoring, traditionally, this means changing the structure of the code without changing its behavior. And I once had a situation where I was dealing with a series of early return expressions in a method that were all returning Booleans. And it was really hard because there were some unlesses, some ifs, some weird negation happening. And I just couldn't figure out what this code was doing. STEPHANIE: Did you draw a diagram? [laughs] JOËL: I did not. But it turns out this code was untested. And so I pretty much just tried, like, it took two Booleans as inputs and gave back a Boolean. So I just tried all the combinations, put it in, saw what it gave me out, and then wrote tests for them. And then realized that the test cases were telling me that this code was always returning false unless both inputs were true. And that's when it kind of hits me, it's like, wait a minute, this is Boolean AND. We've reimplemented Boolean AND with this convoluted set of conditional code. And so, at the end there, once I had that test coverage to feel confident, I went in and did a refactor where I changed the implementation. Instead of being...I think it was like three or four inline conditionals, just rewrote it as argument one and argument two, and that was much easier to read. STEPHANIE: That's a great point. Because the next time someone comes in here, and let's say they have to maybe add another condition or whatever, they're not just tacking on to this really confusing thing. You've hopefully made it easier for them to work with that code. And I also really appreciated, you know, I was mentioning how this article affected my thought process and how I approach development, but it's a really great one to share to then foster a culture of just continuous refactoring, I guess, is what I'm going to call it [laughs] and hopefully, avoiding having to do a massive rewrite or a massive effort to refactor. The phrase that comes to mind is many hands make light work. And if we all incorporated this into our process, perhaps we would just be working all around with more delightful code. Joël, do you have one more article that really stood out to you this year? JOËL: One that I think I really connected with this year is "Parse, Don't Validate" by Alexis King. Long-time listeners of the show will have heard me talk about this a little bit with Chris Toomey when he was a guest on the show this past fall. But the gist of the article is that the process of parsing is converting a broader type into a narrower type with the potential for errors. So traditionally, we think of this as turning a string which a string is very broad. All sorts of things are strings, and then you turn it into something else. So maybe you're parsing JSON. So you take a string of characters and try to turn it into a Ruby hash, but not all strings are valid hashes. So there's also the possibility for errors. And so, JSON.parse() could raise an error in Ruby. This idea, though, can be then expanded because, ideally, you don't want to just check that a value is valid for your stricter rules. You don't want to just check that a string is valid JSON and then pass the string along to the next person. You actually want to transform it. And then everybody else down the line can interact with that hash and not have to do a check again is this valid JSON? You've already validated that you've already converted it into a hash. You don't need to check that it's valid JSON again because, by the nature of being a hash, it's impossible for it to be invalid. Now, you might have some extra requirements on that hash. So maybe you require certain keys to be present and things like that. And I think that's where this idea gets even more powerful because then you can kind of layer this on top and have a second parsing step where you say, I'm going to parse this hash into, let's say, a shopping cart object. And so, not all Ruby hashes are valid shopping carts. And so you try to take a broader value and coerce it into a narrower value or transform it into a narrower value and potentially raise an error for those hashes that are not valid shopping carts. And then, whoever down the line gets a shopping cart object, you can just call items on it. You can call price on it. You don't need to check is this key present? Because now you have that certainty. STEPHANIE: This reminds me of when I was working with TypeScript in the summer of last year. And having come from a dynamically-typed language background, it was really challenging but also really interesting to me because we were also parsing JSON. But once we had transformed or parsed that data into this domain object, we had a lot more confidence about what we were working in. And all the functions we wrote down the line or used on the line, we could know for sure that, okay, it has these properties about it. And that really shaped the code we wrote. JOËL: So use the word confident here, which, for me, it's a keyword. And so you can now assume that certain properties are true because it's been checked once. That can be tricky if you don't actually do a transformation. If you're just sort of passing a raw value down, you'll often end up with code that is defensive that keeps rechecking the same conditions over and over. And you see this lot around nil in Ruby where somebody checks for a value for nil, and then inside that conditional, three or four other conditions deep, we recheck the same value for nil again, even though, in theory, it should not be nil at that point. And so by doing transformations like that, by parsing instead of just validating, we can ensure that we don't have to repeat those conditions. STEPHANIE: Yeah, I mean, that refers back to the analyzing conditional code that we spent a bit of time talking about at the beginning of this episode. Because I remember in that application, we render different components based on the status of this domain object. And there was a condition for when the status was something that was not expected. And then someone had left a comment that was like, technically, this should never happen. But I think that he had to add it to appease the compiler. And I think had we been able to better enforce those boundaries, had we been more thoughtful around our domain modeling, we could have figured out how to make sure that we weren't then introducing that ambiguity down the line. JOËL: I think it's interesting that you immediately went to talking about TypeScript here because TypeScript has a type system. And the "f, Don't Validate" article is written in Haskell, which is another typed language. And types are great for showing you exactly like, here's the boundary. On this side of it, it's a string, and on this side here, it's a richly-typed value that has been parsed. In Ruby, we don't have that, everything is duck-typed, but I think the principle still applies. It's a little bit more implicit, but there are zones of high or low assumptions about the data. So when I'm interacting directly with raw input from a third-party endpoint, I'm really only expecting some kind of raw string from the body of the response. It may or may not be valid. There are all sorts of checks I need to do to make sure I can do anything with it. So that is a very low assumption zone. Later on, in the business logic part of the code, I might expect that I can call a method on the object to get the price of a shopping cart or a list of items or something like that. Now I'm in a much higher assumption zone. And being self-aware about where we transition from low assumptions to high assumptions is, I think, a really key takeaway for how we interact with code in Ruby. Because, oftentimes, where that boundary is a little bit fuzzy or where we think it's in one place but it's actually in a different place is where bugs tend to cluster. STEPHANIE: Do you have any thoughts about how to adhere to those rules that we're making so we're not having to assume in a dynamically-typed language? JOËL: One way that I think is often helpful is trying to use richer objects and to not just rely on primitives all the time. So don't pass a business process a hash and be just like, trust me, I checked it; it's got the right keys because the day will come when you pass it a malformed hash and now we're going to have an error in the business process. And now we have a dilemma because do we want to start adding defensive checks in the business process to be like, oh, are all our keys that we expect present, things like that? Do we need to elsewhere in the code make sure we process the hash correctly? It becomes a little bit messy. And so, oftentimes, it might be better to say, don't pass a raw hash around. Create a domain object that has the actual method that you want, and pass that instead. STEPHANIE: Oh, sounds like a great opportunity to use the new data class in Ruby 3.2 that we talked about in an episode prior. JOËL: That's a great suggestion. I would definitely reach for something like that, I think, in a situation where I'm trying to model something a little bit richer than just a hash. STEPHANIE: I also think that there have been more trends around borrowing concepts from functional programming, and especially with the introduction of classes that represent nil or empty states, so instead of just using the default nil, having at least a bit of context around a nil what or an empty what. That then might have methods that either raise an error or just signal that something is wrong with the assumptions that we're making around the flexibility that we get from duck typing. I'm really glad that you proposed this topic idea for today's episode because it really represented a lot of themes that we have been discussing on the show in the past couple of months. And I am excited to maybe do this again in the future to just capture what's been interesting or inspiring for us throughout the year. JOËL: On that note, shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thank you so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeeeee!!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Every creative has a dream project: something they'd love to do if they had infinite time and resources. But what if you got the chance to pull off that dream project, and it didn't succeed? That's what happened to Steve Taylor, who poured himself into directing Blue Like Jazz, only to see a middling response at the theater. To him, that result felt like humiliation. This week, we hear about how his experience creating art for a living has changed his approach to success, risk-taking, and his own personal worth. Filmmaker/writer/producer/recording artist/entrepreneur Steve Taylor earned his “Renaissance Man” stripes (Prism Magazine) from a body of work that's garnered him multiple Grammy, Billboard, Telly, Addy, and Dove awards and nominations. As a recording artist, he's sold over one million albums worldwide, garnered two Grammy nominations for Meltdown (1984) and Squint (1993), and made history as the only artist to twice win Billboard Music Video Awards for self-directed music videos. He also fronted the MCA-signed rock band Chagall Guevara.