Invocation: investigate ways to introduce a parameter-functor
While the handling of invocation parameters is now integrated in the node processing, there is still a gap to close in the Node Builder, which is tricky due to the way the parameter-functor is now integrated deeply into the setup of the `FeedManifold`; so the `PortBuilder` is tasked now with implanting a `FeedPrototype` -- which must be adapted to a ''specific parameter-functor,'' which is only supplied optionally, as a further build step. At first this seemed to present a pattern very similar to a ''State Monad'' — and thus I investigated if encapsulating the build of the prototype into such a State Monad would simplify the structure of the builder — yet once again, Monads turned out as ''Anti Pattern'' rather: we'd had to ad an extra component, which is superficially generic but without any tangible relation to patterns of the real world, it would be rather technical (using lots of composed lambda primitives, which will be condensed into a single builder function by the compiler / optimiser. But worse still, this highly complicated setup does not actually solve the problem with N x M typed contexts — implying that it ''is not actually an abstraction,'' rather just pretends to be generic. The benefit of this lengthy design exercise is to understand better the situation in the builder, which amounts to building up mixed typed context with several degrees of freedom. It is better to accept this reality and keep it in plain sight, i.e. let the builder be explicitly typed from end to end and do not try to package parts of this selection process behind a virtualisation.
This commit is contained in:
parent
9f348e6944
commit
b46e21e24d
3 changed files with 581 additions and 53 deletions
|
|
@ -353,6 +353,9 @@ namespace engine {
|
|||
|
||||
/*************************************************************//**
|
||||
* Terminal: complete the Port wiring and return to the node level.
|
||||
* @remark this prepares a suitable Turnout instance for a port;
|
||||
* but due to constraints with memory allocation, actual build
|
||||
* is delayed and packaged as functor into a PatternData instance.
|
||||
*/
|
||||
auto
|
||||
completePort()
|
||||
|
|
@ -369,9 +372,20 @@ namespace engine {
|
|||
: _Par{move(base)}
|
||||
, weavingBuilder_{forward<FUN> (fun), _Par::symbol_, portSpec, _Par::leads_.policyConnect()}
|
||||
, defaultPort_{_Par::patternData_.size()}
|
||||
{ }
|
||||
{ } // ^^^ by default use next free port
|
||||
|
||||
friend class PortBuilderRoot<POL,DAT>;
|
||||
|
||||
/** cross-builder to adapt embedded WeavingBuilder type */
|
||||
template<class WABO>
|
||||
PortBuilder (PortBuilder<POL,DAT,WABO>&& prevBuilder, WAB&& adaptedWeavingBuilder)
|
||||
: _Par{move(prevBuilder)}
|
||||
, weavingBuilder_{move (adaptedWeavingBuilder)}
|
||||
, defaultPort_{prevBuilder.defaultPort_}
|
||||
{ }
|
||||
|
||||
template<class PX, class DX, class WX>
|
||||
friend class PortBuilder;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -401,7 +415,8 @@ namespace engine {
|
|||
auto
|
||||
PortBuilderRoot<POL,DAT>::invoke (StrView portSpec, FUN fun)
|
||||
{
|
||||
using WeavingBuilder_FUN = WeavingBuilder<POL, FUN>;
|
||||
using Prototype = typename FeedManifold<FUN>::Prototype;
|
||||
using WeavingBuilder_FUN = WeavingBuilder<POL, Prototype>;
|
||||
return PortBuilder<POL,DAT, WeavingBuilder_FUN>{move(*this), move(fun), portSpec};
|
||||
}
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -235,18 +235,19 @@ namespace engine {
|
|||
* actual NodeBuilder and PortBuilder allows to introduce extension points
|
||||
* and helps to abstract away internal technical details of the invocation.
|
||||
* @tparam POL allocation and context configuration policy
|
||||
* @tparam FUN function or invocation adapter to invoke
|
||||
* @tparam PROT Prototype to generate a Feed or invocation adapter to invoke
|
||||
* @remark in the standard case, PROT is a FeedManifold<FUN>::Prototype and
|
||||
* thus embeds the processing-functor and possibly a parameter-functor
|
||||
*/
|
||||
template<class POL, class FUN>
|
||||
template<class POL, class PROT>
|
||||
struct WeavingBuilder
|
||||
: util::MoveOnly
|
||||
{
|
||||
using Prototype = typename FeedManifold<FUN>::Prototype;
|
||||
using WeavingPattern = MediaWeavingPattern<Prototype>;
|
||||
using WeavingPattern = MediaWeavingPattern<PROT>;
|
||||
using TurnoutWeaving = Turnout<WeavingPattern>;
|
||||
static constexpr SizMark<sizeof(TurnoutWeaving)> sizMark{};
|
||||
static constexpr uint FAN_I = Prototype::FAN_I;
|
||||
static constexpr uint FAN_O = Prototype::FAN_O;
|
||||
static constexpr uint FAN_I = PROT::FAN_I;
|
||||
static constexpr uint FAN_O = PROT::FAN_O;
|
||||
|
||||
|
||||
using TypeMarker = std::function<BuffDescr(BufferProvider&)>;
|
||||
|
|
@ -262,15 +263,27 @@ namespace engine {
|
|||
|
||||
StrView nodeSymb_;
|
||||
StrView portSpec_;
|
||||
FUN fun_;
|
||||
PROT prototype_;
|
||||
|
||||
template<typename...INIT>
|
||||
WeavingBuilder(FUN&& init, StrView nodeSymb, StrView portSpec, INIT&& ...alloInit)
|
||||
WeavingBuilder (PROT&& prototype, StrView nodeSymb, StrView portSpec, INIT&& ...alloInit)
|
||||
: leadPorts{forward<INIT> (alloInit)...}
|
||||
, buffTypes{fillDefaultBufferTypes()}
|
||||
, nodeSymb_{nodeSymb}
|
||||
, portSpec_{portSpec}
|
||||
, fun_{move(init)}
|
||||
, prototype_{move(prototype)}
|
||||
{ }
|
||||
|
||||
/** cross-ctor to switch to another prototype */
|
||||
template<class PREV>
|
||||
WeavingBuilder (WeavingBuilder<POL,PREV>&& prevBuilder, PROT&& adaptedPrototype)
|
||||
: leadPorts {move (prevBuilder.leadPorts)}
|
||||
, buffTypes {move (prevBuilder.buffTypes)}
|
||||
, providers {move (prevBuilder.providers)}
|
||||
, resultSlot{move (prevBuilder.resultSlot)}
|
||||
, nodeSymb_ {move (prevBuilder.nodeSymb_)}
|
||||
, portSpec_ {move (prevBuilder.portSpec_)}
|
||||
, prototype_{move (adaptedPrototype)}
|
||||
{ }
|
||||
|
||||
WeavingBuilder&&
|
||||
|
|
@ -333,7 +346,7 @@ namespace engine {
|
|||
// provide a free-standing functor to build a suitable Port impl (≙Turnout)
|
||||
return [leads = move(leadPorts.build())
|
||||
,types = move(outTypes.build())
|
||||
,procFun = move(fun_)
|
||||
,prototype = move(prototype_)
|
||||
,resultIdx = resultSlot
|
||||
,procID = ProcID::describe (nodeSymb_,portSpec_)
|
||||
]
|
||||
|
|
@ -343,7 +356,7 @@ namespace engine {
|
|||
,move(leads)
|
||||
,move(types)
|
||||
,resultIdx
|
||||
,move(procFun)
|
||||
,move(prototype)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
@ -382,7 +395,7 @@ namespace engine {
|
|||
}
|
||||
};
|
||||
|
||||
using OutTypesDescriptors = typename Prototype::template OutTypesApply<BufferDescriptor>;
|
||||
using OutTypesDescriptors = typename PROT::template OutTypesApply<BufferDescriptor>;
|
||||
using OutDescriptorTup = lib::meta::Tuple<OutTypesDescriptors>;
|
||||
|
||||
/** A tuple of BufferDescriptor instances for all output buffer types */
|
||||
|
|
|
|||
|
|
@ -28727,9 +28727,7 @@
|
|||
<node CREATED="1555947549617" ID="ID_386072993" MODIFIED="1557498707228" TEXT="das compiliert problemlos"/>
|
||||
<node CREATED="1555947561535" ID="ID_858467762" MODIFIED="1557498707228" TEXT="und macht LValue-Initialisierung">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...sichtbar wenn man ein Trackr-Objekt
|
||||
|
|
@ -29228,9 +29226,7 @@
|
|||
<node CREATED="1560303652840" ID="ID_1947607603" MODIFIED="1560303667034" TEXT="Konsequenz des generischen »Ruler«-Konzepts"/>
|
||||
<node CREATED="1560303597884" ID="ID_1906099403" MODIFIED="1576282358060" TEXT="wurde notwendig wegen der Aufteilung in zwei Canvas">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
vorher war nämlich das Profil im Canvas selber.
|
||||
|
|
@ -29941,9 +29937,7 @@
|
|||
<node CREATED="1674510325404" ID="ID_1324802717" MODIFIED="1674513323111" TEXT="Ruler schließen automatisch das Root-Prelude ein"/>
|
||||
<node CREATED="1674510350137" ID="ID_269721067" MODIFIED="1674510480677">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
nested enthält <i>Näherung</i> für slope-up
|
||||
|
|
@ -30587,9 +30581,7 @@
|
|||
</node>
|
||||
<node CREATED="1569711798770" ID="ID_1246108677" MODIFIED="1569712021835">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Abstraktion: <b>ViewHook</b> (->Canvas)
|
||||
|
|
@ -31504,9 +31496,7 @@
|
|||
</node>
|
||||
<node CREATED="1665955930245" ID="ID_886604417" MODIFIED="1665956909622" TEXT="zumindest Glib::ObjectBase-ctor kann man setzen...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
damit kann man zwar einen Klassennamen für ein Custom-Widget setzen, also z.B.  'gtkmm__CustomObject_xyz' (wobei man xyz an den ctor übergeben hat). Aber das hat keinen Einfluß auf den Tag-Namen, wie er für den CSS-Selector relevant ist
|
||||
|
|
@ -31627,9 +31617,7 @@
|
|||
<node CREATED="1566517520897" ID="ID_1585833997" MODIFIED="1566517533715" TEXT="nur beim abschließenden Slope"/>
|
||||
<node CREATED="1566517544022" ID="ID_1083102048" MODIFIED="1576282358049" TEXT="fügt dem jeweils letzten hinzu">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...anstatt für jeden schließenden nested scope noch ein weiteres Verb hinzuzufügen.
|
||||
|
|
@ -32143,9 +32131,7 @@
|
|||
<node CREATED="1563637202035" ID="ID_681324395" MODIFIED="1563637205854" TEXT="Auswege?">
|
||||
<node CREATED="1563637219445" FOLDED="true" ID="ID_1413699114" MODIFIED="1576282358044" TEXT="Reverse-Engineering">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
den Zeichenvorgang für ein normales Frame-Widget analysieren
|
||||
|
|
@ -32696,9 +32682,7 @@
|
|||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1566401334135" ID="ID_688081615" MODIFIED="1576282358043" TEXT="doch nicht so schlimm">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
weil die CSS-box-shadow-Effekte zum Zeichnen komplexerer Strukturen nur bedingt nützlich sind.
|
||||
|
|
@ -82215,8 +82199,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1733430960965" ID="ID_1619015453" MODIFIED="1733431403397" TEXT="Spezialfall-Behandlung: Parameter-Nodes">
|
||||
<linktarget COLOR="#c50127" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-153;535;" ID="Arrow_ID_1374888051" SOURCE="ID_1513206906" STARTARROW="None" STARTINCLINATION="719;37;"/>
|
||||
<linktarget COLOR="#ce5d7e" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-417;871;" ID="Arrow_ID_386484765" SOURCE="ID_1092181172" STARTARROW="None" STARTINCLINATION="549;-1534;"/>
|
||||
<node CREATED="1733431417535" ID="ID_704224255" MODIFIED="1733431533095" TEXT="ParamAgent-Node">
|
||||
<node CREATED="1733431561916" ID="ID_310315082" MODIFIED="1733431608129" TEXT="ist (immer?) eine Source-Node">
|
||||
<node CREATED="1733431417535" ID="ID_704224255" MODIFIED="1735055758856" TEXT="Parameter-Einspeisung">
|
||||
<node CREATED="1733431417535" ID="ID_1291347161" LINK="#ID_38547756" MODIFIED="1735055873492" TEXT="Plan: »ParamAgent«-Node"/>
|
||||
<node CREATED="1733431561916" ID="ID_310315082" MODIFIED="1735055821959" TEXT="ist (immer?) eine Source-Node">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -82226,8 +82211,89 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1735055896356" ID="ID_1490602941" MODIFIED="1735055923494" TEXT="Konzept-Änderung: spezielle Einspeisung wird überflüssig">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1735058786373" ID="ID_855735841" LINK="#ID_936596772" MODIFIED="1735058963503" TEXT="Analyse und Diskussion konzentrierten sich zunächst auf die Parameter-Versorgungs-Struktur">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...also vor allem die Frage: wirft das jetzt alles über den Haufen, kann man es außen anbauen, oder gar in bestehende Strukturen lediglich hinein-codieren?
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1733431522849" ID="ID_1650778246" MODIFIED="1733431535243" TEXT="ParamEval-Node"/>
|
||||
<node CREATED="1735056823011" ID="ID_256116626" LINK="#ID_1150277906" MODIFIED="1735058896369" TEXT="habe dann aber »Parametrisierbarkeit« als Anforderung nochmal grundsätzlich durchdacht">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...da ich (wie so oft) mich bereits viel zu tief ins »wie« verstrickt habe...
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1735057998013" ID="ID_1759924838" LINK="#ID_166227320" MODIFIED="1735059113036" TEXT="daraus entstand ein »Misch-Modell« für die Verwendung des TurnoutSystem">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...wobei es darum geht, wie die (bisher rein intuitive) Vorstellung vom Turnout-System in tatsächliche Strukturen übersetzt werden kann, und auf welcher Ebene dabei die Parameter-Verarbeitung sinnvollerweise anzusiedeln ist
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1735058066868" ID="ID_261014041" LINK="#ID_1350706165" MODIFIED="1735058896378" TEXT="mit der Konsequenz daß Datentupel direkt in die Verarbeitung hineingenommen werden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...denn bereits für die Umsetzung der verknüpften, kaskadierenden Storage für das Turnout-System mußte ich massiv in die Meta-Programmierung einsteigen und mir das Instrumentarium für den Umgang mit beliebigen Datentupeln bereitlegen ... und so fühlte ich mich gerüstet, diese Art Datenhaltung direkt in die Kernverarbeitung hineinzunehmen, die dadurch (abzüglich der Metaprogrammierung) „eigentlich einfach“ wird...
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735059136933" ID="ID_609019627" LINK="#ID_1347066000" MODIFIED="1735064562308" TEXT="Parameter werden nun direkt in der FeedManifold abgelegt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Das bedeutet zweierlei
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
die Daten in der Invocation werden <i>breiter</i> und weisen Parameter-Werte direkt sichtbar aus
|
||||
</li>
|
||||
<li>
|
||||
die Parameter-Verarbeitung aber wandert von der Oberfläche <i>tief in die Weaving-Patterns hinein</i> und wird beim Aufruf implizit mit angetriggert.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Der Ankerpunkt der normalen Verarbeitung sitzt nun im FeedPrototype, wird also sofort im ersten mount()-Schritt der Webe-Sequenz aufgerufen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1735064599178" ID="ID_152831343" MODIFIED="1735064621219" TEXT="Konsequenz ⟹ Builder steuert Parameter via FeedPrototype"/>
|
||||
<node CREATED="1735064622575" ID="ID_873434155" MODIFIED="1735068695791" TEXT="Ansatzpunkt auf dem Port-Builder">
|
||||
<arrowlink COLOR="#8595a8" DESTINATION="ID_1218064070" ENDARROW="Default" ENDINCLINATION="-31;-184;" ID="Arrow_ID_1907314003" STARTARROW="None" STARTINCLINATION="-201;17;"/>
|
||||
<node CREATED="1735064673697" ID="ID_1825450032" MODIFIED="1735064771303" TEXT="brauche Quer-Schwenk auf schon bestehendem (vollen) PortBuilder">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
denn nun wird in der Regel erst mal aus dem PortBuilderRoot das Binding für die Processing-Function angelegt ⟹ PortBuilder — und erst von dort gibt man dann Parameter an ⟹ modifizierter PortBuilder
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1735064779481" ID="ID_1880332085" MODIFIED="1735064805874" TEXT="muß Parametrisierung des eingebetteten WeavingBuilders heben / ergänzen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1733431522849" ID="ID_1650778246" MODIFIED="1735055781159" TEXT="ParamNode: Auswertung"/>
|
||||
</node>
|
||||
<node CREATED="1720143945014" ID="ID_1230383106" MODIFIED="1720143962663" TEXT="prepareNode()">
|
||||
<node CREATED="1720143965823" ID="ID_1699834856" MODIFIED="1720144003274" TEXT="addLead(ProcNode&)"/>
|
||||
|
|
@ -82271,7 +82337,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1728587167953" HGAP="61" ID="ID_581121579" MODIFIED="1728587192330" TEXT="richtet implizites default-Mapping ein" VSHIFT="-11"/>
|
||||
<node CREATED="1728587167953" HGAP="61" ID="ID_581121579" MODIFIED="1735067281228" TEXT="richtet implizites default-Mapping ein (1:1)" VSHIFT="-11"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1719970368235" ID="ID_1051554068" MODIFIED="1728586726004" TEXT="Buffer vorbereiten">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
|
|
@ -82287,6 +82353,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1728587027861" ID="ID_1530575925" MODIFIED="1728587061668" TEXT="connectLeadPort(ProcNode&, p)"/>
|
||||
<node CREATED="1728587063136" ID="ID_26296441" MODIFIED="1728587070363" TEXT="useLeadPort(p)"/>
|
||||
</node>
|
||||
<node CREATED="1735068628307" ID="ID_1218064070" MODIFIED="1735070937224" TEXT="Konfiguration für Parameter">
|
||||
<arrowlink COLOR="#3d55ca" DESTINATION="ID_470723577" ENDARROW="Default" ENDINCLINATION="-1255;-52;" ID="Arrow_ID_767774106" STARTARROW="None" STARTINCLINATION="464;45;"/>
|
||||
<linktarget COLOR="#8595a8" DESTINATION="ID_1218064070" ENDARROW="Default" ENDINCLINATION="-31;-184;" ID="Arrow_ID_1907314003" SOURCE="ID_873434155" STARTARROW="None" STARTINCLINATION="-201;17;"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720146340213" ID="ID_1871545026" MODIFIED="1720230570516" TEXT="TODO: API für Mapping">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1720146352115" ID="ID_989391502" MODIFIED="1720146395401" TEXT="ausgangsseitig: einfach">
|
||||
|
|
@ -82378,7 +82448,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1721782152173" ID="ID_300319891" MODIFIED="1721782173912" TEXT="zunächst davon außgehen daß vollständig 1:1 verdrahtet wird">
|
||||
<node CREATED="1721782183257" ID="ID_1206563643" MODIFIED="1721782251306" TEXT="jeder Eingangs-/Ausgangs- Slot wird verwendet"/>
|
||||
<node CREATED="1721782197168" ID="ID_1419082615" MODIFIED="1721782223559" TEXT="jeder Eingangs-Slot it auf einen (Lead-#, port-#) aufgeschaltet"/>
|
||||
<node CREATED="1721782197168" ID="ID_1419082615" MODIFIED="1721782223559" TEXT="jeder Eingangs-Slot ist auf einen (Lead-#, port-#) aufgeschaltet"/>
|
||||
<node CREATED="1721782257358" ID="ID_1166496456" MODIFIED="1721782368194" TEXT="eventuelle Permutationen werden damit auf den Invocation-Adapter abgewälzt"/>
|
||||
</node>
|
||||
<node CREATED="1721782369990" ID="ID_1222041233" MODIFIED="1721782381279" TEXT="das ist zwar vereinfacht, aber durchaus realistisch">
|
||||
|
|
@ -93575,7 +93645,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1734309978110" ID="ID_436098074" MODIFIED="1734727581364" TEXT="umgebaute FeedManifold testen...">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1734310000123" ID="ID_1140187367" MODIFIED="1734310088299" TEXT="der alte BuffTable_test ist unpassend — weg damit">
|
||||
<node COLOR="#5b280f" CREATED="1734310000123" ID="ID_1140187367" MODIFIED="1735059213723" TEXT="der alte BuffTable_test ist unpassend — weg damit">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -96770,6 +96840,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721782550869" ID="ID_173220882" MODIFIED="1721782642416" TEXT="vereinfachtes Aufruf-API: Slots der Reihe nach belegen">
|
||||
<linktarget COLOR="#5581a2" DESTINATION="ID_173220882" ENDARROW="Default" ENDINCLINATION="-314;-501;" ID="Arrow_ID_84112739" SOURCE="ID_1583773170" STARTARROW="None" STARTINCLINATION="540;29;"/>
|
||||
<linktarget COLOR="#596573" DESTINATION="ID_173220882" ENDARROW="Default" ENDINCLINATION="-96;5;" ID="Arrow_ID_940636281" SOURCE="ID_162016103" STARTARROW="None" STARTINCLINATION="-238;-12;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1728575111581" ID="ID_1267841334" LINK="#ID_973244167" MODIFIED="1728580405766" TEXT="Nutz-Kontext">
|
||||
<linktarget COLOR="#507ec8" DESTINATION="ID_1267841334" ENDARROW="Default" ENDINCLINATION="-66;-100;" ID="Arrow_ID_537610685" SOURCE="ID_807507393" STARTARROW="None" STARTINCLINATION="-257;20;"/>
|
||||
|
|
@ -96866,6 +96937,424 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1721782666679" ID="ID_1453585170" MODIFIED="1721782669193" TEXT="attachToLeadPort(ProcNode& lead, uint portNr)"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735069805612" ID="ID_1563936701" MODIFIED="1735069816302" TEXT="Prototyp konsolidieren und ergänzen">
|
||||
<node CREATED="1735069829251" ID="ID_162016103" MODIFIED="1735069891462" TEXT="jetzt mehr oder weniger festgelegt auf das vereinfachte API-Schema">
|
||||
<arrowlink COLOR="#596573" DESTINATION="ID_173220882" ENDARROW="Default" ENDINCLINATION="-96;5;" ID="Arrow_ID_940636281" STARTARROW="None" STARTINCLINATION="-238;-12;"/>
|
||||
</node>
|
||||
<node CREATED="1735069924196" ID="ID_470723577" MODIFIED="1735070937224" TEXT="Ergänzung: Parameter-Functor einführen">
|
||||
<linktarget COLOR="#3d55ca" DESTINATION="ID_470723577" ENDARROW="Default" ENDINCLINATION="-1255;-52;" ID="Arrow_ID_767774106" SOURCE="ID_1218064070" STARTARROW="None" STARTINCLINATION="464;45;"/>
|
||||
<node CREATED="1735070066380" ID="ID_924587023" MODIFIED="1735070076918" TEXT="Dieser liegt im FeedPrototype"/>
|
||||
<node CREATED="1735070078355" ID="ID_322789953" MODIFIED="1735070093472" TEXT="...der wiederum in das MediaWeavingPattern eingebettet wird"/>
|
||||
<node CREATED="1735070096196" ID="ID_81762855" MODIFIED="1735070200862">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
⟹ also muß der WeavingBuilder <i>seine Typ-Parameter schwenken </i>können
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1735070296999" ID="ID_1127764055" MODIFIED="1735070342009">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
⟹ und der ihn umschließende PortBuilder muß <i>diesen Schwenk mitgehen</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1735071406908" ID="ID_41228375" MODIFIED="1735071452254" TEXT="komplexes Manöver — wirklich notwendig?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1735071458244" ID="ID_122075212" MODIFIED="1735071466991" TEXT="es liegt an dem Typ-basierten Ansatz">
|
||||
<node CREATED="1735070983365" ID="ID_449846433" MODIFIED="1735071487956" TEXT="WeavingBuilder ist direkt auf FUN (processing-functor) typisiert"/>
|
||||
<node CREATED="1735071044580" ID="ID_477635560" MODIFIED="1735071058662" TEXT="er hat aber eigentlich nichts mit der Funktion direkt zu tun"/>
|
||||
<node CREATED="1735071516784" ID="ID_732778350" MODIFIED="1735071606588" TEXT="aber der Funktions-Typ überträgt sich als Parameter-Typ">
|
||||
<node CREATED="1735071547401" ID="ID_449444615" MODIFIED="1735071565550" TEXT="zunächst in das delayed-build-λ"/>
|
||||
<node CREATED="1735071568596" ID="ID_971677847" MODIFIED="1735071585639" TEXT="von dort durch die (flexiblen) Turnout-Argumente"/>
|
||||
</node>
|
||||
<node CREATED="1735071615207" ID="ID_726829685" MODIFIED="1735071628617" TEXT="der Port-Builder hat damit noch viel weniger zu tun"/>
|
||||
<node CREATED="1735071630133" ID="ID_801346876" MODIFIED="1735071663344" TEXT="aber er ruft das strikt typisierte WeavingBuilder::build()-Teminal"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#961073" CREATED="1735072215966" ID="ID_37006858" MODIFIED="1735072317471">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
schon das Ding mit <font face="Monospaced">PatternData</font> ist <i>grauenhaft</i> — und s'werd ois no fui schmlimma
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node COLOR="#b80165" CREATED="1735074049579" ID="ID_915001534" MODIFIED="1735074428091" TEXT="einfach fressen — geht doch...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
letztlich auch keine Katastrophe mehr. Da die darüber liegenden Ebenen eigentlich nichts mit der Funktion zu tun haben, läuft es darauf hinaus, zwei dämliche cross-build-Konstruktoren zu coden. Das ist lediglich lästig, weil man alle Datenfelder einzeln aufführen muß. Die sonstige Verwendung im Code wäre durchaus elegant: der äußere Port-Builder ist für das Große Ganze zuständig, und der WeavingBuilder bekommt nur noch einen vorkonfigurierten Parameter-Funktor und adressiert damit das cross-Builder-API des FeedPrototype....
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Tja ... was mir daran <i>definitiv nicht gefällt,</i> ist die Vorstellung, mich in 5 Monaten in diese ganze Struktur von oben bis unten wieder hineindenken zu müssen, denn hier gibt es nichts, an dem man sich entlanghangeln könnte, sondern man sieht nur einzelne cross-Builder mit WTF-Faktor
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
<node CREATED="1735073143945" ID="ID_1381147591" MODIFIED="1735073159419" TEXT="einen Paradigmen-Wechsel gäbe es aber nicht umsonst....">
|
||||
<node CREATED="1735073161567" ID="ID_230609721" MODIFIED="1735073219920" TEXT="Alternative wäre: auf virtuellen heap-basiertes Detail-Build umstellen"/>
|
||||
<node CREATED="1735073232645" ID="ID_1626158697" MODIFIED="1735073245555" TEXT="der Weaving-Builder würde dadurch opaque">
|
||||
<node CREATED="1735073257882" ID="ID_550679913" MODIFIED="1735073284442" TEXT="Port-Builder würde nur noch ein klassisches OO-Interface benutzen"/>
|
||||
<node CREATED="1735073290741" ID="ID_514277680" MODIFIED="1735073319016" TEXT="die Implementierung läge in einem unique-PImpl und wäre leicht zu schwenken"/>
|
||||
<node CREATED="1735073373354" ID="ID_1088177271" MODIFIED="1735073414910" TEXT="jedwede Kollaboration müßte auf dieses Interface gemapped werden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das ist dann schon Arbeits-Aufwand, und auch jeweils eine Code-Duplikation
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1735073430287" ID="ID_1829149561" MODIFIED="1735073452593" TEXT="und Template-Bloat! jede Parameter-Kombi ⟹ neue Subklasse"/>
|
||||
</node>
|
||||
<node CREATED="1735073604719" ID="ID_1864319230" MODIFIED="1735073626582" TEXT="vielleicht könnte man dieses Schema nach innen ziehen....">
|
||||
<node CREATED="1735073628543" ID="ID_1335487981" MODIFIED="1735073669372" TEXT="es fällt auf daß die äußeren Builder gar nichts mit dem konkreten Funktions-Typ machen"/>
|
||||
<node CREATED="1735073702171" ID="ID_357140441" MODIFIED="1735073724309" TEXT="im Besonderen PatternData verwendet die markierten Typen nur intern"/>
|
||||
<node CREATED="1735073743256" ID="ID_1505413732" MODIFIED="1735073919772" TEXT="der Trick ist: es bekommt einen DataBuilder, der seine Detail-Typisierung löscht">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Denn das ist die zentrale Eigenschaft des lib::Several, die sich immer mehr als Glücksgriff herausstellt: man kann Detail-Typen unterbringen und sofort auf das Interface löschen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1735073832888" ID="ID_1885951415" MODIFIED="1735073854121">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
insofern ist PatternData tatsächlich eine <b>Funktionale Datenstruktur</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1735074010716" ID="ID_497894747" MODIFIED="1735074029461" TEXT="⟹ bereits die delayed-build-λ stellen eine partielle Type-Erasure dar"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1735076701058" ID="ID_1594497500" MODIFIED="1735076753244" TEXT="aber diese selbst müßten dann im voll expandierten Typ-Kontext liegen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1735076808467" ID="ID_1987141221" MODIFIED="1735076827931" TEXT="das ist nur ein ganz schmales »Fenster«"/>
|
||||
<node CREATED="1735076958492" ID="ID_1923985971" MODIFIED="1735076984471" TEXT="bedeutet: der Builder-Funktor selber wäre nochmal zu virtualisieren"/>
|
||||
<node CREATED="1735077006689" ID="ID_1621924956" MODIFIED="1735077030338" TEXT="und in diesem Kontext wäre dann TurnoutWeaving explizit bekannt"/>
|
||||
<node COLOR="#5b280f" CREATED="1735077405168" ID="ID_442112396" MODIFIED="1735088873524" TEXT="will man das wirklich?? ist das sauber hinzubekommen?">
|
||||
<icon BUILTIN="help"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1735077432719" ID="ID_1540043959" MODIFIED="1735077511808">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<i>dagegen</i> spricht daß es die <font size="5">schlimmste Stelle</font> noch <i>komplexer</i>  macht
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="smiley-neutral"/>
|
||||
</node>
|
||||
<node CREATED="1735077551417" ID="ID_702667838" MODIFIED="1735077575560" TEXT="wäre dann in jedem Fall ein extern extrahiertes Konzept">
|
||||
<node CREATED="1735077582283" ID="ID_1419937742" MODIFIED="1735077594733" TEXT="Idee: PatternPrototype">
|
||||
<node CREATED="1735077668360" ID="ID_1572740856" MODIFIED="1735077684410" TEXT="ein Prototype trägt verdeckt den Zieltyp"/>
|
||||
<node CREATED="1735077702715" ID="ID_106957283" MODIFIED="1735077739698" TEXT="auf dieses lassen sich »monadische« Operationen anwenden"/>
|
||||
<node CREATED="1735077817175" ID="ID_1781671844" MODIFIED="1735077828703" TEXT="am Ende erstellt man einen »Dropper«"/>
|
||||
<node COLOR="#5b280f" CREATED="1735077629430" ID="ID_1074716100" MODIFIED="1735087947887" TEXT="Implementiert als Monaden-PImpl-Closure">
|
||||
<arrowlink COLOR="#8f0248" DESTINATION="ID_617959831" ENDARROW="Default" ENDINCLINATION="-297;13;" ID="Arrow_ID_1098066299" STARTARROW="None" STARTINCLINATION="-44;189;"/>
|
||||
<icon BUILTIN="smiley-oh"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1735078125358" ID="ID_136488948" MODIFIED="1735078143596" TEXT="Monaden Pattern: der PImpl wäre auch zugleich stets ein »Dropper«"/>
|
||||
<node CREATED="1735078463341" ID="ID_182866671" MODIFIED="1735078480475" TEXT="bedeutet praktisch: wir sammeln eine Funktions-Kompositions-Kette">
|
||||
<node CREATED="1735078887507" ID="ID_234346405" MODIFIED="1735079065872" TEXT="Drp<s>(conf) ⟼ Result"/>
|
||||
<node CREATED="1735078926164" ID="ID_1379676123" MODIFIED="1735079083713" TEXT="trans ≔ s1 ⟼ Drp<s2>"/>
|
||||
<node CREATED="1735079120696" ID="ID_1417520420" MODIFIED="1735079169027" TEXT="flatMap ≔ Drp<s1>(trans) ⟼ Drp<s2>"/>
|
||||
</node>
|
||||
<node CREATED="1735083060482" ID="ID_1667417991" LINK="https://bartoszmilewski.com/2015/05/14/using-monads-in-c-to-solve-constraints-2-the-state-monad/" MODIFIED="1735083086241" TEXT="oft zitiertes Blog zum Thema State-Monad in C++">
|
||||
<node CREATED="1735083142128" ID="ID_838802314" MODIFIED="1735085109564" TEXT="Skizze übersetzt in die Domänen-Sprache">
|
||||
<node CREATED="1735083148933" ID="ID_1603799843" MODIFIED="1735083165272" TEXT="die eigentliche Monade wäre in diesem Fall ein Kontext-abhängiger Builder"/>
|
||||
<node CREATED="1735083170676" ID="ID_1807827438" MODIFIED="1735083184254" TEXT="sie wird als generische Funktion repräsentiert">
|
||||
<node CREATED="1735083224647" ID="ID_357203242" MODIFIED="1735085129523" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">template<class RES> </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">using Builder = function<pair<RES, Ctx>(Ctx)>;</font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735083355115" ID="ID_948018502" MODIFIED="1735083375276" TEXT="das Ausführen des Buildes ist ebenfalls getemplated">
|
||||
<node CREATED="1735083391366" ID="ID_1830633229" MODIFIED="1735085129525" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<pre http-equiv="content-type" content="text/html; charset=utf-8"><font size="2">template<class RES>
|
||||
pair<RES, Ctx>
|
||||
runBuild(Builder<RES> buildr, Ctx c)
|
||||
{
|
||||
return buildr(c);
|
||||
}</font></pre>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735083531244" ID="ID_887291828" MODIFIED="1735084336495">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
eine Anpassung macht aus einem Resultat
|
||||
</p>
|
||||
<p>
|
||||
einen weiteren Kontext-abhängigen Builder
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1735084374346" ID="ID_251054028" MODIFIED="1735085129526" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
template<class R1, class R2>
|
||||
</p>
|
||||
<p>
|
||||
Extension = function<Builder<R2>(R1)>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735084497618" ID="ID_144401469" MODIFIED="1735084520999" TEXT="StM-Bind: erweitert Builder mit Extension">
|
||||
<node CREATED="1735084555112" ID="ID_526318709" MODIFIED="1735085129528" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<pre http-equiv="content-type" content="text/html; charset=utf-8"><font size="2">template<class R1, class R2>
|
||||
auto
|
||||
StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
||||
{
|
||||
return [b1, ext](Ctx c) {
|
||||
pair<R1, Ctx> inter = runBuild(b1, c);
|
||||
Builder<R1> extBuilder = extension(inter.val);
|
||||
return runBuild(extBuilder, inter.ctx);
|
||||
};
|
||||
}</font></pre>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735085155713" ID="ID_91630511" MODIFIED="1735085163604" TEXT="Analyse: was bedeutet das?">
|
||||
<node CREATED="1735085165968" ID="ID_1397898573" MODIFIED="1735085183680" TEXT="JA! das unterlassen die Monaden-Fans immer!!">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1735085211882" ID="ID_376314736" MODIFIED="1735085228875" TEXT="Builder ist ein verpackter Konstruktor">
|
||||
<node CREATED="1735085243326" ID="ID_1544244288" MODIFIED="1735085272422" TEXT="der Context (≙ der State-Type) ist nicht generisch, sondern fest">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1735085301038" ID="ID_1439223805" MODIFIED="1735085321532" TEXT="bedeutet, der Builder leistet noch Context-Access und Fragen der Allokation"/>
|
||||
<node CREATED="1735085388346" ID="ID_1350556446" MODIFIED="1735085410947" TEXT="der Builder ist natürlich spezifisch für den Zieltyp (also wird dafür instantiiert)"/>
|
||||
<node CREATED="1735085347590" ID="ID_1769552863" MODIFIED="1735085367545" TEXT="ein solcher Builder ist in gegebenem Context trivial anwendbar"/>
|
||||
</node>
|
||||
<node CREATED="1735085440371" ID="ID_420114900" MODIFIED="1735085526006" TEXT="Extension ist ein Builder mit Ausgangswert">
|
||||
<node CREATED="1735085528479" ID="ID_300550356" MODIFIED="1735085550992" TEXT="sie nimmt zusätzlch einen Resultat-Wert auseinander"/>
|
||||
<node CREATED="1735085553469" ID="ID_1930370122" MODIFIED="1735085570109" TEXT="diese Auswertung verknüpft sie mit einem beliebigen Kontext"/>
|
||||
<node CREATED="1735085572689" ID="ID_896011841" MODIFIED="1735085598234" TEXT="und außerdem der Kenntis, wie daraus ein anderes Resultat zu machen ist"/>
|
||||
<node BACKGROUND_COLOR="#eec1ad" COLOR="#690f14" CREATED="1735085609627" ID="ID_1025994608" MODIFIED="1735085764429" TEXT="und wie immer: hier ist liegt die Schwachstelle im Design">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1735085636305" ID="ID_927677139" MODIFIED="1735085672458" TEXT="die Extension bricht die Abstraktions-Barrieren"/>
|
||||
<node CREATED="1735085711330" ID="ID_1346895578" MODIFIED="1735085731808" TEXT="sie braucht Innen-Wissen aus beiden Resultat-Wert-Typen"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#160099" CREATED="1735085733579" ID="ID_1305341489" MODIFIED="1735087782829" TEXT="sinnvoll, wenn es einen cross-Builder gibt">
|
||||
<linktarget COLOR="#ffd9d9" DESTINATION="ID_1305341489" ENDARROW="Default" ENDINCLINATION="62;193;" ID="Arrow_ID_430493193" SOURCE="ID_994101136" STARTARROW="None" STARTINCLINATION="707;24;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735086211755" ID="ID_701904422" MODIFIED="1735086229217" TEXT="Eine Lösung müßte ein virtuelles Interface davor setzen">
|
||||
<node CREATED="1735086250846" ID="ID_330636404" MODIFIED="1735086261537" TEXT="der Dropper wird mit einem Builder initialisiert"/>
|
||||
<node CREATED="1735086264140" ID="ID_634535142" MODIFIED="1735086288940" TEXT="der Dropper kann letztlich das Build-Ergebnis in Target-Storage »abwerfen«"/>
|
||||
<node CREATED="1735086318523" ID="ID_1141364327" MODIFIED="1735086335654" TEXT="zur Aktivierung würde man um den Dropper-Aufruf noch eine Context-Closure legen"/>
|
||||
<node CREATED="1735087086515" ID="ID_1646435189" MODIFIED="1735087096913" TEXT="aber an der Extension bricht dieses Schema zusammen">
|
||||
<node CREATED="1735087098644" ID="ID_204548349" MODIFIED="1735087117916" TEXT="man müßte sie durch die äußere Kapsel hindurch »tunneln«"/>
|
||||
<node CREATED="1735087268541" ID="ID_689754717" MODIFIED="1735087401382" TEXT="das Interface hätte einen generischen Scope-opener akzeptieren"/>
|
||||
<node CREATED="1735087321583" ID="ID_439012999" MODIFIED="1735087383473" TEXT="und müßte dann aber innen den vollen Kontext erlangen"/>
|
||||
<node CREATED="1735087428183" ID="ID_1867212718" MODIFIED="1735087436898" TEXT="vielleicht unter Einschränkungen machber"/>
|
||||
<node CREATED="1735087438342" ID="ID_241035152" MODIFIED="1735087822376">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
aber das wäre das <b>eigentliche Problem</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<linktarget COLOR="#e60333" DESTINATION="ID_241035152" ENDARROW="Default" ENDINCLINATION="10;109;" ID="Arrow_ID_933810453" SOURCE="ID_1041065646" STARTARROW="None" STARTINCLINATION="185;0;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1735087456820" ID="ID_1270458115" MODIFIED="1735087757672" TEXT="Bewertung">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1735087483505" ID="ID_1653197556" MODIFIED="1735087508507" TEXT="das Monaden-Pattern ist nicht hilfreich, sondern generiert Komplexität"/>
|
||||
<node CREATED="1735087509988" ID="ID_1096990119" MODIFIED="1735087524290" TEXT="es gaukelt eine Generizität vor, die in der realen Code-Anwendung kaum gegeben ist"/>
|
||||
<node CREATED="1735087525794" ID="ID_994101136" MODIFIED="1735087803059" TEXT="tatsächlich sind Extensions nur für eng verwandte Familien von Ergebnis-Typen möglich">
|
||||
<arrowlink COLOR="#ffd9d9" DESTINATION="ID_1305341489" ENDARROW="Default" ENDINCLINATION="62;193;" ID="Arrow_ID_430493193" STARTARROW="None" STARTINCLINATION="707;24;"/>
|
||||
</node>
|
||||
<node CREATED="1735087582666" ID="ID_79845688" MODIFIED="1735087606371" TEXT="der Umstand, daß aber ein Builder produziert werden muß, ist ausgesprochen schädlich"/>
|
||||
<node CREATED="1735087610229" ID="ID_646462012" MODIFIED="1735087627706" TEXT="denn dadurch werden die »Innereien« der Implementierung zum Interface"/>
|
||||
<node CREATED="1735087632088" ID="ID_1041065646" MODIFIED="1735087830681" TEXT="und am ärgerlichsten ist: die Monaden lösen nicht das eigentliche Abstraktions-Problem">
|
||||
<arrowlink COLOR="#e60333" DESTINATION="ID_241035152" ENDARROW="Default" ENDINCLINATION="10;109;" ID="Arrow_ID_933810453" STARTARROW="None" STARTINCLINATION="185;0;"/>
|
||||
</node>
|
||||
<node CREATED="1735087660504" ID="ID_1110978024" MODIFIED="1735087744965" TEXT="aber sie haben mich dazu verleitet, zwei Stunden ein abstraktes Glasprelen-Spiel zu spielen"/>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1735087462480" ID="ID_617959831" MODIFIED="1735087947887" TEXT="wieder einmal zeigt sich: Monaden sind ein Anti-Pattern">
|
||||
<linktarget COLOR="#8f0248" DESTINATION="ID_617959831" ENDARROW="Default" ENDINCLINATION="-297;13;" ID="Arrow_ID_1098066299" SOURCE="ID_1074716100" STARTARROW="None" STARTINCLINATION="-44;189;"/>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735087957628" ID="ID_275278484" MODIFIED="1735087974193" TEXT="läßt sich die Nuß anderweitig »knacken«?">
|
||||
<node CREATED="1735088084332" ID="ID_763618049" MODIFIED="1735088096557" TEXT="die Monaden-Analyse war aufschlußreich">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1735088098781" ID="ID_695336563" MODIFIED="1735088114699" TEXT="das eigentliche Problem liegt beim Binden des cross-Build">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1735088196944" ID="ID_1162104881" MODIFIED="1735088208625" TEXT="von außen kommt ein beliebiger Parameter-Funktor"/>
|
||||
<node CREATED="1735088504606" ID="ID_377379402" MODIFIED="1735088520521" TEXT="der müßte auf anderem Wege einem direkten Type-Check unterzogen werden"/>
|
||||
<node CREATED="1735088522088" ID="ID_923803280" MODIFIED="1735088542357" TEXT="danach müßte man ihn in eine Transport-Adapter-Template packen"/>
|
||||
<node CREATED="1735088651451" ID="ID_1814236832" MODIFIED="1735088660561" TEXT="und das würde maximal einmal gehen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1735088667424" ID="ID_598416611" MODIFIED="1735089069120" TEXT="Fazit: die Idee ist nicht durchführbar">
|
||||
<linktarget COLOR="#808b95" DESTINATION="ID_598416611" ENDARROW="Default" ENDINCLINATION="-413;31;" ID="Arrow_ID_278502135" SOURCE="ID_214266111" STARTARROW="None" STARTINCLINATION="193;10;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1735088678945" ID="ID_488299231" MODIFIED="1735088762832" TEXT="sie ist grenzwertig komplex">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
insofern hier nämlich bereits akzidentelle Komplexität generiert wird
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1735088698388" ID="ID_83306944" MODIFIED="1735088798351" TEXT="sie gründet nicht in einer unterliegenden Natur der Sache">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Man kann die Struktur zwar extrahieren, aber die extrahierte Version läßt sich nicht sinnvoll in einfachereren Begriffen darstellen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1735088715306" ID="ID_263857744" MODIFIED="1735088861764" TEXT="sie ist nur im speziellen Fall anwendbar und erhöht dessen Komplexität">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...insofern hier Komplexität nicht durch eine Abstraktion reduziert wurde, sondern nur durch Modularisierbarkeit und Zwischenschritte beherrschbarer gemacht wird; aber dies wird durch Generieren zusätzlicher Komplexität erkauft, was den Ansatz insgesamt in Frage stellt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735088890536" ID="ID_1912509930" MODIFIED="1735088910847">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<u>Fazit</u>: <i>bite the bullet...</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<node CREATED="1735088938963" ID="ID_526104668" MODIFIED="1735088951323" TEXT="im Grunde haben wir hier ein N x M - Kontext-Problem"/>
|
||||
<node CREATED="1735088953058" ID="ID_214266111" MODIFIED="1735089069119" TEXT="so etwas läßt sich nicht durch Virtualisierung einkapseln">
|
||||
<arrowlink COLOR="#808b95" DESTINATION="ID_598416611" ENDARROW="Default" ENDINCLINATION="-413;31;" ID="Arrow_ID_278502135" STARTARROW="None" STARTINCLINATION="193;10;"/>
|
||||
</node>
|
||||
<node CREATED="1735088975232" ID="ID_679771852" MODIFIED="1735177124298" TEXT="Erweiterung des getypten Schemas erscheint dem gegenüber als das kleinere Übel"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735179976719" ID="ID_322289273" MODIFIED="1735186473122" TEXT="akzeptiert: das kleinste Übel realisieren">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735180082021" ID="ID_1895704384" MODIFIED="1735186470454" TEXT="Umstellung im WeavingBuilder">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1735180095165" ID="ID_365437797" MODIFIED="1735186464181" TEXT="Funktion auf Prototype heben">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1735180109811" ID="ID_1651523951" MODIFIED="1735186467903" TEXT="diesen als Template-Parameter durchziehen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1735180141362" ID="ID_267016965" MODIFIED="1735187728844" TEXT="cross-ctor zum Wechsel des Prototype coden">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735180184969" ID="ID_1122594888" MODIFIED="1735180355412" TEXT="builder-API: adaptParam (FUN)">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735180359089" ID="ID_1172912698" MODIFIED="1735187755366" TEXT="Umstellung im PortBuilder">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1735181212051" ID="ID_125700986" MODIFIED="1735188770190" TEXT="cross-ctor zum Wechsel des WeavingBuilder">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735181233629" ID="ID_1985191791" MODIFIED="1735181641405" TEXT="builder-API">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1735181285893" ID="ID_922294490" MODIFIED="1735181304690" TEXT="setParam(PAR)">
|
||||
<node CREATED="1735181646685" HGAP="92" ID="ID_537303944" MODIFIED="1735181686682" TEXT="feste dropper-Funktion verwenden" VSHIFT="-1">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735181310482" ID="ID_828844081" MODIFIED="1735181326359" TEXT="retrieveParam(Accessor)">
|
||||
<node CREATED="1735181646685" HGAP="31" ID="ID_1181419965" MODIFIED="1735181823571" TEXT="Parameter aus TurnoutSystem per Accessro abholen">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735181577102" ID="ID_524332742" MODIFIED="1735181609213" TEXT="attachAutomation(AUTO)">
|
||||
<node CREATED="1735181646685" HGAP="30" ID="ID_1875790841" MODIFIED="1735181809869" TEXT="zeitbasierte Funktion adaptieren (Zeit aus Turnoutsystem)">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735181611673" ID="ID_55961674" MODIFIED="1735181622980" TEXT="attachParamFun(FUN)">
|
||||
<node CREATED="1735181646685" HGAP="47" ID="ID_1130785304" MODIFIED="1735181798380" TEXT="beliebige Funktion auf TurnoutSystem" VSHIFT="-1">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720622703868" ID="ID_332813706" MODIFIED="1729962145775" TEXT="in Bausteine zerlegen">
|
||||
|
|
@ -96873,7 +97362,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1728500237115" ID="ID_1324415480" MODIFIED="1728500255724" TEXT="unklar: wo wird die Flexibilität für WeavingPatters eingeführt?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1728500258076" ID="ID_1366737489" MODIFIED="1728500314815" TEXT="ich hab jetzt einen SimpleWeavingPatternBuilder">
|
||||
<node CREATED="1728500258076" ID="ID_1366737489" MODIFIED="1735069723322" TEXT="ich hab jetzt einen SimpleWeavingPatternBuilder">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -96882,6 +97371,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1735069383501" ID="ID_125046801" MODIFIED="1735069460926" TEXT="umbenannt in »WeavingBuilder«">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Das Pattern heißt jetzt auch MediaWeavingPattern und ist zum Standard geworden; der Build-Mechanismus im Port-Builder könnte jedes <i>dazu kompatible Pattern</i>  ebenfalls handhaben
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1728500461049" ID="ID_187214045" MODIFIED="1728500587071" TEXT="die Konvention ist : Turnout baut direkt auf WeavingPattern auf">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -97804,14 +98304,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#7e1ab2" DESTINATION="ID_1750696847" ENDARROW="Default" ENDINCLINATION="266;-492;" ID="Arrow_ID_379194887" STARTARROW="None" STARTINCLINATION="-138;440;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733430838925" ID="ID_1513206906" MODIFIED="1733533298660" TEXT="Exkurs: Einbindung in den Node-Builder betrachten">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733430838925" ID="ID_1513206906" MODIFIED="1735055648443" TEXT="Exkurs: Einbindung in den Node-Builder betrachten">
|
||||
<arrowlink COLOR="#c50127" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-153;535;" ID="Arrow_ID_1374888051" STARTARROW="None" STARTINCLINATION="719;37;"/>
|
||||
<linktarget COLOR="#d20e48" DESTINATION="ID_1513206906" ENDARROW="Default" ENDINCLINATION="-46;111;" ID="Arrow_ID_1518420686" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="84;4;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1733533054398" ID="ID_1712932544" MODIFIED="1733533461389" TEXT="stecke fest — muß mehrere Aspekte gleichzeitig fördern">
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1733533054398" ID="ID_1712932544" MODIFIED="1735055648442" TEXT="stecke fest — muß mehrere Aspekte gleichzeitig fördern">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -97821,8 +98321,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#d20e48" DESTINATION="ID_1513206906" ENDARROW="Default" ENDINCLINATION="-46;111;" ID="Arrow_ID_1518420686" STARTARROW="None" STARTINCLINATION="84;4;"/>
|
||||
<arrowlink COLOR="#d20e48" DESTINATION="ID_1860532476" ENDARROW="Default" ENDINCLINATION="169;-7;" ID="Arrow_ID_1150766303" STARTARROW="None" STARTINCLINATION="117;6;"/>
|
||||
<arrowlink COLOR="#d20e48" DESTINATION="ID_190733802" ENDARROW="Default" ENDINCLINATION="799;-49;" ID="Arrow_ID_1240305866" STARTARROW="None" STARTINCLINATION="788;37;"/>
|
||||
<arrowlink COLOR="#d20e48" DESTINATION="ID_1860532476" ENDARROW="Default" ENDINCLINATION="158;-8;" ID="Arrow_ID_1150766303" STARTARROW="None" STARTINCLINATION="86;4;"/>
|
||||
<arrowlink COLOR="#d20e48" DESTINATION="ID_190733802" ENDARROW="Default" ENDINCLINATION="799;-49;" ID="Arrow_ID_1240305866" STARTARROW="None" STARTINCLINATION="802;37;"/>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -97857,8 +98357,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#fe433f" DESTINATION="ID_481525559" ENDARROW="Default" ENDINCLINATION="1490;75;" ID="Arrow_ID_570772162" STARTARROW="None" STARTINCLINATION="-530;-37;"/>
|
||||
<linktarget COLOR="#f9407e" DESTINATION="ID_1587342377" ENDARROW="Default" ENDINCLINATION="330;471;" ID="Arrow_ID_316456085" SOURCE="ID_635342516" STARTARROW="None" STARTINCLINATION="684;35;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1733532910801" ID="ID_1860532476" MODIFIED="1733533358706" TEXT="brauche unmittelbar als Nächstes ein minimales Turnout-System">
|
||||
<linktarget COLOR="#d20e48" DESTINATION="ID_1860532476" ENDARROW="Default" ENDINCLINATION="169;-7;" ID="Arrow_ID_1150766303" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="117;6;"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1733532910801" ID="ID_1860532476" MODIFIED="1735055624142" TEXT="brauche unmittelbar als Nächstes ein minimales Turnout-System">
|
||||
<linktarget COLOR="#d20e48" DESTINATION="ID_1860532476" ENDARROW="Default" ENDINCLINATION="158;-8;" ID="Arrow_ID_1150766303" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="86;4;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734059376947" ID="ID_603334752" MODIFIED="1734059596013" TEXT="muß Storage-Layout für das Turnout-System festlegen">
|
||||
|
|
@ -99176,8 +99676,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#ce5d7e" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-417;871;" ID="Arrow_ID_386484765" STARTARROW="None" STARTINCLINATION="549;-1534;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733531683777" ID="ID_190733802" MODIFIED="1733533461389" TEXT="einfachen Node ⟷ Parameter - Feed durchspielen">
|
||||
<linktarget COLOR="#d20e48" DESTINATION="ID_190733802" ENDARROW="Default" ENDINCLINATION="799;-49;" ID="Arrow_ID_1240305866" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="788;37;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733531683777" ID="ID_190733802" MODIFIED="1735055629198" TEXT="einfachen Node ⟷ Parameter - Feed durchspielen">
|
||||
<linktarget COLOR="#d20e48" DESTINATION="ID_190733802" ENDARROW="Default" ENDINCLINATION="799;-49;" ID="Arrow_ID_1240305866" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="802;37;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733531749477" ID="ID_811325982" MODIFIED="1733532161164" TEXT="im NodeFeed_test anlegen">
|
||||
<arrowlink COLOR="#fe433f" DESTINATION="ID_1987832971" ENDARROW="Default" ENDINCLINATION="1285;255;" ID="Arrow_ID_284789378" STARTARROW="None" STARTINCLINATION="-530;-37;"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue