Managed Native Controls - Migrate from Xamarin Form Renderer to Uno platform controls (2023)

  • Uno Platform Group
  • Posted May 25, 2023

In this blog post we look at common techniques in Xamarin Forms to customize native platform controls and how we can achieve an equivalent result with the Uno platform.

you can followSource codefor these twoXamarin forms andUno-platformItems used in this blog.

What is a renderer?

First, let's take a look at what custom attribution is and why you should use it. Xamarin Forms provides a hierarchy of user interface controls that can be created in code or XAML. The framework includes controls for all common controls on every supported platform, although functionality differs between iOS, Android, and other operating systems. Therefore, each control first contains the cross-platform control code, which defines the dependency properties, methods, and events that make up the control's public API. In addition, every native platform needs a renderer.

The renderer's job is to map native APIs to public Xamarin Forms APIs and handle the drawing and skinning so that the controls behave correctly in the Xamarin Forms layout system. The amount of work the renderer has to do depends on how well the native check matches the cross-platform API. In some cases, the renderer may add functionality on top of the control that isn't built into the original control. Most built-in renderers don't try to change the look and feel of native controls - the default look and feel of Xamarin Forms matches the platform's theme. Xamarin Forms controls act as the lowest common denominator, making it impossible to access other platform features from the public user interface, except for some additional platform-specific properties.

For anything more complex, developers can provide a custom renderer that changes the behavior of existing controls (or adds support for new native controls). This can be done, for example, to provide custom styles that cannot be set using Xamarin properties, or to use a completely different native control instead of the built-in implementation.

All renderers come trueViewRendererwhere TView is the type of the Xamarin Forms view class and TNativeView is the type of the platform-specific native control. Native controls must be present on iOSinterface viewon Androidandroid.Views.ViewYou need to bypass two methods -OneElementchangedInvoked when assigned (or a Xamarin Forms component is assigned), you can use it to set or clear native controls and any event handlers.

OneElementPropertyChangedCalled when a dependency property on a Xamarin Forms component changes. For example, if the Text property of a custom label changes, you want to update the original control with the new value. This provides a single point to handle all property changes and you can use toggle commands to edit different properties. There is a magic property name "Renderer", which is not a property that is displayed in the public UI, but is set when setting the display mode for the component. By handling this change, you can perform actions when the control first appears. A difference between the OnElementPropertyChanged and WinUI dependency properties is that the change handler is not called when the initial value for the property is set, but only when it is subsequently changed. So we'll make sure to change the Renderer property and set all the required properties to make sure the control starts with the correct value.

Our control example

we made onerich tagscheck to show how the above works. This has a functionElbeLift(consistskoppel,Equivalent control istext block) but added automatic link processing to the tag text.This control allows you to click and dial a phone numberthat orClick a web link to open your default browserIOS and Android support this feature, but not with lightingSo Xamarin formsWe can use a custom renderer to add this behavior.projectionThe basis of this approach, our renderer only handles two of themfunctiones - saidText and fonts. More complex controls follow the same pattern but have more properties.

(Video) UnoConf 2021 - Using Native Controls in Uno Platform Apps.

to takeItoperation on iOS we have to use the sameracing marlinlabelweerweg, SoonsmustCreate a new renderer derived fromview performance<TVview,TNativeView>.XamariniOSlabel performanceuseinterface tab,we switchdisplay interface textfor more functionality.onsmustAdd our own function to create the control and set the connection mode at the same timeyear:

protected override UITextView CreateNativeControl() { var view = new UITextView(); view.Editable = false; view.DataDetectorTypes = UIDataDetectorType.All; return display; }

Complete iOSpropertychangedThe operator appearsIt

void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { System.Diagnostics.Debug.WriteLine(e.PropertyName); base.OnElementPropertyChanged(sender, e); switch(e.PropertyName) { case "renderTexter("); updateFont(); pause; case "Text": UpdateText(); pause; case "FontFamily": case "FontSize": UpdateFont(); pause; } }

update textVery easy, to pass the string to the original control.update fontConverts the given font property to native using an iOS specific methodfont stylethen it's hereItin native controls.

Apply our Android renderer

The Android counterpart is simpler - becauseonsNeeThe native control type must be changed. We can easily create a classwhichinherited fromtag display,we have it allintegratedmode. subsequentlywe increaseAdditionallyCode for the property change operator to be calledlink when display or text changescreate hyperlinksnew text value.

protected override void OnElementPropertyChanged( object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if(e.PropertyName == "Text" || e.PropertyName == "Renderer") { Linkify.AddLinks(Control, MatchOptions.All); } }

Implementation of native controls on the Uno platform

Understandably, the Uno platform takes a very different approach. The public API in this example is designed to exactly match WinUI, so you can use the same code in WinUI on Windows and on any platform supported by Uno. One way this becomes apparent is that many of the core controls are sealed in WinUI and have no access to the internal platform implementation, meaning you can't create derivative controls, just add extra bits of functionality. Instead, you must create a custom onecontrolAnd use it to host native controls. A control must contain public functionality (such as dependency methods and properties), as well as code for interoperability with native APIs. For this reason, you must use conditional compilation to have multiple segments of code, each appearing only for a specific platform.

When you create a new custom control in your Uno project, it contains minimal code: the constructor sets a default style key for the control, which by default is the type of the custom control itself. Creates a style in the generic.xaml resource dictionary that you can use to apply the template to all instances of the control. If you are creating a custom control consisting of other controls and WinUI primitives, you can set the appearance of the control here. However, when you host native controls, you usually just define a root layout control, such as border or grid, and then the native controls are implemented as their children in the code behind. In our example, the default template looks like this:

(Video) Uno Platform Part 1
 

To test if it works, we'll use Uno's support for platform-specific XAML to add a Windows-only TextBlock child control that displays the content as plain text. On mobile platforms, native controls will be within limits.

we cover fromOnApply templatemethod. This method is called when the template is applied and the visual tree is created. Once done, we can access the named elements in the template usingGet a template child objectand cast the result to the correct type. Now we can take the RootBorder element from the template above and add child controls to it. A word of warning here - since the control template can be overwritten, it may break this code depending on whether there is a boundary element with the specified name in the template.

Collapse native controls

ALeveringhelp methodVisualTreeHelper.AdaptNativeCollapses native controlskoppelitems that can beDefined as the children of the frontier.ItThe wrapper takes care of the layouthe acts like a normal human beingframe-element.The native controls themselves are platform specific, so we need to create separate code for iOS and Android. what can we doItUse conditional compilation using #if blocks. ThisThe IOS and ANDROID stables ensure that platform-specific code is only visible to compilers in builds for the specified platform. you can changeplatform in Visual Studio and seeFor platforms not selected, the code will be grayed out.

Managed Native Controls - Migrate from Xamarin Form Renderer to Uno platform controls (1)

Add adisplay interface textWith autolink, like the Xamarin custom view, we add the code to the IOS #if block. First we make onedisplay interface textand there you goType of data probeto everyone. We wrap this control with AdaptNative and then make it a child control of the boundary defined in the control template. In addition to usingtext viewThis places the control in the UI tree, but we need to populate the original control with the property value of the WinUI control. We also need to make sure that property changes are propagated to native controls. This approach is different from the Xamarin Forms display mode, but we can create change handlers for any DependencyProperty we add to our custom control. From this we trigger an update method of the native control. As with control generation, the exact nature of the process is platform specific, so again we need to use conditional compilation. In our example, we are exposing only one text property. In a real control world, you might have other properties to adjust fonts, colors, etc., but each property would follow the same process.

In the control code we create an UpdateText method - this method is called when the Text property is set. Within this property, we use conditional compilation to call the appropriate method on the original control to set the text. On Android, we also need to call Linkify to scan and apply the text on links. The methods supported by iOS and Android are as follows:

private void UpdateText() { if (_textView != null) { #if IOS _textView.Text = this.Text; #elif ANDROID _textView.Text = deze.Text; Linkify.AddLinks(_textView, MatchOptions.All); #万一 } }

in one casecolourpublic relationsI haveThe specific platform code willresponsible forconversion onekoppel colourEnter the local equivalent.Having completed these two aspects, we now have the basics of creating native controls and setting properties for them. The sample project showsresult You can click on the embedded linkItInscriptionIt opens web links in the default browser and phone links with the phoneApplication of electrons.

About the Uno platform

for youthUno-platform, which enables the creation of pixel-perfect, single-source C# and XAML applications that run natively on Windows, iOS, Android, macOS, Linux, and on the web via WebAssembly. In addition, it offers a Figma integration for design development transfer and a range of extensions for bootstrapping projects. The Uno platform is free, open source (Apache 2.0) and available atGitHub.

Next step

Now that we've created a control to demonstrate how to wrap and customize a native control, you can follow the same processPackage any native control and create something specific to your requirements, just as you can with Xamarin Forms custom renderers. the source code isIt can be used asThe Xamarin Forms and Uno projects used in this blog.

To upgrade to the latest version of the Uno platform, update your packages to version 4.8 via the Visual Studio NuGet package manager! If you're new to the Uno platform, following the official 'Getting Started' guide is the best way to get started.(5 minutes to complete)

principle

(Video) Native mobile, desktop and WebAssembly apps with C# and XAML using the Uno Platform with Jérôme L...

inscription:

Share this message:

Relevant Articles

Safari 16.4 supports WebAssembly fixed-width SIMD. How to use it in C#

Share on twitter Share on linkedin Share on reddit This article covers: What is WebAssembly's...

March 29, 2023

Optimize Uno Platform WebAssembly applications for better performance

Share on twitter Share on linkedin Share on reddit In this article we will…

February 15, 2023

Create elegant reports in WebAssembly applications using DevExpress Reports and the Uno platform

Share on twitter Share on linkedin Share on reddit Good engineers integrate when and where...

February 2, 2023

(Video) How to create cross platform apps with C# - Uno Platform Android, IOS, MacOS, Windows, WASM

We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking "Accept", you agree to the use of all cookies.

FAQs

What is the difference between Blazor and Uno platform? ›

How is Uno Platform different from Blazor? Uno Platform applications are cross-platform, running on the web as well as mobile and desktop, equally, from a single codebase. Blazor is a feature of ASP.NET for primarily building web applications.

Who is behind Uno platform? ›

Uno platform is an alternative UI platform for building multidevice applications in C# and XAML. It was launched in 2018, after years of internal use by a Canadian company nventive.

What is platform Uno? ›

Uno Platform is a cross-platform application framework which lets you write an application once in XAML and C#, and deploy it to any target platform. Uno Platform's application API is compatible with Microsoft's WinUI 3 API and the older UWP application API.

Is Uno platform free? ›

The first C# & XAML, free and open-source platform for creating true single-source, multi-platform applications.

How does Uno platform work? ›

Uno Platform acts a bridge for WinUI and UWP apps to run natively on iOS, macOS, Android, Linux and WebAssembly. You can run your C# and XAML source code unmodified and compile it on a different platform yet have it behave the same at runtime.

What is the difference between dotnet Maui and Uno? ›

NET MAUI focuses on providing a native experience, which means a list (for example) looks different on an Android versus an iOS device. Uno Platform, on the other hand, provides the same look and feel on all platforms. This means radio buttons on iOS out of the box—no need to write custom controls for iOS.

Why is UNO so popular? ›

It's estimated that around 80 percent of game-playing households have played the popular Uno card game. Since its release in 1971, the game has sold well and is now played all over the world. This comes as no surprise, seeing as the game is inexpensive, easy to learn, and suitable for players of all ages.

Is UNO still existing? ›

One of the most iconic classic games which we all grew to know and love! UNO makes its return with an assortment of exciting new features such as added video chat support and an all new theme system which adds more fun!

Is Uno platform production ready? ›

Going forward, Uno Platform plans zero-day support for the production-ready, general availability release of WinUI 3, which is expected next month. Also on the list of 2021 efforts is "tripling down on Web/WebAssembly," along with more control mappings, tooling experiments and the endorsement of . NET 6 in November.

What are the benefits of Uno platform? ›

Uno Platform offers several benefits for web app development: Cross-platform compatibility: Develop applications that run natively on Windows, iOS, Android, WebAssembly, macOS, and Linux with a single codebase, saving time and resources.

Does Uno app cost money? ›

Is UNO free? Uno is available for free to download on all Android and iOS devices.

What is the latest version of Uno platform? ›

Today we are announcing support for . NET 7. Our sixth release of 2022 is a huge step towards creating the most productive platform for building . NET-based applications which run everywhere.

Is Uno platform open source? ›

Uno Platform (/ˈuˌnoʊ/) is an open source cross-platform graphical user interface that allows WinUI and Universal Windows Platform (UWP) - based code to run on iOS, macOS, Linux, Android, and WebAssembly.

How do I start the Uno app? ›

Getting Started
  1. Open Visual Studio and click on Create new project .
  2. Search for the Uno templates, select the Uno Platform App then click Next .
  3. Name your app then click Next .
  4. In the project Wizard: ...
  5. After a few seconds, a banner may appear at the top of the editor asking to reload projects.

Does Uno have cross-platform? ›

The classic card game Uno requires little introduction. For many years, it has been a fan favorite for countless gamers, making it one of the most iconic tabletop games to date. Unfortunately, the digital version of Uno does not support cross-platform play at all.

Is Uno free on Microsoft? ›

Uno Online lets you play the popular Uno card game for free in your web browser.

Is Uno online or offline? ›

【Offline】Added offline mode. You can play in Quick Play or 2V2 Mode with robots during server maintenance. 2. 【Auto-play】When you run down the clock 3 times without playing a card, an AI will take over your hand and play for you to finish the game.

Does Uno need Internet? ›

Uno for PC

A broadband internet connection is required to access the multiplayer features.

Why Maui is better than Xamarin? ›

Greater performance: Since it uses less memory and CPU than Xamarin Forms, there will be better performance overall. Building native UI: By leveraging the same platform-specific code as other platforms, such as Android or iOS, you may generate the same look and feel for your application.

Is .NET MAUI same as Xamarin? ›

NET MAUI is an evolution of Xamarin. Forms, they have most of their features in common. You can get almost all things in . NET MAUI that Xamarin has, like controls, layouts, Shell, gestures, templates, and cross-platform APIs for device features.

Is Maui a replacement for Xamarin? ›

NET MAUI stands for . NET Multi-platform App UI. It is a bit of a mouthful but essentially all it is is the next iteration of Xamarin… Yes, it's Xamarin vNext, so instead of there being a Xamarin.

What skills are used in UNO? ›

Educational Benefits of UNO
  • Fine motor skills – holding and playing the cards can be a challenge for small hands. ...
  • Numbers and colors – your child will get plenty of practice identifying colors and number recognition.
  • Matching – The game teaches your child how to match numbers and colors (visual discrimination).
Mar 8, 2015

What is the secret to UNO? ›

Always count the cards of your opponent's and decide if you have to act. Never hold too many skip-cards and reverse cards. Stockpiling too many will add up too many points if you lose as they are worth 20 points. Remember that in a two-player game, reverse cards act like skip cards.

What is the number 1 rule of UNO? ›

The moment a player has just one card they must yell “UNO!”. If they are caught not saying “Uno” by another player before the next player has taken their turn, that player must draw two new cards as a penalty.

What is the 7 rule in UNO? ›

Playing a 7 allows you swap hands with another player, and playing a 0 forces all players to take their hand and pass it down in the order of play. For the first time on consoles, Jump-In is available for play!

Can you still stack in UNO? ›

There is no stacking in UNO. When you play a Wild Draw 4, you choose the color and the next player must draw 4 cards and lose their turn.

How old is UNO now? ›

History. The game was originally developed in 1971 by Merle Robbins in Reading, Ohio, a suburb of Cincinnati. When his family and friends began to play more and more, he spent $8,000 to have 5,000 copies of the game made.

What will replace WPF? ›

Alternatives to WPF include:
  • Platform Uno.
  • Avalonia.
  • Blazor.
  • Ooui.
Jun 20, 2022

What is the alternative to WPF in Windows? ›

What is the best alternative for WPF? It's the VCL. VCL – an abbreviation of Visual Component Library – is a set of visual tools effective for the rapid development of Windows applications. It uses the easy to learn yet modern, powerful Delphi language for the program code and to drive the applications.

Is Uno a company? ›

Uno Corporation is a leading Global Consulting and IT services company, offering a wider range of solutions customized to various verticals and horizontals.

What can UNO do? ›

The work of the United Nations covers five main areas:
  • Maintain International Peace and Security.
  • Protect Human Rights.
  • Deliver Humanitarian Aid.
  • Support Sustainable Development and Climate Action.
  • Uphold International Law.

Is UNO better than Monopoly? ›

As compared to Monopoly, UNO has simpler rules, which are easily understood by one and all and therefore it has a quicker entry time to get into the game. Also each round of UNO is of a shorter duration as compared to Monopoly, which means that you can play more games per single game session.

When was UNO invented? ›

Merle Robbins was a barber from Cincinnati, Ohio. In 1971, at the age of 59, he invented the UNO® card game to settle an argument with his son about the rules of another card game called Crazy Eights.

Is UNO the same as switch? ›

Switch is very similar to the games Uno and Mau Mau, both belonging to the larger Crazy Eights family of shedding games.

How many people can play UNO app? ›

4 people play with house rules!

Is UNO free on Apple? ›

The classic family card game Uno! is making its mobile debut for iOS and Android devices. The app is a free download, and is available right now.

Is there a PC version of UNO? ›

UNO | Download & Play UNO Online for PC – Epic Games Store.

Is there another way to play UNO? ›

Stacking Draw Cards: Allows players to stack Draw 2 or Draw 4 cards to cause other players to draw even more cards. Three Hand Uno: Each player has three piles of cards to try to get rid of. Three Piles: Makes use of three discard piles instead of one. Time Bomb: Adds a delay to Draw 2 and Draw 4 cards.

Which is the best version of UNO? ›

Among all free UNO games cards, the UNO champion game is the best choice. UNO Champion game is not only one of the most interesting free card UNO card games, but it is also the most involved one.

Can Iphone and Android play Uno together? ›

Players have no need to worry about a lack of players to compete against, as Gameloft has added cross-platform multiplayer support to the game. Players, whether they be on Android, iOS or at home on Facebook, will be able to compete with each other seamlessly.

What platforms is C# supported by? ›

While originally built to run on Windows, C# was quickly ported to Linux and macOS by the Mono project. Today, C# is open source and runs on the cross-platform . NET Core.

Does Uno support Linux? ›

Uno Calculator runs on Red Hat Enterprise Linux, Linux Mint, Debian, Fedora, openSUSE, Manjaro, Kubuntu, KDE Neon, elementary OS, CentOS and Arch Linux, which means you can run it on anything from Linux desktop, to Raspberry Pi.

Can you message on Uno app? ›

You can select up to 6 in-game phrases to chat with others. Players who have contributed phrases will receive rewards by mail.

How to play Uno without Uno? ›

To play the game, you will need two regular decks of cards, preferably with the same design on the back. Uno cards include four colored number cards from 1-9, Skip, Reverse, Draw Two (in those four same colors), Wild and Draw 4 Wild. Using a regular deck of cards, you will substitute the four colors for four suits.

Is UNO online free on PC? ›

If you want to join in the flow of fun , download UNO! on your PC today. The best part of the game is that it is entirely free!

Is UNO online on switch? ›

Play online or locally using up to four Switch consoles, and communicate using the new Emote system!

Why not to use Blazor? ›

Cons of client-side Blazor

One major disadvantage of client-side Blazor compared to both server-side Blazor and JavaScript is that the download size of client-side components will be way bigger than for any of them. This is because Blazor doesn't merely compile into WebAssembly.

What is alternative to Blazor? ›

React, JavaScript, Vaadin, Xamarin, and Flutter are the most popular alternatives and competitors to Blazor.

What are the cons of using Blazor? ›

Disadvantages of Blazor WebAssembly
  • Blazor WebAssembly requires more client-side resources to be downloaded and executed, resulting in a slower initial load time.
  • It can be less secure since sensitive data and business logic are downloaded and executed on the client side, making it more vulnerable to malicious attacks.
Apr 22, 2023

What does Blazor replace? ›

Blazor is an alternative to JavaScript but not yet a complete one. Blazor supports many of the standard browser features you've grown accustomed to and which are used in modern web apps but not all.

Is Blazor worth learning in 2023? ›

Yes, Blazor is definitely worth learning in 2023, especially if you are interested in web development and have experience with C# and . NET technologies.

Is Blazor becoming more popular? ›

On that desirability scale, Blazor climbed from sixth spot in 2021 to fourth this year among seven "programming languages," as shown in the graphic below that depicts the percentage of respondents who use a given language 'frequently,' or 'sometimes,' compared to last year.

Why is Blazor so good? ›

Blazor is a fast, reliable, and highly productive open-source web development framework by Microsoft. It offers two hosting models, Blazor WebAssembly and Blazor Server, to support both client-side and server-side applications.

What big companies use Blazor apps? ›

25 companies reportedly use Blazor in their tech stacks, including Scopeland Technology GmbH, Objectivity Software Development, and Weland Solutions AB.
  • Scopeland Technology ...
  • Objectivity Software ...
  • Weland Solutions ...
  • PokitPal.
  • workspace.
  • Powered4 TV.
  • Hetosoft Sistemas.
  • Pernod Ricard.

Can Blazor compete with Angular? ›

While Angular is a fully functional development framework, Blazor is still being improved and enhanced. Angular, but not Blazor server-side, supports PWAs. In Blazor, there is no scoped style for components. Blazor is currently supported by the language server in VSCode, however, Angular's tools are more sophisticated.

What companies use Blazor? ›

Blazor customers showcase
  • BurnRate. Blazor ASP.NET Azure SQL. ...
  • GE Aviation. .NET Core Azure Blazor. ...
  • The Postage. .NET Core Azure Xamarin Blazor. ...
  • ShoWorks. Blazor Azure Azure DevOps Visual Studio. ...
  • Stadio. Blazor Microsoft Teams. ...
  • Zero Friction. ...
  • Allegiance Consulting.

Should I learn JavaScript or Blazor? ›

Deciding whether to use Blazor WebAssembly instead of one of the many JavaScript frameworks readily available largely depends on your team's experience and comfort level with learning a new language. If you or your team is more comfortable coding in C# vs JavaScript, Blazor is a solid option for you.

Why use Blazor instead of React? ›

React lets you code in Typescript (so basically Javascript) while Blazor is great for the C# crowd as they don't have to learn a new language. React transpiles to Javascript so it runs natively in browsers, while Blazor uses web assembly. Web assembly doesn't always run perfectly as it's not native.

Which is better Razor or Blazor? ›

Razor can handle API logic and server-side templating, but it cannot handle client-side logic that is not JavaScript-based. Blazor allows programmers to handle both client and server-side functionality with just C#. Razor is a markup syntax for templates. It incorporates server-side code into the HTML.

Will C# replace JavaScript? ›

C# is replacing the js part using web assembly. So nothing has changed on how you access/modify HTML controls. Also, JS and C# code can interact with Each other. There is a facility to interop, meaning we can call the Javascript code from C# code and vice-versa.

Does Blazor replace Razor? ›

Blazor is a framework that leverages the Razor components to produce dynamic HTML. The biggest difference between Razor and Blazor is that Razor is a markup language with C#, while Blazor is the framework that lets you run C# code and use the Razor view engine in the browser.

Is Blazor low code? ›

You author Blazor apps using C#/Razor and HTML. Open Lowcode and Blazor can be primarily classified as "Low Code Platforms" tools. Some of the features offered by Open Lowcode are: 95% of your application built assembling existing bricks.

Videos

1. Uno Platform Part 2
(Microsoft Visual Studio)
2. Xamarin Cologne: Open-source Uno Platform for Web/Desktop/Mobile Development
(Tobias Hoppenthaler)
3. Uno Platform Behind the Scenes
(Microsoft Visual Studio)
4. Beautiful Controls for Xamarin.Forms with Syncfusion | The Xamarin Show
(Microsoft Developer)
5. XAML and C# in the browser with WebAssembly and Uno Platform - Andres Pineda
(Jose Javier Columbie)
6. Jérôme Laban — Introduction to open source Uno Platform
(DotNext)

References

Top Articles
Latest Posts
Article information

Author: Foster Heidenreich CPA

Last Updated: 09/17/2023

Views: 5257

Rating: 4.6 / 5 (56 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Foster Heidenreich CPA

Birthday: 1995-01-14

Address: 55021 Usha Garden, North Larisa, DE 19209

Phone: +6812240846623

Job: Corporate Healthcare Strategist

Hobby: Singing, Listening to music, Rafting, LARPing, Gardening, Quilting, Rappelling

Introduction: My name is Foster Heidenreich CPA, I am a delightful, quaint, glorious, quaint, faithful, enchanting, fine person who loves writing and wants to share my knowledge and understanding with you.