diff --git a/handbook/i/trogclass-1.jpg b/handbook/i/trogclass-1.jpg new file mode 100644 index 000000000..297c9a011 Binary files /dev/null and b/handbook/i/trogclass-1.jpg differ diff --git a/handbook/l/trogclass-1.html b/handbook/l/trogclass-1.html new file mode 100644 index 000000000..b838b83fd --- /dev/null +++ b/handbook/l/trogclass-1.html @@ -0,0 +1,97 @@ + + + + +CUCC Expo Handbook: Troggle UML Class Diagrams + + + +

CUCC Expo Handbook - Troggle UML Class Diagrams

+

Troggle UML Class Diagrams

+ + +
+
+Troggle UML Class Diagram +
Class Diagram - Essential Level (draft - to be corrected)
+
+
+ +

This shows the major "things" in troggle and how they relate to each other. +

So a survex (SVX) file is dated to a particular day during the expedition and usually has between 1 and 3 people associated with it. +

A Logbook entry has several people involved and may relate to a cave. It will be dated to a day during the expedition. + +

Design Diagrams

+

Analysis of expo and design of troggle is done using three levels: + +

    +
  1. The 'essential' or 'real-world' level. +
  2. The 'specification' level. +
  3. The 'implementation' level. +
+

As anyone reading this has probably been on expo and you might think that we can skip the real-world level. Not so: the multiplicities (the number of participants in the association) of the relationships between the different cave survey artefacts can be surprising. +

The specification level is where the action is. +This is where we decide which aspects of the real world we will ignore and what extra concepts we need to make things work. +

So we ignore who is resident at top-camp (even though today we record this religiously because of the tax implications for the GastHof at base). We do need to track the in-computer associations between survex files: the *include tree, what directories they live in, what wallet-directory they relate to, and all the individual survex blocks of survey measurements within each survex file. + +

We only need implementation-level diagrams for tiny, tricky issues. Python is very clear so serves as its own implementation specification. However Django does need some explanation. +

Class Diagrams

+

A Class Diagram is one the the basic types of structural diagram (as opposed to behavioral diagrams) used to understand complex systems. +

+

+The purpose of class diagram is to model the static view of an application. + + +

Online free class diagram editor

+

This diagram was created online using the YUML free software at https://yuml.me//. +

+You can edit your own version to revise this when it becomes outdated.
This is the entire source code that generates the diagram: +


+// Troggle Class Diagram
+// ------------------------------
+
+// Chain elements like this
+[SVX file]<>-wallet 1..*>
+
+[Wallet]++-1..*>[Scanned Note]
+
+[Wallet]++-1..*>[Scanned CentreLine]
+
+[Scanned CentreLine]++-1..*>
+[Drawing{bg:turquoise}]
+
+[People{bg:wheat}]<->
+[LogBook Entry{bg:violet}]
+
+[People]1..3<->[SVX file]
+
+[Cave{bg:cyan}]->[LogBook Entry]
+
+[Cave]->[SVX file]
+
+// note:
+[Cave]-.-[Drawing{bg:turquoise}]
+
+[Expedition{bg:green}]1<>-1..*
+[ExpeditionDay{bg:green}]<>-
+[LogBook Entry]
+
+[ExpeditionDay]1<>-1..*[SVX file]
+
+[PersonExpedition{bg:yellowgreen}]1<-1
+[People{bg:wheat}]
+
+[ExpeditionDay]1..*--1.*
+[PersonExpedition{bg:yellowgreen}]
+
+
+ +
+ + \ No newline at end of file diff --git a/handbook/t/trogclass-1.jpg b/handbook/t/trogclass-1.jpg new file mode 100644 index 000000000..385be859d Binary files /dev/null and b/handbook/t/trogclass-1.jpg differ diff --git a/handbook/troggle/trogarch.html b/handbook/troggle/trogarch.html index 3c2622c22..0b0cd2fa7 100644 --- a/handbook/troggle/trogarch.html +++ b/handbook/troggle/trogarch.html @@ -8,11 +8,11 @@

CUCC Expedition Handbook

Troggle Architecture

+

Troggle data architecture

The core of troggle is the data architecture: the set of tables into which all the cave survey and expo data is poured and stored. These tables are what enables us to produce a large number of different but consistent reports and views. -

@@ -29,13 +29,20 @@ The core of troggle is the data architecture: the set of tables into which all t

-ALSO there have been tables added to the core representation which are not anticipated in that document of this diagram, e.g. Scannedimage, Survexdirectory, Survexscansfolder, Survexscansingle, Tunnelfile, TunnelfileSurvexscansfolders, Survey. See Troggle data model python code (15 May 2020). +ALSO there have been tables added to the core representation which are not anticipated in that document of this diagram, e.g. Scannedimage, Survexdirectory, Survexscansfolder, Survexscansingle, Tunnelfile, TunnelfileSurvexscansfolders, Survey. See Troggle data model python code (15 May 2020) and click on the Class Diagram below on the right. +

+
+ +
Class Diagram (draft)
+
+

Architecture and purpose

+

Read the proposal: "Troggle: a novel system for cave exploration information management", by Aaron Curtis. But remember that this paper is an over-ambitious proposal. Only the core data management features have been built. We have none of the "person management" features, none of the "wallet progress" stuff and only two forms in use: for entering cave and cave entrance data.

Implementation in software

Powered by Django. -Troggle is written in Python (about 9,000 lines including comments) and is built on the Django framework. Before starting to work on Troggle it might be a good idea to run through an initial install and exploration of a tutorial Django project. +Troggle is written in Python (about 5,700 lines excluding comments) and is built on the Django framework. Before starting to work on Troggle it might be a good idea to run through an initial install and exploration of a tutorial Django project to get the Django concepts bedded down - which are not at all obvious and some exist only within Django.

diff --git a/handbook/troggle/trogimport.html b/handbook/troggle/trogimport.html index 5c3136771..f6987ac3f 100644 --- a/handbook/troggle/trogimport.html +++ b/handbook/troggle/trogimport.html @@ -34,20 +34,15 @@ Usage is 'python databaseReset.py <command> [runlabel]' and [runlabel] is an optional string identifying this run of the script in the stored profiling data 'import-profile.json' - if [runlabel] is absent or begins with "F-" then it will skip the :memory: pass caves and logbooks must be run on an empty db before the others as they set up db tables used by the others. -

On a clean computer with 16GB of memory and using sqlite a complete import takes about 20 minutes if nothing else is running. -On the shared expo server it can take a couple of hours if the server is in use -(we have only a share of it). On your -own computer, the first in-memory sqlite pass takes only about 6 minutes. -We do this so that typos and data-entry errors -are found quickly. +

On a clean computer with 16GB of memory and using sqlite a complete import takes about 10 minutes now if nothing else is running. +On the shared expo server it could take a couple of hours if the server was in use +(we have only a share of it).

Here is an example of the output after it runs, showing which options were used recently and how long -each option took (in seconds) -

+each option took (in seconds). 
 --   troggle.sqlite django.db.backends.sqlite3
 ** Running job  Profile
 ** Ended job Profile -  0.0 seconds total.
@@ -63,8 +58,9 @@ survexblks (s)   1153.1       -    3917.0  1464.1   1252.9
     tunnel (s)       -        -      25.5      -      23.1
      scans (s)       -        -      52.5      -      45.9
 
-

The 'survexblks' option loads all the survex files recursively following the *include -statements. It can take a long time if memory is low and the operating system has to page a lot. +[This data is from May 2020 immediately after troggle had been ported from python2 to python3 but before the survex import was re-engineered. It now takes ~600s in total.] +

The 'survexblks' option loaded all the survex files recursively following the *include +statements. It takes a long time if memory is low and the operating system has to page a lot. This has now been rewritten.

(That value of 0 seconds for QMs looks suspicious..)

The file import_profile.json holds these historic times. Delete it to get a clean slate. diff --git a/handbook/troggle/trogregistr.html b/handbook/troggle/trogregistr.html index ed9f047c0..72a160230 100644 --- a/handbook/troggle/trogregistr.html +++ b/handbook/troggle/trogregistr.html @@ -37,7 +37,7 @@

Proposal #1

We edit troggle to create two ids when resetting: "expoadmin" (the django administrator) and "expo" (to have access to Austrian cave surveys and edit pages). These will both be created by the 'django.contrib.auth' system. -Django gives us fine-graned access control settings for admin users so we can ensure that "expo" has the minimum necessary but has file upload permissions +Django gives us fine-grained access control settings for admin users so we can ensure that "expo" has the minimum necessary but has file upload permissions

We remove the 'django-registration' system entirely which reduces the attack surface of troggle - and the enforced deprecation/upgrade process certainly feels like an attack. diff --git a/images/style/bg-system.png b/images/style/bg-system.png new file mode 100644 index 000000000..ac71f191e Binary files /dev/null and b/images/style/bg-system.png differ