REAL Studio Web Edition (or The Son of Swordfish)
First, let me get this out of the way: I am not a web developer. My plate is more than full enough developing desktop applications and while I’d *like* to do some web apps, it’s just not in my realm of the probable at this point in my life. However, I am pretty good at developing REALbasic applications that work well on Mac OS X and Windows (and throw the occasional Linux app in there too).
REAL Software announced today a new version of REAL Studio, called Web Edition, that will be released some time this Fall. Internally, they called this product Barracuda. If you know any history about REAL Software, they had an internal product named Swordfish that they announced at their annual developers conference in 2005. It was never released because it was already obsolete soon after they announced it due to a variety of technologies like AJAX and JAVA and a number of other technologies. So call this completely rewritten version the “Son of Swordfish”.
I spent three hours playing with an alpha build this weekend and my first impression of the product is good. Since it’s an alpha build it has plenty of bugs but it is an interesting twist on REAL Studio and REALbasic. This has the potential of being the first Rapid Application Development environment for web apps that doesn’t require an expensive server as these apps will run on any Apache server or web server capable of FastCGI (not all commercial hosts enable FastCGI on shared servers).
Existing users of REAL Studio will be instantly familiar with the editors and know how to get around. Since web apps are unlike desktop apps in many ways, there are a number of new objects, classes, and controls that are for web apps only. There are also some things, like the MsgBox function, that did not work for me but will probably work when it’s released.
Instead of the regular Application object, every REAL Studio web app has a new WebApplication object that handles the open, close and unhanded exception events. New to the web app is the WebSession object which represents each user that is connected to your application. It has Open, Close and Reloaded events which, as you can imagine, are similar to what you might do in the Application object in the desktop version since a desktop app supports one user at a time.
Instead of creating windows, you create web pages and you edit them in the web page editor. It is much like the current window editor but has a new set of controls and new features to go along with it.
One of the first new features you’ll notice is the ability to do in-line editing. There is a little editor icon to the right of most controls that when selected, brings up an editor for that control and masks out the other controls. For some controls, like buttons, text fields and so on it simply changes the text you see on screen. For more complex controls like the listbox, for example, you can add column headings and add default data into the listbox.
In some respects some of these features remind me of how ActiveX controls in Visual Basic 6 used to have their own editor and UI and for the most complex of controls this will be welcome as editing them through the properties list can be tedious. For the simpler controls (like the button, label, etc) this new inline editor does the same thing as simply selecting the control and starting to type.
The page editor has tweaks on features that are better than the current Window editor such as visually aligning controls and showing spacing differently. There are also a number of new controls that are pretty common in web apps today: Link which is a label that when pressed opens the browser to a new page; Search Fields which is a rounded TextField that keeps track of last values held; Segmented Button which is a row of buttons that can act like either radio buttons or check boxes.
There are a number of controls that have changed as well. Pushbuttons are now WebButtons and Checkboxes are WebCheckboxes but act pretty much the same. The StaticText object has been renamed to the WebLabel (which makes more sense to many developers coming from other languages). Radio Buttons are no longer individual controls – they are now part of a group and you can specify their dimensions like a listbox (number of columns and rows). I’m actually on the fence on this one since I see the value in it but could also see it biting me depending upon the complexity of the user interface in the project.
The first release will not come with a proper tab control, unfortunately. This is disappointing, but you can easily overcome this limitation with a Segment button and using Container Controls. Just like with the desktop app, I think Container Controls are incredibly powerful, and is a useful way to make complex, reusable ‘window-like’ objects.
Perhaps one of the bigger changes is the removal of the Canvas object. This was done, I was told, because HTML5 has a canvas object and REAL Software did not want any confusion. Instead we have the ImageView object which can accomplish many of the same things using its Picture property (the graphics object is gone). The canvas object may return at some point, however.
One huge change is that in none of the controls or windows can you control the text characteristics or background colors you’re used to expecting in a desktop app. For that, we now have Styles. Adding a style is just like adding a new class or anything other object in REAL Studio and when you edit a style you have the ability to change the properties of Normal, Hover, Pressed, and Visited objects (this includes pages). There, you can control the text properties, border, shadows, padding, corner radii, and opacity.
As you can imagine, this leads to some very interesting interactions that take very little code. For example, you can create buttons that change color when you hover over them, or change opacity once you’ve clicked on them. I suspect that this will be a huge deal in the long run as it makes very complex interfaces very simple.
Since there are a ton of things you could do with a web app and no possible way for REAL Software to cover them all, they have a virtual control called PageSource that lets you add pure HTML code, JavaScript, and others, and can be placed in any web page. It has two properties, the code itself and the location. You can place it in the Header, Before Content, or After Content. I imagine that just like for plugins for desktop applications, there could be a market for HTML components for REAL Software web apps.
Placing and dealing with the code behind the objects is just like a desktop application. In fact, it’s the same code for the most part. Where things start to diverge is with dialogs. In desktop applications you create a window and change it’s super to modal dialog or similar, and call it via code. This was flexible and convenient but created a new window. Many users have popup windows turned off so this won’t work.
To compensate, REAL Software created a web dialog class that doesn’t create a new window, it just shows up on the current window using some nifty AJAX. Since the standard MsgBox method did not work in this alpha build I ended up creating my own web dialog and adding it to the page. After you add it, it is displayed in a new list at the bottom of the window and can be access there. Otherwise it acts similarly to how dialogs work now.
Debugging an app is easy as well. Simply hit Run in the IDE and it compiles and runs the web app on the local web server. It responds to break points and exceptions just like a desktop app and and allows you to interrogate application variables in the debugger.
I’m not sure if web apps will understand the concept of Reports in the first release or not. If you need to display a report to the user, you could probably accomplish the same thing with a listbox that covers the entire page.
Currently, REAL Studio supports two types of builds. The first is HTTP and the second is FastCGI. FastCGI should be more efficient, but might not be for everyone if you’re on a commercial hosting service since many do not support FastCGI.
REAL Studio Web Edition apps work with Safari, FireFox, Chrome and Internet Explorer. How far back this compatibility goes I’m not sure of at this point. If you find a limitation, you can use the functions in the Session object to get the browser type, operating system, platform, etc and give corresponding messages.
The Session object also keeps track of the page state so your active web pages won’t be forgotten during a session. This means that each page is ‘remembered’ which is a very nice feature. So if you have a Customer page and an Invoice page and the user reloads the page or closes it and returns before the session ends it will load exactly where the user left off. This is another one of the main features that I’ll like to see in action on a complex web app.
I spent less than a half hour converting a very small calculator application I had originally written as a desktop app. I spent more time logging the minor bugs (I did say it was an alpha build, right?) I found than I actually did writing the web app. I have no idea how long it would take to accomplish the same thing in php, Javascript, Ruby on Rails, or ASP.NET, but I suspect the answer is longer. I’ll be curious to get a true web developers impression.
The one big question that remains is how easy it will be to deploy and install REAL Studio web apps on your server. I looked up some documentation on my commercial host on how to install FastCGI apps and it did not appear to be for the feint of heart as it required going to the command line on the server. At this point I do not think there is an option for Single-Click-to-Install.
The Web Edition will become part of the Enterprise Edition of REAL Studio and also as a standalone version for those interested only in web apps. This addition to the Enterprise Edition really makes it worthy of the Enterprise moniker now. The web app addition is scheduled to be released sometime this Fall. With REAL Software’s rapid release plan that could mean either Release 4 or 5.
What do you think about this announcement? Is your curiosity piqued?