O.G.A.S. Русский

The workshop

The workshop in detail: the window of the platform, the panels, the windows of the graph, the pulpit, the library and the assistant, the look of nodes on the canvas, the pulpit of a program and its look. Where to begin — Getting started.

Introduction

The document describes the make-up of the workshop — the window of the platform in Windows — and of the pulpit of a working process. The owners: the function ui (the link and the window), the function canvas (the document of the pulpit), the function graph (the meaning of shared objects). First steps — Getting started, the protection of the window — Protection, 3.10, the methods — Methods of the workshop and the pulpit.

1 The purpose of the workshop

The workshop is the window of the platform. In the workshop a person adds modules, builds graphs and pulpits and uses them. There is one workshop per instance; inside it, in the host — the middle between the panels — windows open.

The pulpit is a full graphical interface of a working process.

What the workshop does for the person:

2 The window in Windows and the function ui

The platform works in WSL2, and the window is a Windows program. The workshop is the program ogas-window.exe on Tauri 2 and the system WebView2. The function ui is a Linux OS process marked interactive in its description:

1) it waits for a connection on 127.0.0.1 (the port ui.window.port; 0 — any free port at each start) and makes a session token; 2) it starts the window program (WSL can start Windows programs from Linux) and passes it the port and the token on the command line; 3) it takes one window: the first message is ui.window.hello with the token, otherwise the connection is closed; 4) it passes the requests of the window to the kernel through its own connection, and the events of the kernel to the window as the notification event; 5) it keeps for the window the name of the program whose face a start asked to show (6.6), and tells an already open window of such a request.

The messages are the same JSON-RPC 2.0, one per line, as on the bus, only over TCP. The window can reach the methods of the functions, and of the kernel methods only core.status, core.health, core.event.subscribe and core.shutdown. The methods ui.window.* are answered by the function ui itself. Leaving the workshop (2.1), after the person confirms, sends core.shutdown, and the instance stops. Stopping the instance closes the window and removes the icon by the clock. An HTTP server, a browser client, Electron and a Linux window through WSLg are not used.

Why not a Linux window through WSLg. Switching the RU/EN layout is not passed to a WSLg window (Weston sets the layout once per session), and there is no fractional scaling, no Windows input methods and no screen narrator. In a Windows program these work as usual.

Where the window program lies. The path is set by the setting ui.window.exe (as WSL sees it); when the setting is empty, bin/ogas-window.exe from the delivery is used, then the result of make window in the sources. The working folder of the window is on a Windows disk. If WSL cannot start Windows programs, the window does not open, and the instance works through the command line.

2.1 The icon by the clock

A closed window goes to the icon by the clock, and the platform works on (table 5 there).

There is no automatic start: after the computer restarts, programs do not work until the person starts O.G.A.S.

2.2 Notifications

A notification — of a program (the node «Notify», The program: graph and runs, 24.6) or of the workshop itself — stands where it will be seen:

The four latest are seen at once, each for 12 seconds. Over the window a click on a notification removes it. In the corner of the screen a click brings the O.G.A.S. window back, and the cross on a notification removes it without opening the window; when no notifications are left, the corner window closes.

What the workshop itself calls about:

About a question of the program that is in the window now there is no call over the window: it is already outlined there, and its tab is marked (6.8). About its failure there is no call in the workshop — it is named on the strip on top — but there is one on its face, where there is no strip. In the corner of the screen both are always called about: the person is not at the window. There is no call about the end of a run; there is no sound.

A notification is not kept: whoever did not see it, did not see it. While the platform does not work, there is nobody to call.

3 The window page

The interface is a page built into ogas-window.exe: HTML, CSS and JavaScript modules without a bundler and without a ready interface library (functions/ui/window/ui/). The second page is the notification window in the corner of the screen (notice.html, 2.2): it keeps nothing of its own but shows what the window program passed it, in the colours and font of the workshop. Buttons, fields and lists are made by its own code. The page is updated by its own code, which changes only the elements that changed, so the focus, the cursor and input through input methods are kept on redraw. The field of the graph is drawn in SVG.

Input, layouts, input methods, screen scaling and the screen narrator are given by WebView2. The accessibility of the workshop: every action can be done from the keyboard (5.1), the focus is visible, the contrast of both schemes is checked, icon buttons have words for the narrator; the canvas of the graph and the sheet of the pulpit are not read by the narrator as a whole. The contrast of the default colours of both schemes and of the pulpit theme is checked by make ci: letters differ from their background at least 4.5 times, a line that marks something and the edge of a field — at least 3 times (WCAG 2.1, 1.4.3 and 1.4.11). The sizes ui.* are set in CSS pixels, screen scaling is applied by WebView2. The default font is built in (DejaVu Sans). ui.font.source = system — the Windows interface font, file — a file from WSL: the function ui reads it and gives it to the window with the method ui.window.font.

The page may take scripts, styles and fonts only from the window program itself, images — from it and from addresses with the data inside them; the page does not go to the network. This is the content policy of the window (functions/ui/window/tauri.conf.json); the window shows the pictures of a pulpit at such addresses (Protection, 3.12).

4 The frame

The levels of the workshop (rule 2.5 of Rules of development):

workshop (the window of the platform)
  area: brand, strip on top, left side, right side
    bar → subsection of the bar
  host
    bottom bar: capsules of folded windows
    window on the host (kinds of windows — table 1): capsule tab and body
      body: column on the left, work area, panel of the chosen
        category → subcategory → row or command

The frame: capsule bars along the edges and capsule tabs on the windows; the windows on the host move freely. The window has no Windows frame, all areas are drawn by the page:

The bars are sections by meaning, not by how the code is made. Above the items of a section stands its logo: the sign of the section, and with labels its name as well; it opens nothing and is not pressed — on these bars and on the bars over the canvas of the graph (5.4). The items open things; the labels are opened by a strip at the side, the bar is folded by a chevron. A window names in its description the bar of its section and its place in it, but does not head the bar. There are no program buttons — run, stop, retry, input — on the bars: they are on the pulpit, on the face of the program and in the control bar over the canvas of the graph (5.4). - the host in the middle — the windows; over its bottom edge — the bottom bar with folded windows (section 5).

A bar is one capsule in three states:

A bar of the right edge is the same, mirrored: the icons by the outer edge, the labels toward the host. The chevron points where the capsule will go. The bars of the left edge are not set up; the panels of the right edge, their names, order and the programs on them the person puts together in the library (5.6). Folding and labels are kept until the workshop is closed.

The sizes of capsules are counted from the cell ui.layout.cell in sixtieths of the cell: the logo 40, the tile of a subsection 32, the step of a subsection 44, a separator 2 by 33, the strip of labels 17, the chevron 27, the rounding 9. The height of a window tab is 0.8 of a cell.

The code of the frame is kept apart from the content of the windows: shell.js (areas, bars, windows and gestures), faces.js (the faces of capsules), windows.js (the geometry of windows), lib/look.js and style.css (tokens), lib/glyphs.js (signs). The body of a window by section 5 is drawn by host/frame.js, and each window on the host is a file of its own in host/ that only fills its parts: a change of the settings window does not touch the graph. The pulpit is drawn by pulpit/surface.js — one code for the step «View» and for the face of a program (6.1), knowing neither the frame nor the body of a window; the face of a program is face.js. Rules 2.1 and 2.5 apply (Rules of development).

5 Windows on the host

A window on the host is a capsule tab on top (the name, the buttons of the window, the folding chevron) and the body of the window under it.

The journal is a window like the others (its data are given by the function observe): it has no fixed place on the host, it moves, is drawn to edges, is maximized and closed. The journal shows the latest records as a page, and the button «Show more» above them adds older ones while there are any: the journal is not shortened, and its whole history can be reached from the window.

5.1 The body of a window

The body of each window on the host is made the same way:

The make-up of the body of each window is given in table 1.

Table 1 — The make-up of the bodies of windows

Window Column on the left Work area Panel of the chosen
program journal «Runs» the runs of the chosen program: when, by which event begun, the state — for a failure with its cause, for a stopped one by whom — the size and the button «Clear» (The program: graph and runs, 12.6). Controlling the program — switching on, events, input and output — is in the graph window (5.4, 5.5) a run: «About» — the state, the time, the size, whether it can be resumed, «Keep» and «Do not keep»; «Events» — its rows from the journal of the run; «Results» — the files it left: a picture is seen, sound and video play, a text file is read — its beginning — the rest is named by name and size; each file has «Open» — with the Windows program that opens such files — and «Show in folder» (Protection, 3.13)
graph kinds of nodes, the installed modules by name, the variables of the program and processes; the tools and the control of the program are in the bars of the canvas by the left edge (5.4) the graph of the process: nodes by 5.3, frames and unfolded groups — areas of the canvas with a body inside a node: «General» (the name and the description in the person's words, and only they; read, edited by the sign «Edit»), «Details» (identifier, kind, module, ports, for a module node — memory, state) and «Edit» in rows by parts (the module, the parameters of the node, Modules, section 10, the fields of the node itself — memory and, for a node of a service, the overlap rule — and what to give the node in a check); a group: «General» (name and description), «Details» (identifier, name, make-up, rows of the face and variables of the face with their values, state in the run) and «Edit» in rows (the names of the inputs and outputs of the face, the initial values of the variables of the face); a variable: «Information» (name, type, initial value, «Remember», who uses it) and «Edit» in rows in two parts — «Variable» (name, type) and «Value» (initial value, «Remember») — with the button «Delete»
pulpit what lies on the open tab, by its containers — of a container of tabs only the open tab, at any depth; a click chooses the element on the sheet (6.7) — and the decorations of the set: a click puts one more the pulpit: the tabs of sections and the sheet of the open section (section 6) on the step «View» — an element: «Edit» in rows (label, kind of element, section, look — how the element is drawn, what is set for its kind, for an event button — what it carries with it, place and size on the sheet; «Earlier», «Later», «Take off the sheet», «Delete the element») and «Information» (kind, objects, section, place and size, mark); a section: name, width and height of the sheet, underlay — colour and picture — and «Remove the section»; the pulpit, by the sign «Look»: the keys of the theme, the pictures of the pulpit and its own looks
settings «State», the large sections and their subsections the settings of a subsection and «Reset all» of its section; for «State» — the state of the kernel and the functions a setting: «Edit» (value, «Write», «Reset») and «Information» (explanation, key, default, allowed values)
library «Programs», «Modules», «Neural networks»; «Panels on the right» — the panels of programs and «New panel» a list of programs with «Create a program» and «Take a program in»; a list of modules with making a module; neural networks by kind — with the size, the modules that take them by default and the folder they are taken from, with a field for another folder; for a panel — its name, its place among the panels, the programs on it and those that can be put on it a program: «About» — on which panels it stands, whether the graph offers it, «Open», «Open in the workshop», «Hand the program out», «Delete the program»; «Where seen» — the marks of the panels and of the column of the graph; a module: «About» — description, version, the neural networks it names, and «Delete the module»; «Where seen» — the column of the graph; a neural network: size, who needs it, how it lies, «Delete the neural network» (5.6)
modules «Modules of the program» the modules the nodes of the program on the screen take — one not installed is marked — and installing its environment a module: «Information» — description, version, ports, parameters; «Check» — a test call and its answer. Modules are made and deleted in the library (5.6)
platform journal «Events» — the events of the platform without the events of runs, «Problems» rows of events or open problems an event — its fields; a problem — its fields and «Solved». A chosen problem highlights its node and narrows the journal to its run: its rows are shown whole

For a node and a group the panel opens on «General»: the first thing to know about a box on the canvas is what it does and why it stands there. The tab the person went to stays chosen for the next node too.

«General» is read first: the name and the description — or words that there is no description. These are the person's words, and there are no others on the tab: what a kind or a module says of itself is opened by the sign «?» in «Details». Under them is one sign — «Edit». By it the words become fields — the name and a description of several lines (The program: graph and runs, section 4) — and under the fields stand three signs: «Default» — return the name the node carries by itself and remove the description, at once; «Save the changes» — put what is typed into the node; «Leave editing» — go back to reading, leaving what is typed unsaved. Enter in the name field saves, like the sign. For another node the information is read again. In the graph of a program that is on there is no sign «Edit»: the words are read but not edited.

«Edit» of a node and a group — in rows, by parts. The parts of a module node: «Module», «Parameters», «Seen on the node» — which parameters stand on the node as rows (5.3) — and «Node» — the fields of the node itself; for a node of the platform — «Parameters», «Seen on the node» and «Node»; for a group — «Inputs», «Outputs» and «Variables». A part with no rows is not shown. A row is a name, a field and two signs at the end of the row: «Return the default value» and «Save the changes»; the ends of the fields of all rows stand on one line. A hint opened by the sign «?» stands under its row, and the row stays in place. In a narrow panel — one put at the side — the name of the row stands above the field, the signs stay at the end. The row of the module has no return sign: the module has no default. What to give a node started alone is typed in the fields of events on the canvas (5.5).

For a module node «Details» show the ports from the manifest, and «Edit» — the module of the node and a field for each of its parameters by the schema of the manifest; an empty field shows the default (Modules, section 10). The sign «?» at a tool, a kind of node, a port and a parameter shows the hint from the dictionary of the owner: for a module — module.<id>.input|output.<port>.help and module.<id>.param.<name>.help, for nodes of the platform — the texts graph.* of the function of the graph.

The fields of the node itself — what the person sets for a node besides its parameters: the memory of a module node and the overlap rule of a node of a service (The program: graph and runs, sections 5, 13). Which fields these are, and at which module a field makes sense, is said by the kind of the node (node_fields, Methods of the graph, section 1); the window keeps no list of its own and does not show a field that means nothing at this module. An empty field removes the field from the node, and the owner's rule holds: a memory of its own, overlap queue.

What is typed in the panel goes into the document when the person saves. So a node, a group, a variable of the program and the label of a slot of the pulpit are edited — the rule is one, and the rows are the same (Rules of development, 2.9):

What is typed and not saved is not lost (Rules of development, 3.1.5). When the panel goes to another node or closes, it stays waiting in the panel of its node: the window says so, the node carries a dot before the sign of its kind, and on coming back what is typed stands in its rows. A variable has its dot after its name in the column, a slot of the pulpit — after its label on the strip. «Save» of the graph writes the graph as it stands in the window, «Save» of the pulpit — the pulpit: what is typed and not saved is not in them, it stays in the panel, and the window says so. After a step back, a save and a paste the panel shows what stands in the document, and what is typed and not saved stays in the rows. Going to another process and closing the workshop ask about it and name it among what will be lost.

The memory of a module node is named by «Details» in the same place as the node: whether it is its own or shared — then with its name and the nodes that share it — and what of it is saved: the size, the time and whether a module works with it now (module.state.list, Methods of modules, section 2). The button «Clear the memory» is there when anything is saved; it calls module.state.clear, and a refusal of the owner — the memory is held by a module that is up — is told in the window.

Switching the program on, events, stopping, retry and resume are shared objects of the graph in the window of the process, in the control bar over the canvas of the graph (5.4) and on the pulpit, not buttons of the frame. There is no second run button with a meaning of its own.

When a node is chosen in the graph window, two groups of allowed links appear in the column on the left:

A row of the list is not a node but a port: a module that takes a picture and a text out of a file stands in the list as two rows. So the person chooses not a module but the result they get, and the port for the link is defined uniquely. A row names both ports in the order the packet will go — success → join.input; types, descriptions and marks are shown in the panel.

The make-up of the lists is set by the function of the graph (process.node.candidates, Methods of the graph), not by the window: the rule of compatibility is one and the same for the list and for the check of the graph. Only links that are truly allowed come into the list.

The panel of the chosen shows a candidate the same way as a node from the canvas: what it is, what the chosen port gives (module.<id>.output.<port>.help, for nodes of the platform graph.kind.<kind>.input.<port>.help and .output.<port>.help from the folder of the kind), what type the data are and what the receiver will do with them. As separate marks — «this input already has a source» (a merge will appear) and «this is a cold input» (the node does not wait for it). The panel holds no ratings and no recommendations: the platform tells only what it knows.

Choosing a port. A press on the point of an input or an output that led nowhere chooses this port: its node is chosen, the row of the port is outlined, both groups of the column show only the links of this port, and their heading names the port; on the canvas the ports of the other side that fit it are highlighted — inputs for a chosen output, outputs for a chosen input — and nodes without such ports step back, as when a link is drawn. Dragging from an output draws a link, as usual. A press on a node, on an empty place of the canvas or choosing another thing takes the choice of the port off.

The choice does not shift by itself. A node chosen on the canvas stays the anchor: the column is tied to it while the person looks through the candidates. A click on a row shows the candidate in the panel but does not rebuild the lists. Linking makes the new node the chosen one, and the column is rebuilt around it.

5.3 The look of a node on the canvas

On the screen a group is called a node: what is built of nodes is a built node, and the workshop does not say the word «group». The tool is «Build into a node», the actions on the label are «Unfold», «Fold», «Take the node apart», in the control bar — «Make a separate process» (5.4), the default name is «Node», and where a built node has to be told from an ordinary one — «built node». «Group» stays a term of the documents and the format (Terms).

Everything that stands on the canvas has one form:

Names:

A call of a process. Its ports are the inputs and outputs of the called process under the names the person gave them; in «Edit» — the choice of the process and a field for each of its variables, an empty field shows the value the variable begins with by itself (The program: graph and runs, section 18). In a run a call shows the loudest of what the nodes of the called graph do, like a folded group.

Links go at right angles from the point of an output to the point of an input and go around nodes. The colour of the line is the type of data of the output it comes from: text, picture and file have colours of their own (ui.color.type_*), a link with any data (json) and a link whose type the owner of the port did not name are drawn in the colour of a link of the graph. The point of the port is filled with the same colour, and the hint of the port names the type in a word. Dashed — a link from a variable or a constant, a bright and thick line — a highlighted one (5.4).

Which way a link goes is shown by an arrow: at the input the line ends in a triangle that touches the point of the input and grows with the thickness of the line; a dashed link has an arrow too. An input that several links come to is a row taller for each of them, and each link has its own point: different data come by different links, and the node takes what came first. An output whose links go to several nodes keeps one point, and a little further from it stands a fork point the lines part from: every node gets one and the same copy. The hint of the input names the number of sources, the hint of the fork — how many nodes get the data.

A link is chosen by a press: a chosen link is wider than the others, and the panel says what it joins — from where and to where, by node and port, what data it carries and through how many points it is led — and holds the button «Delete the link»; Delete does the same. The nodes stay, deleting is a step of the history. Choosing a node, a group or an empty place of the canvas takes the choice of the link off. In the graph of a program that is on a link is chosen to be read, but not deleted.

Signals. When the person draws a link, the ports it may be brought to glow green, and the rest are dimmed. A port under the pointer it may not be brought to is red, and the reason is named in the words of the function of the graph: the types of data do not match, the same node, no links enter the node, such a link already exists, the link would cross the border of a frame not through its ports or close a ring outside a frame, a link of another sort already leads to the input; when only the face of a group is in the way — the link would cross its border through a port that is not on the face — the window names this group and says what to mark. An input that already has a source is amber: it can be linked, a merge will appear. In a run the node that works is highlighted; a failed node and a node waiting for the person's answer blink; a node waiting for a signal or for time, and a module node whose step waits its turn at the module, are highlighted steadily. A signal is never given by colour alone: it has a sign or a form as well.

The state of a node in a run is shown by two signs:

The body of a node does not change its colour with a run: it is ordinary or chosen. A folded group shows the loudest of what its nodes do: a failure before a question to the person, a question before work and waiting; when nothing goes on — that the run passed through it. The state of a group in words — «standing», «working», «error», «partly», «done», «stopped» (The program: graph and runs, section 17) — is named by its panel. Whoever asked the system to remove motion sees no blinking: the state is told by the badge and the colour of the ring.

What a node does the window learns from the run it follows: that a step of a module waits its turn at the module, began and ended, and that a branch stood still, is told by the event node.changed, the rest by the checkpoint, which the window reads again at each such event (Exchange with the kernel, section 7). A window that came to a run already going did not hear the beginnings of steps: about the steps of modules going or waiting their turn it asks process.run.status (Methods of the graph). A packet at a module node whose step is not said to be going waits its turn.

5.4 The bars of the canvas

Over the canvas, by its left edge, stand two bars: on top the tool bar, under it the control bar. Both are the same capsule as the bars of the workshop (section 4), at three quarters of their size: they stand over the work, not beside it. The canvas scrolls under them, and at the start of scrolling the left edge of the graph stands to the right of the bars — at any scale: the room for the bars does not shrink with the canvas. Each bar folds down to its head and shows its labels itself, like any bar: the labels are opened by a strip at the side, folding by the chevron, and the logo of the bar is a sign without an action.

The control bar holds the commands of the program and the actions on what is chosen where the graph is built and looked at in work: what is built is switched on, run and stopped without leaving the canvas, and on the canvas one sees which node works (5.3). The bar holds:

These are the same shared objects of the program and the same commands as on the pulpit: the list of commands is one, and there is no second button with another meaning (Rules of development, 2.9). «Run» of an event of the pulpit gives the event what is typed on its node (5.5). A command that cannot be carried out now — a run of a program that is off, a stop with no run going, a retry when the last run of the event did not fail — is dimmed; pressed, it says the reason in words. The value of a variable of a program that is on is written in the field of its node on the canvas and in «Details» of its panel — so a variable a parameter takes and whose node is not on the canvas is written too; a variable pressed in the bar «Pulpit» opens there. A question of a run is answered on the node «Question», output is shown by «Show» nodes (5.5); on the pulpit all this stays. The window of the process keeps only the history of runs. While no process is chosen, there is no control bar.

A program is switched on as it is written. While the graph in the window is changed and not saved, the switch of the program does not switch it on and says that the graph is saved first: otherwise the written program would work while the window showed an unsaved graph as its graph — and it could no longer be edited: a program that is on does not change (section 1). The rule is one for all places where a program is switched on: the control bar and the pulpit. A program can always be switched off.

Steps. A program is built in one window — the graph window. In its top right corner stand three signs of steps: «Graph» — the working graph, «Graph of the interface» — a canvas of its own with reflections and graphic nodes (6.8), «View» — the sheet of the interface, where elements are laid out and dressed (6.3, 6.5). The sign of the step the person is on now is highlighted; pressed, the sign of another step changes what the window shows, in its place: the size, place and panel of the window stay. What is chosen goes from step to step: a graphic node is an element on the sheet, and back. Each step remembers its own zoom and shift. The graph is not shown beside the sheet: on the step «View» the graph is not needed, and when it is, one goes back to it by the sign. There is no separate pulpit window and no item «Pulpit» in the bar «Workshop». On the step «View» a program that is on shows real values on the sheet.

The tool bar holds the tools of the graph — «Selection», «Link», «Larger», «Smaller», «Whole graph» — and the search. The column of the window does not have these tools: an action has one place. The column keeps what is put on the canvas — kinds of nodes, installed modules, variables and processes — and the allowed links of the chosen node (5.2).

Modules in the column stand as the section «Modules» under the kinds of nodes: each installed module is a ready node by its name, in the order of the names. Pressed, a module is a tool that puts its node; carried onto the canvas, it is put where it was let go. The node stands at once with its module and is named by it (echo_1); there is no need to choose the module in the panel. There is no faceless kind «Module» in the column. While there are no modules, the section says so, and its row opens the window «Modules», where they are installed.

The search by name looks for a node on the canvas by its name — its own or the default one — and by its identifier; capital and small letters are alike. The search field is opened by the sign «Find» in the tool bar or the key Ctrl+F; it stands over the canvas beside the bars. What is found is highlighted, the rest is dimmed, and the field says how many are found, and after a choice — which of them is chosen («2 / 3»); Enter chooses the next node found and scrolls the canvas so that the node stands in the middle of what is not covered by the bars and the panel, Shift+Enter the previous one; after the last comes the first. The found ones go in the order the graph is read: from left to right, and in one column from top to bottom. Esc closes the search before it takes off the selection; pressing «Find» again closes it too. The search field takes no room over the work: the panel does not shift because of it. A node inside a folded built node is found by the built node: it is the one highlighted and chosen.

Highlighting is switched on and off by a press and is counted from what is chosen; «Linked» is on from the start. While a link is being drawn or a port is chosen, the highlighting of the bar steps back: the canvas highlights what fits them, and highlighting must not dim a fitting node.

What is highlighted stands out, the rest is dimmed: a highlighted link is thicker and brighter, a highlighted node has a second border — an outline outside its own, so that what is highlighted is seen even where there is nothing to dim. A chosen group counts as everything in it; a folded and an unfolded group is highlighted if at least one of its nodes is. While nothing is chosen, nothing is dimmed. The graph of a program that is on is highlighted and looked at in any scale, but not edited: «Link» and «Build into a node» are not available there.

5.5 Checking in the graph

What is built is checked where it is built: trying is part of building a working process, not something that follows it in another window. For this, everything a process is given data with and shows them with stands on the canvas (The program: graph and runs, section 24):

These nodes are part of the program: the graphic nodes of the interface are bound to them (6.8), and the finished program takes and shows data through them too.

The cause of a refusal is seen in the graph: under a failed node a short cause in words, on the tab «Details» of its panel — the details: the code, the words of the module, the run. Under the node — no more than two lines, whole with the code — in the hint; the words are those the refusal itself named, and for a refusal of a module without such words — what the module wrote: that is the cause; for a refusal of the platform — the words of its code. A folded built node tells the cause of the node inside. A step that failed and passed on retry shows no cause. Trying is by hand: data are given and the result looked at.

The course of a step of a module is seen on the node: while a step of a module goes in the run the window follows, a bar runs along the bottom of the node — the share of readiness the module sends with the notification progress (Modules, section 7); the hint of the bar names the share in percent. A module that sends no course gets no bar: the node is simply marked as working. A new step of the node starts the bar from the beginning, a finished step removes it. So a long step — loading a model, drawing a frame — does not look stuck.

What the graph can do right on the canvas:

5.6 The library

The library is the window of everything the person has: programs — built here and taken in — installed modules, neural networks and pieces of interface. Here a thing is made, taken in, handed out, deleted, and where it is seen is decided; it is built in the workshop. The library is the first item of the bar «Platform».

5.7 The assistant

The assistant is a window where the person gives a task in words, and a connected network builds a program or a module with the tools of the platform, checks and tries them, and says what it did (Methods of the platform services, section 6).

5.8 The door for programs

In the settings, in the section «Door for programs», besides the settings of the door themselves — whether it is open, the port, how many programs it lets in — stand its state, the key, hidden until «Show the key», «Copy» and «Make a new key» (Methods of the platform services, section 5). A new key turns out all programs that came in with the old one.

5.9 Room, Windows and files

5.10 The profile

Profile — a window in the bar «Platform»: the person's profile on ogas.space, their sendings and the board of requests (Methods of the platform services, section 7; what guards against what — Protection, section 8). Everything the person does on the site — a review, a request, «I'll do it», a bug report — goes from here and from the library, signed by the profile; the site has no accounts.

6 The pulpit

6.1 The purpose of the pulpit

The pulpit is a full graphical interface of a working process. The person builds the pulpit themselves, without writing code: takes into the interface what the program gives (6.4), shows it by elements on the graph of the interface (6.8), lays the elements out over sections and sheets (6.3) and gives them a look (6.5). It is built on the step «View» of the graph window, and used over the whole window — on the face of the program (6.6).

The constant properties of the pulpit:

There is no pulpit on another computer and there are not several pulpits of one process.

The structure of the pulpit is built with the graph of the interface (6.8).

6.2 The elements of the pulpit

The set of elements is closed and is extended by the platform. A module brings no elements of its own: an interface element of a module would mean outside code in the window, and hence a sandbox, versions and a foreign look.

The behaviour of an element is closed: what it shows, what it takes and what command it sends. The look of an element can be replaced (6.5): a look is pictures and numbers, not code, so the reason the set is closed does not concern the look.

An element is not a node. An element is attached to a shared object of a node, a process or a group and is combined with others: one module node may have fields for its parameters, a run button and a bar with the result.

Elements are of four families (table 2).

Table 2 — Families of pulpit elements

Family Purpose Elements of the first set Attached to
showing element shows a value or a state value, bar, indicator a variable; for an indicator — the state of the run of an event
input element the person sets a value field, number, switch, choice, question a variable; for a switch — also switching the program on; for a question — a question to the person
action element a press sends a command to the owner of the object button an event, its stop or retry; a container of the same pulpit — to open it or return its fields as they were
decoration shows and takes nothing: dresses the sheet label, frame, picture nothing

The family of an element and the kind of an object must fit each other: a showing element is not attached to a run, an action element not to a variable. The workshop shows an unfit combination before saving. An element whose object was removed from the graph or no longer fits it — say, the type of a variable was changed — does not disappear from the pulpit: it stays in its place and is marked.

An element is attached to one object or to several — as many as its description names:

A program with settings is built of the same elements; for it the elements have two things:

A second button with the same meaning is not allowed: a document where one section holds two elements of one kind with the same objects is refused by the function of the pulpit. One object in different sections or in elements of different kinds is allowed: a stop button on each section, a variable as a field in the settings and as a value on the main sheet. The rule does not concern decorations: a decoration has no object, and there are as many of them on the sheet as needed.

The set, with one default look, grows from a working minimum: an element is added when a built program lacks it. The list of elements belongs to the function canvas: the window shows it but adds no elements of its own. Each element is a finished part in its own folder (Rules of development, 2.10): a description, a dictionary and built-in looks. The make-up of the first set by kind, the names of bindings and parameters — File formats, section 7. Marking up a picture is given by a question with the answer «area», editing a shown text — by a question with an answer as a line whose field is filled with this text (The program: graph and runs, section 9); marking up sound and recording from a microphone are the work of modules. Choosing the neural network a node takes is the same «Choice», whose variants are the networks of one kind from the library, bound to the variable the node takes its network parameter from. There is no element of its own for a network: an element chooses a value the same way, wherever the variants come from.

6.3 Sections and the sheet

A pulpit consists of sections: «Main», «Settings» and any others the person made. Sections are the tabs of the pulpit. An element lies in one section.

A section has its own sheet — a field of a set width and height. The tabs of one window have one sheet: a size set on one tab is taken by all tabs of the window, and is no smaller than what stands on any of them needs. Elements are placed on the sheet freely: an element has a place and a size, the person puts it where they want; when dragging, it is drawn to the grid and to its neighbours. Elements may lie one over another — so a frame lies under buttons. The order of elements in the document is the order they are drawn in and the order of going round with the key Tab.

The sheet grows with the window. The size the sheet was drawn at is the least. A window smaller than that shows the sheet whole and smaller, with the same arrangement of elements; the sheet does not get smaller than a set limit — then the field scrolls. A window bigger than that is filled by the sheet whole, the underlay too, and there are no strips at the sides: elements do not change their size but hold on to an edge. Across, an element stands at the left, at the right, in the middle or stretches; down — at the top, at the bottom, in the middle or stretches: so it keeps its place against its edge, and a stretched one takes what the window adds. What the element does is set by the row «When the window is bigger» in its panel; without it — by its kind: a field, a table, a view and rows stretch across, a button keeps to its side of the sheet — the half it stands in —, and a table and a view with nothing under them on the page stretch down as well; the rest keeps to the top left corner. The frame of a group grows with what lies in it. The reason for the choice: screens are of different sizes, and a finished program is spread over the whole screen, and it matters to the person that an element stands where it was put — so the layout is not rebuilt but stretched by rules that are seen and set in the panel.

Checking sizes. On the step «View» the sheet is laid out at the size it was drawn. The signs in the bar over the sheet show it in a window of another size — «As drawn», «Narrow window», «Wide window», «Whole screen»: in such a window the sheet grows as on the face of the program, and nothing is laid out there; a window bigger than the work area is shown whole, smaller.

The pulpit works without laying out. An element put on the pulpit without a section goes into the section open on the step «View», and one put from the graph into the first section. The place and size are given by the function of the pulpit, not by the window. Laying out and dressing are done over a pulpit that already works and are not a condition of its work.

Laying out is always free. Each page — a tab of a window or a window without tabs — always has a sheet, and everything that lies on it at any depth stands on this sheet with its place and size; there is no button «give a sheet». The first place is where the page would put a thing itself (6.8): the function of the pulpit gives it when a thing is put without a place. What is put into a page where something already stands lies under what stands; on the step of the sheet.

Not placed. An element and a frame on the sheet have three states: on the sheet, not placed and deleted. An element that is not placed is in the graph of the interface with all its bindings and its look, but has no place on the sheet: it lies in the column of the step «View», in the part «Not placed», and from there it is laid on the sheet by a press — at its former place if that is still on the sheet, else where the page would lay it itself. «Take off the sheet» in the panel of the element and of the graphic node takes it off the sheet; a frame is taken off the same way — in the panel of its container on the graph of the interface, with all that lies in it. A new graphic node put on the graph of the interface is not placed at first: the function of the pulpit gives it no place by itself. On the face of the program what is not placed is not seen, but its bindings work: the variable is written, a container is shown and hidden by its own. An event button, an element of input and a question must be seen to be used: such an element that is not placed is marked in the column with a warning sign, which says a person cannot use it. «Delete the element» removes it from the program.

A group on the sheet is a frame around what lies in it: the frame is counted by the function of the pulpit — margins around and a head with the name on top, for a container of tabs the head is its switcher; the frame has no place and size of its own, except an empty group, which stands where it was put. So what lies in a group is always inside it: the frame grows after what is its own. What is put into a group lies under what stands in it, and what stands under the frame goes down by as much as the frame grew. The tabs of a container of tabs inside a page lie one above another in its frame; the open one is seen. The switcher in the head of a frame is one line: the names of the tabs are written in the letters of the sheet, like elements, and grow and shrink with the sheet; what does not fit is shortened with an ellipsis rather than lying over what the frame holds.

Elements are laid out on the step «View» (5.4): the sheet is always edited there, there is no switch «Arrange», and the pulpit is used on the face of the program (6.6):

The step helps the hand and is not a must: a place set by a number or with the key Alt is not moved to the step by the function of the pulpit. The order of elements does not change by hand on the sheet — it is changed in the panel, «Earlier» and «Later»: an element put later lies over.

The numbers of the sheet are settings of the function of the pulpit (Settings, section 8): the size of a new sheet, the step, the margin from the edge and the gap with which the function gives a place itself, and the limit of making the sheet smaller on the screen. The window gets the step, the margin and the limit from the function of the pulpit together with the surface and keeps no numbers of its own. The smallest size and the default size are named by the description of each element. A process may have numbers of its own — at the level of the settings of the process; they travel with it.

The format of the document — File formats, section 7.

6.4 Into the interface: reflections

What the program gives its interface is chosen by the person: a node as a whole — its event with its stop, repeat and state, a question, «Show», the course of a step, — an input, an output, a parameter, a variable, an assembled node — by its face. Only what is chosen goes: of a module with a heap of inputs and outputs the one thing needed goes into the interface. A thing taken whole — a node, the face of an assembled node — takes in the reflections of its rows taken one by one, and those the function of the pulpit made (6.8): a thing has one reflection, and so has a row.

The action stands in the panel of the chosen, on the tab «Edit», in the part «Into the interface»: at a node — a row for each thing that can be taken, at a variable — itself, at an assembled node — its face. «Into the interface» puts on the graph of the interface a reflection (6.8) — a node whose rows are these objects. A row names what is taken «In the interface» and says how many graphic nodes show it; it offers the kinds of elements to show or set it with — the one pressed puts such an element, bound to the reflection and not placed on the sheet (6.3), — and «Show in the interface». One can take from the side of the interface too: the column of the graph of the interface offers «What the program has», and there too — switching the program on, which no node has (6.8).

A reflection is not a node of the working graph. It is not part of the document of the graph, has no links, and a run knows nothing of it: it is a part of the document of the pulpit that names objects of the graph. The reasons:

«Into the interface» does with the graph what the person would do by hand (The program: graph and runs, section 16):

The variable and node made are an ordinary edit of the graph: it is seen on the canvas, taken back together with other edits and not available in a program that is on. A parameter already taken from a variable keeps its variable: a second one is not made.

On the working graph a node something of which is in the interface wears a sign on its head, before the sign of its kind, with a hint of how many reflections it has; a variable in the column is marked. «Show on the graph» in the panel of a reflection leads to the original, «Show in the interface» in the panel of a node — to the reflection. A removed reflection removes the bindings of graphic nodes to its rows; the node and the variables made for it stay in the graph until the person removes them.

The pulpit on the screen is checked against the graph on the screen, not against the written one: a variable made a minute ago is already an object for the pulpit. Both documents — the graph and the pulpit — are written each by its own window.

6.5 The look of an element and the theme of the pulpit

Graphics are one of the foundations of the pulpit: the pulpit must look like the interface of this program, not like a form of identical buttons. The behaviour of an element is set by the closed set (6.2), the look can be replaced. There are three layers of graphics:

1) the theme of the pulpit — the palette, the font and the roundings of one pulpit; kept in the document of the pulpit; 2) underlay and decorations — a colour or a picture under the sheet of a section, and decoration elements: labels, frames, pictures; 3) the look of an element — how the element itself is drawn. Each element of the set has built-in looks. The person puts a look of their own together from pictures for the states of the element — «not pressed», «pressed», «not available», positions of a pointer, divisions of a bar — and numbers for them.

A look is data, not code: a description file and pictures beside it. The pictures are made in any graphics editor; the platform holds no editor of its own for them. The pictures of the pulpit and its own looks lie in the process folder and travel with it (The program: graph and runs, section 1; File formats, 7.2).

The look of the set is one by default: a pulpit without a theme and own looks is drawn with the built-in looks. The look of the pulpit does not mix with the tokens ui.* of the workshop (section 7): nothing on the sheet is drawn in the colours of the workshop, and the pulpit looks the same in a light and in a dark workshop and on the face of the program. Only the tools of laying out — selection, handles, the line of drawing to — are drawn in the colours of the workshop.

The theme is nine keys: the background of the pulpit, the colour of elements, the colour of letters, the colour of action, the colour of done, the colour of stopping, the font, the height of letters and the rounding of corners. The colour of action — an event button, the fill of a bar, a switch that is on; the colour of done — the indicator of a run that went through and the retry button; the colour of stopping — the stop button, a failure and the mark of an element that does not work. The colour of letters over a fill the window chooses itself — the letters or the background, whichever reads better; outlines and fields come from the colour of letters and the colour of elements. The font is chosen of four: the font of the platform, a Windows font, serif, monospaced. The height of letters and the rounding are counted in units of the sheet and change with it.

A key of the theme the pulpit did not set is taken from the settings: the section «Default look of the pulpit» (Settings, section 8). So the person has one look for all their pulpits and one of its own for a pulpit they gave it to. The list of keys and what each takes is the same settings schema of the function of the pulpit: there is no second description.

The look is set on the step «View»: the sign «Look» in the bar over the sheet opens the panel of the pulpit itself — the theme and the pictures. A colour is chosen in the colour picker of the system, as in the part «Own look»; a key the pulpit did not set shows in its row, in grey, what the settings give, and the sign «Return» lets the key go back to the settings.

The underlay of a section — the colour of the sheet, a picture under the sheet, or both, the picture over the colour; it is set in the panel of the section, the colour in the colour picker of the system, like a colour of the theme. The underlay picture is stretched over the whole sheet, and over a sheet grown with the window too.

Decorations are put from the column of the step «View», from the list «Decorations»:

A decoration is carried, pulled and removed like any element; it has no label and no other look.

The pictures of the pulpit lie in the process folder and go with it when it is handed over (File formats, 7.2 and 10.1). A picture is added in the panel «Look»: a button opens the Windows file picker, and the page gives the function of the pulpit the file itself, not the path to it. PNG, JPEG, GIF, WebP and SVG no larger than set in the settings are taken; the file is checked by its name and its content, and is shown only as an image — nothing of it is run. A picture named by an underlay or an element is not removed from the folder until it is taken off the sheet. An element and a section whose picture is not in the folder stay in place and are marked.

The visual editor of a look: the look of an element is made in its panel, in the part «Own look». «Draw an own look» begins a look from the theme of the pulpit, «Change the look» — from the own look the element is already drawn with. In the rows — the state of the element being made, and its colours (ground, edge, words: chosen in the colour picker of the system; a state other than the first takes what it lacks from the first), the rounding and the width of the edge, a pattern — stripes, checks or dots — with a colour and a step, the font and the height of letters, for a bar the fill colour, and the name of the look. What is made is seen on the sheet at once, while not saved; «Save the look» gives the look to the function of the pulpit as an own look of the process (ogas.look/1 with paint, File formats, 7.2), and the element is drawn with it, «Cancel» drops it. Other elements of the same kind get a saved look in the row «Look»; it goes with the program, like any own look. The editor writes the files of a look; it does not change the format of the pulpit.

A look of an element made of pictures. A look is a folder: the description look.json and the pictures it names (File formats, 7.2). The description says:

A look changes only how an element is drawn: what it shows, takes and sends stays the business of the set. The pictures of a look lie under the element and take no presses.

A look is chosen for an element in its panel, in the row «Look»: «The look of the set» or one of the looks made for this kind of element. There are six built-in looks: «Key» for a button, «Lever» for a switch, «Lamp» for an indicator, «Tube» and «Dial» for a bar, «Plate» for a frame; the theme of the pulpit does not act on them — a look has its own colours. An own look is added in the panel «Look», in the part «Own looks»: a button opens a Windows window to choose the folder of the look, and the function of the pulpit takes the folder whole or refuses and says what is wrong in it. An own look lies in the process folder and goes with it; under the name of a built-in look it takes its place. A look an element is drawn with is not removed until the element is given another.

An element that names a look that is not there, a look of another element or a look made with an error works as usual: it is drawn with the look of the set, and while laying out it is marked with a sign with the cause.

A look of pictures is described by the file look.json in the folder of the look, a look of colours and numbers is made in the panel of the element, in the part «Own look» (above).

6.6 The face of a program

The face of a program is the pulpit of a working process over the whole window of the platform, without the frame of the workshop: the sections of the pulpit as tabs, the sheet of the open section and a button to go to the workshop. The window on the face of a program is the size of the built interface: the sheet at scale 1 and what is around it — the strip on top, the tabs, the margins; a sheet larger than the screen shrinks as a whole, and the window with it, so there are no empty strips at the sides. A window that was stretched or spread over the whole screen is filled by the sheet whole (6.3). The window asks for this size when the face of the program is shown or its sheet has changed; a size the person then gave the window by hand stays. On going to the workshop the window takes its former place and size. So a ready program is used without opening the workshop. The window and the instance are the same: the face of a program is the second thing the window of the platform shows, not a separate program.

How the kernel passes the name of the program to a starting and to a working instance — The make-up of the platform, 3.6.3 and 5.3; the methods of the function ui — Methods of the workshop and the pulpit, section 2.

6.7 The set of the pulpit

What the pulpit has:

6.8 The graph of the interface

The interface of a program is built in two steps after the working graph: first the graph of the interface — what the program gives its interface and what shows it: reflections of what is needed, graphic nodes and the structure of them — windows, tabs, groups, subgroups — then place and look.

The graph of the interface is a separate graph on a canvas of its own. It is not part of the working graph but refers to it: a run knows nothing of it, inserting and calling a process do not work with it. The working graph is tied to it by reflections only: what the person took into the interface (6.4) stands on the graph of the interface as a node of its own.

The nodes of the graph of the interface are of three families:

A window here is a screen inside one window of the program, not a separate Windows window: the platform has one window. The first window is the window of the program itself: it has no frame on the graph, and what lies in it stands on the canvas by itself. A window is drawn as a frame only when the person has made a second one.

The links of the graph of the interface are of four sorts:

A binding is written in the element and in the container, as in the pulpit: the name of the binding and the object_id of the shared object (The program: graph and runs, section 16); reflections are written in the document of the pulpit beside the elements (File formats, section 7). An object an element is bound to and no reflection holds is reflected by the function of the pulpit itself — so a pulpit built earlier or by the assistant is seen at once with its links. An element has as many bindings as objects it names.

An empty element is a graphic node without a kind: first it is bound, then it is chosen what element it is to be. It stands first in the column of the graph of the interface, and it is also pulled out by a link from a row of a reflection into an empty place of the canvas: there it stands already bound. Bound, it offers «What to be» in its panel: only the kinds possible for that object and kind of data, the fitting one first — at an output of text «Value» and «View», at an event «Button», at an input without links also the elements of input of its type: such an element gets a variable with its node, whose cold link gives the input, and the row of the reflection becomes this variable. While no kind is chosen it is written with the mark «kind not chosen», does not lie on the sheet and is not seen on the face. The same list for a finished element is «Change the kind»: bindings, place and size stay where the new kind takes them. If the link of an element was let go on a row its kind does not take, the panel offers «What to be here»; an element of input is not put on an input other links come to — it would fight the graph, and the workshop says so. Containers are not concerned: a window, a tab and a group are chosen by structure.

Elements are the set of the pulpit. Each element of the set with its bindings is a graphic node: button, switch, field, number, choice, question, value, bar, indicator; a view that shows the same as the node «Show» — text, picture, gallery, player; choosing a file into a variable; a table — a list of records, for example a list of chats or a feed of letters, as rows and columns: a click on a row writes its key into a variable and may press an event, the table shows only the records whose field equals the value of a variable — the feed of the open chat — and orders the rows by a field; rows — a list the person edits by rows. A field may have several lines and write as it is typed; a question is answered in the form the question node sets — with a picture and with an area on a picture too (File formats, section 7; The program: graph and runs, section 9). A label and a picture are decorations. There is no frame in the set: gathering elements together is the business of a group.

A link of the graph of the interface is not a link of the working graph: it carries no packets of a run and is drawn in its own way.

The fork stays in the working graph. When one press starts several parts of one matter, several links leave the event, and the branches go at the same time (The program: graph and runs, 10.2 and 12.2): so it works from a button, a timer, a message and a call. The interface has no branching of its own (6.2). A common switch is another matter: one button that presses several events, each with its own run, its own stop and its own state. There is no logic in it — it is several presses at once — so such a binding is allowed in the graph of the interface.

Where it is built. The graph of the interface is a true node canvas, of its own: the working graph is not on it, and the lines of the interface do not go across working links. It has no window of its own:

A piece of interface is a container with everything in it, kept in the library to be put into another program:

Three steps and the border between them:

1) the working graph — the process is built, works and is checked right in the graph (5.5); 2) the graph of the interface — what there is in the interface, what it lies in and what it is bound to; 3) the interface itself — where it stands and how it looks: place, size, theme, looks of elements (6.3, 6.5) — on the step «View».

A program has a look already after the graph of the interface: a thing put without a place gets one where the page would put it itself, and laying out moves this place (there is no page without a sheet — 6.3). The page puts first its elements, then groups and containers with tabs, one under another; an element at the default height of its kind, and what is read and typed in — field, view, table, rows, question, choice, number, bar — stretched over the width of the page; a question and rows grow by what they hold; buttons standing one after another — in a row, wrapping to the next line, as actions over one thing; a group — as a frame with a name; a container with tabs — as a switcher over the open one. A question of the program that waits for the person is outlined, and a tab not open in which it lies at any depth is marked: a question that opened out of sight is not missed; the page itself does not jump to it — a jump under the hand is worse. Places are given on the step of the sheet, and a group is a frame around what is its own (6.3). A place lives with the element and is not lost when the rest of the structure changes; an element moved into another container gets a place in it anew — under what stands there.

Where the graph of the interface lives: where the rules of the platform put it — in the document of the pulpit workspace.json of the process, ogas.workspace/3; the owner is the function canvas. The interface of a program has one owner and one document, and no second file is made for the same thing (Rules of development, 2.4); a new thing takes a ready place — the document and the function that already hold the interface of the program (2.5 there); everything that belongs to a process lies in its folder (The program: graph and runs, section 1). The working graph (process.json, the owner is the function of the graph) the graph of the interface only names — by shared objects, like the pulpit. The make-up of the document — File formats, section 7.

7 The look of the shell

The colours, the font, the sizes of letters, the roundings, the margins, the outlines and the sizes of the areas of the workshop itself (the bars and capsule tabs, the host, the column on the left, the work area and the panel of the chosen of windows, the graph and the pulpit) are set by the settings of the group ui.* (Settings, section 8). A value from a closed set (language, scheme, font source) is chosen from a list on the tab «Edit» of the panel of the chosen: the set grows without changing the look of the row.

One look of the shell. The look is set by the tokens ui.* (lib/look.js → CSS variables), the common classes of style.css, the faces of capsules faces.js and the signs lib/glyphs.js. The frame (shell.js, windows.js) and the windows on the host (host/*) draw from the same tokens, classes, faces and signs (rule 2.9 of Rules of development).

This is the look of the workshop itself, not of the person's pulpit. The look of the pulpit does not mix with the tokens ui.*.

7.1 The language of the interface

The workshop uses everyday language (rule 3.4 of Rules of development). Below is how the rule applies to the words of the workshop.

8 The division of drawing the interface

The functions do not describe to the workshop how to draw the interface. The workshop draws its windows itself, and the functions give it data with their requests: process.open and process.snapshot — the graph and a run, canvas.get and canvas.snapshot — the pulpit, settings.schema — the settings, module.list — modules, observe.* — the journal and problems.

The grounds:

Kept at the same time: