Vote - Surveys in local area networks

Vote (without exclamation mark) was a project which I did back in high school in the winter holidays 2008 (most of the planning and pre development) and in early 2009. This project was an opportunity, offered at my school, to replace a »normal« written exam (or »Klausur«) by a project work. The German name for this is »Facharbeit« and in English the best matching term might be skilled work or research paper. The skilled work comprised a practial project with a written document where the result is presented.

Because my computer science teacher proposed that it would be nice to have an application to perform quick surveys in class at the computer room, I decided to implement this idea. The title of my project was: Entwicklung und Evaluation eines Systems zur Durchführung von Umfragen in lokalen Netzwerken und Intranets auf Basis des Client-Server-Modells

Development and evaluation of a system to perform surveys in local area networks and intranets based on the client-server-model
As expressed by the title the goal of my project was to build a two-fold application which allows to perform surveys by using sockets and a custom protocol between the different instances of the application (client and server). Since we did everything with Java back in the day at school I took this opportunity to explore the Java Networking API with this project. Since I was crazy about GUIs at this time I also required me to build a really nice looking GUI (at least at that time) using the Java SWING framework. At the end of this article (Screenshots VoteServer and Screenshots VoteClient) you can take a look at the result. By the way: the GUI I built is a 100-% handmade - I used no GUI desinger tool, because I really wanted to get the feel of building GUIs by hand compared to using a WYSIWYG GUI editor. Till nowadays I do most of my Java projects with SWING GUIs by hand because I got used to it.

The UML Use Case diagram below shows all actions implemented by the Vote system through the VoteServer and VoteClient application. The VoteClient enables users to participate at surveys and the VoteServer serves these surveys, maintains them and provides a graphical editor to create surveys with questions.

UML Use Case Diagram of Vote
A UML Use Case diagram of Vote. It shows all possible actions in the Vote system (performed by VoteServer and VoteClient) which can be performed by different stakeholders. The diagram is only annotated in German.

The main focus during development of Vote was - obviously - the GUI and the custom network protocol which was desgined by myself completely from scratch. Back in the day I experimented around with network programming (in Java) which you can see in anohter project: neptune - a network game. And I was very satisfied when I ran Vote for the first time, on two physical distributed machines, that it worked without any problems.

To make things more interesting, and to take care for the word »evaluation« in the title, I actually performed a full beta test of the application with test questions and evaluated them in my final paper (see next section). For this purpose my computer science teacher allowed me to take a regular double lesson of computer science class (90 minutes) to let my classmates judge about Vote. The beta test asked the participants to grade how well Vote fulfills the different functional (actual functions a system has) and non-functional (how well a system fulfills a functional requirement, e.g. Vote should provide an easy to use GUI) requirements. The result is shown in the following picture:

Vote beta test results
Shows the results of the beta test performed for Vote with 26 groups of two persons which tested the VoteClient over 90 minutes and one person which tested the VoteServer.

Docs & Downloads

The complete final skilled work submission which was examined by my supervisor and graded can be downloaded in the following. It contains a full description of the architecture and the definition of the custom network protocol for Vote (specification at the end of the document). Furthermore it shows the details of the beta test and evaluates the results.

 Download the PDF file (1.6 MB) SHA-1 8c346ccf475dddb70f470a3e547410ad4fef6175

The executable JAR files of Vote require at least Java 1.6 and should run with the most recent Java version (tested with Oracle Java SE 1.8.0_101). If not, please contact me.

 VoteServer executable JAR file (210 KB) SHA-1 c839017013a2eececd293eeea11c8f844696f851
 VoteClient executable JAR file (87 KB) SHA-1 31c93583445b544a052456a9ef200f6d01dfab9e

Furthermore you can download three sample surveys which can be loaded by the VoteServer by clicking on the little folder icon:

 Sample Vote survey: Movies (DE) (1.5 KB) SHA-1 e22f03ddbb3c993db4aea4794aaa9a66cde9d968

 Sample Vote survey: Computer Science (DE) (1.8 KB) SHA-1 9c69ece2b789848267f3a29c62be504f8cadd9a0

 Sample Vote survey: History USA (EN) (1.3 KB) SHA-1 f1bba83dfc2ee6256e28bf26832d2a246e8453f8

The source code is not available publicly. But if you need it you might want to contact me and ask for it with a rationale.

Screenshots of VoteServer

Screenshots of VoteClient

Third Party Library

Vote uses the Java classes (source), (source) and (source) developed by Horst Hildebrecht in version 1.0 (16.08.2006) since we got introduced to networking with this classes during the computer science lessons. We needed to know the API for the »Zentralabitur« (might not be possible to translate to English) - our absolutely final examination before graduating.

Since I did not like the fact that Vote depends on third party code and thought that I really should get to the bare basics with sockets I decided only a couple of months later to write my own networking classes. But I never ported Vote to my own classes. Anyway: you can download them here (CC BY-SA 4.0 license). (5 KB) SHA-1 ed65c836dc3a2f7f4f2023bd8823915eee387e28