Overview
Design, implement, test and document a minimial working system.
This challenge was created to check your familiarity with common concepts, standard metodologies and tools used in everyday development.
We assume you can use:
Googleto search for documentationGNU/Linuxas primary development platformgitfor version controlbashand standard command-line tools likecat,grep,ps, etc.- terminal-based text editor like
emacsorvi Doxygenfor api reference documentationMkDocs,MarkdownandLaTeXfor general documentationC++as primary programming language (including features introduced inC++11andC++14)g++as primary compiler forC++(andgdbfor debugging)QtCreatoras primary IDE (andqmake/cmaketo build projects)- standard
C++libraries likeboostandQt
Warning
You should also know and understand the difference between clean and noisy code.
General requirements
C++and cross-platform- TCP/IP communication between the library and the server
- custom protocol (application layer)
- server works as system service
- client application with graphical user interface using Qt
Components
Following diagram shows all components.
Application
User is able to:
- create new event
- view all events
The user should be notified whenever new event is created on the server.
Server
Custom designed protocol over TCP/IP. Events are created only by connected clients.
Database
A record in the database represents an event and must have 3 fields:
- timestamp
- priority
- text
Note
You can use any database you like but it must be available for all major platforms (including embedded GNU/Linux).
Final notes
The challenge is intentionally loosely defined. You are free to use time-series database instead of relational database if you wish. You can implement authentication and/or authorization. You can add support for syslog on unix platforms. You can add encryption layer to the protocol. You can use some serialization framework like protocol-buffers to implement the protocol or maybe you wish to define it in EBNF and implement a parser with boost::spirit. It is up to you. Show us what you can do in reasonable short time.
If you have any questions regarding this challenge, please send mail directly to: pmason@energotest.com.pl.