HTML5

Open source upload control for Xojo Web

Plupload HTML web upload dialog control for Xojo Web.

Special thanks to Alexander Marthin @ Lumafilm.dk for sponsoring this project and generously donating it to the Xojo community.

Plupload is a widely used HTML/javascript web upload control facilitating the upload of large files via the web browser. The Xojo Web upload control is not well equipped for large files or when being used in a CGI environment.

Our objective here was to implement a web dialog control that presents a fully featured upload control powered by Plupload. Plupload can upload to any web server but by default provides a PHP script to facilitate file uploads. This repository contains a "www" folder which are the scripts and assets that need to be uploaded to your web server in order to facilitate the uploads. The "www/uploads" folder is where files are saved upon upload (configurable - see below).

To use in your Xojo Web project you want to copy the "Plupload" dialog control to your project. See the "btnShowUploader.Action" event in the example project for details on how to instantiate, configure, and show the control.

MIT licensed. Find it on Github at: https://github.com/1701software/Plupload_Xojo

Is Xojo Web "Flakey"?

Robert B @ the Xojo forums said that Xojo Web is "a little flakey".

I wrote back: 

Flakey is probably not how I would describe it.

I have to be in the TOP 5 if not the at the top regarding number of Xojo web apps deployed in any configuration. Literally a thousand times - I've seen it all.

There are some community best practices here that are actually kinda bad:

Example 1: Open a database connection for each session. This sounds cool except you discover that the framework builds a session for any web request to the root with a suitable browser user-agent. This means your app is HIGHLY susceptible to denial of service attacks. Take a HTTP testing tool and fire off 1000 connections to your Xojo app and watch it fall apart as it tries to open 1000 database connections...

Solution: If your database server plugin of choice provides asynchronous queries (MBS and possibly some Xojo standard ones) then you should use a pool of open connections as opposed to a connection per session.

The framework also does not protect you from very painful lessons:

Example 2: There are VERY VERY limited use cases for the Open() event in web controls and pages. Even in Session it's dangerous if you are trying to manipulate which page is showing or content on a page/control. The Open() event while representing the instantiation of the control/object on the backend does NOT represent the same thing it represents in the desktop framework. On the desktop framework Open() is both instantiated AND shown. On the web Open() occurs when created but you shouldn't really do ANYTHING in it and use Shown() instead. Someone will find a use case for it but you could just as easily put that stuff in a constructor method and avoid Open() all together.

Solution: Xojo should have made the Shown() event the Open() event and never provided access to Open() or called it "PreRender()" so it was obvious nothing was (potentially) drawn yet.

The framework is the opposite of responsive:

Example 3: While RubberViewsWE or some hard work can mimic responsive design this is not what the tool was designed for. I appreciate the pixel perfect renditions of my app but more views for different screen sizes paralleling "xs, s, m, l, xl, etc" from bootstrap would be appreciated. Think how on Xojo iOS you can switch between iPad and iPhone views. Xojo Web needs the same.

Lastly and only a problem in the largest deployments:

Example 4: No ability to centralize or share Session data forcing you to use sticky sessions and in general can't scale out horizontally as nicely as one would like. If your load balancer gets restarted or an individual instance crashes you lose a lot of valuable sessions in the process.

-----

Summary: Xojo Web is a product of its times and been neglected. Is it still a good product? If you know a little Javascript, understand HTTP, etc. then you appreciate the Javascript framework it provides. More work needs to be done to modernize it and protect the RAD developer from simple mistakes that they do not discover until deployment time.

I hope that's valuable food for thought for those on the fence. If nothing else Xojo Web is a great prototyping tool and you'll find you get 90% there. A little elbow grease and a little learning and you can build something that rivals any other tool.

What do you think? Is Xojo Web "flakey"?