POPULARITY
"All of You" is a science fiction romantic drama film directed and co-written by William Bridges. It stars Brett Goldstein, Imogen Poots, Zawe Ashton, Steven Cree, and Jenna Coleman. It premiered at the 2024 Toronto International Film Festival and received positive reviews for its premise, performances, and chemistry from Goldstein and Poots, as well as its writing. Bridges was kind enough to spend time speaking with us about his work and experience making the film, which you can listen to below. Please be sure to check out the film, which will be available to stream on Apple TV+ on September 26th. Thank you, and enjoy! Check out more on NextBestPicture.com Please subscribe on... Apple Podcasts - https://itunes.apple.com/us/podcast/negs-best-film-podcast/id1087678387?mt=2 Spotify - https://open.spotify.com/show/7IMIzpYehTqeUa1d9EC4jT YouTube - https://www.youtube.com/channel/UCWA7KiotcWmHiYYy6wJqwOw And be sure to help support us on Patreon for as little as $1 a month at https://www.patreon.com/NextBestPicture and listen to this podcast ad-free Learn more about your ad choices. Visit megaphone.fm/adchoices
Ah, yes, that awkward moment when you find out one of the funniest R-rated romcoms of the new millennium is rotten on the Tomatometer. Joke's on critics, however, as the cast of THAT AWKWARD MOMENT went on to be major power players in Hollywood, despite that 23% green splotch: Efron, Jordan, Teller, Poots, Davis, come on! Listen to Alex & Julio as they make a desperate plea for more movies about bad boys learning to be sensitive good boyfriends.TIMELINE00:01:24 That Awkward Moment00:12:01 Contrarians Corner- Wanna know how we really feel about THAT AWKWARD MOMENT? Check out the Real Talk (RT) episode, on your feed RIGHT NOW! (or pretty soon — Spotify can be a pain when it comes to refreshing the feed)- Interested in more Contrarians goodness? Join THE CONTRARIANS SUPPLEMENTS on our Patreon Page! Deleted clips, extended plugs, bonus episodes free from the Tomatometer shackles… It's everything a Contrarians devotee would want!- Our YouTube page is live! Get some visual Contrarians delight with our Contrarians Warm-Ups and other fun videos!- Contrarians Merch is finally here! Check out our RED BUBBLE MERCH PAGE and buy yourself something nice that's emblazoned with one of our four different designs!- THE FESTIVE YEARS have been letting us use their music for years now and they are amazing. You can check out their work on Spotify, on Facebook or on their very own website.- Our buddy Cory Ahre is being kind enough to lend a hand with the editing of some of our videos. If you like his style, wait until you see what he does over on his YouTube Channel.- THE LATE NIGHT GRIN isn't just a show about wrestling: it's a brand, a lifestyle. And they're very supportive of our Contrarian endeavors, so we'd like to return the favor. Check out their YouTube Channel! You might even spot Alex there from time to time.- Hans Rothgiesser, the man behind our logo, can be reached at @mildemonios on Twitter or you can email him at mildemonios@hotmail.com in case you ever need a logo (or comics) produced. And you can listen to him talk about economy on his new TV show, VALOR AGREGADO. Aaaaand you can also check out all the stuff he's written on his own website. He has a new book: a sort of Economics For Dummies called MARGINAL. Ask him about it!
Hello Wholigans! Did you know Imogen Poots's middle name is Gay? Well now you do! Other things you'll learn in todays episode include: what Jussie Smollett is up to now that his court case is FINALLY over, why Chrishell Stause is feuding with the Empanada Queen, which huge Them Drew Sidora claims to have dated, what Star Jones's favorite movie is, how one rumor is "tearing Nashville apart," and more! As always, call in at 619.WHO.THEM to leave questions, comments & concerns for a future episode of Who's There?. Get a ton of bonus content over on Patreon.com/WhoWeekly. To learn more about listener data and our privacy practices visit: https://www.audacyinc.com/privacy-policy Learn more about your ad choices. Visit https://podcastchoices.com/adchoices
Matthew 9:35-37, Acts 8:26-35
What happens when a woman becomes obsessed with Herman Melville during the pandemic? What if the process of sorting fact from fiction in Melville's work inspires a midlife reckoning with her own marriage and ambition? And what if she (a poet) and her husband (a novelist, by the way) write a book about all of it? Well, the result would be something like Dayswork: A Novel, which has been called "a supremely literate achievement that wears its erudition lightly." In this episode, Jacke talks to the poet and her novelist husband, Jennifer Habel and Chris Bachelder, about what Melville means to them. PLUS Alexander Boots (The Strangers' House: Writing Northern Ireland) discusses his choice for the last book he will ever read. Additional listening suggestions: 513 The Writers of Northern Ireland with Alexander Poots 481 Moby-Dick: 10 Essential Questions (Part One) 482 Moby-Dick: 10 Essential Questions (Part Two) The music in this episode is by Gabriel Ruiz-Bernal. Learn more at gabrielruizbernal.com. Help support the show at patreon.com/literature or historyofliterature.com/donate. The History of Literature Podcast is a member of Lit Hub Radio and the Podglomerate Network. Learn more at thepodglomerate.com/historyofliterature. Learn more about your ad choices. Visit megaphone.fm/adchoices
Jackie & Dunlap are back with another Trump Trial update. Something stinks in this courtroom! Ohhh, I thought you said Trump loves Putin! Pecker is back and we didn't even make fun of his name. Ohhh, I thought you said Noem-kill shelter! Tennessee to arm teachers Get 20 Extra Minutes with Jackie & Dunlap over at http://patreon.com/redstateupdate "The Magic Cowboy" courtesy Seth Timbs: https://sethtimbs.bandcamp.com Red State Update theme "Tasty Sorghum Biscuit" by William Sherry: https://open.spotify.com/track/74j2AyMM9Qy2VhSQDajhfn
TAKE THIS YOU SUCKAS?!?!?!?!?!?!? Follow, Like, Comment & Subscribe! #dayones Discount Codes Here: linktr.ee/latenitewnate Another week where we discuss the latest mess like Lover and Friends, dating and so much more! Give it a listen and tell us what you think!
Think you've heard everything about Alec/Alex/Elic Murdaugh/Murdow/Murdick/ Murdock, but you haven't! Dateline has gotten the inside scoop from the investigators at SLED, the family's housekeeper, and so much more! Guiding us through the low country swampy maze of yarn dolls, Poots, and Becky with the Bad Instincts is K&K's new favorite Dateline associate Craig Melvin! So hop on into the front seat for your Dateline interview, because it's THE MURDAUGH MURDERS: INSIDE THE INVESTIGATION! Official Description from NBCU: Lead detectives break their silence on the investigation into once-prominent South Carolina attorney Alex Murdaugh. Craig Melvin reports. Check out the podcast True Sunlight and follow Emily D. Baker for deep dives into the case and the trial! Get some great gifts for yourself and loved ones from our amazing sponsors! Give the gift of memories! StoryWorth is the gift that is sure to provoke some happy tears, and it's a gift that lasts for generations to come! Go to storyworth.com/datedateline and save $10 on your first purchase! Learning a new language is a great way to better yourself and your brain, plus you can make fun of relatives at Christmas without them knowing! Here's a special, (limited time) deal for our listeners to get you started RIGHT NOW - get 55% off your Babbel subscription - but only for our listeners - at babbel.com/DATEDATELINE. Sparkle this holiday season with shiny healthy hair personalized for you and your lifestyle! Go to prose.com/datewithdateline for your free in-depth hair consultation and 50% off your first subscription order! Be the hostess with the mostess this holiday season with award winning wines delivered to your door! Plus you're supporting independent winemakers! Go to NakedWines.com/DATEDATELINE and click “Enter Voucher” in the top right, and enter DATEDATELINE for both the code and password to get 6 bottles of wine for just $39.99 with shipping included! That's $100 off and less than $7 per bottle! Learn more about your ad choices. Visit podcastchoices.com/adchoices
Also, It's results day for thousands of young people who sat A-Levels across the UK
happy pride! Get bonus content on Patreon! Hosted on Acast. See acast.com/privacy for more information.
The literary world has long celebrated the incredible contributions of Ireland and its writers, with a special focus on Dublin-centric writers like James Joyce and W.B. Yeats. Meanwhile, Northern Ireland has been quietly turning out some excellent work as well, thanks to figures like C.S. Lewis and Seamus Heaney, among many others. Are there common themes uniting the Irish writers - and the Northern Irish writers in particular? How has the tumultuous history of Northern Ireland worked its way into the writings of its best novelists and poets? In this episode, Jacke talks to Alexander Poots about his new book The Strangers' House: Writing Northern Ireland. PLUS Jacke talks to author Laura Lee (Wilde Nights & Robber Barons) about her choice for the last book she will ever read. Help support the show at patreon.com/literature or historyofliterature.com/donate. The History of Literature Podcast is a member of Lit Hub Radio and the Podglomerate Network. Learn more at www.thepodglomerate.com/historyofliterature. Learn more about your ad choices. Visit megaphone.fm/adchoices
CB Walker Vanquishes Cavity Creeps and Rooty Poots Video Link: https://youtu.be/MVvRyHj6GHY Honey, I'm CB Walker...The World's Foremost Psychic Energy Readers. I specialize in reading your energy by scribbling on a sheet of paper. Those lines, circles, and loop de loops will tell me certain truths about you. I will give you the best possible advice to steer your life in the right direction. Please try not to laugh at these callers because this is serious business. Don't start no mess! I'm only here to help! LIKE & SUBSCRIBE ---------------------------------------------------------------- Follow all of these and get your shit together • Facebook - https://www.facebook.com/cbwalkerpsychic • Twitter - https://twitter.com/cbwalker • Instagram - https://www.instagram.com/cbwalkerpsychic --------------------------------------------------------------------
From CS Lewis's bourgeois Protestant upbringing to Seamus Heaney's beautiful attempts at understanding his home, this episode I interview Alexander Poots author of The Strangers' House: Writing Northern Ireland and ask what Northern Irish writers can teach us about the history of the area. Sign up to Patreon for the full interview. You can read more about the book, here:https://www.twelvebooks.com/titles/alexander-poots/the-strangers-house/9781538701584/ Hosted on Acast. See acast.com/privacy for more information.
Northern Ireland is one hundred years old. Northern Ireland does not exist. Both of these statements are true. It just depends on who you ask. How do you write about a place like this? In "The Strangers' House," Alexander Poots asks this question of the region's greatest writers, living and dead.
Let's talk about the Emerald Isle! Author Alexander Poots joins me to discuss his new book, The Strangers' House. We chat about his favorite poets, what's Northern Ireland like now, and whether or not they'd let me in. Come listen!Buy The Strangers' House
Another Flashback episode from the time when we still did those on the OG feed. Catching up with Fright Night from 2011, a movie I soured on since I last saw it, but the rest of the pod is standing up for it! Is Charlie a shitty lead character, is Colin Farrell the dreamiest vampire ever, where is the justice for Poots? Download. Listen. Enjoy. The Categories: (Time:Stamp) 8 Words or Less, The Elevator Pitch, Why So & So, General Thoughts, Star Ratings (0:00:30) You Gotta See This, Let's Talk About That Ending..., Performance Piece (0:15:40) Repeat After Me, But, Why?, The Hot Take Theater, Expert Opinions, The Upgradeables, To Infinity & Beyond?, Bonus Rounds/Catch All, One Last Pitch... (0:25:00) @middleofrow #nothe
ntcballynahinch.org
Vibraphone, for the ladies. Franco, but not the one you think! Christ Krispies. Vanmagadon. That sticky Golden Grahams feeling. Mike Oldfield's Series of Tubes. Silly Rabbit, Dunaway's for kids. Lucky Charms & Potatoes. The Venn diagram of Barbie video game and chattering teeth. Poots and Doody. Taking the week off like normal people. Covers don't count, I'm in trouble deep. My mom always told me if I constricted the sciatica I would get hairy palms. I'm still standing. Yeah yeah yeah. Comedians on Bernie Mac getting coffee. Reccamentaling what comes after 4, or was it 3, and more on this episode of The Morning Stream.
Vibraphone, for the ladies. Franco, but not the one you think! Christ Krispies. Vanmagadon. That sticky Golden Grahams feeling. Mike Oldfield's Series of Tubes. Silly Rabbit, Dunaway's for kids. Lucky Charms & Potatoes. The Venn diagram of Barbie video game and chattering teeth. Poots and Doody. Taking the week off like normal people. Covers don't count, I'm in trouble deep. My mom always told me if I constricted the sciatica I would get hairy palms. I'm still standing. Yeah yeah yeah. Comedians on Bernie Mac getting coffee. Reccamentaling what comes after 4, or was it 3, and more on this episode of The Morning Stream.
Escalation from the DUP over the NI protocol.
This isn’t a movie review show, Jaljuda and George just talk about this 2019 movie called Vivarium. What do you think of the movie Vivarium? Leave a comment below or a voicemail 7259992704Later in the episode they talk about the difference between walmart and Target. Walmart and their self check out saying people are stealing including george. “Vivarium is a 2019 science fiction horror film directed by Lorcan Finnegan, from a story by Finnegan and Garret Shanley. An international co-production between Ireland, Denmark and Belgium, it stars Imogen Poots and Jesse Eisenberg. It premiered at the Cannes Film Festival on 18 May 2019, and was released in Ireland on 27 March 2020 by Vertigo Releasing. The film follows a couple (Eisenberg and Poots) that is forced to care for a child while trapped in a seemingly perfect neighbourhood.” -Wikipediathis is the tiktok from the intro: https://www.tiktok.com/t/ZTRUwNfSb/?k=1Support the show:Follow @coupleblerdz on Twitter and IGThank you for always listening. Here are a few ways to support the show2. Check out this free app that gets you cash back on gas and other errands! Click this link or use promo code GEORGE23277 to get an extra 15¢/gal bonus the first time you make a purchase. https://upside.app.link/GEORGE232773. I've partnered with a company called Linq that offers a line of smart products that let you share information instantly with the people you meet.You can build a page that contains your contact info, website, social media links, photos and videos, appointment scheduling, custom forms, and more — all sharable with just a tap of one of these smart cards! It's like an unlimited use business card, that you can change over time.The possibilities are actually endless. Use my link for a major discount! https://buy.linqapp.com/discount/3347?redirect=%2F%3Fafmc%3D3347Promo code: 3347 Get full access to RegularAssNewsletter at whomst.substack.com/subscribe
On this episode of the Westside Fairytales Horror and Lit Club we talk at length about two movies of dubious quality: The absolute relic of 2000s horror, Wrong Turn, and an extremely dull modern cosmic horror thriller called Vivarium.Thanks for listening! Subscribe and review us on iTunes or wherever you get your podcasts.Support us on Patreon: https://bit.ly/34jUJsGYou can also support us by purchasing some merch: https://bit.ly/33bjPtuFollow us on Twitter: https://bit.ly/2WxCs8yFollow us on Facebook: https://bit.ly/36svFkYFollow us on Instagram: https://bit.ly/2JIhZIVJoin the Westside Fairytales Horror and Lit Club: https://bit.ly/2WAjT3N
The DUP want movement on Brexit trading arrangements before re-entering Stormont.
With Outer Range's eight-episode run on Prime Video now complete, Imogen Poots took the time to join us for an episode of Collider Ladies Night to revisit her journey from her earliest credits to joining the cast of Amazon's supernatural Western. Outer Range puts the spotlight on Josh Brolin's Royal, the head of the Abbott family who's doing everything he can to keep their ranch up and running. Royal's already got quite a bit to sort through when the show opens, but things get increasingly complicated when he gives a backpacker (Poots) the OK to camp on his property and then even more so when he discovers an enormous, inexplicable hole on his land. As always on Collider Ladies Night, we made our way through as much of Poots' filmography as possible in an effort to pinpoint the steps needed to reach her latest release, Outer Range. Many lessons were learned along the way, but some of the projects that made the biggest impression were the ones that helped her figure out the types of stories she wanted most wanted to tell, projects like Green Room, Need for Speed, and Roadies. Hear all about that and dig into some very curious Outer Range spoilers with Poots on this edition of Collider Ladies Night! Learn more about your ad choices. Visit megaphone.fm/adchoices
A domain that has always held an attraction is Agriculture, and even more so with the development of technology that is being utilised to enable fewer people on a farm to do a lot more. From GPS enabled tractors to the use of IOT technology to ensure the soil and water have exactly what is needed and when, as well as being able to predict weather windows for fertilising the land and harvesting crops. But its also a dangerous environment, with heavy machinery that is focused on cutting, mulching, squashing and shredding as well as simple things like pitch forks and animals that can do unpredictable things. Jill Poots, joined Barry to have a chat and give some insights into Human Factors in Agriculture.
Topics include the upcoming war, drunk cowboys, and strychnine valentines. Poems by Langston Hughes, Jamie DeWolf, W. Clayton Scott, Molly Sroges, Laura Lamb Brown-Lavoie, Brian Michael Tracy, and Deanna Starshine. Hosted by Deanna Starshine. Booth Announcer Jim Bratton.
We meant to release this in 2021 but life happens, amirite? Records that came out in 2001 | You're gonna feel old | 9/11 conspiracies in music | Poots still hates Blink-182 | Justin talks about Hot Water Music | Josh still likes Ska.
This week on the Real Housewives of Salt Lake City, the ladies take to the ice to win a trophy for ice fishing, Mary explains that speaking about certain topics makes her have to "poot", and Jenni explains that she has had 9 miscarriage and doesn't want more children.
JOIN US for part one of two on a record that is near and dear to all of our hearts - The Dopamines Tales of Interest. Jwat, Poots and Pappy get a little toasty and a lot stupid in this episode
JOIN US for part two of two on a record that is near and dear to all of our hearts - The Dopamines Tales of Interest. Jwat, Poots and Pappy get even more toasty and even dumber in this episode
Chaos hits the Democratic Unionist Party, Northern Ireland's largest pro-British bloc, as new leader Edwin Poots is deposed in a revolt just 20 days after taking up the position. Naomi and Tim hear why the woman he usurped Arlene Foster is laughing, the Irish language dispute at the centre of Poots' downfall, and what it all tells us about dynamically changing politics in the North. This is a Halfpint bonus episode made specially to thank our Patreon supporters. To hear our full archive and support the podcast, head over to Patreon.com/theirishpassport. Follow us on Facebook and Twitter at @PassportIrish. If you enjoyed this episode, do give us a good review in your podcast app and share it with your friends.
Shorter episode this week because of a poopy problem with some of our recording software. (Poots!) Sooo we recorded a nice little hang out for you to replace it, boo! Take a few minutes to sit and chill with us when you wind down your day today. Baebae. @ItisNighPod @chriswidin @harristew Music by The Future Cooperative
This week - SMOKIN', BOKIN'... C*CK STROKIN'. Become a member of the "Dead On Mafia" by becoming a patron over at - www.patreon.com/generalbanterpodcast SSE TICKETS: https://www.ticketmaster.ie/event/380... https://uk.manscaped.com - USE CODE "GENBANT1" FOR 20% OFF. Flow CBD can be purchased here code "BANTERFLOW": https://flowcbdltd.com/?wpam_id= The General Banter Podcast is a Comedy podcast hosted by Colin Geddis, Creator of Gedzilla Films, and contains ill-informed opinions on news stories, questions from listeners and of course banter.
Oh man...what a great visit with my friend Chris Baldwin. Chris is well known in Arkansas due to his involvement in running, volunteering, and co-directing races in the state. He and his friend Ronnie are well known for their training and aid station shenanigans. Chris and I both ran the Tahoe 200 in 2018 and we take some time to compare our experiences and laugh a lot about the videos on the internet of his delirium! Chris also gives us an update on his recovery from a fall last year that took him out of the Moab 240 due to a broken hip and wrist. (Hint: He'll be running Umstead 100 when this is released!) Other topics - Arkansas Trail Running Community, The LOViT 100, Arkansas Traveller, and the film that everyone training for Traveller should (not) watch! Show notes: http://www.theriot.run/chrisb
Josh throws the gang a curveball with Matisyahu's Undercurrent. Poots and Pappy lecture Josh on long songs and good conversation is had about just how different this record is than most things we listen to. For fans of rap, jam bands, and soundscape-y vibe stuff!
Hi Everyone! Welcome back to our second episode!!! In this episode I battle it out against the three guys, as they try and score points towards their Ability Scores for their character Poots The Boots, through the usual 6 rounds ~vaguely~ related to the 6 ability scores you find on your D&D Character Sheet. This will be the second character for their Season 1 Adventuring Party (maybe Sh'Thead can come along also; but she has a 2 in strength as a barbarian, so maybe not the best companion!) and we will be back next week to make another character! This weeks games are then as follows: 1 - Strength: Mindflayer Mathletics! 2 - Dexterity: Sending a Message 3 - Constitution: Just 10 Rounds of Combat 4 - Intelligence: Comprehend Languages 5 - Wisdom: Divination (Ahhhh...) 6 - Charisma: Movie Shapeshifter I do hope you enjoy and come along to see more of what we do in our next episode! We want you to be on the podcast!!! So if you want to be a part of the show yourself, or want to get in touch about anything, you can find us at: Dragons Duel - https://twitter.com/dragonsduel (@Dragonsduel) Hamilton (DM) - https://twitter.com/DM_Doesnt (@DM_Doesnt) Ryan (RhinoTek) - https://twitter.com/rhino_tek (@Rhino_Tek) Izzy Rebels - https://twitter.com/BrainAdvPodcast (@BrainAdvPodcast) or... Email us at dragonsduelpodcast@gmail.com DUNGEONS & DRAGONS, D&D, Wizards of the Coast, Forgotten Realms, Ravenloft, Eberron, the dragon ampersand, Ravnica and all other Wizards of the Coast product names, and their respective logos are trademarks of Wizards of the Coast in the USA and other countries. The Intro music was created by myself, with samples from 80s TV intro's to the D&D cartoon, as well as from D&D TSR adverts, Yu-Gi-Oh ユグオ, & the D&D movie from 2000, which I am still surprised Jeremy Irons said yes to! The backing track is Hackers by Karl Casey @ White Bat Audio https://www.youtube.com/redirect?q=https%3A%2F%2Fwhitebataudio.com%2Fhackers%2F&v=NZ4Of3lID84&redir_token=QUFFLUhqbkl0WjVwSjRjSWNtdnA3MDRtUG5lVGgwcGxCUXxBQ3Jtc0trc2dTam1nWURvZXFwelNCZ3Z3QXFVUm5yMGFhaDlMQ3UzNFk0WHZScW8yYldiS2xxTnVkNVctakdFTkZxQzFvSFFWRzhNM1lWQVh1SGNGemktTDB0QnpQQkNUdVNUMVRKQ2JpcTlLVmRtRDZTTVVKTQ%3D%3D&event=video_description (https://whitebataudio.com/) We also use music & Sound Effects from Epidemic Sounds We have been inspired by & borrowed ideas from the BBC's Just A Minute, Who's Line Is It Anyway, & Medium from Greater Than Games https://boardgamegeek.com/boardgame/242529/medium (https://boardgamegeek.com/boardgame/242529/medium) All other original material in this work is copyright 2020 by Hamilton
Join us for a fun chat about Tera Melos X'ed Out - a record that is generally "not assaulting or offensive" to Poots, but does have "weird gross shit that sounds like someone trying to play an instrument that is missing two strings" and parts that "sound like Guitar Center". This record is an enjoyable indie/math rock/experimental jammer that has a little something for everyone.
Put your headphones on, ye lost souls... Pappy and Poots are cracking open a $6-$8 bottle of wine and discussing their love of AFI's The Art of Drowning in this little nugget o' fun.
Today on HTL we are talking minset, the weekly fear in our adult lives and some potential outlook into change, We chat with POOTS the cat and over nonsense will occur Intro Music Provided By: twitter.com/In6Chunx --- This episode is sponsored by · Anchor: The easiest way to make a podcast. https://anchor.fm/app
The boys try to coach Poots through saying “26th”, briefly discuss sports in the time of COVID, and then break down the post-hardcore, dance-punk release from from Q & Not U. No Kill No Beep Beep came out TWENTY years ago on Dischord. Come feel old with us.
Join us this week as we lose our minds over how much all three of us loved this adventure into metal/thrash/weirdo vibes. Poots is still working on reducing her bad habit of saying "like" so dang much.
Wet and gushy Intro - Distance - Twitch4eva Hosts - Koffi and Denzel KFV FACEBOOK TWITTER INSTAGRAM Unartiste FACEBOOK TWITTER INSTAGRAM Question - questionunartiste@gmail.com Advertisement - unartisteco@gmail.com A GCR Production
Wet and gushy Intro - Distance - Twitch4eva Hosts - Koffi and Denzel KFV FACEBOOK TWITTER INSTAGRAM Unartiste FACEBOOK TWITTER INSTAGRAM Question - questionunartiste@gmail.com Advertisement - unartisteco@gmail.com A GCR Production
Meet Josh, Pappy and Poots as they share their edge break stories and decide who gets to pick the first record. In this episode you get to meet the nerds, hear their edge-break stories and learn all about the format of this fun little show. Crack open a Claw and get ready to listen to some new music with us.
Paul and Andy are joined by Squad Number 9 Martin Kelner, Mike Ward runs them through the weekend of TV and Motty reminisces on his encounters with the referees! There's also another edition of Steve Bruce's 'Striker' and a classic game of the Birthday Spread to enjoy in this bumper edition. See acast.com/privacy for privacy and opt-out information.
Welcome back to the PRIMARY COLORS PODCAST where we bring you hot shit and hot takes, for the the culture. Tune in to hear @_tre.von @_kingmidas and , @xxKamwillard provide you colorful content with producer @achaflocka. This week we discuss the latest of trending topics and pop culture news. Don't forget to like
Guest: Philip Poots: GitHub | ClubCollect Previous Episode: 056: Ember vs. Elm: The Showdown with Philip Poots In this episode, Philip Poots joins the show again to talk about the beauty of simplicity, the simplicity and similarities between Elm and Ruby programming languages, whether Elixir is a distant cousin of the two, the complexity of Ember and JavaScript ecosystems (Ember helps, but is fighting a losing battle), static vs. dynamic, the ease of Rails (productivity), and the promise of Ember (productivity, convention). The panel also talks about the definition of "quality", making code long-term maintainable, and determining what is good vs. what is bad for your codebase. Resources: Michel Martens mote Learn the Elm Programming Language and Build Error-Free Apps with Richard Feldman Worse is Better: Richard P. Gabriel Gary Bernhardt's Destroy All Software Screencasts Zen and the Art of Motorcycle Maintenance: An Inquiry into Values The Calm Company It Doesn't Have to Be Crazy at Work This show was produced by Mandy Moore, aka @therubyrep of DevReps, LLC. Transcript: CHARLES:: Hello, everybody and welcome to The Frontside Podcast, Episode 113. My name is Charles Lowell. I'm a developer here at the Frontside and with me today are Taras Mankovski and David Keathley. Hello? DAVID:: Hey, guys. TARAS: Hello, hello. CHARLES:: And we're going to be talking with a serial guest on our serial podcast, Mr Philip Poots, who is the VP of engineering at ClubCollect. Welcome, Philip. PHILIP: Hey, guys. Thanks for having me on. CHARLES:: Yeah. I'm actually excited to have you on. We've had you on a couple of times before. We've been trying to get you on the podcast, I think for about a year, to talk about I think what has kind of a unique story in programming these days. The prevailing narrative is that folks start off with some language that's dynamically typed and object oriented and then at some point, they discover functional programming and then at some point, they discover static programming and they march off into a promised land of Nirvana and no bugs ever, ever happening again. It seems like it's pretty much a straight line from that point to the next point and passing through those way stations. When I talk to you, I guess... Gosh, I think you were the first person that really introduced me to Elm back at Wicked Good Ember in 2016 and it seemed like you were kind of following that arc but actually, that was a bit deceptive because then the next time I talked to you, you were saying, "No, man. I'm really into Ruby and kind of diving in and trying to get into Ruby again," and I was kind of like, "Record scratch." You're kind of jumping around the points. You're not following the preordained story arc. What is going on here? I just kind of wanted to have a conversation about that and find out what the deal was and then, what's kind have guided your journey. PHILIP: There was one event and that was ElmConf Europe, which was a fantastic conference. Really, one of the best conferences I've been to, just because I guess with the nature of early language, small conference environment. There's just a lot of things happening. There's a lot of people. Evan was there, Richard Feldman was there, the leading lights of the Elm community were there and it was fantastic. But I guess, one thing that people have always said to me is the whole way track is the best track of the conference and it's not something I really appreciated before and during the breaks, I ended up talking to a guy called Michel Martens. He is the finder of a Redis sourcing company and I guess, this was just a revelation to me. He was interested in Elm. He was friends with the guys that organized the conference and we got talking and he was like, "I do this in Ruby. I do this in Ruby. I did this in Ruby," and I was like, "What?" and he was like, "Yeah, yeah, yeah." He's a really, really humble guy but as soon as I got home, I checked him out. His GitHub is 'soveran' and it turns out he's written... I don't know, how many gems in Ruby, all with really well-chosen names, very short, very clear, very detailed. The best thing about his libraries is you can print them out on paper. What I mean by that is they were tiny. They were so small and I guess, I just never seen that before. I go into Ruby on Rails -- that was my first exposure to programming, that was my first exposure to everything -- unlike with Rails, often when you hit problems, you'd start to dive a bit deeper and ultimately, you dive so deep that you sunk essentially and you just accepted, "Okay, I'm not going to bend the framework that way this time. Let's figure out how everyone else goes with the framework and do that." Then with Ember when I moved into frontend, that was a similar thing. There were so many layers of complexity that I never felt like had a real handle on it. I kind of just thought this was the way things were. I thought it's always going to be complex. That's just the nature of the problem. That's just the problem they're trying to solve. It's a complex problem and therefore, that complexity is necessary. But it was Elm that taught me, I think that choosing the right primitives and thinking very carefully about the problem can actually give you something that's quite simple but incredibly powerful. Not only something quite simple but something so simple that it can fit inside your head, like this concept of a program fitting inside your head and Rails, I don't know how many heads I need to fit Rails in or Ember for that matter and believe me, I tried it but with Elm, there was that simplicity. When I came across this Ruby, a language I was very familiar with but this Ruby that I had never seen before, a clear example was a templating library and he calls it 'mote' and it's including comments. It's under a hundred lines of code and it does everything you would need to. Sure, there were one or two edge cases that it doesn't cover but it's like, "Let's use the trade off." It almost feels like [inaudible] because he was always a big believer in "You ain't going to need it. Let's go for that 80% win with 20% effort," and this was like that taken to the extreme. CHARLES:: I'm just curious, just to kind of put a fine point on it, it sounds like there might be more in common, like a deeper camaraderie between this style of Ruby and the style encouraged by Elm, even though that on the surface, one is a dynamically typed object oriented language and the other is a statically typed functional language and yet, there's a deeper philosophical alignment that seems like it's invisible to 99% of the discussion that happens around these languages. PHILIP: Yeah, I think so. I think the categories we and this is something Richard Feldman talks. He's a member of the Elm community. He does a lot of talks and has a course also in Frontend Masters, which I highly recommend. But he often talks about the frame of the conversation is wrong because you have good statically typed languages and you have bad statically typed languages. You have good dynamic languages and you have bad dynamic languages. For all interpretations of good and bad, right? I don't want to start any wars here. I think one of the things that Elm and Ruby have in common is the creator. Matz designed Ruby because he wanted programming to be a joy, you know? And Evan created Elm because he wanted programming to be a delight. I think if you experience both of those, like developing in both of those languages, you gain a certain appreciation for what that means. It is almost undefinable, indistinguishable, although you can see the effects of it everywhere. In Ruby, everything is an object, including nil. In Elm, it's almost he's taken everything away. Evan's taken everything away that could potentially cause you to stumble. There's a lot to learn with Elm in terms of getting your head around functional mindset and also, working with types but as far as that goes, people often call it like the Haskell Light, which I think those are a disservice to Elm because it's got different goals. CHARLES:: Yeah, you can tell that. You know, my explorations with Elm, the personality of Elm is 100% different than the personality of Haskell, if that is even a programming term that you can apply. For example, the compiler has an identity. It always talks to you in the first person, "I saw that you did this, perhaps you meant this. You should look here or I couldn't understand what you were trying to tell me." Literally that's how the Elm compiler talks to you. It actually talks to you like a person and so, it's very... Sorry, go ahead. PHILIP: No, no, I think the corollary to that is the principle of the surprise in Ruby. You know, is there going to be a method that does this? You type it out and you're like, "Oh, yes it is," which is why things like inject and reduce are both methods in enumerable. You didn't choose one over the other. It was just like, "Let's make it easy for the person who's programming to use what they know best." I think as well, maybe people don't think about this as deeply but the level of thought that Evan has put into designing Elm is crazy, like he's thought this through. I'm not sure if I said this the last time but I went to a workshop in the early days in London, which is my kind of first real exposure to Elm and Evan was giving the workshop. Someone asked him, "Why didn't you do this?" and he was like, "Well, that might be okay for now but I'm not sure that would make so much sense in 10 years," and I was kind of like, "What?" Because JavaScript and that ecosystem is something which is changing like practically hourly and this is a guy that's thinking 10 years into the future. TARAS: You might have answered it already but I'm curious of what you think is the difference, maybe it just comes down to that long term thinking but we see this in JavaScript world a lot, which is this kind of almost indifference to APIs. It almost doesn't really matter what the API is for whatever reason, there seems to be a big correlation between the API that's exposed with the popularity of the tool. I think there are some patterns, like something that's really simple, like jQuery and React have become popular because of the simplicity of their APIs. What the flip side to that? What other ways can APIs be created that we see in JavaScript world. Because we're talking about this beautiful APIs and I can relate to some of the work that Charles has been doing and I've been doing microstates but I wonder like what would be just a brief alternative to that API, so it's kind of a beautiful API. PHILIP: I don't know if anyone is familiar with the series of essays 'Worse is Better' like East Coast versus West Coast, from Richard Gabriel. The problem is, I guess and maybe this is just my understanding over my paraphrase of it, I'm not too familiar with it but I think that good APIs take time and people don't have time. If someone launches a V1 at first and it kind of does the job, people will use that over nothing and then whenever they're happy with that, they'll continue to use it and develop it and ultimately, if she's market share and then that's just the thing everyone uses and the other guy's kind of left behind like, "This is so much better." I guess this is a question, I think it was after Wicked Good Ember, I happened to be on the same trend as Tom Dale on the way back to New York and we started talking about this. I think that's his big question. I think it's also a question that still has to be answered, which is, "Will Elm ever be mainstream? Will it be the most popular thing?" aside from the question of whether it has to be or not. For me, a good APIs good design comes from understanding the problem fully -- CHARLES:: And you can understand the problem fully without time. PHILIP: Exactly and often, what happens -- at least this is what happens in my experience with the production software that I've written -- is that you don't actually understand the problem until you've developed a solution for it. Then when you've developed a solution for it, often the pressures or the commercial pressures or an open source is [inaudible] the pressures of backwards compatibility, mean that you can never refactor your way to what you think the best solution is and often, you start from scratch and the reality is people are too far away with the stuff you wrote in the past about the thing you're writing now. Those are always kind of at odds. I think there are a lot of people that are annoyed with Elm because the updates are too slow, it relies on Evan and we want to have a pool request accepted. All of the things that they don't necessarily recognize like the absence of which make Elm an Elm, if you know what I mean. The very fact that Evan does set such a high standard and does want everything to go through his personal filters because otherwise, you wouldn't gain the benefits that Elm gives you. The attention is very real in terms of I want to shift my software now and it becomes easier then. I think to go to a language like JavaScript, which has all of the escape hatches that you need, to be able to chop and change, to edit, to do what you need to do to get the job done and let's be quite honest, I think, also with Elm, that's the challenge for someone who's not an expert level like me. Once you hit a roadblock, you'll say, "Where do I go from here?" I know if I was using JavaScript, I could just like hack it and then clients are happy and everything's fine and you know there's a bit of stuff in your code that you would rather wasn't but at the end of the day, you go home and the job's done. DAVID:: Have you had to teach Elm to other people? You and I did some work like I've seen you pair with someone and guide them through the work that they needs to get done. If you had a chance to do something like that with Elm and see how that actually happens, like how do developer's mind develops as they're working through in using the tool? PHILIP: Unfortunately not. I would actually love to go through that experience. I hope none of my developers are listening to this podcast but secretly, I want to push them in the direction of Elm on the frontend. But no, but I can at least make from my own perspective. I find it very challenging at first because for me, being a Ruby developer and also, I would never say that I understood JavaScript as much as I would have liked. Coming from dynamic language, no functional experience to functional language with types, it's almost like learning a couple of different things at the same time and that was challenging. I think if I were to take someone through it, I would maybe start with a functional aspects and then move on to the type aspects or vice versa, like try and clearly breakdown and it's difficult because those two are so intertwined at some level. Gary Bernhardt of Destroy All Software Screencast, I watch quite a bit of his stuff and I had sent him an email to ask him some questions about one of the episodes that he did and he told me that he done the programming languages course, I think it's on Coursera from Daniel Grossman, so [inaudible] ML which is kind of the father of all MLs like Haskell and also Elm. I find that really helpful because he broke it down on a very basic level and his goal wasn't to teach you ML. It was to teach you functional programming. It would be a very interesting exercise, I think. I think the benefit that Elm gave you is you get to experience that delight very quickly with, "Oh, it's broken. Here's a nice message. I fix the message. It compiles. Wow, it works," and then there's a very big jump whenever you start talking about the effects. Whenever you want to actually do something like HTTP calls or dealing with the time or I guess, the impure stuff you would call in the Haskell-land and that was also kind of a bit weird. CHARLES:: Also, there's been some churn around that, right? PHILIP: That's right. When I started learning, they had signals, then they kind of pushed that all behind the scenes and made it a lot more straightforward. Then I just mastered it and I was like, "Yes, I know it," and then I was like, "All right. I don't need to know it anymore." This is the interesting thing for me because at work, most of our work now is in Elixir and Phoenix. I'm kind of picking a little bit up as I work with them. I think Elm's architecture behind the scenes is kind of based, I believe on Erlang's process model, so the idea of a mailbox and sending messages and dealing with immutable state. CHARLES:: Which is kind of ironically is very object oriented in a way, right? It's functional but also the concept of mailboxes and sending messages and essentially, if you substitute object for process, you have these thousands and thousands of processes that are sending messages back and forth to each other. PHILIP: Yeah, that's right. It's like on a grand scale, on a distributed scale. Although I wouldn't say that I'm that far with Erlang, Elixir to appreciate the reality of that yet but that's what they say absolutely. CHARLES:: Now, Phoenix and Elixir is a dynamically typed functional language. does it share the simplicity? One of the criticisms you had of Rails was that you couldn't fit it in your head. It was very difficult. Is there anything different about Elixir that kind of makes it a spirit cousin of Elm and the simple Ruby? PHILIP: I think so, yes. Absolutely. I don't think it gets to the same level but I think it's in the right direction and specifically on the framework front, it was designed specifically... I mean, in a sense it's like the anti-type to Rails because it was born out of people's frustrations with Rails. José Valim was pretty much one of Rails top core committers. Basically, every Rails application I wrote at one period, at 80% of the code written by José Valim, if you included all the gems, the device and the resourceful and all the rest of it. Elixir in many ways was born out of the kind of limitations of Ruby with Rails and Phoenix was also born out of frustrations with the complexity of Rails. While it's not as simple as say, Michel Martens' Syro which is like his web framework, which is a successor to Cuba if people have heard of that, it is a step in the right direction. I don't understand it but I certainly feel like I could. They have plug which is kind of analogous but not identical to Rack but then the whole thing is built out of plugs. I remember Yehuda Katz give a presentation like 'The Next Five Years' and essentially about Rails 3.0. This is going way back and Phoenix is in some ways the manifestation of his desire to have like the Russian doll pattern, where you could nest applications inside applications and you could have them side by side and put them inside each other and things like that. Phoenix has this concept called umbrella applications which tells that, like Ecto is a really, really nice obstruction for working with the database. CHARLES:: I see. It feels like, as opposed to being functional or static versus dynamic, the question is how do you generate your complexity? How do you cope with complexity? Because I think you touched on it at the beginning of the conversation where you thought that my problems are complex so the systems that I work with to solve those problems must necessarily also be complex. I think one of the things that I've certainly realized, kind of in the later stages of my career is that first part is true. The problems that we encounter are extremely complex but you're much better served if you actually achieve that complexity by composing radically simple systems and recombining them. To the commonality of your system is going to determine how easy it's going to work with and how well it can cope with complexity. What really drives a good system is the quality of its primitives. PHILIP: Absolutely. After ElmConf, I actually invited Michel to come to my place in the Netherlands. He live in Paris but I think he grew up Buenos Aires in Argentina. To my amazement, he said, "Yes, okay," and we spent a couple of days together and there he talked to me about Christopher Alexander and the patterns book, where patterns and design patterns actually grew out of. One of his biggest things was the code is the easiest part, like you've got to spend 80% of your time thinking deeply about the problem, like literally go outside, take long looks. I'm not sure if this is what Rich Hickey means with Hammock Driven Development. I've never actually got around to watching the talk. CHARLES:: I think it's exactly what he means. PHILIP: And he said like once you get at, the code just comes. I think Michel's work, you should really check it out. I'll send you a link to put in the show notes but everything is built out of really small libraries that do one thing and do it really well. For example, he has a library like a Redis client but the Redis client also has something called Nest, which is a way to generate the keys for nested hashes. Because that's a well-designed, the Redis client is literally just a layer on top. If you understand the primitive then, you can use the library on top really well. You can embed Syro applications within Syro applications. I guess, there you also need the luxury of time and I think this is where maybe my role as VP of engineering, which is kind of my first role of that kind, comes in here which is when you're working on the commercial pressure, try to turn around to a business guy and say, "Yes, we'll solve this problem but can we take three weeks to think about it?" It's never going to happen -- CHARLES:: No. PHILIP: Absolutely, it will never going to happen. Although the small things that I tried to do day to day now is get away from the computer, write on paper, write out the problem as you understand it, attack it from different angles, think about different viewpoints, etcetera. CHARLES:: I think if you are able to quantify the cost of not thinking about it for three weeks, then the business person that you're going to talk to is their ears are going to perk up, right? But that's so hard to do. You know, I try and make like when we're saying like, "What technologies are you going to choose? What are the long term ramifications in terms of dollars or euros or whatever currency you happen to be in for making this decision?" I wish we had more support in thinking about that but it is kind of like a one-off every time. Anyway, I'm getting a little bit off track. PHILIP: No, not at all. This is a subject I love to talk about because we kind of had a few a bit of turbulence because we thought, maybe we should get product people in, maybe we should get them a product team going and what I find was -- and this is maybe unique to the size of the company -- that actually made things a lot more difficult because you got too many heads in many ways. Sometimes, it's better to give the developer all of the context so that he can think about it and come up with the best solution because ultimately, he's the only one who can understand. I wouldn't say understands the dollars and cents but he understands the cost implications of doing it in efficient ways, which often happens when you're working in larger teams. TARAS: One thing I find really interesting about this conversation is the definition of good is really complicated here. I've observed Charles work on microstates and I work with him, like I wrote a lot of the code and we got through like five or six iterations and at every point, he got better but it is so difficult to define that. Then when you start to that conversations outside of that code context and you start to introduce business into the mix, the definition of good becomes extremely complicated. What do you think about that? How do we define it in a way? Are there cultures or engineering cultures or societal cultures that have a better definition for good that is relevant to doing quality work of this? CHARLES:: That's a deep question. PHILIP: Wow. Yeah, a really, really deep question. I think often for business, like purely commercially-driven, money-oriented good is the cheapest thing that gets the job done and often that's very short term, I think. As you alluded to Charles, that people don't think about the cost of not doing the right things, so to speak in our eyes and also, there's a huge philosophical discussion whether our definition of good as programmers and people who care about our craft is even analogous to or equal to a good in a commercial context. CHARLES:: Yes, because ultimately and this is if you have read Zen in the Art of Motorcycle Maintenance, one of the things that Pirsig talks about is what is the definition of quality. How do we define something that's good or something that's bad? One of the definitions that gets put forward is how well something is fit to purpose. Unless you understand the purpose, then you can't determine quality because the purpose defines a very rich texture, a very rich surface and so, quality is going to be the object that maps very evenly and cleanly over that surface. When it comes to what people want in a program, they're going to want very different thing. A developer might need stimulation for this is something that's very new, this is something that's going to keep my interest or it's going to be keeping my CPU max and I'm going to be learning a whole lot. A solution that actually solves for that purpose is going to be a high quality solution. Also, this is going to be fast. We're going to be able to get to market very quickly. It might be one of the purposes and so, a solution that is fast and the purpose fits so it's going to be good. Also, I think developers are just self-indulgent and looking for the next best thing in something that's going to keep their interest, although we're all guilty of that. But at the same time, we're going to be the ones maintaining software, both in our current projects and collectively when we move to a new job and we're going to be responsible for someone else's code, then we're going to be paying the cost of those decisions. We both want to minimize the pain for ourselves and minimize the pain for others who are going to be coming and working in our code to make things long term maintainable. That's one axis of purpose and therefore, an axis of quality. I think in order to measure good and bad, you really have to have a good definition of what is the purpose of that surface is so rich but the more you can map it and find out where the contours lie, the more you're going to be able to determine what's good and what's bad. TARAS: It makes me think of like what is a good hammer. A sledgehammer is a really good hammer but it's not the right hammer for every job. CHARLES:: Right. TARAS: I think what you're saying is understanding what is it that you're actually doing and then matching your solution to what you're actually trying to accomplish. PHILIP: Yeah, absolutely and in my experience, we have a Ruby team building a Rails application. That's our monolith and then, we have a couple of Elixir teams with services that have been spun out of that. This isn't proven. This is just kind of gut feel right now and it is that Elixir is sometimes slower to develop the same feature or ship it but in the long term it's more maintainable. I haven't actually gotten dived into to React and all of the amazing frameworks that it has in terms of getting things up and running quickly but in terms of the full scale application, I still think 10, 11 years on, Rails has no equal in terms of proving a business case in the shortest time possible. CHARLES:: Yeah. I feel very similarly too but the question is does your development team approach the problem as proving a business case or do they approach the problem as I want to solve the set of features? PHILIP: Yes. Where I'm working at the moment, I started out just as a software developer. I guess, we would qualify for 37 signals or sorry... base camps definition of a calm company -- CHARLES:: Of a what company? PHILIP: A calm company. Sorry. They just released a new book and called 'The Calm Company' and 'It Doesn't Have to Be Crazy at Work.' I was given in my first couple of months, a problem. It was business oriented, it had to be solved but it had to be solved well from a technical perspective because we didn't want to have to return to it every time. It was standardizing the way that we exported data from the database to Excel. You know, I was amazed because it was literally, the first time that I'd been given the space to actually dive in on a technical level to do that kind of stuff. But I think even per feature, that varies and that sometimes challenging when handing the work on because you've got to say, "This fit. Literally, we're just trying to prove, whether if we have this feature, the people will use it?" versus, "This is a feature that's going to be used every day and therefore, needs to be at good, technical quality." Those are the tradeoffs that I guess, keep you in a job. Because if it was easy, then you would need anyone to figure it out but it's always a challenge. What I like is that our tools are actually getting better and I think, with Elm for example, it's kind of major selling point is maintainability and yet, with Elm, there haven't been that many companies with Elm over a period of years that exists, that can live to tell the tale. Whereas, we certainly know with Rails applications have done well like Basecamp and GitHub. For sure, they can be super maintainable but the fact that it took GitHub to just moved Elm to Rails 5.0, I belief, the fact that it took them years and years and they were running off at fork of Rails 2.3, I think it shows the scale of the problem in that way. You know, Phoenix also went through a few issues, kind of moving architectures from the classic Rails to a more demand driven design model. I think we're getting there slowly, zig-zagging towards a place where we better understand how to write software to solve business problems. I guess, I was really interested in microstates when you shared it at Wicked Good Ember because that to me was attacking the problem from the right perspective. It's like given the fact that the ecosystem is always changing. How can we extract the business logic such that these changes don't affect the logic of our application? CHARLES:: Man, we got a lot to show you. It has changed quite a bit in the last two years. Hopefully, for the better. TARAS: It's been reduced and it's almost a quarter of its size while maintaining the same feature set and it's faster, it's lazier, it's better in every respect. It's just the ideas have actually been fairly consistent. It's just the implementation that's evolved. CHARLES:: Yeah, it's been quite a journey. It parallels kind of the story that we're talking about here in the sense that it really has been a search for primitives and a search for simplification. One of the things that we've been talking about, having these Ruby gems that do one thing and do it very, very, very well or the way that Elixir being architected has some very, very good primitives or Elm, the same kind of thing being spiritually aligned, even though on the surface, it might share more in common with Haskell. There's actually a deep alignment with a thing like Ruby and that's a very surprising result. I think one of the things that appeals to me about the type of functional programming that is ironically, I guess not present in Elm, where you have the concept of these type classes but I actually think, I love them for their simplicity. I've kind of become disenchanted with things like Lodash, even though they're nominally functional. The fact that you don't have things like monoid and functors and stuff is kind of first class participants in the ecosystems, means you have to have a bunch of throwaway functions. Those API surface area is very large, whereas if you do account for those things, these kind of ways of combining data and that's how you achieve your complexity, is not by a bunch of one-off methods that are like in Lodash, they're all provided for you so you don't have or have to write them yourself. That is one level of convenience but having access to five primitives, I think that's the power of the kind of the deeper functional programming types. PHILIP: And Charles, do you think that that gives you the ability to think at a higher level, about the problems that you're solving? Would you make that link? CHARLES:: Absolutely. PHILIP: So, if we're not doing that, then we're actually doing ourselves a disservice? CHARLES:: I would say so. PHILIP: Because we're actually creating complexity, where it shouldn't exist? CHARLES:: Yeah, I think if you have a more powerful primitive, you can think of things like async functions and generator functions, there's a common thread between async functions, generator functions, promises arrays and they're all functors. For me, that's a very profound realization and there might be a deeper spiritual link between say, an async function and an array in the same way that there's a deep spiritual link between Ruby and Elm, that if you don't see that, then you're doing yourself a disservice and you're able to think at a higher level. Also, you have a smaller tool set where each tool is more powerful. PHILIP: You did a grit, I think it was a repository with a ReadMe, where you boiled down what people would term what I would term, the scary functional language down to a very simple JavaScript. Did you ever finish that? Did you get to the monads? CHARLES:: I did get to the monads, yeah. PHILIP: Okay. I need to check that out again. I find that really, really helpful because I think one of Evan's big things with Elm is he doesn't use those terms ever and he avoids them like the plague because I think he believes they come tinged with the negative experiences of people trying Haskell and essentially getting laughed at, right? CHARLES:: Yes. I think there's something to that. TARAS: But we're doing that in microstates as well, right? In microstates documentation, even though microstates are written completely with these functional primitives, on the outside, there's almost no mention of it. It's just that when you actually go to use it, if you have an idea, one of the thing that's really powerful with microstates is that this idea that you can return another microstate from a transition and what that will do is what you kind of like what a flat map would do, which is replace that particular node with the thing that you returned it with. For a lot of people, they might not know that that's like a flat map would do but a microstate will do exactly what they wanted to do when it didn't realize that's actually should just work like that. I think, a lot of the work that we've done recently is to package all things and it make it powerful and to access the concepts that it is very familiar, something you don't need to learn. You just use it and it just works for you. CHARLES:: Right but it is something that I feel like there's unharvested value for every programmer out there in these type classes: monads and monoids and functors and co-functors or covariant functors, contravariant functors, blah-blah-blah, that entire canon. I wish there was some way to reconcile the negative connotations and baggage that that has because we feel kind of the same way and I think that Evan's absolutely right. You do want to hide that or make it so that the technology is accessible without having to know those things. But in the same way, these concepts are so powerful, both in terms of just having to think less and having to write less code but also, as a tool to say, "I've got this process. Is there any way that could it be a functor? If I can find a way that this thing is a functor, I can just save myself so much time and take so many shortcuts with it." PHILIP: And in order to be able to communicate that, or at least communicate about that, you need to have terms to call these things, right? Because you can't always just refer to the code or the pattern. It's always good to have a name. I'm with you. I see value in both, like making it approachable, so the people who don't know the terms are not frightened away. But I also see value in using the terms that have always existed to refer to those things, so that things are clear and we can communicate about them. CHARLES:: Right. definitely, there's a tradeoff there. I don't know where exactly the line is but it would be nice to be able to have our cake and eat that one too. We didn't get really to talk about the type versus dynamic in the greater context of this whole conversation. We can explore that topic a little bit. PHILIP: Well, I can finish with, I think the future is typed Erlang. Maybe, that's Elm running on BEAM. CHARLES:: Whoa. What a take? Right there, folks. I love it. I love it but what makes you say that? Typed Erlang doesn't exist right now, right? PHILIP: Exactly. CHARLES:: And Elm definitely doesn't run on BEAM. PHILIP: I don't know if I'm allowed to say this. When I was at this workshop with Evan, he mentioned that and I'm not sure whether he mentioned it just as a throwaway comment or whether this is part of his 20-year plan but I think the very fact that Elm is designed around like Erlang, the signal stuff was designed around the way Erlang does communication and processes, it means I know at least he appreciates that model. From my point of view, with my experience with Elixir and Erlang in production usage, it's not huge scale but it's scale enough to need to start doing performance work on Rails and just to see how effortless things are with Elixir and with Erlang. I think Elm in the backend would be amazing but it would have to be a slightly different language, I think because the problems are different. We began this by saying that my story was a little different to the norm because I went back to the dynamic, at the dark side but for example in Elixir, I do miss types hugely. They kind of have a little bit of a hack with Erlang because they return a lot of tuples with OK and then the object. You know, it's almost like wrapping it up in a [inaudible]. There are little things and there's Dialyzer to kind of type check and I think there are a few projects which do add types to Erlang, etcetera. But I think something that works would need to be designed from the ground up to be typed and also run in the BEAM, rather than be like a squashed version of something else to fit somewhere else, if that makes sense. CHARLES:: It makes total sense. PHILIP: I think so. I recently read a book, just to finish which was 'FSharpForFunAndProfit' is his website, Scott Wlaschin, I think. It's written up with F# but it's about designing your program in a type functional language. Using the book, you could probably then just design your programs on paper and only commit to code at the end because you're thinking right down to the level of the types and the process and the pipelines, which to me sounds amazing because I could work outside. CHARLES:: Right. All right-y. I will go ahead and wrap it up. I would just like to say thank you so much, Philip for coming on and talking about your story, as unorthodox as it might be. PHILIP: Thank you. CHARLES:: Thank you, Taras. Thank you, David. TARAS: Thank you for having us. CHARLES:: That's it for Episode 113. We are the Frontside. This is The Frontside Podcast. We build applications that you can stake your future on. If that's something that you're interested in, please get in touch with us. If you have any ideas for a future podcast, things that you'd like to hear us discuss or any feedback on the things that you did here, please just let us know. Once again, thank you Mandy for putting together this wonderful podcast and now we will see you all next time.
This week, Lisa Lawrie (@JMOESandBFFs) and Rafael Castaneda(@RMCGuitars)are joined by Rachel Phillips (@ItsSImplyRachel) and Toby Milton (@TMilt) tp discuss this week's @ARIYNBF episodes~ "A.J. Returns" & "Jordan's Parisian Nudity, Alison's Cough, Happy Thanksgiving" We talk Lumpy Melting Pots, Patreon Carbs, Scorin' Looseys, Naked Jordan, Sick Movies, What We Are Thankful For and Poots! PLUS LOTS OF SHOUTOUTS! Logo by Ray Morgan (@RaymorganIII) Posted to iTunes by Jason Dix (@WoodLoaf)
This week, Lisa Lawrie (@JMOESandBFFs) and Rafael Castaneda(@RMCGuitars)are joined by Rachel Phillips (@ItsSImplyRachel) and Toby Milton (@TMilt) tp discuss this week's @ARIYNBF episodes~ “A.J. Returns” & “Jordan's Parisian Nudity, Alison's Cough, Happy Thanksgiving” We talk Lumpy Melting Pots, Patreon Carbs, Scorin' Looseys, Naked Jordan, Sick Movies, What We Are Thankful For and Poots! PLUS LOTS […]
Philip Poots @pootsbook | GitHub Show Notes: 00:53 - What is Elm? 03:45 - The Essence of User Interface 07:59 - “Messages” 08:31 - Scalability 14:04 - Error Handling 18:47 - The Business Case 22:35 - Where is Elm on the curve of scalability? 28:36 - Learning From Elm 32:32 - “Whole Meal Solutions” Resources: Philip Poots: Elmber @ Wicked Good Ember 2016 Cycle.js Functional Reactive Programming Evan Czaplicki Test-driven Development (TDD) NoRedInk The Elm Mailing List Try Elm Elm Guide elmtutorial.org Elm For Beginners by James Moore Transcript: CHARLES: Hello, everybody. Welcome to The Frontside Podcast Episode 56. I am Charles Lowell, a developer here at The Frontside. With me is Jeffrey Cherewaty, also a developer here at The Frontside. JEFFREY: Hey-o! CHARLES: We're going to be talking today with Philip Poots, who is a fantastic individual, who I have known over the Twitters, over the e-mails, interacted with at conferences, seen him speak on at least one occasion and today we're actually going to be talking about the thing that I saw him speak at Wicked Good Ember last June. It was actually one of my favorite talks from that conference. It was on Elm for Ember developers. Thank you very much for being on the show, Philip. Why don't you tell us a little bit about what Elm is and how you came to find out about it and really kind of dive deeply into it? PHILIP: Yeah, sure. First of all, pleasure to be on the show. The Frontside is one of my favorite podcast, if not my favorite, given a cross-section of the Dadcast, the love of programming and balancing that with the business of programming. That's right, I'm an independent developer. I started off with Rails then got into the Ember quite early on. Last year, I think around January, that's when I started really investigating Elm in detail. It's actually a funny story how I came about because I was at Ember Amsterdam and it was a night where we had three members of the core team: we had Erik Bryn, he gave a talk, Alex Matchneer, gave a talk and Igor also came over because he's based in Europe. Alex always loves to investigate new things and one of the things he was getting into was Observables. I'd never heard about Observables at all so after the talk, I kind of pulled him aside and I asked him some very stupid questions. He was gracious enough to bear with me and to dive a little deeper into this stuff. Alex is kind of a quiet member of the core team, unless he's got his drum sticks but he's the guy that rewrote the [inaudible]. That was no mean feat because I got into Ember just before that moment and the way he managed to make that incredibly easy was fantastic so I kind of had an extra ear open to what he had to say. I went on this Observables talk. You know, you start off with React that was the framework that was using Observables the most. That brought me to Cycle.js -- CHARLES: Cycle.js? I haven't heard of that. Is Cycle.js a framework built on top of Observables? PHILIP: It is. There's a guy called André Staltz or André Medeiros but he uses Staltz as his name. It's largely based off the same principles as React. Cycle, basically one of his inspirations or at least one of the things which cycle is most like was the Elm architecture. He calls it Model-View-Intent. We have Model-View-Controller and Elm was model update view but essentially, the same principles. You know, I'm the kind of guy that likes to get stuck in, to go deep and where I started with Observables then I ended up at Elm. I started playing around with that, I started looking into it and I loved what I saw. The thing above all that really attracted me to it was the pure simplicity of what was going on. It was almost like they boiled down the UI paradigm to its essence and removed all the extra cruft and you just saw what you meant what you wanted and it gave you these, what I thought at the time, composable way to put things together. CHARLES: Can we unpack that just a little bit? I really love that idea of it boiled down to the essence of UI. I assume there are certain coordinating mechanisms that Elm employs. It's interesting to hear you say that Cycle.js has used Elm as an inspiration. I also understand that Redux is inspired also by the Elm architecture. I'm very curious, what are those kind of essential mechanics that drew your attention? PHILIP: I think you can look at it from two points of view. The first is, which I didn't actually learn until later but the first is essentially boiling down functional programming. You're decoupled, you're using functions and not only functional programming and there's a lot of arguments over this term but functional reactive programming. The idea of functional programming is stateless. Therefore, time is kind of the beast that you have to deal with. But FRP, then essentially boils time into the concept of values that can change over time so you have a reference to one value but in JavaScript that's an Observable. In Elm, in the beginning, when I was getting into it, that was signals. That's not all kind of hidden underneath so you don't really need to get over that conceptual hurdle anymore. Then the boiling down to the essence, I guess that's more from a code point of view with Ember. Especially at the beginning, there were a ton of different concepts that were thrown at you to begin with. It was billed as an MVC framework. It was sold as an MVC framework but you had helpers in there, you had components, you had views model controller. You had this cluster of things. You could see MVC in there but there were enough things surrounding it to kind of think, "Where does this piece of code go? Where does that piece of code go? Where should I do this?" CHARLES: There are a lot of blog posts trying to explain what exactly is the view, is the template the view? Is the controller the view? What's the difference between a view and a controller? PHILIP: The way I think about frameworks is they give you buckets to put your code. The buckets are kind of all connected together. I'm thinking at a really simplistic level. I need to write this feature, I need this bit of code, I need this bit of logic, where do I stick it? A framework says you should stick it here or you should stick it there. It's solves the need of having to think about the broader architecture and how things interact because those things have been solved for you. Now with Elm, it was just so straightforward to say, "This goes here: all the data, the model. It lives in this record, which is equivalent to a JavaScript object, we can say on a simple level. Anything you need to do with state, happens there. Then you've got the view and the view is simply a function, which takes that data structure and then you tell it how to render it to HTML and then all of the action, everything that happens in your application is also defined in one place in your update function. That's it, like no more than you need and no less than you need. CHARLES: Yeah, I love that. I feel like it is very much as 'data down, actions up' kind of boiled down to the essence. It's almost better at that paradigm than Ember is in itself, with having your view as just a function. Your state transition or your update is just a function. Then your model is just unadorned data. That's all it is. PHILIP: The type system as well in Elm, also made it really straightforward. My model is a record. That's it. My view is HTML in the beginning but then it moves to HTML, which contains messages. Essentially, I've got HTML and in the HTML, there are events or actions and those actions will send messages and really straight forward. Then the update function, I take in the current model, I take in the message and I decide via pattern matching what I want to do. There are a few extra bits and pieces around there but that's the essence of it. CHARLES: Now, when you say messages, I'm thinking this is a way of declaring what actions you will take when certain HTML elements, like events happen, like you declaratively mapping an event to the dispatch of an action. PHILIP: That's correct, with any extra data so a message is itself. Like the actions hash in Ember essentially and along with the parameters for that action, which would passing through the HTML. CHARLES: Some might argue that if something is simple to get something working, I can have a pure function that's a view, I can have a simple data structure which is my model. I can have a pure function which is my update or my state transition, how I change my data or affect changes to the model. Some might say, "That's very simple," but simple is great for simple cases. But then there's the question of scalability. As my application becomes more complex and has the interactions become more complex, does that simple paradigm actually scale? What has been your experience there? PHILIP: Straightforward answer -- it's a learning curve to scale. Why? Because it's so new and also because the things that you would have reached for in the past aren't available to you. When I think of Ember scaling, the scale is built into the framework. You need another component, you just add another component. You need another model, you add another model. There's a clear story or there's a clear way that you deliver a new feature. I think that's a fantastic aspect of Ember that you also say no. I can remember being at Wicked Good Ember and just realizing how many of the people that were speaking and how many of the people that I was talking to work for bigger companies -- Heroku Dashboard, you had LinkedIn and the fact that Ember scales across a large team size, it's a real testament to Ember, which is slightly different for the reason why I got into Ember. Also you know I had a few issues just on a side project with a friend, the pace of Elm's change meant that when you only have a limited time to devote to the project, then you don't want to be spending that time for going out where you should be in terms of the upgrade process, etcetera. That's a known path and I think that's a really clear advantage of Ember over Elm. The path in Elm is not as well-fleshed out and there's a bit of tension between Elm as a single page application and then Elm as an application that you stick on every page of your server generated app, for example. The main people who use Elm NoRedInk could employ Evan Czaplicki, the creator of Elm, there up at the minute is a Rails up. I think in Elm up for every page, I believe that certainly was the case, whether that's [inaudible], I don't know. It's not an area where it's like here's the path, go for it because the scalability of Elm, everyone came into Elm thinking, "I know react. I know Ember, the components system, 'data down, actions up'," and in React, you're really encouraged to make a component for the smallest thing on the page as a component. Then you have container components, you make your way out of the onion skin and hope you don't cry on the way. [Laughter] PHILIP: But the thing about Elm was everyone jumped in and tried to do it this way. I certainly got the impression when I was beginning that the Elm architecture was infinitely Nestable Russian dolls. It is in a way but the difficulty is then passing into component communication between parent and child and people had been figuring it on a weird ways with signals to do it but then became obsolete. The main encouragement is basically go so far with a single component that you can and then once you had problems, try not to create new components or new bits of UI but to extract the bits you need into modules. This is actually one of the things that really attracted me to Elm is that you're encouraged to lean on your programming skill set, rather than learning a whole new frameworks way of doing things so that the things that work in functional programming will work in Elm. But that's also a down side because all of a sudden, you have to exercise your programming chops. Let's be honest, a lot of the stuff we're building we're like gluing things together. We're not thinking up new architectures or ways of doing things. That's definitely a learning curve and that's definitely a struggle or something that I find difficult. CHARLES: Yeah, I feel like that touches a lot on the messages you get from the FP community. I know certainly in the interactions I've had with the Clojure community, they're very big on that and it's like, "Let's have very powerful primitives." They have that term 'decomplecting', like let's get at the core. It's like understand that essence so if we can compose and we can enable composition of these low level functions and allow you to compose the data, then you don't have to worry so much about everything else. There will be a way. I think the counterpoint to that is that you end up with a lot of different ways because there are a lot of different ways that you can compose a very small set of primitives. PHILIP: Yes, that's right. But I think one of the advantages of Elm over maybe other FP languages and this is where the similarity with Ember comes in as well. It tries very much to cement simple convention but not only by convention but actually baked into the language so people that are coming from more powerful functional programming languages often come to Elm and think, "Why can't I do that? Why do I have to write all this boilerplate code," and the reason is because then it's not going to be simple enough anymore for people to use it. Also the goal of Elm, which is this long term maintainability of large code bases, you kind of shoot yourself in the foot a bit just like you said, Charles. CHARLES: Yeah, I think that's actually a great point. It's actually one of the things that was most memorable, I think about your talk at Wicked Good was -- just a quick anecdote. I remember in 2007, when iPhone came out, I had an iPhone and my father in law came over from Finland and this is a guy who was a Nokia partisan. I mean, part of Finnish pride was everybody own -- JEFFREY: National phone of Finland. CHARLES: Yeah, exactly. Everybody owned the Nokia mobile phone. He came over, He visited me and I had an iPhone and he was like, "Can I see it?" He took it, he had the swipe to unlock and he swiped it and it unlocked and all the app icons just kind of came right into the screen and he was like, "I want one." [Laughter] CHARLES: That was all it took. I've never seen a sales process so utterly complete and so rapid in its realization. For me, I think that moment when I saw you talk was when you made a mistake like where you were trying to match against an improper attribute on the model inside the update function. The first thing that happened was that Elm caught it before you could even compile your program and the error was just beautiful. It put its finger right on and it's like you need to fix this right here so there's much tied up into that because I feel like it addresses a lot of the learning curve problems that we have in Ember. PHILIP: I don't think that's Ember specific -- CHARLES: No, it's not, it's -- PHILIP: That's the JavaScript thing, isn't it? CHARLES: Yeah. PHILIP: In many ways, I think of JavaScript as a very low level substrate. It's like sand, it's very granular and it's very hard to put together well without falling apart, whereas in Elm gives you bigger blocks, so to speak but it also defines a way through the type system where if you don't put those blocks together in the right way, it's going to tell you. That's why despite some of the ignorance of how best to do Elm apps, that's why people continue to use it because it gives them this delightful experience. CHARLES: Yeah, it was fantastic where when you fail, it picks you up, dust you off and sets you right back on the right track. I think one, that's just a freaking awesome feature and I think also two, the thing that struck me when I saw that was like, "Wow, this community has a different focus than other FP communities that I've come into contact with because I have encountered that exact same error message in Haskell and it left me puzzling and wondering what to do. It's like, "No instance for type class blah-blah-blah for class blah." Then if you're an experienced Haskeller, it does point right to the problem in the same way that like you've learn the parse Perl stack traces. You know, you see a Perl stack trace and you understand it. But they could have gone that way with Elm but the other thing that it demonstrated, it has kind of a different focus there. PHILIP: Absolutely and that really comes down to Evan Czaplicki, the creator of Elm. I was able to get over to London in October a couple of years ago or a year and a half ago now to do a workshop with him at the Code Mesh Conference. You know, just seeing him teach this stuff and saying go into this and talk about the things in a bit more detail, it was very clear. First of all that he'd had a negative experience picking up Haskell, I think it was and he just thought, it doesn't have to be this hard. The things aren't actually that hard. It's the way that we're explaining them that makes it hard. The things that are actually under the surface is really simple. He has a blanket ban on this kind of technical jargon. In the Elm community, he prefers to get things really straightforward names. I think he said to me that one of his thesis advisors or his university professor said, "Evan, that's what you get when you put a usability specialist into a programming language creator's shoes," that he does have this focus where he understands the benefits of static-type systems but he also deeply cares about the experience of not only picking up the language and learning it but also the day you solve it and that's something that just shines through. I think even if Elm never makes it into the pantheon of great programming languages like that in itself and the influence of that had already on other communities, this is fantastic. It's the tide that lifts all boats in many ways and we all benefit from that. JEFFREY: We kind of touch on this a little bit earlier. We've been talking about the ergonomics of being an engineer working with Elm or Ember. What about the business case? We've mentioned how Ember has prevent a scale fairly well in large organizations. What's Elm's path to being able to do that and where is the niche to that it fits in right now? PHILIP: I definitely think Ember comes out of Apple, I believe with sprite core. That's where it started and it's interesting to see that that's also where it's gone in terms of the focuses and making it easy to build these rich applications. I think also that Elm has a similar genesis in the sense that Evan, I believe he did an internship at Microsoft and one at Google and I think there's a conference talk as well from large JS or elm lock or something, millions of lines of code. It's definitely gunning for the CM area which is applications which are large and hairy and trying to make the maintainability a lot better by bringing the strengths of the static type system to bear and bring the simplicity that that enables. That means that the learning curve maybe is a little sharper at the beginning, in a similar way, also that Ember was and is. But then you should reach this point where the maintainability of the app outweighs the time spent in learning. I think about it a bit like test driven development. I remember back when I was doing Rails and DHH had baked TDD into the Rails itself and there was the years of the testing discussions whether to test all the time, test everything, 100% coverage or even full circle tests are a waste of time. but it's a similar philosophy in that if the tests are doing what they should be doing, which is giving you great feedback, the time it takes to get up to speed in testing, the time it takes to set up testing, the time it takes to write the tests, they pay off further down the line and that's not music to the ears of the people who want to get something into production immediately. But it's definitely music to the ears of people who will be spending a long time on maintenance in an application. That NoRedInk application is huge. They have millions of users. They've build software for teaching grammar and skills in the US and they talk all the time about the benefits of Elm. Mainly, in the sense of confidence, I have the confidence to go in and change this code. All of bits or majorities of our code bits, which are things that we've rather not like to touch. We kind of section them off. If a feature request comes in and instead of saying, "Yeah, we can do that," you try and slowly push it out the door. Elm is supposed to give you then the confidence to be able to go to any part of your code base and to change it without the fear that you're going to break something or break everything because the type system, the compiler will tell you, "You change this type, you change the signature of this function, here's where it's broken and as soon as you fix the compiler errors, functionally it works, you'd probably have a few tests to test the actual business logic of it." Probably not so with technical stuff but it's a huge time saver. That's where we want to be as developers and our relationship with our tools. We don't want to be fearing our tools. We don't want to be anxious every time we open our editor. We don't want to fear the feature requests coming in. We want to be in control of our environment and we want to be able to deliver the business value. I think that's certainly the promise of Elm. That's certainly where it wants to be. CHARLES: I love that. It sounds like that is where they want to shoot for is these big applications and they do want to scale massively. Let me ask the question then. Where is Elm do you think right now today on that curve of scalability? PHILIP: To put it in Ember terms, that's maybe the best way I can describe it. If anyone remembers the early days of Ember, I definitely feel that they're in 0.9 approaching one rather than later than that. One of the things as well, I think it's important to note is that Evan is not rushed. It just blew my mind when I heard him speak about it and it wasn't anything big or anything but just the whole kind of tenor of the conversation of the way he was teaching of how he was talking about Elm was so in contrast to the JavaScript type machine. In contrast to a new framework every month, he was like, "If Elm is going to be around in 10 years, then this is the decision that I'm going to make." In that sense, where is Elm in that journey. I'd say it's still pretty early on. I'd say also, Evan is really focused on use cases so if there's not a use case for something, there's no reason to add it. This is actually quite frustrating maybe for people who are coming out of JavaScript ecosystem and they think of a feature that they want and they submit a pull request and it just gets closed or it get set, is there use case for this? Why do you need it? Is this generalizable to everyone? Will it make sense to add this to the language? Can you do it in a library? Then figured out later, can you do it in JavaScript with port, instead of having to bring it into Elm? He's definitely building it very slowly but that may sound like a down side right now but the upside is we're going to come up with something at the end, hopefully that is battle-tested, that fits the use case and a good example of that was the URL handling at the navigation. It didn't live in Elm. Do we actually need it because he's building single page applications? Can you give me your experiences? There are a couple of libraries also built. Then the things from those libraries were then taken a little bit like Ember as well, where you use the add-on ecosystem to try new things and then things may get brought into core or make it kind of the official stamp of approval. But it's a lot slower and not as committee-based. Evan is the benevolent dictator for life. CHARLES: I really like that approach. I don't withhold my opinion from the benevolent dictator versus kind of the oligarchy that you see elsewhere. But I was thinking as you were describing it that maybe the framework really, and this is me, I'm kind of a little bit of a tree nerd, mostly in and around the trees that grow in central Texas but I love trees. Unfortunately, it sounds like oak or maybe redwood would have been like a more appropriate name because those are very slow growing, have a very hard wood, whereas in Elm, it's actually fairly short lived and has a softer wood. JEFFREY: And you also don't want cedar because that will come back and bite you -- highly allergic and toxic to humans. [Laughter] CHARLES: Right. Named Elm but slow growing hardwood that you can build a house out of. But I like that. It's so important to get things right the first time because that's where you realize exponential gains. Unfortunately, there is no substitute for exponential gains, rather than deep thought. At least that's been my experience. You can realize gigantic short term gains with taking cut corners but in terms of long term exponential, ultimately those will taper off. PHILIP: I think as well, what we've seen in Ember's experience is the decisions that you take to open up a private API or not to make something private. They limit you because all of a sudden, everyone starts using those APIs. A year down the line, you realize, "Oh, hang on. We don't want to design it in this way. We want to do it in that way," but given the commitment that Ember has to stability, you have to deal with that. Sometimes, the dealing with that actually takes more energy, more time, more effort in education, in actual code, in maintaining two branches, all of that kind of stuff then actually takes away from the time that you could have had to think up better solutions and it's a danger, you know? It's almost like as soon as you throw this into the water that it becomes firm. As soon as you throw it into the crowd, the crowd will take it and they will use it and your chance to change it or mold it will have gone. Evan talks a lot with language designers and at least I got that impression that he opens up channels of communication with people who've done this before and he thinks very deeply. He's not closed off to the idea of adding more powerful features to Elm but he would only do it when it's right to do it. It's not just is this feature right but is this the right time for this feature? That as well is just the kind of mind blowing like who thinks about this stuff, who cares about this stuff? CHARLES: Yeah, because certain features become accessible once other features are in place. I feel like it would have been as feasible to have an entire compiled language as an acceptable option before people started transpiling CoffeeScript and then with Babel, transpiling future versions of JavaScript back into JavaScript. If those intermediate steps happened, if CoffeeScript and Babel would have happened, would people be as receptive to things like Elm or things like PureScript? it's definitely there is kind of the zeitgeist of the development community really informs what features are even possible or appropriate tomorrow, even though they might have some ejectively sound qualities out to them. JEFFREY: They want to make sure they're not too far ahead of their time. CHARLES: Right, exactly. Folks got to be ready for it. Then the other thing that I wanted to ask was given the trajectory of where Elm is, some people are using it in production. You said it was around like a 0.9, 1.0. if we are actually quite happy with our current code bases, whether we're using Ember, whether using React, whether using some other framework, what are things that you can learn from Elm that you can bring home with you to your own town, wherever that is to use and make your own life better, as you develop code, to kind of increase that confidence, as you say? PHILIP: This is very relevant to my suggestion because in the past couple of months, I haven't had a chance to do any Elm but what I find is after kind of my deep dive, I've come out the other end and I feel like I've come out a better programmer. I feel like Elm is simple enough conceptually to learn quicker, faster, at least the basics more than maybe even to JavaScript framework. I think that the things that you will learn in that process are tremendously beneficial, even if you don't ever end up using Elm in a professional capacity. The thing I think that grabbed me most is because of the way the type system is, you have to deal with every error and this is something when writing Ruby or when writing Ember, you always focus on the happy path. Then once you've got the happy path in place, often the business will say, "That's done. Let's move on." Your better instincts say, "No, we haven't actually made this robust enough." But sometimes the value is also not the great in kind of shoring up all those cases. But what Elm does because of the way it's build is it forces you to deal with failure. The classic no runtime errors in production, the reason that is it may have taken you a bit longer to write your code in Elm. But you come out of it with a confidence that if something explodes, it's either something incredibly rare or it was JavaScript and not Elm. Just the forcing like, "How can I think better about how this code can fail," means a bit of extra mental effort when you do it in a language that's not Elm but it's definitely something that's worth doing, if you want to build good software. Another thing related to the failure stuff is maybe the idea of what's called an abstract data type or a union type or an enum, like the fact that you can encode different states in one object, that you deal with all of those states in a cohesive way. One of the things actually, I think it was Jack Franklin of JavaScript Playground who brought this back from Elm into Java Script was when you have a screen, you want to load some data via Ajax or Fetch, instead of just loading the page, sending off the request, getting the request back, deciding what to do with it, it's like, "Why don't we encode those states in our code." We have the waiting state, we have the find state but we have find but it was an error, we have find and it worked, we have find and it actually has no values. Instead of just dealing with those on the fly, if statements like why don't you create an object that encodes the states that your UI can be in and then you react and the UI will know what to do and you write the code to do that. But in some ways, at least to me that's a lot better than kind of hit and hope when we got an error. That's, "If do this, if do that, let's nest some callbacks or let's chance some promises." The sheer act of taking a step back and this is something Elm forces you to do because the way it is, like thinking about the domain and thinking about how best to model the domain. To be honest, it's probably just good programming practice but how often do we not do it? CHARLES: Absolutely. It seems so obvious, except it's only obvious when you're put into a system that you can't slide on it. What you're describing reminds me of this concept that I came across in the Haskell community. They talk about wholemeal solutions versus piecemeal solutions. Most of the time, they talk about wholemeal solutions as kind of finding the most general set of abstractions that solve a problem for all cases. But I hadn't applied it to this concept of that all the potential states kind of envisioning your application. As you execute your code, you'll only come across one state of the time but kind of thinking of your code as all of these sort of quantum states of your application existing at once and you need to account for them all and draw that whole picture. PHILIP: This is a really stupid analogy but I don't know if anyone's played Age of Empires or any other kind of war-based game where you have a map, you've got the fog of war and you can only see a few meters around you and you have to send out your scouts and you need to find them -- CHARLES: Yeah, yeah. PHILIP: -- Different tactics. You shore up your base and you concentrate on where you are, you send your scouts into the far ends of the map. In terms of seeking out of the unknown, I feel like Elm forces you to know the map where is when I'm programming in JavaScript or in Ruby, it's more like, "I'm here. I need to do this. I do it," and you don't necessarily force yourself to think of all the potential states or all the potential things that can happen, the events that can happen, whereas with Elm, if you don't have those, then it will tell you that those things in place. [Laughter] CHARLES: Yeah, I love that analogy. Like actually sent out your scouts to know the map. PHILIP: Yep and I think as a person, and this is maybe why it appeals to me it's like I like the feeling that I haven't left a stone unturned. I like shipping something that I'm confident in and I know it won't bite me or if it does bite me, it's purely because it was an unknown-unknown. It's like doing your due diligence. As I'm saying this, Elm is not the silver bullet. Elm is not the panacea. Elm will not solve all of your problems. But speaking in terms of contrast with JavaScript or Ruby and more dynamic languages than Elm, these are the things that happen. I think that kind of leads me on to another point which is Evan in the mailing list conversations and the decisions that he takes with Elm, I don't know if this are stages of maturity as a developer but you find your tool, you love it, it's the only thing that can do the job and then you realize other people are doing jobs pretty well, doing their other stuff, I guess each to their own. But I feel like there's another stage where it's like what are the tradeoffs involved in taking this decision or using this tool and what are the tradeoffs involved in taking this decision or using that tool. Just the way of thinking in terms of tradeoffs, instead of absolutes I find really, really valuable and that's definitely something that I've been able to apply and what are the benefits of this decision. Not only from a code point of view but from an organizational point of view, from a team point of view, from a long term point of view, from a short term point of view, having a wider arena to make those decisions, it has been really helpful for me, valuable on both side of them. CHARLES: I can see it. I believe you and I think we're coming to the end of our time here, I think I'm going to make the same recommendation that I made to everybody last week when we were talking with Toran about Redux and that is you should go out and you should try Elm. It's really easy to get started and it will guide you. The guides are excellent. The air handling is excellent and yes it is quirky and weird but it supports you. There's going to be some big functional programming boulders thrown at you but it gives you a [inaudible] to deal with them. JEFFREY: I think you need a suit of armor so we can stick with the Age of Empires metaphors. [Laughter] CHARLES: Yeah. Go out there, try it and experience the things that Philip is talking about because I feel like they are very real and they will have a good effect on you, whatever it is that you do the next day or the next week or the next month. PHILIP: They'll challenge the way you think, they'll give you new perspective and they'll give you a good counterpoint as well. You know, elm is not for everyone but only if you try it will you understand that. I think that's one of Evan and everyone in the Elm community is try it yourself. I'm not going to say Elm is right for you, Elm is right for your business. Rewrite everything in Elm, not at all, try it out, try it on a side project, try it to just having fun hacking around. If you do want to make the jump to using it in your company or whatever, don't take a decision to rewrite everything. Take one very small part of your app and do it in Elm and see how it goes. If you don't like it, you can take it out. If it works, you can build another small thing. This kind of gradual approach were far too quick to jump on a bandwagon: trash the old thing, do the new thing. Especially now, when we are building applications that are going to be maintained, when we are building applications that are going to be around for a few years, it's also just not feasible and sometimes it's not right. You just got to make that decision maturely rather than I want to use this or I want to use that, which can be tough. But ultimately, you want to deliver the value. Try Elm at Elm-lang.org/Try. You can try on the browser and see how you go. The official guide is really good. There's also Elm-Tutorial.org, which is kind of a complement to the official guide. Pragmatic Studio have released recently an updated course for learning Elm. James Moore at KnowThen.com. He has a couple of Elm courses, one is free introductory and then there's a paid course, which goes into deeper topics, whether text or whether video, whatever your thing is, there's resources available to get you to the point where you'll be able to make a decent decision. CHARLES: Well, fantastic. I'm certainly excited. I haven't dip my toes in Elm for a while and I'm actually, after this conversation pretty stoked to get it on again. I hope everybody else does. Thank you so much, Philip for coming on to the podcast. This was just a fantastic and enlightening conversation. PHILIP: Not at all. It's been an absolute pleasure. Thank you. CHARLES: All right. That's it from The Frontside. Remember to get in touch with us at Frontside.io, if you're interested in UI that is engineered to make your UX dreams come true.