A Java application exploring the principles of transparency in relation to the Operating System.
My dissertation explains the concepts implemented in this application and can be downloaded from http://www.totalchange.com/ralph/dissertation.doc.
The applications source code and release binaries can be found at https://github.com/KolonelKustard/lucidware.
Table of Contents
BitRot Media Player is an application that translates the process of degradation from the actual to the virtual.

Media such as vinyl and magnetic tape all had their flaws. By storing data in analogue form on analogue media, degradation begins to distort and fragment content. Digital media such as CD's are reputed to be free from degradation and decomposition. Digital data stored on impervious media. But is this completely true?
The BitRot Media Player translates the process a vinyl record undergoes to the virtual space. Now, when video and audio is viewed and listened to, a certain amount of the original will be lost through degradation.
Here are 2 descriptions taken from The Jargon File ( http://www.science.uva.nl/~mes/jargon/ ):
bit rot: n. [common] Also bit decay. Hypothetical disease the existence of which has been deduced from the observation that unused programs or features will often stop working after sufficient time has passed, even if `nothing has changed'. The theory explains that bits decay as if they were radioactive. As time passes, the contents of a file or the code in a program will become increasingly garbled.
software rot: n. Term used to describe the tendency of software that has not been used in a while to lose; such failure may be semi-humorously ascribed to bit rot. More commonly, `software rot' strikes when a program's assumptions become out of date. If the design was insufficiently robust, this may cause it to fail in mysterious ways.
I hoped to create a virtual illustration of one of two principles that only apply to the actual. Decay and degradation (supposedly) cannot occur in the virtual, as many failsafes built into hardware prevent such an occurence. However in the actual, apples rot, and VCR cassettes degrade.
An apple can be used to represent the idea of decay. If left for a sufficient amount of time, an apple will begin to rot. It starts to lose whatever it was that made it an apple, until it no longer is an apple.
A VCR Cassette has no idea of decay. It is made of plastics intended to make it durable, making its rate of decay greater than a life span. It does however degrade. Over time, wear and tear through its use will cause the VCR cassette to begin to lose the information it contains. Whilst the cassette will undoubtedly remain a cassette, the information it contains will ultimately (through use) degrade until it no longer exists.
It is the process of degradation therefore that I am attempting to translate from the actual to the virtual. If in the virtual, by re-using the same area of a disk, degradation were to occur. The degradation would not be in the virtual representation of the file itself, but rather in the physical collection of 1's and 0's that make up the file. Through use, the 1's would be lost as electrical circuits failed and degraded. The BitRot Media Player mimics this behaviour as an illustration of the process.
As a video is played in the BitRot Media Player, 1's are lost from the sequence of bits that make up the file. Technically the application measures the period of the file that is played, and runs the degradation process on that portion. Therefore, every time a part of a video is watched, it is also lost permanently.
Using the BitRot Media Player as a replacement to the traditional Quicktime Movie Player will require a different outlook on how media is stored in the virtual space. Similar to how we treat VCR cassettes, the original of the media will need to be kept and never played, as a copy degrades through use. When authoring a VCR cassette, the master copy serves the same purpose.
In this case, the translation of the principles and processes of degradation have been faithfully replicated in the BitRot Media Player. Where the player fails is in the principles of the virtual. In certain ways, the virtual is already a place of degradation. When creating a word processor document, the author is encouraged to keep a backup of the document. The reason typically is in case of a state of decay in the storage device. By keeping a backup copy on a seperate storage medium, a failsafe is created against any accidental corruption through decay of the originals storage device. More importantly though (in relation to BitRot Media Player), a backup is kept in case of degradation of the document through the author's error. The author can decide to revert to the backup copy of the document if they decide they preffered the older text to whatever they have just created. In a way, this is degredation of the quality and therefore content of the document.
So how does this affect the BitRot Media Player? If the virtual already contains many states of decay, what purpose does the BitRot player have? Perhaps as an illustration and a reminder of the importance of degradation, the BitRot player serves a purpose.
Interestingly, the BitRot player also displays design principles of virtual media in a very clear way. Quicktimes .mov and Microsoft's .avi file formats are incredibly sensitive to discrepancies in the structure of the file. The slightest amount of degradation can render the file unviewable. Media intended for distributed release, such as the MPEG's 'streaming' design structure allow .mpg's and .mp3's to be degraded to a substantially greater level before they become both noticeably poorer in quality or unplayable. This is an interesting design concept as MPEG is designed to withstand moderately intense degradation of its structure. This is perhaps an indication of an acknowledgement of degeradation in storage or transfer in the virtual space.
Unfortunately I haven't got a reliable install method for the compiled Media Player. I will attempt to have a compiled version ready by the end of June. The reason for this is that the BitRot Media Player requires that Quicktime and Quicktime for Java be installed. I just haven't found a reliable method of ensuring both are installed (in a cross platform way).
The source code is available on GitHub. This code is given as is, and no licence or acceptance of blame etc for misuse is granted.
Table of Contents
Ephemeris, defined as a diary or a journal with particular relation to the positions of heavenly bodies throughout the calendar year. The Ephemeris project explores our experience of time. It allows us to perceive time in a non-uniform way.
The city has many time based events interwoven into everyday life. The events can be visualised as the time at which one leaves a source and the time one arrives at a destination. For instance leaving home at 8:45am to arriving at work at 8:59pm, or leaving the restaurant at 9:00pm and arriving at the bench by the waters edge at 9:15pm.
In the above examples, time was experienced on the same scale but in entirely different ways. Whilst the person rushing for work possibly did not notice or experience the fullness of that 15 minutes, the couple going for a romantic stroll possibly experienced this time as an eternity.
The Ephemeris project is intended to provide control over our natural passage through time. It also provides us with the means to revisit lost time.
The theory of relativity states that each persons experience of time is different to anothers. Whilst a sprinter may experience the length of the track by concentrating on patterns of movement and positions of opponents, the audience will experience this entirely differently. To the audience, the race will be over almost as quickly as it started, whereas the sprinter may be able to recall every footstep. This difference in experience of time is found frequently, and has brought about the commonly used phrase "Time flies when you're having fun".
The Ephemeris project intends to make the passage of time controllable. It works by providing control of the speed of time in a shared environment.

When entering the Ephemeris environment, a cityscape is provided. A city is a place in which strangers are more common than friends. As such, it is possible to walk through the city without ever knowing others experiences of the same events. Whilst a lone person waiting for an event (such as waiting for a bus) may fully experience 5 minutes of time, an individual with a goal to reach an event (such as somebody rushing to get to work on time) may not concentrate on this same time and will therefore not experience it in the same way. The two individuals may well pass one another without realising they are both experiencing different time.
In the same way, Ephemeris allows the visitor to experience time as though it were flying by. One minute lasts one second. Another visitor may be experiencing time as though they wished to see every moment. In this case one minute lasts an hour. Both visitors have the possibility to see one another, but both be in entirely different times.
The Epehemeris project is created as a Java 3D applet. Upon entering Ephemeris, the visitor is assigned a timeline with the standard time equal to a clock in reality. All movements are logged as events in this timeline and are distributed to all others within Ephemeris.
The visitor can then alter their present rate of time. This is equivalent to a percentage of the time of a clock in reality. So 50% of time will mean that 1 second in Ephemeris is worth 2 seconds in reality. To this visitor, everything else in Ephemeris will slow down. To a visitor who stays at 100% of time, the other will be at equal pace, and then speed up as soon as they changed to 50% of time.
Because events are logged, it is also possible to experience yourself in Ephemeris. If you enter Ephemeris and change time to 200% of time, 1 second in Ephemeris will be equivalent to 1/2 second in reality. Therefore by remaining in Ephemeris for 20 minutes in reality, 40 minutes will have passed in Ephemeris. By then leaving and re-entering Epehemeris, you will see the ghost of yourself in Ephemeris' future.
Attempting to explain Ephemeris is a lot harder than experiencing it for yourself. Please visit Ephemeris and experience time.
Currently the Ephemeris project successfully accomplishes the primary goal set out in the aims of the project. That is it successfully illustrates the experience of time and a change in time. Unfortunately this is only successfully illustrated by presenting the project with 2 machines running side by side.
In order for the project to become useful as a wider distributed experience, other elements would be needed. Obvious points would be that the orbiting sun would reflect the current time and therefore orbit more quickly if time is being experienced at an increased rate. Also a chat facility in which visitors could type text and have those words appear above their character would help to illustrate the passages of time. Limitations such as time and technology prevented these features being added in this first release.
The project does prove that as individuals we cannot be sure that we all do exist in the same time. The only way to prove one way or the other would be to interrupt everybody you pass and ask them what they think the time is. It also asks the question as to how much control we have over our passage through time. Is there any conscious decision to how quickly we perceive time? Ephemeris provides this control as an experiment to see how we might react.
Initial visitors to Ephemeris are typically confused by what they see. It takes some time for them to realise what they are experiencing. However, in reality, they deal with the same experience subconsciously. By interacting with somebody, you must both match your pace through time.
As a result, the conclusions lead me to believe that it is entirely possible that we all exist in different times. We then synchronize our times as we interact with others around us. And nobody's timeline through life is the same as anothers.
Table of Contents

My first ever computer was a Dragon 32. This machine was only ever capable of the most simple tasks, but had the unforgettable piece of equipment known as the tape drive. The tape drive allows data to be stored on the same magnetic tapes used to record audio for playback on a hifi. And every time a Dragon 32 program was loaded, you would hear the data being played to the machine.
Thinking back to the sounds of the data screeching its way back from an audio signal to raw data, it must have been some kind of music. The sounds stored on the tape were a direct representation of the creativity of the programmer. These sounds were then played back as though they were a song, instructing the machine of what tasks to perform. Not only this, they were also 'catchy'. I can still remember and recite the first 5 seconds of the music I played to my Spectrum.
The idea of not only using the same audio frequencies as are audible to the human ear, but to also use a medium more frequently associated with music, is one of my earliest experiences of an integration between the digital virtual and the human real.
As computers grew up and technology became cheaper, the audio tape was lost for the faster, more reliable and greater capacity floppy disk. Lost were the sounds of a Spectrum's music as the data began silently transferring its way from storage to machine.
The Nostalgia Network is an attempt to give back to computers the ability to communicate in the same communication space used by humans. The Nostalgia Network allows 2 machines to send and receive data across the airwaves by creating and listening to music. Sound is played through speakers and picked up by microphone in the same way we talk using our vocal chords and listen with our ears.
So how could I give back the ability to communicate on the same audio spectrum as humans to the computer? The result has been the creation of the Nostalgia Network.
Nostalgia Network is intended to be a step towards providing a communication space shared by humans and machines. The eventual goal would be to provide entire networks using shared audio communications. TCP/IP would be implemented using amplified modems (modulator/demodulator) sending audio out to be received by another machine. Nostalgia Network is intended to illustrate, on a basic level, how this goal could be achieved.
The aim of Nostalgia Network is not the same as the aim of speech recognition and text to speech techniques. Although similar in technical principle, the aims behind both are drastically different. Speech recognition is an attempt to make the machine share the human language. The purpose therefore is communication between human and machine. The purpose of Nostalgia Network however is communication between machine and machine.
The Nostalgia Network attempts the illustrate the ideas presented by using a Bot (a form of Artificial Intelligence designed to give realistically human responses to human input) to generate a song. If computers are to be able to communicate using human audio frequencies, it seems fitting to use a Bot to generate a conversation. The Bot will ensure that the Nostalgia Network continues to run, autonomously producing audio.
The Nostalgia Network is a Java Application using Microsoft Windows specific audio capture routines, Quicktime for Java MIDI playback (www.quicktime.com) and the Alice Bot version B for Java (www.alicebot.org).
On starting the application, it is necessary to callibrate it to the environment. The minimum and maximum frequencies that it will listen out for must be set up. Typically this is achieved by one machine playing its minimum frequency whilst the other listens, and vice versa.
Once set up, the process is begun by human input starting off a conversation. Type a topic into the input text box and press return. This starts a conversation between the two machines.

The conversation is implemented by a 2-way process of audio generation and reconstruction. One machine generates and plays music as a notational representation of text. The other machine listens for frequency changes in the audio and reconstructs the text. When an entire line of text is received, the listening machine then makes a response using the Alice Bot and generates an audio representation of that text. The loop is then endless and will only finish when both machines run out of things to say or the audio signal is disrupted.
Audio is played by calculating the correct MIDI note for Quicktime to play and then playing it for the specified duration. The correct note is calculated by using a predefined minimum and maximum note range.
Audio is listened to by a mcrophone plugged into the machine. The audio signal is processed as it enters the computer to discover the frequency of the audio (using a Fast Fourier Transform). The note being listened to is calculated by measuring the duration of a particular frequency. If the frequency and duration of frequency are in the range between minimum and maximum frequencies and also apply to a known note, then that is interpreted back into data.
The results of the Nostalgia Network are hard to document, but I have included a textual printout of a conversation and an audio rendition of the same performance.

Click here to read a song. This song is a textual representation of a song created using Nostalgia Network. It is a duet between 2 computers.
The above song's first minute of audio can be heard if you have Flash 4 installed by using the movie below. If not, you can download the same audio from MP3 format on the downloads page.
The Nostalgia Network is a small footprint in the path to returning the airwaves to computers. Whilst in certain ways it successfully illustrates the principle of transferring data using audio, it does not live up to the tape drives of the past.
The primary problem is the method in which the audio is generated. The natural form for audio tape transmission is a series of specific tones representing the 1's and 0's. These tones could be continually fed at a high speed resulting in data transfer rates several times faster than Nostalgia Network's.
So even though Nostalgia Network does not faithfully reproduce the sounds of modulation and demodulation (techniques used by tape drives and modems), it does successfully experiment with the use of a shared communications space. In theory, with the correct level of experience, a human could communicate directly with the machine. By using an instrument capable of sustained frequencies (wind instruments, electronic keyboards etc.), data can be communicated directly through the Nostalgia Network by playing a series of notes (a tune) that represent the data to be input.
So perhaps the most interesting result of Nostalgia Network is the intergration of virtual communication and human communication. When the Nostalgia Network is running, it is easy to interrupt the flow of data and produce erroneous results, but it is equally easy for the Nostalgia Network to disrupt a human conversation. There would therefore need to be a careful balance between conflicting conversations.
Currently resolving installation issues. The source code is available for download, but a compiled version is proving to be a little more tricky...
It's programmed for use with a JDK of version 1.1 or better, and makes use of Quicktime for Java and a win32 JNI audio recorder. It also includes a modified version of the Alice Bot.
Download Nostalgia Network Source Code
You can also download an MP3 file of some resulting audio generated by a Nostalgia Network conversation.
Table of Contents
Free CGI-UK is a hoax web site intended to entice Internet users to fill out its form. The site offers free CGI hosting for a variety of server side protocols. Once the user has filled in their details, they are added to the database and enlisted to take part in the Free CGI-UK project.

The project aims to attack current mis-conceptions of Free. Nothing is truely free. 2 for the price of 1 inevitably means another item becomes more expensive. Free web space means forced advertising. The list goes on.
Free is simply a marketing tool used to entice customers into inadvertently spending money.
So when a user signs up for Free CGI-UK, why should anything be any different? Free CGI-UK need to make money too...
The idea of exchange has been the foundation for modern economics. In a modern state run market based economy, currency is exchanged for goods or services. The state is then responsible for managing the market and ensuring fair trading and lawfulness. The Internet, because of its global nature, has no governing body. Therefore there is no inherent protection of property rights. On the Internet, otherwise lawful people lose any sense of lawfulness. Hobbyists who would have no intentions of robbing a bank in actuality, are quite prepared to hack into a bank in virtuality. This has led to any traders in the Internet being responsible for their own security, and their own protection of property. This has shaped the modern web server.
The web server can be likened to a medieval fortress. Security quite often is the most important feature of a web server, overriding speed and efficiency. Users of the Internet are only ever permitted to view a tiny proportion of a web server, similar to the fortress having an open market. Only the permitted privileged few can have further levels of access, depending on either their status, or how much they are willing to exchange. This limits the inhabitants of a fortress to friends and family of the owner, and the wealthy. In the case of the web server, this is employees and the paying customer.
Web hosting companies find it difficult to make money in virtuality. This is because there is no tangible property in virtual space, and therefore no sense of value.
In order for web hosting companies to make money, the majority will rely on aspects of actuality. This could be offering free web hosting, but forcing advertising onto users. Or offering free web hosting as long as users dial up through a particular account. In order for web hosting companies to gain paying customers they often resort to offering the hosting for free and getting money from customers in other means. The number of 'free' web hosting companies offering greater and greater privileges, but with more and more catches, is phenomenal.
I would argue that all users in virtuality have the right to freedom with no repercussions. A visitor to virtuality is escaping actuality, and as such should be removed entirely from any direct links to actuality. Because of this, I have decided to base my project on perverting the existing free systems.
I have created a hoax web hosting company that are offering users massive privileges for their web sites. The company (Free CGI UK - www.freecgiuk.co.uk) will in turn be expecting something back from their users. The automated Free CGI UK server does this in a number of ways.
Firstly, the user will be phoned and asked to make an appointment for a representative of Free CGI UK to visit. Once they have done this, a letter of confirmation will be posted and e-mail sent. Free CGI UK will need to do this, as the users property will become their method of payment.
The execution of this project has been limited to just the registering and phone calling elements. I left out the e-mailed responses and letters of confirmation to concentrate my time on the telephone application.
The web site is the method of registration. A user visits the Free CGI UK web site and registers their interest for the service, filling in address and phone number.

These details are then added to a database and used later by the telephone application.
The telephone application takes the list of users, and sequentially phones them up, one after the other. The user answers the phone, and is greeted by the machine saying:
"Hello *users name* from Free CGI UK. Thank you for registering with us. We are very grateful for your interest. In order for your application to be completed we will need to evaluate your property. When would be a suitable time for one of our representatives to visit?"
The machine will then listen for a response, record the resonse, and reply with the following:
"Thank you from Free C G I UK. We will be in contact with you regarding your appointment for *users response* . Is there anything you would like to ask me regarding Free C G I UK?"
Following this, it will then have a conversation with the user until the allotted 2 minute maximum call length is reached, after which it will say goodbye and hang up.
This process is entirely automated using a combination of voice modem management, speech recognition, text to speech and the ALICE chat bot.
The application is installed using 2 computers. One PC runs the phone management application using the Microsoft JDK (Java Development Kit) with the Microsoft TAPI (Telephony Application Programming Interface) version 3 for Windows 2000. Another PC uses the communications application which runs the Sun JDK using the Chant SpeechKit 2.1.2 which implements an interface to the Microsoft SAPI (Speech Application Programming Interface) version 4. This application also runs the ALICE chat bot version b for Java.

The phone app

The Communications App
The applications are very difficult to set up and run. They require 2 TCP/IP networked IBM compatible PC's. The phone app requires Windows 2000, and the communications app requires any Windows 95+ or Windows NT4+ platform. The 2 machines must be linked together with a pair of audio cables too. This is from the speaker out to the line in of both machines.
If the applications are installed successfully, they will run through the list of users automatically, requiring no supervision.
During the time the Free CGI UK web site was online, a number of users did register for the service. These users were then phoned. Here is some example dialog from the phone calls:
To read part of the applications automatically generated log, see the section called “Application log”.
The running of this application was very successful. However, the quality of recorded matter was very poor due to the poor quality of components making up the 2 PC's. The modem and sound cards produced a lot of background noise, making the text to speech difficult for users to follow.
To hear any of the clips, download the relevant .mp3 file from the the section called “Free CGI-UK - Download” section.
The audio clip 1 is a typical conversation with an unsuspecting user. This user had no idea that they would be phoned, and as such hung up! The more interesting results came from the users who were expecting to be phoned (my friends!). The audio clip 2 is a particularly good example of this.
Technically, a lot more work was needed in refining the applications. Dedicated telephony equipment would have greatly improved quality and efficiency.
I hope the project served its purpose. I don't actually think any of the users telephoned for the cause can have had a clue what was going on, however hopefully the confusion will worry them into being a little more careful as to what they sign up for now though. Maybe I will follow the calls up and get some opinions. Although I feel the event will be long forgotten.
It is interesting to see that big companies with huge call centres are still relying on push button telephone operated menu systems for their calls. The idea of press '1' for this, press '2' for that now seems to be a little dated. Would it not be possible for a machine to ask what the call is about, and make an calculated guess from the response?
It would also seem that the technology for speech recognition is still in its infancy. The trouble is with training. Most speech recognition systems use training to learn vocabularies from their user. This training can take some time. With a phone call, a different person is greeted each time, each with their own vocabulary and accent.
The most concerning aspect from this project is the ability to abuse. This project is designed to abuse rights, to provoke thinking about what is free. However it would be just as simple to abuse this technology to have automated double-glazing sales people and automated market surveys.
Overall I am very satisfied with this project. I have achieved all I had hoped to achieve, and now have some amusing results to listen to. I hope the flow of 'free' services on the Internet slows down a little, as it may end up giving bad press for truly free services such as at GNU (GNU's Not Unix - see the links page), which are the true foundation of the Internet community.
The downloads are split into the downloadable applications with source, and some sound clips from the running of the applications.
It is important to note that in developing the app, I have used every shortcut under the sun. The app is very much machine specific, and I warn you that you will have NO luck in simply installing and running them. They are potentially only useful for developers to download, maybe to see how I've hacked about with the various components.
https://github.com/KolonelKustard/freecgiuk/releases/
The phone manager needs to be run in Windows 2000 using the Microsoft JDK and TAPI3. Visit the MSDN web site to download both of these.
The Communicator uses a modified version of the ALICE chat bot, and also uses the Chant SpeechKit 2.1.2. You will need to download the speechkit from here: http://www.speechkit.com to run this.
You will need to download the Alice chat bot and modify it or my code to use it with this app. I couldn't include it with this download because it's too big. Download version b of Alice from http://www.alicebot.org/
There is also currently no database of users included. The code uses JDBC though, so simply use your own!
The first audio file is from an unsuspecting user. The second audio file is from a user who was expecting to be phoned:
The live site is no more but there is an archive of the site here: http://kolonelkustard.github.io/freecgiuk/thesite/
So what is the technology behind making the automated phone caller of Free CGI UK? The application is split into two seperate components, as can be seen by visiting the application page. I will now break down what they do and why I have chosen particular paths.
The phone manager is a fairly simple component. I chose to use the Microsoft TAPI (Telephony Application Programming Interface) to interface with the voice modem in my PC. I would have used Sun's JTAPI (Java TAPI), but as yet there are no free implementations.
Because I have very little knowledge of C++, I had to then limit myself to using the TAPI 3.0 which ships with Windows 2000, which uses the Microsoft COM model, and is therefore compatible with the Microsoft Java SDK and its handy non-Sun-friendly JActiveX (Sun are currently trying to quash this feature as it goes against the machine independance principles of Java!).
So the phone app uses a heavily butchered example class from Microsoft, which is called from a management app, which also handles a network connection to the communications component running on another PC. The communications component then instructs the phone manager on what to dial, when to change the direction of the audio, and when to disconnect.
The MAJOR limitation currently with the phone manager is with my machine. I unfortunately have an ancient modem with no native TAPI drivers. It is therefore managed by the Microsoft Unimodem/V default drivers. This unfortunately means the modem does not support full-duplex, and as such, when the direction of audio needs to be changed, a pause of anywhere between 1 to 10 seconds can occur as one stream is stopped, and another started.
Ideally I would have gone out and bought a decent Dialogic modem and used the JTAPI implementation they supply. But unfortunately I'm a student...!
The communicator is a little more complicated than the phone manager!!! It is an entirely automated component of the entire application, requiring one or two selections from the user with regards to selecting speech engines prior to running.
Firstly I will run through the order in which tasks happen, then I will expand upon some of the points.
On starting the application, it will ask for the IP of the machine running the phone manager. If it successfully connects to the phone manager, it will then begin initialisation.
It preloads the vocabularies of the ALICE bot, then asks the user to select a speech recognition engine, then asks the user to select a text-to-speech engine. The speech engines are then initialised. Finally the users details are read from the databse into memory.
Once initialisation has completed, the main program loop begins. Each loop constructs a new phone call with a 2 minute maximum length, following a short structured dialogue, and an attempt to converse using the ALICE bot.
Once a user has either hung up, or the 2 minutes maximum call length is reached, the communications app will instruct the phone manager to disconnect the current call and begin the next call.
This continues until all the users in the database have been phoned.
To hear some conversations recorded using the application, visit the the section called “Free CGI-UK - Results” section or the the section called “Free CGI-UK - Download” section.
I will now delve a little deeper into the Communicator application. It runs using the ALICE bot ( http://www.alicebot.org/) for AI chatting, and the Chant Speechkit 2.1.2 ( http://www.speechkit.com) for speech recognition and text-to-speech. The Chant speechkit provides an interface to an variety of speech engines. I chose the Microsoft SAPI 4.0 as it was free! I was going to use the SAPI 5.0, as it now implements the COM object model. However I didn't have time to hack around with it, and there is currently no direct support for Java developers.
When a call is created, the phone manager returns a connected message. The communicator must then decipher between the noises of a phone ringing and the noise of somebody's voice as they answer the phone. This is because the noise of a phone ringing created when you phone another line is provided by the telephony provider you dial to. This gives the impression of a call being connected even though it is not. Therefore, the speech recognition has a list of phrases to ignore when listening for an answer. The list of phrases I created are:
"it's a", "hurt", "good who", "coup", "aha", "a", "they", "they they", "a. a.", "a good", "good a", "good good", "to", "to to", "a a", "and", "and and", "a new", "new new"
This is quite interesting in itself, as this is what the speech recognition recognised to be ringing tones!
To see exactly how it all works, download the app from the the section called “Free CGI-UK - Download” section.
Table of Contents
A view to a future where matters of the state are dealt with by warfare on the virtual battlefield. The War Sports Network is a spoof website based on a combination of the numerous Sports websites and Gamers websites currently online. Set 20 years into the future, gamers are now deciding government policy and international affairs through the use of virtual battles.

The current trends towards a wider online community and the popularity of online gaming, coupled with the decreasing level of interest in politics amongst younger voters inspired the creation of the site.
Running behind the War Sports Network site is a Java-based backend serving JavaServer Pages (JSP's). An application running continuously updates the database of players by watching a set of games servers. Players joining the games servers (specifically the Barrysworld Counter Strike servers) will be logged and their kills (frags) and time in game recorded. Periodically this data is then uploaded from the application to the web server.
The application:

Server started... Tue Apr 17 19:39:58 GMT+01:00 2001
987532798279 - 1 - 212.110.163.251:27018 - Server invalid on this visit.
987532803286 - 2 - 212.110.163.251:27019 - Server invalid on this visit.
987532808293 - 3 - 195.8.169.51:27035 - Server empty.
987532808413 - 4 - 213.221.174.136:28541 - "-[TF]-CamoWulF" new player(0, 439496),
987532808534 - 5 - 213.221.174.135:28002 - "[L337]_Horex" new player(6, 390703), "[L337]_Tonic" new player(14, 1935580), "[L337]_EaZy-:)" new player(0, 1127844), "[L337]_Johnny Romantic" new player(10, 1772439), "[L337]_Rebell" new player(1, 600641), "[L337]_Space" new player(2, 1632220), "[L337]_SEK" new player(7, 1278579), "[L337]-=Eternal=-" new player(4, 909032), "[L337]-Haui-" new player(8, 1035891), "[L337]_Team-T" new player(0, 215437),
987532808704 - 6 - 213.221.174.135:28003 - "SuckOnMYAssHollow" new player(0, 1765173), "SmB.deus" new player(0, 1649658), "MATT IS LAGGED" new player(0, 772781), "aggrees" new player(1, 1441985), "SmB.hollow" new player(0, 1291048),
987532808854 - 7 - 213.221.174.135:28006 - "<-Deacon-> [MERC]" new player(3, 1950267), "whirlwind-[MERC]" new player(2, 1910001), "GRiMMi [MERC]" new player(2, 1896142), "-Fr()sT- [MERC]" new player(0, 1794689), "BeeDiE BoNG [MERC]" new player(1, 1862908), "Hobbes [MERC]" new player(10, 1785079), "quiksilver [MERC]" new player(2, 1554548),
987532809014 - 8 - 213.221.174.135:28004 - "[SnakE]Lt.C@lli$to" new player(8, 4744020), "[SnakE]-=MOsul=-" new player(6, 1091188), "[SnakE]-=Fir$tBlood=-" new player(11, 2412986), "[Snake] -=Zod=-" new player(11, 4120675), "[Snake]-=Uschi=-" new player(12, 2265471),
987532809165 - 9 - 213.221.174.135:28005 - Server empty.
987532809285 - 10 - 213.221.174.200:28506 - "-[XLNC]-Scotvenom" new player(0, 2853590), "-=]*DgaF*[=-AnYMoRe" new player(1, 2480265), "-[XLNC]-KillaKanninchen" new player(0, 2274906), "-=]*Dgaf*[=- FeCKeR" new player(0, 2410000), "-=]*DgaF*[=- MaSTeR" new player(1, 2470578), "-=]*DgaF*[=- CuLeXuS" new player(3, 2287219), "-[XLNC]-Squid" new player(2, 1756957), "-[XLNC]-DS-Fallen_Angel" new player(0, 2181062), "-=]*DgaF*[=- VoLTaGe" new player(2, 2117781), "-[XLNC]-Baron_Hurlothrumbo_IIX" new player(3, 2115594),
987532823675 - 11 - 213.221.174.200:28501 - Server empty.
987532823776 - 12 - 195.188.194.147:27015 - "-=xk=-MoNkEy [t] SpUKe" new player(5, 3007599), "shaven minge" new player(10, 3678460), "Uchian" new player(3, 4733920), "tGN [-iKKo-]" new player(8, 4725070), "--RuSH--" new player(8, 1895450), "QMC*FoN*" new player(2, 3259599), "[sid]tomo777" new player(9, 4455500), "-====[-Snake_Bite-]====-" new player(9, 1108820), "jimuk" new player(4, 427770), "Jake" new player(4, 873879), "[UK$F]-Key$er-CL" new player(6, 814730), "[fsf]Rubberducky" new player(6, 2548980), "[TGF]Hudson" new player(6, 4068910), "[CIC]Ns-Teppic" new player(9, 2334269), "[cAa]Hobgoblin" new player(2, 654750), "[TGF]DeathByMonkey" new player(19, 2100920),
987532824006 - 13 - 213.221.174.201:28527 - "ApheX^" new player(6, 1113214), "Eating Backin 5" new player(0, 1334588), "7-7-7" new player(5, 777137), "-[s7n]-|Ko|2a|-T-" new player(10, 973668),
987532824176 - 14 - 195.149.21.101:27055 - Server empty.
987532824316 - 15 - 195.149.21.28:27055 - Server empty.
987532824437 - 16 - 195.149.21.103:27075 - Server empty.
987532824567 - 17 - 195.149.21.24:27035 - Server empty.
987532824687 - 18 - 195.149.21.15:27025 - "Mad_Hamster" new player(0, 3626276), "[UNION]AssKicker" new player(0, 2092464), "**KATER CARLO**" new player(0, 2809308), "Panic_Attack" new player(0, 404464), "[UNION]V!P" new player(0, 1833745), "Roosh_2009" new player(0, 480464), "[UNION]EAT_STATIC" new player(4, 2384651), "J-Z" new player(0, 695026), ">UKE<The-Master-Blaster" new player(1, 919464), "[>I<-Mooney-]" new player(0, 193245), "[W.C.G] MiJack" new player(0, 300901), "Spiral" new player(0, 1197870),
987532824867 - 19 - 195.149.21.25:27065 - "MR.Bl@ck" new player(4, 517729), "[KdM]TNT" new player(3, 343650), "[KdM]Kill-o-M@tic" new player(7, 750338), "[EC]Maver|ck" new player(21, 1407166), "PINGU" new player(2, 212729), "[KdM]EvIL_oNE|MK" new player(2, 683025),
987532825017 - 20 - 213.221.174.168:28516 - Server empty.
987532838767 - 21 - 195.149.21.23:27035 - "( KD )**CheGuevara**" new player(5, 207758), "RAT" new player(1, 204336), "[CQB]Avarice Rewarded" new player(4, 1187946), "Blade BAGOM" new player(2, 620727), "[LBS]Milo<LIEUTENANT>" new player(3, 458860), "-=SAS=-CopCartman" new player(1, 3625001), "Russisk mafia" new player(4, 317789), "The_Iron_Chef" new player(1, 1109618), "Jet_BAGOM" new player(2, 1088719), "Schnittenkoenig" new player(2, 169696), "[$A]TheExorcist" new player(0, 283938), "*-=Neo=-*" new player(0, 133922), "HorrorTubby" new player(0, 97696), "neXXus" new player(1, 13933337),
987532838947 - 22 - 195.149.21.29:27045 - "[KFH]The_NightWinG*Sniper*" new player(8, 763377), "[KFH]Stakke" new player(8, 3039151), "[Jupiler]Thorgrim=M@S=*" new player(3, 455471), "[KFH]*PePPer*" new player(3, 351158), "[Jupiler]Cola-ke=M@S=" new player(4, 827471), "[Jupiler]STB=M@S=" new player(0, 180963), "[KFH]*SoulReaver*" new player(12, 1826955), "[KFH]Vitabis[CO-LD]" new player(3, 666627), "[Jupiler]PiSsAnG=M@S=" new player(6, 653900),
987532839118 - 23 - 195.149.21.103:27065 - Server empty.
987532839248 - 24 - 195.188.194.146:27015 - "_-*FRAGMASTER*-_" new player(1, 438228), "[YBGOOD]nErO[eLs]" new player(4, 1425728),
987532839398 - 25 - 195.149.21.41:27045 - "[-XR-]<<<blackhawk>>>" new player(0, 46146), "@DOGSBOLLOXS@MUPPET" new player(0, 300021), "[-XR-]<<<Iceman>>>" new player(0, 148271), "overlord" new player(2, 114959), "skoda" new player(0, 33959),
987532839548 - 26 - 195.8.169.51:27045 - "HardArse" new player(5, 4597283), "Xeorth" new player(13, 1240564), "[AYM]LiLo" new player(18, 1576080), "=BLOW=Leper" new player(10, 3186400), "stg.slaughter" new player(6, 4844330), "[AYM]doYme" new player(17, 1563752), "| || ||| ||||| || |' ''" new player(14, 1212517), "AkUk_Hot" new player(12, 672423), "=BLOW=Squirrel Master" new player(6, 1230158), "-~Tanith~-" new player(1, 266595), "AkUk_Calibre" new player(25, 4052978),
987532839959 - 27 - 195.149.21.41:27035 - "[TCFS!]Quigonjim" new player(1, 363186), "McBane" new player(6, 1595874), "-[HBG]-Fr@GhUnTeR" new player(12, 2586999), "Agent Unknown" new player(3, 529999), "[KRTW-E]=<]*D@rKeT*[>=" new player(6, 736436), "AMBomb" new player(20, 1063624), "[TKOTOT]Loki[UK]" new player(2, 219999), "Snafe" new player(9, 2919061), "gandalf" new player(6, 1257061), "<<ST@N>>" new player(0, 177624), "[=NFCN=]Bloggs" new player(0, 967874), "Lonely Wolf" new player(5, 669186), "Jogi" new player(3, 306686), "[SSS]Blokey" new player(9, 1455561), "].W.[-VODKA-" new player(19, 4558874), "Roobubba" new player(17, 1451249), "Butestar" new player(9, 1979624), "The Unknown Soldier" new player(4, 654936),
987532840399 - 28 - 195.149.21.101:27025 - "-HD-SpikE" new player(7, 1044158), "Balu" new player(0, 705658), "-HD-Bean" new player(2, 700658), "-=EsF2=-Skev" new player(1, 558283), "Darck Ice" new player(1, 376783),
987532840540 - 29 - 195.149.21.105:27015 - Server empty.
987532840670 - 30 - 195.149.21.100:27055 - "-=XK=-FrAgKilLLer*CPT*" new player(0, 523208), "[HSK] Cookie Monster" new player(0, 2997927), "|.uK:Ls.| Elephant" new player(0, 195458), "[HSK]Serpent" new player(0, 2420271), "[HSK]Mechgod" new player(0, 706677), "[HSK]CRoW" new player(0, 2080521), "[HsK]>Fudge<" new player(1, 3845990), "[=W-A-S=] Jim Oveflowed" new player(0, 169990), "[HSK]Hitman-D-" new player(0, 3697802), "[HSK]cHawk-D-" new player(0, 1454240), "[HSK] >-*Snipe*-< -D-" new player(1, 469802), "[HSK]Tinky" new player(0, 592458),
987532858165 - 31 - 193.120.201.7:27016 - "CabBaGE!!!" new player(1, 1151822), "fuck-det-svin-der-nakkede--=[GH" new player(4, 513322), "Swastika-Eyes" new player(3, 437275), "Kru" new player(0, 503744), "Huibuu" new player(0, 252822), "-=[GH]=-Storm" new player(0, 57103), "AI=Ajam=" new player(0, 143119), "Mr_Clown_Man" new player(4, 1350869), "[VD]Zaphod Beeblebrox" new player(6, 951306), "Da_cOmRaDe_MiKe" new player(6, 890978), "Novak" new player(2, 2050322),
987532858345 - 32 - 195.149.21.41:27025 - "ePeRDeMe" new player(11, 1756827), "Deerhunter" new player(0, 13788515), "[NBK-IGC]Bomber" new player(0, 54889), "outlaw-zombie" new player(11, 1817639), "IAS-Smeethers" new player(1, 2321764), "{DEH}m3Rl1n" new player(3, 1636702), "**Ai**Shock" new player(5, 933139), "[=G!R=]Chillfrenzy" new player(10, 4161889), "Bourne" new player(19, 1528202), "EL^Diablo" new player(3, 1987077), "[NAD]BraveStarr[UK]" new player(1, 3974452), "[BEES] Magnuts" new player(0, 3478577), "+---FAITHLESS---+" new player(9, 2160702), "Fallen" new player(5, 1709264), "[BEES] REBEL [CHUD]" new player(2, 1124202),
987532858526 - 33 - 195.149.21.102:27015 - "Dark Knight" new player(14, 5073907), "if i kill u ur shit" new player(0, 270642), "ENIGMA" new player(2, 435868), "-=NBC=-SportyThiev[CMG]" new player(2, 434829), "[FJ-CS]Ex-Machina[C]" new player(8, 4187720), "[CSC]Clonkerjens" new player(1, 5534462), "KRAAITJE[NL]" new player(14, 2912485), "(1)if i kill u ur shit" new player(0, 181829), "Mr.NICE" new player(1, 355352), "-=|FreemaN|=-" new player(2, 934087), "[T@C8]hannibal smith" new player(0, 164782), "Darkfire" new player(2, 3901220),
987532858696 - 34 - 195.149.21.102:27075 - "<GURU>Leji" new player(0, 297995), "Osterhasi" new player(2, 1028510), "TWEDS" new player(0, 779713), "-=[SpUd]=-" new player(0, 188260), "[FRAG]SleepyHead[T]" new player(3, 2097229), "-[TGT]--=cypress=--=]NNP[=-" new player(8, 2317135), "Doom" new player(9, 1987651), "-=[FTP]=-" new player(15, 1745073),
987532858876 - 35 - 195.149.21.29:27015 - Server empty.
987532858986 - 36 - 195.149.21.29:27065 - "[DTUK]Hayin" new player(18, 1184575), "[FBI]Colonel Matrix" new player(0, 112575), "GingaNinja" new player(0, 542575), "Peps" new player(7, 1963825), "[OOTC]Ford" new player(7, 713075), "mr-man" new player(11, 1931075), "Physcodelic Kitten" new player(10, 2787575), "<RAGE>Bill_Door" new player(33, 2524075),
987532859136 - 37 - 195.149.21.40:27015 - "[WaC] Baron Munch" new player(1, 505972), "White Tiger" new player(2, 698347), "[-TF-][*BlaCKSKORpion*]" new player(0, 102721), "Hermann The German" new player(1, 4354847), "[=*Solid-Skoda*=]" new player(4, 447284), "Glacius" new player(3, 1083159), "KUHL" new player(1, 179971), "[GOD]Lord_Style" new player(0, 168284), "[KDD] XoRRo" new player(2, 4609097),
987532859397 - 38 - 195.149.21.25:27055 - "[RaG]Dragon" new player(0, 85121),
987532859527 - 39 - 193.120.201.7:27015 - "Mikaboshi" new player(5, 638963), "Fichface McFichDich" new player(4, 2813963), "Private Nixer" new player(6, 5174432), "D R . D R 3" new player(7, 2540276), "(SnS)-RAY-" new player(18, 1062385), "Smaug" new player(2, 875307), "AI=Sanantagio=" new player(8, 2330947), "Skulker" new player(4, 740400), "arise" new player(5, 824057), "Gardai O Fearghaill" new player(15, 4209744),
987532859717 - 40 - 195.149.21.101:27075 - Server empty.
987532877553 - 41 - 213.221.174.41:28539 - Server empty.
987532877663 - 42 - 195.149.21.43:27055 - "www.lame-network-playerz.de.vu" new player(0, 21095), "Darth Viking" new player(0, 3002220), "[VvV] Red-Bull" new player(0, 135908), "DarkFader[*DoN*]" new player(0, 86158), "Schweine laufen Amok" new player(0, 503595), "Tyler Durden" new player(0, 2108408), "[STD]Crabs" new player(0, 886283),
987532877833 - 43 - 195.149.21.104:27055 - Server empty.
987532878184 - 44 - 195.149.21.18:27035 - "FloppyKok" new player(2, 1300412), "Dr^Duck" new player(8, 1255537), "~" new player(3, 1078849), "#|2|" new player(4, 1031037), "#|3|" new player(-1, 965099),
987532878314 - 45 - 195.149.21.24:27015 - "Sgt.Rock" new player(1, 916590), "-={PoC}=-TRITON" new player(10, 587996), "toxic" new player(8, 841277), "JSkKlOOOOOaK!!!sjhdishcuinbyB" new player(4, 2508434), "Marksman" new player(6, 4292403), "<MoSh>MaStA_KillAh! |LWF|" new player(2, 761434), "BlackDeath" new player(0, 43355), "[HSIM]Err0rTrap" new player(-2, 320715), "Lord_Reaper" new player(2, 716777), "Slipknot_Rulez" new player(1, 122558), "[A*Team] Murdoch" new player(4, 701855), "[A*TEAM] Face" new player(3, 620137),
987532878484 - 46 - 213.221.174.200:28507 - Server empty.
987532878604 - 47 - 213.221.174.200:28503 - "[R!F]~Kill Demon~" new player(8, 385716), "[R!F] ~ ]-[ollow G" new player(3, 1518114), "[R!F]Cr@sH" new player(0, 64327),
987532878745 - 48 - 195.149.21.43:27045 - "[puppa]IBELIEVEICANtDIE" new player(20, 4827725), "-|.FaS.|=|.Br@iNw@$heR.|-" new player(17, 1185287), "nano" new player(11, 8293850), "The Turnip Elf" new player(2, 429787), "Dodonius" new player(2, 409037), "*The*Hunter*" new player(7, 1160662), "[EOC] ICECUBE" new player(1, 402537), "[puppa]IBELIEVEICANFLY" new player(10, 1145475), "[*G*O*T*T*]N8Falke" new player(2, 229412), "PJ" new player(13, 1713475),
987532878905 - 49 - 194.117.129.39:27015 - "Player" new player(12, 2338969), "Bentley" new player(0, 404328), "[Net-Stat 5] G - Force" new player(0, 780418), "Smit80" new player(5, 3651141), "QMC*KasSinoPious" new player(2, 2079488), "kingboy" new player(8, 3130598), "Bryaugh" new player(0, 169418), "]*[Angel.Dust]*[" new player(6, 2223910), "-=[TcF]=-RiotMachine" new player(10, 1462231), "Noob-NeoMorph" new player(8, 3866711), "*IGnoRAmoUS*" new player(4, 125520), "diekast" new player(17, 2560059), "[UsualexecuseS]Defcon" new player(7, 771668), "-=[TcF]=-Pyroux*TRIALS*" new player(9, 2526789), "[TDB]Roadkill" new player(28, 4495340),
987532879125 - 50 - 195.149.21.105:27025 - "DoOnce" new player(4, 3098507), "RoNiZ" new player(1, 3097867), "[Mc1]TeRminaToR" new player(11, 3063804), "[AHM]TheFallenOne" new player(8, 764351), "KillWhitey" new player(9, 2497538), "[-=ISS=-]Dr.starbyte*DeFormer*" new player(4, 2329523), "*-*aaronc*-*" new player(0, 439945), "[-=ISS=-]spark" new player(8, 989398), "[-=ISS=-]Masterminz*DeFormer*" new player(1, 673023), "Kuja" new player(1, 181570), "Mysteron" new player(5, 606054), "FatBob" new player(0, 814476),
987532895589 - 51 - 195.149.21.104:27035 - "toni" new player(3, 1243039), "cybersonic" new player(4, 3198141), "RIC" new player(7, 2340649), "[ C.L.I.T. ] Nutr0pic" new player(7, 1363945), "demolition_del" new player(3, 1127742), "[fU]NoMercy" new player(27, 1762133), "Pont" new player(9, 4693531), "herbster" new player(11, 1014360), "6Degrees" new player(18, 4443781), "Jee Funk" new player(9, 1009695), "[M.E.F]Griphon" new player(0, 624610), "Ralle" new player(2, 574727), "[GSS] Swiss Tony" new player(1, 331149), "Peacemaker" new player(1, 321266), "Farsight" new player(26, 10504821), "SF.Trolleyman" new player(9, 2809430),
987532895769 - 52 - 195.149.21.43:27035 - "los amigos" new player(3, 389956), "[LEKTR!K] MAD-V0DKA" new player(7, 1887393), "crime squat" new player(0, 811893), "=!DC=Stormdrooper" new player(6, 1300018), "Lashes" new player(1, 434518), "[lektrik]Bud-beer" new player(8, 2622518), "The Last Poet" new player(4, 382331), "[PuJa]BAMBUS-Krieger" new player(4, 365768), "?Sjakie?" new player(9, 1454956), "Sir Die-a-lot" new player(5, 2259706), "bollox" new player(13, 626331), "krrkrr" new player(7, 1545268),
987532895949 - 53 - 195.149.21.104:27025 - Server empty.
987532896070 - 54 - 212.19.64.131:27015 - Server empty.
987532896230 - 55 - 195.149.21.100:27015 - "Poly" new player(0, 531471), "M2S.Null" new player(0, 505971), "M2S.MINCEUL8R" new player(2, 477471), "GiZ" new player(0, 55971),
987532896400 - 56 - 195.149.21.43:27025 - "Campers Suck" new player(0, 74332), "Noekie" new player(0, 1704582), "SeB" new player(2, 441395), "TriBaL" new player(0, 1965457), "Chromosome 47" new player(2, 134020), "lagerlout" new player(4, 1592395), "[TVA]ShadowMan" new player(2, 323145), "<F.H>Gaz1978" new player(0, 520395),
987532896550 - 57 - 195.149.21.42:27025 - "Mr Plod" new player(0, 4238478), "-=TRS=-Eefinator" new player(0, 114040), "lil_skulls" new player(0, 927040), "agliettaontaura" new player(0, 760102), "Spoon[Better off Dead]" new player(1, 4310790), "bert" new player(0, 1238477), "thepoo" new player(0, 3181165), "DUDEN" new player(1, 1957040), "<Mc Giver>" new player(0, 147165), "Boy" new player(0, 3446040), "-=EsF=-*Cpt*Head-Hunter" new player(10, 1503102), "-=*[bS]=R00$ter=[DCL]*=-" new player(3, 385540), "PoKeRf@Ce" new player(4, 3140102), "LuFFiii" new player(1, 1863040), "-=*[bS]Outk@st[CL]*=-" new player(3, 3883852), "[Rh@]Pippin" new player(0, 142915),
987532896751 - 58 - 195.149.21.23:27055 - Server empty.
987532896871 - 59 - 213.221.174.135:28001 - Server empty.
987532896981 - 60 - 195.149.21.43:27015 - "[-CTS-]NeO[-]DRA[-]-||tm" new player(1, 126350), "MCKermit" new player(10, 735100), "-[A]-Vegeta" new player(0, 100663), "-sundown-" new player(6, 712163), "[K.O.K.S.]Tosde[SQB]" new player(7, 1429663), "da is rabble" new player(4, 488600), "[OgG]-FrieD.SpuD" new player(18, 2541913), "Jack Herer" new player(14, 5872100), "[WYB] TwiLight" new player(11, 1326663), "[Psycho]KaNnE" new player(5, 1115788),
Server stopped... Tue Apr 17 19:41:42 GMT+01:00 2001