Podcasts about os x

Share on
Share on Facebook
Share on Twitter
Share on Reddit
Copy link to clipboard

Operating system for Apple computers

  • 636PODCASTS
  • 3,558EPISODES
  • 51mAVG DURATION
  • 5WEEKLY NEW EPISODES
  • Jan 3, 2022LATEST

POPULARITY

20122013201420152016201720182019202020212022


Best podcasts about os x

Show all podcasts related to os x

Latest podcast episodes about os x

SGGQA Podcast – SomeGadgetGuy
#SGGQA 235: Happy New Year! Pre-CES News, Twitter Political Bans, Samsung TV NFTs, Snapdragon 8 Gen 1 Over Heating

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Jan 3, 2022


Happy New Year! Getting up to speed in 2022, we have a LOT of tech to talk about! The Pre-CES show! Let’s chat out the potential trends we’ll see from Las Vegas. Also, Blackberry is pulling the plug on server support for older phones. Qualcomm’s newest SOC is running hot in early benchmarks. Twitter takes … Continue reading "#SGGQA 235: Happy New Year! Pre-CES News, Twitter Political Bans, Samsung TV NFTs, Snapdragon 8 Gen 1 Over Heating"

SGGQA Podcast – SomeGadgetGuy
#SGGQA 234: The HAPPY HOLIDAYS Pajama Podcast!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Dec 27, 2021


Happy Holidays! I don’t have a fancy show planned, so we’re just going to hang out and chat about the year. Oh. And maybe there’s a giveaway happening this week… Let’s get our tech week started right! Download this week’s podcast – SGGQA 234 (RSS subscription links below) Get the ad-free version of this episode! … Continue reading "#SGGQA 234: The HAPPY HOLIDAYS Pajama Podcast!"

The Call from ausbiz
"I could definitely see [ALC] getting in the ASX 200" - Claude Walker

The Call from ausbiz

Play Episode Listen Later Dec 23, 2021 60:00


Carl Capolingua from ThinkMarkets and Claude Walker from A Rich Life go in-depth and stock specific. Stocks covered: SUL, OSX, MMM, IFT, PTG, WEB, AMO, ALC, POS, AHX. Stock of the day is AVA Risk Group (AVA). See acast.com/privacy for privacy and opt-out information.

Empower Apps
2021 - Year in Review with Peter Witham

Empower Apps

Play Episode Listen Later Dec 21, 2021 87:46


Guest Peter Witham - Compileswift.com - TwitterPeter's New Livestream - compileswift.live Youtube Video - https://youtu.be/3MOK_smitUURelated Episodes Episode 110 - Connecting Wirelessly with Gui Rambo Episode 106 - Mac Dev in 2021 with Daniel Jalkut Episode 98 - Async, Await, and Combine with Marin Todorov Episode 95 - Swift Playgrounds with Steve Lipton Episode 94 - iPad Development with Adam Shaw Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham Episode 91 - Fastlane with Josh Holtz Episode 89 - Cryptography with Marcin Krzyżanowski Episode 84 - Automation Fun with Jared Sorge Episode 81 - Awaiting for Async with Vincent Pradeilles Episode 68 - App Store Review Guidelines with Paweł Madej Episode 24 - Continuous Integration with Kyle Newsome Related Links Xcode Cloud Beta Signup CoreInt Episode 487 - I Spent A Week On It Apple Developer Tech Talks Steve Lipton - Swift Playgrounds Course Apple SwiftUI Sample App Tutorials NSSpain 15 - Xcode Cloud: What is it? How to use it? Is it for me? - Josh Holtz HWS - How to build your first SwiftUI app with Swift Playgrounds CompileSwift Live Stream Highlight - macOS UI Design with Sketch Apple Design Resources Swift Studio by Marcin Krzyzanowski "Swift Light" by Marin Todorov Nova by Panic SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves: For edge cases you don't even know you have Protects from outages your team hasn't seen yet Saves you time on future maintenance  As well as new features released by the app stores Empowers your marketing teams with clean, reliable IAP data All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also: Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsIndie Developer Spotlight - KalWoche by Matthias DeuschlGive a try to the first of many Indie Developer Spotlights with KalWoche by Matthias DeuschlWith this Independent Watch app, scroll through the calendar with the Digital Crown. Count days / weeks with the date calculator. Multiple complications including weekday, week of year, date. Practical calendar for quick flipping: scroll through time month by month with the Digital Crown. What weekday is April 1st? When is week 18? Which week of the year is beginning of November? → Just scroll until you see. How long until date x? → Simply scroll, tap, see. date calculator: add days, weeks, months or years from today or the selected date and the result is displayed as a date with weekday and calendar week. In addition, the duration from today or the selected date until then is displayed. Clean watchface complications help to always keep the current weekday, date and week of year in view. Find your perfect fit with numerous options. Give this app a try today at:https://apps.apple.com/app/apple-store/id1554477157Show Notes Future of WWDC and Tech Talks What will be the next big thing next year? How can iPadOS improve? How should code start using Async/await? Problems with macOS Monterey Where are the pain points for SwiftUI? Who should start using Xcode Cloud? What's next for the App Store, Developers, and the courts? ...and the big announcement!Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)★ Support this podcast on Patreon ★

DAWbench Radio Show
Episode 14 : DAW Evolution V : Ardour - Past , Present , Future !

DAWbench Radio Show

Play Episode Listen Later Dec 16, 2021 157:43


DAW Evolution V : Ardour - Past , Present , Future ! Hosted by Vin Curigliano of AAVIM Technology, I am joined by guest co-host Pete Brown of Microsoft and special guest Paul Davis, who is the Founder and Lead Developer of Ardour. We discuss Paul's early history with computers, technology and coding , and how that lead a path to his involvement and focus in open source, and the eventual development of Ardour. We cover the history and the ongoing challenges of maintaining the unique position of allowing access to the complete source code , and the challenges of managing the development with the wider scope of potential contributors to the code. We cover Ardours original development on Linux and its porting to both OSX and Windows, we discuss the challenges of running a Professional DAW application under Linux over Mac or Windows, navigating plugin and low latency driver formats, and the ongoing challenge of motivating 3rd party plugin developers to port natively to Linux. We take a deep dive into the various milestone versions of Ardour, navigate the complexities of musical time vs audio time, discuss multiprocessing and multithreading routines and performance, hybrid playback engines, etc. We cover Pauls work with 3rd party corporate interests where Ardour is the driving engine behind products like Waves Tracks Live and Harrison Mix Bus. We also discuss Ardours future development, cover some exciting new features incoming, and much, much more. Host & Guest Links : AAVIM Technology : www.aavimt.com.au DAWbench : www.dawbench.com Microsoft : www.microsoft.com Pete Brown : https://twitter.com/Pete_Brown Ardour : https://ardour.org/ VO : Andrew Peters : www.andrewpetersvo.com Music Themes : Original DAWbench VI Theme Music composed by Rob John : Independent Music Productions : http://www.indmusicprods.com DAWbench Radio Show ReMix by Erin McKimm : www.erinmckimm.com All Rights Reserved : © AAVIMT 2021

SGGQA Podcast – SomeGadgetGuy
#SGGQA 233: UPDATES GALORE! Duo 2, OnePlus 9, Pixel 6! And there was NO Phone of the Year AGAIN!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Dec 14, 2021


2021 might be winding down, but the news just keeps on coming! Apple’s Do Not Track feature doesn’t really stop companies from tracking you. YouTube publishes data on the MILLIONS of bogus copyright claims that go through. DARPA created a REAL warp bubble! And we’ve got a TON of leg work to follow up on … Continue reading "#SGGQA 233: UPDATES GALORE! Duo 2, OnePlus 9, Pixel 6! And there was NO Phone of the Year AGAIN!"

SGGQA Podcast – SomeGadgetGuy
#SGGQA 232: AirTags for Car Thieves, NVIDIA vs FTC, Pixel 6a Rumors!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Dec 7, 2021


2021 might be winding down, but the news just keeps on coming! Apple is having a rough week. Employees are pushing back against NDAs, AirTags are being used to steal cars, iPhone orders are being reduced, and iMessage is one of the more “open” messengers for giving your data to the feds. Also, the FTC … Continue reading "#SGGQA 232: AirTags for Car Thieves, NVIDIA vs FTC, Pixel 6a Rumors!"

Empower Apps
Connecting Wirelessly with Gui Rambo

Empower Apps

Play Episode Listen Later Dec 7, 2021 73:43


Guest Gui Rambo - Twitter @_inside Blog Github Stacktrace Podcast 9to5Mac Youtube Video - https://youtu.be/U97HwkmKpg8Related Episodes Episode 58 - Big Bad Bluetooth with Leah Vogel Episode 78 - Apple Silicon Review with Gui Rambo Episode 31 - Future Proofing Your Apps with Gui Rambo Related Links AirBuddy MultipeerKit - high-level abstraction built on top of the MultipeerConnectivity framework SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves: For edge cases you don't even know you have Protects from outages your team hasn't seen yet Saves you time on future maintenance  As well as new features released by the app stores Empowers your marketing teams with clean, reliable IAP data All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.LinodeA cloud experience developers love Great for Setting Up a Backend for Your App Variety of VM Configurations and Settings Reasonable Pricing Starting at $5 per month Global Data Centers The Developer Cloud Simplified Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comShow Notes Dealing with the Menu Bar AirPods Thoughts Lessons learned working on AirBuddy Bluetooth Terminology Lesson Dealing with AirPod Issues as a user How Bluetooth works and differs from Networking How the Nearby Interaction framework works How the Multi-peer Connectivity framework works Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)★ Support this podcast on Patreon ★

SGGQA Podcast – SomeGadgetGuy
#SGGQA 231: The Smartphone Road Trip Report Card -and- Let's Chat Tech Gifts!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Nov 30, 2021


Back from a road trip and ready to podcast! We’ll break down the smartphone road-trip report card for the FIVE phones I took with me! We should also chat holiday tech gifts, and maybe we can finally sort out some ideas for a best of the year video! Let’s get our tech week started right! … Continue reading "#SGGQA 231: The Smartphone Road Trip Report Card -and- Let’s Chat Tech Gifts!"

Empower Apps
Objective-C Today with Graham Lee

Empower Apps

Play Episode Listen Later Nov 23, 2021 50:43


Guest Graham Lee - Twitter @iwasleeg Graham's Blog - Structure and Interpretation of Computer Programmers Graham's Book - APPropriate Behaviour Youtube Video - https://youtu.be/H8O0rj1It1wRelated Episodes Episode 107 - Expert Swift with Shai Mishali Episode 105 - Navigating DocC with Ellen Shapiro Episode 70 - Maintaining & Migrating with Antoine van der Lee - Part 2 Episode 69 - Maintaining & Migrating with Antoine van der Lee - Part 1 Episode 48 - Alternative Backends with Kristaps Grinbergs Related Links DosAmigans Twitch Stream - Programming on the Amiga  [objc retain] GNUstep Cocotron ObjFW mulle-objc WWDC 2020 - Refine Objective-C frameworks for Swift sicpers.info - …and in the end there will be the command line sicpers.info - In which I misunderstood Objective-C Integrating ​​​C++ Libraries with Swift - BrightDigit CairoSVG Objective-C++ Swift Package Example SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves: For edge cases you don't even know you have Protects from outages your team hasn't seen yet Saves you time on future maintenance  As well as new features released by the app stores Empowers your marketing teams with clean, reliable IAP data All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also: Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsShow Notes Why you should know something about Objective-C Why is Objective-C so different from Swift? Is there a purpose for Objective-C outside of Swift? Should you still write Objective-C? What steps to migrate Objective-C over to Swift? How to make sure your Swift is consumable by Objective-C? How to work with C++ through Objective-C? What are the differences between Dynamic and Static Typed languages? What are the benefits of Dynamic vs Static Typed languages? What does a PhD in Software Engineering do at Oxford? Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)★ Support this podcast on Patreon ★

CoCoTALK!
Video episode 238 - Meet Fred

CoCoTALK!

Play Episode Listen Later Nov 21, 2021 156:50


CoCoTALK! Episode 238 - Meet Fred 00:00:00 -Start/Intro 00:01:42 -Start of the show! 00:01:55 -Panel Introductions 00:03:10 -Special Guest Fred Provoncha! (See? I pronounced it correctly!) 00:44:18 -Who's new to Discord 00:47:17 -Thank you to our Patrons! 00:48:12 -Commercial Break 00:51:21 -More! Special Guest Fred Provoncha! 00:59:17 -CoCo Thoughts by Samuel Gimes 01:00:05 -Game On! Results, With Nick Marotta! Featuring Ken of Canadian Retro Things 01:02:00 -Game On! discussion 01:11:00 -Game On! Game for next week, With(out) Nick Marotta! But... Featuring Ken of Canadian Retro Things 01:16:56 -Game On! Challenge LIVE report 01:23:13 -Game On! News, with L. Curtis Boyle 01:23:33 -Game On! News} inufuto- Impetus, Xevious clone for Coco/MC-10 01:27:33 -Game On! News} Pere Serrat- 6 pack of games for the Supersprite FM+ board 01:29:05 -Game On! News} MrDave6309- Kickstarter has reached the minimum funding goal! 01:29:49 -Game On! News} Jim Gerrie- Peepers, for the... 01:32:02 -End of Line for... Game On! News, with L. Curtis Boyle 01:32:50 -Commercial Break 01:36:06 -News, with L. Curtis Boyle **CoCo/General News** 01:36:26 -CoCo News} Pere Serrat- software for the SuperSpriteFM+ 01:38:28 -CoCo News} Jeff Birt- walkthrough video for Tandy Assembly 01:42:50 -CoCo News} Ciaran Anscomb- released XRoar version 1.0.1, which now includes both MC-10 and Coco 3 support and runs on OSX, Windows, and Linux... This is quality stuff! 01:44:44 -CoCo News} The Coco Crew- had over 250,000 accumulated downloads over it's 6&1/2 year run 01:46:16 -CoCo News} Mike Rojas- "Coco 3 Switchboard" which is a replacement board for the membrane board in the original Coco 3 keyboards 01:52:48 -CoCo News} Mike gave props to Nik Brisevac posting pictures of his switch keyboard 01:54:08 -CoCo News} Jason Oakley- export script written in LUA to be used with the Aseprite sprite editor 01:55:30 -CoCo News} Color Computer Programing/YT- BASIC programming demo/tutorials 01:56:56 -CoCo News} Pierre Serrazin- CMOC version 0.1.172 released **MC-10 News** 01:59:04 -MC-10 News} 8bitsinthebasement/YT- Alice 4K computer video **Dragon News** 02:53:03 -Dragon News} Dragon Meetup- NEXT WEEK!!! 02:06:08 -Dragon News} Chris's Retro Corner/YT- video unboxing a Dragon 32 02:11:00 -End of Line for... News, with L. Curtis Boyle 02:11:30 -CoCoTalk Panel} Talk on CoCoTalk! 02:21:10 -Project Updates and Acquisitions 02:21:21 -PUA} Stevie the OG! 02:22:12 -Ego Boost} L. Curtis Boyle Caught on camera at CoCoFest in 1989! 02:24:40 -PUA} Micheal Pittsley 02:25:55 -NEW! Outtro 02:28:50 -Final Thoughts 02:36:40 -Good Bye Everybody! Nope, there is no more... if you want more CoCoTalk goodness, come to the CoCo Discord... Or, watch one of our past episodes!  Email any suggestions you have for the show to cocotalk@cocotalk.live Visit us on the web at http://cocotalk.live Join us for daily conversations on Discord: http://discord.cocotalk.live Custom artwork designed by Instagram artist Joel M. Adams: https://www.instagram.com/artistjoelmadams/ Custom CoCoTALK! and retro merchandise is available at: http://8bit256.com Consider becoming a patron of the show: https://patreon.com/ogsteviestrow

CoCoTALK!
Episode 238 - Meet Fred

CoCoTALK!

Play Episode Listen Later Nov 21, 2021 156:50


CoCoTALK! Episode 238 00:00:00 -Start/Intro 00:01:42 -Start of the show! 00:01:55 -Panel Introductions 00:03:10 -Special Guest Fred Provoncha! (See? I prounounced it correctly!) 00:44:18 -Who's new to Discord 00:47:17 -Thank you to our Patrons! 00:48:12 -Commercial Break 00:51:21 -More! Special Guest Fred Provoncha! 00:59:17 -CoCo Thoughts by Samuel Gimes 01:00:05 -Game On! Results, With Nick Marotta! Featuring Ken of Canadian Retro Things 01:02:00 -Game On! discussion 01:11:00 -Game On! Game for next week, With(out) Nick Marotta! But... Featuring Ken of Canadian Retro Things 01:16:56 -Game On! Challenge LIVE report 01:23:13 -Game On! News, with L. Curtis Boyle 01:23:33 -Game On! News} inufuto- Impetus, Xevious clone for Coco/MC-10 01:27:33 -Game On! News} Pere Serrat- 6 pack of games for the Supersprite FM+ board 01:29:05 -Game On! News} MrDave6309- Kickstarter has reached the minimum funding goal! 01:29:49 -Game On! News} Jim Gerrie- Peepers, for the... 01:32:02 -End of Line for... Game On! News, with L. Curtis Boyle 01:32:50 -Commercial Break 01:36:06 -News, with L. Curtis Boyle **CoCo/General News** 01:36:26 -CoCo News} Pere Serrat- software for the SuperSpriteFM+ 01:38:28 -CoCo News} Jeff Birt- walkthrough video for Tandy Assembly 01:42:50 -CoCo News} Ciaran Anscomb- released XRoar version 1.0.1, which now includes both MC-10 and Coco 3 support and runs on OSX, Windows, and Linux... This is quality stuff! 01:44:44 -CoCo News} The Coco Crew- had over 250,000 accumulated downloads over it's 6&1/2 year run 01:46:16 -CoCo News} Mike Rojas- "Coco 3 Switchboard" which is a replacement board for the membrane board in the original Coco 3 keyboards 01:52:48 -CoCo News} Mike gave props to Nik Brisevac posting pictures of his switch keyboard 01:54:08 -CoCo News} Jason Oakley- export script written in LUA to be used with the Aseprite sprite editor 01:55:30 -CoCo News} Color Computer Programing/YT- BASIC programming demo/tutorials 01:56:56 -CoCo News} Pierre Serrazin- CMOC version 0.1.172 released **MC-10 News** 01:59:04 -MC-10 News} 8bitsinthebasement/YT- Alice 4K computer video **Dragon News** 02:53:03 -Dragon News} Dragon Meetup- NEXT WEEK!!! 02:06:08 -Dragon News} Chris's Retro Corner/YT- video unboxing a Dragon 32 02:11:00 -End of Line for... News, with L. Curtis Boyle 02:11:30 -CoCoTalk Panel} Talk on CoCoTalk! 02:21:10 -Project Updates and Acquisitions 02:21:21 -PUA} Stevie the OG! 02:22:12 -Ego Boost} L. Curtis Boyle Caught on camera at CoCoFest in 1989! 02:24:40 -PUA} Micheal Pittsley 02:25:55 -NEW! Outtro 02:28:50 -Final Thoughts 02:36:40 -Good Bye Everybody! Nope, there is no more... if you want more CoCoTalk goodness, come to the CoCo Discord... Or, watch one of our past episodes!  Email any suggestions you have for the show to cocotalk@cocotalk.live Visit us on the web at http://cocotalk.live Join us for daily conversations on Discord: http://discord.cocotalk.live Custom artwork designed by Instagram artist Joel M. Adams: https://www.instagram.com/artistjoelmadams/ Custom CoCoTALK! and retro merchandise is available at: http://8bit256.com Consider becoming a patron of the show: https://patreon.com/ogsteviestrow

Modernize or Die ® Podcast - CFML News Edition
Modernize or Die® - CFML News for November 16th, 2021 - Episode 126

Modernize or Die ® Podcast - CFML News Edition

Play Episode Listen Later Nov 16, 2021 25:26


2021-11-16 Weekly News - Episode 126Watch the video version on YouTube at https://youtu.be/83taKaR58xs Hosts: Eric Peterson - Senior Developer for Ortus SolutionsThanks to our Sponsor - Ortus SolutionsThe makers of ColdBox, CommandBox, ForgeBox, TestBox and almost every other Box out there. A few ways  to say thanks back to Ortus Solutions: Like and subscribe to our videos on YouTube.  Subscribe to our Podcast on your Podcast Apps and leave us a review Sign up for a free or paid account on CFCasts, which is releasing new content every week Buy Ortus's new Book - 102 ColdBox HMVC Quick Tips and Tricks on GumRoad (http://gum.co/coldbox-tips) Patreon SupportWe have 38 patreons providing 98% of the funding for our Modernize or Die Podcasts via our Patreon site: https://www.patreon.com/ortussolutions. News and EventsOrtus Webinar for November - Javier Quintero - FORGEBOX Business Plan: Introducing Organizations and TeamsNovember 19th at 11:00 AM Central Time (US and Canada)In this webinar, Javier Quintero, lead developer of FORGEBOX, will present the new features and the improved UI that is now available on FORGEBOX 6. Moreover, he'll explore in depth the Business Plan that is directed towards organizations and teams so they can collaborate and support their software building needs. He will show us how to create a new organization, how you can add members to it with specific roles, and how you can control teams, members, packages and publish access.with Javier Quinterohttps://us02web.zoom.us/meeting/register/tZclfuGopjkiG9TIMoC93YbKIcLM1ok_KKlw ICYMI - Mid Michigan CFUG Meeting - Using AI and machine learning along with ColdFusion to build a smarter call center with Nick KwiatkowskiTuesday 11/9/21 at 7 pm easternUsing AI and machine learning along with ColdFusion to build a smarter call center at the next Mid-Michigan CFUG meeting Tuesday 11/9/21 at 7 pm eastern.  Michigan State University's, Nick Kwiatkowski, will be showing how to create voice and text-based chat bots that you can deploy to your contact centers (and help desks!) to help automate frequently asked questions.Recording - check Facebook groupICYMI - Online CF Meetup - "Avoiding Server-Side Request Forgery (SSRF) Vulns in CFML", with Brian ReillyThursday, November 11, 2021 - 9:00 AM to 10:00 AM PSTServer-Side Request Forgery (SSRF) vulnerabilities allow an attacker to make arbitrary web requests (and in some cases, other protocols too) from the application environment. Exploiting these flaws can lead to leaking sensitive data, accessing internal resources, and under certain circumstances, remote command execution.Several ColdFusion/CFML tags and functions can process URLs as file path arguments -- including some tags and and functions that you might not expect. If these tags and functions process unvalidated user-controlled input, this can lead to SSRF vulnerabilities in your applications. In addition to providing a list of affected tags and functions, I'll cover some approaches for identifying and remediating vulnerable code. My goal for this talk is to raise awareness about what may be a security blindspot for some ColdFusion/CFML developers.https://www.meetup.com/coldfusionmeetup/events/281850930/ Recording: https://www.youtube.com/watch?v=-wu6cRZcRx0 CFCasts Content Updateshttps://www.cfcasts.com Just ReleasedSoapBox - ColdBox Anniversary Edition with Brad WoodComing this weekYouth Trainings - Universidad Don BoscoA new series of ForgeBox coming very soonSend your suggestions at https://cfcasts.com/supportConferences and TrainingDeploy by Digital Ocean - THIS WEEKTHE VIRTUAL CONFERENCE FOR GLOBAL DEVELOPMENT TEAMSNovember 16-17, 2021 https://deploy.digitalocean.com/homeAWS re:InventNOV. 29 – DEC. 3, 2021 | LAS VEGAS, NVCELEBRATING 10 YEARS OF RE:INVENTVirtual: FreeIn Person: $1799https://reinvent.awsevents.com/ Postgres BuildOnline - FreeNov 30-Dec 1 2021https://www.postgresbuild.com/ ITB Latam 2021December 2-3, 2021Into the Box LATAM is back and better than ever! Our virtual conference will include speakers from El Salvador and all over the world, who'll present on the latest web and mobile technologies in Latin America.Registration is completely free so don't miss out!ITB Latam Schedule Postedhttps://latam.intothebox.org/ Adobe ColdFusion Summit 2021December 7th and 8th - VirtualAgenda is out!!!@Adobe @coldfusion #CFSummit2021 keynote we will be featuring @ashleymcnamara! Her talk will focus on the history & future of DevRel how we got here & where we're going.2 tracks - 1 all CFML - the other a mix of CFML and semi-related topicsRegister for Free - https://cfsummit.vconfex.com/site/adobe-cold-fusion-summit-2021/1290Blog - https://coldfusion.adobe.com/2021/09/adobe-coldfusion-summit-2021-registrations-open/ jConf.devNow a free virtual eventDecember 9th starting at 8:30 am CDT/2:30 pm UTC.https://2021.jconf.dev/?mc_cid=b62adc151d&mc_eid=8293d6fdb0 VueJS Nation ConferenceOnline Live EventJanuary 26th & 27th 2022Register for FreeCall for Speakers is open until Dec 31 2021https://vuejsnation.com/ More conferencesNeed more conferences, this site has a huge list of conferences for almost any language/community.https://confs.tech/Blogs, Tweets and Videos of the WeekBlog - Charlie Arehart - Should you “bother” to file bug reports at tracker.adobe.com? Yes you shouldI just wanted to offer a quick plug to get folks to please consider filing bugs (and feature requests) at the Adobe site for tracking them, https://tracker.adobe.com. I've blogged before about how it can be used for more than most may realize. What I want to share here is that it's not a “waste of time to bother”.Some may wonder first, “why is is worth pointing out Tracker? Doesn't everyone know about it?” The answer to the second question is “no”: many do NOT know about it. But the more important question may be the first, and it's the real reason I'm writing this post.https://coldfusion.adobe.com/2021/11/should-you-bother-to-file-bug-reports/ Blog - Ben Nadel - Phill Nacelli's SQL Tip Is Making My CFQuery Upgrades In Adobe ColdFusion 2021 EasyAs I've started to modernize my blogging platform for Adobe ColdFusion 2021, one of the things that I was dreading was the lack of Lucee CFML's Tag Islands. Tag Islands have really been a game changer for me, allowing me to seamlessly execute the CFQuery tag inside CFScript. I was afraid that I was going to have to keep using Tag-based syntax for my Gateway / Data Access components. But then, I remembered a hot tip from Phill Nacelli on giving dynamic SQL statements a consistent structure. It turns out, Phill's technique is making it bearable for me to use the queryExecute() Function in lieu of the CFQuery inside a Tag Island.https://www.bennadel.com/blog/4153-phill-nacellis-sql-tip-is-making-my-cfquery-upgrades-in-adobe-coldfusion-2021-easy.htmBlog - Ben Nadel - A Query Object Maintains Its CurrentRow When Passed Out-Of-Context In Adobe ColdFusion 2021As I'm attempting to modernize my blogging platform for Adobe ColdFusion 2021, I'm moving a lot of my old-school, inline CFQuery tags into various "Service" and "Data Access" ColdFusion components where they can be reused across multiple templates. And, as much as I love the ColdFusion Query object, my "service boundaries" deals with Arrays and Structs, not queries. As such, I have code that deals with mapping queries onto other normalized data structures. While writing this code, I was tickled by the fact that the Query object maintains its .currentRow property even when passed out-of-context. This .currentRow can then be used a default argument value in Function signatures. This is a really old behavior of ColdFusion; but, I thought it would be fun to demonstrate since it may not be a feature people consider very often.https://www.bennadel.com/blog/4152-a-query-object-maintains-its-currentrow-when-passed-out-of-context-in-adobe-coldfusion-2021.htm CFML JobsSeveral positions available on https://www.getcfmljobs.com/Listing over 233 ColdFusion positions from 103 companies across 123 locations in 5 Countries.6 new jobs listedFull-Time - Senior Coldfusion Developer |LATAM| at Colon, PA - United States Posted Nov 15https://www.getcfmljobs.com/jobs/index.cfm/united-states/Senior-Coldfusion-Developer-LATAM-at-Colon-PA/11381Full-Time - ColdFusion Developer | 4 to 6 years | Pune at Pune, Maharash.. - India Posted Nov 12https://www.getcfmljobs.com/jobs/index.cfm/india/ColdFusion-Developer-4-to-6-years-Pune-at-Pune-Maharashtra/11380Full-Time - Senior Coldfusion Developer (RQ02208) at Toronto, ON - Canada Posted Nov 11https://www.getcfmljobs.com/jobs/index.cfm/canada/Senior-Coldfusion-Developer-RQ02208-at-Toronto-ON/11379Full-Time - Programmer (Coldfusion Java - Remote) at United States - United States Posted Nov 11https://www.getcfmljobs.com/jobs/index.cfm/united-states/Programmer-Coldfusion-Java-Remote-at-United-States/11378Full-Time - Front End / Coldfusion Developer - Salford Quays + WFH at Sa.. - United Kingdom Posted Nov 10https://www.getcfmljobs.com/jobs/index.cfm/united-kingdom/Front-End-Coldfusion-Developer-Salford-Quays-WFH-at-Salford/11377Full-Time - ColdFusion Jr. Web Developer at Pune, Maharashtra - India Posted Nov 09https://www.getcfmljobs.com/jobs/index.cfm/india/ColdFusion-Jr-Web-Developer-at-Pune-Maharashtra/11376ForgeBox Module of the WeekGlobberBy Brad Wood and Ortus SolutionsA utility module to match file system path patterns (globbing) in a similar manner as Unix file systems or .gitignore syntax.box install globberLast Update: August 10, 2021 - 3.0.7https://forgebox.io/view/globberVS Code Hint Tips and Tricks of the WeekEncode DecodeThe Encode/Decode (ecdc) extension allows you to quickly convert one or more selections of text to and from various formatsThe extension provides a single command to the command palette. To active the command simply launch the command palette (Shift-CMD-P on OSX or Shift-Ctrl-P on Windows and Linux), then just type Encode/Decode: Convert Selection, then a menu of possible conversions will be displayed. Alternatively you can use the keyboard bindings CMD-ALT-C and CTRL-ALT-C for Mac & PC respectively.https://marketplace.visualstudio.com/items?itemName=mitchdenny.ecdc Thank you to all of our Patreon SupportersThese individuals are personally supporting our open source initiatives to ensure the great toolings like CommandBox, ForgeBox, ColdBox,  ContentBox, TestBox and all the other boxes keep getting the continuous development they need, and funds the cloud infrastructure at our community relies on like ForgeBox for our Package Management with CommandBox. You can support us on Patreon here https://www.patreon.com/ortussolutionsNow offering Annual Memberships, pay for the year and save 10% - great for businesses. Bronze Packages and up, now get a ForgeBox Pro and CFCasts subscriptions as a perk for their Patreon Subscription. All Patreon supporters have a Profile badge on the Community Website All Patreon supporters have their own Private Forum access on the Community Website Patreons John Wilson - Synaptrix  Eric Hoffman Gary Knight Mario Rodrigues Giancarlo Gomez David Belanger Jonathan Perret Jeffry McGee - Sunstar Media Dean Maunder Joseph Lamoree Don Bellamy Jan Jannek Laksma Tirtohadi Carl Von Stetten Dan Card Jeremy Adams Jordan Clark Matthew Clemente Daniel Garcia Scott Steinbeck - Agri Tracking Systems Ben Nadel Mingo Hagen Brett DeLine Kai Koenig Charlie Arehart Jonas Eriksson Jason Daiger Jeff McClain Shawn Oden Matthew Darby Ross Phillips Edgardo Cabezas Patrick Flynn Stephany Monge Kevin Wright Steven Klotz You can see an up to date list of all sponsors on Ortus Solutions' Websitehttps://ortussolutions.com/about-us/sponsors ★ Support this podcast on Patreon ★

笔记侠 | 笔记江湖
如何凝聚人心、激发团队斗志

笔记侠 | 笔记江湖

Play Episode Listen Later Nov 16, 2021 17:06


世上无难事,只怕人心齐。想要凝聚人心,激发团队斗志,你就一定需要科学有效的沟通工具。世界级沟通大师杜瓦特在其32年顾问沟通生涯中,为苹果、谷歌、微软、IBM、星巴克等世界顶级企业服务,深度钻研了组织对内沟通的实战案例。杜瓦特将团队沟通分为梦想、飞跃、拼搏、攀登、到达5个阶段,提出演讲、故事、仪式和符号4个沟通工具(演讲让同伴充满渴望,故事让未来振奋人心,仪式让大家信守承诺,符号让团队积聚力量)。本文就带你一起掌握苹果、谷歌、微软、IBM、星巴克等公司激发员工斗志的团队沟通术!灵活运用这4个沟通工具,你就能激发员工潜力,凝聚团队力量,冲破一切困难,战胜所有挑战,成就伟大事业! 一、团队沟通的4个工具1.发表演讲发表演讲可以让你有机会诠释你的观点,直接劝说那些不愿意改变的人。将现状(是什么)与如果你的同伴支持你的梦想后,他们将享有的改进后状况(成为什么)相对比,你能够把未来展示得比现在更加吸引人。演讲能够激励众人前行的原因就在于“现在是什么样子”与“将来可能是什么样子”之间的差距创造了一种紧张感,而你的同伴想要消除这种差距。你的目标就是让他们不再关注现状,向他们灌输未来的愿景(最佳状态是什么)。这样你的同伴就会渴望看到梦想成真。用三段式的演讲结构,强化说服力:a.开始:是什么。描绘一幅现实世界的画面:如果你的同伴待在原地,无所作为,那么他们会面临什么风险?b.过程:成为什么。向现实世界介绍一个潜在的新未来。将“现在的样子”与“将怎么做”相对比,这样同伴就会认为有必要转变。c.终点:最佳状态。演讲结束时这种不平衡得以解决,每个人都明白了创造一个更好的未来,他们会得到回报。2.讲述故事演讲的结构一般是在现在与将来之间来回游走,然而,故事则主要是讲述一个主人公的转变历程。在观察主人公的尝试、失败到最终攻克难关的经历后,人们在内心深处产生了强烈的共鸣。我们之所以能记住故事,是因为他们用一个想法联结了我们的心灵和思想,故事中包含的想法也更容易被传播。你可以从多个视角叙说故事,包括“我”“我们”及“他们”,选取最有利的一种,每种视角会产生不同的情感效果。“我”的故事,如同火炬手一样,将你自己的亲身经历告诉观众,邀请他们进入你的内心世界,使他们与你的感受紧密相连。“我们”的故事会分享集体的共同经历,强调共同的经历及团结一致的原则,将大家连在一起。“他们”的故事通常分享的是其他人在另一个地方或另一段时间发生的事情,你可以讲述任何一段经历来让不同的经历再现在观众的面前,让他们理解。用三段式的故事结构,传递有效信息:a.序幕:可靠、讨人喜欢的英雄投身一场冒险中。b.中间:英雄遇到看似不可逾越的障碍,这些障碍足以考验其决心。c.结尾:英雄实现目标,他因这场征程发生变化。3.举办仪式仪式满足集体表达情感的需要,大家都需要借此宣泄感情。仪式有助于同伴想象新的行为方式或摒弃旧的思想,这样他们就不受阻碍地前进。停下脚步,与他人聚在一起集体表达情感能让同伴得到他们急需的片刻休息。仪式可以用来纪念重要的过渡时期,以此来让你的团队更加团结,全身心地投入到这场征程中。仪式几乎深深扎根于所有已知的文化中。通过仪式把人聚集起来,让大家接纳转型,增强集体组织的最核心价值观。墨尔本皇家理工大学的一项研究发现:仪式也可以通过“引起人们的兴趣,引导其注意力,加强其记忆力,改善人际关系”来加强人与人之间的沟通。从根本上来说,仪式有助于人们了解和消化新信息及新思维方式,让这一刻更容易被记住。4.使用符号符号是具有某种意义的常见物品,因为这些符号都是演讲、故事或仪式中的一部分。这些符号以集中的形式表达思想与情感。由于能使人们产生共鸣,所以符号逐步成为社会团体的视觉化语言。符号有时以简略的表达方式,有时以充满强烈感情的方式来表达人们的思想、感情及价值观。可以通过各种方式,如视觉的、听觉的、空间的及物理的方式来让物件充满感情色彩,这些物件会让你的同伴回想起这场冒险之旅中的重要时刻。① 听觉的:你听到了什么通过文字、声音或集体抒发情感,我们听到了符号。演讲结束时,大家可能会齐声做个宣言,可能会响起铃声或播放鼓舞人心的音乐。同伴可能一起朗读新的使命宣言,就像是在做礼拜或集体虔诚地吟唱。② 视觉的:你看到了什么我们透过图片或物体看到的符号具有切实的意义。你可以把冒险过程中的某张图片印制在横幅上,你的故事可以引用藏在观众席下的某个标志物,你还可以在你演讲过程中的适当时机燃放华美烟花。③ 空间的:你身处何方当人们聚集在一起时,象征性空间,无论是神圣的还是具有历史意义的,创造出另外一层意义。可以选择在一个真实发生过事件的场地叙述故事,或选择在具有历史性意义的场地发表演讲,这样可以呈现出一种神圣感。你可以通过创造一种宁静或壮观的背景来传达意义。④ 物理的:你在做什么我们的肢体语言和着装打扮可以传达出我们的感受以及我们与何人同盟。演讲结束时,感伤的同伴可能相互拥抱,乐观的同伴可能在过道上翩翩起舞。同伴可能戴同一款徽章,显示大家都是一家人。 二、团队沟通的5个阶段第一阶段:梦想火炬手领袖梦想着如何从现在走向未来。在商业冒险的初始阶段,你已经有了对未来的设想。在这个阶段,你一方面要明确前进的方向,另一方面又需要展示一个让其他人向往的愿景。首先你要让他们看到,对于现状能够带给他们的好处与坏处,你都感同身受。然后,通过视觉化的方式,将未来那些激动人心的细节仔细地描述出来,让他们看到届时将拥有怎样的巨大收获。最后,要清楚地告诉他们,从现在到未来,你们未来的旅程将如何共同走过。第二阶段:飞跃当你觉得是时候采取行动的时候,你就进入了飞跃阶段。你已经向同伴传达了你的梦想,他们也开始说:“我明白。”你准备向前迈进,但此时你需要赢得他们的支持,并开始采取行动,即使前方的道路依旧不明朗。所以在这个关键阶段,你如何让这些犹豫不决的同伴改变立场?让他们直面恐惧。如实相告你们所面临的风险,然后告诉他们克服这些风险和困难的战略,以此帮助他们建立信心,让他们对你产生信任,消除疑虑。第三阶段:拼搏此时,很多同伴都已经投身于这场战斗,但过程不可能是一帆风顺的。当你的愿景开始受到追捧,满足于现状的人会受到刺激,站起来愤怒地与你的梦想对抗。你的敌人可能是内部的政治斗争,也可能是外部的邪恶力量。为了减少敌人造成的伤害,你需要帮助同伴看清敌人正在如何威胁他们的幸福。通过揭示敌人的罪行,你可以激发同伴的竞争意识,让他们为一个共同的目标团结在一起。第四阶段:攀登在这个阶段,革命尚未成功,你和同伴们还有很多事情需要做。同伴因投身最近的战斗身心疲惫,在攀登阶段,他们有时候会对曲折的征程感到非常乏味,有时候会感觉这是一段险恶的征程。在攀登阶段,疲惫感会渐渐侵袭而来。你可能会发现曾经在旅程中精力充沛的同伴精神日渐萎靡,这时,你应该鼓励他们,让他们保持极高的积极性。有些同伴会觉得终点遥不可及,自己的努力无济于事,因而可能准备彻底放弃。你要警示他们,坚持以前注定要失败的路线、停止追求最终目标会有怎样的风险。第五阶段:到达你和你的团队已遇见里程碑,或者越过了终点线。在最终的第五阶段,无论成功是大是小,是时候拉开最后的幕布了。认可同伴们的辛勤工作,并为他们创造机会,让他们品尝成功的喜悦。如果你的冒险成功了,那么恭喜,为你的同伴们安排一场庆功派对吧。反之,如果冒险失败了,你就要向你的同伴检讨自己的所作所为,只有这样,你的同伴才愿意陪你继续前行。 三、苹果公司的冒险历程概况当史蒂夫·乔布斯回到苹果公司时,他知道公司是否成功取决于开发人员能否将目光共移到新的操作系统OSX上。然而要迁移到新的操作系统,开发人员需要做出巨大的牺柱。在他商业冒险的过程中,乔布斯不知疲倦地和开发人员沟通,消除他们的疑虑,最终说服他们逐渐采用OSX。随着新的梦想出现,乔布斯结束了旧操作系统的时代,迎来了新的数码中心时代。1.梦想阶段① 经过10年的尝试,苹果承认公司无法创造一个现代化的操作系统。所以,公司期待从外部收购一个来替代。② 苹果公司收购NeXT公司的原因在于,现代化的操作系统有助于苹果公司的长期发展。乔布斯因为这次收购而作为一名顾问回到苹果。③ 在1997年的Macworld大会上,乔布斯宣布了苹果公司的梦想,即希望开发人员能为消费者提供明确的、令人信服的解决方案,而这种方案只有从苹果公司才能获取。他提醒开发人员PageMaker是苹果公司第一次获得成功的原因,以及软件会如何让公司再获成功。他也讲述了NeXT 操作系统拥有几年前他第一次在施乐帕罗奥多研究中心看到的强大功能,而这些功能并没有被融入经典Mac操作系统中。2.飞跃阶段① 苹果公司不得不淘汰开发者热爱的经典操作系统中的一些功能,这一行为激怒了他们。② 在1998年的全球开发者大会上,乔布斯举办了一场问答活动,并且告诉开发者,苹果公司将一些功能淘汰会使操作系统变得更健康。③ 为了展现有大型的开发者加入其中,乔布斯说服微软投资苹果公司。微软随后公开宣布其致力于在Mac的平台上进行研发。这场投资主要是象征性的,表明其他开发者不应该害怕加入其中。比尔·盖茨发言表示支持,说:“我们很高兴能够重新支持苹果公司。”3.拼搏阶段① 苹果公司推出了以“不同凡想”为口号的活动,提醒大众苹果公司“尊敬那些另辟蹊苍,推动世界前进的人们”。开发人员设计出的应用程序再次引起了消费者的兴趣。② 苹果公司新的操作系统要求开发人员从头开始重新开发软件,开发人员对此表示拒绝。③ 苹果公司修改了操作系统战略,开发了一种工具帮助大多数开发人员大幅减少工作量。在全球开发者大会上,开发者为苹果公司的雪中送炭而欢呼雀跃,掌声雷动。苹果公司让一些知名的开发者站上舞台,展示他们在短短两周内取得的成果,以此展示研发Mac OSX应用程序已不再困难。4.攀登阶段① I Adobe、Macromedia和其他知名的开发者开始使用Mac OSX。② 在Macworld的一次演讲中,乔布斯直面怀疑者和反对者,通过对话式座谈,表明苹果公司现在有多么健康,开发者选择的Mac OS X新系统有多么强大。③ 乔布斯向开发者保证,苹果公司一定会坚持一个操作系统的战略,不会改变致力于Mac OSX的决心。④ 乔布斯警示开发者,如果现在还不加入,可能会被淘汰,他宣读了苹果公司致力于研发Mac OS X的声明。5.到达阶段① 通过一场模拟葬礼,乔布斯赞美了Mac OS9,并表示苹果公司将不再劝说开发者更换操作系统,他们的命运掌握在自己手中。乔布斯希望大家将目光放在“数码中心”的新梦想上。② 苹果公司宣布了新的梦想——数字中心战略。在该战略中,OS X是用户数码生活的中心,通过互联网管理所有设备上的内容。在2001年1月举行的Macworld会议上,乔布斯宣布数码中心将在未来10年推动苹果公司开启一个崭新的创新时代。 总结当你选择(或被推选)成为领导,要看清前方的道路并为众人指明方向。火炬手的梦想家、先锋和侦察兵,积极为同伴照亮前进的道路。勇敢迈向未来是一回事,能带领其他人一起前进又是另一回事,差别就在于能不能运用好沟通的力量。通过有效、移情化的交流使你的同伴充满激情去完成整场冒险之旅,同时利用同伴难以忘记的时刻将众人团结在一起。

SGGQA Podcast – SomeGadgetGuy
#SGGQA 229: Apple Digital ID Costs Taxpayers, Pixel 6 Pro Teardown, Vizio Ad Sales, Steam Deck Delayed

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Nov 16, 2021


Apple is walking back their terrible decision to harm 3rd party iPhone repair, and we get an even better look at the Pixel 6 Pro in an iFixit teardown! Vizio announced recent profits, and ads ON their TV make them more money than selling TVs. Steam Deck has been delayed, and it’s breaking my heart. … Continue reading "#SGGQA 229: Apple Digital ID Costs Taxpayers, Pixel 6 Pro Teardown, Vizio Ad Sales, Steam Deck Delayed"

Broken Silicon
126. Intel Alder Lake Reviews, AMD CDNA 2 & Milan-X, Zen 5 Leaks, Intel ARC Pics

Broken Silicon

Play Episode Listen Later Nov 9, 2021 117:43


Intel Alder Lake is out! AMD Bergamo & Genoa are Revealed! Intel ARC Pics are leaked! Tom & Dan discuss the latest hardware gaming news - and man is there a lot already this November! SPON: Get 10% off Tasty Vite Ramen with Code “brokensilicon” at: https://bit.ly/3oyv4tR SPON: brokensilicon=-30% Win10, dieshrink=-3% games: https://www.cdkeyoffers.com/cko/Win10 0:00 GTC Disclaimer, Apple Colors, Kilo-core Processors (Intro Banter) 6:46 Apple A15 4nm, Pro Max 5nm (Corrections & Omissions) 8:45 Intel Alder Lake Discussion Start – Windows 10, Efficiency, DDR4 vs DDR5 Performance 25:40 Raptor Lake with DDR4, Alder Lake vs Zen 3 Pricing, Describing Core Counts 32:50 Who should wait for Zen 3D? Who should wait for Zen 4? 38:13 AMD Data Center Keynote Discussion Start: Bergamo, Zen 4c, Vcache 44:35 Milan-X crushes Sapphire Rapids, MI250X is big trouble for Nvidia 49:58 Is Zen 3D Threadripper Cancelled? Why did AMD Cancel Desktop Zen 3+? 54:41 Zen 5 & Zen 4c Details Leaked – Insane IPC, Insane Implications of “Dense” Architectures 1:05:10 Mining on OSX & Neural Engines, Apple Entering the Server Market 1:11:10 Zen 5 Turin EPYC Leaked - 600w Processors are coming... 1:20:41 Intel ARC Pictures Leaked, Performance + Release Date Update 1:29:17 Nvidia Ampere actually uses Next-Gen PCIe Gen 5 1:32:51 Apple M1 Max Reviews, Nvidia ARM Blocked, Intel buys VIA, GA103S, Lovelace Q3 (Wrap Up) 1:44:12 Nvidia using Intel Fabs as a backup, Horizon 5 Graphics on Last Gen (Final RM) https://www.tomshardware.com/news/intel-core-i9-12900k-vs-ryzen-9-5900x-5950x https://youtu.be/LzhwVLUVork https://youtu.be/XBFTSej-yIs https://www.guru3d.com/articles_pages/core_i5_12600k_processor_review,5.html https://youtu.be/BdRxXRRrJeU https://twitter.com/mooreslawisdead/status/1456677878469382153 https://www.tomshardware.com/news/core-i5-12400f-strong-gaming-engineering-sample?fbclid=IwAR20DQQF8ecnMDt3At6GLrMllaVGU-iBRwd-BzWWMaHgtmlwD0qVI_W6qFE https://twitter.com/HardwareUnboxed/status/1456868513574842371 https://twitter.com/mooreslawisdead/status/1457603739414671360 https://youtu.be/ECHhuvuiNzs https://youtu.be/TX6bREO3Nd4 https://twitter.com/Redfire75369/status/1457750350308331522 https://www.anandtech.com/show/17054/amd-announces-instinct-mi200-accelerator-family-cdna2-exacale-servers https://youtu.be/dE9N95uSqHA https://twitter.com/ExecuFix/status/1453707924338089990 https://twitter.com/greymon55/status/1453747256046219269 https://videocardz.com/newz/amd-epyc-turin-with-zen5-cores-rumored-to-feature-maximum-tdp-of-600w https://youtu.be/tD7s1ZFLoO4 https://videocardz.com/newz/pci-express-gen5-12-pin-power-cable-looks-just-like-nvidias https://www.pcmag.com/reviews/apple-macbook-pro-16-inch-2021-m1-max https://www.cnbc.com/2021/10/27/nvidias-takeover-of-arm-faces-in-depth-investigation-in-europe.html?fbclid=IwAR2oDyO-ugV27cz1VsEMl_pkLha7lJBaJSTVGZ-ap6XhK7Po7I99DNxY8z8 https://www.techpowerup.com/review/geforce-rtx-3080-vs-radeon-rx-6800-xt-megabench/ https://adoredtv.com/intel-rumored-to-hire-remaining-employees-from-centaur-maker-of-haswell-level-x86-cpus-with-avx-512-support-from-via-technologies-for-125-million-dollars/ https://pr.tsmc.com/english/news/2874 https://twitter.com/kopite7kimi/status/1457730626790907911 https://twitter.com/kopite7kimi/status/1457732761423257609?s=20

Empower Apps
What is Firebase with Peter Friese

Empower Apps

Play Episode Listen Later Nov 9, 2021 42:07


Guest Peter Friese - Blog Twitter - @peterfriese YouTube - @peterfriese GitHub - @peterfriese Youtube Video - https://youtu.be/8m8oppa-LosRelated Episodes Episode 87 - Core Data Fun with Tim Mitra Episode 85 - AWS Amplify with Kilo Loco Episode 75 - Year of the Server with Tim Condon - Part 2 Episode 35 - SwiftUI - The Good, the Bad, and the Benefits Episode 8 - Cloud and Backend Services For Apps with Erik Gillespie Related Links Firebase Summit - November 10th Firebase YouTube Channel Firebase Blog Firebase Medium channel Firebase vs GCP Videos Projects & storage Functions & Firestore the LansingCodes app that never was Authenticate with Firebase Anonymously on Apple Platforms Make It So - Replicating Apple's Reminders app with SwiftUI and Firebase Swift on Cloud Run by Grant Timmerman from GCP SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves: For edge cases you don't even know you have Protects from outages your team hasn't seen yet Saves you time on future maintenance  As well as new features released by the app stores Empowers your marketing teams with clean, reliable IAP data All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.LinodeA cloud experience developers love Great for Setting Up a Backend for Your App Variety of VM Configurations and Settings Reasonable Pricing Starting at $5 per month Global Data Centers The Developer Cloud Simplified Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comShow Notes What does Firebase consist of How to use it properly in your iOS app How Firestore's NoSQL DB works How to work with Firestore and SwiftUI What are Firebase's authentication features Setting up security properly How to authenticate with Firebase anonymously? Register for Firebase Summit Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)★ Support this podcast on Patreon ★

SGGQA Podcast – SomeGadgetGuy
#SGGQA 228: 5G Rollout Slows, Facebook Stops Tracking Faces, Pixel 6 Repairing, Pixel Fold Camera Rumor

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Nov 9, 2021


Recovering from Techtober, and getting back into the swing of reviewing some fun tech! AT&T and Verizon slow the spread of 5G due to concerns over aircraft safety. The FCC is approving Boeing’s plans for a satellite internet system. Indiegogo is going to start verifying projects before publishing. Facebook plans to delete face tracking data. … Continue reading "#SGGQA 228: 5G Rollout Slows, Facebook Stops Tracking Faces, Pixel 6 Repairing, Pixel Fold Camera Rumor"

SGGQA Podcast – SomeGadgetGuy
#SGGQA 227: Goodbye Techtober! Pixel 6 Pro, Duo 2, XPERIA Pro-I, X70 Pro Plus Pajama podcast chat!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Nov 1, 2021


I’m exhausted, but this is the most fun I’ve had in years! As we say goodbye to Techtober, and get ready for the holiday buying season, let’s hang out! Chatting the newest phones of the year, we can chill in our PJ’s, drink some coffee, and have a geeky-good time! Let’s get our tech week … Continue reading "#SGGQA 227: Goodbye Techtober! Pixel 6 Pro, Duo 2, XPERIA Pro-I, X70 Pro Plus Pajama podcast chat!"

Collateral Gaming Video Game Podcast
Collateral Gaming Halloween Special: Red Barrels‘ Outlast (SPOILERS)

Collateral Gaming Video Game Podcast

Play Episode Listen Later Nov 1, 2021 64:34


Title: Outlast [Wikipedia] [IMDb] Developer: Red Barrels Publisher: Red Barrels Designer: J. T. Petty (writer) Platforms: Microsoft Windows, PlayStation 4, Xbox One, Linux, OS X, Nintendo Switch Release date: September 4, 2013 (PC) PROMO: Trial by Error Variety Show (@tbevarietyshow) SHOWNOTES: Happy Halloween, Collateral Gamers! To celebrate the season, Zach and Ash discuss Outlast, the 2013 first-person survival horror title from Red Barrels. This disturbing and terrifying video game is perfect for the spooky holiday, with its marriage of stealth elements and psychological horror. How does the lack of any combat ability contribute to fear? In what ways is the story meaningfully presented through immersion? Find out on the 2021 Halloween Special of Collateral Gaming! Collateral Gaming is on Facebook, Instagram, and Twitter, and is on Podbean, Apple Podcasts, Spotify, Google Podcasts, YouTube, iHeartRadio, Chill Lover Radio, and wherever else you get your podcasts! (Collateral Gaming is a Collateral Media Podcast. Intro song is a license-free beat by Quality_Online_Media from Pixabay. All music and game clips are owned by their respective creators and are used for educational purposes only. Please don't sue us; we're poor!)

TechByter Worldwide (formerly Technology Corner) with Bill Blinn
TechByter Worldwide 2021-10-29: Text Editors Are Useful Even For Non-Programmers. Short Circuits. Spare Parts.

TechByter Worldwide (formerly Technology Corner) with Bill Blinn

Play Episode Listen Later Oct 29, 2021 17:57


Software developers need text editors. These applications are also helpful for anyone who needs to look inside binary files. Even if you never perform any of those tasks, a text editor might still be useful. In Short Circuits: Windows 11 has been generally available for about four weeks. If it's already on your computer, there are some settings you may want to check. • How many people have uttered the words "I'm leaving Facebook" in the past few weeks? Most of them are probably still Facebook users because the service is really hard to leave. In Spare Parts (only on the website): According to a New York Times article, Facebook is moving to restrict access to some of its internal discussion groups. • Most malware, and ransomware in particular, come from the former Soviet countries. That's probably not a surprise, but The Guardian has a worthwhile report. • Twenty years ago: Windows XP and Apple's OSX 10.1 were both released about the same time.

Empower Apps
Expert Swift with Shai Mishali

Empower Apps

Play Episode Listen Later Oct 26, 2021 52:31


Guest Shai Mishali - Twitter @freak4pcGitHub @freak4pc Youtube Video - https://youtu.be/wQNs2ii-zsIRelated Episodes Episode 39 - Managing Code Quality with Anne Cahalan Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham Episode 98 - Async, Await, and Combine with Marin Todorov Episode 106 - Mac Dev in 2021 with Daniel Jalkut Related Links Expert Swift by Marin Bencevic, Ray Fix, Shai Mishali and Ehab Yosry Amer Modern Concurrency in Swift - Async/Await, Task Groups & Actors by Marin Todorov Combine: Asynchronous Programming with Swift by Marin Todorov, Shai Mishali and Florent Pillet WWDC 2020 - Refine Objective-C frameworks for Swift Combine Community SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves: For edge cases you don't even know you have Protects from outages your team hasn't seen yet Saves you time on future maintenance  As well as new features released by the app stores Empowers your marketing teams with clean, reliable IAP data All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Show Notes What is Expert Swift? How to be pragmatic about expert features on your team? How can you improve your use of Codable in Swift? What are ways to improve Objective-C for Swift consumption? How can you hide certain Objective-C APIs from Swift? What makes for good API design? How to version your API? How Functional Reactive Programming fits? Future of Combine and Reactive in an Async and Await ... and another book Shai is helping with concurrentlySocial MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)★ Support this podcast on Patreon ★

SGGQA Podcast – SomeGadgetGuy
#SGGQA 226: Less than a week with the Pixel 6 Pro and Surface Duo 2! Which kept my SIM card the longest?

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Oct 26, 2021


EXCITING MORNING! We can FINALLY start sharing more in depth info on the Pixel 6 Pro! I’ve been rocking THREE screens for the last week! Surface Duo 2 has also been in the GadgetLab! There’s a LOT of tech to dig into, and I’m SURE we’ll have some audience questions to tackle. FUN DAY! Let’s … Continue reading "#SGGQA 226: Less than a week with the Pixel 6 Pro and Surface Duo 2! Which kept my SIM card the longest?"

Things Learned
TL0050 - 2011, Week 43 and 44 Highlights

Things Learned

Play Episode Listen Later Oct 24, 2021 32:57


10/23/11 - relearned (maybe remembered) the "group by" clause in SQL SELECT - GROUP BY- Transact-SQL | SQL Group By 10/24/11 - Relearning Java 10/27/11 - LoL on Windows can possibly run on a flash drive. How to Play League of Legends From a Flash Drive 10/28/11 - My phone still can't really handle HD video capture that well. Cheaper than most, better than all: the 2013 Nexus 7 reviewed | How SSDs conquered mobile devices and modern OSes | Lollipop on the 2012 Nexus 7: Not great, but not much worse | Review: Samsung Droid Charge 10/29/11 - Trees with leaves on them are very easily brought down by snow. Snow on Dead Leaves Weighs Down Branches | Will the Snow on My Trees Harm Them? 10/31/11 - Lion Recovery and the fact that you should repair your disk after updating from Snow Leopard to Lion. OS X 10.11 El Capitan: The Ars Technica Review | Repair disk on Snow Leopard using a bootable USB, in order to upgrade to Lion | What steps should I take in preparation for upgrading to Mountain Lion? | About Disk Utility's Repair Disk Permissions feature 11/1/11 - more stuff about cp in Terminal - mainly with replacing files and copying apps. 11/2/11 - Glassfish server on the Mac doesn't like blank passwords. How to Install glassfish on MacOS | JDBC Tutorial 11/3/11 - How absolutely annoying Apple Qmaster is to get working properly. 11/4/11 - Motion Blurs in Photoshop Use Adobe Photoshop to create a motion blur effect Extra topic: Occupy Sesame Street blog post This episode's music comes from archive.org and the Free Music Archive Tracks featured in this episode include: Doctor Turtle - Flies On the Prize Kevin MacLeod - Inner Light [ Kevin MacLeod (incompetech.com) | Licensed under Creative Commons: By Attribution 3.0 | http://creativecommons.org/licenses/by/3.0/ ] Doctor Turtle - I'm What You'd Be Without Her (Long Version) Lobo Loco - Just Walking (ID 1515)

SGGQA Podcast – SomeGadgetGuy
#SGGQA 225: The calm before the Techtober storm, Pixel 6, LG Batteries, Microsoft Right to Repair, iOS Isn't More Private

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Oct 18, 2021


Happy Monday! All the major announcements are happening soon, but AFTER I go live today! Let’s hang out, geek out, and get ready for the storm! Let’s get our tech week started right! Download this week’s podcast – SGGQA 224 (RSS subscription links below) Get the ad-free version of this episode! Stories This Week: Vivo … Continue reading "#SGGQA 225: The calm before the Techtober storm, Pixel 6, LG Batteries, Microsoft Right to Repair, iOS Isn’t More Private"

Empower Apps
Mac Dev in 2021 with Daniel Jalkut

Empower Apps

Play Episode Listen Later Oct 12, 2021 41:58


Guest Daniel Jalkut (@danielpunkass) | Twitter Red Sweater - Software Company - https://redsweater.com (without the dash

SGGQA Podcast – SomeGadgetGuy
#SGGQA 224: Pixel 6 Leaks, FireFox Ads, Steam Deck Teardown, and SPOOKY Movies!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Oct 12, 2021


I’m back from a gnarly head cold. I feel like I’m at 85%, but I miss chatting with all you geeks! Breaking down some Pixel 6 leaks. Following up on the Apple vs Epic lawsuit. Firefox is adding contextual ads to the search bar. YouTube kills the Rewind. Steam published a tear down of the … Continue reading "#SGGQA 224: Pixel 6 Leaks, FireFox Ads, Steam Deck Teardown, and SPOOKY Movies!"

The Greatest Story Ever Played
SOMA | Cutscenes: A Video Game Movie Podcast

The Greatest Story Ever Played

Play Episode Listen Later Oct 4, 2021 158:35


Spooktober kicks off with SOMA! Dan is joined by 2/3 of Cutscenes (Katie and Travis) to explore the ocean floor and find out what it really means to be a person.    Game: Soma Release Year: 2015 Developer: Frictional Games Platforms: Microsoft Windows, PlayStation 4, Xbox One, Linux, OS X,    More information on Cutscenes: Website  @Cutscenes_Pod @lesperak @TravisColenutt   Contact information: www.TheGreatestStoryEverPlayed.com www.Patreon.com/TheGreatestStoryEverPlayed TheGreatestStoryEverPlayed@gmail.com @StoryEverPod   Intro: Money for Lugging by New Waver Outro: End Credits by Visager

Empower Apps
Navigating DocC with Ellen Shapiro

Empower Apps

Play Episode Listen Later Sep 28, 2021 45:29


Guest Ellen Shapiro - Twitter @designatednerd designatednerd.com Apollo GraphQLApolloGraphQL - YouTube Channel Youtube Video - https://youtu.be/KhIg2u0J_wQRelated Episodes Episode 48 - Alternative Backends with Kristaps Grinbergs Episode 102 - How to Learn New APIs with Stewart Lynch - Part 2 Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham Episode 67 - Documenting Your Code with Bas Broek Related Links DoccZz by Helge Heß Hosting DocC Archives by Joseph Duffy Leo's DocC Example for SyndiKit RSS Reader Library WWDC 2021 videos Meet DocC documentation in Xcode Build interactive tutorials using DocC Elevate your DocC documentation in Xcode Host and automate your DocC documentation Syndikit Github Action for Publishing to Netlify (at the end) Add an option to build the concurrency library for back deployment. #39051 SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves: For edge cases you don't even know you have Protects from outages your team hasn't seen yet Saves you time on future maintenance  As well as new features released by the app stores Empowers your marketing teams with clean, reliable IAP data All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Show Notes Why use DocC (and why not) Why adding header docs is an important first step How to organize your documentation Articles vs Tutorials What is a DocC extension? Hosting your DocC What are some challenges with DocC? Future of Open-Sourced DocC Adopting New OSes and Deprecating Old Ones ...and quick thoughts on the September 2021 Apple EventSocial MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)★ Support this podcast on Patreon ★

SGGQA Podcast – SomeGadgetGuy
#SGGQA 223: No iPhone 14 Rumors! No Galaxy S22 Leaks! But I Pre-ordered a Surface Duo 2!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Sep 28, 2021


Facebook is pausing their Instagram kids app. Democrats are pressing President Biden to make Jessica Rosenworcel the permanent head of the FCC. Apple’s privacy features on the iPhone might just be placebos. And we can dig into the Duo 2 a little more, even if my pre-order is going to be late… Let’s get our … Continue reading "#SGGQA 223: No iPhone 14 Rumors! No Galaxy S22 Leaks! But I Pre-ordered a Surface Duo 2!"

SGGQA Podcast – SomeGadgetGuy
#SGGQA 222: OnePlus adds XPAN but drops 9T, Apple A15 Poor CPU Gains, Surface Duo 2 and Surface Pro 8 Leaks, Audience Q&A!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Sep 20, 2021


OnePlus is cancelling the 9T, but they added a fun new camera feature! The FTC is looking more closely at tech mergers. Apple ripped off another developer’s idea, and then blocked their app from the App Store. Surface Duo 2 visits the FCC, and the Surface Pro 8 gets leaked. And we’ll really take some … Continue reading "#SGGQA 222: OnePlus adds XPAN but drops 9T, Apple A15 Poor CPU Gains, Surface Duo 2 and Surface Pro 8 Leaks, Audience Q&A!"

Empower Apps
In-App Purchases and the StoreKit API with Andy Boedo

Empower Apps

Play Episode Listen Later Sep 20, 2021 45:05


Guest Andy Boedo - Twitter @AndresBoedo RevenueCat - Twitter @RevenueCat The Sub Club Podcast The Sub Club YouTube Channel Youtube Video - https://youtu.be/_3sIBHZPhx8Related Episodes Episode 26 - App Store Optimization with Ariel Michaeli Episode 71 - App Dev Stack with Jordan Morgan Episode 97 - Day One App Ideas with Mikaela Caron Episode 103 - Learning From Your App Store Competitors with Ariel Mitcheli Episode 100 - 100th Episode Spectacular Related Links What's New with StoreKit 2 by Maddie Beyl Developer's Guide to Apple Family Sharing by Andy Boedo Converting a Paid iOS App to Subscriptions by Cody Kerns Show Notes How Court Cases will affect the App Store Why In-App Purchases and Subscriptions are popular? Why go with Apple's payment system vs. outside payment system? How to decide what features to cut-off behind your app's paywall? What exactly is a receipt in StoreKit? What's new in StoreKit2? Future of the App Store Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)★ Support this podcast on Patreon ★

Hope This Helps - A Tech Podcast
HTH0039: Crotch-Punching Security Vulnerabilities

Hope This Helps - A Tech Podcast

Play Episode Listen Later Sep 19, 2021 78:34


Microsoft Exams, Passwordless login, Identity and Access Management, Microsoft 365 landmines, and more! Extended show notes available at https://hthpc.com Note: Our apologies for wavering audio quality, we had some technical difficulties! Boot-up Delilah Human Robots + Cyborgs Remember on-premise? There's a cert for that Microsoft exams are hard! Passwordless login New identity partnerships and integrations to accelerate your Zero Trust journey Metroid: Other M and Privileged Identity Management DEFCON Patch Alerts It's like the French Toast Alert System for patches Apple zero-day vulnerability Update/correction: Snow Leopard was last updated in early 2016 just so you could jump to a newer version of OS X in the Mac App Store. Update/correction: Steve meant the 2010 Macbook Air's ability to run Catalina, not the 2011 one. Bo Burnham's "Inside" Various M365 landmines to be aware of Via Joe Stocker (@ITguySoCal) We go over almost everything listed here: https://twitter.com/ITguySoCal/status/1431734989792563201 M365 vs O365 vs Azure Some things are the same between the two Where do they link/not link? Two user portals Things change and documentation isn't always updated Exchange Online's dual portals Exchange scripts/Documentation still referencing Skype for Business That is Accurate SSH and Secure Shell have the same amount of syllables --- This episode is sponsored by · Anchor: The easiest way to make a podcast. https://anchor.fm/app

SANS Internet Stormcenter Daily Network/Cyber Security and Information Security Stormcast

Phishing 101: why depend on one suspicious message subject when you can use many https://isc.sans.edu/forums/diary/Phishing+101+why+depend+on+one+suspicious+message+subject+when+you+can+use+many/27842/ PrintNightmare Fix Breaks Network Printing https://www.bleepingcomputer.com/news/security/new-windows-security-updates-break-network-printing/ Malware Taking Advantage of Linux Subsystem for Windows https://blog.lumen.com/no-longer-just-theory-black-lotus-labs-uncovers-linux-executables-deployed-as-stealth-windows-loaders/ Travis CI Patch https://travis-ci.community/t/security-bulletin/12081 IBM System x IMM Vulnerability https://support.lenovo.com/es/en/product_security/len-66347 Fake iTerm installing Malware on OS X https://objective-see.com/blog/blog_0x66.html

SGGQA Podcast – SomeGadgetGuy
#SGGQA 221: Apple vs Epic Appeals, Vivo X70 Reaction, Infinix Zero X, Chill Viewer Q&A

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Sep 13, 2021


Back in the habit after taking a week off! LET’S DO SOME PODCASTING! The Epic lawsuit wraps with a spectacular conculsion and both Apple and Epic are looking into appeals! LG Claims they can make a better folding screen. TCL is pushing pause on launching a foldable. California might be gearing up for a fight … Continue reading "#SGGQA 221: Apple vs Epic Appeals, Vivo X70 Reaction, Infinix Zero X, Chill Viewer Q&A"

Empower Apps
Learning From Your App Store Competitors with Ariel Mitcheli

Empower Apps

Play Episode Listen Later Sep 13, 2021 41:02


Guest Ariel Michaeli  - Twitter @arielmichaeli AppFigures - Twitter @appfigures Newsletter Podcast YouTube Channel  360idev 2019 - App Store Optimization for the Rest of Us AppFigures Guides AF Chats  ASO & App Promotion Guides App & Keyword Teardowns This Week in Apps AppFigures App Store Optimization Checklist How to Optimize Your Keywords List in App Store Connect Optimizing Your App's Name to Get More Downloads How to Choose the Right Keywords for App Store Optimization Youtube Video - https://youtu.be/JHmn2y--wy0Related Episodes Episode 26 - App Store Optimization with Ariel Michaeli Episode 71 - App Dev Stack with Jordan Morgan Episode 97 - Day One App Ideas with Mikaela Caron Episode 100 - 100th Episode Spectacular Related Links AF Chats - WWDC 2021 Recap with Joe Cieplinski AF Chats - A/B Testing Part 1: The Basics with Katie from Storemaven AF Chats - A/B Testing Part 2: How & What to Test with Gilad from Moburst AF Chats - Using Competitive Intelligence to Drive Growth with Ian Irving from The BBC Made to Stick by Heath Brothers The Curse of Knowledge Show Notes Thoughts on 360iDev What's New in the App Store? How to do A/B Testing on the App Store What to do before starting an app Information to research from competitors Why competitors' tech stack matters Future changes to the App Store Other Apple App Stores Future of the Metaverse Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)★ Support this podcast on Patreon ★

Memory Protection
September 2001: Seybold and AppleScript

Memory Protection

Play Episode Listen Later Sep 4, 2021 79:54


September means Seybold for Apple. Steve and Phil walk us through all of the improvements that are coming to Mac OS with OS X 10.1. We get deep into a discussion about scripting and automation on the Mac, Matt waxes on about Shenmue for one final(?) time, and Josh finds a way to automate Matt out of future episode intros. === QuickTime Machine HP Buys Compaq DoJ Officially Abandons Pursuit Of Breaking Up Microsoft Apple's Retail Operations To Break Even In Q4, Profit In 2002 NY Post Reports That Avie Tevanian Will Be Leaving Apple Apple Reschedules QuickTime Live! Conference Seybold San Francisco 2001 NotesKey YouTube Link Adobe Announces Illustrator 10, Including Mac OS X Support Adobe Announces InDesign 2.0, Including Support For Mac OS X 10.1 Mac OS X 10.1 Released, Free In Apple Stores This Saturday Steve Jobs: Mac OS X Is Now Ready For Primetime; Details Offered On Getting The Upgrade

Mac Folklore Radio
Interview with Eric Harslem (1992)

Mac Folklore Radio

Play Episode Listen Later Sep 3, 2021 31:36


Which Mac is the current bestseller? Is Apple giving up on industrial design? Why did you screw Quadra 900 customers by introducing the 950 just five months after the 900? Editor-in-Chief of Macworld Jerry Borrell sits down for some Q&A with Eric Harslem, Apple's Vice President of Desktop Computers in 1992. Simpler times: an Apple VP discussing future product plans and openly admitting mistakes, in this case with the Mac Portable. You don't see Tim Cook apologizing for the butterfly keyboard or the abysmal state of OS X from 2009 onwards, do you? Come back, Eric! Original text from Macworld Magazine, September 1992. Eric in 2012 speaking about his donation to the Mathworks Endowment at Texas State University. Some months after this interview was published, Eric, along Apple's head of PowerBook development, jumped ship to Dell in 1993 to help turn around its notebook division. The Apple New Product Process (ANPP) lives on even though Jonathan Ive did his best to prioritize thinness and visual aesthetics over structural integrity, keyboard durability, and battery life.

The Bike Shed
306: If You Want To Go Far, Go Together

The Bike Shed

Play Episode Listen Later Aug 31, 2021 45:14


In this episode, Steph and Chris talk about things they've changed their minds about over the course of their careers as software developers. Steph talks about as it turns out, arm chair rests are good, feature flags and comments are also good, she's changed her mind about how teams structure the work that each person is doing at once, and believes strongly in representation in the field. Chris is not a fan up upgrading his operating system and when he first started out, he gravitated towards learning dynamic languages, and since then, much prefers functional languages, static typing or more broadly, static analysis. He also no longer believes in the 10x engineer, and also very much believes that URLs matter on the internet. So basically, don't call them single-page applications; call them client-side applications instead! Arq (https://www.arqbackup.com/) Karabiner-Elements (https://karabiner-elements.pqrs.org/) Kent C. Dodd's Epic React Course (https://epicreact.dev/) The Art of Code Comments by Sarah Drasner (https://www.youtube.com/watch?v=yhF7OmuIILc) Gary Bernhardt: Functional Core, Imperative Shell (https://www.destroyallsoftware.com/screencasts/catalog/functional-core-imperative-shell) Transcript: CHRIS: I still have dreams that I missed an entire semester of math class, and now it's time for the final. I don't know that I'm ever going to grow out of that. STEPH: That's wild. CHRIS: You don't experience that? It's a mixture of I'm in elementary school, but it's a college final. Like, the physical school that I'm in is my elementary school, but it's a calculus college course that I missed. And now it's time for the final, and I won't graduate college as a result. But it's also high school at the same time. Just every part of education sort of melded together into this nightmare scenario. Do you not experience that? I thought this was normal. STEPH: [chuckles] Not in a very long time, not since I was in college. But I'm imagining this very cute, young Chris showing up with a backpack to the calculus final like, "Oh no." [laughs] CHRIS: Yeah, pretty much, yeah. I really thought I would grow out of it at some point. But it shows...I think it manifests when I have anxiety about something else in the world, and then I have a math terror dream. STEPH: That's your stress sign. That's your terror dream. CHRIS: Apparently. STEPH: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Steph Viccari. CHRIS: And I'm Chris Toomey. STEPH: And together, we're here to share a bit of what we've learned along the way. Hey, Chris, how's your week going? CHRIS: Oh, it's going fine. Yeah, I'll go with fine. I had to upgrade my operating system. Enough things had stopped working or seemed to be pestering me about it regularly, which normally I'm going to ignore that for as long as I can. That's sort of where I'm at in the world these days. Like, I don't want to upgrade because I don't know what's going to break and whatnot, but then things had broken already. Text messages were no longer showing up on my computer. And it turns out that the primary way that I interact with text messages is by replying to them through my computer. I don't want to type on my phone, that's not a thing. I'm already grumpy enough about text messages, to begin with, that I will regularly respond switching to email, and then I'll go off from there. But yeah, they stopped working, it stopped connecting. And then I got this really weird message from Apple when I tried to sign in. And I was like, I feel like I should at least try to upgrade to the new operating system, which I think has been out for a long time, and I've just been ignoring it. But then I had the added problem of I didn't have enough space on my computer to install it, which I tried once before. So I downloaded the installer, but the installer downloader doesn't check whether or not you have enough space to do the install. So it's just like, hey, so you know how you didn't have enough space? Well, we took up the remainder of it, and now you can't do anything about it. And the installer is hidden somewhere in the computer. So at one point, it just went away, and then suddenly had a lot of space on my computer. But finally, I decided to bite the bullet. I found a bunch of caches on my computer. So there was a cache for my backup utility, which is called Arq, A-R-Q, which was a lot of space. It was like 20 gigs or something like that. So it was like, sorry, you have no more cache. I'm pretty sure my computer's going to light on fire the next time it tries to do a backup because it has no cache to rely on, and it's got to try a lot harder, pull a lot more data down. I don't know what it does, but whatever. It's going to do that. And then, I found the more general application caches on the computer. Spotify had like six gigs of cache. Well, what are you doing? Aren't you streaming from the internet? Stop it. That's not okay. That is not acceptable. Yarn had three gigs. I was like, what is everybody doing? And I busted all of these. I threw away everything, and my computer seems to be doing fine after the fact. So, were the caches even doing anything? I ask. Anyway, so I upgraded, and then some stuff didn't work. And so then I had to find the versions to make stuff work. The particular one that stood out was Karabiner-Elements, which I used to make my mechanical keyboard do the right things for the function keys. That stopped working. And I tried to upgrade it to the newer version because I figured okay; they probably hopefully released a new version, but it failed in the upgrade process. And it turns out the secret was I had to upgrade to an intermediate version. I was on 12.3, and I needed to go to 13.4. But in between, I had to go to 12.10. And if I went to 12.10, then the upgrade to 13...everything about it was everything that I hate about upgrading software. It's like, I just know it's working right now, and I feel like if I even just look at it wrong, this whole tower of software is going to fall over. The worst thing, the thing that I have not been able to fix, is now I use iTerm as my terminal, my terminal emulator as it were. And I typically run with transparency mode on which some people look at and say, "Wow, that's a choice." And I say, "I kind of like it. I don't know; it makes me feel like a hacker or something." I don't know, whatever. [chuckles] Let me live my life. But for some reason, switching to Big Sur, the version of OS X that I'm on now, iTerm doesn't have transparency anymore. And I just haven't been bothered to fix it yet. But, man, I got rambly. I clearly have some feelings about upgrading software. STEPH: You have so many feelings. The fact that you kept going...People can't see me, but I'm just dying because of that whole story. [laughs] CHRIS: I kind of felt like I had to get through it. I had to exorcise the demons, tell my tale, and then be done with it, which I think I'm at now. STEPH: When I start laughing that hard, [laughs] I try to hide from the camera view because I want you to keep going for people to listen. CHRIS: But what's fun is you bob and weave. You'll hide for a minute, and then you'll come back and be like, okay, I'm composed, never mind. And then you'll just fade off to the side again. So yeah, but I powered through. [laughs] STEPH: Oh, all right, there is so much there. [laughs] Upgrading is the worst. I agree with that. That was actually something I ran into earlier this week. Well, it was a mix of where upgrading presented a problem and then upgrading something else resolved that problem. And so that was an adventure where I shared a tweet. I can link to it in the show notes as well. But Ruby was just taking up 100%, a full core, just all the time, and I couldn't figure out why. I wasn't doing anything with Ruby. We weren't talking at the moment, but it was just turning up one of those 100% CPU or higher. And so then I did some searching. And I did find the resolution, which was to upgrade the Listen gem because there was something in the Listen gem that didn't fully support Big Sur. Is that the name of the thing that I am on? CHRIS: That's the new one, yeah. I know because I've just upgraded to it. I have thoughts on the matter. [chuckles] STEPH: Cool. [chuckles] Yeah, when I upgraded to Big Sur. But then someone had kindly marched in to fix it, then upgrading resolved that problem. And Ruby is back to a peaceful level as to the amount of process, the amount of CPU that it should be taking up. Transparency mode, I'm thumbs up on it. I like how you called that out, how that's a choice. And I'm with you on that choice, although I didn't realize that's broken. I guess I just hadn't...I guess I don't care deeply enough that I've tried to restore my transparency, but you're telling me to hold on. CHRIS: We're going to get realer now in this moment. So I have a very old version of iTerm because it has a different way of going fullscreen than the default operating system level fullscreen. I really hate that it animates to fullscreen, and it doesn't quite fill the full screen. Like, it still had a border around it or something. So I have a very old version of iTerm that I've been running with forever, and I refuse to upgrade in any way as a result of I want to cling to this old version of things working. But as a result, I think I finally hit the end of the road on that. This is like years running now too. I remember I kept it in a Dropbox folder so that each time I upgrade or get a new computer, I'm like, okay, good. I still have my old special version [chuckles] of iTerm. But I think that time is over and I got to find...I feel like there are new terminal emulators out there. It's like Alacritty and other stuff that people talk about. So maybe it's time for me to try and find something new as long as I can get that transparency because I want to feel like an uber lead hacksaw. STEPH: You have such a brand of new-new that I'm now discovering that you are also a software hoarder, so you have both in your personality. [chuckles] CHRIS: There was a period early on in my software career that was like, oh, I got to find all this stuff. I got to figure things out and configure it. And then I was like, wow, that's taking up a lot of my time, I should stop it. And I think since then, I haven't upgraded anything. If you go look at my .files, I don't know the last time I pushed to them, but it's been a while. I'm still doing things, of course, but not as much. I know the cost of it, and I know the cost of maintenance. And really, this is an allegory for software overall. This isn't just about our local development environments, but entropy exists in software. Software does not exist at rest, and it will decay over time. And so the idea of we've worked with so many clients where they're like, yeah, we're on Ruby 1.8, and it's Rails 0.9. So okay, all right, well, we're going to have to deal with that, it turns out. We can't just keep ignoring that. So really, it's the same story played out but in my local hoarder cavern. STEPH: There was a part of the saga, the story that you shared with the installer and that you don't have enough space, and it took up the rest of the space, and you can't do anything. I'm very nervous; what happened to your stuff, your space? How did that resolve? [chuckles] CHRIS: I finally bit the bullet. And so I have a bunch of...I've tried a bunch of the different pieces of software that will visually analyze your disk space. So they crawl the whole directory starting from the very root of your computer, and it will be like, all right, applications has this much, and the library directory in your home directory has this much. Here are all of the different places that stuff might be hiding on your computer. And then you can visualize and be like, okay, that's where the most of it is. Node modules, as an aside, we did not choose an efficient way to approach how to put code on my computer because Node modules take up a lot of space on my computer, but they're so spread out. Multiple times I've seen people share a version of rm -rf, and then it's some subshell that does find every Node modules directory underneath a code folder. So you can find every single Node module and just blow them away. That will regain you some space. But that was not the solution this time. I've tried lots of piecemeal solutions over time. But eventually, the thing that got me there was just busting all of those caches. So I cleared the backup utility, Arq's cache. I cleared a bunch of them, Spotify Yarn, et cetera. And that cleared enough space for the installer to actually run. And then, once that was done, the installer program itself was no longer around, so I reclaimed that space. But it was this weird chicken and egg thing where I had to have enough space to complete the installation such that the installer could go away. And now...actually, let me see what my hard drive looks like now. So somehow, according to the Macintosh hard drive info, I have 50 gigabytes of available space, which is really frustrating because there were a number of weeks where we went into a Bike Shed recording, and I was like, I have one gigabyte. I'm not safe right now because this audio is going to be more than that. And so I don't know how now I'm sitting at 50. I guess all those caches that I cleared and the installer being gone probably puts me in a good spot. But anyway, I'm living in an upgraded, wonderful world. As an aside, Big Sur is ridiculously rounded and colorful and almost cartoonish. They're really leaning into the iOS vibes. And I'm not sure it's my personal aesthetic, but that's fine. I spend most of my time in the terminal anyway. But I think that's enough of me ranting about upgrading my operating system, which apparently I had a lot to say about. But what else is up in your world, Steph? STEPH: I do appreciate the ranting, though. You're not often grumpy, and when you are, it's quite humorous. [laughs] I really enjoy the grumpiness. And it's often a painful process. So I appreciate all of that story. Something that I really need to share with you and get off my chest is a couple; I don't know, x number of episodes back, you and I were talking about computer chairs. And I bragged about the fact that I have a computer chair that has no armrest, and I love it. I love my chairs like this, and it's wonderful. And I just think it's the best way to live. And it turns out that that's bad because I happened to go see a massage therapist who's also very well-skilled in physical therapy and other areas. And they were talking to me about my desk setup. And I mentioned the fact that I get these typical headaches, and I have my chair, but there's no armrest. And they're like, "Oh, that would do it." I was like, "Why? I like my setup. What's wrong with it?" And they're like, "Well, if you don't have armrests, then your back is having to compensate and to hold up your arms and your shoulders all day. So while you're typing, you're using more muscles to then hold that. And then they eventually tighten and contract, and then that can cause headaches." So in case, I have led anyone astray into having no armrest, they are apparently very important to not having headaches or having your back overworked to the point that you have headaches, which I'm a bit sad about. But on that front, I have ordered a new chair, and we'll see how it goes. I will have to assimilate into the world of chairs with armrests. CHRIS: We welcome you with open armrests. [laughs] Sorry, I saw it, and then I went with it. Anyway, I'm realizing now I actually don't use the armrests on my chair per se. I actually end up putting my arms on the desk, which is probably not ideal either. I have a little wrist pad so that my wrists are brought up and so that I don't have the upward breaking of the wrist thing going on. I think that matters a lot. And then my arms are supported by the desk, but it is just right on the desk, and I wonder if that's worse. But I've never...I don't know, getting the armrests just right and then also having the wrist pad. But I can't adjust my desk is probably the main problem. If I could bring my desk down a little bit, and if it were a thinner top, then I'd have more flexibility. The chair that I have is wonderful and has flexibility. The arms can go up and forward into the side and lumbar and this and that. And so I'm able to make the chair work to the desk. But I do wish I had more of an adjustable...ideally, like a stand-sit desk. But I haven't made that jump just yet. STEPH: When you're ready to make that jump, I'm going to share with you where I bought my desk because I'm really happy with it. And it's also not nearly as expensive as most of the other desks that will go up and down. CHRIS: Presumably, we can include it in the show notes as well so that we share it with everyone. STEPH: Definitely, yeah. CHRIS: Otherwise, that's just kind of mean. [laughs] You and I have a weird back channel that we talk about on the show, but they're not actually put in the show notes. STEPH: We're not mean. We wouldn't do that. I love my desk. And it was from someone else. They're the ones that shared it with me, so I'm happy to pass it along because it has served me well. And yeah, I'm also not sure about how this is going to work with the chair and the armrest because I'm just worried they're going to be too wide, and they're not going to actually offer support. I have doubts. I have lots of doubts, but I'm willing to investigate. And we'll see how this goes because I would like for the headaches to stop. CHRIS: Good luck on that front. That definitely seems like an indication of worth putting in some effort there. STEPH: Agreed. I also have some other exciting news. Stephen Hanson at thoughtbot has organized a number of other thoughtboters to get together who are interested in really diving into leveling up, learning React, and specifically focusing on purchasing the Kent C. Dodd's Epic React course. And it's for anyone that is comfortable writing code, whether you know React really well or if you're new to it. Everyone's welcome to join. So we just kicked that off today where we're going to go through the course together and then meet every Friday. I think the cadence is probably three hours, three and a half hours every Friday, that then we're going to commit to working through the course together. And I have to admit, I always nerd out a bit over how does someone build a course? Like, I'm really excited about the content as well, but I just want to know how did someone go about producing this content and then sharing it with everyone? And then what's their outline? How do they help people that are getting stuck because they can't be there in the same room? How do they record their videos? So I'm really excited to see all the ways that Kent has crafted this workshop. And so far, there's so much content, but I'll have more to report as we really start to dive in. But I'm excited to revisit React because I haven't been in React land for at least a year and a half; it's been a while. And so it's one of those areas that I know some bits, but a lot has also changed. And I would like to just revisit that world. So I'm really excited to dive into the course. And so far, I really like the structure that Kent has taken with the curriculum where we're focusing first on what exactly is happening and all the effort that goes into if you wanted to actually write HTML and then layer on JavaScript on top of that. But then here's how React makes that easier for you. Here is how JSX makes it even easier on top of the React API. I really liked that. Here's some pain; feel a little bit of pain, let's get a little bit better. And then let's get even better on top of that. And that has been a really nice reminder and progression into the course. CHRIS: I'm definitely a fan of the way you're describing it like, feel some pain, and then let's get better. But then, like, what's the hook? With any educational content, this is the sort of structure where there can be full education. But this is the thing that I feel very deeply about conference talks is my goal isn't to teach you everything if I'm giving a conference talk; it is just to get your attention just to say, "Here's the thing, here's why you might care." And starting from the problem, starting from the pain is always such a good way to do that. Because you know how this stuff is hard? What if I had an option that was easier? And then building from that totally makes sense. I want to say that course, Kent's course was built in conjunction with the egghead team, egghead.io. And it's a distinctly branded course. But it was built on top of the framework in the platform that's there and all of that, and then some of the editing support. I don't know this for certain, but I think there was some teamwork there. And I love just pushing forward the envelope of how we do educational content in the world of development because it is such an interesting world that has, frankly, such a need for ongoing development. The world is changing out from underneath us every two days. And therefore, having great educational content is so important. So yeah, definitely interested to hear how your experience goes both with the course and then also diving deeper into React. Well, switching gears just a little bit, I had a topic that I wanted to dig into with you today. And so to give some context, the topic, the thing that we're going to be talking about today is what have we changed our mind about? So you and I have both done a little bit of thinking and tried to come up with some answers to this. The background, this was actually inspired by a tweet that I saw between Shawn Wang, aka "Swyx" on the internet, and Charity Majors, a recent guest here on this podcast. And Charity is someone who is known for having strong opinions. But Shawn asked the question of what are some opinions that you've changed your mind about? And Charity actually had a wonderful list, which we'll link to her tweet thread where she shared some of her both technical and then also more personal ones, but really talking about the sort of evolution of thinking and the way someone's thoughts can change over time. And I thought it was just such an interesting thing because, for most points in time, we experience someone's sort of snapshot of where are you at now? What do you believe to be true? But I think there's such an interesting story and sort of the arc there of what did you believe to be true that you don't anymore? What have you softened your beliefs on? What have you strengthened your beliefs on? So yeah, with that as the context, what have you changed your mind about, Steph? STEPH: Yeah, this one really got me thinking, and I feel a little stumped on it. I have a few that I'm excited to share. But I'm very excited to hear your list to see if that also helps me reflect more on some of the things that I have changed my mind about. And I have found that there's only a couple maybe that I feel like I've really solidly changed my mind about. The others, I've either dialed up the strictness, or I've dialed it down. So the ones where I've really changed my mind about are feature flags and comments. Those are two of them. Well, there's a third one, but I'll get to that in a moment. So starting with the first one, feature flags I was more in the camp where I very much appreciate feature flags, but I use them sparingly because then there is a tedious nature of introducing them and then having to clean them up, and then having to maintain two states of code. But now I've really seen the value of feature flags and how we can make sure that we have calm releases and ensuring that main is always in a deployable state. So feature flags is one for me. I'm very invested in having more of a robust feature flag system because I see the benefit to that. The other one was comments. I used to be very rigid about comments are bad. We should never have comments in our code. They are just waiting to go out of date, and they're not going to be helpful. But I have since dialed down that strictness where I have certainly seen moments where comments do feel very helpful, and I can see how people use them. I still want to avoid them for the most part, but I am less strict now in regards to people who really find value in comments. I'm more open to that discussion. I want to understand what it is they find helpful about that comment, and if it is something that we can't capture with code or a test, where does that live? CHRIS: Those are both interesting. Feature flags, for me, I think I actually was more strongly opposed in the beginning. Earlier on in my career, I saw them as added complexity, as noise. I often would encounter them left behind in a codebase. And so, I had this negative association with them. And I didn't see the value; I hadn't yet felt that pain. And over time, I've definitely shifted to where you're at where I'm like, I love feature flags. This is a critical tool in our toolset of how we actually…like you said, calm deploys, being able to always deploy main, making sure that we don't have long-running feature branches. There are so many benefits that come out of it that I'm now very strongly in favor of them. But it's interesting; I think I would say that I started in a more strongly opposed place. So that wasn't on my list, but it's an interesting one that you've brought up and probably one that I've moved more on. Code comments, I think, actually started in my career being like, obviously, you comment your code. It's the thing that I read about and stuff. And slowly, over time, I think I've just dialed in on I don't think we should be doing that. There are, of course, going to be exceptions. And actually, one of the things that I discovered about myself as I was trying to go through this exercise is there are very few things that I believe are black and white. If anything, that maybe is one of the things that I've leaned into over time. It's like, nothing is binary. Nothing is black and white. Everything is on a continuum or shades of gray. There are things that I believe a little more seriously. But there's almost nothing that I can be like, nope, absolutely I will not equivocate on this beyond how we interact with other humans and being reasonable, kind people. And in terms of software practices, not really. Comments, though, are one that I still am pretty strongly not going to lean into. So it's interesting that you're like, eh, I've kind of opened up to that one. STEPH: There's a particular talk, The Art of Code Comments by Sarah Drasner, and that's the one that really shifted some of my opinions around comments, and then how we talk about them, and what benefits they can play. But I will admit, if I see a PR that has code comments, I still immediately have a negative reaction to that. And I want to have a conversation around why that comment was added and if we can remove it, and how we can remove it. But even with that negative perspective, I still find that I'm more open to that discussion versus before, where I would have been like, no, that's just unequivocally bad. CHRIS: I do like that you always bring up that talk whenever we talk about comments. This is a great talk. And in the background, I just looked up Sarah's Twitter profile because every time you bring it up, then I mention that she has a still from the movie Labyrinth in her Twitter background, but she actually changed it. And so now that's not true anymore. It's now something from The Force Awakens. Well, it's actually a joke, but I'm still going to suggest that you watch the movie Labyrinth at some point. That's the thing that I feel actually kind of weird about. It's a weird movie. STEPH: I'm going to take your suggestion, but not watch it. But thank you. [laughs] To share my truth today. CHRIS: That's fair, that's fair. STEPH: What are some of the things on your list? CHRIS: Okay, I have a couple, some more on the technical. Let's lean into one of the technical ones. Early on, I started with dynamic languages. I think I started with Python primarily and a little bit of JavaScript. I eventually found my way to Ruby and felt very at home there. And then, I started to explore functional languages. And I started to lean into them really hard and felt that immutability and functional programming and true pure functional programming was the thing. It was the answer, and I just needed to figure out how to do it. And so I would say that is the belief that I have since changed my mind on and decided, you know what? Actually, it feels like a bit of a force fit. I have tried. And maybe for others, it is actually a really fantastic way to build software. But having worked with a number of other people in more functional contexts, I find that it is a bit of a force fit. It's a bit rough. And in particular, of late, I've been working with Svelte as opposed to React, and React does sort of lean into the functional paradigm, especially with Hooks and all those sorts of things. And it's a little bit rough because it turns out UIs are these deeply mutable things. We're changing values or typing things in. There are actions that are changing the state over time, and having a system that just more directly models that feels very natural. I still love functional programming for the more core of an application. So again, I reference this talk often, but Gary Bernhardt's Functional Core, Imperative Shell. Gary has really formed some of my thinkings on this. And now I've started to find the examples in the work that I'm doing of like, oh, okay, I see that pattern actually applied here. But much as I would love to use them, the functional languages I find just aren't quite landing for me. And additionally, the mutability, particularly in the front end right at the edge of the UI, is not quite as good of a fit. STEPH: So I think that resonates with me although I do still get very excited about following more patterns that represent more immutable state just because I felt so much pain and found bugs from the fact that we have mutated state in surprising ways. I'm honestly not quite sure how I feel about it. I'm going to have to think on that one. That's a very interesting one that you've changed your mind on. CHRIS: Yeah, similarly, my feelings are lukewarm, whereas before, they were stronger. I was like, oh, okay, I think I found something here. And then, in attempting to use it across a wide variety of applications, it just didn't quite feel right. I felt like I was swimming upstream sort of thing. Actually, there is an interesting counterpoint. One thing that I have leaned into and definitely changed my mind on and embraced is static typing or, broadly, static analysis. But I think static typing being the most pointed version of that. Early on, like I said, I got my start in very dynamic languages in Ruby, and Python, and JavaScript. And so that dynamic duck typing runtime can be anything. We just make our systems respond to the messages, and all of that sounded great. But it turns out I really love having a compiler that can tell me some truths about my program before it ever reaches runtime. And the idea that a typo can make it to production feels absurd at this point. And actually, as I'm working in Ruby, I'm like, man, I really got to go look at that whole Ruby typing thing we got going on. I don't know what the state of it is. I've looked at it in the past, and I need to revisit it soon. But like TypeScript, I've definitely embraced that very strongly. And I would not work without TypeScript in a JavaScript project at this point. I've loved the work that I've done in Elm, although that also sort of blends into the functional stuff where it's like, it was a little bit noisy, though, I'll say that. But the type system and the fact that the compiler can give you so much rich information about your program, I would not trade that at this point. And I don't see myself going back on that front, which is an interesting place for me to be on of actually, I'm not that into the functional programming as the core way that I build my applications. But I do like static typing. And I feel like functional programming and static typing actually go together incredibly well. And functional programming and, more imperative, whatever it is that I'm doing with my day-to-day life these days is a more interesting fit. But it is interesting to me to observe that sort of combination of opinions where I really like static typing, and having a compiler, and something that can tell me about my program before I get to runtime. But also saying that I don't quite want the functional programming thing, or at least not as the entire way that I modeled my application because I found it a bit difficult to work with. Because I think static typing or compilers and functional programming go really well together. But I think generally, what I'm finding is a more middle ground dynamic optimization of a bunch of different things. And the answer is like, well, it depends which I guess if you've listened to the show before, you'll have heard those words said, so I guess it makes sense. STEPH: Yeah. All of that makes sense to me. And I can see why you might have a favor for types or why that feels more valuable initially because that is giving us so much feedback right off the bat versus following a more functional paradigm is something that could feel like more of a force fit and doesn't provide that same immediate feedback. But it has a longer-term or a longer cycle of that reward system. So I can see why you might favor one over the other or why I myself would favor one over the other. CHRIS: How do you feel about types? STEPH: I'm a big fan, although I say that, but I work in Ruby. [laughs] I don't have them. But when I have worked with types, I very much enjoyed it because it makes me think more about the design of my code in a way that I don't as much with Ruby. And working with types has heavy influence than when I am working in Ruby and thinking about the design of my code. So I think working with types is a wonderful thing that, frankly, all of us should do as developers at some point because it is so influential. So I'm for types, but I'm not using types in my day-to-day. Another thing that I have changed my mind about is how we structure the work that each person is doing. So I used to be more in the camp of everybody can work on their own very complicated piece of codebase, their own complicated feature. We can have a bunch of complicated things in the sprint, and everything will just be great; it'll be fine. And we'll get a bunch of work done, and we'll ship it. And then we're an even more productive team. And I very much disagree with that now where I have found where everybody is working in their own silo on a complicated feature has slowed down the progress of then being able to ship that feature. Because we often want to collaborate with someone, we need to collaborate with someone. Then the PR review process is tough if I really have no idea what you're working on, and I don't have a context that then when I look at your code, not only am I evaluating at the code level, but then I'm also trying to understand the feature and gain all of that context. And that's a heavy cost for me to have to pay to then pick all of that up and then for you to have to reintroduce me to what's happening. Or I might make the bigger mistake, and I may look at your code and just evaluate it from the code perspective but not really understand the feature, the value that's being delivered. And that doesn't feel useful. And I have a recent example where that happened where someone was working on a very complicated feature that I didn't have any insight into. So then, when I was looking at the PR, it was easier for me to just look at the code and get feedback on that. But then it was probably a day or two later. It wasn't until then that I finally started asking, what are we building? Like, what purpose is this serving? And that opened up a much larger discussion where we realized what was being built didn't actually really deliver what we needed to deliver. So I no longer agree with the idea that everybody should be working on their own complicated features independently, and there should be some collaboration. And, you know, it's the buddy system; we all need a buddy. CHRIS: Well, I like that one. I feel like I've shared similar ideas where it made sense. It was just the efficient thing to do, to split the work up and have everybody very independent. I also feel like earlier on in my career; I was more scared of Git conflicts and things like that or people interacting with the same parts of the code. And so in my mind, it made sense to really strongly separate like, oh, you shouldn't even be touching the controller for this. I'll handle the views, and you handle the controller; it'll be separate. And I care less about that now. And I think what you're saying of like, it's actually better if we have some shared context, and we understand what we're working on, and it's more of a collaborative process. Yeah, I like that one. I think I followed a similar arc, and I'm at a similar place now as well. Interestingly, to go into another one of mine that I think you'll probably be most surprised by on my list is I think I used to believe in 10x engineers. I used to believe in the idea of that one developer just off in the corner fueled entirely by Mountain Dew that would just produce the perfect code. They would just solve it. Over the weekend, they would write the entire billing system, and it would be great. And I think it was predicated on the idea that the coding is the hard part, which I no longer believe. I think coding at its core is communication. It's taking this thing that we want to be true in the world and then communicating it to a computer but also ideally communicating it to our teammates, and to future versions of ourselves, such that we can revisit that code, we can maintain it over time, other people can add to or augment it. And so the idea of this loner that can just do incredible volumes of work and have that be a good outcome that just doesn't make sense to me anymore. I've worked with incredibly talented developers, to be clear, folks that I was sort of in awe of. I've worked with people who have, I think, just truly photographic memories. They seem to remember every single bug that they've ever had and exactly where they can look it up. Or from the top of their head, they can just intuitively know, oh, this bug means this. Go look at this line of code. I'm like, how did you do that? How did you do that magic trick? And they're incredibly capable developers. But at the end of the day, the folks that I see being most impactful on a team are the folks that are able to communicate and collaborate most effectively and make the whole team more effective. STEPH: Maybe it's the Mountain Dew; maybe that's actually the secret sauce here. That's what I'm missing from my life to take me into that status. CHRIS: I'm now imagining Mountain Dew but in a more viscous form, like a barbecue sauce, but it's Mountain Dew flavored. That's the secret sauce because it's a very…anyway, moving on. [laughs] STEPH: It's a terrible product. We should make it and sell it. [laughter] CHRIS: Career pivot, we now sell Mountain Dew sauce. STEPH: [laughs] CHRIS: But yeah, I do not believe in 10x engineers anymore. If anything, I believe that that is a huge warning sign if you have anyone that's behaving in something close to that space. STEPH: Yeah, I'm super interested in that you've shared because I don't think...We've talked about 10xers, but we haven't talked about the fact that you used to think that they were more of a thing and that they existed. And now it's all I'm sorry, but it's all crap. [chuckles] That's super interesting to me. Do you remember what changed your mind? Do you remember that pivotal moment of where you were like, oh, maybe this is all bullshit? CHRIS: I think it was just an amalgamation of experience over time. I've encountered people who fit the archetype. But if anything, I would say they're deeply problematic in teams. They're that individual who refuses to collaborate, who just goes off and heads down, writes a bunch of code, but then it doesn't integrate with the other pieces, or no one else knows how to use it, or they won't let anyone contribute to it. And yeah, I've seen that just be very, very problematic. So the folks that most fit, I think the imagined version of this, actually end up, in my experience, leading things astray. And the folks that are actually most productive and really cause teams to improve in a drastic way behave very differently. They're much more collaborative; they're much more engaged with the team. It's less about their individual contributions and it's more about building a system together, collaborating, communicating, engaging external stakeholders, et cetera, et cetera. It's all that stuff that matters. And so, it's very much in contrast to what the 10x engineer ethos is about. But there's no one day where suddenly this idea that I had in my head crumbled when I saw that behind the pile of Mountain Dew cans, there was nothing there. [laughs] STEPH: It's all a mirage. [laughs] I do like what you just said around that there are very impressive people out there. And those impressive people often focus less on their individual contributions and more at a higher level around communication. And then they are the powerhouses that then is helping facilitate everybody else be their best and have high levels of individual contribution. Those are the ones that...I'm still not going to endorse a 10xer, but they are the ones who, to me, embody the idea of someone that is incredibly efficient and really good at their job. CHRIS: There's an adage that comes to mind here that "If you want to go fast, go alone. If you want to go far, go together." And that does ring true to me. I think an individual can have their individual productivity be higher if they're working entirely on their own, if they understand every line of code because they wrote every single line of code if they know where every feature of the platform is integrated because they wrote the whole thing. But they're going to be fundamentally limited. And in order to do bigger, more complex things, fundamentally, we have to work as a team. And then the way you have to interact just fundamentally changes. So I think it started from that, like, one person on their own I think can be individually more effective. But the minute you start to have a team, that one person acting on their own is actually dragging the team down because other people can't then work in that space, and that's a problem. STEPH: I really like that adage that you just shared where, "If you want to go fast, go alone. If you want to go far, go together." And that touches on something else that I have really changed my mind about, and that's representation. And this is more specific to me. So when I joined engineering and became a web developer, and I joined a team, and I was the only female engineer on that team, my initial feelings were I am the only female engineer, and that is fine. We're all just a group of engineers. We're here to solve problems together. It really doesn't matter if there's anyone here on this team that's like me. It's fine if there's no one that I can see myself in that's in leadership because we're all just people, is what I was coming down to. And I've completely changed my mind and realized that that's not true. And I've experienced this where I've worked on other engineering teams with female engineers, and it's fucking awesome, and it does make a difference. And then when I can see someone that I can see myself in, in a leadership position, that is also inspiring. So that is something that I went in where I think it was more of I was trying to shield myself from the idea that I am different from everybody else in this room, and that could be a problem. And instead, I just tried to neutralize it by saying it's not. But I think representation is incredibly important. People are not just people. We all have very important social and racial, and cultural identities. And it's very important that we get to feel that we can express all of those identities and see people that represent those identities in spaces where we would like to go. That's a big one that I've changed my mind on. CHRIS: Yeah, I certainly agree that representation certainly matters, and being able to bring your full authentic self to work and seeing others around you that reflect that. And frankly, having teams that are made up of people that represent the users of the software that we're building feels so critically important. And it's very interesting to hear about the arc that you've had on that where initially, you tried to downplay it, but then you found a little more truth in it. And so yeah, thank you for sharing. STEPH: You're welcome. It feels good to say that, too, because that's something that I've admitted and realized on my own, that that is something that has changed and shifted. But it's nice to be able to share that here with you as we're going through the things that we've changed our mind about. What else is on your list? CHRIS: Well, to round us off with one more very technical version because, of course, that's where I'm going to take us after a much deeper and more nuanced topic that you led us on, single-page applications. Broadly, I'm opposed to the name; that's a side conversation. But, man, URLs matter on the internet. So don't call them single-page applications, but client-side applications or whatever. Broadly, the idea of a bundle of JavaScript, and so you send down an empty HTML document, and then you reference a bundle of JavaScript, which that thing boots up and it then makes a bunch of API requests to the backend, and then it starts to fill in the page. I was convinced for a while that this is a reasonable and perhaps even necessary way to build software. We need APIs for our mobile apps anyway. So if we're doing that, then let's have that be the consistent way that we are accessing information. This is going to be fine; it's not a problem. And then eventually, we found some problems. So then we got GraphQL, and we tried to solve it that way. But overall…and I have spent a lot of time trying to make this thing work, trying to find a version of this that I'm happy with that I find the end outcome of the software to be as pleasant to work with from an end-user perspective as a server-driven application, and I can't find it. And so, to be clear, I'm still doing client-rendered applications these days. But Inertia.js is the framework that I've leaned into that helps me bridge that gap. And the idea that the server owns routing, that the server owns statefulness, things like that, not having to think about client-side routing, not having to think about client-side state management, being able to use traditional auth mechanisms built into cookies, all of these familiar things that we've had. Leveraging the fact that the server is the more privileged in terms of the information it has access to, the more secure, the more powerful environment, all of these things feel right to me. And the nature of the application that I can build just feels more robust, more consistent, easier to evolve. There were a lot of promises that I heard when we started building applications in these ways. And I just haven't seen an example or have not worked on an example, at least of an application that is built as a client-side bundle that boots up and does some stuff and had a good experience with that. So Inertia, as an aside, is my answer to this. And I continue to be extremely happy with that as a solution, as really a middle-ground solution. Because going all the way back to true HTML server-side rendering is limiting in other ways that I didn't like. But I find that Inertia really strikes an ideal balance in the middle there. STEPH: I feel like I completely agree with everything you're saying. But I also feel like I have a developer secret to share where I really haven't worked on single-page applications, and I am okay with that. [laughs] CHRIS: It's fine, skip it. Just go straight to Inertia. It's better. STEPH: Cool, cool, cool. I am working on leveling up React, and then the plan is to go to Svelte and Inertia. So I'll just completely...I'll skip that. I'll skip that part of my career. CHRIS: I actually want to back up just a little bit as I'm saying this because I really try to avoid being in a more negative space. And I think this space, this architecture for building applications, is complex, and there are things that will warrant it. So things like Google Maps, it makes sense to have a lot of Dynamic JavaScript and to be doing complex things on the client-side. Trello is another example of an application that that as a server-rendered thing, doesn't really make sense. And frankly, using a tool like Inertia wouldn't quite work there. That said, that is, in my mind, truly a single page within the broader application. So the Trello board page is a very, very complex stateful application, and I think modeling it as such makes sense. Google Maps, similar. But there's still the profile page, and the login page, and all of these other things. I think routing is probably where it breaks down for me. I think client-side routing is the thing that I feel the most pain on. Because at the end of the day, the server still needs to know the answer. And if we do client-side routing, we end up with this duplication of logic across the client and the server-side. We end up with disagreements from time to time. We end up with the weird flashes of half-rendered layout, and then we go to the login page because we get an API response that is different. And so, I think that is probably the kernel of the thing that I struggle with. And, of course, it is possible to build great things using any of these technologies. But I think my summary is I've really tried on that front, and I've just not been able to make the fidelity of application that I want using…primarily; I'd say it's client-side routing is the thing that I struggle with the most. STEPH: Yeah, it sounds like you're saying there are very valid use cases for using a single-page app or following that structure. But we haven't really gotten there in terms of our web development expertise, where we've made that easier to maintain and easier to implement. And there's still enough pain points around it that even though it seems like a very valid idea and approach, it still feels painful enough that you actively avoid it until it feels like something that you have to then invest in at that point to then really deliver the user experience that you want to provide. CHRIS: Yeah, I think that's an accurate summary. And I think adding on to that, I'm noticing it becoming more and more of the standard approach; this is the way we build applications, and I don't agree with that. That is probably the thing that is the kernel of what I don't believe in. I think actually server rendering is a great way to start, and then you can slowly augment or move more things into complex client-side behavior. But starting with this as the mode that we're building our applications just feels like a less stable foundation than I would want. So it's perhaps an architecture that you want to evolve to at some point as the complexity necessitates it, but I definitely wouldn't be starting there. Similar to service-oriented architecture, not going to start there. Client-side routing, I'm not going to start there. STEPH: Ooph. I feel like I've been holding my breath this episode. I feel like this was a very interesting topic that has been challenging to reflect on what we believe and what we've changed our mind about. CHRIS: I think it's perhaps more nuanced than a lot of our episodes where often we're saying this is what we did, and this is how we felt in the moment. And that can be very experiential and true. But this, yeah, we had to draw the line in the sand and say what do we believe? I similarly definitely feel more tension in this episode than other ones. But hopefully, it was useful. Hopefully, folks found some value in the things, and hearing our story, also, the idea that we have singular formed opinions. Hopefully, this episode has broken that idea in anyone's head. And we're all on a journey. STEPH: I really like how this has prompted me to reflect on the things that I used to hold dear and really cherish or follow strictly to then reflect on what are things that I used to believe versus what I believe now? Because that transition often happens so seamlessly for me that I don't really stop to think about it to be like, oh, something just happened that is really changing how I approach things, how I build, how I work with teams. And I really like this reflection point to be like, oh, what did I used to believe, and what's different today? I'd like to keep this practice going and just try to track the things...I'll have to make a list of all the things I believe. That seems like an easy list. [laughs] CHRIS: Just the easiest list to write. STEPH: The easiest list to write. And then I'll just check in with it every so often, scratch stuff out, or update it with the things that have changed my mind about. This is the good idea, terrible idea where you go, "Stephanie, that's a terrible idea." [laughs] CHRIS: I don't know, write it down on a list, and then look at it in six months and see if it sounds like a good idea, and then we'll be able to close the loop on the whole thing. But with that, should we wrap up? STEPH: Let's wrap up. I've got a list to write. CHRIS: The show notes for this episode can be found at bikeshed.fm. STEPH: This show is produced and edited by Mandy Moore. CHRIS: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review on iTunes, as it really helps other folks find the show. STEPH: If you have any feedback for this or any of our other episodes, you can reach us @bikeshedor reach me on Twitter @SViccari. CHRIS: And I'm @christoomey. STEPH: Or you can reach us at hosts@bikeshed.fm via email. CHRIS: Thanks so much for listening to The Bike Shed, and we'll see you next week. All: Byeeeeeeee! Announcer: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.

SGGQA Podcast – SomeGadgetGuy
#SGGQA 220: OnlyFans Reversal, Apple Profits from Search, Pixel 6 Launching Soon, Fold 3 and Flip 3 Impressions

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Aug 30, 2021


Onlyfans has reversed course on banning explicit adult content. A Samsung phone caught fire on a plane! Apple profits significantly from search on their products. The Pixel 6 might be arriving soon! And let’s chat a bit about my first impressions on the Z Fold 3 and Z Flip 3! Let’s get our tech week … Continue reading "#SGGQA 220: OnlyFans Reversal, Apple Profits from Search, Pixel 6 Launching Soon, Fold 3 and Flip 3 Impressions"

SGGQA Podcast – SomeGadgetGuy
#SGGQA 219: Pixel 5a Over Heating, OnlyFans Porn Ban, Chevy Bolt Recall, Backing Levar Burton for Jeopardy!

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Aug 23, 2021


Chevy is recalling ALL the Chevy Bolts out there. Ryan Reynolds is backing Levar Burton for Jeopardy. Apple’s phone scanning system is being criticized by NUMEROUS policy agencies. Samsung is dropping ads from their apps. And let’s dig into the Pixel 5A a little bit… Let’s get our tech week started right! Download this week’s … Continue reading "#SGGQA 219: Pixel 5a Over Heating, OnlyFans Porn Ban, Chevy Bolt Recall, Backing Levar Burton for Jeopardy!"

The Bike Shed
305: Burnout & Bugs

The Bike Shed

Play Episode Listen Later Aug 17, 2021 50:02


This week Chris talks about Bifunctor optics and introduces an app he's been liking recently called CleanShot X, which is a replacement for the built-in screenshot utilities on OSX. Steph talks about her experience using New Relic Browser Stats to troubleshoot a slow page and burnout. Who's feeling it? (Raise your hand.) How do we identify it? What do we do about it? Svelte Is Beloved! - Stack Overflow Survey (https://twitter.com/sveltesociety/status/1422372693827985409?s=21) Bifunctors (https://stackoverflow.com/questions/41073862/what-are-bifunctors/41075765#41075765) CleanShot X (https://cleanshot.com/) Next.js Image (https://nextjs.org/docs/api-reference/next/image) Transcript: CHRIS: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. And we're off the rails already, everybody. It's going to be a good one. Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Chris Toomey. STEPH: And I'm Steph Viccari. CHRIS: And together, we're here to share a bit of what we've learned along the way. So, Steph, how's your week going? STEPH: Hey, Chris, it's going really well. We talked recently that I have a new laptop. So I have been migrating the things that I'm accustomed to over to my new laptop, but I also love that clean, fresh start. So as part of that fresh start, I was like, what if I use Safari? What if I just switch? I'm a Chrome user, for the record. I'm pretty sure you know that, but just to share that. I was like, well, what if I just switched and I try out Safari for a while? So that was the thing. CHRIS: So I heard the words try and the phrase that was the thing, but I'm going to probe a little deeper. How'd that go? Was it good, great, not so great? STEPH: Honestly, it was fine. I did enjoy being in a new environment to see how Safari handles bookmarks and then also the inspector. So it was novel to be in a different browser where I really don't spend much time in a different browser other than when I need to test this specific UI bug or things like that. But the reason that I ended up migrating back to Chrome was frankly for Chrome profiles because I really like that I can have this clear separation now between my work life and my personal life, and then it also keeps me signed in. So my personal email versus my thoughtbot one versus before the Chrome profiles, which I'm not sure how recent of an addition that is where Chrome introduced that feature. But before, I just always had to be signed into both, and it was just all together in one spot. But now I really like that I can separate. And it's more intentional where I'm like, oh, I'm going into work mode, so I just want that profile versus I do need to hop over to my personal side for a while. So that was the thing that brought me back. CHRIS: Interesting. I don't take advantage of that at all. I know of the feature, but it's never really called to me. And if anything, I do the opposite. So specifically, this doesn't work in the browser, but on my phone, I use the iOS Gmail client, and I use the unified inbox. So I just have everything come together. And I subscribe to the idea of, I don't know, it's all work and stuff. And hopefully, people aren't sending me a lot on the weekends, and I will defer and snooze and all of that. But that holistic view pulls me in. And so it's interesting that you're just on the other side of that. It totally makes sense. I actually think I'm wrong here. I think I'm doing the wrong, bad thing. But it's interesting just the way we're on the two sides of that. STEPH: I can see the merits for your approach where it all goes to one place. So you have one place to go and triage, and I think that makes total sense. I haven't triaged my personal life well enough that I want it to come into my work life. And that's the one that needs the more immediate response typically. So I want to prioritize all of my work emails and focus on that and then have my personal ones more like, okay, I've got some time, and I want to check on this. But I don't want to blend those together. Because frankly, I need to do some more triage on the personal side if I'm just going to bring it all into one space. CHRIS: Interesting. Yeah, I would almost view it from the other point of view of I want to protect my personal space, and this is obviously not what I do based on what I just said but protect my personal time so that when it's evenings or weekends or whatever, that I'm not seeing work emails in there. I do my best to snooze them and get them out of the way. But if they are coming in, maybe there's something I need to respond to or, I don't know, maybe it's FOMO in a certain way, FOMO but professional FOMO. I don't really know. It's interesting that that's the feature that brought you back. But overall, how was your experience using Safari? I have heard loosely that now most of the browsers are evergreen; even Edge has really caught up and is now implementing features in a similar way. And so Chrome, Firefox, and Edge are very similar. And my understanding is Safari is the one that actually lags behind or even holds back web standards and implementations and things like that. So, did you find any rough edges of that sort, or was it otherwise just fine, and it was mostly the profile stuff that made you switch? STEPH: It was honestly just fine. I also may have not used it long enough to run into any of those rough edges. But overall, it was just fine. It worked. I just got to that point where I've run into this situation before where I'm signed into my personal email, and then I'm signed into my work email. And then I'm going to Google Hangouts, and Google Hangouts gets confused, and it's like, which person are you? And then I have that moment of where I have to sign out of one, or sometimes it just gets complicated. And what I found with profiles is that that's just never an issue. I don't have to worry about it anymore. So yeah, overall, Safari was fine. I wouldn't mind going back to using it. I just really like the profile feature. This was one of those moments where it helped me notice how much I really liked that feature because I had just opted into it a while back. But this was that moment where I was like, oh yeah, I really miss that. So I'm going to go back to it. CHRIS: The thing you said a minute ago about which person am I? [chuckles] There's a deep philosophical underpinning there, but I've definitely struggled with that and trying to trick the browser into it. So Trello is the one that I'm struggling with that right now. I am one human in the world, I assure you. But GitHub gets this; GitHub plays the game correctly where I'm one human, but I have multiple internet identities. I am the work person. I am the open-source person. And I'm able to route notifications and things to the different inboxes based on the organization that they're part of, et cetera. And I really liked that, that GitHub seems to understand that I am a human that is multifaceted, whereas Trello does not. And so I use Trello in a professional context a lot, but it's my personal...like, I would have to create a distinct account on Trello. And I'm like, Trello, that's not true; I'm still one person. Just understand this Trello organization is a separate facet of my existence. Got on my soapbox on that part. The other thing I want to say is I do feel bad about the fact that I'm just on Chrome. Because increasingly, Chrome has got so much of the market share, and it's becoming the new deeply dominant thing. And so I want to be the agent of change or like, no, we should use different browsers, and we should support them and make sure that we're testing against them and all of that. And then I'm just on Chrome all the time, and I feel bad about it. But it's one of those like; I have so much muscle memory and built-up knowledge around how to use Chrome. And I've just used it for so long now that the switching cost would be pretty high, I assume. I actually haven't even really tried, but I feel bad about it. I'm now saying two things which are I feel bad about it, and I've never even really tried. So I don't feel great in this moment, but these are my truths. STEPH: [laughs] Well, I can plus-one your truths. Those resonate with me. Well, there's always stuff that I am trying that's new all the time. So I feel like I need some constant in my life until I'm ready for other things to be the constant in my life. And then I can muck around with which browser I'm using and change other things. And you have to be in that moment. You have to be ready for it. So going back to a thing that you said a minute ago about separating your work life and your personal life, I very much like that framing, and that's a nice segue, frankly. And it's something that I've been thinking about where you and I often start with technical topics. But I have a very people-centric topic that I'd love to chat with you about today, and it is emphasis on burnout. And who's feeling it? How do we identify it? What do we do about it? And that's been very much on my mind because I have noticed a lot of people around me, including myself; I just feel like we are more inclined to experience burnout right now or are going through it actively. And it feels even more important to have those conversations with each other and with ourselves to talk about what does it look like when we're burned out? How do we recognize when we're there? Because often, when we are burned out, it's not something that happens gradually, or at least it's not something that we notice happening gradually. It's like, okay, I'm fine. And then suddenly, okay, I'm burned out. And I'm at a place where then I can't really focus. I feel overwhelmed. I'm drained. For anyone that is less familiar with burnout, one, hooray, and then two, burnout is a state of emotional, physical, and mental exhaustion that can be caused by excessive and prolonged stress. So then that's what leads to us feeling very overwhelmed, emotionally drained, unable to meet constant demands, or those are the things that are causing our burnout. So I have been doing what I typically do when I'm thinking about a particular topic, and then I'm looking to gather knowledge and information is I try to go pretty wide where I start looking for podcasts, books, just people that are having similar conversations and trying to synthesize a lot of the information that they're sharing. And I have found some really good stuff. The question is now, what does one do once one has that content, and then how do you bring it back and help apply that content to yourself and then people that are around you? So I have some thoughts there, but before I go further, I'm curious, what's your experience with burnout? CHRIS: I think for me, I've been somewhat lucky in that I don't think I've ever really got into an acute period of burnout, but I've definitely had periods where I just felt weighed down. And there are ebbs and flows of life, and of work, all of those things. There is something that I've been thinking about recently, which is the inherent nature of the work that we do where consistently we're working on something where we don't quite know how to do it, and we're struggling, and we're struggling. And finally, we figure out how to do the thing, how to trick the computer into doing what we want. And then the minute we do that, in trying to encode, ideally, we're automating that away. And we take that solved problem, and we just ship it off. And then, we pick up the next unsolved problem from the list. This isn't entirely true, but it feels like sometimes unspecificity in sort of I'm just working on things that are underdefined, underspecified, and I'm trying to solve little puzzles constantly. And, I don't know, I was feeling that recently of the nature of the work was burning me out. And I think earlier on in my career; I definitely experienced this in a certain way. And then, in the middle of my career, there was this perfect inflection point of my skills and the level of tasks that I was going for. But then, the further I got into my career, the more I tend to take the weird underspecified stuff and anything that's relatively clear I'm giving to other folks on the team. I'm like, "Oh, here's this well-defined piece of work here. Can you go implement this admin page?" Whereas I am doing the investigate integrating with third-party platform XYZ that uses a SOAP API that isn't documented. I'm like, okay, cool. Let me roll up my sleeves and figure out what that means. And I noticed in my work that that was starting to weigh on me, and I was able to shake that off and shift around some of the tasks that I was doing. But that was a particular form where the work itself was weighing on me. And I took a step back, and I was like, why do we do the things that we do as developers? Because there's something just fundamental like, you have to enjoy that nature of challenge and constantly escalating challenge to a certain degree, I think, to really like this work, but it can be a lot sometimes. So I feel like maybe that's a slight digression from the topic, but it was a thing that I was feeling in this space. And that's a little bit of my story. STEPH: Well, the beautiful thing about that is it highlights everybody experiences burnout differently. So that could really be how someone is experiencing burnout where they're taking on all these very complicated, different tasks, and they're feeling just worn down by that and that they're not able to meet demand. And they get to that point where maybe they lose their interest in tech and coding because they have pressed too hard in one direction. And so then they need to take a step back. As for me, I've been thinking back over the last couple of months because there was once or twice where you and I had, I think a conversation here on The Bike Shed where I shared that things were okay, but I didn't feel like my normal self. I was losing some of my interest and energy for technology and coding. And I'm very fortunate; I love what I do. So the fact that I wasn't feeling that interest was a really big sign to me that something's different; something feels off. And it does vary depending on the client that I'm working with. And I think feeling that burnout then was a mix of some of those client pressures that I was feeling and that I was working perhaps too many hours as I was very interested in that client's success. And then the other stuff was more personal because we only have, to borrow from the spoon theory, we only have so many spoons to give. And so if you have a lot going on in your personal life as well, that's going to detract from the energy that you also have to give to work. Are you familiar with the spoon theory? CHRIS: I am not. STEPH: I recently heard about it, and I can't stop using it now because I really like it. But it essentially...and there's a really great article that we can link to so others can read about it because I'm not going to remember exactly who came up with this theory. But the idea is that each spoon represents a unit of energy. And let's say if you start each day with only ten units of energy and you use spoons to represent that, as someone needs energy from you, maybe it's work, maybe it's a personal commitment, maybe you're dealing with a chronic illness, then you are giving a spoon away to each of those. So at some point, you're going to run out of spoons. And you want to also be mindful of who you're giving these spoons to because you are giving that energy away. CHRIS: I definitely liked the idea of we start each day with a certain amount of energy, and different things can pull from that pool and whatnot. I'm intrigued by spoons as the unit. It just feels like a weird...I got this little bag of spoons that I walk around with, [chuckles], and I give them out throughout the day. I guess it could be anything in there, you know, objects. But, I don't know, spoons are interesting to me. STEPH: I think it's because this person who came up with the idea was literally having a conversation with their friend in a cafe. And so that was just something that was in front of them. And they're like, oh, I can use spoons to represent. Well, we'll have to double-check the article to make sure, but I think that's why spoons became the representation. So circling back to once you're in burnout, what do you do with it? And that is one of my questions right now. And that's what I'm trying to synthesize a lot of information around. Because once you're in that state, I don't know of a lot of great ways to help other than take time off because, at that point, you're in a crisis state. And you need to step away, and you need to find out how you can recover from having entered this state of crisis. So that feels really important to identify ways that once someone is in that state, that then we can help them. And that feels good. We can advise someone to take PTO. I still don't feel great about it in terms that then, as a manager myself, I don't really know of other helpful ways to then help someone through that period. So then I really started thinking about the fact that once someone is in that burnout stage, frankly, it's too late. We have let someone get to that point that now they are in that crisis instead of addressing it early on. So that is the other thing that's on my mind is one, how do we help people that are already in that crisis state? But then two, how do we start identifying that someone is starting to go in that direction? And then how do we help them tell us? How do we then triage those situations? How do we prevent them from getting to that burnout state? And that's where I've also found some really good content. And specifically, there is a podcast that I've started listening to called The Burnout Show. They essentially share their experience with burnout, and what they did about it, how they recovered from it, and then how they continue to fight it because a lot of people then still go back to the workforce. So then, once you do find a way to recover, then how do you go back to work? And there have been some really great episodes. And I'll be sure to include a link for it in the show notes. There's one particular episode with Grant Gurewitz, who is a guest on the show. And he speaks specifically to the strategy of Three Good Pockets. And this speaks to the idea that there are many things that we can't control in our day. It could be work, family, other commitments, but we can strive for Three Good Pockets of time where we focus on something that's just for us. This is time that's reserved for you and any activity that you find restorative or joyful. And each pocket can vary in size. So perhaps that first pocket is spent just reading a few pages from a book that you're enjoying, and then the next pocket of time is spent outside or calling a friend. And Grant also has a great suggestion around if you're worried that you'll get sidetracked and not actually step away, which I felt called out for that one because that one's definitely me. I will have good intentions, but then I won't actually take the break that I set for myself. So Grant recommends creating a list of restorative activities so that way when it is time for that break when your calendar is reminding you, then you have a list of these activities to choose from. So it makes it easier to say, okay, then I can do this for a couple of minutes, and I can truly step away from work and step away from my screen. But especially now, when so many of us when we're sharing our workspace with our restorative space, for everybody who is still working from home or working remotely, then creating those daily breaks are incredibly important to our wellbeing. And so, it has me thinking about what restorative activities can I add to my day? How can I encourage other people to add more restorative activities to their day? So I really appreciated that advice. And I have noticed that the idea of burnout, but not so much burnout specifically, I've been thinking of it as recovery and balance is a theme for me. And it is something that I am purposely choosing as a theme right now where I want to research and understand more of how we handle these situations and continue to make progress not just for myself but also for my team. CHRIS: I think finding that right cadence and structure and way to reinvest in yourself and ideally gain more spoons if that is at all possible or at least defend the spoons that you have, those all feel very meaningful. I do have a question. I'm interested in your thoughts on this. I feel like we hear about burnout a lot in our industry. I get the sense maybe that it is a more common thing. Like, I hear so many developers talking about how their dream is just to give up tech and go get a cabin and just farm in the woods or something like that. And I wonder, is it a more pervasive thing in our industry? So that's one question. Another is just an observation that we actually do work in a wonderfully...it's an amazing industry where being a developer, there are so many jobs out there. And I don't want to discredit anyone's efforts if they're earlier on and struggling with that. But broadly speaking, it is a developer's market trying to go out there and get jobs and extremely well-compensated, as a general rule. But does that come with this inherent burnout? And if so, which I'm not sure is true, I wonder if maybe we're just more vocal and maybe we actually share more in public. We have more blogs and podcasts and things like that. And that's just a common thing for developers, and so we hear the stories more often, whereas maybe in other industries, it is actually very common, but people are suffering in silence. But also I do wonder, our industry is still so young. The work that we're doing is changing constantly, and that churn and that working in the unknown maybe there is an inherent nature. So that's a bunch of pontifications off the top of my head. And I have no idea what the answer to any of them is. But I am intrigued because it does feel like the shape of burnout as a concept in the developer world is perhaps a little overrepresented, or maybe it shows up more than I would expect. And, I don't know, is the work that hard? I don't know. But then I hear these stories constantly, and I definitely have felt it myself, so maybe. STEPH: Yeah, maybe. Yes, I do think the work is that hard for the record. It's challenging work. I enjoy it, but it is challenging work between figuring out the tech but then also everything else that comes with that. I don't have anything to back this up, but I suspect that a lot of other industries are also experiencing burnout. And I just happen to be more aware of it right now because I'm hearing it more from my friends and the people that I work with. And I suspect that's more directly related to we all just went through 2020, and probably a number of us were trying to forge ahead and get through that time. And so there may be a lot of us that are just now dealing with those consequences of where we just pushed ourselves through a very hard time. And now a lot of that is manifesting and surfacing around really identifying the damage that we may have done to ourselves by just prioritizing work and trying to put our head down and get the work done even though there was so much happening around us. And I suspect that may be a contributing factor is that now people are really starting to recognize, like, oh, I feel this way. And maybe there's time for me to address it. Or frankly, it may not even be that there's time, but your body is just like, okay, I'm done. I made it through the past year or however many months, and I'm going to start shutting down on you. I've given you all the warning signs, but now we're here. We're at a breaking point. So I don't know about the other industries, but I do know the reason that it's more on my mind is because I'm just hearing it more from people, and they're just expressing it. And so, it has become more of a focal point for me, and I've experienced it myself more recently. I'm sure I experienced this back early on in my career, but I took a strategy of well, I'm just a junior, and I just have to get through this. And I have to build experience. For the record, that is not a healthy mentality. I'm just being honest about where I was in my life. And so, I didn't really stop to think about it, but perhaps it is becoming more normalized where people are having more open, honest discussions about where they're at. And if other industries aren't talking about this, I would love for them to. So to round that out a bit, this is something that is just very interesting to me. It's very top of mind. So I suspect I will be sharing a lot more content in future episodes that are just around this. How do we recover? And then how do we balance? How do we work hard without burning out? CHRIS: Work hard, play hard; those are the two placards that you have. Well, I look forward to continued conversations on all of those topics because they are sort of that's the story that underpins all of the work that we do. So I'm very interested to chat more about that. STEPH: Thanks. So what's going on in your world? How's your week been? CHRIS: Oh, my week has been fine. My topics are going to be way more mundane and tech-focused. But let's see, a couple of things, so one is that Stack Overflow has their I think it's Annual Developer Survey. And this year, the results came out, and there was an interesting standout, which was that Svelte was the most beloved framework, which was very exciting to see. Granted, you always have to take these sorts of stats with a grain of salt. But Svelte was 71% loved and 23% dreaded, which they give it as a ratio of how many people really love this thing versus how many people really hate this thing. And so Svelte, 23% of people who have used it are like, I hate that, but 71% loved, so that's a 48% net approval rating. Versus React which was 69% loved, 31% hated or dreaded as the word would be, so that's a 38% net approval. And then Vue, interestingly, was 64% loved, 36% dreaded for a 28% net approval rating. So, yeah, Svelte was decidedly winning in that. But again, the big grain of salt there is looking at the usage stats. React has 40% usage. So of all the respondents, 40% of the people responding to the survey were like, yeah, I've done React professionally, which is a wildly high number for a JavaScript framework. Vue was at 19%, so roughly half of React's usage, which I'm actually impressed that Vue is that high. And Svelte came in at 3%, so it's definitely still in the early adopter strong fan phase. So it makes sense that they would have this outsized high rating. I'm actually surprised that Vue wasn't higher than React, given that. Because I feel like more people are cajoled into React versus Vue can be more of a choice. And I would have expected this to shape out a little bit differently, but yeah, that's the story. STEPH: That's really cool. I liked how you described that as in the very early adopters' strong fan base stage. CHRIS: But nonetheless, the people that are using Svelte do seem to really like it; that's coming through in these numbers. And that definitely is my experience. I love Svelte and would love to continue using it for as long as possible. But really, I want a lot of other people to start using it. I want to really grow the usage base so that there are more libraries, and frameworks, and blog posts, and just mindshare in that space because I really do believe there are some wonderful ideas in Svelte. And it's just so straightforward to implement things that I just want more people hanging out. So that's one quick thing. Another quick thing is, I've been using a utility lately or a program called CleanShot X, which is a replacement for the built-in screenshot utilities on OSX, and it is just fantastic. So I can capture a screenshot. I can capture a window. You can capture a GIF or a video. And then you can do little trims and annotations. And then it has this really nice feature where after you take a screenshot, it just hovers in the bottom corner of your screen and is easily accessible. So if you take a video, and then you want to upload it to a Trello card, it's just floating there waiting for you. You can actually dismiss it and push it down, but it's still peeking up from the bottom of your screen, and you can pull it back up, and you can have a couple of them. But it just really makes the whole workflow of grabbing screenshots or videos so easy. And I cared deeply about that because now that I have this tool, I'm all the more inclined to grab a screenshot or a video with just about every piece of work that I do. So it's going into pull requests; it's going into Trello cards. And it's so nice to have a utility that just really makes that as easy as possible. STEPH: I really liked how you mentioned that you can annotate because I often...I'm laughing as I'm thinking about this. When I am taking a video of something that I'm going to share with someone, I will use my mouse to indicate, oh, this is important. And so I circle around it and do silly things with my mouse to try to indicate but being able to annotate would be so much nicer. I know there is another tool that you're really excited about that I can't remember off the top of my head right now. Do you know the name of the tool I'm thinking of? CHRIS: Was it Loom? STEPH: Yes, Loom, because I also used that for a little while, and I've really enjoyed it. So I'm curious, how does Loom and CleanShot X stack up? Is one replacing the other, or are they complementary tools? CHRIS: Mostly complimentary. Loom is great because it hosts the videos, and you can also do audio capture, although I wonder if CleanShot has that as well. CleanShot also, I think, has a hosting thing. So I think there's a strong overlap in their functionality, but right now, I'm using both. And definitely for screenshots and things, CleanShot owns that end of it. And I think it's more likely that I could have CleanShot as the entire tool that I'm using. But I'm still using Loom for this is a walkthrough where I'm going to talk to you about a thing. I want to make it available at a URL that everyone can see rather than actually getting a GIF or MOV artifact file on my computer. So ever so slightly different, but I think of them, CleanShot X is probably the ideal one. But yeah, I'm still reaching for both. So the one other thing I did want to talk about is I have been expanding our use of the dry-monads within the project that I'm working on. And I've done some things. I did some stuff, Steph, and I think it's good. STEPH: Shtuff with Shteph. [chuckles] CHRIS: Shtuff with Shteph, yeah. I'm definitely pushing the envelope of how much we're leaning on these concepts within the app, and I continue to question it. I'm really intrigued to see what happens when other folks come into the project, and they're like, "Why can't I just get the value? It should be a string. Why isn't it a string? Why is it a string that I have to do a ceremony and a dance to get at?" And I'm like, "Well, because everything can fail, you know, like life." But what I have done here so dry-monads is the project that we're using, particularly their result type. So the result represents something that can either succeed or fail. And so we either have a success, which is this wrapper around the value that's successfully executed. So say we make an API call, we get back a response. If we get a 200 or maybe even a 300, then we get the data, and that's a success, or we get a failure and the error message. But fundamentally, we're modeling that in our system in a way that downstream from that, we have to basically determine if it was success or failure. So we're really encoding into the system; listen, pretty much everything can fail, so let's be careful with that. Let's be intentional and purposeful with it. But there is an interesting thing where these objects have fmap as a method on them. So fmap is a way to transform that wrapped value, but fmap works specifically on the success case. So if you make an API request, you get back the data. Everything's great. You can call fmap, and it will yield into a block that data. You can transform that data in some way, and then it will rewrap it up as a success object. So you can operate on this thing as if it has been successful. But in the case that it's a failure, it will just ignore that transformation because you don't want to transform the failure. It's going to be a totally different shape of data. So you want to separate those. We're getting into functors and monads here. So I'm going to handwave a bunch. But fundamentally, that's the thing that we're going for here. But we found ourselves really wanting to work with both sides. So we make this API request, and in the case that it succeeds, we actually want to transform and actually slice out a piece of data from the nested object that we get back. So that's one transformation that we want to apply on the success portion of the aisle. But then, we also want to transform the failure message. It turns out this backend is giving us very unfriendly error messages. So we want to take those and transform them into friendlier user-facing error messages. So it turns out we want to map both sides. And so I went to dry-monads, and I was like, what do you got? I want to know about this in the world. And it turns out they did not have anything. So I started looking into it, and it turns out this is a concept in the world of functors, specifically. Or, more specifically, I reached out to a former colleague, Sid Raval, a former thoughtboter as well. And he likes the functional programming stuff, so I knew he was the right person to ask about this. And he pointed me at bifunctors. So I found myself in a new space and category theory which I never thought I would explore a category theory in this way, but here we were. So a bifunctor basically is exactly what I was talking about where there are these two branches. In our case, it's either success or failure, but it allows you to operate on both sides, both branches. So the method or the function that gets applied there is bimap. So it's fmap which I don't know why it's f why that's typically what it's called. Success map would be a really great word in this context in my mind. So success map only deals with the success side, but bimap takes two different transformations, one for the successful outcome and one for the failure outcome. And it allows you to very directly talk about what you want to do with that. To be clear, dry-monads has a function called Either or Either, depending on how you want to pronounce it. And that takes two Lambda proc-type things because it's Ruby, and functions are kind of weird in Ruby. But it yields you either the successful value or the failure value, but then it doesn't rewrap them. So it's meant to be the terminal. You use that in a controller when you're either redirect or render or whatever it is you want to do. What I wanted was something for mapping, so staying in the success object or the failure object but yeah, bimaps. So I introduced my own extra wrapping layer. This is where things go off the rails, I think. We now have our own internal result objects. I thought about monkey patching for a while. I convinced myself monkey patching was a bad idea. Now that I've implemented as an extra layer of wrapping and I got the wrapping wrong like four times, or I kept recursively wrapping and re-wrapping, and there's a reason people aren't supposed to write these things themselves. But I think monkey patching may have been a better idea here, or maybe I should have never done any of this. We ended up with a stable working implementation and a nice test suite that covers it. But I introduced bimap and failmap as two different methods on our success object. And I did it by doubly wrapping the result objects. So we have our internal result, which wraps the dry-monad result. And I'm worried about that future situation where a junior developer comes on the team and is like, "I don't know what any of this is." STEPH: I love the weekly progression of I've done some things, and let's talk about it. And then seeing this glimpse into your argument with yourself as to yes, but we need it, and we want it, and it's not something that's defined. So let's go ahead and implement it. You ended on a high there where you talked about the fact that it is nice to work with. It does the thing that you'd like it to do, and it's well tested; I love that part. I'm deciding which thread to go with because there were a lot of interesting bits in everything that you shared. And I'm intrigued about the monkey patching as to why you think that could have been a better approach. Could you talk more about that one? CHRIS: Sure. So I ended up having to introduce the secondary object that then wraps the result. And so if you poke at that even a tiny bit, you start to see this like Russian doll nesting of it's our result wrapping a result, wrapping a value. And it's a burrito with three different tortillas wrapped around it. And if you want to add guacamole, you got to unwrap all three burritos. I'm sorry, this is a terrible monad joke here. [laughs] STEPH: For the record, if Taco Bell is not offering that, they should now, now that you've created that. [laughter] CHRIS: There is one, but there's usually cheese in between the layers. They're not just extra layers of tortillas, so that's what I've got here. It's way too much tortilla, and that's sad. You don't want that. And it's confusing. You're like, wait, does this one have two or three layers of tortilla? So when I was working on it and when I was implementing our additional wrapping layer, I tricked myself multiple times. And my test suite was telling me that things were working, but I was testing incorrectly. And I was like, oh man; this is very subtle. And even though I'm deeply immersed in the context here, I'm still struggling with this. So the question is, did I successfully encapsulate all of this? And now anyone downstream just gets to use it,, and everything will be fine. Am I the heroic programmer that made the perfect abstraction that no one's ever going to struggle against, or was that pain that I was feeling representative of the complexity of what I'm trying to do here, and maybe I got it wrong? And so then the monkey patching side is we've got this one layer of wrapping. What if we just monkey patch the result such that it's got these new methods? I'm not adding an additional layer. I don't need to deal with double mapping through multiple layers, and I just get to deal with the context that I have. So I did an initial spike of an implementation that way, but I talked myself out of it because #monkeypatchingisbad, but I don't know. I don't know where I'm ending here. I am happy with where we're at, but I am aware that I may be sad down the road. STEPH: I'm just dying over here [laughs] from everything you're saying. I have this image of you staring out the window thinking, am I the hero, or am I the villain? And figuring out who you are in this scenario with this abstraction that you've created. CHRIS: To be clear, it's raining, and I have a nice rocks glass of scotch in my hand. And I'm just wistfully looking out the window trying to determine what's true. That's pretty accurate, actually. That's pretty much what's going on here. STEPH: I think we're just going to need updates as it progresses along. CHRIS: I will say overall this paradigm...so failures can happen at all levels. These command objects, which are the core of where this is coming in in the application, really represent the workflows of the app in a wonderful, testable, straightforward way. So I love that part. And if I have that, it implies that I have to have this other stuff. I don't think I can get away from that. The other thing is I've always loved Gary Bernhardt's Functional Core, Imperative Shell, which is a conference talk that he gave a while back. I talked to Gary about it actually when he was on the show, and we can link to both that and the conference talk because they are fantastic. And I just love the way he thinks about software. But that was always a little bit abstract for me. Like, what does that actually look like, though, in say, a Rails architecture? And I didn't have a great answer. And now this thing that I'm doing is the closest I think to that where the innards of the system are almost functional even though it's Ruby. We're leaning into that. And so we have these command objects that take in some data, and then they operate on it, and they yield out these results. Did it go well, or did it not? We've got the railway-oriented stuff, which again I'll link to. I link to now every third episode, apparently, but here we are. And that just models the reality of these programs in a really great way. And then we've been trying to introduce some, not rules per se, but guidelines as to how we interact with these things. So inside of the core of the application, we're trying to be as functional as possible. We do transformations on these result objects, but that's it. And then it's only really in the controllers or the mailers that we are doing unwrap or deal with the actual nested value, but everything else is working on conceptual values or whatever it is…these result objects. And that's actually been really nice, and it's allowed us to have really nice error handling within the app. The logging is very straightforward. A lot of apps that I've worked on in the past, I've just silently thrown away many error cases or edge cases. And this is a really great way to sequence the work that needs to be done but never throw away data that you would want. And so far, I'm finding it to be really great. And I'm seeing very obvious ways to hook into it like, oh, this is where we need to find the user-facing error message versus this is where we figure out what we want to log. And so, in some ways, it's great, but I am still open to the idea that this was a terrible idea. I always remain open to that idea to be clear. [chuckles] STEPH: I love how that's the feedback that you're always open to it. You're always trying something new, and then you're constantly going back to revisit; was this a good idea or a bad idea? To go back just a little bit, I do absolutely love the priority and focus that you're giving to the failure state because I feel like that is an area that we, as developers we're very skittish of that failure state. And I realize I'm projecting here. So if you're listening, feel free to take that however you like; maybe it doesn't apply to you, maybe it does. But the failure state is like you said, it's life, it's important, and it's something that is going to happen. And it is something that we should make accommodations for. And I find that we're often very hand-wavy with a failure state. So I love, love how much you always prioritize the failure state and make that something that people can work with and understand. Versus then when something goes wrong, then that's when we have to start to understand the failure state. I recognize there's a balance there because you're not going to know the failure state until you encounter it, but there are ways that we can still optimize to have observability into that failure state for when we do encounter that failure. CHRIS: I've definitely seen that as an evolution in my own thinking, how much am I focused on how easily can I do the core thing, the happy path versus how robustly can I do all of the variations of what this app needs to do? What if the network's down? What do we do there? I do occasionally worry that I've overcorrected on that. And it's like, you know what? This thing that I'm worried about that I'm protecting against in the application is a 0.01% edge case. It's going to affect almost no users, and we're both putting time into trying to avoid it. But also, there's code complexity that comes from trying to handle all the different variants. And so there's definitely an optimization, and I feel like, at different points in my life, I've been undercorrected or overcorrected on that. But I think if I were to describe the arc of my career, it is desperately searching for that optimal path and trying to find exactly the right amount of error handling to apply, and then yeah, then I'll be happy, then it'll be great. But it is like when I look at DHH's classic 15-minute I'm making a blog, look how much I'm not doing, I'm like, sure, sure, sure. Show me that in three years, though. What does the blog look like? How easily can I add a new feature? What happens when there's a bug in production, and a user reports it? Can I chase it down? Can I figure it? Can I fix it? These are the questions that I care about now, almost to the exclusion of what's the first run experience like? I almost don't care about that at this point. Because I spend my time…six months and on that's where the hard work is. And so the first couple of months where you're figuring things out, that's not the hard work of this thing. And so, I'm very strongly focused on those later periods of time. But again, I'm open to the idea that maybe I am overcorrected there. STEPH: I think it does highlight more of a shift in our career. We're still building, but we have experienced the maintenance side as well, and we felt that pain. And so that has led to perhaps overcorrecting, or maybe it's the correct amount of correction. But I do like how you highlighted there is always a cost to each side and those are usually the questions that I'm asking myself when I'm thinking about the failure mode and how much I want to optimize for the failure mode is how much does it cost when this fails? Who's it going to impact? And how much does it cost for me to make this more observable or to address this failure state? And then I try to find the balance between those two. Because you're right, it's not free to address that failure state. And so I may not want to fully optimize to handle that if it's going to be a very small percentage of users that actually are impacted by this failure state, or it seems very rare this is going to happen. But then still finding ways to know that if it does fail, then I can say, "Okay, I'll come back, and now it's worth the investment to improve this." CHRIS: When you said earlier that this is really hard work that we do, I don't know that I believed you. What you just described sounds super easy. You just handle all the stuff, and you dynamically optimize for the needs at the point in time. And that seems easy. [laughs] STEPH: Super easy, yeah. [laughs] Way to bring it back. Well, speaking about observability and failure states, that does lead nicely into a bug that I was working on this past week where there was a particular page that was loading very slowly. And it was something that we'd heard from users that then they let us know that this page was either taking a very long time to load or, frankly, it was just crashing. And then they were never getting to that page. So I happened to be the one that then picked up that ticket. And I went to reproduce the issue, and sure enough, when I clicked on this particular link and then started counting, it took about 14 seconds for that page to load, which is a very long time. And then also sometimes it was just crashing. So the first place that I went was to our error tracking. So I went to New Relic to then look to see okay; maybe there's a slow query. There's something here that's creating this performance issue, but I couldn't find anything. And New Relic does a great job of breaking down all the different response times so I can see how long Postgres is taking, Redis, and Ruby. All of those looked very normal. I couldn't find anything that seemed alarming that was indicating that the page was struggling to load even though I could reproduce the problem. Because I was clicking on it several times thinking, okay, well, if I just do this a couple of times, New Relic's going to notice, and then I'll get to see something, a little breadcrumb that's going to lead me in the right direction. And while I was waiting for New Relic to surface something helpful to me, I mentioned to another developer the issue that I was triaging. And they said, "Yeah, that page has been getting progressively slower, and we don't know why." And I thought, ooh, okay, I'm intrigued even more now as this is something that has been escalating over time, and now we've hit this threshold that we're working on it. And I discovered that in New Relic, I can look specifically at Postgres, Redis, Ruby, all those different response times. But there's a browser monitoring tool that I had not used before. And it showed a lot of helpful information around first paint, First Contentful Paint, window load, all of those areas. So I started diving in and found session tracing, and it was there that then I saw New Relic was telling me, "Hey, you have a page that's taking about 14 to 15 seconds to load." And I thought, okay, I feel validated now that at least New Relic is recognizing this issue. I have seen this issue, but I still didn't know why it's occurring. So the next tool that I used that I don't know if I've used before or it's just been a very long time; it felt fresh in the moment, but it's the Chrome DevTools, the performance tool. And so you can open that up in your inspector, and then you can go to the page that you want to track the performance. And then you can essentially say, "Hey, go ahead and start profiling and reload this page." And it has so many stats when it finally does load. It has CPU flames charts, which essentially it visualizes a collection of all the stack traces. It has a film strip, so you can actually see the rendering progress of your website along different time points. So if you wanted to go back to a specific time, you can see what did the webpage look like at this point? And then if you go a little further, okay, how much was loaded at this point? So there's a lot of interesting and a little overwhelming information that's there. But the thing that did catch my attention is there's a chart. I don't actually know what this chart is called. It's not a pie chart because there's no center to it. So it looks like a donut chart, and it's broken down. And it shows you the loading times, scripting, rendering, painting, all of those different values. And the rendering time was taking 35 seconds. And I was like, ooh, okay, that is meaningful right there. So then further investigation, now that I knew what I was looking for, I wasn't looking for something more on the back end. I was looking for something more on the front end. And I didn't think it was necessarily JavaScript because we also have JavaScript on this page. So at least this was helping me get a little bit closer before then I went into the codebase to start seeing what's happening. So once I knew it was a rendering issue, I went to look specifically at that view, and we have a form on that page that was generating an empty HTML select option for every record that's in the system. So let's say that you're ordering from a restaurant. On this page, there was a form where it had a list of all the restaurants, and, in our particular case, we had about 17,000 restaurants. So there were 17,000 empty HTML selection options, which could have some significant impact on the DOM and page load time. And that was the piece that was really leading to the performance, is the fact that we were rendering that empty select option. So from there, it was then just triaging okay; we don't really need to render all of these restaurants. There are ways we can scope this down. And that way, we're only showing a little bit at a time versus creating all of these empty options. I should clarify they're empty because part of this form is you select from the first dropdown, and then it populates the other one, and it gives you more information. But the way that this form was implemented, it was actually trying to show all of them at once. But it didn't actually have the data yet, but it was doing like a restaurant.all type of count. And so then that's how we were getting that many empty options. So it was a very interesting journey. It was very helpful to learn that New Relic has this browser monitoring tool. And I really appreciated their performance tool. And circling back to Chrome, Safari may have something similar. But I found Chrome's performance tool very helpful because then it helped me realize that it was the rendering. And so then I could really focus on the markup and the view versus knowing it wasn't more in the database layer. CHRIS: I really love the description, almost like a mystery novel of these bugs when we encounter them. Because if you just get to the end and you're like, oh, I was rendering a select, and it had all of this, that loses so much of this story because again, the coding is not the hard part of the work that we do; it's the figuring out what needs to be done. And in this case, that journey that you went on to find the bug. I really like the point where you said, "And someone mentioned this page has just been getting progressively slower over time." I was like, ooh, that's interesting. Now we got a clue. Now we've got a lead, and we'll chase it down, and then finding the browser tools and all of that. And also, as an aside, browsers are just such an immensely impressive piece of technology, everything that they do. And then you add the DevTools on top of them and magical stuff going on there. But yeah, also probably don't render 17,000 empty selects. [laughs] That seems like it will get you in trouble pretty quickly. But also very easy to get to and especially if there is this incremental, slow creep over time where it's like, oh, that page seems like it's a little slower. It's a little slower still, and it just keeps creeping up over time. But yes, I appreciate you taking us on that journey with you. STEPH: Yeah, it was a fun discovery. And it made me realize that while we have alerting set up for some of our other queries, we don't have anything set up for the browser time. So that would be a good optimization on our side is to start alerting us before a page gets to the point that it's taking that long to load to notify us sooner. So we don't have to wait for a user to reach out to us, but we can triage sooner. CHRIS: I also do love the idea of extending the metrics that we hold ourselves accountable to all the way through to the user, and so the First Contentful Paint and all of that. The one that I really love recently that has captured an idea that I struggled to put words to is the Cumulative Layout Shift. Are you familiar with this piece? STEPH: Uh-uh. CHRIS: So there's like, how quickly does the page render? That's the thing that we want to know. But a lot of applications these days, particularly single-page apps, render pretty quickly, but they render what ends up being a skeleton or a shell of the page. And then behind the scenes, there are like ten different AJAX requests happening. And as the data comes in, suddenly, a part of the screen will render. And they'll render a list of items that they just got back from the back end, but they're still waiting for the information to populate the header. And so if you look at that page, it's constantly shifting as it's loading and just feels, I don't know, flimsy in my mind. But I didn't have a good word, or I didn't have a metric or a number to attach to that. And then I learned about Cumulative Layout Shift, and I was like, oh, that's the one. Now you've mapped the thing that I was feeling. And I like when that happens. STEPH: Is that the difference between the first paint and First Contentful paint? Is that similar? CHRIS: I think it's more than that because there are not just two discrete events in this. It can be multiple. And so it's like, how many different times did the thing that's rendered on the screen move around? And so if images are loading, but you didn't have a proper image height and width set, that's another way that this can happen. Then initially, the browser is not going to reserve any space for that because it's like, I don't know how big this is. And then, when the image shows up, it now knows the intrinsic height and width of the image. So suddenly, your page is going to jump from that. You can get ahead of that by putting the height and width on your image, and that's great to do. And frameworks like Next.js have done some really amazing work of making that a build time step as opposed to something you have to do manually. But then also, more generally, how do we handle this? React is doing some interesting work with Suspense, where you can aggregate together multiple different loading states into one collective thing. It's almost like promise.all, but for your page. I haven't followed that too closely, but I know that that's framework-level work that's happening over there. GraphQL does a really great job of allowing you to group queries together. So there's a solution on that side. But broadly, if you just render some HTML on the server and you send it to the front end, then you don't have this problem because you just have one ball of HTML. The browser is pretty good at rendering that in one pass versus if you have single-page applications that are making a handful of AJAX requests that will resolve in their own timelines and eventually paint to the screen. You get this different shape. And then the worst case of it in my mind is you render half the page. And then suddenly, one of the requests realizes the JWT has expired, and suddenly, you get thrashed over to the login page. Please don't give me that experience, developers, please. Please do something else that isn't that. That makes me sad in my heart. STEPH: Prioritize the failure state. That's what I'm hearing. CHRIS: Callbacks. STEPH: Well, on that wonderful circular reference, shall we wrap up? CHRIS: Wait, I thought circular references were bad...Never mind. Let's wrap up. The show notes for this episode can be found at bikeshed.fm. STEPH: This show is produced and edited by Mandy Moore. CHRIS: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review on iTunes,, as it really helps other folks find the show. STEPH: If you have any feedback for this or any of our other episodes, you can reach us @bikeshed, or reach me on Twitter @SViccari. CHRIS: And I'm @christoomey. STEPH: Or you can reach us at hosts@bikeshed.fm via email. CHRIS: Thanks so much for listening to The Bike Shed, and we'll see you next week. All: Byeeeeeeeeee. Announcer: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.

SGGQA Podcast – SomeGadgetGuy
#SGGQA 218: Pixel 5a is ALMOST here, ROG 5S, T-Mobile and Gigabyte Data Breached

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Aug 16, 2021


LOT’s of news this week! Apple is worried you don’t understand their new CSAM scanning policy. The EU is looking to force Apple to use USB-C on iPhones. Google introduces new protections for minors. Asus is showing off a refresh for the ROG 5. And the Pixel 5a is ALMOST here! Let’s get our tech … Continue reading "#SGGQA 218: Pixel 5a is ALMOST here, ROG 5S, T-Mobile and Gigabyte Data Breached"

Knightwise.com Mediafeed
KW1606 – Storytime: Joplin Edition

Knightwise.com Mediafeed

Play Episode Listen Later Aug 11, 2021 11:59


A quick mini-podcast this week inspired by the Knightwise.com community and a discussion over on the Discord. LINKS Joplin DISCORD The action is happening over at our Discord server: Join by clicking this link CREDITS Mix & Production: Keith Murray

SGGQA Podcast – SomeGadgetGuy
#SGGQA 217: Apple Destroys Privacy, Galaxy S21 Sales Tank, Xiaomi Top Smartphone Brand

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Aug 9, 2021


The FCC launches a new map to compare LTE coverage. Podcasters are pushing back against Spotify. Galaxy S21 sales are tanking while iPhone 12 Pro sales are on the rise. Xiaomi jumped up to the top smartphone brand last quarter. And we definitely need to talk about Apple. Yikes. Let’s get our tech week started … Continue reading "#SGGQA 217: Apple Destroys Privacy, Galaxy S21 Sales Tank, Xiaomi Top Smartphone Brand"

SGGQA Podcast – SomeGadgetGuy
#SGGQA 216: Audeze's $4500 Headphones, Pixel 6 Pro Details, More People Paying for Spotify

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Aug 2, 2021


Sky News has been blocked on Youtube! Apple might be confirming iPhone 13 delays or shortages. Spotify brought in more paid users than free listeners. EVERYBODY suing Disney these days. Google dropped a TON of info on the upcoming Pixel 6! And I GOTTA ramble a bit on these expensive cans I played with at … Continue reading "#SGGQA 216: Audeze’s $4500 Headphones, Pixel 6 Pro Details, More People Paying for Spotify"

SGGQA Podcast – SomeGadgetGuy
#SGGQA 215: FTC Right to Repair, Surface Duo 2 Leak, Nord 2 Reactions, Working on the Road

SGGQA Podcast – SomeGadgetGuy

Play Episode Listen Later Jul 26, 2021


The FTC is backing Right to Repair over state laws that prevent it! Your hearing health is likely a predictor for mental health issues. OnePlus announced a new Nord! Google details their Watch strategy. A leak shows off what the Duo 2 might look like. And we’ll spend some time talking about what it was … Continue reading "#SGGQA 215: FTC Right to Repair, Surface Duo 2 Leak, Nord 2 Reactions, Working on the Road"

Knightwise.com Mediafeed
KW1605 – Data and the Erosion of Privacy

Knightwise.com Mediafeed

Play Episode Listen Later Jul 14, 2021 48:46


On this week’s walk Knightwise presents some food for thought about how we manage our private information online, and how those managing our social networks manage us as a result. LINKS Its Me App Hot Pink Slippers Flickr 30k Dataset Don’t use ISP DNS DNS DNSSec Firefox Brave Protonmail Joplin NextCloud Belgian Trains DISCORD The … Continue reading "KW1605 – Data and the Erosion of Privacy"

Rene Ritchie
Why Apple Has 'Crack Marketing' Names for Mac

Rene Ritchie

Play Episode Listen Later Jul 8, 2021 4:51


NO ADS + bonus content! CuriosityStream & Nebula for less than $15 a YEAR! https://curiositystream.com/reneritchie/The original Mac OS X beta, way back in 2001, a Steve Odessy, was code-named Kodiak, after the Alaskan brown bear. After that, Apple switched Mac OS X codenames to the big cats, starting with 10.0 Cheetah and 10.1 Puma. But then… a funny thing happened on the way to the keynote stage. Steve Jobs decided to use the private codename… as a public marketing name. Instead of OS X 10.2, he oh so proudly proclaimed OS X Jaguar. Technically jag-wire! But, why?See Privacy Policy at https://art19.com/privacy and California Privacy Notice at https://art19.com/privacy#do-not-sell-my-info.

The Bike Shed
298: Jawsification

The Bike Shed

Play Episode Listen Later Jun 29, 2021 42:30


Chris gives some small updates on working with Svelte. He really likes Svelte so far. Svelte's great. Modals are complicated. He also talks about using a little JavaScript library, called Quicklink. Steph talks about sending data to a third-party system and using feature flags to help deprecate some code. Finally, they both riff on a listener question on consulting. Said listener asked, "Do you think about your work as 'consulting first' or as 'building great software first and then good experiences for your clients will follow naturally?'" Find out their take and give us your own, here on this episode of 'The Bike Shed!' Bike Shed "Nate Berkopec" Episode (https://www.bikeshed.fm/296) Svelte (https://svelte.dev/) Quicklink (https://getquick.link/) Boring Rails: Skip the bullshit and ship fast (https://boringrails.com/) mtime (File) - APIdock (https://apidock.com/ruby/File/mtime/class) Transcript: STEPH: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Steph Viccari. CHRIS: And I'm Chris Toomey. STEPH: And together, we're here to share a bit of what we've learned along the way. So hey, Chris, happy Friday. How has your week been? CHRIS: Happy Friday. My week's been great, yeah. I've been writing a lot of code, moving things around, planning some features, and all that fun stuff that goes into building an app, so I'm enjoying that process. I'm also halfway through listening to your recent episode with Nate Berkopec, which was absolutely delightful, well, at least the first half that I've listened to so far. I assume the rest will continue to be absolutely delightful, but it does remain to be seen. So I'll report back next week when I've listened to the whole thing. But yeah, that's great. And I'm glad that Nate got to come on, and we got to share a little bit of his story as well. STEPH: I like how clear you are in terms of like, "The part that I've listened to so far is great, but I reserve judgment until I've heard the rest of it." [chuckles] But that's awesome. CHRIS: The thing about being a developer is it has broken my brain such that I am overly specific all the time because I just argue with a computer all day. It's what I do. So then I start talking to humans, and I'm like, wait, I should probably behave differently now. And I got to unwind some of those computer fights. But anyway, and let's see, small updates working with Svelte, really like Svelte. I'm leaning into it more and more and embracing...I think I'm starting to understand the aspects of it that I really like. And one of the things that I really like about it is that it is somewhat underpowered. And what I mean by that is working on React applications, I find that I can do some fancy stuff, and I can express it really well in TypeScript. And I can really go for it and create some components that are wildly variable and configurable and can take in any combination of props and do all sorts of things. And I can slice out tiny, little components and do all of this. When I'm doing that, I enjoy it. But in Svelte, I have a little bit less power in my control. Svelte is closer to HTML, CSS, and JavaScript fundamentally. So you can make components, and I really like that. You can bundle up the pieces of functionality and display and formatting, and all of that, but it's not quite as powerful. It's not quite as expressive. And I've actually found that to be a useful limitation, which is an interesting frame. It's not something that I thought I would say, but I'm finding that the code that I'm authoring in my editor is so much closer to the code that's actually going to be presented to the end-user. That is really useful in my mind. I find that to be really valuable. There are small things like in Svelte; you can actually say class equals when you're trying to define a class on an HTML element. It turns out I really like that one instead of having to say class name or similarly HTML for. There is a handful of them in React that you have to change the name of. So if you copy a snippet of HTML from the web, and then you dump it into your editor, if you're working in React, you have to change a bunch of stuff. It doesn't work right away. And it's a small thing, but I found that I really seem to care about it. But there's the “it's nice that it just works” version. But I feel like there's also an actually practical, meaningful edge of it is so much closer to the thing that's actually going to be in the browser, and I like that. STEPH: I liked the phrasing that you used just a moment ago where you said, "Useful limitation." Since I haven't used Svelte myself, one of my understandings is that you like the fact that it is that low JS in terms that we are introducing this framework, but it's not as heavy-handed as React or another framework that you could retour. But then you also said you're running up to areas where you feel like you're missing some stuff from React, is what I'm hearing. Is there a particular feature, or do you have a concrete example to help me understand some of the stuff that you are really missing? CHRIS: It's not so much that I feel like there are specific features missing, but as a pointed example, I am not able to pass in the DOM element that I would like the component to render as. That's a weird thing, but often, component libraries will do this. So you have a button component, but the button can render either as a literal HTML button element or an anchor element. And you can pass in as equals and then button as the string there. And in React, you can do that, and then you can actually do some type inference across it and say, "Okay, now the rest of the props that you can pass in are button props.” And if you pass in as equals a, so implying that you want it to be an anchor or a link, then it will constrain you to the link properties and say, "Oh, you must have a HREF now." That's really cool that you can do that. It's also super complicated, and the TypeScript representation of it, while it works, is very, very complicated and the types of errors that you get. The complexity of what you can build with React is really interesting. But I worry now that I've spent a good bit of time in Svelte, I worry if it's overpowered. I've worked on plenty of applications where the system as designed in React, all the set of different components is very, very complicated. And you sort of have to learn that system in order to be able to work in it, whereas in Svelte, you just start, and you're writing in HTML and CSS. And then, as you need more fancy stuff, you can slowly layer it in. And to be clear, Svelte definitely has plenty of power. This past week, actually, we were working on a modal component, but we were really focused on accessibility, which is probably a good thing that you should do, but it turns out modals are very hard to get right. The dialogue component that should exist in HTML is not complete, and it's not a thing that we can rely on. So we have to do certain things ourselves. So the idea of focus trapping when the model pops up, we need to say, oh, okay, the focus should be trapped inside of here, so you can tab forward and back, but it's going to stay within that modal component. There's actually a way that you're supposed to portal it. So you move it outside of the documents so that you can make the rest of the document...I want to say aria-hidden is the property, but you're basically saying the entire rest of the document that's behind this modal component should be inert to a screen reader essentially or invisible to a screen reader while the modal is up. And doing all of those sorts of things is super complicated. After you close the modal, you're supposed to refocus the button that opened it, the triggering element, and that's a tricky one where you have to pass down a reference to something. And that was all very expressive, actually, very straightforward in Svelte in a way that I was really impressed by. So it definitely has all the power that you need but not any more than what you need. Or there is a small line of it's just right. STEPH: So we should just scrap modals. That's one of the things that I'm hearing from you. So I just want to clarify because I do feel a little confused because in the beginning, it sounded like you were saying that Svelte is wonderful, but you do feel like you're missing a little bit of functionality there that you do receive with other frameworks like React. But then that last thing you said where “it's just right” sounds like it's the Goldilocks. So I'm a little confused as to exactly how you're feeling about Svelte in the moment. CHRIS: Yeah. I'm probably not being as clear as I should. I am a big fan of Svelte, so as the first answer, a big fan of Svelte. I'm recognizing that, strictly speaking, it is somewhat less powerful than React. But I'm also trying to say, perhaps failing at saying, but trying to say that I like that, that I'm finding its constraints are useful. React can do a ton of stuff. You can represent a real impressive array of component functionality and have components that take 17 different props that covary in different ways, and it's very complicated. And I've worked on plenty of React applications where I just have to stare very hard at the component library for a while. And I'm like, ugh, I still don't know how this works. And it's this custom bespoke language where Svelte feels like it is much closer to the thing that we're actually doing, which is rendering HTML and CSS and JavaScript and whatnot, and I like that. I'm finding that very useful. I'm finding that lack of power not to be a hindrance but, in fact, to be useful. STEPH: Hmm. Okay. I like that last part. Yeah, there are often times where I feel like the less powerful something is, even if it means a little extra work on my end but it's clear as to the work that's being done...I'm going to take it back a couple of years to when I was first learning Elixir because that's how I felt jumping from Ruby to Elixir and from Rails to Phoenix, where suddenly I felt like I had more clarity. There were some things that I had to do more on my own, but I felt more clarity as to what exactly was being done versus Ruby and Rails doing a lot on my behalf. So I can certainly relate to that. CHRIS: Yeah, I think that captures it well, that the expressive power of React can perhaps lead to somewhat more confusing code, and the small handful of cases where I need to be slightly more verbose in Svelte I actually find really useful. Like, Svelte is making sure that I'm writing components that are clear and easy to work with, but it still has all of the power that I need, and I can do everything I want in it. And yeah, overall, just yeah, Svelte's great. Modals are complicated. And that's my story. But yeah, that's a little bit of what's up with me. What's going on in your world? STEPH: Before we switch gears. I want to add on a little bit more to what you just said because something that I have noticed with me is that the longer that I've been a developer, the more I want that lower-level control and understanding as to what is happening. And it sounds like that is very much what you're saying that you're enjoying with Svelte is even if it does require a little more extra effort, that then at least I have that ability to exactly control what's happening versus if you're using higher-level obstructions, you're stuck with the API that's been designed for you. And that API works 98% of the time, that's wonderful but then that 2% of the time you're in trouble. So I've definitely noticed that trend, that over time, I want that lower-level control over everything that I'm working with and building, although not all the way to C, let's not go that far. CHRIS: I mean, there's Assembly underneath C. We can keep going, and we can just manually manipulate transistors as well if we really want to get after it. [laughs] STEPH: Next week on The Bike Shed. [laughs] CHRIS: Much, much higher level of abstractions are interesting to me, but yeah, there is a sweet spot. Svelte seems like it's the one for me. STEPH: Nice. So then switching back to what's new in my week, it's been a little bit of a weird week in terms of there's been a lot of focusing on sending data to a third-party system. So we had a lot of data that they needed in their system. So I have been focused on running a number of processes that are then sending that data over and then essentially babysitting processes, making sure everything is going smoothly. Also communicating with their team to understand okay, what's being received? Do we have any errors? Is there any sort of miscommunication between our systems, and that's why we're needing to resend this data to you? So it's been very different in terms that it wasn't a typical feature development week. It was more, hey, I sent you some data. What did you receive? And then let's fine-tune both of our systems on each end, which that part I always enjoy. As soon as I can get to that level of collaboration with someone, I very much enjoy that part because initially, it felt like a stressful task of like, hey, we've got this giant CSV. We need to process and send data. But then as soon as I have someone else to work with, then I'm like, yeah, okay, this is great. They can update their system. We can fine-tune ours as well in case there's something that's not communicating properly, and that part I really enjoy. I really enjoy collaborating with someone else so then we can both improve our systems together, so that part was a little different. But the actual weird thing that I did this week is we have feature flags, and we are using those feature flags to help us sunset and deprecate some code. So we have a controller path that is pretty gnarly. It is one of the more dense, difficult areas of our codebase to understand. And so we are refactoring it and creating a new green space for it so we can start to pull in some of that behavior and then also refactor as we go. So we essentially have class version one, and we now have class version two, which is always something. And we want to be able to feature flag this because, with our deployment workflow, we need the ability one; we want to be able to switch back quickly. So that way, if something goes awry, we can switch back to the original code if we've made some misassumption in our V2 version. And then we want to leave that on for a while to make sure things are running smoothly, and then we can go back and actually remove that class. But then the question came up is like, well, if we have these two files, how do we tell the team not to touch this particular file but only contribute or make a change to this other file? Because we have a sizeable team, and we work in different time zones. And there is a very reasonable answer that we communicate with the team that other folks are aware because they've seen the PR. There's a whole self-discipline of we review PRs and make sure stuff wasn't changed. All of that stuff is fine. It's reasonable. But I wanted to do something a little less reasonable [chuckles] that would still fail loudly in case someone changed a file. So the question was presented is there a way that we could fail loudly if someone changed this file? And there's a fun thing that we'll do at some of our daily syncs where someone will say, "That's a good idea. I have a bad idea." There's a fun thing that happens at our daily syncs where someone will often ask a question, and someone will provide an idea. And then someone else will say, "That's a good idea, but just to throw it out there, I have a bad idea. So let's just explore all of the ideas." And one of them was like, "Could we write a test around this? So if the file hash or something about that changed, then could we alert the team so then we know that this file changed and you're not supposed to change this file?" And essentially, having that discussion of like, well, then we're reimplementing Git because we're trying to track file changes. That seems like a bad idea but still a novel one to talk about for a few minutes. The implementation that I landed on and then shared with a person that's working on this is you do have the ability with Ruby, the file class itself; you can open a particular file. And for this one, select class one, and then you can use the function mtime, which returns the modification time for a file. So you can check the last time that a file was changed. So I wrote a test that says that "This file was last altered at…" and I grabbed that file's last altered at time with mtime. And then, I compared that to a particular DateTime. And then that DateTime could be any DateTime in the future once we deploy this class version two, so we don't expect that file to be altered. So this test will always pass until someone changes that file. And then Ruby is going to say, "Oh, your time is now greater than that other time you said." And so it's going to fail, which actually works pretty well. It's not as ugly as I thought it was going to be. [chuckles] As to whether it's a good thing to add to the codebase, I don't know, but it was a fun thing to write. CHRIS: I like it. I've definitely written things like that in the past, and I guess; therefore, I'm biased. [chuckles] I'm a fan of this sort of thing. But when you can take that group knowledge that is just shared in communication or via code review and you can capture it in the code, especially if you can do it in a stable, robust way…In particular, the first thing that comes to mind with that is like, well, are there going to be different representations of the timestamp on your system versus CI? Will that ever change over time? Like, Linux versus OS X or things like that. I actually have reached for Git in situations like this in the past. So, in particular, the one that I found myself doing a few times is trying to instrument code generation. So say we're working with Apollo, and we are generating the TypeScript types associated with a GraphQL request. I wanted to put something into CI to say, "If we haven't committed those changes," because we're supposed to be committing those files alongside, "then warn." And so the idea was take a snapshot of what things look like right now, run the command that does the code generation, and then check after that. I've done different versions where it's like, hey, Git, is the working directory dirty at this point? That's a version. I've also done one recently where I got the checksum of the file but again, asking Git. Because you're totally right that a lot of this...this is what Git does, and we don't want to rewrite Git. But I did feel okay reaching out and being like, "Hey, Git, can you help me understand the word?" But I like these sorts of things, particularly if you can do it in a way that won't ever require someone turning it off. I don't know if you've worked on projects where ESLint is enabled, but every third line has an eslint-disable-next-line. And it's just like, well, we have a bunch of rules, but we ignore them in a lot of cases. And those sort of...the like trust scenario with an automated tool I think is so important. If it's ever giving you false positives, false negatives, whichever it is, then it immediately, I think, loses so much of its utility. But if you can do it in a way that is stable and robust, then I am a huge fan. STEPH: Well, we'll see if the person decides to include it in their PR or not. But I do like that idea of where we can take away the idea that we're going to catch it if it changes in a PR because then we're just going to end up in a bad place that if we fix a bug in the class V1 but don't apply that to class V2, we're just going to be in a bad spot. And it's likely we'll forget about it when we go back to then delete class version one. There is something that you said that has reminded me of a very small change that I made to my process, but I feel like it had a big impact. And it's specific to working with feature flags, how often you'll have your tests where it's like if feature flag is on, this behavior should happen, if it's off, this behavior. And I often would wrap my test in the default path where the feature flag is off, and then I'd have my other if the feature flag is on; this is the behavior. But as we are migrating with the intent that this feature flag at some point in the near term future is going to always be on, so we know we're going to come back and remove all of the other code. I switched those two paths and treat the default happy path as the new if the feature flag is on; this is the new world. So then when folks are going back to say, "Okay, I just need to delete everything that represents when the feature flag is off," suddenly, it's just very easy to find that context to say, "Hey, feature flag is off and then boom, delete all of those tests." And that's been really nice. CHRIS: I really like that lens of designing or coding for deleteability. How easy is it to just rip this thing out? It's one of the things that I love about Tailwind, or one of the purported facets of Tailwind that makes it really nice is when you're looking at a given template, you can just rip it out. You don't have to worry about it because there's no associated CSS that you need to think about because the CSS is sort of generated available, whatever you want to call it with Tailwind. But I really like that idea of making it easy to delete stuff. Because it's so easy to just have your codebase slowly grow over time and look at files and be like, "I don't know if we're using that, but better to be safe." Cool. I'm excited to hear if that does land in the codebase and how folks respond to it. What did you phrase the message as? So if there's a test failure, did you give a particular like a special RSpec formatted message to be like, "Hey, friend, you're not supposed to touch this file. I know you're well-intentioned, but…" or is it just like, "Failure, bad. Mtime is different." Which end of the spectrum are we on there? STEPH: I love that you asked that question because I almost went down that path, and I was like, well, this should really have its own custom failure message because it's odd enough that I want to tell someone a little bit of a story when it fails. But I didn't because this was something that one; I just want to see if I could do. So I initially started looking at standard rb in RuboCop because at first, I was wondering if this was something I could solve via linting if it was something that RuboCop…if I could say, "Hey, RuboCop, if you notice that this file changed…" I didn't know if they had a hook into Git as they're looking for files to analyze. So I first leaned on RuboCop standard rb, which essentially then uses RuboCop under the hood, and I didn't find anything there. So then that's when I was like, okay, maybe Ruby has something, and that's when I found the file mtime. So at that point, once I'd gotten the test to pass, I'm like, you know, this is good. There's a very nice, friendly test description that goes along with if this fails; this is the reason why. But I do think that would be like cherry on the top addition to the test to have a very nice error message that goes along with this. So if I were the one that was adding this to the codebase, I would take a few more minutes to do that myself. It definitely felt like one of those moments where I had gone far enough into an experimental mode, and I felt like I had just reached that point where this is useful, and I want to share it with the person who's actually working on this. But then I pulled back going further because I'm like, I don't actually know if they want to use this and if they're going to implement it. So it felt like that right friendly balance of like, here's something that works. Feel free to use as is, make it better, don't use it, totally up to you. CHRIS: Yeah, I think given that context, that's definitely I feel like a good line to draw, not like, “Here's fully completed code that you can now just drop in. I did all the work, but here it is.” Versus like, “Oh, here's a kernel of an idea if you want, run with it, but if not...”But yeah, [chuckles] if you went to the length of writing a nice paragraph summary message to the end-user, that feels like you're really taking over the show. So cool. Well, yeah, interested again to hear how that goes and hear if it does, in fact, stop. That's the other thing. It's like, if it never actually fails, then everybody was just fine with the human process. But I'm intrigued to see how many times it actually does stop unwanted modifications of the file. So that's an interesting measure to track. STEPH: Yeah, that would be an interesting thing to track because if we do have it, then we may have less visibility into knowing if it failed because then someone will see it fail locally, but then we will have prevented it from getting to that PR state. It is one of those “did someone not change it because we added the test, or could we have skipped that process?” It feels like one of those nice safety measures, but that would be a fun thing to measure, I agree. CHRIS: Yeah, especially if it's a small change; in this case, I think it's totally worth it. But now, as I said it, I didn't mean it to be more of a thing. But now that I think about the question, I wonder if all tests should fail at some point. Like, all tests have a cost, both in terms of development and then thinking about them in runtime and all of that. And a good test is one that eventually fails because you change the system in a way that broke some constraint. And so, therefore, I'm now asking the question, like, should every test fail at some point? Are tests that only ever pass actually not that useful? I don't think so. Now there's a story running in the back of my head that's like, I kind of want to look at the CI stats. And feature specs will occasionally fail for unrelated reasons. But unit-level tests that never break, that never fail and catch something that was broken…I don't know that I actually believe this, but I'm just intrigued. As I asked the question, I was like, huh, should all tests fail? Sort of like one hand clapping kind of thing, anyway. STEPH: I like the question, or it's making me stop and think because my initial answer is yes, as long as it's failing for a meaningful reason, as long as it's not a flaky test or something along those lines. But otherwise, as you're working on the system and you're making changes, then I'm inclined to say that yes, every test should fail at some point. But I agree, if we're getting into existential test area, then I don't have concrete feelings about this yet. CHRIS: Yeah, and I feel like it's one of those sorts of questions. So pivoting off of that ever so slightly to bring us to something much more practical, I have a tiny utility that I want to chat about. And then I think we have a listener question that we want to discuss. But the utility, I think I brought this up on a previous Bike Shed episode, but the tool it's a little JavaScript library, but it's called Quicklink. And so the heading is instant next-page navigations. And so the way it works is it's just a little snippet of JavaScript that you'll include from a CDN, or you can NPM install it or any number of ways. But it's a tiny, little one kilobyte JavaScript thing that basically what it does is it attaches to every link on the page whenever you use that link. So you click on it or if you're on mobile if you tap, or however you're interacting with it, if it's an internal link, so not external to your site and not going to a different domain, but if it's internal to your domain, what it's going to do is it's actually going to prefetch in the background as you hover on that link. So it's going to say, "Hover is a good indication of intent to follow this link. So we're going to prefetch it in the background." And then when the user actually subsequently clicks it, which is often a couple of 100 milliseconds later, that's often enough time actually for the page to load in the background. And then, when they click the link, it almost feels like instant navigation. There's a similar thing that happens based on when you tap and when the actual firing of the link happens on mobile. So there's another delay that they can take advantage of there that's not quite the same as hover. But overall, it just takes basically any webpage, any website, and makes it feel very much faster. And it's cheap, easy, just kind of works. I really like it. It's a very interesting little project. STEPH: I'm fascinated by how that would feel as a user because if I'm hovering over a link, I'm thinking through my specific navigation habits. So if I'm going to a link, like, I don't hover very long. I don't think of myself as a hovering internet user. [laughs] I'm probably going to click on it right away. So I wonder if I would still feel that same speediness versus...yeah, I am interested in the metrics if they have something around like...I don't know why they would know this or have this, but like, most people hover for this long. And so then it speeds up their feeling of the page load. I'd be interested in that. CHRIS: I like the idea that you're bracketing yourself into the quickest click of a link in the west. I'm looking around on their website, seeing they have a quote from NewEgg at the top, which is, "We implemented Quicklink and saw a 50% increase in conversions and 4x faster page transitions." So it sounds like I'm reading an ad for this now, which I'm not because it's a free project. So you can use it or not and pay the $0. They have a demo, and then they have a measure page. So I think you can actually get to...I think they're just talking about how to measure it. But I've definitely seen another page where you can click on a link, and it will tell you what was the difference between hover and active when you actually interacted with it. And it turns out the bounding box for a link is bigger than what you see. And you're often moving your mouse not entirely to the center, but you're not just getting to the edge of it and clicking. And so that period of time where you're moving your mouse onto the link, there's actually often a couple of hundred milliseconds, which is enough to really make a difference if you've got a speedy site. You can take what feels like a couple of hundred milliseconds and turn it into nothing. STEPH: All I can think of right now is the image of a little mouse that's moving closer to a link with the Jaws' theme song playing. So it's ta-dum ta-dum. [vocalization] And this whole time, Quicklink is getting ready to then load as soon as the mouse reaches that perfect zone to then start loading. That's what I'm getting is Jaws and Quicklink. [laughs] CHRIS: I like the...it's not personification, but it's jawsification that you're doing of this JavaScript library where it's like, I just imagine them hovering on the side really watching intently. But on the sites that I've used it, it does make a noticeable difference. I feel the difference even with very active clicking. STEPH: That sounds really neat. I'll have to look into it. Maybe I think I'm the quickest click in the west. That's very hard to say. And it turns out that I'm actually quite slow, who knows? CHRIS: You might just be average; that's fine. STEPH: No way. CHRIS: Most people are, mathematically speaking at least. [laughter] STEPH: Not possible. I'm certain that I'm special. I hope listeners get a kick out of my oddities, [laughs] my very honest self that's coming through on the mic today. CHRIS: We're all a little special. But pivoting one more time… STEPH: That means no one's special. [laughs] CHRIS: Are you just doing the quote from Incredibles, or are you actually trying to say that? [laughs] STEPH: I wasn't intentionally quoting The Incredibles, but I did just watch that movie recently, and you're totally right. I am quoting The Incredibles. CHRIS: This is our second episode in a row then with a Pixar theme, which is always fun. But pivoting ever so slightly, I think our final pivot for the episode, we have a listener question today. So this question comes in from Matt Swanson, and he is asking about consulting first versus software first. So his question is, "One of the biggest turning points in my career was realizing that software consulting is, well, consulting. Do you think about your work as 'consulting first' or as building great software first and good experience for your clients will follow naturally?" So, Steph, what do you think? STEPH: I liked this question because it really made me stop and think about the differences in how I approach my client work. So I will say that I do think it varies slightly for each client, but most of the time, I do think of my work as first building great software. And then, once I've had time to understand how the team works and then identify opportunities for improvement, then I'll put on my consultant blazer and start scheduling meetings. I'm just kidding. I don't like meetings, so I don't do that part. But I do find that most of my engagements are looking for initially a strong developer to help contribute to the team and mentor. And then, I find that a lot of my consulting skills can then start to shine once I have that opportunity to build trust and then share outsider views with the team and then coach them in other directions. So I do take the approach of building great software first. Although this question really made me pause and think about it because I do think of the consulting and building software as so tightly coupled. It's a little hard for me to define when am I switching from my developer hat over to more of my consulting hat. CHRIS: Yeah, I think my initial reaction to the question was similar where I don't view these as two different modes that I'm fundamentally operating in. It's a continuum, or it's like a two by two grid thing, and I'm sort of moving around between the different spaces, but there's always a little bit of both. And I think if I were to answer the question directly, I would lean towards building great software. That's always the thing that I'm trying to do but often that requires some other more human-centric interactions. So having a difficult discussion around a feature and why we may not reach a deadline that we're going for or talking about ways in which the workflow is not necessarily going as well as it could, and we're ending up losing information along the way or different process things, all of that is a little bit removed from building great software. But at the same time, it's...actually, this is true of me now. I'm not technically a consultant anymore. I've stopped doing that, and I'm now full-time at an organization. And I'm not imagining my role changing fundamentally. I was consulting with them. I've now come on as a full-time employee, and I'm still viewing my work as very much the same thing. Maybe that's because I spent so long consulting that that's sort of the mode that I think of as how I work. But I think yeah, it's not necessarily two different modes. It's definitely a continuum that I'm operating across. STEPH: Yeah, I think that's why for me, it often varies. I like that word that you're using around how it's a continuum and that you're constantly sliding back and forth between one mode and the other. And if I think back to earlier days when I was working specifically with product teams before then, I joined thoughtbot and trying to think, well, what are some of the differences? How would I define what is more of my consulting mode versus then the building great software mode? Although I think the latter does encompass the consulting skills. But thinking back to when I was working on a product team, I found...and this may also just be because I was new in my career. But I found that I often referred to whoever was more senior on the team to handle a lot of those more human-centric topics, as you phrased it earlier. So if there was some communication that we needed to share in regards to why we were delayed on implementing a feature, if we needed to run a retro, if there were some meetings that needed to be scheduled, it always felt something like, oh, this leader of the team is going to take care of that. I am more in the development role, so I will do my job but then defer a lot of that to them. And then since joining thoughtbot with the way that we operate, I feel like I have more ownership in the process, and I want more ownership in the process. I want to be someone that is very aware of what are the specific goals that we're looking to reach? What are the deadlines? What's behind those deadlines that's encouraging us to push hard? And then also understanding how is the team functioning? What's something that we could do to improve the team's efficacy? Is the team happy? Are there areas there that we could improve? So I think for me, that is one of the core parts where I feel like I transitioned from being more focused on development to being more...you know, I don't have a great word for it. I often referred to it as being more of like a product owner. And since then, I feel like I have more ownership around the code that I'm working with and the team, and then the processes and the decisions for the product. But I actually don't have a great word that encompasses that sense of I want to be part of this and help make decisions and look out for everyone else that's around me. Does that resonate with you? Do you have any particular way that you would describe that or a word for it? CHRIS: I don't have a specific word for it. In my mind, this is just how we build software. But I think that that speaks to the culture that we grew up in as software developers. It's so strongly in our minds to think this way. A thing that we've talked about in the past is encouraging software developers to observe the sales demo, to see what it looks like when we're talking to end-users, or, similarly, to sit on customer support calls or listen to user interviews or things like that. And the reason for that is we want...I believe strongly that developers will do better work if they understand the context of the end-user of the application. But I think fundamentally, that sort of loads things up in someone's mind that might encourage them to push back or to suggest a different way of working down the road, and I think that's a good thing. I think every software developer should have some amount of that going on. And so that idea that consulting is this other thing that you sometimes do I feel like that stuff fits under the umbrella of consulting and, therefore, I think it's just part of how we build good software, but maybe it's a nomenclature thing, and I'm just thinking about it wrong. STEPH: Well, I want to pull at that thread a little bit because I was having that internal discussion with myself when I was thinking about this question is in regards to that being more aware of how the other teams are working to then help inform our decisions around the software that we're helping build, and implement advocating for a new process or advocating for how to build great software, is that consulting? I think you and I fall more into the camp of that's just how you build great software is; you have to be part of those decisions to be able to have more insights into the work that's being done. So I don't know if I could even really classify that as a consulting skill. CHRIS: Yeah, that matches my thinking. There is a distinction between consultant and contractor that I'll sometimes push on a little bit where I see consultants as being perhaps a bit more strategic and not necessarily being handed the work to do. I see that perhaps more on the contractor end. It's like, "We need a website built. Here are the specs. Here's the design mock-up. Please build it," and that's that. Versus a consultant being like, "We need a website, but we're not even sure exactly what that means. Can you help us think about the features and prioritize? Do we need a mobile app or not?" And a consultant potentially working more in that space of helping to determine what is the work that we're even going to do. But again, that's a question of like, how do we build good software? We have to answer those questions, and maybe not everyone on the team is always answering those questions. But the more people feel empowered to and feel like they've got the context to be able to make those sorts of at least suggestions around those sort of decisions, I think the better. STEPH: Yeah. I agree with the distinction in regards to being a consultant or a developer versus being a contractor because one definitely feels more removed from that decision or with that team collaboration process where you are more handed work, and then you implement that work, but you don't necessarily ask questions and be like, "Well, what are the benefits of adding this particular feature? Are we tracking to know that we've added the right thing?" those types of things that I would naturally include as part of my work. Versus if you're doing more of the contract work, then maybe you just implement and then don't ask those questions. Thinking back to then, what's different about being a consultant versus then doing development work…and I'm totally sidestepping all the financial stuff here. Like, if you're a consultant, then your world may be very different in terms of how you are acquiring jobs and then your marketing. So I am sidestepping that big conversation there but then focusing more on your day-to-day, how it may be different. And the times that I do feel that I'm wearing more of my lower-casey consulting hat is where I am joining teams that have a very specific goal that they have brought thoughtbot on to help with. So maybe there is a particular certification that they want their software to achieve, or maybe they're looking to level up their team and a particular tech stack, maybe it's Rails, maybe it's testing. And that one feels more focused on I am here to help provide an outsider opinion, to help evaluate your team, to help you provide advice, to communicate more with leadership that's on the team so then they know how things are going. That feels more like a consulting engagement that is less focused on building great software. But I feel like that often still starts with we want that stuff, but we also still want great software. So I always feel like I'm in both, and I really can't be as effective at the consulting part without actually working with the team and understanding the struggles that they're going through. So I still feel like they fit very hand in hand, but I do find that there are certain engagements that do require more external communication versus the others are often more internal with the team that I'm helping build software with. CHRIS: Well, I like that as a framing, the internal versus external communication and sort of the ratio of those. That's an interesting one. STEPH: To me, that's really what then sort of differentiates the consulting versus the just focused on building great software is if I'm doing more external communication, I'm focused less on the building part of the software but more on the guidance part. CHRIS: Yeah, I think that's a really good encapsulation or perhaps a way to differentiate the two ends of this. But I think both you and I probably feel that this just varies project to project. In some cases, we need more of what would fall into the consulting bucket, and other days, it's just nope, we got to go in. We got to implement. We got to build a bunch of features. We've got to get to the MVP launch and whatnot. And that often requires a little bit less on the consulting or the external communication side. But I think it's a case-by-case thing. And it's not that I think of myself as one or the other; it's I'll scale up or down as necessary based on the context of the situation. So I am both, I think. STEPH: Two for one, consulting and building great software. [laughs] CHRIS: One-stop shopping, everything you need. STEPH: So, I do have a couple of examples that I can provide that may provide some insight as to how we view consulting a little differently than necessarily focusing on implementation. I feel that I'm still reaching for that separation between consulting and developing. So I'm going to focus on the external communication and the implementation. I feel like those are the two areas that are trying to be divided in this particular question. But I do have some examples from thoughtbot discussions around consulting. So every so often, we get together at thoughtbot, and we have these internal discussions where we talk about the different consulting challenges that we have faced. And it's a really nice time where we get together, and we may discuss ongoing active consulting challenges and questions that we have, or it may be scenarios that have happened in the past. And so then we present that scenario to groups, and then we break off into smaller groups, and then everybody has an opportunity to talk through how they would react, what advice they would give, how they would approach it. And I have found those sessions to be incredibly helpful, but I think it could be fun to share some of those examples. Folks can think about them as to how they would react to them. But I think this helps highlight why those consulting skills and then also building great software are so tightly coupled together. So this first example focuses on building MVPs. So let's say that you're working with a client, and you've been focused on building an MVP, and the engagement is coming to a close in a few weeks. But the client is disappointed that there is a particular feature that they're really excited about that's not being included in the MVP, and they'd really like to know why that particular feature was cut. And they are worried that that will actually cause the business to fail if they don't have that feature in the MVP. So that's something that often comes up when we are focused on scoping MVPs to make sure that we are aligned with the client team to understand what is very important for the MVP and what can be a fast follow. And that can be a thorny one, especially if someone feels emotionally attached to a feature that is something that can be tricky to navigate. And how do you help the team reach a consensus that this feature really does need to be in the MVP, or it's okay that it doesn't need to go out now, and it can be in a future iteration? And for another example, this one is more focused on communicating the progress of particular work and how it's going. So you can imagine this scenario coming from the client saying that they have been working with you for a few weeks and you've made good progress, but it feels like the last week things have stalled. And they don't understand why a particular feature is taking longer than expected to ship. And they haven't had any communication from the team regarding what's taking that feature a longer time to get out. So, again, these are just some scenarios that you can think through and imagine how then you would respond or handle each of these situations. But I think both of those are really great examples that focus on the more consulting aspect of our work and then when we need to have more external communication with teams, so then they feel confident that we are developing great software. CHRIS: I think this is the first time that I've observed us giving homework to the listeners. But I think one thing that I'll highlight is we are talking about this in the context of consulting or being a consultant. But I think both of those examples that you gave, and more generally, most of these sort of conversations, actually apply pretty equally to working within an organization as an employee. You're still working on projects. You still have deadlines. You still need to ship things. You maybe aren't shipping as quickly as you need to; that maybe needs to get communicated to both internally within your team and externally within your larger organization. So yeah, I think these are broadly applicable, and I think, yeah, rolling them around in your head, let us know if you come up with any great solutions. STEPH: And if folks are interested in these types of scenarios, then I'm happy to share some more of them. I could share them on Twitter or anywhere else that folks find helpful. But I really like that nuance where I feel like is a nuanced discussion between building some great software and then those consulting skills. So thanks, Matt, for submitting such a great question. CHRIS: And as an aside, just to give a little more context on Matt, he runs a blog called the Boring Rails, which,, if you are not following it, it is a wonderful, straightforward summary of small, useful tidbits of information in the Rails world that are boring, but that's part of what we love about Rails. So I highly recommend that as well, and we'll include a link in the show notes. But yeah, thank you so much, Matt. And on that note, shall we wrap up? STEPH: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. CHRIS: This show is produced and edited by Mandy Moore. STEPH: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or a review in iTunes as it helps other people find the show. CHRIS: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed on Twitter. And I'm @christoomey. STEPH: And I'm @SViccari. CHRIS: Or you can email us at hosts@bikeshed.fm. STEPH: Thanks so much for listening to The Bike Shed, and we'll see you next week. All: Bye. Announcer: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.