Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

16
Dyalog’09

Transcript of Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

Page 1: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

Dyalog’09

Page 2: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

Overview of MildServer

Morten Kromberg

Dyalog’09 – Princeton, NJ

Page 3: 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

Page 4: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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

Page 5: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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

Page 6: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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

Page 7: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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

Page 8: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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 9: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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 10: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

Page Data – Example ...

MildServer Overview Dyalog’09 - Princeton 10

Page 11: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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

Page 12: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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

Page 13: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

MildServer Configuration

MildServer Overview Dyalog’09 - Princeton 13

Page 14: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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

Page 15: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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

Page 16: Dyalog’09. Overview of MildServer Morten Kromberg Dyalog’09 – Princeton, NJ.

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