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 @@ + + +
+ +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. + +
Analysis of expo and design of troggle is done using three levels: + +
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. +
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. + + +
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}]
+
+
+
+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. -
-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. +
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.
-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)
- 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 @@
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
+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
Proposal #1