From ffd668b920ff714ea8f240d4aca7664a4c71b1de Mon Sep 17 00:00:00 2001 From: Craig Oates Date: Fri, 5 Nov 2021 15:42:15 +0000 Subject: [PATCH] update README. --- README.md | 126 +++++++++++++++++++++++++++++++- attachments/system-overview.dot | 27 +++++++ attachments/system-overview.png | Bin 0 -> 29995 bytes 3 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 attachments/system-overview.dot create mode 100644 attachments/system-overview.png diff --git a/README.md b/README.md index 3447780..2dbcdb5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,125 @@ -# flicker +# Flicker -Data analysis on the light meter readings taken with the Light Meter project. The main area of study is the health and safety concerns regarding epilepsy. \ No newline at end of file +This a Python 3 project which provides a breakdown of the data +produced by 'Personal Flash in Real-Time' artwork. The data analysis +provided by Flicker is for the health and safety assessment concerns +regarding epilepsy -- when the artwork is exhibited in a public +(I.E. art gallery) setting. This code base has no immediate bearing on +the 'Personal Flash in Real-Time' artwork and its various +components. This is strictly data analysis (for health and safety). + +'Personal Flash in Real-Time' is an artwork which consists of three +smaller projects. They are: + +- [Light Meter](https://git.abbether.net/return-to-ritherdon/light-meter) +- [Relay](https://git.abbether.net/return-to-ritherdon/relay) +- [Midpoint](https://git.abbether.net/return-to-ritherdon/midpoint) +- [Personal Flash in Real-Time Documentation](https://git.abbether.net/return-to-ritherdon/rtr-docs) (This provides documentation for the whole project/artwork) + +The data Flicker breaks down is the SQLite database used by the +Midpoint project. Light Meter is responsible for taking and sending +light readings (in the various welding booths in Ritherdon) and +sending them to Midpoint -- where they are stored. Relay is +responsible for requesting those light readings (from Midpoint) and +controlling the lights connected to it/them in the art gallery +(I.E. Castlefield) based on those light readings. + +For the health and safety assessment, please use the following link: + +- [Health and Safety Assessment](https://git.abbether.net/return-to-ritherdon/rtr-docs/src/branch/master/health-and-safety/photosensitive_epilepsy.md) + +The assessment goes through and explains **how to interpret the +data** -- which is outside the scope of this document. + +## Project Set-up + +This assumes you are using Linux, specifically Debian or Ubuntu, and +have Python 3 already installed. Other environments have not been +tested. + +After you can cloned the repository, you will need to set-up a Python +virtual environment and install its requirements. + +```bash +git clone http://git.abbether.net/return-to-ritherdon/flicker.git +cd flicker + +# Adjust the location for your 'venv' to whatever you prefer. This is +# just a default example. +python3 -m venv venv + +# Activate the virtual environment. +source venv/bin/activate + +# Install the projects requirements. +pip install -r requirements.txt +``` + +From there, you should already have the data which needs +processing. Because of the nature of this repository, I have +transferred the data to it manually. There is no automated way to get +the latest version of the data. I do not have any plans to add this as +a feature. + +The project structure should look something like the following, + +```console +flicker/ +├── LICENSE +├── README.md +├── requirements.txt +└── src + ├── data + │   ├── test-data.csv + │   └── test-data-lite.csv + ├── flicker.py + └── services + ├── data_services.py + ├── io_services.py + └── log_services.py +``` + +**Note: You will need to create the `results` folder and its 'result +files' separately.** This is because they are included in the +`.gitignore` file -- so the commit history does not get clogged-up. + +To finalise setting up the project and begin the analysis, run the +following commands, + +```bash +# Make sure you have activated the virtual environment. Can ignore if +# you already have. +# cd flicker +source venv/bin/activate + +# These files are used for intermediate storage whilst processing the +# data. The 'final' results are stored in 'filtered_flicker_entries.csv' +mkdir data/results +touch readings-per-sec.csv +touch readings_above_threshold.csv +touch flicker_list.csv +touch filtered_flicker_entries.csv + +# To start the data processing -- which might take a while... +python src/flicker.py +``` + +For how the analysis is done, read the `flicker.py` file (I.E. the +'main'/entry-point file). Each stage is separated and documented +within it. You can quickly jump to said file by clicking the link +below: + +- [flicker.py](https://git.abbether.net/return-to-ritherdon/flicker/src/branch/master/src/flicker.py) + +Essentially, this is just a glorified script but I have separated out +the logic into various files and directories because that's just how I +like to roll. Was this necessary? Not really. It is what it is, +though. How the files are connected are shown in the diagram below. + +![System Overview](attachments/system-overview.png) + +The main reason for separating out the code like this was because I +felt like it aided in explaining what the code was doing in +`flicker.py` via the use of comments. I could document things at a +high level in `flicker.py` and you could dig down into the various +function calls if you need/want to. diff --git a/attachments/system-overview.dot b/attachments/system-overview.dot new file mode 100644 index 0000000..43f9050 --- /dev/null +++ b/attachments/system-overview.dot @@ -0,0 +1,27 @@ +digraph overview { + subgraph cluster0 { + style = filled; + color = lightblue; + node[style = filled, color = white, fontname = Arial;]; + d; + i; + l; + } + label = "Flicker Overview"; + fontname = Arial; + fontsize = 20; + labelloc = top; + f [fontname = Arial, label = "flicker.py"]; + d [fontname = Arial, label = "data_services.py"]; + i [fontname = Arial, label = "io_services.py"]; + l [fontname = Arial, label = "log_services.py"]; + data [fontname = Arial, label = "The various data (.csv) files", shape = rectangle]; + + f -> d; + d -> f; + f -> i; + i -> f; + f -> l; + i -> data; + data -> i; +} diff --git a/attachments/system-overview.png b/attachments/system-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..df398846cab2b9ae42cc13414f5251f6514b8d47 GIT binary patch literal 29995 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 z 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 JPn7K<{sSNFs$u{D literal 0 HcmV?d00001