J-F Antoniotti
Date: April,
, 2002
To the question "Who are the HyperNietzsche users", we could immediately answer that they are researchers in the Humanities. This implies a number of consequences. Among them, we can cite:
We should notice that computer habits have an immediate positive consequence : HyperNietzsche users are suppposed to use last generation browsers, with powerful features such as JavaScript enabling and XML processing. This is confirmed by the site access statistics.
At a later time, we could complete the first answer by saying "they are Nietzsche specialists". But, at this level of the discussion, we would like to not emphasize this specialist's domain. One of HyperNietzsche's ultimate goals is indeed to be generalized; from such a generalization, one could create systems such as HyperFlaubert or HyperGoethe very easily. This sounds very good for computer scientist:
I will not continue with the description of HyperNietzsche users' needs: previous speakers have done this job better than I could. I would like to skip to a kind of guideline for programmers in charge of the project. Such a guideline is called a set of high level specifications in computer science, and its intent is helping the design of a user satisfying product application.
From the HyperNietzsche user point of view, we can divide the picture into two big parts: the user may be in a passive mood, so his point will mainly be the consultation of the site. Alternatively, the user may be active, submitting new contributions to the site or, in the case of a scientific comission member, evaluating these new contributions. Let's have a look to these three different kind of users and at the high level specifications they induce:
To reach this goal, we retain the three main following specifications:
Unfortunately, this version has never been put online. And, quite surprisingly, most of you know its general aspect and functionnalities, as it has been extensively used for demonstration purpose by Dr Diorio all over the world. The main characteristic of HyperNietzsche v.0.0 is to represent the fairly long way from the birth of the HyperNietzsche idea, located somewhere inside the brain of a humanities researcher, to the fingerprint of a computer scientist.
In respect to this, HyperNietzsche v.0.0 is fundamental and has the status of the site's origin and source.
With this version users did enjoy (at least we hope) the new overall graphic design of HyperNietzsche, that is stable by now.
As the previous version locked the users in a passive mode, this version made the active user exist.
This goal should be reached by mean of the experience we gained with previous versions, a big work of structuring the project and, last but not least, the association of four computer scientists. This last point is very new to HyperNietzsche and a sign of good health in my opinion.
Data structures are electronic representations of information, while control refers to what we commonly call a "program", that is, a set of instructions that are executed at different steps of the application.
In a better book, you will see that an Application is Abstract Data Type plus Control. ADT are e-representations of information augmented with operations available for these data.
Basically, they are operations of insertion, deletion, updating and access to particular pieces of information.
Abstraction permits us to work closer to the high level specification: ADT allows computer scientists to talk about contributions, users, essay pages rather than integers, lists, or pointers. They permit us to respect the functional description of the system and to cope with two fundamental aspects of an application:
Let me show to you a last equation:
This one reflect my opinion that a very big part of a HyperNietzsche-like application control is page creation and form treatement, that is, HTML processing. This is highly disputable of course: the whole process of a new essay submission cannot be considered as HTML processing but I have in mind the two following arguments:
As we said, HTML processing and ADT are main parts of this one, represented by a dashed box. You may see what's going in an external user request: the HTML processing part translates it into a specific ADT request, receives back data, formats them and sends back an HTML page to the user.
I will speak a little bit about the constraints that such an architecture must respect.
All of this relies on DBMS request minimization and on a carefully designed interface between the HTML processing part and the ADT. It leads to highly structured data on the ADT side, and to highly structured code on the HTML processing side.
You can see the rather central USER module that presents two attributes to the other modules. These attributes are scientific comission member and president. They indicates to other modules if the user is a member of the scientific comission or the president of the association. The two previous case are not exclusive, and they can be both set to false. This is the case of a minimal, regular user.
A user can authenticate himself by adressing requests to the authentification module'sCS member Auth procedure and President Auth procedure. He may identifify himself as an scientific comission member or as the president : each time login and password check is done and, on success, the user attributes are modified accordingly. This module allows the user to also change his password through the Change Password procedure. All authentification procedures are done with the https protocol, that is, login and password are moving in an encrypted form over the Internet.
A user can navigate through the HyperNietzsche contributions by adressing a request to the NAVIGATION module. This module has one attribute as its only entry point: the contribution'ssigle attribute. A sigle is a short word that must be seen as a HyperNietzsche bibliographical internal reference.
CS members can navigate through HyperNietzsche prepublications by adressing a request to the PREPUB NAVIGATION module. This module is a mirror of the previous one. Prepublication and publication sigles live in separate name spaces. Unity is only ensured within both name spaces, and repetitions may occur if we consider the union of these name spaces.
A user can invoke the identification procedure of the CONTRIBUTION module: he obtains in return the list of all the published essays in HyperNietzsche with several datas of interest (authors, essay language,...). The arrow between contribution and navigation modules represents the ability to navigate into each essay from the list.
The ACCEPTATION modulehides the implementation of submission accepting rules in HyperNietzsche. For each submission, it computes the daily submission score and the remaining time to acceptation or refutation. If this time is up, this module accordingly changes the submission status. This module is not user-dependant: it is invoked the first minute of each day.
The PREPUB CONTRIBUTION module is more complex:
The submission procedure allows any user to submit an essay to HyperNietzsche. This can be either an anonymous submission, in the case of first submission, or an identified submission, in the case of a republication. In the latter case, a user must register himself into HyperNietzsche and provide his name, surname and e-mail.
The identification procedure is twofold. It allows scientific comission members to get the list of currently evaluated essays, with several fields of interest such as positive and negative vote number and a navigation link for each essay. It also provides to reviewers a good indication of the remaining time to accept or refuse each submission.
When invoked by a regular user, this procedure hides all the previous informations and it only provides the current status of the submissions, that is accepted, refused, or currently evaluated.
SC members can evaluate each submission by the vote procedure and report procedure. Each vote is immediately counted in the daily submissions score.
The identification procedure allows users to identify themselves when they learn that their submission has been accepted.
The president can publish accepted essays using the coresponding publication procedure. Accepted essays are submitted essays that have succesfully passed the peer-review process. It is the president's ultimate responsability to definitively publish this submission into HyperNietzsche, and he has to cope with licence term agreements from the submission's author.
On the server side, this key allows the recovering of user specific values, such as scientific comission member and president attributes but also the user language. This mechanism is known in PHP as session variables and one must think of it as a micro DBMS.
On the client side, the session id may be stored in cookies, or it may be sent to the server with each URL request. In any case, the key must be sent at each request. This is due to the stateless nature of any Web server, that never maintains any named link with its clients: the server tends to forget about previous requests, and users have to identify themselves at each request. The cookie solution is optimal because this negotiation is then transparent to the user. The latter solution is safer because clients may disable their cookies features but it leads to long and complex URL. HyperNietzsche v.0.2 use both solutions, and we haven't received any problem reports about this. It certainly means that our users do always accept cookies.
On the previous general picture, each incoming arrow to the USER module should be understood as going through the HTML procesing part. This is of particular importance, as the HyperNietzsche multilinguism is entirely included at this level. Each PHP script that results in an HTML page begins to recover the right translation of each word that must appear in the page. This request is adressed to a specific translation database, and respecting what a good Web application should be, this task is done in only one query.
Let's speak about the CONTRIBUTION module and about its only identification procedure. You can see its source on figure 5. This procedure results in a frameset, that is a page that is separated into two frames: the search frame and the list frame.
The search frame allows the user to construct a search request on the title name, author name and surname, essay language, essay publication status and essay type (first publication, republication or fac-simile). This request is then sent to the list frame.
The list frame displays the essay list according to the research criteria if there are some, or with the defaults. At each row appear the corresponding authors, the title linked to the navigation module, the language of the essay and so on. Each of these relevant fields appears in its own column, and one can click on these columns' names to accordingly sort the list. The essays are displayed ten at a time, and little navigation arrows allow to pass to the next or previous ten essays. The last two actions result in a reactualisation of the same page. This script self-calling preserves the search criteria and the sort order.
Each time this script is called, a particular request is built on the search criteria and sent to the DBMS. This is coherent with our ADT paradigm.
Even if I should mainly talk about ADT, you can get from this example an idea of how HTML processing works. This script creates an empty page and delegates the content to the frames. Besides it creates the page title in the way that we already described. The begin.php script recognizes session id and sets the session variables accordingly. The multilingue_id array is then filled with all the words to be translated. Finally, the get_multilingue_ids.php script sets the $Essay_id variable with the right translation. This value is then used inside the <TITLE> tag.
The NAVIGATION modulehas a complex structure, drawn on figure 6. Even though its use is now limited to the essays, it has been virtually designed to work with any kind of contributions.
The first thing to understand about this module is its ability to display an essay page or the very top of the essay, that is its cover page. In the latter case, the user will get bibliographical information (essay's title and authors), the contextualisation of this essay, and he may make one step down in the granularity level, clicking on a link and getting the first page of the essay. For this purpose, the navigation module calls back with the first page's sigle.
At calling time, the module begins to get from the input sigle the corresponding object's attributes. They could be the format of the eventually corresponding file, its granularity level, the title of the corresponding contribution, or the sigle of its first child in the granularity level. It then passes some of these parameters to the CONTEXT part and to the DISPLAY part. As you already know, the CONTEXT part is very poor by now. But it is able to recognize a page and to display a little printer icon with a link to a printer-friendly version of this page.
The DISPLAY part begins to test on the granularity level and accordingly calls different routines. The FRONTISPICE one is called on the top case and it will create a cover page from essay's attribute. The DISPLAY HTML and DISPLAY IMAGE ones are called in the case of a page, depending on its format. Finally, in the case of an IMAGE PAGE, the image is displayed with a navigation bar that allows user to go to other pages of the essay, keeping the same level of granularity and calling back the module. In the HTML case, the essay has only one page, that contains all the pages that a paper version should have. One could also imagine a navigation bar for these essays, based on internal references inside the same HTML file by means of relative links. Due to our high-level design methodology, it will not be a big deal to specify and implement such a feature.
I will not talk about the prepub navigation module, as it exactly works in the same manner, the opposite side of the mirror being the realm of submitted contributions.
We did talk about the identification procedure of the CONTRIBUTION module. As I said, this module identification procedure is twofold: the regular user version is very comparable to the previous one. The scientific comission member is quite different, but works in the same spirit: there is an evaluation-oriented search frame and a list frame.
Of particular interest is the submission procedure. Let's have a look at the picture 7.
The user may submit an essay that has never been published before, or an essay for republication. According to this dichotomy, we switch to ANONYMOUS SUBMISSION in the former case, or to the IDENTIFIED SUBMISSION in the latter.
The first routine mainly asks for the HTML file and for a password. This last one should help for identification on submission acceptation.
The second routine ask for the HTML file and for the complete bibliographical references of the already published essay, including author name and e-mail. If there are be several authors, this is done by zigzaging between the IDENTIFIED SUBMISSION and the AUTHOR REGISTRATION routines.
Both SUBMISSION routine then call the corresponding PREPUB CREATION operations, that are part of the prepublication ADT, and that are implemented in POSTGRESQL.
As I said many times, it is of great importance to keep a high-level of abstraction during the whole design process of our system. We must think about objects, and implement them with the developement tools that we have chosen. PHP has some specific object-oriented features, but they are still in their infancy. I think that a major reason of that surprising immaturity for a language as rich as PHP is the basic contradiction between persistant objects and the primary goal of PHP: an HTML processor working as a sub-module of a Web Server, with all the stateless consequences that it implies. Once a page is created, PHP tends to forgot about used information, and we have seen before that all server-side memory features never come for free: this is why a DBMS is the natural complementary tool for a Web server as soon as a real Web application is wanted.
I don't want to say that objects in PHP are useless nor that they do not have a future. I simply think about PHP objects just as a clever way to structurate the Web app code. This can be done by a good programming methodology and it is not an answer to our fundamental needs.
We then must turn ourselves towards the DBMS. Although fully object-oriented DBMS are a real need, they are still rare, at least in the Open Source community. So our only remaining choice is to get a powerful DBMS such as PostGreSQL and to manage our constructions with the help of its many features.
To illustrate our ideas on a concrete case, let's focus on the contribution objects implementation in PostGreSQL.
First of all we use sigles as a general reference mechanism for these objects. This means two things:
An essay submission calls an essay constructor, with all the desired values to initialize its attributes. Concretely, this constructor is implemented by the two following componants:
Going always deeper into the implementation details, let's have a look to the constructor for a page object:
ubmission mask scheme
| Name | Type | Description |
| page_sigle | varchar(255) | |
| essay_sigle | varchar(255) | |
| directory | varchar(50) | NOT NULL |
| format | varchar(50) | NOT NULL |
| file_name | varchar(50) | NOT NULL |
| ordering_field_value | varchar(50) | NOT NULL |
| brotherhood_pos | int4 |
Now, have a look at the stored procedure. You may see extracted comments from the PostGreSQL procedural
language code of this procedure on figure 8 .
| Name | Type | Description |
| submission_date | date | NOT NULL |
| title | text | NOT NULL |
| language | varchar(255) | NOT NULL |
| authors_comment | text | |
| directory | varchar(50) | |
| sid | text | NOT NULL |
| pwd | varchar(12) | |
| file_name | varchar(50) | |
| file_format | varchar(50) |
You will see on figure 9 the extracted comments of the essay constructor stored procedure.
It's time to finish and to give some concluding remarks.
This talk was intented to make you feel the reality of HyperNietzsche. I hope that this low diving from high level specifications to implementation details has fulfilled this goal.
HyperNietzsche's primary concern is its community. This means humanities researchers as end-users, but it also means a few computer scientists that are in charge of the project. A sweet dream would be HyperNietzsche becoming a big open-source project, with a great community of excited computer scientists that are contributing to. To make such a thing feasible, even on a little scale, it is of primary importance to keep a tight control at each level of the whole structure.
One of the cornerstones of an easy-to-maintain and generalizable system is its modularity. This is why almost half of my talk was about modules and ADT. This kind of project cannot be finalized by a collection of hacker's tricks and superb use of the latest features of Apache v.1.3.
Aknowledgements: many thanks to Thomas Bartscherer, who kindly re-read the original text.
This document was generated using the LaTeX2HTML translator Version 99.2beta8 (1.43)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -noaddress -split 0 -white article
![]()