summaryrefslogtreecommitdiff
path: root/doc/architecture
blob: f3256fff8a399bb4ddddc2bfaabe332df684448c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
title: architecture of skdb

main concepts:
- packages:
    - metadata:
        - each package has a dependency set, a list of other packages that must be downloaded in order to make the package work
        - in the metadata the dependency set is not a list but rather a hierarchical boolean tree
    - source or catalog data
    - CAD files
- dependencies:
    types:
        build:
            description:
                if Y must be used to make the part X
                then X has a build dependency on Y
                #note not all dependencies are parts (but they must be a package)
            examples:
                - a screw has a build dependency on a lathe
        assembly: comes after the build process; integrates component parts into an assembly part
        disassembly: undoes the steps in assembly process; decomposes assembly part into components           
        use: &use
            description:
                if part X is unusuable when without Y
                then X has a use dependency on Y
            examples:
                - a screw requires a nut in order to fasten something else
        run: *use
        software:
            description:
                if the skdb representation of X is unusuable without the skdb representation of Y
                then X has a software dependency on Y
            examples:
                - library header files required for compiling support into another program
                - precompiled object or shared library for link time (i.e., package X requires a shared library from Y if you compile package X)
                - precompiled object or shared library for software run time (i.e., package X loads up the lib.so file (not compiled in))
    dependency sets:
        each package has at least one dependency set that must be satisfied (in special cases that one set can be null)
        without satisfaction of a dependency set, the package is probably useless (a broken install)
        a package with multiple dependency sets allows there to be unique buildtime, runtime and software dependencies for different situations
        for instance, certain buildtime dependencies might demand certain runtime dependencies
- instructions:
    description:
        sequences of steps for humans and machines for any of the different scenarios (build, run etc.)
        usually generated by running instruction generation code from each of the dependencies
    wishlist:
        - zoomable text detail: see doug engelbart or code folding
        - 3D animation:
            description: see 'parameterized action representation' papers for neat diagrams
            url: http://adl.serveftp.org/papers/instructions/Virtual%20humans%20for%20validating%20maintenance%20procedures.pdf.1.png
        - 2D: see lego instructions
        - sentence planner: &spud
            - generate different sentences that say the same thing given the same input #for disambiguation
            - English grammar
            - other natural languages
            - tree-adjoining grammars: xtag
        - virtual human actors to verify and demonstrate instructions
        - virtual non-human agents to verify and simulate actions (robots, machinery)
    concepts:
        - Agent:
            - such as a cnc machine, human, computer, something else
            - its methods are actions that build scripts can select from
            - is a lathe a Part or an Agent?
        - Tree:
            - top-to-bottom
            - root state is at the bottom
            - root is the last visited or last added state
            - if you were to make a pie, the root node of the recipe tree would be a State with a Pie in it
            - when you make a pie you need merge the root state (node) from two trees:
                crust making tree:
                apple slicing tree:
        - State:
            - a node in the tree
            - contains a list of various objects, maybe a Pie, maybe a Part, etc.
            - has an __iter__ method
        - Action:
            - an edge in the tree
            - defined as a method of a particular actor
            - no specific sequence of actions unless necessary; step-by-step
              instructions are just a particular (optimal) serialization of action dependency tree
    questions: #and answers, if you're lucky
        - where are steps (in instructions) written down in skdb?
        - how do you translate from an action to machine code:
            - CAM has a "post processor" which tailors the generic instructions for the individual machine tool/language
        - or natural language: *spud
        - how do instructions from other packages contribute to instructions for dependent packages?
    external references: see f16 maintenance manuals (internal fuel tank vent)