Podcasts about Inertia

Fundamental principle of classical physics

  • 751PODCASTS
  • 954EPISODES
  • 38mAVG DURATION
  • 5WEEKLY NEW EPISODES
  • Sep 25, 2022LATEST
Inertia

POPULARITY

20152016201720182019202020212022

Categories



Best podcasts about Inertia

Latest podcast episodes about Inertia

Manage Better with Anshuman Tiwari
Mid Career blues With Aninditta and Anshuman

Manage Better with Anshuman Tiwari

Play Episode Listen Later Sep 25, 2022 48:24


In this episode, I talk to Aninditta Savitry, a leaving LinkedIn influencer from Indonesia and a Columnist for the Jakarta Post on mid-career blues.We tackled topics such as Inertia, Imposter syndrome, women candidates being under-confidence, and job search.Listen in for a free-wheeling discussion with anecdotes to support what we say. 

Remote Ruby
You Gotta Risk It For The Brisket

Remote Ruby

Play Episode Listen Later Sep 23, 2022 43:43 Very Popular


[00:00:15] What is this cursed idea thing Andrew did with Storybook?[00:05:31] Andrew mentioned using MDX format and he tells us what it is, Chris brings up the PHP days and components, and Andrew talks about architecture. [00:10:51] Being a visual person, Andrew explains another thing he really likes about Storybook.[00:17:29] Jason talks about finding his Zen using Tailwind in a project.  [00:20:25] Chis wonders if Jason runs into issues with having to undo some of the stuff, and Jason explains how he's been using more CSS and a problem he ran into.  [00:24:02] CSS Variables are discussed and why they're awesome, and Andrew tells us about the fallback for CSS Variables.  [00:24:37] There's a discussion about using JIT and PurgeCSS, an amazing tool. [00:27:41] Chris tells us about using a template from Bootstrap for the Rails Hackathon homepage.[00:30:17] The guys discuss using React Components, Bootstrap, and using Tailwind over Bootstrap.  [00:33:57] Jason talks about Inertia, which is a library for Laravel and Rails. [00:34:37] Find out what Jason is doing with View Components and Job Boardly, that he hopes will get Andrew's acceptance.[00:36:29] Andrew explains why he's obsessed with component architecture, and Chris tells us about his first real serious project he did with the Python recreation of the apt package manager. [00:38:55] Chris announces Tender Love (a.k.a. Aaron Patterson) mentioned he's going to cut a new release of Rails, and he talks about Rails Hackathon coming up.Panelists:Jason CharnesChris OliverAndrew MasonSponsor:HoneybadgerLinks:Jason Charnes TwitterChris Oliver TwitterAndrew Mason Twitter10 Best Tech Podcasts in 2022 (as Chosen by the Rails Community)-Planet ArgonRemote Ruby Podcast-Episode 165: GitHub Codespaces & Docker with Benjamin Wood (Recommended episode from Planet Argon)StorybookMDXPurgeCSSBootstrapRails HackathonRemote Ruby Podcast-Episode 139: Learning in Public, Alpine & InertiaRemote Ruby Podcast-Episode 66: Joined by Jonathan Reinink, Creator of Inertia.jsAaron Patterson TwitterRuby Radar NewsletterRuby Radar Twitter

DT Radio Shows
Inertia Radio Show with Shiach #006

DT Radio Shows

Play Episode Listen Later Sep 23, 2022 59:00


Inertia's with Shiach on Data Transmission. At Inertia you will find the best in hypnotic and grooving techno and melodic house presented by our main man Shiach. Tracklist Kupfer (Original Mix) - Jonathan Kaspar Vulkan (Original Mix) - Tom Peters Runner (Original Mix) - Recondite Basic Research (Original Mix) - Pascual Enter Nova (Original Mix) - Marco Bailey Deep In The Glowing Heart (Night Version) - Jon Hopkins, ANNA Running in Circles (Original Mix) - Blancah 500 People, 500 Hearts, 1 Love (Original Mix) - Damaniano von Erckert Promised (Raxon Remix) - Pig & Dan March Of Freedom (Original Mix) - Orlando Voorn Kanai (Original Mix) - Marco Bailey

Pure Experiences
Inertia, Evolution, Prayer, Signs, Suffering, Play, Joke

Pure Experiences

Play Episode Listen Later Sep 21, 2022 52:35


Join the online meetings on Telegram Group  https://t.me/pureexp 1. What is inertia? 2. Do we need to evolve or do we need to remain as Brahman? 3. How to prepare yourself to serve others? 4. How can one ensure that they find a Guru in every lifetime? 5. Which prayer will be heard? 6. What is a sign? 7. Is any help needed after a seeker gets knowledge? 8. Why help a person when the person is only an illusion? 9. Why can't the "higher powers" destroy all the suffering for once and for all? 10. When will the play end? 11. What is the cosmic joke? 12. What is the utility of temples? 13. Are consecrated places helpful? 14. Why can't I just stay happy here, why is there a need to evolve? 15. Should we eat in night?

Astro arXiv | all categories
Models of modified-inertia formulation of MOND

Astro arXiv | all categories

Play Episode Listen Later Sep 19, 2022 1:00


Models of modified-inertia formulation of MOND by Mordehai Milgrom. on Monday 19 September Models of "modified-inertia" formulation of MOND are described and applied to nonrelativistic many-body systems. They involve time-nonlocal equations of motion. Momentum, angular momentum, and energy are (nonlocally) defined, whose total values are conserved for isolated systems. The models make all the salient MOND predictions. Yet, they differ from existing "modified-gravity" formulations in some second-tier predictions. The models describe correctly the motion of a composite body in a low-acceleration field even when the internal accelerations of its constituents are high. They exhibit a MOND external field effect (EFE) that shows some important differences from what we have come to expect from modified-gravity versions: In one, simple example of the models, what determines the EFE, in the case of a dominant external field, is $mu(thetalangle a_{ex}rangle/a_0)$, where $mu(x)$ is the MOND `interpolating function' that describes rotation curves, compared with $mu(a_{ex}/a_0)$ for presently-known modified-gravity formulations. The two main differences are that while $a_{ex}$ is the momentary value of the external acceleration, $langle a_{ex}rangle$ is a certain time average of it, and that $theta>1$ is an extra factor that depends on the frequency ratio of the external- and internal-field variations. Only ratios of frequencies enter, and $a_0$ remains the only new dimensioned constant. For a system on a circular orbit in a galaxy (such as the vertical dynamics in a disc galaxy), the first difference disappears, since $langle a_{ex}rangle=a_{ex}$. But the $theta$ factor can appreciably enhance the EFE in quenching MOND effects, over what is deduced in modified gravity. Some exact solutions are also described, such as for rotation curves, for an harmonic force, and the general, two-body problem, which in the deep-MOND regime reduces to a single-body problem. arXiv: http://arxiv.org/abs/http://arxiv.org/abs/2208.07073v2

Astro arXiv | all categories
Distinguishing Dark Matter, Modified Gravity, and Modified Inertia with the Inner and Outer Parts of Galactic Rotation Curves

Astro arXiv | all categories

Play Episode Listen Later Sep 19, 2022 0:42


Distinguishing Dark Matter, Modified Gravity, and Modified Inertia with the Inner and Outer Parts of Galactic Rotation Curves by Kyu-Hyun Chae. on Monday 19 September The missing gravity in galaxies requires dark matter, or alternatively a modification of gravity or inertia. These theoretical possibilities of fundamental importance may be distinguished by the statistical relation between the observed centripetal acceleration of particles in orbital motion and the expected Newtonian acceleration from the observed distribution of baryons in galaxies. Here predictions of cold dark matter halos, modified gravity, and modified inertia are compared and tested by a statistical sample of galaxy rotation curves from the Spitzer Photometry and Accurate Rotation Curves (SPARC) database. Modified gravity under an estimated mean external field correctly predicts the observed statistical relation of accelerations from both the inner and outer parts of rotation curves. Taken at face value there is a $5.1sigma$ difference between the inner and outer parts on an acceleration plane which would be inconsistent with current proposals of modified inertia. Removing galaxies with possible systematic concerns such as central bulges or special inclinations does not change this trend. Cold dark matter halos predict a systematically deviating relation from the observed one. All aspects of rotation curves are most naturally explained by modified gravity. arXiv: http://arxiv.org/abs/http://arxiv.org/abs/2207.11069v3

INertia's Funhouse
Episode 42: "iNertia Spinnin' and Chillin'"

INertia's Funhouse

Play Episode Listen Later Sep 19, 2022 91:35


The event was "TaylorMade" for good times, good food, good people and good music.  This is a small part of the event we hope you will enjoy: iNertia Spinnin' and Chillin'.....

Women In Motion Podcast
Edith Dekyndt - "Mon travail est une rencontre avec le vivant" (version intégrale)

Women In Motion Podcast

Play Episode Listen Later Sep 16, 2022 23:44


Découvrez l'artiste Edith Dekyndt au micro de la journaliste et productrice Géraldine Sarratia. Ce week-end, les 17 et 18 septembre, Kering et la Pinault Collection présentent l'exposition monographique "Aria of Inertia" dans le cadre du programme Women In Motion. Women In Motion est un programme de Kering lancé en 2015 qui met en lumière les femmes dans les arts et la culture.See omnystudio.com/listener for privacy information.

Women In Motion Podcast
Edith Dekyndt - 'Creation is an encounter with Life'

Women In Motion Podcast

Play Episode Listen Later Sep 16, 2022 24:17


Discover Belgian artist Edith Dekyndt is this edition's special guest of journalist and producer Géraldine Sarratia. From September 17th to September 18th, Kering and Pinault Collection present "Aria of Inertia" hosted inside the former Laennec Hospital's chapel, on the occasion of the European Heritage Days 2022. Women In Motion is a program by Kering which shines a light on women in the arts and culture since 2015.See omnystudio.com/listener for privacy information.

Empirical Cycling Podcast
Perspectives #18: Overcoming Historical Inertia, with Andy Coggan

Empirical Cycling Podcast

Play Episode Listen Later Sep 16, 2022 108:38


In this episode, Andy Coggan discusses FTP and its context among various threshold definitions, the infamous "hour of power", and the legacy of Training And Racing With A Power Meter. We also discuss Andy's lack of social media presence, the chapters he's written on the history of exercise physiology, and delve into some topics in exercise metabolism including VLamax, substrate use at FTP, methods and interpretations of the lactate shuttle, and more.

Into the Moss
Inertia

Into the Moss

Play Episode Listen Later Sep 15, 2022 14:00


A slippy wry pig, resting on a butcher's lip, senses the day's up.

Women In Motion Podcast
Edith Dekyndt - "Mon travail est une rencontre avec le vivant"

Women In Motion Podcast

Play Episode Listen Later Sep 15, 2022 11:46


A l'occasion des journées du patrimoine, découvrez l'artiste Edith Dekyndt au micro de la journaliste et productrice Géraldine Sarratia. Ce week-end, les 17 et 18 septembre, Kering et la Pinault Collection présentent l'exposition monographique "Aria of Inertia" dans le cadre du programme Women In Motion. Women In Motion est un programme de Kering lancé en 2015 qui met en lumière les femmes dans les arts et la culture.See omnystudio.com/listener for privacy information.

DT Radio Shows
Inertia Radio Show with Shiach #005

DT Radio Shows

Play Episode Listen Later Sep 13, 2022 58:56


Inertia's with Shiach on Data Transmission. At Inertia you will find the best in hypnotic and grooving techno and melodic house presented by our main man Shiach. Like the Radio Show? Click the [Repost] ↻ button so more people can hear it! Follow us on Soundcloud: @data-transmission Follow us on Soundcloud: @datatransmission Follow our House Music Spotify Playlist: goo.gl/dHX1Cr Want more house music, tech house, deep tech, minimal? Subscribe to our Youtube Channel - bit.ly/dtytube Listen to DT Radio: Website: bit.ly/DTSite1 Pop Up: bit.ly/DTRadioPopUp1 Follow Data Transmission: Instagram: goo.gl/6LqfCJ Spotify: goo.gl/p1gaWy YouTube: goo.gl/3JmFbF Facebook: goo.gl/ZAsYwY Twitter: goo.gl/o1ZF3P iTunes Podcast: goo.gl/TK1Xxu Spotify Podcast: spoti.fi/31KIS6s Mixcloud Podcast: bit.ly/30CzOk0

The Holmes Archive of Electronic Music
The US Open Sound Piece, 2022

The Holmes Archive of Electronic Music

Play Episode Listen Later Sep 11, 2022 51:28


Episode 79 The US Open Sound Piece, 2022 This is my annual exploration of sounds from the US Open Tennis tournament, held in New York at the end of each Summer. Playlist The sound piece is organized into six sections, each around a different approach to processing sound. Names of players captured in this piece include: Carlos Alcaraz, Rafael Nadal, Coco Vandeweghe, Jannick Sinner, Hubert Hurkacz, Federico Delbonis, Jesper De Jong, Frances Tiafoe, Daniil Medvedev, Casper Ruud, Cameron Norrie. Note that the individual timings of the sections sometimes overlap. Section 1. Techno beats plus tennis hits. This opens with a chair umpire announcing “out” followed by various beats, sneaker squeaks, crowd applause, various chair umpires, players hitting, thunder and rain going down a drain, more clapping, more hitting, etc. Spectral gate, delay, and reverb from Logic Pro were used to process some of the sounds, and synth ambience was created within Alchemy. 5:44 Section 2. Serato DJ. I used Serato DJ and its integrated looping and effects to generate this section. It was enhanced by percussion sounds added using the Logic Pro Orchestral Kit. 15.40 Section 3. MetaSynth CTX 1.2 processed sounds, using the Inertia effect applied to various tracks of players hitting, all layered to create an atmosphere similar to the mesmerizing effect one experiences while watching hours of tennis. 8:55 Section 4. Loops of hitting, audience sounds, various other noises and audio input recorded at the Open. Again, this section is multilayered to provide an appropriate ambience to the sound. Assembled in Logic Pro. 13.14 Section 5. Arthur Ashe. I came across this clip of tennis great Arthur Ashe giving some tennis instruction and thought it would make a great addition to the piece. I applied delay and reverb to mix up the sequence a bit. 1:50 Section 6. Return of the Techno part capped with a sequence of sneaker squeaking and applause loops. The loops were processing using an audio filter, spectral gate, delay, and reverb. Plus the Buchla Easel V (Arturia). 2:05   Opening background music: rhythms generated using Spark (Arturia). Opening and closing sequences voiced by Anne Benkovitz. Additional opening, closing, and other incidental music by Thom Holmes. For additional notes, please see my blog, Noise and Notations.  

UFO Encounters World-Wide
Ep.#62 Special Guest Mark Fiorentino Author of "Master of Reality" about the Completion and Solution of Einstein's Unified Field Theory, Anti-Gravity and Breaking the Speed of Light Barrier!

UFO Encounters World-Wide

Play Episode Listen Later Sep 8, 2022 55:04


In today's episode we have Special Guest "Mark Fiorentino" to discuss his book "Master of Reality" which goes into the completion and solution of Einstein's unified field theory. The book goes into Anti gravity, How to break the Speed of Light Barrier, mathematical solutions to Mass, Gravity and Inertia and also talks about the Big Bang theory! Science today is more important then ever, especially when it comes to life outside our planet and finding other planets with life. We will get into what started Mark on this path of writing his book, and what interested him in these scientific aspects he has written about. So with that being said, Strap On Those Seat belts, Were Going for a Ride!! MARK'S BIO: I am the author of Master of Reality, a book about the completion and solution of Einstein's Unified Field Theory. The book contains many other world-changing discoveries as well. The secrets of the Universe are revealed. Here is a shortlist of what is in the book.  The discovery of how to create an antigravity field  The discovery of how to break the light speed barrier  The proper Big Bang theory explanation which includes the true story of star and planet creation  The derived mathematical solution for the origin of mass, gravity, and inertia For as long as I can remember, I have been blessed (or cursed, depending on your point of view) with insatiable and unrelenting curiosity. I remember reading about Albert Einstein and the Unified Field Theory when I was ten years old. I found it fascinating and became particularly intrigued by his discussions of this theory. As I read about the Unified Field Theory, it seemed to be the most interesting thing I have ever encountered. I knew for sure that if I could understand this, I would know the most important thing in the world of humans. I would understand the Theory of Everything! Book Trailer for the Master of Reality https://youtu.be/kyTFxHgYi7k Website: www.super-relativity.com NEW MERCH AND SWAG STORE FOR ALL THINGS "UFO ENCOUNTERS WORLD WIDE" - https://www.storefrontier.com/ufoencountersworldwide DONATE/SPONSOR THE SHOW AT - https://paypal.me/JessePmufonFI - IT WILL HELP KEEP THE SHOW GOING, PLUS YOU GET A "SHOUT OUT" ON THE SHOW AND A PLACE ON THE WEBSITE! SPONSORED BY: "ESTHEROLOGY: WHAT IS IT?" PODCAST AND RADIO SHOW ON ERRT RADIO ON YOUTUBE CONTACT ME: TWITTER - @AATPEAK WEBSITE - UFOENCOUNTERSWORLDWIDE.WORDPRESS.COM EMAIL - UFOENCOUNTERSWORLDWIDE@GMAIL.COM PROJECT BATTECH 404 INFORMATION: WEBSITE - PROJECTBATTECH404.WORDPRESS.COM

Beauty Revealed Podcast
What to do when you feel STUCK: Beauty Revealed Podcast S3:E1

Beauty Revealed Podcast

Play Episode Listen Later Sep 8, 2022 19:30


No one likes feeling stuck or detached from life, and although the solutions aren't always simple, this episode is a great place to start. Gather a few tips on ways to take inventory of your current state of mind, consider various modes of reflection, establish a space of honesty with yourself, and practice the Law of Inertia to get moving. We can't wait to see your BEAUTY REVEALED; let us know how it's going for you. Email: BeTheBeautyRevealed@gmail.com Visit HouseOfClai.com to learn more about Beauty Revealed, Sign up to receive Compliment Crew emails, to Shop and more. --- This episode is sponsored by · Anchor: The easiest way to make a podcast. https://anchor.fm/app Support this podcast: https://anchor.fm/beauty-revealed-podcast/support

Horse Geeks
Horse Geeks Episode 15: Newton’s 1st Law of Motion, Inertia

Horse Geeks

Play Episode Listen Later Sep 3, 2022 51:27


The Horse Geeks Podcast – Where we look at horses and riding from the inside out Topic: Discussion about the Law of Inertia and how it relates directly to riding […] The post Horse Geeks Episode 15: Newton's 1st Law of Motion, Inertia appeared first on Kirsten Nelsen.

Investories - real estate, investing and mindset
029 David Richter of Simple CFO and Profit First for REI talks paying yourself first, inertia of money, using the Profit First principles and lessons learned from BRRRR and buy hold investing

Investories - real estate, investing and mindset

Play Episode Listen Later Sep 1, 2022 45:36


David Richter is an active real estate investor who has been essential in closing over 850 deals which include wholesale, turnkey, BRRRR, owner finance, rentals, lease options, and any other exit strategy you can think of. While growing and building a real estate business from 5 deals a month to over 25 deals a month, he realized that as much money was coming in, it was going right out. With the unique opportunity of being in every seat as a real estate investor, he found a calling to the company's finance seat to help them see where their money was really going. David has helped real estate companies completely turn around from going out of business to building cash reserves through his profit advising company Simple CFO Solutions, LLC. He is the author of Profit First for Real Estate Investing. His goal in life is to completely transform the Real Estate Investing industry when it comes to how real estate investors view their finances and – bring them true financial clarity and freedom. David is a wealth of knowledge on both investing and financial management. In our conversation, David breaks down the fundamentals of running your real estate investments as a business, how not to create another job and how to keep your money working for you. David's approach focuses on profit first, building inertia and growing quicker.    Josh Wilson: Simple CFO: https://simplecfosolutions.com/  Linkedin: https://www.linkedin.com/company/simple-cfo-solutions  Profit First for Real Estate Investing: https://www.amazon.com/Profit-First-Real-Estate-Investing-ebook/dp/B098865Y5B  Investories: YouTube: https://www.youtube.com/channel/UCh96X8fbT3oWivXzvcorniQ Tik Tok: https://www.tiktok.com/@investoriespod Instagram: https://www.instagram.com/investoriespod/ Email: investoriespodcast@gmail.com Kyle: Facebook: https://www.facebook.com/yourmultifamilymentor Instagram: https://www.instagram.com/your_multifamily_mentor/?hl=en John:  Instagram: https://www.instagram.com/hoopeezy/?hl=en Airbnb: https://airbnb.com/h/ponderosapinehaus  

Synthentral
Synthentral 20220823 New Tunesday

Synthentral

Play Episode Listen Later Aug 22, 2022 166:05


It's New Tunesday: new releases from the past week! Give the bands a listen. If you like what you hear, support the bands! I always play the bands alphabetically in order to evenly distribute the genres without any bias influence. Last week I realized that was unfair to all the bands at the "bottom" of the alphabet. So from now on, I will alternate shows between A to Z and Z to A. Today we start the Z to A. Today's episode features new releases by We The North, VEiiLA, Vandal Moon, Unheard Sirens Inc., Ultraflex, Train To Spain, TEEEL, Ruined Conflict, RROYCE, Resistor, Rayne Reznor & To The Stars We Return, Purple Fog Side & Elsehow, Pure Obsessions & Red Nights, Munich Syndrome, Monsieur Desastreux, Menthüll, Mecha Maiko, Lucidward, London Sadness, The Livelong June, Leeni, LeBrock, Lavallette, Kim Lunner, Inertia vs This Morn' Omina, Incirrina, Heartlay, The Golden Hour, Freaky Mind, The Forgotten, File Transfer Protocol, Farba Kingdom, FabrikC & j:dead, ee:man, Echoberyl, Dynalectric Orchestra, Distant Signs, Devours & Kellarissa, Breathe Of My Leaves, ALEX & Megan McDuffee, Acustiche, and 40 Octaves Below!

DT Radio Shows
Inertia With Shiach #004

DT Radio Shows

Play Episode Listen Later Aug 19, 2022 58:56


Inertia's with Shiach on Data Transmission. At Inertia you will find the best in hypnotic and grooving techno and melodic house presented by our main man Shiach. Like the Radio Show? Click the [Repost] ↻ button so more people can hear it! Follow us on Soundcloud: @data-transmission Follow us on Soundcloud: @datatransmission Follow our House Music Spotify Playlist: goo.gl/dHX1Cr Want more house music, tech house, deep tech, minimal? Subscribe to our Youtube Channel - bit.ly/dtytube Listen to DT Radio: Website: bit.ly/DTSite1 Pop Up: bit.ly/DTRadioPopUp1 Follow Data Transmission: Instagram: goo.gl/6LqfCJ Spotify: goo.gl/p1gaWy YouTube: goo.gl/3JmFbF Facebook: goo.gl/ZAsYwY Twitter: goo.gl/o1ZF3P iTunes Podcast: goo.gl/TK1Xxu Spotify Podcast: spoti.fi/31KIS6s Mixcloud Podcast: bit.ly/30CzOk0

Seriously Funny
Inertia, Friction, and Motivation: How Are They Connected?

Seriously Funny

Play Episode Listen Later Aug 19, 2022 28:11


This week we talk about how inertia, friction, and motivation are connected. And how we can ultimately get more done My YouTube Video on Motivation: https://www.youtube.com/watch?v=OnczDd3r0U0 Blog: nirzhor2002.wixsite.com/thinkcreateinspire Contact: seriouslyfunnypodcast@gmail.com Find Seriously Funny On Anchor Apple Podcasts Spotify Google Podcasts PocketCasts Breaker RadioPublic Overcast --- Support this podcast: https://anchor.fm/seriouslyfunnypodcast/support

Ruby Rogues
How to Get Your Rails Models and Routes into Your Front End Framework - RUBY 559

Ruby Rogues

Play Episode Listen Later Aug 17, 2022 73:01


Today on the show, Máximo Mussini shares how your front-end framework can benefit from integrating rails models and routes concurrently.  Topics they discuss today include everything from complex structures with serializers to generating JS from rails routes. In this episode… Advantages of serializers  Contact serializers Parse float and typescripts Complex structures with serializers Path helpers in JS Generating JS from rails routes Typed interface files configurations Types and Ruby Sponsors Avo Raygun | Click here to get started on your free 14-day trial Top End Devs Links Generating TypeScript interfaces from Ruby serializers 2 Generating JS functions to make request from Rails routes 2 GitHub: ElMassimo Twitter: @MaximoMussini Picks Charles- Orbis Charles – Top End Devs Meetups Charles – Rails Remote Conference John- Simple Task Management Software for Businesses of All Sizes John- VALORANT: Riot Games' competitive 5v5 character-based tactical shooter Luke- Introduction Luke- Decameron | work by Boccaccio Máximo- Recording Your Terminal to SVG | platformOS Docs Máximo- Inertia.js - The Modern Monolith Valentino- Co-ops: On Sparking Innovation at Doximity Valentino- Ruby Evolution Valentino- why the lucky stiff - Wikipedia

All Ruby Podcasts by Devchat.tv
How to Get Your Rails Models and Routes into Your Front End Framework - RUBY 559

All Ruby Podcasts by Devchat.tv

Play Episode Listen Later Aug 17, 2022 73:01


Today on the show, Máximo Mussini shares how your front-end framework can benefit from integrating rails models and routes concurrently.  Topics they discuss today include everything from complex structures with serializers to generating JS from rails routes. In this episode… Advantages of serializers  Contact serializers Parse float and typescripts Complex structures with serializers Path helpers in JS Generating JS from rails routes Typed interface files configurations Types and Ruby Sponsors Avo Raygun | Click here to get started on your free 14-day trial Top End Devs Links Generating TypeScript interfaces from Ruby serializers 2 Generating JS functions to make request from Rails routes 2 GitHub: ElMassimo Twitter: @MaximoMussini Picks Charles- Orbis Charles – Top End Devs Meetups Charles – Rails Remote Conference John- Simple Task Management Software for Businesses of All Sizes John- VALORANT: Riot Games' competitive 5v5 character-based tactical shooter Luke- Introduction Luke- Decameron | work by Boccaccio Máximo- Recording Your Terminal to SVG | platformOS Docs Máximo- Inertia.js - The Modern Monolith Valentino- Co-ops: On Sparking Innovation at Doximity Valentino- Ruby Evolution Valentino- why the lucky stiff - Wikipedia

“Dynamic Trance Universe”
AER\O/RITMIX - #DTUPodcast ''Best Of June-July 2022'' #345

“Dynamic Trance Universe”

Play Episode Listen Later Aug 14, 2022 60:41


Welcome to my new episode 'Dynamic Trance Universe' podcast. Доброго времени суток, дорогие друзья! В эфире 345-й эпизод подкаста-путеводителя в замечательный мир trance музыки. Сегодня вас ждут лучшие треки за июнь-июль месяц. Вы услышите работы от Heatbeat, Christina Novelli & Dave Neven, Emma Hewitt & Markus Schulz, Maarten de Jong, Inertia & Sneijder, Tempo Giusto, David Forbes, Simon Patterson & Sarah de Warren, Mark Sherry & Peetu S, Alexander Komarov, Alex M.O.R.P.H. & Aimoon, Richard Durand, Ciaran McAuley & Paul Denton. #DTUPodcast345 #Trance #Progressive #Uplifting #PsyTrance #VocalTrance #Trancefamily TRACKLIST: 01. Heatbeat - Titan [ARMIND] 02. Christina Novelli & Dave Neven - Feel Alive [MUSE EUPHORIA] 03. Emma Hewitt x Markus Schulz - Into My Arms [BLACK HOLE] 04. Maarten de Jong - Atom [ARMIND] 05. Inertia - The System (Sneijder Remix) [SUBCULTURE] 06. Schala - Rebirth [ARMIND] 07. Tempo Giusto - Spartan [REACHING ALTITUDE] 08. David Forbes - Octagon [WHO'S AFRAID OF 138?!] 09. Shugz - Blood Rush [HQ] 10. Warp Brothers - Spirit Groove [BLUE TUNES] 11. Simon Patterson feat. Sarah de Warren - Sorry [ARMIND] 12. Avalon & Waio - Shiva (Webra Remix) [NANO RECORDS] 13. Sesto Sento vs Faders - Music Take Me Higher (Highvoltz Remix) [NUTEK] 14. Armin van Buuren & Blasterjaxx feat. 24H - Superman [ARMIND] 15. Mark Sherry & Peetu S - Close Your Eyes [OUTBURST] 16. Alexander Komarov - Echo Of Dreams [INTERPLAY GLOBAL] 17. Alex M.O.R.P.H. & Aimoon Pres. Northern Storm - You [MORTHLAND] 18. Midway - Inca (Asteroid Remix) [IN TRANCE WE TRUST] 19. Richard Durand - Evolution [FSOE] 20. Ciaran McAuley & Paul Denton - Stand Still [FSOE] 21. Mekkanikka - Summer Slam [UNITED BEATS] 22. Astrix x Tristan - Awake The Snake (Volcano On Mars Remix) [SHAMANIC TALES] И помните, что музыка должна находиться вне политики. Мирного неба вам над головой. Всем приятного, теплого отдыха. До скорой встречи. ▶ PromoDJ: promodj.com/aeroritmix ▶ Mixcloud: www.mixcloud.com/aeroritmix-dj ▶ Souncloud: soundcloud.com/aeroritmix-dj ▶ VK: vk.com/public204888851 Подписывайтесь на мой подкаст (Subscribe to My Podcast): ● Apple Podcasts - podcasts.apple.com/ru/podcast/… ● Google Podcasts - podcasts.google.com/feed/aHR0c… ● Pocket Casts - pca.st/drpc1gfj Слушайте и наслаждайтесь! Listen & Enjoy! From Russia with Love!

Be Uncommon
#063: On Inertia, Paradigm Shifts, & How Being 25 is WEIRD AF

Be Uncommon

Play Episode Listen Later Aug 13, 2022 66:21


LUKE IS BACK! We welcome our Co-Host Luke Bockenstette back on the podcast in real UNCOMMON fashion. The boys discuss how being 25 years old is WEIRD AF & a huge paradigm shift that they have both gone through that has lead to some profound discoveries about themselves as individuals that has caused them to shed old egos about who they thought they were. Sponsors Strong Coffee STRONG Coffee brings that specialty coffee experience to consumers in a healthy, done-for-you premixed powder that includes instant organic coffee, grass-fed collagen protein, and MCT oil powder to fuel your mind and body for hours so you can spend more time and energy on the important things in life. They have amazing flavors to choose from like honey lavender, Vanilla, Mocha, & black Use code: “fossum” at checkout for a % off your purchase https://strongcoffeecompany.com/?ref=fossum Ketone-IQ Ketones are nature's superfuel, proven to support energy, focus, endurance, and more. Developed alongside the U.S. military and top universities, Ketone-IQ™ delivers all those benefits in one drink. No caffeine, no sugar—just clean, on-demand energy for superior physical and cognitive performance. Use code: “KALEB” at checkout for a % off your purchase https://hvmn.com/ketone?rfsn=6760247.5b6d831 Vibram Five Fingers Barefoot shoes that you can wear anywhere to get that barefoot feel & health. The link includes the discount applied https://us.vibram.com/homepage?src=KalebFossum

Alba Trance Sessions
Alba Trance Sessions #548

Alba Trance Sessions

Play Episode Listen Later Aug 8, 2022 119:28


Featuring tracks from Blufeld, Sunny Lax, Rick Pier O'Neil, Emma Hewitt & Markus Schulz, Hausman, Activa & Rolo Green, Richard Durand, R.E.L.O.A.D., Mark Sherry & Peetu S, Inertia, Paul Oakenfold & Baby E, Neos, Warp Brothers and many more. Visit www.albatrancesessions.com for full tracklistings.

DT Radio Shows
Inertia With Shiach #003

DT Radio Shows

Play Episode Listen Later Aug 5, 2022 59:06


Inertia's with Shiach on Data Transmission. At Inertia you will find the best in hypnotic and grooving techno and melodic house presented by our main man Shiach. Tracklist Sweet Pain - Recondite Caligula - Stephan Bodzin Motor City Jarlaberg - Harald Bjork Break You (Radio Slave Remix) - Ralph Falcon Overtone - Peter Dundov Thinking About You (Radio Slave feat. Thomas Gandley Remix) - Sailor & I Vervet (Chris Liebing Remix) - Martin Gore Internal Destination - Orlando Voorn Light Up Your Eyes - Eli & Fur Air Conditionne - Julian Jewel Love Mechanism - Shiach Like the Radio Show? Click the [Repost] ↻ button so more people can hear it! Follow us on Soundcloud: @data-transmission Follow us on Soundcloud: @datatransmission Follow our House Music Spotify Playlist: goo.gl/dHX1Cr Want more house music, tech house, deep tech, minimal? Subscribe to our Youtube Channel - bit.ly/dtytube Listen to DT Radio: Website: bit.ly/DTSite1 Pop Up: bit.ly/DTRadioPopUp1 Follow Data Transmission: Instagram: goo.gl/6LqfCJ Spotify: goo.gl/p1gaWy YouTube: goo.gl/3JmFbF Facebook: goo.gl/ZAsYwY Twitter: goo.gl/o1ZF3P iTunes Podcast: goo.gl/TK1Xxu Spotify Podcast: spoti.fi/31KIS6s Mixcloud Podcast: bit.ly/30CzOk0

DT Radio Shows
Inertia With Shiach #002

DT Radio Shows

Play Episode Listen Later Jul 22, 2022 59:56


Inertia's with Shiach on Data Transmission. At Inertia you will find the best in hypnotic and grooving techno and melodic house presented by our main man Shiach. Tracklist Stolen Glances (Original Mix) - Fossil Archive, Stevie Cox Delayed Spheres (Original Mix) - Malpunkt Madness (Gregor Tresher Remix) - Oniris Your Soul (Original Mix) - Avision Galaxy In An Atom (Original Mix) - Marc Romboy Myself (Original Mix) - Mark Antonio Bruto (Original Mix) - Trikk, Frank Wiedemann Walking Away (Original Mix) - Mind Against No Dancers (Adam Port Remix) - Cubicolor Red Thread (Original Mix) - Innellea, Nala Tessloff Running (Original Mix) - Anyma, Meg Myers

Carolina Real Connectors
The Science of Stuck - Breaking Through Inertia to Find Your Path Forward with Britt Frank

Carolina Real Connectors

Play Episode Listen Later Jul 22, 2022 73:46


“We need to know how to drive our brains, and then life works,” says Britt Frank, clinician and trauma specialist, who believes that we must learn how our bodies respond to different stimuli and form emotions. Britt is less concerned with the “why” of things, and more about the “what” and the “how.” She's not interested in seeking or answering spiritual questions. If we learn how our bodies react to emotions, we can make better choices about our behavior, and life gets easier. Feelings, she says, are body cues, and emotions are the story or meaning we attach to those cues. The goal, she says, is to stop being a reactor and start being a responder. Britt and Deevo share their similar shock and disillusionment about what college turned out to be and the different ways that people, especially introverts, connect with people. Britt says as important as connection is, it can't come at the cost of health, safety, and integrity. They discuss the merits and limitations of psych meds, and the spiritual contradictions of abortion protesters. Hear Britt and Deevo discuss the importance of celebrating micro-wins, the importance of taking accountability and responsibility, and a basic set of actionable steps. Quotes • “Feelings are just body cues. Emotions are when we attach a story or meaning to those body cues.” (15:04-15:10 | Britt) • “Live your best life is sort of, ‘meh.' It's not live your best life, it's live a life where you get to make choices versus hanging around reacting to things all the time and not knowing why.” (17:37-17:48 | Britt) • “There's a degree to which life gets really crappy the more you know and then there's a pivot point at which eventually—assuming you have choices, and relative safety and access—you're no longer lled by your injury.” (21:22-21:36 | Britt) • “No matter how freethinking, no matter how outside the box, no matter how critical or unique you are, at the core of who we are as humans we still need to belong, we still need to have those connections, those conversations, some meaning, some depth. And that only comes from other humans.” (42:33-42:53 | Deevo) • “What are some key adjustments one can make for transformations. What do you mean by that?” (52:32-52:36 | Britt) • “I think personal responsibility is probably one of the keystone human emotions or human elements that if you don't have it, you're going to be lost for a long time.” (55:03-55:12 | Deevo) Links Connect with Britt Frank: Website | https://www.scienceofstuck.com/ Instagram | @brittfrank Connect with A Little Impolite: Deevo Instagram | @fusionphotog Lisa Instagram | @lisastaffphoto Business Instagram | @sproutconnectors Here it is! Our gift to you. The free download for “All of the Tools You Need for a Healthy Relationship with Social Media”: https://view.flodesk.com/pages/62462253b3be600de2a2710c YouTube: https://www.youtube.com/channel/UCn4C58U6MRnBaJP8NOknYHg Apple Podcasts: https://podcasts.apple.com/us/podcast/mind-body-business/id1360851323 Podcast production and show notes provided by HiveCast.fm --- Support this podcast: https://anchor.fm/sprout-connectors/support

thebuzzr pod
NTGB

thebuzzr pod

Play Episode Listen Later Jul 19, 2022 23:12


Hey, y'all. I am Shay. This is thebuzzr podcast. On air indie, from my pad to yours over the airways.

Revamping Retirement
Save More Tomorrow 2.0: Harnessing Inertia with Dr. Shlomo Benartzi

Revamping Retirement

Play Episode Listen Later Jul 17, 2022 43:19


In episode 42 of Revamping Retirement, Jennifer Doss and Scott Matheson talk with Dr. Shlomo Benartzi, a behavioral economist widely known for the Save More Tomorrow (SMarT) program, which he pioneered with Nobel Laureate Dr. Richard Thaler. Save More Tomorrow is a behavioral nudge designed to help employees increase their saving rates gradually over time. The SMarT program was incorporated into the Pension Protection Act of 2006 and has since helped boost the retirement savings of more than 15 million Americans through auto-enrollment and auto-escalation features. More than 25 years later, Dr. Benartzi talks about the success of the SMarT program and shares why he feels there is a big opportunity to rethink the details, particularly when it comes to incorporating technology to elevate customization. He also discusses how proposed legislation like the Securing a Strong Retirement Act of 2021 (SECURE 2.0) could help move the dial for auto-features. Shifting the focus from the accumulation phase of retirement, Dr. Benartzi talks about why auto-features are not as relevant when it comes to decumulation—which he considers to be the next big retirement industry gap. He shares why moving from a savings plan mentality to a true retirement plan approach is key and speaks to the importance of personalization when it comes to addressing the differing retirement income needs of participants. In Minute with Mike, Mike Webb shares the differences between fiduciary liability insurance and a fidelity bond.  

The Aligned Self
5 Minute Friday: Overcoming Inertia & Taking Action

The Aligned Self

Play Episode Listen Later Jul 15, 2022 12:38


How do you get yourself to take action when you know you should but you don't feel like it? You practice.You practice doing something each day that you find disagreeable, yet would make your life better if you got it done. In this 5 Minute Friday Daniel shares how he implemented this practice and the impact on his life.Inch by inch, anything's cinch.In this episode Daniel D'Neuville shares the technique and mindset to move you closer to Mind Mastery... directing the brain where you want it to go, when you want it to go.Also in this episode , he guides you how to move yourself into a higher vibe state, overcoming the comfortable lazy state of mind. From rest to action.This conversation is rich with valuable information on how to train the subconscious, developing the action habit, raising self-esteem, and becoming more disciplined.LINKSTHE ALIGNED SELF COACHING PROGRAM: http://yesdaniel.comFREE VIDEO TRAINING: 5 Mindset Shifts to Up Grade Your Money GameCheckout Daniel's new membership program THE VAULTDANIEL D'NEUVILLE's WEBSITE: http://dneuville.comDaniel's YouTube CHANNELFACEBOOK GROUPSPODCAST LISTENER'S FB COMMUNITYEXTREME GRATITUDE PROJECTBass Slap Intro written and performed by bass player & producer: Miki SantamariaMiki's YouTube Channel: https://www.youtube.com/c/MikiSantamaria See acast.com/privacy for privacy and opt-out information.

The Fierce Female Network
Kinetic-Inertia, Lind, Roberto Cusimano, and Claude Ink Are One Air With Fierce

The Fierce Female Network

Play Episode Listen Later Jul 13, 2022 34:00


LIND Swedish family father. Played piano since i was a kid and finaly togheter with great swedish producers i started to release my own edm songs.   Kinetic-Inertia Originally based in hip-hop, I started producing deep house and dance music back in 2021. Deep rooted in some of the best 90s dance songs which was embraced and inspired many of the tracks produced.

Cutting On Action
Ep. 2 - Overcoming "Bad Inertia"

Cutting On Action

Play Episode Listen Later Jul 11, 2022 24:36


We all encounter inertia, whether in our personal or professional lives, or our creative pursuits. Sometimes inertia is a good thing, and other times it can be a really detrimental thing. How do we get out of patterns of "bad inertia" and into patterns of "good inertia" - picking up steam to accomplish everything we set out to do? Listen to the latest episode of Cutting On Action with Brandon Buccheri to find out. Interact With Us On Social Media: Instagram: Brandon Buccheri Facebook: PhotoCo Commercial: Evoko Films Check out our other PhotoCo podcast hosted by Miles Witt Boyer: Photographic Collective Podcast --- Support this podcast: https://anchor.fm/cuttingonaction/support

Meet My Brain - A Field Guide to Autism

In autistics it keeps us stuck, makes us unstoppable and won't let us change direction. Do you struggle with getting up in the morning, stay in a job you don't like or focus for hours on a special interest? You're experiencing inertia. Learn what these three types of inertia look like in autistics.Support the Show! Rate and review the podcast. It helps make this content available to more autistics. It only takes a few seconds to rate, less than a minute to review.Twitter: @anautisticwomanEmail: info@theautisticwoman.comWebsite: theautisticwoman.comThis is the #1 autism resource for late-diagnosed autistic adults. Rated in the top 3% globally.Slava Ukraine!Support the show

LIVIN THE GOOD LIFE SHOW
TOUR EDGE GOLF featuring the all new WINGMAN 700 SERIES

LIVIN THE GOOD LIFE SHOW

Play Episode Listen Later Jul 8, 2022 10:55


 Tour Edge Announces the Launch of Wingman® 700 Series Putters Featuring Three New MOI-based DesignsToday, Tour Edge is announcing the launch of their new Exotics Wingman 700 Series Putters featuring three new modern mini-mallet designs and six total hosel options. The brand-new shapes offer cascading MOI (Moment of Inertia) properties matching the size of the Wingman putter head, providing maximum stability and optimal roll for every player type. The three innovative designs provide optimized alignment optics on the wildly effective Lock-On technology alignment system, improved acoustics, and a softer feel. Interchangeable sole weights on the heel and toe are featured in every model. “The original Wingman putters enjoyed a cult-like success, and over the past two years, we've been improving upon that success in every way possible,” said Tour Edge President and chief designer David Glod. “The feedback we received was that the Lock-On Alignment and the extreme stability of the putters were truly revolutionary for golfers. We put our focus on expanding the series to fit more player preferences in the shaping and to really upgrade the look, sound and feel of the putters in a big way.” “The result of our two-year revamp is six new putter models that represent some of the highest MOI putters on the market, and that are absolutely going to help you reduce the number of putts you are taking in a round,” added Glod. The Wingman 700 Series putters will be available for purchase worldwide on August 1 and will carry a retail price of $199.99. Models 701 and 702 – SUPER MAX MOIThe 701 (Mid Toe-Hang) and 702 (Face Balance) models produce extreme MOI. in a modern mallet design that forces the face square to the swing path for a truer roll due to the extreme perimeter weighted wings featured on the Wingman 701 and 702 designs.This larger footprint provides an extremely high resistance to twisting with one of the highest MOI ratings of any putter available on the market.Models 703 and 704 – MAX MOI  The 703 (Mid Toe-Hang) and 704 (Face Balance) models remove the perimeter wings featured on the Super Max MOI models and move the interchangeable weights more face forward. This provides a gradual step down in MOI for those wanting a more compact, smaller footprint while still providing massive MOI properties.  With the weights directly behind the face, this design creates more face control. MODELS 705 and 706 – HIGH MOI/MINI-MALLET 

Charis Daily Live Bible Study
730. Overcoming Inertia - Dr. Dean Radtke

Charis Daily Live Bible Study

Play Episode Listen Later Jul 4, 2022 46:49


Join Andrew Wommack and special guests every weekday for our Charis Daily Live Bible Study! Interact with dynamic speakers in real-time and gain a deeper understanding of the scriptures as they answer your questions. Tune in every day to hear from different speakers as they share from God's Word. The instructors will not only include Andrew Wommack and Charis Woodland Park staff but also our stateside and international directors. You'll witness miracles happen right there, wherever you're listening!

The Podtrepreneur Podcast

Here on The Podtrepreneur Podcast, we believe traveling the entrepreneurship road alone can be daunting and difficult, but with the right map and compass you can go anywhere. The Podtrepreneur himself, Tyler Detring, started Ascend Commercial Builders in 2019 with $50 in the bank and is continuing to build a successful team and business. It wasn't all rainbows and butterflies, there were ups and downs, but those ups and downs are what allowed Tyler to learn a lesson or two! On this episode of The Podtrepreneur, we dive into the concept of inertia. The law of inertia states that an object in motion tends to stay in motion unless acted upon by an external force, and an object at rest tends to stay at rest unless acted upon by an external force. This is true in physics and in business. Join us for a conversation about momentum in your business.

The Bike Shed
344: Spinner Armageddon

The Bike Shed

Play Episode Listen Later Jun 28, 2022 38:50


Steph has an update and a question wrapped into one about the work that is being done to migrate the Test::Unit test over to RSpec. Chris got to do something exciting this week using dry-monads. Success or failure? This episode is brought to you by BuildPulse (https://buildpulse.io/bikeshed). Start your 14-day free trial of BuildPulse today. Bartender (https://www.macbartender.com/) dry-rb - dry-monads v1.0 - Pattern matching (https://dry-rb.org/gems/dry-monads/1.0/pattern-matching/) alfred-workflows (https://github.com/tupleapp/alfred-workflows/blob/master/scripts/online_users.rb) Raycast (https://www.raycast.com/) ruby-science (https://github.com/thoughtbot/ruby-science) Inertia.js (https://inertiajs.com/) Remix (https://remix.run/) Become a Sponsor (https://thoughtbot.com/sponsorship) of The Bike Shed! Transcript: AD: Flaky tests take the joy out of programming. You push up some code, wait for the tests to run, and the build fails because of a test that has nothing to do with your change. So you click rebuild, and you wait. Again. And you hope you're lucky enough to get a passing build this time. Flaky tests slow everyone down, break your flow, and make things downright miserable. In a perfect world, tests would only break if there's a legitimate problem that would impact production. They'd fail immediately and consistently, not intermittently. But the world's not perfect, and flaky tests will happen, and you don't have time to fix all of them today. So how do you know where to start? BuildPulse automatically detects and tracks your team's flaky tests. Better still, it pinpoints the ones that are disrupting your team the most. With this list of top offenders, you'll know exactly where to focus your effort for maximum impact on making your builds more stable. In fact, the team at Codecademy was able to identify their flakiest tests with BuildPulse in just a few days. By focusing on those tests first, they reduced their flaky builds by more than 68% in less than a month! And you can do the same because BuildPulse integrates with the tools you're already using. It supports all of the major CI systems, including CircleCI, GitHub Actions, Jenkins, and others. And it analyzes test results for all popular test frameworks and programming languages, like RSpec, Jest, Go, pytest, PHPUnit, and more. So stop letting flaky tests slow you down. Start your 14-day free trial of BuildPulse today. To learn more, visit buildpulse.io/bikeshed. That's buildpulse.io/bikeshed. STEPH: What type of bird is the strongest bird? CHRIS: I don't know. STEPH: A crane. [laughter] STEPH: You're welcome. And on that note, shall we wrap up? CHRIS: Let's wrap up. [laughter] Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Chris Toomey. STEPH: And I'm Steph Viccari. CHRIS: And together, we're here to share a bit of what we've learned along the way. So, Steph, what's new in your world? STEPH: Hey, Chris, I saw a good movie I'd like to tell you about. It was just over the weekend. It's called The Duke, and it's based on a real story. I should ask, have you seen it? Have you heard of this movie called The Duke? CHRIS: I don't think so. STEPH: Okay, cool. It's a true story, and it's based on an individual named Kempton Bunton who then stole a particular portrait, a Goya portrait; if you know your artist, I do not. But he stole a Goya portrait and then essentially held at ransom because he was a big advocate that the BBC News channel should be free for people that are living on a pension or that are war veterans because then they're not able to afford that fee. But then, if you take the BBC channel away from them, it disconnects them from society. And it's a very good movie. I highly recommend it. So I really enjoyed watching that over the weekend. CHRIS: All right. Excellent recommendation. We will, of course, add that to the show notes mostly so that I can find it again later. STEPH: On a more technical note, I have a small update, or it's more of a question. It's an update and a question wrapped into one about the work that is being done to migrate the Test::Unit test over to RSpec. This has been quite a journey that Joël and I have been on for a while now. And we're making progress, but we're realizing that we're spending like 95% of our time in the test setup and porting that over, specifically because we're mapping fixture data over to FactoryBot, and we're just realizing that's really painful. It's taking up a lot of time to do that. And initially, when I realized we were just doing that, we hadn't even really talked about it, but we were moving it over to FactoryBot. I was like, oh, cool. We'll get to delete all these fixtures because there are around 208 files of them. And so that felt like a really good additional accomplishment to migrating the test over. But now that we realize how much time we're spending migrating the data over for that test setup, we've reevaluated, and I shared with Joël in the Slack channel. I was like, crap. I was like, I have a bad idea, and I can't not say it now because it's crossed my mind. And my bad idea was what if we stopped porting over fixtures to FactoryBot and then we just added the fixtures to a directory that RSpec would look so then we can rely on those fixtures? And then that way, we're literally then ideally just copying over from Test::Unit over to RSpec. But it does mean a couple of things. Well, one, it means that we're now running those fixtures at the beginning of RSpec test. We're introducing another pattern of where these tests are already using FactoryBot, but now they have fixtures at the top, and then we won't get to delete the fixtures. So we had a conversation around how to manage and mitigate some of those concerns. And we're still in that exploratory. We're going to test it out and see if this really speeds us up referencing the fixtures. The question that's wrapped up in this is there's something different between how fixtures generate data and how factories generate data. So I've run into this a couple of times now where I moved data over to just call a factory. But then I was hitting these callbacks or after-save-hooks or weird things that were then preventing me from creating the record, even though fixtures was creating them just fine. And then Joël pointed out today that he was running into something similar where there were private methods that were getting called. And there were all sorts of additional code that was getting run with factories versus fixtures. And I don't have an answer. Like, I haven't looked into this. And it's frankly intentional because I was trying hard to not dive into understanding the mechanics. We really want to get through this. But now I'm starting to ponder a little more as to what is different with fixtures and factories? And I liked that factories is running these callbacks; that feels correct. But I'm surprised that fixtures doesn't, or at least that's the experience that I'm having. So there's some funkiness there that I'd like to explore. I'll be honest; I don't know if I'm going to. But if anybody happens to know what that funkiness is or why fixtures and factories are different in that regard, I would be very intrigued because, at some point, I might look into it just because I would like to know. CHRIS: Oh, that is interesting. I have not really worked with fixtures much at all. I've lived a factory life myself, and thus that's where almost all of my experience is. I'm not super surprised if this ends up being the case, like, the idea that fixtures are just some data that gets shoveled into the database directly as opposed to FactoryBot going through the model layer. And so it's sort of like that difference. But I don't know that for certain. That sounds like what this is and makes sense conceptually. But I think this is what you were saying like, that also kind of pushes me more in the direction of factories because it's like, oh, they're now representative. They're using our model layer, where we're defining certain truths. And I don't love callbacks as a mechanism. But if your app has them, then getting data that is representative is useful in tests. Like one of the things I add whenever I'm working with FactoryBot is the FactoryBot lint rake task RSpec thing that basically just says, "Are your factories valid?" which I think is a great baseline to have. Because you may add a migration that adds a default constraint or something like that to the database that suddenly all your factories are invalid, and it's breaking tests, but you don't know it. Like subtly, you change it, and it doesn't actually break a test, but then it's harder later. So that idea of just having more correctness baked in is always nice, especially when it can be automated like that, so definitely a fan of that. But yeah, interested if you do figure out the distinction. I do like your take, though, of like, but also, maybe I just won't figure this out. Maybe this isn't worth figuring it out. Although you were in the interesting spot of, you could just port the fixtures over and then be done and call the larger body of work done. But it's done in sort of a half-complete way, so it's an interesting trade-off space. I'm also interested to hear where you end up on that. STEPH: Yeah, it's a tough trade-off. It's one that we don't feel great about. But then it's also recognizing what's the true value of what we're trying to deliver? And it also comes down to the idea of churn versus complexity. And I feel like we are porting over existing complexity and even adding a smidge, not actual complexity but adding a smidge of indirection in terms that when someone sees this file, they're going to see a mixed-use of fixtures and factories, and that doesn't feel good. And so we've already talked about adding a giant comment above fixtures that just is very honest and says, "Hey, these were ported over. Please don't mimic this. But this is some legacy tests that we have brought over. And we haven't migrated the fixtures over to use factories." And then, in regards to the churn versus complexity, this code isn't likely to get touched like these tests. We really just need them to keep running and keep validating scenarios. But it's not likely that someone's going to come in here and really need to manage these anytime soon. At least, this is what I'm telling myself to make me feel better about it. So there's also that idea of yes, we are porting this over. This is also how they already exist. So if someone did need to manage these tests, then going to Test::Unit, they would have the same experience that they're going to have in RSpec. So that's really the crux of it is that we're not improving that experience. We're just moving it over and then trying to communicate that; yes, we have muddied the waters a little bit by introducing this other pattern. So we're going to find a way to communicate why we've introduced this other pattern, but that way, we can stay focused on actually porting things over to RSpec. As for the factories versus fixtures, I feel like you're onto something in terms of it's just skipping that model layer. And that's why a lot of that functionality isn't getting run. And I do appreciate the accuracy of factories. I'd much rather know is my data representative of real data that can get created in the world? And right now, it feels like some of the fixtures aren't. Like, how they're getting created seemed to bypass really important checks and validations, and that is wrong. That's not what we want to have in our test is, where we're creating data that then the rest of the application can't truly create. But that's another problem for another day. So that's an update on a trade-off that we have made in regards to the testing journey that we are on. What's going on in your world? CHRIS: Well, we got to do something exciting this week. I was working on some code. This is using dry-monads, the dry-rb space. So we have these result objects that we use pretty pervasively throughout the app, and often, we're in a controller. We run one of these command objects. So it's create user, and create user actually encompasses a ton of logic in our app, and that object returns a result. So it's either a success or a failure. And if it's a success, it'll be a success with that new user wrapped up inside of it, or if it's a failure, it's a specific error message. Actually, different structured error messages in different ways, some that would be pushed to the form, some that would be a flash message. There are actually fun, different things that we do there. But in the controller, when we interact with those result objects, typically what we'll do is we'll say result equals create user dot run, (result=createuser.run) and then pass it whatever data it needs. And then on the next line, we'll say results dot either, (results.either), which is a method on these result objects. It's on both the success and failure so you can treat them the same. And then you pass what ends up being a lambda or a stabby proc, or I forget what they are. But one of those sort of inline function type things in Ruby that always feel kind of weird. But you pass one of those, and you actually pass two of them, one for the success case and one for the failure case. And so in the success case, we redirect back with a notice of congratulations, your user was created. Or, in the failure case, we potentially do a flash message of an alert, or we send the errors down, or whatever it ends up being. But it allows us to handle both of those cases. But it's always been syntactically terrible, is how I would describe it. It's, yeah, I'm just going to leave it at that. We are now living in a wonderful, new world. This has been something that I've wanted to try for a while. But I finally realized we're actually on Ruby 2.7, and so thus, we have access to pattern matching in Ruby. So I get to take it for a spin for the first time, realizing that we were already on the correct version. And in particular, dry-monads has a page in their docs specific to how we can take advantage of pattern matching with the result objects that they provide us. There's nothing specific in the library as far as I understand it. This is just them showing a bunch of examples of how one might want to do it if they're working with these result objects. But it's really great because it gives the ability to interact with, you know, success is typically going to be a singular case. There's one success branch to this whole logic, but there are like seven different ways it can fail. And that's the whole idea as to why we use these command objects and the whole Railway Oriented Programming and that whole thing which I have...what is this word? [laughs] I feel like I should know it. It's a positive rant. I have raved; that is how our users kindly pointed that out to us. I have raved about the Railway Oriented Programming that allows us to do. But it's that idea that they're actually, you know, there's one happy path, and there are seven distinct failure modes, seven unhappy paths. And now, using pattern matching, we actually get a really expressive, readable, useful way to destructure each of those distinct failures to work with the particular bits of data that we need. So it was a very happy day, and I got to explore it. This is, again, a feature of Ruby, not a feature of dry-monads. But dry-monads just happens to embrace it and work really well with it. So that was awesome. STEPH: That is awesome. I've seen one or two; I don't know, I've seen a couple of tweets where people are like, yeah, Ruby pattern matching. I haven't found a way to use it. So I'm excited that you just shared a way that you found to use it. I'm also worried what it says about our developer culture that we know the word rant so well, but rave, we always have to reach back into our memory to be like, what's that positive word or something that we like? [laughs] CHRIS: And especially here on The Bike Shed, where we try to gravitate towards the positive. But yeah, it's an interesting point that you make. STEPH: We're a bunch of ranters. It's what we do, pranting ranters. I don't know why we're pranting. [laughs] CHRIS: Because it's that exciting. That's what it is. Actually, there was an interesting thing as we were playing around with the pattern matching code, just poking around in the console session with it, and it prints out a deprecation warning. It's like, warning: this is an experimental feature. Do not use it, be careful. But in the back of my head, I was like, I actually know how this whole thing plays out, Ruby 2.7, and I assure you, it's going to be fine. I have been to the future, at least I'm pretty sure. I think the version that is in Ruby 2.7 did end up getting adopted basically as it stands. And so, I think there is also a setting to turn off that deprecation warning. I haven't done it yet, but I mostly just enjoyed the conversation that I had with this deprecation message of like, listen, I've been to the future, and it's great. Well, it's complicated, but specific to this pattern matching [laughs] in Ruby 3+ versions, it went awesome. And I'm really excited about that future that we now live in. STEPH: I wish we had that for so many more things in our life [laughs] of like, here's a warning, and it's like, no, no, I've seen the future. It's all right. Or you're totally right; I should avoid and back out of this now. CHRIS: If only we could know how the things would play out, you know. But yeah, so pattern matching, very cool. I'll include a link in the show notes to the particular page in the dry-monads docs. But there are also other cool things on the internet. In an unrelated but also cool thing that I found this week, we use Tuple a lot within our organization for pair programming. For anyone who's not familiar with it, it's a really wonderful piece of technology that allows you to pair program pretty seamlessly, better video quality, all of those nice things that we want. But I found there was just the tiniest bit of friction in starting a Tuple call. I know I want to pair with this person. And I have to go up and click on the little menu bar, and then I have to find their name, then I have to click a button. That's just too much. That's not how...I want to live my life at the keyboard. I have a thing called Bartender, which is a little menu bar manager utility app that will collapse down and hide the icons. But it's also got a nice, little hotkey accessible pop-up window that allows me to filter down and open one of the menu bar pop-out menus. But unfortunately, when that happens, the Tuple window isn't interactive at that point. I can't use the arrow keys to go up and down. And so I was like, oh, man, I wonder if there's like an Alfred workflow for this. And it turns out indeed there is actually managed by the kind folks at Tuple themselves. So I was able to find that, install it; it's great. I have it now. I can use that. So that was a nice little upgrade to my workflow. I can just type like TC space and then start typing out the person's name, and then hit enter, and it will start a call immediately. And it doesn't actually make me more productive, but it makes me happier. And some days, that's what matters. STEPH: That's always so impressive to me when that happens where you're like, oh, I need a thing. And then you went through the saga that you just went through. And then the people who manage the application have already gotten there ahead of you, and they're like, don't worry, we've created this for you. That's one of those just beautiful moments of like, wow, y'all have really thought this through on a bunch of different levels and got there before me. CHRIS: It's somewhat unsurprising in this case because it's a very developer-centric organization, and Ben's background being a thoughtbot developer and Alfred user, I'm almost certain. Although I've seen folks talking about Raycast, which is the new hotness on the quick launcher world. I started eons ago in Quicksilver, and then I moved to Alfred, I don't know, ten years ago. I don't know what time it is anymore. But I've been in Alfred land for a while, but Raycast seems very cool. Just as an aside, I have not allowed myself... [laughs] this is another one of those like; I do not have permission to go explore this new tool yet because I don't think it will actually make me more productive, although it could make me happier. So... STEPH: I haven't heard of that one, Raycast. I'm literally adding it to the show notes right now as a way so you can find The Duke later, and I can find Raycast later [chuckles] and take a look at it and check it out. Although I really haven't embraced the whole Alfred workflow. I've seen people really enjoy it and just rave about it and how wonderful it is. But I haven't really leaned into that part of the world; I don't know why. I haven't set any hard and fast rules for myself where I can't play around with these technologies, but I haven't taken the time to do it either. CHRIS: You've also not found yourself writing thousands of lines of Vimscript because you thought that was a good idea. So you don't need as many guardrails it would seem. That's my guess. STEPH: This is true. CHRIS: Whereas I need to be intentional [laughs] with how I structure my interaction with my dev tools. STEPH: Instead, I'm just porting over fixtures from one place to another. [laughs] That's the weird space that I'm living in instead. [laughs] CHRIS: But you're getting paid for that. No one paid me for the Vimscript I wrote. [laughter] STEPH: That's fair. Speaking around process-y things, there's something that's been on my mind that Valeria, another thoughtboter, suggested around how we structure our meetings and the default timing that we have for meetings. So Thursdays are my team-focused day. And it's the day where I have a lot of one on ones. And I realized that I've scheduled them back to back, which is problematic because then I have zero break in between them, which I'm less concerned about that because then I can go for an hour or something and not have a break. And I'm not worried about that part. But it does mean that if one of those discussions happens to go over just even for like two or three minutes, then it means that someone else is waiting for me in those two to three minutes. And that feels unacceptable to me. So Valeria brought up a really good idea where I think it's only with the Google Meet paid version. I could be wrong there. But I think with the paid version of it that then you can set the new default for how long a meeting is going to last. So instead of having it default to 30 minutes, have it default to 25 minutes. So then, that way, you do have that five-minute buffer. So if you do go over just like two or three minutes with someone, you've still got like two minutes to then hop to the next call, and nobody's waiting for you. Or if you want those five minutes to then grab some water or something like that. So we haven't implemented it just yet because then there's discussion around is this a new practice that we want everybody to move to? Because I mean, if just one person does it, it doesn't work. You really need everybody to buy into the concept of we're now defaulting to 25 versus 30-minute meetings. So I'll have to let you know how that goes. But I'm intrigued to try it out because I think that would be very helpful for me. Although there's a part of me that then feels bad because it's like, well, if I have 30 minutes to chat with somebody, but now I'm reducing it to 25 minutes each time, I didn't love that I'm taking time away from our discussion. But that still feels like a better outcome than making somebody wait for three to five minutes if something else goes over. So have you ever run into something like that? How do you manage back-to-back meetings? Do you intentionally schedule a break in between or? CHRIS: I do try to give myself some buffer time. I stack meetings but not so much so that they're just back to back. So I'll stack them like Wednesdays are a meeting-heavy day for me. That's intentional just to be like, all right, I know that my day is going to get chopped up. So let's just really lean into that, chop the heck out of Wednesday afternoons, and then the rest of the week can hopefully have slightly longer deep work-type sessions. And, yeah, in general, I try and have like a little gap in between them. But often what I'll do for that is I'll stagger the start of the next meeting to be rather than on the hour or the half-hour, I start it on the 15th minute. And so then it's sort of I now have these little 15-minute gaps in my workflow, which is enough time to do one or two small things or to go get a drink or whatever it is or if things do run over. Like, again, I feel what you're saying of like, I don't necessarily want to constrain a meeting. Or I also don't necessarily want to go into the habit of often over-running. I think it's good to be intentional. Start meetings on time, end meetings on time. If there's a great conversation that's happening, maybe there's another follow-up meeting that should happen or something like that. But for as nonsensical of a human as I believe myself to be, I am rather rigid about meetings. I try very hard to be on time. I try very hard to wrap them up on time to make sure I go to the next one. And so with that, the 15-minute staggering is what I've found works for me. STEPH: Yeah, that makes sense. One-on-ones feels special to me because I wholeheartedly agree with being very diligent about like, hey, this is our meeting time. Let's do a time check. Someone says that at the end, and then that way, everybody can move on. But one on ones are, there's more open discussion space, and I hate cutting people off, especially because it might not be until the last 15 minutes that you really got into the meat of the conversation. Or you really got somewhere that's a little bit more personal or things that you want to talk about. So if someone's like, "Yeah, let me tell you about my life goals," and you're like, "Oh, no, wait, sorry. We're out of time." That feels terrible and tragic to do. So I struggle with that part of it. CHRIS: I will say actually, on that note, I'm now thinking through, but I believe this to be true. Everyone that reports to me I have a 45-minute one-on-one with, and then my CEO I set up the one-on-one. So I also made that one a 45-minute one-on-one. And that has worked out really well. Typically, I try and structure it and reiterate this from time to time of, like, hey, this is your space, not mine. So let's have whatever conversation fits in here. And it's fine if we don't need to use the whole time, but I want to make sure that we have it and that we protect it. Because I often find much like retro, I don't know; I think everything's fine. And then suddenly the conversation starts, and you're like, you know what? Actually, I'm really concerned now that you mentioned it. And you need that sort of empty space that then the reality sort of pop up into. And so with one on one, I try and make sure that there is that space, but I'm fine with being like, we can cut this short. We can move on from one-on-one topics to more of status updates; let's talk about the work. But I want to make sure that we lead with is there anything deeper, any concerns, anything you want to talk through? And sort of having the space and time for that. STEPH: I like that. And I also think it speaks more directly to the problem I'm having because I'm saying that we keep running over a couple of minutes, and so someone else is waiting. So rather than shorten it, which is where I'm already feeling some pain...although I still think that's a good idea to have a default of 25-minute meetings so then that way, there is a break versus the full 30. So if people want to have back-to-back meetings, they still have a little bit of time in between. But for one on ones specifically, upping it to 45 minutes feels nice because then you've got that 15-minute buffer likely. I mean, maybe you schedule a meeting, but, I don't know, that's funky. But likely, you've got a 15-minute buffer until your next one. And then that's also an area that I feel comfortable in sharing with folks and saying, "Hey, I've booked this whole 45 minutes. But if we don't need the whole time, that's fine." I'm comfortable saying, "Hey, we can end early, and you can get more of your time back to focus on some other areas." It's more the cutting someone off when they're talking because I have to hop to the next thing. I absolutely hate that feeling. So thanks, I think I'll give that a go. I think I'll try actually bumping it up to 45 minutes, presuming that other people like that strategy too, since they're opting in [laughs] to the 45 minutes structure. But that sounds like a nice solution. CHRIS: Well yeah, happy to share it. Actually, one interesting thing that I'm realizing, having been a manager at thoughtbot and then now being a manager within Sagewell, the nature of the interactions are very different. With thoughtbot, I was often on other projects. I was not working with my team day to day in any real capacity. So it was once every two weeks, I would have this moment to reconnect with them. And there was some amount of just catching up. Ideally, not like status update, low-level sort of thing, but sort of just like hey, what have you been working on? What have you been struggling with? What have you been enjoying? There was more like I needed bigger space, I would say for that, or it's not surprising to me that you're bumping into 30 minutes not being quite long enough. Whereas regularly, in the one on ones that I have now, we end up cutting them short or shifting out of true one-on-one mode into more general conversation and chatting about Raycast or other tools or whatever it is because we are working together daily. And we're pairing very regularly, and we're all on the same project and all sorts of in sync and know what's going on. And we're having retro together. We have plenty of places to have the conversation. So the one-on-one again, still, I keep the same cadence and the same time structure just because I want to make sure we have the space for any day that we really need that. But in general, we don't. Whereas when I was at thoughtbot, it was all the more necessary. And I think for folks listening; I could imagine if you're in a team lead position and if you're working very closely with folks, then you may be on the one side of things versus if you're a little bit more at a distance from the work that they're doing day to day. That's probably an interesting question to ask, and think about how you want to structure it. STEPH: Yeah, I think that's an excellent point. Because you're right; I don't see these individuals. We may not have really gotten to interact, except for our daily syncs outside of that. So then yeah, there's always like a good first 10 minutes of where we're just chatting about life and catching up on how things are going before then we dive into some other things. So I think that's a really good point. Cool, solving management problems on the mic. I dig it. In slightly different news, I've joined a book club, which I'm excited about. This book club is about Ruby. It's specifically reading the book Ruby Science, which is a book that was written and published by thoughtbot. And it requires zero homework, which is my favorite type of book club. Because I have found I always want to be part of book clubs. I'm always interested in them, but then I'm not great at budgeting the time to make sure I read everything I'm supposed to read. And so then it comes time for folks to get together. And I'm like, well, I didn't do my homework, so I can't join it. But for this one, it's being led by Joël, and the goal is that you don't have to do the homework. And they're just really short sections. So whoever's in charge of leading that particular session of the book club they're going to provide an overview of what's covered in whatever the reading material that we're supposed to read, whatever topic we're covering that day. They're going to provide an overview of it, an example of it, so then we can all talk about it together. So if you read it, that's wonderful. You're a bit ahead and could even join the meeting like five minutes late. Or, if you haven't read it, then you could join and then get that update. So I'm very excited about it. And this was one of those books that I'd forgotten that thoughtbot had written, and it's one that I've never read. And it's public for anybody that's interested in it. So to cover a little bit of details about it, so it talks about code smells, ways to refactor code, and then also common patterns that you can use to solve some issues. So there's a lot of really just great content that's in it. And I'll be sure to include a link in the show notes for anyone else that's interested. CHRIS: And again, to reiterate, this book is free at this point. Previously, in the past, it was available for purchase. But at one point a number of years ago, thoughtbot set all of the books free. And so now that along with a handful of other books like...what's Edward's DNS book? Domain Name Sanity, I believe, is Edward's book name that Edward Loveall wrote when he was not a thoughtboter, [laughs] and then later joined as a thoughtboter, and then we made the book free. But on the specific topic of Ruby Science, that is a book that I will never forget. And the reason I will never forget it is that book was written by the one and only CTO Joe Ferris, who is an incredibly talented developer. And when I was interviewing with thoughtbot, I got down to the final day, which is a pairing session. You do a morning pairing session with one thoughtbot developer, and you do an afternoon pairing session with another thoughtbot developer. So in the morning, I was working with someone on actually a patch to Rails which was pretty cool. I'd never really done that, so that was exciting. And that went fine with the exception that I kept turning on Caps Lock on their keyboard because I was used to Caps Lock being CTRL, and then Vim was going real weird for me. But otherwise, that went really well. But then, in the afternoon, I was paired with the one and only CTO Joe Ferris, who was writing the book Ruby Science at that time. And the nature of the book is like, here's a code sample, and then here's that code sample improved, just a lot of sort of side-by-side comparisons of code. And I forget the exact way that this went, but I just remember being terrified because Joe would put some code up on the screen and be like, "What do you think?" And I was like, oh, is this the good code or the bad code? I feel like I should know. I do not know. I'm not sure. It worked out fine, I guess. I made it through. But I just remember being so terrified at that point. I was just like, oh no, this is how it ends for me. It's been a good run. STEPH: [laughs] CHRIS: I made it this far. I would have loved to work for this nice thoughtbot company, but here we are. But yeah, I made it through. [laughs] STEPH: There are so many layers to that too where it's like, well if I say it's terrible, are you going to be offended? Like, how's this going to go for me if I speak my truths? Or what am I going to miss? Yeah, that seems very interesting (I kind of like it.) but also a terrifying pairing session. CHRIS: I think it went well because I think the code...I'd been following thoughtbot's work, and I knew who Joe was and had heard him on podcasts and things. And I kind of knew roughly where things were, and I was like, that code looks messy. And so I think I mostly got it right, but just the openness of the question of like, what do you think? I was like, oh God. [laughs] So yeah, that book will always be in my memories, is how I would describe it. STEPH: Well, I'm glad it worked out so we could be here today recording a podcast together. [laughs] CHRIS: Recording a podcast together. Now that I say all that, though, it's been a long time since I've read the book. So maybe I'll take a revisit. And definitely interested to hear more about your book club and how that goes. But shifting ever so slightly (I don't have a lot to say on this topic.) but there's a new framework technology thing out there that has caught my attention. And this hasn't happened for a while, so it's kind of novel for me. So I tend to try and keep my eye on where is the sort of trend of web development going? And I found Inertia a while ago, and I've been very, very happy with that as sort of this is the default answer as to how I build websites. To be clear, Inertia is still the answer as to how I build websites. I love Inertia. I love what it represents. But I'm seeing some stuff that's really interesting that is different. Specifically, Remix.run is the thing that I'm seeing. I mentioned it, I think, in the last episode talking about there was some stuff that they were doing with data loading and async versus synchronous, and do you wait on it or? They had built some really nice levers and trade-offs into the framework. And there's a really great talk that Ryan Florence, one of the creators of Remix.run, gave about that and showed what they were building. I've been exploring it a little bit more in-depth now. And there is some really, really interesting stuff in Remix. In particular, it's a meta-framework, I think, is the nonsense phrase that we use to describe it. But it's built on top of React. That won't be true for forever. I think it's actually they would say it's more built on top of React Router. But it is very similar to Next.js for folks that have seen that. But it's got a little bit more thought around data loading. How do we change data? How do we revalidate data after? There's a ton of stuff that, having worked in many React client-side API-heavy apps that there's so much pain, cache invalidation. How do you think about the cache? When do you fetch from the network? How do you avoid showing 19 different loading spinners on the page? And Remix as a framework has some really, I think, robust and well-thought-out answers to a lot of that. So I am super-duper intrigued by what they're doing over there. There's a particular video that I think shows off what Remix represents really well. It's Ryan Florence, that same individual, the creator of Remix, building just a newsletter signup page. But he goes through like, let's start from the bare bones, simplest thing. It's just an input, and a form submits to the server. That's it. And so we're starting from web 2.0, long, long ago, sort of ideas, and then he gradually enhances it with animations and transitions and error states. And even at the end, goes through an accessibility audit using the screen reader to say, "Look, Remix helps you get really close because you're just using web fundamentals." But then goes a couple of steps further and actually makes it work really, really well for a screen reader. And, yeah, overall, I'm just super impressed by the project, really, really intrigued by the work that they're doing. And frankly, I see a couple of different projects that are sort of in this space. So yeah, again, very early but excited. STEPH: On their website...I'm checking it out as you're walking me through it, and on their website, they have "Say goodbye to Spinnageddon." And that's very cute. [laughs] CHRIS: There's some fundamental stuff that I think we've just kind of as a web community, we made some trade-offs that I personally really don't like. And that idea of just spinners everywhere just sending down a ball of application logic and a giant JavaScript file turning it on on someone's computer. And then immediately, it has to fetch back to the server. There are just trade-offs there that are not great. I love that Remix is sort of flipping that around. I will say, just to sort of couch the excitement that I'm expressing right now, that Remix exists in a certain place. It helps with building complex UIs. But it doesn't have anything in the data layer. So you have to bring your own data layer and figure out what that means. We have ActiveRecord within Rails, and it's deeply integrated. And so you would need to bring a Prisma or some other database connection or whatever it is. And it also doesn't have more sort of full-featured framework things. Like with Rails, it's very easy to get started with a background job system. Remix has no answer to that because they're like, no, no, this is what we're doing over here. But similarly, security is probably the one that concerns me the most. There's an open conversation in their discussion portal about CSRF protection and a back and forth of whether or not Remix should have that out of the box or not. And there are trade-offs because there are different adapters that you can use for auth. And each would require their own CSRF mitigation. But to me, that is the sort of thing that I would want a framework to have. Or I'd be interested in a framework that continues to build on top of Remix that adds in background jobs and databases and all that kind of stuff as a complete solution, something more akin to a Rails or a Laravel where it's like, here we go. This is everything. But again, having some of these more advanced concepts and patterns to build really, really delightful UIs without having to change out the fundamental way that you're building things. STEPH: Interesting. Yeah, I think you've answered a couple of questions that I had about it. I am curious as to how it fits into your current tech stack. So you've mentioned that you're excited and that it's helpful. But given that you already have Rails, and Inertia, and Svelte, does it plug and play with the other libraries or the other frameworks that you have? Are you going to have to replace something to then take advantage of Remix? What does that roadmap look like? CHRIS: Oh yeah, I don't expect to be using Remix anytime soon. I'm just keeping an eye on it. I think it would be a pretty fundamental shift because it ends up being the server layer. So it would replace Rails. It would replace the Inertia within the stack that I'm using. This is why as I started, I was like, Inertia is still my answer. Because Inertia integrates really well with Rails and allows me to do the sort of it's not progressive enhancement, but it's like, I want fancy UI, and I don't want to give up on Rails. And so, Inertia is a great answer for that. Remix does not quite fit in the same way. Remix will own all of the request-response lifecycle. And so, if I were to use it, I would need to build out the rest of that myself. So I would need to figure out the data layer. I would need to figure out other things. I wouldn't be using Rails. I'm sure there's a way to shoehorn the technologies together, but I think it sort of architecturally would be misaligned. And so my sense is that folks out there are building...they're sort of piecing together parts of the stack to fill out the rest. And Remix is a really fantastic controller and view from their down experience and routing layer. So it's routing, controller, view I would say Remix has a really great answer to, but it doesn't have as much of the other stuff. Whereas in my case, Inertia and Rails come together and give me a great answer to the whole story. STEPH: Got it. Okay, that's super helpful. CHRIS: But yeah, again, I'm in very much the exploratory phase. I'm super intrigued by a lot of what I've seen of it and also just sort of the mindset, the ethos of the project as it were. That sounds fancy as I say it, but it's what I mean. I think they want to build from web fundamentals and then enhance the experience on top of that, and I think that's a really great way to go. It means that links will work. It means that routing and URLs will work by default. It means that you won't have loading spinner Armageddon, and these are core fundamentals that I believe make for good websites and web applications. So super interested to see where they go with it. But again, for me, I'm still very much in the Rails Inertia camp. Certainly, I mean, I've built Sagewell on top of it, so I'm going to be hanging out with it for a while, but also, it would still be my answer if I were starting something new right now. I'm just really intrigued by there's a new example out there in the world, this Remix thing that's pushing the envelope in a way that I think is really great. But with that, my now…what was that? My second or my third rave? Also called the positive rant, as we call it. But yeah, I think on that note, what do you think? Should we wrap up? STEPH: Let's wrap up. CHRIS: The show notes for this episode can be found at bikeshed.fm. STEPH: This show is produced and edited by Mandy Moore. CHRIS: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review on iTunes, as it really helps other folks find the show. STEPH: If you have any feedback for this or any of our other episodes, you can reach us at @_bikeshed or reach me on Twitter @SViccari. CHRIS: And I'm @christoomey. STEPH: Or you can reach us at hosts@bikeshed.fm via email. CHRIS: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!!!! ANNOUNCER: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.

BJJ Mental Models
Ep. 185: F**k Your Jiu-Jitsu, feat. Rob Biernacki

BJJ Mental Models

Play Episode Listen Later Jun 27, 2022 83:02 Very Popular


This week we're joined again by Rob Biernacki!  Following up on a previous episode, Rob introduces Island Top Team's proprietary system for constraint-based training.  He calls it "F**k Your Jiu-Jitsu," because he's Rob Biernacki, so of course he does.  FYJJ has four categories: sweeping, passing, top control, and submission control.BJJ Concepts:https://bjjconcepts.net/Rob on Instagram:https://instagram.com/islandtopteam/Mental models discussed in this episode:Constraints-Led Approach:https://bjjmentalmodels.com/constraints-led-approach/Training Handicaps:https://bjjmentalmodels.com/training-handicaps/Pattern Interrupts:https://bjjmentalmodels.com/pattern-interrupts/Center of Gravity:https://bjjmentalmodels.com/center-of-gravity/Keep it Playful:https://bjjmentalmodels.com/keep-it-playful/Phases of Guard:https://bjjmentalmodels.com/phases-of-guard/Tipping Points:https://bjjmentalmodels.com/tipping-points/Growth From Discomfort:https://bjjmentalmodels.com/growth-from-discomfort/Prevention Over Cure:https://bjjmentalmodels.com/prevention-over-cure/Static vs. Dynamic Control:https://bjjmentalmodels.com/static-vs-dynamic-control/Investing in Loss:https://bjjmentalmodels.com/investing-in-loss/Staying Loose:https://bjjmentalmodels.com/staying-loose/Inertia:https://bjjmentalmodels.com/inertia/Yes, and...:https://bjjmentalmodels.com/yes-and/Don't forget to check out BJJ Mental Models Premium!If you love the podcast, you'll definitely love our premium membership offerings. The podcast is truly just the tip of the iceberg – the next steps on your journey are joining our community, downloading our strategy courseware, and working with us to optimize your game.  We do all this through memberships that come in at a fraction of the cost of a single private.Sign up here for a free trial:https://premium.bjjmentalmodels.com/Need more BJJ Mental Models?Get tips, tricks, and breakthrough insights from our newsletter:https://bjjmentalmodels.com/newsletter/Get nitty-gritty details on our mental models from the full database:https://bjjmentalmodels.com/database/Follow us on social:https://facebook.com/bjjmentalmodels/https://instagram.com/bjjmentalmodels/Music by Enterprize:https://enterprize.bandcamp.com/

School for Good Living Podcasts
178. Britt Frank – The Science of Stuck: Breaking Through Inertia to Find Your Path Forward

School for Good Living Podcasts

Play Episode Listen Later Jun 21, 2022 99:58


Britt Frank is the writer of “The Science of Stuck: Breaking Through Inertia to Find Your Path Forward.” Britt's upbringing exposed her to a lot of the things she now studies and the things that she helps others to understand about themselves. Her approach to therapy focuses on the physical reality of mental health by … Continue reading "178. Britt Frank – The Science of Stuck: Breaking Through Inertia to Find Your Path Forward" The post 178. Britt Frank – The Science of Stuck: Breaking Through Inertia to Find Your Path Forward first appeared on School for Good Living Podcasts.

That Will Never Work
#56: When your Biggest Competitor is Inertia

That Will Never Work

Play Episode Listen Later Jun 21, 2022 30:52


City red tape seems so baked into American life, that it stopped being a problem people even bothered trying to solve. But when Covid hit, it forced the opportunity for change. Businesses – especially restaurants - faced fast changing regulations and had to be able to get the new permits they needed to operate at speed, or face going under. No business, means no city tax and the city itself facing a funding shortfall.This presented the opening for this week's guest Catherine Geanuracos to move forward her Los Angeles based company CityGrows, which streamlines the permitting process.This no-code, low-cost, subscription-based site requires little to no training, doing away with reams of paper and clunky, time consuming waits at the counter.So surely cities everywhere should be racing to sign up? Well… that next part is tricky… Listen in as Marc helps Catherine figure out how her red-tape cutting business can cut through the red tape itself. Why not take a deeper dive? The paperback edition of international best-seller That Will Never is out now in all good bookstores and online: www.amazon.com/That-Will-Never-Work-Netflix/dp/0316530182 Want to be a guest? Head to marcrandolph.com/guest to apply. While you're there, sign up for Marc's newsletter: marcrandolph.com/newsletter/Feeling social?Tw: @mbrandolphIG: @ThatWillNeverWork LinkedIn: Marcrandolph Marcrandolph.com

Purpose Made Podcast
Abakar Saidov (Beamery): Unlocking The Potential of Your Workforce

Purpose Made Podcast

Play Episode Listen Later Jun 18, 2022 36:40


In today's episode, we chat with the wonderful Abakar Saidov. Abakar is the CEO and co-founder of Beamery. Beamery are on a mission to create equal access to work, leveraging their industry-first AI-powered Talent Lifecycle Management platform, to help organisations realise their business potential. During today's episode we focus on:00:00: Introduction00:47: A Background To Abakar03:11: Biases in Talent, the Birthplace Lottery and How to Remedy  06:59: A People and Potential Model for Talent  08:13: Technological Evolution vs. Years of Service and Tenure09:36: A Background to Beamery and Why12:46: The Modern Talent Organisation14:00: Brand Reputation and a Poor Talent Pipeline18:26: Crisis is a Catalyst to Change22:46: Evolution, Inertia and The Great Awakening28:35: Taking Time to Care and Talent Retention and Development30:48: AI vs. Conventional Talent Acquisition and Engagement34:52: Closing Thoughts & Key Takeaways

The Podcast by KevinMD
How long will it take to address clinical inertia in T2DM?

The Podcast by KevinMD

Play Episode Listen Later Jun 14, 2022 28:28


"It's been over twenty years since clinical inertia was coined a term, and since that time, experts have debated on how to define it, and where and when it exists across the treatment paradigm. Every year, scores of information cross HCP's desks on clinical inertia, but when it comes to your patients, how do you determine whether your decisions to delay treatment intensification are clinical inertia or 'appropriate inaction?' And what about obesity? Individualizing treatment targets for patients with diabetes requires a comprehensive approach to minimize associated morbidity and mortality. Because most patients with T2DM are overweight or obese, effective glucose control and weight loss are needed to reduce cardiovascular risk factors and other complications of T2DM. However, misconceptions about the causes and mechanisms of obesity, and the false assumption that patients can manage their weight with simple behavioral modifications, contribute to ongoing clinical inertia in patients with diabetes." Visit the CME activity and Clinical Inertia Assessment Tool. Donna Ryan is professor emerita at Pennington Biomedical in Baton Rouge, LA. Robert Kushner is professor of medicine and medicine education at Northwestern University Feinberg School of Medicine, and director of the Center for Lifestyle Medicine in Chicago, IL. This episode is sponsored by the Academy for Continued Healthcare Learning, an independently owned and operated full-service medical education company that has been developing certified health care education for nearly twenty years. Visit the CME activity and Clinical Inertia Assessment Tool.

The Bike Shed
342: Sky Icing

The Bike Shed

Play Episode Listen Later Jun 14, 2022 43:42


Another toaster strudel debate?! Plus, the results are in for the most listened-to podcast in the RoR community! :: drum roll :: Steph has a "Dear Gerrit" message to share. Chris has a follow-up on mobile app strategy. The Bike Shed: 328: Terrible Simplicity (https://www.bikeshed.fm/328) When To Fetch: Remixing React Router - Ryan Florence (https://www.youtube.com/watch?v=95B8mnhzoCM) Virtual Event - Save Time & Money with Discovery Sprints (https://thoughtbot.com/events/save-time-money-with-discovery) Become a Sponsor (https://thoughtbot.com/sponsorship) of The Bike Shed! Transcript: STEPH: thoughtbot's next virtual event "Save Time & Money with Discovery Sprints" is coming up on June 17th, from 2 - 3 PM Eastern. It's a discussion with team members from product management, design and development. From a developer perspective, topics will include how to plan a product's architecture, both the MVP and future version, how to lead a tech spikes into integrations and conduct a build vs buy reviews of third party providers. Head to thoughtbot.com/events to register, the event is June 17th 2 - 3 PM ET. Even if you can't make it, registering will get you on the list for the recording. CHRIS: We're the second-best. We're the second-best. Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Chris Toomey. STEPH: And I'm Steph Viccari. CHRIS: And together, we're here to share a bit of what we've learned along the way. So, Steph, what's new in your world? STEPH: I'm very happy to report that I picked up a treat from the store recently. So while I was in Boston and we were hanging out in person, we talked about Pop-Tarts because that always comes up as a debate, as it should. And then also Toaster Strudels came up, so I now have a package of Toaster Strudels, and those are legit. Pop-Tart or Toaster Strudel, I am team Toaster Strudel, which I know you're going to ask me about icing and if I put it on there, so go ahead. I'm going to pause. [laughs] CHRIS: It sounds like I don't even need to say anything. But yes, inquiring minds want to know. STEPH: I think that's also my very defensive response because yes, I put icing on my Toaster Strudel. CHRIS: How interesting. [laughs] STEPH: But it feels like a whole different class of pastry. So I'm very defensive about my stance on Pop-Tarts with no icing put Strudel with icing. CHRIS: A whole different class of pastry. Got it. Noted. Understood. So did you travel? Like, were these in your luggage that you flew back with? STEPH: [laughs] Oh no. They would be all gooey and melty. No, we bought them when we got back to North Carolina. Oh, that'd be a pro move; just pack little individual Strudels as your airplane snack. Ooh, I might start doing that now. That sounds like a great airplane snack. CHRIS: You got to be careful though if the icing, you know, if it's pressurized from ground level and then you get up there, and it explodes. And you gotta be careful. Or is it the reverse? It's lower pressure up in the plane. So it might explode. STEPH: [laughs] Either way, it might explode. CHRIS: Well, yeah. If you somehow buy a packet of icing that is sky icing that is at that pressure, and you bring it down, then...but if you take it up and down, I think it's fine. If you open it at the top, you might be in danger. If you open icing under the ocean, I think nothing's going to happen. So these are the ranges that we're playing with. STEPH: I will be very careful sky icing and probably pack two so that way I have a backup just in case. So if one explodes, we'll be like, all right, now I know what I'm working with and be more prepared for the next one. CHRIS: That's just smart. STEPH: I try to make smart travel decisions, Toaster Strudels on the go. Aside from travel treats and sky icing, I have some news regarding Planet Argon, who is a Ruby on Rails consultancy regarding their latest published this year's Ruby on Rails community survey results. And so they list a lot of fabulous different topics in there. And one of them includes a learning section that highlights most listened to podcasts in the Ruby on Rails community as well as blogs and some other resources. And Bike Shed is listed as the second most listened to podcast in the Ruby on Rails community, so whoo, golf clap. CHRIS: Fantastic. STEPH: And in addition to that, the thoughtbot blog got a really nice shout-out. So the thoughtbot blog is in the number two spot for the most visited blogs in the community. In the first spot is Ruby Weekly, which is like, you know, okay, that feels fair, that feels good. So it's really exciting for the thoughtbot blog because a lot of people work really hard on curating and creating that content. So that's wonderful that so many people are enjoying it. And then I should also highlight that for the podcast in first place is Remote Ruby, so congrats to Chris, Jason, and Andrew for grabbing that number one spot. And Brittany Martin, host of the Ruby on Rails Podcast, along with Brian Mariani, Jemma Issroff, and Nick Schwaderer, are in the number three spot. And some people say that Ruby is losing steam but look at all that content and all those highly ranked podcasts. I mean, we like Ruby so much we're spending time recording ourselves talking about it. So I say long live Ruby, long live Rails. CHRIS: Yes. Long live Ruby indeed. And yeah, it's definitely an honor to be on the list and to be amongst such other wonderful shows. Certainly big fans of the work of those other podcasts. We even did a joint adventure with them at one point, and that was a really wonderful experience, so yeah, honored to be on the list alongside them. And to have folks out there in the world listening to our tech talk and nonsense always nice to hear. STEPH: Yeah. You and I show up and say lots of silly things and technical things into the podcast. The true heroes are the ones that went and voted. So thank you to everybody who voted. That's greatly appreciated. It's really nice feedback. Because we get listener responses and questions, and those are wonderful because it lets us know that people are listening. But I have to say that having the survey results is also really nice. It lets us know people like the show. Oh, but I did go back and look at some of the previous stats because then I was like, huh, so I'm paying attention. I looked at this year's, and I was like, I wonder what last year's was or the year before that. And I think this survey comes out every two years because I didn't see one for 2021. But I did find the survey results for 2020, which we were in the number one spot for 2020, and Remote Ruby was in the second spot. So I feel like now we've got a really nice, healthy podcasting war situation going on to see who can grab the first spot. We've got two years, everybody, to see who [laughs] grabs the number one spot. That's a lot of prep time for a competition. CHRIS: Yeah, I feel like we should be like, I don't know, planning elaborate pranks on them or something like that now. Is that where this is at? It's something like that, I think. STEPH: I think so. I think this is where you put like sky frosting inside someone's suitcase, and that's the type of prank that you play. [laughs] CHRIS: The best of pranks. STEPH: We'll definitely put together a little task force. And we'll start thinking of pranks that we all need to start playing on each other for the podcasting wars that we're entering for the next few years. But anywho, what's going on in your world? CHRIS: Let's see, what's going on in my world? A fun thing happened recently. I had a chance to reflect back on some architectural choices that we've made in the Sagewell platform. And one of those specific choices is how we've approached building our native mobile apps. We made what some listeners may remember is an interesting set of choices. In particular, in Episode 328, which we'll include a link to in the show notes, I shared with you the approach that we're doing, which is basically like, Inertia is great, web user great. We like the web as a platform. What if we were to wrap it in a native shell and find this interesting and somewhat unique hybrid trade-off point? And so, at that point, we were building it. We had most of it built out, and things were going quite well. I think we maybe had the iOS app in the store and the Android app approaching the store or something like that. At this point, both apps have been released to the store, so they are live. Production users are signing in. It's wonderful. But I had a moment in the past couple of weeks to reassess or look at that set of choices and evaluate it. And thankfully, I'm happy with the choices that we've made. So that's good. But to get into the specifics, there were two things that happened that really, really framed the choice that we made, so one was we introduced a major new feature. We basically overhauled the first-run experience, the onboarding that users experience, and added a new, pretty fundamental facet to the platform. It's a bunch of new screens, and flows, and error states, and all of this complexity. And in the process, we iterated on it a bunch. Like, first, it looked like this, and then we changed the order of the screens and switched out the error messages, and et cetera, et cetera. And I'll be honest, we never even thought about the mobile apps. It just wasn't even a consideration. And interestingly, we did as a final check before going fully live and releasing this out to the full production audience; we did spot check it in the mobile apps, and it didn't work. But it didn't work for a very specific, boring, technical reason that we were able to resolve. It has to do with iframes and WebViews and embedded something, something. And we had to set a flag. Thankfully, it was solvable without a deploy of the native mobile apps. And otherwise, we never thought about the native apps. Specifically, we were able to add this fundamental set of features to our platform. And they just worked in native mobile. And they were the same as they roughly are if you're on a mobile WebView or if you're on a desktop web, you know, slightly different in terms of form factor. But the functionality was all the same. And critically, the error states and the edge cases and the flow, there's so much to think about when you're adding a nontrivial feature to an app. And the fact that we didn't have to consider it really spoke to the choice that we made here. And again, to name it, the choice that we made is we're basically just reusing the same WebViews, the same Rails controllers, and the same what are Svelte components under the hood but the same essentially view layer as well. And we are wrapping that in a native iOS. It's a Swift application shell, and on Android, it's a Kotlin application shell. But under the hood, it's the same web stuff. And that was really great. We just got these new features. And you know what? If we have to rip that whole set of functionality out, again, we won't need to deploy. We won't need to rethink it. Or, if we want to subtly tweak it, we can do that. If we want to think about feature flags or analytics, or error states or error reporting, all of this just naturally falls out of the approach that we took. And that was really wonderful. STEPH: That's super nice. I also love this saga of like, you made a choice, and then you're coming back to revisit and share how it's going. So as someone who's never done this before, in regards of wrapping an application in the manner that you have and then publishing it and distributing it that way, what does that process look like? Is this one of those like you run a command, and literally, it's going to wrap the application and then make it hostable on the different mobile app stores? Or what's that? Am I oversimplifying the process? What does that look like? CHRIS: I think there are a lot of platforms or frameworks I think would probably be the better word like Capacitor is something that comes to mind or Ionic or Expo. There are a handful of them that are a little more fully featured in what they provide. So you just point us at your React Views and whatnot, and we'll wrap that up, and it'll be great. But those are for, I may be overgeneralizing here, but my understanding is those are for more heavy client-side bundles that are talking to a common API. And so you're basically taking your same rich client-side application and bundling that up for reuse on the native app, the native app platforms. And so I think those do have some release to the store sort of thing. In our case, we went a little bit further with that integration wrapper thing that we built. So that is a thing that we maintain. We have a Sagewell iOS repo and a Sagewell Android repo. There's a bunch of Swift and Kotlin code, respectively, in each of them, and we deploy to the stores manually. We're doing that whole process. But critically, the code that is in each of those repositories is just the bridge glue code that says, oh, when this Inertia navigation event happens, I'm going to push a WebView to the navigation stack. And that's what that is. I'm going to render the tab bar of buttons at the bottom with the navigation elements that I get from the server. But it's very much server-driven UI, is the way that I would describe it. And it's wrapping WebViews versus actually having the whole client bundle wrapped up in the thing. It's unfortunately subtle to try and talk through on the radio, but yeah. [laughs] STEPH: You're doing great; this is helping. So if there's a change that you want to make, you go to the Rails application, and you make that change. And then do you need to update anything on that iOS repo? It sounds like you don't, which then you don't have to push a new update to the store. CHRIS: Correct. For the vast majority of things, we do not need to make any changes. It's very rare for us to deploy the iOS or the Android app is a different way to put it or to push new releases to the store. It happens we may want to add a new feature to the sort of bridge layer that we built, but increasingly, those are rare. And now it's basically like, yeah, we're just wrapping those WebViews, and it's going great. And again, to name it, it's a trade-off. It's an intentional trade-off that we've made. We're never going to have the richest, most deep platform integration, smooth experience. We are making a small trade-off on that front. But given where we're at as an organization, given how early we are, how much iteration and change, we chose an architecture that optimizes for that change. And so again, like what you just said, yeah, I can...you know how it's really nice to be able to deploy six times a day on a web app, and that's a very straightforward thing to do? It is not so straightforward in the native mobile world. And so, we now have afforded ourselves the ability to do that. But critically, and this is the fun part in my mind, have the trade-offs in the controls. So if we were just like, it's just a WebView, and that's it, and we put it in the stores, and we're done, that is too far of an extreme in my mind. I think the performance trade-offs, the experience trade-offs, it wouldn't feel like a native app like in a deep way, in a problematic way. And so as an example, we have a navigation bar at the top of our app, particularly on iOS, that is native iOS navigation. And we have a tab bar at the bottom, which is native tab UI element. I forget actually what it's called, but it's those elements. And we hide the web application navigation when we're in the mobile context. So we actually swap those out and say, like, let's actually promote these to formal native functionality. We also, within our UI on the web, have a persistent button in the top right corner of your screen that says, "Need help? Reach out to your retirement advocate." who is the person that you get to work with. You can send questions, et cetera, et cetera. It's this little help sidebar drawer thing that pops out. And we have that as a persistent HTML button in the top corner of the web frame. But when we're on native, we push that up as a distinct element in the native UI section. And then again, the bridge that I'm talking about allows for bi-directional communication between the JavaScript side and the native side or the native side and the JavaScript side. And so it's those sorts of pieces that have now afforded us all of the freedom to tinker, and we don't need to re-release where we're like, oh, we want to add a new weird button that does a thing in the WebView when you click on a button outside the WebView. We now just have that built-in. STEPH: Yeah, I really like the flexibility that you're describing. When you promoted those elements to be more native-friendly so, like the navigation or the footer or the little get help chat, is that something that then your team implemented in like the iOS or the Kotlin repo? Okay, I see you nodding, but other people can't see that, so...[laughs] CHRIS: Yeah. I was going to also say the words, but yes, those are now implemented as native parts. So the thing that we built isn't purely agnostic decoupled. It is Sagewell-specific; a lot of it is low-level. Like, let's say we want to wrap an Inertia app in a native mobile wrapper. Like, 90% of the code in it is that, but then there are little bits that are like, and put a button up there. And that button is the Sagewell button. And so it's not entirely decoupled from us. But it mostly is this agnostic bridge to connect things together. STEPH: Yeah, the way you're describing it sounds really nice in terms of you're able to get out the app quickly and have a mobile app quickly that works on both platforms, and then you're still able to deploy changes without having to push that. That was always my biggest mental, or emotional hurdle with the idea of mobile development was the concept of that you really had to batch everything together and then submit it for review and approval and then get it released. And then you got to hope people then upgrade and get the newest version. And it just felt like such a process, not that I ever did much of it. This was all just even watching like the mobile team and all the work that they had to do. And I had sympathy pains for them. But the fact that this approach allows you to avoid a lot of that but still have some nice, customized, more native elements. Yeah, I'm basically just recapping everything you said because I like all of it. CHRIS: Well, thank you, friend. Like I said, I've really enjoyed it, and similar to you, I'm addicted to the feedback loop of the web. It's beautiful. I can deploy ten times or however many I want. Anytime I want, I can push out a new version. And that ability to iterate, to test, to explore, to tweak, to not have to do as much formal testing upfront because I'm terrified that if a bug sneaks out, then, it'll take me two weeks to address it; it just is so, so freeing. And so to give that up moving into a native context. Perhaps I'm fighting too hard to hold on to my dream of the ability to rapidly iterate. But I really do believe in that and especially for where we're at as an organization right now. But, and a critical but here, again, it's a trade-off like anything else. And recently, I happened to be out about in the town, and I decided, oh, you know what? Let me open up the app. Let me see what it's like. And I wasn't on great internet. And so I open the app, and it loads because, you know, it's a native app, so it pops up. But then the thing that actually happened is a loading spinner in the middle of the screen and sort of a gray nothing for a little while until the server request to fetch the necessary UI elements to render the login screen appeared. And that experience was not great. In particular, that experience is core to the experience of using the app every single time. Every time you use it, you're going to have a bad time because we're re-downloading that UI element. And there's caching, and there's things that could happen there to help with that. But fundamentally, that experience is going to be a pretty common one. It's the first thing that you experience when you're opening the app. And so I noticed that and I chatted with the team, and I was like, hey, I feel like this is actually something that fixing this I think would really fundamentally move us along that spectrum of like, we've definitely made some trade-offs here. But overall, it feels snappy and like a native app. And so, we opted to prioritize work on a native login screen for both platforms. This also allows us to more deeply integrate. So particularly, we're going to get biometric logins like fingerprints or face scans, or whatever it is. But critically, it's that experience of like, I open the Sagewell native app on my iOS phone, and then it loads immediately. And then I show it my face like we do these days, and then it opens up and shows me everything that I want to see inside of it. And it's that first-run experience that feels worth the extra effort and the constraints. Because now that it's native mobile, that means in order to change it, we have to do a deploy, not a deploy, release; that's what they call it in the native world. [laughs] You can tell I'm well-versed in this ecosystem. But yeah, we're now choosing that trade-off. And what I really liked about this sort of set of things like the feature that we were able to just accidentally get for free on native because that's how this thing is built. And then likewise, the choice to opt into a fully native login screen like having that lever, having that control over I'm going to optimize for iteration generally, but where it's important, we want to optimize for performance and experience. And now we have this little slider that we can go back and forth. And frankly, we could choose to screen by screen just slowly replace everything in the app with true native WebViews backed by APIs. And we could Ship of Theseus style replace every element of the app with true native mobile things until none of the old bridge code exists. And our users, in theory, would never know. Having that flexibility is really nice given the trade-off and the choice that we've made. STEPH: You said a word there that I missed. You said ship something style. CHRIS: Ship of Theseus. STEPH: What is that? CHRIS: It's like an old biblical story, I want to say, but it's basically the idea of, like, you have the ship. And then some boards start to rot out, so replace those boards. And then the mast breaks, you replace the mast. And slowly, you've replaced every element on the ship. Is it still the same ship at that point? And so it's sort of a philosophical question. So if we replace every single view in this app with a native view, is it still the same map? Philosophers will philosophize about it forever, but whatever. As long as we get to keep iterating and shipping software, then I'm happy. STEPH: [laughs] Y'all philosophize. That's that word, right? CHRIS: Yeah. STEPH: And do your philosopher thing. We'll just keep building and shipping. CHRIS: I don't know if I pronounced it right. It's like either Theseus or Theseus, and I'm sure I said the wrong one. And now that I've said the other, I'm sure both of them are wrong somehow. It's like a USB where there's up and down, and yet somehow it takes three tries. So anyway, I may have mispronounced it, and I may be misattributing it, but that's the idea I was going for. STEPH: Well, given I wasn't even familiar with the word until just now, I'm going to give both pronunciations a thumbs up. I also really like how you decided that for the login screen, that's the area that you don't want people to wait because I agree if you're opening an application or opening...maybe it's the first time, maybe it's the 100th time. Who knows? But that feels important. Like, that needs to be snappy. I need to know it's responsive. And it builds trust from the minute that I clicked on that application. And if it takes a long time, I just immediately I'm like, what are y'all doing? Are y'all real? Do you know what you're doing over there? So I like how you focused on that experience. But then once I log in, like if something is slow to log me in, I will make up excuses for the application all day where I'm like, well, you know, maybe it's my connection. It's fine. I can wait for the next screen to load. That feels more reasonable. And it doesn't undermine my trust nearly as much as when I first click on the app. So that feels like a really nice trade-off as well, or at least a nice area that you've improved while still having those other trade-offs and benefits that you mentioned. CHRIS: To highlight it, you used a phrase there which I really liked. Like, it's building trust. If something's a little bit off in that first run experience every single time, then it kind of puts a question in the back of your head, maybe not even consciously. But you're just kind of looking at it, and you're like, what are you doing there? What are you up to, friend? Humans say to the apps they use on their phone. That's normal, right? When you talk... But to name it, we've also done a round of performance work throughout the app. And so there are a couple of layers to it. But it was work that we had planned for a while, but we kept deferring. But now that we're seeing more usage of the native apps, the native apps experience the same surface area of performance stuff but all the more so because they may be on degraded network connections, et cetera. And so this is another example where this whole thing kind of pays off. The performance work that we did affects everything. It affects the web. It's the same under the hood. It's let's reduce the network requests that we're making in the payloads that we're sending, particularly the network requests to upstream things, so like the banking partner that we're using and those APIs, like, collating all the data to then render the screen. Because of Inertia, we only have a single sort of back and forth conversation via the API as opposed to I think it's pretty common to have like seven different APIs and four different spinners on the screen. We're not doing that, none of that on my watch. [chuckles] But we minimize the background calls to the other parties that we're integrating with. And then, we reduce the payload of data that we're sending on each request. And each of those were like, we had to think about things and tweak and poke, but again it's uniform. So mobile web has that now, desktop web has that now. Android, iOS, they all just inherited it sort of that just happened one day without a deploy or release, without a release of either of the native mobile apps. We did deploy to the web to make that happen, but that's easy. I can do that a bunch of times a day. One last thing I want to share as we're on this topic of trade-offs and levers, there was a really great conference talk that I watched recently, which was Ryan Florence of remix.run also React Router fame if you're familiar with him from that. But he was talking about the most recent version of Remix, which is their meta framework on top of React. But they've done some really interesting stuff around processing data, fetching data, when and how to sequence that. And again, that thing that I talked about of nine different loading spinners on the screen, Remix is taking a very different approach but is targeting that same thing of like, that's not great for user experience. Cumulative layout shift being the actual number that you can monitor for this. But in that talk, there are features that they've added to Remix as a framework where you can just decide, like, do we wait for this or do we not? Do we make sure we have all of the data, or do we say, you know what? Actually, this is going to be below the fold. So it's okay to defer loading this until after we send down the first payload. And then we'll kick in, and we'll do it from the client-side. But it's this wonderful feature of the framework that they're adding in where there's basically just a keyword that you can add to sort of toggle that behavior. And again, it's this idea of like trade-offs. Are we okay with more layout shift, or are we okay with more waiting? Which is it that we're going to optimize for? And I really love that idea of putting that power very simply in the hands of the developers to make those trade-off decisions and optimize over time for what's important. So we'll share a link to that talk in the show notes as well. But it was very much in the same space of like, how do I have the power to decide and to change my mind over time? That's what I want. But yeah, with that, I think that's enough of me updating on the mobile app. I'll continue to share as new things happen. But again, I'm at this point very happy with where we're at. So yeah, it's been fun. But yeah, what else is up in your world? STEPH: I have a dear Gerrit message that I wrote earlier, so I want to share that with you. Gerrit is the system that we're using for when we push up code changes that then manages very similar in the competitive space of like GitHub and GitLab, and Bitbucket. And so the team that I'm working with we are using Gerrit. And Gerrit and I, you know, we get along for the most part. We've managed to have a working relationship. [chuckles] But this week, I wrote my dear Gerrit letter is that I really miss being able to tell a story with my commit messages. That is the biggest pain that I'm feeling right now. So for anyone that's less familiar or if you already are familiar with Gerrit, each change that Gerrit shows represents a single commit that's under review. And each change is identified by a Change-Id. So the basic concept of Gerrit is that you only have one commit per review. So if you were to translate that to GitHub terminology, every pull request is only going to have one commit, and so you really can't push up multiple. And so, where that has been causing me the most pain is I miss being able to tell a story. So like even simple stories that are like, hey, I removed something that's not used. I love separating that type of stuff into its own commit just so then people can see that as they're going through review. Now, before I merge, I'm likely to squash, and that doesn't feel important that it needs to be its own commit. That's really just for the reviewer so they can follow along for the changes. But the other one, I can slowly get over that one. Because essentially, the way I get around that is then when I do push up my code for review, is I then go through my change request, and then I just add comments. So I will highlight that line and say, "Hey, I'm removing this because it's not in use." And so, I found a workaround for that one. But the one I haven't found a workaround for is that I don't push up my local work very often because I love having lots of local, tiny, green commits so that way I can know the progress that I'm at. I know where I'm headed. Also, I have a safe space to roll back to, but then that means that I may have five or six commits that I have locally, but I haven't pushed up somewhere. And that is bothering me more and more hour by hour the more I think about it that I can't push stuff up because it makes me nervous. Because, I mean, usually, at least by the end of the day, I push everything up, so it's stored somewhere. And I don't have to worry about that work disappearing. Now I am working on a dev machine. So there is that aspect of it's technically...it's not even on my local machine. It is stored somewhere that I should still be able to access. CHRIS: What's a dev machine? The way you're saying it, it sounds like it's a virtual machine, not like a laptop. But what's a dev machine? STEPH: Good question. So the dev machine is a remote server or remote machine that then I am accessing, and then that's where I'm performing. That's where I'm writing all of my work. And then that's also kind of the benefit is everything is not local; it's controlled by the team. So then that also means that other teams, other individuals can help set up these environments for future developers. So then you have that consistency across everyone's working with the same Rails version, or gems, or has access to the same tools. So in that sense, my work isn't just on my laptop because then that would really worry me because then I've got nowhere...it's not backed up anywhere. So at least it is somewhere it's being stored that then could be accessed by someone. So actually, now, as I'm talking this through, that does help alleviate my concern about this a bit. [laughs] But I still miss it; I still miss being able to just push up my work and then have multiple commits. And I looked into it because I was like, well, maybe I'm misunderstanding something about Gerrit, and there's a way around this. And that's still always a chance. But from the research that I've done, it doesn't seem to be. And there are actually two very fiery takes that I saw that I have to share because they made me laugh. When I was Googling, the question of like, "Can I push up multiple commits to one single Gerrit CR? Or is there just a way to, like, can I have this concept of like a branch and then I have many commits, but then I turn it into one CR? Whatever the world would give me. What do they have? [laughs] I'm laughing just looking at this now. One of the responses was, have you tried squashing your commits into one commit? And I was like, [laughs] "Yeah, that's not what I had in mind, but sure." And then the other one, this is the more fiery take. They were very defensive about Gerrit, and they wrote that "People who don't like Gerrit usually just hack shit together. They cut corners and love squashing commits or throwing away history. And those people hate Gerrit. Developers who care love it. It's definitely possible and easy to produce agile software." And I just...that made me laugh. I was like, cool, I'm a developer that cuts corners and loves squashing commits. [laughs] CHRIS: So you don't care is what that take says. STEPH: I'm a developer who does not care. CHRIS: You know, Steph, I've worked with you for a while. And I've been looking for the opportunity to have this hard conversation with you. But I just wish you cared a little more about the software that you're writing, about the people that you're working with, about the commits that you're authoring. I just see it in every facet of your work. You just don't care. To be very clear for anyone listening at home, that is the deepest of sarcasm that I can make. Steph cares so very much. It's one of the things that I really enjoy about you. STEPH: I mean, we had the episode about toxic traits. This would have been the perfect time to confront me about my lack of caring about software and the processes that we have. So winding down on that saga, it seems to be the answer is no, friend; I cannot push up multiple commits. Oh, I tried to hack it. I am someone that tries to hack shit together because I tried to get around it just to see what would happen. [laughs] Because the docs had suggested that each change is identified by a Change-Id. And I was like, hmm, so what if there were two commits that had the same Change-Id, would Gerrit treat those as patch sets? Because right now, when you push up a change, you can see all the different patch sets, so that's nice. So that's a nice feature of Gerrit as you can see the history of, like, someone pushed up this change. They took in some feedback. They pushed up a new change. And so that history is there for each push that someone has provided. And I wondered maybe if they had the same Change-Id that then the patch sets would show the first commit and then the second commit. And so I manually altered the commits two of them to reference the same Change-Id. And I have to say, Gerrit was on to me because they gave me a very nice error message that said, "Same Change-Id and multiple changes. Squash the commits with the same Change-Ids or ensure Change-Ids are unique for each commit. And I thought, dang, Gerrit, you saw me coming. [laughs] So that didn't work either. I'm still in a world of where I now wait. I wait until I'm ready for someone to review stuff, and I have to squash everything, and then I go comment on my CRs to help out reviewers. CHRIS: I really like the emotional backdrop that you provided here where you're spending a minute; you're like, you know what? Maybe it's me. And there's the classic Seymour Skinner principle from The Simpsons. Am I out of touch? No, it's the children who are wrong. [laughs] And I liked that you took us on a whole tour of that. You're like, maybe it's me. I'll maybe read up. Nope, nope. So yeah, that's rough. There's a really interesting thing of tools constraining you. And then sometimes being like, I'm just going to yield control and back away and accept this thing that doesn't feel right to me. Like, Prettier does a bunch of stuff that I really don't like. It shapes code in a way, and I'm just like, no, that's not...nope, you know what? I've chosen to never care about this again. And there's so much utility in that choice. And so I've had that work out really well. Like with Prettier, that's a great example whereby yielding control over to this tool and just saying, you know what? Whatever you produce, that is our format; I don't care. And we're not going to talk about it, and that's that. That's been really useful for myself and for the teams that I'm on to just all kind of adopt that mindset and be like, yeah, no, it may not be what I would choose but whatever. And then we have nice formatted code; it's great. It happens automatically, love it. But then there are those times where I'm like; I tried to do that because I've had success with that mindset of being like, I know my natural thing is to try and micromanage and control every little bit of this code. But remember that time where it worked out really well for me to be like, I don't care, I'm just going to not care about this thing? And I try to not care about some stuff, which it sounds like that's what you're doing right here. [laughs] And you're like, I tried to not care, but I care. I care so much. And now you're in that [chuckles] complicated space. So I feel for you, Steph. I'm sorry you're in that complicated space of caring so much and not being able to turn that off [laughs] nor configure the software to do the thing you want. STEPH: I appreciate it. I should also share that the team that I'm working with they also don't love this. Like, they don't love Gerrit. So when I shared in the Slack channel my dear Gerrit message, they're both like, "Yeah, we feel you. [laughs] Like, we're in the same spot," which was also helpful because I just wanted to validate like, this is the pain I'm feeling. Is someone else doing something clever or different that I just don't know about? And so that was very helpful for them to say, "Nope, we feel you. We're in the same spot. And this is just the state that we're in." I think they have started transitioning some other repos over to GitLab and have several repos in Gitlab, but this one is still currently using Gerrit. So they very much commiserate with some of the things that I'm feeling and understand. And this does feel like one of those areas where I do care deeply. And frankly, this is one of those spaces that I do care about, but it's also like, I can work around it. There are some reasonable things that I can do, and it's fine as we just talked through. Like, the fact that my commits are not just locally on my machine already makes me feel better now that I've really processed that. So there are lower risks. It is more of just like a workflow. It's just, you know, it's crushing my work vibe. CHRIS: Harshing your buzz. STEPH: In the great words of Queen Elsa, I gotta let it go. This is the thing I'm letting go. So that's kind of what's going on in my world. What else is going on in your world? CHRIS: Well, first and foremost, fantastic reference and segue. I really liked that. But yeah, let's see, [laughs] what else is going on in my world? We had an interesting thing happen last week. So we had an outage on the platform last week. And then we had an incident review today, so a formal sort of post-mortem incident review. There are a couple of different names that folks have given to these. But this is a practice that we want to build within our engineering culture is when stuff goes wrong, we want to make sure that we have meaningful conversations around to try to address the root causes. Ideally, blameless is a word that gets used often in this context. And I've heard folks sort of take either side of that. Like, it's critical that it's blameless so that it doesn't feel like it's an attack. But also, like, I don't know, if one person did something, we should say that. So finding that gentle middle ground of having honest, real conversations but in a context of safety. Like, we're all going to make mistakes. We're all going to ship bugs; let's be clear about that. And so it's okay to sort of...anyway, that's about the process. We had an outage. The specific outage was that we have introduced a new process. This is a Sidekiq process to work off a specific queue. So we wanted that to have discrete treatment. That had been running, and then it stopped running; we still don't know why. So we never got to the root-root cause. Well, we know what the mechanism was, which was the dyno count for that process was at zero. And so, eventually, we found a bunch of jobs backed up in the Sidekiq admin. We're like, that's weird. And then, we went over to Heroku's configuration dashboard. And we saw, huh, that's weird. There are zero dynos processing this. That wasn't true yesterday. But unfortunately, Heroku doesn't log or have an audit trail around changes to those process counts. It's just not available. So that's unfortunate. And then the actual question of like, how did this happen? It probably had to be someone on the team. So there is like, someone did a thing. But that is almost immaterial because, again, people are going to do things, bugs will get shipped, et cetera. So the conversation very quickly turned to observability and understanding. I think we've done a pretty good job of instrumenting error reporting and being quite responsive to that, making sure the signal-to-noise ratio is very actionable. So if we see a bug or a Sentry alert come through, we're able to triage that pretty quickly, act on it where it is a real bug, understand where it's a bit of noise in the system, that sort of thing. But in this case, there were no errors. There was no Sentry. There was nothing; there was the absence of something. And so it was this really interesting case of that's where observability, I think, can really come in and help. So the idea of what can we do here? Well, we can monitor the count of jobs backed up in Sidekiq queue. That's one option. We could do some threshold alerting around the throughput of processed events coming from this other backend. There are a bunch of different ways, but it basically pushed us in the direction of doubling down and reinforcing the foundation of our observability within the platform. So we're just kicking that mini-project off now, but it is something we're like, yeah, we feel like we could add some here. In particular, we recently added Datadog to the stack. So we now have Datadog to aggregate our logs and ideally do some metric analysis, those sort of things, build some dashboards, et cetera. I haven't explored Datadog much thus far. But my sense is they've got the whiz-bang things that we need here. But yeah, it was an interesting outage. That wasn't fun. The incident conversation was actually a good conversation as a team. And then the outcome of like, how do we double down on observability? I'm actually quite excited for. STEPH: This is a fun moment for me because I have either joined teams that didn't have Datadog or have any of that sort of observability built into their system or that sort of dashboard that people go to. Or I've joined teams, and they already have it, and then nobody or people rarely look at it. And so I'm always intrigued between like what's that catalyst that then sparked a team to then go ahead and add this? And so I'm excited to hear you're in that moment of like, we need more observability. How do we go about this? And as soon as you said Datadog, I was like, yeah, that sounds nice because then it sounds like a place that you can check on to make sure that everything is still running. But then there's still also that manual process where I'm presuming unless there's something else you have in mind. There's still that manual process of someone has to check the dashboard; someone then has to understand if there's no count, no squiggly lines, that's a bad thing and to raise a concern. So I'm intrigued with my own initial reaction of, like, yeah, that sounds great. But now I'm also thinking about it still adds a lot of...the responsibility is still on a human to think of this thing and to go check it. Versus if there's something that gets sent to someone to alert you and say like, "Hey, this queue hasn't been processed in 48 hours. There may be a concern that actually feels nicer." It feels safer. CHRIS: Oh yeah, definitely. I think observability is this category of tools and workflows and whatnot. But I think what you're describing of proactive alerting that's the ideal. And so it would be wonderful if I never had to look at any of these tools ever. And I just knew if I got, let's say, it's PagerDuty connected up whatever, and I got a push notification from PagerDuty saying, "Hey, go look at this thing." That's all I ever need to think about. It's like, well, I haven't gotten a PagerDuty in a while, so everything must be fine, and having a deep trust in that. Similar to like, if we have a great test suite and it's green, I feel confident deploying the sort of absence of an alert being the thing that I can trust. But right now, we're early enough in this journey that I think what we need to do is stand up a bunch of these different graphs and charts and metric analysis and aggregations and whatnot, and then start to squint at it for a while and be like, which of these would I be really concerned if it started to wibble? And then you can figure the alerting around said wibble rate. And that's the dream. That's where we want to get to, but I think we've got to crawl, walk, run on this. So it'll be an adventure. This is very much the like; we're starting a thing. I'll tell you about it more when we've done it. But what you're describing is exactly what we want to get to. STEPH: I love wibble rate. That's my new measurement I'm going to start using for everything. It's funny, as you're bringing this up, it's making me think about the past week that Joël Quenneville and I have had with our client work. Because a somewhat similar situation came up in regards where something happened, and something was broken. And it seemed it was hard to define exactly what moment caused that to break and what was going on. But it had a big impact on the team because it essentially meant none of the bills were going through. And so that's a big situation when you got 100-plus people that are pushing up code and expecting some of the build processes to run. But it was one of those that the more we dug into it, the more it seemed very rare that it would happen. So, in this case, as a sort of a juxtaposition to your scenario, we actually took the opposite approach of where we're like; this is rare. But we did load up a lot of contexts. Actually, I was thinking back to the advice that you gave me in a previous episode where I was talking about at what point do you dig in versus try to stay at surface level? And this was one of those, like, we've spent a couple of days on getting context for this and understanding. So it felt really important and worthwhile to then invest a little bit more time to then document it. But then we still went with the simplest approach of like, this is weird. It shouldn't happen again. We think we understand it but then let's add a little bit of documentation or wiki page around like, hey, if you do run into this, here are some steps that will fix everything. And then, if you need to use this, let somebody know because this is so odd it shouldn't happen. So we took that approach in this case where we didn't increase the observability. It was more like we provided a fire extinguisher very close to the location in case it happens. And so that way, it's there should the need arise, but we're hoping it just never gets used. We're also in the process of changing how a lot of that logic works. So we didn't really want to optimize for observability into a system that is actively being changed because it should look very different in upcoming months. But overall, I love the conversations that you bring about observability, and I'm excited to hear about what wibble rates you decide to add to your Datadog dashboard. CHRIS: There's a delicate art and science to the selection of the wibble rates. So I will certainly report back as we get into that work. But with that, shall we wrap up? STEPH: Let's wrap up. CHRIS: The show notes for this episode can be found at bikeshed.fm. STEPH: This show is produced and edited by Mandy Moore. CHRIS: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review on iTunes, as it really helps other folks find the show. STEPH: If you have any feedback for this or any of our other episodes, you can reach us at @_bikeshed or reach me on Twitter @SViccari. CHRIS: And I'm @christoomey. STEPH: Or you can reach us at hosts@bikeshed.fm via email. CHRIS: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!!! ANNOUNCER: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.

The Bike Shed
341: Fundamentals and Weird Stuff

The Bike Shed

Play Episode Listen Later Jun 7, 2022 35:27


Steph and Chris are recording together! Like, in the same room, physically together. Chris talks about slowly evolving the architecture in an app they're working on and settling on directory structure. Steph's still working on migrating unit tests over to RSpec. They answer a listener question: "As senior-level developers, how do you set goals to ensure that you keep growing?" This episode is brought to you by BuildPulse (https://buildpulse.io/bikeshed). Start your 14-day free trial of BuildPulse today. Faking External Services In Tests With Adapters (https://thoughtbot.com/blog/faking-external-services-in-tests-with-adapters) Testing Third-Party Interactions (https://thoughtbot.com/blog/testing-third-party-interactions) Jen Dary - On Future Goals (https://www.beplucky.com/on-future-goals/) Charity Majors - The Engineer Manager Pedulum (https://charity.wtf/2017/05/11/the-engineer-manager-pendulum/) Charity Majors Bike Shed Episode (https://www.bikeshed.fm/302) Become a Sponsor (https://thoughtbot.com/sponsorship) of The Bike Shed! Transcript: STEPH: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Steph Viccari. CHRIS: And I'm Chris Toomey. STEPH: And together, we're here to share a bit of what we've learned along the way. So, hey, Chris, what's new in your world? CHRIS: What is new in my world? Actually, this episode feels different. There's something different about it. I can't quite put my finger on it. I think it may be that we're actually physically in the same room recording for the first time in two years and a little bit more, which is wild. STEPH: I can't believe it's been that long. I feel like it wasn't that long ago that we were in The Bike Shed...oh, I said The Bike Shed studio. I'm being very biased. Our recording studio [laughs] is the more proper description for it. Yeah, two and a half years. And we tried to make this happen a couple of months ago when I was visiting Boston, and then it just didn't work out. But today, we made it. CHRIS: Today, we made it. Here we are. So hopefully, the audio sounds great, and we get all that more richness in conversation because of the physical in-person manner. We're trying it out. It'll be fun. But let's see, to the normal tech talk and nonsense, what's new in my world? So we've been slowly evolving the architecture in the app that we're working on. And we settled on something that I kind of like, so I wanted to talk about it, directory structure, probably the most interesting topic in the world. I think there's some good stuff in here. So we have the normal stuff. There are app models, app controllers, all those; those make sense. We have app jobs which right now, I would say, is in a state of flux. We're in the sad place where some things are application records, and some things are Sidekiq workers. We have made the decision to consolidate everything onto Sidekiq workers, which is just strictly more powerful as to the direction we're going to go. But for right now, I'm not super happy with the state of app jobs, but whatever, we have that. But the things that I like so we have app commands; I've talked about app commands before. Those are command objects. They use dry-rb do notation, and they allow us to sequence a bunch of things that all may fail, and we can process them all in a much more reasonable way. It's been really interesting exploring that, building on it, introducing it to new developers who haven't worked in that mode before. And everyone who's come into the project has both picked it up very quickly and enjoyed it, and found it to be a nice expressive mode. So app commands very happy with that. App queries is another one that we have. We've talked about this before, query objects. I know we're a big fan. [laughs] I got a golf clap across the room here, which I could see live in person. It was amazing. I could feel the wind wafting across the room from the golf clap. [chuckles] But yeah, query objects, they're fantastic. They take a relation, they return a relation, but they allow us to build more complex queries outside of our models. The new one, here we go. So this stuff would all normally fall into app services, which services don't mean anything. So we do not have an app services directory in our application. But the new one that we have is app clients. So these are all of our HTTP clients wrapping external third parties that we're interacting with. But with each of them, we've taken a particular structure, a particular approach. So for each of them, we're using the adapter pattern. There's a blog post on the Giant Robots blog that I can point to that sort of speaks to the adapter pattern that we're using here. But basically, in production mode, there is an HTTP backend that actually makes the real requests and does all that stuff. And in test mode, there is a test backend for each of these clients that allows us to build up a pretty representative fake, and so we're faking it up before the HTTP layer. But we found that that's a good trade-off for us. And then we can say, like, if this fake backend gets a request to /users, then we can respond in whatever way that we want. And overall, we found that pattern to be really fantastic. We've been very happy with it. So it's one more thing. All of them were just gathering in-app models. And so it was only very recently that we said no, no, these deserve their own name. They are a pattern. We've repeated this pattern a bunch. We like this pattern. We want to even embrace this pattern more, so long live app clients. STEPH: I love it. I love app clients. It's been a while since I've been on a project that had that directory. But there was a greenfield project that I was working on. I think it might have been I was working with Boston.rb and working on giving them a new site or something like that and introduced app clients. And what you just said is perfect in terms of you've identified a pattern, and then you captured that and gave it its own directory to say, "Hey, this is our pattern. We've established it, and we really like it." That sounds awesome. It's also really nice as someone who's new to a codebase; if I jump in and if I look at app clients, I can immediately see what are the third parties that we're working with? And that feels really nice. So yeah, that sounds great. I'm into it. CHRIS: Yeah, I think it really was the question of like, is this a pattern we want to embrace and highlight within the codebase, or is this sort of a duplication but irrelevant like not really that important? And we decided no, this is a thing that matters. We currently have 17 of these clients, so 17 different third-party external things that we're integrating with. So for someone who doesn't really like service-oriented architecture, I do seem to have found myself in a place. But here we are, you know, we do what we have to with what we're given. But yes, 17 and growing our app clients. STEPH: That is a lot. [laughs] My eyes widened a bit when you said 17. I'm curious because you highlighted that app services that's not really a thing. Like, it doesn't mean anything. It doesn't have the same meaning of the app queries directory or app commands or app clients where it's like, this is a pattern we've identified, and named, and want to propagate. For app services, I agree; it's that junk drawer. But I guess in some ways...well, I'm going to say something, and then I'm going to decide how I feel about it. That feels useful because then, if you have something but you haven't established a pattern for it, you need a place for it to go. It still needs to live somewhere. And you don't necessarily want to put it in app models. So I'm curious, where do you put stuff that doesn't have an established pattern yet? CHRIS: It's a good question. I think it's probably app models is our current answer. Like, these are things that model stuff. And I'm a big believer in the it doesn't need to be an application record-backed object to go on app models. But slowly, we've been taking stuff out. I think it'd be very common for what we talk about as query objects to just be methods in the respective application record. So the user record, as a great example, has all of these methods for doing any sort of query that you might want to do. And I'm a fan of extracting that out into this very specific place called app queries. Commands are now another thing that I think very typically would fall into the app services place. Jobs naming that is something different. Clients we've got serializers is another one that we have at the top level, so those are four. We use Blueprinter within the app. And again, it's sort of weird. We don't really have an API. We're using Inertia. So we are still serializing to JSON across the boundary. And we found it was useful to encapsulate that. And so we have serializers as a directory, but they just do that. We do have policies. We're using Pundit for authorization, so that's another one that we have. But yeah, I think the junk drawerness probably most goes to app models. But at this point, more and more, I feel like we have a place to put things. It's relatively clear should this be in a controller, or should this be in a query object, or should this be in a command? I think I'm finding a place of happiness that, frankly, I've been searching for for a long time. You could say my whole life I've been searching for this contented state of I think I know where stuff goes in the app, mostly, most of the time. I'm just going to say this, and now that you've asked the excellent question of like, yeah, but no, where are you hiding some stuff? I'm going to open up models. Next week I'm going to be like, oh, I forgot about all of that nonsense. But the things that we have defined I'm very happy with. STEPH: That feels really fair for app models. Because like you said, I agree that it doesn't need to be ActiveRecord-backed to go on app models. And so, if it needs to live somewhere, do you add a junk drawer, or do you just create app models and reuse that? And I think it makes a lot of sense to repurpose app models or to let things slide in there until you can extract them and let them live there until there's a pattern that you see. CHRIS: We do. There's one more that I find hilarious, which is app lib, which my understanding...I remember at one point having one of those afternoons where I'm just like, I thought stuff works, but stuff doesn't seem to work. I thought lib was a directory in Rails apps. And it was like, oh no, now we autoload only under the app. So you should put lib under app. And I was just like, okay, whatever. So we have app lib with very little in it. [laughs] But that isn't so much a junk drawer as it is stuff that's like, this doesn't feel specific to us. This goes somewhere else. This could be extracted from the app. But I just find it funny that we have an app lib. It just seems wrong. STEPH: That feels like one of those directories that I've just accepted. Like, it's everywhere. It's like in all the apps that I work in. And so I've become very accustomed to it, and I haven't given it the same thoughtfulness that I think you have. I'm just like, yeah, it's another place to look. It's another place to go find some stuff. And then if I'm adding to it, yeah, I don't think I've been as thoughtful about it. But that makes sense that it's kind of silly that we have it, and that becomes like the junk drawer. If you're not careful with it, that's where you stick things. CHRIS: I appreciate you're describing my point of view as thoughtfulness. I feel like I may actually be burdened with historical knowledge here because I worked on Rails apps long, long ago when lib didn't go in-app, and now it does. And I'm like, wait a minute, but like, no, no, it's fine. These are the libraries within your app. I can tell that story. So, again, thank you for saying that I was being thoughtful. I think I was just being persnickety, and get off my lawn is probably where I was at. STEPH: Oh, full persnicketiness. Ooh, that's tough to say. [laughs] CHRIS: But yeah, I just wanted to share that little summary, particularly the app clients is an interesting one. And again, I'll share the adapter pattern blog post because I think it's worked really well for us. And it's allowed us to slowly build up a more robust test suite. And so now our feature specs do a very good job of simulating the reality of the world while also dealing with the fact that we have these 17 external situations that we have to interact with. And so, how do you balance that VCR versus other things? We've talked about this a bunch of times on different episodes. But app clients has worked great with the adapter pattern, so once more, rounding out our organizational approach. But yeah, that's what's up in my world. What's up in your world? STEPH: So I have a small update to give. But before I do, you just made me think of something in regards to that article that talks about the adapter pattern. And there's also another article that's by Joël Quenneville that's testing third-party interactions. And he made me reflect on a time where I was giving the RSpec course, and we were talking about different ways to test third-party interactions. And there are a couple of different ways that are mentioned in this article. There are stub methods on adapter, stub HTTP request, stub request to fake adapter, and stub HTTP request to fake service. All that sounds like a lot. But if you read through the article, then it gives an example of each one. But I've found it really helpful that if you're in a space that you still don't feel great about testing third-party interactions and you're not sure which approach to take; if you work with one API and apply all four different strategies, it really helps cement how to work through that process and the different benefits of each approach and the trade-offs. And we did that during the RSpec course, and I found it really helpful just from the teacher perspective to go through each one. And there were some great questions and discussions that came out of it. So I wanted to put that plug out there in the world that if you're struggling testing third-party interactions, we'll include a link to this article. But I think that's a really solid way to build a great foundation of, like, I know how to test a third-party app. Let me choose which strategy that I want to use. Circling back to what's going on in my world, I am still working on migrating unit tests over to RSpec. It's a thing. It's part of the work that I do. [laughs] I can't say it's particularly enjoyable, but it will have a positive payoff. And along that journey, I've learned some things or rediscovered some things. One of them is read expectations very carefully. So when I was migrating a test over to RSpec, I read it as where we expected a record to exist. The test was actually testing that a record did not exist. And so I probably spent an hour understanding, going through the code being like, why isn't this record getting created like I expect it to? And I finally went back, and I took a break, and I went back. And I was like, oh, crap, I read the expectation wrong. So read expectations very carefully. The other one...this one's not learned, but it is reinforced. Mystery Guests are awful. So as I've been porting over the behavior over to RSpec, the other tests are using fixtures, and I'm moving that over to use factorybot instead. And at first, I was trying to be minimal with the data that I was bringing over. That failed pretty spectacularly. So I have learned now that I have to go and copy everything that's in the fixtures, and then I move it over to factorybot. And it's painful, but at least then I'm doing that thing that we talked about before where I'm trying to load as little context as possible for each test. But then once I do have a green test, I'm going back through it, and I'm like, okay, we probably don't care about when you were created. We probably don't care when you're updated because every field is set for every single record. So I am going back and then playing a game of if I remove this line, does the test still pass? And if I remove that line, does the test still pass? And so far, that has been painful, but it does have the benefit of then I'm removing some of the setup. So Mystery Guests are very painful. I've also discovered that custom error messages can be tricky because I brought over some tests. And some of these, I'm realizing, are more user error than anything else. Anywho, I added one of the custom error messages that you can add, and I added it over to RSpec. But I had written an incorrect, invalid statement in RSpec where I was looking...I was expecting for a record to exist. But I was using the find by instead of where. So you can call exist on the ActiveRecord relation but not on the actual record that gets returned. But I had the custom error message that was popping up and saying, "Oh, your record wasn't found," and I just kept getting that. So I was then diving through the code to understand again why my record wasn't found. And once I removed that custom error message, I realized that it was actually because of how I'd written the RSpec assertion that was wrong because then RSpec gave me a wonderful message that was like, hey, you're trying to call exist on this record, and you can't do that. Instead, you need to call it on a relation. So I've also learned don't bring over custom error messages until you have a green test, and even then, consider if it's helpful because, frankly, the custom error message wasn't that helpful. It was very similar to what RSpec was going to tell us in general. So there was really no need to add that custom step to it. For the final bit that I've learned or the hurdle that I've been facing is that migrating tests descriptions are hard unless they map over. So RSpec has the context and then a description for it that goes with the test. Test::Unit has methods like method names instead. So it may be something like test redemption codes, and then it runs through the code. Well, as I'm trying to migrate that knowledge over to RSpec, it's not clear to me what we're testing. Okay, we're testing redemption codes. What about them? Should they pass? Should they fail? Should they change? What are they redeeming? There's very little context. So a lot of my tests are copying that method name, so I know which tests I'm focused on, and I'm bringing over. And then in the description, it's like, Steph needs help adding a test description, and then I'm pushing that up and then going to the team for help. So they can help me look through to understand, like, what is it that this test is doing? What's important about this domain? What sort of terminology should I include? And that has been working, but I didn't see that coming as part of this whole migrating stuff over. I really thought this might be a little bit more of a copypasta job. And I have learned some trickery is afoot. And it's been more complicated than I thought it was going to be. CHRIS: Well, at a minimum, I can say thank you for sharing all of your hard-learned lessons throughout this process. This does sound arduous, but hopefully, at the end of it, there will be a lot of value and a cleaned-up test suite and all of those sorts of things. But yeah, it's been an adventure you've been on. So on behalf of the people who you are sharing all of these things with, thank you. STEPH: Well, thank you. Yeah, I'm hoping this is very niche knowledge that there aren't many people in the world that are doing this exact work that this happens to be what this team needs. So yeah, it's been an adventure. I've certainly learned some things from it, and I still have more to go. So not there yet, but I'm also excited for when we can actually then delete this portion of the build process. And then also, I think, get rid of fixtures because I didn't think about that from the beginning either. But now that I'm realizing that's how those tests are working, I suspect we'll be able to delete those. And that'll be really nice because now we also have another single source of truth in factory_bot as to how valid records are being built. Mid-Roll Ad: Flaky tests take the joy out of programming. You push up some code, wait for the tests to run, and the build fails because of a test that has nothing to do with your change. So you click rebuild, and you wait. Again. And you hope you're lucky enough to get a passing build this time. Flaky tests slow everyone down, break your flow and make things downright miserable. In a perfect world, tests would only break if there's a legitimate problem that would impact production. They'd fail immediately and consistently, not intermittently. But the world's not perfect, and flaky tests will happen, and you don't have time to fix them all today. So how do you know where to start? BuildPulse automatically detects and tracks your team's flaky tests. Better still, it pinpoints the ones that are disrupting your team the most. With this list of top offenders, you'll know exactly where to focus your effort for maximum impact on making your builds more stable. In fact, the team at Codecademy was able to identify their flakiest tests with BuildPulse in just a few days. By focusing on those tests first, they reduced their flaky builds by more than 68% in less than a month! And you can do the same because BuildPulse integrates with the tools you're already using. It supports all the major CI systems, including CircleCI, GitHub Actions, Jenkins, and others. And it analyzes test results for all popular test frameworks and programming languages, like RSpec, Jest, Go, pytest, PHPUnit, and more. So stop letting flaky tests slow you down. Start your 14-day free trial of BuildPulse today. To learn more, visit buildpulse.io/ bikeshed. That's buildpulse.io/bikeshed. Pivoting just a bit, there's a listener question that I'm really excited for us to dive into. And this listener question comes from Joël Quenneville. Hey, Joël. All right, so Joël writes in, "As senior-level developers, how do you set goals to ensure that you keep growing? How do you know what are high-value areas for you to improve? How do you stay sharp? Do you just keep adding new languages to your tool belt? Do you pull back and try to dig into more theoretical concepts? Do you feel like you have enough tech skills and pivot to other things like communication or management skills? At the start of a dev career, there's an overwhelming list of things that it feels like you need to know all at once. Eventually, there comes a point where you no longer feel like you're drowning under the list of things that you need to learn. You're at least moderately competent in all the core concepts. So what's next?" This is a big, fun, scary question. I really like this question. Thank you, Joël, for sending it in because I think there's so much here that can be discussed. I can kick us off with a few thoughts. I want to first highlight one of the things that...or one of the things that resonates with me from this question is how Joël describes going through and reaching senior status how it can really feel like working through a backlog of features. So as a developer, I want to understand this particular framework, or as a developer, I want to be able to write clear and fast tests, or as a developer, I want to contribute to an open-source project. But now that that backlog is empty, you're wondering what's next on your roadmap, which is where I think that sort of big, fun scariness comes into play. So the first idea is to take a moment and embrace that success. You have probably worked really hard to get where you're at in your career. And there's nothing wrong with taking a pause and enjoying the view and just being appreciative of the fact that you are able to get your work done quickly or that you feel very confident in the work that you're doing. Growth is often very important to our careers, but I also think it's important to recognize when you've achieved certain growth and then, if you want to, just enjoy that and pause. And you're not constantly pushing yourself to the next level. I think that is a totally reasonable and healthy thing to do. The second thing that comes to mind is that you're on a Choose Your Own Adventure mode now, so you get to...I would encourage folks, once you've reached this stage, to reflect on where you're at and consider what is your dream? What are your aspirations? Maybe they're related to tech; maybe they're not. And consider where is it that you want to go next? And then, what are the concrete steps that will help you achieve those goals? So there's a really great article by Jen Dary, who's a career coach and owner of Plucky Manager Training, that describes this process. And there's a really great blog post that I'll be sure to include a link to in the show notes. But she has a couple of great questions that will then help you identify, like, what are my goals? Some of those questions are, "If I could do anything and money wasn't an object, I'd spend my time doing dot dot dot." And that doesn't necessarily mean sitting on a beach with your toes in the sand all day. I mean, it could, but then that probably just means you need a vacation. So take the vacation. And then, once you start to get bored, where does your mind start to wander? What are the things that you want to do? Where are you interested in spending your time? And then, once you have an idea of how you'd like to spend your time, you can consider what actions you could take next that will point you in that direction. There's also the benefit that by this point, you probably have an idea of the type of things that you like to do and where you like to spend your time. And so you can figure out which areas of expertise you want to invest in. So do you like more greenfield projects? Do you like architecture discussions? Do you like giving talks? Do you like teaching? Or maybe you're interested in management. I think there's also a more concrete approach that you can take that. You can just talk to your managers in your team and say, "Hey, what big, hard problems are you looking to solve? And then, you can get some inspiration from them and see if their problems align with your interests. Maybe it's not even your own team, but you can talk to other companies and see what other problems industries are trying to solve. That might be an area that then spurs some curiosity or some interest. And then, where do you feel underutilized? So with your current day-to-day, are there areas where you feel that you wish you had more responsibilities or more opportunities, but you feel like you don't have access to those opportunities? Maybe that's an area to explore as well. This feels like a wonderful coaching question in terms of you have done it; congratulations. You've reached a really great spot in your career. And so now you're figuring out that big next step. This is going to be highly customized to each person to then figuring out what it is that's going to help you feel fulfilled over the next five years, ten years, however long you want to project out. Those are some of my thoughts. How about you? What do you think? CHRIS: Well, first, those are some great thoughts. I appreciate that I get to follow them now. It's going to be a hard act to follow. But yeah, I think Joël has asked a fantastic question. And coming from Joël, I know how intentional and thoughtful a learner, and sharer, and teacher and all of these things are. So it's all the more sort of framed in that for me knowing Joël personally. I think to start, the kernel of the question is as senior developers, that's the like...or senior level developers is the way Joël phrased it, but it treats it as sort of this discrete moment in time, which I think there's maybe even something to unpack. And I think we've probably talked about this in previous episodes, but like, what does that even mean? And I think part of the story here is going from reactive where it's like, I don't know how anything works. I know a little bit. I can code some. And every day, I'm presented with new problems that I just don't understand. And I'm trying to build up that base of knowledge. Slowly, you know, you start, and it's like 95% of the time you feel like that. And slowly, the dial switches over, and maybe it's only 25% of the time you feel like that. Somewhere along that spectrum is the line of senior developer. I don't actually know where it is, but it's somewhere in there. And so I think it's that space where you can move from reactive learning things as necessitated by the work that's coming at you to I want to proactively choose the things that I want to be learning to try and expand the stuff that I know, and the ways that I can think about the work without being in direct response to a piece of work coming at me. So with that in mind, what do you do with this proactive space? And I think the way Joël frames the question, again, to what I know of Joël, he's such an intentional person. And I wouldn't be surprised if Joël is very purposeful and thinks about this and has approached it as a specific thing that he's doing. I have certainly been in more of “I'll figure it out when I get there.” I'll explore. Or actually, probably the most pointed thing that I did was I joined a consultancy. And that was a very purposeful choice early on in my career because I'm like, I think I know a little bit. I don't think I know a lot. I would like to know a lot. That seems fun. So what do I think is the best way to do that? My guess, and it turned out to be very much true, is if I join a consultancy, I'm going to see a bunch of different projects, different types of technologies, organizations, communication structure, stuff that works, stuff that doesn't work. And to be honest, I actually thought I would try out the consultancy thing for a little while, like a year or two, and then go on to my next adventure. Spoiler alert: I stayed for seven years. It was one of the best periods of my professional life. And I found it to be a much deeper well than I expected it to be. But for anyone that's looking for, like, how can I structure my career in a way that will just automatically provide the sort of novelty and space to grow? I would highly recommend a consultancy like thoughtbot. I wonder if they're hiring. STEPH: Well, yes, we are hiring. That was a perfect plug that I wasn't expecting for that to come. But yes, thoughtbot is totally hiring. We'll include a link in the show notes to all the jobs. [laughs] CHRIS: Sounds fantastic. But very sincerely, that was the best choice that I could have made and was a way to flip the situation around such that I don't have to be thinking about what I want to be learning. The learning will come to me. But even within that, I still tried to be intentional from time to time. And I would say, again, I don't have a holistic theory of how to improve. I just have some stuff that's kind of worked out well. One thing is focusing on fundamentals wherever I can, or a different way to put it is giving myself permission to spend a little bit more time whenever my work brushes up against what I would consider fundamentals. So things that are in that space are like SQL. Every time I'm working on something, I'm like, ah, I could use like a CROSS JOIN here, but I don't know what that is. Maybe I'll spend an extra 30 minutes Googling around and trying to figure out what a CROSS JOIN is. Is that a thing? Is a CROSS JOIN a real thing? I may be making it up. [laughs] A window function, I know that those are real. Maybe I'll learn what a window function is. I think a CROSS JOIN is a real thing. A LEFT OUTER JOIN that's a cool thing. And so, each time I've had that, SQL has been something that expanding my knowledge; I've continually felt like that was a good investment. Or fundamentals of HTTP, that's another one that really has served me well. With Ruby being the primary language that I program in, deeply understanding the language and the fundamentals and the semantics of it that's another place that has been a good investment. But by contrast, I would say I probably haven't gone as deep on the frameworks that I work with. So Rails is maybe a little bit different just because, like many people, I came to Ruby through Rails, and I've learned a lot of Rails. But like in JavaScript, I've worked with many different JavaScript frameworks. And I have been a little more intentional with how much time I invest into furthering my skills in them because I've seen them change and evolve enough times. And if anything, I'm trying to look for ones that are like, what if it's less about the framework and more about JavaScript and web fundamentals underneath? Thus, I've found myself in Svelte land. But I think it's that choice of trying to anchor to fundamentals wherever possible. And then I would say the other thing that's been really beneficial for me is what can I do that's wildly outside the stuff that I already know? And so probably the most pointed example I have of this is learning Elm. So I previously spent most of my career working in Ruby and JavaScript, so primarily object-oriented languages without a strong type system. And then, I was able to go over and experience this whole different paradigm way of working, way of structuring programs, feedback loop. There was so much about it that was really, really interesting. And even though I don't get to work in Elm, frankly, as much as I would want at this point or really at all, it informs everything that I do moving forward. And I think that falls out of the fact that it was so different than what I was doing. So if I were to do that again, probably the next type of language I would learn is Lisp because those are like, well, that's a whole other category of thing that I've heard about. People say some fun stuff about them, but I don't really know. So it's that fundamentals and weird stuff is how I would describe it. And by weird, I mean outside of the core base of knowledge that I have. STEPH: I love that categorization, and I'll stick with it, fundamentals and weird stuff, to stretch and grow and find some other areas. I also really like your framing, the reactive versus proactive. I think that's a really nice way to put it because so much of your career is you are just learning what your company needs you to learn, or you're learning what you need to keep progressing and to feel more competent with the types of features or the work that you're handling. And I think that's why Jen Dary's blog post resonates with me so much because it's probably...up until now, a lot of someone's career, maybe not Joël's particularly, but I know probably for my career, a lot of it has been reactive in terms of what are the things that I need to learn? And so then once you reach that point of like, okay, I feel competent and reasonably good at all the things that I needed to know, where do I want to go next? And rather than focus on necessarily the plans that are laid out in front of me, I can then go wide and think about what are some of the bigger things that I want to tackle? What are the things that are meaningful to me? Because then I can now push forward to this bigger goal versus achieving a particular salary band or title or things like that. But I can focus on something else that I really want to contribute to. And there do seem to be two common paths. So once you reach that level, either you typically go into management, or you become that more like principal and then onward and upward, whatever is after principal. I don't even know what's after that, [laughs] but the titles that come after principal. So there's management, and then I've seen the other very strong contributors, so Aaron Patterson comes to mind. And I feel like those people then typically will migrate to places where they get to contribute to a language or to a framework. And I think it comes down to the idea of impact because both of those provide a greater impact. So if you go into management, you can influence and affect a team of individuals, and you can increase the value created by that team. Then you've likely exceeded the value that you would have created as your own individual contributor. Or, if you contribute to a language or a framework, then your technical decisions impact a larger community. So I think that would be another good thing to reflect on is what type of impact am I looking for? What type of communities do I want to have a positive impact on? And that may spur some inspiration around where you want to go next, the things that you want to focus on. CHRIS: Yeah, I think one of the things we're picking up in that that Joël mentioned in his question is the idea of there is the individual contributor path. But then there's also the management path, which is the typical sort of that's the progression. And I think, for one, naming that the individual contributor path and the idea of going to principal dev and those sorts of outcomes is a fantastic path in and of itself. I think often it's like, well, you know, you go along for a certain amount of time, and then you become a manager. It's like, those are actually distinctly different things. And people have different levels of interest and aptitude in them, and I think recognizing that is critically important. And so, not expecting that management just comes after individual contributor is an important thing. The other thing I'll say is Charity Majors, who we had on the podcast a bit back, has a wonderful blog post about the pendulum swing called The Engineer/Manager Pendulum. And so in it, she talks about folks that have taken an exploration over into manager land and then come back to the individual contributor path or vice versa sort of being able to move between them, treating them as two potentially parallel career tracks but ones that we can move between. And her assertion is that often folks that are particularly strong have spent some time in both camps because then you gain this empathy, this understanding of what's the whole picture? How are we doing all of this? How do we think about communication, et cetera? So, again, to name it, like, I think it's totally fine to stay on one of those tracks to really know which of those tracks speaks to you or to even move between them a little bit and to explore it and to find out what's true. So we'll include a link to that in the show notes. And we'll also include a link to the previous episode a while back when we had Charity on. But yeah, those I think are some critical thoughts as well because those are different areas that we can grow as developers and expand on our impact within the team. And so, we want to make sure we have those options on the table as well. STEPH: Absolutely. I love where teams will support individuals to feel comfortable shifting between experiences like that because it does make you a more well-rounded contributor to that product team, not just as an engineer, but then you will also understand what everybody else is working on and be able to have more meaningful conversations with them about the company goals and then the type of work that's being done. So yeah, I love it. If you're in a place that you can maybe fail a little bit, hopefully not in a too painful way, but you can take a risk and say, "Hey, I want to try something and see if I like it," then I think that's wonderful. And take the risk and see how it goes. And just know that you have an exit strategy should you decide that you don't like that work or that type of work isn't for you. But at least now you know a little bit more about yourself. Overall, I want to respond directly to something that Joël highlighted around how do you know what are high-value areas for you to improve? And I think there are two definitions there because you can either let the people around you and your team define that high value for you, and maybe that really resonates with you, and it's something that you enjoy. And so you can go to your manager and say, "Hey, what are some high-value areas where I can make an impact for the team?" Or it could be very personal. And what are the high-value areas for you? Maybe there's a particular industry that you want to work on. Maybe you want to hit the public speaking circuit. And so you define more intrinsically what are those high-value areas for you? And I think that's a good place to start collecting feedback and start looking at what's high value for you personally and then what's high value to the company and see if there's any overlap there. With that, I think we've covered a good variety of things to explore and then highlighted some of the different ways that you and I have also considered this question. I think it's a fabulous question. Also, I think it's one, even if you're not at that senior level, to ask this question. Like, go ahead and start asking it early and often and revisit your answers and see how they change. I think that would be a really powerful habit to establish early in your career and then could help guide you along, and then you can reflect on some of your earlier choices. So, Joël, thank you so much for that question. STEPH: On that note, shall we wrap up? CHRIS: Let's wrap up. The show notes for this episode can be found at bikeshed.fm. STEPH: This show is produced and edited by Mandy Moore. CHRIS: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review on iTunes, as it really helps other folks find the show. STEPH: If you have any feedback for this or any of our other episodes, you can reach us at @_bikeshed or reach me on Twitter @SViccari. CHRIS: And I'm @christoomey. STEPH: Or you can reach us at hosts@bikeshed.fm via email. CHRIS: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!! ANNOUNCER: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.

Laravel News Podcast
Tinkering well, bouncing users, and validating configs

Laravel News Podcast

Play Episode Listen Later May 31, 2022 57:25


Jake and Michael discuss all the latest Laravel releases, tutorials, and happenings in the community.This episode is sponsored by Scout APM - Laravel Monitoring and more that identifies slow database queries, memory leaks, and slow custom code - and Honeybadger - combining error monitoring, uptime monitoring and check-in monitoring into a single, easy to use platform and making you a DevOps hero. You can also watch a replay of the live recording.Show links Laravel 9.13 released Laravel 9.14 released Tinkerwell 3 - The PHP code runner is released A simple wallet implementation for Laravel Releasing Bouncer: Roles and permissions for Laravel apps Kinetic: A view-composer package for Inertia.js How to validate your Laravel app's config Battle Ready Laravel Test form requests in Laravel with request factories by Worksome Keeping your model factories lean Restructuring a Laravel controller using services, events, jobs, actions, and more Eloquent performance: 4 examples of n+1 query problems AlDente - a macOS menu bar tool to limit maximum charging percentage

StarTalk Radio
All Pain, No Gain with Charles Liu

StarTalk Radio

Play Episode Listen Later May 13, 2022 42:56 Very Popular


How fast does cheese roll down a hill? Neil deGrasse Tyson and co-hosts Chuck Nice and Gary O'Reilly walk us through the physics behind the weirdest sports: cheese rolling, belly flopping, face slapping and more with astrophysicist Charles Liu. NOTE: StarTalk+ Patrons can watch or listen to this entire episode commercial-free.Thanks to our Patrons Scott Schekk (shek), Kristine May, Jacob godman, Chelsea Dolloff, Daniel Lopez,Dustin G, Michael McManus, Genesis Martinez, Kinetik Plastik, and Pavel Bains for supporting us this week.Photo Credit: Coyau / Wikimedia Commons

Vox's The Weeds
Taxes! Let's get right Intuit.

Vox's The Weeds

Play Episode Listen Later Apr 5, 2022 52:22 Very Popular


Weeds co-hosts Dylan Matthews and Dara Lind are joined by Vox policy editor Libby Nelson (@libbyanelson) to talk about some hot! tax! policy! But mostly, why it's so annoying to file our taxes every year. The three discuss why the tax code is so complicated to begin with; compare our filing system to other countries; and daydream about what could be done to fix the system. Plus, a white paper about, you guessed it: taxes. References: How to get free tax prep, or volunteer to provide tax prep to others TR Reid's A Fine Mess Justin Trudeau's return-free tax promise Dylan explaining near-term options to reform tax filing “What is return-free filing, and how would it work?” The benefits of return-free filing Option one: the pre-filled return Option two: pay-as-you-earn ProPublica on Intuit/H&R Block lobbying that's kept taxes complicated White paper: “Inertia and Overwithholding: Explaining the Prevalence of Income Tax Refunds” by Damon Jones Does the EITC promote work? Hosts: Dylan Matthews (@dylanmatt), senior correspondent, Vox Dara Lind (@dlind), Weeds co-host, Vox Credits: Sofi LaLonde, producer and engineer Libby Nelson, editorial adviser Amber Hall, deputy editorial director of talk podcasts Sign up for The Weeds newsletter each Friday: vox.com/weedsletter  Want to support The Weeds? Please consider making a donation to Vox: bit.ly/givepodcasts Learn more about your ad choices. Visit podcastchoices.com/adchoices