GoneDotNet

Jonathan Dick, Allan Ritchie

All the latest in .NET Development ranging from Mobile to Server YouTube: https://www.youtube.com/@GoneDotNet

  1. 09/30/2024

    Jon tries Mediator! Copilot != Autopilot, and the Best iPhone ever!

    In this episode of Gone Mobile, Jon and Allan discuss a variety of topics ranging from sports team loyalty to the intricacies of app development. They delve into listener feedback about coding with AI tools like ChatGPT and Copilot, share insights on navigating iOS and Xcode updates, and explore new features in the iPhone 16. The conversation also covers updates in Maui and .NET, the importance of staying current with technology, and Jon's personal project of creating a snack app for Disney World. They conclude with a discussion on building a content button in Maui and the challenges of cross-platform development. Takeaways Listener feedback is crucial for app development. AI tools can enhance coding but require understanding. Staying updated with iOS and Xcode is essential for developers. Maui and .NET updates bring new features and improvements. Creating a snack app can be a fun personal project. Cross-platform button development presents unique challenges. Documentation is key for using libraries effectively. Unit testing is important for ensuring code quality. Engaging with listeners can lead to interesting discussions. Future content may include coding demonstrations. People Hosts: Jon Dick, Allan Ritchie Audio Engineer: Jim Heath Chapters 00:00 Sports and Team Loyalty 02:57 Listener Feedback and App Development 06:02 The Role of AI in Coding 08:58 Using ChatGPT and Copilot Effectively 11:58 Navigating iOS and Xcode Updates 15:04 Exploring New Features in iPhone 16 17:58 Maui and .NET Updates 20:55 Understanding Workload Management in .NET 24:03 The Importance of Staying Updated 27:02 Building a Snack App for Disney World 30:05 Creating a Content Button in Maui 32:48 Final Thoughts and Future Plans YouTube YouTube: https://youtu.be/f9rAV9lW9tk

    1h 5m
  2. 09/23/2024

    Buffet Style Show

    In this episode, Jon and Allan discuss various topics, including listener feedback, using SQLite for local data storage, changes in Android's page size, creating a personalized video for a Disney trip, and working on a marketing app with custom requirements. In this conversation, Jon and Allan discuss the challenges and best practices of using collection views and bindable layouts in mobile app development. They caution against nesting collection views and bindable layouts within each other, as it can lead to performance issues and difficulties with recycling views. They also emphasize the importance of using cancellation tokens to properly handle asynchronous operations and avoid memory leaks. The conversation concludes with a discussion on the EmbedIO plugin, which allows developers to host a local web server within their mobile apps. Takeaways Listener feedback is important and should be addressed in future episodes Using SQLite for local data storage can be a simple and efficient solution Android's change in page size will require rebuilding native libraries Creating a personalized video for a Disney trip can be a fun and memorable experience Working on a marketing app with custom requirements can be challenging but rewarding Avoid nesting collection views and bindable layouts within each other to prevent performance issues and difficulties with view recycling Use cancellation tokens to properly handle asynchronous operations and avoid memory leaks Consider alternative approaches, such as lazy loading or logical collapsing, when dealing with large datasets or complex UI structures The EmbedIO plugin allows developers to host a local web server within their mobile apps People Hosts: Jon Dick, Allan Ritchie Audio/Video Engineer: Jim Heath Chapters 00:00 Introduction and Listener Feedback 03:47 Using SQLite for Local Data Storage 12:11 Android's Change in Page Size 16:17 Creating a Personalized Video for a Disney Trip 20:12 Working on a Marketing App with Custom Requirements 31:11 Authentication Flows and Security 49:03 Challenges with Collection Views and Bindable Layouts 53:11 Avoid Nesting Scrolling Views 01:01:25 Exploring the EmbedIO Plugin YouTube: https://youtu.be/MH4bwX3JsNY

    1h 7m
  3. 09/16/2024

    In App Purchasing Pain

    The conversation revolves around the challenges and complexities of implementing in-app purchases in mobile apps, specifically focusing on the iOS and Android platforms. The hosts discuss the history of in-app purchases, the revenue cut taken by app stores, the introduction of subscriptions, and the implementation details and testing process involved. They also touch on the limitations and changes in the APIs provided by Apple and Google, as well as the importance of proper testing to ensure a smooth user experience. The conversation discusses the challenges and frustrations of dealing with payment processors, specifically in the context of mobile app development. The hosts express their dissatisfaction with the complexity and lack of flexibility in existing payment systems, such as Apple's StoreKit and Google's Play Billing. They highlight the difficulties of implementing and maintaining payment functionality, including handling subscriptions, refunds, and different transaction states. The hosts also mention RevenueCat as a potential solution that abstracts away the complexities of payment processing and provides a more streamlined experience for developers. The conversation revolves around the challenges and frustrations of implementing in-app purchases in mobile apps. The hosts discuss their personal experiences with app stores, subscription management, and revenue cat. They also touch on the complexities of handling transactions, storing subscription data, and the limitations of the current in-app purchase systems. YouTube: https://youtu.be/cI0vf--ZQqY Takeaways In-app purchases have evolved from one-time consumables to recurring subscriptions, allowing developers to generate continuous revenue. App stores like Apple and Google take a percentage cut from in-app purchases, which can impact the profitability of developers. Implementing in-app purchases involves dealing with complex APIs, handling subscription renewals, and validating transactions. Testing in-app purchases is crucial to ensure a seamless user experience and avoid revenue loss. The APIs and implementation details for in-app purchases differ between iOS and Android, with each platform having its own challenges and limitations. Existing payment processors for mobile apps, such as Apple's StoreKit and Google's Play Billing, can be complex and inflexible to work with. Implementing and maintaining payment functionality, including handling subscriptions, refunds, and transaction states, can be time-consuming and challenging for developers. RevenueCat is a potential solution that abstracts away the complexities of payment processing and provides a more streamlined experience for developers. Having a backend service like RevenueCat handle payment processing can free up developers to focus on providing value to their users. Simplifying the payment process and providing clear documentation and examples can greatly improve the developer experience. Implementing in-app purchases can be challenging and frustrating App stores have complex rules and limitations for in-app purchases Subscription management and revenue cat can help simplify the process Handling transactions and storing subscription data require careful consideration People Hosts: Jon Dick, Allan Ritchie Audio Engineer: Jim Heath Chapters 00:00 Introduction and Background 03:05 The Evolution of In-App Purchases 05:57 Implementing In-App Purchases: Challenges and Complexity 10:00 The Importance of Proper Testing 12:57 Differences in iOS and Android In-App Purchase APIs 24:58 The Complexity of Payment Processors 27:15 The Cost of Subscription Business 29:11 The Complexity of API Configuration 34:03 RevenueCat: Abstracting Payment Processing 36:09 Simplifying the Developer Experience 44:31 The Challenges of Implementing In-App Purchases 50:01 Simplifying Subscription Management with Revenue Cat 52:39 Handling Transactions and Storing Subscription Data

    1h 5m
  4. 08/20/2024

    Mediator for Mobile

    In this episode, Jon and Allan discuss various topics, including office renovations, phone migrations, and the use of mediator patterns in app development. They explore the concept of vertical slicing in architecture and the benefits of using a mediator to route messages. Allan shares his experience with mediator patterns in server architecture and highlights the need for a mediator pattern in app development. They also touch on the scalability of mediator patterns and the potential challenges of using them in certain scenarios. The conversation explores the concept of using a mediator pattern to handle services in an app. The mediator pattern allows for loose coupling and easier unit testing. It also simplifies the management of common services and reduces the need for multiple service injections. The conversation also touches on the use of events and requests with responses in the mediator pattern. The implementation of the mediator pattern in the context of a Maui app is discussed, including handling events and requests, offline mode, caching, and resiliency. In this conversation, Jon and Allan discuss the benefits and use cases of using MediatR in mobile app development. They explore the concept of middleware and how it can be used to handle various aspects of app functionality. They also discuss the challenges of finding and managing dependencies in a loosely coupled architecture. Allan introduces his MediatR library and explains how it simplifies the implementation of Mediator patterns in mobile apps. They also touch on topics like offline caching, resiliency, and event handling. Takeaways Mediator patterns can be used to vertically slice business domains in app development. Mediators act as traffic cops, directing messages to the appropriate services. Mediator patterns can improve code organization and reduce the need for injecting multiple services. Using a mediator pattern can make testing and maintaining code easier. Mediator patterns may not be suitable for high-frequency messaging or performance-critical scenarios. The mediator pattern can be used to handle services in an app, providing loose coupling and easier unit testing. Using a mediator pattern simplifies the management of common services and reduces the need for multiple service injections. Events and requests with responses are key components of the mediator pattern. The mediator pattern can be implemented in a Maui app to handle events and requests, enable offline mode, caching, and resiliency. Attributes can be used to customize the behavior of the mediator pattern, such as handling offline mode, caching, and user notifications. MediatR is a powerful library that simplifies the implementation of Mediator patterns in mobile app development. Middleware can be used to handle various aspects of app functionality, such as offline caching, resiliency, and event handling. Loosely coupled architectures can be challenging to manage, but tools like MediatR can help alleviate some of the complexity. Finding and managing dependencies in a messaging-based architecture can be difficult, but there are strategies like namespacing and code navigation that can help. MediatR provides a flexible and extensible solution for handling requests and events in mobile apps. People Hosts: Jon Dick, Allan Ritchie Audio Engineer: Jim Heath Chapters 00:00 Introduction and Office Renovations 09:07 Phone Migrations and Mediator Patterns 14:21 Understanding Mediator Patterns 17:13 Challenges of Scaling Mediator Patterns 23:04 Implementing the Mediator Pattern in a Maui App 27:59 Enabling Offline Mode, Caching, and Resiliency 41:42 Source Generation and Runtime Lookup 43:24 Replay: Handling Async Enumerables 46:04 Mediator as a Stepping Stone 48:26 Removing Attributes and Changing Behavior 52:05 Improving Developer Experience 55:11 Using Essentials API for Main Thread Handling 57:20 Offline Caching with MediatR 01:00:18 Using Middleware for Request Handling 01:02:34 Considering Dependencies and Library Usage

    1h 6m
  5. 08/12/2024

    Connectivity "Out in the Wild"

    The conversation revolves around the topic of connectivity in remote areas and the use of offline apps. The hosts discuss their experiences with limited connectivity while traveling and camping. They also touch on the evolution of GPS technology and the challenges of offline mapping. The conversation highlights the importance of offline functionality in apps and the limitations of current map providers. The conversation covers various topics related to maps, offline capabilities, and communication technologies. The main themes include different map providers, the challenges of offline maps, the use of Bluetooth Low Energy (BLE) for communication, and the limitations of current location technologies. The conversation covers various topics related to offline functionality and Bluetooth technology. Allan discusses the importance of designing apps to work offline and the challenges that can arise when there is no internet connection. He also highlights the capabilities of Bluetooth 5 for data transfer and suggests using Bluetooth for offline communication when the internet is unavailable. The conversation touches on the concept of pause and resume for larger file transfers and the use of range requests in HTTP for resuming interrupted uploads. The hosts also share personal anecdotes about their experiences with slow internet connections and the use of download managers in the past. Takeaways Limited connectivity is still a common issue in remote areas, even with advancements in technology. Offline functionality in apps is crucial for users who frequently find themselves without internet access. GPS technology has come a long way, but some older devices still struggle with accuracy and reliability. Map providers like Google and Apple lack robust APIs for developers to easily implement offline maps in their apps. There are several map providers available, including ArcGIS, Google Maps, Apple Maps, Mapbox, and OpenStreetMap. Offline map capabilities are important for areas with limited internet coverage or for applications that require offline access to maps. Mapbox offers its own map tiles and also allows users to plug in different tile providers. OpenStreetMap is a community-driven project that provides up-to-date map data. Tesla cars use a combination of OpenStreetMap data and vision-based systems for features like speed limits. SVGs can be challenging to render and are not always suitable for offline use. Bluetooth Low Energy (BLE) can be used for offline communication, such as sending messages and images. Location technologies like GPS and LTE have limitations in terms of accuracy and availability. Ultra-wideband and other technologies are being explored for more precise location tracking. The nearby API by Google and the Estimote beacons are examples of technologies that enable proximity-based communication. Designing apps to work offline is important for scenarios where there is no internet connection. Bluetooth 5 can be used for data transfer even when the internet is unavailable. Range requests in HTTP can be used to resume interrupted uploads. Slow internet connections and the use of download managers were common challenges in the past. Consider using Bluetooth for offline communication and file transfers in IoT devices. People Hosts: Jon Dick, Allan Ritchie Audio Engineer: Jim Heath Chapters 00:00 Introduction and Discussion on Limited Connectivity 02:59 The Evolution of GPS Technology 08:00 Challenges with Offline Apps and Mapping 20:44 Exploring Different Map Providers 25:12 Mapbox Bindings and SVG Challenges 33:22 Importance of Internet on a Plane 36:02 Using Bluetooth Low Energy for Communication 39:00 Building a BLE Chat App for Offline Communication 41:23 Limitations of Location Technologies 44:37 Designing Apps for Offline Functionality 46:21 Resuming Interrupted Uploads with Range Requests 57:42 Challenges of Slow Internet Connections 01:03:01 Using Bluetooth for Offline Communication in IoT Devices

    1h 8m
  6. 08/05/2024

    What's new for .NET 9?

    In this conversation, Jon and Allan discuss the upcoming features in .NET 9 and Maui. They talk about the challenges faced during the development of Maui and the improvements made in the tooling. They also discuss the new C# language features, including collection expressions and the system threading lock type. They touch on the concept of workloads and the introduction of workload version sets to improve the stability and repeatability of builds. They also mention the new title bar customization feature in Maui. In this conversation, Jon and Allan discuss several topics related to .NET MAUI. They cover the customization of the title bar, the new disconnect handlers feature, the embedding of Maui code into native apps, the upcoming CollectionView handler 2, and the potential switch to using unpackaged templates for Windows. They also mention the importance of having an escape hatch when using external libraries and the benefits of the dev loop on Windows. They conclude by encouraging listeners to leave five-star reviews and recommending the Warp tool for Mac users. Takeaways The development of Maui faced challenges, but improvements have been made in the tooling. New C# language features in .NET 9 include collection expressions and the system threading lock type. Workloads and workload version sets have been introduced to improve the stability and repeatability of builds. Maui now has a title bar customization feature for windows. The conversation highlights the importance of open and transparent communication in the development process. Customizing the title bar in .NET MAUI allows for the addition of various elements such as icons and menus. Disconnect handlers in .NET MAUI help manage memory leaks and provide control over when resources are released. The embedding feature in .NET MAUI allows developers to integrate Maui code into existing native apps. The upcoming CollectionView handler 2 in .NET MAUI will use newer APIs, improving performance and reducing complexity. There is a potential switch to using unpackaged templates for Windows in .NET MAUI, which would improve the development experience and deployment process. Having an escape hatch when using external libraries allows for flexibility and easier swapping of components. The dev loop on Windows is fast and efficient, making it a preferred platform for development. Leaving five-star reviews and recommending tools like the Warp tool for Mac users helps support the community and discover new resources. People Hosts: Jon Dick, Allan Ritchie A/V Engineer: Jim Heath Chapters 00:00 Introduction and Challenges in Maui Development 02:31 New C# Language Features in .NET 9 04:58 Workloads and Workload Version Sets 10:00 Title Bar Customization in Maui 14:20 Importance of Open and Transparent Communication 32:56 Customizing the Title Bar 39:30 Disconnect Handlers 43:35 Embedding Maui Code 49:05 CollectionView Handler 2 55:44 Switching to Unpackaged Templates for Windows 59:04 The Dev Loop on Windows 01:03:52 Having an Escape Hatch 01:05:56 Recommendation: The Warp Tool

    1h 7m
  7. 07/29/2024

    All the AI

    In this conversation, Jon and Allan discuss their love for coffee and the potential for an AI-powered coffee machine. They also delve into the topic of AI and its applications, particularly in image recognition and document intelligence. Allan shares his experience with training models for forms recognition and credit card scanning, highlighting the benefits of AI in automating data extraction. They also touch on the challenges of image resolution and the potential for on-device AI models. The conversation covers topics such as on-device barcode scanning, Azure Vision, Firebase ML, multilingual apps, and the use of AI in documentation and issue management on GitHub. In this conversation, Allan and Jon discuss their experiences with source generators and AI. They talk about the challenges and benefits of using source generators in their projects and how AI can be applied in various domains. They also mention the importance of understanding the limitations and potential liabilities of AI systems. Additionally, they mention new barcode scanning packages for Maui and reflect on their past experiences with native packages. Takeaways AI can be applied to improve the coffee-making process, leading to better quality and automation. AI has made significant advancements in image recognition and document intelligence, enabling the extraction of data from various sources. Training AI models for specific tasks, such as forms recognition and credit card scanning, can greatly enhance data processing and automation. Image resolution and optimization are crucial factors in achieving accurate results with AI models. The potential for on-device AI models offers benefits such as reduced bandwidth usage and improved energy efficiency. On-device barcode scanning is available through Azure Vision and Firebase ML. Azure Document Intelligence SDK works well in Maui apps and can be used for tasks like credit card scanning. AI can be used to automate documentation writing and make it sound more professional. AI can help identify duplicate issues and provide relevant suggestions on GitHub. AI language models like ChatGPT can be used to generate code samples and improve productivity. AI language models can also be used for multilingual apps and translation tasks. Roslyn analyzers can be used to analyze and provide suggestions for code quality and best practices. Source generators can be a powerful tool for generating code and fixing issues, but they require a good understanding of the underlying syntax and tree structure. AI can be used in various domains, such as creating assistants and analyzing data, but it's important to consider the potential liabilities and ensure accurate results. New barcode scanning packages for Maui, such as 'barcode-mobile.Maui' and 'barcode-scanning.native.Maui', provide improved functionality and integration with Apple Vision and AndroidX. Understanding the limitations and potential costs of AI systems is crucial for effective implementation and user satisfaction. Reflecting on past experiences with native packages, such as ACR Dialogues and HUD, highlights the longevity and continued use of certain libraries in the development community. People Hosts: Jon Dick, Allan Ritchie Audio Engineer: Jim Heath Chapters 00:00 The Quest for the Perfect Cup of Coffee: AI-Powered Coffee Machines 03:21 Advancements in Image Recognition and Document Intelligence with AI 07:37 Automating Data Extraction with AI: Forms Recognition and Credit Card Scanning 11:52 Optimizing Image Resolution for Accurate AI Results 18:12 The Potential of On-Device AI Models: Efficiency and Convenience 20:40 On-Device Barcode Scanning 24:08 Azure Document Intelligence and Maui Apps 26:11 Automating Documentation Writing 37:14 AI-Powered Issue Management on GitHub 40:08 AI for Multilingual Apps and Translation Tasks 42:42 Using Roslyn Analyzers for Code Quality 42:51 Introduction 43:00 Challenges and Benefits of Source Generators 43:29 Applying AI in Various Domains 44:29 Creating Analyzers and Code Fixers 45:34 New Barcode Scanning Packages for Maui 46:21 Exploring Font Scaling and Modifiers 48:09 Understanding the Limitations and Liabilities of AI Systems 51:48 AI in Motion Detection and Trail Cameras 52:41 Using OpenAI Library for Creating Assistants 56:54 Reflecting on Past Experiences with Native Packages 01:02:01 New Barcode Scanning Packages for Maui 01:03:22 Long Live Barcode Scanning 01:06:04 Conclusion

    1h 8m
  8. 07/22/2024

    What does your Backend look like?

    In this episode, Jon and Allan discuss various topics related to backend development. They start by joking about Canadian stereotypes and accents. Then, they dive into the world of backend development using ASP.NET Core and API controllers. They talk about the changes in API controllers and the use of IActionResult. They also discuss the benefits of using OpenAPI and generating contracts from it. They mention tools like Kyoto and Refit/Refitter for generating contracts and API clients. The conversation ends with a humorous remark about the possibility of a future tool called 'Refitist.' The conversation covers topics such as Refit, resiliency, GraphQL, OData, and Mediator pattern. Refit is discussed as a tool to generate code for API consumption. Resiliency is mentioned as a client-side concern, and the use of Polly for retrying failed requests is debated. GraphQL and OData are compared in terms of their usefulness and complexity. The Mediator pattern is introduced as a way to structure code and facilitate future scalability. Real-time communication with SignalR is briefly mentioned. The conversation covers topics such as real-time data streaming, the use of Docker for development and deployment, and experiences with different SQL databases. The hosts discuss the pros and cons of real-time data streaming and the various methods available. They also explore the use of Docker for local development and deployment, highlighting its benefits in creating consistent environments. The conversation then shifts to experiences with different SQL databases, including Oracle, MySQL, and SQL Server. They discuss the challenges and advantages of each database and the importance of proper database design and optimization. In this final part of the conversation, Allan and Jon discuss their experiences with different backend technologies, including Postgres SQL and backend-as-a-service platforms like Firebase and Apprite. They also touch on the challenges of managing costs and scalability in cloud services. The episode concludes with a mention of the Packages of the Week segment and a reminder for listeners to leave a five-star review. Takeaways Backend development in ASP.NET Core involves using API controllers and IActionResult. OpenAPI is a useful tool for generating contracts and defining API endpoints. Tools like Kyoto and Refit/Refitter can be used to generate contracts and API clients. The conversation highlights the importance of keeping up with changes in backend development tools and practices. Refit is a tool for generating code to consume APIs Resiliency is a client-side concern and can be handled with tools like Polly GraphQL and OData are compared in terms of their usefulness and complexity The Mediator pattern is a way to structure code and facilitate future scalability Real-time communication with SignalR is challenging for mobile apps Real-time data streaming methods vary and depend on the specific use case and requirements. Docker is a useful tool for creating consistent development and deployment environments. Different SQL databases have their own strengths and weaknesses, and the choice depends on the specific needs of the project. Proper database design and optimization are crucial for efficient and scalable applications. Postgres SQL is a reliable and fast database option with excellent driver support in .NET Backend-as-a-service platforms like Firebase and Apprite offer a comprehensive set of tools and infrastructure for building apps Managing costs and scalability in cloud services can be challenging, but it's important to find the right balance Consider leaving a five-star review for the podcast to show support and provide feedback People Hosts: Jon Dick, Allan Ritchie Audio Engineer: Jim Heath Chapters 00:00 Introduction and Canadian Stereotypes 04:42 Exploring Backend Development 09:03 Streaming Results and OpenAI 13:52 Generating Contracts with Kyoto and Refit/Refitter 19:46 The Future of Backend Development 27:19 Comparing GraphQL and OData 32:59 Understanding the Mediator pattern 43:11 Real-time communication challenges with SignalR 45:06 Real-Time Data Streaming 48:36 Docker for Development and Deployment 55:46 Experiences with SQL Databases 01:09:28 Importance of Database Design and Optimization 01:19:13 Challenges of Managing Costs and Scalability in Cloud Services 01:30:54 Don't Forget to Leave a Five-Star Review

    1h 30m
4.9
out of 5
10 Ratings

About

All the latest in .NET Development ranging from Mobile to Server YouTube: https://www.youtube.com/@GoneDotNet