dream-gozer

command module
v0.0.0-...-74b78a2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 17, 2020 License: BSD-3-Clause Imports: 7 Imported by: 0

README

DREAM - GoZer

js-standard-style js-standard-style DOI js-standard-style

GoZer is a prototypical database backend and part of the research project Data REseArch Mining (DREAM). It is used to evaluate new ideas on how Open Access publications can be made available on mobile devices. It provides access to an edited subset of open access publications from the EconStor database via a REST-like Web API. The backend is complemented by the corresponding android application Ploc.

Main features:

  • Keyword-based interest profile
  • Personalized publication feed
  • Search for experts/authors in your field of expertise
  • Transparent, lightweight feedback based on Ethereum
  • Subset of the Econstore database with edited metadata

Getting Started

The following step-by-step guideline describes how to build and deploy the GoZer via Docker under Linux Ubuntu 18.04 LTS Server. We expect you have successfully installed Linux Ubuntu 18.04 LTS Server on your computer. Then please update your Ubuntu installation first:

sudo apt update
sudo apt upgrade
reboot
Prerequisites (Deployment)

To build and deploy GoZer you need:

  • docker and docker.compose (tested with Docker version 18.09.9 and docker.compose 1.23.2)
  • git with support for large file storage (LFS) (tested with git version 2.17.1)

Install Docker and Docker-Compose via Snap and provide user permissions:

sudo snap install docker
sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker
sudo snap disable docker
sudo snap enable docker

Install and initialize git with support for large file storage (LFS):

sudo apt install -y git git-lfs
Prerequisites (Local Build)

To build GoZer yourself you need the following tools:

  • git with support for large file storage (LFS) (tested with git version 2.17.1)
  • GNU make (tested with version 4.1)
  • Go compiler (tested with version 1.10)
  • SQLite 3 (tested with version 3.22)

First we install git, make, Go and SQLite3:

sudo apt install -y git git-lfs make golang sqlite3 

Deployment via Docker-Compose

Clone the GoZer project to your server machine:

git lfs clone https://github.com/fzi-forschungszentrum-informatik/dream-gozer.git
cd dream-gozer

Edit file Dockerfile.gozer and specify your server's IP or FQDN under ARG GOZER_URL_VAR=<YOUR SERVER IP>. The address is used to build the android client with your specific server as a target.

vim Dockerfile.gozer

After that you can build and start the backend as background process via docker-compose:

docker.compose up -d

Stop the backend via docker-compose:

docker.compose down
Deploy to mobile client

You need an Android smartphone with at least Android 7.0 (API level 24). The latest version of Android that we tested successfully is Android 9 (API level 28). Enable developer mode on your mobile device. The Android smartphone must be able to contact the your server's IP.

Beside deploying GoZer we also provide a Ploc client specific to the servers address by an apk file. This apk file can be downloaded to your Android device via Web directly. Open the http://<YOUR SERVER IP>:8080/download/ploc from your mobile phones Web browser and download the apk file. Go to your download directory and start the installation process by clicking on the apk file. As this is a evaluation prototype you need to accept the installation from self-signed apps / unknown sources.

Local Build

The following step-by-step guideline describes how to build and start the GoZer backend yourself (without Docker) under Linux Ubuntu 18.04 LTS Server.

Clone the GoZer project to your server machine:

mkdir -p ~/go/src/github.com/fzi-forschungszentrum-informatik && cd !$
git lfs clone https://github.com/fzi-forschungszentrum-informatik/dream-gozer.git
cd dream-gozer

Install required Go packages:

make install_packages

Extract demo database with publication metadata from EconStore:

tar -xzf storage.tgz

Make sure to build Ploc client with your corresponding server IP (or FQDN) and copy that apk to the GoZer root directory. Edit file gozer.conf and configure GoZer. Define the name of the apk file via ploc_apk = "ploc.apk" that later can be downloaded on your mobile phone. Disable ledger by setting enable = false (requires running Ganache installations).

vim gozer.conf

Run unit tests and check that there are no errors:

make test

Build GoZer backend:

make gozer

Run GoZer service:

./gozer -f gozer.conf

Development

GoZer was developed with the Go programming language with version 1.10 in mind. As database we use SQLite3, because its single file can be easily deployed and because its features were sufficient for our evaluation scenarios. In the following we give an overview to the project's folder structure and GoZer's architecture.

Folder Structure
  • / - Dockerfiles, build script, configuration example, main.go, example database, license information and this readme
  • /config - implementations related to the configuration file
  • /model - defines the data types (aka data model) used in GoZer
  • /model/ploc - defines the message types used to communicate with the mobile client
  • /storage - query functions to the local database (SQLite3)
  • /storage/ledger - query functions to store feedback in a Solidity contract
  • /webapi - implementation of a REST-like API for client-server communication
Package Dependencies

GoZer uses the following packages:

Thanks to all the developers that made these packages available!

Database Scheme

Database Scheme

License

This open source software is licensed under the 3-Clause BSD License - see the LICENSE.md file for details. The publication metadata in our demo database is taken with permission from the EconStor and it is free of known copyright and database restrictions and in the public domain throughout the world (CC0 - No Rights Reserved).

Acknowledgements

The DREAM project and its source code are the result of a joint project of the Humboldt Institute for Internet and Society (HIIG) and the FZI Research Center for Information Technology. The project was funded by the Federal Ministry of Education and Research Germany (BMBF).

We also like to thank:

... and all the open source developers for their time and their great work!

Future Work

The prototype was used to evaluate different concepts. It is not intended for use in production environments. For production environment one may:

  • Add HTTPs support
  • Switch to PostgreSQL
  • Add automatic harvesting and preparation of publication metadata
  • Improve test coverage
  • Migrate to Go modules
  • Make more database operations atomic
  • Use blockchain simulator for tests instead of running ganache node

Documentation

Overview

GoZer is a prototypical database backend that was used to evaluate new ways of interaction with open access content on the go.

Directories

Path Synopsis
Package config manages access to global configuration parameters.
Package config manages access to global configuration parameters.
Package model defines the data types aka the data model used within GoZer.
Package model defines the data types aka the data model used within GoZer.
ploc
Package ploc defines the message types for the client-server communication and their marshalling functions.
Package ploc defines the message types for the client-server communication and their marshalling functions.
Package storage implements access to a local SQLite database and an Ethereum ledger for storing open feedback.
Package storage implements access to a local SQLite database and an Ethereum ledger for storing open feedback.
ledger
Package ledger implements access to a distributed Ethereum ledger for storing open feedback.
Package ledger implements access to a distributed Ethereum ledger for storing open feedback.
Package webapi implements a REST-like Web service that handles HTTP requests.
Package webapi implements a REST-like Web service that handles HTTP requests.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL