Skip to content

0mega3/prime

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo

Prime

An OTP application. The prime server is implemented as a gen_server.

The server works like this:

  • When starting up, the prime_server initializes and waits for requests.

  • Users call us using gen_server:call (sync) or gen_server:cast (async) that sends a request to generate uniformly distributed pseudorandom numbers(PRNs) according to the uniform distribution function. In addition, PRNs are generated at a frequency of 3000 numbers per second (by default) and are queued in Redis (List data structure).

    $$F(x) = x, 2 =< x =< N where N is the upper limit of PRNs$$
  • As soon as the generator is started, the filter starts taking PRNs from the queue, checking that numbers is prime and adding prime numbers in Redis (Set data structure).

Parameters:

  • N is the upper limit of pseudorandom numbers (aka PrnUpperLimit);
  • RedisHost, RedisPort, RedisDB are connection parameters to Redis;
  • QueueKey is the queue key used by the generator in Redis;
  • ResultSetKey is the set key used by the filter in Redis.

Prerequisites

The installation of prerequisites for ArchLinux is shown.


Build

  • If needed, remove the _build directory to remove all compilation artifacts

    cd /target/prime
    rm -rf _build
  • Update the package index

    rebar3 update
  • Upgrade dependencies

    rebar3 upgrade --all
  • Compile the needed dependencies and the project’s apps’ .app.src and .erl files

    rebar3 compile
  • If needed, build release tarball. Tarball target directory _build/prod/rel/prime/prime-0.1.0.tar.gz

    rebar3 as prod tar

Usage

  • Start Redis in the background by running

    redis-server &
  • Start an interactive shell and use Prime API

    For development use only

    rebar3 shell

    For production use

    mkdir prime
    mv prime-0.1.0.tar.gz prime/
    cd prime
    tar -zxvf prime-0.1.0.tar.gz
    bin/prime console

Prime API

{ok, Prime} = prime:start_link().
prime:generate(Prime).
prime:cancel(Prime).
prime:get_res(Prime).
prime:stop(Prime).

Testing

The Redis Server should be started.

Run EUnit tests on project apps

rebar3 eunit

License

Prime was created by Denis Khorkin. It is licensed under the terms of the BSD-3-Clause license.

Credits

  • Denis Khorkin

About

A pseudorandom number generator (PRNG) and primality tester using the Redis message broker.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages