Podcasts about prettier

  • 227PODCASTS
  • 319EPISODES
  • 45mAVG DURATION
  • 1EPISODE EVERY OTHER WEEK
  • Feb 25, 2025LATEST

POPULARITY

20172018201920202021202220232024


Best podcasts about prettier

Latest podcast episodes about prettier

COMPRESSEDfm
198 | The Great Formatting Debate: ESLint, Prettier, and TypeScript

COMPRESSEDfm

Play Episode Listen Later Feb 25, 2025 51:23


Josh Goldberg joins Amy and Brad to unpack the recent ESLint V9 release and its impact on the TypeScript ecosystem. From explaining the nuances of flat config migration to debating the proper separation between Prettier and ESLint, Josh offers practical advice for improving developer workflows. The conversation covers Josh's journey as a full-time open source maintainer, the Open Source Pledge initiative, and best practices for implementing linting in CI/CD pipelines. Plus, Josh shares behind-the-scenes details from the inaugural SquiggleConf event.Chapter Marks00:00 - Intro00:48 - Welcome Josh Goldberg01:06 - Working in open source and getting paid03:10 - The Open Source Pledge04:49 - ESLint V9 and flat config changes07:25 - Migration challenges with flat config09:52 - Understanding ESLint config format11:50 - How most people use ESLint16:20 - Prettier vs ESLint responsibilities18:47 - Conflict between Prettier and ESLint21:26 - TypeScript's role in ESLint25:01 - TypeScript ESLint packages explained27:43 - Linters for other languages29:31 - ESLint in CI/CD pipelines32:03 - Auto-fixing in different environments37:14 - AI's role in linting and formatting41:45 - SquiggleConf discussion44:15 - Conference tooling and Q&A system46:33 - Future SquiggleConf plans47:13 - Picks and PlugsBrad GarropyPick: Philips Hue smart lighting system - Set up Christmas lights with Hue smart outlets for easy control via phone or voice commandsPlug: Brad's BlueSky account - @bradgarropy.comJosh GoldbergPick: BlueSky social network - Appreciates how it feels like early Twitter without spam bots and complicated server setupsPlug: SquiggleConf - Web development tooling conference returning in September 2025Amy DuttonPick: The Inheritance Games (book) - Describes it as an easy-to-read young adult fiction with puzzles, similar to Knives OutPlug: Amy's BlueSky account - @selfteachmeLinksMentioned in the EpisodeTypeScript ESLintESLint v9 migration docsESLint Config InspectorSentry Grave $750k to Open Source MaintainersOpen Source Pledge initiativeSquiggle Conf websitePrisma PulsePhilips Hue smart lightingThe Inheritance Games (book mentioned by Amy)Social Media AccountsBrad's BlueSky account: @bradgarropy.comAmy's BlueSky account: @selfteachmeJosh Goldberg's BlueSky Account: @joshuakgoldberg.comRelated ResourcesESLint Stylistic projectESLint Config PrettierESLint Plugin Prettier"Create TypeScript Apps" project (Josh's tooling package)Awesome ESLint repo (collection of ESLint plugins)Manual to Magical: AI in Developer Tooling: Tobbe's talk on using AI to write code modsNicholas Zakas discussing the ESLint config system on Syntax podcastTools MentionedHuskyLint-stagedCursorBiome and OXLint (Rust-based linters)GitHub Actions

Women of Substance Music Podcast
#1670 Music by Prettier Than Matt, Alyssa Paige, Mara Sol, Cassidy Ladden, Michelle Rose, Sara Diana, T&M Ascend, AiramFM, Silja Topaz, CR Srikanth

Women of Substance Music Podcast

Play Episode Listen Later Feb 24, 2025 43:33


To get live links to the music we play and resources we offer, visit www.WOSPodcast.comThis show includes the following songs:Prettier Than Matt - Small Town Famous FOLLOW ON SPOTIFYAlyssa Paige - Flip the Script FOLLOW ON SPOTIFYMara Sol - To Be Whole FOLLOW ON SPOTIFYCassidy Ladden - Shiny FOLLOW ON SPOTIFYMichelle Rose - When We're Rich FOLLOW ON SPOTIFYSara Diana - Can't Be Fazed FOLLOW ON YTT&M Ascend - Bright & Unbroken FOLLOW ON SPOTIFYAiramFM - Set Me Free FOLLOW ON SPOTIFYSilja Topaz - Visions of us FOLLOW ON SPOTIFYCR Srikanth - Max Mornings - VS Pop™ For Music Biz Resources Visit www.FEMusician.com and www.ProfitableMusician.comVisit our Sponsor Susie Maddocks at https://www.susiemaddocks.comVisit our Sponsor Profitable Musician Newsletter at profitablemusician.com/joinVisit our Sponsor Kick Bookkeeping at http://profitablemusician.com/kickVisit our Sponsor Bobby Owsinski Challenge at https://profitablemusician.com/eqVisit www.wosradio.com for more details and to submit music to our review board for consideration.Visit our resources for Indie Artists: https://www.wosradio.com/resourcesBecome more Profitable in just 3 minutes per day. http://profitablemusician.com/join

Scaling DevTools
Guillermo Rauch, founder of Vercel: Developer Experience, AI and v0

Scaling DevTools

Play Episode Listen Later Feb 14, 2025 56:07 Transcription Available


Guillermo Rauch is the founder of Vercel. Vercel is a cloud infra platform so easy to use that it's almost become a category: “I'm building the Vercel of X”. Vercel also recently launched v0 which is potentially the next evolution of web development - type what you want and it builds it and deploys it for you. He's also the creator Next.js, socket.io and a ton of other open source tools and startups. Plus he's a prolific investor in DevTools. I've missed a ton of his achievements here but essentially, he's the king of DevTools and you probably know him already.What we talk about- Why Guillermo bets on people who ship- What AI has in common with Prettier- v0 puts design first- Saying ‘not yet' is a boss move- Why Guillermo thinks devs won't lose their jobs- How you can learn product building- Why you should be careful when hiring from rocketships - not everyone was in the control room- The value of people having a full stack skill set. And why communication is more important than ever- Why it's so important to explain what you do in simple terms- Tools Guillermo is excited about right nowLinks:- Guillermo Rauch - Vercel - v0 - NextJS- Socket.IO - Browserbase - LiveKit- LanguineThis episode is brought to you by WorkOS. If you're thinking about selling to enterprise customers, WorkOS can help you add enterprise features like Single Sign On and audit logs. https://workos.com/

The Hake Report
Separating 'families' | Tue 1-28-25

The Hake Report

Play Episode Listen Later Jan 28, 2025 114:39


"Sanctuary" churches, not respected! Training the boys! Is she out of Beardson's league?! Makeup or no makeup? Trans military activist "heroes."The Hake Report, Tuesday, January 28, 2025 ADTIMESTAMPS* (0:00:00) Start* (0:02:23) Topics* (0:03:38) Hey, guys!* (0:05:49) Hake News…* (0:08:02) Phone vs Sleep* (0:11:51) Illegal church sanctuary, "family" separation* (0:23:22) South Africa farmer refugees? J6 pardons* (0:24:59) Lost job for "Racially insensitive" social media at age 17* (0:32:20) Supers: LYC* (0:35:58) JOE, AZ: Trump vs Fed* (0:45:39) Controlled aggression: King Randall* (0:50:17) Monkey bars obstacle course* (0:53:58) JUSTIN, Fullerton: Deportations, bleeding hearts* (1:04:10) Popcorn: Trump tariffs and economy* (1:07:09) Popcorn: Pardon for violent J6ers?* (1:19:22) Way out of Beardson's league? Not even!* (1:25:11) Makeup is LYING! Prettier with or without?* (1:29:11) Jerry Garcia, RIP: "Rap is not music"* (1:31:26) Krassenstein on transgender heroes in military* (1:37:16) "Equal pay" clap back, 2016* (1:39:18) ROBERT, KS: transgender and lies* (1:47:34) RICK, VA: Trump moral policies* (1:51:03) Starflyer 59 - Hey, Are you listening? - 2019 - Young in My HeadLINKSBLOG https://www.thehakereport.com/blog/2025/1/28/the-hake-report-tue-1-28-25PODCAST / Substack HAKE NEWS from JLP https://www.thehakereport.com/jlp-news/2025/1/28/hake-news-tue-1-28-25Hake is live M-F 9-11a PT (11-1CT/12-2ET) Call-in 1-888-775-3773 https://www.thehakereport.com/showVIDEO YouTube - Rumble* - Facebook - X - BitChute - Odysee*PODCAST Substack - Apple - Spotify - Castbox - Podcast Addict*SUPER CHAT on platforms* above or BuyMeACoffee, etc.SHOP - Printify (new!) - Spring (old!) - Cameo | All My LinksJLP Network: JLP - Church - TFS - Nick - Joel - Punchie Get full access to HAKE at thehakereport.substack.com/subscribe

Les Cast Codeurs Podcast
LCC 319 - le ramasse-miettes-charognes

Les Cast Codeurs Podcast

Play Episode Listen Later Dec 16, 2024 70:05


Dans cet épisde en audio et en vidéo (youtube.com/lescastcodeurs), Guillaume et Emmanuel discutent des 15 ans de Go, d'une nouvelle approche de garbage collecting, de LLMs dans les applications Java, dobservabilité, d'une attaque de chaine d'approvisionnement via javac et d'autres choses. Enregistré le 13 décembre 2024 Téléchargement de l'épisode LesCastCodeurs-Episode-319.mp3 News Langages Go fête son 15ème anniversaire ! https://go.dev/blog/15years discute les 15 ans la corrections de gotchas dans les for loops (notamment les variables étaient loop scoped) le fait que la compile echoue si on attend une version de go superieure seulement depuis go 1.21 en parallele de la gestion de la chaine d'outil (c'est en 2023 seulement!) opt-in telemetrie aussi recent Construire OpenJDK à partir des sources sur macOS https://www.morling.dev/blog/building-openjdk-from-source-on-macos/ de maniere surprenante ce n'est pas tres compliqué Papier sur l'aproche Mark-scavenge pour un ramasse miette https://inside.java/2024/11/22/mark-scavenge-gc/ papier de recherche utiliser l'accessibilité pour preuve de vie n'est pas idéal: un objet peut etre atteignable mais ne sera jamais accedé par le programme les regions les plus pauvres en objets vivant voient leurs objets bouger dans uen autre region et la regio libéré, c'est le comportement classique des GC deux methodes: mark evaguate qui le fait en deux temps et la liveness peut evoluer ; et scavenge qui bouge l'objet vivant des sa decouverte ont fait tourner via ZGC des experience pour voir les objects consideres vivants et bougés inutilement. resultats montrent un gros taux d'objets bougés de maniere inutile proposent un algo different ils marquent les objets vivants mais ne les bougent pas avant le prochain GC pour leur donner une change de devenir unreachable elimine beaucoup de deplacement inutiles vu que les objets deviennent non accessible en un cycle de GC jusquà 91% de reduction ! Particulierement notable dans les machines chargées en CPU. Les tokens d'accès court ou longs https://grayduck.mn/2023/04/17/refresh-vs-long-lived-access-tokens/ pourquoi des long access tokens (gnre refresh token) sont utilises pour des short lived dans oauth 2.0 refresh token simplifient la revocation: vu que seul le auth serveur a a verifier la révocation et les clients vérifient l'expiration et la validité de la signature refresh token ne sont envoyés que entre endpoints alors que les access tokens se baladent pas mal: les frontières de confiance ne sont pas traversées refresh token comme utilise infréquement, et donc peut etre protegee dans une enclave les changements de grants sont plus simple tout en restant distribuable histoire des access refresh token et access token permet de mieux tracer les abus / attaques les inconvenients: c'est plus compliqué en flow, the auth serveur est un SPOF amis mitigeable Java Advent est de retour https://www.javaadvent.com/calendar backstage Java integrite par defaut (et ses consequences sur l'ecosysteme) timefold (sovler) Les extensions JUNit 5 OpenTelemetry via Java Agent vs Micrometer analyse statique de code CQRS et les fonctionalités modernes de Java java simple (sans compilatrion, sans objet fullstack dev with quarkus as backend José Paumard introduit et explique les Gatherers dans Java 24 dans cette vidéo https://inside.java/2024/11/26/jepcafe23/ Librairies Micronaut 4.7, avec l'intégration de LangChain4j https://micronaut.io/2024/11/14/micronaut-framework-4-7-0-released/ Combiner le framework de test Spock et Cucumber https://www.sfeir.dev/back/spock-framework-revolutionnez-vos-tests-unitaires-avec-la-puissance-du-bdd-et-de-cucumber/ les experts peuvent écrire leurs tests au format Gherkin (de Cucumber) et les développeurs peuvent implémenter les assertions correspondantes avec l'intégration dans Spock, pour des tests très lisibles Spring 6.2 https://spring.io/blog/2024/11/14/spring-framework-6-2-0-available-now beans @Fallback améliorations sur SpELet sur le support de tests support de l'echape des property placeholders une initioalisation des beans en tache de fond nouvelle et pleins d'autres choses encore Comment créer une application Java LLM tournant 100% en Java avec Jlama https://quarkus.io/blog/quarkus-jlama/ blog de Mario Fusco, Mr API et Java et Drools utilise jlama + quarkus + langchain Explique les avantage de l'approche pure Java comme le cycle de vie unique, tester les modeles rapidement, securite (tout est in process), monolithe ahahah, observabilité simplifiée, distribution simplifiée (genre appli embarquée) etc Vert.x 5 en seconde incubation https://vertx.io/blog/eclipse-vert-x-5-candidate-2-released/ Support des Java modules (mais beacoup des modules vert.x eux-même ne le supportent pas support io_uring dans vert.x core le load balancing côté client le modele des callbacks n'est plus supporté, vive les Futur beaucoup d'améliorations autour de gRPC et d'autres choses Un article sur Spring AI et la multi modalite audio https://spring.io/blog/2024/12/05/spring-ai-audio-modality permet de voir les evolutions des APIs de Spring AI s'appluie sur les derniers modeles d'open ai des examples comme par exemple un chatbot voix et donc comment enregistrer la voix et la passer a OpenAI Comment activer le support experimental HTTP/3 dans Spring Boot https://spring.io/blog/2024/11/26/http3-in-reactor-2024 c'ets Netty qui fait le boulot puis Spring Netty l'article décrit les etapes pour l'utiliser dans vos applis Spring Boot ou Spring Cloud Gateway l'article explique aussi le cote client (app cliente) ce qui est sympa Infrastructure Un survol des offres d'observabilité http://blog.ippon.fr/2024/11/18/observabilite-informatique-comprendre-les-bases-2eme-partie/ un survol des principales offres d'observabilité Open source ou SaaS et certains outsiders Pas mal pour commencer à défricher ce qui vous conviendrait blog de ippon Web Sortie de Angular 19 https://blog.ninja-squad.com/2024/11/19/what-is-new-angular-19.0/ stabilité des APIs Signal APIs migration automatique vers signals composants standalone par défaut nouvelles APIs linkedSignal et resource de grosses améliorations de SSR et HMR un article également de Sfeir sur Angular 19 https://www.sfeir.dev/front/angular-19-tout-ce-quil-faut-savoir-sur-les-innovations-majeures-du-framework/ Angluar 19 https://www.sfeir.dev/front/angular-19-tout-ce-quil-faut-savoir-sur-les-innovations-majeures-du-framework/ composant standalone par default (limiter les problemes de dependances), peut le mettre en strict pour le l'imposer (ou planter) signalement des imports inutilisés @let pour les variables locales dans les templates linkedSignal (experimental) pour lier des signaux entre eux (cascade de changement suite a un evenement hydratation incrementale (contenu progressivement interactif avec le chargement - sur les parties de la page visible ou necessaires et event replay, routing et modes de rendu en rendy hybride, Hot module replacement etc The State of Frontend — dernière compilation des préférences des développeurs en terme de front https://tsh.io/state-of-frontend/ React en tête, suivi de Vue et Svelte. Angular seulement 4ème Côté rendering framework, Next.js a la majorité absolue, ensuite viennent Nuxt et Astro Zod est la solution de validation préférée Pour la gestion de date, date-fns est en tête, suivi par moment.js Côté state management, React Context API en première place, mais les suivants sont tous aussi pour React ! Grosse utilisation de lodash pour plein d'utilités Pour fetcher des resources distantes, l'API native Fetch et Axios sont les 2 vaincoeurs Pour le déploiement, Vercel est premier Côté CI/CD, beaucoup de Github Actions, suivi par Gitlab CI Package management, malgré de bonnes alternatives, NPM se taille toujours la part du lion Ecrasante utilisation de Node.js comme runtime JavaScript pour faire du développement front Pour ce qui est du typing, beaucoup utilisent TypeScript, et un peu de JSdoc, et la majorité des répondants pensent que TypeScript a dépassé JavaScript en usage Dans les API natives du navigateur, Fetch, Storage et WebSockets sont les APIs les plus utilisées La popularité des PWA devrait suivre son petit bonhomme de chemin En terme de design system, shadcn.ui en tête, suivi par Material, puis Bootstram Pour la gestion des styles, un bon mix de plain old CSS, de Tailwind, et de Sass/CSS Jest est premier comme framework de tests Les 3/4 des développeurs front utilisent Visual Studio Code, quant au quart suivant, c'est JetBrains qui raffle les miettes Pour le build, Vite récolte les 4/5 des voix ESLint et Prettier sont les 2 favoris pour vérifier le code   Parfois, on aimerait pouvoir tester une librairie ou un framework JavaScript, sans pour autant devoir mettre en place tout un projet, avec outil de build et autre. Julia Evans explore les différents cas de figure, suivant la façon dont ces librairies sont bundlées https://jvns.ca/blog/2024/11/18/how-to-import-a-javascript-library/ Certaines librairies permette de ne faire qu'un simple import dans une balise script Certaines frameworks sont distribués sous forme d'Universal Module Definition, sous CommonJS, d'ESmodule franchemet en tant que noob c'est compliqué quand même Data et Intelligence Artificielle L'impact de l'IA en entreprise et des accès aux documents un peu laxistes https://archive.ph/uPyhX l'indexing choppe tout ce qu'il peut et l'IA est tres puissante pour diriger des requetes et extraires les données qui auraient du etre plus restreintes Différentes manières de faire de l'extraction de données et de forcer la main à un LLM pour qu'il génère du JSON https://glaforge.dev/posts/2024/11/18/data-extraction-the-many-ways-to-get-llms-to-spit-json-content/ l'approche “je demande gentiment” au LLM, en faisant du prompt engineering en utilisant du function calling pour les modèles supportant la fonctionnalité, en particulier avant les approches de type “JSON mode” ou “JSON schema” ou effectivement si le modèle le supporte aussi, toujours avec un peu de prompting, mais en utilisant le “JSON mode” qui force le LLM a générer du JSON valide encore mieux avec la possibilité de spécifier un schema JSON (type OpenAPI) pour que le JSON en sortie soit “compliant” avec le schéma proposé Comment masquer les données confidentielles avec ses échanges avec les LLMs https://glaforge.dev/posts/2024/11/25/redacting-sensitive-information-when-using-generative-ai-models/ utilisation de l'API Data Loss Prevention de Google Cloud qui permet d'identifier puis de censurer / masquer (“redacted” en anglais) des informations personnelles identifiables (“PII”, comme un nom, un compte bancaire, un numéro de passeport, etc) pour des raison de sécurité, de privacy, pour éviter les brèche de données comme on en entend trop souvent parler dans les nouvelles On peut utiliser certains modèles d'embedding pour faire de la recherche de code https://glaforge.dev/posts/2024/12/02/semantic-code-search-for-programming-idioms-with-langchain4j-and-vertex-ai-embedding-models/ Guillaume recherche des bouts de code, en entrant une requête en langue naturel Certains embedding models supportent différents types de tâches, comme question/réponse, question en langue naturelle / retour sous forme de code, ou d'autres tâches comme le fact checking, etc Dans cet article, utilisation du modèle de Google Cloud Vertex AI, en Java, avec LangChain4j Google sort la version 2 de Gemini Flash https://blog.google/technology/google-deepmind/google-gemini-ai-update-december-2024/ La nouvelle version Gemini 2.0 Flash dépasse même Gemini 1.5 Pro dans les benchmarks Tout en étant 2 fois plus rapide que Gemini 1.5 Pro, et bien que le prix ne soit pas encore annoncé, on imagine également plus abordable Google présente Gemini 2 comme le LLM idéal pour les “agents” Gemini propose une vraie multimodalité en sortie (premier LLM sur le marché à le proposer) : Gemini 2 peut entrelacer du texte, des images, de l'audio Gemini 2 supporte plus de 100 langues 8 voix de haute qualité, assez naturelles, pour la partie audio Un nouveau mode speech-to-speech en live, où on peut même interrompre le LLM, c'est d'ailleurs ce qui est utilisé dans Project Astra, l'application mobile montrée à Google I/O qui devient un vrai assistant vocale en live sur votre téléphone Google annonce aussi une nouvelle expérimentation autour des assistants de programmation, avec Project Jules, avec lequel on peut discuter en live aussi, partager son code, comme un vrai pair programmeur Google a présenté Project Mariner qui est un agent qui est sous forme d'extension Chrome, qui va permettre de commander votre navigateur comme votre assistant de recherche personnel, qui va être capable de faire des recherches sur le web, de naviguer dans les sites web, pour trouver les infos que vous recherchez Cet autre article montre différentes vidéos de démos de ces fonctionnalités https://developers.googleblog.com/en/the-next-chapter-of-the-gemini-era-for-developers/ Un nouveau projet appelé Deep Research, qui permet de faire des rapports dans Gemini Advanced : on donne un sujet et l'agent va proposer un plan pour un rapport sur ce sujet (qu'on peut valider, retoucher) et ensuite, Deep Research va effectuer des recherches sur le web pour vous, et faire la synthèse de ses recherches dans un rapport final https://blog.google/products/gemini/google-gemini-deep-research/ Enfin, Google AI Studio, en plus de vous permettre d'expérimenter avec Gemini 2, vous pourrez aussi utiliser des “starter apps” qui montrent comment faire de la reconnaissance d'objet dans des images, comment faire des recherches avec un agent connecté à Google Maps, etc. Google AI Studio permet également de partager votre écran avec lui, en mobile ou en desktop, de façon à l'utiliser comme un assistant qui peut voir ce que vous faites, ce que vous coder et peut répondre à vos questions Méthodologies Un article de GitHub sur l'impact de la surutilisation des CPU sur la perf de l'appli https://github.blog/engineering/architecture-optimization/breaking-down-cpu-speed-how-utilization-impacts-performance/ c'est surprenant qu'ils ont des effets des 30% de perf c'est du a la non limit thermique, au boost de frequece qui en suit ils ont donc cherché le golden ratio pour eux autour de 60% ils prennent des morceaux de cluster kube poru faire tourner les workloads et ajoutent des wqorkload CPU artificiels (genre math) Sécurité Attaque de la chaîne d'approvisionnement via javac https://xdev.software/en/news/detail/discovering-the-perfect-java-supply-chain-attack-vector-and-how-it-got-fixed s'appuie sur l'annotation processeur l'annotation processors des dependances est chargé et executé au moment du build du projet et cherche les annotations processor dans le user classpath (via le pattern serviceloader) et donc si la dependance est attaquée et un annotation processor est ajouté ou modifié on a un vecteur d'attaque au moment de la compilation du projet ciblé des qu'on deparre l'IDE en gros workaround, activer -proc:none et activer les annotation processors explicitly dans votre outil de build certaines améliorations dans le JDK: le compilateur note qu'il execute un annotation processor dans java 23+ les annotation processors sont deactivés par defaut Conférences La liste des conférences provenant de Developers Conferences Agenda/List par Aurélie Vache et contributeurs : 19 décembre 2024 : Normandie.ai 2024 - Rouen (France) 20 janvier 2025 : Elastic{ON} - Paris (France) 22-25 janvier 2025 : SnowCamp 2025 - Grenoble (France) 24-25 janvier 2025 : Agile Games Île-de-France 2025 - Paris (France) 30 janvier 2025 : DevOps D-Day #9 - Marseille (France) 6-7 février 2025 : Touraine Tech - Tours (France) 21 février 2025 : LyonJS 100 - Lyon (France) 28 février 2025 : Paris TS La Conf - Paris (France) 20 mars 2025 : PGDay Paris - Paris (France) 20-21 mars 2025 : Agile Niort - Niort (France) 25 mars 2025 : ParisTestConf - Paris (France) 26-29 mars 2025 : JChateau Unconference 2025 - Cour-Cheverny (France) 28 mars 2025 : DataDays - Lille (France) 28-29 mars 2025 : Agile Games France 2025 - Lille (France) 3 avril 2025 : DotJS - Paris (France) 10-11 avril 2025 : Android Makers - Montrouge (France) 10-12 avril 2025 : Devoxx Greece - Athens (Greece) 16-18 avril 2025 : Devoxx France - Paris (France) 29-30 avril 2025 : MixIT - Lyon (France) 7-9 mai 2025 : Devoxx UK - London (UK) 16 mai 2025 : AFUP Day 2025 Lille - Lille (France) 16 mai 2025 : AFUP Day 2025 Lyon - Lyon (France) 16 mai 2025 : AFUP Day 2025 Poitiers - Poitiers (France) 24 mai 2025 : Polycloud - Montpellier (France) 5-6 juin 2025 : AlpesCraft - Grenoble (France) 11-13 juin 2025 : Devoxx Poland - Krakow (Poland) 12-13 juin 2025 : Agile Tour Toulouse - Toulouse (France) 12-13 juin 2025 : DevLille - Lille (France) 24 juin 2025 : WAX 2025 - Aix-en-Provence (France) 26-27 juin 2025 : Sunny Tech - Montpellier (France) 1-4 juillet 2025 : Open edX Conference - 2025 - Palaiseau (France) 18-19 septembre 2025 : API Platform Conference - Lille (France) & Online 2-3 octobre 2025 : Volcamp - Clermont-Ferrand (France) 6-10 octobre 2025 : Devoxx Belgium - Antwerp (Belgium) 16-17 octobre 2025 : DevFest Nantes - Nantes (France) 6 novembre 2025 : dotAI 2025 - Paris (France) 12-14 novembre 2025 : Devoxx Morocco - Marrakech (Morocco) 23-25 avril 2026 : Devoxx Greece - Athens (Greece) 17 juin 2026 : Devoxx Poland - Krakow (Poland) Nous contacter Pour réagir à cet épisode, venez discuter sur le groupe Google https://groups.google.com/group/lescastcodeurs Contactez-nous via twitter https://twitter.com/lescastcodeurs Faire un crowdcast ou une crowdquestion Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs Tous les épisodes et toutes les infos sur https://lescastcodeurs.com/

Flame Bearers - The Women Athletes Carrying Tokyo's Torch
UNEDITED: I Had to be Prettier, Funnier to Compensate

Flame Bearers - The Women Athletes Carrying Tokyo's Torch

Play Episode Listen Later Dec 11, 2024 25:05


“Your body isn't broken—it just works differently now.” That's how Dana Mathewson—3x Team USA Wheelchair Paralympian, and Wimbledon champ—views her body today, but that wasn't always her perspective. At the age of 10, Dana developed a rare auto-immune condition. When most girls are desperately trying to fit in with their peers, Dana was forced to reimagine her identity and future. She shares, “I was 10 years old, and suddenly, the thing everyone noticed about me was my wheelchair. I felt like I had to be prettier, funnier—just more—to compensate for what I thought was a huge defect.” Reflecting on this period, Dana mentions, "sports taught me to see my body as something to celebrate, not to hide." Wheelchair tennis helped her rebuild confidence and overcome self-doubt,, ultimately propelling her to the highest levels of competition on the global stage. "Although my body doesn't work the same way it used to, that doesn't mean it's broken. It just means I've found a new way to make it work for me—and it does." Dana also opens up about her decision to retire after over a decade in the sport, saying, “I realized I wanted to spend more time with my family and my new husband—there was more to life than constant travel and training.” She remains deeply connected to the game, transitioning into commentary and consulting roles, where she plans to bring her firsthand insights to a wider audience. We can't wait to tune in! Throughout, Dana discusses the challenges of breaking down misconceptions about Paralympic sports, the importance of representation, and her hopes for para-sports leading into LA 2028. Plus, she offers advice for anyone navigating life's challenges: lean into what makes you unique, find community, and don't be afraid to redefine success. “The outlets are out there, and others are searching for you just as much as you're searching for them,” she says. --------- We heard you loud & clear: you want more athlete's stories, so we responded. Flame Bearers: UNEDITED, a new video and podcast series celebrates the journeys of elite women athletes from around the world at all phases of their journeys: seeking their first international qualifications, at the pinnacle of their careers, and after retirement. In this largely UNEDITED series, we'll meet more athletes than ever before, all at various stages of their paths. This series is different not only because we're broadening who we're featuring, but how we're doing so. In the spirit of bringing you MORE STORIES, the tradeoff is fewer bells + whistles (i.e. animations & fancy sound effects than we normally include in our productions). We think it's worth the trade off so we can elevate more women doing incredible work -- we'd love to hear your thoughts. ------ Flame Bearers is a multi media movement, illuminating the unsung stories of elite women athletes from around the world. We tell stories via podcast, video and live events and have worked with over 250 Olympians and Paralympians from 55 countries and counting. For more videos about elite women athletes, subscribe to our YouTube channel ► https://www.youtube.com/channel/UCVnEbCOeOvNlK6Bocw9ZSdA?sub_confirmation=1 Follow us - Instagram - https://www.instagram.com/flamebearers/ Facebook - https://www.facebook.com/FlameBearersPodcast Linkedin - https://www.linkedin.com/company/flame-bearers/ Tiktok- https://www.tiktok.com/@flame_bearers X- https://twitter.com/flame_bearers OUR WEBSITE - https://flamebearers.com/

Software Engineering Daily
TypeScript ESLint with Josh Goldberg

Software Engineering Daily

Play Episode Listen Later Oct 31, 2024 56:29


TypeScript is a superset of JavaScript that adds static typing with optional type annotations. It was created at Microsoft and first released in 2012. TypeScript ESLint enables ESLint and Prettier to run on TypeScript code. Josh Goldberg is a host for Software Engineering Daily, the author of Learning TypeScript by O'Reilly, and a Microsoft MVP. The post TypeScript ESLint with Josh Goldberg appeared first on Software Engineering Daily.

Podcast – Software Engineering Daily
TypeScript ESLint with Josh Goldberg

Podcast – Software Engineering Daily

Play Episode Listen Later Oct 31, 2024 56:29


TypeScript is a superset of JavaScript that adds static typing with optional type annotations. It was created at Microsoft and first released in 2012. TypeScript ESLint enables ESLint and Prettier to run on TypeScript code. Josh Goldberg is a host for Software Engineering Daily, the author of Learning TypeScript by O'Reilly, and a Microsoft MVP. The post TypeScript ESLint with Josh Goldberg appeared first on Software Engineering Daily.

DejaVue
All about VoidZero - The Interview with Evan You

DejaVue

Play Episode Listen Later Oct 25, 2024 68:38 Transcription Available


As a special DejaVue episode - Alex met up with with the creator of Vue, Vite and founder of VoidZero Evan You himself and discuss his new company and the vision of a unified toolchain.Starting with how the idea of VoidZero came up and finding the right investors went, further discussion revolve around the monetization and why VC money was the way to go instead of other models, such as the sponsorship model of Vue, OpenCore or similar.Also, we cover a lot of community questions, such as whether Next.js will support Vite in the future, what lessons Evan and team learned from other projects like Rome and when we see the first Vite version with Rolldown.Enjoy the episode!Chapters(00:00) - Welcome to DejaVue (00:26) - What is VoidZero? (01:09) - When did you have the idea for VoidZero? (05:16) - Limits of Vue's funding model (07:10) - When did you found VoidZero? (09:20) - The name VoidZero (11:25) - What is open source will stay open source! (11:54) - Who is on the VoidZero team? (14:56) - VC Funding for VoidZero (18:12) - Picking the right investors (19:34) - The solved Zero to One Problem (21:05) - NPM download as metric (22:02) - Other company models for VoidZero (28:18) - Lessons Learned from other "unified JS toolchain projects" (33:21) - Feedback from framework authors (34:28) - VoidZero and runtime-agnosticism (37:35) - Projects close to what VoidZero should become? (38:14) - Upcoming projects which will be integral for VoidZero (39:50) - The Monetization of VoidZero (41:55) - Monetizing a toolchain (43:15) - Are planned services relevant for hobby devs? (44:12) - How do you plan to divide the funds? (44:50) - Vue as first class citizen (48:48) - Impact of VoidZero on time for Vue and Vite (55:37) - Relationship between VoidZero and UnJS (56:55) - .config proposal (57:39) - Migration path from tools like SWC or esbuild (59:27) - When Next.js will support Vite? (01:01:34) - oxc-lint and stylistic rules (01:02:42) - Collaboration with the TypeScript team? (01:03:04) - TypeScript Checking in VoidZero? (01:03:32) - Will the formatter support Prettier? (01:04:05) - License Change to Vite (01:05:14) - When can we test Rolldown + Vite? (01:06:30) - Hiring at VoidZero (01:08:20) - Wrapping up Links and ResourcesAnnouncement BlogpostViteConf KeynoteVoidZero TeamVite License Change PRRolldown Vite Fork

Mojo In The Morning
Wes' Feet are Prettier Than Shannon's

Mojo In The Morning

Play Episode Listen Later Sep 25, 2024 12:36 Transcription Available


Higher Density Living Podcast
Become Your Own Sugar Daddy: Travel Tips & Money Mindset with Conway | I'm Getting Richer and Prettier

Higher Density Living Podcast

Play Episode Listen Later Sep 9, 2024 41:41


Episode Description:   Embark on a journey of self-discovery and explore the depths of consciousness, spirit, and the human condition. Join your host Jason Rigby and special guest Conway as they delve into the unseen realities that shape our lives. In this episode, we'll discuss the power of manifestation, journaling for personal growth, and the importance of financial empowerment. Get ready to walk the cliff's edge between the seen and unseen, and discover how to live a high-density life.   Guest Bio:   Conway is a renowned entrepreneur, financial empowerment coach, and digital nomad. She's passionate about helping women achieve financial freedom and manifest their dreams. Conway's expertise in building cash confidence, overcoming scarcity mindsets, and healing wealth blocks has transformed countless lives. Her guided journal, "I'm Only Getting Richer and Prettier," is a testament to her commitment to empowering women on their journey to financial abundance.   Key Discussion Points:   The Power of Journaling: Discover how journaling can reprogram your subconscious mind, heal limiting beliefs, and manifest your desires. Financial Limitless and Cash Confidence: Learn how to cultivate a positive relationship with money, overcome financial fears, and create a life of abundance. Traveling for Self-Discovery: Explore how traveling can expand your horizons, challenge your perspectives, and lead to personal growth. The Importance of Intention: Understand how setting intentions can shape your reality and attract positive experiences into your life. Balancing Hustle Culture with Receptivity: Find out how to create a life that allows for both ambition and openness to receive abundance.   Resources:   Conway's Linktree: https://linktr.ee/Conwayisrad Conway's Website: ConwayLifestyle.com or ItsConway.com Conway's Instagram: @casieeconway "I'm Only Getting Richer and Prettier" Guided Journal: Available on Amazon and ConwayLifestyle.com   Call to Action:   Follow Conway on Instagram for daily inspiration and financial empowerment tips. Purchase Conway's guided journal to start your journey towards financial abundance. Enroll in Conway's digital course, "Becoming Your Own Sugar Daddy," for a deeper dive into financial empowerment and personal transformation.   Connect with Higher Density Living:   Subscribe to our podcast on your favorite platform. Leave us a review and share this episode with your friends. Visit our website for more information and resources.   Thank you for joining us on this episode of Higher Density Living. We hope you leave feeling inspired and empowered to create a life of abundance and self-discovery. Remember, the journey starts within.

The Minimal Mom
25 Funny Questions Twins get Asked

The Minimal Mom

Play Episode Listen Later Aug 18, 2024 26:48


Diana's Friendship Workshop: https://www.biblestudy.co/friend-workshop This is for you: - If you're tired of surface-level interactions, or friends who are always too busy to get together. - You crave a support system of friends who understand your unique challenges, limitations, or stage of life. - Your nest is empty, and you're ready to build friendships based on your own interests and faith. - You've moved homes or changed churches and you're eager to connect, but aren't sure how to break the ice. You don't have to live lonely. Please join us! COST: $10.00 In this episode: 00:00 25 Questions for Twins 00:48 Surprise! Twins! 01:28 Who is the oldest? 03:00 Can you read each other's mind? 03:15 Feel each other's pain? 03:34 Did you trick people? 04:05 How do we tell you apart? 04:48 Which twin is smarter? Funnier? Prettier? 06:57 Own secret language? 07:50 What's it like to be a twin? 09:18 Do you like the same foods? 09:46 Dress alike when kids? 10:36 Do you get tired of getting mixed up? 12:24 Have you dated the same person? 12:47 Do you finish each other's sentences? 13:30 Do you have identical handwriting? 14:51 Do you ever get tired of twin questions? 14:57 Did you have bunk beds? 15:00 Can strangers tell you apart? 15:08 Do you like the same hobbies? 15:35 Any funny mix up stories? 15:54 Did you want a double wedding? 16:37 How to get Dawn some new friends Welcome to The Official Minimal Mom Podcast channel. If you'd like to hear previous episodes, you can find them on all podcasting apps including Apple Podcasts, Spotify and iTunes. Thank you so much for listening and could I ask a favor? Would you mind subscribing? It helps YouTube recommend this podcast to more friends. Thank you! Dawn ABOUT THE MINIMAL MOM: Hi, I'm Dawn, if we haven't met before, I'm married to Tom and we have four kids ages 8-13. We live outside of the Twin Cities in MN and have called ourselves minimalists for 8 years now. We got rid of 85% of our stuff and don't miss ANY OF IT! If you'd like to see more instructional videos about minimalism and decluttering, be sure to check out my YouTube channel: https://www.youtube.com/@TheMinimalMom

Asknathaniel Podcast
THE PRETTIER THE WOMAN THE UGLIER THE MAN SUPER GORGEOUS WOMEN HAVE LOW SELF ESTEEM

Asknathaniel Podcast

Play Episode Listen Later Aug 16, 2024 163:03


THE PRETTIER THE WOMAN THE UGLIER THE MAN SUPER GORGEOUS WOMEN HAVE LOW SELF ESTEEM

Broeske and Musson
LOOKS AND LONGEVITY: Do Prettier People Live Longer?

Broeske and Musson

Play Episode Listen Later Aug 13, 2024 17:15


The study analyzed how attractiveness based on yearbook pictures is linked to longevity. We find that the least attractive 1/6th had a significantly Higher Hazard of mortality. The least attractive 1/6th of women lived almost 2 years less than others at 20.  Guest Co-Host: Blake Taylor  Please Like, Comment and Follow 'Broeske & Musson' on all platforms:   ---    The ‘Broeske & Musson Podcast' is available on the KMJNOW app, Apple Podcasts, Spotify or wherever else you listen to podcasts.    ---  ‘Broeske & Musson'  Weekdays 9-11 AM Pacific on News/Talk 580 AM & 105.9 FM KMJ  | Facebook | Podcast| X |   -  Everything KMJ   KMJNOW App | Podcasts | Facebook | X | Instagram   See omnystudio.com/listener for privacy information.

Permission to Stan Podcast: KPOP Multistans
JIN RageGaming Returns|ENHYPEN on Repeat!|FELIX agrees he's prettier than his sisters|STRAY KIDS & NMIXX in Hyde Park|HYBE Saga continues:Source sues MinHeejin|NMIXX HAEWON sniffs GIDLE SHUHUA's feet?|

Permission to Stan Podcast: KPOP Multistans

Play Episode Listen Later Jul 18, 2024 65:22


@PermissionToStanPodcast on Instagram (DM us here) & TikTok!NEW Podcast Episodes every THURSDAY! Please support us by 'Following' & 'Subscribing' for more K-POP talk!July ComebacksENHYPEN comeback Romance: Untold has been on repeatKrazy Super Concert returns, but do we trust it?ZEROBASEONE performing at Grammy Museum July 25thHYBE Civil War continues: Source Music sues MHJAESPA fans asking for refund for their barricade seatsNMIXX HAEWON sniffs (G)I-DLE SHUHUA's feet?NMIXX at Hyde Park takes picture with big brother FELIXBTS JIN on Weverse Live: Raging and gaming once again!JIMIN & JUNGKOOK show "Are You Sure" to drop on Disney+ in AugustRyan Reynolds guest appears in SKZ MV teaserBANGCHAN never ending thirst trapping delulu with STAYFELIX appears on Jewelry Box (Korean variety show with gay hosts that only allow attractive male idols on their show)FELIX goes through it on this show hahaSupport this podcast at — https://redcircle.com/permission-to-stan-podcast-kpop-multistans-andamp-weebs/donationsAdvertising Inquiries: https://redcircle.com/brandsPrivacy & Opt-Out: https://redcircle.com/privacy

Syntax - Tasty Web Development Treats
794: Making Code Prettier with Vjeux

Syntax - Tasty Web Development Treats

Play Episode Listen Later Jul 12, 2024 55:27


Scott and Wes sit down with Vjeux from Meta to dive deep into the origins and evolution of Prettier, the widely-used code formatter. They discuss the challenges faced, the decision-making process behind its features, and what the future holds for this indispensable tool in the developer's toolkit. Show Notes 00:00 Welcome to Syntax! 01:45 Brought to you by Sentry.io. 02:19 New swag! 03:25 Who is Vjeux? 06:56 Is management the key to successful projects? 08:50 The genesis of Prettier. 12:08 Why other JS formatters didn't work. 16:56 Focusing on edge-cases. 17:41 The goal for Prettier. Prettier Philosophy. 18:31 Next step, integrations. 19:37 Should you run Prettier on save or commit? 21:34 Does Prettier's limitations lead to higher adoption? Prettier Config. 25:01 What was the most controversial default setting? 28:14 Does Facebook use semicolons? 29:18 Getting approval to devote 6 months to Prettier. 31:42 Working with Mark Zuckerberg. 32:43 Was there ever consideration to augment ESLint instead? Prettier vs. Linters. 35:34 What are your thoughts on the Rust-based alternatives? 36:44 Prettier's $10,000 bounty. 39:32 What is the future of Prettier? 44:54 Prettier is available in almost every language. 47:59 Advice for other open-source maintainers. 53:26 Sick Picks & Shameless Plugs. Sick Picks Vjeux: TransformersJS. Shameless Plugs Vjeux: Prettier x Syntax Swag. Hit us up on Socials! Syntax: X Instagram Tiktok LinkedIn Threads Wes: X Instagram Tiktok LinkedIn Threads Scott: X Instagram Tiktok LinkedIn Threads Randy: X Instagram YouTube Threads

RYSE WITH RYAN
You're Prettier Than You Think! | Ep. 1335

RYSE WITH RYAN

Play Episode Listen Later Jul 11, 2024 1:39


In this episode, "You're Prettier Than You Think," we explore the impact of negative self-beliefs and underestimating our worth. Tune in as we challenge self-doubt and encourage a powerful shift in self-perception. You're prettier—and more valuable—than you think!

WPOR 101.9
JON OR JOE: WHO'S A PRETTIER WOMAN?

WPOR 101.9

Play Episode Listen Later Jul 11, 2024 5:03


JON OR JOE: WHO'S A PRETTIER WOMAN? by 101.9POR

Vibes N Delites
Vibes N Delites: Recorded N Replayed

Vibes N Delites

Play Episode Listen Later Jul 7, 2024 71:43


Hey Friends! Can you believe this is episode 49?? When did that happen? lol Every time I go looking for this one story, I find a wild one in it's place lol is this VnD lore?? Is that story the official muse of VnD??? Whatever it is, I hope it brings me more good luck in the future. Please join the Discord: https://discord.gg/Ts8n5WhE3d There's good people shaped vibes, as well as details about the families in need, and the even coming soon on 7/27 here in Dallas, Tx. (Grand Prairie for the locals! Save the date! Come visit meeee!!) 8:23 My Little Brother(3m) is Actually My Fiance's Kid 28:46 I Recorded My Wife Cheating and I Can't Stop Watching It 38:27 I(31f) am Struggling to Rebuild my Self-Worth After My Ex Left Me for a Woman Who Seems to be a Younger, Smarter, Prettier, and Better Version of Myself https://linktr.ee/frinthehuman

ShopTalk » Podcast Feed
621: Setting Up Prettier and Linting, Comparing Colors, and Accessibility Overlays

ShopTalk » Podcast Feed

Play Episode Listen Later Jun 24, 2024 50:14


Show DescriptionWe've got follow up on Cloudflare and Cara from last episode, a question about setting up Prettier and auto linting, a cool tool from a listener on comparing colors, a question about using tooling like Craft or more user friendly apps like Webflow when working with clients, and our takes on accessibility overlays. Listen on Website →Links Cloud Application Hosting for Developers | Render Prettier · Opinionated Code Formatter Biome, toolchain of the web Vetur Compare colors Craft CMS Webflow: Create a custom website | Visual website builder Accessibility Overlay Decision Sponsors

Syntax - Tasty Web Development Treats
764: Biome JS with Emanuele Stoppa

Syntax - Tasty Web Development Treats

Play Episode Listen Later May 3, 2024 51:43


Join Scott and Wes as they delve into the fascinating realm of Biome.JS alongside Emanuele Stoppa, the mastermind behind it all. Why is it written in Rust? Why are other tools so slow? Could Biome be the ultimate successor to ESLint or Prettier? Grab a seat at the table and find out! Show Notes 00:00 Welcome to Syntax! 00:10 Brought to you by Sentry.io. 01:49 Who is Emanuele Stoppa and what is Biome? 03:18 What happened to Rome? 05:49 Who's paying for Biome to be developed? 07:28 How many people are working on Biome? 09:24 Why do we even need Biome? 11:38 Why are other tools so slow? 12:55 Cost of compute. 14:01 The cache management. 14:30 Why was the decision made to move to Rust? 16:35 The bigger the company, the pricier the compute. 19:49 How to get started with Biome. 23:08 Will Biome offer more features than Prettier? 24:12 Language support. 26:02 A language parser for every language? 27:45 Will plugins need to be written in Rust? GritQL GitHub. 31:25 Ezno, TypeScript Compiler. 33:13 Will we ever see a new TypeScript type-checker? 35:38 What are your thoughts on the types proposal? Proposal Type Annotations. 38:03 What does your average day look like? 41:10 What is your role at Astro? 41:46 What other languages do you know? 43:22 Biome VCS. 45:14 GitHub action setup. 47:04 Supper Club Questions. 47:09 What text editor, theme and font are you using? 48:26 What do you do to stay up to date? 48:54 Sick Picks & Shameless Plugs. Sick Picks Emanuele: Ripley IMDB, Netflix. Shameless Plugs Emanuele: Astro, BiomeJS. Hit us up on Socials! Syntax: X Instagram Tiktok LinkedIn Threads Wes: X Instagram Tiktok LinkedIn Threads Scott:X Instagram Tiktok LinkedIn Threads Randy: X Instagram YouTube Threads

Gargano & Myrtetus Middays - 97.5 The Fanatic
Encouraged by Gritty Win, or Discouraged it wasn't Prettier?

Gargano & Myrtetus Middays - 97.5 The Fanatic

Play Episode Listen Later Apr 18, 2024 162:46


(00:00-19:16) Bob Cooney gives his reaction to the Sixers win over the Miami Heat. Should fans be encouraged that the Sixers toughed it out, or discouraged at how close they made it? (19:30-32:41) Now that we know the Sixers' 1st round matchup, Bob gives his opinion on how the Knicks differ from the Heat, and Bill has something to say about fans booing at halftime last. (32:56-40:44) Tim Legler said the Knicks should be licking their chops to play the Sixers, Bill & callers react. (40:50-1:00:05) If you had to pick a coach to win 1 game, who would you choose? How much of an impact did Nick Nurse have on the win over the Heat? (1:00:20-1:14:10) Bob & Bill focus on the non Embiid/Batum players. They review the performance of Tobias Harris & Buddy Hield specifically. (1:14:16-1:23:34) A Knicks fan calls in, Bob highlights a glaring mismatch against the Knicks. The stats don't show it but Embiid made big plays when it mattered most. (1:23:41-1:42:09) The voice of the Sixers Tom McGinnis joins the midday show to react to the game against the Heat and look ahead to the upcoming series against the Knicks. McGinnis raves about Nico Batum, gives his take on Nick Nurse's playoff impact, and what he believes the status of Joel Embiid's health is. (1:42:23-1:52:24) Bob tries to figure out if Embiid's rotations are what fans should expect for the rest of the playoffs, or more indicative of him not being conditioned. (1:52:30-2:02:09) The team looks back at the Sixers/Knicks regular season matchups. With Embiid only playing in 1 of 4, how did the supporting cast fare? (2:02:15-2:24:35) Bob resets the show and goes back to Tim Legler calling the Sixers out. Role players stepping up is what the playoffs are all about! (2:24:51-2:36:51) The show feels like some players weren't ready for playoff basketball from the opening jump.   (2:36:57-2:42:39) A day dominated by the Sixers, Bill wants to touch on Castellanos' struggles and suggests a benching.

KickServeRadio.com, Tennis on air, with Andy Zodin
We're back in the top 10. YES!! "We" being us one-handers, that is. Couldn't be represented by a prettier version, or a better guy! Welcome back to where you belong, Grigor. A single-handed backhand and a single-digit ranking.

KickServeRadio.com, Tennis on air, with Andy Zodin

Play Episode Listen Later Apr 5, 2024 50:03


Also, new coach for Novak?? Mats has some thoughts on who and why. AND, who has more "in-game impact", singles coaches or doubles coaches? Learn more about your ad choices. Visit megaphone.fm/adchoices

Maintainable
Robbie Wagner - Whiskey, Front-End, and Whatnot

Maintainable

Play Episode Listen Later Mar 26, 2024 40:02


Starting off, Robbie Russell and Robbie Wagner bonding over the complexities of their names in the coffee queue.They dive into the essence of maintainable software, debating the importance of recent commits and the dangers of a single-contributor project.Tech debt, the ever-looming shadow over software development, gets a moment in the spotlight. They share a laugh over buying GitHub stars as a measure of project health.Wagner's approach to tackling tech debt without permission is both rebellious and pragmatic, advocating for quality and refactoring 'on-the-go'.The conversation shifts to the Scout rule in software maintenance, and how constant vigilance is key to overcoming tech debt fatigue.Discussions around Ember.js, its community, and the evolution of front-end development light up the conversation.The narrative takes a turn as they explore automating the mundane, with ESLint, Prettier, and CI tools like Dependabot starring as the unsung heroes in the quest for quality.They touch upon the challenges of maintaining a balance between new features and tech debt, with Wagner emphasizing the sneaky art of integrating tech debt fixes into regular work.Robbie Wagner shares his love for rye whiskey, introducing listeners to his favorite brands and distilleries.Wrapping up, they delve into the world of podcasts, discussing the uniqueness of "Whiskey, Web and Whatnot" and how it blends technical discussions with personal stories and whiskey.Helpful Links:Check out Whiskey, Web and Whatnot for more episodes and whiskey recommendations!Thanks to Our Sponsor!Turn hours of debugging into just minutes! AppSignal is a performance monitoring and error tracking tool designed for Ruby, Elixir, Python, Node.js, Javascript, and soon, other frameworks. It offers six powerful features with one simple interface, providing developers with real-time insights into the performance and health of web applications. Keep your coding cool and error-free, one line at a time! Check them out! Subscribe to Maintainable on:Apple PodcastsOvercastSpotifyOr search "Maintainable" wherever you stream your podcasts.Keep up to date with the Maintainable Podcast by joining the newsletter.

True Crime Cam
r/LetsNotMeet Stories...

True Crime Cam

Play Episode Listen Later Mar 13, 2024 42:50


Always check for hidden cameras!! Part 2 of Prettier here

Black Dads Club Podcast
Oh, That's Nasty Work | Ep 132 | Black Dads Club

Black Dads Club Podcast

Play Episode Listen Later Mar 12, 2024 56:46


Exclusively brought to you by: NoGrease Barbershop Charlotte Premium & Northlake The fellas found their way back to Studio to discuss one of Pastor Mike favorite ladies being pregnant! (02:30) Can you have lady friends Prettier than your Wife? - (09:28) Congrats to the USC Lady Gamecocks - (15:00) Draya secures another Bag with Jalen Green - (24:30) Church Announcements: Pastor says Men don't go to Church because of their wives - (30:15) The Black Experience debate in 2024? - (41:10) Jeanie Buss real touchy with Lebron James - (45:00) Tiki Barber vs Saquon Barkley was Nasty Work Subscribe to Our YouTube: ⁠⁠https://bit.ly/BDCYTSub ⁠ ⁠⁠⁠Submit to #ASKADAD: blackdadsclub@gmail.com Follow Us Today: ⁠Instagram ⁠- ⁠Twitter --- Support this podcast: https://podcasters.spotify.com/pod/show/blackdadsclub/support

The OVW Podcast
OVWP Interview 22 “Superior” Tony Evans: Bigger, Prettier, Superior

The OVW Podcast

Play Episode Listen Later Feb 29, 2024 16:24 Transcription Available


“Superior” Tony Evans just wants to be heard and understood; and if that means some folks have to “hush,” he's good with that too. We get a word in edgewise to talk about his life, career,  and everyone he has to leave speechless to achieve his dreams. OVW Podcast Interview 22 “Superior” Tony Evans: Bigger, Prettier, SuperiorThe OVW Podcast:The Unofficial OVW PodcastInterviews Series The OVW Podcast Broadcast Team: Brian Hines and Jackman OchsAudio Engineer/Editor: Malachi WoodardEditor-in-Chief/Executive Producer: "Tyni" Brian K WoodardSenior Producer for the BLMP: Victor AndersonFollow OVW Podcast on Facebook, Instagram, X, TicTok, YouTube and to get some hot apple cider!OVW Podcast Theme, "Devil Is Due" by Bill CoxStatistics and information thanks to https://www.cagematch.net/#netflixwrestlers

devtools.fm
Christopher "vjeux" Chedeau - Prettier, React Native

devtools.fm

Play Episode Listen Later Jan 29, 2024 76:10


This week we talk to a legend in the dev tools space, Christopher Chedeau. Christopher is a software engineer at Meta (formerly Facebook) and has worked on some of the most popular open source projects in the world. He is the creator of Prettier, a code formatter that has saved millions of developer hours. He is also the co-creator of React Native, a framework for building native apps with React. Christopher has also worked on many other projects such as Excalidraw, Yoga, and and many others. https://blog.vjeux.com https://github.com/vjeux https://twitter.com/Vjeux Episode sponsored By Raycast (https://www.raycast.com/) Become a paid subscriber our patreon, spotify, or apple podcasts for the full episode. https://www.patreon.com/devtoolsfm https://podcasters.spotify.com/pod/show/devtoolsfm/subscribe https://podcasts.apple.com/us/podcast/devtools-fm/id1566647758 https://www.youtube.com/@devtoolsfm/membership

Syntax - Tasty Web Development Treats
707: 2023 Predictions Results

Syntax - Tasty Web Development Treats

Play Episode Listen Later Dec 20, 2023 47:45 Very Popular


In this episode of Syntax, Wes and Scott review their 2023 predictions and see how they did on ideas like Deno getting hotter, new JS APIs, WASM, Houdini, CSS Container Queries, and more! Show Notes 00:24 Welcome 01:18 Syntax Brought to you by Sentry 02:05 SSR JS sites more the norm solidjs.com Remix - Build Better Websites Next.js by Vercel - The React Framework SvelteKit • Web development, streamlined Astro 04:14 TypeScript Inferred becomes hot 05:20 Types In JS? ECMAScript proposal for type syntax that is erased - Stage 1 07:55 Deno gets hotter 11:12 JS runtimes mature htmx 11:50 We will see a new TS Type Checker written in Rust 14:06 New JS APIs What's the status of this project? · Issue #1101 · dudykr/stc Wes Bos on X: "Pretty excited about the new JavaScript non-mutating array methods. Currently in stage 3 tc39/proposals: Tracking ECMAScript Proposals JS Fundamentals - Decorators - Syntax #653 16:29 Writing towards Winter CG Spec Popular. WinterCG 17:09 Edge Rendering More Common Prettier on X: "We setup a $20k bounty for a rust-based compatible printer with prettier. $20k Bounty was Claimed! · Prettier 18:09 A new JS framework 19:05 Page Transitions API 19:51 Rust becomes more popular 24:00 More WASM Supper Club × WASM, Fastly Edge, and Polyfill.io with Jake Champion - Syntax #643 FFmpeg Fastly 25:11 React Beta Docs launch after 5 year dev cycle 26:47 We start to see CSS Container Queries in production 29:05 CanIUse issues? 31:20 CSS Subgrid 32:56 More AI 34:06 Tooling Vite | Next Generation Frontend Tooling Announcing Biome | Biome Lightning CSS Rspack Turbopack 36:08 People sour on React 36:47 People sour on eslint 37:16 Houdini does nothing CSS Houdini| MDN Is Houdini Ready Yet? 39:57 How'd we do? 40:40 Sick picks Sick Picks Scott: Super Mario Bros.™ Wonder Wes: Tineco Pure ONE S11 Cordless Vacuum Cleaner Shameless Plugs Scott: Sentry Wes: Wes Bos Courses Hit us up on Socials! Syntax: X Instagram Tiktok LinkedIn Threads Wes: X Instagram Tiktok LinkedIn Threads Scott: X Instagram Tiktok LinkedIn Threads

The Geek Cave Podcast
Geek Cave Podcast 158.2 | GAMING |(Gravity) Tricksters, skatboarding cavemen, and prettier Las Plagas

The Geek Cave Podcast

Play Episode Listen Later Dec 6, 2023 35:30


This month, Darrin reviews Resident Evil 4 (remake) and Adventure Island 3, Justin enjoys The Last Campfire yet hates Death or Treat, and Chad discovers a puzzle platformer that could be harder than Dark Souls.   Download and listen today on Apple Podcasts, Spotify, iHeart, Amazon, Stitcher, Goodpods, and more of your favorite podcast services!   Sponsored by Shirtasaurus and Gamefly.

Front-End Fire
Vercel's AI building UIs, Nested CSS without Sass, and the Annual State of JS Survey is Live

Front-End Fire

Play Episode Listen Later Dec 4, 2023 29:46


News:Paige - CSS nesting is supported by all major browsersJack - Streaming components from server actions using the Vercel AI SDK libraryTJ - State of JavaScript 2023 surveyBonus News:The OpenAI debacle (aka Sam Altman's ousting on Friday and rehiring by Microsoft on Sunday then reinstating at OpenAI by Tuesday)Update on the Prettier & Rust sagaWhat Makes Us Happy this Week:Paige - Great British Baking Show seriesJack - Godzilla Minus One movieTJ - Wordle board gameJoin Us:Blue Collar Coder on YouTubeBlue Collar Coder on DiscordReach out via emailTweet at us on X @front_end_fire

Not Sisters
Does being grateful make you prettier?

Not Sisters

Play Episode Listen Later Nov 20, 2023 48:11


This week Emily & Taylor are talking about the reason for the season - gratitude! And also, why everyone needs a younger friend to keep them hip. Let us know what you're grateful for this week

Front-End Fire
Copilot comes to github.com, Blazing-er Faster Next.js, and a Bounty for Code Formatter Prettier

Front-End Fire

Play Episode Listen Later Nov 20, 2023 40:00


News:Paige - GitHub's bringing Copilot Chat to github.comJack - Next.js Partial Prerendering featureTJ - The $20k bounty for Prettier to be written in Rust What Makes Us Happy this Week:Paige - Blue Eye Samurai on NetflixJack - HikingTJ - iPhone 15 usb c power portJoin Us:Blue Collar Coder on YouTubeBlue Collar Coder on DiscordReach out via emailTweet at us on X @front_end_fire

Magpie Podcast Network
The M25 Show Episode #387: Prettier In Whittier

Magpie Podcast Network

Play Episode Listen Later Nov 16, 2023 125:08


Alberto is correct that Motel 6 once charged six dollars a night. Steve is upset there are cars on the street at all hours. Eddie might be the source of Steve's internet problems. Elissa is off. Plus we talk with musician Jay Rin. Want to see this episode? Watch it on YouTube by following this link: https://youtube.com/TheM25Show Visit www.TheM25Show.com and hit the Show Us Love link #PodcastingSomethingMore Natural Wunderz: At Natural Wunderz they create high performance health and wellness products that spring naturally from the seven natural wonders of the world. Be as clean and beautiful as nature intended you to be. You are the Natural Wunder. Visit https://naturalwunderz.com/ and enter the code TheM25Show to get 25% off you order. Michael Seril Fitness: Founded in 2005, MSF has motivated and inspired thousands of clients in Whittier, California over the last 15+ years. They are also a leader in Pay It Forward events that have benefited thousands of families in their community. Visit https://msf-strong.com/ for more information. Tacos Che & More: Be sure to book Tacos Che & More for all your catering needs. What makes them different from most taco catering businesses is that they cook up, at your request, a variety of different types of meals and of course tacos. Call and ask if they are able to prepare the meal of your choice. (951) 442-4587 or visit them on Facebook https://www.facebook.com/tacosche05

The Nice Guys on Business
1448 S&E: Doug's Replacement is Much Prettier Than Him

The Nice Guys on Business

Play Episode Listen Later Nov 10, 2023 61:38


Well Doug's off at Jellystone Park or somewhere talking to Yogi and Boo Boo so Strick recruited Emily to join today. And they STILL talked for an hour? Damn, they've really raised the bar, show some love and call 4242-DJ DOUG and let Emily know what you thought of her. Leave a voicemail for the Nice Guys: 424-2DJ-DOUG - (424) 235-3684Need help podcasting? www.TurnkeyPodcast.comJoin our Nice Guys Community. www.NiceShortCut.com No time to get to this, but you can read the blog here: 12 worries that every entrepreneur has Audio production by Turnkey Podcast Productions. You're the expert. Your podcast will prove it.

The Empowered Wife Podcast
207: My Husband is in Love With Someone Else

The Empowered Wife Podcast

Play Episode Listen Later Nov 7, 2023 58:40


What could be worse than knowing that your husband loves someone else when he should be devoted to you and only you? This should not be happening. It's so wrong! And a terrible rejection to know he finds someone else so alluring that he's willing to put everything he has with you at risk. I mean, is she younger than you? Prettier? What is it about her that's worth making a fuss about? He is your husband and this is not part of the agreement you made. It's so hurtful and disappointing when the time, attention and affection he's giving her is taking away from what he should be giving you. On today's episode of The Empowered Wife Podcast, we're talking about what to do when your husband is in love with someone else. Plus, my guest Cindy's husband was having an affair for three years, which she never thought would happen to her! Saving her marriage seemed completely hopeless because he wouldn't end it. Then she started experimenting with the Intimacy Skills, and today she has the marriage she always wanted. She's going to tell us what she did so you can do it too.

Affiliate BI
Conversion Rate Optimization in Affiliate Marketing with Oliver Kenyon

Affiliate BI

Play Episode Listen Later Oct 25, 2023 36:11


In this episode, Oliver Kenyon discusses CRO and how it relates to affiliate marketing and how he believes most of the world is missing out on a great opportunity to double their business. At the heart of CRO is data analysis and AB testing with the occasional heat map too. Time stamp 0:00 - Intro 1:05 - How Oliver stumbles into CRO 6:45 - First steps in CRO 11:24 - What do you need to do a good A/B Split Test 16:19 - How many affiliates actually do CRO 17:36 - SEO vs CRO 21:14 - Oliver's take on affiliate marketing 21:57 - Does CRO and its relation with SEO? 24:00 - What the future looks like?: AI, communities and the importance of connection 26:08 - Heatmaps, CRO and automatization 28:56 - Could Oliver do without tools? The importance of knowledge, experience and context 32:00 - Prettier is not always better 33:42 - Last question: what do you see as the future of affiliate marketing as it intersects with business intelligence 35:17 - Final words and contact info

Coffee and Open Source
Josh Goldberg

Coffee and Open Source

Play Episode Listen Later Sep 19, 2023 64:37


Josh Goldberg is an independent full time open source developer. He works on projects in the TypeScript ecosystem, most notably typescript-eslint: the tooling that enables ESLint and Prettier to run on TypeScript code. Josh is also the author of the O'Reilly Learning TypeScript book, a Microsoft MVP for developer technologies, and an active conference speaker. His personal projects range from static analysis to meta-languages to recreating retro games in the browser. Also cats. You can find Josh Goldberg on the following sites: Twitter Blog Here are some links provided by Josh Goldberg: Josh's Book PLEASE SUBSCRIBE TO THE PODCAST Spotify: ⁠http://isaacl.dev/podcast-spotify⁠ Apple Podcasts: ⁠http://isaacl.dev/podcast-apple⁠ Google Podcasts: ⁠http://isaacl.dev/podcast-google⁠ RSS: ⁠http://isaacl.dev/podcast-rss⁠ You can check out more episodes of Coffee and Open Source on ⁠https://www.coffeeandopensource.com⁠ Coffee and Open Source is hosted by Isaac Levin (⁠https://twitter.com/isaacrlevin⁠) --- Support this podcast: https://podcasters.spotify.com/pod/show/coffeandopensource/support

Lost Genre Reddit Stories
Future Husband Said He THinks His Ex-Wife Is Prettier Than Me - Reddit Stories

Lost Genre Reddit Stories

Play Episode Listen Later Aug 30, 2023 20:14


Reddit Stories | OP (F29) has been in a healthy, happy relationship with her boyfriend (M34) for a year and a half. They've overcome initial emotional differences and communicate openly. Although they've discussed marriage positively and aligned on major life goals, her boyfriend can be stubborn and needs to reach decisions independently. OP seeks advice on gently encouraging him towards proposing sooner, without manipulation or pressure. She's planning a special vacation for their upcoming two-year anniversary, hoping for a proposal but doesn't expect it. Seeking insight, especially from men, on nurturing the idea without rushing or causing resistance.

Documentary on One - RTÉ Documentaries
What If She's Prettier Than Me?

Documentary on One - RTÉ Documentaries

Play Episode Listen Later Aug 25, 2023 43:29


Would you bring a third person into your relationship? Polyamorists do. They say having other romances actually strengthens their main relationship. But there are risks…and jealousies. And, practicalities: How to schedule your dates? Who minds the kids? (2023) Credits: Produced by Mary-Elaine Tynan and Ronan Kelly. Hosted on Acast. See acast.com/privacy for more information.

Craving Food Freedom
Feeling like people are better than you, kinder, smarter, prettier...

Craving Food Freedom

Play Episode Listen Later Aug 8, 2023 44:04


Shame causes us to feel less than, different, not good enough. It causes us to feel one degree of separation from the person we think is better than us in some way (success, money, intelligence, appearance, etc.  "I am lesser than the other person or other people, and I am on the outside looking in." - Joanne Kim  Today I have on Joanne Kim, a therapist-turned Feelings Translator who helps Highly Sensitive Persons turn their BIGGEST feelings into their GREATEST superpower!   The people who work with her are often the first (or only) person in their family or communities to intuitively process and express feelings; consequently, they are often judged or criticized so that they learn to people-please, placate, or perform until they hit a wall.   When Joanne shares about her approach to working with feelings, the #1 response she gets is,    "Why didn't they teach me this in school?!?"    Grab the free guide "The BIG Feeler First Aid Kit" to learn how to navigate your feelings when they show up when you least expect (or want) them!    www.IntelligentEmotions.com/FirstAidKit   You can find Joanne on Instagram:   www.instagram.com/intelligentemotions   LINKS AND RESOURCES Take the Quiz – Is Intuitive Eating Right for YOU? (after years of dieting and bingeing) Request an Appointment – 1:1 private coaching with Elise Let's be friends on IG! @craving.food.freedom.com WHAT DID YOU THINK? If you liked this episode, please take a moment to SUBSCRIBE, RATE & REVIEW, would love to hear from you! You'll be helping me reach more people just like you.

The Virtual Coffee Podcast
Josh Goldberg - The Life of a Full Time Open Source Developer

The Virtual Coffee Podcast

Play Episode Listen Later Jul 19, 2023 51:33 Transcription Available


Sponsor: LevelUP Financial PlanningWe're grateful to be sponsored by LevelUP Financial planning, who understands the importance of finding balance between having an awesome life today, and being confident and excited about your future possibilities. If you want to take your financial confidence to the next level, check out levelupfinancialplanning.com.Join Bekah and Dan in this week's episode,  where they talk with Josh Goldberg,  an independent full time open source developer working on projects in the TypeScript ecosystem, where he shares valuable tips and insights on how you can get started with contributing to open source, whether you're a seasoned developer or just dipping your toes into OSS.  Josh also shares the story of his prolific speaking journey over the last couple of years and how staying involved in the tech community has been a rewarding experience.Links:typescript-eslinttypescript-eslint GitHubCode AcademyMicrosoft Sway Josh's Blog posts about applying to conferences:How I Apply to ConferencesHow I Apply to Conferences: FAQsJosh's Book: Learning TypescriptAbout Josh:Hi, I'm Josh! I'm an independent full time open source developer. I work on projects in the TypeScript ecosystem, most notably typescript-eslint: the tooling that enables ESLint and Prettier to run on TypeScript code. I'm also the author of the O'Reilly Learning TypeScript book, a Microsoft MVP for developer technologies, and an active conference speaker. @JoshuaKGoldberg on Twitter@JoshuaKGoldberg on GitHub@JoshuaKGoldberg@fosstodon.org on mastodonSponsor Virtual Coffee! Your support is incredibly valuable to us. Direct financial support will help us to continue serving the Virtual Coffee community. Please visit our sponsorship page on GitHub for more information - you can even sponsor an episode of the podcast! Virtual Coffee: Virtual Coffee: virtualcoffee.io Podcast Contact: podcast@virtualcoffee.io Bekah: dev.to/bekahhw, Twitter: https://twitter.com/bekahhw, Instagram: bekahhw Dan: dtott.com, Twitter: @danieltott

How About Tomorrow?
Not Talking About React Drama, Dinosaurs, and Devrel

How About Tomorrow?

Play Episode Listen Later Jul 6, 2023 43:47


Adam and Dax are definitely not going to talk about React drama or devrel. Instead, they're sticking to questions about dinosaurs and interest rates and how they impact the economy. (The interest rates. Not so much the dinosaurs.)Want to carry on the conversation? Join us in Discord.Links:OBSRiversidePing.ggPrettierAstroVHTMLFly.io raises moneyPrehistoric Planet on Apple TVDinosaurs reimaginedStripeTopics discussed: (00:00) - I'm kind of a big deal around here (00:32) - Ping and Twitch (01:29) - Prettier and Astro (06:52) - Why Dax is bored of the React drama (10:16) - Adam's choose your own adventure topics (11:56) - Is Tech Twitter in a slump? (13:32) - Did they run out of things to build and moved to the server? (15:08) - What is HTMX? (16:56) - Fly's fly fundraising announcement (20:16) - Dinosaurs (29:41) - Fake Startup Simulator (31:36) - Do we talk about things outside of tech? (35:14) - The impact of fiscal policy is yet to be felt (40:10) - Stripe made good docs, and made a bazillion dollars

Software Unscripted
My Contribution to the Left-Pad Incident with Simon Lydell

Software Unscripted

Play Episode Listen Later Jun 27, 2023 57:23


Richard talks with Simon Lydell, a programmer whose open-source JavaScript work ended up contributing to what might be the most infamous package-related outage in programming history. In addition to talking about that story, they also talk about open source in general, breaking changes in general, and specific projects like CoffeeScript, Prettier, Elm, and Roc.

Crime Stories with Nancy Grace
Natalee Holloway Suspect Dumps Wife for 'Younger, Prettier' Woman

Crime Stories with Nancy Grace

Play Episode Listen Later May 18, 2023 8:14


Nancy Grace is joined by longtime friend and Cold Case Investigative Research Institute Founder, Sheryl McCollum to discuss Jordan van der Sloot's divorce news from wife and mother to his child, Leidy Figueroa. Van der Sloot apparently wants to be with a new girlfriend, who's been helping him smuggle drugs into prison. Join us for Nancy and Sheryl's reactions.See omnystudio.com/listener for privacy information.

RadioActive
'I wanted to make them prettier': one artist's yarn lends color to south King County

RadioActive

Play Episode Listen Later Mar 23, 2023 2:23


In a world of concrete and chain link that's overwhelmingly gray, the urge to beautify our communities isn't an uncommon one. But it takes a special kind of person to take the leap of actually doing something about it.RadioActive's Gideon Hall spoke to Christy Caravaglio, who, for the last four years, has been adding brilliant color to her local urban landscape.Episode webpage: RadioActive Youth Media is KUOW's radio journalism and audio storytelling program for young people. This story was entirely youth-produced, from the writing to the audio editing.

New Books Network
"Prettier Than They Used to Be”: Femininity, Fashion, and the Recasting of Radcliffe's Reputation, 1900-1950

New Books Network

Play Episode Listen Later Mar 12, 2023 27:44


Mary Kelley, member of the NEQ editorial board, interviews Deirdre Clemente about her article "'Prettier Than They Used to Be': Femininity, Fashion, and the Recasting of Radcliffe's Reputation, 1900-1950" which appears in the December 2009 issue of The New England Quarterly. The conversation was recorded on December 21, 2009. Learn more about your ad choices. Visit megaphone.fm/adchoices Support our show by becoming a premium member! https://newbooksnetwork.supportingcast.fm/new-books-network

New Books in History
"Prettier Than They Used to Be”: Femininity, Fashion, and the Recasting of Radcliffe's Reputation, 1900-1950

New Books in History

Play Episode Listen Later Mar 12, 2023 27:44


Mary Kelley, member of the NEQ editorial board, interviews Deirdre Clemente about her article "'Prettier Than They Used to Be': Femininity, Fashion, and the Recasting of Radcliffe's Reputation, 1900-1950" which appears in the December 2009 issue of The New England Quarterly. The conversation was recorded on December 21, 2009. Learn more about your ad choices. Visit megaphone.fm/adchoices Support our show by becoming a premium member! https://newbooksnetwork.supportingcast.fm/history

The Bike Shed
359: Serializers

The Bike Shed

Play Episode Listen Later Oct 25, 2022 44:10


Chris Toomey is back! (For an episode.) He talks about what he's been up to since handing off the reins to Joël. He's been playing around with something at Sagewell that he enjoys. At the core of it? Serializers. Primalize gem (https://github.com/jgaskins/primalize) Derek's talk on code review (https://www.youtube.com/watch?v=PJjmw9TRB7s) Inertia.js (https://inertiajs.com/) Phantom types (https://thoughtbot.com/blog/modeling-currency-in-elm-using-phantom-types) io-ts (https://gcanti.github.io/io-ts/) dry-rb (https://dry-rb.org/) parse don't validate (https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/) value objects (http://wiki.c2.com/?ValueObject) broader perspective on parsing (https://thoughtbot.com/blog/a-broader-take-on-parsing) Enumerable#tally (https://medium.com/@baweaver/ruby-2-7-enumerable-tally-a706a5fb11ea) RubyConf mini (https://www.rubyconfmini.com/) where.missing (https://boringrails.com/tips/activerecord-where-missing-associations) Transcript: JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. And today, I'm joined by a very special guest, former host Chris Toomey. CHRIS: Hi, Joël. Thanks for having me. JOËL: And together, we're here to share a little bit of what we've learned along the way. So, Chris, what's new in your world? CHRIS: Being on this podcast is new in my world, or everything old is new again, or something along those lines. But, yeah, thank you so much for having me back. It's a pleasure. Although it's very odd, it feels somehow so different and yet very familiar. But yeah, more generally, what's new in my world? I think this was probably in development as I was winding down my time as a host here on The Bike Shed, but I don't know that I ever got a chance to talk about it. There has been a fun sort of deep-in-the-weeds technical thing that we've been playing around with at Sagewell that I've really enjoyed. So at the core of it, we have serializers. So we take some data structures in our Ruby on Rails code base, and we need to serialize them to JSON to send them to the front end. In our case, we're using Inertia, so it's not quite a JSON API, but it's fine to think about it in that way for the context of this discussion. And what we were finding is our front end has TypeScript. So we're writing Svelte, which is using TypeScript. And so we're stating or asserting that the types like, hey, we're going to get this data in from the back end, and it's going to have this shape to it. And we found that it was really hard to keep those in sync to keep, like, what does the user mean on the front end? What's the data that we're going to get? It's going to have a full name, which is a string, except sometimes that might be null. So how do we make sure that those are keeping up to date? And then we had a growing number of serializers on the back end and determining which serializer we were actually using, and it was just...it was a mess, to put it lightly. And so we had explored a couple of different options around it, and eventually, we found a library called Primalize. So Primalize is a Ruby library. It is for writing JSON serializers. But what's really interesting about it is it has a typing layer. It's like a type system sort of thing at play. So when you define a serializer in Primalize, instead of just saying, here are the fields; there is an ID, a name, et cetera, you say, there is an ID, and it is a string. There is a name, and it is a string, or an optional string, which is the even more interesting bit. You can say array. You can say object. You can say an enum of a couple of different values. And so we looked at that, and we said, ooh, this is very interesting. Astute listeners will know that this is probably useless in a Ruby system, which doesn't have types or a compilation step or anything like that. But what's really cool about this is when you use a Primalize serializer, as you're serializing an object, if there is ever a type mismatch, so the observed type at runtime and the authored type if those ever mismatch, then you can have some sort of notification happen. So in our case, we configured it to send a warning to Sentry to say, "Hey, you said the types were this, but we're actually seeing this other thing." Most often, it will be like an Optional, a null sneaking through, a nil sneaking through on the Ruby side. But what was really interesting is as we were squinting at this, we're like, huh, so now we're going to write all this type information. What if we could somehow get that type information down to the front end? So I had a long weekend, one weekend, and I went away, and I wrote a bunch of code that took all of those serializers, ran through them, and generated the associated TypeScript interfaces. And so now we have a build step that will essentially run that and assert that we're getting the same thing in CI as we have committed to the codebase. But now we have the generated serializer types on the front end that match to the used serializer on the back end, as well as the observed run-time types. So it's a combination of a true compilation step type system on the front end and a run-time type system on the back end, which has been very, very interesting. JOËL: I have a lot of thoughts here. CHRIS: I figured you would. [laughs] JOËL: But the first thing that came to mind is, as a consultant, there's a scenario with especially smaller startups that generally concerns me, and that is the CTO goes away for a weekend and writes a lot of code... CHRIS: [laughs] JOËL: And brings in a new system on Monday, which is exactly what you're describing here. How do you feel about the fact that you've done that? CHRIS: I wasn't ready to go this deep this early on in this episode. JOËL: [laughs] CHRIS: But honestly, that is a fantastic question. It's a thing that I have been truly not struggling with but really thinking about. We're going to go on a slight aside here, but I am finding it really difficult to engage with the actual day-to-day coding work that we're doing and to still stay close to the codebase and not be in the way. There's a pattern that I've seen happen a number of times now where I pick up a piece of work that is, you know, one of the tickets at the top of the backlog. I start to work on it. I get pulled into a meeting, then another meeting, then three more meetings. And suddenly, it's three days later. I haven't completed this piece of work that was defined to be the next most important piece of work. And suddenly, I'm blocking the team. JOËL: Hmmm. CHRIS: So I actually made a rule that I'm not allowed to own critical path work, which feels weird because it's like, I want to be engaged with that work. So the counterpoint to that is I'm now trying to schedule pairing sessions with each of the developers on the team once a week. And in that time, I can work on that sort of stuff with them, and they'll then own it and run with it. So it makes sure that I'm not blocking on those sorts of things, but I'm still connected to the core work that we're doing. But the other thing that you're describing of the CTO goes away for the weekend and then comes back with a new harebrained scheme; I'm very sensitive to that, having worked on; frankly, I think the same project. I can think of a project that you and I worked on where we experienced this. JOËL: I think we're thinking of the same project. CHRIS: So yes. Like, I'm scarred by that and, frankly, a handful of experiences of that nature. So we actually, I think, have a really healthy system in place at Sagewell for capturing, documenting, prioritizing this sort of other work, this developer-centric work. So this is the feature and bug work that gets prioritized and one list over here that is owned by our product manager. Separately, the dev team gets to say, here are the pain points. Here's the stuff that keeps breaking. Here are the things that I wish was better. Here is the observability hard-to-understand bits. And so we have a couple of different systems at play and recurring meetings and sort of unique ceremonies around that, and so this work was very much a fallout of that. It was actually a recurring topic that we kept trying a couple of different stabs at, and we never quite landed it. And then I showed up this one Monday morning, and I was like, "I found a thing; what do we think?" And then, critically, from there, I made sure I paired with other folks on the team as we pushed on the implementation. And then, actually, I mentioned Primalize, the library that we're using. We have now since deprecated Primalize within the app because we kept just adding to it so much that eventually, we're like, at this point, should we own this stuff? So we ended up rewriting the core bits of Primalize to better fit our use cases. And now we've actually removed Primalize, wonderful library. I highly recommend it to anyone who has that particular use case but then the additional type generation for the front end. Plus, we have some custom types within our app, Money being the most interesting one. We decided to model Money as our first-class consideration rather than just letting JavaScript have the sole idea of a number. But yes, in a very long-winded way, yes, I'm very sensitive to the thing you described. And I hope, in this case, I did not fall prey to the CTO goes away for the weekend and made a thing. JOËL: I think what I'm hearing is the key difference here is that you got buy-in from the team around this idea before you went out and implemented it. So you're not off doing your own things disconnected from the team and then imposing it from on high. The team already agreed this is the thing we want to do, and then you just did it for them. CHRIS: Largely, yes. Although I will say there are times that each developer on the team, myself included, have sort of gone away, come back with something, and said, "Hey, here's a WIP PR exploring an area." And there was actually...I'm forgetting what the context was, but there was one that happened recently that I introduced. I was like; I had to do this. And the team talked me out of it, and I ended up closing that PR. Someone else actually made a different PR that was an alternative implementation. I was like, no, that's better; we should absolutely do that. And I think that's really healthy. That's a hard thing to maintain but making sure that everyone feels like they've got a strong voice and that we're considering all of the different ways in which we might consider the work. Most critically, you know, how does this impact users at the end of the day? That's always the primary consideration. How do we make sure we build a robust, maintainable, observable system, all those sorts of things? And primarily, this work should go in that other direction, but I also don't want to stifle that creative spark of I got this thing in my head, and I had to explore it. Like, we shouldn't then need to never mind, throw away the work, put it into a ticket. Like, for as long as we can, that more organic, intuitive process if we can retain that, I like that. Critically, with the ability for everyone to tell me, "No, this is a bad idea. Stop it. What are you doing?" And that has happened recently. I mean, they were kinder about it, but they did talk me out of a bad idea. So here we are. JOËL: So you showed up on Monday morning, not with telling everyone, "Hey, I merged this thing over the weekend." You're showing up with a work-in-progress PR. CHRIS: Yes, definitely. I mean, everything goes through a PR, and everything has discussion and conversation around it. That's a strong, strong like Derek Prior's wonderful talk Building a Culture of Code Review. I forget the exact name of it. But it's one of my favorite talks in talking about the utility of code review as a way to share ideas and all of those wonderful things. So everything goes through code review, and particularly anything that is of that more exploratory architectural space. Often we'll say any one review from anyone on the team is sufficient to merge most things but something like that, I would want to say, "Hey, can everybody take a look at this? And if anyone has any reservations, then let's talk about it more." But if I or anyone else on the team for this sort of work gets everybody approving it, then cool, we're good to go. But yeah, code review critical, critical part of the process. JOËL: I'm curious about Primalize, the gem that you mentioned. It sounds like it's some kind of validation layer between some Ruby data structure and your serializers. CHRIS: It is the serializer, but in the process of serializing, it does run-time type validation, essentially. So as it's accessing, you know, you say first name. You have a user object. You pass it in, and you say, "Serializer, there's a first name, and it's a string." It will call the first name method on that user object. And then, it will check that it has the expected type, and if it doesn't, then, in our case, it sends to Sentry. We have configured it...it's actually interesting. In development and test mode, it will raise for a type mismatch, and in production mode, it will alert Sentry so you can configure that differently. But that ends up being really nice because these type mismatches end up being very loud early on. And it's surprisingly easy to maintain and ends up telling us a lot of truths about our system because, really, what we're doing is connecting data from many different systems and flowing it in and out. And all of the inputs and outputs from our system feel very meaningful to lock down in this way. But yeah, it's been an adventure. JOËL: It seems to me there could almost be two sets of types here, the inputs coming into Primalize from your Ruby data structures and then the outputs that are the actual serialized values. And so you might expect, let's say, an integer on the Ruby side, but maybe at the serialization level, you're serializing it to a string. Do you have that sort of conversion step as part of your serializers sometimes, or is the idea that everything's already the right type on the Ruby side, and then we just, like, to JSON it at the end? CHRIS: Yep. Primalize, I think, probably works a little closer to what you're describing. They have the idea of coercions. So within Primalize, there is the concept of a timestamp; that is one of the types that is available. But a timestamp is sort of the union of a date, a time, or I think they might let through a string; I'm not sure if there is as well. But frankly, for us, that was more ambiguity than we wanted or more blurring across the lines. And in the implementation that we've now built, date and time are distinct. And critically, a string is not a valid date or time; it is a string, that's another thing. And so there's a bunch of plumbing within the way you define the serializers. There are override methods so that you can locally within the serializer say, like, oh, we need to coerce from the shape of data into this other shape of data, even little like in-line proc, so we can do it quickly. But the idea is that the data, once it has been passed to the serializer, should be up the right shape. And so when we get to the type assertion part of the library, we expect that things are in the asserted type and will warn if not. We get surprisingly few warnings, which is interesting now. This whole process has made us pay a little more intention, and it's been less arduous simultaneously than I would have expected because like this is kind of a lot of work that I'm describing. And yet it ends up being very natural when you're the developer in context, like, oh, I've been reading these docs for days. I know the shape of this JSON that I'm working with inside and out, and now I'll just write it down in the serializer. It's very easy to do in that moment, and then it captures it and enforces it in such a useful way. As an aside, as I've been looking at this, I'm like, this is just GraphQL, but inside out, I'm pretty sure. But that is a choice that we have made. We didn't want to adopt the whole GraphQL thing. But just for anyone out there who is listening and is thinking, isn't this just GraphQL but inside out? Kind of. Yes. JOËL: I think my favorite part of GraphQL is the schema, which is not really the selling point for GraphQL, you know, like the idea that you can traverse the graph and get any subset of data that you want and all that. I think I would be more than happy with a REST API that has some kind of schema built around it. And someone told me that maybe what I really just want is SOAP, and I don't know how to feel about that comment. CHRIS: You just got to have some XML, and some WSDLs, and other fun things. I've heard people say good things about SOAP. SOAP seems like a fine idea. If anything, I think a critical part of this is we don't have a JSON API. We have a very tightly coupled front end and back end, and a singular front end, frankly. And so that I think naturally...that makes the thing that I'm describing here a much more comfortable fit. If we had multiple different downstream clients that we're trying to consume from the same back end, then I think a GraphQL API or some other structured JSON schema, whatever it is type of API, and associated documentation and typing layer would be probably a better fit. But as I've said many a time on this here, Bike Shed, Inertia is one of my favorite libraries or frameworks (They're probably more of a framework.) one of my favorite technological approaches that I have ever found. And particularly in buildings Sagewell, it has allowed us to move so rapidly the idea that changes are, you know, one fell swoop changes everything within the codebase. We don't have to think about syncing deploys for the back end and the front end and how to coordinate across them. Our app is so much easier to understand by virtue of that architecture that Inertia implies. JOËL: So, if I understand correctly, you don't serialize to JSON as part of the serializers. You're serializing directly to JavaScript. CHRIS: We do serialize to JSON. At the end of the day, Inertia takes care of this on both the Rails side and the client side. There is a JSON API. Like, if you look at the network inspector, you will see XHR requests happening. But critically, we're not doing that. We're not the ones in charge of it. We're not hitting a specific endpoint. It feels as an application coder much closer to a traditional Rails app. It just happens to be that we're writing our view layer. Instead of an ERB, we're writing them in Svelte files. But otherwise, it feels almost identical to a normal traditional Rails app with controllers and the normal routing and all that kind of stuff. JOËL: One thing that's really interesting about JSON as an interchange format is that it is very restrictive. The primitives it has are even narrower than, say, the primitives that Ruby has. So you'd mentioned sending a date through. There is no JSON date. You have to serialize it to some other type, potentially an integer, potentially a string that has a format that the other side knows how it's going to interpret. And I feel like it's those sorts of richer types when we need to pass them through JSON that serialization and deserialization or parsing on the other end become really interesting. CHRIS: Yeah, I definitely agree with that. It was a struggling point for a while until we found this new approach that we're doing with the serializers in the type system. But so far, the only thing that we've done this with is Money. But on the front end, a while ago, we introduced a specific TypeScript type. So it's a phantom type, and I believe I'm getting this correct. It's a phantom type called Cents, C-E-N-T-S. So it represents...I'm going to say an integer. I know that JavaScript doesn't have integers, but logically, it represents an integer amount of cents. And critically, it is not a number, like, the lowercase number in the type system. We cannot add them together. We can't -- JOËL: I thought you were going to say, NaN. CHRIS: [laughs] It is not a number. I saw a n/a for not applicable somewhere in the application the other day. I was like, oh my God, we have a NaN? It happened? But it wasn't, it was just n/a, and I was fine. But yeah, so we have this idea of Cents within the application. We have a money input, which is a special input designed exactly for this. So to a user, it is formatted to look like you're entering dollars and cents. But under the hood, we are bidirectionally converting that to the integer amount of cents that we need. And we strictly, within the type system, those are cents. And you can't do math on Cents unless you use a special set of helper functions. You cannot generate Cents on the fly unless you use a special set of helper functions, the constructor functions. So we've been really restrictive about that, which was kind of annoying because a lot of the data coming from the server is just, you know, numbers. But now, with this type system that we've introduced on the Ruby side, we can assert and enforce that these are money.new on the Ruby side, so using the Money gem. And they come down to the front end as capital C Cents in the type system on the TypeScript side. So we're able to actually bind that together and then enforce proper usage sort of on both sides. The next step that we plan to do after that is dates and times. And those are actually almost weirder because they end up...we just have to sort of say what they are, and they will be ISO 8601 date and time strings, respectively. But we'll have functions that know this is a date string; that's a thing. It is, again, a phantom type implemented within our TypeScript type system. But we will have custom functions that deal with that and really constrain...lock ourselves down to only working with them correctly. And critically, saying that is the only date and time format that we work with; there is no other. We don't have arbitrary dates. Is this a JSON date or something else? I don't know; there are too many date syntaxes. JOËL: I like the idea of what you're doing in that it sounds like you're very much narrowing that sort of window of where in the stack the data exists in the sort of unstructured, free-floating primitives that could be misinterpreted. And so, at this point, it's almost narrowed to the point where it can't be touched by any user or developer-written code because you've pushed the boundaries on the Rails side down and then on the JavaScript side up to the point where the translation here you define translations on one side or, I guess, a parser on one side and a serializer on the other. And they guarantee that everything is good up until that point. CHRIS: Yep, with the added fun of the runtime reflection on the Ruby side. So it's an interesting thing. Like, TypeScript actually has similar things. You can say what the type is all day long, and your code will consistently conform to that asserted type. But at the end of the day, if your JSON API gets in some different data...unless you're using a library like io-ts, is one that I've looked at, which actually does parsing and returns a result object of did we parse to the thing that you wanted or did we get an error in that data structure? So we could get to that level on the client side as well. We haven't done that yet largely because we've essentially pushed that concern up to the Ruby layer. So where we're authoring the data, because we own that, we're going to do it at that level. There are a bunch of benefits of defining it there and then sort of reflecting it down. But yeah, TypeScript, you can absolutely lie to yourself, whereas Elm, a language that I know you love dearly, you cannot lie to yourself in Elm. You've got to tell the truth. It's the only option. You've got to prove it. Whereas in TypeScript, you can just kind of suggest, and TypeScript will be like, all right, cool, I'll make sure you stay honest on that, but I'm not going to make you prove it, which is an interesting sort of set of related trade-offs there. But I think we found a very comfortable resting spot for right now. Although now, we're starting to look at the edges of the Ruby system where data is coming in. So we have lots of webhooks and other external partners that we're integrating with, and they're sending us data. And that data is of varying shapes. Some will send us a payload with the word amount, and it refers to an integer amount of cents because, of course, it does. Some will send us the word amount in their payload, and it will be a floating amount of dollars. And I get a little sad on those days. But critically, our job is to make sure all of those are the same and that we never pass dollars as cents or cents as dollars because that's where things go sad. That is job number one at Sagewell in the engineering team is never get the decimal place wrong in money. JOËL: That would be a pretty terrible mistake to make. CHRIS: It would. I mean, it happens. In fintech, that problem comes up a lot. And again, the fact that...I'm honestly surprised to see situations out there where we're getting in floating point dollars. That is a surprise to me because I thought we had all agreed sort of as a community that it was integer cents but especially in a language that has integers. JavaScript, it's kind of making it up the whole time. But Ruby has integers. JSON, I guess, doesn't have integers, so I'm sort of mixing concerns here, but you get the idea. JOËL: Despite Ruby not having a static type system, I've found that generally, when I'm integrating with a third-party API, I get to the point where I want something that approximates like Elm's JSON decoders or io-ts or something like that. Because JSON is just a big blob of data that could be of any shape, and I don't really trust it because it's third-party data, and you should not trust third parties. And I find that I end up maybe cobbling something together commonly with like a bunch of usage of hash.fetch, things like that. But I feel like Ruby doesn't have a great approach to parsing and composing these validators for external data. CHRIS: Ruby as a language certainly doesn't, and the ecosystem, I would say, is rather limited in terms of the options here. We have looked a bit at the dry-rb stack of gems, so dry-validation and dry-schema, in particular, both offer potentially useful aspects. We've actually done a little bit of spiking internally around that sort of thing of, like, let's parse this incoming data instead of just coercing to hash and saying that it's got probably the shape that we want. And then similarly, I will fetch all day instead of digging because I want to be quite loud when we get it wrong. But we're already using dry-monads. So we have the idea of result types within the system. We can either succeed or fail at certain operations. And I think it's just a little further down the stack. But probably something that we will implement soon is at those external boundaries where data is coming in doing some form of parsing and validation to make sure that it conforms to unknown data structure. And then, within the app, we can do things more cleanly. That also would allow us to, like, let's push the idea that this is floating point dollars all the way out to the edge. And the minute it hits our system, we convert it into a money.new, which means that cents are properly handled. It's the same type of money or dollar, same type of currency handling as everywhere else in the app. And so pushing that to the very edges of our application is a very interesting idea. And so that could happen in the library or sort of a parsing client, I guess, is probably the best way to think about it. So I'm excited to do that at some point. JOËL: Have you read the article, Parse, Don't Validate? CHRIS: I actually posted that in some code review the other day to one of the developers on the team, and they replied, "You're just going to quietly drop one of my favorite articles of all time in code review?" [laughs] So yes, I've read it; I love it. It's a wonderful idea, definitely something that I'm intrigued by. And sort of bringing dry-monads into Ruby, on the one hand, feels like a forced fit and yet has also been one of the other, I think strongest sort of architectural decisions that we've made within the application. There's so much imperative work that we ended up having to do. Send this off to this external API, then tell this other one, then tell this other one. Put the whole thing in a transaction so that our local data properly handles it. And having dry-monads do notation, in particular, to allow us to make that manageable but fail in all the ways it needs to fail, very expressive in its failure modes, that's been great. And then parse, don't validate we don't quite do it yet. But that's one of the dreams of, like, our codebase really should do that thing. We believe in that. So let's get there soon. JOËL: And the core idea behind parse, don't validate is that instead of just having some data that you don't trust, running a check on it and passing that blob of now checked but still untrusted data down to the next person who might also want to check it. Generally, you want to pass it through some sort of filter that will, one, validate that it's correct but then actually typically convert it into some other trusted shape. In Ruby, that might be something like taking an amorphous blob of JSON and turning it into some kind of value object or something like that. And then anybody downstream that receives, let's say, money object can trust that they're dealing with a well-formed money value as opposed to an arbitrary blob of JSON, which hopefully somebody else has validated, but who knows? So I'm going to validate it again. CHRIS: You can tell that I've been out of the podcasting game for a while because I just started responding to yes; I love that blog post without describing the core premise of it. So kudos to you, Joël; you are a fantastic podcast host over there. I will say one of the things you just described is an interesting...it's been a bit of a struggle for us. We keep sort of talking through what's the architecture. How do we want to build this application? What do we care about? What are the things that really matter within this codebase, and then what is all the other stuff? And we've been good at determining the things that really matter, thinking collectively as a group, and I think coming up with some novel, useful, elegant...I'm saying too many positive adjectives for what we're doing. But I've been very happy with sort of the thing that we decide. And then there's the long-tail work of actually propagating that change throughout the rest of the application. We're, like, okay, here's how it works. Every incoming webhook, we now parse and yield a value object. That sentence that you just said a minute ago is exactly what I want. That's like a bunch of work. It's particularly a bunch of work to convert an existing codebase. It's easy to say, okay, from here forward, any new webhooks, payloads that are coming in, we're going to do in this way. But we have a lot of things in our app now that exist in this half-converted way. There was a brief period where we had three different serializer technologies at play. Just this week, I did the work of killing off the middle ground one, the Primalized-based thing, and we now have only our new hotness and then the very old. We were using Blueprinter as the serializer as the initial sort of stub. And so that still exists within the codebase in some places. But trying to figure out how to prioritize that work, the finishing out those maintenance-type conversions is a tricky one. It's never the priority. But it is really nice to have consistency in a codebase. So it's...yeah, do you have any thoughts on that? JOËL: I think going back to the article and what the meaning of parsing is, I used to always think of parsing as taking strings and turning them into something else, and I think this really broadened my perspective on the idea of parsing. And now, I think of it more as converting from a broader type to a narrower type with failures. So, for example, you could go from a string to an integer, and not all strings are valid integers. So you're narrowing the type. And if you have the string hello world, it will fail, and it will give you an error of some type. But you can have multiple layers of that. So maybe you have a string that you parse into an integer, but then, later on, you might want to parse that integer into something else that requires an integer in a range. Let's say it's a percentage. So you have a value object that is a percentage, but it's encoded in the JSON as a string. So that first pass, you parse it from a string into an integer, and then you parse that integer into a percentage object. But if it's outside the range of valid percentage numbers, then maybe you get an error there as well. So it's a thing that can happen at multiple layers. And I've now really connected it with the primitive obsession smell in code. So oftentimes, when you decide, wait, I don't want a primitive here; I want a richer type, commonly, there's going to be a parsing step that should exist to go from that primitive into the richer type. CHRIS: I like that. That was a classic Joël wildly concise summary of a deeply complex technical topic right there. JOËL: It's like I'm going to connect some ideas from functional programming and a classic object-oriented code smell and, yeah, just kind of mash it all together with a popular article. CHRIS: If only you had a diagram. Podcast is not the best medium for diagrams, but I think you could do it. You could speak one out loud, and everyone would be able to see it in their mind's eye. JOËL: So I will tell you what my diagram is for this because I've actually created it already. I imagine this as a sort of like pyramid with different layers that keep getting smaller and smaller. So the size of type is sort of the width of a layer. And so your strings are a very wide layer. Then on top of that, you have a narrower layer that might be, you know, it could be an integer, or you could even if you're parsing JSON, you first start with a string, then you parse that into a Ruby hash, not all strings are valid hashes. So that's going to be narrower. Then you might extract some values out of that hash. But if the keys aren't right, that might also fail. You're trying to pull the user out of it. And so each layer it gets a richer type, but that richer type, by virtue of being richer, is narrower. And as you're trying to move up that pyramid at every step, there is a possibility for a failure. CHRIS: Have you written a blog post about this with said diagram in it? And is that why you have that so readily at hand? [laughs] JOËL: Yes, that is the case. CHRIS: Okay. Yeah, that made sense to me. [laughs] JOËL: We'll make sure to link to it in the show notes. CHRIS: Now you have to link to Joël blog posts, whereas I used to have to link to them [chuckles] in almost every episode of The Bike Shed that I recorded. JOËL: Another thing I've been thinking about in terms of this parsing is that parsing and serializing are, in a sense, almost opposites of each other. Typically, when you're parsing, you're going from a broad type to a narrow one. And when you're serializing, you're going from a narrow type to a broader one. So you might go from a user into a hash into a string. So you're sort of going down that pyramid rather than going up. CHRIS: It is an interesting observation and one that immediately my brain is like, okay, cool. So can we reuse our serializers but just run them in reverse or? And then I try and talk myself out of that because that's a classic don't repeat yourself sort of failure mode of, like, actually, it's fine. You can repeat a little bit. So long as you can repeat and constrain, that's a fine version. But yeah, feels true, though, at the core. JOËL: I think, in some ways, if you want a single source of truth, what you want is a schema, and then you can derive serializers and parsers from that schema. CHRIS: It's interesting because you used the word derive. That has been an interesting evolution at Sagewell. The engineering team seems to be very collected around the idea of explicitness, almost the Zen of Python; explicit is better than implicit. And we are willing to write a lot of words down a lot of times and be happy with that. I think we actually made the explicit choice at one point that we will not implement an automatic camel case conversion in our serializer, even though we could; this is a knowable piece of code. But what we want is the grepability from the front end to the back end to say, like, where's this data coming from? And being able to say, like, it is this data, which is from this serializer, which comes from this object method, and being able to trace that very literally and very explicitly in the code, even though that is definitely the sort of thing that we could derive or automatically infer or have Ruby do that translation for us. And our codebase is more verbose and a little noisier. But I think overall, I've been very happy with it, and I think the team has been very happy. But it is an interesting one because I've seen plenty of teams where it is the exact opposite. Any repeated characters must be destroyed. We must write code to write the code for us. And so it's fun to be working with a team where we seem to be aligned around an approach on that front. JOËL: That example that you gave is really interesting because I feel like a common thing that happens in a serialization layer is also a form of normalization. And so, for example, you might downcase all strings as part of the serialization, definitely, like dates always get written in ISO 8601 format whenever that happens. And so, regardless of how you might have it stored on the Ruby side, by the time it gets to the JSON, it's always in a standard format. And it sounds like you're not necessarily doing that with capitalization. CHRIS: I think the distinction would be the keys and the values, so we are definitely doing normalization on the values side. So ISO 8601 date and time strings, respectively that, is the direction that we plan to go for the value. But then for the key that's associated with that, what is the name for this data, those we're choosing to be explicit and somewhat repetitive, or not even necessarily repetitive, but the idea of, like, it's first_name on the Ruby side, and it's first capital N name camel case, or it's...I forget the name. It's not quite camel case; it's a different one but lower camel, maybe. But whatever JavaScript uses, we try to bias towards that when we're going to the front end. It does get a little tricky coming back into the Ruby side. So our controllers have a bunch of places where they need to know about what I think is called lower camel case, and so we're not perfect there. But that critical distinction between sort of the names for things, and the values for things, transformations, and normalizations on the values, I'm good with that. But we've chosen to go with a much more explicit version for the names of things or the keys in JSON objects specifically. JOËL: One thing that can be interesting if you have a normalization phase in your serializer is that that can mean that your serializer and parsers are not necessarily symmetric. So you might accept malformed data into your parser and parse it correctly. But then you can't guarantee that the data that gets serialized out is going to identically match the data that got parsed in. CHRIS: Yeah, that is interesting. I'm not quite sure of the ramifications, although I feel like there are some. It almost feels like formatting Prettier and things like that where they need to hold on to whitespace in some cases and throw out in others. I'm thinking about how ASTs work. And, I don't know, there's interesting stuff, but, again, not sure of the ramifications. But actually, to flip the tables just a little bit, and that's an aggressive terminology, but we're going to roll with it. To flip the script, let's go with that, Joël; what's been up in your world? You've been hosting this wonderful show. I've listened in to a number of episodes. You're doing a fantastic job. I want to hear a little bit more of what's new in your world, Joël. JOËL: So I've been working on a project that has a lot of flaky tests, and we're trying to figure out the source of that flakiness. It's easy to just dive into, oh, I saw a flaky Test. Let me try to fix it. But we have so much flakiness that I want to go about it a little bit more systematically. And so my first step has actually been gathering data. So I've actually been able to make API requests to our CI server. And the way we figure out flakiness is looking at the commit hash that a particular test suite run has executed on. And if there's more than one CI build for a given commit hash, we know that's probably some kind of flakiness. It could be a legitimate failure that somebody assumed was flakiness, and so they just re-run CI. But the symptom that we are trying to address is the fact that we have a very high level of people re-verifying their code. And so to do that or to figure out some stats, I made a request to the API grouped by commit hash and then was able to get the stats of how many re-verifications there are and even the distribution. The classic way that you would do that is in Ruby; you would use the GroupBy function from enumerable. And then, you would transform values instead of having, like, say; each commit hash then points to all the builds, an array of builds that match that commit hash. You would then thumb those. So now you have commit hashes that point to counts of how many builds there were for that commit hash. Newer versions of Ruby introduced the tally method, which I love, which allows you to basically do all of that in one step. One thing that I found really interesting, though, is that that will then give me a hash of commit hashes that point to the number of builds that are there. If I want to get the distribution for the whole project over the course of, say, the last week, and I want to say, "How many times do people run only one CI run versus running twice in the same commit versus running three times, or four times, or five or six times?" I want to see that distribution of how many times people are rerunning their build. You're effectively doing that tally process twice. So once you have a list of all the builds, you group by hash. You count, and so you end up with that. You have the Ruby hash of commit SHAs pointing to number of times the build was run on that. And then, you again group by the number of builds for each commit SHA. And so now what you have is you'll have something like one, and then that points to an array of SHA one, SHA two, SHA three, SHA four like all the builds. And then you tally that again, or you transform values, or however, you end up doing it. And what you end up with is saying for running only once, I now have 200 builds that ran only once. For running twice in the same commit SHA, there are 15. For running three times, there are two. For running four times, there is one. And now I've got my distribution broken down by how many times it was run. It took me a while to work through all of that. But now the shortcut in my head is going to be you double tally to get distribution. CHRIS: As an aside, the whole everything you're talking about is interesting and getting to that distribution. I feel like I've tried to solve that problem on data recently and struggled with it. But particularly tally, I just want to spend a minute because tally is such a fantastic addition to the Ruby standard library. I used to have in sort of like loose muscle memory transform value is grouped by ampersand itself, transform values count, sort, reverse to H. That whole string of nonsense gets replaced by tally, and, oof, what a beautiful example of Ruby, and enumerable, and all of the wonder that you can encapsulate there. JOËL: Enumerable is one of the best parts of Ruby. I love it so much. It was one of the first things that just blew my mind about Ruby when I started. I came from a PHP, C++ background and was used to writing for loops for everything and not the nice for each loops that a lot of languages have these days. You're writing like a legit for or while loop, and you're managing the indexes yourself. And there's so much room for things to go wrong. And being introduced to each blew my mind. And I was like, this is so beautiful. I'm not dealing with indexes. I'm not dealing with the raw implementation of the array. I can just say do a thing for each element. This is amazing. And that is when I truly fell in love with Ruby. CHRIS: I want to say I came from Python, most recently before Ruby. And Python has pretty nice list comprehensions and, in fact, in some ways, features that enumerable doesn't have. But, still, coming to Ruby, I was like, oh, this enumerable; this is cool. This is something. And it's only gotten better. It still keeps growing, and the idea of custom enumerables. And yeah, there's some real neat stuff in there. JOËL: I'm going to be speaking at RubyConf Mini this fall in November, and my talk is all about Enumerators and ranges in enumerable and ways you can use those to make the APIs of the objects that you create delightful for other people to use. CHRIS: That sounds like a classic Joël talk right there that I will be happy to listen to when it comes out. A very quick related, a semi-related aside, so, tally, beautiful addition to the Ruby language. On the Rails side, there was one that I used recently, which is where.missing. Have you seen where.missing? JOËL: I have not heard of this. CHRIS: So where.missing is fantastic. Let's assume you've got two related objects, so you've got like a has many blah, so like a user has many posts. I think you can...if I'm remembering it correctly, it's User.where.missing(:posts). So it's where dot missing and then parentheses the symbol posts. And under the hood, Rails will do the whole LEFT OUTER JOIN where the count is null, et cetera. It turns into this wildly complex SQL query or understandably complex, but there's a lot going on there. And yet it compresses down so elegantly into this nice, little ActiveRecord bit. So where.missing is my new favorite addition into the Rails landscape to complement tally on the Ruby side, which I think tally is Ruby 2.7, I want to say. So it's been around for a while. And where.missing might be a Ruby 7 feature. It might be a six-something, but still, wonderful features, ever-evolving these tool sets that we use. JOËL: One of the really nice things about enumerable and family is the fact that they build on a very small amount of primitives, and so as long as you basically understand blocks, you can use enumerable and anything in there. It's not special syntax that you have to memorize. It's just regular functions and blocks. Well, Chris, thank you so much for coming back for a visit. It's been a pleasure. And it's always good to have you share the cool things that you're doing at Sagewell. CHRIS: Well, thank you so much, Joël. It's been an absolute pleasure getting to come back to this whole Bike Shed. And, again, just to add a note here, you're doing a really fantastic job with the show. It's been interesting transitioning back into listener mode for the show. Weirdly, I wasn't listening when I was a host. But now I've regained the ability to listen to The Bike Shed and really enjoy the episodes that you've been doing and the wonderful spectrum of guests that you've had on and variety of topics. So, yeah, thank you for hosting this whole Bike Shed. It's been great. JOËL: And with that, let's wrap up. The show notes for this episode can be found at bikeshed.fm. This show is produced and edited by Mandy Moore. If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. If you have any feedback, you can reach us at @_bikeshed, or reach me at @joelquen on Twitter, or at hosts@bikeshed.fm via email. Thank you so much for listening to The Bike Shed, and we'll see you next week. Byeeeeeeeeeee!!!!!!!! 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.

Joyce Meyer's Talk It Out Podcast
83. The Beauty Episode - Even Prettier

Joyce Meyer's Talk It Out Podcast

Play Episode Listen Later Mar 29, 2022 51:42


You loved the first beauty episode so much, we decided it was high time for another one! Today, Ginger, Jai and Erin powwow with friend + professional makeup artist Jen Smith for an eye-opening conversation. Between years of experience, seeing the reality behind the magazine photos we all think of as perfection, and going through a cosmetic procedure that went terribly wrong, Jen's story will give you an inside glimpse into the beauty industry and help you see the real people behind the smoke and mirrors. Get ready to overcome the habit of comparing yourself to others and see yourself the way Jesus does: wonderfully made for a unique purpose.  Also, tune in to find out a few of the ladies' favorite beauty secrets, and why you should wear pleather pants when you have a rash. Trust us, it'll make sense later.