POPULARITY
Light mode? Dark mode? Scott and Wes break down the best ways to implement theme switching in CSS, from prefers-color-scheme to manual overrides. Plus, tips on handling shadows, icons, and the dreaded flash of dark mode! Show Notes 00:00 Welcome to Syntax! 01:05 Brought to you by Sentry.io. 02:06 Light and dark mode, things to consider. 02:31 Light and dark mode from scratch. drop-in.css. 04:41 Calculations vs assigned color. 05:32 color-mix and relative color. 08:15 Foreground and background variables. –tint-or-shade: color-mix(in oklab, var(–fg), transparent 95%); –tint-or-shade-harder: color-mix(in oklab, var(–fg), transparent 90%); 09:13 Setting color scheme. 12:38 light-dark function in CSS. 15:48 Manually setting dark mode. 18:43 The challenges with shared caching. 19:33 Tailwind CSS implementation. Tailwind dark-mode. 19:52 Shoehorning in dark mode. 22:25 Other things to consider. 22:28 Color contrast. Lea Verou contrast-color. 24:39 Logos. 25:22 Icons and images. 26:20 Accessibility. Polypane. 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
Join us as we unravel the inspiring journey of Tailwind CSS with its creator, Adam Watham. From its inception in 2017 as an open-source CSS framework to becoming a major player in web design, Tailwind has recently undergone a significant rebranding with the launch of Tailwind Plus. This episode provides listeners with insights into Adam's strategic choices, including the reasoning behind merging Tailwind UI into the broader Tailwind ecosystem. Discover the challenges and outcomes of balancing community-driven development with commercial viability, as Adam shares how feedback shapes product improvements. Learn about the launch of "Build UIs That Don't Suck," an initiative designed to foster user engagement and demonstrate Tailwind's quality. Adam also reflects on the importance of sustaining a business model while nurturing open-source passion, offering invaluable advice for anyone in the tech space. Whether you're a developer, designer, or just interested in entrepreneurship, this episode is packed with insights, revealing the artistry behind code and the business. Don't miss it! Subscribe, share, and let us know what you've learned!Send us some love.HoneybadgerHoneybadger is an application health monitoring tool built by developers for developers.JudoscaleAutoscaling that actually works. Take control of your cloud hosting.Disclaimer: This post contains affiliate links. If you make a purchase, I may receive a commission at no extra cost to you.Support the show
Special announcement: Please take our listener survey so we can better tailor the podcast to your interests.The web development world can't seem to get enough of surveys, so we've got the first State of AI 2025 to announce in this week's episode. The folks behind this survey are the same ones who run State of JS, State of CSS, State of HTML, and more. Take 15 minutes to let them know what AI models you prefer, which code assistants you use, and what annoys you about the state of AI today.Along the same lines, Anthropic just released Claude Sonnet 3.7 and Claude Code. Claude Sonnet's become a favorite model in the programming world and 3.7 introduces the first hybrid model that can produce near instant response or extended, thoughtful responses, depending on what the user wants. Claude Code is Anthropic's first agentic coding tool in the form of a CLI that can search and read code, edit files, run tests, and commit code to GitHub.Jack's drop in replacement for the deprecated Create React App, create-tsrouter-app, now offers Solid JS support, add-ons like including Sentry or Tailwind CSS in a new project, and model context protocol (MCP) support for AI coding assistants to interact with the application.News:Paige - State of AI survey 2025Jack - create-tsrouter-app updates (Solid, add-ons, MCP support)TJ - Claude Sonnet 3.7 and Claude CodeBonus News:Bonus News:First impressions of Bolt.new + Exporeact-scan 0.2React ExplorerWhat Makes Us Happy this Week:Paige - Breville InFizz AquaJack - Adrian's Digital Basement YT channelTJ - ClaudePlaysPokemonThanks as always to our sponsor, the Blue Collar Coder channel on YouTube. You can join us in our Discord channel, explore our website and reach us via email, or talk to us on X, Bluesky, or YouTube.Front-end Fire websiteBlue Collar Coder on YouTubeBlue Collar Coder on DiscordReach out via emailTweet at us on X @front_end_fireFollow us on Bluesky @front-end-fire.comSubscribe to our YouTube channel @Front-EndFirePodcast
In this episode, Chris and Andrew discuss their challenges and strategies around productivity, focusing particularly on sleep schedules and dealing with a sick dog. They delve into the practicalities of modern JavaScript tooling, specifically esbuild, and its configuration headaches. The conversation then shifts to the importance of reusable themes and color systems for web applications, emphasizing the use of Tailwind CSS variables and other design strategies. Also, they highlight the significance of balancing detailed documentation with practical application and the ongoing effort to keep tools like JBuilder up to date with modern standards. Hit download now!HoneybadgerHoneybadger is an application health monitoring tool built by developers for developers.Disclaimer: This post contains affiliate links. If you make a purchase, I may receive a commission at no extra cost to you. Jason Charnes X/Twitter Chris Oliver X/Twitter Andrew Mason X/Twitter
Please take our listener survey so we can better tailor the podcast to your interests.It's only mid-February and already the State of React survey results for 2024 are in! Unsurprisingly Next.js continues to dominate as the most used React-based framework and Tailwind CSS tops the charts when it comes to CSS tools and libraries.TypeScript 5.8 beta brings TypeScript syntax one step closer to being a first-class citizen in the Node runtime. Node 23.6 unflagged experimental support for running TS files directly, but certain TS constructs like enums, import aliases and a few other things just aren't supported. TS 5.8 beta introduces the –eraseabeSyntaxOnly flag, which will allow users to only write TS constructs that can be erased from a Node file, and will issue an error if it encounters constructs that can't be erased cleanly.Vercel's AI tool v0 can now import Tailwind config and Figma files. Now, designs begun in Figma can be imported to v0 to refine without the friction of design-to-code translation and custom font weights and colors can be added to directly from a custom Tailwind config file.News:Paige - TypeScript 5.8's –eraseableSyntaxOnly flagJack - v0 can now import Tailwind config and Figma filesTJ - State of React 2024 survey resultsBonus News:Angular: The DocumentaryAstro 5.2Fire Starters:CSS hanging-punctuationWhat Makes Us Happy this Week:Paige - A Man on the Inside TV seriesJack - Strings of bee lightsTJ - Heated glovesThanks as always to our sponsor, the Blue Collar Coder channel on YouTube. You can join us in our Discord channel, explore our website and reach us via email, or Tweet us on X @front_end_fire and BlueSky.Front-end Fire websiteBlue Collar Coder on YouTubeBlue Collar Coder on DiscordReach out via emailTweet at us on X @front_end_fireFollow us on Bluesky @front-end-fire.com
News includes an impressive case study from Remote showing how they scaled Elixir to support nearly 300 engineers and reach unicorn status, Tailwind CSS 4.0's major release with Phoenix integration in progress, Chris McCord teasing an exciting AI code generator project on Fly.io, the release of Elixir LangChain v0.3.0 with expanded support for multiple AI providers, ElixirConfEU 2025 tickets going on sale in Kraków, and more! Show Notes online - http://podcast.thinkingelixir.com/239 (http://podcast.thinkingelixir.com/239) Elixir Community News https://elixir-lang.org/blog/2025/01/21/remote-elixir-case/ (https://elixir-lang.org/blog/2025/01/21/remote-elixir-case/?utm_source=thinkingelixir&utm_medium=shownotes) – New case study about Remote, a unicorn company using Elixir as their primary technology with nearly 300 engineers. https://github.com/sasa1977/boundary (https://github.com/sasa1977/boundary?utm_source=thinkingelixir&utm_medium=shownotes) – Remote uses Saša Jurić's Boundary library to help enforce boundaries in their monolithic codebase. https://www.reddit.com/r/elixir/comments/1i77ia9/comment/m8il2ho/ (https://www.reddit.com/r/elixir/comments/1i77ia9/comment/m8il2ho/?utm_source=thinkingelixir&utm_medium=shownotes) – Discussion about the type spec future in Elixir, with plans to replace Dialyzer typespecs in versions 1.19 and 1.20. https://bsky.app/profile/zachdaniel.dev/post/3lgqdugp7zs2b (https://bsky.app/profile/zachdaniel.dev/post/3lgqdugp7zs2b?utm_source=thinkingelixir&utm_medium=shownotes) – Ash installer now supports Oban integration via a flag option. https://tailwindcss.com/blog/tailwindcss-v4 (https://tailwindcss.com/blog/tailwindcss-v4?utm_source=thinkingelixir&utm_medium=shownotes) – Tailwind CSS 4.0 released with major changes including moving theme configuration to CSS variables. https://tailwindcss.com/docs/upgrade-guide (https://tailwindcss.com/docs/upgrade-guide?utm_source=thinkingelixir&utm_medium=shownotes) – Comprehensive upgrade guide for Tailwind CSS v4. https://github.com/phoenixframework/phoenix/pull/5990 (https://github.com/phoenixframework/phoenix/pull/5990?utm_source=thinkingelixir&utm_medium=shownotes) – WIP PR to support Tailwind v4 in Phoenix. https://bsky.app/profile/zachdaniel.dev/post/3lggmuk4dis2x (https://bsky.app/profile/zachdaniel.dev/post/3lggmuk4dis2x?utm_source=thinkingelixir&utm_medium=shownotes) – Zach Daniel shares how Tailwind v4 changes will improve igniter's utility configuration capabilities. https://github.com/brainlid/langchain (https://github.com/brainlid/langchain?utm_source=thinkingelixir&utm_medium=shownotes) – Elixir LangChain v0.3.0 released with expanded support for OpenAI, Anthropic, Gemini, Llama, and more. https://x.com/chris_mccord/status/1880377175200669770 (https://x.com/chris_mccord/status/1880377175200669770?utm_source=thinkingelixir&utm_medium=shownotes) – Chris McCord teases new Fly.io AI code generator project with IDE/terminal integration. https://x.com/chris_mccord/status/1880392153924530376 (https://x.com/chris_mccord/status/1880392153924530376?utm_source=thinkingelixir&utm_medium=shownotes) – Demo video of Chris McCord's AI-integrated editor creating a multiplayer Phoenix LiveView app. https://www.elixirconf.eu/ (https://www.elixirconf.eu/?utm_source=thinkingelixir&utm_medium=shownotes) – ElixirConfEU 2025 tickets on sale, happening May 15-16 in Kraków Poland & Virtual. Do you have some Elixir news to share? Tell us at @ThinkingElixir (https://twitter.com/ThinkingElixir) or email at show@thinkingelixir.com (mailto:show@thinkingelixir.com) Find us online - Message the show - Bluesky (https://bsky.app/profile/thinkingelixir.com) - Message the show - X (https://x.com/ThinkingElixir) - Message the show on Fediverse - @ThinkingElixir@genserver.social (https://genserver.social/ThinkingElixir) - Email the show - show@thinkingelixir.com (mailto:show@thinkingelixir.com) - Mark Ericksen on X - @brainlid (https://x.com/brainlid) - Mark Ericksen on Bluesky - @brainlid.bsky.social (https://bsky.app/profile/brainlid.bsky.social) - Mark Ericksen on Fediverse - @brainlid@genserver.social (https://genserver.social/brainlid) - David Bernheisel on Bluesky - @david.bernheisel.com (https://bsky.app/profile/david.bernheisel.com) - David Bernheisel on Fediverse - @dbern@genserver.social (https://genserver.social/dbern)
La semana pasada el equipo de Tailwind CSS presentó una actualización completamente optimizada para el rendimiento y la personalización. La versión 4 de Tailwind CSS marca un nuevo hito, con una espectacular actualización que ha llevado meses de trabajo. Esta última versión trae mejoras extraordinarias en un nuevo motor de alto rendimiento, integración con Vite, detección de automática de contenido, una configuración basada en CSS y multitud de nuevas funcionalidades, y por si fuera poco, con una instalación y un flujo de trabajo simplificado al máximo. Para hablar de todo esto he invitado a Vivian Guillen, full stack developer y evangelizadora de Tailwind CSS. Ella es la persona detrás de la newsletter Tailwind Weekly, la referencia indiscutible para estar al día de Tailwind CSS. Con Vivian hablamos, como dos fans, de esta nueva actualización del framework CSS y todas las mejora que el equipo de Tailwind CSS ha conseguido con la versión 4. Entre los puntos discutidos en el episodio: Los inicios con Tailwind CSS y como cambió tu forma de entender el CSS. Nuevas funcionalidades de la versión 4.0 de Tailwind CSS. Migración a la versión 4 desde versiones anteriores. La newsletter Tailwind Weekly y curación de contenidos. El equipo de desarrollo detrás de Tailwind CSS. Participación en la Tailwind Connect de Miami. Otros proyectos como Codelier. Vivian además de una apasionada de Tailwind CSS es una persona muy comprometida con el proyecto y por su vinculación con el equipo de Tailwind CSS vive muy de cerca todas las novedades y detalles muy interesantes sobre el trabajo detrás del framework.
Xuan-Son Nguyen opened a low-level code PR written 99% by DeepSeek-R1, Adam Wathan announces the release of Tailwind CSS 4.0, Matheus Lima opens up the Computer Science history books to create list of influential papers, Namanyay Goel thinks AI is creating a generation of illiterate programmers & Russell Baylis shares what he's learned about optimizing WFH lighting to reduce eye strain.
Xuan-Son Nguyen opened a low-level code PR written 99% by DeepSeek-R1, Adam Wathan announces the release of Tailwind CSS 4.0, Matheus Lima opens up the Computer Science history books to create list of influential papers, Namanyay Goel thinks AI is creating a generation of illiterate programmers & Russell Baylis shares what he's learned about optimizing WFH lighting to reduce eye strain.
Xuan-Son Nguyen opened a low-level code PR written 99% by DeepSeek-R1, Adam Wathan announces the release of Tailwind CSS 4.0, Matheus Lima opens up the Computer Science history books to create list of influential papers, Namanyay Goel thinks AI is creating a generation of illiterate programmers & Russell Baylis shares what he's learned about optimizing WFH lighting to reduce eye strain.
This week, the team behind JavaScript runtime Bun drops some major updates into Bun 1.2. Bun introduces a built-in S3 storage API, a built-in Postgres client (with MySQL coming soon), 90% compatibility with Node.js, and it's faster than ever before.Tailwind CSS v4 is out as well, and it boasts a new higher performance engine for 5x faster full builds, support for cutting edge CSS features like cascade layers, custom properties, and container queries, a simplified initial install and config to get going, and a first-party Vite plugin.And React Scan, built by Aiden Bai who also built Million.js, is also out this week with v0.1. Install React Scan into any React app and it will auto detect performance issues due to excessive re-rendering, and highlight the components causing the issues.News:Paige - Tailwind CSS v4.0Jack - React Scan 0.1 (aka Million.js)TJ - Bun 1.2Bonus News:StargateOpenAI's new Operator AI agent can do things on the web for youFire Starters:Link to text fragments with #:~:text=What Makes Us Happy this Week:Paige - Puzzles (like the ones from Buffalo Games)Jack - Klipsch G-17 air wireless speakerTJ - Not So Super, AppleThanks as always to our sponsor, the Blue Collar Coder channel on YouTube. You can join us in our Discord channel, explore our website and reach us via email, or Tweet us on X @front_end_fire and BlueSky.Front-end Fire websiteBlue Collar Coder on YouTubeBlue Collar Coder on DiscordReach out via emailTweet at us on X @front_end_fireFollow us on Bluesky @front-end-fire.com
Brad and Amy dive into their year-end tech reflections, discussing goal-setting strategies and Amy's ambitious Build 12 project for 2025. The hosts explore various database hosting solutions, share their favorite hardware purchases including cameras and peripherals, and examine how AI tools are reshaping development workflows. The episode concludes with insights into emerging tech trends and anticipated developments for 2025.Chapter Marks00:00 Episode introduction and host intros00:41 Year-end goals discussion and 12-week planning02:02 Amy's Build 12 project announcement03:01 Goal setting strategies and focus04:25 Brad's 2024 goals review05:35 Travel plans and New York City trips06:58 More 2024 goals: fitness, career, and finances08:21 Technical stack discussion13:22 AI tools and development workflows17:19 Database hosting options comparison25:45 Tech gear and hardware updates33:47 Notable tech purchases review43:29 AI tools and future tech discussionLinksBuild Twelve, by Brian P. Moran - Amy's upcoming projectThe 12 Week Year (book)Atomic Habits, by James Clear (book)The Power of Habit, by Charles Duhigg (book)SupabaseNeon databaseDigital OceanTursoCursor IDERemarkable Tablet (v2)Oura RingRazer Basilisk V3 Pro mouseSwish app for MacNuphy Air 75 keyboardDrop keyboardInsta360 One cameraInsta360 Go 3 cameraNikon ZFC cameraRay Deck - Episode 182: Low-Code as a Medium For High-Speed DevelopersMarc LouPieter LevelsWorkOSThe Best Way to Add Authentication to Your Astro Website (Amy's YouTube Video)Comparing Frameworks - Amy's projectGitHub CopilotClaudeconvertkit.comloops.soPrisma
✏️ Suscribirse https://youtu.be/99_34nF-Z7c ¡Muy buenas a todos y bienvenidos una semana más a Negocios y WordPress, episodio 219! Hoy vamos a sumergirnos en el fascinante mundo de los frameworks CSS y cómo integrarlos en WordPress de manera sencilla. Si alguna vez te has preguntado cómo mejorar el diseño de tus sitios web con herramientas como Bootstrap o Tailwind, este post es para ti. ¿Qué es un Framework CSS? Introducción a los Frameworks CSS Un framework CSS es una colección de hojas de estilo predefinidas que facilitan la creación de sitios web. Estos frameworks incluyen clases y componentes que puedes reutilizar para diseñar tu web de manera más eficiente. Los dos frameworks más populares son Bootstrap y Tailwind. Bootstrap vs. Tailwind Bootstrap: Ideal para componentes completos como botones, formularios y menús. Es perfecto para quienes buscan una solución rápida y estandarizada. Tailwind: Se enfoca en clases de utilidad, permitiendo una personalización más granular. Es ideal para desarrolladores que buscan un control total sobre el diseño. Integración de Frameworks CSS en WordPress Usando Temas con Frameworks Integrados Una de las formas más sencillas de integrar un framework CSS en WordPress es utilizando un tema que ya lo tenga incorporado. Por ejemplo: BootScore: Un tema que implementa Bootstrap, facilitando el uso de sus componentes directamente en WordPress. GreenShift: Un tema que permite una personalización avanzada y es compatible con varios frameworks CSS. Plugins para Integrar Frameworks CSS WinPress WinPress es un plugin que permite integrar Tailwind CSS en WordPress de manera sencilla. Es compatible con varios constructores de páginas como Gutenberg, Cadence, y GreenShift. Instalación: Busca "WinPress" en el repositorio de plugins de WordPress e instálalo. Configuración: Ajusta las configuraciones según tus necesidades y selecciona la versión de Tailwind que prefieras. Uso: Utiliza las clases de Tailwind directamente en el editor de bloques de WordPress. Core Framework Core Framework es otra excelente opción que te permite crear tu propio framework CSS personalizado. Instalación: Busca "Core Framework" en el repositorio de plugins de WordPress e instálalo. Configuración: Define tus propias variables y clases CSS. Uso: Aplica estas clases y variables directamente en el editor de bloques de WordPress. Ventajas y Desventajas de Cada Método Ventajas de Usar Bootstrap Rápida Implementación: Ideal para proyectos que necesitan una solución rápida. Componentes Predefinidos: Facilita la creación de elementos comunes como botones y formularios. Ventajas de Usar Tailwind Personalización Granular: Permite un control total sobre el diseño. Clases de Utilidad: Facilita la creación de estilos personalizados. Desventajas Curva de Aprendizaje: Ambos frameworks requieren tiempo para aprender sus clases y componentes. Dependencia: Usar un framework puede hacer que tu proyecto dependa de él, lo que puede ser un problema si decides cambiar en el futuro. Conclusión Integrar frameworks CSS en WordPress puede parecer una tarea complicada, pero con las herramientas adecuadas, es más sencillo de lo que parece. Tanto Bootstrap como Tailwind ofrecen ventajas únicas que pueden adaptarse a diferentes tipos de proyectos. La clave está en elegir el que mejor se adapte a tus necesidades y aprender a utilizarlo de manera eficiente. ¿Qué framework CSS prefieres para tus proyectos en WordPress? ¡Déjanos tu opinión en los comentarios! Y si tienes alguna pregunta, no dudes en unirte a nuestro grupo de Telegram para más consejos y trucos. Enlaces Internos y Externos Negocios y WordPress La Máquina de Branding Elias Gómez WindPress Plugin Core Framework Plugin Rich Snippets FAQ ¿Qué es un framework CSS?Un framework CSS es una colección de hojas de estilo predefinidas que facilitan la creación de sitios web. ¿Cuál es la diferencia entre Bootstrap y Tailwind?Bootstrap se enfoca en componentes completos, mientras que Tailwind se enfoca en clases de utilidad para una personalización más granular. ¿Cómo puedo integrar Tailwind en WordPress?Puedes usar el plugin WinPress para integrar Tailwind en WordPress de manera sencilla. ¿Es mejor usar un tema con un framework CSS integrado o un plugin?Depende de tus necesidades. Usar un tema con un framework integrado es más sencillo, pero un plugin ofrece más flexibilidad y personalización. Espero que este post te haya sido útil y te animes a integrar frameworks CSS en tus proyectos de WordPress. ¡Hasta la próxima!
In this episode of Remote Ruby, Chris and Andrew dive into the Ruby 3.4.0 rc1 release, covering new features, modular garbage collector, language changes, and YJIT improvements. Chris shares updates on the Rails “Getting Started Guide” and improvements in deploying Rails apps. They also delve into humorous anecdotes about their personal lives and work experiences, like dealing with flaky tests in Selenium and switching to Playwright for more stable and faster system tests. The conversation wraps up with excitement over new features in Tailwind CSS v4.0 and its potential benefits for their projects. Hit download now to hear more!HoneybadgerHoneybadger is an application health monitoring tool built by developers for developers.Disclaimer: This post contains affiliate links. If you make a purchase, I may receive a commission at no extra cost to you. Jason Charnes X/Twitter Chris Oliver X/Twitter Andrew Mason X/Twitter
In our last news episode of the year, we share that React 19 is declared stable, just in time for the holidays. It's been a long road from release candidate in April to stability now, but it was well worth the wait. React 19 is packing a lot of features, including: Actions, hooks, form actions, the new use API, and of course, React Server Components and Server Actions.OpenAI's been busy as well, introducing ChatGPT Pro, its $200 a month subscription for unlimited access to OpenAI o1 (the “reasoning model), GPT-4o, and Advanced Voice mode. Additionally, the startup announced the ChatGPT desktop app for macOS can now read code in a handful of developer-focused coding apps, like VS Code, XCode, Terminal, and iTerm2.There's a new challenger to Figma for styling React-based code bases called Onlook. Onlook is a browser-based product studio that lets you design React code with Tailwind CSS using an easy-to-use interface just like you would in Figma.News:Paige - Onlook, the power Figma in your React appJack - React 19 is stableTJ - OpenAI announcements: ChatGPT Pro and Work With AppsBonus News:Quantum Computing Inches Closer to RealityiOS 18.2 and Apple IntelligenceFire Starters:Customizable Selects (Wes Bos video)What Makes Us Happy this Week:Paige - Black Doves TV series and The Midnight Feast bookJack - Seestar-S50 All-in-one smart telescopeTJ - Christmas Village in Grand Rapids, MIThanks as always to our sponsor, the Blue Collar Coder channel on YouTube. You can join us in our Discord channel, explore our website and reach us via email, or Tweet us on X @front_end_fire and BlueSky.Front-end Fire websiteBlue Collar Coder on YouTubeBlue Collar Coder on DiscordReach out via emailTweet at us on X @front_end_fireFollow us on Bluesky @front-end-fire.com
✏️ Suscribirse https://youtu.be/pppKyyjAwP4 Bienvenidos a un nuevo episodio de Negocios y WordPress, donde exploramos las últimas tendencias y herramientas del mundo digital. En el episodio 218, Yannick y Elías nos traen un contenido cargado de información sobre inteligencia artificial (IA), el plugin Tmetric para seguimiento de tiempo, la nueva Consent API de WordPress y mucho más. Si eres un apasionado de WordPress y quieres estar al día con las novedades, ¡este episodio es para ti! Yannick se Enfoca en la Mejora de su Membresía y Contenidos para la Comunidad WordPress En la reciente quincena, Yannick ha estado intensamente involucrado en la optimización de su membresía en "La Máquina de Branding", especialmente tras el aumento de nuevos usuarios durante el Black Friday. Ha implementado un enfoque más personalizado en el onboarding, enviando mensajes de bienvenida a los nuevos miembros. Además, ha añadido nuevos contenidos a su academia, incluyendo tutoriales sobre herramientas como Bricks y Form Builder. Yannick también está preparando un especial de Navidad que abordará temas como los builders de WordPress y la contribución a la comunidad, con sorpresas y descuentos para los participantes. En su tiempo libre, ha explorado nuevas herramientas de IA y ha compartido su experiencia en la creación de contenido en YouTube, donde ha publicado varios vídeos sobre gestión de proyectos y presupuestos. Integración del Consentimiento RGPD en el CORE de WordPress En una reciente actualización, el equipo de desarrollo de WordPress ha comenzado a considerar la integración del plugin WP Consent API en el núcleo del sistema. Este plugin no solo se encargará de gestionar el consentimiento de cookies de manera más eficiente, sino que también establecerá un estándar para la forma en que se almacenan los datos relacionados con las cookies y las preferencias de los usuarios. Aunque se necesitará un plugin adicional para mostrar el banner de cookies, esta iniciativa es un paso significativo hacia la conformidad con la normativa europea de protección de datos (RGPD). La inclusión de esta funcionalidad en el CORE de WordPress refleja un compromiso con la privacidad y la transparencia, facilitando a los desarrolladores la implementación de soluciones que respeten la legislación vigente. Automattic debe quitar los bloqueos a WP Engine En un reciente desarrollo del juicio entre Automattic y WP Engine, un juez ha ordenado a Automattic que cese el bloqueo del acceso de WP Engine a WordPress.org y que elimine una lista de clientes de WP Engine que había creado para rastrear sus movimientos. El juez determinó que las acciones de Automattic estaban diseñadas para perjudicar a WP Engine y afectar sus relaciones comerciales. Automattic, por su parte, ha afirmado que buscará ganar el juicio y presentará contrademandas. Este caso ha generado un gran interés en la comunidad de WordPress, ya que podría tener implicaciones significativas para la competencia en el mercado de plugins y servicios relacionados. Automattic Adquiere Startup de Inteligencia Artificial para Mejorar WordPress Automattic, la empresa detrás de WordPress.com, ha anunciado la adquisición de WPAI, una startup especializada en soluciones de inteligencia artificial para WordPress. Esta compra busca integrar tecnologías avanzadas que mejoren la experiencia de desarrollo y uso de WordPress, haciendo la plataforma más rápida, inteligente e intuitiva. Los fundadores de WPAI se unirán al equipo de Automattic para trabajar en esta nueva dirección, que incluye herramientas como CodeWP, un asistente de IA para el desarrollo en WordPress. Esta adquisición refuerza el compromiso de Automattic con la innovación y la mejora continua de su ecosistema. Elias ha pagado por Tmetric Elias ha decidido suscribirse a Tmetric, un servicio de seguimiento de tiempo que permite medir y gestionar las horas dedicadas a diferentes tareas y proyectos. Tmetric ofrece dos formas de uso: la opción de cronometrar manualmente las tareas o hacerlo automáticamente a través de integraciones con gestores de tareas como Asana y Trello. La suscripción de Elias es del plan anual, aprovechando un descuento del 30%, lo que le costó alrededor de 50 euros. Este servicio le permite establecer presupuestos para proyectos, realizar facturas basadas en el tiempo trabajado y obtener informes detallados sobre su actividad. Además, Tmetric incluye funcionalidades como la captura de pantalla y el seguimiento de aplicaciones, lo que resulta útil para quienes trabajan con clientes por horas. Elias considera que la herramienta es valiosa para su trabajo diario y está satisfecho con las funcionalidades que ofrece. Nuevos Videos en el Canal de Negocios y WordPress El canal de Negocios y WordPress ha lanzado recientemente una serie de nuevos videos que abordan temas relevantes para emprendedores y desarrolladores en el ámbito digital. Entre los contenidos destacados se encuentran dos videos sobre presupuestos: uno enfocado en presupuestos abiertos y otro en presupuestos cerrados, donde se discuten las ventajas y desventajas de cada modelo. Además, se ha publicado un video sobre cómo crear un portafolio efectivo y otro que trata sobre contabilidad básica para pequeños negocios. Los videos son breves y están diseñados para ser consumidos rápidamente, lo que facilita la asimilación de información valiosa. La serie también incluye consejos sobre marketing y branding, especialmente dirigidos a clientes pequeños. Los próximos lanzamientos incluirán un video sobre la actualización automática de WordPress y otro sobre la gestión de incidencias, que se centra en cómo manejar urgencias de clientes. Con un enfoque práctico y directo, estos videos buscan equipar a los espectadores con herramientas y conocimientos útiles para mejorar su gestión empresarial y su presencia en línea. Elias ha vuelto a pagar por Descript Elias ha decidido volver al plan de pago de Descript, un editor de video que utiliza transcripciones para facilitar la edición. Aunque había dejado de usarlo debido a la disponibilidad de funciones similares en otras herramientas, ha vuelto a suscribirse al servicio. Aprecia especialmente la capacidad de Descript para realizar transcripciones automáticas y la facilidad de uso que ofrece, lo que le permite trabajar de manera más eficiente en sus proyectos de video. Aunque el nuevo plan es un poco diferente y más costoso que el anterior, Elias considera que las funcionalidades que ofrece justifican la inversión. Backend Lento de Elias Elias ha estado experimentando problemas de lentitud en el backend de su sitio web, eliasgomez.pro. Inicialmente, su tiempo de carga era de cinco segundos, lo que consideró excesivo. Tras migrar su sitio a un nuevo hosting especializado en WordPress, notó una mejora significativa, reduciendo el tiempo de carga a medio segundo. Sin embargo, se encontró con un plugin llamado "Migrate Guru" que fue instalado automáticamente durante la migración, lo que le generó dudas sobre su impacto en el rendimiento. A pesar de desactivar varios plugins, el problema de lentitud persistió hasta que finalmente identificó que el plugin de caché "LiteSpeed Cache" era el causante de la lentitud. Al desactivarlo, la velocidad del sitio mejoró notablemente. Elias también reflexionó sobre la importancia de mantener un backend limpio, eliminando plugins innecesarios y optimizando la base de datos para mejorar el rendimiento general de su sitio. Bootscore: Integración de GeneratePress y Bootstrap En el episodio se discute la posibilidad de utilizar Bootscore, un tema que combina Bootstrap con WordPress, en lugar de depender únicamente de GeneratePress. Se menciona que Bootscore permite una mayor personalización y control sobre el diseño, lo que puede ser beneficioso para proyectos que requieren un enfoque más a medida. Sin embargo, también se plantea la inquietud de que, al utilizar un tema en blanco y Bootstrap, se podría perder la facilidad de uso que ofrece GeneratePress, que permite una rápida maquetación sin necesidad de profundizar en código. Además, se considera la opción de utilizar Tailwind CSS a través de un plugin que facilita su integración con WordPress, aunque esto también conlleva la necesidad de manejar código. La conversación refleja la búsqueda de un equilibrio entre la personalización y la eficiencia en el desarrollo web, destacando la importancia de elegir las herramientas adecuadas según las necesidades del proyecto. Obsidian Web Clipper con IA Obsidian ha lanzado una extensión oficial llamada "Web Clipper" que permite capturar contenido de páginas web de manera eficiente. Esta herramienta permite a los usuarios guardar información relevante, como títulos, fuentes y autores, en un formato estructurado dentro de Obsidian. Además, se pueden crear plantillas personalizadas para facilitar la captura de datos. Una de las características más destacadas de esta extensión es su integración con inteligencia artificial. Los usuarios pueden conectar su API de OpenAI o cualquier otro proveedor de IA para procesar el contenido capturado. Esto incluye la posibilidad de limpiar el HTML y extraer información específica, como transcripciones de vídeos de YouTube, transformándolas en listas organizadas. La funcionalidad de "interpreter" permite ejecutar comandos personalizados sobre el contenido capturado, lo que amplía las posibilidades de uso de la herramienta. Además, se ha implementado un sistema de transcripción de audio, permitiendo a los usuarios grabar ideas y convertirlas en texto dentro de Obsidian, lo que facilita la organización y el acceso a la información. Conclusión En este episodio, hemos explorado cómo la inteligencia artificial, herramientas como Tmetric y la nueva Consent API están transformando el panorama digital. La tecnología avanza rápidamente, y es fundamental mantenerse informado para aprovechar al máximo estas herramientas en nuestros proyectos. ¿Te ha gustado el episodio? ¡Déjanos tus comentarios y no olvides suscribirte para no perderte ninguna novedad! También puedes unirte a nuestro grupo de Telegram para seguir la conversación.
Daniel Roe, Nuxt core team leader, talks about the wide-ranging topic of meta-frameworks. Discover the benefits, use cases, and how these frameworks can transform the productivity of your development team, and delve into the rise of server-side rendering, React server components, and the role of AI in web development. Links https://roe.dev https://github.com/danielroe https://x.com/danielcroe https://bsky.app/profile/danielroe.dev https://www.twitch.tv/danielroe https://www.youtube.com/@danielroe We want to hear from you! How did you find us? Did you see us on Twitter? In a newsletter? Or maybe we were recommended by a friend? Let us know by sending an email to our producer, Emily, at emily.kochanekketner@logrocket.com (mailto:emily.kochanekketner@logrocket.com), or tweet at us at PodRocketPod (https://twitter.com/PodRocketpod). Follow us. Get free stickers. Follow us on Apple Podcasts, fill out this form (https://podrocket.logrocket.com/get-podrocket-stickers), and we'll send you free PodRocket stickers! What does LogRocket do? LogRocket provides AI-first session replay and analytics that surfaces the UX and technical issues impacting user experiences. Start understand where your users are struggling by trying it for free at [LogRocket.com]. Try LogRocket for free today.(https://logrocket.com/signup/?pdr) Special Guest: Daniel Roe.
In this episode, Amy, Brad, and guest Alex dive into cutting-edge CSS features that are transforming web development. They explore container queries, logical properties, CSS layers, and scopes, sharing practical applications and browser support updates. The trio also discusses Tailwind CSS and its role in modern web design, offering spicy takes on its implementation.SponsorWix Studio combines the best of both worlds—intuitive design tools for clients and full-stack flexibility for developers. Customize every detail with your own code and take control of your projects.Show Notes00:00 - Welcome and Introductions01:16 - Shoutout to Wix Studio03:12 - CSS as a Typed Language04:10 - The Magic of CSS Layers07:38 - Logical Properties and Global Support10:47 - Browser Wars: Who's Leading in CSS?20:24 - Container Queries in Action25:37 - CSS Scopes and Their Potential28:03 - Revolutionizing CSS: Style Queries and Beyond36:12 - Tailwind CSS: A Spicy Debate46:13 - Picks and PlugsAlex's Pick: Dropout.tv, especially Gastronauts.Alex's Plug: Speaking at Connect Tech (Atlanta) and Codemash (Ohio). Socials: @fimion (Twitter), @DangitAlex.wtf (Blue Sky)Brad's Pick: Love is Blind season and reunion episodes.Brad's Plug: New to Blue SkyAmy's Pick: Happy Little Dinosaurs board gameAmy's Plug: Freaking Full Stack workshopLinksRaindrop.ioInterop 2025 ListTailwindCSS
In this repeat episode, Kevin Powell, CSS Evangelist, returns to talk about why CSS can be frustrating to developers and how to make working with it fun and enjoyable. Links https://www.youtube.com/@KevinPowell https://twitter.com/KevinJPowell https://www.kevinpowell.co We want to hear from you! How did you find us? Did you see us on Twitter? In a newsletter? Or maybe we were recommended by a friend? Let us know by sending an email to our producer, Emily, at emily.kochanekketner@logrocket.com (mailto:emily.kochanekketner@logrocket.com), or tweet at us at PodRocketPod (https://twitter.com/PodRocketpod). Follow us. Get free stickers. Follow us on Apple Podcasts, fill out this form (https://podrocket.logrocket.com/get-podrocket-stickers), and we'll send you free PodRocket stickers! What does LogRocket do? LogRocket provides AI-first session replay and analytics that surfaces the UX and technical issues impacting user experiences. Start understand where your users are struggling by trying it for free at LogRocket.com. (https://logrocket.com/signup/?pdr) Special Guest: Kevin Powell.
Yousouf El-Azizi, mobile tribe lead at Obytes and core team member of the GeeksBlaBla community in Morocco, discusses his path into technology and becoming a React Native developer. He also talks about his role as the leader of the mobile tribe at Obytes and the benefits of using their open-source starter template. The template, which has gained popularity on GitHub, includes Expo, TypeScript, Tailwind CSS, Husky, Lint-staged, Expo Router, React Query, React Hook Form, and localization with I18n. The conversation covers various topics related to the Obytes Starter template for React Native. The main themes include the use of Tailwind CSS, the benefits of using the template, the integration of GitHub actions for automation, the use of React Query Kit and TanStack Query for data fetching, the use of Maestro for end-to-end testing, and the importance of documentation. The conversation also touches on the negative aspects of social media and the benefits of following the right people on GitHub.Learn React Native - https://galaxies.devYoussouf El AziziYoussouf Twitter: https://twitter.com/ElaziziYoussoufYoussouf Website: https://elazizi.com/LinksObytes starter: https://starter.obytes.com/GitHub Feed is underrated: https://elazizi.com/posts/github-feed-is-underrated/TakeawaysThe mobile tribe at Obytes follows the Spotify model of managing teams, with tribes focusing on technology and squads focusing on projects.The Obytes starter template is an opinionated template that helps align teams and projects, providing a strong foundation and best practices.The template includes Expo, TypeScript, Tailwind CSS, Husky, Lint-staged, Expo Router, React Query, React Hook Form, and localization with I18n.Yousuf discusses the decision-making process behind adopting technologies for the starter template, such as Expo Router and Native Wind. The Obytes Starter template for React Native is designed to incorporate best practices and provide a solid foundation for new projects.Tailwind CSS is a popular framework for styling in React Native and is widely used in the React Native ecosystem.GitHub actions are used in the template for automation, including validation, testing, and building the app for different environments.React Query Kit and TenStack Query are used for data fetching and provide an easy way to manage queries and mutations.Maestro is used for end-to-end testing and provides a simple and intuitive way to write tests.Documentation is an important aspect of the template and guides how to use the various features and technologies.Following the right people on GitHub can be a valuable source of learning and discovering new projects and best practices.Social media platforms like Twitter can be overwhelming and cause anxiety, and it's important to be mindful of the time spent on them.
Ben and Adam Wathan cover the development and reimagining of Tailwind CSS, focusing on the release of Tailwind 4.0. They delve into the motivation behind the rewrite, the challenges faced, and the approach to maintaining backward compatibility. The conversation covers topics related to software versioning, open-source maintenance, backward compatibility, the use of Rust in Tailwind, testing strategies, and the future of Tailwind as a business.LinksTuple.app (https://tuple.app) - The best app for pair programmingTailwind CSS (https://tailwindcss.com) - The CSS framework Adam createdKey TakeawaysRewrites can lead to a cleaner, more maintainable codebase.Accurate problem modeling can lead to the emergence of new features and benefits.The approach to backward compatibility involves making it easy to upgrade to the new version rather than simply making the old version work.Chapters(00:00) - Introduction and Background (00:35) - Windows Version Launch and Guest Network (01:24) - Rewriting Tailwind: Philosophy and Execution (03:42) - Ben's Static HTML Website Idea (09:06) - Re-imagining Tailwind with Tailwind 4 (20:49) - Challenges and Solutions in Tailwind Development (32:45) - Rust Components in Tailwind 4 (35:41) - Tailwind 4 Goals and Achievements (40:22) - Testing and Quality Assurance in Tailwind 4 (46:38) - Tailwind 4 Release (49:54) - The Tailwind Origin Story (52:24) - Business Strategies and Open Source Impact
In this episode, Amy, Brad, and Bekah welcome back Kent C. Dodds, who shares exciting updates about his latest project, Epic Web.dev. Kent discusses the philosophy behind his comprehensive web development course, the importance of understanding foundational technologies, and the motivation behind creating Epic Web Conf. He also dives into the benefits of building your own authentication systems and the decision-making process behind the Epic Stack. The conversation is filled with insights on balancing different technologies, creating cohesive learning experiences, and the future of web development education. SponsorsConvexConvex is the backend for founders. Convex is the backend application platform for product-obsessed founders Show Notes0:00 - Intro1:09 - Sponsor: Convex2:09 - Overview of EpicWeb.dev3:09 - Journey from PayPal to Epic Web8:14 - Teaching Approach and Workshop App10:47 - Building your own Authentication System16:59 - Decision-Making and Epic Stack21:35 - Launching Epic Web Conf27:26 - Consistency in Teaching and Conferences35:03 - Future Plans for EpicWeb.dev43:16 - Picks and PlugsKentPick: Brandon Sanderson's books - Particularly the Mistborn series and his involvement in the Wheel of Time series.Plug: Epic Web Conf - An exciting web development conference happening in Park City, Utah.BekahPick: Primal Buffalo Chicken StickPlug: @opensauced on Twitter/XBradPick: Ray-Ban Wayfarer SunglassesPlug: @bradgarropy on Twitter/XAmyPick: The Artists Way by Julia CameronPlug: Two Week Build
We've got an exciting episode with our co-host Jack Herrington fresh from his trip to React Conf where the React core team and close collaborators unveiled all the cool things they've been working on, including the much anticipated React Compiler and some exciting new features for React Native Expo.React Compiler is a new Babel-enabled plugin that will allow React apps to handle the memoization and re-rendering of components in an application so that developers won't have to use the useMemo() and useCallback() hooks themselves. It will essentially save devs from having to think about it (and save them from the foot guns of implementing it incorrectly), and it is completely optional (not built in to React 19) and can be done via incremental adoption across an already existing application.In related news, Vercel (the creators of Next.js, the most popular React framework in the world) announced they had raised $250m in funding, and the company is currently valued at $3.25b. Just wow! While we can only assume some of that funding will go towards continuing to improve Next.js and their core business of web hosting, they also said they'll continue to invest heavily in their v0 generative UI system, which currently generates copy-and-paste friendly React code using shadcn/ui and Tailwind CSS that people can use in their projects.Another popular JavaScript framework, Astro, made a splash as well with its release of Astro 4.8. In addition to the usual performance enhancements and bug fixes, it added experimental support for Astro Actions with niceties like full type-safety, a single global action file that any client component can access, automatically parsing form request objects using a Zod schema, and progressive enhancement on forms.Finally, the news wraps up with some new features that came out in the Safari 17.5 release.News:Paige - Astro Actions in v4.8Jack - React Compiler, React Compiler Playground, Jack's in-depth video of React CompilerTJ - Vercel raises $250m; valued at $3.25bBonus News:TJ - Safari 17.5What Makes Us Happy this Week:Paige - Parks and Recreation TV seriesJack - How to ADHD bookTJ - NYT gamesThanks as always to our sponsor, the Blue Collar Coder channel on YouTube. You can join us in our Discord channel, explore our website and reach us via email, or Tweet us on X @front_end_fire.Front-end Fire websiteBlue Collar Coder on YouTubeBlue Collar Coder on DiscordReach out via emailTweet at us on X @front_end_fire
In this conversation, Simon and Kitze discuss various topics including Kitze's experience as a React Native developer, his encounter with Gary Vee, and his popular product Sizzy. The conversation revolves around the challenges of building customizable UI components in React Native and the lack of comprehensive libraries. Simon and Kitze discuss their frustrations with existing libraries and the need for better primitives and components. The conversation then shifts to the Benji app and the process of building a native app from scratch. In this conversation, Kitze and Simon discuss various topics related to app development, including the challenges of building a native app with React Native based on an existing Next.js project, the use of Tailwind CSS, and the performance issues on Android. Learn React Native - https://galaxies.devKitzeKitze Twitter: https://twitter.com/thekitze Kitze Website: https://www.kitze.io/ LinksSizzy: https://sizzy.co/Zero to shipped course: https://www.zerotoshipped.com/Benji: https://benji.so/Gluestack: https://gluestack.io/TakeawaysThe choice of libraries in development can greatly impact productivity and the developer experience.The React Native ecosystem offers a variety of tools and libraries that can enhance the development process.The challenges of building and maintaining a successful product or project require dedication, focus, and continuous improvement.The lack of comprehensive UI component libraries in React Native can be frustrating and lead to the need for custom solutions.Having better primitives and components in React Native would make app development easier.Being open about not having all the answers shouldn't discourage people from teaching.Building a native app from scratch can be challenging, especially when transitioning from a web app.Finding the right tech stack and considering the need for a native app early on can save time and effort.Building a native app with React Native can be challenging, especially when trying to maintain consistency between the web and mobile versions.Tailwind CSS offers a wide range of components and resources, making it a popular choice for app development.Android performance can be a pain point in React Native development, requiring optimization and testing on Android devices.Integrating Apple Health data and implementing in-app purchases can be complex tasks that require careful consideration and planning.
Programa shakesperiano para hablar de las razones o sinrazones de usar tailwind CSS. Partimos del provocador artículo de nuestro provocador de cabecera, Andros Fenollosa y que lleva por título: “Razones para no usar Tailwind”. En este artículo Andros analiza algunas razones por las que no deberías usar Tailwind CSS para tus proyectos. Según comenta Andros, es un artículo que ha escrito investigando las opiniones de otros autores y basada también en su experiencia personal. Pero además hablamos de lo contrario: los motivos por los que SÍ deberías usar este exitoso framework. Ponemos por tanto a Tailwind CSS en la balanza, comentando sus fortalezas y aciertos, pero también con un tono crítico sobre los motivos para usarlo, en detrimento de otras soluciones o CSS propio. Por supuesto, también comentamos todo lo que rodea a este framework y de la versión v4 que se encuentra a fecha de hoy, en fase alpha. Tengas buena o mala opinión de Tailwind nos encantará que nos comentes tu opinión y que disfrutes con el episodio.
In Elixir Wizards Office Hours Episode 4, SmartLogic Product Designer Ava Slivkoff joins hosts Sundi Myint and Owen Bickford to discuss the product designer's role in software development. Ava shares her experience navigating client expectations, software design principles, and technical constraints. They explore the integration of design and development workflows and how designers and engineers can collaborate to meet a project's specific needs. The conversation emphasizes the value of cross-functional teams and the synergy that can arise when all team members work in harmony to bring a product to life. Key concepts discussed in the episode: The broad scope of the designer role in web app development The value of an MVP in the iterative software design process Challenges of aligning client expectations with design best practices Pros and cons of leveraging pre-built Tailwind CSS styled components Trends and evolution in web design aesthetics and patterns Leveraging open-source design systems like Tailwind UI Balancing technical constraints with design aspirations Communication and trust-building between designers and engineers Workflows for design handoffs and feedback loops Importance of user flows and mapping the product experience Challenges around the implementation of complex UI elements Benefits of regular design review meetings and syncs Fostering empathy and collaboration across disciplines Links mentioned Figma Dev Mode https://www.figma.com/dev-mode/ Tailwind CSS utility-first CSS framework https://tailwindcss.com/ Tailwind UI https://tailwindui.com/ https://devinai.ai/ Special Guest: Ava Slivkoff.
This week we talk to Adam Wathan, the creator of Tailwind CSS. We go into all the changes for Tailwind CSS v4, discussing how they use Rust and Lightning CSS. Adam also shares about how they've been monetizing the tool and building out Tailwind Labs. We also address some of the heated feedback from the Twitter. https://adamwathan.me/ https://github.com/adamwathan https://twitter.com/adamwathan Episode sponsored By CodeCrafters (https://codecrafters.io/devtoolsfm) 40% Discount! 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
This week's news includes the release of OTP 27.0-rc2 featuring the new json module, Phoenix Live reload's insightful update, and Chris McCord's blog post that surfaces server logs directly in your browser console. We're also discussing the streamlined workflows in Oban Pro 1.4.0, and a deeper discussion on recent Redis licensing changes that have sent ripples through the open-source community. If that's not enough, we've got insights into the refactoring Elixir survey that's underway and we share some innovative tools like the Livebook Smart Cell Template. Tune in for this and more! Show Notes online - http://podcast.thinkingelixir.com/196 (http://podcast.thinkingelixir.com/196) Elixir Community News - https://twitter.com/michalmuskala/status/1770748066976424195 (https://twitter.com/michalmuskala/status/1770748066976424195?utm_source=thinkingelixir&utm_medium=shownotes) – Tweet announcing the release of OTP 27.0-rc2. - https://github.com/erlang/otp/releases/tag/OTP-27.0-rc2 (https://github.com/erlang/otp/releases/tag/OTP-27.0-rc2?utm_source=thinkingelixir&utm_medium=shownotes) – GitHub link to OTP 27.0-rc2 release which includes the json module proposed by Michał Muskała. - https://twitter.com/chris_mccord/status/1772631567568871575 (https://twitter.com/chris_mccord/status/1772631567568871575?utm_source=thinkingelixir&utm_medium=shownotes) – Chris McCord's tweet regarding the update to Phoenix Live Reload. - https://fly.io/phoenix-files/phoenix-dev-blog-server-logs-in-the-browser-console/ (https://fly.io/phoenix-files/phoenix-dev-blog-server-logs-in-the-browser-console/?utm_source=thinkingelixir&utm_medium=shownotes) – Blog post detailing updates to Phoenix Live Reload and server logs in the browser console. - https://twitter.com/sorentwo/status/1771170601153003648 (https://twitter.com/sorentwo/status/1771170601153003648?utm_source=thinkingelixir&utm_medium=shownotes) – Tweet announcing the release of Oban Pro 1.4.0. - https://getoban.pro/releases/pro/v1.4 (https://getoban.pro/releases/pro/v1.4?utm_source=thinkingelixir&utm_medium=shownotes) – Official release notes for Oban Pro 1.4.0. - https://twitter.com/elixirfun/status/1770336803280556486 (https://twitter.com/elixirfun/status/1770336803280556486?utm_source=thinkingelixir&utm_medium=shownotes) – Public service announcement for Logger users to avoid pipes that may be compiled out. - https://elixirforum.com/t/logging-a-silent-performance-killer/3258 (https://elixirforum.com/t/logging-a-silent-performance-killer/3258?utm_source=thinkingelixir&utm_medium=shownotes) – Forum post discussing how purging loggers can aid in performance. - https://twitter.com/ac_alejos/status/1770642763802952021 (https://twitter.com/ac_alejos/status/1770642763802952021?utm_source=thinkingelixir&utm_medium=shownotes) – Andrés Alejos shares his template for SmartCells with Vite JS and Tailwind Css support. - https://github.com/acalejos/kinosmartcelltemplate/ (https://github.com/acalejos/kino_smartcell_template/?utm_source=thinkingelixir&utm_medium=shownotes) – GitHub link to the SmartCell template for Livebook. - https://hexdocs.pm/liveview_playground/0.1.1/readme.html (https://hexdocs.pm/liveview_playground/0.1.1/readme.html?utm_source=thinkingelixir&utm_medium=shownotes) – Documentation for the "simple setup" LiveView server running library. - https://github.com/lubien/liveview_playground (https://github.com/lubien/liveview_playground?utm_source=thinkingelixir&utm_medium=shownotes) – GitHub repository for the library that simplifies setting up a LiveView server. - https://twitter.com/josevalim/status/1770458542849339646 (https://twitter.com/josevalim/status/1770458542849339646?utm_source=thinkingelixir&utm_medium=shownotes) – José Valim's tweet inviting Elixir developers to participate in a survey on refactoring. - https://docs.google.com/forms/d/e/1FAIpQLSey_cf-gsGSbqJ2un4ySlWv7Y3vzzzwZzexnC8sDr7pNPHQ8Q/viewform (https://docs.google.com/forms/d/e/1FAIpQLSey_cf-gsGSbqJ2un4ySlWv7Y3vzzzwZzexnC8sDr7pNPHQ8Q/viewform?utm_source=thinkingelixir&utm_medium=shownotes) – Google Forms survey on refactoring in Elixir conducted by a team of researchers. - https://twitter.com/lucasvegi/status/1770457760469057815 (https://twitter.com/lucasvegi/status/1770457760469057815?utm_source=thinkingelixir&utm_medium=shownotes) – Additional invitation to Elixir developers to contribute to a survey on refactorings. - https://lwn.net/Articles/966133/ (https://lwn.net/Articles/966133/?utm_source=thinkingelixir&utm_medium=shownotes) – Article discussing the change in the Redis license, which no longer qualifies as free software. - https://www.gomomento.com/blog/rip-redis-how-garantia-data-pulled-off-the-biggest-heist-in-open-source-history (https://www.gomomento.com/blog/rip-redis-how-garantia-data-pulled-off-the-biggest-heist-in-open-source-history?utm_source=thinkingelixir&utm_medium=shownotes) – Blog post exploring the history of the Redis project and its recent licensing changes. - https://andrewkelley.me/post/redis-renamed-to-redict.html (https://andrewkelley.me/post/redis-renamed-to-redict.html?utm_source=thinkingelixir&utm_medium=shownotes) – Post announcing a fork of Redis to Redict due to licensing issues. - https://redict.io/ (https://redict.io/?utm_source=thinkingelixir&utm_medium=shownotes) – Official website of Redict, the independent fork of Redis. - http://antirez.com/news/133 (http://antirez.com/news/133?utm_source=thinkingelixir&utm_medium=shownotes) – Creator of Redis, Salvatore Sanfillipo, discussing the transfer of IP and trademark rights. Do you have some Elixir news to share? Tell us at @ThinkingElixir (https://twitter.com/ThinkingElixir) or email at show@thinkingelixir.com (mailto:show@thinkingelixir.com) Find us online - Message the show - @ThinkingElixir (https://twitter.com/ThinkingElixir) - Message the show on Fediverse - @ThinkingElixir@genserver.social (https://genserver.social/ThinkingElixir) - Email the show - show@thinkingelixir.com (mailto:show@thinkingelixir.com) - Mark Ericksen - @brainlid (https://twitter.com/brainlid) - Mark Ericksen on Fediverse - @brainlid@genserver.social (https://genserver.social/brainlid) - David Bernheisel - @bernheisel (https://twitter.com/bernheisel) - David Bernheisel on Fediverse - @dbern@genserver.social (https://genserver.social/dbern) - Cade Ward - @cadebward (https://twitter.com/cadebward) - Cade Ward on Fediverse - @cadebward@genserver.social (https://genserver.social/cadebward)
Joël shares his recent project challenge with Tailwind CSS, where classes weren't generating as expected due to the dynamic nature of Tailwind's CSS generation and pruning. Stephanie introduces a personal productivity tool, a "thinking cap," to signal her thought process during meetings, which also serves as a physical boundary to separate work from personal life. The conversation shifts to testing methodologies within Rails applications, leading to an exploration of testing philosophies, including developers' assumptions about database cleanliness and their impact on writing tests. Avdi's classic post on how to use database cleaner (https://avdi.codes/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/) RSpec change matcher (https://rubydoc.info/gems/rspec-expectations/RSpec%2FMatchers:change) Command/Query separation (https://martinfowler.com/bliki/CommandQuerySeparation.html) When not to use factories (https://thoughtbot.com/blog/speed-up-tests-by-selectively-avoiding-factory-bot) Why Factories? (https://thoughtbot.com/blog/why-factories) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I'm working on a new project, and this is a project that uses Tailwind CSS for its styling. And I ran into a bit of an annoying problem with it just getting started, where I was making changes and adding classes. And they were not changing the things I thought they would change in the UI. And so, I looked up the class in the documentation, and then I realized, oh, we're on an older version of the Tailwind Rails gem. So, maybe we're using...like, I'm looking at the most recent docs for Tailwind, but it's not relevant for the version I'm using. Turned out that was not the problem. Then I decided to use the Web Inspector and actually look at the element in my browser to see is it being overwritten somehow by something else? And the class is there in the element, but when I look at the CSS panel, it does not show up there at all or having any effects. And that got me scratching my head. And then, eventually, I figured it out, and it's a bit of a facepalm moment [laughs]. STEPHANIE: Oh, okay. JOËL: Because Tailwind has to, effectively, generate all of these, and it will sort of generate and prune the things you don't need and all of that. They're not all, like, statically present. And so, if I was using a class that no one else in the app had used yet, it hadn't gotten generated. And so, it's just not there. There's a class on the element, but there's no CSS definition tied to it, so the class does nothing. What you need to do is there's a rake task or some sort of task that you can run that will generate things. There's also, I believe, a watcher that you can run, some sort of, like, server that will auto-generate these for you in dev mode. I did not have that set up. So, I was not seeing that new class have any effect. Once I ran the task to generate things, sure enough, it worked. And Tailwind works exactly how the docs say they do. But that was a couple of hours of my life that I'm not getting back. STEPHANIE: Yeah, that's rough. Sorry to hear. I've also definitely gone down that route of like, oh, it's not in the docs. The docs are wrong. Like, do they even know what they're talking about? I'm going to fix this for everyone. And similarly have been humbled by a facepalm solution when I'm like, oh, did I yarn [laughs]? No, I didn't [laughs]. JOËL: Uh-huh. I'm curious, for you, when you have sort of moments where it's like the library is not behaving the way you think it is, is your default to blame yourself, or is it to blame the library? STEPHANIE: [laughs]. Oh, good question. JOËL: And the follow-up to that is, are you generally correct? STEPHANIE: Yeah. Yep, yep, yep. Hmm, I will say I externalize the blame, but I will try to at least do, like, the basic troubleshooting steps of restarting my server [laughter], and then if...that's as far as I'll go. And then, I'll be like, oh, like, something must be wrong, you know, with this library, and I turn to Google. And if I'm not finding any fruitful results, again, you know, one path could be, oh, maybe I'm not Googling correctly, but the other path could be, maybe I've discovered something that no one else has before. But to your follow-up question, I'm almost, like, always wrong [laughter]. I'm still waiting for the day when I, like, discover something that is an actual real problem, and I can go and open an issue [chuckles] and, hopefully, be validated by the library author. JOËL: I think part of what I heard is that your debugging strategy is basic, but it's not as basic as Joël's because you remember to restart the server [chuckles]. STEPHANIE: We all have our days [laughter]. JOËL: Next time. So, Stephanie, what is new in your world? STEPHANIE: I'm very excited to share this with you. And I recognize that this is an audio medium, so I will also describe the thing I'm about to show you [laughs]. JOËL: Oh, this is an object. STEPHANIE: It is an object. I got a hat [laughs]. JOËL: Okay. STEPHANIE: I'm going to put it on now. It's a cap that says "Thinking" on it [laughs] in, like, you know, fun sans serif font with a little bit of edge because the thinking is kind of slanted. So, it is designy, if you will. It's my thinking cap. And I've been wearing it at work all week, and I love it. As a person who, in meetings and, you know, when I talk to people, I have to process before I respond a lot of the time, but that has been interpreted as, you know, maybe me not having anything to say or, you know, people aren't sure if I'm, you know, still thinking or if it's time to move on. And sometimes I [chuckles], you know, take a long time. My brain is just spinning. I think another funny hat design would be, like, the beach ball, macOS beach ball. JOËL: That would be hilarious. STEPHANIE: Yeah. Maybe I need to, like, stitch that on the back of this thinking cap. Anyway, I've been wearing it at work in meetings. And then, when I'm just silently processing, I'll just point to my hat and signal to everyone what's [laughs] going on. And it's also been really great for the end of my work day because then I take off the hat, and because I've taken it off, that's, like, my signal, you know, I have this physical totem that, like, now I'm done thinking about work, and that has been working. JOËL: Oh, I love that. STEPHANIE: Yeah, that's been working surprisingly well to kind of create a bit more of a boundary to separate work thoughts and life thoughts. JOËL: Because you are working from home and so that boundary between professional life and personal life can get a little bit blurry. STEPHANIE: Yeah. I will say I take it off and throw it on the floor kind of dramatically [laughter] at the end of my work day. So, that's what's new. It had a positive impact on my work-life balance. And yeah, if anyone else has the problem of people being confused about whether you're still thinking or not, recommend looking into a physical thinking cap. JOËL: So, you are speaking at RailsConf this spring in Detroit. Do you plan to bring the thinking cap to the conference? STEPHANIE: Oh yeah, absolutely. That's a great idea. If anyone else is going to RailsConf, find me in my thinking cap [laughs]. JOËL: So, this is how people can recognize Bikeshed co-host Stephanie Minn. See someone walking around with a thinking cap. STEPHANIE: Ooh. thinkingbot? JOËL: Ooh. STEPHANIE: Have I just designed new thoughtbot swag [laughter]? We'll see if this catches on. JOËL: So, we were talking recently, and you'd mentioned that you were facing some really interesting dilemmas when it came to writing tests and particularly how tests interact with your test database. STEPHANIE: Yeah. So, I recently, a few weeks ago, joined a new client project and, you know, one of the first things that I do is start to run those tests [laughs] in their codebase to get a sense of what's what. And I noticed that they were taking quite a long time to get set up before I even saw any progress in terms of successes or failures. So, I was kind of curious what was going on before the examples were even run. And when I tailed the logs for the tests, I noticed that every time that you were running the test suite, it would truncate all of the tables in the test database. And that was a surprise to me because that's not a thing that I had really seen before. And so, basically, what happens is all of the data in the test database gets deleted using this truncation strategy. And this is one way of ensuring a clean slate when you run your tests. JOËL: Was this happening once at the beginning of the test suite or before every test? STEPHANIE: It was good that it was only running once before the test suite, but since, you know, in my local development, I'm running, like, a file at a time or sometimes even just targeting a specific line, this would happen on every run in that situation and was just adding a little bit of extra time to that feedback loop in terms of just making sure your code was working if that's part of your workflow. JOËL: Do you know what version of Rails this project was in? Because I know this was popular in some older versions of Rails as a strategy. STEPHANIE: Yeah. So, it is Rails 7 now, recently upgraded to Rails 7. It was on Rails 6 for a little while. JOËL: Very nice. I want to say that truncation is generally not necessary as of Rails...I forget if it's 5 or 6. But back in the day, specifically for what are now called system tests, the sort of, like, Capybara UI-driven browser tests, you had, effectively, like, two threads that were trying to access the database. And so, you couldn't have your test data wrapped in a transaction the way you would for unit tests because then the UI thread would not have access to the data that had been created in a transaction just for the test thread. And so, people would use tools like Database Cleaner to use a truncation strategy to clear out everything between tests to allow a sort of clean slate for these UI-driven feature specs. And then, I want to say it's Rails 5, it may have been Rails 6 when system tests were added. And one of the big things there was that they now could, like, share data in a transaction instead of having to do two separate threads and one didn't have access to it. And all of a sudden, now you could go back to transactional fixtures the way that you could with unit tests and really take advantage of something that's really nice and built into Rails. STEPHANIE: That's cool. I didn't know that about system tests and that kind of shift happening. I do think that, in this case, it was one of those situations where, in the past, the database truncation, in this case, particular using the Database Cleaner gem was necessary, and that just never got reassessed as the years went by. JOËL: That's one of the classic things, right? When you upgrade a Rails app over multiple versions, and sometimes you sort of get a new feature that comes in for free with the new version, and you might not be aware of it. And some of the patterns in the app just kind of keep going. And you don't realize, hey, this part of the app could actually be modernized. STEPHANIE: So, another interesting thing about this testing situation is that I learned that, you know, if you ran these tests, you would experience this truncation strategy. But the engineering team had also kind of played around with having a different test setup that didn't clean the database at all unless you opted into it. JOËL: So, your test database would just...each test would just keep writing to the database, but they're not wrapped in transactions. Or they are wrapped in transactions, but you may or may not have some additional data. STEPHANIE: The latter. So, I think they were also using the transaction strategy there. But, you know, there are some reasons that you would still have some data persisted across test runs. I had actually learned that the use transactional fixtures config for RSpec doesn't roll back any data that might have been created in a before context hook. JOËL: Yep, or a before all. Yeah, the transaction wraps the actual example, but not anything that happens outside of it. STEPHANIE: Yeah, I thought that was an interesting little gotcha. So, you know, now we had these, like, two different ways to run tests. And I was chatting with a client developer about how that came to be. And we then got into an interesting conversation about, like, whether or not we each expect a clean database in the first place when we write our tests or when we run our tests, and that was an area that we disagreed. And that was cool because I had not really, like, thought about like, oh, how did I even arrive at this assumption that my database would always be clean? I think it was just, you know, from experience having only worked in Rails apps of a certain age that really got onto the Database [laughs] Cleaner train. But it was interesting because I think that is a really big assumption to make that shapes how you then approach writing tests. JOËL: And there's kind of a couple of variations on that. I think the sort of base camp approach of writing Rails with fixtures, you just sort of have, for the most part, an existing set of data that's there that you maybe layer on a few extra things on. But there's base level; you just expect a bunch of data to exist in your test database. So, it's almost going off the opposite assumption, where you can always assume that certain things are already there. Then there's the other extreme of, like, you always assume that it's empty. And it sounds like maybe there's a position in the middle of, like, you never know. There may be something. There may not be something, you know, spin the wheel. STEPHANIE: Yeah. I guess I was surprised that it, you know, that was just a question that I never really asked myself prior to this conversation, but it could feel like different testing philosophies. But yeah, I was very interested in this, you know, kind of opinion that was a little bit different from mine about if you assume that your database, your test database, is not clean, that kind of perhaps nudges you in the direction of writing tests that are less coupled to the database if they don't need to be. JOËL: What does coupling to the database mean in this situation? STEPHANIE: So, I'm thinking about Rails tests that might be asserting on a change in database behavior, so the change matcher in RSpec is one that I see maybe sometimes used when it doesn't need to be used. And we're expecting, like, account to have changed the count of the number of records on it for a model have changed after doing some work, right? JOËL: And the change matcher from RSpec is one that allows you to not care whether there are existing records or not. It sort of insulates you from that. STEPHANIE: That's true. Though I guess I was thinking almost like, what if there was some return value to assert on instead? And would that kind of help you separate some side effects from methods that might be doing too much? And kind of when I start to see tests that have both or are asserting on something being returned, and then also something happening, that's one way of, like, figuring out what kind of coupling is going on inside this test. JOËL: It's the classic command-query separation principle from object-oriented design. STEPHANIE: I think another one that came to mind, another example, especially when you're talking about system tests, is when you might be using Capybara and you end up...maybe you're going through a flow that creates a record. But from the user perspective, they don't actually know what's going on at the database level. But you could assert that something was created, right? But it might be more realistic at that level of abstraction to be asserting some kind of visual element that had happened as a result of the flow that you're testing. JOËL: Yeah. I would, in fact, go so far as to say that asserting on the state of your database in a system test is an anti-pattern. System tests are sort of, by design, meant to be all about user behavior trying to mimic the experience of a user. And a user of a website is not going to be able to...you hope they're not able to SSH into [chuckles] your database and check the records that have been created. If they can, you've got another problem. STEPHANIE: I wonder if you could take this idea to the extreme, though. And do you think there is a world where you don't really test database-level concerns at all if you kind of believe this idea that it doesn't really matter what the state of it should be? JOËL: I guess there's a few different things on, like, what it matters about the state of it because you are asserting on its state sort of indirectly in a sort of higher level integration test. You're asserting that you see certain things show up on the screen in a system test. And maybe you want to say, "I do certain tasks, and then I expect to see three items in an unordered list." Those three items probably come from the database, although, you know, you could have it where they come from an API or something like that. So, the database is an implementation level. But if you had random data in your database, you might, in some tests, have four items in the list, some tests have five. And that's just going to be a flaky test, and that's going to be incredibly painful. So, while you're not asserting on the database, having control over it during sort of test setup, I think, does impact the way you assert. STEPHANIE: Yeah, that makes sense. I was suddenly just thinking about, like, how that exercise can actually tell you perhaps, like, when it is important to, in your test setup, be persisting real records as opposed to how much you can get away with, like, not interacting with it because, like, you aren't testing at that integration level. JOËL: That brings up a good point because a lot of tests probably you might need models, but you might not need persisted models to interact with them, if you're testing a method on a model that just does things based off its internal state and not any of the ActiveRecord database queries, or if you have some other service or something that consumes a model that doesn't necessarily need to query. There's a classic blog post on the thoughtbot blog about when you should not reuse. There's a classic blog post on the thoughtbot blog about when not to use FactoryBot. And, you know, we are the makers of FactoryBot. It helps set up records in your database for testing. And people love to use it all the time. And we wrote an article about why, in many cases, you don't need to create something into the database. All you need is just something in memory, and that's going to be much faster than using FactoryBot because talking to the database is expensive. STEPHANIE: Yeah, and I think we can see that in the shift from even, like, fixtures to factories as well, where test data was only persisted as needed and as needed in individual tests, rather than seeding it and having all of those records your entire test run. And it's cool to see that continuing, you know, that idea further of like, okay, now we have this new, popular tool that reduce some of that. But also, in most cases, we still don't need...it's still too much. JOËL: And from a performance perspective, it's a bit of a see-saw in that fixtures are a lot faster because they get inserted once at the beginning of your test run. So, a SQL execution at the beginning of a test run and then every test after that is just doing its thing: maybe creating a record inside of a transaction, maybe not creating any records at all. And so, it can be a lot faster as opposed to using FactoryBot where you're creating records one at a time. Every create call in a test is a round trip to the database, and those are expensive. So, FactoryBot tests tend to be more expensive than those that rely on fixtures. But you have the advantage of more control over what data is present and sort of more locality because you can see what has been created at the test level. But then, if you decide, hey, this is a test where I can just create records in memory, that's probably the best of all worlds in that you don't need anything created ahead with fixtures. You also don't need anything to be inserted using FactoryBot because you don't even need the database for this test. STEPHANIE: I'm curious, is that the assumption that you start with, that you don't need a persisted object when you're writing a basic unit test? JOËL: I think I will as much as possible try not to need to persist and only if necessary use persist records. There are strategies with FactoryBot that will allow you to also, like, build stubbed or just build in memory. So, there's a few different variations that will, like, partially do things for you. But oftentimes, you can just new up an object, and that's what I will often start with. In many cases, I will already know what I'm trying to do. And so, I might not go through the steps of, oh, new up an object. Oh no, I'm getting a I can't do the thing I need to do. Now, I need to write to the database. So, if I'm testing, let's say, an ActiveRecord scope that's filtering down a series of records, I know that's a wrapper around a database query. I'm not going to start by newing up some records and then sort of accidentally discovering, oh yeah, it does write to the database because that was pretty clear to me from the beginning. STEPHANIE: Yeah. Like, you have your mental shortcuts that you do. I guess I asked that question because I wonder if that is a good heuristic to share with maybe developers who are trying to figure out, like, should they create persisted records or, you know, use just regular instance in memory or, I don't know, even [laughs] use, like, a double [laughs]? JOËL: Yeah, I've done that quite a bit as well. I would say maybe my heuristic is, is the method under test going to need to talk to the database? And, you know, I may or may not know that upfront because if I'm test driving, I'm writing the test first. So, sometimes, maybe I don't know, and I'll start with something in memory and then realize, oh, you know, I do need to talk to the database for this. And this is for unit tests, in particular. For something more like an integration test or a system test that might require data in the database, system tests almost always do. You're not interacting with instances in memory when you're writing a system test, right? You're saying, "Given the database state is this when I visit this URL and do these things, this page reacts in such and such a way." So, system tests always write to the database to start with. So, maybe that's my heuristic there. But for unit tests, maybe think a little bit about does your method actually need to talk to the database? And maybe even almost give yourself a challenge. Can I get away with not talking to the database here? STEPHANIE: Yeah, I like that because I've certainly seen a lot of unit tests that are integration tests in disguise [laughs]. JOËL: Isn't that the truth? So, we kind of opened up this conversation with the idea of there are different ways to manage your database in terms of, do you clean or not clean before a test run? Where did you end up on this particular project? STEPHANIE: So, I ended up with a currently open PR to remove the need to truncate the database on each run of the test suite and just stick with the transaction for each example strategy. And I do think that this will work for us as long as we decide we don't want to introduce something like fixtures, even though that is actually also a discussion that's still in the works. But I'm hoping with this change, like, right now, I can help people start running faster tests [chuckles]. And should we ever introduce fixtures down the line, then we can revisit that. But it's one of those things that I think we've been living with this for too long [laughs]. And no one ever questioned, like, "Oh, why are we doing this?" Or, you know, maybe that was a need, however many years ago, that just got overlooked. And as a person new to the project, I saw it, and now I'm doing something about it [laughs]. JOËL: I love that new person energy on a project and like, "Hey, we've got this config thing. Did you know that we didn't need this as of Rails 6?" And they're like, "Oh, I didn't even realize that." And then you add that, and it just moves you into the future a little bit. So, if I understand the proposed change, then you're removing the truncation strategy, but you're still going to be in a situation where you have a clean database before each test because you're wrapping tests in transactions, which I think is the default Rails behavior. STEPHANIE: Yeah, that's where we're at right now. So, yeah, I'm not sure, like, how things came to be this way, but it seemed obvious to me that we were kind of doing this whole extra step that wasn't really necessary, at least at this point in time. Because, at least to my knowledge [laughs], there's no data being seeded in any other place. JOËL: It's interesting, right? When you have a situation where this was sort of a very popular practice for a long time, a lot of guides mentioned that. And so, even though Rails has made changes that mean that this is no longer necessary, there's still a long tail of apps that will still have this that may be upgraded later, and then didn't drop this, or maybe even new apps that got created but didn't quite realize that the guide they were following was outdated, or that a best practice that was in their head was also outdated. And so, you have a lot of apps that will still have these sort of, like, relics of the past. And you're like, "Oh yeah, that's how we used to do things." STEPHANIE: So yeah, thanks, Joël, for going on this journey with me in terms of, you know, reassessing my assumptions about test databases. I'm wondering, like, if this is common, how other people, you know, approach what they expect from the test database, whether it be totally clean or have, you know, any required data for common flows and use cases of your system. But it does seem that little in between of, like, maybe it is using transactions to reset for each example, but then there's also some persistence that's happening somewhere else that could be a little tricky to manage. JOËL: On that note, shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeeeeee!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at: referrals@thoughtbot.com with any questions.
In this conversation, Ryan Carson discusses the future of learning to code and the impact of AI on development. He shares insights on using AI as a personal tutor and the benefits of running AI models locally. The conversation also touches on privacy concerns and the integration of AI in Apple products. Ryan Carson also talks about his experience building an AI-based company and the use of APIs in deploying AI apps. In this conversation, Ryan Carson discusses his journey of learning TypeScript and Next.js, highlighting the ease of using these technologies. He also emphasizes the power of Tailwind CSS in simplifying front-end development. The conversation then shifts to the role of designers and developers, with a focus on the importance of the developer experience. Ryan shares insights on product thinking and vetting ideas, emphasizing the need to solve real problems and start with the user interface. The conversation also touches on the acquisition process and the benefits of building sustainable businesses. Finally, Ryan discusses the democratization of AI and the opportunities it presents for entrepreneurs. ----Credits:Hosted by Michael Smith and Ryan RoghaarProduced by Ryan RoghaarTheme music: "Perfect Day" by OPM The Carton:https://medium.com/the-carton-by-eggsFeature with Zack Chmeis of Straight Method up now! https://medium.com/the-carton-by-eggs/zack-chmeis-35dae817ac28 The Eggs Podcast Spotify playlist:bit.ly/eggstunes The Plugs:The Showeggscast.com@eggshow on twitter and instagramOn iTunes: itun.es/i6dX3pCOn Stitcher: bit.ly/eggs_on_stitcherAlso available on Google Play Music! Mike "DJ Ontic" shows and infodjontic.com@djontic on twitter Ryan Roghaarhttp://rogha.ar
Mark Lawlor, the creator of NativeWind, joins Simon on the Rocketship podcast to discuss the challenges of styling in React Native and the solutions provided by NativeWind. Mark explains the limitations of the StyleSheet API in React Native and how NativeWind addresses these limitations by bringing CSS concepts to React Native. He also highlights the benefits of using Tailwind CSS with NativeWind and the power of the NativeWind library in enabling complex styles and theming in React Native applications.Learn React Native - https://galaxies.devMark LawlorMark Twitter: https://twitter.com/mark__lawlorMark Github: https://github.com/marklawlorNativeWind: https://www.nativewind.dev/LinksNativecn-UI: https://github.com/Mobilecn-UI/nativecn-uiTakeawaysThe StyleSheet API in React Native provides basic styling primitives but lacks support for complex styles and state-based styling.Styling in React Native becomes more complex as the app grows and needs to support different states, platforms, and devices.NativeWind is a styling system for React Native that brings CSS concepts to React Native, allowing developers to use Tailwind CSS and leverage the power of CSS variables, media queries, and other CSS features.NativeWind enables developers to write styles in a familiar CSS syntax and provides advanced features like transition classes, platform-specific themes, and support for CSS variables and calculations. CSS variables can be used for theming and sub-theming in Native Wind.Standardization and compatibility with other libraries and platforms are important goals for NativeWind.Future plans for NativeWind include introducing new primitives, improving animations, and supporting other styling libraries.
Today we discuss Vercel's latest offering: AI SDK 3.0, which streams React components from LLMs to deliver richer user experiences than text-only chatbots. Then we dive into the world of modern styling as Tailwind CSS drops its latest gem - version 4.0, now open source for community exploration. And then finally we talk about the latest improvements in Safari 17.4. Plus, stay tuned for Elon Musk's legal saga with OpenAI and the Indian government's new stance on AI model updates.News:Paige - Tailwind CSS v4 goes open sourceJack - Vercel's AI SDK 3.0 with Generative UI supportTJ - Safari 17.4 upgradesBonus News:Elon Musk Suing OpenAIIndia requiring government approval for AI model updatesWhat Makes Us Happy this Week:Paige - Springtime is comingJack - Warrior TV seriesTJ - Dune movieThanks as always to our sponsor, the Blue Collar Coder channel on YouTube. You can join us in our Discord channel, reach out to us via email or Tweet us on X @front_end_fire.Blue Collar Coder on YouTubeBlue Collar Coder on DiscordReach out via emailTweet at us on X @front_end_fire
In this episode of Whiskey Web and Whatnot hosts Robbie and Charles discuss various aspects of coding and web development with special guest, experienced front-end Engineer, Amera White. She shares her personal journey of transitioning from a career in aviation to the tech sector and the experiences that deepened her passion for web accessibility. They highlight the challenges for neurodivergent individuals on the web and discuss how to improve this through better design and coding practices, emphasizing the importance of personalization and empathy in development. The discussions also include a walkthrough on various coding topics such as the use of TypeScript, Tailwind CSS, dealing with neurodivergent audiences and the benefits of using accessible web development strategies. Key Takeaways [00:19] - Getting to Know the Guest: Amera White [01:05] - Whiskey Tasting: Teeling Single Grain [04:31] - Whiskey Rating and Discussion [07:00] - Hot Takes: Tech Edition [15:01] - Understanding Neurodivergence [18:27] - Improving Website Accessibility for Neurodivergent Users [28:02] - The Power of Netflix and Platform Accessibility [28:23] - The Struggles of Web Accessibility [29:16] - The Importance of Incorporating Accessibility in the Process [30:06] - The Challenges of Corporate Responsibility [30:37] - The Impact of Lawsuits and Regulations on Web Accessibility [31:19] - The Benefits of Accessibility for Everyone [31:54] - The Disconnect Between Business and Employee Experience [32:09] - The Importance of Teaching Accessibility Early [32:49] - The Role of SEO in Promoting Accessibility [33:21] - The Impact of AI on Accessibility [38:49] - The Challenges and Fun of Working in TSA [48:06] - The Transition from TSA to Coding [55:51] - The Importance of Beyoncé in Web Design Links Amera White Twitter Amera White LinkedIn Beyoncé's Internet Connect with our hosts Robbie Wagner Chuck Carpenter Subscribe and stay in touch Apple Podcasts Spotify Google Podcasts Whiskey Web and Whatnot Whiskey Web and Whatnot Merch Enjoying the podcast and want us to make more? Help support us by picking up some of our fresh merch at https://whiskey.fund/. --- Send in a voice message: https://podcasters.spotify.com/pod/show/whiskey-web-and-whatnot/message
In this episode of the Laravel Podcast, we talk about the recent announcement of hiring a new head of engineering at Laravel and the impact it will have on the future of Laravel. We also dive into the upcoming conferences and events, including Laracon EU, Laracon US, and Laracon India. Additionally, we talk about Typesense, a potential alternative to Meilisearch and Algolia for self-hosted search functionality.Taylor Otwell's Twitter - https://twitter.com/taylorotwellMatt Stauffer's Twitter - https://twitter.com/stauffermattLaravel Twitter - https://twitter.com/laravelphpLaravel Website - https://laravel.com/Tighten.co - https://tighten.com/VP/Head of Engineering at Laravel - https://frequent-pick-a8d.notion.site/VP-Head-of-Engineering-at-Laravel-149b566a670841f7a74b3e904e261693Laracon EU - https://laracon.eu/Laracon US - https://laracon.us/Laravel Herd - https://herd.laravel.com/Laravel 11 - https://laravel.com/docs/master/releasesLaravel Live Denmark -https://laravellive.dk/Laravel Live UK - https://laravellive.uk/Laracon India - https://laracon.in/Caleb Porzio Twitter - https://twitter.com/calebporzioLivewire: https://laravel-livewire.com/ThePrimeagen Twitter - https://twitter.com/ThePrimeagenThe Factory - https://www.thefactoryindeepellum.com/Eric Barnes Twitter - https://twitter.com/ericlbarnesJoe Dixon Twitter - https://twitter.com/_joedixonJames Brooks - https://twitter.com/jbrooksukFreek VAn der Herten Twitter - https://twitter.com/freekmurze?lang=enPeter Suhm Twitter - https://twitter.com/petersuhmMichele Hansen Twitter - https://twitter.com/mjwhansenLaracon AU Twitter - https://twitter.com/LaraconAULaravel Scout - https://laravel.com/docs/10.x/scoutTypesense - https://typesense.org/Algolia -https://algolia.com/Meilisearch - https://www.meilisearch.com/Elasticsearch - https://www.elastic.co/elasticsearchLaravel Sail - https://laravel.com/docs/10.x/sailLaravel Vapor - https://vapor.laravel.com/Early Vapor Tweet - https://x.com/taylorotwell/status/1748782542663131442?s=20Tailwind CSS - https://tailwindcss.com/-----Editing and transcription sponsored by Tighten.
Vercel provides a cloud platform to rapidly deploy web projects, and they develop the highly successful Next.js framework. The company recently made headlines when they announced v0 which is a generative AI tool to create React code from text prompts. The generated code uses open-source tools like Tailwind CSS and shadcn/ui. Lee Robinson is the The post Vercel AI with Lee Robinson appeared first on Software Engineering Daily.
Vercel provides a cloud platform to rapidly deploy web projects, and they develop the highly successful Next.js framework. The company recently made headlines when they announced v0 which is a generative AI tool to create React code from text prompts. The generated code uses open-source tools like Tailwind CSS and shadcn/ui. Lee Robinson is the The post Vercel AI with Lee Robinson appeared first on Software Engineering Daily.
HTML All The Things - Web Development, Web Design, Small Business
Three web development topics grace this episode's contents as Matt and Mike discussed the seemingly never ending tech layoffs that keep making headlines. The guys also discussed HTMX, a lightweight UI library that has taken off in popularity recently to the pleasure of some and dismay of others - is HTMX the "Tailwind CSS" of backend technology? Finally the guys discussed how to handle your family and friends approaching you with their ideas and wanting you to work on them. We've all been there, you're at a family gathering, and someone wants to work with you on their new idea that's sure to "take the world by storm" - or in a twist, sometimes they just want you to be their mentor...what do you do if you just don't have the time? Thanks to this episode's sponsor Magic Mind. Use our link (https://www.magicmind.com/JANhtml) and promo code (HTML20) for up to 75% off in January 2024! After January? Our code is still good for up to 20% off! Show Notes: https://www.htmlallthethings.com/podcasts/more-tech-layoffs-htmx-is-real-friends-with-ideas Scrimba Discount: https://tinyurl.com/ScrimbaHATT
Happy New Year! This week, we ease into 2024 with a variety of topics. Adam is building a new design system at work using Svelte and Tailwind CSS. Ben wonders if there's any way to create an "Overview Effect" in the world of programming. And Tim discusses a few philosophical fallacies in a work context: planning fallacy, overconfidence effect, automation bias, and plan continuation bias (aka, the sunk cost fallacy).Follow the show and be sure to join the discussion on Discord! Our website is workingcode.dev and we're @WorkingCodePod on Twitter and Instagram. New episodes drop weekly on Wednesday.And, if you're feeling the love, support us on Patreon.With audio editing and engineering by ZCross Media.Full show notes and transcript here.
In this episode, Adam and Ben talk through the Tailwind Labs business model. Is Tailwind UI the best way for the company to make money? Or is there a different model where incentives are better aligned with growing the Tailwind CSS community as a whole? One potential model is offering a marketplace for templates and UI kits. Timestamps(00:00) - Black Friday (04:58) - Continuously improving stuff (12:50) - Tuple Rooms (16:15) - Revisiting the Tailwind Labs business model (27:28) - Brainstorming a Tailwind CSS marketplace (39:54) - Should Tailwind Labs build a SaaS? LinksAdam on TwitterBen on Twitter
In this episode, Adam and Ben catch up on recent events at Tailwind Labs and Tuple. Adam spoke at Rails World and the impromptu Tailwind CSS meetup in Amsterdam. Ben shares his learnings from some recent feature launches at Tuple.Timestamps(00:00) - Burpees (02:47) - Rails World + Tailwind CSS Amsterdam meetup (11:27) - Launching Tuple Triggers (25:57) - Tuple App Veil LinksAdam on TwitterBen on TwitterAdam Wathan - Tailwind CSS: It looks awful, and it works - Rails World 2023Tuple TriggersTuple App Veil
In today's episode, Sundi and Owen are joined by Yordis Prieto and Stephen Chudleigh to compare notes on HTTP requests in Elixir vs. Ruby, JavaScript, Go, and Rust. They cover common pain points when working with APIs, best practices, and lessons that can be learned from other programming languages. Yordis maintains Elixir's popular Tesla HTTP client library and shares insights from building APIs and maintaining open-source projects. Stephen has experience with Rails and JavaScript, and now works primarily in Elixir. They offer perspectives on testing HTTP requests and working with different libraries. While Elixir has matured, there is room for improvement - especially around richer struct parsing from HTTP responses. The discussion highlights ongoing efforts to improve the developer experience for HTTP clients in Elixir and other ecosystems. Topics Discussed in this Episode HTTP is a protocol - but each language has different implementation methods Tesla represents requests as middleware that can be modified before sending Testing HTTP requests can be a challenge due to dependence on outside systems GraphQL, OpenAPI, and JSON API provide clear request/response formats Elixir could improve richer parsing from HTTP into structs Focus on contribution ergonomics lowers barriers for new participants Maintainers emphasize making contributions easy via templates and clear documentation APIs drive adoption of standards for client/server contracts They discuss GraphQL, JSON API, OpenAPI schemas, and other standards that provide clear request/response formats TypeScript brings types to APIs and helps to validate responses Yordis notes that Go and Rust make requests simple via tags for mapping JSON to structs Language collaboration shares strengths from different ecosystems and inspires new libraries and tools for improving the programming experience Links Mentioned Elixir-Tesla Library: https://github.com/elixir-tesla/tesla Yordis on Github: https://github.com/yordis Yordis on Twitter: https://twitter.com/alchemist_ubi Yordis on LinkedIn: https://www.linkedin.com/in/yordisprieto/ Yordis on YouTube: https://www.youtube.com/@alchemistubi Stephen on Twitter: https://twitter.com/stepchud Stephen's projects on consciousness: https://harmonicdevelopment.us Owen suggests: Http.cat HTTParty: https://github.com/jnunemaker/httparty Guardian Library: https://github.com/ueberauth/guardian Axios: https://axios-http.com/ Straw Hat Fetcher: https://github.com/straw-hat-team/nodejs-monorepo/tree/master/packages/%40straw-hat/fetcher Elixir Tesla Wiki: https://github.com/elixir-tesla/tesla/wiki HTTPoison: https://github.com/edgurgel/httpoison Tesla Testing: https://hexdocs.pm/tesla/readme.html#testing Tesla Mock: https://hexdocs.pm/tesla/Tesla.Mock.html Finch: https://hex.pm/packages/finch Mojito: https://github.com/appcues/mojito Erlang Libraries and Frameworks Working Group: https://github.com/erlef/libs-and-frameworks/ and https://erlef.org/wg/libs-and-frameworks Special Guests: Stephen Chudleigh and Yordis Prieto.
In this episode, Jason, Chris, and Andrew are live at Rails World 2023 in Amsterdam, where they are joined by Adam Wathan, creator of Tailwind CSS. Today, they discuss the well-organized event, their excitement about being part of the Rails community, and Adam's talk on making the most of Tailwind CSS for Rails developers. The conversation dives into topics like using Inertia with Rails, the challenges of creating accessible components, and the management of open source projects, all while shedding light on the nuances of web development. They also explore the pros and cons of using React and Vue.js in their projects, highlighting the flexibility and evolution of these frontend technologies. Press download now to hear much more! [00:01:01] Adam talks about being at his first-ever Rails conference he's attending.[00:02:00] Adam discusses “Tailwind Connect,” an event that started as a team retreat and grew into a successful meetup. [00:04:38] Jason asks about Adam's upcoming talk at the conference. He discusses the content of his talk, focusing on helping Rails developers make the most of TailwindCSS.[00:06:19] Jason inquires about using Laravel with Inertia, and Adam explains the benefits of Inertia, including how it preserves the monolithic feel of Rails while using React or Vue for the view layer. [00:10:46] Chris and Adam discuss the history and challenges of using Inertia in Rails and its potential advantages. They talk about the limitations of web components and styling issues when using Tailwind CSS.[00:13:50] Adam discusses the need for unstyled primitives with Stimulus or similar solutions to support keyboard navigation and accessibility, and the complexities of handling various scenarios and the need for continuous maintenance.[00:16:07] Chris appreciates the high quality of Tailwind CSS, and they discuss the challenge of managing criticism and maintaining high standards for open source projects. [00:19:02] Adam shares the company's high standards for quality and handling GitHub issues, the ideal number of GitHub issues, and the importance of triaging effectively. [00:21:15] We hear how issues are categorized, including bug reports and feature requests. Chris and Adam discuss how to handle feature requests in GitHub repositories. The conversation shifts to the challenges of managing open source project, including handling issues and feature requests. [00:27:29] The discussion turns to implementing interactive frontend components without React, focusing on accessibility and keyboard navigation, and Adam brings up the “curse of React.” Then, Adam discusses the challenges of building frontend components in the context of a Rails project. [00:33:32] The conversation shifts to a comparison of React and Vue.js and why Adam leans towards using React in recent projects. Adam explains that his shift towards react began when they needed interactive components for Tailwind UI and React was chosen due to better support and expertise in the team. [00:35:35] Adam discusses the benefits of creating smaller components in React compared to Vue due to lower extraction costs. He also touches on the evolution of the React and Vue ecosystems, where it appears that Vue often follows in Reacts footsteps. [00:39:42] How much Laravel does Adam get to do these days? Adam mentions that while he doesn't work with Laravel much these days, it is still the main technology for their primary wHoneybadger Honeybadger is an application health monitoring tool built by developers for developers.Disclaimer: This post contains affiliate links. If you make a purchase, I may receive a commission at no extra cost to you.
Hosts Dan Ivovich, Owen Bickford, and Sundi Myint kick off the 11th season of the Elixir Wizards podcast. This season's theme is “Branching Out from Elixir,” which expands the conversation to compare notes with experts from other communities; they discuss their experiences with other languages like JavaScript, PHP, Python, Ruby, C#, Go, and Dart before and after learning Elixir. This season's conversations will illuminate how problems are solved in different languages vs. Elixir; upcoming episode topics teased include education, data processing, deployment strategies, and garbage collection; the hosts express excitement for conversations analyzing similarities and differences between communities. Topics Discussed in this Episode Season 11 branches out from Elixir to compare notes with other programming communities Sundi, Owen, and Dan introduce the season theme and their interest in exploring these conversations The hosts compare their experiences with PHP, JavaScript, Python, Ruby, C#, Go, Dart and Elixir The Wizards compare and contrast differences in their personal experience building similar things with different languages Dan dreams in Ruby and uses it for quick prototypes Comparing problem-solving approaches across languages will reframe perspectives Upcoming episodes explore data processing workflows, machine learning, and game development Pop Quiz: Who's that Pokémon... or language, or framework? Links Mentioned https://smartlogic.io/ https://codepen.io/ https://i.redd.it/0lg7979qtr511.jpg
We are thrilled to announce the third session of our new Incubator Program. If you have a business idea that involves a web or mobile app, we encourage you to apply to our eight-week program. We'll help you validate your market opportunity, experiment with messaging and product ideas, and move forward with confidence toward an MVP. Learn more and apply at tbot.io/incubator. We look forward to seeing your application in our inbox! Quincy Larson is the founder of freeCodeCamp.org, which helps people learn to code for free by creating thousands of videos, articles, and interactive coding lessons–all freely available to the public. Quincy shares his journey from transitioning from teaching into software development, how freeCodeCamp was born out of his desire to make educational systems more efficient through coding, and discusses the early challenges of bootstrapping the platform, and how it has now grown into a 501(c)(3) nonprofit organization. Quincy and hosts Victoria and Will, discuss the platform's technical architecture, especially their global server distribution and decision to rely on volunteer-led translation efforts rather than machines to ensure both the quality and human touch of their educational content. He also talks about the state of free and low-cost degree programs, the student loan crisis, and the ongoing debate between traditional computer science degrees and coding bootcamps. Free Code Campi (https://www.freecodecamp.org/) Follow Free Code Camp on LinkedIn (https://www.linkedin.com/school/free-code-camp/) or X (https://twitter.com/freeCodeCamp). Follow Quincy Larson on LinkedIn (https://www.linkedin.com/in/quincylarson/) or X (https://twitter.com/ossia). Follow thoughtbot on X (https://twitter.com/thoughtbot) or LinkedIn (https://www.linkedin.com/company/150727/). Become a Sponsor (https://thoughtbot.com/sponsorship) of Giant Robots! Transcript: WILL: This is the Giant Robot Smashing Into Other Giant Robots Podcast, where we explore the design, development, and business of great products. I'm your host, Will Larry. VICTORIA: And I'm your other host, Victoria Guido. And with me today is Quincy Larson, Host of the freeCodeCamp Podcast, Teacher, and Founder of freecodecamp.org, a community of people around the world who are learning to code together. Quincy, thank you for joining us. QUINCY: Yeah, thanks for having me, Will and Victoria. VICTORIA: Yeah, thank you for being here. So, I understand that you made a big shift personally for yourself from California to Texas. How has that been for your family and for, you know, as a founder who is running a nonprofit? QUINCY: Yeah, things are going great. It was a big move. We had some kids, and it was difficult to find, like, a good place to live in California that didn't cost, like, millions of dollars [laughter]. And so, at least in the San Francisco Bay Area, we were living in East Bay. I grew up here in Texas and Oklahoma. And I was like, well, maybe we could go back to the southwest, and so we did that. And we were able to come back and comfortably purchase a home here in Plano, Texas. We were able to find one that was, like, really close to a really good public school system. And so, every morning, I'm able to walk my kids to school. And I'd say that Texas has been a great change from California, where I lived for seven or eight years over there. And I love California. Texas has a lot of great things about it, too. It is a little bit hotter than California. It doesn't quite have California's Mediterranean climate, but it's been great here. I like it. And I would say if people are thinking about moving to Texas from California, there are definitely some really good spots of Texas that I think they'll feel really comfortable in. WILL: That's awesome, yeah. I'm originally from Louisiana. So, you're bringing back, like, memories of me growing up, always going to Texas and stuff. And I know exactly where Plano is, so that's amazing. How has it been with your kids? Because we were talking, and you said your kid recently started school. How's that been? QUINCY: Yeah, so my daughter started school a couple of years ago, and she just turned eight. And my son he's turning six this weekend. He just started kindergarten. We were having him take classes at the YMCA some pre-school. And he went from doing that for the first few hours of the day, and then we'd pick him up and bring him home and eat lunch with him and everything. And now he's got to go to school from, like, 7:00 a.m. to, like, 3:00 p.m. And he's been freaking out, like, "Why is school so long? Oh my goodness, I'm so tired all the time," [laughs]. So, he didn't realize that school would be as involved a process. He was all excited. But now he's complaining about, like, just the sheer length of school. But meanwhile, my wife and I we're just, like, celebrating because we actually have some time around the house where we can get work done without having kids running around causing chaos [laughs]. So yeah, I think he's adapting. He's making friends. We're doing playdates and stuff, and he's having fun. It's just a transition, you know. But it is nice because before, I would walk my daughter to school, and that was a very quick, 10-minute round trip, and then I'd walk my son to school. And that was, like, an hour round trip because we walked all the way to the YMCA. And I would do that to kind of toughen him up and get him walking a lot. It was a huge chunk of time. And now I can just grab both, one [inaudible 4:04] hand in each hand, and walk them to school, and drop them off, and be done with it and get back to work. So, it's definitely nice having both at the same school. VICTORIA: I love the work-life balance and that you were able to find and live somewhere that's affordable and has enough space for your family. And I wonder if we can draw a connection there between achieving that kind of lifestyle and learning to code, and what the mission of freeCodeCamp is for you, and what that means to people and changing careers. QUINCY: Absolutely. So, my background is in teaching. And I was a teacher and a school director at schools here in the U.S. and over in China. And that involved me being on campus, like working directly with my admin staff, with my instructional staff, and working directly with students. So, working remotely was kind of, like, a foreign concept way back in, like, 2010 or so 2011 when I started my transition into working as a software developer. But being able to work remotely has been a real game changer for me. And also, you can imagine, like, being a developer, you can command much larger compensation, and you have a lot more career options than being a teacher or a school director. So, it's given me a lot of agency in what I wanted to do. Even before, you know, starting freeCodeCamp, when I was working as a software developer and doing freelance work and stuff, I was able to do everything remotely. And that just gave me a ton of flexibility. So, the way that I learned to code personally was I wanted to help our school be more efficient. A lot of our teachers, a lot of our admin they were spending all day kind of chained to their desk entering information into computers for compliance reasons, to be able to produce great reports, to be able to produce attendance reports, immigration documents, all those things. And I just thought, like, is there a way that maybe I could automate some of this? And I didn't know anything about programming. I was about 31 years old. I was just sitting at my desk, and I just started kind of, like, Googling around and learning some very basic programming. And with that, over the course of a few months, I was really able to transform how the school ran. And we, like, won an award. And, like, a whole bunch of the students were, like, having a great time because they were spending so much more time with their teachers. And they were like, "Hey..." like, telling all their friends and family to transfer into the school. So, it was a massive success. And I thought, wow, if one person who doesn't even really know that much about programming can effect such a change with just a little bit of programming skills, imagine what I could do if I actually learned to code properly, so [chuckles] I did that. I spent about nine months going to hackathons every weekend, and reading a lot of books, and using a lot of open courses online, like from MIT, from Stanford, and I kind of taught myself to code for free. And then, I was able to get a job as a developer at a mid-size tech startup in California. And from there, I just learned more and more, and it was amazing. And it was an amazing transformation for me personally. And I thought, well, I want to help other people be able to do this because I know so many people out there would like to be working in a field where they have more conversation, a higher degree of control. They get to do creative work instead of, you know, tedious work. As a developer, you're constantly doing new stuff because code is infinitely reproducible. So, you could always just go back to code you've previously written if you needed to solve the same problem again. So, you're always in this kind of learning mindset. You're always in this problem-solving mindset. And it's really thrilling. It's just great, impactful work. So, I wanted to help more people be able to do that, hence starting a bunch of different projects that people didn't care about and then eventually starting a project that people did care about, which is freeCodeCamp. And since then, just kind of leading this project in trying to help as many people as possible learn to code. WILL: So, I was looking at your website. And I didn't even realize this until I was doing more research for the podcast, but you have over 10,000 tutorials, and they're in different categories. I saw you just recently released one on finance, which I actually bookmarked it because I'm going to go through it and look at it. You help more than a million people every day. So, how was it when you first started out? Like, how was, I guess, you could say, the grind? How was it in those early days? QUINCY: I'm a big advocate of, you know, for work-life balance, but, like, I kind of, like, exclude founders from that. I really do think that if you're trying to get something started, you're going to have to work really hard and probably way beyond what would be reasonable for a person who's getting a salary or working at an existing company if you're trying to get things started. So, I mean, it was, like, 100-hour weeks, maybe 120 some weeks [laughs]. I would sleep and just wake up and get to my desk and try to, like, put out fires, fix the server, improve the codebase, respond to learners in the community who had feedback, deal with support issues. Like, I was basically doing everything myself. And gradually, we were able to, like, build out the team over a long period of time. But really, the first few years was me self-financing everything with just my teacher savings. I spent, like, $150,000 of my own money just trying to keep freeCodeCamp going. For the first couple of years, we got tax-exempt status from the IRS. When that finally happened, I was like, great, like, let's go out and see if we can get some people to donate. So, we started asking people who were using freeCodeCamp if they'd be willing to donate $3 a month and eventually $5 a month, and we were able to support the organization through that. Really, it's just like a grassroots donor-supported effort. And then, we've been able to get some grants from Linux Foundation, and From Google, from Microsoft, from a whole lot of other big tech companies, and from some other nonprofits in the space. But mostly, it's just been, like, individual donors donating $5. And if you get enough people doing that, you get, like, a budget where you can actually pay for, you know, we have more than 100 servers around the world serving freeCodeCamp in, like, six different languages. We have, you know, all these other, like, initiatives. Like, we've got Code Radio, where you can go listen to Lo-fi while you're coding. And there are servers all over the world. And you can change the bit rate to suit whatever data you have and everything. Like, we wanted to just offer a whole lot of different services. We have mobile apps now. We've got an iOS and an Android app for freeCodeCamp. And then, of course, we've got the podcasts. We've got four podcasts: one in English, which I host, and then we've got one in Spanish, one in Portuguese, and one in Chinese. VICTORIA: Yeah, I absolutely want to ask you more about your podcasts. But first, I wanted to hear–can you tell me a little more about the decision to be 501(c)(3) or a nonprofit status? And were you always firm in that decision? Do people question it? And what was the real reasoning and commitment to that formation? QUINCY: I guess I would consider myself an idealist. Like, I genuinely believe that most educational endeavors should be, you know, nonprofit. They should be driven by either governments or by charities. I'm always kind of skeptical when there's, like, some late-night TV commercial, like, "Viewer, we'll help you get our degree," and it's from, like, a private for-profit university, something like that. So, I was like, in education...and I don't think everything in society needs to be that way, but I do think, like, education and, to an extent, healthcare these should be led by charities. Like, you know, the Red Cross, or, like, Doctors Without Borders, or churches, you know, own many of the universities, many of the hospital systems in the United States. I think that's a good thing. I think it's a very good thing that it's not just, you know, private profit-maximizing, market incentive-bound organizations that are doing all the stuff in education and in healthcare. I wanted to try to create something that, like, a lot of other people would see and say, "Oh wow, this charity can actually survive. It can sustain itself without raising a bunch of VC, without going public," or any of those things that a for-profit entity would do. And, again, I just want to emphasize, like, I don't think that iPhones should be made [chuckles] by nonprofits or anything like that. I'm just saying, like, for the purpose of actually educating people, the incentives are not necessarily aligned when you're trying to get money from...especially when you're talking about people that 60% of people on earth live off less than $10 a day. Those people should be spending their money on food. They should be spending their money on shelter. They should be spending their money on family. They should not be spending money on online courses, in my humble opinion. Like, online courses should be freely available to those people. So, to some extent, freeCodeCamp, we want to make sure that everybody everywhere in the world has access to first-rate learning resources on math, programming, computer science, regardless of their ability to pay. So, that's kind of, like, the ideal logical [inaudible 12:19], I guess, of freeCodeCamp. We kind of live that. Like, we're really serious. We will never pay, well, anything on freeCodeCamp. We won't account email gate anything. We are, I guess, absolutist in the sense that we want all of freeCodeCamp's learning resources to be free for everyone. Because of that, it made sense to like, incorporate as a 501 (c)(3) public charity. And so, we're tax-exempt. And people who donate to freeCodeCamp they can, you know, deduct it from their U.S. taxes. If a large company or even a small startup...we've had lots of startups like New Relic, like Retool, we've had Postman, Hostinger, a whole lot of different startups and mid-sized tech companies, Pulumi, Appsmith, they've all given us these grants that we can use to develop courses. So, we can often develop courses incorporating those resources. But that's tax-exempt, right? They can deduct that from their U.S. taxes. So, it's a big incentive for other people to partner with us and for people to donate funds to us. And it allows us to have the interests aligned in the sense that only people who have, you know, free cash flow or who have disposable income those are the people that are supporting freeCodeCamp. For the people that are, you know, single parents or that are taking care of their aging relatives, or are already working two jobs, or are completely unemployed and don't have any funds to speak of that are using the public library computer to access freeCodeCamp, right? Or using freeCodeCamp on a $50 prepaid phone from Walmart or something like that, right? Like those people can still use freeCodeCamp, and we can have the people who do have resources subsidize everyone else. WILL: Wow. I absolutely love that because...and I wish freeCodeCamp was around whenever I was in, like, high school and, you know, the early 2000s because we just didn't have the resources because I grew up in a small town in Louisiana. And this could have been so beneficial to that community because, like you said, we didn't have the resources–someone to teach coding there. There was no developers around that town that I was in. So, I really appreciate that you're doing this for everyone. And I know for me even...so, when I reached out to you, I did it because I was excited because I've used freeCodeCamp so many times, so many times to learn just in my journey to become a senior developer. Like, freeCodeCamp was one of the resources that I used because, one, it was free. But it wasn't...I think sometimes you can get free resources, and it's not great quality almost. Like, it's almost like you're more confused than before. But with freeCodeCamp, it was very, very amazing quality. And it was very clear on what I was learning. Honestly, thank you for helping me grow as a developer, just, honestly, thank you for that. QUINCY: Absolutely, Will. I feel honored to have helped you. And, yes, we want to help all the kids who are growing up in rural Louisiana or...I'm from, you know, Oklahoma City, not, like, the biggest, most prosperous city in the United States. Like, I want to help all of my friends who growing up who were eating meals provided by the state school system or my older friends who are on disability. Like, I want to make sure that they have resources, too. And in the process of doing that, it's a privilege to also serve all the working software engineers like you out there who just need, like, a reference resource or, like, oh, I've heard about Bun JS or Tailwind CSS. Or something like, I'm going to watch this three-hour course where I'm going to learn how to do Flutter. Like, freeCodeCamp has a 37-hour Flutter course. So, we've got, like, all these courses on using OpenAI APIs and things like that, too, right? So, it's not just for beginners, but we definitely want to, like, first and foremost, we want to serve people who we're kind of, like, the resource of last resort for, if you want to think of it that way. Like, only freeCodeCamp can help these people. Sure, they can probably use some other free courses on YouTube. And there are lots of other blogs that publish good tutorials and stuff. But freeCodeCamp is like an organized effort, specifically to help those people in need. And just kind of a side benefit of it is that you know, more established, experienced devs like you also get kind of, like, some benefit out of it as well. WILL: Whenever you were a developer, and you decided to start freeCodeCamp, how many years of experience did you have? And how did you overcome impostor syndrome, not only as a developer but as a founder? Because I feel like just overcoming it as a developer is hard, but you were also, you know, like you said, you know, handling everything for freeCodeCamp. So, how did you do that? And kind of tell us about that experience. QUINCY: Yeah. So, I didn't really know what I was doing. I think most founders probably don't know what they're doing. And I think that's totally fine because you can learn while you're doing. And we live in the United States, which is a country that kind of rewards experimentation and does not punish failure as much as a lot of other cultures does. Even if you try really hard, you're going to learn a tremendous amount, and you're going to try your next project. And that's what I did. I tried...I launched several educational, like, open learning resource-type projects, and none of them made any dent at all [laughs] in the proverbial universe. Like, nobody cared. Like, I would go and, like, I'd be talking to people. And I'd be explaining, like, "Oh, this solves this problem that you have." And you could kind of tell, like, people would sign in one time just to be polite, but then they'd never sign in again. So, it was very tricky to get traction. And I read a bunch of books. And I went to a lot of founder-focused meetups in San Francisco Bay Area. I had, like, moved out to San Francisco, specifically to try to, like, kind of make up for my deficit, the fact that I didn't know anybody because I was from Oklahoma City. I didn't know anybody in tech. And I didn't have, like, a fancy, you know, pedigree from, like, Harvard, or Wharton, or something like that, right? Like, I went to, like, a state university, and I studied English, right? And [chuckles] so, I didn't even have, like, a CS degree or anything like that. So, I definitely felt like an impostor. I just had to kind of, like, power through that and be okay with that. And it's something a little bit easier for me to do because, you know, I'm a White guy with glasses and a beard. And, like, nobody's walking up saying, "Are you sure you're a developer?" Or like, "Are you in marketing?" You know, like, the typical kind of, like, slight that they may say to somebody who doesn't necessarily look like me. And so I didn't have to deal with any of that nonsense, but there was still a lot of just self-doubt that I had to power through. And I think that was a big advantage for me. It was just, like, I was kind of, like, at war with myself and my own confidence. In fact, I found the software development community, and especially the open-source community, to be incredibly uplifting and empowering. And, like, they want to see you win. They want you to sit down and build a really cool project over the weekend and in the hackathon and present it. And, you know, they want you to learn. They know that you know, everybody is going to learn at a different rate and that a lot of people are going to get discouraged and leave tech and just go back to working in whatever field they were working in before. And that's totally cool. But I do feel that they're there to support you and to encourage you. And there are lots of different events. There are lots of different communities. I recently listened to the founder of Women Who Code, who was on this very podcast [laughs], Giant Robots Smashing Into Giant Robots, the greatest podcast name of all time. And, you know, there are people out there that are working very hard to make it easier for folks to get into tech. I think that that has been a huge part. Even before freeCodeCamp, you know, there were Harvard professors–Stanford professors putting their entire coursework for free online. You could go to, like, different tech events around California, for example, where I was when I was learning to code. And there'd just be tons of people that were eager to, like, learn more about you and to welcome you. And there would be, you know, recruiters that would talk to you and say, "Well, you may not be ready yet, but, like, let's talk in six months," right? And so, there was kind of, like, that spirit of you're going to get there. It's just going to take a lot of time. Nobody was telling me, "Oh, learning to code is easy," [chuckles] because it's not easy. There were lots of people that were, like, "Learning to code is hard. But you've got this. Just stick with it. If I could be of help, let me know," people who would pair program with me to help me, like, improve my chops, people who would volunteer to, like, look at my projects and give design feedback, all those kinds of things. And I think you're going to find all those things on the web. You're going to find those things in the open-source community. freeCodeCamp has a forum where people volunteer their time and energy to help build one another up and help one another get unstuck on whatever projects they're working on, give feedback on projects. And so, I think, to a large extent, the very giving nature, I almost want to say, like, selfless nature, of the global software developer community that is what saved me. And that's what enabled me to transition into this field, even as a teacher in his 30s. VICTORIA: It's interesting you say that. Because I feel as someone who hires engineers and developers, I love people who have teaching backgrounds because it means they're five-star communicators [laughs]. And I think that you know, in your job, when you're pairing with other developers, or you're talking to clients, in our case, that communicating what you're working on and how you're thinking about something is, like, 50% of the job [laughs]. For freeCodeCamp, I saw you have 40,000 people have found jobs after completing courses on there. I hope you feel like you've really, like, established some success here already. But what's on the horizon? What are you looking forward to in the next six months or six years with freeCodeCamp? QUINCY: Yeah, I'll be happy to answer that. But I want to emphasize what you just said: communication is, like, half the job. That's something that thoughtbot has gotten really early on. And I'll tell you that thoughtbot Playbook was incredibly helpful for me as a software developer and also early on for freeCodeCamp's team. And I think a lot of teams make use of that open resource. So, thank you for continuing to maintain that and kind of drive home that communication really is...like, meetings are essential [chuckles]. And it's not always just, like, leave me alone and let me go back to my cubicle and code. You know, I like to quote the old joke that, you know, weeks of coding can save you hours of meetings because I really do believe that communication is core. So, to answer your question about where freeCodeCamp is headed in terms of what kind of impact we'd like to have, I feel like we're just getting started. I feel like pretty much every Fortune 500 company wants to become a tech company in some way or another. Everybody is pushing things to the software layer because software is infinitely reproducible. It's so much easier to maintain software or fix things in production. Like, you realize, oh, there's a big problem. Like, we don't have to recall all the cars back to the dealerships to go and open up the hood and fix this, you know, mechanical defect. If we're controlling all these things at the software layer, right? We can potentially just deploy a fix and tell people like, "Hey, version update [chuckles], you know, download this security patch," or whatever, right? So, there are so many different things that you can do with software. I feel like the potential growth of the field of software and the number of software developers that the world will ultimately need...currently, we've got maybe 30 or 40 million developers on earth that are professional paid-to-code people. But I think that number is going to increase dramatically over the next 50 years or so. And I'll go ahead and address the elephant in the room [laughs] because pretty much everybody asks me this question like, "Don't you think that, like, tools like large language models like GPT-4 and things are going to obviate the need for so many developers?" And I think they're going to make individual developers more productive. But if you think about what code is, it's really extremely explicit directions for how to do something, whether you're using, you know, machine code, or you're using a scripting language like Python, or you're using English, and you're talking directly to the computer like you would on Star Trek. Essentially, you have to have a really deep understanding of the problem. And you need to know exactly what needs to be done in exactly what sequence. You may not need to manipulate bytecode like you would back in the '70s. But you are going to need to understand the fundamental problems, and you're going to need to be able to address it. So, I'm optimistic that the number of developers is going to continue to grow. The developers are going to continue to command more and more, I guess, respect in society. And they're going to continue to have more and more agency in what they want to do with their careers and have more and more options and, ultimately, be able to command higher compensation, be able to work remotely if they'd like. Developers will continue to be able to ascend through corporate hierarchies and become, you know, vice presidents or even executives like the CEO, right? If you look at a lot of the big tech companies, the CEO is a developer. And I think that that will continue. And the computer science degrees will continue to be extremely valuable. So, what is freeCodeCamp working on now that we think will further help people? Well, we're working on a free four-year computer science degree, a Bachelor in computer science, and there's also an associate in mathematics that we're developing. And those are going to be a progression of 40 university-level courses that have labs and have a substantial block of lectures that you'll watch. And then, we'll also have final examinations and everything. And we're developing that curriculum. We've got one of the courses live, and we're developing the second one, and eventually, we'll have all 40. It'll take till the 2030s. But we're going to have those. And then, once we have some longitudinal data about graduates and their success rates and everything, we are going to apply for the accreditation process, and we're going to get accredited as a university, right? Like, you can go through that process. Not a lot of organizations do that; not a lot of new universities are coming about in the 2020s. But it is something that can be done. And we've done a great deal of research, talked to a bunch of accreditors, talked to a bunch of university admins who go through the accreditation process. We think we can do it. So, again, very long-term goal. But when you're a 501(c)(3) public charity, you don't have to worry about freeCodeCamp getting acquired or all the things that would traditionally happen with, like, a for-profit company. You have a lot more leeway to plan really far. And you've got, like, this really broad mandate in terms of what you want to accomplish. And even if, you know, creating a university degree program in the 2030s would not be a profitable endeavor that, like, a rational shareholder value-maximizing corporation would embark upon, it is the sort of project that, you know, a charity like freeCodeCamp could do. So, we're going to do it. MID-ROLL AD: When starting a new project, we understand that you want to make the right choices in technology, features, and investment but that you don't have all year to do extended research. In just a few weeks, thoughtbot's Discovery Sprints deliver a user-centered product journey, a clickable prototype or Proof of Concept, and key market insights from focused user research. We'll help you to identify the primary user flow, decide which framework should be used to bring it to life, and set a firm estimate on future development efforts. Maximize impact and minimize risk with a validated roadmap for your new product. Get started at: tbot.io/sprint. VICTORIA: I think that's great. And, actually, you know, I got my master's in information technology and project management online way back when. So, I really like the availability of modern computer science bachelor's and master's being available at that low price point. And you're able to pursue that with the business structure you put in place. I'm curious to kind of go back to something you said earlier on how widely available it is and how you spread out across all these multiple countries. Were there any technical architecture decisions that you had to make along the way? And how did those decisions end up turning out? QUINCY: Absolutely. So, one of the things we did was we located servers all around the world. We're multi-cloud, and we've got servers in different data centers in, like, Singapore, Europe, Latin America, and we're trying to reduce latency for everybody. Another thing that we've done is, you know, we don't use, like, Google Translate to just translate all our different pages into however many languages are currently available on Google Translate; I think it's, like, more than 100. We actually have a big localization effort that's led primarily by volunteers. We have some staff that oversee some of the translation. And essentially, we have a whole bunch of people working at translate.freecodecamp.org and translating the curriculum, translating the tutorials into major world languages. Most prominently would be Spanish, Chinese, Japanese, Korean, Portuguese, Ukrainian. Like, all these different world languages, there's, like, a freeCodeCamp version for those, and you can go into the menu, and you can choose it. And it's actually, like, hand-translated by native speakers of that language who are developers. So, that's been another extremely, you know, time-intensive effort by the community. But we believe that, you know, the quality of the translations is really important. And we want that kind of human touch. We don't want kind of weird artifacts and typos that would be associated with machine translation. And we want to make sure that each of the challenges...because they're extremely tersely worded, again, communication is so important. If you go through the freeCodeCamp curriculum, we try to use as few words as absolutely necessary to effectively communicate what the task the learner needs to accomplish is, and we try to, just in time, teach them concepts. We don't want to present them with a big wall of text. Read this 20-page PDF to understand how, you know, CSS, you know, borders work or something like that. No, we're teaching, like, kind of, like, just in time, like, okay, let's write this line of code. Okay, great, the test passed. Let's go to this next one. This test isn't passing. Here is some contextual-specific hints as to why your code is not passing, why you're not able to advance, right? And we do projects [inaudible 30:30] to learn where we break everything down into steps. So, that's a lot of instructions that need to be very carefully translated into these different world languages to truly make freeCodeCamp accessible to everyone, regardless of whether they happen to be fortunate enough to grow up speaking English at a native level, right? I would say that's our main consideration is, like, the localization effort but also just having servers everywhere and doing everything we can to comply with, like, all the different data rules and privacy rules and everything of all these different countries. It's a lot of work, but in my humble opinion, it's worth it. WILL: I had, like, a two-part question because I wanted to loop back around. When you're talking about the free bachelor's program, one, does anything like that exist where you can get a bachelor-level program, and it's free? And then the second part is, how many countries are you in? QUINCY: Yeah, so currently, lots of governments in Europe, for example, will offer free degrees that are kind of subsidized by the state. There may be some other kind of degree equivalent programs that are offered that are subsidized by corporations. For example, if you work at Starbucks, I think you can get a degree from Arizona State University. And that's a great benefit that Starbucks offers to people. Arizona State University, of course, being one of the biggest public universities in the United States in terms of enrollment. As far as free degrees, though, in the United States, there's nothing like that where, like, literally anyone can just go and get a degree for free without needing to enroll, without needing to pay any sort of fees. There are tuition-free programs, but they still charge you fees for, like, taking exams and things like that. What I like to call ultra-low-cost degree providers–there's Western Governors University, and there's University of the People. And both of these are accredited institutions that you can go, and you can get a degree for, you know, $5,000, $10,000, $15,000. And it's a full-blown four-year degree. Now, that is amazing. I applaud those efforts. I've enjoyed talking to the folks at those different schools. I think the next step is to go truly free. There's nothing blocking you at all. You don't have to be banked. You don't have to have a credit card. You don't have to have any money. You can still get this degree. That's what we're chasing. And I think we'll get there, but it's just a lot of work. WILL: So, it's blowing my mind. It's just blowing me away because, like, you know, we talk about the student loan crisis, I would say. The impact if...when—I'm not going to say if—when you do this, the impact that can have on there, have you thought about that? And kind of, if you have, what has been your thoughts around that? QUINCY: Yeah, so there are $1.7 trillion in outstanding student loans in the United States. That's money that individual people, most of whom don't make a ton of money, right? Like, many of those people didn't actually finish the degree that they incurred the debt to pursue. Many of them had to drop out for a variety of different reasons or defer. Maybe they'll eventually finish those degrees. But as you can see from, like, the macroeconomic, educational, like, labor market data, like, having a partial degree doesn't make a big difference in terms of your earning power. You really need to finish the degree to be able to realize the benefits of having spent all that time studying, and a lot of people haven't. So, yes, there are, like, a lot of people out there that went to medical school, for example, and they're working as physicians. And they are going to eventually be able to pay that off because they're doctors, and they're commanding a great compensation, right? And they've got tons of career options. But if you studied English like I did and you incurred a whole lot of student debt, it could take a very long time for you to make enough money as a teacher, or as, like, a grant writer, or working at a newspaper, or something like that. Like, it can take you years to pay it off. And, in the meantime, it's just continuing to accumulate interest in your, you know, you might be a very diligent person who pays their student loan bill every single month, and yet, you could see that amount, the total amount that you owe continuing to grow despite this. That's just the nature of the time value of money and the nature of debt. And I thank my lucky stars that I went to school back in, like, 2000. Like, my tuition was $1,000 a semester, right? I mean, it's incredible. But that was, like, at a state school, like, a public university in the middle of Oklahoma. And it's not, like, a university you've heard of. It's basically, like, the cheapest possible option. I think community colleges can make a huge dent. I always implore people to think more about community colleges. I've talked with so many people on the freeCodeCamp podcast who were able to leverage community colleges and then transition into a, you know, research university, like a state school, and finish up their degree there. But they saved, like, basically half their money because they were paying almost nothing to attend the community college. And in California especially, the community colleges are just ridiculously worth it. Like, you're paying a few hundred dollars a course. I mean, it's just incredible value. So, I think the community college system is going to play a big role. But my hope is that, you know, freeCodeCamp can thrive. And it'll take us years for people to realize because if you go on, like, Google Ads and you try to run a Google Ad for, like, any sort of educational-related topic, anything related to higher education, it's, like, hundreds of dollars per click because there are all these for-profit universities that make a tremendous amount of money from getting people who just came back from serving in the military and getting, like, huge chunks of their GI Bill, or getting, like, all these federal subsidies, any number of things. Or basically just tricking families into paying huge amounts of money when they could have attended a much more sensible public university, you know, a private nonprofit university that doesn't charge an arm and a leg. So, I think that we are going to have an impact. I just want to say that I don't think that this is a panacea. It's going to take many years for freeCodeCamp to be adopted by a whole lot of people. It will take a long time for employers to look at the freeCodeCamp degree and say, "Oh, this is comparable to a computer science degree from..." say, Ohio State, or UT Austin, or something like that, right? Like, it's going to be a long time before we can get that level of buy-in. I don't want anybody listening to say, "Oh, I'd love to get a computer science degree. I'm just going to hold out and get the degree from freeCodeCamp." Like, my humble advice would be: go to a community college, then go to a state school. Get that four-year computer science degree. It is worth its weight in gold. But you don't want to accumulate a lot of debt. Just try to like, minimize your debt in the meantime. And, hopefully, over time, you know, the free model will prove out, and it'll just be a whole bunch of alumni supporting freeCodeCamp. And that's the dream is that, like, you know, Michael Bloomberg gave a billion dollars to Johns Hopkins University, a billion dollars. Like, Johns Hopkins never needs to charge tuition again with a billion dollars. They can just basically operate their institution off the interest from that, right? And lots of institutions...like, Harvard has, I don't know, like, 60-plus billion dollars in their endowment, right? So, the idea would be freeCodeCamp continues to get this, you know, huge alumni network of people who are doing great and who went to freeCodeCamp and who basically donate back in. And then, we can essentially have the deep pockets subsidizing everybody else who's just at the beginning of their careers who don't have a lot of earning power. You know, when I was a teenager, when I was in my 20s, I worked at convenience stores. I worked at Taco Bell. I did all kinds of, like, literally showing up at 6:00 a.m. to mop the grocery store-type jobs, right? And that is not a path to being able to afford an education in 2023. University tuition is out of control. It's, like, ridiculously high. It's grown way faster than inflation for decades. So, what can we do to alleviate that pressure? In my humble opinion, we just need to come up with free options and support ultra-low-cost options that are already out there. VICTORIA: I was going to ask, but you might have already answered this question somewhat. But I get this question a lot for people who are interested in getting into tech, whether they should get a computer science degree or go to a bootcamp. And I think you've mentioned all the positive things about getting a degree. I'm curious if, in your degree program, you would also tailor it more to what people might expect in a modern tech market and industry in their first job. QUINCY: Yeah. So, the way that we're developing our degree program is we essentially did, like, an analysis of the top 20 computer science programs in the United States: Carnegie Mellon, Berkeley, Stanford, MIT, all those schools that you would think of as being, like, really good computer science programs. And we basically drew a best-fit line through all their course offerings and looked at all their textbooks and everything that they cover. And, essentially, we're teaching a composite of those top 20 programs. Now, there are some things that, surprisingly, those programs don't offer, such as a course on ethics. It's something like 13% of those degree programs require an ethics course. And I think every developer should take a developer ethics course, or at least some sort of philosophy course to, like, understand what does it mean to be a good person? [laughs] Like, what is, you know, an anti-pattern? What is Blackhat user experiences? [laughs] I'm like, when should I, like, raise my hand during a meeting to say like, "Hey, should we really be doing this?" You know. So, ethics–security courses–I was surprised that not very many of those degree programs offer a course in information security, which I believe should be required. So, I'm kind of editorializing a little bit on top of what the composite says. But I feel very strongly that, you know, our degree program needs to have those courses. But in general, it's just everything that everybody else is teaching. And yes, like, a coding bootcamp...I've written a lot about coding bootcamps. I wrote, like, a Coding Bootcamp Handbook, which you can just Google, like, "Coding bootcamp book" or something like that, probably then you can find it. But, essentially like, those programs are usually private. Even if it's at a big, public university, it's often run by a big, private for-profit bootcamp chain. I don't want to say, like, all bootcamps are a bad deal, but buyer beware [laughs]. Frankly, I don't think that you can learn everything you need to know to be a software engineer within the compressed timelines that a lot of those bootcamps are operating under. There's a reason it takes four years to get a computer science degree because: there's a tremendous amount of math, programming, computer science, engineering knowledge that you need to cultivate. And you can absolutely get a developer job without a computer science degree. I don't have a computer science degree [chuckles], and I worked as a software engineer, right? And I know plenty of people who are doing that that didn't even go to college, right? People who were truckers or people who were doing construction work who just sat down and hit the books really hard and came out the other side being able to work as a software developer. But it is going to be vastly easier for you if you do have a computer science degree. Now, if you're in your 30s, if you've got kids, if you've got a whole lot of other obligations, should you go back to school? Maybe not. And so, it's not cut and dry, like, oh, just drop whatever you're doing and go back to...The situation is going to be nuanced. If you've already got a job working as a developer, should you go back and get a CS degree? Probably not. Maybe you can get your employer to pay for you to go to, like, a CS master's program, for example. There are a lot of really good online master's degree programs. Like, Georgia Tech has a master's in computer science that is very affordable, and it's very good. Georgia Tech is one of the best computer science programs in the United States. So, definitely, like, everybody's situation is going to be different. And there's no blanket advice. I would just be very wary of, like, anybody who's talking to you who wants your money [laughs]. freeCodeCamp will never want your money for anything. Like, we would love to have your donation long after you're a successful developer. You turn around and, like, send the elevator back down by donating to freeCodeCamp. But just be skeptical and, like, do your research and don't buy into, like, the marketing speak about, like, being able to get a job immediately. "Oh, it's easy. Anybody can learn to code." Like, I do believe any sufficiently motivated person can learn to code. But I also believe that it's a process that can take years, especially if you're doing the safe thing and continuing to work your day job while you learn these skills over a much longer period of time. I don't believe learning in a compressed kind of bootcamp...like, if you think about, you know, bootcamp in the military, like, this is, like, you're getting shipped away, and you're doing nothing but, like, learning these skills and everything like that. And I don't think that that's right for programming, personally [laughs]. I think there's a reason why many of these programs have gone from 9 weeks to 12 weeks to 6 months. Some of them might be, like, an entire year now. It's because it's them kind of admitting that, like, oh, there's quite a bit to learn here, and it's going to take some time. And there's diminishing returns to learning a whole bunch of hours in a day. I think you'll make much better gains studying programming 1 hour a day for 365 days than you'll make studying, you know, 8 hours a day for, like, two months or something like that if that makes sense. I'm not sure if the math works out there. But my point is, it's totally fine, and it's actually quite optimal to just work your day job, take care of your kids, spend time with your parents, you know, do all those things, hang out with friends and have a social life, all those things in addition to just having programming be one of those things you're working on in the background with your mornings or your evenings. WILL: Tell us a little bit about your podcast. Yeah, tell us kind of what's the purpose of it and just the history of it. QUINCY: Yeah. Well, I learned from the best. So, I'm a longtime listener of this podcast, of course. My friend, Saron Yitbarek, hosts CodeNewbie, which is an excellent podcast, the Changelog, which is an open-source podcast. I've had a great time interviewing the Changelog hosts and being on their show several times. So, I basically just learned as much as I could, and then I just went out and started interviewing people. And so, I've interviewed a lot of devs. I've interviewed people that are, like, learning to code driving Uber. I've interviewed the founder of Stack Overflow [chuckles], Jeff Atwood. I'm going to interview the founder of Trello in a few weeks when I'm back out in New York City. And I do my interviews in person. I just have my mobile studio. When I'm in San Francisco–when I'm in New York, I just go around and do a bunch of interviews and kind of bank them, and then I edit them myself and publish them. And the goal is just to give people exposure to developers. What are developers thinking? What are developers talking about? What do developers care about? And I try to hit, like, a very broad range of developers, try to talk to as many women as possible and, you know, striving for, like, 50% representation or better on the podcast. And I talk to a lot of people from different countries, although that's a little harder to do when you're recording in person. I may break down and do some over Zencastr, which is a tool we used in the past. I just like the spontaneity and the fun of meeting with people in person. But yeah, it's just like, if you are looking for, like, long-form, some of these are, like, two-and-a-half-hour long discussions, where we really delve into people's backstory and, like, what inspired them to become a developer, what they're learning along the way, how they feel about different aspects of software development. Like, for example, earlier, Will, you mentioned impostor syndrome, which is something I think virtually everybody struggles with in some capacity, you know, the freeCodeCamp podcast, tune in [chuckles] and subscribe. And if you have any feedback for me, I'd love to hear it. I'm still learning. I'm doing my best as a podcast host. And I'm constantly learning about tech as it evolves, as new tools come out, as new practices are pioneered. There's entire new technologies, like large language models, that actually work. And, I mean, we've had those since, like, the '60s, like, language models and stuff, but, like, only recently have they become incredibly impressive, exploring these tools and exploring a lot of the people behind them. VICTORIA: Okay, great. Do you have any questions for me or Will? QUINCY: Yeah. What inspired you all to get involved in tech, in...I don't know if somebody...did somebody at thoughtbot actually approach you and say, "Hey, we want you to run this"? Or was it something where like, "I'd love to run this"? Like, because podcasting is not easy. You're putting yourself out there. You're saying things that are recorded forever [laughs]. And so, if you say something really naive or silly or something like that, that's kind of always there, right? It takes a certain amount of bravery to do this. What got you into hosting this podcast? VICTORIA: For me, I mean, if I go way back before getting into tech, my mom she got her undergraduate degree in horticulture to become a florist, and then realized she couldn't make any money off that and went back to school for computer science. And so, she taught me how to use a computer really early on. And when I was in school, I had started in architecture, and then I wanted to change into business intelligence. But I didn't want to apply to the business school, so I got a degree in economics and a job at the IT help desk. And then from there, I was able to kind of transition into tech as a teacher, which was oddly enough...my first job in tech was training a 400-person program how to do, like, version management, and peer reviews [laughs], and timekeeping. And the reason I got the job is a friend from rock climbing introduced me, and he's like, they're like, "Oh, well, you train people how to rock climb. You can train people how to, like, do this stuff." [laughs] I'm like, oh, okay, that sounds great. But anyways, I worked my way up into project management and ended up getting my masters in IT. And when I came to thoughtbot, I had just moved to California, and I wanted to rebuild my network. I had a big network in D.C., organizing meetups and DevOps D.C., Women Who Code, teaching people, and communicating. And I ran a very small podcast there with a friend. So, when I joined thoughtbot, a podcast was a great way to just meet different people, expand my network, give people something to talk to me about when I go to events [laughs] that's not just, like, let me sell you some DevOps work. For me, it's been really fun to just reach out to people that we admire in the community and hear their story, and a little bit about them, and what advice they have for themselves or for other people. And, usually, that ends up benefiting me as well. So, it's been very fun for me. QUINCY: So, your less conventional path into tech combined with your own experience doing podcasting, it sounds like you were a natural choice for hosting a podcast. VICTORIA: Right. And I think I said before we started the show I didn't realize that it was such a well-loved and long-running podcast [laughs] [inaudible 49:01]. But I think we've really come into our own a little bit with hosting, and it's been super fun to work with Will and Chad on it as well. QUINCY: Awesome. And, Will, what's your story, man? How did you get onto the coveted Giant Robots Smashing into Giant Robots podcast? WILL: I actually went to college for sports medicine, and I was on track to go to med school, but my senior year...which I wish I would have had this conversation with myself a lot earlier, didn't have to do the hard work that I did at undergraduate. But my senior year, I was like, why am I really going to med school? And, honestly, it was more for the money, for the...yeah, more for the money. I just wanted to get paid a lot of money. I was like, yeah, that's not going to sustain me. I need to just pivot. So, I pivoted–started working at some nonprofits. And I ended up losing my job and got another job at Buckle, the clothing store, which was not a great fit for me. It helped me provide, but that's just not who I am. I'm not a fashion icon [laughs]. And then I changed to a travel agency insurance company, which it paid the bills. I wasn't passionate about it at all, and it paid the bills. And I was still struggling from losing my job. It was the first time that I lost my job. And my spouse came to me one day and is like, "All right, we're going to have the serious talk." And we almost flipped roles because that's usually who I am. I'm like, "All right, let's have a real talk. Let's get down to it." But I was just in a bad place. And she was like, "All right, we have to change because we can't keep going down this path." So, she was like, "If you had a choice to do anything, what would you want to do?" And I was like, "Well, probably something with computers and coding because I never had that opportunity when I was growing up because of the small town." And she looked at me, and she's like, "Go sign up right now." And I was like, okay, I'm going to sign up. When you mentioned that you made a transition in your 30s, I was around my 30s when I made the transition into coding. And so, it was a big transition. It was a big pivot for me because I'm having to learn, almost like I'm in college again, which was eight years ago. And so, it was just tough, and it wasn't new. So, that's how I got into coding. How I got on the podcast: I think I was talking to Chad and my direct report. I was just talking to them about challenging myself, and so it was multiple things. But, like, writing blog posts that was actually very challenging to me. I still don't like to write. It's not my favorite thing. Give me math or something like that or science; that's where I feel at home. But whenever, you know, you talk about writing and stuff, I can do it, and I'm decent at it. But it's not something that I feel comfortable in. The same thing with the podcast. The reason why I got on here is because I wanted to get out of my comfort zone and I wanted to grow. And I also wanted to get a chance to talk to people who's making a difference–who's impacting the world. So, like, this conversation today is like, yes, this is why I wanted to be a part of this podcast. So yeah, that's how I got started in tech and on the podcast. QUINCY: Awesome, Will. I'm thrilled that you went ahead and persevered and got into tech. It doesn't sound like it was a straight line, and it rarely is for people. But I'm always excited to meet somebody who learned to code in their 30s who stuck with it and is prospering as a result. So, congratulations to you. WILL: Thank you. VICTORIA: I'm still learning. I haven't quite got [inaudible 52:42] "Hello, worlds," multiple times [laughs]. But I don't really code every day for my job. I just kind of need to know what stuff is to be able to talk to people and in that way as a managing director. So, I appreciate Will bringing that backstory to this episode in particular. What else? Any other final takeaway that you'd like to leave our listeners with? QUINCY: I just want to thank you all for continuing to host this podcast, thoughtbot for operating the excellent Playbook, which, for anybody listening who is unfamiliar with, you should check it out. Again, it's just chock full of institutional wisdom accumulated over the years. And I hope everybody out there who's thinking about taking the plunge and learning coding or software development, or even, like, a semi-technical area of being in the software development process of learning visual design, learning how to do user experience research, any number of the different roles in tech, I hope you'll go for it. And I hope you will be as undaunted as you can. And just know that freeCodeCamp and the freeCodeCamp community we are in your corner. If you need to learn something, there's a very good chance that we have some tutorials written by thoughtful teachers who want people like you to come forward and like, read these resources and use it. There's a saying: like, the thing that programmers want the most is to have their code running in production somewhere. And, as a teacher, the thing you want the most is for you to have students, for you to have learning resources out there that are making a positive difference. So, again, I just count my blessings every day that I'm able to be involved in this community. I hope anyone listening who wants to transition into tech or to become even more technical gets involved in the freeCodeCamp community as well. We welcome you. WILL: Are there any opportunities? I know we talked about donations. So, for one, where can they go if they want to donate? And then also, like, you know, if developers want to get to be a part of the open-source network you have, is that possible? And how can they do that? QUINCY: Absolutely. So, if you want to donate to freeCodeCamp, just go to donate.freecodecamp.org. And you can become, like, a $5 a month donor, if you'd like. If you want to give a larger amount, I've got this article; just Google "How to Donate to freeCodeCamp." And I've written this detailed guide to, like, all the different ways like mailing checks. We had a gentleman who passed away and left a whole lot of money for freeCodeCamp in his will. So, those kinds of legacy gifts are definitely something. We've had people donate stock, like, any number of different things. I will bend over backwards to make sure that we can receive your donation, and we can give you a tax receipt so you can deduct it from your taxes as well if you'd like. And then, for contributing to freeCodeCamp, of course, we're an open-source project, and we welcome your code contributions. We have spent a great deal of time trying to make freeCodeCamp as hospitable as possible for both new developers who want to get involved and more senior developers who just want to do some, like, 20%-time type contributing to open-source projects: contribute.freecodecamp.org. So, again, donate.freecodecamp.org and contribute.freecodecamp.org. Those will take you where you need to go. VICTORIA: Wonderful. Thank you so much again, Quincy, for joining us. And you can subscribe to the show and find notes along with a complete transcript for this episode at giantrobots.fm. If you have questions or comments, email us at hosts@giantrobots.fm. And you can find me on Twitter @victori_ousg. WILL: And you could find me on Twitter @will23larry. This podcast is brought to you by thoughtbot and produced and edited by Mandy Moore. Thanks for listening. See you next time. ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com. Special Guest: Quincy Larson.
In this episode of Remote Ruby, Jason and Andrew cover a wide range of topics that start out with nothing to do with tech. First, they discuss energy drink flavors and then transition into a humorous exploration of disagreements with Chris, who happens to not be here today. They cover various topics including CMS options, front-end development, and Tailwind CSS customization. They also introduce a gem called “Counter” created by their colleague Jamie, aka “Dad” at Podia, which efficiently handles attribute tracking. Jason and Andrew discuss the gem's features and flexibility, highlighting its value in addressing complex counting challenges. We end with a discussion on email delivery performance issues and ice cream preferences, culminating in a friendly bet about whether Chris will listen to the episode. Hit download now to hear more! [00:00:13] Jason and Andrew talk about juicing, and they consider discussing topics that Chris doesn't agree with, such as Vimeo vs. Wistia, the way he says “query,” and his dislike for ViewComponent. [00:03:35] Jason talks about using Spina CMS for Rails, and Andrew mentions using Spinal CMS with Bridgetown. [00:06:15] Jason briefly discusses another page builder for Rails called “Maglev” that Bram Jetten works on. Andrew mentions working on their own site builder and they touch on front-end development and tools. [00:08:13] The conversation shifts towards Tailwind CSS and the Figma component library “Untitled UI.” Jason talks about Tailwind configuration and arbitrary values for spacing, and he's customized Tailwind CSS for his projects, including adding display styles and base textiles. Andrew and Jason praise the IntelliSense feature. [00:10:34] Andrew mentions feeling out of touch lately due to working with React and he shares an interesting challenge he faced involving data migration and validation. [00:12:20] Jason discusses the use of maintenance tasks for data migrations at Podia and their benefits. They talk about default scopes in Rails and the problems they can cause. [00:15:30] Jason mentions a gem called “Counter” created by Jamie “Dad” at Podia, and he explains the purpose of the gem, which efficiently handles counting and tracking attributes, and how the gem uses polymorphism and provides flexibility in defining custom counters. Shout-out to “Dad” for creating the gem.[00:21:14] Find out what happened at the last Rails Conf when Andrew shares the story of telling his boss while riding in an Uber, why he doesn't wear a seatbelt. [00:22:13] Jason shares that he's trying to improve email delivery performance and using email substitution for personalized links. He discusses his struggles with Action Mailer and email link generation, blaming it for issues. He talks about his efforts with Pre Mailer and Pre Mailer Rails and how he had to skip Pre Mailer to resolve the issue. [00:25:12] Andrew asks what Pre Mailer does and Jason explains Pre Mailer's role in converting styles to inline styles and generating text parts for HTML emails. Andrew mentions “Roadie” was updated five days ago and is now in passive maintenance mode. [00:27:08] The conversation shifts to discussing favorite ice cream flavors, their preferences for mixing ice cream flavors, and they place a bet on whether Chris will listen to this episode and come up with a phrase for him to use if he does.Panelists:Jason CharnesAndrew MasonSponsor:HoneybadgerLinks:Jason Charnes TwitterChris Oliver TwitterAndrew Mason TwitterSpina CMSSpinal CMSBram Jetten WebsiteMaglevMaintenanceTasksUntitled UICounterPremailer READMERoadie
In this episode, Jason, Chris, and Andrew start us off with a conversation about burger toppings preferences, discussing whether certain ingredients should be included in “the works” and sharing tips to prevent burger slippage. The discussion transitions to programming topics, exploring the challenges of working with multiline environment variables and the intricacies of Bash scripting. The guy's dive into the benefits of building UI components using frameworks like Tailwind CSS and Alpine.js, emphasizing the importance of well-organized and specialized components for better code management. The conversation also touches on the desire for more pre-built component libraries in the Rails ecosystem and the complexities of using various frontend frameworks. Hit download now to satisfy your appetite for both burgers and development insights! [00:00:08] Find out what the guys prefer for their burger toppings and Andrew mentions eating burgers upside down to prevent slippage and eating burgers with chopsticks. [00:04:13] The discussion moves to other sandwich places like Firehouse Subs, Jersey Mikes, Subway, and Lenny's, and Chris brings up the Meat Church BBQ guy who made a smoked cream cheese with hot pepper jelly. [00:06:31] Andrew wants BBQ now and tells us about a greatest BBQ place in Arizona, and Chris tells us about an Egyptian guy that moved to Texas that does Texas style but with Egyptian fusion BBQ that is unbelievable. [00:07:55] Jason and Chris tease Andrew about booking his flight to Rails World and his ticket to Rails World. [00:09:40] Jason expresses his excitement about going to Amsterdam. [00:10:33] Chris talks about not having fun adding support for multi-line environment variables in a programming project. Andrew clarifies the concept of multiline environment variables. [00:12:53] Chris describes the limitations of RVM vars, which truncates multiline values, and he discusses the process of rewriting and fixing the RVM vars behavior to support multiline values. [00:15:43] Andrew and Chris share their recent experiences with writing Bash scripts, discussing the challenges and nuances of Bash scripting, as well as the difficulties of learning and remembering the intricacies of Bash scripting between projects. [00:21:07] Andrew talks about his enjoyment of combining different command-line tools to create interactive scripts and functions. He highlights the benefits of creating personalized tools and shortcuts to simplify daily tasks.[00:23:17] Jason mentions to Andrew that they are recording a podcast at Rails World, and he arranged two recording sessions, one with Adam Wathan, and the other is an open session during the Friday happy hour. [00:26:22] The discussion shifts to discussing building UI components using Tailwind CSS and Alpine.js. Jason talks about the concerns and considerations while building and organizing View Components, Chris asks about handling forms and buttons components within Rails, and Andrew emphasizes the importance of well-defined and specialized components for better code organization and discoverability. [00:32:09] Jason mentions how he's using component variants, sizes, and colors within his app, and he wishes for more pre-built component libraries in the Rails ecosystem, like what's available for React. [00:36:00] Jason mentions the use of Alpine.js data directives for reusable functionality and components, Chris and Jason discuss Alpine.js's ease of use for handling simple UI interactions, and they mention recent version releases of Alpine.js and Laravel Livewire. Panelists:Jason CharnesChris OliverAndrew MasonSponsor:HoneybadgerLinks:Jason Charnes TwitterChris Oliver TwitterAndrew Mason TwitterMeat Church BBQ (YouTube)The Most Exciting BBQ Joint in Texas is Egyptian-Bon Appétit (YouTube)Rails World 2023Alpine.dataLaravel LivewireRuby Radar TwitterRuby for All Podcast
HashiCorp adopts a Business Source license, Matt Rickard hypothesizes why Tailwind CSS won, WarpStream sets out to make a Kafka-compatible offering directly on S3, Vadim Kravcenko publishes an excellent guide for managing difficult software engineers & Russ Cox gives an update on Go 2.
2023-08-08 Weekly News - Episode 201Watch the video version on YouTube at https://youtube.com/live/HJHCDA-UbV8?feature=shareHosts: Eric Peterson - Senior Developer at Ortus Solutions Daniel Garcia - Senior Developer at Ortus Solutions Thanks to our Sponsor - Ortus SolutionsThe makers of ColdBox, CommandBox, ForgeBox, TestBox and all your favorite box-es out there. A few ways to say thanks back to Ortus Solutions: Like and subscribe to our videos on YouTube. Help ORTUS reach for the Stars - Star and Fork our Repos Star all of your Github Box Dependencies from CommandBox with https://www.forgebox.io/view/commandbox-github Subscribe to our Podcast on your Podcast Apps and leave us a review Sign up for a free or paid account on CFCasts, which is releasing new content every week BOXLife store: https://www.ortussolutions.com/about-us/shop Buy Ortus's Books 102 ColdBox HMVC Quick Tips and Tricks on GumRoad (http://gum.co/coldbox-tips) Learn Modern ColdFusion (CFML) in 100+ Minutes - Free online https://modern-cfml.ortusbooks.com/ or buy an EBook or Paper copy https://www.ortussolutions.com/learn/books/coldfusion-in-100-minutes Patreon Support (Amazing)We have 40 patreons: https://www.patreon.com/ortussolutions. News and AnnouncementsPassing the Baton: Lucee 5.4 and Hibernate ORMAs of Lucee 5.4.1.8, new Lucee builds will no longer bundle the (Lucee) Hibernate extension. This means that if you rely on Hibernate ORM in your CFML application, you will need to manually bundle the Hibernate extension into your Lucee server. Let's read on for more info.The NewsFirst, let's start with the official note from the Lucee 5.4.1.8 Stable Release notes (courtesy of Zac Spitzer):Lucee ORM is no longer being developed or bundled by the Lucee Team, Ortus have forked and taken over the development of ORM for Lucee, see Introducing: The Ortus ORM Extension.It seems that Lucee has made the decision to 1) trim the Lucee installation size by no longer bundling the Hibernate extension with new Lucee installations, and to 2) halt further development on the Lucee Hibernate extension. It is unclear whether "no longer being developed" is referring to new features only, or whether that includes bug fixes and security patches as well.This news means that Micha and the LAS team can focus on the Lucee server platform, bringing you speed and stability, while Ortus provides the Hibernate integration for a powerful database ORM layer.https://www.ortussolutions.com/blog/passing-the-baton-lucee-6-and-hibernate-ormNew Releases and UpdatesColdBox v7.1.0ColdBox 7.1 introduces several new features that expand the capabilities of the framework and facilitate better development practices:Scheduled Tasks DebuggingYou can now add a debug argument to your task definitions, and your console will add tons of debugging for your tasks:`task( name : "My Task", debug : true )`toRedirectTo() MatcherYou can now use this matcher to test relocations in a nice fluent expectation:`expect( event ).toRedirectTo( "main.index" )`REST on{errorType}Exception() ConventionThanks to our very own Gavin Pickin you can now create exception handlers in your REST Handlers that follow the on{type}Exception() convention and you can listen to specific error type exceptions:`function onTypeMismatchException( event, rc, prc )`https://www.ortussolutions.com/blog/coldbox-710-releasedTestBox v5.2.0 and v5.3.0v5.2.0New FeaturesFaster Performance with Updated MixerUtilTESTBOX-375Introduces enhancements to the MixerUtil module, resulting in faster performance during dynamic mixins and enhancing the flexibility of your test suites.More Control with bundlesPattern in TestBox InitTESTBOX-376Adds the bundlesPattern parameter to testbox.system.TestBox's init method. This new addition gives you greater control over defining the pattern for your test bundles, making test organization a breeze.Introducing TestBox ModulesTESTBOX-377Brings a game-changing feature to TestBox - Modules support! Now you can create and utilize modules to extend TestBox's capabilities, opening up endless possibilities for tailored testing workflows. Check out our docs: https://testbox.ortusbooks.com/in-depth/modulesBug FixesQuery Compatibility in ExpectationTESTBOX-346Addresses an issue where using expect(sut).toBeInstanceOf("something")) with a query could cause unexpected behavior. This has been resolved, ensuring a smoother testing experience with query objects.Improved cbstreams FunctionalityTESTBOX-374Fixes issues related to cbstreams outside of ColdBox, ensuring seamless functionality in various environments.ImprovementsEnhanced toBeInstanceOf() HandlingTESTBOX-20Improves the handling of toBeInstanceOf() expectations for Java classes, making it even easier to write precise and robust tests for Java objects.v5.3.0New FeaturestoBeIn() and toBeInWithCase() ExpectationsTESTBOX-379These new expectations allow you to verify the presence of a needle within a string or an array target. With the toBeIn() expectation, you can easily check if the expected needle exists in the target. Additionally, toBeInWithCase() performs a case-sensitive check for the needle in the target. These powerful expectations enhance your testing capabilities and streamline the validation of data within your tests.New Matchers and Assertions for String StartTESTBOX-380With these new matchers and assertions, namely toStartWith(), toStartWithCase(), startsWith(), and startsWithCase(), you can validate whether a string begins with an expected prefix. These matchers come with their appropriate negations, allowing you to easily test and verify the starting points of strings in your application.New Matchers and Assertions for String EndTESTBOX-381TestBox v5.3 introduces powerful matchers for checking the end of strings. The new matchers include toEndWith(), toEndWithCase(), endsWith(), and endsWithCase(). These matchers enable you to confirm the presence of an expected suffix in a given string, making it convenient to test the endings of strings during your test suite executions.Bug FixesonSpecError suiteSpecs CorrectionTESTBOX-378In previous versions, there was a minor issue with onSpecError, where the suiteSpecs attribute was mistakenly referred to as suiteStats. With TestBox v5.3, we have fixed this bug, and the attribute is now correctly recognized as suiteSpecs. This ensures that error reporting and handling in your test suites function as expected, providing you with accurate and helpful feedback during testing.https://www.ortussolutions.com/blog/testbox-v52-release-embracing-performance-and-extensibilityhttps://www.ortussolutions.com/blog/testbox-v53-releaseOrtus Redis Extension v3.0.0We are very excited to bring you another release for our Redis Lucee Extension. This release: Updates the underlying Redis java driver from v2.9.3 to v4.4.3 Added SSL and username support to RedisClusterCache configuration Added username support to RedisCache ( non-cluster ) configuration These enhancements have been made to ensure full compatibility with both standalone Redis implementations, as well as AWS Elasticache configurations and authentication mechanisms.https://www.ortussolutions.com/blog/ortus-redis-extension-v300-releasedLucee Script Runner UpdatedThe Lucee Script Runner has been updated with some additional features:luceeVersionQueryYou can now specify a query string to run with the following syntax to select which version of Lucee you want to run, it overrides `luceeVersion`.CompilePassing in `-Dcompile=true` on the command line or compile: true will compile all the code under specified webrootThis is great for catching any invalid CFML during CI before it hits production, also great for checking your code against the latest 6 snapshot to catch any errors introduced which causes errors with your codebaseWindows Runner support for Github actionsThe `action.yml` has been updated to use Windows syntax for running script-runner. You can see examples in the image extension repo: https://github.com/lucee/extension-image/actionshttps://dev.lucee.org/t/lucee-script-runner-version-query-compile-github-actions-windows-support/12865https://github.com/lucee/script-runnerWebinar / Meetups and WorkshopsICYMI — Hawaii ColdFusion Meetup Group — CF Scheduled Tasks: more than you may know, and shouldSpeaker: Charlie ArehartFriday July 28th, 2023 at 3pm PTIf folks were asked to discuss CF scheduled tasks, I suspect most would feel "there's not much 'to say", but there really is a lot more to working with them simply "setting a given url to run on a given schedule" (did you know it could be a CFC, for instance?).There are both more features than most realize, as well as solutions to common problems people can face when running them, and a lot of myths regarding old limitations that have since been lifted. In this talk, veteran CF troubleshooter Charlie Arehart will address all these and more, starting with a focus on tools and techniques for solving common problems with them, then showing several ways to create them (yes, even more than just cfschedule and the CF Admin UI).He'll then review several features of using tasks that you may have missed—to include distinguishing which few are NOT available in CF Standard.He'll also discuss briefly the underlying quartz open source framework that powers them (and offers still more extensibility), as well as the underlying neo-cron.xml file and tips for protecting that, and he'll even identify ways to control/allow access to managing tasks that may surprise many. He'll conclude with alternatives when the base features don't suit you.https://hawaiicoldfusionusergroup.adobeconnect.com/p6izv4ia43a7/Hawaii ColdFusion Meetup Group — Graph QL & ColdFusionSpeaker: Mark TakataFriday, August 25, 2023 @ 12 PM HAST (Hawaii Standard Time)GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.GraphQL is a query language for APIs and a runtime for executing those queries with your existing data. It provides a more efficient, powerful, and flexible alternative to REST.In ColdFusion 2023 we are providing a native method of consuming and sending data across GraphQL using GQL. This includes support for fragments, variables, aliases, queries, mutations, subscriptions and more.Also, this talk will go over on why to use Graph QL over REST APIs.https://www.meetup.com/hawaii-coldfusion-meetup-group/events/294631289/Adobe Upcoming EventsAdobe ColdFusion Workshop WEDNESDAY, AUGUST 9, 20239:00 AM EDTOnline EventBrian Sappeyhttps://adobecf-1day-workshop.meetus.adobeevents.com/Join the Adobe ColdFusion Workshop to learn how you and your agency can leverage ColdFusion to create amazing web content. This one-day training will cover all facets of Adobe ColdFusion that developers need to build applications that can run across multiple cloud providers or on-premise.The workshop will explore: The major features in the latest release of Adobe ColdFusion How to use CFML to develop, test, and deploy web applications Adobe ColdFusion constructs and functions How to reuse code in Adobe ColdFusion The Adobe ColdFusion application framework and basic database operations Object-oriented programming and object-relational mapping Basic error handling in Adobe ColdFusion PDF, forms, and spreadsheet support in Adobe ColdFusion Webinar - Road to Fortuna Series: Exploring the New Google Cloud Platform Features FRIDAY, AUGUST 25, 202310:00 AM PDTOnline EventMark Takatahttps://google-cloud-platform-adobe-coldfusion.meetus.adobeevents.com/ During the Road to Fortuna Series: Exploring the New Google Cloud Platform Features webinar, Mark Takata will explore the new native hooks that Adobe ColdFusion is adding to work with the Google Cloud Platform. He will focus on features related to the GCP FireStore document database, Storage capabilities, and PubSub messaging features, providing attendees with valuable insights into how these features can be leveraged to optimize application development and delivery on the Google Cloud Platform. The session will be highly technical and will provide attendees with practical examples and use cases.CFCasts Content Updateshttps://www.cfcasts.comRecent Releases Into the Box 2023 Videos is available for purchase as an EXCLUSIVE PREMIUM package. https://cfcasts.com/series/itb-2023 Subscribers will get access to premium packages after a 6 month exclusive window. Into the Box Attendees should have their coupon code in the email already!!!! 2023 ForgeBox Module of the Week Series - 1 new Video https://cfcasts.com/series/2023-forgebox-modules-of-the-week 2023 VS Code Hint tip and Trick of the Week Series - 1 new Video https://cfcasts.com/series/2023-vs-code-hint-tip-and-trick-of-the-week Coming Soon More ForgeBox and VS Code Podcast snippet videos ColdBox Elixir from Eric Getting Started with Inertia.js from Eric Conferences and TrainingAdobe CF Summit WestLas Vegas 2-4th of October.Get your early bird passes now. Session passes @ $199 Professional passes @ $299. First round of speakers has been announced - with some great sessionshttps://cfsummit.adobeevents.com/ STUDENTS can get a free pass if they are enrolled at tertiary level educational institutionsOrtus CF Summit Training - ColdBox 7 Zero to HeroDate: October 4th - 5th, 2023 | Right after Adobe CFSummit, 2023Speakers: Luis Majano & Gavin PickinLocation: Las Vegas, NevadaVenue: Regus - Las Vegas - 3960 Howard Hughes Parkway Paradise #Suite 500 Las Vegas, NV 89169 United StatesTicket Price Early Bird Price: $499 (Available until August 18th, 2023) Regular Price Tickets: $699 25% Discount today: https://www.eventbrite.com/e/659169262007/?discount=modernize Spotlight Less than 2 miles from the Mirage - 30 mins walk Next to Marriot hotel - 2 min walk 1 mile to Top Golf - 20 min walk 5 min walk to Fogo de Chão Brazilian Steakhouse 5 min walk to starbucks 5 min walk to Lo-los chicken and waffles WIN WIN WIN WINhttps://www.eventbrite.com/e/workshop-coldbox-from-zero-to-hero-tickets-659169262007?aff=oddtdtcreator Into the Box LATAMNovember 30th - more details to followUniversity of Business in El Salvador.ITB 2024 Locations: Washington, DC Dates: May 15-17, 2024 More conferencesNeed more conferences, this site has a huge list of conferences for almost any language/community.https://confs.tech/Blogs, Tweets, and Videos of the Week07/26/2023 - Blog - Ben Nadel - Considering UTC And Recording Activity Streak Data In ColdFusionFor as long as I can remember, I've been storing Date/Time values in UTC (Coordinated Universal Time) within my ColdFusion applications. UTC is "the primary time standard by which the world regulates clocks and time" (source). Date/Time values get stored in UTC and then - as needed - translated back into a given user's timezone during the rendering process. This is why, when I added the concept of "workout streaks" in Dig Deep Fitness (my ColdFusion fitness tracker), my initial instinct was to use UTC. Unfortunately, this approach quickly broke down.https://www.bennadel.com/blog/4492-considering-utc-and-recording-activity-streak-data-in-coldfusion.htm07/27/2023 - Tweet X Post(?) - Brad Wood - Automated CommandBox Server TestsI've fully automated the tests in my CommandBox Server Tests repo. Now, with a single Task Runner, I can fire off hundreds of tests across dozens of servers to check for regressions. https://github.com/Ortus-Solutions/commandbox-tests 07/31/2023 - Blog - Ben Nadel - Auto-Saving Form Data In The Background Using The fetch() APIIn Dig Deep Fitness, my ColdFusion fitness tracker, the main gesture of the app is the "Perform Exercise" view. In this view, the user is presented with a series of inputs for resistance weights, reps, and notes. Depending on how fast a user is moving through their workout, they may be on this one view for several minutes without submitting the form back to the ColdFusion server. This "pending data" makes me nervous. As such, I've started auto-saving the form data in the background using JavaScript's fetch() API.https://www.bennadel.com/blog/4494-auto-saving-form-data-in-the-background-using-the-fetch-api.htmBeacons : https://developer.mozilla.org/en-US/docs/Web/API/Beacon_APILocalStorage: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API08/02/2023 - Blog - Ben Nadel - My ColdFusion "Controller" Layer Is Just A Bunch Of Switch Statements And CFIncludesThe more experience I get, the more I appreciate using an appropriate amount of complexity when solving a problem. This is a big part of why I love ColdFusion so much: it allows one to easily scale-up in complexity if and when the requirements grow to warrant it. When I'm working on my own, I don't need a robust framework with all the bells-and-whistles. All I need is a simple dependency-injection strategy and a series of CFSwtich and CFInclude statements.https://www.bennadel.com/blog/4497-my-coldfusion-controller-layer-is-just-a-bunch-of-switch-statements-and-cfincludes.htmCFML JobsSeveral positions available on https://www.getcfmljobs.com/Listing over 85 ColdFusion positions from 56 companies across 39 locations in 5 Countries.2 new jobs listed in the last two weeksFull-Time - SIS New ColdFusion C1 - Pune, Maharashtra, IndiaPosted: July 26, 2023https://www.getcfmljobs.com/jobs/index.cfm/india/SIS-New-ColdFusion-C1-at-Pune-Maharashtra/11592Full-Time - ColdFusion Developer - Washington, DC, United StatesPosted: August 01, 2023https://www.getcfmljobs.com/jobs/index.cfm/united-states/CFDeveloper-Washington-DC/11593Other Job LinksThere is a jobs channel in the CFML slack team, and in the Box team slack now tooForgeBox Module of the WeekColdBox Vite & ColdBox Vite Helpers by Eric PetersonThis module provides a `vite` helper function in your views for loading files generated byVite and the coldbox-vite-plugin in your ColdBox applications.https://www.forgebox.io/view/vite-helpershttps://www.npmjs.com/package/coldbox-vite-pluginVS Code Hint Tips and Tricks of the WeekHeadwindBy Ryan HeybournHeadwind is an opinionated Tailwind CSS class sorter for Visual Studio Code. It enforces consistent ordering of classes by parsing your code and reprinting class tags to follow a given order.Headwind runs on save, will remove duplicate classes and can even sort entire workspaces.https://marketplace.visualstudio.com/items?itemName=heybourn.headwindThank you to all of our Patreon SupportersThese individuals are personally supporting our open source initiatives to ensure the great toolings like CommandBox, ForgeBox, ColdBox, ContentBox, TestBox and all the other boxes keep getting the continuous development they need, and funds the cloud infrastructure at our community relies on like ForgeBox for our Package Management with CommandBox. You can support us on Patreon here https://www.patreon.com/ortussolutionsDon't forget, we have Annual Memberships, pay for the year and save 10% - great for businesses everyone. Bronze Packages and up, now get a ForgeBox Pro and CFCasts subscriptions as a perk for their Patreon Subscription. All Patreon supporters have a Profile badge on the Community Website All Patreon supporters have their own Private Forum access on the Community Website All Patreon supporters have their own Private Channel access BoxTeam Slack https://community.ortussolutions.com/Top Patreons (amazing) John Wilson - Synaptrix Tomorrows Guides Jordan Clark Gary Knight Giancarlo Gomez David Belanger Dan Card Jeffry McGee - Sunstar Media Dean Maunder Kevin Wright Doug Cain Nolan Erck Abdul Raheen And many more PatreonsYou can see an up to date list of all sponsors on Ortus Solutions' Websitehttps://ortussolutions.com/about-us/sponsors Thanks everyone!!! ★ Support this podcast on Patreon ★
Ryan shares his thoughts on how Server Actions and the useFormStatus hook are letting him build reusable pending UI for any form in his Next.js side project. Sam talks about how TypeScript prevents an entire class of data-loading bugs that have plagued single-page applications built with a client-side cache.Topics include:0:00 - Tailwind Connect2:38 - Using TypeScript to prevent data-loading errors19:27 - Building reusable form UI with Server Actions and useFormStatusLinks:Server Actions in Next.jsStyling a Radix Dialog with Tailwind CSS
GitHub announces Copilot X, Mckay Wrigley created an open source ChatGPT UI buit with Next.js, TypeScripe & Tailwind CSS, OpenAI is also launching a ChatGPT plugin initiative, Brad Woods writes about juice in software development, Logto is an open source alternative to Auth0, Basaran is an open source alternative to the OpenAI text completion API & llama-cli is a straightforward Go CLI interface for llama.cpp.