Invocation: consider how to establish a stable cache key

Building a precise Frame Cache is a tough job, and is doomed to fail
when attempting to tie cache invalidation to state changes. The only
viable path is to create a system of systematic tagging of processing
steps, and use this as foundation for chained hash values, linked
in accordance to the actual processing structure.

This is complicated by the secondary concern of maintaining memory efficacy
for the render node model, which can be expected to grow to massive scale.
And even while this invocation can not be fully devised right now,
an attempt can be made to build a foundation that is not outright
wasteful, by detaching the logical information from the specific
weaving pattern used for implementation, and by minimising the
representation in memory and computing the compound information
on-demand....
This commit is contained in:
Fischlurch 2024-11-02 23:54:41 +01:00
parent 96d30cb5e7
commit f8642b3459
9 changed files with 243 additions and 81 deletions

View file

@ -0,0 +1,62 @@
/*
PROC-ID.hpp - symbolic and hash identification of processing steps
Copyright (C) Lumiera.org
2024, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file proc-id.hpp
** Metadata interface to generate symbolic and hash ID tags for media processing steps.
** Functionality is provided to identify a point in the processing chain for sake of
** error reporting and unit testing; moreover, identifying information can be chained
** and combined into a systematic hash key, to serve as foundation for a stable cache key.
** @todo WIP-WIP as of 10/2024 this is a draft created as an aside while working towards
** the first integration of render engine functionality //////////////////////////////////////////////TICKET #1377 : establish a systematic processing identification
** @remark the essential requirement for a systematic and stable cache key is
** - to be be re-generated directly from the render node network
** - to be differing if and only if the underlying processing structure changes
**
** @see turnout.hpp
** @see engine::ProcNodeDiagnostic
*/
#ifndef ENGINE_PROC_ID_H
#define ENGINE_PROC_ID_H
#include "lib/error.hpp"
#include "lib/hash-value.h"
//#include "steam/streamtype.hpp"
namespace steam {
namespace engine {
namespace err = lumiera::error;
using lib::HashVal;
class ProcID
{
public:
/** build and register a processing ID descriptor */
static ProcID& describe();
};
}} // namespace steam::engine
#endif /*ENGINE_PROC_ID_H*/

View file

@ -28,6 +28,7 @@
*/
#include "steam/engine/proc-id.hpp"
#include "steam/engine/proc-node.hpp"
namespace steam {
@ -45,7 +46,37 @@ namespace engine {
Port::~Port() { } ///< @remark VTables for the Port-Turnout hierarchy emitted from \ref proc-node.cpp
ProcID&
ProcID::describe()
{
UNIMPLEMENTED ("establish and possibly enrol new processing descriptor");
}
/** @internal */
string
ProcNodeDiagnostic::getNodeSpec()
{
UNIMPLEMENTED ("generate a descriptive Spec of this ProcNode for diagnostics");
}
HashVal
ProcNodeDiagnostic::getNodeHash() ///< @todo not clear yet if this has to include predecessor info
{
UNIMPLEMENTED ("calculate an unique hash-key to designate this node");
}
string
ProcNodeDiagnostic::getPortSpec (uint portIdx)
{
UNIMPLEMENTED ("generate a descriptive diagnostic Spec for the designated Turnout");
}
HashVal
ProcNodeDiagnostic::getPortHash (uint portIdx)
{
UNIMPLEMENTED ("calculate an unique, stable and reproducible hash-key to identify the Turnout");
}
}} // namespace steam::engine

View file

@ -74,6 +74,7 @@ namespace engine {
using util::_Fmt;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
class ProcID;
class ProcNode;
class ProcNodeDiagnostic;
@ -88,12 +89,14 @@ namespace engine {
{
public:
virtual ~Port(); ///< this is an interface
Port (ProcID& id) : procID{id} { }
virtual BuffHandle weave (TurnoutSystem&, OptionalBuff =std::nullopt) =0;
// // compiler does not generate a move-ctor automatically due to explicit dtor
// Port() = default;
// Port(Port&&) = default;
ProcID& procID;
};
using PortRef = std::reference_wrapper<Port>;
@ -243,29 +246,11 @@ namespace engine {
///////////////////////////////////////////////////TODO 10/2024 more to verify here
}
string
getNodeSpec()
{
UNIMPLEMENTED ("generate a descriptive Spec of this ProcNode for diagnostics");
}
string getNodeSpec(); ///< generate a descriptive Spec of this ProcNode for diagnostics
HashVal getNodeHash(); ///< calculate an unique hash-key to designate this node
HashVal
getNodeHash() ///< @todo not clear yet if this has to include predecessor info
{
UNIMPLEMENTED ("calculate an unique hash-key to designate this node");
}
string
getPortSpec (uint portIdx)
{
UNIMPLEMENTED ("generate a descriptive diagnostic Spec for the designated Turnout");
}
HashVal
getPortHash (uint portIdx)
{
UNIMPLEMENTED ("calculate an unique, stable and reproducible hash-key to identify the Turnout");
}
string getPortSpec (uint portIdx); ///< generate a descriptive diagnostic Spec for the designated Turnout
HashVal getPortHash (uint portIdx); ///< calculate an unique, stable and reproducible hash-key to identify the Turnout
};
inline ProcNodeDiagnostic

View file

@ -383,9 +383,13 @@ namespace engine {
// , util::MoveOnly
{
using Feed = typename PAT::Feed;
using PAT::PAT;
public:
template<typename...INIT>
Turnout (ProcID& id, INIT&& ...init)
: Port{id}
, PAT{forward<INIT> (init)...}
{ }
// Turnout(Turnout&& rr) ////////////////////////////////////////////OOO investigation of MoveOnly and problems with the builder logic
// : Port(static_cast<Port&&>(rr))
// , PAT(static_cast<PAT&&>(rr))

View file

@ -105,6 +105,7 @@
//#include "steam/engine/channel-descriptor.hpp"
//#include "vault/gear/job.h"
#include "lib/several-builder.hpp"
#include "steam/engine/proc-id.hpp"
#include "steam/engine/turnout.hpp"
#include "steam/engine/engine-ctx.hpp"
#include "steam/engine/buffer-provider.hpp"
@ -478,7 +479,8 @@ namespace engine {
]
(PortDataBuilder& portData) mutable -> void
{
portData.template emplace<TurnoutWeaving> (move(leads)
portData.template emplace<TurnoutWeaving> (ProcID::describe()
,move(leads)
,move(types)
,resultIdx
,move(procFun)

View file

@ -73,7 +73,7 @@ namespace test {
{
auto con = prepareNode()
.preparePort()
.invoke(TEST_DUMMY, dummyOp)
.invoke(DUMMY_FUN_ID, dummyOp)
.completePort()
.build();
CHECK (isnil (con.leads));
@ -84,6 +84,7 @@ namespace test {
CHECK (watch(n1).isValid());
CHECK (watch(n1).leads().empty());
CHECK (watch(n1).ports().size() == 1);
SHOW_EXPR(watch(n1).getPortSpec(0))
}

View file

@ -42,7 +42,7 @@ namespace test {
} // (End) hidden impl details
Literal TEST_DUMMY{"Test-Dummy"};
Literal DUMMY_FUN_ID{"DummyFun"};

View file

@ -46,7 +46,7 @@ namespace test {
using NoArg = std::array<char*, 0>;
using SoloArg = std::array<char*, 1>;
extern Literal TEST_DUMMY;
extern Literal DUMMY_FUN_ID;
/** @todo a placeholder operation to wire a prototypical render node
*/

View file

@ -13473,9 +13473,7 @@
</node>
<node CREATED="1519439893089" ID="ID_350245814" MODIFIED="1519440011427" TEXT="nicht wenn alle Pattern gleich lang sind">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
es ist nicht klar, ob die pattern bereits das fragliche View-Element mit einschlie&#223;en,
@ -14095,9 +14093,7 @@
<node CREATED="1517971070856" ID="ID_1569393703" MODIFIED="1518487921070" TEXT="sauber aus Sicht der Code-Organisation"/>
<node CREATED="1517971082198" ID="ID_821482262" MODIFIED="1518487921070" TEXT="aber semantisch irref&#xfc;hrend">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Komma hei&#223;t &quot;and then&quot; in der Logikprogrammierung
@ -15741,9 +15737,7 @@
</node>
<node CREATED="1515632050143" ID="ID_1858706501" MODIFIED="1518487921074">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Alternative: wrap UI-Coord,
@ -18247,9 +18241,7 @@
<node CREATED="1654449716467" ID="ID_1816176358" MODIFIED="1654449724831" TEXT="aber mit Compile-Time safety"/>
<node COLOR="#435e98" CREATED="1661640883263" ID="ID_606322224" MODIFIED="1661721271303" TEXT="ist das m&#xf6;glich?">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
<i>Ja,</i>&#160;und zwar sogar ziemlich <i>einfach und lesbar...</i>&#160;
@ -22463,9 +22455,7 @@
</node>
<node CREATED="1582833227086" ID="ID_895188425" MODIFIED="1582833268779" TEXT="man kann das Problem im Moment &quot;umschiffen&quot;">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...und ich glaube, das ganze Konstrukt wird nicht wesentlich &quot;tiefer&quot; werden
@ -47799,9 +47789,7 @@
</node>
<node CREATED="1455927276314" HGAP="91" ID="ID_1209647803" MODIFIED="1525124215074" VSHIFT="-3">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Primitive
@ -48332,9 +48320,7 @@
<node CREATED="1456187330641" ID="ID_1069743778" MODIFIED="1456187335684" TEXT="zwei Slots pro Attribut"/>
<node CREATED="1456416534525" ID="ID_1195638113" MODIFIED="1575133328373" TEXT="+Storage f&#xfc;r den Key">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
....denn der liegt (mind) einmal vor,
@ -48636,9 +48622,7 @@
<node CREATED="1456428774171" ID="ID_745180197" MODIFIED="1456428896734" TEXT="Puffergr&#xf6;&#xdf;e initial festlegen"/>
<node CREATED="1456429302212" ID="ID_377071784" MODIFIED="1456429313666">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
rekursiv,
@ -49007,9 +48991,7 @@
<node CREATED="1448659059734" ID="ID_1682547207" MODIFIED="1518487921087" TEXT="im GUI-Kontext"/>
<node CREATED="1448659079044" ID="ID_508900352" MODIFIED="1576282358008" TEXT="mu&#xdf; Session referenzieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...was andernfalles komplett vermeidbar w&#228;re,
@ -49302,9 +49284,7 @@
<node CREATED="1618496287798" ID="ID_36219632" MODIFIED="1618496306375" TEXT="Maus + Tastatur wird sehr gut im UI-Toolkit unterst&#xfc;tzt">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618496307555" ID="ID_21337541" MODIFIED="1618496363210" TEXT="das ist tats&#xe4;chlich ein Architektur-Problem">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<ul>
<li>
@ -78289,8 +78269,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1714777926334" ID="ID_579939758" MODIFIED="1714777939981" TEXT="Thema: Zuordnung zu einem Proze&#xdf;">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1714778001228" ID="ID_1999491710" MODIFIED="1729985050623" TEXT="wir brauchen einen Cache-Key">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1714778001228" ID="ID_1999491710" MODIFIED="1730598037898" TEXT="wir brauchen einen Cache-Key">
<arrowlink COLOR="#79214c" DESTINATION="ID_968805110" ENDARROW="Default" ENDINCLINATION="271;-5;" ID="Arrow_ID_617691253" STARTARROW="None" STARTINCLINATION="-191;250;"/>
<arrowlink COLOR="#ff461d" DESTINATION="ID_518441567" ENDARROW="Default" ENDINCLINATION="475;-655;" ID="Arrow_ID_743151366" STARTARROW="None" STARTINCLINATION="197;254;"/>
<linktarget COLOR="#5c536b" DESTINATION="ID_1999491710" ENDARROW="Default" ENDINCLINATION="-1732;155;" ID="Arrow_ID_1638495806" SOURCE="ID_631143493" STARTARROW="None" STARTINCLINATION="944;56;"/>
<linktarget COLOR="#553750" DESTINATION="ID_1999491710" ENDARROW="Default" ENDINCLINATION="-708;70;" ID="Arrow_ID_338052928" SOURCE="ID_701755621" STARTARROW="None" STARTINCLINATION="842;41;"/>
<icon BUILTIN="yes"/>
<node CREATED="1714778021562" ID="ID_540563860" MODIFIED="1714778064872" TEXT="dieser ergibt sich systematisch aus den 3 Freiheitsgraden"/>
<node CREATED="1714778069039" ID="ID_532019059" MODIFIED="1714778139405" TEXT="er mu&#xdf; zuverl&#xe4;ssig die Reproduzierbarkeit garantieren"/>
@ -81701,6 +81684,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1720232411174" ID="ID_932971685" MODIFIED="1720232418617" TEXT="und diese Zusammenfassung ist optional"/>
<node CREATED="1720232419349" ID="ID_767823563" MODIFIED="1720232429064" TEXT="sie liegt beim Implementator des Domain-Adapters"/>
</node>
<node CREATED="1730596836408" ID="ID_701755621" MODIFIED="1730597762591" TEXT="bildet die Grundlage f&#xfc;r eine &#xbb;processing identification&#xab;">
<arrowlink COLOR="#484589" DESTINATION="ID_1288148978" ENDARROW="Default" ENDINCLINATION="-451;-260;" ID="Arrow_ID_79666749" STARTARROW="None" STARTINCLINATION="-1086;55;"/>
<arrowlink COLOR="#553750" DESTINATION="ID_1999491710" ENDARROW="Default" ENDINCLINATION="-708;70;" ID="Arrow_ID_338052928" STARTARROW="None" STARTINCLINATION="842;41;"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720045073507" ID="ID_1770114651" MODIFIED="1720045126936" TEXT="Analyse: Rolle der Domain-Ontologie in diesem Build-Proze&#xdf;">
<icon BUILTIN="info"/>
@ -91138,7 +91126,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#4e40b0" DESTINATION="ID_1347337581" ENDARROW="Default" ENDINCLINATION="-14;74;" ID="Arrow_ID_507591051" STARTARROW="None" STARTINCLINATION="-4;-31;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728769319538" ID="ID_1257287659" MODIFIED="1728769363223" TEXT="eine reproduzierbare symbolische Aufruf-Spec erheben">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728769319538" ID="ID_1257287659" MODIFIED="1730563164682" TEXT="eine reproduzierbare symbolische Aufruf-Spec erheben">
<arrowlink COLOR="#47347f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" STARTARROW="None" STARTINCLINATION="-284;14;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
@ -91578,8 +91567,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
weder m&#252;ssen wir nach derzeitigem Stand den Node-Datensatz anhand einer ID wiederfinden k&#246;nnen, noch m&#252;ssen wir von einer Node auf ihren Definitions-Kontext zur&#252;ckschlie&#223;en. Denn Nodes sind eine reine executiv-Repr&#228;sentation; sie werden durch Interpretation semantischer Attributierungen einmal erstellt, dann aber nur noch ausgef&#252;hrt, und bei jeder &#196;nderung verworfen und neu konstruiert
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1730497384901" ID="ID_1576828702" MODIFIED="1730497393100" TEXT="wirklich nicht?">
<font NAME="SansSerif" SIZE="10"/>
@ -91606,7 +91594,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1730486648779" ID="ID_518441567" MODIFIED="1730488192170" TEXT="gebraucht wird: ein stabiler und reproduzierbarer Cache-Key">
<node CREATED="1730486648779" ID="ID_518441567" MODIFIED="1730598037898" TEXT="gebraucht wird: ein stabiler und reproduzierbarer Cache-Key">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -91615,6 +91603,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<linktarget COLOR="#ff461d" DESTINATION="ID_518441567" ENDARROW="Default" ENDINCLINATION="475;-655;" ID="Arrow_ID_743151366" SOURCE="ID_1999491710" STARTARROW="None" STARTINCLINATION="197;254;"/>
</node>
<node CREATED="1730497062384" ID="ID_1375039507" MODIFIED="1730497334994" TEXT="gebraucht wird: eine stabile und lesbare Notation f&#xfc;r Test und Diagnose">
<richcontent TYPE="NOTE"><html>
@ -91637,8 +91626,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Nun ist die Frage: <i>will man in einer solchen Situation mehr leisten als &#187;Fehler in Render-Engine&#171;?</i>&#160;Denn dann m&#252;&#223;te Information &#252;ber den direkten Invocation-Kontext mit aufgegriffen werden; und um diese Information &#252;berhaupt nutzen zu k&#246;nnen, bed&#252;rfte es dann einer R&#252;ck&#252;bersetzung in Entit&#228;ten und Koordinaten des high-level-Models, um sinnvoll auf die Ursache schlie&#223;en zu k&#246;nnen. Alle mir bekannte Medien-Sofware leistet nicht diesen Grad der Fehlerdiagnose, vielmehr steht in einem solchen Fall der Benutzer allein da, und kann bestenfalls durch schrittweises Herantasten erraten, was das Problem verursacht hat. Insofern k&#246;nnte man sich auf den Standpunkt stellen, da&#223; Lumiera in dieser Hinsicht keine Probleme zu l&#246;sen hat, mit denen man in der Praxis auch anderweitig irgendwie &#252;berlebt...
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<edge COLOR="#ff5d00" STYLE="sharp_linear"/>
<arrowlink COLOR="#fe512a" DESTINATION="ID_190416286" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_304105897" STARTARROW="None" STARTINCLINATION="-848;70;"/>
<icon BUILTIN="bell"/>
@ -91662,8 +91650,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
ohne Differenzierungen auf der Implementierungs-Ebene durch die Ports
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
@ -91695,8 +91682,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
hier ist zu markieren, falls der Builder oder die Domain-Ontology konkret einen Entscheidungsspielraum in einem Fall so und in einem anderen Fall so nutzt, also z.B. eine spezielle Parametrisierung des Algorithmus, die vom Default abweicht. Wenn dagegen der Algorithmus selber sich inkompatibel ge&#228;ndert hat, so wird das bereits n der ID des Proc-Asset durch ein Postfix .v# markiert
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1730489531517" ID="ID_79138326" MODIFIED="1730489559877" TEXT="zwei Argumentlisten">
<node CREATED="1730489570559" ID="ID_754446693" MODIFIED="1730489575443" TEXT="Liste der Inputs"/>
@ -91711,8 +91697,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
denn in den allermeisten F&#228;llen d&#252;rfte es entweder ein Feed sein, oder N gleiche Feeds
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node CREATED="1730508308461" ID="ID_1597023280" MODIFIED="1730508446212" TEXT="diese Informationen werden von Level-3 durchgereicht">
@ -91753,8 +91738,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
zwar k&#246;nnte man bereits im Builder festlegen, da&#223; eine solche Komponente dazukommt; jedoch ist erst zum Zeitpunkt der konkreten Invocation klar, welche dynamischen Parameterwerte sich ergeben und noch in die Medien-Berechnung einflie&#223;en
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730508735166" ID="ID_1955634373" MODIFIED="1730509071058" TEXT="generell: auf ein Getter-API setzen">
@ -91768,14 +91752,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...will sagen, diese Funktionen interpretieren dann zwar noch die Connectivity-Information, verwenden aber f&#252;r alle tats&#228;chlich zu inkorporierenden Texte eine externe Symbol-Tabelle, allein schon zur Deduplikation. Das bedeutet aber im Umkehrschlu&#223;: hier haben wir doch einen &#187;R&#252;ckw&#228;rts-Zugriff&#171; (auch wenn er funktional realisiert werden kann, indem eine Node-ID reproduzierbar aus der Connectivity errechnet wird)
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#c7dcf5" DESTINATION="ID_423678075" ENDARROW="Default" ENDINCLINATION="461;-17;" ID="Arrow_ID_268382631" SOURCE="ID_519915836" STARTARROW="None" STARTINCLINATION="409;26;"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1730510962225" ID="ID_786613770" MODIFIED="1730510979532" TEXT="API f&#xfc;r Metadaten-Zugriff">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1730510962225" ID="ID_786613770" MODIFIED="1730563164682" TEXT="Metadaten-Zugriff / API">
<linktarget COLOR="#47347f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" SOURCE="ID_1257287659" STARTARROW="None" STARTINCLINATION="-284;14;"/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1730510982342" ID="ID_310976542" MODIFIED="1730510998830" TEXT="Struktur/Modell">
<icon BUILTIN="info"/>
@ -91798,12 +91782,79 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1730511246071" ID="ID_28190802" MODIFIED="1730511261741" TEXT="ProcNode - API wird dadurch immer gehaltloser">
<icon BUILTIN="smily_bad"/>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1730511277272" ID="ID_602420607" MODIFIED="1730511309290" TEXT="zun&#xe4;chst der defensive Ansatz">
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1730511277272" ID="ID_602420607" MODIFIED="1730561137161" TEXT="zun&#xe4;chst der defensive Ansatz">
<arrowlink COLOR="#745a59" DESTINATION="ID_803822756" ENDARROW="Default" ENDINCLINATION="141;7;" ID="Arrow_ID_823851308" STARTARROW="None" STARTINCLINATION="-19;44;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node CREATED="1730561080309" ID="ID_803822756" MODIFIED="1730561137161" TEXT="Anfangsverdacht: au&#xdf;er f&#xfc;r Tests brauchen wir gar kein API">
<linktarget COLOR="#745a59" DESTINATION="ID_803822756" ENDARROW="Default" ENDINCLINATION="141;7;" ID="Arrow_ID_823851308" SOURCE="ID_602420607" STARTARROW="None" STARTINCLINATION="-19;44;"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1730598062942" ID="ID_1946552232" MODIFIED="1730598070217" TEXT="Ansatz f&#xfc;r Implementierung schaffen">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1730598076819" ID="ID_1393056894" LINK="https://issues.lumiera.org/ticket/1376" MODIFIED="1730598144757" TEXT="Optimierung sp&#xe4;ter &#xd83e;&#xdc32; #1376 maintain render node storage size">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1730598151854" ID="ID_881304917" MODIFIED="1730598657828" TEXT="aber ich kann mich einfach nicht &#xfc;berwinden, jetzt nur &#xbb;offensichtlichen Mist&#xab; zu coden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ich bohre jetzt schon mehr als einen Tag an dieser Stelle herum &#8212; was mir zeigt, da&#223; ich <i>den Hebel f&#252;r so bedrohlich halte,</i>&#160;da&#223; ich micht nicht &#252;berwinden kann, eine &#8222;dumme&#8220; Implementierung schnell reinzuklopfen
</p>
</body>
</html></richcontent>
<icon BUILTIN="smiley-oh"/>
</node>
<node CREATED="1730598198960" ID="ID_1268799308" MODIFIED="1730598217841" TEXT="&#x27f9; halbwegs sinnvolle Aufrufstruktur">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730598219853" ID="ID_241387326" MODIFIED="1730598252076" TEXT="ProcID &#x2259; separater Metadaten-Record">
<icon BUILTIN="idea"/>
<node CREATED="1730598396950" ID="ID_1069190015" MODIFIED="1730598409561" TEXT="soll nur die semantisch relevanten Infos enthalten"/>
<node CREATED="1730598414787" ID="ID_423504615" MODIFIED="1730598421854" TEXT="und zwar aufgebrochen in einzelne Felder"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730598425648" ID="ID_1880777702" MODIFIED="1730598433445" TEXT="jedwede Connectivity wird errechnet">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730598253584" ID="ID_763084379" MODIFIED="1730598384398" TEXT="wird in einer Registry abgelegt">
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730598263877" ID="ID_973341461" MODIFIED="1730598270871" TEXT="vorerst einfach statisch implementieren">
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1730598272422" ID="ID_74408441" MODIFIED="1730598369786" TEXT="keine Bereinigung vorsehen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ich sehe das als einen Laufzeit-Cache, der jederzeit regeneriert werden kann; er wird sich maximal mit den im Model verwendeten Processing-Funktions-Deskriptoren f&#252;llen
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730598439357" ID="ID_1991416239" MODIFIED="1730598480466" TEXT="Deskriptoren und Hash-Keys jeweils generieren">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1730598456797" ID="ID_1189534095" MODIFIED="1730598466247" TEXT="aus den hinterlegten semantischen Infos"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730598467124" ID="ID_1212008827" MODIFIED="1730598478595" TEXT="plus einer direkt hereingereichten Connectivity">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node CREATED="1730598486057" ID="ID_75268371" MODIFIED="1730598499661" TEXT="wird als direkte Referenz in das Port-Interface gelegt">
<icon BUILTIN="idea"/>
<node CREATED="1730598503327" ID="ID_972746982" MODIFIED="1730598511073" TEXT="damit kein Code-Bloat m&#xf6;glich"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1730598512266" ID="ID_939010483" MODIFIED="1730598526116" TEXT="mu&#xdf; komplett von der Weaving-Pattern-Impl entkoppelt werden">
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#338800" CREATED="1730598527660" ID="ID_114450698" MODIFIED="1730598535314" TEXT="Initialisierung per Konstruktor">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1730486716299" ID="ID_95149323" MODIFIED="1730486959772" STYLE="fork" TEXT="Storage bedarf gesondert der Betrachtung">
@ -91820,8 +91871,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
....die Vorraussetzungen hierf&#252;r sind gut, da der einzige Zugang &#252;ber eine zentrale Builder-Schnittstelle erfolgt; dennoch wird ein solches Schema komplex, bedingt durch die Verteilung von Logik auf die verschiedenen Media-processing-Library-Plug-ins
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238837562" HGAP="132" ID="ID_1159160517" MODIFIED="1730500824387" STYLE="bubble" VSHIFT="44">
<richcontent TYPE="NODE"><html>
@ -92122,8 +92172,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
wenn wir f&#252;r jede Node wieder eine texturelle ID speichern, oder auch nur mehrere Hash-Komponenten, w&#228;re der Hebel gewaltig &#8212; irgendwo mu&#223; dedupliziert werden....
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#d64274" DESTINATION="ID_95149323" ENDARROW="Default" ENDINCLINATION="-487;32;" ID="Arrow_ID_78196027" STARTARROW="None" STARTINCLINATION="92;6;"/>
<icon BUILTIN="clanbomber"/>
</node>
@ -93326,6 +93375,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1730596470751" ID="ID_1288148978" LINK="https://issues.lumiera.org/ticket/1377" MODIFIED="1730597727524" TEXT="#1377 processing identification">
<linktarget COLOR="#832b91" DESTINATION="ID_1288148978" ENDARROW="Default" ENDINCLINATION="-2377;191;" ID="Arrow_ID_1024856417" SOURCE="ID_125486682" STARTARROW="None" STARTINCLINATION="-1447;-79;"/>
<linktarget COLOR="#484589" DESTINATION="ID_1288148978" ENDARROW="Default" ENDINCLINATION="-451;-260;" ID="Arrow_ID_79666749" SOURCE="ID_701755621" STARTARROW="None" STARTINCLINATION="-1086;55;"/>
<icon BUILTIN="hourglass"/>
<node CREATED="1730597099323" ID="ID_968805110" MODIFIED="1730597155681" TEXT="darauf aufbauend: systematische Cache-Keys">
<linktarget COLOR="#79214c" DESTINATION="ID_968805110" ENDARROW="Default" ENDINCLINATION="271;-5;" ID="Arrow_ID_617691253" SOURCE="ID_1999491710" STARTARROW="None" STARTINCLINATION="-191;250;"/>
</node>
</node>
</node>
<node CREATED="1680563460649" ID="ID_127710483" MODIFIED="1715624384997" TEXT="MemManagement">
<arrowlink COLOR="#454059" DESTINATION="ID_1595450559" ENDARROW="Default" ENDINCLINATION="-1036;-77;" ID="Arrow_ID_1704085390" STARTARROW="None" STARTINCLINATION="-161;430;"/>
@ -133188,6 +133245,26 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
<node CREATED="1681085789797" ID="ID_435519695" MODIFIED="1681085821901" TEXT="Abstraktionsschicht &#xfc;ber Low-Level-Funktionalit&#xe4;t"/>
<node CREATED="1681085863204" ID="ID_136936235" MODIFIED="1681085881132" TEXT="isoliert system-Level Services und externe Library-Erweiterungen"/>
</node>
<node CREATED="1730596276352" ID="ID_770243470" MODIFIED="1730596311395">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<b>Frame-Cache</b>&#160;(Service)
</p>
</body>
</html>
</richcontent>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730596329922" ID="ID_1539887198" MODIFIED="1730596340330" TEXT="Schema f&#xfc;r Cache-Keys aufbauen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1730596368051" ID="ID_384763125" LINK="https://issues.lumiera.org/ticket/1223" MODIFIED="1730596382793" TEXT="#1223 Create foundation for precise frame-caching">
<icon BUILTIN="pencil"/>
<node CREATED="1730596446659" ID="ID_125486682" MODIFIED="1730596692023" TEXT="brauche Schema zur Kennzeichnung der Processing-Steps">
<arrowlink COLOR="#832b91" DESTINATION="ID_1288148978" ENDARROW="Default" ENDINCLINATION="-2377;191;" ID="Arrow_ID_1024856417" STARTARROW="None" STARTINCLINATION="-1447;-79;"/>
</node>
</node>
</node>
</node>
<node CREATED="1720994187035" ID="ID_1817562586" MODIFIED="1720994190143" TEXT="Basis-Dienste"/>
</node>
<node CREATED="1720131181173" ID="ID_792463857" MODIFIED="1720131194751" TEXT="Extern">
@ -133198,8 +133275,8 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
<node CREATED="1729985728046" ID="ID_736735373" MODIFIED="1729985734050" TEXT="Aufgaben / Anforderung">
<node CREATED="1729985738500" ID="ID_1413374424" MODIFIED="1729985758687" TEXT="schafft eine abstrakte koh&#xe4;rente Sicht auf die Library (als &#xbb;Domain-Ontology&#xab;)"/>
<node CREATED="1729985648880" ID="ID_169575397" MODIFIED="1730488021011" TEXT="die Library mu&#xdf; semantische IDs f&#xfc;r die gebotenen Operationen belegen">
<linktarget COLOR="#6f4685" DESTINATION="ID_169575397" ENDARROW="Default" ENDINCLINATION="-2831;-132;" ID="Arrow_ID_1915206342" SOURCE="ID_277740057" STARTARROW="None" STARTINCLINATION="2041;85;"/>
<linktarget COLOR="#6f4685" DESTINATION="ID_169575397" ENDARROW="Default" ENDINCLINATION="-2831;-132;" ID="Arrow_ID_1200063463" SOURCE="ID_1902375822" STARTARROW="None" STARTINCLINATION="2248;201;"/>
<linktarget COLOR="#6f4685" DESTINATION="ID_169575397" ENDARROW="Default" ENDINCLINATION="-2831;-132;" ID="Arrow_ID_1915206342" SOURCE="ID_277740057" STARTARROW="None" STARTINCLINATION="2041;85;"/>
<icon BUILTIN="yes"/>
<node CREATED="1729985837696" ID="ID_356361059" MODIFIED="1729986052288" TEXT="Eindeutiger Namen aus Sicht des Benutzers">
<richcontent TYPE="NOTE"><html>