- Description
- Intent And Idea
- File Structure
- Building The Application
- Datasets Generation
- Features
- OS Details Which Was Used
An interactive Django and Heroku-based application that lets you select 10 classic dynamic and iterative algorithms, their datasets, then compute the results and display them. It's meant to serve as a very simply Django application that helps you select an algorithm from a list of Dynamic Algorithms, and a datasets for viable for at least of the algorithms given.
The application then takes the two components, uses the dataset in the algorithm, and displayts the output on a new page. The report for the project has been attached as well.
A simply UI to explore aglorithms and their results.
Django splits the responsibility from the main MVC view into smaller 'components' and applications that each handle their responsibilities quite easily.
Inside of apps is base, where the source code for the,
- Algorithms
- Templates
- Urls
- Views
- Static files
exist.
You can find all the algorithms within apps/base/src/, except in apps/base/src/aux.py, which helps to mitigate what algorithm and dataset is to be used by removing the abstraction level from the view logic and shifting it over to the business logic.
apps/base/src/aux.py has the datasets embedded within its source code, which it takes, and then sends it over to the respective targeted algorithms to be rendered for the results.
The apps/base/static/base contains the css/ and js/ folders, which have the source files for manipulating the CSS and Javascript for the components that exist within apps/base/templates.
The responsibility to take care of the views has been shifted from the main source repository in cs302AlgorithmsProject to apps/base/templates to facilitate with ease what HTML files to render.
The main home page is in home.html, the final result page uses result, the about page uses about, the contact page uses contact, the report page uses the report option.
Hopefully no changes will be needed here for the average user, but to describe, this folder contains the NGINX and WSGI settings to enable the routing and the HTTP protocols. It specifies from WSGI parameters that are helpful to have, as well as some loggin related.
The NGINX configurations specify the headers, the default ports, the pages to render when an internal or external error arises, does redirection, deals with caching, specifies the location for the MIME types, and sets the default character format to chartset-utf-8.
This contains the,
- Settings
- Static files
- Templates
The Settings directory contains the files that tell Django what the variables or configurations are used for the development and production environment. In practice, use the development ( default ) settings when you want to test out changes locally as a developer in real time, as hot-reloading is supported here. Use production when you want to see what the final result will look when you push this to deploy somewhere, for example, on AWS, Azure, GCP, CloudFlare, CloudFront, Redhat, or like the default option used here, Heroku.
The Static Files most notably uses base.html that is extended to the templates within apps/base/templates/home.html that control the extension of the format and details the footer, the header, the imports for the CS, JS, and CDN files. The other *.html files here.
The urls.py and wsgi.py are self-explanatory.
- .editorconfig: Specifies the styling, to be left upto Django and editorconfigs, if needed
- .gitignore: Specifies what files should be ignored by Git
- makefile: Shortcut for commands,
make devfor dev server,make prodfor production server,make staticfor collectstatic command,make noinput, to specify the--noinputflag as well - manage.py: Main file to used wth Django to start and close the project
- Pipfile: Used by
pipenvto keep a local store of the files used - Pipfile.lock: Again, used by
pipenvfor locking versions of pacakges - Procfile: For deploying to heroku
- Project_Desc.pdf: The original requirement specification for the project in this semester
- readme.md: Contains the instructions for the developer, running, building, debugging, pulled off as a template for a repository
- README.md: This file!
- requirements.txt: Specifies the dependencies that live in the
virtualenvorpipenvwhichever is used - runtime.txt: Specifies the
Pythonversion used for the development - tox.ini: Some basic packages needed to initialize the component
To deal with,
- Using
pipenv - Using
collecstatic - Using
developmentenvironment - Using
productionenvironment
Please take a look at readme.me.
Make sure you have pipenv installed. Then install the requirments in your virtualenv,
pipenv run pip3 install -r requirements.txtIf that doesn't work, just run,
pipenv install --devIf you need a database, edit the settings and create one with
pipenv run python3 manage.py migrateOnce everything it's setup you can run the development server: http://localhost:8000/
pipenv run python manage.py runserverSettings are divided by environments: production.py, development.py and testing.py. By default it uses development.py, if you want to change the environment set a environment variable:
export DJANGO_SETTINGS_MODULE="cs302AlgorithmsProject.settings.production"or you can use the settings param with runserver:
pipenv run python3 manage.py runserver --settings=cs302AlgorithmsProject.settings.productionIf you need to add some settings that are specific for your machine, rename the file local_example.py to local_settings.py. This file it's in .gitignore so the changes won't be tracked.
Or if you just want to use the virtualenv method,
virtualenv venv
source venv/bin/activate
pip3 install -r requirements.txt
make devAnd you're done!
The code that was used to generate the dataset is uploaded here, https://gist.github.com/Rubix982/c95be3be0a5de615e37fdcd7c474be44
This was a quick .py file for generating the data for us.
Works for (d), (e), (f), (g), (h), (i), (j).
We used this https://www.careerbless.com/calculators/word/list.php to generate the string permutations for the datasets needed in (a), (b), (c).
- Django compressor to compress JS and CSS and compile LESS/SASS files.
- Pipenv To manage dependences and virtualenvs.
- Django debug toolbar enabled for superusers.
- Argon2 to hash the passwords
- Operating System: Kubuntu 20.04
- KDE Plasma Version: 5.18.5
- KDE Frameworks Version: 5.68.0
- Qt Version: 5.12.8
- Kernel Version: 5.4.0-62-generic
- OS Type: 64-bit
- Processors: 8 × Intel® Core™ i7-8665U CPU @ 1.90GHz
- Memory: 15.5 GiB of RAM