Plasma GitLab Archive
Projects Blog Knowledge

README - The WTimer Web Application


WTimer allows you (and your group) to enter time sheets, to store  them into a 
database, and to retrieve reports of them. What can you  put into a time sheet? 
These sheets are organized by days, and every  day has several rows. The rows 
contain the clock time when the  activity starts, when the activity ends, how 
long it lasts, a  project identifier, and a description (free text). I am using 
WTimer  to write up how long I work for certain project activities, and to  add 
the activities to project sums.  

WTimer is a web application. This means that the interface is  accessible 
through a web browser, and that the real program runs  on a server that can be 
reached over the internet. As I am  working at different places it is important 
(and comfortable)  for me that I can work with the application from all sites 
that  have internet access.  

WTimer is a groupware program. It is not (only) personal software,  but it can 
be used by a group of people at the same time. Every  user has his or her own 
account, and can store one or several time  sheets in the database. For every 
time sheet the owner can determine who can see and read it, and who can modify  
it. All groupware functions can be controlled over the web  browser interface.  

Most administrative tasks can also be done via the web  interface. This 
includes the addition and removal of user  accounts, changing passwords, the 
creation and deletion of time  sheets, and changing access permissions. 
Although some users may  be administrators, many of these tasks can be 
performed by  unprivileged users, as far as this is reasonable. Of course,  
there are still some tasks that need shell access to the server,  e.g. database 
backups, checking the log files, etc.  

Software requirements

The server part of the application must run on a Unix/Linux/BSD  system (sorry, 
little chances that I port it to Windows). As  further major software 
components a web server, and a database  management system are needed. The 
detailed requirements are  listed in the INSTALL file.  

The browser, however, can be almost any product. It is tried to  support both 
older browsers and the newest CSS2 features of  modern browsers. The start page 
of the application asks for a  so-called "grid style", which selects one of 
five fundamentally  different ways to lay out text and graphics on the browser  
display. Four of these ways are dedicated to CSS2, but the fifth  selects a 
classic style that should work everywhere. I have  tested these styles for a 
number of current and older browsers,  and at least the classical style worked. 
Of course, it is better  to use a browser that supports one of the CSS2 styles, 
because  the application runs better, and it looks fancier.  

It is not necessary that the browser supports scripting. This  means that even 
users can run the application who do not trust  the security mechanisms of the 
browser. Without scripting,  the essential functions still work, only some 
comfort is lost.  For example, it is no longer directly checked whether entered  
text has the right format, but these checks are defered until  the next button 
is pressed (now these checks can be done on  the server side).  

Cookies are another browser feature that have a bad press.  WTimer uses cookies 
only to store the grid style the user has  selected the last time the 
application was started, and for  nothing else. The user is even asked if he or 
she wants to  enable cookies for the current session.  

Technical Innovations

As far as the end-user features of WTimer are concerned, the  application is a 
simple but robust product. I have written it  not only because I need it for 
myself, but also to show innovative  techniques how to program web 

The application uses the framework WDialog to do all the little  processing 
steps that finally make the user interface. WDialog  incorporates a number of 
principles that distinguishes it from  other such frameworks:  

-  There is a strict separation between the definition of  the user interface, 
   and the program that controls it. The  user interface consists of a number 
   of dialogs that are  defined by HTML elements interspersed with special 
   "links"  to the program, but almost no algorithmic elements. This  improves 
   the maintainability, as you can change the user  interface with only little 
   knowledge about what the  controlling program really does. On the other 
   hand, the  program can be optimized without needing to touch the  user 
   interface definition.
-  The framework checks all incoming and outgoing data,  and performs the 
   necessary coding changes. For example,  the programmer cannot forget to 
   escape unsafe HTML  characters, because the framework automatically performs  
   this step (unless it is explicitly told not to do so).  This eliminates many 
   error sources of web applications.
-  The framework defines the basic control and data flows.  As fundamental 
   service, it provides persistent sessions  that contain data over a longer 
   series of user interactions.  The programmer needs not to program database 
   queries only  to store the dialog state between subsequent HTTP requests,  
   the session service does this already. The data stored in  the session is 
   organized as so-called dialog objects  that define the ways the data can be 
   accessed. The framework  also defines that the dialogs can get program 
   control  in two phases, one preparing the next displayed page, and  the 
   other processing the previously visible page. This helps the programmer to 
   structure the code.  
And the best is that this is not only an academic approach,  but a working 
technique of realizing applications. It has  already been used in corporate 
environments, and WTimer is  only the first application that is released as 
free software.  

WTimer is written in Objective Caml, a programming language  that is not widely 
known. O'Caml is somehow what Java wants  to be: it allows a modern way of 
programming, and is  executed very efficiently (both in speed and RAM 
requirements)  at the same time. You can think of O'Caml as a strictly typed  
version of Scheme with a new syntax. O'Caml is currently  leaving the small 
academic circle who have used it for  years, and faces a larger group of users 
from both  universities and industry.  


You can download WTimer as gzip'ed tarball [1]. 


WTimer is distributed under the terms of the General Public  License. See the 
file COPYING coming with the distribution for  details.  


-  Version 1.0: Initial public release


[1]   see

This web site is published by Informatikb├╝ro Gerd Stolpmann
Powered by Caml