BKeeney Cyber Weekend

BKeeney Software is offering a special discount for Cyber Weekend this year! From Friday, November 29 through Monday, December 2 we’re offering 20% off our products. Now is the perfect time to pick up the Xojo Design Award winning BKeeney Shorts; or make a database driven project easy with ActiveRecord and ARGen 3.

No coupon code is necessary! Some of our top products include:

ARGen 3 – Create ActiveRecord classes and UI for database driven applications made fast.

BKS Shorts – Create and render reports in your Xojo Desktop and Web applications. Renders to screen, printer, HTML, CSV, and PDF formats.

BKS Tab Control – A classic “tabs control” for Xojo Desktop applications.

Formatted Text Control – A TextArea replacement that allows inline pictures, hyperlinks, and much more.

Task Timer 6 – If you aren’t tracking your time you’re missing out on a key metric on how well you estimate and where you spend more of your time.

RAD Studio vs Xojo

In my quest to find a Xojo alternative I came across RAD Studio https://www.embarcadero.com/products/rad-studio that is owned by Embarcadero.  RAD Studio can work with C++ or Delphi (object Pascal) and build for Windows 32 and 64-bit, MacOS 32 and 64-bit, Linux, Android, and iOS depending up on the license.  They also have a Community Edition that can build for Windows, macOS, Android, and iOS but is free until company revenue reaches $5,000 or you get to 5 developers.

The RAD Studio IDE is Windows only even though it will allow live debugging into the other target environments.  For my testing I was running the IDE using Parallels 15 in Coherence Mode running Windows 10 64-bit.  The VM resides on an external SSD via Thunderbolt 2.  I found the environment to be responsive despite being in the VM environment.

During installation it asks if you want C++ or Delphi for MacOS, Windows 32 bit Windows 64 bit, Linux, Android and iOS.  I selected Win32 and MacOS.  It took a good 15 minutes to install.  You definitely need a large VM to do this.  I ran out of space on my VM and had to start over again after clearing up some space.

To start testing, I created a New Multi-Device application.  Doing a Hello World was simple enough.  Double click on the on the label in the Palette, or drag and drop onto the form.  Scroll down in the Object Inspector and change the Text property to “Hello World”.

At this point I’m ready to rock and hoping for the best.  Pressing the Run button runs the app and voila a Windows app with a window saying “Hello World” pops up.  Passes the first easy test.  But what about getting the Mac version going?

To set up for the Mac (or iOS, Android, Linux or even another Windows computer) you’ll have to install the Platform Assistant Server (paserver for short).  Paserver is a command-line application that you install on Windows, macOS, and Linux so that RAD Studio can connect and do its thing.

I had to read through the help file to figure out how to do this.  PAServer20.0.pkg is located in C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer and you copy it to the Mac side to install it.  The PAServer installer is using a code signing certificate that’s expired but it’s easy enough to work around.  The installer puts two applications in your Applications folder:  PAServer-20.0 and PAServerManager.  But for now we’re only concerned with the PAServer-20.0 application.  Go ahead and double-click to start it.

This opens the Terminal and the first thing it asks you for is a Connection Profile password.  I set it to blank for ease of setup.  It automatically opens port 64211 and a Mac security prompt immediately pops up asking if I want to allow incoming connections.

Going back into RAD Studio if I go to the project listing that shows my targets and I select Properties from macOS 64-bit I can setup my paserver now.  Select which SDK to use (Mac 64-bit), then input the TCP address of the Mac.  Test the connection and then select OK.  A bunch of files get copied over to the Mac side.

Trying to debug run the application on the Mac side generates an error.  Module not found:  dccosx64260.dll  After contacting the sales rep for help it appears that I had version 10.3 Update 2 and the fix for this problem was in Update 3.  Maybe I just missed something in the myriad of menu’s but I never did find an “Update” in the application.  I had to go to their website and search for updates and download an updater.  The updater then proceeded to uninstall the previous version and then proceeded to give me the default settings (not what I’m looking for).  It seems that the installer is pretty stupid.  But it installs.

This is really where my review should end.  After spending a number of hours trying to get this working I was unable to actually see a Mac app running.  Despite updating the entire RAD Studio (twice) and update paserver I could never get any of the demo apps to run on the Mac.  I know this works since I saw an Embarcardaro  engineer do it.  I’m sure it’s something I’ve done wrong but I figure if I can’t figure it out in a couple of days of messing with it then it’s not a trivial issue.  It was very frustrating.

Initial thoughts on the IDE:  This is a very typical 90’s looking MDI Windows application with one big overall window with various smaller windows inside of it.  I find it to be very busy but not awful.  I can live with it.  I have to remind myself that I’m a spoiled Mac user and I expect ‘pretty’ and functional UI from every application.

The Projects list shows all of the available targets and seems pretty straightforward.  This window disappeared on me once and the only way I found to get back to it once reopen the project.  I’m sure there’s some menu command to get it back – I just couldn’t find it.

The Object Inspector is listed alphabetically and not grouped into functional groups.  It has two tabs, Properties that shows the properties and Events which shows the available events.  Double clicking on a control, like a Button, automatically drops you into the Code Editor and into the Action event.  All code for a form or library is available as a complete text file rather than the way Xojo presents it to the user in a singular fashion (i.e. you get to see one method, property, or event at a time regardless of your coding skill level.

Here’s where things got really confusing for me.  A multi-device project has one library (FMX) whereas a Windows-only project could use that one or one called VCL.  Then there’s the choice of what language to use C++ versus Delphi.  I was really confused on how to even figure out how to do a simple message box on the click event.  I don’t see this as a huge problem as it’s common with learning any new framework so it’s just a matter of finding the right documentation and doing some reading.  But it is a little concerning that I wasn’t able to find this readily.  It was frustrating.

Code signing is built-in for all target types.  For Mac deployment (assuming you can get it working) has built-in Notarization but it should be noted that you have to have a Mac and use paserver application to do code signing and notarization.

Another interesting thing is that you can have Windows, Mac, Linux targets all in one project file.  That’s not too much different than Xojo but what’s also interesting is that you can have Android and iOS targets as well.  The form editor gives you a simulation of what the UI looks like native to that platform.  I’ll be honest, it’s not a great simulation but it’s enough for you to get the gist of how it will look.  Of course, it’s convenient that you can reuse code amongst all of the targets in the same project.

During a demo with a sales rep and engineer I asked if the Mac controls were native.  They said they were but I can say with 100% certainty that the standard tab control in RAD Studio is not using the standard Mac tab control (that looks like segmented buttons centered on the page).  So I wonder about the veracity of this claim.  I could never verify this as i was unable to get a Mac app running on my machine.

RAD Studio has considerably more built-in controls than Xojo.  It really puts Xojo’s control library to shame.  It has everything to get going without having to jump to the 3rd party market.  However, when you do need something not provided (or that needs more features) there is a window to find them.  Simply go to the Tools->GetIt Package Manager menu option and use the search field to find what you need.  Additional filters allow you to see all, free, already purchased items and so on.  Need a PDF viewer, reporting tool, or advanced grid?  It’s in the list along with details about it and it has a convenient Install button right there.

RAD Studio is more expensive than Xojo but it does things that Xojo cannot currently do (Android for example).  To create macOS, Windows, Android, and iOS applications it costs $2540 for the first year and that includes all major updates, hot fixes and ongoing maintenance of previous releases, and 3 developer support incidents.  The Enterprise license allows you to do client/server databases, build for Linux, and build REST API applications for $4217.

In many ways, RAD Studio is what I wish Xojo was striving for.  It has a definite “we’re serious” feel to it.  The 3rd party integration is really nice.  The documentation is very expansive and relatively easy to find things although as I noted above I had issues figuring out how to do a simple message box.  It is nice to see that they have hot fixes available rather than having to wait for a major update.

For a company that touts its cross-platform development capabilities I find it kind of funny that they don’t have a Linux or Mac version of their IDE.  If they did I think they’d learn a few things about making Mac applications in making their IDE truly cross-platform.

The fact that I’ve struggled to find answers to installation issues says that it’s not an easy language and IDE to learn.  I suspect that having dual languages (C++ and Delphi) along with multiple UI libraries makes getting started much tougher than it needs to be.  Getting the cross-platform applications working seems to be finicky and while I’m sure it works I threw my hands up in frustration.  

Yes, I’m spoiled because the Xojo IDE (mostly) works the same on Mac, Windows, and Linux and compiles for the other platforms without needing to run a special app on the target platform (iOS requires a Mac but that’s an Apple restriction).  While it’s true that there have been hiccups with API 2.0 the language is still undeniably Xojo and the Language Reference is decent with working code examples.  Where Xojo is deficient is in default controls (like Date, Time, Calendar) and there is zero 3rd party controls/libraries discoverability in the Xojo IDE.

If you have a different experience with RAD Studio I’d love to hear from you.  Are you doing macOS and iOS development with it? Did I do a fair review (keep in mind I’m coming from a Xojo)?

Xojo 2019 Release 2.1

Xojo 2019 Release 2.1 hit the web today.  If you are using R2 and any of API 2.0 this dot release is a must for you.  I almost would have almost preferred this release to be called R3.  The biggest change in Release 2.1 is that the API 2.0 events have been dropped from API 2.0 entirely.  There are also quite a few other changes and bug fixes that might impact your projects too.

Removal of the API 2.0 events was a concession to the 3rd party Xojo market (myself included).  There really was just no tenable way for Xojo developers to support both the old and new events simultaneously and after much lobbying and teeth gnashing they were removed.  

If you had implemented the new Events the R2.1 IDE will rename them back to the old events.  This is a good feature, but I’m always leery of the IDE changing code on me without my knowledge.  I recommend making a backup of your project before using this release.

Not everything is perfect with API 2.0 as it’s still hard to provide backwards compatibility with versions of Xojo prior to R2.1.  All of the new API 2.0 Properties and class Methods are significantly different and permanently change your source code that is not compatible with pre-API 2.0 versions of Xojo.  To help with this Xojo has added a new compatibility flag under the Gear icon in the Inspector that works with classes and properties.  You can check if the Object, Method, or Property is API 1 or API 2 compatible.

Really, these flags should be titled XojoVersion < 2019.021 and XojoVersion >=2019.02.1 to make it more clear.  But in reality this means that a Xojo developer must be using Xojo 2019 R2.1 or better to take advantage of these flags.  To be honest I’m still unclear on how these flags really work and the documentation regarding them is sparse.

Another change is a new menu option called Analysis Warnings under the Project Menu.  This dialog lets you pick and choose which warnings to see when you Analyze your project.  If you set “Item X is deprecated.  You should use Item Y instead,” to false you will no longer receive the API 2.0 deprecation warnings.  This is set to false by default so you won’t receive the deprecation warning unless you go looking for it.

The FolderItem class has new methods:  CreateFolder, CopyTo, MoveTo, and Open that now raise exceptions.

Window.Controls is now Iterable and you can use them in a For Each Loop to iterate through all controls on a window.

The DateTime class now has an optional parameter that lets you specify the TimeZone.

There are ton of bug fixes.  Here are some of the highlights:

The IDE no longer crashes on macOS 10.15 (Catalina) when clicking on a color swatch in the Inspector and then navigating to another control before closing the color picker.

RemoveAllRows no longer crashes the application under certain circumstances.

The Database Editor no longer throws exceptions when dropping table columns.

They fixed a number of memory leaks.  This includes (but probably not limited to) ODBCDatabase when binding parameters to prepared statements, MSSQLServerDatabase when using Prepared statements.  When database objects go out of scope or are set to nil.

There are numerous examples of Deprecations with Replacement warnings now working properly with various classes.  Constants have been replaced with more enums and so on.  There’s just a boatload things working better with API 2.0.

In general if you are already using R2 then you MUST upgrade to R2.1.  If you’re not using R2 then I still suggest waiting for at least another cycle since more bugs will be found and probably a few more things tweaked.

If you feel like you’ve wasted your time with R2 I feel your pain.  The whole R2 cycle was really long yet API 2.0 was rushed through without much  thought about the existing Xojo community and ecosystem despite attempts at communicating this information.  I just don’t see the benefits of disrupting the entire user base, 3rd party ecosystem, not to mention 20 years of documentation, internet search engine results and so on, for what, in my opinion, are arbitrary and meaningless name changes.  Some of the name changes make little sense but that’s a different argument that I’ve made before.

Personally, I would have appreciated the approach that they took with the URLConnection class that replaced HTTPSocket.  It was a new class and you didn’t have to use it.  It is using the new style exceptions rather than relying on error codes and it is a complete break from the old class.  They did this with DateTime and RowSet and I’m fine with those.  But having FolderItem (and other classes) now doing double duty depending on *how* you create them is a long-term support disaster.

So there you go Xojo coders.  Xojo 2019 R2.1 is out and it’s better than R2 and has major changes that make our lives a little easier.  What are your thoughts about Xojo 2019 R2.1?


[Edit] Apparently the Analysis Warnings dialog is NOT new. I’ve just never noticed it and, until now, I guess I’ve never needed to care.

Comparing Lazarus to Xojo

In my search for Xojo alternatives I was pointed to Lazarus https://www.lazarus-ide.org which is a cross-platform IDE that uses a Delphi-compatible language (i.e. object Pascal). I was pretty happy to see that it has a Mac version of the IDE and I will freely admit that I prefer to work on MacOS for a variety of reasons. Among them is usually ease of installation and Lazarus completely fails on this count in my opinion.

Let’s start with installation. The Lazarus website takes you to a SourceForge repository that has three downloads. fpc is the compiler, command line tools and non-visual components. fpcsrc is the sources of fpc and its packages and you need that for code browsing. And then finally there is the lazarus IDE itself with visual components and help files.

First issue is that none of the Package files are code signed which means you automatically have to work around Apple’s security. Not hard but still it doesn’t give you warm fuzzies right off the bat. I forget which step made me do this but I had to upgrade to the latest version of Xcode and install the Xcode command line tools.

Then there was the issue that the Lazarus downloads doesn’t included a Mac version that will run on newer Mac systems. So you end up going to the Free Pascal Compiler repo on SourceForge to get it to install.

Finally, you get to the point where the Lazarus IDE installs and then you get to the configuration screen. As you can the FPC sources can’t be found. But wait, wasn’t that part of the big three downloads I did to begin with?

In the long run no amount of reinstalling or internet searching could solve this problem. There does happen to be an entry in the ComboBox at /usr/local/share/fpcsrc and when you use that option a dialog warning you “Without the proper FPC source code browsing and completion will be very limited.” But it lets you ignore it and actually open the IDE. For now we’ll ignore that the debugger doesn’t appear to exist either.

A blank project appears including a blank form (Form1). The component library window is spread across the top of the window with 15 tabs to break it up. In the Standard tab double click on the TLabel adds it to the form. From there you can drag the control to the location of your choice.

Things go very downhill from here. The label is selected and the eight handles appear and the mouse cursor changes when hovering over them. One would think that you can simply grab the handle to resize the control. Alas, I could not with the label even though I could with the other controls. I couldn’t even change its width from the properties list.

The properties list is pretty standard. All of the properties are listed in alphabetical order which I can live with but I definitely appreciate the grouping that Xojo does (although I still prefer the older Real Studio properties list to the Xojo Inspector). Logical groupings make life easier in a properties list.

A tab control on the properties list also shows the available events for the control. If you click on the right side of the event I immediately get an error “Error: include file not found ‘typshrdh.inc'”. Um…sure. Anyway, at this point I can’t do much more without getting these setup properly.

After spending a couple of hours over the course of three days I’ve given up. My Google-Foo is pretty strong but I keep getting nowhere. The directions I’ve found are pretty minimal and I’ve done what they say I should be doing to no avail.

All of this tells me several things. The lack of documentation, particularly for MacOS, tells me that that it’s not well maintained for MacOS and I don’t think it’s used by Mac developers very much. And this is long before I get into evaluating the language and libraries that are available for it.

For ease of installation and getting that first Hello World application up and running Xojo is by far the clear winner. Look, I don’t expect an open-source project to be as easy to setup as a commercial tool so perhaps it’s not a fair evaluation. But it is one of my criteria because I have clients that take over development of their projects after we do the initial work. So if I’m having these types of problems I can’t imagine a less skilled developer having any less.

If you’re using Lazarus on the Mac I’d love here from you. Drop me a line at support@bkeeney.com and perhaps we can get me past this hurdle so I can do a real evaluation of the tool.

Customers For Life

I highly recommend you read/watch this post: https://socialtriggers.com/lose-customers-alienate-clients/

I’ve been doing consulting work for over sixteen years and a vast majority of it using Xojo. During my time with my own clients I’ve tried real hard to keep them happy because I’ve always known that happy customers come back. Finding new clients takes a lot of effort.

I know I’m not the least expensive Xojo consultant out there and I’m certainly not the most expensive either. Our billing rates reflect what we feel is a good value. If our rates are too high for a prospective client I’m okay with not getting their business because it’s not worth it to me to compromise on that (and I’ve pointed them to other developers that I believe could help them). Sometimes they come back later and sometimes they don’t.

The post I linked to talks about getting ‘Customers For Life’. I’m happy to say that we’ve had some of the same consulting clients for well over ten years. I try to make them feel appreciated and that we listen to their concerns. When things go wrong we try to make it right. Some clients have left and I hope they’re happy with the new developer they decided to use. But a lot of them stayed and that makes me very happy.

As the post said it’s not all that hard to keep a customer. All you have to show is that you have their best interests at heart. As Maya Angelou said, “People will forget what you said, people will forget what you did, but people will never forget how you made them feel.”

How does this all relate to the general theme of my blog? Well, it’s no secret that I’ve been unhappy with Xojo recently. I’ve felt for many years that Xojo doesn’t court people like me (consultants and 3rd party developers) with much fervor. I’ve generally been okay with that because the product works well for what I do for my customers and if they’re happy I’m happy.

The whole fiasco with API 2.0 has left me feeling rung out and unappreciated. Many of the beta testers gave their opinion and concerns about API 2.0 very early in the R2 beta and those concerns were either ignored or dismissed. Those concerns have since been confirmed by the 3rd party developers.

If you had asked me a year ago would I be this mad at Xojo? I’d say, not a chance. After all I’ve been their customer for a long time. I’d hate to add up all the money I’ve paid them for licenses, consulting leads, and conferences over that period not to mention the number of blog posts, the many hours to create training videos, and in general promoting their product. Obviously helping them has helped my business. I’d like to think my work has helped them too.

So what happens when they lose a customer for life? We’re going to find out, I guess. I’m not going away any time soon since I’m not going to abandon my consulting clients but rather than renewing annually like I’ve done for many years I believe I’ll wait until I’m forced to upgrade for whatever reason, or they release a version I can use.

I’ll still blog about the product because that’s what I do and I’ll continue to update our Xojo products because we use them too (converting to API 2.0 is still up in the air for now). Will I start looking at alternatives to Xojo? Yes because they’ve made me feel like I’m unimportant to them. They don’t want customers for life they only seem to want new Xojo developers.

Finding an alternative to Xojo won’t be easy. Despite its warts it’s still a pretty unique product. There are lots of alternatives that don’t do something that Xojo already does, but the flip side is that there are products that do some things way better than Xojo.

Over the upcoming months I’ll start letting you know what I’ve been looking at and why. It might be illuminating and it might just end up being that I stick with Xojo because I just don’t find an alternative (I doubt this but it’s a possibility). I’m looking at the overall package from the IDE, to the language, to the 3rd party market, to the consulting market. It’s a big task.

Could Xojo win me back? Anything’s a possibility. Heck, I want to be excited about the product again. I need it to succeed for my clients to succeed. But for now, I’m satisfied with 2019 R1 and looking for alternatives.

Ruminations on API 2.0

I took some time this week to really work with API 2.0.  I took a generic ActiveRecord project and converted it to the new API.  It wasn’t long before I found a showstopper bug with DateTime and Introspection (it has since been fixed in a beta).  There were only a thousand or so “Deprecations with Replacement” message so that was just a few hours of work.  Many were duplicates of the same bug (since I use a lot of arrays in ActiveRecord the Append method needs to change to AddRow).  Fairly easy to change if not repetitious.  No big deal, right?

Shorts, our reporting tool, has thousands of immediate ‘deprecations with replacements’ warnings.  And then I got into things like Recordset turning into RowSets and string functions changing.  After 5 hours of working on it I’m still at over 3,000 deprecation warnings.  At this point I just don’t see the point of trying to convert Shorts.  Obviously at some point I will have to but there is no immediate need to do so.

And that’s the problem with flagging all the old API warnings as Deprecations.  It’s kind of silly because there is no immediate need to do so.  It’s just an item marked as deprecated but will be around forever.  So I think it’s silly to call them deprecated in the first place.

Another issue I have with the list is that it’s not grouped in any functional way.  They appear in the list as they’re found by the compiler.  In my ideal world I’d like to work with all the Dates I’m converting to DateTime all at the same time.  Same with RecordSets to RowSets and so on.  The Check Project just doesn’t help when it has thousands and thousands of warnings in random order.

Some changes you can use global search and replace.  The caveat being that if you’ve added a similar method to your class you might kill your project accidentally (i.e. see Shorts above).  The other thing that really makes life hard is string manipulation.  In the old framework strings were 1-based.  In API 2.0 they are 0-based so if you were using String.Inst and checking for zero you now are using String.IndexOf and checking negative one.  There is simply no way you can do a global search and replace for that.  The other one that’s been biting me is the use of Recordset.IDXField that was 1-based.  The replacement is RowSet.ColumnAt is 0-based so that’s another thing you can’t just use global search and replace.

The 2019 R2 IDE added the ability to quickly create a #if block to separate pre-2019 R2 code with new API 2.0 code.  That works well but for large projects that might be a lot of work.  Too much work on any project of any reasonable size.  

In API 2.0 there are a lot of replacement properties and methods.  For the most part these are not a big deal.  However they don’t always make sense.  For example, the TextField and TextArea Text property have been changed to Value.  How does that make using TextFields and TextAreas any ‘easier’ to understand?  TextField1.Text = SomeVariable is perfectly understandable whereas TextField1.Value = SomeVariable is less understandable because now I need to know that I’m talking about a TextField or that SomeVariable is a string.  If you are enforcing your control naming conventions and variable naming conventions it’s not so bad, but still this seems like an unnecessary change.  It makes reading code LESS clear in my opinion.

Since the value type didn’t change (string in this case), I don’t see why this change happened.  I guess one could argue that it makes it more consistent with things like CheckBox.Value but I’d argue that CheckBox.State is the better ‘value’ property since a Checkbox can have three states.  Inconsistencies like that make API 2.0 harder to use in my opinion.

The new Event names in API 2.0 is a big deal.  Nearly every control event has new event names.  But then some like MouseMove, MouseDown, MouseUp didn’t change.  Seriously, if you are going to change the event names for practically everything why not go all out and change everything?  Which begs the question why were some changed and not others?  I digress.

Some changes like Button.Action changing to Button.Pressed actually make some sense.  There was actually confusion from new users on what event to implement.  I can’t tell you how many times I saw a new Xojo user implement the MouseDown event because it looked more promising than Action.

But some new event names are just stupid.  Timer.Action event is replaced with Timer.Run.  WTF was this for?  The Timer has one event and I could argue that “Run” is not an accurate description of what that event means.  The timer isn’t ‘running’, it’s finished running.  Maybe a more appropriate event name would have been “DoYourOneJobNow”.  This begs the question I’ve been saying for years that why do I have to implement the timer event at all?  Rarely have I ever used with without the event.

And sharing code between versions of Xojo is totally borked.  Say, I have a class written with API 1.0 and I implement the Open event and then give it to you.  You’re in 2019 R2, create a subclass of my control, and implement the Opening event (because that’s what you want to use because you don’t want those silly deprecation warnings).  However, when you do this you’ve now kept my Open event from being called.  Thus whatever I had in the Open event is no longer run.  To me this is the most egregious bit about API 2.0.  Me, as a 3rd party Xojo developer can’t control what you’ve implemented.

There are several solutions (probably more) to the events issue.  First, the compiler, in 2019 R2 and above must produce an error if both the old and new events are implemented.  It would require a compiler engineer to move up the chain and see if both old and new events are implemented in the object and then spit out a compiler error that is understandable.  Who on staff could do this?

Another solution is to alias the events so that if someone implements the Opening event it automatically calls the Open event.  One question that’s not answered yet is:  Do we know if API 2.0 events fire in a different order than the old API 1.0 events?

Another solution that I’m pretty sure Xojo will not do is revert the events back to pre-API 2.0 status.  This solves all of the backwards compatibility issues that the Xojo 3rd party developers have with API 2.0.  We can deal with new methods using the #if XojoVersion technique but I don’t see how anything else is going to work and keep everyone happy.  The new API 2.0 properties in pre R2 projects could be hard to deal with so I’m not sure the best way of dealing with those since any flags put in for R2 won’t work in pre-R2.

In general, I think API 2.0 is a hot mess.  You don’t HAVE to upgrade your project to API 2.0 and I highly recommend that you do NOT for the foreseeable future.  I have not migrated any existing clients to R2 and have told clients that do their own development to not upgrade as well.  The API 2.0 saga is not finished by a long shot and it will take a while resolve itself (hopefully).

I’m Not Xojo’s Target Audience. Is Anyone?

I took the time out of my schedule to reach out to Xojo this week to discuss the issues I have with API 2.0 and other topics.  It was a fruitful, if somewhat disappointing, conversation with Geoff.  Like Anthony from Graffiti Suite I am cautiously optimistic that some of the worst issues third party developers have with API 2.0 might be alleviated.  Really we won’t know until we see their solution

One of the topics that I brought up was that these issues (the new Event names and marking anything from API 1.0 Deprecated – even though they’ll be around for a many years to come) were brought up early and often in the beta program.  I said that honestly, it made us feel that our input is not valued.  Geoff’s response is that the beta testers that brought these issues up is a small subset of the overall beta program and what they (Xojo) didn’t realize was those beta testers have other Xojo developers behind them (other Xojo developers) that aren’t in the beta program.  They assumed that most of our users were using the most recent version of Xojo.

So, in other words, the biggest, most active users of their development tool, that are in the beta program because they want to be and need Xojo to work because of THEIR clients, their concerns could be ignored.  It means the professional Xojo users aren’t considered a part of their target audience.

Wow.  That is stunning to tell someone that has been in the beta program for (probably) over fifteen years that their input doesn’t matter.  The three pro licenses that I’ve been purchasing year after year for over a dozen years doesn’t matter.  The many years of blog posts promoting the product don’t matter.  The thousands of hours of streaming video training about the product don’t matter.  

I’ve been going to Xojo Developers Conference (XDC) for years.  I’ve spoken at all of them since 2004.  The conferences are expensive enough to attend that really it’s only the professional users that attend.  There are some citizen developers that attend but mostly it is people that make a living off of using Xojo in some way.  Maybe this is why XDC is now being marketed as Xojo.Connect? Targeted for citizen developers?  I don’t know but it’s not any less expensive.

I asked Geoff if they’ve ever asked why long-term users stopped renewing.  The answer was no.  They did it years ago with people that signed up to download Xojo but never purchased.  They couldn’t find a pattern which I totally get.  Heck, I’ve downloaded and discarded dozens of development tools over the years just to kick their tires.  But not knowing why someone stopped paying you $700 year after year?  Seems like it would be an important thing to know.

I’ve been around a long time and have remained friends with some of those former Xojo developers.  Some leave because of long-term bugs.  It is disheartening to report a bug that affects your app that gets ignored for years on end.  Granted not all bugs are equal but a show-stopper bug is just that.  When your bug is ignored it’s pretty easy to check out.

Some leave because Xojo isn’t as RAD (Rapid Application Development) as it is billed as.  Database driven applications (which I would say is what most businesses need) is pretty bad (hence why we’ve had our own library forever).  Why use Xojo if it’s not RAD?  

Some leave because there is a lack of capabilities in the product.  iOS (but also true for all targets) is painfully lacking in capabilities that force you into learning complex declares.  There are no built-in controls for Date, Time, Timestamp, or numbers only Text Fields, exporting to PDF, no ability for applications to have a report editor, a good grid, etc.  Some of this is because Xojo is the lowest common denominator between Mac, Windows, and Linux (for desktop) and doing these things cross-platform is really hard.  

Some leave because of the lack of options.  Xojo has a tiny 3rd party add-on market.  You only have a few options (if any) for some things or you make them yourself.  Users hate reinventing the wheel.  Xojo itself doesn’t do much to promote or help the 3rd party market.  Other development tools have significantly more options to choose from.

Regardless, there are probably a ton of reasons why people leave.  I suspect that most come down to some variation of the above.  These are also the same reasons why new users will walk away too.

Citizen developers can walk away from Xojo with hardly a second thought.  They’ve invested practically nothing in the tool.  When you’ve been in the Xojo ecosystem for many years apparently we’re taken for granted because the cost of moving is so high.  But who are the cheerleaders for the product?  Who helps new users in the forums?  The less active the community the harder it’s going to be to get those new citizen developer sales.  I see this as a negative feedback loop.

I’ve been a Xojo consultant for over over sixteen years.  I guess I’m not their target audience.  Is anyone?