Surfing Maui

No, this isn’t a post about me taking a vacation in Hawaii nor about trying my butt at surfing which I would undoubtedly be lousy. What I am going to discuss is DotNet Maui, the successor to Xamarin Forms which I have been using for years (even going back to pre-Xamarin with MonoDevelop).

I currently have one app, released in 2017, JyotishTools Pro which uses Xamarin. Around 2019 I decided that it was time to be more business like and upgrade the app every two years. I wanted to not only do an upgrade to the app which labeled “Pro” meant it was more like a desktop app on mobile (as well as desktop). Given that it uses Microsoft’s Visual Studio to build the app could use “conditionals” to build my more entry level version at the same time (a “conditional” means I could designate what sections of the program and what interfaces could be used for an entry level version).

For those unfamiliar, Xamarin is a cross development framework. Using it I was able to build not only a Windows version (sort of), an Android version and iOS version all with one code base (well almost). What I found is that users didn’t really like the Windows version that much because it was Microsoft’s attempt at Windows Mobile which eventually went away. Users still wanted that Windows UI (think accounting software) look or what I had in JyotishTools for Windows which was built using Visual Studio and the Microsoft Foundation Class (a retired C++ legacy framework). Worse yet around 2014 or so Digital River which had taken over the copy protection system I used for the app stopped supporting it and took down the server used to authenticate it’s use. Hence I could no longer update the app. And changing the copy protection would be a real headache.

Prior to that probably around 2008 or so I had been experimenting with a Java version of JyotishTools for Windows. Java itself being cross platform would let it run on more platforms like a Mac version which I had many requests for.

So along comes Android which ran on Java. I already had a simpler Vedic astrology program I gave away for free, Quick Jyotish using Java. It derived it’s name from the fact that it could load and save the Quick Charts format used by other astrology programs. So I ported it to Android but before that noting that Android could use GPS to get the user’s location first published GPS Prasna. A prasna is a horoscope which gives an answer to a question based on the horoscope erected for the location of the astrologer so GPS access was a novel idea. So I also published it for free on the Android Market (which later became Google Play).

After seeing there was a real interest in the Android platform I scaled down JyotishTools for Windows for something more befitting a mobile app of the time. I still sell that application. Note that I was not new to mobile apps. In 1998 I made an app, Jyotish To Go, for the Palm Pilot platform. And the first version of JyotishTools for Windows was for Windows CE which was a handheld Windows device. Since the code for that app was for Embedded Windows and used the Microsoft Foundation Classes it was not that difficult to use it as the basis for a full Windows app.

I also had earlier looked into acquiring a Mac Mini because of much interest in a Mac version of my apps. I already had a iMac Blueberry which was given to me to port a version of Myst to another platform which became defunct just as the port was ready to release and later used for a Sony PSP version. But by then Apple had changed the OS to BSD UNIX and switched from a Motorola CPU to Intel. Unfortunately the “deal” on the Mac Mini didn’t happen.

Okay, so I’ve made a “short story” long. But it might be a little tough to understand why I might be interested Dot Net Maui. That’s because I was going to do the upgrade to JyotishTools Pro with Xamarin. One other mistake I made with the original Pro version was not using responsive design which is more familiar in the web world than desktop. I had actually tested some responsive design versions which might have worked. The problem was users were used to more information on the main screen. That was first delivered using tabs and later a gallery. That eventually meant the phone version (both Android and iOS) needed to be a separate app from the Windows version as well as the unsuccessful Android tablet version. Also the iPad version needed to be a separate app (then a year later Apple began letterboxing iPhone apps on the iPad like Android).

Currently the upgrade will be responsive design, one project all platforms. That’s the beauty of .Net Maui, it is just that and makes porting to a variety of platforms much easier. Basically like Xamarin, a Maui app is a DLL and a player is generated for each platform to run that DLL. A game platform, Unity, which I have also developed for does the same thing including for console platforms like the XBox, Nintendo and Sony Playstation.

Maui was supposed to release last fall but was pushed back to this year. Currently release candidates are available for those of us to test and prepare our software to run on it. I have used my interest in Bhrigu Nadi astrology to build a simple program that can display the elements used in that system which employ some crucial parts of the Xamarin->Maui to see how the conversion will go. There are a few things at the moment that are lacking. Saving a file needs a file picker which is currently available in Maui only for loading a file. Saving a file currently will work on the platforms but will overwrite any file with the same name. Hence a file picker for saves is needed (there is a way to do this which I use in Xamarin). But it looks like the early release is for simpler apps.

At this time I have also tested Flutter which is Google project for cross platform development. There are things I like about it but is a far less mature project than Maui. Another cross platform I have tested in Facebook’s React which unfortunately generates a huge program file because it needs to contain the operating system (Visual Studio Code on Linux which I am using to write this uses React).

Anyway that’s how my surfing is going at the moment and hope to report more later.

Why Xamarin Developers Use Macs

I think I’ve figured out why Microsoft’s Xamarin development teams seem to use Macs. It’s because Windows 10 has degenerated so much it almost unusable for serious software development. I don’t know about Windows 11 but I suspect many of the usual tools aren’t supported yet in Windows 11. But then I’m not hearing much improvement with 11.

Microsoft should have taken the cue from Apple a couple decades ago and put the Windows UI on top of BSD Unix or maybe Linux. The latter would have been complicated at the time since Linux had some patent trollers pursuing it but wise judges threw those claims out.

There are actually many tech writers who seem to feel that’s what Microsoft should have done with Windows 11. But I was privy to what goes on at Microsoft, which has also been documented in many “tell all” books, is that marketing rules. Windows NT was developed as a full 32-bit operating system. These days even your smart phone is 64-bit but back then 32-bit was a demarcation from the 16-bit Windows of the time. But marketing overruled and demanded “backward compatibility” and thus crippled a fine advance in technology.

Even in my role as a technical director for a company I’ve had marketing overrule, forcing a poorer quality product that took more time to produce because of an unfounded belief that it needed to run on Windows 3.1 (this was after the release of Windows 95).

Now to while I feel particularly enraged about this today. I’m typing this using Ubuntu Studio 20.04 Linux on a 11 year old computer. A computer which booted up in 2-3 minutes and that’s slow compared to modern machines. But right now I’m waiting for about 20 minutes of boot time for Windows 10 to come up so I can work on a problem which has popped up on one of my apps.

Why is it taking so long? I don’t know but I’ve pared down startup apps so that can’t be it but I suspect that today I was notified that there is a new update to be installed. That’s funny because I got one earlier this week too and installed it. Apparently there was more to be done. Now if I run into a problem with my project and need to reboot (which I seldom ever have to do with Linux) that update was bound to waste time so I set it to execute in a couple days. Looks like it didn’t like that and I’ve wasted part of an afternoon waiting for the machine to become stable.

Microsoft is pretty liberal with our time probably costing millions lost productivity for users. On Linux you get a notice that updates are available. You can install them immediately or later and the user has control.

Now I know that machine is a little old being from 2016 but at the time a powerful machine with a NVidia 960 graphics card. Circumstances and the current problems in the tech hardware market have kept me from replacing that machine which of course I’d love too. Now I do have a MacBook from 2018 but I bought it for convenience (a Mac Mini would not be convenient) and I’m not exactly a big fan of MacOS either. It’s a entry level MacBook good enough to build iOS apps using the Visual Studio on Windows which remote develops by running XCode on the MacBook.

One other problem though (which Xamarin developers on Macs complain about) is Visual Studio is not as up to date as the Windows version.

It’s a wonder anything gets done these days.