Podcasts about bezier

  • 38PODCASTS
  • 55EPISODES
  • 1hAVG DURATION
  • ?INFREQUENT EPISODES
  • Feb 25, 2025LATEST

POPULARITY

20172018201920202021202220232024


Best podcasts about bezier

Latest podcast episodes about bezier

Tabletop Bellhop Gaming Podcast
Board Game Hype for GAMA Expo 2025

Tabletop Bellhop Gaming Podcast

Play Episode Listen Later Feb 25, 2025 107:56


Welcome to a special GAMA Preview episode where we highlight the games we're excited to see at the first big convention of the year as well as give you a bit of info on this industry trade show. We also review a couple of games we first learned about last year at GAMA Expo, two games that both happen to feature rockets and aiming for the stars. Tabletop Bellhop Gaming Podcast Episode 266, was recorded on February 20th 2025. Join us live on Wednesdays at 8 PM EST at https://www.twitch.tv/tabletopbellhop For detailed show notes with links to everything we talk about in this episode: https://tabletopbellhop.com/podcast/ep266/ Disclosure: Links may be affiliate links. As an Amazon Associate, we earn from qualifying purchases. Games mentioned may be review copies provided by publishers. (00:00:00) Checking in (00:01:59) Ask the Bellhop To learn more about GAMA, and GAMA Expo check out our coverage from last year where we go into detail about the organisation and the show. Tabletop Bellhop Episode 236 GAMA Expo 2024 Recap: Who should go to GAMA Expo https://tabletopbellhop.com/podcast/ep236/ If you are curious about the games we discovered last year you can check out episode 235 Games of GAMA Expo https://tabletopbellhop.com/podcast/ep235/ The GAMA Website: https://www.gama.org/ The GAMA Expo Website: https://www.gama.org/page/gama-expo (01:08:07) A Message From Our Sponsor The pledge manager is open for late pledges for the Holiday Hijinks Master Detective Collection crowdfunding project. https://grand-gamers-guild.pledgemanager.com/projects/holiday-hijinks-collection/participate/ And don't forget you can always save 10% at Grand Gamers Guild where you use our code BELLHOP! (01:09:41) The Game Room - Sandbag Pick up Sandbag on Amazon US: https://amzn.to/4hMVX5W, or Canada: https://amzn.to/4gY22eu Check out our Xylotar Review another trick taking game from Bezier: https://tabletopbellhop.com/game-reviews/xylotar/ Check out what else Bezier games has to offer: https://beziergames.com/ Check out our other trick-taking game reviews: https://tabletopbellhop.com/search/?q=trick%20taking (01:28:48) The Game Room - Skyrockets Festivals of Fire Pick up Skyrockets on Amazon US: https://amzn.to/41sDF3W , Canada: https://amzn.to/3ERWlla or UK: https://amzn.to/4bb5Bwx Ratuki is another real time game we've reviewed: https://tabletopbellhop.com/game-reviews/ratuki/ Check out Floodgate's other games: https://floodgate.games/ (01:46:05) Closing the Doors TIP THE BELLHOP: Get bonus content by becoming a Patron: https://www.patreon.com/tabletopbellhop Shop Tabletop Bellhop merch https://tabletopbellhop.com/merch Buy us a coffee https://ko-fi.com/tabletopbellhop FIND US: Webpage: https://tabletopbellhop.com Discord: https://discord.tabletopbellhop.com Blue Sky: https://bsky.app/profile/tabletopbellhop.com Instagram: https://www.instagram.com/tabletopbellhop/ Facebook: https://www.facebook.com/tabletopbellhop YouTube: https://www.youtube.com/tabletopbellhop Twitch: https://twitch.tv/tabletopbellhop Mastodon: https://dice.camp/@TabletopBellhop

Lenny's Podcast: Product | Growth | Career
How to see like a designer: The hidden power of typography and logos | Jessica Hische (Lettering Artist, Author)

Lenny's Podcast: Product | Growth | Career

Play Episode Listen Later Oct 20, 2024 81:47


Jessica Hische is a lettering artist and New York Times bestselling author based in Oakland, California. She specializes in typographical work for logos, film, books, and other commercial applications. Her clients include Wes Anderson, The United States Postal Service, Target, Hallmark, and Penguin Books, and her work has been featured in design and illustration annuals both in the U.S. and internationally. She's been named a Print Magazine New Visual Artist (20 under 30), one of Forbes 30 under 30 in Art and Design, an ADC Young Gun, a “Person to Watch” by GD USA, and an Adweek “Creative 100.” In our conversation, we discuss:• My new logo and brand!• Jessica's process for refreshing my logo/brand• Why most startups shouldn't worry about their logo/brand• The psychology behind different typography choices• Balancing creativity with business needs in logo design• Jessica's unique approach to pricing logo work• How AI is (and isn't) impacting the design world• Jessica's other creative pursuits, including children's books and art supply stores—Brought to you by:• The Enterprise Ready Conference — For B2B leaders building enterprise SaaS• OneSchema — Import CSV data 10x faster• Merge — A single API to add hundreds of integrations into your app—Find the transcript at: https://www.lennysnewsletter.com/p/seeing-like-a-designer-jessica-hische—Where to find Jessica Hische:• Threads: https://www.threads.net/@jessicahische• Instagram: https://www.instagram.com/jessicahische• Website: https://jessicahische.is—Where to find Lenny:• Newsletter: https://www.lennysnewsletter.com• X: https://twitter.com/lennysan• LinkedIn: https://www.linkedin.com/in/lennyrachitsky/—In this episode, we cover:(00:00) Jessica's background(01:32) The logo refresh process(09:45) When to refresh your logo(11:45) High-level overview(18:04) Approaching Lenny's brand refresh(24:25) How to see like a designer(37:53) Lenny's new logo: where we landed(44:07) Brand's role in company success(50:04) Jessica's flexible pricing strategies and collaborative design process(57:14) Balancing multiple creative projects(01:01:48) Using AI in creative work(01:05:50) Upcoming projects and final thoughts(01:08:24) Lightning round—Referenced:• Jeni's: https://jenis.com• James Edmondson on LinkedIn: https://www.linkedin.com/in/jamestedmondson/• Figma Config: https://config.figma.com/• Helvetica: https://en.wikipedia.org/wiki/Helvetica• MyFonts: https://www.myfonts.com/• Geometric sans serif fonts: https://www.myfonts.com/pages/tags/geometric%20sans%20serif-fonts• The Rise of Fractional Executives: https://www.reforge.com/blog/leveraging-fractional-executives• JH&F: https://jessicahische.shop/pages/my-oakland-store• Drawling: https://drawling.shop/• Jessica Hische's books on Amazon: https://www.amazon.com/stores/Jessica-Hische/author/B082XDN54V• Dreamforce: https://www.salesforce.com/dreamforce• Bezier handles: https://www.tella.tv/definition/bezier-handles• My First Book of Fancy Letters: https://www.amazon.com/My-First-Book-Fancy-Letters/dp/0593385012/r• The Creative Act: A Way of Being: https://www.amazon.com/Creative-Act-Way-Being/dp/0593652886/• Inside Paragraphs: Typographic Fundamentals: https://www.amazon.com/Inside-Paragraphs-Fundamentals-Cyrus-Highsmith/dp/1616899417• Just Kids: https://www.amazon.com/Just-Kids-Patti-Smith/dp/0060936223• Robert Mapplethorpe: https://en.wikipedia.org/wiki/Robert_Mapplethorpe• The Emperor of All Maladies: A Biography of Cancer: https://www.amazon.com/Emperor-All-Maladies-Biography-Cancer/dp/1439170916/r• Severance on Prime Video: https://www.amazon.com/Severance-Toby-Stephens/dp/B001ARYGCU• Penco brown bag stand: https://penco.jp/en/products/db079/• XOXO: https://xoxofest.com/• Mariame Kaba quotes: https://www.goodreads.com/author/quotes/8156101.Mariame_Kaba—Production and marketing by https://penname.co/. For inquiries about sponsoring the podcast, email podcast@lennyrachitsky.com.—Lenny may be an investor in the companies discussed. Get full access to Lenny's Newsletter at www.lennysnewsletter.com/subscribe

Trick Talkers
Tea Time: Episode 13 - Guest Speaker: Jay Bernardo

Trick Talkers

Play Episode Listen Later Apr 23, 2024 109:07


Join Ryan for episode 13 of Trick Talkers: Tea Time - (not so) shorter length episodes where they talk about different topics within the trick-taking, climbing, and shedding world! In this episode we have Jay Bernardo, the creator of Cardboard East and Marketing Manager of Bezier Games, join us on the show. We talk about Jay's move back to the US, Cardboard East, Bezier's new card games from this year, Origins Game Fair, he even throws in a cheeky top 10 list, and more. Contact us: Discord - ⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠discord.gg/DBJzczy5km⁠⁠⁠⁠⁠⁠⁠⁠⁠ Email - tricktalkers@gmail.com Twitter - @tricktalkers Linktree - ⁠⁠⁠⁠https://linktr.ee/tricktalkers⁠⁠⁠⁠ Patreon - ⁠⁠⁠⁠⁠⁠⁠⁠⁠https://www.patreon.com/tricktalkers⁠⁠⁠⁠⁠⁠⁠ Topics discussed during the episode: (00:50) - ⁠⁠Jay's⁠⁠ Introduction (⁠Cardboard East⁠, ⁠Bezier Games⁠) (03:19) - ⁠⁠⁠⁠⁠⁠⁠Moving Back To The US (05:07) - Collection Culling Livestream⁠ (09:30) - ⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠Adjustments To Living In The US Again (12:45) - Bezier Games - Year Of The Card Game⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠ (13:35) - ⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠Thoughts On Box Sizes (19:15) - Back To Year Of The Card Game (20:55) - ⁠Rebel Princess⁠ (27:10) - ⁠Bezier Games Wolfpack⁠ (27:17) - ⁠Seers Catalog⁠ (Of What's Left/Big Two⁠/⁠Mahjong⁠/Bridge City Poker/LOOP) (41:30) - Xylotar (Magic Trick) (47:19) - ⁠Sandbag (1:00:34) - ⁠⁠⁠Origins Game Fair and Various Con Talk (01:09:53) - Tokyo Game Market Tips Video (01:11:00) - Jay's Early Sneak Peek, Top 10 Climbing/Shedding Games - Honorable Mention: Big Ten (01:11:27) - Number 10 (01:12:03) - Number 9 (01:12:41) - Number 8 (01:13:29) - Number 7 (01:14:41) - Number 6 (01:16:19) - Number 5 (01:18:27) - Number 4 (01:20:19) - Number 3 (01:21:45) - Number 2 (01:25:31) - Number 1 (01:27:28) - Watching Lightbulb Moments/More Rebel Princess Talk (01:32:11) - 10 Tricks Later (01:34:15) - ⁠Jay's Least Favorite Thing About Trick Takers (01:40:29) - ⁠Trick Legacy (01:41:20) - Art And Theme (01:44:02) - What Board Game World Would Jay Jump Into? Bricolage Heads Additional links from the episode/Shameless plugs: Cardboard East - ⁠https://www.youtube.com/@CardboardEast/featured⁠ Bezier TikTok - https://www.tiktok.com/@beziergames?lang=en

Dice Tower News
Dice Tower Now 806: October 10, 2022

Dice Tower News

Play Episode Listen Later Oct 10, 2022 26:37


This is Dice Tower Now for the week of October 10, 2022. This week, Bezier does some renovations, Dead Death Dies for a third time, and Essen, essen, essen, essen, ESSEN.   SPECIAL REPORT: ESSEN (1:41)   TOP STORIES (5:14) Renegade Games expands licensing with Hasbro GIC: Britain's first game industry conference Persona 5 Royal card game by Matsuuchi Castles of Mad King Ludwig: Renovations Cluedo murder mystery boxes Cthulhu: Death May Die season 3 - Fear of the Unknown   CROWDFUNDING (9:59) Factions of Sol Terraforming Mars: The Dice Game Rise and Fall Elevenses: The Guilty Party Tainted Grail: Kings of Ruin Age of Comics   SPONSOR SHOUTOUT (18:22) Lucky Duck Games picks up Cosmoctopus for release   THE HOTNESS (20:4) 11 - Endless Winter: Paleoamericans 10 - Flamecraft 9 - Lacrimosa 8 - Woodcraft 7 - Horizons of Spirit Island 6 - Ark Nova 5 - John Company 2E 4 - ISS Vanguard 3 - Revive 2 - Starship Captains 1 - Wingspan: Asia   CONNECT: Follow our Twitter newsfeed: twitter.com/dicetowernow Dig in with Corey at DiceTowerDish.com. Have a look-see at Barry's wares at BrightBearLaser.com.

The Sausage Factory
The Sausage Factory: 409 – Bezier by Niine Games

The Sausage Factory

Play Episode Listen Later Oct 7, 2022 102:12


Chris chats to  Philip Bak of Niine Games, about the design and development of their arcade twin stick shooter, Bezier. It's not that often a boss creature in a game taunts you and then runs off to continue the fight another time... http://media.blubrry.com/caneandrinse/caneandrinse.com/sausage/TSF_Episode409.mp3   Music is by Phlip Bak and can be bought from here: https://store.steampowered.com/app/456560/Bezier__Original_Soundtrack/1. Deceives And Is Deceived2. I Know She Lies3. Forth From The War EmergingThe Sausage Factory 409 was edited by Chris O'Regan The Sausage Factory is an interview-based podcast that lifts the lid on the makers of videogames. It examines the way in which games are made by asking the very people who create them, though the questions asked aren't just about game design, they also cover how developers made their start and what inspires them as creators. Split into two halves, the first segment delves into what makes the developers tick by asking about how they started, what and who inspires them and what games they are currently playing, whereas the second part of the show covers the game that they are currently working on and the thought processes behind its development. So, if you really want to hear about a game's gestation in full and frank detail then you have found the right podcast.  

Knoxville Game Design
Curves – Knox Game Design, July 2022

Knoxville Game Design

Play Episode Listen Later Jul 22, 2022 41:01


Overview of four types of curves that can be used in game development.  Basic parabola for moving objects in an arc.  Sine function for moving objects in a wave motion.  Physics using velocity and acceleration for simulating actions such as jumping and falling.  Bezier curve for moving objects along a curved path.  Examples of functions … Continue reading Curves – Knox Game Design, July 2022 →

Brainwashed Radio - The Podcast Edition
Episode 558: January 23, 2022

Brainwashed Radio - The Podcast Edition

Play Episode Listen Later Jan 24, 2022 63:00


Episode 558: January 23, 2022 playlist: Current 93, "If a City" (If a City Is Set Upon a Hill) 2022 House of Mythology Mekons, "The Inhuman" (Exquisite) 2020 Bloodshot / 2022 Glitterbeat Bezier, "Valencia" (Valencia) 2022 Dark Entries Reiko and Tori Kudo, "The Deep Valley of Shadow" (Tangerine) 2013 Hyotan / 2021 A Colourful Storm Joyul, "A Stage (Ulla Remix)" (Earwitness) 2022 Psychic Liberation C.H. District, "Live at XIX Wroclaw Industrial Festival (excerpt)" (Live at XIX Wroclaw Industrial Festival) 2021 Zoharum Tasos Stamou, "Steel Drum Drone" (Monoliths) 2021 Moving Furniture DJ Python, "Club Sentimiental Vol Three" (Club Sentimientos Vol. 2) 2022 Incienso Salamanda, "Amazon Cactus" (Allez) 2021 Good Morning Tapes Hieroglyphic Being, "Black Love on an Early Sunday Morning" (The Shittest Sounds U Don't Ever Want 2 Hear…Vol 1) 2020 self-released Saphileaum, "Ra" (Transpersonal Experience) 2021 Good Morning Tapes Pneumatic Tubes, "Magic Meadow" (A Letter from TreeTops) 2022 Ghostbox Email podcast at brainwashed dot com to say who you are; what you like; what you want to hear; share pictures for the podcast of where you're from, your computer or MP3 player with or without the Brainwashed Podcast Playing; and win free music! We have no tracking information, no idea who's listening to these things so the more feedback that comes in, the more frequent podcasts will come. You will not be put on any spam list and your information will remain completely private and not farmed out to a third party. Thanks for your attention and thanks for listening.

Tantrum House Board Gaming Podcast
Tantrum House Podcast E.202: "2021 Predictions Revisited"

Tantrum House Board Gaming Podcast

Play Episode Listen Later Jan 10, 2022


In our 202nd episode, Tantrum House reviews our predictions for what would happen in gaming in 2021 to see if we were close. We also interview Ted from Bezier about their new game Sync or Swim.After the show, we talk about Spider-Man.Sponsors: Boardwalk, Bezier Games, AEG, The Game Steward, Game Toppers Tantrum House Podcast E.202: "2021 Predictions Revisited"File Size: 47310 kbFile Type: mp3Download File [...]

AA..A.I. Cercasi
036 Problemi pratici: come si fa per...e promozione sui social

AA..A.I. Cercasi

Play Episode Listen Later Jun 23, 2021 14:38


Sei un artista e hai disegnato il tuo logo e ora come lo trasponi online? Sei un artigiano e devi raggiungere i tuoi clienti nel raggio di 30 km, qual è l'uso più efficace dei social networks e del Web? Problemi pratici.INSTAGRAM: @CercasiaiEMAIL: aaaicercasi @ gmail.comBLOG: silviamarcellini.comTWITTER: @AiCercasiMyfoglio.com è l'app di fatture freemium, sicura e completa già dalla versione non a pagamento. Provala qui:https://www.myfoglio.com/Concorso 2021: inviami un email a aaaicercasi @ gmail.com con indicato cosa fai e perché sei un ascoltatore "specialissimo" e a fine 2021, se mi avrai convinto, potrai vincere un abbonamento myfoglio premium!Argomenti:-Ricalco del logo in vettoriale o scansione-Loghi artistici o loghi stilizzati-Perché è impossibile ricalcare la mano di Van Gogh-Come si fa effettivamente e quanto tempo ci vuole-Cosa vuol dire essere una parrucchiera nel 2021-Isterismo da social-Mi serve un sito Web?-Pubblicare meno, ma comunicare meglio

RA Exchange
EX.559: Spotlight on Asian artists - 2021.05.20

RA Exchange

Play Episode Listen Later May 20, 2021 67:00


Howie Lee, Yu Su, Bezier and Angela Lin talk background, memory and identity for Asian Pacific American Heritage Month.

Disruption Talks by Netguru
Ep. 17 Entertainment 2021-2031 - On the Brink of a Revolution - with Thierry Bezier-Membrey, EveryOne

Disruption Talks by Netguru

Play Episode Listen Later Mar 9, 2021 64:33


What are predicted changes in the entertainment industry for the next 10 years? Join us to listen to the talk with Thierry Bezier-Membrey, Co-Founder of EveryOne.Hosted by Filip Sobiecki.

Dice Tower News
Dice Tower Now 722: March 1, 2021

Dice Tower News

Play Episode Listen Later Mar 1, 2021 24:55


This episode, Stardew Valley takes over the podcast, several big titles get new editions, Red Raven Games gets a documentary, and Hasbro allows Wizards of the Coast to share IPs.   TOP STORIES: Dice Tower East 2021 cancels. "Secrets of the Order" expansion for "Arkham Horror 3E" detailed. "Ride the Rails: Australia & Canada" expansion coming from Capstone. Four new announcements from Funko. "Rat Queens" board game coming from Deep Water Games. Crafting Arzium documentary on Kickstarter. "Ragnarocks" coming from "Santorini" designer and Grey Fox Games. Hasbro restructures and "Magic the Gathering" getting licensed IPs. "Meeples and Monsters" coming from Ole Steiness and AEG. "Suburbia (Second Edition)" coming from Bezier. "Everdell" expansions "Newleaf" and "Mistwood" detailed. Gamefound announces "Robinson Crusoe Collectors Edition" and "Skyrim" board game. "Stardew Valley: The Board Game" announced.   KICKSTARTERS: Welcome to Sysifus Corp Kingdom Rush: Elemental Uprising Paladins of the West Kingdom: City of Crowns Terraforming Mars: Ares Expedition CAKES! Block and Key​ Tiny Epic Dungeons Root: The Marauder Expansion Aeon’s End: Legacy of Gravehold   THE HOTNESS: Stardew Valley: The Board Game Alien: Fate of the Nostromo Everdell Sleeping Gods City of the Big Shoulders Great Western Trail Tiny Epic Dungeons Root: Marauders Radlands   NEW & UPCOMING RELEASES: Stardew Valley: The Board Game Tak 2nd Edition X-Men Mutant Insurrection from Fantasy Flight Code 3 plus Expansions Crisis Deluxe Edition Royal Visit from IELLO   CONNECT: Follow our curated Twitter newsfeed @DiceTowerNow. Dig in with Corey at DiceTowerDish.com. Have a look-see at Barry’s wares at BrightBearLaser.com. Check out the Tabletop Game Talk podcast with Chris and Kitty.

The Crate and Crowbar
Episode 358: A Messy Appendage That Can’t Ever Satisfy Itself

The Crate and Crowbar

Play Episode Listen Later Feb 19, 2021 90:40


Both Toms, Graham and Marsh defy death in timeloop horror House, deal death in globetrotting trilogy Hitman, dodge death in smart shmup Bezier and become death in Death Crown. Also: streamlined space strat Slipways and the joy of City Guesser. It’s reverse-Hitman: House. Reverse-reverse-Hitman: 360 Hitman / Hitman III / Hitman 8 / World of [...]

Võrkpall24
"Kuldne geim" | Selgitame uudsel moel Credit24 Meistriliiga võitja, külas ratsutaja Miilen

Võrkpall24

Play Episode Listen Later Mar 25, 2020 99:17


Võrkpalliteemaline taskuhäälingusaade "Kuldne geim" võõrustab täna virtuaalsel teel viljandlannat Kristiine Miilenit (23), kes on kerkinud viimastel aastatel Eesti üheks silmapaistvamaks naisvõrkpalluriks. Hiljuti Prantsusmaa tippklubi Bezier'ga liitunud Miilenit toetavad saates Andres Toobal, Rivo Vesik ja Karl Rinaldo. Skype'i kõne oli tehtud videona, kuid salvestusele jäi sedapuhku vaid heli. Õnneks pole tegu maailma kõige hullema probleemiga.

Garrett's Games and Geekiness
Garrett's Games 697 - Porto and Bezier Games' Ted Alspach

Garrett's Games and Geekiness

Play Episode Listen Later Nov 10, 2019 34:56


Shelley and I get MEBO Games' family-style new release Porto by Orlando Sá then I sit down at Essen for a quick chat with Ted Alspach of Bezier Games to discuss their current and upcoming releases, as well as something that piqued his interest at the fair. Games Mentioned: Silver Silver Bullet Suburbia Collector's Edition Minecraft: Builders and Biomes

Podcut
#19 Domaine La vivarelle à Tourbes et l'effet millesime

Podcut

Play Episode Listen Later Oct 24, 2019 66:19


Nous débutons cette trilogie sur les femmes du vin avec le Domaine de la Vivarelle à Tourbes près de Pézénas, entre Montpellier et Bezier. Audrey Martinez nous accueille en pleine opération de remontage et en cours de vendages. Vous pouvez retrouver ses vins chez Miss and Wine ou encore la box chai les filles aux adresses suivantes:  https://www.missandwine.com/produit/v-de-la-vivarelle/   http://chailesfilles.fr/content/55-domaine-la-vivarelle-audrey-martinez  Vous pouvez aussi retrouver ses articles sur son blog  http://www.la-wine-ista.com/  ou encore sur  https://www.toutlevin.com/  Pour notre coup de coeur et le livre de  Sandrine Goeyvaerts  vous pouvez le retrouver sur amazon:  https://www.amazon.fr/Vigneronnes-Femmes-Font-Diff%C3%A9rence-Dans/dp/249069801X  Tire Bouchon, un podcast du label Podcut. http://podcut.studio/  Pour nous soutenir  https://www.patreon.com/podcut  Retrouvez tous nos épisodes sur http://tirebouchonpodcast.fr/ 

Tire Bouchon
#19 Domaine La vivarelle à Tourbes et l'effet millesime

Tire Bouchon

Play Episode Listen Later Oct 24, 2019 66:10


Nous débutons cette trilogie sur les femmes du vin avec le Domaine de la Vivarelle à Tourbes près de Pézénas, entre Montpellier et Bezier. Audrey Martinez nous accueille en pleine opération de remontage et en cours de vendages. Vous pouvez retrouver ses vins chez Miss and Wine ou encore la box chai les filles aux adresses suivantes:  https://www.missandwine.com/produit/v-de-la-vivarelle/   http://chailesfilles.fr/content/55-domaine-la-vivarelle-audrey-martinez  Vous pouvez aussi retrouver ses articles sur son blog  http://www.la-wine-ista.com/  ou encore sur  https://www.toutlevin.com/  Pour notre coup de coeur et le livre de  Sandrine Goeyvaerts  vous pouvez le retrouver sur amazon:  https://www.amazon.fr/Vigneronnes-Femmes-Font-Diff%C3%A9rence-Dans/dp/249069801X  Tire Bouchon, un podcast du label Podcut. http://podcut.studio/  Pour nous soutenir  https://www.patreon.com/podcut  Retrouvez tous nos épisodes sur http://tirebouchonpodcast.fr/ 

BCB Cardboard Conjecture
Cardboard Conjecture S2 E13 Whistle Stop and Clank! In! Space!

BCB Cardboard Conjecture

Play Episode Listen Later May 21, 2019 61:05


On this episode, Ryan and I talk about Bezier Games title Whistle Stop and Renegade Games title Clank! In! Space!. Opinions and conclusions formed on the basis of incomplete information.

Brettspielbar
BSB009 Januar 2019

Brettspielbar

Play Episode Listen Later Dec 31, 2018 60:31


00:00:00.000 Intro 00:00:23.000 Weihnachten und Anekdoten Spielen bleibt der Deutschen liebstes Hobby Die angesagtesten Spielzeuge 2018 00:11:08.000 Uwe Mölter tritt in den Ruhestand Uwe Mölter tritt in den (Un-)Ruhestand 00:13:30.000 Neuheiten 2019 Hörspiel des WDR "Das Fundament der Ewigkeit" Zu der Diskussion um Inside von Oink Games und Werewords von Bezier finden sich über diverse Suchmaschinen Stellungnahmen der Beteiligten. 00:30:13.000 Welcome to... Welcome to... 00:36:08.000 Die Architekten des Westfrankenreiches Architekten des Westfrankenreiches 00:38:49.000 Planet Planet 00:43:25.000 Adventskalender der Brettspielbox Adventskalender 00:45:33.000 Neuigkeiten bei beeple Neuigkeiten aus dem beeple-Netzwerk Die Spielträumer Fjelfras 00:54:54.000 Rückblick Brettspielbar 00:59:37.000 Outro Datum der Aufnahme: 29. Dezember 2018 Online seit: 1. Januar 2019 Wer die Plauderei an der Brettspielbar unterstützen möchte: Die Freude ist groß, falls ihr den Podcast bei iTunes rezensiert oder bewertet. Für alle jene, die kein iTunes verwenden, gibt es die Plattform Panoptikum, auch dort kann eine Empfehlung ausgesprochen und bewertet werden, aber auch ein eigenes Podcasthörerprofil erstellt werden. Ganz toll ist natürlich auch, falls Ihr Euren Mitspielern von der Brettspielbar erzählt. Über die Brettspielbar: Die Brettspielbar findet sich unter dem folgenden Link. Ziel ist es, kurze Episoden mit News rund um Brett- und Kartenspiele zu machen. An der Brettspielbar treffen sich regelmäßig Christioph Post und Jürgen Karla. Brettspielbar - Der Brettspiel-Podcast von brettspielbox.de & spielbar.com: https://www.brettspielbar.de Auf neue Episoden wird regelmäßig auf Twitter hingewiesen Brettspielbar auf Twitter: https://twitter.com/ brettspielbar Natürlich findet sich die Brettspielbar auf den bekannten Plattformen für Podcasts, insbesondere iTunes Brettspielbar auf iTunes: https://itunes.apple.com/de/podcast/brettspielbar/id1434458572?mt=2 Credits Intro/Outro: Künstler: BoxCat Games Song: B-3 Album: Nameless - The Hackers RPG Soundtrack Lizenz: CC BY Veröffentlicht: 2013-07-03 Quelle: BoxCat Games auf freemusicarchive

Breaking Into Board Games
Breaking into Board Games Episode 79 - Ted Alspach - Bezier Games

Breaking Into Board Games

Play Episode Listen Later Oct 24, 2018 61:11


The hosts talk to Ted Alspach, designer, publisher, and owner of Bezier Games. We discuss his entry into the business, and how he has grown his small company over the past several years. Listen in for pitfalls to avoid, and what TO do when creating a company.  You can reach out to Ted on twitter: @beziergames   Hosts: Tony - Designer - @beardedrogue Ian - Developer - @ianzangdesign Gil - Publisher - @gilhova   "There It Is" by Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 3.0 License http://creativecommons.org/licenses/by/3.0/

Dog and Thimble Podcast
Episode 89 - Werewolf Legacy

Dog and Thimble Podcast

Play Episode Listen Later Sep 20, 2018 53:46


A curse has befallen this once sleepy podcast, and now the hosts fear for their lives as one of them turns into the Ultimate Werewolf...Legacy. In this episode the gang discusses the latest legacy game from designers Rob Daviau and Ted Alspach. Also, Tom decides to get into eating challenges, Alana reveals her mother's e-mail shame, and Chris has had it with his co-hosts! There's almost too much good stuff, in this episode so get it in your ear holes!

Release Notes
#270: Some French Guy Named Bezier

Release Notes

Play Episode Listen Later Jul 16, 2018 44:27


Today we return to a topic that we’ve discussed before: Pricing. We talk about about pricing for the value you provide, the pro vs. prosumer vs. consumer markets, and why both Charles and Joe feel so strongly that Affinity Designer for iPad is way, way underpriced. Mailing List Every month there are more great articles […]

Dog and Thimble Podcast
Origins Game Fair 2018 - Day 2

Dog and Thimble Podcast

Play Episode Listen Later Jun 26, 2018 47:10


Chris did so much work at Origins Game Fair 2018 that we're releasing a special bonus Tuesday episode of Dog and Thimble. In this episode, Chris learns about some amazing independent RPGS, learns how many Barenaked Ladies references are in One Week Ultimate Werewolf, and learns all about slam poetry. Time Stamps: Atlas Games - 0:25 Bezier Games - 7:59 HABA USA - 13:27 Mayday Games - 17:25 Ares Games - 29:28 Indie Press Revolution - 35:34

Epic Gaming Night Podcast | Board Games Table Top & Card Games

Topic: Bezier Games How did Bezier get started? Can you tell us about some games in the games in Bezier’s catalog? Werewords One Night Ultimate Werewolf Ultimate Werewolf Castles of Mad King Ludwig Suburbia New York Slice Whistle Stop Can you tell us about some of the upcoming Bezier Games? The next One Night Werebeasts Ultimate Werewolf Legacy Is there any spoiler free info you can give us about Ultimate Werewolf Legacy? What would you say is your philosophy behind designing and publishing games? Bezier makes a lot of social deduction games what’s the craziest story you have about playing one? Do you have any tips for being the werewolf? What inspires you to create games? If you could design a game with any intellectual property even if it’s already owned by someone else or not well known what IP would you make a game for? The Wire What is your all-time favorite tabletop game? Tichu Follow Ted & Bezier Games https://beziergames.com/ https://twitter.com/beziergames https://www.instagram.com/beziergames/ Follow Epic Gaming Night @EpicGamingNight on Twitter and Instagram EpicGamingNight.com If you want to support epic gaming night check out our Patreon at Patreon.com/EpicGamingNight Thank you so much to our amazing patrons!! www.youtube.com/epicgamingnight Follow, like ,subscribe, iTunes reviews! Facebook

As You Like It Podcast
AYLI Podcast #70 - Bézier

As You Like It Podcast

Play Episode Listen Later Sep 26, 2017 63:42


Bézier is one of a kind. The alias of one Robert Yang, Bézier is an Italo-disco-inspired, synthpop-styled, science-minded psychedelic techno project. Beside his visionary and idiosyncratic live techno sound, Yang is also a skilled DJ (formerly known as Robot Hustle), one-fourth of the renowned Honey Soundsystem collective, who will be celebrating their tenth year in operation this November. The Honey boys are but one of many names decorating As You Like It’s seventh anniversary marquee lineup, taking place this Friday, Sept. 25, at The Midway in San Francisco’s Dogpatch neighborhood. To celebrate the occasion, Yang recorded this latest AYLI podcast.

Camminus
[Story telling] Jean-François Bezier | Entreprise Bezier | Menuiserie métallique

Camminus

Play Episode Listen Later May 19, 2017 4:16


L'entreprise Bezier installée à Saint Etienne de Montluc depuis 1964 est spécialisée dans la fabrication de fenêtre et verrière acier.

Garrett's Games and Geekiness
Garrett's Games 558 - New York Slice and Railroad Revolution

Garrett's Games and Geekiness

Play Episode Listen Later Mar 12, 2017 38:41


Shelley and I get a chance to talk about the new Bezier revamp of Jeff Allers called New York Slice, then have a great time playing What's Your Game's fantastic Essen 2016 release Railroad Revolution. New York Slice by Jeff Allers from Bezier Games and Railroad Revolution by Marco Canetta and Stefania Niccolini from What's Your Game

essen railroads bezier games new york slice bezier what's your game railroad revolution stefania niccolini garrett's games
Color Transmit
Bezier (Honey Soundsystem, San Francisco)

Color Transmit

Play Episode Listen Later Jan 4, 2017


Bezier Joined us in Hanoi for his set at Savage, We learned about Honey Soundsystem his entry to dance music. Tiếng Việt được dịch tại colortransmit.com Phỏng vấn: Bezier GRAZ: Tôi đang có mặt cùng với Bezier. Cảm ơn bạn đã đến với buổi phát thanh. BEZIER: Cảm ơn đã cho tôi cơ hội đến với chương trình. GRAZ: Tại sao chúng ta không bắt đầu bằng việc bạn kể cho mọi người biết về thành phố nơi bạn sinh sống, về đội mà bạn đang tham gia và tình hình ở San Francisco nhỉ? BEZIER: Tôi đến từ San Francisco. Tôi đã sống tại ...

Clandestino.
Clandestino 061 - Jackie House

Clandestino.

Play Episode Listen Later Sep 2, 2015 59:32


One quarter of San Francisco's queer DJ collective and party crew Honey Soundsystem, Jacob Sperber brings the energy this week with his Jackie House alter-ego. Thundering disco rhythms and slamming, retro house jams invoke images of sweat soaked dance floors with writhing bodies. This one takes no prisoners. Look out for Honey Soundsystem's new label featuring tracks from Jackie himself and Honey's other member Bezier; with 4 tracks of italo and space disco bangers. www.soundcloud.com/jackie-house

Botch Games Podcast
Episode 21: Pathfinder Card Battles & Epic Spell Wars

Botch Games Podcast

Play Episode Listen Later Apr 14, 2015 87:23


In Episode 21, Craig is joined by Chuck on the episode in which the podcast is now of legal age. They talk at length about Epic Spell Wars of the Battle Wizards: Duel at Mt. Skullzfyre from Cryptozoic Games, Pathfinder Advanture Card Game from Mike Selinker and Paizo, and One Night Ultimate Werewolf from Ted Alspach and Bezier Games, giving a game breakdown and discussion for each. In kickstarter and overall hype news, they talk about Forbidden Stars from Fantasy Flight, 504 from Friedemann Friese, and The Titans of Gaming Series from Calliope Games. After a shout out to their local shops and groups for International Tabletop Day, they dive into a topic where they discuss how to get a group back into roleplaying after a falling out. Show Times: Epic Spell Wars of the Battle Wizards (Cryptozoic): 3:00 Pathfinder Adventure Card Game (Paizo): 11:00 One Night Ultimate Werewolf (Bezier): 27:45 Forbidden Stars (Fantasy Flight): 37:00 504 (2F-Spiele): 41:30 Titans Series Kickstarter (Calliope Games): 45:30 Local Shops: 50:30 Topic: Let's Roleplay Again: 54:30 

Botch Games Podcast
Botch Games Christmas-Cast and Cooperative Games

Botch Games Podcast

Play Episode Listen Later Dec 15, 2014 79:08


Episode 5 is where you get to hear the crinkling of gift wrap as we open our gifts to each other for the frst annual Botch Christmas-Cast! We discuss the games we been playing like Mars Attacks: The Dice Game fro Steve Jackson Games and Pandemic:The Cure from Z-Man Games. Also we talk in depth about Cooperative board games and why we feel that evey gaming group should have a few in their collection. As a special bonus, you get to hear thoughts from and discussion with our always talked about, but never heard from, sound editor Chuck. Lastly as a special year end giveaway, spawned from our love of the collection of games and our love for you, our listeners, we're giving away a copy of AEG's Black Friday Black Box! It's double the love giveaway! Show Times:  AEG Black Box Giveaway!: 2:00 Mars Attacks: The Dice Game (Steve Jackson Games): 5:30 Pandemic: The Cure (Z-Man Games): 13:45 First Annual Botch Christmas-Cast!: 21:00 Doomtown Reloaded (AEG): 22:45 Castles of Mad King Ludwig (Bezier): 25:00 Arcadia Quest Kickstarter Figures (CoolMiniOrNot): 27:15 Warhammer 40k Dark Vengeance (Games Workshop): 31:00 In Depth: Cooperative Games: 38:45

Garrett's Games and Geekiness
Garrett's Games 403 - Bezier Games' new Subdivision and Castles of Mad King Ludwig

Garrett's Games and Geekiness

Play Episode Listen Later Mar 16, 2014 38:40


The Record
Seattle Before the iPhone #4 - Gus Mueller

The Record

Play Episode Listen Later Feb 14, 2014 76:15


This episode was recorded 17 May 2013 live and in person at Omni's lovely offices overlooking Lake Union in Seattle. You can download the m4a file or subscribe in iTunes. (Or subscribe to the podcast feed.) Gus Mueller, Flying Meat founder, created VoodooPad (now at Plausible Labs) and Acorn, the image editor for humans. Gus is also responsible for open source software such as FMDB and JSTalk. This episode is sponsored by Squarespace. Get 10% off by going to http://squarespace.com/therecord. Better still: go work for Squarespace! They're hiring 30 engineers and designers by March 15, and, “When you interview at Squarespace, we'll invite you and your spouse or partner to be New Yorkers for a weekend—on us.” The great designers at Squarespace have designed an entire weekend for you, from dining at Alder to going to the Smalls Jazz Club and visiting The New Museum. Seriously cool deal at beapartofit.squarespace.com. This episode is also sponsored by Microsoft Azure Mobile Services. Mobile Services is a great way to provide backend services — syncing and other things — for your iPhone, iPad, and Mac apps. Write code — Javascript code — in your favorite text editor on your Mac. (Mobile Services runs Node.js.) Deploy via git. Write unit tests using mocha (or your tool of choice). Supports authenticating via Twitter, Facebook, and Google — and you can roll your own system. It's cool. Things we mention, in order of appearance (more or less): Rock climbing Luke Adamson Missouri 2001 2002 Cocoa Apple IIc 1993 Mac Color Classic BASIC ELIZA Artificial Intelligence Assembler Missile Command Java Eric Albert Perl Animated GIFs CGIs Server push images REALBasic PC Apple IIe DOS Colossal Caves Plover Nibble Civilization UNIX AIX A/UX St. Louis Columbia Math is hard Single sign-on Servlets OS X WWDC Rhapsody 1995 MacPERL NiftyTelnet BBEdit FlySketch Coffee Picasso's bull sketches VoodooPad 22" Cinema Display OS X Innovator's Award O'Reilly Peter Lewis Rich Siegel Mark Aldritt Ambrosia Panic Transmit Audion O'Reilly Mac OS Conference Audio Hijack Paul Kafasis SubEthaEdit Mac Pro Ireland XML PDF Victoria's Secret Caterpillar Adobe InDesign OS X Server Xserve Macintosh G5 MacUpdate VersionTracker QuickDraw Kerberos HyperCard Objective-C messaging system Aaron Hillegass's book Java-Cocoa bridge JDBC Oracle databases 2005 Seattle Microsoft Parents Just Don't Understand Vancouver, BC B.B. King Seattle Xcoders Joe Heck University of Missouri Evening at Adler Wil Shipley Daniel Jalkut Eric Peyton Quicksilver Rosyna Chicago Drunkenbatman Adler Planetarium C4 Wolf Colin Barrett Delicious Generation Disco.app My Dream App Chimera / Camino Santa Clara World Wrapps Buzz Andersen Quartz Core Image Filters Bezier curves Wacom Unit tests Automated builds ZeroLink Metrowerks CodeWarrior NeXT BeOS Macintosh Performa Display Postscript SGIs Sun boxes Mac OS 8 MachTen Netscape Internet Explorer for Mac OS Outlook Express OmniGroup Shakespeare's pizza Pagliacci Neapolitan pizza Everett FIOS Fender Stratocaster GarageBand AudioBus Adobe Photoshop Adobe Photoshop Elements JSTalk AppleScript SQLite WebKit Napkin

Holistic Survival Show - Pandemic Planning
HS 173 - "Deep State: Inside the Government Secrecy Industry" with David Brown

Holistic Survival Show - Pandemic Planning

Play Episode Listen Later Sep 26, 2013 21:44


In 2002 David Brown, a.k.a. DB Grady, graduated from Louisiana State University with a Bachelor of Science in computer science. Soon after graduation he joined the Army and did a tour of duty in Afghanistan. At various points in his life, he has alley docked eighteen-wheelers, flipped burgers, jumped out of airplanes, and written Bezier spline generation algorithms. Currently, he is a member of the Authors Guild and the Association of Writers & Writing Programs, as well as a grant recipient from the Fund for Investigative Journalism. David Brown has investigated and discussed how the government secrecy industry has grown exponentially and how personal privacy is facing attacks from numerous fronts. "It's astonishing and it's only getting worse," Grady commented about the incredible amounts of information that has been labeled as 'secret' by our government. According to his research, the amount of government workers or contractors who have 'secret' or 'top secret' clearances is in the millions and could account for the entire population of the city of Chicago. He explained that this is because so much information has been classified over the years that such clearances are required "just to do your typical day-to-day job."

No Stupid Questions with Colin Smith
Everything You Ever Wanted To Know About The Pen Tool

No Stupid Questions with Colin Smith

Play Episode Listen Later Jan 10, 2012 13:47


The Pen tool can be found in many Adobe applications and they way it works can sometimes be a little different. Colin Smith will take you through the similarities and differences with the Pen tool in Illustrator, InDesign, Photoshop and After Effects.Colin also talks about AICB, what it means and why you should use it. For more helpful Adobe tutorials, visit Adobe TV,

The Spiel - MP3 Version
The Spiel at Essen 2011 - Bezier Games

The Spiel - MP3 Version

Play Episode Listen Later Nov 10, 2011 6:48


Ted Alspach chats about the latest greatest games from Bezier, including Mutant Meeples, Tiebreaker, and Ultimate Werewolf: Artifacts

The Spiel
The Spiel at Essen 2011 - Bezier Games

The Spiel

Play Episode Listen Later Nov 10, 2011 6:48


Ted Alspach chats about the latest greatest games from Bezier, including Mutant Meeples, Tiebreaker, and Ultimate Werewolf: Artifacts

The Spiel - MP3 Version
The Spiel at Essen 2011 - Bezier Games

The Spiel - MP3 Version

Play Episode Listen Later Nov 10, 2011 6:48


Ted Alspach chats about the latest greatest games from Bezier, including Mutant Meeples, Tiebreaker, and Ultimate Werewolf: Artifacts

FxFactory - Final Cut Pro, Motion and AE plugins
Bezier Distort Effect for FCPX, Motion and After Effects

FxFactory - Final Cut Pro, Motion and AE plugins

Play Episode Listen Later Sep 26, 2011 2:56


http://fxfactory.com/fxfactorypro/ Distorts the image using four Bezier curves anchored at the corners and one control point for each side. FxFactory powers hundreds effects for Final Cut Pro, Motion and After Effects: http://fxfactory.com/fxfactory/

University of Otago IT Training Monthly Tip

How to use the pen tool in drawing programs.

Computer Science: Introduction to Geometric Modeling (ECS178)
Rational Bezier and NURBS surfaces, effective surface modeling schemes

Computer Science: Introduction to Geometric Modeling (ECS178)

Play Episode Listen Later Jul 3, 2008 77:48


Computer Science: Introduction to Geometric Modeling (ECS178)
Bezier surfaces: partial derivatives and continuity

Computer Science: Introduction to Geometric Modeling (ECS178)

Play Episode Listen Later Jul 3, 2008 74:41


continuity surfaces bezier partial derivatives
Computer Science: Introduction to Geometric Modeling (ECS178)
Splines and continuity, with a focus on Bezier curves

Computer Science: Introduction to Geometric Modeling (ECS178)

Play Episode Listen Later Jul 2, 2008 83:14


Advanced Visualization (ECS277)
Bezier Curves, Surfaces and Volumes, Gradient Estimation

Advanced Visualization (ECS277)

Play Episode Listen Later Jul 2, 2008 120:35


Computer Science: Introduction to Geometric Modeling (ECS178)
Detailed discussion of C2-continuous cubic spline in Bezier form

Computer Science: Introduction to Geometric Modeling (ECS178)

Play Episode Listen Later Jul 2, 2008 80:51


Computer Science: Introduction to Geometric Modeling (ECS178)
Conversion of a B-spline representation to a Bezier representation and rational Bezier and non-uniform rational B-spline (NURBS

Computer Science: Introduction to Geometric Modeling (ECS178)

Play Episode Listen Later Jul 2, 2008 75:12


Advanced Visualization (ECS277)
Mesh-based Data Approximation: Triangulation-based Bezier Methods

Advanced Visualization (ECS277)

Play Episode Listen Later Jul 1, 2008 120:35


Advanced Visualization (ECS277)
Curved Elements and Functions Represented in Bezier Form

Advanced Visualization (ECS277)

Play Episode Listen Later Jul 1, 2008 120:35


Metamuse

Discuss this episode in the Muse community Follow @MuseAppHQ on Twitter Show notes 00:00:00 - Speaker 1: But this totally changes how the data is persisted, and I think that’s important because the only way you get good results on sync systems, especially when you’re talking about offline versus online and partially online, it has to be the one system that you use all the time. You can’t have some second path that’s like the offline cache or offline mode that never works. It needs to be the one true data synchronization persistence layer. 00:00:29 - Speaker 2: Hello and welcome to Meta Muse. Muse is a tool for thought on iPad and Mac, but this podcast isn’t about Muse the product, it’s about me as the company and the small team behind it. I’m here today with two of my colleagues, Mark McGranaghan. 00:00:43 - Speaker 3: Hey, Adam. 00:00:44 - Speaker 2: And Adam Wulf. 00:00:46 - Speaker 3: Yeah, happy to be here. 00:00:48 - Speaker 2: Now Wulf, you are not at all new to the Muse team, I think you’ve been with us for coming up on 2 years now, but it is your first appearance here on this podcast, a long overdue one I would say. So we’d love to hear a little bit about your background and how you came to the team. 00:01:03 - Speaker 3: Yeah, thanks, it’s exciting. Before Muse, I worked for a number of years with Flexits on their calendar app, Fantastical, both on the Mac and the iPhone and iPad. Really enjoyed that. At the same time, I was also working on an iPad app called Luose Leaf, which was an open source just paper inking app, kind of note taking app of sorts, really enjoyed that as well. 00:01:28 - Speaker 2: And I’ll know when we came across your profile, let’s say, and I was astonished to see loose leaf. It felt to me like a sort of the same core vision or a lot of the same ideas as Muse, this kind of like open-ended scratch pad, multimedia inking fluid environment, but I think you started in what, 2013 or something like that, the Apple pencil didn’t even exist, and you were doing it all yourself and, you know, in a way maybe too early and too much for one person to do, but astonishing to me when I saw the similarity, the vision there. 00:02:03 - Speaker 3: Yeah, thanks. I think the vision really is extremely similar. I really wanted something that felt physical, where you could just quickly and easily get to a new page of paper and just ink, and the, the app itself got out of your way, and it could just be you and your content, very similar to you sitting at your desk with some pad of paper in front of you. But yeah, it was, I think I started when the iPad 2 was almost released. And so the hardware capabilities at the time were dramatically less, and the engineering problems were exponentially harder as a result of that, and it was definitely too early, but it was a lot of fun at the time. 00:02:42 - Speaker 2: And I think one of the things that came out of that, if I remember correctly, is this open source work you did on ink engines, which is how we came across you. Tell us what you did there. 00:02:52 - Speaker 3: Yeah, there’s a few different libraries I ended up open sourcing from that work. One was the ink canvas itself, which that was the most difficult piece for me. The only way to get high performance ink on the iPad at the time was through OpenGL, which is a very low level. Usually 3D rendering pipeline. I had no background in that, and so it was extremely difficult to get something up and running with that low level of an architecture. And so, once I had it, I was excited to open source it and hopefully let other people use it without having to go through the same pain and horror that I did to make it work. But then one of the other things that was very useful that came out of loose leaf was a clipping algorithm for Bezier curves, which are just fancy ways to define ink strokes, basically, or fancy ways to describe long curvy, self-intersecting lines. And that work has also been extremely important for Muse as well. We use that same library and that same algorithm to implement our eraser and our selection algorithms. 00:04:05 - Speaker 2: And when you’re not deep in the bowels of inking engines, or as we’ll talk about soon sinking engines, what do you do with your time? 00:04:13 - Speaker 3: Oh, I live up in northwest Houston in Texas with my wife Christie and my daughter Kaylin. And she is in high school now, which is a little terrifying, and learning to drive and we’re starting that whole adventure, so that’s been fun for us. I try and get outside as much as I can. I’ll go backpacking or hiking a little bit. That can be fun, and the Houston summer, it’s rather painful, but the springs and the falls, we have nice weather for outdoors and so. 00:04:42 - Speaker 2: What’s the terrain like in the day trip kind of range for you? Is it deserty? Are there mountainous or at least hilly areas, or is it pretty flat? 00:04:52 - Speaker 3: It is extremely flat and lots and lots of pine trees, and that’s pretty much it. Just pine trees and flat land. Sometimes I’ll drive a few hours north. We have some state parks that are nice and have a bit of variety compared to what’s immediately around Houston, so that’s a good backup plan when I have the time. 00:05:14 - Speaker 2: Flat with a lot of trees sounds surprisingly similar to the immediate vicinity of Berlin. I would not have expected Texas and northern Germany to have the commonality there. It gave me a lot of appreciation for the San Francisco Bay Area, while that city didn’t quite suit. Me, as we’ve discussed in the past, one thing that was quite amazing was the nature nearby and a lot of that ends up being less the foliage or whatever, but more just elevation change. Elevation change makes hikes interesting and views interesting and I think itself leads to, yeah, just landscape elements that engage you in a way that flatness does not. 00:05:55 - Speaker 3: Yeah, absolutely. I lived in the Pacific Northwest for a while, and the trees there are enormous, and the amount of green and elevation change there is also enormous. And so when we moved back to Houston, it was a bit of a shock almost to see what I used to think were tall trees in Houston are really not very tall compared to what I lived around up in Portland, Oregon. 00:06:21 - Speaker 2: So our topic today is sync. Now Muse 2.0 is coming out very soon. We’ve got a launch date May 24th. Feels like tomorrow for our team scrambling to get all the pieces together here, but the biggest investment by far, even though we have the Mac app and we have text blocks are a part of it, the biggest kind of time, resource, energy, life force investment by far has been the local first sinking engine. And we’ve spoken before about local first sync as a philosophy generally in our episode with Martin Klapman, but I thought it would be good to get really into the details here now that we have not only built out this whole system, both the client side piece and the server piece. But also that we’ve been running it in, won’t quite call it production, but we’ve been running it for our beta for a few months now, and we have quite a number of people using that, some for pretty serious data sizes, and so we’ve gotten a little glimpse of what it’s like to run a system like this in production. So first, maybe Mark, can you describe a little bit how the responsibilities breakdown works in terms of between the two of you on the implementation? 00:07:32 - Speaker 1: Yeah, so I’ve been developing the back end or the server component of our sync system, and Wulf has been developing our iOS client that is the core of the actual app. 00:07:45 - Speaker 2: Yeah, on that side, I kind of think of the client persistence or storage layer as being the back end of the front end. So that is to say it’s in the client, which obviously is a user interface heavy and oriented thing, but then it persists the user data to this persistence layer which in the past was core data, is that right? Well the kind of standard iOS storage library thing. 00:08:08 - Speaker 3: Yeah, that’s exactly right. Yeah, we used core data, which is Apple’s fancy wrapper on top of a SQL light database. And that just stores everything locally on the iPad, like you were saying, so that way the actual interface that people see, that’s what it talks to. 00:08:25 - Speaker 2: And then that persistence layer within the client can talk to this back in the mark has created. And much more to say about that, I think, but I thought it would be nice to start with a little bit of history here, a little bit of motivation. I’ll be curious to hear both of your stories, but mine actually goes back to using my smartphone on the U-Bah, so that’s the subway system here in Berlin, when I was first working with some startups in the city back in, I guess it would have been 2014, so, 8 years ago I had this experience of using different apps and seeing how they handled both the offline state but actually the kind of unstable state because you have this thing where the train car goes in and out of stations and when you’re in the station, you usually have reception, weak reception, and you leave the station that fades off to you essentially fully offline, and so you’re in this kind of unreliable network state all the time. And two that I remember really well because they were really dramatic, was one was pocket, which is the relator tool I was using at the time, and it handled that state really well. If it couldn’t load an article, it would just say you’re offline, you need to come back later, but the things it had saved, you could just read. The other one I was using was the Facebook mobile app, and there I was amazed how many errors and weird spinners, and you go to load a thing and it would get half of it, but not the rest of it, and the app just seemed to lose its mind because the network was unreliable, and I found myself thinking, what would make it possible to make more apps to work the way the pocket does and less the way that Facebook works. And I also had the opportunity to work with some startups here, including Clue and Wunderlust and some others that had their own. Essentially everyone needs this. Everyone needs syncing because they want either one, the user to be able to access their stuff from different devices, or 2, they want some kind of sharing, and I think Vonunderlust was an interesting case because they built out this crack engineering team. To develop really good real-time syncing for a very simple case. It’s just a to do list, and the common case that people use it for, I think was, you know, a couple that’s grocery shopping and they want to like, make sure they don’t overlap and pick the same things in the cart. But it worked really well, but they built this huge, I think it was like a 15 person engineering team that spent years of effort to make really good real-time sin, and it seemed strange to me that you need this big engineering team to do what seems like a simple thing that every app needs. We went down this road of trying CouchDB and Firebase and a bunch of others, and all were pretty unsatisfying. And then that further led in, you know, that kind of idea, the sync problem lodged in my mind and then when we got started at ink and Switch, some of our early user studies there were on sync and how people thought about it. And one thing that stuck with me from those was we looked into just kind of syncing on. And note taking apps and talked to a whole bunch of people about this, and we didn’t have a product at the time, so it was just kind of a user research study, but we went and talked to a bunch of folks, most of whom were using Evernote was kind of the gold standard at the time. And almost everyone we talked to, when I asked what’s your number one most important feature from your notes app, they said sync and said, OK, so that’s why you chose Evernote, and they said, yeah, and they said, how well does it work? And they said terribly, it fails all the time. You know, I write a note on my computer, I close the lid, I go to lunch. Half an hour later, I go to pull it up on my phone. It’s not there. I have no idea why. And so some combination of those experiences sort of lodged this thing in my mind of the technology industry can just do so much better, and this is important and everyone needs it. What’s the missing piece. And I wasn’t really sure, but that led into once I met up with folks in the research world who indeed had been working on this problem for a while, and I got excited about the technologies they had to offer. 00:12:15 - Speaker 1: Yeah, and then I guess I was downstream of that because I got introduced to space by Peter Van Hartenburg with time was a principal at the Inn Switch Research Lab, and it’s now the director of the lab. And he showed me a demo of the Pixel pusher project, and we can link to the article on this, but essentially this is a Pixel art editing tool that was peer to peer collaborative, and the app itself is very standard, but was amazing to me was he had implemented this app and he had 2 devices or 2 windows on the same device, and they were doing real-time collaboration, but there was no server. And I had come from this world of wherever you add a feature to an app, you gotta write the front end and then you gotta write the back end, you gotta make sure they line up whenever anything changes, it’s a whole mess, and it was just magical to me that you could just type up this JavaScript app and have it collaborating with another client in real time. So I went down that rabbit hole, and there was the obvious attractions of the austere locations and, you know, minimal network connectivity and things like that. And also at the time the research was very oriented around P2P, so there was this notion of the user having more control of their data and perhaps not even requiring a central server, but a couple of things became even more appealing to me as I researched it more. One was that Potential of higher performance. And I ended up writing a whole article about software performance that we can link to. But one of the key insights was that it’s not physically possible to have acceptably fast software if you have to go anywhere beyond the local SSD. Now, certainly if you’re going to a data center in Virginia or whatever, you’re totally hosed. So it was very important to incorporate this performance capability into Muse. 00:13:49 - Speaker 2: Yeah, that article was eye opening for me and that you connected the research around human factors, things that looked at what level of latency you needed for something to feel snappy and responsive, and then separately the speed of light, which is how sort of the maximum possible speed that information can travel, and if you add those together or do very simple arithmetic on that, you can instantly see it’s not about having a faster network connection. You literally cannot make something that will feel fast in the way that we’re talking about if you have to make a network round trip. 00:14:21 - Speaker 1: Yeah, and the one other thing that was really interesting to me about this space was the developer experience. I alluded to this earlier with the Pixel Pusher demo, but in the before times there were two ways to develop apps. You had the local model where you were typically programming against the SQL database, and everything was right there and it sort of made perfect sense. You would query for what you need and you write when you have new information and so on. And then there was the remote model of you would make rest calls, for example, out to some service like admit this edit or add a new post or whatever. But then these two worlds were colliding where we always wanted to be adding sync and collaborative capabilities to our apps, we would try to kind of jam one into the other, like you would try to patch some rest onto the database or you try to patch some database on yours and it just wasn’t working, and I realized we need to do a pretty fundamental rethink of this whole architecture, which is what we end up doing in the research lab and then now with Muse. The last thing I’ll mention about my journey here was my background was in back in engineering and distributed systems engineering, and so I had encountered variants of the sync problem several times, for example, at Hiroku, Adam. We had this challenge of we had these routers that were directing HTTP requests to a back end that was constantly changing based on these dinos coming up and down, and the routers needed to maintain in memory router tables based on the control plan that was being adjusted by the API. And so we had a similar problem if you need to propagate consistently in real time state to the in-memory databases of all these router nodes, and sure enough that work kind of came full circle and we were applying some of the same lessons here with Muse. So it’s a problem I’ve had the opportunity, for better or worse, to make a few passes at in my career. 00:15:57 - Speaker 3: Yeah, I think it’s an extremely hard problem that comes up so often across so many projects is eventually you need data over here in Box A to look the exact same as data over here in Box B. and it’s one of those problems that’s just surprisingly hard to get right, and there just aren’t that many libraries and existing solutions for it to drop in and implement. A lot of other libraries you can just go out and find it, and there’s code out there, or you can license it or open source, whatever, but for whatever reason, sync is one of those things that’s for every project, it needs to be custom baked to that project, just about every time. 00:16:38 - Speaker 2: And that’s part of what blew my mind back 8 years ago when I was looking for a sinking layer for clue and realizing that, yeah, I just had this feeling like surely everyone has this problem, everyone needs it, everyone needs the same thing. It’s really hard, you know, an individual company shouldn’t be distracting from their core competency of building their app to create the sinking layer, and yet to my surprise, there really wasn’t much, and that continues to basically be true today. 00:17:06 - Speaker 1: Yeah, and this gets into our collaboration with Martin Klutman on CRDTs. So briefly you can think of there being two pieces to this problem. One is conveying the physical data around, and the other is, OK, you have all this data that synchronize, what do you do with it, because it’s all a bunch of conflicting edits and so on. And that’s where the CRDT technology came in. I think one of the reasons why we haven’t seen widespread standard libraries for this stuff is the thinking problem is hard. We’ll talk more about that. But another is that we haven’t had the computer science technology to make sense of all of these edits. Well, we sort of did. There was like operational transforms, but you literally need to hire a. Team of PhD computer scientists have any shot at doing stuff like that. And so Google Docs basically had it and maybe a few others, but normal humans couldn’t do anything with it. But the CRDT technology and automerge, which we’ll talk more about, made it much more accessible and possible to make sense of all these conflicting edits and merge them into some useful application state. So that’s the kind of why now of why now is a good time I think to be pursuing this. 00:18:06 - Speaker 3: Yeah, and I think almost surprisingly to me, the solution we came up with at Muse, I think is actually really generic, and I think we solve it in a really elegant way that’s even more foundational to the technology than solving just for use. I think the solution we have. Can certainly solve from use in the future and is futureproof in that regard, but is broad enough to be applicable to a whole number of different uses and applications, which I think is really exciting too. 00:18:37 - Speaker 2: Maybe it’s worth taking a moment to also mention why we think local first in the style of sync is important for you specifically. I think certainly Mark and I have had a long time interest in it. Well, if you have an interest in it, so it’s just something that’s more like we’d like to see more software working in this way where the user has a lot more sort of control and literal ownership over the data because it’s on their device. In addition to being mirrored in the cloud, certainly the performance element is huge for me personally, and I think for all of us on the team. But I think Muse, as we go to this multi-device world, on one hand, we think that every device has its own kind of unique mood. The iPad is this relaxed space for reading and annotating, whereas the Mac or a desktop computer is for focus, productivity, you know, the phone is for quick capture, the web is good for sharing. OK, so really you need your work to be seamlessly across all of them. But at the same time, you know, we want that sense of intimacy and certainly the performance and the feeling that it’s in your control and you own it, and it belongs to you. I think that maybe matters less for some consumer products, or maybe it matters less for more kind of B2B, you know, enterprisey products, but for this tool, which is for thinking. Which is very personal, which is very kind of needs to be at your fingertips and friction free. I think the local first approach would be a good fit for a lot of software, but I think Muse needs it even more than most. So that’s why I’m really excited to see how this works out in practice as people try it out, and we really don’t know yet, right? It may be that we’ve made this huge engineering investment and in the end customers just say, I’d be happy with the cloud, yeah, it’s fine. I have some spinners, I can’t access my work offline. I hope not. But that could happen. We could be like falsifying the business hypothesis, but I really believe that for our specific type of customer, you’ll go to use this product with the sinking layer, you know, once we shake out all the bugs and so on and say, you know, this feels really fundamentally different from the more cloud-based software that I’m used to like an ocean and also fundamentally different from the non syncing pure local apps that I might use. 00:20:51 - Speaker 3: Yeah, I really think that with as connected as this world is and is becoming, there’s always going to be places of low connectivity, there’s always going to be places of just dodgy internet, and having an application that you know just always works, no matter what’s going on, and figures itself out later once it has good internet, is just so freeing compared to Those times when, you know, your device is switching Wi Fi networks or the LTE is just not quite what it needs to be to make things happen. I think it really does make a really huge difference, especially when you’re deep in thought, working on your content in use, the last thing you want is to be interrupted for even half of a second with a small spinner that says please connect to the internet. And so just being able to free the application and free the user from even worrying about the internet at all, even if it works 99% of the time, it’s that 1% of the time that breaks your train of thought that is just really frustrating. And I think that’s what’s exciting about being able to be purely offline is it fixes that really huge problem of that really small percentage of time that it happens. 00:22:10 - Speaker 2: Very well said. Now with that, I’ll do a little content warning. I think we’re about to get a lot more technical than we ever have on this podcast before, but I think this is a topic that deserves it. So I’d love to, and me especially as someone who’s not deep in the technology and just observing from the sidelines, I’d love to hear about what’s the high level architecture, what are all the pieces that fit together here that make this syncs when you’re on the internet and lets you keep working even when you’re not? What is it that makes all that work? 00:22:41 - Speaker 1: Yeah, I’ll give a really quick overview and then we can dive into some of the specific pieces. So to start with the logical architecture, the basic model is a user has a bag of edits, so you might have 1000 edits or a million edits where each edit is something like I put this card here or I edit this picture, and over time the user is accumulating all these edits and the job of the sync system is to ensure that eventually all of the users' devices have the same bag of edits. And it passes those edits around as opaque blobs and different flavors of blobs we’ll talk about. Basically there’s a bunch of bits of binary data that all devices need to have the same, and then it’s the device’s responsibility to make sense of those edits in a consistent way. So given the same bag, each device needs to come up with the same view of the muse corpus of that individual user, what boards are alive and what cards are on them and so forth. And then briefly in terms of the physical architecture, there’s a small server that’s running on Hiokku, data is stored in post grass and S3 and it’s implemented in Go, and again the server is just shuffling binary blocks around basically. And then there’s different front ends, different clients that implement this synchronization protocol and present a use corpus model up to the application developers. So the most important of these is the SWF client. We also have a JavaScript client and both of these back to SOI databases locally. 00:24:09 - Speaker 3: Yeah, and I think what’s really interesting about this architecture is that we actually maintain the entire bag of edits. Edits only get added into the bag, but they never really get removed. And so the current state of the application is whatever the most recent edit is. So if I make a card bigger on my Mac, and then I go to my iPad and I make that same card smaller. And then we synchronize those two things. Well, at the end of the day, either the card is going to be smaller on both devices, or the card is gonna be bigger on both devices, and we just pick the most recent one. And that strategy of just picking the most recent edit actually makes conflicts essentially invisible or so small and so easy to fix that the user can just, oh, I want that big, let me make it big again. It’s really easy to solve. For the user side without showing up one of those really annoying, hello, there’s been an edit. There’s a conflict here. Would you like to choose copy A or copy B? Just being able to automatically resolve those is more than half of the magic, I think, of this architecture. 00:25:13 - Speaker 2: I also note this is a place where I think the muse domain, if you want to call it that, of the cards on a canvas model works pretty well with this sort of automated resolution, which is if you moved a card in one direction on one device and you moved it somewhere else on the other device, it’s not really a huge deal which one it picks as long as it’s all kind of like flows pretty logically. By comparison, text editing, so what you have in a Google Docs or certainly I know auto merge team and the incode switch team has done a huge amount of work on this, is a much harder space where you can get into very illogical states if you can merge your edits together, strangely, but I think a card move, a card resize, add remove, even some amount of reparenting within the boards, those things just are pretty natural to merge together, I think. 00:26:02 - Speaker 3: Yeah, I think so, and I think even with the new text block feature in Muse, we end up slicing what would be a really long form text document into much smaller sentences or paragraphs. And so then text edits, even though we’re only picking the kind of the most recent one to win, we’re picking that most recent at the granularity of the sentence or of the the paragraph, and so. Conflicts between documents for us are larger than they would be for automerge or for Google Docs, but are small enough that it’s still ignorable for the user and easily solvable by the user. 00:26:42 - Speaker 2: Which incidentally I think is a trick we sort of borrowed from FIMA, at least on the tech side, which is in FIGA and also in Muse. If one person edits, you know, the red car and someone else edits the blue car, you don’t get the red blue car, you just get one or the other, and it turns out for this specific domain, that’s just fine. 00:27:03 - Speaker 3: Yeah, I think we kind of lucked out having such a visual model, and we don’t need to worry about intricacies of multi-user live document editing. 00:27:13 - Speaker 1: Yeah, I would point to both Sigma and actual budget as two very important inspirations for our work. I would say those are two of the products that were most at the forefront of this space, and thought about it most similarly to how we did. And notably they, as well as us sort of independently arrived at this notion of basically having a bunch of last white wins registers. As the quote unquote CRDTs. So these are very, very small, simple, almost degenerate CRDTs where the CRDT itself is just representing one attribute, for example, the X coordinate of a given card. But this is an important insight of the industrial application of this technology, if you will. That’s a good trade-off to make it. It basically covers all the practical cases, but it’s still very simple to implement, relatively speaking. 00:28:03 - Speaker 2: I also mentioned briefly actual budget, great in the basically made by one person app and recently open source, so you can actually go and read the custom CRDT work there and maybe learn a thing or two that you might want to borrow from. 00:28:17 - Speaker 3: I think one of the really interesting problems for me about the CRDT was Deciding which edit is the most recent because it just makes logical sense to say, oh well, it’s 3 o’clock, and when I make this edit at 3 o’clock and I make a different edit at 3:02, obviously the one at 3:02 wins. But since computer clocks aren’t necessarily trustworthy, sometimes I have games on my iPad that reset every day and so I’ll set my clock forward or set my clock backward. Or if I’m on an airplane and there’s time zones, and there’s all kinds of reasons the clock might jump forward or jump backward or set to different problems, and so using A fancier clock that incorporates a wall clock, but also includes a counter and some other kind of bits of information, lets us still order edits one after the other, even if one of those clocks on the wall is a year ahead of schedule compared to the other clocks that are being synchronized. I don’t know how in depth we want to get on that, but it’s it’s called a hybrid logical clock. 00:29:23 - Speaker 1: Yeah, I think this is another great example along with choosing very simple CRDT structures of industrial style architecture where you could go for a full blown vector clock, and that gives you perfect logical ordering and a bunch of other nice properties, but it’s quite large and it’s expensive to compute and so on. Whereas if you choose a simpler fixed size clock, that can give you all the benefits that you need in practice, it can be easier to implement, it could be faster to run, and so on. 00:29:52 - Speaker 3: Like everything in life, it’s all about trade-offs, and you can get accuracy, but it costs more, or you can get a little bit less accuracy, and it costs a lot less, and for us that was the better trade-off to have a fixed size clock that gives us Enough of the ordering to make sense, but might not be exactly perfect ordering. 00:30:13 - Speaker 1: And we’ve been alluding to trade-offs and different options, so maybe it’s time to address it head on in terms of the other options that we considered and why they weren’t necessarily as good of a fit for us. So I would include in this list both iCloud and what you call like file storage. 00:30:27 - Speaker 2: It might be like cloud kit or something, but yeah, they have one that’s more of a blob, kind of, you know, save files, what people will think of with their sort of iCloud drive, almost kind of a Dropbox thing, and then they also have a cloud kit. I feel like it’s a key value store, but in theory, those two things together would give you the things you need for an application like ours. 00:30:47 - Speaker 1: Yeah, so there’s iCloud as an option, Firebase, automerge. CouchDB maybe, then there’s the role you’re on which we ended up doing. 00:30:57 - Speaker 2: Yeah, the general wisdom is, you know, you don’t write your own, if there’s a good off the shelf solution, you name some there that are commercial, some are built into the operating system we’re using, some are indeed research projects that we’ve been a part of, what ultimately caused us to follow our own path on that. 00:31:15 - Speaker 1: Yeah, so there was a set of issues that tended to come up with all of these, and it was more or less in different cases, but I think it’d be useful to go through the challenge that we ran into and talk about how they emerged in different ones of these other solutions. So one simple one, it would seem it’s just like correctness slash it works. And the simple truth is, a lot of the singing systems out there just do not work reliably. Hate to pick on Apple and iCloud, but honestly, they were the toughest in this respect where sometimes you would, you know, admit data to be synchronized and just wouldn’t show up, and especially with opaque closed source solutions and third party solutions, stuff would not show up and you couldn’t do anything about it, like you couldn’t see what went wrong or when it might show up or if there was some error. And then bizarrely, sometimes the stuff would pop up like 5 or 10 minutes later. It’s like, oh, it’s actually sort of worked, but it’s off by You know, several zeros in terms of performance. So that was a really basic one, like the syncing system has to be absolutely rock solid and it kind of goes back to the discussion Wulf had around being offline sometimes. If there’s any chance that the sync system is not reliable, then that becomes a loop in the user’s mind. Am I gonna lose this data? Is something not showing up because the sync system is broken. Our experience has been that if there’s any lack of reliability or lack of visibility into the synchronization layer. It really bubbles up into the user’s mind in a destructive way, so we want it to be absolutely rock solid. Another important thing for us was supporting the right programming model. So we’ve been working on news for several years now. We have a pretty good idea of what capabilities the system needed to have, and I think there were 4 key pillars. One is the obvious transactional data. It’s things like what are the cards and where are they on the board. This is data that you would traditionally put in a SQL database. Another thing that’s important to have is blob support, to a lot of these binary assets in use, and we wanted those to be in the same system and not have to have another separate thing that’s out of band, and they need to be able to relate to each other correctly. 00:33:09 - Speaker 2: This is something where a 10 megabyte PDF or a 50 megabyte video just has very different data storage needs than the tiny little record that says this card is at this X and Y position and belongs to this board. 00:33:23 - Speaker 1: Right, very different, and in fact you’re gonna want to manage the networking differently. Basically you want to prioritize the transactional data and then load later, or even lazily, the binary data, which is much larger. Yeah, so there was transactional data, blob data, and then real-time data slash ephemeral data. So this is things like you’re in the middle of an ink stroke or you’re in the middle of moving a card around and this is very important to convey if you’re gonna have real time and especially multi-user collaboration, but again, you can’t treat this the same as certainly blob data, but even transactional data, because if you store every position a card ever was under your finger for all time, you’re gonna blow up the database. So you need those 3 different types of data, and they all need to be integrated very closely. So for example, when you’re moving a card around, that’s real time, but basically the last frame becomes a bit of transactional data, and those two systems need to be so lined up to each other that it’s as simple as changing a flag. If you’re going on a 2nd or a 3rd band for real-time data and need to totally change course for saving the transactional data, it’s not gonna be good. It was quite rare. I don’t know if we found any systems that support all three of these coherently. 00:34:33 - Speaker 2: The ephemeral data element I found especially interesting because you do really want that real timey feeling of someone wiggles a card with their finger and you can see the wiggling on the other side. That just makes the thing feel live and Just responsive in a way that it doesn’t otherwise. But yeah, at the same time, you also don’t want hundreds of thousands of records of the card moved 3 pixels right, and then 3 pixels left. And one thing I thought was fascinating, correct me if I misunderstood this, but is that because the client even knows how many other devices are actively connected to the session, it can choose to not even send that ephemeral data at all. It doesn’t even need to tap the network. If no one else is listening, why bother sending ephemeral data? All you need is the transactions over time. 00:35:21 - Speaker 1: Right, this is actually a good example of how there’s a lot of cases where different parts of the system need to know or at least benefit from knowing about other parts. So it becomes costly or or maybe just an outright bad idea to separate them, especially as we’re still figuring out as industry how they should work. I think there’s actually quite a bit of benefits to them being integrated. Another. that we could talk about eventually is prioritizing which data you download and upload, you might choose to first download blobs that are closer to you in board space, like it’s in your current room or it’s in adjacent rooms, and then later you can download other blobs. So that’s something you could do if the application had no notion of the networking layer. It actually brings us to Another big challenge we saw with existing systems, which is multiplexing. So I’ll use an example of automerge here, and this is something we’ve seen with a lot of research oriented CRDT work. It’s very focused on a single document, so you have a document that represents, you know, say a board or whatever, and a lot of the work is around how do you synchronize that document, how do you maintain correctness, even how do you maintain performance when you’re synchronizing that document across devices. Well, the challenge with Muse with our model. You might have, you know, easily 1000, but, you know, potentially tens of thousands up to millions of documents in the system corresponding to all your individual cards and so on. And so if you do anything that’s order and in the number of documents, it’s already game over. It needs to be the case that, here’s a specific challenge that I had in mind for the system. You have a corpus, let’s say it’s a million edits across 10,000 documents or something like that, and it’s 100 megabytes. I wanted the time to synchronize a new device that is to download and persist that entire corpus, to be roughly proportional to the time it would take to just physically download that data. So if you’re on a 10 megabyte connection, 100 megabyte connection, maybe that’s 10 seconds. But the only way to do that is to do a massive amount of like multiplexing, coalescing, batching, compression, so that you’re taking all these edits and you’re squeezing them into a small number of network messages and compressing them and so on. So you’re sort of pivoting the data, so it’s better suited to the network transfer and the persistence layer. And again, you need to be considering all these things at once, like how does the application model relate to the logical model, relate to the networking protocol, relate to the compression strategy, and we weren’t able to find systems that correctly handle that, especially for when you’re talking about thousands or millions of documents being synchronized in parallel. And the last thing I’ll mention is what I call industrial design trade-offs. We’ve been alluding to it in the podcast so far, but things like simplicity, understandability, control, these are incredibly important when you’re developing an industrial application, and you tend not to get these with early stage open source projects and third party solutions and third party services. You just don’t have a lot of control and it was too likely to my mind that we would just be stuck in the cold at some point where system didn’t work or it didn’t have some capability that we wanted, and then you’re up a dead end road, and so what do you do? Whereas this is a very small, simple system. You could print out the entirety of the whole system it would be probably a few pages, well it’s a few 1000 lines of code, it’s not a lot of code, and it’s across it’s a couple code bases, and so we can load the whole thing into our head and therefore understand it and make changes as needed to advance the business. 00:38:38 - Speaker 3: Yeah, I think that last point might honestly be the most important, at least for me. I think having a very simple mental model of what is happening in sync makes things so much easier to reason about. It makes fixing bugs so much easier. It makes preventing bugs so much easier. We’ve been talking about how sync is hard and how almost nobody gets it right, and that’s because it’s complicated. There’s a bajillion little bitty edge cases of if this happens, but then this happens after this happens, and then this happens. What do we do? And so making something really really simple conceptually, I think was really important for the muse sync stability and performance at the end of the day. 00:39:21 - Speaker 2: I’m an old school web developer, so when I think of clients and servers, I think of rest APIs, and you maybe make kind of a version API spec, and then the back end developer writes the endpoint to be called to and the front end developer figures out how to call that with the right parameters and what to do with the response. What’s the diff between a world that looks like that and how the new sync service is implemented? 00:39:50 - Speaker 1: Yeah, well, a couple things. At the network layer, it’s not wildly different. We do use protocol buffers and binary encoding, which by the way, I think would actually be the better thing for a lot of services to do, and I think services are increasingly moving in that direction, but that core model of you have, we call them endpoints. You construct messages that you send to the endpoint and the server responds with a response message. That basic model is pretty similar, even if it’s implemented in a way that’s designed to be more efficient, maintainable, and so on than a traditional rest server. But a big difference between A traditional rest application and the muse sync layer is that there are two completely separate layers, what we call the network layer and the app layer. So the network layer is responsible for shuffling these binary blobs around the transactional data, the ephemeral data, and the big binary assets. And the server knows absolutely nothing about what’s inside of them by design, both because we don’t want to have to reimplement all of the muse logic about boards and cards or whatever in the server, and also because we anticipate eventually end to end encrypting this, and at that point, of course, the server can’t know anything about it, it’s not gonna be possible. So that’s the networking layer and then if you sort of unwrap that you get the application layer, and that’s the layer that knows about boards and cards and edits and so on. And so it is different, and I would say it’s a challenge to think about these two different layers. There’s actually some additional pivots that go on in between them, versus the traditional model of you would like post V1 slash boards directly and you’d put the parameters of the boards and then the surfer would write that to the boards table and the database. There’s a few different layers that happen with this system. 00:41:30 - Speaker 2: So if we want to add a new card type, for example, or add a new piece of data to an existing card, that’s purely in the application layer on the back end, or it doesn’t know anything about that or no changes are needed on the back end. 00:41:44 - Speaker 1: Yeah, no changes are needed. In fact, one of the things I’m most proud about with this project is we basically haven’t changed the server since last year, December, and we’ve been, you know, rigorously iterating on the app, you know, adding features, changing features, improving a bunch of stuff, and the servers, it’s basically the same thing that was up 4 months ago, just chunking along, and that’s a benefit. It’s a huge benefit, I think, of this model of separating out the application model and the network model, because the network model is eventually gonna move very slowly. You basically figure that out once and I can run forever. And the application model has more churn, but then when you need to make those changes, you only need to make them in the client or the clients that maybe you update the application schema so that current and future clients can understand that, and then you just start including those data in the bag of edits. 00:42:26 - Speaker 3: Yeah, I think one thing that’s really nice is that those protocol buffers that you were talking about are type safe and kind of statically defined, so that way it’s when we’re sending that message over the wire, we know 100% we’re sending exactly the correct messages no matter what, and that guarantee is made at compile time, which I think is really nice because it means that a lot of bugs that could otherwise easily sneak in if we’re using kind of a generic JSON framework, we’re gonna find out about when we hit the please build muse button. Instead of the I’m running views and I randomly hit a bug button. And that kind of confidence early on in the build process has been really important for us as well to find and fix issues before they even arise. 00:43:11 - Speaker 1: Yeah, to my mind this is the correct way to build network clients. You have a schema and it generates typesa code in whatever language you want to use. There’s just enormous benefits to that approach. I think we’re seeing it with this on use and again, I think more systems, even more traditional B2B type systems are moving in this direction. By the way, everyone always made fun of Amazon’s API back in the day. I had this crazy XML thing where There’s a zillion endpoints. I actually think they were closer to the truth and the traditional, you know, nice rest crud stuff because their clients are all auto generate and sure enough they have like literally a zillion endpoints, but everything gets generated for free to a bunch of different languages. Anyways, one challenge that we do have with this approach is, you know, one does not simply write a schema when you have these multiple layers. So again, if you look at a traditional application, you have a protocol buffer definition of, say, a board B board and probuffs. And that would have fields like title and width and height or whatever. And when you want to update the board, you would populate a memory object and you would encode this to a protocol buffer and you would send this off to the server. Well, it’s not quite that simple for us because we have this model of the small registers that we call atoms. So an atom is the entity, say a board, the attributes say the title, the value say use podcast, and the time stamp. And your bag of edits is comprised of all these different atoms, but the problem is, how do you encode both how you’re gonna send an atom, which is as those twopos, as well as what a logical board is, you know, what the collection of atoms is meant to look like, you know, it’s gonna have a title and the width and height and so on. So that’s been honestly a pretty big challenge for us where it doesn’t fit into any of the standard schema definition approaches, certainly not the regular protocol buffer schema, which again we use for the network and for encoding the messages that are wrapped up in the network, but you need a separate layer that encodes the application model, as we call it, you know, what is a board, what is a card, what attributes that they have and so on. 00:45:06 - Speaker 2: And Wulf, if I recall you have a blog post about these atomic attributes. I’ll link that in the show notes for folks. 00:45:14 - Speaker 3: Yeah, so unfortunately no relation between my name and Adam. It’s a TOM. 00:45:18 - Speaker 2: Yes, we have two Adams on this podcast. The ADAM is different from the ATOM. 00:45:25 - Speaker 1: Yeah. A big inspiration on this, by the way, is Tomic, I don’t know if we’ve mentioned that yet on this podcast, but Atomic is a database system developed by Rich Hickey and team who is also the creator of Closure. And it uses this model in contrast to the traditional relational model you have tables and columns and rows. The atomic model is more like a bag of time stamped attributes where you have an entity, an attribute, a value and a time stamp. And from that, it could be more challenging to work with that model, but it’s infinitely flexible. You can sort of put whatever model you want on top of that, and it works well for creating a generic database system. You know, you couldn’t have a generic post graphs, for example, that could run any application. You need to first create tables that correspond to the actual application you’re trying to build, whereas with an atom oriented database, you basically have one huge table which is atoms. So it’s useful again for having this slower moving more stable synchronization layer that handles moving data around that you build the application on top of that moving quickly. 00:46:27 - Speaker 3: Yeah, and like we talked about earlier, it’s so much simpler to reason about. All of the problems of my iPad is on version 1, my Mac is on version 2, and my iPad Mini is on version 3. They’re sending data back and forth. At the end of the day, every single database on all three of those clients is gonna look the same, even though they have completely different logic, maybe different features. But all the simplicity of that data store makes it much, much easier to reason about as the application gets upgraded or as two different versions of the client are synchronizing back and forth. 00:47:03 - Speaker 2: How does that work in practice? So I can certainly imagine something where all of the data is sent to every client, but a V1 client just doesn’t know what to do with this new field, so just quietly stores it and doesn’t worry about it. But in practice, what happens if I do have pretty divergent versions between several different clients? 00:47:23 - Speaker 1: Recall some podcasts ago, we suggested that everything you emit should have a UU ID and a version. Well sure enough that’s advice that we take to heart with this design, where all the entities, all the messages, everything has a UU ID and also everything’s version, so there’s several layers of versioning. There’s the network protocol is versioned and the application schema is versioned. So by being sure to thread those versions around everywhere, the application can then make decisions about what it’s gonna do and Wulf can speak to what the application actually chooses to do here. 00:47:54 - Speaker 3: Yeah, exactly. If we’re sending maybe a new version of a piece of data on the network layer that device A just doesn’t physically know how to decode from that work, then it’ll just save it off to the side until it eventually upgrades and then it’ll actually read it once it knows what that version is. 00:48:11 - Speaker 2: So is there someone like, can I make a crude metaphor here, someone emails me a version of a Word doc from a later version that I don’t have yet, I can save that on my hard drive, and later on when I get the new version, I’ll be able to open the file. 00:48:25 - Speaker 3: Yeah, exactly right. It’s very similar to that. And then I think there’s a different kind of upgrade where we’re actually talking the same language, but I don’t know what one of the words is that you said. So let’s say we add a completely new content type to muse called the coffee cup, and everyone can put coffee cups on their boards, right? That coffee cup is gonna have a new type ID attribute that kind of labels it as such. New clients are gonna know what type 75 means coffee cup, and old clients are gonna look at type 75 and say, oh, I don’t know about Type 75, so I’ll just ignore it. And so the data itself is transferred over the network schema and kind of the app schema and understands those versions, but it might not understand the physical data that arrives in the value of that atom. And in that case, it can happily ignore it and will eventually understand what it means once the client upgrades. And so there’s a number of different kind of safety layers where we version something. If we’re unable to even understand kind of the language that’s being spoken, it’ll be saved off to the side. If we do understand the language that’s spoken, but we don’t understand the word, we can just kind of safely ignore it, and then once we are upgraded, we can safely understand both the language and the word. 00:49:47 - Speaker 1: Yeah, so maybe to recap our discussion of the low level synchronization protocol before we go on to the developer experience and user experience, might be useful to walk through a sort of example. So suppose you are doing a thinking session in your nice comfy chair on your iPad, you’re offline, you’re making a few dozen edits to a series of different boards and cards in your corpus. Those are going to write. New atoms in your database, and those are essentially gonna be flagged as not yet synchronized, and then when you go online, those atoms, assuming it’s some plausible number, you know, it’s maybe less than 1000 or so. Those are all gonna be combined into a single network message. So this is that multiplexing efficiency where you certainly don’t need to check every document in your corpus, and you don’t even need to do one network right per every edit or even one network right per document. You can just bundle up all of your recent changes into a single protocol buffer message and could potentially compress it all with GSIP, and then you send that out to the server. The server doesn’t know anything about these edits, you know it’s just one big binary packet. The server persists that, and then it sends a response message back to the client and says, OK, I’ve successfully received this. You can now treat this as synchronized and the server will take responsibility for broadcasting it out to all the clients. And then clients as they come online, if they’re not already online, they will immediately receive this new packet of data called a pack. And then they can decompress and unpack that into its constituent atoms, and once they’ve processed those, tell the server, I have successfully saved this on my device and in the background of the server is essentially maintaining a high watermark of for each device that’s registered for this user, what’s the latest pack or block they successfully persisted, and that way as devices come on and offline, the server knows. What new data needs to send to each individual device, and that works both for essentially conveying these updates in near real time as they happen, as well as for doing big bulk downloads if a device has been offline for a long time. And I know we’ve mentioned a few times, but to my mind this multiplexing and batching and compression is so important, so it’s the only thing that makes this even remotely feasible with the Muse data model of having a huge number of objects. And then I think this leads pretty naturally to a discussion of the developer experience. So we’ve talked about this sort of sync framework, and that essentially is gonna present a developer interface up to the application developer. So Wulf, maybe you can speak a little bit to that. 00:52:19 - Speaker 3: Yeah, we’ve talked some about the simplicity that we’re aiming for, just conceptually and how synchronization works. I think it’s equally important for this to be extremely simple for the end developer to use as we’re building new features in use or as we’re, you know, changing the user interface around. That developer, whether it’s me or Julia or anybody else working on Muse, doesn’t need to be able to think in terms of sync at all. We just need to be able to write the application is the ideal world, needs to be very, very simple. And so keeping that developer experience simple was a really big piece of designing what sync looks like inside of Swift for iOS. Since we had been built on core data beforehand, a lot of that developer interaction ends up looking extremely similar to core data. And so we build our models in Swift, it’s a Swift class. We have all of the different attributes where there’s position, and size, and related document, and things like that, and we just stick what’s called in Swift a property wrapper, it’s just a small little attribute. In front of that property that says, oh by the way, this thing, this thing belongs in the sync database. This property is gonna be merged, and that one little piece of code, that one little kind of word in the code program is what fires up the sync database and the sync engine behind it to make all of this stuff work. And that has been really important both for conceptually building new features, but also for migrating from core data to sync. Because the code that core data looks like beforehand, and the code that sync looks like now, is actually extremely similar. Early on in the development process, our very first kind of internal beta, internal alpha, pre-alpha, whatever version you want to call it. Very early on in the process, we actually ran both core data and the sync engine side by side. So some of the data in Muse would load from core data and other bits and pieces would load from sync, but both of those, because they looked very, very similar from the developer’s perspective, from kind of how we use both of those frameworks. It allowed us to actually slowly migrate use over from one to the other, by replacing bits of core data with bits of sync, and then this little bit of core data with this little bit of sync. I mean there’s, you know, thousands and 10s of thousands of lines of custom logic to make muse muse. And so it was really important to keep all of that logic running, and to keep all that logic separate from the physical data that logic was manipulating. And so making those appear similar to the developer, let us do that. It let us keep all of that logic essentially unchanged in use while we kind of swap out that foundation from underneath it. 00:55:15 - Speaker 2: And I remember when you implemented the first pass at this persistence library, and I forget if Yuli was maybe away on holiday or maybe she was just working on another project, but then she came in to use your kind of first working version and start working on the sort of porting it across and she had a very positive reaction on the developer experience, you know, you are sort of developing the persistence layers so you naturally like it because. Here, maybe the way you like it and you’re thinking about the internals, she’s coming at it more from the perspective as a consumer of it or a client or a user, and the developer experience, and I found that to be promising because I mean, she, like most, I think iOS developers has spent many, many years in her career using core data. Which is a long developed and well thought through and very production ready persistence layer that has a lot of edge cases covered and is well documented and all that sort of thing. So in a way it’s a pretty high bar to come in and replace something like that and have someone just have a positive reaction to using it as a developer. 00:56:21 - Speaker 3: Yeah, I was so happy when she said that she kind of enjoyed using it and kind of understood how it worked, because of course every developer likes their own code, but when a developer can use and is comfortable with another developer’s code, that’s really, really important. And that was absolutely one of my goals is to make sure that it was simple for Julia to use and simple for any other developer that comes onto the Muse team that doesn’t have background in Muse and in our code base. For them to be able to jump in quickly and easily and understand what’s going on, was a really important piece of how this framework was built. 00:56:57 - Speaker 1: Yeah, I think this is a really important accomplishment, and Wulf is maybe even underselling himself a little bit, so I want to comment on a few things. One is, while there’s just this simple annotation of I think it’s at merged is that it Wulf. Yeah, that’s right. Sometimes when you see that, that annotation instructs the framework to do something additionally on the side, on top of the existing standard relational database, you know, like basically do your best, try to synchronize this data out of band with some third party service or whatever. But this in fact totally changes how the data is persisted and managed in the system, so it’s sort of like a whole new persistent stack for the application. And I think that’s important because we constantly see that the only way you get good results on sync system, especially when you’re talking about offline versus online and partially online, it has to be the one system that you use all the time. You can’t have some second path, that’s like the offline cache or offline mode that never works. It needs to be the one, you know, true data synchronization and persistence layer. So I think that’s as important though. There’s another subtle piece here, which is the constraints that you have with the industrial setup. So a lot of the research on CRDTs and synchronization basically assumes that you have one or a small number of documents in memory, and that if you’re going to be querying these documents or managing synchronization of these documents that you have access to the full data set in memory. But it’s not practical for our use case, both because of the total size of memory and the number of documents we’d be talking about. So a lot of critical operations can take place directly against the database or the data layer can smartly manage bringing stuff in out of memory. It’s not like we have the whole new corpus up in memory at any one time, the system has to smartly manage what gets pulled up from disk in the memory and what gets flushed back, and then that. Introduce a w