Locally-run web server for cross-platform GUI apps coded in Perl
Stunnix Web Server
This is S5-based presentation. If viewing in browser, use keyboard arrows to navigate between slides.
GUI apps in Perl: impossible :-(
If we want them to run on Windows, OS X and Linux:
- GtkPerl seems to be only way to do it, rather complicated to install on Windows and OSX.
 - QtPerl is not maintained
 - WxPerl is a pain (since Wx is a pain to use and unreliable)
 
Why not run web-server locally?
We can use locally-run web server and web app to implement functionality
Concept (from user's point of view):
- user clicks on some icon or shortcut
 - window appears (possibly browser window) with applcation in it
 - Once user finished working with app, he clicks some button like QUIT on the page - window disappears and RAM is freed from web server
 
How it should be implemented
How this can be implemented under the hood? When user clicks an icon, some wrapper:
- checks that server for that App is not running yet (otherwise go to step 4)
 - finds free TCP port
 - starts web server on free tcp port
 - starts browser with showing some page of the site
 
What's special with this approach?
Web Server is run locally, so:
- user doesn't need to be connected to Internet to work with app
 - nobody can connect to this web server from other computers - security is not important
 - transfer speed is at least 30Mb/sec
 - We can use a lot of multimedia due to speed and can make our app prettier than convenient apps
 
Why developer should love this?
- web development is much cheaper than GUI app development
 - Product is cross-platform by definition
 - It's trivial to make such app a networked app (serving more than 1 user) - just ask web server to listen on 0.0.0.0, not 127.0.0.1
 - almost any existing serverside and client-side web code will work this way after trivial modifications (or as is)
 
Why user should love this?
- Any dialog/page can be printed
 - Font size can be changed with a roll of a mouse wheel
 - Any piece of text can be copied to clipboard
 - custom skins can be used for UI (using functionality provided by the browser)
 - Multi-document interface is trivial to use (and implement)
 - There is a big chance that developer can make multi-client app and it will be cheap (since it's trivial for developer to implement it)
 
Why user should love this?
- Any browser window can be resized
 - Developer can implement attractive UI since it's easy to do this with this technology
 - Advanced user or sysadmin can tailor .html templates to their needs (e.g. to fill default values)
 - Plugins and native support for auto form filling are available
 
Required for user's convenience:
- Working as a non-root user
 - No need to do installation of web server, perl and other dependancies
 - Small response time, interactivity as close to usual GUI apps
 - Concurent use of products using this approach by the same user
 - Ability to quit product (e.g. to uninstall it immediately after trying :-) )
 
How Stunnix Perl Web Server was born
There was a need for cross-platform GUI for Stunnix Obfuscators (all written in Perl). 9 years ago it was impossible to implement in Perl using Gtk or Qt. So "locally-run web server for GUI" concept was born.
There were no good pure Perl web servers 9 years ago. Problems with existing ones (UNIX only/ cgi-only/ no POST/ one request per time). So Stunnix Perl Web Server was created (SPWS for short from here).
Features of SPWS
- Satisfies all "convenience requirements" above.
 - Pure perl (5.004 or later)
 - Uses only modules shipped with perl
 - Doesn't need to install anything additional
 - Windows edition may include stripped Perl interpreter; on other platforms, system perl is used for running
 - Includes smart wrapper that finds free port and opens browser
 
Introduction to SAWS
Also SAWS was born, that used Apache codebase for web server core. Reasons:
- Ability to code server-side logic in PHP and Python using mod_php, mod_python
 - More stability and features
 
Features of SPWS and SAWS
- Work from directory with any name, including ones with spaces in names
 - No installation needed - extract to any directory and run from there
 - Works from read-only devices
 - Share same set of Perl wrapping code for configuring and starting web server and database server
 - Show tray icons on Windows and Mac - for stopping web server and reopening main page.
 
Features of SPWS and SAWS
- Additional info about system is exported to scripts
 - Blocks Windows Firewall
 - Has web self-hosted configuration tool for developer -CDBuilder
 - Supports MySQL and SQLite as databases with proper initialization and database file handling
 
Details on Stunnix Advanced Web Server
Has all features of SPWS plus:
- Supports HTTP over Named Pipes on Windows to avoid problems with Firewalls
 - Includes additional tools to implement apps conveniently - e.g. native file and directory selector
 - Ships with custom built of Portable Firefox (no menubar, no toolbar, supports HTTP over Named Pipes on Windows)
 - Works from read-only devices
 - Allows static files to be encrypted
 - Supports mod_perl, mod_php, mod_python, mod_rewrite, mod_proxy and all Apache modules.
 
What applications to implement
- Interactive catalogues on CDs, photoalbums
 - Training and learning materials on CDs/DVDs or as downloadable apps
 - Downloadable site snapshots for users with bad connectivity
 - small CRM systems
 - corporate apps
 - same as for Rich Internet Apps
 
Who uses this approach?
Stunnix uses SPWS for Obfuscators (for C/C++, JavaScript, VBScript, Perl). They are implemented completely in Perl, both UI and backend.
Stunnix customers.
Besides Stunnix customers, we know only about HP/Compaq:
A control panel for HP printers (e.g. HP LaserJet 1018) for Windows is implemented as locally-run Tomcat site.
Problems when using this approach?
- Parts of brower's UI that are visible sometimes confuse users. Special web browser can be included with the server.
 - Competitors can study or borrow server-side code from locally-run web site. One can use Stunnix Perl-Obfus for obfuscation of Perl code and IonCube PHP Encoder for PHP code.
 
Questions?
- Vlad Kharchev <v.kharchev@gmail.com>
 - Stunnix Advanced Web Server: http://stunnix.com/prod/aws/overview.shtml
 - Stunnix Perl Web Server (obsolete): http://stunnix.com/prod/ws/overview.shtml