Tune in to the tools and techniques in the Elm ecosystem.
Similar Podcasts
The Cynical Developer
A UK based Technology and Software Developer Podcast that helps you to improve your development knowledge and career,
through explaining the latest and greatest in development technology and providing you with what you need to succeed as a developer.
New Rustacean
A show about the Rust programming language and the people who use it.
The Rabbit Hole: The Definitive Developer's Podcast
Welcome to The Rabbit Hole, the definitive developers podcast. If you are a software developer or technology leader looking to stay on top of the latest news in the software development world, or just want to learn actionable tactics to improve your day-to-day job performance, this podcast is for you.
051: Primitive Obsession
Solving the Boolean Identity Crisis (Elm Conf talk by Jeremy Fairbank)If It Compiles, It Works episodeOpaque Types episodeLife of a File talk by Evan CzaplickiRoc languageianmackenzie/elm-units packageParse, Don't Validate episodeUsing Semantic Types to Squash Bugs - Dillon's talk where he walks through the mechnical steps to safely introduce a wrapper typeDillon's Entry Gatekeepers blog post
050: Large Elm Codebases with Ju Liu
Ju Liu (twitter) (github)Elm at NoRedInkJu's blognoredink-ui is NoRedInk's internal UI kit (live demo page)avh4/elm-program-testelm-sortable-table APIImplementing Elm Podcast season 1cultureamp/react-elm-components (React library for embedding Elm as a Web Component)elm-community/js-integration-examplesNoRedInk is hiring Elm and Haskell devsJu Liu's blog
049: Optimizing Performance with Robin Hansen
Robin Hansen (twitter) (github)elm-optimize-level-2Html.Lazy APIOutperforming Imperative with Pure Functional Languages - talk about Roc by Richard FeldmanTail call optimizationSuccesses, and failures, in optimizing Elm’s runtime performance - Robin's blog post series on his elm-optimize-level-2 optimizationsWASMMaybe you don't need Rust and WASM to speed up your JSBrian Carroll's blog posts on an Elm WASM prototypeRobin's Stabel language - a stack oriented language that compiles to WASMWhat's Working for Elm Elm Radio episodeProcess.elm comment about the potential for parallelizing work
048: If It Compiles It Works
Dillon's blog posts If It Compiles It Works and When It Compiles But Doesn't WorkWiringRefactoringRunning code paths to check it works vs checking assumptions at the gateDillon's talk Types Without BordersShotgun surgery - Parse, Don't Validate episodeOrder independentYou can trust your testsKeeping what you depend on to a minimum helps make things trustworthySemantics can make it harder to predict (like parser)Json.Decode.maybe is almost never what you intendScaling Elm Apps talk by Richard FeldmanGary Bernhardt's Wat videoElm Radio Opaque types episode
047: What's Working for Elm
Woody Zuill on Turn Up the GoodMob ProgrammingWhere Could We Turn Up the Good?Pure FPElm 0.19 removing side effectsPurity is what makes elm-review interestingJeroen's post Safe dead code removal in a pure functional languageNo runtime exceptionsUseful Error MessagesUseful error messagesEvan's 2017 Deconstructconf talk Evan Czaplicki On StorytellingEvan's talk What is Success?Having a single language flavorIsomorphic codeMeta frameworks (elm-pages, Lamdera, elm-spa)Decoupled toolsThe community can iterate quickly and experiment with new changeselm-optimize-level-2 and elm-format are great exampleselm-optimize-level-2 can make their way upstream and don't break Elm's guarantees or assumptionsRobin Hansen's blog post series Successes, and failures, in optimizing Elm’s runtime performanceExtensible Web ManifestoPlatform should provide building blocks, not solve every specific use caseStable CoreStable data layer, architecture allows ecosystem to evolve around it with less churnCommunity Members Working on What They're Passionate AboutPeople passionate about a problem working on it in the ecosystemPerformanceLeveraging Elm's unique characteristics for performance (immutability, static language, known types, etc.)Elm compiler performance - compiler speed mattersContent and ConferencesElm community content and conferencesElm Online meetdownThe Elm PhilosophyEvan's Elm philosophy tweetPhilosophy has influenced package design in the ecosystemElm Slack #api-design channel
046: 2021 Holiday Special!
Our special guestsRyan Haskell-Glatz (twitter) (github)Brian Hicks (twitter) (github)Robin Heggelund Hansen (twitter) (github)
045: How We Learn
Make impossible states impossibleTeaching elm episodeDillon's first Elm project, Mobster pair/mob programming timerIdeas for Effective LearningHave a playground to try out ideasTry a new tool or technique with a familiar problem or exerciseSmall scale exercises and real world projectsSmall scale exercises are helpful for quickly developing a skillFeedback loopsTiny steps shorten the feedback loopUse code katas like bowling, tennis, roman numeral katasAnalogous to empirical scientific method (hypothesis, test, analyze)Call your shotDon't forget to analyze test results afterListen to smart people, but come to your own conclusionsTry two alternate ways of doing something out for yourselfFailure is part of learningFollow your curiosityLook at the source for projects you depend on or come acrossGrowth Mindset vs. Fixed MindsetYou have to make knowledge your own (synthesis) - connect it to what you knowJust in time vs. just in case learning - focus on what you need or seems important nowFlexbox Froggy gameDemystify things (for example custom type constructors vs type alias constructors)Mind mappingElm Radio Opaque Types episodeZettlekasten second brainHow to Take Smart Notes bookMake declarative statements in second brain systemDillon's use the platform note from his digital gardenDigital gardeningLearn in public movementRichard Feldman's talk Scaling Elm AppsRichard experimenting with dream writer in a component architectMake It Stick book (and some notes summarizing key ideas)Elm Radio API Design Lessons episodeLet your background processing do some work for youDan Pink's book WhenEarly bird vs night owl thinkingJeroen's blog
044: elm-webgl
Guest: Andrey Kuzmin (github) (twitter)elm-explorations/webglGLSL syntaxTwo shaders: vertex shader and fragment shaderUniforms are declarative bindings to Elm values. Type safe mappingSimple cube exampleelm-explorations/linear-algebra/latestProjection matriceselm-webgl-lessonsianmackenzie/elm-3d-scene/latest/Luca's listing of 3d Elm examples and resourceselm-3d-scene exampleselm-csg (Constructive solid geometry)Elm Japan 3d SVG art#gamedev and #webgl channels in Elm SlackJames Carlson's talk about communicating with the GPU from Elm using Futhark: Making Elm Talk to Your Personal SupercomputerAndrey's elm-webgl-playground examples
043: Teaching Elm with Richard Feldman
Richard Feldman (Twitter) (GitHub)Richard's Elm book Elm in ActionRichard's Frontend Masters coursesRichard's talk Teaching Elm to BeginnersFind motivationMloc.js conference (by Prezi)Pairing as a way to teach ElmIntro to Elm Frontend Masters workshop exercises are open sourceSouth Park therefore/but storytelling technique"I like teaching things the wrong way and then showing what's wrong with it."The importance of finding good examplesTraining From the Back of the RoomDillon's Elm JSON Decoder koans repoGradual release of responsibility techniqueBrian's JSON Survival Kit bookNoRedInk jobs (looking for Elm and Haskell engineers)Richard's Frontend Masters advanced Elm course and Elm intro course
042: Comparing TypeScript and Elm's Type Systems
TypeScript and Elm have different goalsSoundness is not a goal of the TypeScript type systemTypeScript Design Goals (and non-goals)TypeScript's any typeNominal vs structural typingTypeScript's any vs. Elm's Debug.todoTypeScript's any essentially "turns off" type checking in areas that any passes through.In Elm:You can get a type that could be anything with Debug.todo, but you can't build your app with --optimize if it has Debug.todo's in itYou will still get contradictions between inconsistent uses of a type that could be anything (see this Ellie example)This Ellie example (with compiler error as expected) and this TypeScript playground example (with no error) show the difference.any can not be used in places that take neverany vs unknownJSON.parse returns any, as do many core and published typingsio-ts lets you validate JSON similar to JSON decoders in ElmDefinitely Typed (published type definitions for NPM packages)Definitely Typed searchnoImplicitAnyTypeScript `strict mode in tsconfigDillon's post TypeScript's Blind SpotsJS semantics allow types that may not be intended (like adding a string + object, '' + {} === '[object Object]')Function parameters are inferred to be any regardless of implementation if they aren't given an explicit typeType narrowingTypeScript has untagged unions (just called Unions) - in Elm, there are only tagged unions (called Custom Types)Undefined vs nullTypeScript's Void typeTypeScript doesn't have checked exceptions like Java (there is a discussion about this on GitHub) - Elm only has explicit errors as data that must be handled exhaustively like other data typesDiscriminated unions vs Elm custom typesLiteral typesTypeScript allows number literal values, but arithemtic expressions return generic number values instead of literal typesEnumsBranded types in TypeScript vs opaque typesElm Radio Opaque Types episodeSwitch statements are not exhaustive - you can add an eslint rule to check that (or the never trick, assert unreachable)Key of operator in TypeScriptTypeScript's type system can do some cool things that Elm can't (for better and for worse)PrismaPrisma advanced TS meetup talksTuples in TypeScript are just arrays and use narrowing - Tuple in Elm is a specific typeelm-ts-interopTypeScript handbook on official site
041: elm-markdown
dillonkearns/elm-markdownMarkdown was built to be friendly to humans more than parsers. Example of a markdown quirk for human-friendliness: numbered lists starting with 1 interrupt paragrpahs, starting with other numbers don'tBabelmark helps compare output of different markdown implementationsSome parts of the markdown spec are ambiguousJohn Gruber created markdown (Daring Fireball)Jeff Atwood pushed for CommonMark specCommonMarkGitHub-Flavored Markdown (gfm) is a superset of CommonMark (Auto-links, Todo syntax, tables, etc.)Bear notes app (Mac only)dillonkearns/elm-markdown's Core Tools for ExtensibilityCustom RenderersHtml handlers (example)Transforming parsed Markdown Blocks (AST)incrementalelm.com code for getting back references from parsed markdownJeroen's Hierarchy of Constraints noteHelpers for folding over Blocks and InlinesExtracting table of contents exampleDiscussion to formalize HTML parsing and error handling spec in dillonkearns/elm-markdownExample of unintuitive raw HTML tag handling in markdown: <span> closed by whitespace (ignores closing tag)ZettlekastenWikilinksFoam ResearchGFM Autolinks extensionelm-explorations/markdownMatthew Griffith's elm-markup packageMatt's Oslo talk on fault tolerant parsing A Markup for the Statically Typedelm-optimize-level-2ShikiDecksetUnifiedJS markdown transformation ecosystemelm-markdown-transformsRender to a function (example)Scheme evaluator example (demo) (code)elm-pages 2.0 episodeMarkdown announcement blog post Extensible Markdown Parsing in Pure Elm#markdown channel in The Elm SlackExample of extracting title and description from parsed markdownElm Online MeetdownSubmit a talk proposal to the Elm Online Call for Speakers form
040: Phantom Builder Pattern
Phantom types (happens at compile time, not runtime)Helps avoid things like adding centimeters and inchesianmackenzie/elm-unitsJoël Quenneville's phantom types talk from Elm in the Spring A Number by Any Other NameExtensible recordsBuilder patternJeroen's Hierarchy of Constraintselm-graphql SelectionSet scope type variableBuilder Pattern episodeBrian Hicks' builder pattern talk Robot Buttons from Marswith functionsPhantom builder is a state machine for your typeselm-review Rule API uses phantom builderPhantom types discourse post on time package Simon HertebySnapshot test in Elm review for expected error messagesPhantom Builder live stream episodePossible operations with phantom extensible buildersAdd a new fieldRemove a fieldChange the type of a fieldRemove the previously existing phantom type and change it to an empty record (not extensible, just a hardcoded return type) i.e. ReplaceWhat you can do with phantom builderRequire something to be always calledForbid something being called more than onceCause other constraints dynamically after calling somethingMake function calls mutually exclusiveEnable a function only if another one has been called
039: elm-charts
Tereza Sokol (GitHub) (Twitter)terezka/elm-chartselm-charts.orgOriginal APIs: line-charts and elm-plotTereza's Elm Europe talk elm-plot: the big pictureTereza's talk If Coco Chanel Reviewed ElmEdward TufteNew version tries to be less prescriptiveExtensible Web Manifestogampleman/elm-visualizationelm-vegaGHCJS (mentioned in Elm Town episode 6)
038: Lamdera
Mario Rogic (GitHub) (Twitter)LamderaLamdera 1.0 releaseElm Europe conference talk introducing LamderaElm Europe conference talk about Lamdera's EvergreenLamdera is about removing non-essential complexity - 6 conceptsStuff that happens for the client (in the browser)Stuff that happens in the server (like scheduled job)Data from client to backendData from backend to clientFrontend knows what it knowsBackend knows what it knowsLamdera docsSemantic boundaries (remove glue code)Real-time chat example app and other Lamdera example appsLamdera "Anti-Marketing" pageLamdera Discordelm-pkg-js specElm Online meetdown groupCalls email sending service through HTTPMartin Fowler's "Memory Image" ideaEvent SourcingMartin Stewart talk introducing a Lamdera end-to-end testing toolWire size improvement in Lamdera alpha12 release noteselm-webappLamdera real world repo (PR 1) (PR 2)
037: Performance in Elm
elm-review-performanceTail call optimizationsJeroen's blog post on Tail-call optimization in ElmEvan Czaplicki's chapter on Tail-Call Optimization and how to write optimized codeLighthouse Elm Radio episodeJu Liu's Performant Elm blog post seriesAvoid memoized state when possible to avoid stale dataHtml.LazyElm's html lazy only works when the function and args have the same reference as before. List.map will return a list with a new reference, for example.Elm has function-level dead code eliminationReferencing a record pulls the whole record in no matter how many fields are used directlybcp-47-language-tag packageElm list extra gets split by function, unlike lodash which needs to be splitElm Core Dict package has O(logn) complexity for operations like insertJavaScript Objects aren't optimized for removing/adding properties"What's Up With Monomorphism"elm-optimize-level-2elm-explorations/benchmarkJeroen's list-extra PRs (with reference to the benchmark for it) for functions gatherWith isInfixOfwebpagetest.org (or web.dev performance testing)Netlify Lighthouse pluginRSLint - fast version of ESLint, but doesn't have custom rulesInstructions to minify Elm codeJake and Surma talk about optimizing sites - Setting up a static render in 30 minutesJake Archibald's talk explaining JavaScript's event loop and requestAnimationFrame - In The Loop