Paris, 2006-02-24APL and OO Morten Kromberg Technical Director, Dyalog Ltd.
Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.
-
Upload
lorena-bailey -
Category
Documents
-
view
219 -
download
0
Transcript of Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.
Dyalog’09
Overview of MildServer
Morten Kromberg
Dyalog’09 – Princeton, NJ
Goals and Philosophy
• The goal is to make it possible for ”ordinary” APL developers to develop web pages
• The ”MildServer” is an experimental platform for this work.
• What’s the problem, anyway?
MildServer Overview Dyalog’09 - Princeton 3
What’s the Problem?POST /linreg.dyalog HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, ... blah blah blah ...
Accept-Language: da
Content-Type: multipart/form-data; boundary=---------------------------7d83002220638
UA-CPU: x86
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; ... blah blah ...
Content-Length: 2198
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: UserId=mkrom; Session=dOiEkOvDgxAVdTpXZMRhpwCxpalFAI5p2pvbbhTHHAA=
-----------------------------7d83002220638
Content-Disposition: form-data; name="Degree"
1
-----------------------------7d83002220638
Content-Disposition: form-data; name="X"
1
-----------------------------7d83002220638
Content-Disposition: form-data; name="Y"
2
MildServer Overview Dyalog’09 - Princeton 4
The Desired Answer...HTTP/1.0 200 OK
Content-Length: 2515
content-type: text/html; charset=utf-8
<html>
<head>
<title>Demo Server</title>
<link href="/Styles/Style.css" rel="stylesheet" type="text/css">
</head>
<body>
<h2>Linear Regression</h2>
<table >
<tr>
<td><form action="/linreg.dyalog" method="post" enctype="multipart/form-data">
<table>
<tr><td ><b>Degree...</b></td>
<td><select " name="Degree" value="1">
<option selected>1</option>
<option>2</option>
<option>3</option>
</select>... of polynomial</td></tr>
MildServer Overview Dyalog’09 - Princeton 5
What’s The Problem (again)?
• Decode the HTTP Headers and Data– Make data available to the application developer
• (Detect and) Manage ”Sessions”: Persistence of data from one request to the next– A ”Cookie” is a bit of data stored on your PC, which is
transmitted to the server with every request– A session cookie tracks a user from one page to the next
• Provide Security: Identify the User and Restrict Access to parts of the Web Site
• Help the application developer generate HTML– And a bit later (perhaps), more complex controls
MildServer Overview Dyalog’09 - Princeton 6
BIG Thanks to ”WildHeart”• I have been allowed to steal code from the
”WildServer” and other servers Stefano Lanzavecchia has built– (all the tricky bits about decoding HTTP!)
• WildServer is a more complete, ”more object-oriented” HTTP server developed by Stefano
• MildServer is Mortens ”watered down” environment
• ”Anyone who is able to write an APL function should be able to turn it into a web page” ™
MildServer Overview Dyalog’09 - Princeton 7
A MildServer Page• Each page is a class which must derive
from MildPage• It must have a public function called
Render which takes an instance of HTTPRequest as its argument
• Render must end by calling one of:– Request.Return (HTML)– Request.ReturnFile (FileName)– Request.Fail (HTTPCode)
MildServer Overview Dyalog’09 - Princeton 8
Page Data• For each user session, an instance of the page
class is made (object orientation is a good tool for this )
• If your page has Public Fields or Properties, MildServer will move data from the HTTP request into your page if the HTTP element has the same name
• Any data inside the instance will survive until the session ends (times out after inactivity or user LogOut)
MildServer Overview Dyalog’09 - Princeton 9
Page Data – Example ...
MildServer Overview Dyalog’09 - Princeton 10
Source Code Management ...
• MildServer is also a demonstration of the ”new way” of developing Dyalog applications
• ALL the code is in UTF-8 text files, managed by SALT (the Simple APL Library Toolkit)
• SubVersion (a free source code management system) is used to manage the source code
• It is available as a download from the APL Wiki
• This does not compromise the way that you develop APL applications at all ...
MildServer Overview Dyalog’09 - Princeton 11
MildServer Components• MildServer is a TCP/IP server which accepts
connections, incoming data, and returns output• HTTPRequest is a class which decodes an HTTP
Request into APL data• SimpleAuth is a basic security provider which
uses the HTTP Challenge protocol based on XML input
• SimpleSessions is a simple cookie-based session manager which preserves application data for the duration of a session
MildServer Overview Dyalog’09 - Princeton 12
MildServer Configuration
MildServer Overview Dyalog’09 - Princeton 13
Open, Modular Design• Note that the Session Handler and
Authentication components are configurable
• Each one is defined in a script file; you can enhance them or replace them
• Over time, more and more of the MildServer should become configurable
• The idea is that the community will build a more sophisticated shared web framework in APL
MildServer Overview Dyalog’09 - Princeton 14
My Own ”To Do” List• Make HTMLInput Class Extensible• Add optional Authentication Handlers
– Combine SSL and certificates with passwords– Provide a more elegant security plugin using
an HTML subform rather than the HTTP Challenge protocol
• Error Logging and Reporting module prototyped
• Run MildServer as a Windows Service (autostart when Windows starts)
MildServer Overview Dyalog’09 - Princeton 15
Conclusion• Proposition:
– MildServer is sufficient for many ”simple” applications
– Anyone who can write an APL function can implement a web site using MildServer
– Scripted code does not compromise the ”APL Way”
• NO additional components needed (IIS/Apache)• It is an experiment (but already in ”production”
use in simple applications) ...– Please take a look and comment, and contribute!
MildServer Overview Dyalog’09 - Princeton 16