cnk-nubz / NUBZ

A tool facilitating surveying of visitors

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NUBZ - a tool facilitating surveying of visitors

This project was developed to help the Copernicus Science Centre in Warsaw, Poland conduct visitor surveys and collect their results.

Simplified workflow

  1. Set up the survey using the web interface, entering:
  • the map of the museum
  • locations and descriptions of exhibits
  • which visitor's interactions with exhibits should be tracked
  • questions to be included in the pre- and post-visit questionnaires
  1. Conduct the survey using the Android app:
  • follow the visitor and record their interactions with exhibits
  • administer the relevant questionnaires
  1. Download the results from the web interface:
  • generate a report for one or more surveys
  • export the results

Technical architecture

The project, which we used as a great opportunity to learn new skills, techniques and technologies, consists of three parts:

  • a backend server
  • a web interface
  • an Android application

which transparently synchronise the data (using Apache Thrift as the underlying RPC library), obviating the need for manual user interventions.

Backend server

All the business logic is handled by the backend server, which collects, manages and serves the data. It:

  • receives the survey results
  • prepares the museum map by pre-rendering its tiles at a couple of zoom levels
  • stores the data in a PostgreSQL database

Because no existing C++ PostgreSQL library suited all of our needs, we implemented a small wrapper around pqxx supporting JSON values and checking queries for type errors and column/table mismatches at compile-time.

Web interface

On the server-side, the web interface is a thin Django web app which acts as a proxy between the backend server and a rich web client. The client uses jQuery and Bootstrap extensively, and the museum map is displayed using Leaflet.

Android app

The Android app regularly synchronises the data with the backend server and stores it locally in a Realm database. Hence, it remains useable and guarantees data persistence even if network connectivity is lost.

Because the museum map is large, we implemented a solution similar to Google Maps': the Android app loads only the currently visible part of the map.

About

A tool facilitating surveying of visitors


Languages

Language:C++ 43.5%Language:Java 21.9%Language:CoffeeScript 14.9%Language:Python 8.0%Language:HTML 4.8%Language:CSS 2.4%Language:Thrift 2.0%Language:CMake 1.9%Language:Makefile 0.5%Language:Shell 0.1%Language:C 0.1%