jusst challenge

July 25th 2022

The following challenges are meant to be a coding exercise for applicants to software development roles at jusst.engineering.

Infrastructure

The following challenges share a common infrastructure in terms of a network data source, which provides the data that needs to be processed by the applications which are created to solve the challenges.

The data source is provided in the form of a WebSocket server, which sends a stream of state structures. The server is implemented using the dart-lang. It can be built and executed on Linux, macOS and Windows. Alternatively a hosted instance of the service is provided on this server and can be reached at wss://challenge.jusst.engineering/ws.

The server software code is hosted at https://github.com/jusst-engineering/recruitment.

WebSocket data structures

The data sent on the WebSocket is encoded as JSON, so that it is easy to parse in different environments. The underlying data structures are specified in the server code’s model: https://github.com/jusst-engineering/recruitment/blob/master/lib/model/state.dart#L14

Every message that is transmitted on the WebSocket is an instance of the State class, encoded as JSON. No other data is transmitted by the server at any point in time.

The following semantic is important to correctly interpret the received structures. If a field is null or omitted in the encoded JSON, its previous value remains valid. As an example, the metadata field retains all its inner values until a State instance with a new metadata field is received. This could be an empty MetaData instance in case of no active metadata being available. An example of such a State instance could look like:

{
    metadata: {}
}

How to share your solution

If you want to share your solution of a challenge with us, the preferred way is inviting us to view a git repository in which you maintain the implementation.

Ideally you should treat this repository with the same care as you would do on a real life work project.

Embedded developer challenge

Interested in becoming an embedded software developer at jusst.engineering? Then this challenge is for you!

(@mobile developers, please look a bit further below for your challenge.)

You are free to solve the challenge using Rust, C++ or plain C. Pick whatever you prefer.

Task

Implement an application, which listens to state changes coming from the WebSocket described in the Infrastructure section. Out of the incoming state events a virtual status led should be controlled.

The controlled status led supports the following properties:

The status led should implement the following behavior description:

Outcome

The resulting application shall connect to the WebSocket and generate output on stdout which describes the LED state. A snippet of it could look like

red@10
off
blue@100
off
blue@100
off

Expectations

While we would love to see complete implementations of the described task, we are happy to receive partly solved solutions as well.

A non-exhaustive list of things you can skip to simplify the challenge:

Mobile developer challenge

Interested in becoming a mobile software developer at jusst.engineering? Then this challenge is for you!

As flutter is the mobile development framework of our choice, we’d love to see you solving the challenge using flutter.

Task

Implement a mobile application, which listens to state changes coming from the WebSocket described in the [Infrastructure][#infrastructure] section. Out of the incoming state events the app shall visualize the following:

Metadata

The received Metadata shall be rendered as the applications main view. The coverArt should be the central element. artist and title fields shall be displayed as well, for example below the cover art. Make sure that they are visible, no matter what the devices display size is.

Volume

Whenever a volume change event is received, an overlay should be shown for 3 seconds, which displays the new volume.

Playback state

The playback state shall be visualized, for example using a play/pause icon, which switches its icon depending on the current state.

Playback position

The current playback position shall be made visible. Ideally a progress bar style indicator is made, using the the duration field from the MetaData combined with the current playbackPosition field from the State.

System state

In case a non-ready system state is received, show an overlay or notification bar, informing the user about the state. Make the overlay disappear as soon as the system field goes back to ready.

Expectations

While we would love to see complete implementations of the described task, we are happy to receive partly solved solutions as well.

Leaving out any of the above sub-tasks is a possibility to reduce the required efforts.