We’ve recently had a number of projects that required the use of a serial devices in desktop applications. In all cases the clients said the devices are, “easy to use,” since they act just like a keyboard. If our experience is typical then I’d hazard a guess that many Xojo developers are frustrated with them.
Several projects required the use of barcode scanner. Having a barcode scanner work as a keyboard makes sense, I guess. It means that it can work with literally any application, anywhere, any time. All it needs is focus on a text field and whatever the scanner sees it puts into the control.
In another project we had an ultrasonic sensor that would take the application out of idle mode and present the user with purchasing information. Again, it acted just like a keyboard which means it works with any application as long as you had focus in a text field.
If you happen to know WHEN this information is going to come in it’s not so bad as you can plan for it. Putting the focus in a field and waiting for information is easy. It’s not so easy when that information could come at any time. Of course all of our applications had data that could come in at any time and we had to be prepared to act on it immediately.
If you rely on a TextField or TextArea getting this information the rest of your interface can really suffer. It means that when your barcode/sensor field loses focus you have to get it back (or you lose information). Do you do this right away or wait a few seconds? And if you have a complex user interface how do you deal with tabbing between controls, or even simple things like a user changing a checkbox because the focus is lost on your TextField? It can be a nightmare to try and figure out and get right. The differences between Mac and Windows and Linux can be frustrating!
The answer that we ended up implementing was putting the barcode readers into serial mode. I’ve not run into a barcode scanner yet that couldn’t be used in serial mode. Every scanner has a gazillion different modes and properties (all set via barcode of course) and one of them is to make it appear as a serial device to the computer. On Windows this is a COM port and on the Macintosh they tend to show up as a USB Modem. If I had to guess I’d say it’s harder getting barcode readers that are Mac and Linux compatible.
Once it’s in serial mode it’s almost trivial to create a class that monitors the serial port and reads the data WITHOUT needing the focus in a TextField. The class then distributes the data to the objects that can consume the data. What I do is have the window or objects register itself with the class and then when the data comes in the class sends it to all registered objects. Each of the objects has an Interface with a simple HandleBarcode method. This is known as the Observer Pattern and there’s an example that ships with Xojo.
My ultrasonic sensor wasn’t so easy to overcome as it couldn’t be put into serial mode. However, it did come with a Windows-only SDK (thankfully it was a Windows only project) and with a little help with Declares we were able to get it working so we could tell if someone had walked up to the device and when they had walked away. I’m not sure what we would have done if it had been a Mac or Linux project.
Serial Devices are relatively easy to work with in Xojo (as long as they show up in the serial list). Having to deal with devices that act as keyboards not so much. I’d highly recommend trying to get them to work as serial devices and save yourself a ton of grief.
What’s been your experience with serial devices in Xojo?
Have I told you how much I love the Xojo community? I’ve been part of it for fifteen years and I’ve met hundreds of Xojo developers at developers conferences and probably exchanged emails with thousands more. I am amazed at how much this community helps each other and I wish there was a way to promote that as a key feature of the product. It’s a big deal. Really!
If you’re just starting out using Xojo know that there are a bunch of people, myself included, that are willing to help out, if we can, on your journey. Programming is hard. Well, I don’t think it’s hard because I’ve been doing it for so long, but it is complex at times and that makes it hard. Just ask your question in the Xojo forums and you’ll almost always get an answer within hours.
Even Xojo pros, such as myself, have need of help. Xojo covers Mac, Windows, Linux desktop, console, and web apps. It does iOS apps for iPhone and iPad. It now does Raspberry Pi for heavens sake! It works with dozens of different databases. There is simply no way any one person is going to know everything there is to know about Xojo. It just can’t happen. So yes, I go to the forums, all the time, and ask for help.
Just the other day I asked for some help with WooCommerce. Not Xojo related, really, but certainly related to a project we’re working on for a client. Within a few hours I had half a dozen developers private message me saying they might be able to help. Subsequent contact narrowed that list down a bit but the point is that I have probably shaved off several days worth of work simply by asking for advice.
I am biased towards Xojo, naturally, as it’s been my primary development language for fifteen years. I think I’d be hard pressed to find such a friendly community. I call many on the forums my friends even though I’ve never physically met them. The few that I’ve met in person have lived up to their forum reputations and are really friends for life.
So maybe this is my belated Thanksgiving post. I am thankful that so many years ago I jumped both feet first into the tool. I asked questions – many of the silly and redundant. I became more proficient and then made another jump to start blogging about it, making products for other developers, and training the next generation of developers.
So if you are in need of a cross-platform development tool I highly recommend Xojo. It ain’t perfect but no development tool is. If you jump in I think you’ll love the community. I know I do.
What say you fellow Xojo developers?
It’s been a very busy first half of the year at BKeeney Software. We’ve just finished up three medium sized web apps. One was deployed to Windows Server, one deployed to a Linux web server, and the last to Xojo Cloud. We’ve done a couple of small web apps to a Xojo friendly host too. I will describe our experiences below.
The first project was a CRM project where we converted a really old MS Access and ACT! system to Xojo. The UI wasn’t all that complicated but the data conversion was a pain since it was so dirty. We ended up using a MySQL database server.
Since we didn’t want to go through the hassle of getting an IIS server we made the decision to deploy as a standalone app. The hardest part of the whole installation was figuring out how to create the service. We ended up using NSSM – the Non-Sucking Service Manager http://www.nssm.cc to create the service. After that, installation and updates were a breeze by simply stopping the service, changing the files, and restarting the service. We are able to VPN into the server and copy the necessary files over.
The server was virtual and running on a VMWare server. Despite our specifications the server was set up initially with a single core (virtual) processor. Performance all the way around sucked. We complained, the client complained, and as soon as they upped it to dual core processors (as we specified) everything went smoothly after that.
The second project was another CRM-type project though a little smaller. It was using an SQLite database. We converted the data from a FileMaker database. The data was much cleaner and more straightforward so it was a relatively easy transition.
The client decided to host on Xojo Cloud so deployment is done from with the Xojo IDE. The only file we didn’t deploy via the IDE was the database itself which we transferred via SFTP to the appropriate shared document directory on the Xojo Cloud server.
Xojo Cloud, for the most part, works flawlessly. There have been occasions, however, where it fails to upload properly. It’s a frustrating experience, to be sure, but Xojo customer service has always been able to fix it. When it happens on a weekend you’re kind of out of luck. Here are a couple of suggestions to try and get around the issue: 1) Restart your server via the Xojo control panel. 2) Change the application ID of your application and try uploading again.
Our third application has been around a while but we switched over from using SQLite to MySQL after our little db reached about three and half million rows in single table. It still worked but some of the queries were taking *minutes* to complete. The decision to move over to MySQL wasn’t a hard one.
You’d think that updating an existing app would be easy. This one turned out to be anything but easy. Since this one bites a lot of people deploying Xojo web apps to various Linux distorts it’s worth writing them all down.
- Until Xojo web apps are 64 bit you’ll have to make sure the 32 bit compatibility libraries are installed. Each is different so it’s ‘fun’ finding them. Honestly, check on the Xojo forums to see what people have found. Hopefully, this becomes a non-issue with Xojo 2015 R3 being scheduled to compile 64 bit apps.
- Make sure permissions are 775 for all files and directories *including* the overall directory. The latter one has bitten me more than once.
- Make sure permissions for the config.cfg file is 664 or 666 (I’ve seen it both ways and I’ve never had a problem with either one).
- Make sure the owner and group of the files matches that of the system. If you’re FTP client shows owners/groups and it says something like “mixed” you’ve got a problem. You’ll need to figure out how to change the owner/group on your own. This may involved getting SSH access. It may be easier to work through the CPanel File Manager to upload files because you’re guaranteed, then, to have the right owner/group.
- Make sure the .htaccess file has been uploaded. Since it’s a hidden file on Mac OS X it’s easy to miss this one. If you zip the output directory and then upload the zip it will be there automatically. If you’re zipping the contents of the directory don’t forget it!
- Does the server have libicu installed? Xojo 2015 R2 requires libicu and if you don’t have it your app will just crash with maybe an obscure error in the error log like “Can’t find missing file.” I had this happen to me this week and when I reverted to 2014 R2 the app started up right away. If you suspect you’re missing a library and have SSH access, try starting the app via the command line. It will tell you what the missing library is. You don’t always have SSH access so that’s kind of a drag.
Not really an issue with web app deployment, per se, but it’s an issue we deal with quite a bit. MySQL on Mac OS X doesn’t care what the case is of a table or view. tTable (mixed case) is the same as ttable (all lowercase). On Linux and Windows this does not appear to be the case. I know there’s a system variable that can turn this on or off but for this project the client had existing databases on the server and I really didn’t want to muck anything up on them. Many queries that were running great on our local (Mac) system were not on the server. Switching everything to lowercase isn’t a big deal (especially with ActiveRecord) but some db apps this will be a nightmare. So don’t forget to test!
1701 Software Inc. http://www.1701software.com
We have deployed to 1701 Software several times in the past six months for ourselves and for various clients. We’ve found their servers to be Xojo friendly from the get go (not so with most hosts) and their service is excellent. They also offer a number of database options that Xojo Cloud does not like CubeSQL and Valentina in addition to MySQL and PostgreSQL. Frankly, the fact that they are Xojo developers too makes them the top of my list of non Xojo hosting services. Their prices are pretty good too for those that are price conscious.
That is our experience with deploying Xojo web apps in the past six months. When everything works right it’s incredibly easy. When it doesn’t – well, you tend to swear like a sailor. Hopefully you’ll find this guide to be somewhat useful. Anything I forgot?
[Edit: Updated to not include an implied timeframe for the R3 release.]