April 11th 2008 Web Technologies on the Desktop
Last week I gave a talk on web security. The talk was loosely based (one might say “inspired”) by my honors thesis. My thesis is specifically about security, but the talk allowed me to explore other areas of interest tangential to my thesis, including:
- Software engineering, and how functional languages can help solve some problems in software engineering;
- and the more widespread use of “web technologies”, such as XML, HTML, JavaScript, and scripting languages, to build desktop applications, à la Konfabulator, Adobe AIR, and XULRunner.
Unfortunately, since my talk was on web security, I couldn’t elaborate on those two issues. As a student interested in programming language theory, I have lots more I’d like to tell people about the benefits of languages other than the ones we typically use at Bucknell (i.e., C, C++, and Java), but that was way beyond the scope of my talk. (Specifically, I wanted to talk more about the theoretical aspects of functional languages and help they help in program provability, the dynamic and reflective nature of languages like Python, and the power and flexibility of prototype-based languages like JavaScript.)
More importantly, I wanted to talk about the trend in bringing traditionally web-bound languages and technologies into the desktop. The second point is most interesting to me. I’ve long been a fan of Konfabulator’s model of using “simple” technologies like graphics and scripting languages to build full-fledged applications.
Thankfully, desktop computers are powerful enough to make applications built in interpreted, dynamic languages a real possibility. Most applications don’t require the performance of a fully-compiled app. Furthermore, languages like Python and Ruby make it easy to write critical sections in C or C++, and write the rest of the application in Python or Ruby (or whatever scripting language you prefer). Furthermore, languages like Python and Tcl already have pretty nice bindings to GUI libraries.
I’m very interested in building a system which would allow developers to write applications in a scripting language (I’d prefer Python or JavaScript), and design interfaces with vector graphics (such as SVG). Not only would this make programming fun again, but it would free developers from the traditional WIMP model, and maybe allow entire applications to be designed with the creative, functional interface designs I used to see in Konfabulator widgets.