Introducing.. NewtonOS Personal Data Sharing

What is NewtonOS Personal Data Sharing?

NPDS is as much a concept as anything else. When the Newton was conceived and then sold a fundamental tenet of its design was its portability. Yet, never during the course of its short and brilliant lifetime was it actually PORTABLE.

You could connect to any desktop.. as long as NCU or NBU or Xport was installed.

You could print out information.. if you had a compatible printer.

You could let others see your schedule.. if they had a fax to send it to.. or a Newton of their own.

Etcetera, Ad Nauseum, Ad infinitum...

NPDS LogoNPDS was designed to address some of these shortcomings and also as a proof of concept that PDAs should have HTTP servers embedded in them as a means of communicating with the outside world.

So, to answer the original question: "What is Newton Personal Data Sharing?"

NewtonOS Personal Data Sharing is a suite of software for the Newton that allows you to transparently share Notes, Calendar Entries, and Cardfile entries with clients on the WWW. It's a battery powered webserver that sports features often reserved for "big iron" servers.. scriptability, security, dymamic content generation, instant messenging, etc..

Why Do I Want To Use It?

What Do I Need To Run It?

  1. NewtonOS 2.x on a MP130 or better (MP2x00 recommended), running NIE 1.1 or later.
  2. Up to 32K Heap if you're running it hard.
  3. A static IP is suggested but not at all required since the advent of the NPDS Tracker.

Approximately 256 K of either* Internal or Card RAM for all the NPDS Components and Soups.
*Keep all components of NPDS on the same store if possible.


Basic Instructions:

Installation:

Package

Function

Required

NoteServ

Makes the Notepad Available on the WWW

YES

DateServ

Makes your Calendar Available on the WWW

RECOMMENDED

CardServ

Makes your Names File Available on the WWW

RECOMMENDED

Tracker Client

Enables you to sign on to a Tracker when online

OPTIONAL

Web*Pager

Recieve Instant messages from Visitors to your Newton (urlCop is required with Web*Pager)

RECOMMENDED

NPDS Setup

Configuration options for the NPDS Suite

YES

Script Editor

Write and edit custom Server-Side Scripts for NPDS

OPTIONAL

GIFServer

Serve Screenshots off of your Newton

OPTIONAL

GIFMaker

Extension needed for GIFServer

OPTIONAL

urlCop

Extension needed for Web*Pager to reply to Web*Pages

YES*

Scripts

Example embedded NPDS Scripts for your pages

OPTIONAL

Serving Your First Web Page:

Starting Up

  1. I assume you will be using NoteServ to serve HTML Pages. We need to configure that plugin before we start up NPDS.
    1. Decide upon one folder in your Notepad that you want to use to hold the Notes you'll make available on the WWW. You can change it later.
    2. Make sure there's at least one text-only note filed in that folder.
    3. Open NoteServ and use the folder picker to select the desired folder. (By default, it's set to "Personal")
  2. Open nHTTPd and establish a connection to the WWW by tapping the Start button (A)

    When the connection is established, your server's IP address will show up in the area marked "Not Assigned" in the illustration on the right (D). The status indicator (B) will change from "IDLE" to "INIT", pause while the other parts of the server start up, then proceed to "RDY". You'll also notice the Start button has been replaced by a Stop button.

  3. You're now ready to access your Newton WWW server from a web browser. In a browser of your choice, go to http://insert.server.ip.here/ and you'll see the default page for Notepad Server. Somewhere in there, you'll see a link to the note that's filed in the WWW folder of the Notepad. Go ahead and click on it and see the that contents of that note appear in your browser. You have just served a web page off of your Newton!!!!
  4. Before doing much more with NPDS, I suggest you read the short chapters on Notepad Server, DateServ, and so on, so that you can begin to tap the full capability of your handheld WWW Server but for now, you are completely and totally ONLINE!

Shutting Down

To shut down your server, tap the Stop button (A). A slip will come up telling yout that the server is disconnecting.

If it doesn't go away in 30 seconds, then the connection actually has been dropped: the operating system just forgot to tell the slip about it (Bug Alert) You may go ahead and close the slip by tapping its close-box.

Other nHTTPd User Interface Items:

Hit Counter (C): Offers a display of the total number of files served since the last install of nHTTPd.

Info Button (E): Under this button you can find the Cache Manager, as well as the Standard "About", "Help", and "Prefs" entries.

Plugin Menu (F): Pop-up access to the Prefs/Application screen of all installed Plugins. When it is first tapped, there will be a short delay while the names of all plugins are collected. Don't Panic.

Notify Star: (Not shown in screenshot) Tap the star and nHTTPd will minimize to a small blinking star at the top of your Newton screen.

Recent Hosts: If Access Logging and DNS Lookup are turned on, tapping the Status Indicator (B) will give you a popup list of the last ten unique clients to visit your server since you started it up.

Removing NPDS:

OK. So things didn't work out and you want this thing off of your Newton. Let me tell you how to make sure ALL the data from the NPDS installation is gone.

  1. Remove all the packages.
  2. In your storage folder in the Extensions drawer, select NPDS Cache and Delete all the items. This, as you can guess, will remove all your GIFs, cached HTML bits, and other large stored data structures.
  3. Next, tap NPDS Scripts and NPDS Log in the Storage drawer and Delete those items. Those are CGI scripts and Log entries, respectively.
  4. To be complete, use a prefs-cleaner like *Standalone's Prefs Cleaner to remove these entries from your Prefs soup.

*Standalone Software: http://www.standalone.com/


Using Notepad Server

Introduction:

NoteServ is simple extension with a lot of power behind it. Any note you write and file in a specially selected folder will be made available on the WWW when nHTTPd is active. These Notes can be

and NoteServ will dish them up just the same, turning them from Notes to Web pages behind the scenes. You don't have to do a thing!

You're not limited to boring old notes, either. You can also serve up fancy hybrid HTML/text notes, straight HTML notes, or run CGI scripts from within your Notes. Information on how to do these tasks is in the "Advanced" Chapter.

However, let me STRESS once again that you don't need to mess with the advanced stuff at all to make NoteServ and NPDS work for YOU. It's designed to be simple for the casual user but powerful for the super-user.

We've established that making Notes available to WWW visitors is as simple as writing down some text in a Note and filing that Note in the folder you have selected to be your WWW directory. There's no length limit on these notes other than the length imposed by the Newton Operating System.

Let's discuss some special features of NoteServ you can use to GREATLY enhance the content of your served Notes that don't require any work on your part.

Posting Notes Via A Web Browser

NoteServ contains two services for submitting notes remotely via a WWW browser. Users can post to the directory designated as the WWW service directory. These are special notes and will be designated via an internal mechanism as being client posted. You, the administrator, can post notes using a separate service. You can post to any folder on your Newton (allowing you to send data to your Newt that's NOT available on the Web). You'll need to know your admin password and be able to limit your Notes to around 2048 bytes but other than that you're set. So how do these work?

Client Posting

If you point the browser to http://your.newton.com/html/postnote.html you'll get the Whiteboard for Public Users screen which contains a form for submitting Name, Title, and Note Text. One can easily embed this URL with the text "Whiteboard" by inserting the Server Side Include <NOTE_POST> where you want a link to the Public Whiteboard.

Admin Posting

There is no SSI for this path (though you could write one..). To get to it, point to /html/admin-post.html Once there, enter the title and text of the note, choose a folder, and enter your admin password. Your note will be posted into that folder.

LiveLinks:

Within note, any properly formatted URL will automatically be turned into a clickable link. For example, if you write http://www.apple.com/ in a Note, it will be displayed on the client's web browser as http://www.apple.com/ The same is true for gopher, ftp, mailto:, and even hotline addresses. This is great for making lists of hyperlinks, etc for later viewing or sharing.

Appearance Options:

You can apply preferences to the way NPDS formats your Notes. In the Appearance Panel of NPDS Setup program, you'll find several variables that you can set. You can specify

In addition, to facilitate display of non-American ASCII characters you may wish to specify a MIME character set.

Variables:

Quickly, NoteServ supports a range of special variables called Server Side Includes. Basically, they're stand-ins for common things like your Name, City, etc as well as for specialized functions like a Search Form for your Notepad that are replaced an instant before a page containing them is sent to a WWW Client. We'll talk about these in later sections of the Manual but I thought I'd introduce them to you early on since they are a core NPDS concept.


Datebook Server

Path: accessible via /dates/index.html

SSI: <DATES>

Sample Output: DateServ Default Page

DateServ makes items in your Dates database available over the WWW in a number of formats. To do this, it reads directly from the Dates soup, so any 3rd party applications that alter or extend the Dates application may cause you problems. However, there are no reports of major conflict so forge ahead!

DateServ supports two modes of access:

  1. A direct path to your day's and week's agenda
  2. A forms-based query that returns any range of dates up to 31 days in length.

The paths to the day and week view are, respectively, /dates/day.html and /dates/week.html The reason these items are pre-specified is to allow DateServ to pre-cache them when NPDS starts up. This minimizes time required for a request for these items to be served.

Using Direct Path Access:

Example: You want to link to your weekly agenda from a page in your Notepad. You'd insert this HTML code
<A HREF="/dates/week.html">Weekly Agenda</A>
somewhere in that note.

A Special SSI Tag:

Speaking of embedding things, you can also directly embed the Daily Agenda (as a table) by using the <AGENDA_DAY> Server Side Include under Notepad Server. When the note containing this tag is served up, a table containing the day's agenda will be inserted into the note's HTML.

Configuring DateServ:

  1. Week Length: The week overview returned by DateServ is configurable. Open DateServ in the Extras Drawer and you'll see that you can select which day of the week is the "First" day of the week view and you can set the length of the week returned as well. I like to set it to a 6 day week starting on Monday so that my day off (Sunday) is hidden from view.
  2. Event Classes: Although my schedule is an open book, you may prefer NOT to show Events, Meetings, or ToDo's. You may select each class of Calendar entry for WWW display by tapping in the appropriate checkboxes. Note that turning off any Calendar event class turns off ALL instances of that class. There is no support for filtering by priority, folder, store, etc at present.
  3. Meeting Length: Since some people's meetings are indefinite in length, you may choose to NOT show the end time for meetings by de-selecting Show Duration under the Show Meetings checkbox.
  4. Use Javascript: You'll notice that when you click on a meeting or event, you get a nice little pop-up windoid with the pertinent information for that event. If, due to personal preference or security restrictions you do not wish to use this function, de-select this box.
    Clicking on links to your Datebook entries will then simply open new browser windows without use of Javascript.
  5. Use Pre-Caching: On a MP130 or a fast Newt with a lot of events, you may want to pre-create the day and week overview and store them in the cache after they are accessed so that they are accessible more readily. These files usually take up about 1 and 4 K respectively and are removed when they expire (usually 30 minutes to an hour).
  6. Active: NPDS Plugins are dynamically loadable/unloadable. If you wish to turn on or off service of Dates data, open DateServ and de-check this box. To turn Dates back on, re-check it. You no longer need to freeze most NPDS plugins to de-activate them.

FAQ for DateServ:

Q: I just added a meeting to this week's schedule and it hasn't shown up yet. Why?

A: The daily and weekly overview are cached files. Your new event will show up in an hour or so after the cached version of day.html or week.html has expired.

Q: How can I prevent access to my Dates data from outside my intranet, LAN, etc?

A: At present you cannot. However, though NPDS 2.0 has barely shipped, the next version of NPDS will support basic password protection and IP range restriction for enhanced security of you sensitive data.

Q: Can I post to the Datebok from the Web?

A: Not yet. I decided to wait for better security before implementing this feature in a publicly available package. MY Newton allows posting via the web ;-)

Q: Can I change the format of DateServ's output?

A: No, but if you're enterprising you can hack the source any way you want. The HTML templates and constructor scripts are well delimited and fairly modular.

Q: Do you have any support for MoreInfo?

A: No. I can't do it without reverse engineering the MoreInfo software which is not legal. Silverware is welcome to add support to the DateServ source for its product.


CardFile Server

Path: accessible via /cards/index.html

SSI: <CARDS>

Sample Output: CardServ Default Page | CardServ Search Result

CardServ allows users to search the Names (Cardfile) database, receive a ranked list of entries matching your search terms, then view any of those entries in one of two ways:

You can access CardServ via the inserting the URL path /cards/index.html or by embedding its SSI, or you can have the actual search form embedded in a note by using the SSI tag <NAME_SEARCH>.

Configuring CardServ

Show Notes: Since many of us store provate information in the Notes of our Name cards, un-check the "Show Notes" box to keep this information hidden. It is set to TRUE by default until you change it the first time.

Active: NPDS Plugins are dynamically loadable/unloadable. If you wish to turn on or off service of Names data, open CardServ and de-check this box. To turn Names back on, re-check it. You no longer need to freeze most NPDS plugins to de-activate them.

FAQ for CardServ

Q: I don't use Netscape Communicator. How can I utilize the wonderful vCard standard?

A: Well, some programs support importing of vCard data from a text file. You may choose to download a person's vCard to disk then import it manually. Other than that, I don't know. I wrote CardServ for my own use.

Q: Can I use CardServ as a sync tool with a Pilot or my desktop computer?

A: In its current state, no. Future development may head that way here in Lightyear Land or someone may decide to implement it on their own. One-way transmission of massive amounts Cards data is more likely to come soon than two-way syncing. For example, early experiemental builds of CardServ had an LDAP server built in as the query system for the Card file which supported transfer of the whole Cardfile as an LDAP database.

Q: How can I prevent access to my Names data from outside my intranet, LAN, etc?

A: At present you cannot. However, though NPDS 2.0 has barely shipped, the next version of NPDS will support basic password protection and IP range restriction for enhanced security of you sensitive data.

Q: Can I post to the Cardfile from the Web?

A: Not yet. I decided to wait for better security before implementing this feature in a publicly available package. MY Newton allows posting via the web ;-) so it's on it's way.

Web*PagerWebPager

Path: accessible via the path /pager/

SSI: <PAGER>

Web*Pager brings AOL and ICQ style instant messenging to the Newton. Visitors to your NPDS server can send you a "Page" which will pop up in this pager-type applet on your Newton.

The backlight will flash, a tone will sound, and then, if you have Macintalk installed, the message will be SPOKEN OUT LOUD!!!

You can also respond to some pages sent from other Newtons.

Interface:

In the screenshot on the right, the buttons along the bottom of the "Pager" are info, Delete, Back, Forward, Save, Reply, Close.

You can also scroll up and down in a Page as well as select and copy Page text to the Clipboard.

Two Way Paging

Note the Newt Button next to the Save icon in the screenshot. This button appears when the sender of the page is using a Newton Browser.

The assumption is that he/she is also running NPDS. If you tap the Newt Button, your browser will launch and access the sender's copy of Web*Pager via NPDS. Voila, you can reply to the message from your browser. I know this is a hack, but it's the best I can do for freeware! I am working on pager clients for MacOS and (maybe) Win32 and information on these will become available later.

urlCop: Don't forget to install urlCop or two-way paging won't work. For those of you who don't know, urlCop is somewhat like Internet Config for the Mac. It provides a system-level URL handler.

Configuring Web*Pager

The option to speak or not speak is controlled by an entry you'll find under Web*Pager's info button since some of you will not want a chatty Newton...


NPDS Tracker Client

Introduction

What if you had a Newton WWW Server and nobody came? I mean, maybe they would want to, but how are they going to know your IP address?

We have a solution. When you go online, your Newton can now register with a tracker. People who want to find Newtons online simply visit the tracker and they'll find a link to your Newton if its still active.

NPDS Tracker consists of two applications that communicate with each other.. Tracker Client (which is a NPDS plugin) and Tracker Server which is a MacOS CGI/daemon hybrid.

When NPDS starts up, Tracker Client is activated by the NPDS architecture and told to register. It sends, using a special protocol, information needed to find your Newton on the net as well as a description of your Server. The Tracker Server records this information for later use. Your NPDS continues to start up and that's it, from your Newton's end of things.

On the other end of things, Tracker Server is busy. People who want a hyperlinked list of Newton servers are accessing it with their WWW browsers while it is also constantly monitoring the status of each Newton that has registered with it. If a set period elapses where Tracker Server can't connect to your Newt and retrieve a special page (served by Tracker Client), it is removed from the list of active Newton servers. The ususal period for this expiration is 45 minutes to one hour and a Newton is usually given 3 chances to respond before being removed.

Installation

Use you favorite package installer to load Tracker Client onto the same store as all the other NPDS components. If you wish, install a NPDS Tracker Configuration package to pre-set all the prefs for you. Once Tracker Client is configured, it functions automatically on server startup.

Configuration

Manually setting up Tracker Client is also easy:

You'll notice you also have a checkbox called "Register With A Tracker". If this box is unchecked when NPDS starts up, Tracker Client will NOT log into its specified Tracker Server.

You can easily remove yourself from a Tracker (after an expiration period has elapsed) by de-selecting this checkbox. Conversely, if you are running your server and decide after starting it up that you DO want to be on the tracker, turn this on and tap the "UP" icon at the bottom of the window to manually transmit your data to the Tracker Server.

The Slash-Circle icon is for cancelling a connection that seems to have gone awry. I have never needed to use it but it's still there in case of emergency.

Testing

Once you're ready to go, open up nHTTPd and start it up as usual. The status line will progress from IDLE to INIT and pause for a bit. A NIE status dialog will pop open twice (that's Tracker doing its job), then the status line will read READY and you'll be all set. To verify that your server has registered, point your browser to http://your.newton.net/traq/ and you'll see a page pointing you to the tracker. Click the link and see what develops: if all went well, your Newton is listed happily on the tracker!

Verification by Tracker Server:


Connected

After a few minutes (15-30 minutes), Tracker Server will come by and ask for a special response from the /traq/ directory. If its request is fulfilled, your Newton's lease on life at the tracker will be renewed for one expiration cycle.

You'll know this has happened because the status icon of nHTTPd will change from the standard Connected icon to the Tracked icon.

This verification will continue until your Newton no longer responds to requests from the Tracker Server.


Tracked

Troubleshooting

No major problems have been reported. If you're on a long time, NPDS can tend to slow down, or if you have a very active server. In either of these cases, you may find yourself wrongly removed from the Tracker. To get back online, just open the Tracker client and tap the UP icon.

Running Your Own Tracker

The Tracker server is a CGI that runs under any MacOS Web Server that supports the standard Mac CGI model (Personal Web Sharing, WebSTAR, NetPresenz, etc). It'll run on a 68K but due to some minor glitches, it's not supported on that platform. If you're interested, email me at matvon@kagi.com and perhaps we can get you set up.


GIFMaker

This is the Read Me file for GIFMaker written by its author, Brian Ogilvie.

GIFMakerGIFMaker is a Newton extension that allows you to create GIF images of all or part of the Newton screen. By using GIFServe you can make your Newton-based web page unique! Once you are serving GIFs from your Newton, you can save the GIFs in your desktop browser using the usual Save Image command.

With GIFMaker, you can set the foreground and background colors by tapping on the GIFMaker icon in the Extensions folder of the Extras Drawer. A set of sliders for Red, Green, and Blue for each of foreground and background are provided. The default is black images on a white background.

To use GIFServer with Newton Personal Data Sharing, just access:

http://your.newtons.ip.addr/screen/anyname.gif

The GIF format is owned by Compuserve while the LZW compression used in GIFs is patented by Unisys Corp. Toad Hollow Software Co. acknowledges the great generosity of these firms in making the GIF format and the LZW compression available royalty free for freeware programs such as GIFMaker.

If you are a Newton programmer and are interested in writing programs that use GIFMaker, please contact Toad Hollow at the address below. All programs using GIFMaker must be freeware.

Toad Hollow's other Newton applications are also available on our web page including the Holidays series, Jewish Holidays (1996-2001), TMap (a map of the Boston Subway), Freedom Trail (a guide to Boston's historic walking trail), and The Elements of Style, a re-publishing of the 1918 edition of William Strunk's little black book of grammar, with full hypertext links!

Brian K. Ogilvie
Toad Hollow Software Co.

toadhollow@pobox.com
http://www.pobox.com/~toadhollow/


Advanced nHTTPd Options:

The Cache Manager:

Although still in its developmental stages, the NPDS Cache manager (available from nHTTPd's Info Button as well as anywhere you see a spyglass icon) allows you to browse the NPDS cache to see what's in there and delete things you think should be gone.

Before you randomly delete, know that nHTTPd already manages the cache by deleting expired entries every time it shuts down.

The Cache Manager is fairly simple in function now. The name of the entry, its creator, date of creation, and any miscellaneous developer included data is displayed on the left and a preview is displayed on the right.

You can move forward and back through the cache using the arrows and delete entries using the trash button. Close the Cache Browser by tapping its close box.

Administering Your Server:

NPDS Setup:

NPDS Setup sports a new multi-panel interface similar to that found on desktop applications. The main areas for configuration are as follows.

  1. Content
    Control such aspects as Font, Color, MIME-type, Style Sheet
  2. Admin
    Various Administrative functions: default path and such...
  3. Security
    Set passwords, HTTP Port, etc.
  4. Log
    Configure NPDS' Access Logging function

Apply Button: If NPDS is running and you need to change configuration settings, press this button after editing the preferences to apply the changes you've made to NPDS without restarting the server! 

Content

Color- Back: The background color preferred for pages served by NPDS

Color- Hilite: A second color preferred for highlighting things like table cells, etc.

Font Face: Default font for pages served by NPDS. You can choose from several other commonly installed fonts as well.

Font Size: Default font size (relative). Span is from 1 (smallest) to 7 (largest)

MIME: This popup allows you to select different MIME character sets to facilitate display of non-American ASCII characters

Insert Style Sheet: Inserts NPDS' Cascading Style Sheet into the header of all NPDS HTML documents.

Edit CSS: Opens an editor where you can edit the Cascading Style Sheet used by NPDS to format its HTML documents.

Admin

Default Path: The URL Path defined as "HOME"

This is where users willbe directed when they request http://your.newton.net/

Edit MOTD: You can provide a Message of the Day for your visitors here.

Zero Counter Set your Hit Counter to Zero. Useful if you want to log hits by the day.

Connection-Show NIE Connect Slip: Select this to show a NIE Slip Each time you start your Server.

Latency: Since all content generated by NPDS is dynamic, we guess at how long it's going to take to transmit a document to a WWW client.

This number represents milliseconds of latency after commencing transmission of TCP/IP data before the connection is destroyed. If you have a fast machine and a good connection you can likely set this to around 500.

If you start getting a lot of partial pages sent, bump it upwards about 50 msec at a time.

Security

Passwords- Admin: Administrator password for stuff like remote shutdown and log access.

Passwords- Client: Client password for stuff like note, date, and contact posting. Not yet implemented.

Random: For both admin and client, NPDS can create a password at server startup and notify you of it with a Dialog box. For the truly paranoid...

Port: The TCP port on which NPDS listens for connections. Standard is 80 but firewalls and stuff can require you to use other numbers.

Remote Admin: If this is unchecked, no remote access to /cfg/ is allowed.

Allow SSI in Posted Content: A potential problem exists in NoteServ in that if someone were to post a malicious note with a truckload of SSI's, he could take down the server.

If this is unchecked then SSI in Notes less than 1 day old posted from the web are not evaluated.

This allows YOU time to look at the newly posted data and see if anyone has posted like 50 <AGENDA_DAY> tags.

Not yet implemented.

Log

Keep a Log of HTTP Requests: Obvious.

# Requests: Requests are recorded by host IP address. As new requests come in from a host, they are recorded. This value sets the maxmimum number of requests recorded per host. When max # is reached, the record rolls over and starts removing the oldest from memory.

Expire Log Entries: How long (Minutes) do you want to keep log entries before they are purged. The NPDS Logging scheme is designed to give a log of recent transactions but by turning this value up you can stretch this out to 8 hours of logging.

Newton Clicks on HTTP Request: Do you want a pleasant tapping sound to notify you of incoming connections?

Resolve IP Addresses to Hostnames: An expensive luxury... When a new IP accesses your Newton, you can set this to look up its DNS entry. This gives a more human readable value in the logfiles but costs up to 3 seconds of activity.

Remote Administration:

Connect to your server's /cfg/ directory and a default page will be served where you will be presented two options:

  1. NPDS Log
  2. NPDS Shutdown

Invoke either function by entering the current Administrator password in the Password text field and hitting 'Return'.

NPDS Log will take entries logged according to your Logging preferences and generate a tab-delimited log file. Currently, only sorting by host is supported though other sortings are planned.

NPDS Shutdown will shut down your NPDS server from the remote location your accessing from, whether it be your desktop computer or a terminal halfway across the state. No option for restarting at a future time is planned so be sure you want to shut NPDS down when you do so!


Advanced NPDS Topics:

Using HTML With Notepad Server

Introduction:

NPDS is designed to generate and serve Web content without your having any knowledge of HTML or Newtonscript, but it's also able to act as a much more traditional HTTP server in that if Notes you store in your selected WWW folder are written in strict HTML* they'll be served as "files" without any significant changes in their formatting or content.

* NPDS automatically detects whether a page is HTML or plaintext by looking for the presence of any of the following tags: <HTML>, <HEAD>, <BODY>, <FRAMESET>. You can, of course, fool the parser with a phony tag, but why would you want to do that?

Naming:

Although your Notes may indeed be HTML files, they don't have to be named according to traditional file-naming protocols since NoteServ doesn't usually use the file name to retrieve a given Note. (Appendix: The NPDS Pseudo-Filename System covers how NPDS handles files and folders)

Example:

If you have a note about your train collection and it's written in HTML because you need a nicely formatted table of all the types of engines you have, you can name the Note "My Train Collection" and that's perfectly OK. Its URL when displayed in the list of Notes will be something like /html/123456$007.nsd where "123456$007.nsd" is a special identifier NPDS uses to retrieve your particular Note.

Now, there's a neat trick you can do here... the Note is actually a container for a HTML object. What this means is that you write out your HTML page, give it a title between the <TITLE></TITLE> tags, then turn around and give the Note that contains it another title, quite likely the same one you put in the HTML.

If you want to logically link these two titles, put the following Server Side Include (SSI) <NOTE_TITLE> in between the <TITLE> tags in the HTML. When the page is served, the Note title will be substituted into the space between TITLE tags.

In our "My Train Collection" example: A note containing the HTML document is made. In the HEAD of the HTML doc is this code: <TITLE><NOTE_TITLE></TITLE>. The Note is titled "My Trains Collection." Now when the page is served, the name of the Note is substituted in place of the Server Side Include: <TITLE>My Train Collection</TITLE>

Server Side Includes: NPDS Extensions to HTML

As you've seen with the previous example, serving Pages and Data from your Newton doesn't have to be a static experience. You can create living, dynamic documents by writing into your notes variables called Server Side Includes (SSI). These variables are detected when a Note is served and substituted with specific data. You can put in variables for things as mundane as your name and email address to things a bit cooler like your daily schedule! You can also use SSI to access the NPDS formatting preferences. In later sections, you'll even find that you can write Newtonscripts to create your own custom SSI.

Here, grouped by type, are the Server Side Includes currently supported in NPDS and the data they represent.

To use any of these extensions to standard HTML, enclose them in < > like so <CUSTOM_TAG>

User Data | Content Variables | Preferences | Paths

User Environment Variables

USR_POST: Postal Zone

USR_REGION: Current State/Province

TIME: Current Date/Time

USR_TELE: Default Telephone

EMAIL: Current Default Email Address as mailto: hyperlink

USR_CITY: Current City

USR_NAME: Name of Current Owner

USR_ADDR: Current Street Address


NPDS Content Variables

NOTE_LIST: List of Notes Filed in your selected WWW folder

POST_LIST: List of Notes posted via the WWW

NOTE_POST: Insert a link to /html/postnote.html where you can post Notes to your Newton from a browser.
*This obsoletes functionality of the old Whiteboard plugin and its SSI tag "POST"

NAME_SEARCH: Inserts a form for searching the Names database.

AGENDA_DAY: Inserts a table containing the day's Events, Meetings, ToDos.

NOTE_SEARCH: Inserts a form for searching the Notepad and returning a ranked list of hits.

NOTE_TABLE: Table view of Notes sorted in ascending order by creation date

POST_TABLE: Table view of WWW-posted Notes sorted in ascending order by creation date

EVERY_TABLE: Table view of Both WWW-posted and Your Notes sorted in ascending order by creation date

EVERY_LIST: List of Both WWW-posted and Your Notes


NPDS-Wide Preference Variables

DEF_FONT: Font face defined as default

DEF_SIZE: Default Font Size

DEF_COLR: Background color

HI_COLR: Preferred Background Highlight color

MOTD: Admin's Message of the day to his/her visitors

HOME: Inserts a hyperlink to the page defined by admin as the "Home" page.

INSULT: This is a special treat for you, Thou artless, beef-witted hedge pig.

COUNTER: Hit Counter


Content Path Variables

NOTEPAD: Returns a link to NoteServ's /html/index.html

CALENDAR: Returns a link to DateServ's /dates/index.html

CARDFILE: Returns a link to the CardFile Server default page /cards/index.html

PAGER: Returns a link to WebPager's form-based paging interface (/pager/index.html)

CFG: Returns a link to the NPDS Administrator page

Real World Example: You've written some pages in HTML and you want want the email address that associates with your current owner card available on each page. Since you have 5 email addresses, this could be a problem, except that you know about the <EMAIL> tag. Insert it where you want your email address to go and the address will always be that of the current owner of the Newton.

Writing You Own Custom Server Side Includes:

Version 2.0 of NPDS contains the Simple Scripting Architecture which allows you to write Newtonscripts that return substantial chunks of text and can be inlined into any NPDS Content by assigning then their own Server Side Includes. For more details and some examples, see the manual section on the "Simple Scripting Architecture".

Making Your Own Default Page for Notepad Server:

When a client accesses the /html/ directory, NoteServ (actually most HTTP servers do) serves a built-in file called "index.html". You can easily over-ride the "index.html" that NoteServ delivers, though. Here's how.

  1. Create a note and give it the title "index.html". Make sure it's filed in your selected WWW directory. You can also open NoteServ and tap the "index.html" button to create a template version of the built-in index page in your web service folder which you can then modify to your hearts content.
  2. Use standard HTML 4.0 and any Server Side Includes you wish to create a properly formatted and syntactically-correct home page.
  3. Keep in mind that most of the formatting will be done when the NPDS Style Sheet is applied to your page so don't go crazy with FONT tags and such.
  4. Any time you change the folder that NoteServ looks in to find pages to serve, you need to re-file this custom note or the built-in index.html file will be served instead
  5.  


The NPDS Cascading Style Sheet

New in this version of NPDS is a revamped HTML engine that generates nearly perfect HTML 4.0 code. A new paradigm in presentation of web content is to send the information separate from the formatting. This allows immense flexibility on the part of the author, the server, and the browser in the way content is presented.

All the font and style information has been stripped from the HTML created by NPDS. This data is now expected to be contained in a Cascading Style Sheet, which is a declaration of how the various elements of a page should be rendered. A definitive reference on style sheets can be found at the W3 web site but I'll briefly describe what this means to you in the rest of this section.

A Basic Style Sheet

A typical style sheet looks something like this:

<STYLE TYPE="text/css">

<!--

BODY {

BACKGROUND-COLOR: #ffffff;

FONT-FAMILY: Chicago, sans-serif;

FONT-SIZE: MEDIUM}

EM { FONT-STYLE: italic }

H1 { FONT-SIZE: X-LARGE,

BACKGROUND-COLOR: #66cc99,

FONT-FAMILY: Charcoal }

H2 { FONT-SIZE: LARGE }

STRONG { FONT-WEIGHT: bold }

TD.HILITE { BACKGROUND-COLOR: #dddddd }

CODE { FONT-FAMILY: Courier, monospace }

-->

</STYLE>

You can have this data inline within the web page or it can be imported as a separate file. If you view the source of a NPDS web page, you'll see our style sheet up in the HEADer region of the source. This style sheet is inserted into all HTML generated by NPDS (if this function is turned on).

The power of this approach, you may be able to see is that all instances of say, H1, will have a large font, a background color of light green, and be rendered in the font face "Charcoal". Note also the TD.HILITE element: this is a special class of the TD element that has a colored background. I actually use this element to highlight the elements in DateServ.

NPDS extends this power by using the formatting Server Side Includes in its default style sheet. This way, the style sheet can be re-written by either hand-coding it or more easily, by interacting with the NPDS Setup application.

Editing or Configuring Use of the Style Sheet

Under the Content tab of the nHTTPd Preference application, you'll find two controls for the Style Sheet. You can turn Style Sheets on or off if you wish and you can also open a window in which you can edit the style sheet used by NPDS.

The Style Sheet Editor

The CSS editor is a floating window that you can scroll around in. Three buttons adorn the bottom of the window:

  1. Default: Restore the Style Sheet to the built-in default
  2. Revert: Erase all changes you have made since the last time you saved the Style Sheet
  3. Save: Finalize Changes you've made to the Style Sheet.

If you are editing the style sheet with NPDS still running, make sure to tap the Apply button in the main NPDS Setup application in order to load the new style sheet into NPDS' memory.

Browser Support for Cascading Style Sheets

Ironically, our NPDS servers are more compliant with W3 standards than are a siginificant fraction of desktop or handheld WWW browsers. Versions of Navigator before 4.x can't understand them and the implementation under MSIE 3.x was buggy and inconsistent. Mileage may vary with other browsers. Therefore, NPDS detects whether a user is visiting with a CSS-enabled browser and will NOT transmit the CSS data if the browser is too old to understand it.

As of this version of NPDS, MSIE 4.x, 5.x, and Mozilla 4.x are considered CSS-enabled and are sent the data. If you use another browser that is truly CSS compliant, please email me the User Agent field for it and I'll add it to the list of enabled browsers.


NPDS Simple Scripting Architecture

Introduction

During development of NPDS 2.0, I recieved a constant stream of requests for custom Server Side Includes. However, since every SSI added means additional parsing time, I couldn't very well add in lots of neat (but often of dubious usefulness) items like temperature, Longitude & Latitude, owner's Birthday, and so on, since not everyone would use them.

My answer to providing custom SSI is the NPDS Simple Scripting Architecture.

I've added the ability to link text-based scripts to user-defined HTML extensions. These scripts can return text values (most common) and/or can execute actions on the host machine. All that is required is a minimum of Newtonscript knowledge and the ability to follow the example scripts packaged with Script Editor.

Script Editor

On the right is a screenshot of your interface to NPDS Scripting, the Script Editor. The UI elements are as follows:

Writing Scripts

A NPDS Script is cast as a standard Newtonscript function that returns some value. Since most of what NPDS is used for is text-based, most NPDS Scripts should return Text. In this example, we're going to retrieve the version of NewtonOS in use on this Newton.

1. Open Script Editor and tap the "New Script" Button.

2. Enter the Following Text (Note that some of it is already written for you on the Notepad)

func(nullvar)

begin

local theOutput:= "NewtonOS ROM Version:" && Gestalt(0x1000003).ROMversionstring;

return theOutput;

end

3. Tap on the "Script Info" Box and enter a Name and SSI for this script. If you wish it to be available to NPDS right away, tap the "Script Is Active" checkbox. You may activate and inactivate scripts at will simply by changing the value of this checkbox. For purpose of explaining how to use this script, I am going to assume you gave it the SSI value "VERSION".

4. Let's try this function out. Tap the "Evaluate" button. You'll get a window that should give you either the text output of your function (or a cryptic error message and the Newtonscript Error Code).

5. To use this function in your WWW content, place the "HTML" code <VERSION> wherever you wish to return the value of this script. When that page is served, you'll see that the text that was returned when you evaluated the script is subsituted in place of the <VERSION> tag. To turn off this script, open it under the script editor, tap the information line, and un-check the "Script is Active" box.

Your Example Worked. What Do I Need to Know to Write My Own SSI?

Dummy Variable

Look at the head of the script: "func(nullvar)". The nullvar is a dummy variable that is required by NPDS's Compiler. You can change its name, but the fact remains that a NPDS Script must accept ONE and ONLY ONE argument. You cannot pass your own arguments to your script. (There is a way around this that I'll mention later)

Script Length

There is a limit on the length of NPDS Scripts to encourage you to write FAST and efficient code and currently that limit is 4096 Bytes.

Compiler Variables

4096 Bytes isn't a lot, especially in light of the fact that in order to command, for instance, nHTTPd, you usually need lengthy code like

GetRoot().|nHTPd:ALLPEN|

In anticipation of this, and also to save some typing, the NPDS Compiler supports symbols that stand for specific expressions.

Compiler Variable

Actual Value

|NPDS|

GetRoot().|nHTTPd:ALLPEN|

|NoteServ|

GetRoot().|pHTML:MAVON|

|DateServ|

GetRoot().|pDATES:MAVON|

|CardServ|

GetRoot().|pCARDS:MAVON|

CGI Environment Variables

If you've ever programmed in Perl, you'll recognize the names of these variables. These are the standard names for specific values that pertain to HTTP transactions on your server. To use these, place them in your script in the same context as you would a string. For instance, if you wanted to create a fully qualified URL to your server's DateServ, you could use the SERVER_NAME and SERVER_PORT variables like so:

"http://SERVER_NAME:SERVER_PORT/dates"

Notice that the variables aren't treated in any special manner. They will be substituted in at script-compile time with appropriate values.

Environment Variable

String Returned

SERVER_SOFTWARE

nHTTPd/2.02 (Newton)

SERVER_NAME

IP Address of Server

SERVER_PROTOCOL

HTTP/1.0

GATEWAY_INTERFACE

CGI/1.0 (NPDS_SSA)

SERVER_PORT

Current Server Port

REMOTE_ADDR

Client IP Address

REMOTE_HOST

Client DNS (If Resolved*)

HTTP_USER_AGENT

Client Browser

SCRIPT_NAME

Name of the currently executing script

Script Execution Time

When you Evaluate a script, also present in the results window will be a count of Ticks required for compiling and execution of your code. Script Editor will complain if your code takes longer than 360 Ticks (6 Seconds) to Execute.

While there is no limit on the size of function you create, keep in mind that when a NPDS Script is invoked, it is parsed, compiled, and evaluated on the fly during service of the page that invokes it. A script that takes 360 Ticks to run will add 6 seconds to the 1-4 seconds its takes NPDS to serve a page for a total of up to 10 seconds. Many browsers will time out at 10 seconds and close their connections. Hence the suggestion of keeping your scripts short and sweet...

If you want real POWER, learn the NPDS API and write your own custom plugins. With my user proto and documentation you can create a simple NPDS plugin in an afternoon, with the limiting step being your ability to write your own data generation functions.

Limit on Output Size

There is no longer a limit on output size. You're limited only by the free heap on your Newton. I'd suggest not generating more than about 2000 bytes, though. 

FAQ

Q: How many Scripts should I keep active at a given time?

A: Well, when a script is "Active", NPDS output is scanned for the presence of the SSI assigned to that scripts. This takes a couple of ticks per SSI. Not until an instance of the SSI is found is the script actually evaluated. However, since we're trying to keep things fast, I'd suggest no more than 10-12 User scripts active at any given time.

Q: How do I access the name of the file being requested?

A: During HTTP Request, nHTTPd fills a slot in its base frame called CURRENT_HTTP_REQUEST with the following data frame:

{ip: user's IP address (string),

path: the directory and filename requested (string),

time: HTTP formatted time of the request,

request: the path and filename of the request,

dns: the DNS value of the user's IP (if defined),

agent: the browser the client is using}

To access these items, use the following code:

|NPDS|.CURRENT_HTTP_REQUEST.slot

Q: What is that "Script Returns a Static Value" option?

A: NPDS keeps its speed despite the additional features I keep adding by doing a lot of pre-processing and cacheing. Some of NPDS' own SSI are evaluated at Startup and are held in memory throughout the lifetime of the session.

This option within the Scripting Architecture will be similar in function, but is not yet implemented. If you have scripts that will return a static value (say, the Latitude and Longitude of your City), you can check this option and when support for pre-evaluation is included in NPDS, your scripts will run much faster since they can be pre-compiled and evaluated when the server starts up.

Q: I hit Evaluate and get an exception.. I am sure my code is OK. and all I did was try to do something using NPDS..

A: It's good policy to keep nHTTPd open (but minimized) when you're writing scripts. You'll get better results without having to do some sneaky stuff to fool the system into thinking its open. See if this helps..

Q: Can I use these scripts as real CGIs (Programs that can be accessed directly by a HTTP request)?

A: Not yet. Some issues remain with getting this up and going in an easy to use and secure manner. But it's a definite goal. For now, you can define a pretty complicated SSI tag and use it as the total content of a note. Remember that you can generate a pretty large and complex chunk of text from one of these SSIs.


Troubleshooting NPDS 2.0

The Brute-Force Approach

NPDS Wiper

NPDS WiperDemonsOne of the most common bugs in NPDS is corrupt or incompatible preferences for any of the installed components. This is due in part to the complexity of inter-module communication and in part to my relative inexperience with the NewtonOS. When confusion strikes, the best thing to do is Nuke the prefs entries. Since there are a LOT of installed prefs, I wrote NPDS Wiper to batch-erase all NPDS preferences.

To use NPDS Wiper, tap its icon, then choose "Clear". After a second, you'll be given the option to Reset. You should do allow the Newton to do so. (Choose 'Yes')

WARNING: If you erase the prefs but do not allow the Newton to reboot itself, NPDS will fail horribly if you try to start it up. It REQUIRES its preferences and they won't be re-initialized until all the packages are re-activated by a restart.

Soup Cleaning

Sometimes, the soups that hold NPDS bits and pieces get messed up. Shut everything down and open your Storage folder in the Extras Drawer. You can tap on these two script and delete their entries: NPDS Cache and NPDS Log

More Subtle Approaches

Please refer to this section in the Online Version of the Manual so that you can keep abreast of any new techniques for troubleshooting and optimizing NPDS Performance.


What's New in NPDS 2.02?

Revision Date: April 22, 1999

nHTTPd

  1. Bugs Fixed:
    1. Screwy Logging behavior fixed
    2. Limit on size of Script-generated text removed. Now limited only by free RAM!
    3. Fixed Browser detection algos to be actually useful.
    4. Javascript is only inserted if it's needed.
    5. SERVER_NAME now returns server IP address to scripts
    6. Fixed Screen Rotation Bug
    7. Brought HTTP Header transmission syntax into RFC20068 compliance
    8. Various oversights in error-trapping addressed
  2. Features Added:
    1. Revised HTML engine uses HTML 4.0 and Style Sheets
    2. Added Support for most CGI Environment variables in Scripting Architecture
    3. Cleaned up API interface and added some more direct access to facilitate
    4. Added "Apply" function to NPDS Config to allow changing of settings without shutting down the server.

Notepad Server (NoteServ)

  1. Bugs fixed:
    1. May have fixed the reluctance of NoteServ to let you change the index.html file while the server is active
    2. Fixed a bug where Carriage Return - Linefeeds in the text of a note would shut down the HTTP connection
  2. Features Added:
    1. Publicly announced the admin-post method of adding Notes by administrator
    2. HTML 4.0/CSS Support

Datebook Server (DateServ)

  1. Bugs Fixed:
    1. None
  2. Features Added:
    1. HTML 4.0/CSS Support

CardFile Server (CardServ)

  1. Bugs Fixed
    1. Errors in vCard and HTML Formatting of non-person entries addressed
  2. Features Added:
    1. HTML 4.0/CSS Support

Web*Pager

  1. Bugs Fixed:
    1. Added support for Nethopper 2.x and its lame forms implementation
  2. Features Added:
    1. Visual confirmation of messages sent by administrators of NPDS Trackers
    2. HTML 4.0/CSS Support

NPDS Tracker

  1. Bugs Fixed:
    1. None
  2. Features Added:
    1. Added support for auto-configuration packages to allow instant configuration for a given tracker
    2. Data fields now have memory of past values
    3. HTML 4.0/CSS Support


Contact Information

File a Bug Report

Mail me at matvon@kagi.com with bugs and snafus. Please include such information as platform, method of internet connectivity, language of your Newton, etc and also if possibe, a BugTrap log.

Read The Latest Bug Report

http://bushlab4.life.uiuc.edu/bugreport20.html


Appendix: The NPDS Pseudo-Filename System

How To Be a Card-Based Computer in a Disk-Based World

The Web is very much organized around the idea of "files" and "paths" and "directories" yet the Newton has no concept of these things. All storage on a Newton is in a single meta-store and divided into smaller units called soups. Soups are composed of entries. The Newton paradigm is much more fluid and adaptive than the fixed directory sructure of standard CLI -type filesystems but since we're trying to emulate the latter, some conventions have been established.

Newton Data is accessed via directories like in a standard filesystem, but NPDS uses the folder name (/dates/, /html/, etc) to determine which plugin to use to create data for service to the WWW. No physical information is encoded in the directory name.

Thusly: All NPDS Directories are one level deep. In other words, by default, all items in the /dates/ directory are the same level in the tree. There's no support for additional layers in the emulated filesystem and developers are welcome to use any subdirectory scheme they wish to implement.

NPDS paths look like: "/html/224567867$967.xxx"

What is encoded here is:

|NPDSPluginPath|/|NewtonStoreSignature|$|SoupEntryUniqueID|optionaldata|.|extension|

This path, combining the directory, store, soup entry ID, and extension allow NPDS plugins to return the requested item just like it was being served off a big ol' Hard Disk.


Legal Miscellania

While I'm not too jazzed about all this legal stuff, it has to be in here to keep everybody happy, safe, and legal.

Lightyear Media:

NPDS refers to nHTTPd, NoteServ, DateServ, Web*Pager, CardServ, Tracker Client, Script Editor, NPDS Setup,

Lightyear Media provides this software free of charge but is happy to accept donations for it.

You may redistribute all components of NPDS as you wish as long as the entire manual is included. You may not charge for this software, but you may charge distrbution fees if it is distributed on fixed media.

You may use this software in for-profit ventures without further licensing but you are encouraged to compensate the authors in a manner proportional to the value you derive from it.

Support is provided at the discretion of the authors. No liability for lost data or damaged hardware resulting from installation of this software is held by Lightyear Media or the authors. Adopters are encouraged to back up important data before installing NPDS.

Trademark Ownership:

Newton, eMate, NewtonOS are trademarks of Apple Computer and are used at its discretion.

NewtonOS Personal Data Sharing (NPDS), NoteServ, CardServ, DateServ, BitGrabber, and Web*Pager are trademarks of Matthew Vaughn. All NPDS icons are trademarks of Lightyear Media and may not be used without permission.

nHTTPd is derived from Gnu Public License source code and is not trademarked.

Gnu Public License:

Core functionality of NPDS is based on code derived from GPL-protected sources. Aspects of licensing of NPDS not specified in the statement of Lightyear Media may be covered by GPL.


Credits

NewtonOS Personal Data Sharing is dedicated to my loving wife, Allison

Couldn't Have Done It Without:

Mom and Dad V.

Mom and Dad A.

Jon and Liss L.

Dan B.

Todd W.

Sis V.

Daisy Cat and Lilly Cat

Brian Ogilvie
(for working on NPDS plugz)

Steve Weyer
(for making Newtscape)

Ray Rischpater
(for coming up with the first nHTTPd)

Brent "Full Time" D.

Craig "Debug" M.

John "Destruction Testing" O.

John S.

Jean-Louis "One More Feature" V.

Marcus S.

Doug L. and the rest of MSPUG