Are you doomed if you don't develop for mobile and the web?
In a recent comp.lang.clarion post J André Labuschagné made the following statement in a discussion about developing applications for the web:
Incidentally, if anyone reading this is not moving to offering your clients both desktop and genuine web apps and mobile apps I predict that you will be out of business in the next few years. I know we would be.
To bolster André's point, Mark Riffey replied with a couple of interesting slide shows:
the second of which Mark considers especially worthy of attention.
Unless you're tightly focused on internal development or on a market that has no realistic need for web/mobile development, it's probably time you got your mind at least partly off the desktop.
There are a whole lot of options out there for web and mobile application development. While you can have pure mobile apps, in many cases there's overlap between mobile and web technologies so I'm going to lump them all together. Some of the ones I've encountered and/or used over the years include:
- "dumb" HTML/CSS (dumb web client)
- "smart" HTML/CSS client using Javascript
- non-web mobile client (with no back end connection)
- non-web mobile client with connection to a server for data and possibly business logic
- thin client solutions that present a desktop app to a mobile user
There are all sorts of client side technologies involved, including but not limited to:
- HTML
- HTML5
- CSS
- Javascript
- Native mobile device languages (C#, Java, Objective-C)
For communication back and forth between the client and the server (if this is needed) you might see:
- HTML (GET/PUT/POST etc)
- SOAP
- REST
- other remote procedure APIs
- direct TCP/IP
Data may be moved between the server and the client in the form of:
- XML
- JSON
- custom data formats
Data may be stored on the client as:
- XML
- text
- database (SQLite is a popular choice)
- there are lots of other mobile databases
The server side technologies are pretty much anything you can think of.
So, where do you start? If like most on this site you are a Clarion developer you don't have an out-of-the-box option right now (now being May 2013), unless you count some pretty antiquated technology. An HTML5-oriented solution is promised for Clarion 9, but no one makes critical business choices now based on what vendors may provide in the future. Right? We don't do that (any more), do we?
Here are a few of the products Clarion and ex-Clarion folk are using now for web and mobile development:
Mobile app development is even moving into the cloud. I've heard some good things about Telerik's Icenium , which is a local development environment for cross-platform development that compiles and deploys your apps in the cloud.
Avoiding doom
The desktop is a long ways from dead, but at the same time if you're like most developers the pressure to provide access to your desktop software's capabilities will only increase.
One question you should be asking yourself is how you can reuse your software's existing functionality on other platforms. Perhaps you can provide some features as web services. Or perhaps you can port some of the code to another platform.
For Clarion developers in particular, there's a big risk in having all that business functionality locked away in embed points. The only way to reuse the Clarion UI on mobile devices (other than on x86 Windows tablets) is via thin client software such as Thin@. That's a viable solution for some markets, but definitely not for all and it's more commonly used for desktop apps than for mobile apps.
To be able to reuse (or effectively port) your business logic you really need to be thinking about extracting it from embed points and putting it somewhere it can be reused, such as in a procedure (occasionally a good alternative) or in classes (usually the best alternative).
Beyond that, you still have the difficult (and to some degree ongoing) choice of which platform and tools to use.
I'm sure I've left out lots of technologies, tools and options of interest. Let me know how you're going about developing web and mobile apps.