wegen/FrOSCon26/FrOSCon.26.mm

6867 lines
445 KiB
Text
Raw Normal View History

<map version="1.0.1">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#805260" COLOR="#fefe2e" CREATED="1715854555555" ID="ID_933253599" MODIFIED="1779385965753" TEXT="FrOSCon.26">
<font NAME="SansSerif" SIZE="25"/>
<node CREATED="1715854555555" HGAP="78" ID="ID_428745769" MODIFIED="1715874319687" POSITION="right" TEXT="Belange" VSHIFT="-39">
<edge COLOR="#6c4d56" STYLE="sharp_linear" WIDTH="8"/>
<font NAME="SansSerif" SIZE="18"/>
<node BACKGROUND_COLOR="#dcbbc2" CREATED="1715854555555" HGAP="24" ID="ID_559416955" MODIFIED="1784566328198" TEXT="IO-Performance" VSHIFT="5">
<edge STYLE="bezier" WIDTH="thin"/>
<font NAME="SansSerif" SIZE="14"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1715854555555" MODIFIED="1747438875544" TEXT="Technologie"/>
<node CREATED="1753973965221" ID="ID_842795834" MODIFIED="1784566357637" TEXT="Performance und Architektur"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1747438884353" ID="ID_1133637665" MODIFIED="1747438884353" TEXT="Bedeutung f&#xfc;r Lumiera"/>
</node>
<node BACKGROUND_COLOR="#dcbbc2" CREATED="1715854555555" HGAP="42" ID="ID_1213263689" MODIFIED="1715877026719" TEXT="Abstraktion" VSHIFT="30">
<edge STYLE="bezier" WIDTH="thin"/>
<font NAME="SansSerif" SIZE="14"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1715854555555" ID="ID_1730205402" MODIFIED="1779390037214" TEXT="von der Hardware"/>
<node CREATED="1779390039794" ID="ID_1019722333" MODIFIED="1779390044206" TEXT="von der Art des IO"/>
<node CREATED="1715854555555" ID="ID_389121882" MODIFIED="1779390030255" TEXT="vom eigentlichen &#xbb;Processing&#xab;"/>
<node BACKGROUND_COLOR="#e7c3af" COLOR="#473b63" CREATED="1519417851534" HGAP="-20" ID="ID_1150247401" MODIFIED="1747439110178" STYLE="bubble" TEXT="Standards" VSHIFT="12">
<edge COLOR="#6c4d56" STYLE="sharp_linear" WIDTH="8"/>
<font NAME="SansSerif" SIZE="14"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1715854555555" HGAP="23" ID="ID_1138529115" MODIFIED="1779390131168" STYLE="fork" TEXT="POSIX" VSHIFT="-9"/>
<node CREATED="1784563057064" ID="ID_55075183" MODIFIED="1784563065425" STYLE="fork" TEXT="Linux-Kernel">
<edge COLOR="#6c4d56" STYLE="sharp_linear" WIDTH="8"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#dcbbc2" CREATED="1715854555555" HGAP="-57" ID="ID_527022244" MODIFIED="1715874549803" STYLE="fork" TEXT="C++" VSHIFT="30">
<edge WIDTH="2"/>
<font NAME="SansSerif" SIZE="14"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1747439047265" ID="ID_662951376" MODIFIED="1747439047265" TEXT="(kommt nur nebenbei vor)">
<edge WIDTH="1"/>
2026-05-12 11:36:16 +02:00
<font NAME="SansSerif" SIZE="10"/>
</node>
<node CREATED="1784563118672" ID="ID_839209616" MODIFIED="1784563125392" TEXT="Thread-Objekt">
<font NAME="SansSerif" SIZE="11"/>
</node>
<node CREATED="1784563104810" ID="ID_454931113" MODIFIED="1784563109808" TEXT="Atomics">
<font NAME="SansSerif" SIZE="11"/>
</node>
</node>
</node>
<node CREATED="1715854555555" HGAP="74" ID="ID_771205809" MODIFIED="1715874309904" POSITION="right" TEXT="Reflexion" VSHIFT="-44">
<edge COLOR="#7e7186"/>
<font NAME="SansSerif" SIZE="17"/>
<node CREATED="1715854555555" ID="ID_1168173743" MODIFIED="1519329040320" TEXT="Technik">
<node CREATED="1784566743858" ID="ID_374363115" MODIFIED="1784566748447" TEXT="Verwendung von KI">
<node CREATED="1784566749890" ID="ID_208298802" MODIFIED="1784566821115" TEXT="Leitlinien nach Alexandrescu">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
hab daf&#252;r zwar keinen Beleg (jenseits von ein paar Videos), aber ich nehme hier den Namen &#187;Alexandrescu&#171; in Gebrauch, um etwas &#8212; f&#252;r sich selbst plausibles &#8212; auch mit Autorit&#228;t sagen zu k&#246;nnen
</p>
</body>
</html></richcontent>
<node CREATED="1784566823896" ID="ID_1457616626" MODIFIED="1784566828803" TEXT="Unterscheidung in...">
<node CREATED="1784566829625" ID="ID_283682996" MODIFIED="1784566831091" TEXT="Skills"/>
<node CREATED="1784566831655" ID="ID_1320868791" MODIFIED="1784566834042" TEXT="Judgement"/>
<node CREATED="1784566834550" ID="ID_694348524" MODIFIED="1784566840961" TEXT="Souvereignty"/>
</node>
<node CREATED="1784567051770" ID="ID_36575399" MODIFIED="1784567061029" TEXT="jeweils andere Bewertung">
<node CREATED="1784567062393" ID="ID_332288613" MODIFIED="1784567064332" TEXT="Skills">
<node CREATED="1784567083774" ID="ID_110763252" MODIFIED="1784567094200" TEXT="ja bitte: das macht meinen Kopf frei"/>
<node CREATED="1784567098416" ID="ID_964854209" MODIFIED="1784567106129" TEXT="Unterscheidung in akzidentell und essentiell"/>
<node CREATED="1784567107585" ID="ID_1211872922" MODIFIED="1784567121717" TEXT="Warnung: K&#xf6;nnen ist mehr als Skills"/>
</node>
<node CREATED="1784567155446" ID="ID_1100918798" MODIFIED="1784567157740" TEXT="Judgement">
<node CREATED="1784567139230" ID="ID_726520374" MODIFIED="1784567163883" TEXT="nur wer urteilt, handelt auch souver&#xe4;n"/>
<node CREATED="1784567201879" ID="ID_825565061" MODIFIED="1784567210983" TEXT="Problem des vorgefilterten Materials"/>
<node CREATED="1784567243065" ID="ID_1813766879" MODIFIED="1784567250976" TEXT="Erhalt / Verlust der Urteilsf&#xe4;higkeit"/>
<node CREATED="1784567212609" ID="ID_1049223344" MODIFIED="1784567234514" TEXT="wirtschaftliches Interesse der AI-Anbieter"/>
</node>
<node CREATED="1784567267413" ID="ID_67392304" MODIFIED="1784567275479" TEXT="Souvereignty">
<node CREATED="1784567291765" ID="ID_1362776552" MODIFIED="1784567302602" TEXT="ein industrieller Proze&#xdf; kann nicht">
<node CREATED="1784567303404" ID="ID_271579706" MODIFIED="1784567306761" TEXT="sourver&#xe4;n sein"/>
<node CREATED="1784567307184" ID="ID_858535324" MODIFIED="1784567309618" TEXT="kreativ sein"/>
</node>
<node CREATED="1784567318943" ID="ID_1299879395" MODIFIED="1784567339272" TEXT="Warnung: Dinge geschehen auch ohne Verantwortung"/>
</node>
</node>
</node>
<node CREATED="1784567432248" ID="ID_994172012" MODIFIED="1784567435091" TEXT="konkret">
<node CREATED="1784567441015" ID="ID_1119875937" MODIFIED="1784567454153" TEXT="zum Festigen / validieren des eigenen Verst&#xe4;ndnisses"/>
<node CREATED="1784567466473" ID="ID_1747016910" MODIFIED="1784567480853" TEXT="das Verst&#xe4;ndnis habe ich mir selber angeeignet"/>
<node CREATED="1784567481729" ID="ID_614997506" MODIFIED="1784567503442" TEXT="zum Validieren des Code"/>
</node>
</node>
<node CREATED="1784567657618" ID="ID_1237182396" MODIFIED="1784567668996" TEXT="Abstraktion ist die Gestaltungsebene">
<node CREATED="1784567673889" ID="ID_797613979" MODIFIED="1784567683915" TEXT="erst auf Grund eines Begriffs erscheint eine &#xbb;Technologie&#xab;"/>
<node CREATED="1784567712530" ID="ID_723842623" MODIFIED="1784567729140" TEXT="wir k&#xf6;nnen den Aufwand zur Video-Verarbeitung (praktisch) nicht &#xe4;ndern"/>
<node CREATED="1784567730384" ID="ID_1417794561" MODIFIED="1784567741435" TEXT="aber durch Abstraktion k&#xf6;nnen wir ihn gliedern"/>
<node CREATED="1784567752745" ID="ID_1176340721" MODIFIED="1784567769924" TEXT="und dann so anornen, da&#xdf; er weniger st&#xf6;rt"/>
</node>
</node>
<node CREATED="1785790228608" ID="ID_1967437025" MODIFIED="1785790231541" TEXT="Darstellung">
<node CREATED="1785790274888" ID="ID_642718439" MODIFIED="1785790618638" TEXT="Target-Audience beachten">
<arrowlink COLOR="#9c3f50" DESTINATION="ID_1612420528" ENDARROW="Default" ENDINCLINATION="-1002;67;" ID="Arrow_ID_1857563368" STARTARROW="None" STARTINCLINATION="-316;34;"/>
<node CREATED="1785790624736" ID="ID_942453754" MODIFIED="1785790659474" TEXT="mu&#xdf; annehmen da&#xdf; Denkweisen der systemnahen Programmierung nicht bekannt sind"/>
<node CREATED="1785790662323" ID="ID_337982910" MODIFIED="1785790682620" TEXT="kann aber keine Einf&#xfc;hrung geben (systematisch gar nicht m&#xf6;glich)"/>
<node CREATED="1785790692615" ID="ID_1452357773" MODIFIED="1785790710776" TEXT="also: &#x201e;ich la&#xdf; euch mal zuschauen....&#x201c;"/>
</node>
<node CREATED="1785790716243" ID="ID_1869514045" MODIFIED="1785790725942" TEXT="mu&#xdf; &#xbb;Synchronisation&#xab; eigens behandeln">
<node CREATED="1785791037159" ID="ID_396828809" MODIFIED="1785791086458" TEXT="hier &#xbb;trennt sich die Spreu vom Weizen&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
die allermeisten Entwickler heutzutage gehen niemals &#252;ber diese Schwelle, und verstecken sich deshalb hinter Frameworks
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785791092863" ID="ID_709044928" MODIFIED="1785791103479" TEXT="es ist viel Halbwissen unterwegs"/>
</node>
<node CREATED="1786698370507" ID="ID_716430210" MODIFIED="1786698395274" TEXT="Charakter des Vortrags">
<node CREATED="1786698400516" ID="ID_284718896" MODIFIED="1786698416899" TEXT="mich selber interessieren die Hintergr&#xfc;nde und die Historie"/>
<node CREATED="1786698417501" ID="ID_74513394" MODIFIED="1786698436512" TEXT="mu&#xdf; mich aber entscheiden, wo der Fokus liegen soll"/>
<node CREATED="1786698441301" ID="ID_1640436512" MODIFIED="1786698454442" TEXT="es ist ein technischer Vortrag"/>
</node>
</node>
<node CREATED="1715854555555" ID="ID_364372421" MODIFIED="1519335105159" TEXT="Fazit"/>
</node>
<node CREATED="1715854555555" HGAP="138" ID="ID_757112290" MODIFIED="1527787200581" POSITION="right" TEXT="Darstellung" VSHIFT="-22">
<edge COLOR="#7b8885"/>
<font NAME="SansSerif" SIZE="16"/>
2024-08-04 02:41:20 +02:00
<node CREATED="1519424889703" ID="ID_1477284495" MODIFIED="1722708303049" TEXT="Grunds&#xe4;tzlich">
<icon BUILTIN="yes"/>
<node CREATED="1519424938729" ID="ID_688989453" MODIFIED="1715874616706" TEXT="&#xbb;Talk&#xab; als Vehikel"/>
2024-08-04 02:41:20 +02:00
<node CREATED="1519425448059" ID="ID_344656292" MODIFIED="1519425453814" TEXT="Praxisbezug">
<node CREATED="1722708535603" ID="ID_1204885318" MODIFIED="1722708542791" TEXT="aus der Lumiera-Perspektive"/>
</node>
<node CREATED="1519425879744" ID="ID_1987605642" MODIFIED="1519425882372" TEXT="Wahl der Mittel"/>
<node CREATED="1519425753818" ID="ID_200898453" MODIFIED="1519425756709" TEXT="warum?"/>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1519424925243" ID="ID_682027982" MODIFIED="1779389615639" TEXT="praktisch">
2024-08-04 02:41:20 +02:00
<node CREATED="1715854555555" ID="ID_1744615753" MODIFIED="1715874648194" TEXT="Lehrinhalte">
2026-05-12 11:36:16 +02:00
<node CREATED="1753974773937" ID="ID_822499250" MODIFIED="1753974783564" TEXT="Relevanz f&#xfc;r das Projekt Lumiera">
<node CREATED="1753974784407" ID="ID_106644152" MODIFIED="1753974789133" TEXT="das ist &#xbb;Praxisbezug&#xab;"/>
<node CREATED="1753974790338" ID="ID_427472155" MODIFIED="1753974798090" TEXT="das ist &#xbb;eigene Erfahrung&#xab;"/>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1753975282862" ID="ID_1757272422" MODIFIED="1779389374566" TEXT="Architektur: ...?">
<node CREATED="1753975296740" ID="ID_1229595667" MODIFIED="1779389390772" TEXT="IO_URING"/>
<node CREATED="1753975302291" ID="ID_1562905270" MODIFIED="1753975307006" TEXT="abstraction Framework"/>
<node CREATED="1785873471495" ID="ID_1844672094" MODIFIED="1785873481578" TEXT="Concurrency-Handling">
<node CREATED="1785873482817" ID="ID_1213566083" MODIFIED="1785873484524" TEXT="blocking"/>
<node CREATED="1785873485001" ID="ID_1375952117" MODIFIED="1785873487660" TEXT="event-driven"/>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1753975557742" ID="ID_733136201" MODIFIED="1753975561997" TEXT="Praxis im Code"/>
</node>
<node CREATED="1519521080183" ID="ID_253640421" MODIFIED="1519521081842" TEXT="Mittel">
2026-08-02 23:38:55 +02:00
<node CREATED="1785515659791" ID="ID_1262937735" MODIFIED="1785515663585" TEXT="Gedankengang">
2026-08-08 19:40:17 +02:00
<node CREATED="1786156758932" ID="ID_781149210" MODIFIED="1786156764677" TEXT="Prelude">
<node CREATED="1786156767642" ID="ID_1127097126" MODIFIED="1786156771804" TEXT="Topic"/>
<node CREATED="1786156772634" ID="ID_1608112104" MODIFIED="1786156783282" TEXT="Who am I"/>
<node CREATED="1786156786895" ID="ID_1516545730" MODIFIED="1786156791162" TEXT="AI disclaimer">
<node CREATED="1786156872900" ID="ID_687119701" MODIFIED="1786156877220" TEXT="Guidelines"/>
<node CREATED="1786156878036" ID="ID_884500525" MODIFIED="1786156883143" TEXT="...use it as a tool"/>
</node>
</node>
2026-08-02 23:38:55 +02:00
<node CREATED="1785515665342" ID="ID_1643067839" MODIFIED="1785515729272" TEXT="medium level of Abstraction">
2026-08-08 19:40:17 +02:00
<node CREATED="1786157022704" ID="ID_1094582146" MODIFIED="1786157025119" TEXT="Lumiera">
<node CREATED="1786157027743" ID="ID_730322696" MODIFIED="1786157036970" TEXT="fundamental forces"/>
</node>
2026-08-02 23:38:55 +02:00
<node CREATED="1785599636582" ID="ID_1570272732" MODIFIED="1785599641523" TEXT="Werkzeug vs. Magie"/>
</node>
<node CREATED="1785529009319" ID="ID_666300991" MODIFIED="1785529017680" TEXT="challenges for the Engine">
<node CREATED="1785529050905" ID="ID_1817298475" MODIFIED="1785529058311" TEXT="works on externally defined functions"/>
<node CREATED="1785529059032" ID="ID_520924845" MODIFIED="1785529069418" TEXT="ability to adapt to a wide array of workloads"/>
<node CREATED="1785529136546" ID="ID_683496348" MODIFIED="1785529146225" TEXT="video genuinely pushes the resource limits">
<node CREATED="1785529155661" ID="ID_813016213" MODIFIED="1785529170674" TEXT="want realtime playback"/>
<node CREATED="1785529171087" ID="ID_1945346295" MODIFIED="1785529186416" TEXT="want speedy response to new arrangements"/>
<node CREATED="1785529228286" ID="ID_1074909901" MODIFIED="1785529301885" TEXT="integrate very expensive workloads">
<richcontent TYPE="NOTE"><html>
<head/>
2026-08-02 23:38:55 +02:00
<body>
<p>
raw video with very high quality parameters; elaborate processing stack
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785529194890" ID="ID_867201114" MODIFIED="1785529203165" TEXT="final render &#xbb;whatever it takes&#xab;"/>
</node>
<node CREATED="1785529505469" ID="ID_1497323994" MODIFIED="1785536866820" TEXT="need to make optimum use of available resources">
<arrowlink COLOR="#b5798f" DESTINATION="ID_1741961815" ENDARROW="Default" ENDINCLINATION="11;-53;" ID="Arrow_ID_1096002944" STARTARROW="None" STARTINCLINATION="-36;2;"/>
</node>
</node>
<node CREATED="1785529519744" ID="ID_1741961815" MODIFIED="1785536866821" TEXT="IO is a &#xbb;problematic&#xab; resource">
<linktarget COLOR="#b5798f" DESTINATION="ID_1741961815" ENDARROW="Default" ENDINCLINATION="11;-53;" ID="Arrow_ID_1096002944" SOURCE="ID_1497323994" STARTARROW="None" STARTINCLINATION="-36;2;"/>
<node CREATED="1785532899143" ID="ID_1890999305" MODIFIED="1785532922496" TEXT="it is slow and incurs a latency"/>
<node CREATED="1785533358620" ID="ID_1694879440" MODIFIED="1785533393372" TEXT="per-operation overhead socket">
<node CREATED="1785537258194" ID="ID_1088420501" MODIFIED="1785537269308" TEXT="not a problem for video!">
<node CREATED="1785542147326" ID="ID_1275575785" MODIFIED="1785542187640" TEXT="sogar 1&#xb5;s base-overhead gg&#xfc; Video-Ladezeit vernachl&#xe4;ssigbar">
<arrowlink DESTINATION="ID_1484840847" ENDARROW="Default" ENDINCLINATION="354;0;" ID="Arrow_ID_1162802737" STARTARROW="None" STARTINCLINATION="354;0;"/>
</node>
</node>
<node CREATED="1785537278879" ID="ID_764170749" MODIFIED="1785537289170" TEXT="(a huge problem for &#xbb;high performance computing&#xab;)"/>
</node>
<node CREATED="1785536511631" ID="ID_386621919" MODIFIED="1785536527131" TEXT="it is much complexer than the &quot;compute&quot; resource"/>
<node CREATED="1785536628567" ID="ID_691329457" MODIFIED="1785536634852" TEXT="&quot;fast/slow&quot; has several meanings">
<node CREATED="1785536636095" ID="ID_1223111520" MODIFIED="1785536642362" TEXT="latency"/>
<node CREATED="1785536642789" ID="ID_1102557442" MODIFIED="1785536645177" TEXT="throughput"/>
</node>
<node CREATED="1785536700998" ID="ID_11855738" MODIFIED="1785536710760" TEXT="&#xbb;it depends&#xab; ...">
<node CREATED="1785536715500" ID="ID_646192226" MODIFIED="1785536719630" TEXT="on your hardware"/>
<node CREATED="1785536721342" ID="ID_1755209104" MODIFIED="1785536729190" TEXT="on your storage layout"/>
<node CREATED="1785536736958" ID="ID_1374227648" MODIFIED="1785536743780" TEXT="on your access pattern"/>
<node CREATED="1785536730625" ID="ID_236266370" MODIFIED="1785536735037" TEXT="on your workload"/>
</node>
<node CREATED="1785536824101" ID="ID_1079884915" MODIFIED="1785536862949" TEXT="it is hard to predict">
<node CREATED="1785536972681" ID="ID_1949008167" MODIFIED="1785536983538" TEXT="essential element of randomness"/>
<node CREATED="1785536984340" ID="ID_276218021" MODIFIED="1785537061148" TEXT="unable to resolve the matter once and for all"/>
</node>
<node CREATED="1785537107740" ID="ID_1255119744" MODIFIED="1785537135326" TEXT="and especially for Video &#x27f6; a new twist...."/>
<node CREATED="1785536747451" ID="ID_1634555006" MODIFIED="1785537079438">
<richcontent TYPE="NODE"><html>
<head/>
2026-08-02 23:38:55 +02:00
<body>
<p>
I/O is no longer slow &#8212; and <i>that's the problem</i>
</p>
</body>
</html></richcontent>
<icon BUILTIN="forward"/>
<node CREATED="1785540858945" ID="ID_1359436378" MODIFIED="1785540863746" TEXT="Bandwidth">
<icon BUILTIN="info"/>
<node CREATED="1785540874121" ID="ID_1733255783" MODIFIED="1785540916335" TEXT="NVMe ~ 7 GiB/s"/>
<node CREATED="1785540892886" ID="ID_698816863" MODIFIED="1785540922469" TEXT="DDR5 ~ 90 GiB/s"/>
</node>
<node CREATED="1785541397547" ID="ID_364431196" MODIFIED="1785541408054" TEXT="Vergleich: 4K">
<node CREATED="1785541409169" ID="ID_556854915" MODIFIED="1785541429091" TEXT="DCI 4k 4096 x 2160"/>
<node CREATED="1785541436642" ID="ID_1680232952" MODIFIED="1785541589371" TEXT="mit RGB888 &#x27fc; 25 MiB / Frame">
<node CREATED="1785541687304" ID="ID_1676765595" MODIFIED="1785541723508" TEXT="60 fps &#x27f9; 1.5 GiB/s"/>
<node CREATED="1785542087596" ID="ID_1484840847" MODIFIED="1785542187639" TEXT="mit 7GiB/s lesen &#x27f9; 3ms">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1484840847" ENDARROW="Default" ENDINCLINATION="354;0;" ID="Arrow_ID_1162802737" SOURCE="ID_1275575785" STARTARROW="None" STARTINCLINATION="354;0;"/>
</node>
</node>
<node CREATED="1785541595608" ID="ID_677420837" MODIFIED="1785541636767" TEXT="mit float &#x27fc; 101 MiB / Frame">
<node CREATED="1785541687304" ID="ID_1509002797" MODIFIED="1785541757374" TEXT="60 fps &#x27f9; 6 GiB/s"/>
<node CREATED="1785541997260" ID="ID_1155174606" MODIFIED="1785542028686" TEXT="mit 7GiB/s lesen &#x27f9; 14ms"/>
</node>
</node>
</node>
2026-08-09 05:39:17 +02:00
<node CREATED="1786235664313" ID="ID_1678569803" MODIFIED="1786235696451" TEXT="what is &#xbb;fast&#xab; and what &#xbb;slow&#xab; &#x27f9; Time-Scales"/>
2026-08-08 19:40:17 +02:00
</node>
2026-08-02 23:38:55 +02:00
<node CREATED="1785540830071" ID="ID_126092826" MODIFIED="1785540836160" TEXT="architectural challenge">
<node CREATED="1785542295608" ID="ID_676687623" MODIFIED="1785542315834" TEXT="IO invades my control-flow">
<node CREATED="1785542396212" ID="ID_1797843757" MODIFIED="1785542404854" TEXT="either need to probe / poll"/>
<node CREATED="1785542405936" ID="ID_949476633" MODIFIED="1785542417347" TEXT="or must block the current thread"/>
</node>
<node CREATED="1785542432341" ID="ID_1067200531" MODIFIED="1785542443730" TEXT="handling creates &#xbb;accidental overhead&#xab;"/>
<node CREATED="1785542478790" ID="ID_838635997" MODIFIED="1785542502119" TEXT="IO itself is essentially event-driven (&#x201e;it happens&#x201c;)"/>
<node CREATED="1785542547519" ID="ID_1520387415" MODIFIED="1785542569238" TEXT="&#xbb;impedance mismatch&#xab; &#x27f8; want compute pinned to a core">
<node CREATED="1785599737024" ID="ID_1478881270" MODIFIED="1785599744571" TEXT="flexibility vs. efficiency"/>
<node CREATED="1785600529079" ID="ID_393752919" MODIFIED="1785600539181" TEXT="need ramp-up / build-up for full flow"/>
</node>
<node CREATED="1785601245374" ID="ID_801472665" MODIFIED="1785601467405" TEXT="solution patterns">
2026-08-09 20:28:35 +02:00
<node CREATED="1785601495587" ID="ID_552392404" MODIFIED="1786272784191" TEXT="block in a thread / process"/>
2026-08-02 23:38:55 +02:00
<node CREATED="1785601569001" ID="ID_1908019994" MODIFIED="1785601575268" TEXT="avoid the blocking">
<node CREATED="1785601583807" ID="ID_754796770" MODIFIED="1785601587157" TEXT="readyness event"/>
</node>
<node CREATED="1785601798675" ID="ID_1860490804" MODIFIED="1785601806705" TEXT="IO task queue"/>
</node>
<node CREATED="1785601843906" ID="ID_1688529004" MODIFIED="1785601855431" TEXT="History: *Nix went through all these models"/>
</node>
<node CREATED="1785601935896" ID="ID_1964454408" MODIFIED="1785601944523" TEXT="io_uring">
<node CREATED="1785601962204" ID="ID_59657788" MODIFIED="1785601996195" TEXT="use a task- / completion-queue + shared memory"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1785602005678" ID="ID_275046077" MODIFIED="1785602012977" TEXT="history notes">
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1785602041778" ID="ID_1779319260" MODIFIED="1785602047093" TEXT="Kernel-Interface">
<node CREATED="1785602053092" ID="ID_1692363311" MODIFIED="1785602068993" TEXT="use fixed-size ringbuffers as queue(s)">
<node CREATED="1785602108461" ID="ID_72233951" MODIFIED="1785602121154" TEXT="one pair of ringbuffers per client"/>
<node CREATED="1785602733156" ID="ID_1651891538" MODIFIED="1785602814687" TEXT="allocates a file descriptor &#x27f6; mmap">
<arrowlink COLOR="#4283d0" DESTINATION="ID_1040502252" ENDARROW="Default" ENDINCLINATION="-1335;138;" ID="Arrow_ID_733993173" STARTARROW="None" STARTINCLINATION="-1836;143;"/>
</node>
<node CREATED="1785602165001" ID="ID_412534455" MODIFIED="1785602840264" TEXT="ringbuffers themselves then memory-mapped"/>
<node CREATED="1785602848781" ID="ID_974532447" MODIFIED="1785602866207" TEXT="need additional array(ring) for the task descriptors"/>
</node>
<node CREATED="1785602922050" ID="ID_1946136235" MODIFIED="1785602933541" TEXT="entries are identified by a user-data-item">
<node CREATED="1785602942794" ID="ID_318135348" MODIFIED="1785602957826" TEXT="for the kernel this is just 64 bits of &quot;data&quot;"/>
<node CREATED="1785602958693" ID="ID_642407618" MODIFIED="1785603251644" TEXT="typically used as pointer to a user data structure">
<linktarget COLOR="#56708e" DESTINATION="ID_642407618" ENDARROW="Default" ENDINCLINATION="90;-2;" ID="Arrow_ID_1573446115" SOURCE="ID_1067541050" STARTARROW="None" STARTINCLINATION="59;-51;"/>
</node>
</node>
<node CREATED="1785603120095" ID="ID_1112982012" MODIFIED="1785603132986" TEXT="task descriptors closely model classical syscalls">
<node CREATED="1785603150634" ID="ID_1480355885" MODIFIED="1785603156851" TEXT="use an operation enum"/>
<node CREATED="1785603157843" ID="ID_163376697" MODIFIED="1785603173181" TEXT="an argument struct packaged into unions">
<node CREATED="1785603230896" ID="ID_1067541050" MODIFIED="1785704534731" TEXT="typically points to buffers in the user data structure">
<arrowlink COLOR="#56708e" DESTINATION="ID_642407618" ENDARROW="Default" ENDINCLINATION="90;-2;" ID="Arrow_ID_1573446115" STARTARROW="None" STARTINCLINATION="59;-51;"/>
<linktarget COLOR="#3e82d2" DESTINATION="ID_1067541050" ENDARROW="Default" ENDINCLINATION="-81;56;" ID="Arrow_ID_1019312277" SOURCE="ID_108376946" STARTARROW="None" STARTINCLINATION="256;11;"/>
</node>
</node>
<node CREATED="1785603183194" ID="ID_1329826695" MODIFIED="1785603195130" TEXT="various file-io, filesystem, network calls"/>
</node>
<node CREATED="1785704498484" ID="ID_108376946" MODIFIED="1785704541669" TEXT="buffers mapped both in kernel framecache and user process space">
<arrowlink COLOR="#3e82d2" DESTINATION="ID_1067541050" ENDARROW="Default" ENDINCLINATION="-81;56;" ID="Arrow_ID_1019312277" STARTARROW="None" STARTINCLINATION="256;11;"/>
</node>
</node>
<node CREATED="1785705815835" ID="ID_504616668" MODIFIED="1785705818783" TEXT="to sumarise">
<node CREATED="1785705821011" ID="ID_1854307613" MODIFIED="1785705828962" TEXT="making syscalls without making syscalls"/>
<node CREATED="1785705851079" ID="ID_940195568" MODIFIED="1785705861164" TEXT="this started a security nightmare..."/>
</node>
<node CREATED="1785704790653" ID="ID_128934103" MODIFIED="1785704794292" TEXT="liburing">
<node CREATED="1785704811468" ID="ID_1557206431" MODIFIED="1785704817443" TEXT="a thin abstraction layer"/>
<node CREATED="1785704817964" ID="ID_1807949358" MODIFIED="1785704828892" TEXT="much more programmer friendly interface">
<node CREATED="1785704841403" ID="ID_547397514" MODIFIED="1785704852395" TEXT="need not setup the uring-memmap"/>
<node CREATED="1785704854244" ID="ID_1424784115" MODIFIED="1785704873620" TEXT="don&apos;t have to deal with data structure defined by offsets"/>
<node CREATED="1785704890752" ID="ID_875859220" MODIFIED="1785704899628" TEXT="can just &#xbb;open&#xab; an uring with a given size + flags"/>
<node CREATED="1785704965841" ID="ID_1668911479" MODIFIED="1785704991917" TEXT="have &#xbb;API functions&#xab; to fill a submission-queue-entry"/>
<node CREATED="1785705012980" ID="ID_1546976264" MODIFIED="1785705026013" TEXT="can just &#xbb;peek&#xab; or &#xbb;block&#xab; on the completion-queue"/>
<node CREATED="1785705043965" ID="ID_1838399356" MODIFIED="1785705096946" TEXT="no need to care for proper synchronisation primitives">
<arrowlink COLOR="#664699" DESTINATION="ID_18400385" ENDARROW="Default" ENDINCLINATION="87;6;" ID="Arrow_ID_1410855342" STARTARROW="None" STARTINCLINATION="-20;76;"/>
</node>
</node>
<node CREATED="1785705062174" ID="ID_18400385" MODIFIED="1785705089498" TEXT="but should understand what happens here">
<linktarget COLOR="#664699" DESTINATION="ID_18400385" ENDARROW="Default" ENDINCLINATION="87;6;" ID="Arrow_ID_1410855342" SOURCE="ID_1838399356" STARTARROW="None" STARTINCLINATION="-20;76;"/>
</node>
</node>
</node>
<node CREATED="1785705128951" ID="ID_53113943" MODIFIED="1785873608525" TEXT="Synchronisation">
2026-08-02 23:38:55 +02:00
<node CREATED="1785705215460" ID="ID_1041446652" MODIFIED="1785705218215" TEXT="two meanings">
<node CREATED="1785705219604" ID="ID_235422789" MODIFIED="1785705224583" TEXT="control-flow correlation"/>
<node CREATED="1785705225235" ID="ID_845381194" MODIFIED="1785705228894" TEXT="visibility management">
2026-08-09 05:39:17 +02:00
<node COLOR="#5b280f" CREATED="1785705991375" ID="ID_347714238" MODIFIED="1786245015452" TEXT="visibility?? &#x27f9; NUMA !!">
<icon BUILTIN="button_cancel"/>
2026-08-09 20:28:35 +02:00
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1786245032571" ID="ID_1765938120" MODIFIED="1786273389235" STYLE="fork" TEXT="NUMA schie&#xdf;t hier &#xfc;ber das Ziel hinaus">
2026-08-09 05:39:17 +02:00
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1786245051584" ID="ID_829978590" MODIFIED="1786245480820" TEXT="(wir brauchen keine mehrfach-Sockets oder chiplets)">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
allein der Umstand da&#223; Cores direkt an einem Cache h&#228;ngen, gen&#252;gt, um die Notwendigkeit der Synchronisation aufzuzeigen ... daher ist das Schl&#252;sselwort auch &quot;cache-coherence&quot;
</p>
</body>
</html></richcontent>
2026-08-09 05:39:17 +02:00
<node CREATED="1786245489365" ID="ID_763564504" MODIFIED="1786245499980" TEXT="Englisch: coherence, nicht coherency">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
<node CREATED="1786245028814" ID="ID_1433367293" MODIFIED="1786245029751" TEXT="visibility?? &#x27f9; cache-coherency !!"/>
2026-08-02 23:38:55 +02:00
</node>
</node>
2026-08-09 20:28:35 +02:00
<node CREATED="1785706316326" ID="ID_38548076" MODIFIED="1786273141705" TEXT="to ensure all participants see the memory effects">
2026-08-02 23:38:55 +02:00
<node CREATED="1785706694686" ID="ID_901414504" MODIFIED="1785706698803" TEXT="several adversaries">
<node CREATED="1785706699637" ID="ID_1878103644" MODIFIED="1785706706118" TEXT="NUMA and cache effects"/>
<node CREATED="1785706706741" ID="ID_1718358728" MODIFIED="1785706719263" TEXT="the Compiler / Optimiser"/>
</node>
</node>
<node CREATED="1785706612483" ID="ID_1663361337" MODIFIED="1785706623541" TEXT="use abstractions to describe what is needed">
<node CREATED="1785706639886" ID="ID_1744235557" MODIFIED="1785706644658" TEXT="a barrier / fence">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1785788524638" ID="ID_1954156183" MODIFIED="1785788529676" TEXT="ambiguity">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1785788536375" ID="ID_1664468875" MODIFIED="1785788543946" TEXT="barrier is used in two flavours">
<node CREATED="1785788545065" ID="ID_615184502" MODIFIED="1785788558771" TEXT="synchronisation barrier &#x27f9; a control-flow device"/>
<node CREATED="1785788560407" ID="ID_902009764" MODIFIED="1785788570172" TEXT="memory barrier: synonymous to &quot;fence&quot;"/>
</node>
<node CREATED="1785788228092" ID="ID_1833234694" MODIFIED="1785788240158" TEXT="fence is used in two meanings">
<node CREATED="1785788486161" ID="ID_1563041065" MODIFIED="1785788507616" TEXT="&quot;fence&quot; in OS literature: a hardware supported primitive"/>
<node CREATED="1785788262637" ID="ID_293253681" MODIFIED="1785788483923" TEXT="std::atomic_thread_fence &#x27f9; a standarlone version of atomic ordering"/>
</node>
</node>
<node CREATED="1785788597320" ID="ID_612417499" LINK="#ID_1041458587" MODIFIED="1785788689382" TEXT="typically related to hardware / ISA"/>
</node>
<node CREATED="1785706645606" ID="ID_1006949995" MODIFIED="1785706652761" TEXT="an atomic with memory-order">
<node CREATED="1785791118824" ID="ID_140629594" MODIFIED="1785791139325" TEXT="a conceptual tool of the language standard (C++)"/>
<node CREATED="1785791141122" ID="ID_1377087178" MODIFIED="1785791155253" TEXT="BUT: it integrates limitations for the Compiler/Optimiser"/>
</node>
</node>
<node CREATED="1785791188795" ID="ID_1512345327" MODIFIED="1785791203573" TEXT="visiblity vs. control-flow">
<node CREATED="1785791204505" ID="ID_1519603089" MODIFIED="1785791238988" TEXT="a memory barrier in itself does not impact the control flow"/>
<node CREATED="1785791217111" ID="ID_1010220877" MODIFIED="1785791232073" TEXT="but it is the foundation to synchronise two control-flows"/>
</node>
<node CREATED="1785791243995" ID="ID_564793830" MODIFIED="1785884741878" TEXT="Example: Producer-Consumer">
<arrowlink COLOR="#53387c" DESTINATION="ID_1698936757" ENDARROW="Default" ENDINCLINATION="-204;-288;" ID="Arrow_ID_1007251265" STARTARROW="None" STARTINCLINATION="-119;11;"/>
<node CREATED="1785791260357" ID="ID_1065157346" MODIFIED="1785791274112" TEXT="Claude hat ein sehr gutes Code-Beispiel aufgeschrieben"/>
<node CREATED="1785791274543" ID="ID_1417066396" MODIFIED="1785791277867" TEXT="daran kann man zeigen">
<node CREATED="1785791279262" ID="ID_367637685" MODIFIED="1785791288802" TEXT="welche fences hier auftreten"/>
<node CREATED="1785791289198" ID="ID_1104497858" MODIFIED="1785791294720" TEXT="was synchronises-with hei&#xdf;t"/>
2026-08-09 20:28:35 +02:00
<node CREATED="1786273434389" ID="ID_634241862" MODIFIED="1786273444032" TEXT="&#xbb;synchronizes-with&#xab;"/>
<node CREATED="1785791295444" ID="ID_523589950" MODIFIED="1785791302711" TEXT="das &quot;walk-away&quot;-Pattern"/>
</node>
</node>
<node CREATED="1785791338743" ID="ID_124246727" MODIFIED="1785791346259" TEXT="Futex und wait-states bauen darauf auf">
<node CREATED="1785791353939" ID="ID_602058573" MODIFIED="1785791370380" TEXT="&quot;walk away&quot; &#x27f9; hei&#xdf;t hier &quot;Schlaf!&quot;"/>
2026-08-02 23:38:55 +02:00
</node>
</node>
<node CREATED="1785873983733" ID="ID_886814253" MODIFIED="1785874002870" TEXT="Architecture: async-IO">
<node CREATED="1785874005820" ID="ID_764934362" MODIFIED="1785874017772" TEXT="there must be a state-tracking somewhere">
<node CREATED="1785875062363" ID="ID_669571090" MODIFIED="1785875081624" TEXT="Implicit state, paid for in threads">
<node CREATED="1785874023228" ID="ID_997386966" MODIFIED="1785874062246" TEXT="Blocking &#x27f9; code itself is controlled state-progression"/>
<node CREATED="1785875087349" ID="ID_210857906" MODIFIED="1785875097481" TEXT="state machine is hidden in the thread&apos;s stack"/>
</node>
<node CREATED="1785875106812" ID="ID_661494362" MODIFIED="1785875108135" TEXT="Explicit state, paid for in bookkeeping">
<node CREATED="1785875127465" ID="ID_1207746212" MODIFIED="1785875136568" TEXT="hand-written state engine">
<icon BUILTIN="forward"/>
</node>
<node CREATED="1785875137944" ID="ID_1383222377" MODIFIED="1785875142163" TEXT="continuation-passing"/>
<node CREATED="1785875143239" ID="ID_230123804" MODIFIED="1785875146651" TEXT="Coroutines">
<node CREATED="1785875179714" ID="ID_599406814" MODIFIED="1785875187341" TEXT="A coroutine is a compiler-synthesized state machine">
<node CREATED="1785875202575" ID="ID_1932767180" MODIFIED="1785875217532" TEXT="co_await points &#x2259; case labels"/>
<node CREATED="1785875237674" ID="ID_1058579559" MODIFIED="1785875253716" TEXT="locals &#x27f9; suspension &#x27f9; member fields of a generated struct"/>
</node>
</node>
</node>
</node>
<node CREATED="1785875435722" ID="ID_1802647209" MODIFIED="1785875455293">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
there must be <b>backpressure</b>&#160;/ flow-control somewhere
</p>
</body>
</html></richcontent>
<node CREATED="1785875533939" ID="ID_931251654" MODIFIED="1785875543715" TEXT="possibly distribute to N follow-up workers"/>
<node CREATED="1785875544671" ID="ID_1027936727" MODIFIED="1785875556973" TEXT="BUT pointless to task more IO than can be handled downstream">
<node CREATED="1785875560278" ID="ID_1374938498" MODIFIED="1785875566568" TEXT="it will just block buffer memory"/>
</node>
</node>
2026-08-09 20:28:35 +02:00
<node CREATED="1786296073920" ID="ID_315707839" MODIFIED="1786296093381" TEXT="need some Framework or Backbone"/>
<node CREATED="1785875588128" ID="ID_1594640460" MODIFIED="1785875600648" TEXT="simple solution : a polling thread">
<node CREATED="1785875601816" ID="ID_1853399706" MODIFIED="1785875634049">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Thread polls &#187;readyness&#171; &#10233; <b>Reactor</b>&#160;Pattern
</p>
</body>
</html></richcontent>
<node CREATED="1785875660697" ID="ID_130608972" MODIFIED="1785875670178" TEXT="&#xbb;the old solution&#xab;"/>
<node CREATED="1785875701937" ID="ID_823278976" MODIFIED="1785875715769" TEXT="AIO &#x27f9; readyness signalling"/>
</node>
<node CREATED="1785875601816" ID="ID_132126899" MODIFIED="1785875657405">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Thread polls &#187;completion&#171; &#10233; <b>Proactor</b>&#160;Pattern
</p>
</body>
</html></richcontent>
<icon BUILTIN="forward"/>
</node>
</node>
</node>
2026-08-09 05:39:17 +02:00
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#690f14" CREATED="1786157164429" HGAP="525" ID="ID_487001972" MODIFIED="1786246634044" TEXT="X" VSHIFT="-18">
<font NAME="SansSerif" SIZE="21"/>
</node>
<node CREATED="1785875859594" ID="ID_404844187" MODIFIED="1785875865559" TEXT="Example: Video Player">
<node CREATED="1785875876826" ID="ID_256659487" MODIFIED="1785875895788" TEXT="have a fast Open-GL pipeline &#x27f9; just need hand-over"/>
<node CREATED="1785875964166" ID="ID_684645417" MODIFIED="1785875979393" TEXT="Backpressure &#x27f8; use fixed-size ring"/>
<node CREATED="1785876001689" ID="ID_169727968" MODIFIED="1785876017834" TEXT="Buffers &#x27f8; allocate array and use them as a ring">
<node CREATED="1785876027156" ID="ID_1967193354" MODIFIED="1785876045895" TEXT="buffer[frameNr % RING_SIZE]"/>
</node>
<node CREATED="1785876070465" ID="ID_581666658" MODIFIED="1785876089705" TEXT="Nondeterminism &#x27f9; one state-flag per &#xbb;Slot&#xab;">
<node CREATED="1785876099444" ID="ID_978689315" MODIFIED="1785876116674">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
tasks are not necessarily completed <i>in order</i>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785876138729" ID="ID_1841014403" MODIFIED="1785876144702" TEXT="we use several &#xbb;cursors&#xab;">
<node CREATED="1785876149265" ID="ID_693000407" MODIFIED="1785876153608" TEXT="a task-feed cursor">
<node CREATED="1785879093253" MODIFIED="1785879093253" TEXT="nextRead_"/>
</node>
<node CREATED="1785876154909" ID="ID_1730609281" MODIFIED="1785876165607" TEXT="a completion-reaping cursor">
<node CREATED="1785879098386" ID="ID_1898415996" MODIFIED="1785879103211" TEXT="nextShow_"/>
</node>
</node>
<node CREATED="1785876420056" ID="ID_1318957188" MODIFIED="1785877188037" TEXT="State-Engine">
<arrowlink COLOR="#3f50bf" DESTINATION="ID_972192378" ENDARROW="Default" ENDINCLINATION="116;-8;" ID="Arrow_ID_81571613" STARTARROW="None" STARTINCLINATION="-221;45;"/>
<node CREATED="1785877645815" ID="ID_1556547895" MODIFIED="1785877647130" TEXT="enum BuffState { FREE, READ, FEED, SHOW, STOP };"/>
</node>
</node>
<node CREATED="1785876541776" ID="ID_1160868029" MODIFIED="1785876548328" TEXT="Runtime Structure">
<node CREATED="1785876552050" ID="ID_76091441" MODIFIED="1785876559641" TEXT="GTK: Event-Thread">
<node CREATED="1785876577770" ID="ID_1458066381" MODIFIED="1785876586549" TEXT="owns the OpenGL-Display"/>
<node CREATED="1785876587305" ID="ID_1557659787" MODIFIED="1785876592468" TEXT="owns a Glib::Dispatcher"/>
</node>
<node CREATED="1785876560253" ID="ID_188966170" MODIFIED="1785876563735" TEXT="Proactor-Thread">
<node CREATED="1785876599046" ID="ID_278578338" MODIFIED="1785876606258" TEXT="owns the URing"/>
<node CREATED="1785876612904" ID="ID_1685141627" MODIFIED="1785876618721" TEXT="owns the Buffers and State-Engines"/>
</node>
<node CREATED="1785876723751" ID="ID_1367832220" MODIFIED="1785876726942" TEXT="Coordination">
<node CREATED="1785876729342" ID="ID_943323172" MODIFIED="1785876735633" TEXT="Glib::Dispatcher for signalling"/>
<node CREATED="1785876736101" ID="ID_1593625248" MODIFIED="1785876740856" TEXT="std::atomic&lt;Buffer*&gt; for backpressure"/>
</node>
</node>
<node CREATED="1785877039364" ID="ID_260672030" MODIFIED="1785877048254" TEXT="Demo Code">
<node CREATED="1785877049491" ID="ID_1817582813" MODIFIED="1785877053814" TEXT="Application structure">
<node CREATED="1785877055882" ID="ID_762153804" MODIFIED="1785877106316" TEXT="Scheme : Application-setup"/>
<node CREATED="1785877527898" ID="ID_74765922" MODIFIED="1785877552297" TEXT="Window owns UringVideoPlayer">
<node CREATED="1785877556574" ID="ID_622317404" MODIFIED="1785877559097" TEXT="owns Dispatcher"/>
<node CREATED="1785877563389" ID="ID_1998229176" MODIFIED="1785877567536" TEXT="owns Thread"/>
</node>
<node CREATED="1785877572491" ID="ID_869047623" MODIFIED="1785877576226" TEXT="RAII">
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1785877578015" ID="ID_173000586" MODIFIED="1785877586379" TEXT="explain UringVideoPlayer object">
<node CREATED="1785878130468" ID="ID_1022336537" MODIFIED="1785878142770" TEXT="RAII &#x27f9; Constructor">
<node CREATED="1785878145077" ID="ID_452272705" MODIFIED="1785878156919" TEXT="Excourse : VideoDisplay">
<node CREATED="1785878170194" ID="ID_869030261" MODIFIED="1785878181004" TEXT="show overall structure"/>
<node CREATED="1785878181960" ID="ID_1034573776" MODIFIED="1785878349266" TEXT="show callback interface">
<arrowlink COLOR="#f9fdce" DESTINATION="ID_1293956882" ENDARROW="Default" ENDINCLINATION="99;9;" ID="Arrow_ID_516625561" STARTARROW="None" STARTINCLINATION="-7;60;"/>
</node>
</node>
</node>
<node CREATED="1785877891448" ID="ID_1293956882" MODIFIED="1785878340152" TEXT="explain Dispatcher-Interface">
<linktarget COLOR="#f9fdce" DESTINATION="ID_1293956882" ENDARROW="Default" ENDINCLINATION="99;9;" ID="Arrow_ID_516625561" SOURCE="ID_1034573776" STARTARROW="None" STARTINCLINATION="-7;60;"/>
</node>
<node CREATED="1785877902926" ID="ID_381643349" MODIFIED="1785877906779" TEXT="explain Members">
<node CREATED="1785877915140" ID="ID_1367836738" MODIFIED="1785877916913" TEXT="Allocations"/>
<node CREATED="1785877917752" ID="ID_1684639661" MODIFIED="1785877920920" TEXT="Thread-start"/>
</node>
</node>
<node CREATED="1785879260302" ID="ID_893404143" MODIFIED="1785879266253" TEXT="explain Proactor-Thread">
<node CREATED="1785879267416" ID="ID_1147715489" MODIFIED="1785879270840" TEXT="Init">
<node CREATED="1785879274164" ID="ID_395273571" MODIFIED="1785879276799" TEXT="open file"/>
<node CREATED="1785879277257" ID="ID_1072119806" MODIFIED="1785879278823" TEXT="open ring"/>
<node CREATED="1785879279667" ID="ID_951455059" MODIFIED="1785879284030" TEXT="allocate Buffers"/>
<node CREATED="1785879285319" ID="ID_742964426" MODIFIED="1785879287377" TEXT="setup timer"/>
<node CREATED="1785879288232" ID="ID_35444246" MODIFIED="1785879295660" TEXT="fill ring with tasks">
<node CREATED="1785879309008" ID="ID_1035852796" MODIFIED="1785879313250" TEXT="explain addNextReadSubmissions()">
2026-08-09 20:28:35 +02:00
<node COLOR="#435e98" CREATED="1785879447457" ID="ID_1547935405" LINK="#ID_1348254697" MODIFIED="1786299184552" TEXT="(Bugfix)"/>
</node>
</node>
<node CREATED="1785879476757" ID="ID_1829286292" MODIFIED="1785879488962" TEXT="io_uring_submit (&amp;uRing);"/>
</node>
<node CREATED="1785879492510" ID="ID_875029439" MODIFIED="1785879498025" TEXT="Proactor-Loop">
<node CREATED="1785879523660" ID="ID_1806184956" MODIFIED="1785879525333" TEXT="io_uring_wait_cqe()"/>
<node CREATED="1785879534520" ID="ID_1021478767" MODIFIED="1785879547786" TEXT="recall: FrameNr as user-data"/>
<node CREATED="1785879581508" ID="ID_1437520203" MODIFIED="1785879585488" TEXT="case-distinction">
<node CREATED="1785879586290" ID="ID_1741423948" MODIFIED="1785879588198" TEXT="Timer-Tick">
<node CREATED="1785879591928" ID="ID_888175966" MODIFIED="1785879781628" TEXT="maybeDisplayFrame()">
<arrowlink COLOR="#fdfabe" DESTINATION="ID_60590105" ENDARROW="Default" ENDINCLINATION="11;-54;" ID="Arrow_ID_250326530" STARTARROW="None" STARTINCLINATION="-240;0;"/>
</node>
<node CREATED="1785879597571" ID="ID_1157025992" MODIFIED="1785879604589" TEXT="addNextReadSubmissions()"/>
<node CREATED="1785879609678" ID="ID_668590143" MODIFIED="1785879614344" TEXT="submit ring"/>
</node>
<node CREATED="1785879615877" ID="ID_1882237275" MODIFIED="1785879621032" TEXT="else: reap completions">
<node CREATED="1785879632695" ID="ID_566495440" MODIFIED="1785879634526" TEXT="handleCompletedRead()"/>
<node CREATED="1785879694433" ID="ID_17628635" MODIFIED="1785879696926" TEXT="check error"/>
<node CREATED="1785879697450" ID="ID_1664017972" MODIFIED="1785879703017" TEXT="retrieve FrameNr">
<node CREATED="1785879706025" ID="ID_1545713668" MODIFIED="1785879710690" TEXT="note: its in the user data"/>
<node CREATED="1785879712883" ID="ID_1302537967" MODIFIED="1785879719511" TEXT="gets us blindly to the correct slot"/>
</node>
<node CREATED="1785879722743" ID="ID_1094537253" MODIFIED="1785879728714" TEXT="advance state-engine"/>
</node>
</node>
</node>
<node CREATED="1785879754243" ID="ID_60590105" MODIFIED="1785879781628" TEXT="maybeDisplayFrame()">
<linktarget COLOR="#fdfabe" DESTINATION="ID_60590105" ENDARROW="Default" ENDINCLINATION="11;-54;" ID="Arrow_ID_250326530" SOURCE="ID_888175966" STARTARROW="None" STARTINCLINATION="-240;0;"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1785879840827" ID="ID_1269710501" MODIFIED="1785879858112" TEXT="this is likely the most dense piece of code">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1785880026115" ID="ID_1784510664" MODIFIED="1785880098786" TEXT="nochmal die States einblenden">
<arrowlink COLOR="#587cdf" DESTINATION="ID_336488542" ENDARROW="Default" ENDINCLINATION="415;41;" ID="Arrow_ID_725606969" STARTARROW="None" STARTINCLINATION="18;106;"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1785880137606" ID="ID_109849950" MODIFIED="1785880147941" TEXT="Bedeutung der F&#xe4;lle">
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1785879789774" ID="ID_1290834311" MODIFIED="1785879797005" TEXT="Switch-statement for the state-engine">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1785880154979" ID="ID_48334205" MODIFIED="1785880164341" TEXT="indicate memory-barrier">
<node CREATED="1785880254526" HGAP="258" ID="ID_1225058666" MODIFIED="1785880282855" TEXT="show the two BufferDispatcher-Callbacks" VSHIFT="13"/>
</node>
<node CREATED="1785880171289" ID="ID_1108720868" MODIFIED="1785880175830" TEXT="dispatchFrame_()">
<node CREATED="1785880176864" HGAP="328" ID="ID_1397180000" MODIFIED="1785880211088" TEXT="show EglDisplay&lt;PIX,WIDTH,HEIGHT&gt;::displayFrame()" VSHIFT="54"/>
</node>
</node>
</node>
<node CREATED="1785882390272" ID="ID_1170512289" MODIFIED="1785882402415" TEXT="run a RAW-Video">
<node CREATED="1785882864616" ID="ID_1586819962" MODIFIED="1785882897473" TEXT="Demo-Code compilieren" VSHIFT="10"/>
<node CREATED="1785882843708" ID="ID_1344531437" MODIFIED="1785882912395" TEXT="HD-Zugriffszeiten zeigen"/>
<node CREATED="1784304949037" ID="ID_373290565" MODIFIED="1785882906616" TEXT="demovideo-1200.raw">
<arrowlink COLOR="#7df3c4" DESTINATION="ID_1648226456" ENDARROW="Default" ENDINCLINATION="-217;0;" ID="Arrow_ID_618400356" STARTARROW="None" STARTINCLINATION="-2269;256;"/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1784302618850" ID="ID_1541304976" MODIFIED="1785882716977" TEXT="Frame: 1200 x 675 &#x27fc; 2.3MiB/Frame in RGB888"/>
<node CREATED="1784303736468" ID="ID_921357649" MODIFIED="1785882766464">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
50fps &#10233; bitrate=972000.0kbits/s video:2373047KiB&#160;&#160;&#8793; <b><font color="#890707">2.3</font></b><font color="#890707">&#160; GiB</font>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1785883473898" ID="ID_1822434518" MODIFIED="1785883480820" TEXT="Reflection: where we are...?">
<node BACKGROUND_COLOR="#c3c0dd" COLOR="#34245c" CREATED="1785883484417" ID="ID_1233434338" MODIFIED="1785884889237" TEXT="io_uring resolved the bottleneck in the Kernel">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1785883495942" ID="ID_751806456" MODIFIED="1785883539495" TEXT="it does not &#x2014; in itself &#x2014; &#x201e;resolve async&#x201c;">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1785883581639" ID="ID_1693723520" MODIFIED="1785885069705" TEXT="still need to dispatch the work &#x27f9; synchronisation issues"/>
<node CREATED="1785883555083" ID="ID_1264739380" MODIFIED="1785883566238" TEXT="the Linux Kernel is still inherently synchronous"/>
<node CREATED="1785884986511" ID="ID_514549682" MODIFIED="1785885016851" TEXT="the &#xbb;function colouration problem&#xab; remains to be solved / mitigated">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1785885022722" ID="ID_1162960165" MODIFIED="1785885170219" TEXT="Danger: have to rebuild a large part of the Kernel machinery">
<arrowlink COLOR="#d24b5c" DESTINATION="ID_1614921963" ENDARROW="Default" ENDINCLINATION="327;0;" ID="Arrow_ID_690010765" STARTARROW="None" STARTINCLINATION="130;29;"/>
<icon BUILTIN="clanbomber"/>
</node>
<node CREATED="1785885039824" ID="ID_709775774" MODIFIED="1785885058707" TEXT="that made the previous AIO-attempts fail"/>
<node CREATED="1785885177293" ID="ID_295548794" MODIFIED="1785885186130" TEXT="io_uring has a better architecture">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1785885206897" ID="ID_1262823473" MODIFIED="1785885219625" TEXT="Irony: its interface is rather &#xbb;MIT style&#xab;"/>
</node>
</node>
<node CREATED="1785883615491" ID="ID_1939965989" MODIFIED="1785883747574">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
the introduction of io_uring was a <i>security nightmare</i>
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#fd43b9" DESTINATION="ID_1761641831" ENDARROW="Default" ENDINCLINATION="-889;102;" ID="Arrow_ID_733801359" STARTARROW="None" STARTINCLINATION="-710;35;"/>
<node CREATED="1785461304909" ID="ID_1410947805" MODIFIED="1785884911853" TEXT="&quot;we can&apos;t filter out syscalls we never make....&quot;"/>
<node CREATED="1785883858415" ID="ID_1547155531" MODIFIED="1785883912450" TEXT="au&#xdf;erdem: neues zustandsbehaftetes und komplexes Subsystem">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
eine Fundgrube f&#252;r Logikfehler, double-free und use-after-free
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785883813724" ID="ID_931901334" MODIFIED="1785883833433" TEXT="Google hat es f&#xfc;r eignen Code deaktiviert (&#x27f6; Android)"/>
<node CREATED="1785461411934" ID="ID_1826454557" MODIFIED="1785883930006" TEXT="Docker deaktiviert es im Default seccomp profile">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1785885085762" ID="ID_1614921963" MODIFIED="1785885170219" TEXT="&#x27f9; cBPF for security / call filtering in the Ring">
<linktarget COLOR="#d24b5c" DESTINATION="ID_1614921963" ENDARROW="Default" ENDINCLINATION="327;0;" ID="Arrow_ID_690010765" SOURCE="ID_1162960165" STARTARROW="None" STARTINCLINATION="130;29;"/>
</node>
</node>
<node CREATED="1785883956116" ID="ID_1397444798" MODIFIED="1785883974580" TEXT="wie geschaffen f&#xfc;r high-performance-Computing">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1785883976317" ID="ID_1541401046" MODIFIED="1785885271445" TEXT="Continuations">
<arrowlink COLOR="#fef6be" DESTINATION="ID_1430769471" ENDARROW="Default" ENDINCLINATION="-773;77;" ID="Arrow_ID_1412764443" STARTARROW="None" STARTINCLINATION="-1223;237;"/>
<node CREATED="1785883993967" ID="ID_568608207" MODIFIED="1785884002513" TEXT="&#xbb;Channel-Programs reloaded&#xab;"/>
<node CREATED="1785884006645" ID="ID_505951782" MODIFIED="1785884016584" TEXT="eBPF im URing">
<node CREATED="1785884019498" ID="ID_750251084" MODIFIED="1785884043780" TEXT="die event-loop programmiert sich selbst"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#580f69" CREATED="1785884219144" ID="ID_276372251" MODIFIED="1785884235355" TEXT="Lumiera">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="forward"/>
<node CREATED="1785884255187" ID="ID_1080036337" MODIFIED="1785884259478" TEXT="for Video....">
<node CREATED="1785884261651" ID="ID_1085318634" MODIFIED="1785884272899" TEXT="it is not the syscall cost and batching that matters"/>
<node CREATED="1785884273529" ID="ID_516182631" MODIFIED="1785884290564" TEXT="it makes IO schedulable"/>
</node>
<node COLOR="#5b280f" CREATED="1785884308892" ID="ID_699168970" MODIFIED="1785884323496" TEXT="Proactor is not the proper solution">
<icon BUILTIN="stop-sign"/>
<node CREATED="1785884333488" ID="ID_284141560" MODIFIED="1785884353120" TEXT="we have significant compute-Load chained behind each IO"/>
<node CREATED="1785884354382" ID="ID_1494672465" MODIFIED="1785884394563" TEXT="need a secondary dispatch &#x27f9; resource coordination is problematic"/>
</node>
<node CREATED="1785884399745" ID="ID_1522905322" MODIFIED="1785884454421" TEXT="Lumiera takes the &#xbb;pull&#xab; principle to the extreme">
<icon BUILTIN="forward"/>
<node CREATED="1785884471837" ID="ID_271409928" MODIFIED="1785884479534" TEXT="we dont even use &#xbb;work stealing&#xab;"/>
<node CREATED="1785884480076" ID="ID_1986807250" MODIFIED="1785884489990" TEXT="rather, we have active workers and a passive Scheduler-Service"/>
<node CREATED="1785884491523" ID="ID_96138270" MODIFIED="1785884514211" TEXT="we use probabilistic capacity distribution (&#x27f9; avoid contention)"/>
<node CREATED="1785884524278" ID="ID_1108773815" MODIFIED="1785884530715" TEXT="io_uring fits in perfectly">
<node CREATED="1785884538700" ID="ID_812132615" MODIFIED="1785884624675" TEXT="a free worker...."/>
<node CREATED="1785884541992" ID="ID_1914638744" MODIFIED="1785884641107" TEXT="pulls the Scheduler to find the next task"/>
<node CREATED="1785884551251" ID="ID_1136680561" MODIFIED="1785884563494" TEXT="which includes looking into the URing"/>
<node CREATED="1785884564497" ID="ID_665772159" MODIFIED="1785884585026" TEXT="it then drops the Scheduler-Lock and follows the continuation"/>
</node>
<node CREATED="1785884677273" ID="ID_139999848" MODIFIED="1785884706249" TEXT="Plan: build Capacity-Management to control the Schedule"/>
<node CREATED="1785884762521" ID="ID_984815476" MODIFIED="1785884790866" TEXT="io_uring can handle a massive SSD-backed Frame Cache"/>
</node>
</node>
</node>
2026-08-02 23:38:55 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1753974736690" ID="ID_1278736313" MODIFIED="1753974741987" TEXT="Outline / bullet points"/>
<node CREATED="1753974715683" ID="ID_921567772" MODIFIED="1753974718853" TEXT="Schemabilder">
<node CREATED="1785876446945" ID="ID_1499863943" MODIFIED="1785876456471" TEXT="Diagramm &quot;Time Scales&quot;"/>
<node CREATED="1785876459083" ID="ID_972192378" MODIFIED="1785877188037" TEXT="Diagramm &quot;State-Ring&quot;">
<linktarget COLOR="#3f50bf" DESTINATION="ID_972192378" ENDARROW="Default" ENDINCLINATION="116;-8;" ID="Arrow_ID_81571613" SOURCE="ID_1318957188" STARTARROW="None" STARTINCLINATION="-221;45;"/>
</node>
<node CREATED="1785880050158" ID="ID_336488542" MODIFIED="1785880064221" TEXT="Diagramm &quot;State-Engine&quot;">
<linktarget COLOR="#587cdf" DESTINATION="ID_336488542" ENDARROW="Default" ENDINCLINATION="415;41;" ID="Arrow_ID_725606969" SOURCE="ID_1784510664" STARTARROW="None" STARTINCLINATION="18;106;"/>
</node>
<node CREATED="1785877094220" ID="ID_1651644833" MODIFIED="1785877434241" TEXT="Diagramm &quot;Application setup&quot;"/>
</node>
<node CREATED="1753975388927" ID="ID_844470552" MODIFIED="1785876443685" TEXT="Code-Beispiele">
<node COLOR="#338800" CREATED="1785873575052" ID="ID_1698936757" MODIFIED="1786645656227" TEXT="Producer-Consumer">
<linktarget COLOR="#53387c" DESTINATION="ID_1698936757" ENDARROW="Default" ENDINCLINATION="-204;-288;" ID="Arrow_ID_1007251265" SOURCE="ID_564793830" STARTARROW="None" STARTINCLINATION="-119;11;"/>
<linktarget COLOR="#53387c" DESTINATION="ID_1698936757" ENDARROW="Default" ENDINCLINATION="-206;113;" ID="Arrow_ID_1915855216" SOURCE="ID_537337249" STARTARROW="None" STARTINCLINATION="-340;56;"/>
<icon BUILTIN="button_ok"/>
2026-08-09 05:39:17 +02:00
<node CREATED="1786245652055" ID="ID_798071934" MODIFIED="1786245789280">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<u>Producer</u>:
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">write payload[...]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// ordinary stores </font>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// StoreStore + LoadStore barrier here </font>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">store(flag, READY, release) </font>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<u>Consumer</u>:
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">v = load(flag, acquire) </font>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// LoadLoad + LoadStore barrier here </font>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">if (v == READY) </font>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">&#160;&#160;&#160;&#160;read payload[...]&#160;&#160;&#160;&#160;&#160;// ordinary loads </font>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">else </font>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal" dir="ltr">
<font face="Monospaced" size="2" color="#261b52">&#160;&#160;&#160;&#160;// walk away &#8212; no information gained, positive or negative </font>
</p>
</body>
</html></richcontent>
2026-08-09 05:39:17 +02:00
</node>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1753974744448" ID="ID_233051154" MODIFIED="1753974749608" TEXT="Demo code"/>
2024-08-13 15:45:04 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1754271487261" ID="ID_1152628369" MODIFIED="1779389322292" TEXT="Inhalte aufbereiten">
<icon BUILTIN="flag-pink"/>
<node CREATED="1754271622745" ID="ID_1711166940" MODIFIED="1754271624175" TEXT="Texte">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1785877458584" ID="ID_71299743" MODIFIED="1785877509550" TEXT="Dokumentation">
<icon BUILTIN="bell"/>
<node CREATED="1785877462095" ID="ID_1358012782" MODIFIED="1785877463998" TEXT="Einleitung"/>
<node CREATED="1785877465202" ID="ID_1869125696" MODIFIED="1785877467765" TEXT="Resources"/>
<node CREATED="1785877469017" ID="ID_1235467057" MODIFIED="1785877471197" TEXT="Erl&#xe4;uterungen"/>
<node CREATED="1785877471672" ID="ID_1101748658" MODIFIED="1785877474628" TEXT="Time-Scales"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1785877497102" ID="ID_1538801789" MODIFIED="1785877511773" TEXT="Slides / Bullets formulieren">
<icon BUILTIN="flag-yellow"/>
2026-08-08 19:40:17 +02:00
<node CREATED="1786209334650" ID="ID_664691834" MODIFIED="1786210320715" TEXT="Frontpage">
<node CREATED="1786209410141" ID="ID_1608767254" MODIFIED="1786209413040" TEXT="io_uring">
<node CREATED="1786209424418" ID="ID_1303352940" MODIFIED="1786209425718" TEXT="Reading Video data with IO_URING"/>
<node CREATED="1786209440796" ID="ID_1659105899" MODIFIED="1786209442058" TEXT="putting a new kernel framework into practical use"/>
</node>
</node>
<node CREATED="1786209455010" ID="ID_897066522" MODIFIED="1786209459257" TEXT="Disclosure">
<node CREATED="1786209460201" ID="ID_331965739" MODIFIED="1786209479631" TEXT="use of &#xbb;AI&#xab;"/>
<node CREATED="1786209481994" ID="ID_751809818" MODIFIED="1786209494564" TEXT="Knowledge-Technology use">
<node CREATED="1786209499704" ID="ID_741640290" MODIFIED="1786209502950" TEXT="Guidelines">
<node CREATED="1786209503911" ID="ID_1049438519" MODIFIED="1786209508435" TEXT="Alexei Alexandrescu"/>
<node CREATED="1786209515494" ID="ID_952189423" MODIFIED="1786209523845" TEXT="distinguish">
<node CREATED="1786209524357" ID="ID_1043615002" MODIFIED="1786209527544" TEXT="Skills">
<node CREATED="1786209541522" ID="ID_326183822" MODIFIED="1786209550893" TEXT="leverage your skills"/>
<node CREATED="1786209551863" ID="ID_1424804089" MODIFIED="1786209913852" TEXT="but care to retain and develop them"/>
</node>
<node CREATED="1786209528036" ID="ID_1512915973" MODIFIED="1786209530400" TEXT="Judgement">
<node CREATED="1786209639716" ID="ID_14394358" MODIFIED="1786209864474" TEXT="The judgment shall be ours to make."/>
</node>
<node CREATED="1786209530917" ID="ID_274283378" MODIFIED="1786209537852" TEXT="Souvereignty / Creativity">
<node CREATED="1786209870796" ID="ID_721310307" MODIFIED="1786209876199" TEXT="Humans take responsibility"/>
</node>
</node>
</node>
<node CREATED="1786210009468" ID="ID_1499933470" MODIFIED="1786210020328">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Treat it as a tool,
</p>
<p>
not as a miracle we&#8217;ve been blessed with
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1786157179882" ID="ID_1684251098" MODIFIED="1786157184624" TEXT="what is it?">
<node CREATED="1786157193668" ID="ID_1364151192" MODIFIED="1786157210442" TEXT="AI? ... IO_URING? ... Lumiera?"/>
<node CREATED="1786157213281" ID="ID_1032986728" MODIFIED="1786157226770" TEXT="a tool">
<node CREATED="1786157540754" ID="ID_1685235270" MODIFIED="1786157569787" TEXT="a means to an end"/>
<node CREATED="1786157571094" ID="ID_24701553" MODIFIED="1786157573959" TEXT="a simple machine"/>
</node>
<node CREATED="1786157220669" ID="ID_1216413886" MODIFIED="1786157223682" TEXT="a machine"/>
<node CREATED="1786157227844" ID="ID_1441232205" MODIFIED="1786157230743" TEXT="an engine"/>
<node CREATED="1786157233475" ID="ID_1884047993" MODIFIED="1786157235601" TEXT="a facility"/>
<node CREATED="1786380363705" ID="ID_523203878" MODIFIED="1786380364929" TEXT="a facility"/>
2026-08-08 19:40:17 +02:00
<node CREATED="1786157236863" ID="ID_1483477134" MODIFIED="1786157239686" TEXT="an abstraction">
<node CREATED="1786157259939" ID="ID_978651768" MODIFIED="1786157268212" TEXT="Def Abstraction (C.S.)">
<node CREATED="1786157327488" ID="ID_151430733" MODIFIED="1786157331231" TEXT="Wikipedia...."/>
<node CREATED="1786157292715" ID="ID_279746779" MODIFIED="1786157325101">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
in software, an abstraction provides access
</p>
<p>
while hiding details that otherwise might make access more challenging.
</p>
<p>
It focuses attention on details of greater importance.
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node CREATED="1786157658114" ID="ID_175660716" MODIFIED="1786157660466" TEXT="Lumiera">
<node CREATED="1786157735672" ID="ID_806858192" MODIFIED="1786157737019" TEXT="Lumiera is software to edit videos">
<node CREATED="1786157813085" ID="ID_959824342" MODIFIED="1786157827055" TEXT="it is an ambitous free software project"/>
<node CREATED="1786157827908" ID="ID_592854276" MODIFIED="1786157835574" TEXT="ist is not finished / usable yet"/>
</node>
<node CREATED="1786157848040" ID="ID_1334061170" MODIFIED="1786157889358" TEXT="The basic situation">
<node CREATED="1786157890898" ID="ID_884259737" MODIFIED="1786157900049" TEXT="we have video, sound, media (files)"/>
<node CREATED="1786157901025" ID="ID_134817714" MODIFIED="1786157905412" TEXT="we want to...">
<node CREATED="1786157906912" ID="ID_1110426582" MODIFIED="1786157920714" TEXT="arrange, mix, combine"/>
<node CREATED="1786157921282" ID="ID_264760034" MODIFIED="1786157930125" TEXT="play and render that arrangement"/>
</node>
</node>
<node CREATED="1786157933476" ID="ID_577012872" MODIFIED="1786157947894" TEXT="Guiding Principles">
<node CREATED="1786157951410" ID="ID_433666208" MODIFIED="1786157971461" TEXT="&#xbb;medium level of abstraction&#xab;"/>
</node>
</node>
<node CREATED="1786158027560" ID="ID_1735472719" MODIFIED="1786158032826" TEXT="Challenges for the Engine">
<node CREATED="1786158080856" ID="ID_123739484" MODIFIED="1786158090874" TEXT="based on externally defined processing"/>
<node CREATED="1786158092855" ID="ID_636396293" MODIFIED="1786158106230" TEXT="ability to adapt to various workloads"/>
<node CREATED="1786158112260" ID="ID_1719290378" MODIFIED="1786158117815" TEXT="video pushes the limits"/>
<node CREATED="1786158120997" ID="ID_1802759909" MODIFIED="1786158140188" TEXT="&#x27f9; make optimum use of resources"/>
</node>
2026-08-09 20:28:35 +02:00
<node BACKGROUND_COLOR="#e1cdb4" CREATED="1786273770202" ID="ID_715888718" MODIFIED="1786273804346" STYLE="bubble" TEXT="10">
<edge COLOR="#c00636"/>
<font NAME="SansSerif" SIZE="15"/>
</node>
2026-08-09 05:39:17 +02:00
<node CREATED="1786158146164" ID="ID_1965918049" MODIFIED="1786235987151" TEXT="I/O is &#xbb;problematic&#xab;">
2026-08-08 19:40:17 +02:00
<node CREATED="1786158231476" ID="ID_310766175" MODIFIED="1786158242607" TEXT="much more complex than the &quot;compute&quot; resource"/>
<node CREATED="1786158247058" ID="ID_405882035" MODIFIED="1786158266443" TEXT="it is slow">
<node CREATED="1786158272327" ID="ID_1400639102" MODIFIED="1786158291344" TEXT="slow can refer to..."/>
<node CREATED="1786158279151" ID="ID_1370560070" MODIFIED="1786158283551" TEXT="latency"/>
<node CREATED="1786158284135" ID="ID_47619" MODIFIED="1786158286257" TEXT="throughput"/>
</node>
<node CREATED="1786158305702" ID="ID_401607245" MODIFIED="1786158312029" TEXT="it depends...">
<node CREATED="1785536715500" ID="ID_565582054" MODIFIED="1785536719630" TEXT="on your hardware"/>
<node CREATED="1785536721342" ID="ID_560163364" MODIFIED="1785536729190" TEXT="on your storage layout"/>
<node CREATED="1785536736958" ID="ID_1278615821" MODIFIED="1785536743780" TEXT="on your access pattern"/>
<node CREATED="1785536730625" ID="ID_1909424632" MODIFIED="1785536735037" TEXT="on your workload"/>
</node>
<node CREATED="1786158328007" ID="ID_457446692" MODIFIED="1786158570391" TEXT="&#x27f9; it is hard to predict"/>
<node CREATED="1786158352524" ID="ID_1145344027" MODIFIED="1786158354567" TEXT="and especially for Video &#x27f6; a new twist.... "/>
2026-08-09 05:39:17 +02:00
<node CREATED="1786158361606" ID="ID_986117401" MODIFIED="1786235991899" TEXT="I/O is no longer slow">
2026-08-08 19:40:17 +02:00
<node CREATED="1786158373937" ID="ID_947160129" MODIFIED="1786158378724" TEXT="and that&apos;s the problem"/>
</node>
<node CREATED="1786158641707" ID="ID_1475320779" MODIFIED="1786158678740" TEXT="what is &#xbb;fast&#xab; ... and &#xbb;slow&#xab;?"/>
</node>
<node CREATED="1786158664765" ID="ID_648018543" MODIFIED="1786158667918" TEXT="Time Scales">
<node CREATED="1786209206778" ID="ID_269640533" MODIFIED="1786209241303" TEXT="scaffold"/>
<node CREATED="1786209243052" ID="ID_1553261410" MODIFIED="1786209244718" TEXT="nanos"/>
<node CREATED="1786209245890" ID="ID_1604120512" MODIFIED="1786209250925" TEXT="micros"/>
<node CREATED="1786209251492" ID="ID_145105903" MODIFIED="1786209253260" TEXT="millis"/>
<node CREATED="1786209253761" ID="ID_629485216" MODIFIED="1786209258316" TEXT="human perspective"/>
<node CREATED="1786209259165" ID="ID_1470267389" MODIFIED="1786209267846" TEXT="to put that into perspective...">
<node CREATED="1786209276951" ID="ID_1586351838" MODIFIED="1786209300679" TEXT="1 clock-cylce &#x2254; 1sec"/>
<node CREATED="1786385596426" ID="ID_1778998348" MODIFIED="1786385598101" TEXT="DRAM access &#x2192; 5 minutes"/>
<node CREATED="1786385847767" ID="ID_1420288927" MODIFIED="1786385849179" TEXT="SSD read &#x2192; 2 days"/>
<node CREATED="1786385857606" ID="ID_809852326" MODIFIED="1786385940382" TEXT="disk seek &#x2192; 6 months"/>
<node CREATED="1786385960632" ID="ID_829975895" MODIFIED="1786385962587" TEXT="one frame @ 25 fps &#x2192; 4 years"/>
2026-08-08 19:40:17 +02:00
</node>
</node>
2026-08-09 05:39:17 +02:00
<node CREATED="1786235838071" ID="ID_149312062" MODIFIED="1786235846841" TEXT="architectural challenge">
<node CREATED="1786235868263" ID="ID_439346940" MODIFIED="1786235884394" TEXT="I/O invades the control-flow">
<node CREATED="1786236083238" ID="ID_1030610372" MODIFIED="1786236095616" TEXT="I/O just happens"/>
<node CREATED="1786236097484" ID="ID_343037218" MODIFIED="1786236110925" TEXT="handling creates accidental overhead"/>
</node>
<node CREATED="1786236117616" ID="ID_960264533" MODIFIED="1786236129403" TEXT="Solution patterns">
<node CREATED="1785601495587" ID="ID_1049863439" MODIFIED="1786236168822" TEXT="block in processing"/>
<node CREATED="1785601569001" ID="ID_250647320" MODIFIED="1785601575268" TEXT="avoid the blocking"/>
<node CREATED="1785601798675" ID="ID_717937918" MODIFIED="1786236213144" TEXT="instruct I/O tasks"/>
</node>
<node CREATED="1786236228043" ID="ID_59513152" MODIFIED="1786236238313" TEXT="Excourse: Berkely vs. MIT">
<node CREATED="1786236251057" ID="ID_995829099" MODIFIED="1786236253406" TEXT="Berkely">
<node CREATED="1786236321789" ID="ID_1752234528" MODIFIED="1786236351802" TEXT="prefer simple code"/>
<node CREATED="1786236331604" ID="ID_1695326473" MODIFIED="1786236337591" TEXT="ship early"/>
</node>
<node CREATED="1786236356302" ID="ID_1804975294" MODIFIED="1786236358676" TEXT="MIT">
<node CREATED="1786236372934" ID="ID_768441053" MODIFIED="1786236387905" TEXT="prefer simple interface"/>
<node CREATED="1786236429183" ID="ID_1642532955" MODIFIED="1786236435988" TEXT="correctnes justifies complexity"/>
</node>
</node>
</node>
2026-08-09 20:28:35 +02:00
<node BACKGROUND_COLOR="#e1cdb4" CREATED="1786273770202" ID="ID_1917889441" MODIFIED="1786273856912" STYLE="bubble" TEXT="15">
<edge COLOR="#c00636"/>
<font NAME="SansSerif" SIZE="15"/>
</node>
2026-08-09 05:39:17 +02:00
<node CREATED="1786236925825" ID="ID_1490811401" MODIFIED="1786236928888" TEXT="io_uring">
<node CREATED="1786236937314" ID="ID_1437391420" MODIFIED="1786236941389" TEXT="Kernel-Interface">
<node CREATED="1786236989681" ID="ID_1900578005" MODIFIED="1786237025505" TEXT="a pair of ringbuffers">
<node CREATED="1786242103207" ID="ID_265581273" MODIFIED="1786242196867">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<u>Ringbuffer</u>:<br />
</p>
<p>
<font face="Monospaced" color="#704545">buffer[cursor % RING_SIZE]</font>
</p>
</body>
</html></richcontent>
</node>
2026-08-14 01:20:49 +02:00
<node COLOR="#338800" CREATED="1786242211296" ID="ID_1804746347" MODIFIED="1786663227758" TEXT="Kleinvieh....">
<icon BUILTIN="button_ok"/>
</node>
2026-08-09 05:39:17 +02:00
<node CREATED="1786242217560" ID="ID_1208716837" MODIFIED="1786242229913" TEXT="a queue for Submissions"/>
<node CREATED="1786242230765" ID="ID_120169631" MODIFIED="1786242235257" TEXT="a queue for Completions"/>
</node>
<node CREATED="1786242281758" ID="ID_458051448" MODIFIED="1786242284866" TEXT="memory-mapped">
<node CREATED="1786242286578" ID="ID_1783792321" MODIFIED="1786242301371" TEXT="ringbuffers"/>
<node CREATED="1786242292221" ID="ID_1267065092" MODIFIED="1786242303656" TEXT="data buffers"/>
</node>
<node CREATED="1786242318954" ID="ID_893637645" MODIFIED="1786242359199" TEXT="entries tagged with user data item"/>
<node CREATED="1786242363635" ID="ID_1548043873" MODIFIED="1786242386764" TEXT="submissions model classical syscalls"/>
</node>
<node CREATED="1786242404480" ID="ID_387275241" MODIFIED="1786242408617" TEXT="what we got....">
<node CREATED="1786242410435" ID="ID_673729734" MODIFIED="1786242417320" TEXT="making syscalls without making syscalls"/>
<node CREATED="1786242418928" ID="ID_66154275" MODIFIED="1786242428469" TEXT="this started a security nightmare..."/>
</node>
<node CREATED="1786242489571" ID="ID_312711315" MODIFIED="1786242495102" TEXT="liburing">
<node CREATED="1786242497913" ID="ID_231424686" MODIFIED="1786242502130" TEXT="thin abstraction layer"/>
<node CREATED="1786242503167" ID="ID_90257215" MODIFIED="1786242511283" TEXT="programmer friendly interface">
<node CREATED="1786242534132" ID="ID_803087090" MODIFIED="1786242542775" TEXT="setup uring"/>
<node CREATED="1786242549354" ID="ID_999494168" MODIFIED="1786242562910" TEXT="&#xbb;API functions&#xab; to build SQE"/>
<node CREATED="1786242565728" ID="ID_1698341247" MODIFIED="1786242581586" TEXT="can &#xbb;peek&#xab; or &#xbb;block&#xab; on the completion queue"/>
</node>
<node CREATED="1786242586984" ID="ID_1554868288" MODIFIED="1786242595184" TEXT="But: should understand what happens below"/>
</node>
</node>
2026-08-09 20:28:35 +02:00
<node BACKGROUND_COLOR="#e1cdb4" CREATED="1786273770202" ID="ID_1086944280" MODIFIED="1786273936054" STYLE="bubble" TEXT="20">
<edge COLOR="#c00636"/>
<font NAME="SansSerif" SIZE="15"/>
</node>
2026-08-09 05:39:17 +02:00
<node CREATED="1786243142002" ID="ID_669329022" MODIFIED="1786243145711" TEXT="Synchronisation">
<node CREATED="1785705215460" ID="ID_753464307" MODIFIED="1785705218215" TEXT="two meanings">
<node CREATED="1785705219604" ID="ID_1231615837" MODIFIED="1785705224583" TEXT="control-flow correlation"/>
<node CREATED="1785705225235" ID="ID_204102711" MODIFIED="1785705228894" TEXT="visibility management"/>
</node>
2026-08-09 20:28:35 +02:00
<node CREATED="1785705991375" ID="ID_695911002" MODIFIED="1786295032660" TEXT="visibility?? &#x27f9; cache-coherence !!">
<arrowlink COLOR="#687482" DESTINATION="ID_1882333702" ENDARROW="Default" ENDINCLINATION="-722;-1005;" ID="Arrow_ID_1367738858" STARTARROW="None" STARTINCLINATION="-213;18;"/>
2026-08-09 05:39:17 +02:00
</node>
<node CREATED="1786245208683" ID="ID_899315378" MODIFIED="1786245216190" TEXT="Adversaries">
<node CREATED="1786245217834" ID="ID_1803513261" MODIFIED="1786245241950" TEXT="cache effects, NUMA"/>
<node CREATED="1786245243012" ID="ID_1155344476" MODIFIED="1786245291603" TEXT="the compiler / optimizer"/>
</node>
<node CREATED="1786246113057" ID="ID_1523190067" MODIFIED="1786246116003" TEXT="Abstractions">
<node CREATED="1786246117555" ID="ID_969154444" MODIFIED="1786246121651" TEXT="Barriers / Fences">
<node CREATED="1786246153449" ID="ID_1750624298" MODIFIED="1786246153449" TEXT="StoreStore"/>
<node CREATED="1786246164738" ID="ID_1211999967" MODIFIED="1786246164738" TEXT="LoadLoad"/>
<node CREATED="1786246177165" ID="ID_1775414678" MODIFIED="1786246177165" TEXT="LoadStore"/>
<node CREATED="1786246190951" ID="ID_631075013" MODIFIED="1786246190951" TEXT="StoreLoad"/>
2026-08-09 05:39:17 +02:00
</node>
<node CREATED="1786246217323" ID="ID_1893817108" MODIFIED="1786246222075" TEXT="Memory Order">
<node CREATED="1786246223006" ID="ID_1140165000" MODIFIED="1786246224709" TEXT="relaxed"/>
<node CREATED="1786246225377" ID="ID_165584437" MODIFIED="1786246249330" TEXT="acquire"/>
<node CREATED="1786246251318" ID="ID_1464583765" MODIFIED="1786246252857" TEXT="release"/>
<node CREATED="1786246253430" ID="ID_214589823" MODIFIED="1786246263177" TEXT="seq_cst"/>
</node>
</node>
<node CREATED="1786245528744" ID="ID_891133446" MODIFIED="1786245544593" TEXT="Example: producer &#x27f6; consumer">
<node COLOR="#338800" CREATED="1785791243995" ID="ID_537337249" MODIFIED="1786645653140" TEXT="Code-Beispiel">
<arrowlink COLOR="#53387c" DESTINATION="ID_1698936757" ENDARROW="Default" ENDINCLINATION="-206;113;" ID="Arrow_ID_1915855216" STARTARROW="None" STARTINCLINATION="-340;56;"/>
<icon BUILTIN="button_ok"/>
2026-08-09 05:39:17 +02:00
<node CREATED="1786245936803" ID="ID_1211062148" MODIFIED="1786245940949" TEXT="Zonen">
<node CREATED="1786245941715" ID="ID_167190015" MODIFIED="1786245945822" TEXT="Deklaration"/>
<node CREATED="1786245946151" ID="ID_1870232563" MODIFIED="1786245948582" TEXT="Producer"/>
<node CREATED="1786245949031" ID="ID_1605784790" MODIFIED="1786245950335" TEXT="Consumer"/>
</node>
<node CREATED="1786246037197" ID="ID_1751155176" MODIFIED="1786246052268" TEXT="&quot;ordinary stores&quot; &quot;ordinary loads&quot;"/>
<node CREATED="1786245952238" ID="ID_620086092" MODIFIED="1786245961769" TEXT="Barriers">
<node CREATED="1786245976787" ID="ID_1632014732" MODIFIED="1786245983275" TEXT="StoreStore + LoadStore"/>
<node CREATED="1786246013602" ID="ID_275398204" MODIFIED="1786246015120" TEXT="LoadLoad + LoadStore"/>
</node>
<node CREATED="1786246068359" ID="ID_1757141587" MODIFIED="1786246072948" TEXT="walk away...">
<node CREATED="1786246072948" ID="ID_486362621" MODIFIED="1786246074745" TEXT="no information gained, positive or negative"/>
</node>
</node>
</node>
<node CREATED="1786246360156" ID="ID_1257663952" MODIFIED="1786246365634" TEXT="Futex and wait-states">
<node CREATED="1786246367647" ID="ID_1794884039" MODIFIED="1786246375878" TEXT="Atomic in userspace"/>
<node CREATED="1786246511906" ID="ID_1181870053" MODIFIED="1786246524005" TEXT="Check: flag equals expected">
<node CREATED="1786246526121" ID="ID_481886127" MODIFIED="1786246545962" TEXT="yes &#x27f9; sleep (Kernel call)"/>
<node CREATED="1786246546790" ID="ID_1627212633" MODIFIED="1786246561350" TEXT="no &#x27f9; immeditately return"/>
</node>
<node CREATED="1786246572246" ID="ID_1144371495" MODIFIED="1786413324339" TEXT="Wakeup: signal threads sleeping on Futex"/>
2026-08-09 05:39:17 +02:00
</node>
</node>
2026-08-09 20:28:35 +02:00
<node BACKGROUND_COLOR="#e1cdb4" CREATED="1786273770202" ID="ID_1746764837" MODIFIED="1786273945852" STYLE="bubble" TEXT="25">
<edge COLOR="#c00636"/>
<font NAME="SansSerif" SIZE="15"/>
</node>
<node CREATED="1786295523684" ID="ID_169088650" MODIFIED="1786329324650" TEXT="Architecture pattern">
<node CREATED="1786295557794" ID="ID_1808999624" MODIFIED="1786295569665" TEXT="need state-tracking">
<node CREATED="1786295582962" ID="ID_1498250668" MODIFIED="1786295610245" TEXT="implicit: paid for in threads"/>
<node CREATED="1786295603180" ID="ID_1637759417" MODIFIED="1786295608374" TEXT="explicit: paid for in bookkeeping">
<node CREATED="1786295629186" ID="ID_1808473223" MODIFIED="1786295636722" TEXT="hand-written state engine"/>
<node CREATED="1786295637428" ID="ID_1279704637" MODIFIED="1786295643057" TEXT="continuation-passing"/>
<node CREATED="1786295643645" ID="ID_678756615" MODIFIED="1786295646665" TEXT="Coroutines"/>
</node>
</node>
<node CREATED="1786295737962" ID="ID_871161331" MODIFIED="1786295765746" TEXT="need backpressure (flow-control)"/>
<node CREATED="1786295878057" ID="ID_1225397941" MODIFIED="1786296066181" TEXT="need processing framework">
<node CREATED="1786296109950" ID="ID_1143937459" MODIFIED="1786415411620" TEXT="simple solution: polling thread">
<node CREATED="1785875601816" ID="ID_1590769713" MODIFIED="1786415380089">
2026-08-09 20:28:35 +02:00
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Thread polls &#187;readiness&#171; &#10233; <b>Reactor</b>
2026-08-09 20:28:35 +02:00
</p>
</body>
</html></richcontent>
2026-08-09 20:28:35 +02:00
</node>
<node CREATED="1785875601816" ID="ID_1044114554" MODIFIED="1786296163481">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Thread polls &#187;completion&#171; &#10233; <b>Proactor</b>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#e1cdb4" CREATED="1786273770202" ID="ID_549654961" MODIFIED="1786273954701" STYLE="bubble" TEXT="30">
<edge COLOR="#c00636"/>
<font NAME="SansSerif" SIZE="15"/>
</node>
<node CREATED="1786296507666" ID="ID_593828575" MODIFIED="1786329326901" TEXT="Video Player Demo">
<node CREATED="1786296552689" ID="ID_763351551" MODIFIED="1786296555930" TEXT="Framework">
<node CREATED="1786296570775" ID="ID_546911678" MODIFIED="1786296573658" TEXT="GTK shell"/>
<node CREATED="1786296580101" ID="ID_337171450" MODIFIED="1786296582807" TEXT="trigger event"/>
<node CREATED="1786296583381" ID="ID_1632372627" MODIFIED="1786296603366" TEXT="construct Player">
<node CREATED="1786297897789" ID="ID_1056988246" MODIFIED="1786297901288" TEXT="show fields">
<node CREATED="1786298064134" ID="ID_331974337" MODIFIED="1786298067141" TEXT="BufferDispatcher"/>
<node CREATED="1786298067640" ID="ID_1843777087" MODIFIED="1786298070248" TEXT="VideoDisplay"/>
<node CREATED="1786298071072" ID="ID_1661104920" MODIFIED="1786298073416" TEXT="Thread"/>
</node>
</node>
<node CREATED="1786298087691" ID="ID_222783533" MODIFIED="1786415135482" TEXT="Excursion: VideoDisplay">
2026-08-09 20:28:35 +02:00
<node CREATED="1786298129126" ID="ID_823722007" MODIFIED="1786298133704" TEXT="hard wired dimensions"/>
<node CREATED="1786298134293" ID="ID_1908151271" MODIFIED="1786298145599" TEXT="defines Callback-Interface: PixelFeed"/>
<node CREATED="1786298148699" ID="ID_655256792" MODIFIED="1786298154142" TEXT="gets subclass"/>
<node CREATED="1786298154658" ID="ID_1806158727" MODIFIED="1786298158892" TEXT="binds GlibDispatcher">
<node CREATED="1786298200732" ID="ID_790657633" MODIFIED="1786298211438" TEXT="function displayFrame()"/>
<node CREATED="1786298222064" ID="ID_1356177379" MODIFIED="1786298226532" TEXT="runs in GUI-Thread"/>
</node>
</node>
<node CREATED="1786298272688" ID="ID_315070025" MODIFIED="1786298274946" TEXT="Player">
<node CREATED="1786298277409" ID="ID_810417371" MODIFIED="1786298281612" TEXT="now show all fields"/>
<node CREATED="1786298283402" ID="ID_1682945175" MODIFIED="1786298292387" TEXT="show implementation of PixelFeed"/>
<node CREATED="1786298394770" ID="ID_1136560741" MODIFIED="1786298397453" TEXT="show methods"/>
<node CREATED="1786298398153" ID="ID_519557401" MODIFIED="1786298416627" TEXT="Thread binds &#x27f6; playVideo()"/>
<node COLOR="#338800" CREATED="1786299984706" ID="ID_203769685" MODIFIED="1786645672689" TEXT="Diagram: thread-handoff">
<arrowlink COLOR="#2d545f" DESTINATION="ID_1123988986" ENDARROW="Default" ENDINCLINATION="-1879;-116;" ID="Arrow_ID_395148395" STARTARROW="None" STARTINCLINATION="-1226;128;"/>
<icon BUILTIN="button_ok"/>
2026-08-09 20:28:35 +02:00
</node>
</node>
</node>
<node CREATED="1786298441719" ID="ID_178998279" MODIFIED="1786298450511" TEXT="Proactor: Setup">
<node CREATED="1786298478678" ID="ID_483191682" MODIFIED="1786298483569" TEXT="open RAW file"/>
<node CREATED="1786298484293" ID="ID_1457754033" MODIFIED="1786298492531" TEXT="allocate buffers"/>
<node CREATED="1786298495764" ID="ID_1090493148" MODIFIED="1786298502727" TEXT="setup URing"/>
<node CREATED="1786298512138" ID="ID_77467435" MODIFIED="1786298532603" TEXT="configure frame-timer">
<node CREATED="1786298613777" ID="ID_133016500" MODIFIED="1786298619150" TEXT="Chrono 20ms"/>
<node CREATED="1786298627786" ID="ID_1088870607" MODIFIED="1786298633279" TEXT="open next URing slot"/>
<node CREATED="1786298648159" ID="ID_1948236645" MODIFIED="1786298660529" TEXT="Liburing builder function"/>
<node CREATED="1786298666021" ID="ID_575746592" MODIFIED="1786298669925" TEXT="marker tag"/>
</node>
<node CREATED="1786298696825" ID="ID_1768745663" MODIFIED="1786298703820" TEXT="fill URing with read tasks..."/>
<node CREATED="1786298704384" ID="ID_700273752" MODIFIED="1786298707360" TEXT="commit ring"/>
</node>
<node CREATED="1786298717326" ID="ID_1549233993" MODIFIED="1786298727632" TEXT="Proactor: fill URing">
<node CREATED="1786298759408" ID="ID_431380920" MODIFIED="1786298765827" TEXT="state definition"/>
<node CREATED="1786298784085" ID="ID_1050610861" MODIFIED="1786298805052" TEXT="read pos in src media"/>
<node CREATED="1786298821191" ID="ID_917561038" MODIFIED="1786298825483" TEXT="open next URing slot"/>
<node CREATED="1786298851342" ID="ID_1493824717" MODIFIED="1786298856878" TEXT="configure read() task"/>
<node CREATED="1786298863861" ID="ID_221520193" MODIFIED="1786298869316" TEXT="add cursor as tag"/>
<node CREATED="1786298883506" ID="ID_761482094" MODIFIED="1786298886531" TEXT="mark state slot"/>
<node CREATED="1786298890866" ID="ID_504418818" MODIFIED="1786298894193" TEXT="advance cursor"/>
</node>
<node CREATED="1786298951071" ID="ID_195236834" MODIFIED="1786298967615" TEXT="Proactor-loop">
<node CREATED="1786298980939" ID="ID_1748071253" MODIFIED="1786298987653" TEXT="blocking wait for next CQE"/>
<node CREATED="1786299274774" ID="ID_777989489" MODIFIED="1786299284508" TEXT="frame-nr as tag"/>
<node CREATED="1786299305246" ID="ID_32265191" MODIFIED="1786299308558" TEXT="case-distinction">
<node CREATED="1786299310829" ID="ID_604033401" MODIFIED="1786299317452" TEXT="read completed"/>
<node CREATED="1786299318048" ID="ID_328297570" MODIFIED="1786299321155" TEXT="frame tick"/>
</node>
<node CREATED="1786299359790" ID="ID_1128649186" MODIFIED="1786299370033" TEXT="confirm CQE as handled"/>
</node>
<node CREATED="1786299397501" ID="ID_981472972" MODIFIED="1786299419821" TEXT="Proactor: completed read">
<node CREATED="1786299493124" ID="ID_1394193649" MODIFIED="1786457445555" TEXT="pick state slot for frame-num"/>
2026-08-09 20:28:35 +02:00
<node CREATED="1786299531301" ID="ID_1067904542" MODIFIED="1786299535994" TEXT="detect incomplete read"/>
<node CREATED="1786299537788" ID="ID_630083033" MODIFIED="1786299543322" TEXT="advance state-engine">
<node CREATED="1786298759408" ID="ID_1255181239" MODIFIED="1786298765827" TEXT="state definition"/>
</node>
</node>
<node CREATED="1786299588414" ID="ID_814619160" MODIFIED="1786299593539" TEXT="Proactor: display frame">
<node CREATED="1786299616610" ID="ID_248603712" MODIFIED="1786299617932" TEXT="UringVideoPlayer::maybeDisplayFrame()">
<node CREATED="1786299617932" ID="ID_1440748860" MODIFIED="1786299621861" TEXT="Backpressure">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
</node>
</node>
2026-08-12 07:43:34 +02:00
<node CREATED="1786299650606" ID="ID_1358348030" MODIFIED="1786299654447" TEXT="state definition">
<node COLOR="#338800" CREATED="1786506976676" ID="ID_305985132" MODIFIED="1786660990622" TEXT="use of state per slot...">
<arrowlink COLOR="#627a97" DESTINATION="ID_1806019726" ENDARROW="Default" ENDINCLINATION="844;-50;" ID="Arrow_ID_1270577683" STARTARROW="None" STARTINCLINATION="506;72;"/>
<icon BUILTIN="button_ok"/>
2026-08-12 07:43:34 +02:00
</node>
</node>
2026-08-09 20:28:35 +02:00
<node CREATED="1786329171661" ID="ID_652095992" MODIFIED="1786329177583" TEXT="cursor nextShow_">
<node CREATED="1786329188409" ID="ID_1322310081" MODIFIED="1786329219244" TEXT="advanced only when display complete"/>
<node CREATED="1786329228286" ID="ID_1649533931" MODIFIED="1786329233043" TEXT="used to access state"/>
</node>
<node CREATED="1786458013162" ID="ID_835285601" MODIFIED="1786458019665" TEXT="cross-thread hand-off">
<node CREATED="1786458038925" MODIFIED="1786458038925" TEXT="read barrier"/>
<node CREATED="1786458038925" MODIFIED="1786458038925" TEXT="write barrier"/>
</node>
<node CREATED="1786458201693" ID="ID_303803696" MODIFIED="1786458204937" TEXT="Backpressure"/>
</node>
<node CREATED="1786329296620" ID="ID_945769615" MODIFIED="1786329301176" TEXT="EGL: display frame">
<node CREATED="1786458316212" ID="ID_1092541925" MODIFIED="1786458499072" TEXT="tolerate Backpressure"/>
<node CREATED="1786458332764" ID="ID_1698018544" MODIFIED="1786458348416" TEXT="use callback interface"/>
<node CREATED="1786458353163" ID="ID_1174511438" MODIFIED="1786458621462" TEXT="cross-thread synchronisation">
<node CREATED="1786458563096" ID="ID_1610867648" MODIFIED="1786458568812" TEXT="acquire frame: read barrier"/>
<node CREATED="1786458569364" ID="ID_819239168" MODIFIED="1786458577996" TEXT="signal complete: write barrier"/>
</node>
2026-08-09 20:28:35 +02:00
</node>
</node>
<node BACKGROUND_COLOR="#e1cdb4" CREATED="1786273770202" ID="ID_528855258" MODIFIED="1786273966234" STYLE="bubble" TEXT="40">
<edge COLOR="#c00636"/>
<font NAME="SansSerif" SIZE="15"/>
</node>
2026-08-12 07:43:34 +02:00
<node CREATED="1786459033198" ID="ID_633597539" MODIFIED="1786459039338" TEXT="Relevance for Lumiera">
<node CREATED="1786459047294" ID="ID_226094184" MODIFIED="1786459216633" TEXT="Push vs Pull">
<node CREATED="1786459117828" ID="ID_1474858578" MODIFIED="1786459119350" TEXT="Proactor requires dispatch of tasks"/>
<node CREATED="1786459204313" ID="ID_973630114" MODIFIED="1786459211335" TEXT="Lumiera is entirely oriented towards pull"/>
</node>
<node CREATED="1786459308503" ID="ID_800162032" MODIFIED="1786459309672" TEXT="active Workers and passive Scheduler"/>
<node CREATED="1786459422382" ID="ID_1700153508" MODIFIED="1786459423553" TEXT="Worker peeks URing &#x27f6; follow-up Job"/>
</node>
<node CREATED="1786459430927" ID="ID_1463634499" MODIFIED="1786459435868" TEXT="Have a closer look..."/>
</node>
</node>
<node CREATED="1754271624646" ID="ID_52826289" MODIFIED="1754271626857" TEXT="Grafik">
<node COLOR="#338800" CREATED="1785817833206" ID="ID_327257827" MODIFIED="1786640246119" TEXT="Diagramm &quot;Time Scales&quot;">
<icon BUILTIN="button_ok"/>
<node CREATED="1785817842583" ID="ID_306380330" MODIFIED="1785817861311" TEXT="Idee: m&#xf6;chte die gewaltigen Zeitspannen visualisieren">
<icon BUILTIN="idea"/>
<node CREATED="1785817863252" ID="ID_299103430" MODIFIED="1785817884168" TEXT="m&#xf6;chte klarmachen, warum wir es mit &#xbb;Stockwerken&#xab; zu tun haben"/>
<node CREATED="1785817885505" ID="ID_1002287440" MODIFIED="1785817898591" TEXT="brauche ein Framework, in dem ich die vierschiednen Zahlen einordnen kann"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785817904306" FOLDED="true" ID="ID_1762091251" MODIFIED="1786633113969" STYLE="fork" TEXT="diese Idee mit Claude ausarbeiten....">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1785817934211" ID="ID_1193226285" MODIFIED="1785817983642" TEXT="lasse Claude die Timings aufsammeln aus dem anderen Diskussionsthread">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
habe jetzt einen ziemlich langen Thread mit Recherche / Hintergrundwissen f&#252;r mich; in dem Rahmen sind die diversen Zeitangaben bereits alle aufgetaucht
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785817989939" ID="ID_1738971982" MODIFIED="1785818000822" TEXT="lasse Zahlen nochmal &#xfc;berpr&#xfc;fen und mir einige Quellen suchen"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785818001802" ID="ID_420827912" MODIFIED="1785818058289" STYLE="fork" TEXT="Vorschlag von Claude: plausibel machen durch Analogie: 1 clock-tick &#x2259; 1 sec">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="idea"/>
<node CREATED="1785818059596" ID="ID_1473752885" MODIFIED="1785818077088" TEXT="Geil">
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1785818061762" ID="ID_1056499967" MODIFIED="1785818074164" TEXT="das sind alle Goldhamlster Deutschlands aneinandergereicht"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1785818084662" ID="ID_1277933693" MODIFIED="1785818095365" TEXT="werde das als separates Slide bringen">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1785818213769" ID="ID_1124818051" MODIFIED="1785818244989" TEXT="lasse mir einen Vorschlag machen, mit reduzierter Auswahl und didaktisch-verk&#xfc;rzten Titeln"/>
<node CREATED="1785818246457" ID="ID_249476374" MODIFIED="1785818250452" TEXT="einige wenige Korrekturen"/>
<node CREATED="1785818251079" ID="ID_306091121" MODIFIED="1785818264085" TEXT="diskutiere Tabellenform vs. Diagramm"/>
<node CREATED="1785818264742" ID="ID_1640435583" MODIFIED="1785818276130" TEXT="lasse Claude ausrechnen, ob das Diagramm lesbar ist">
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785818298026" ID="ID_987123563" MODIFIED="1785818345795" STYLE="fork" TEXT="Vorschlag Claude: aufbrechen in &#xbb;Stockwerke&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Interessante Idee ... Claude greift also mein Framing vom ersten Prompt wieder auf ... erscheint mir sehr plausibel
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1785818347664" ID="ID_1543794705" MODIFIED="1785818898650" TEXT="damit lie&#xdf;e sich das in 4 &#xbb;Stockwerke&#xab; unterbringen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das hat Claude interessanterweise erst gesehen, nachdem ich an den l&#228;ngsten Zeitspannen etwas getweakt hatte. Mir war aufgefallen 1000sec &#8776; 15min &#10233; damit kommen wir mit einer Sekunden-Skala als 4.Zeile gut aus
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785818395777" ID="ID_1984967393" MODIFIED="1785818581196" TEXT="Idee: teile auf in &#xbb;Maschine&#xab; &#x2014; &#xbb;Mensch&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das ergab sich aus der Konversation: im Grunde reichen die ganzen Maschinen-relevanten Zeiten hoch bis 10ms / etwa an dem Punkt beginnen Timings, die vom Menschen wahrnehmbar sind.
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1785818286987" ID="ID_346780786" MODIFIED="1785818292938" TEXT="Entscheidung f&#xfc;r ein Diagramm">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#338800" CREATED="1785818430680" ID="ID_662868064" MODIFIED="1785818900154" TEXT="lasse Claude ein geeignetes SVG generieren">
<icon BUILTIN="button_ok"/>
<node CREATED="1785818441734" ID="ID_953591500" MODIFIED="1785818447505" TEXT="nach meinen Vorgaben..."/>
<node CREATED="1785818447838" ID="ID_161232521" MODIFIED="1785818484948" TEXT="generiert ein zun&#xe4;chst sichtbares &quot;scaffold&quot;"/>
<node CREATED="1785818487850" ID="ID_206426899" MODIFIED="1785818500771" TEXT="dann jeweils einen transparenten Layer f&#xfc;r jedes &#xbb;Stockwerk&#xab;"/>
<node CREATED="1785818501622" ID="ID_613662939" MODIFIED="1785818517560" TEXT="ein Dim-Layer den man zuschalten kann, wenn man in den &quot;menschlichen&quot;-Bereich geht"/>
<node BACKGROUND_COLOR="#ece0bb" CREATED="1785818702064" ID="ID_540432980" MODIFIED="1785818738052" TEXT="Claude schreibt tats&#xe4;chlich ein Python-Programm, das er mir auch mitgibt">
<icon BUILTIN="ksmiletris"/>
<node CREATED="1785863757380" ID="ID_1079327219" MODIFIED="1785863764251" TEXT="Compile-Check">
<node CREATED="1785863765224" ID="ID_24534958" MODIFIED="1785863774760" TEXT="python3 -m py_compile gen-time-scales-diagram.py">
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1785818905823" ID="ID_1365657985" MODIFIED="1786633104328" TEXT="Diagramm grafisch ausfeilen und an Seitenlayout anpassen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1786633085054" ID="ID_1243923715" MODIFIED="1786640243900" TEXT="Auszug f&#xfc;r Ver&#xe4;nderung Disk-Access">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1786245320212" ID="ID_1882333702" MODIFIED="1786643758529" TEXT="Diagramm &quot;cache coherence&quot;">
2026-08-09 20:28:35 +02:00
<linktarget COLOR="#687482" DESTINATION="ID_1882333702" ENDARROW="Default" ENDINCLINATION="-722;-1005;" ID="Arrow_ID_1367738858" SOURCE="ID_695911002" STARTARROW="None" STARTINCLINATION="-213;18;"/>
<icon BUILTIN="button_ok"/>
2026-08-09 05:39:17 +02:00
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1786245352847" ID="ID_563431072" MODIFIED="1786245357032" TEXT="coherence.svg">
<icon BUILTIN="wizard"/>
</node>
<node COLOR="#006699" CREATED="1786245367557" ID="ID_1248853430" MODIFIED="1786643762078" TEXT="Animation, die schreib- und Leseoperationen zeigt..."/>
2026-08-09 05:39:17 +02:00
</node>
<node COLOR="#338800" CREATED="1785877291601" ID="ID_517600933" MODIFIED="1786660999055" TEXT="Diagramm &quot;State-Ring&quot;">
2026-08-12 07:43:34 +02:00
<linktarget COLOR="#c23657" DESTINATION="ID_517600933" ENDARROW="Default" ENDINCLINATION="134;15;" ID="Arrow_ID_670746681" SOURCE="ID_270282240" STARTARROW="None" STARTINCLINATION="23;-122;"/>
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785877302464" ID="ID_1725774104" MODIFIED="1785880120631" STYLE="fork" TEXT="Ein Schema ist nebenbei im Chat mit Claude &quot;angefallen&quot;">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<arrowlink COLOR="#339dbd" DESTINATION="ID_1806019726" ENDARROW="Default" ENDINCLINATION="121;0;" ID="Arrow_ID_938057656" STARTARROW="None" STARTINCLINATION="-30;41;"/>
2026-08-09 20:28:35 +02:00
<arrowlink COLOR="#339dbd" DESTINATION="ID_1123988986" ENDARROW="Default" ENDINCLINATION="121;0;" ID="Arrow_ID_1210919925" STARTARROW="None" STARTINCLINATION="-30;41;"/>
<icon BUILTIN="wizard"/>
<node CREATED="1785877324133" ID="ID_578045214" MODIFIED="1785877342463" TEXT="hatte ihn das in Graphviz definieren und nach SVG rendern lassen">
<icon BUILTIN="idea"/>
</node>
<node COLOR="#006699" CREATED="1785877343638" ID="ID_801220717" MODIFIED="1786661002146" TEXT="brauchbar?">
<icon BUILTIN="help"/>
<node CREATED="1786661006589" ID="ID_1093573746" MODIFIED="1786661048132" TEXT="ja: habs vor dem State-Ring eingebaut"/>
<node CREATED="1786661020642" ID="ID_1076990072" MODIFIED="1786661039901" TEXT="sogar sehr wichtig, man mu&#xdf; die State-Engine wenigstenseinmal sehen"/>
<node COLOR="#338800" CREATED="1786661049458" ID="ID_1526572846" MODIFIED="1786661056718" TEXT="hab das Layout umgestellt">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1785880050158" ID="ID_1806019726" MODIFIED="1786660987043" TEXT="Diagramm &quot;State-Engine&quot;">
<linktarget COLOR="#627a97" DESTINATION="ID_1806019726" ENDARROW="Default" ENDINCLINATION="844;-50;" ID="Arrow_ID_1270577683" SOURCE="ID_305985132" STARTARROW="None" STARTINCLINATION="506;72;"/>
<linktarget COLOR="#339dbd" DESTINATION="ID_1806019726" ENDARROW="Default" ENDINCLINATION="121;0;" ID="Arrow_ID_938057656" SOURCE="ID_1725774104" STARTARROW="None" STARTINCLINATION="-30;41;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1786656669970" HGAP="36" ID="ID_817187689" MODIFIED="1786656686513" TEXT="Diagramm: Beschriftungen vereinfachen..." VSHIFT="9"/>
</node>
<node COLOR="#338800" CREATED="1785880050158" ID="ID_1123988986" MODIFIED="1786640284601" TEXT="Diagramm &quot;Thread-handoff&quot;">
<linktarget COLOR="#2d545f" DESTINATION="ID_1123988986" ENDARROW="Default" ENDINCLINATION="-1879;-116;" ID="Arrow_ID_395148395" SOURCE="ID_203769685" STARTARROW="None" STARTINCLINATION="-1226;128;"/>
<linktarget COLOR="#339dbd" DESTINATION="ID_1123988986" ENDARROW="Default" ENDINCLINATION="121;0;" ID="Arrow_ID_1210919925" SOURCE="ID_1725774104" STARTARROW="None" STARTINCLINATION="-30;41;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#006699" CREATED="1786456142877" HGAP="42" ID="ID_724342124" MODIFIED="1786640276274" TEXT="visuell klarer machen" VSHIFT="19">
<icon BUILTIN="yes"/>
</node>
</node>
<node COLOR="#338800" CREATED="1785877094220" ID="ID_404598432" MODIFIED="1786417301454" TEXT="Diagramm &quot;Application setup&quot;">
<icon BUILTIN="button_ok"/>
<node CREATED="1786417174016" ID="ID_1391583938" MODIFIED="1786417216873" TEXT="Verwende SVG vom letzten Jahr">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
devel/froscon/research/drawings/DemoApp.svg
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1786417218690" ID="ID_1381822955" MODIFIED="1786417293609" TEXT="mache einen &#xbb;fliegenden Edit&#xab; und tausche den Text aus">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...alles ausgeblendet, au&#223;der dem einen Callback, den ich brauche; Seitengr&#246;&#223;e an neue Pr&#228;sentation angepa&#223;t, als PNG exportiert, in Libreoffice gelinkt
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#bd0711" CREATED="1786417231271" ID="ID_83397102" MODIFIED="1786417241997" TEXT="SVG nicht gespeichert">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1754874947759" ID="ID_920995429" MODIFIED="1754874949169" TEXT="Code">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1754875923722" FOLDED="true" ID="ID_1802306052" MODIFIED="1786417869822" TEXT="Hau-zu">
<linktarget COLOR="#284abc" DESTINATION="ID_1802306052" ENDARROW="Default" ENDINCLINATION="-386;101;" ID="Arrow_ID_884782059" SOURCE="ID_1170402440" STARTARROW="None" STARTINCLINATION="-430;-61;"/>
2024-08-13 15:45:04 +02:00
<icon BUILTIN="idea"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1754875935034" ID="ID_1639632743" MODIFIED="1754876018517" TEXT="Code in Eclipse ausw&#xe4;hlen">
<icon BUILTIN="full-1"/>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1754875944152" ID="ID_4703524" MODIFIED="1754876021730" TEXT="Drucken &gt; Auswahl, Format: SVG">
<icon BUILTIN="full-2"/>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1754875975404" ID="ID_121615712" MODIFIED="1754876025172" TEXT="mit Inkscape &#xf6;ffnen">
<icon BUILTIN="full-3"/>
2024-08-04 02:41:20 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1754875988632" ID="ID_277631257" MODIFIED="1754876028627" TEXT="Teile ausw&#xe4;hlen">
<icon BUILTIN="full-4"/>
2024-08-04 02:41:20 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1754875995617" ID="ID_361060197" MODIFIED="1754876031868" TEXT="Export als Plain-SVG, Hintergrundfarbe setzen">
<icon BUILTIN="full-5"/>
</node>
</node>
<node COLOR="#338800" CREATED="1785876360880" ID="ID_1803475906" MODIFIED="1786645685862" TEXT="Animation: Producer &#x27f6; Consumer | Fences">
<icon BUILTIN="button_ok"/>
</node>
2026-08-14 01:20:49 +02:00
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1785877864405" ID="ID_400522389" MODIFIED="1786661072794" TEXT="Animation: State-Ring">
<icon BUILTIN="button_cancel"/>
</node>
<node COLOR="#338800" CREATED="1785877113392" ID="ID_23421813" MODIFIED="1786645690581" TEXT="Animation: Application-Setup">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1786466566730" ID="ID_57913077" MODIFIED="1786645693729" TEXT="Animation: Player and Displayer-Object">
<icon BUILTIN="button_ok"/>
2026-08-12 07:43:34 +02:00
</node>
2026-08-14 01:20:49 +02:00
<node COLOR="#338800" CREATED="1786466585843" ID="ID_1116610832" MODIFIED="1786661099951" TEXT="Animation: Proactor">
<icon BUILTIN="button_ok"/>
2026-08-12 07:43:34 +02:00
<node CREATED="1786466604005" ID="ID_270282240" MODIFIED="1786466632751" TEXT="integrate animated State-Ring">
<arrowlink COLOR="#c23657" DESTINATION="ID_517600933" ENDARROW="Default" ENDINCLINATION="134;15;" ID="Arrow_ID_670746681" STARTARROW="None" STARTINCLINATION="23;-122;"/>
</node>
</node>
2026-08-14 01:20:49 +02:00
<node COLOR="#338800" CREATED="1786466591383" ID="ID_1030877081" MODIFIED="1786661101443" TEXT="Animation: show Frame">
<icon BUILTIN="button_ok"/>
2026-08-12 07:43:34 +02:00
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1527792581594" ID="ID_790723996" MODIFIED="1784563161118" TEXT="Einteilung">
2026-05-12 11:36:16 +02:00
<icon BUILTIN="list"/>
<node CREATED="1753974114295" ID="ID_1641813362" MODIFIED="1753974116252" TEXT="Raster">
<node CREATED="1753974119431" ID="ID_759544215" MODIFIED="1753974121343" TEXT="00">
<node CREATED="1753974169514" ID="ID_234783305" MODIFIED="1753974172149" TEXT="Intro"/>
2026-08-02 23:38:55 +02:00
<node CREATED="1784566134980" ID="ID_279521271" MODIFIED="1785600597022" TEXT="AI disclosure"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1753974173045" ID="ID_596438342" MODIFIED="1753974176460" TEXT="Motivation"/>
</node>
<node CREATED="1753974122080" ID="ID_898678427" MODIFIED="1753974123412" TEXT="05">
<node CREATED="1784565108710" ID="ID_408143160" MODIFIED="1784565111537" TEXT="Motivation"/>
<node CREATED="1784565173805" ID="ID_322453903" MODIFIED="1784565185228" TEXT="IO Performance"/>
</node>
<node CREATED="1753974124071" ID="ID_828442428" MODIFIED="1753974125374" TEXT="10">
2026-08-08 19:40:17 +02:00
<node CREATED="1784565219414" ID="ID_901538529" MODIFIED="1786157429844" TEXT="Architectural Challenge"/>
</node>
<node CREATED="1753974126086" ID="ID_1142589644" MODIFIED="1753974127609" TEXT="15">
<node CREATED="1784566104376" ID="ID_1173663906" MODIFIED="1784566113852" TEXT="io_uring - Framework"/>
</node>
<node CREATED="1753974128283" ID="ID_1933312793" MODIFIED="1753974129880" TEXT="20">
<node CREATED="1784566082801" ID="ID_148551179" MODIFIED="1784566091884" TEXT="Synchronisation"/>
</node>
<node CREATED="1753974130494" ID="ID_30563828" MODIFIED="1753974131747" TEXT="25">
<node CREATED="1784566074309" ID="ID_1854783000" MODIFIED="1784566080751" TEXT="Proactor"/>
</node>
<node CREATED="1753974132410" ID="ID_525774120" MODIFIED="1753974133906" TEXT="30">
<node CREATED="1784565076075" ID="ID_1565933015" MODIFIED="1784565087783" TEXT="Erl&#xe4;uterung Demo-Code"/>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1753974134537" ID="ID_1030002841" MODIFIED="1753974136090" TEXT="35"/>
<node CREATED="1753974138670" ID="ID_1376251682" MODIFIED="1753974140018" TEXT="40">
<node CREATED="1784566157630" ID="ID_595312300" MODIFIED="1784566162450" TEXT="push vs. pull"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1753974547741" ID="ID_1735284700" MODIFIED="1753974558814" TEXT="Relevance for Lumiera"/>
2024-08-13 15:45:04 +02:00
</node>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1520542395534" ID="ID_760028322" MODIFIED="1520542497542" TEXT="Vorstellungen"/>
<node CREATED="1786364062532" ID="ID_1622836734" MODIFIED="1786364120716" TEXT="Hau-zu">
<cloud COLOR="#e2d1a7"/>
<node CREATED="1786364126177" ID="ID_1833162586" MODIFIED="1786364134602" TEXT="LIbreoffice-Impress">
<node CREATED="1786364135443" ID="ID_1245717049" MODIFIED="1786364144906" TEXT="siehe allgemein in der Hau-zu-Mindmap"/>
<node CREATED="1786364146398" ID="ID_432726701" LINK="https://help.libreoffice.org/latest/en-GB/text/simpress/guide/masterpage.html?DbPAR=IMPRESS" MODIFIED="1786364175659" TEXT="Online-Hilfe"/>
<node CREATED="1723126573043" ID="ID_1986524075" MODIFIED="1723126582304" TEXT="F5 &quot;show presentation&quot;">
<node CREATED="1786422111400" ID="ID_222051309" MODIFIED="1786422119237" TEXT="shift-F5: start at current slide"/>
<node BACKGROUND_COLOR="#f9eabd" CREATED="1786422119842" ID="ID_1331826043" MODIFIED="1786422182253" TEXT="Alt+PgUp/Down : skip to next slide">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
skip all animations and start with next / previous slide
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node CREATED="1786364181361" ID="ID_1043221954" MODIFIED="1786364191451" TEXT="Gesamtbild">
<node CREATED="1786364192456" ID="ID_1575148140" MODIFIED="1786364232263" TEXT="Template-Pr&#xe4;sentation : TalkTemplate.otp">
<node CREATED="1786364237242" ID="ID_1191772196" MODIFIED="1786364251316" TEXT="Seitenformat (Slide&gt;Properties) : 16:10"/>
<node CREATED="1786364252488" ID="ID_61448220" MODIFIED="1786364312481" TEXT="es gibt nur zwei Master-Slides">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...weil diese auch jeweils ein ganzes Stylesheet definieren.
</p>
<p>
Daher beschr&#228;nke ich mich auf
</p>
<ul>
<li>
Slide mit wei&#223;em Hintergrund
</li>
<li>
Slide mit grauem Hintergrund + Boxes
</li>
</ul>
</body>
</html></richcontent>
</node>
<node CREATED="1786364317451" ID="ID_565586898" MODIFIED="1786364339330" TEXT="man kann Slides &#xfc;bertragen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
drag-n-drop, oder Slide &gt; Import from File
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1786366509057" ID="ID_525698459" MODIFIED="1786366514107" TEXT="Transitions">
<node CREATED="1786366514944" ID="ID_1263813603" MODIFIED="1786366527646" TEXT="normalerweise: Wipe, top-to-bottom, 0.50 sec"/>
<node CREATED="1786366533958" ID="ID_481931167" MODIFIED="1786366593378" TEXT="Abschnitte: Cover, bottom-to-top, 0.50sec"/>
</node>
</node>
<node CREATED="1786416696839" ID="ID_1362524710" MODIFIED="1786416704983" TEXT="Diagramme mit Inkscape">
<node CREATED="1786416705938" ID="ID_28831652" MODIFIED="1786416707596" TEXT="Import">
<node CREATED="1786416708594" ID="ID_702361373" MODIFIED="1786416713633" TEXT="direkt per SVG m&#xf6;glich">
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1786416718072" ID="ID_1090977848" MODIFIED="1786416727174" TEXT="Vorsicht">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1786416729597" ID="ID_1972453529" MODIFIED="1786416740080" TEXT="Gradienten..."/>
<node CREATED="1786416740907" ID="ID_124929683" MODIFIED="1786416744271" TEXT="kann gro&#xdf; werden"/>
</node>
</node>
<node CREATED="1786416746295" ID="ID_1784184616" MODIFIED="1786416750038" TEXT="problemlos: PNG"/>
</node>
<node CREATED="1786416760415" ID="ID_940342770" MODIFIED="1786416762836" TEXT="Einrichten...">
<node CREATED="1786416763913" ID="ID_1185241960" MODIFIED="1786416773549" TEXT="Rahmen in Libereoffice Impress"/>
<node CREATED="1786416774167" ID="ID_594660369" MODIFIED="1786416782482" TEXT="exakte Gr&#xf6;&#xdf;e in cm abgreifen"/>
<node CREATED="1786416783257" ID="ID_1508499783" MODIFIED="1786416794112" TEXT="Inkscape: Seite auf exakt diese cm dimensionieren"/>
<node CREATED="1786416859050" ID="ID_1598459551" MODIFIED="1786416878815" TEXT="Export: auf 300dpi stellen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
es ergeben sich daraus die Pixel
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1786416853832" ID="ID_178516863" MODIFIED="1786416858007" TEXT="Display-units: px"/>
</node>
<node CREATED="1786416888580" ID="ID_639227912" MODIFIED="1786416907585" TEXT="Importieren, ... dann Position / Gr&#xf6;&#xdf;e reparieren"/>
<node CREATED="1786417049583" ID="ID_1142971451" MODIFIED="1786417062171" TEXT="Round-Trip">
<node CREATED="1786417064751" ID="ID_1146043146" MODIFIED="1786417077122" TEXT="Rechtsklick auf Frame"/>
<node CREATED="1786417077757" ID="ID_640083563" MODIFIED="1786417087493" TEXT="Context-Men&#xfc; &gt; Replace"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1786417088908" ID="ID_661842770" MODIFIED="1786417110755" TEXT="Achtung: nicht link">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
<node CREATED="1786636300246" ID="ID_1556964088" MODIFIED="1786636303349" TEXT="Grafik-Elemente">
<node CREATED="1786636311908" ID="ID_967224913" MODIFIED="1786636315921" TEXT="radial highlight">
<node CREATED="1786636317638" ID="ID_1446984633" MODIFIED="1786636323244" TEXT="Elipse machen"/>
<node CREATED="1786636323560" ID="ID_1750225876" MODIFIED="1786636329490" TEXT="solid fill (yellow)"/>
<node CREATED="1786636330423" ID="ID_890201987" MODIFIED="1786636338504" TEXT="dann aber transparency radial"/>
<node CREATED="1786636338987" ID="ID_926004869" MODIFIED="1786636348707" TEXT="und border etwa 30%"/>
</node>
</node>
<node CREATED="1786417787916" ID="ID_1621049515" MODIFIED="1786417794895" TEXT="Code aus Eclipse">
<node CREATED="1786417797530" ID="ID_1170402440" MODIFIED="1786417869822" TEXT="Methode: Print-to-SVG">
<arrowlink COLOR="#284abc" DESTINATION="ID_1802306052" ENDARROW="Default" ENDINCLINATION="-386;101;" ID="Arrow_ID_884782059" STARTARROW="None" STARTINCLINATION="-430;-61;"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1786417806771" ID="ID_719589637" MODIFIED="1786417819086" TEXT="neuerdings geht direkt Copy-n-Paste">
<icon BUILTIN="idea"/>
</node>
</node>
2026-08-12 07:43:34 +02:00
<node CREATED="1786467933495" ID="ID_1038344188" MODIFIED="1786467938593" TEXT="Animationen / Transitions">
<node CREATED="1786467939404" ID="ID_1595177363" MODIFIED="1786467957429" TEXT="Wipe-Transition rundet auf ganze Sec">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1786467964227" ID="ID_1767548224" MODIFIED="1786468004220" TEXT="Workaround...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Transition auf &quot;None&quot;, dann Zeit eingeben, dann Transition auf &quot;Wipe&quot;, dann Richtung w&#228;hlen....
</p>
<p>
Funktioniert sogar, wenn man alle Slides der Animation ausw&#228;hlt
</p>
</body>
</html></richcontent>
2026-08-12 07:43:34 +02:00
</node>
</node>
<node CREATED="1786500620618" ID="ID_506862674" MODIFIED="1786500633235" TEXT="Dissolve-in f&#xfc;r ganzen Code-Frame">
<icon BUILTIN="idea"/>
<node CREATED="1786500635064" ID="ID_749122408" MODIFIED="1786500717725" TEXT="manchmal erstellt er einzelne Animationen f&#xfc;r jede Zeile">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...das w&#252;rde zwar letztlich funktionieren, wenn man dann ab dem 2.Absatz alle auf &quot;with previous&quot; umschaltet .... ist aber irre un&#252;bersichtlich.&#160; Verstehe nicht, warum er das manchmal macht (vielleicht, wenn man einzelne Abs&#228;tze schon formatiert hat?)
</p>
</body>
</html></richcontent>
2026-08-12 07:43:34 +02:00
</node>
<node CREATED="1786500657782" ID="ID_1681249470" MODIFIED="1786500756647" TEXT="Workaround: mit einem andern Objekt zusammen markieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Zwei Objekte markieren, Animation hinzuf&#252;gen, dann Animation des 2. Objekts wieder l&#246;schen &#10233; Ergebnis: man bekommt die Animation auf den ganzen Frame, nicht einzelne Abs&#228;tze
</p>
</body>
</html></richcontent>
2026-08-12 07:43:34 +02:00
</node>
</node>
</node>
</node>
2024-08-13 15:45:04 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1519523032397" ID="ID_1864078267" MODIFIED="1519527416043" TEXT="Outline">
<node CREATED="1715854555555" ID="ID_27747265" MODIFIED="1519523125652" TEXT="Motivation"/>
<node CREATED="1752677616942" ID="ID_995442147" MODIFIED="1752677618785" TEXT="Theorie"/>
<node CREATED="1752677553424" ID="ID_1570465768" MODIFIED="1752677565045" TEXT="Vorstellung: Beispielcode"/>
<node CREATED="1752677565873" ID="ID_274723028" MODIFIED="1752677578912" TEXT="Ausblick: Lumiera"/>
2024-08-13 15:45:04 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1724276104428" ID="ID_1401481461" MODIFIED="1755730925177" TEXT="Vortrag">
<icon BUILTIN="forward"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1754670462987" ID="ID_1774503317" MODIFIED="1779389203876" TEXT="Slides">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1754670469668" ID="ID_842741774" MODIFIED="1779389203289" STYLE="fork" TEXT="Template aus Vortrag FrOSCon 24">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1754690553647" ID="ID_1097447180" MODIFIED="1786698315555" TEXT="Sllides anlegen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1754790069195" ID="ID_532358745" MODIFIED="1786698317156" TEXT="Text ausarbeiten">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1754750859506" ID="ID_551478124" MODIFIED="1786698320272" TEXT="Animationen aufbauen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1786698500509" ID="ID_121807511" MODIFIED="1786698508055" TEXT="Vorbereitung auf den Vortag">
<node CREATED="1786698511733" ID="ID_167244144" MODIFIED="1786698569122" TEXT="erste Probel&#xe4;ufe: die Zeit ist zu knapp "/>
<node CREATED="1786698569659" ID="ID_943822780" MODIFIED="1786698608319" TEXT="mu&#xdf; mich einschr&#xe4;nken auf die Darstellung der Technik"/>
<node CREATED="1786698610433" ID="ID_1146935453" MODIFIED="1786698618987" TEXT="Anpassungen / K&#xfc;rzungen">
<node CREATED="1786698621077" ID="ID_1511769965" MODIFIED="1786698640928" TEXT="hatte zun&#xe4;chst eine ausf&#xfc;hrliche Motivation"/>
<node CREATED="1786698641415" ID="ID_257654983" MODIFIED="1786698667311" TEXT="die Darstellung folgte den Design-Prinzipien"/>
<node CREATED="1786698668027" ID="ID_1171670350" MODIFIED="1786698715996" TEXT="Anpassung: diese Hintergrund-Ebene entfernen"/>
<node CREATED="1786698716740" ID="ID_1317224140" MODIFIED="1786698726842" TEXT="die Ankerpunkte aus den Slides entfernen">
<node CREATED="1786698729755" ID="ID_1222373094" MODIFIED="1786698801068" TEXT="das AI-Thema und die Guidelines streichen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
das war ohnehin nur ein Extra, und letzlich off-topic
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1786698804805" ID="ID_1022168735" MODIFIED="1786698816384" TEXT="die Verbindungen zu Berkely vs. MIT"/>
<node CREATED="1786698824538" ID="ID_2983412" MODIFIED="1786698830260" TEXT="Seitengedanken und Jokes"/>
</node>
</node>
<node CREATED="1786787574255" ID="ID_51085882" MODIFIED="1786787579210" TEXT="Proben mit Benny">
<node CREATED="1786787580380" ID="ID_1128908699" MODIFIED="1786787583962" TEXT="Freitag Mittag"/>
<node CREATED="1786787584316" ID="ID_542851572" MODIFIED="1786787587155" TEXT="Freitag Nacht"/>
<node CREATED="1786787587617" ID="ID_1942130253" MODIFIED="1786787590209" TEXT="Sammstag Morgen">
<node CREATED="1786787594071" ID="ID_1722949908" MODIFIED="1786787605258" TEXT="ich sagte: dies mal werde ich l&#xe4;nger brauchen"/>
<node CREATED="1786787605720" ID="ID_1820714668" MODIFIED="1786787612535" TEXT="Benny macht Vorschl&#xe4;ge zur Verknappung">
<node CREATED="1786787613422" ID="ID_978023219" MODIFIED="1786787618231" TEXT="die Diagramme &quot;genie&#xdf;en&quot;"/>
<node CREATED="1786787618819" ID="ID_1452895672" MODIFIED="1786787650454" TEXT="Absraktion: it abstracts away things">
<node CREATED="1786787650970" ID="ID_710624836" MODIFIED="1786787661747" TEXT="and what it abstracts depends on what you want to do"/>
</node>
<node CREATED="1786787695388" ID="ID_1960669571" MODIFIED="1786787705575" TEXT="die Architektur: skim over it">
<node CREATED="1786787707665" ID="ID_617058744" MODIFIED="1786787722477" TEXT="you&apos;ll explain those concepts way better later, in the code"/>
</node>
</node>
</node>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1755730987056" ID="ID_734596433" MODIFIED="1779389056508" TEXT="Fazit">
<linktarget COLOR="#97606e" DESTINATION="ID_734596433" ENDARROW="Default" ENDINCLINATION="-323;76;" ID="Arrow_ID_276868768" SOURCE="ID_1027335076" STARTARROW="None" STARTINCLINATION="-69;10;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
2026-05-12 11:36:16 +02:00
<icon BUILTIN="help"/>
<node CREATED="1755731396961" ID="ID_1581336862" MODIFIED="1779389097398" TEXT="Hinweis: Publikum im letzten Jahr">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
2026-05-12 11:36:16 +02:00
ich hatte mir ja im Vorfeld &#252;berlegt, was f&#252;r ein Publikum vermutlich auf der FrOSCon heruml&#228;uft; dem entsprechend war der Vortrag auf &#187;Allgemeinbildungs-Niveau&#171; angelegt.... (was allerdings auch bereits f&#252;r Benny eine erhebliche Herausforderung war, also vermutlich auch f&#252;r andere Leute)
</p>
</body>
</html></richcontent>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1755731936390" ID="ID_1251114714" LINK="https://media.ccc.de/v/froscon2025-3316-getting_your_hands_dirty_with_video_output_on_linux_using_c" MODIFIED="1779389121265" TEXT="Video-Aufzeichnung (CCC)">
<icon BUILTIN="info"/>
<icon BUILTIN="help"/>
</node>
</node>
</node>
2026-05-12 11:36:16 +02:00
</node>
<node CREATED="1519000544959" ID="ID_1954948627" MODIFIED="1715854555555" POSITION="right" TEXT="Beispiele">
<edge COLOR="#986d6e"/>
<font NAME="SansSerif" SIZE="14"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1753199130112" ID="ID_340189606" MODIFIED="1779389849530" TEXT="ver&#xf6;ffentlichen">
<icon BUILTIN="bell"/>
<node CREATED="1754690590418" ID="ID_1519600228" MODIFIED="1779389777425" TEXT="In Asciidoc umsetzen">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1755035578089" ID="ID_930402986" MODIFIED="1779389788927" TEXT="Einbindung ins Lumiera-Repo?">
<icon BUILTIN="help"/>
</node>
</node>
<node COLOR="#338800" CREATED="1755730756381" ID="ID_468602090" MODIFIED="1786754898292" TEXT="Demo-Code + Asciidoc per git-subtree-merge in Website integrieren">
<icon BUILTIN="button_ok"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1755783444835" ID="ID_1509171837" MODIFIED="1779389817520">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
2026-05-12 11:36:16 +02:00
in die Sektion: <b>Research</b>
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
2024-08-11 06:28:27 +02:00
<head/>
<body>
<p>
2026-05-12 11:36:16 +02:00
...mein langfristiger Plan: ich will eine <b>Knowledge-Base</b>&#160;schaffen
</p>
</body>
2024-08-11 06:28:27 +02:00
</html></richcontent>
2026-05-12 11:36:16 +02:00
<linktarget COLOR="#1e73d8" DESTINATION="ID_1509171837" ENDARROW="Default" ENDINCLINATION="-101;10;" ID="Arrow_ID_202998793" SOURCE="ID_1555871563" STARTARROW="None" STARTINCLINATION="73;6;"/>
<node CREATED="1786458907526" ID="ID_1713197876" LINK="https://www.lumiera.org/research/ioUring/index.html" MODIFIED="1786458953424" TEXT="Sub-Page: ioUring">
<linktarget COLOR="#7595a3" DESTINATION="ID_1713197876" ENDARROW="Default" ENDINCLINATION="-227;-574;" ID="Arrow_ID_1359881181" SOURCE="ID_1841666778" STARTARROW="None" STARTINCLINATION="-579;46;"/>
</node>
2024-08-09 04:59:15 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1755783744974" ID="ID_869839202" LINK="git://git.lumiera.org/extra/video-output.git" MODIFIED="1779389837517">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
2026-05-12 11:36:16 +02:00
neues <b>Git-Repo</b>&#160;nur f&#252;r den Demo-Code anlegen
</p>
</body>
</html></richcontent>
2026-05-12 11:36:16 +02:00
<icon BUILTIN="hourglass"/>
2024-08-09 01:47:01 +02:00
</node>
</node>
2026-08-14 01:20:49 +02:00
<node COLOR="#338800" CREATED="1755783306798" ID="ID_1759870777" MODIFIED="1786661113418" TEXT="QR-Code generieren">
<icon BUILTIN="button_ok"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1755783346775" ID="ID_1172562149" MODIFIED="1755783365282">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
2026-05-12 11:36:16 +02:00
verwende <font face="Monospaced" color="#1820af">qrencode</font>
</p>
</body>
</html></richcontent>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1755783401946" ID="ID_1555871563" LINK="https://lumiera.org/research/videoDisplay/index.html" MODIFIED="1755783828602" TEXT="Direkt-Link auf die Landing-Page">
<arrowlink COLOR="#1e73d8" DESTINATION="ID_1509171837" ENDARROW="Default" ENDINCLINATION="-101;10;" ID="Arrow_ID_202998793" STARTARROW="None" STARTINCLINATION="73;6;"/>
2024-08-09 01:47:01 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1755783372396" ID="ID_908215409" MODIFIED="1755783394951" TEXT="Aufl&#xf6;sung pro Block erh&#xf6;hen">
<icon BUILTIN="idea"/>
2026-08-12 07:43:34 +02:00
<node CREATED="1786460010198" HGAP="40" ID="ID_179261156" MODIFIED="1786460087338" TEXT="qrencode -o demoCodeQR.png -l M -s 12 -m 3 -d 90 https://www.lumiera.org/research/ioUring/index.html" VSHIFT="12">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<ul>
<li>
W&#228;hle diesmal mittlestarke Fehlerkorrektur (-l M)
</li>
<li>
Ein Dot = 12px hat sich bew&#228;hrt (-s 12)
</li>
<li>
mache den Rand etwas schm&#228;ler (-m 3)
</li>
<li>
setze 300 dpi f&#252;r die Bilddatei
</li>
</ul>
</body>
</html></richcontent>
2026-08-12 07:43:34 +02:00
<icon BUILTIN="list"/>
</node>
2024-08-09 01:47:01 +02:00
</node>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1753199226593" ID="ID_557178402" MODIFIED="1753199233307" TEXT="konsolidieren und aufr&#xe4;umen">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1753199237738" ID="ID_591583137" MODIFIED="1753199282774" TEXT="lokal: Recherche-Projekte wegwerfen">
<icon BUILTIN="bell"/>
</node>
</node>
</node>
<node COLOR="#3f3c6e" CREATED="1519000377246" HGAP="-16" ID="ID_1122707632" MODIFIED="1715854555555" POSITION="left" TEXT="Theorie" VGAP="2" VSHIFT="-3">
<edge COLOR="#5b7196" STYLE="linear"/>
<font NAME="SansSerif" SIZE="16"/>
2024-08-04 02:41:20 +02:00
<node CREATED="1519001149509" HGAP="41" ID="ID_353299994" MODIFIED="1722709319607" TEXT="Ideen" VSHIFT="-15">
<node CREATED="1722709320807" ID="ID_1914962492" MODIFIED="1722709323542" TEXT="Langlebigkeit"/>
<node CREATED="1722709324174" ID="ID_1151283600" MODIFIED="1722709326454" TEXT="Abstraktionen">
<node CREATED="1722709334033" ID="ID_878890148" LINK="https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction" MODIFIED="1722709339728" TEXT="the-wrong-abstraction"/>
<node CREATED="1722722026974" ID="ID_1288938043" LINK="https://en.wikipedia.org/wiki/Lehman&apos;s_laws_of_software_evolution" MODIFIED="1722722038344" TEXT="Lehmann&apos;s Laws of Software Evolution"/>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1715854555555" ID="ID_1552434163" MODIFIED="1779387294075" TEXT="Betriebssysteme"/>
<node CREATED="1519327977125" HGAP="-12" ID="ID_454973074" MODIFIED="1715874281511" TEXT="nebenbei" VGAP="4" VSHIFT="17"/>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1519000398331" HGAP="55" ID="ID_1606904663" MODIFIED="1779386737131" POSITION="left" TEXT="Vorbereitung" VSHIFT="11">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1520540726820" ID="ID_18225145" MODIFIED="1779386731937" TEXT="Gedankliche Klarheit">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1722905495382" ID="ID_1513349078" MODIFIED="1779386711880" TEXT="Gedankengang abstrakt ausformulieren">
<icon BUILTIN="flag-yellow"/>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1715854555555" HGAP="27" ID="ID_973383337" MODIFIED="1779386711880" TEXT="Vortrag ausformulieren" VSHIFT="25">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1722905512701" ID="ID_487002734" MODIFIED="1779386711881" TEXT="Inhalte auf Darstellungs-Ebene">
<icon BUILTIN="flag-yellow"/>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1722905526114" ID="ID_1238444439" MODIFIED="1779386711881" TEXT="Code-Beispiele">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1520540782924" ID="ID_1394954330" MODIFIED="1779388492717" TEXT="was wir wollen und wo wir stehen">
<icon BUILTIN="yes"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1753133245990" ID="ID_1737109820" MODIFIED="1753133263062" TEXT="einen plausiblen Anla&#xdf;, um einen Vortrag mit Lumiera-Bezug zu halten"/>
<node CREATED="1753133263959" ID="ID_1208154525" MODIFIED="1753133281172" TEXT="Kompetenz in &#xbb;hard-core&#xab;-Themen demonstrieren"/>
<node CREATED="1723038081191" ID="ID_1463117390" MODIFIED="1779388529297" TEXT="au&#xdf;erdem: Image &#xbb;erfahrener Experte&#xab;"/>
<node CREATED="1753133297344" ID="ID_1778242194" MODIFIED="1784566420704" TEXT="Recherche f&#xfc;r Lumiera: wir brauchen ein eigenes IO-Framework">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
2026-05-12 11:36:16 +02:00
Es war von Anfang an klar, da&#223; wir <i>speziell dieses Thema selber unter Kontrolle bringen </i>m&#252;ssen.
</p>
<p>
Christian hatte seinerzeit ein MMAP-Backend implementiert.
</p>
<p>
Ich folge dem gleichen Ansatz, gehe aber mit der Linux-Kernelentwicklung mit...
</p>
</body>
</html></richcontent>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1753133430386" ID="ID_1664746007" MODIFIED="1753133453392" TEXT="Eine Know-how-Sektion auf der Lumiera-Website aufbauen"/>
<node CREATED="1784566437312" ID="ID_695370992" MODIFIED="1784566442736" TEXT="nebenbei: Umgang mit KI"/>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1520540904179" ID="ID_1292404263" MODIFIED="1779388358750">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
2026-05-12 11:36:16 +02:00
was wir zeigen <i>k&#246;nnen</i>
</p>
</body>
</html></richcontent>
<node CREATED="1784566461960" ID="ID_1300097660" MODIFIED="1784566486105" TEXT="konkret kann nur ein kleines Code-&#xd6;kosystem gezeigt werden"/>
<node CREATED="1784566494196" ID="ID_1222704475" MODIFIED="1784566512188" TEXT="unter Verweis auf letztes Jahr kann ich Video-Output mit integrieren"/>
<node CREATED="1784566522103" ID="ID_1049138236" MODIFIED="1784566534174" TEXT="Vom Code eine Br&#xfc;cke zur Proaktor-Architektur"/>
<node CREATED="1784566536590" ID="ID_1767517870" MODIFIED="1784566548009" TEXT="cross-Thread-Synchronisation am Beispiel"/>
2024-08-13 15:45:04 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1520540919129" ID="ID_1689570767" MODIFIED="1747438950166" TEXT="(was wir nicht sagen)">
<node CREATED="1753973659733" ID="ID_1857026400" MODIFIED="1753973671298" TEXT="wie wenig Ahnung wir tats&#xe4;chlich haben...">
<icon BUILTIN="smiley-oh"/>
2024-08-13 15:45:04 +02:00
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1753973675843" ID="ID_189880794" MODIFIED="1753973692827" TEXT="wie sehr das eigentlich ein &#xbb;Wahnsinns-Thema&#xab; ist">
<icon BUILTIN="clanbomber"/>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1723508279705" ID="ID_1768919179" MODIFIED="1723508290155" TEXT="da&#xdf; ich hier einen durchaus eigenwilligen Weg gehe"/>
<node CREATED="1784566608876" ID="ID_1680364545" MODIFIED="1785790359493" TEXT="da&#xdf; die eigentlichen Probleme f&#xfc;r Lumiera ungel&#xf6;st sind">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Damit meine ich, ob der Ansatz mit symbolisch repr&#228;sentierten externen F&#228;higkeiten &#252;berhaupt aufgeht, und ob es tats&#228;chlich gelingt, ein Werkzeug-Paradigma auf der Basis von Placements zu schaffen. Und, last but not least, ob ich Leute finden, die mich unterst&#252;tzen und sich diese Vision aneignen
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785790294093" ID="ID_1612420528" MODIFIED="1785790618638" TEXT="innerer Widerspruch bez&#xfc;glich &#xbb;Audience&#xab;">
<linktarget COLOR="#9c3f50" DESTINATION="ID_1612420528" ENDARROW="Default" ENDINCLINATION="-1002;67;" ID="Arrow_ID_1857563368" SOURCE="ID_642718439" STARTARROW="None" STARTINCLINATION="-316;34;"/>
<node CREATED="1785790491314" ID="ID_215785223" MODIFIED="1785790509619" TEXT="das Thema ist eigentlich zu komplex f&#xfc;r eine &#xbb;allgemeine&#xab; Zuh&#xf6;rerschaft"/>
<node CREATED="1785790510700" ID="ID_94720075" MODIFIED="1785790531089" TEXT="aber ich richte mich gezielt an diese &#x2014; weil es eigentlich um Lumiera geht"/>
<node CREATED="1785790544447" ID="ID_652954139" MODIFIED="1785790586779">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
der Talk kommt <i>fachlich</i>&#160;daher &#8212; ist aber eigentlich ein <i>Narrativ</i>&#160; und <i>allgemeines Lehrst&#252;ck</i>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
2026-05-12 11:36:16 +02:00
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1753885887109" ID="ID_1991141897" MODIFIED="1779390904717" TEXT="Recherche zu Themenbereichen">
<icon BUILTIN="flag-pink"/>
<node CREATED="1753885953712" ID="ID_1705360472" MODIFIED="1779390897547" TEXT="Architektur: Linux"/>
<node CREATED="1753885985959" ID="ID_1416320830" MODIFIED="1753886099702" TEXT="VBlank-Sync">
<node CREATED="1784562447086" ID="ID_1448869178" MODIFIED="1784562583608" TEXT="in der Design-Diskussion kurz ber&#xfc;hrt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ich habe zur Vorbereitung meine anf&#228;nglichen Ideen in einer Konversation mit Claude validiert....
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#708a96" DESTINATION="ID_1393441883" ENDARROW="Default" ENDINCLINATION="-431;-21;" ID="Arrow_ID_986847518" STARTARROW="None" STARTINCLINATION="-642;52;"/>
<node CREATED="1784562590322" ID="ID_1398084830" MODIFIED="1784562600328" TEXT="demnach liegt das eigentliche Thema beim Compositor"/>
<node CREATED="1784562603832" ID="ID_648874975" MODIFIED="1784562621419" TEXT="man hat die Wahl, ob das buffer-flip blockend / nichtblockend ist"/>
</node>
</node>
<node CREATED="1753885928239" ID="ID_1844778340" MODIFIED="1783362547239" TEXT="io_uring">
<node CREATED="1779396294447" ID="ID_1848792339" MODIFIED="1784562696342" TEXT="Quellen">
<icon BUILTIN="info"/>
<node CREATED="1779396306814" ID="ID_1325281102" LINK="https://en.wikipedia.org/wiki/Io_uring" MODIFIED="1779396315914" TEXT="Wikipedia">
<node CREATED="1779397158957" ID="ID_635788695" LINK="https://web.archive.org/web/20251010072644/https://kernel.dk/io_uring.pdf" MODIFIED="1779397176550" TEXT="verlinkt auf Einf&#xfc;hrungs-Artikel: &#xbb;Efficient IO with io_uring&#xab;"/>
<node CREATED="1779397215245" ID="ID_533486044" LINK="https://lwn.net/Articles/810414/" MODIFIED="1779397234502" TEXT="LWN: rapid growth of io_uring (2020)"/>
2026-07-10 02:57:34 +02:00
<node CREATED="1783367993803" ID="ID_1431968418" LINK="https://towardsdev.com/io-uring-vs-epoll-syscall-overhead-linux-performance-a3d7fcc6c9b9?gi=3c0154f883b2" MODIFIED="1783368130857" TEXT="Medium.com: The Linux I/O Interface That Finally Makes Sense">
<node CREATED="1783368130854" ID="ID_478257500" LINK="https://web.archive.org/web/20260706200044/https://towardsdev.com/io-uring-vs-epoll-syscall-overhead-linux-performance-a3d7fcc6c9b9?gi=da9a38a5a4e5" MODIFIED="1783368133389" TEXT="A"/>
</node>
<node CREATED="1783368328751" ID="ID_1994767905" LINK="https://unixism.net/2020/04/io-uring-by-example-article-series/" MODIFIED="1783368342820" TEXT="IO_URING by example (2020)">
<node CREATED="1783368348940" ID="ID_888420188" LINK="https://github.com/shuveb/io_uring-by-example" MODIFIED="1783368354081" TEXT="zugeh&#xf6;riger Github"/>
</node>
<node CREATED="1783370353779" ID="ID_72316824" LINK="https://www.reddit.com/answers/f06c7939-9e61-4d8b-96a0-45180c7ef398/?q=%C3%9Cberblick+io_uring+in+Linux&amp;source=PDP" MODIFIED="1783370359891" TEXT="Reddit-&#xdc;bersichtsseite"/>
<node CREATED="1783370514114" ID="ID_1349175602" LINK="https://arxiv.org/abs/2512.04859" MODIFIED="1783370550553" TEXT="Interessant: arXiv &#x2014; High-Performance DBMSs with io_uring: When and How to use it"/>
<node CREATED="1783706594614" ID="ID_217459686" MODIFIED="1783706597279" TEXT="Background">
<node CREATED="1783706598200" ID="ID_1400058410" LINK="https://www.kegel.com/c10k.html#strategies" MODIFIED="1783706619773" TEXT="the 10k Problem: Ans&#xe4;tze f&#xfc;r hohen Durchsatz"/>
</node>
</node>
<node CREATED="1779399048372" ID="ID_1376049416" LINK="https://unixism.net/loti/" MODIFIED="1779399068596" TEXT="&#xbb;Lord of the uring&#xab;"/>
<node CREATED="1783707558447" ID="ID_629419959" MODIFIED="1783707560578" TEXT="Referenz">
<node CREATED="1783707561510" FOLDED="true" ID="ID_1736869707" LINK="https://unixism.net/loti/ref-liburing/index.html" MODIFIED="1784562690470" TEXT="&#xdc;bersichts-Referenz (liburing)">
<icon BUILTIN="list"/>
<node CREATED="1783707596169" ID="ID_1286879063" LINK="https://unixism.net/loti/ref-liburing/submission.html" MODIFIED="1783707796060" TEXT="wichtig(liburing): Submission and Submission helpers">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Die Liburing h&#252;llt das eigentliche Ringbuffer-Interface ein, so da&#223; man gar nicht mehr direkt mit den Ringbuffern zu tun hat. Was sch&#246;n ist, aber man mu&#223; die Ringbuffer verstanden haben! Im Besonderen die Submission helpers sind Konfigurations-Funktionen, die eienen Submission-Queue-Entry <i>ausf&#252;llen mit passenden Parametern</i>. Damit sind sie wieder so etwas wie eine funktionale Form der Kernel-calls, aber eben verz&#246;gert / geplant. Den eigentlichen Aufruf macht man dann mit io_uring_submit(ring);
</p>
<pre http-equiv="content-type" content="text/html; charset=utf-8"></pre>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1784162872108" ID="ID_558276865" LINK="https://unixism.net/loti/ref-liburing/sqe.html" MODIFIED="1784162885766" TEXT="submission-queue-entry(SQE)"/>
<node CREATED="1783707924633" ID="ID_1323434414" MODIFIED="1783707927633" TEXT="Operationen">
<node CREATED="1783707941501" ID="ID_360987965" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_nop" MODIFIED="1783707941501" TEXT="io_uring_prep_nop"/>
<node CREATED="1783707947926" ID="ID_364910722" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_read" MODIFIED="1783708042268" TEXT="io_uring_prep_read"/>
<node CREATED="1783708064659" ID="ID_728214557" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_write" MODIFIED="1783708064659" TEXT="io_uring_prep_write"/>
<node CREATED="1783708071488" ID="ID_1763432821" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_readv" MODIFIED="1783708071488" TEXT="io_uring_prep_readv"/>
<node CREATED="1783708077550" ID="ID_812157542" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_read_fixed" MODIFIED="1783708077550" TEXT="io_uring_prep_read_fixed"/>
<node CREATED="1783708083101" ID="ID_761473768" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_writev" MODIFIED="1783708083101" TEXT="io_uring_prep_writev"/>
<node CREATED="1783708088984" ID="ID_1692700410" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_write_fixed" MODIFIED="1783708088984" TEXT="io_uring_prep_write_fixed"/>
<node CREATED="1783708104534" ID="ID_620503863" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_fsync" MODIFIED="1783708104534" TEXT="io_uring_prep_fsync"/>
<node CREATED="1783708117166" ID="ID_1197551321" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_close" MODIFIED="1783708117166" TEXT="io_uring_prep_close"/>
<node CREATED="1783708133349" ID="ID_122652967" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_openat" MODIFIED="1783708133349" TEXT="io_uring_prep_openat"/>
<node CREATED="1783708142497" ID="ID_518962092" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_openat2" MODIFIED="1783708142497" TEXT="io_uring_prep_openat2"/>
<node CREATED="1783708148677" ID="ID_76679641" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_fallocate" MODIFIED="1783708148677" TEXT="io_uring_prep_fallocate"/>
<node CREATED="1783708166018" ID="ID_349445435" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_statx" MODIFIED="1783708166018" TEXT="io_uring_prep_statx"/>
<node CREATED="1783708172988" ID="ID_1867957432" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_fadvise" MODIFIED="1783708172988" TEXT="io_uring_prep_fadvise"/>
<node CREATED="1783708213295" ID="ID_1675477095" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_madvise" MODIFIED="1783708213295" TEXT="io_uring_prep_madvise"/>
<node CREATED="1783708231204" ID="ID_1874200614" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_splice" MODIFIED="1783708231204" TEXT="io_uring_prep_splice"/>
<node CREATED="1783708240334" ID="ID_1914967107" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_recvmsg" MODIFIED="1783708240334" TEXT="io_uring_prep_recvmsg"/>
<node CREATED="1783708245837" ID="ID_123618645" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_sendmsg" MODIFIED="1783708245837" TEXT="io_uring_prep_sendmsg"/>
<node CREATED="1783708251154" ID="ID_393655773" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_recv" MODIFIED="1783708251154" TEXT="io_uring_prep_recv"/>
<node CREATED="1783708258776" ID="ID_1708597723" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_send" MODIFIED="1783708258776" TEXT="io_uring_prep_send"/>
<node CREATED="1783708299755" ID="ID_623477660" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_accept" MODIFIED="1783708299755" TEXT="io_uring_prep_accept"/>
<node CREATED="1783708311769" ID="ID_74912791" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_connect" MODIFIED="1783708311769" TEXT="io_uring_prep_connect"/>
<node CREATED="1783708337529" ID="ID_58047660" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_epoll_ctl" MODIFIED="1783708337529" TEXT="io_uring_prep_epoll_ctl"/>
<node CREATED="1783708346006" ID="ID_892211122" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_poll_add" MODIFIED="1783708346006" TEXT="io_uring_prep_poll_add"/>
<node CREATED="1783708353854" ID="ID_1735840226" LINK="https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_poll_remove" MODIFIED="1783708353854" TEXT="io_uring_prep_poll_remove"/>
</node>
<node CREATED="1784162891066" ID="ID_1881921721" LINK="https://unixism.net/loti/ref-liburing/completion.html" MODIFIED="1784162910708" TEXT="Completion and waiting/polling"/>
<node CREATED="1784162918158" ID="ID_1019141045" LINK="https://unixism.net/loti/ref-liburing/cqe.html" MODIFIED="1784162936375" TEXT="completion-queue-entry (CQE)">
<node CREATED="1784162938404" ID="ID_181617694" MODIFIED="1784163095092" TEXT="res-Feld enth&#xe4;lt entweder operations-spezifisches Resultat &gt; 0">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_181617694" ENDARROW="Default" ENDINCLINATION="255;0;" ID="Arrow_ID_472331517" SOURCE="ID_526495709" STARTARROW="None" STARTINCLINATION="251;9;"/>
</node>
<node CREATED="1784162963010" ID="ID_1477358179" MODIFIED="1784163021269" TEXT="oder direkt die negierte ERRNO">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
IO_URING kann errno nicht sinnvoll direkt verwenden (errno ist eine globale variable)
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1784163031989" ID="ID_1146473140" MODIFIED="1784163035387" TEXT="Lese-Hinweise">
<node CREATED="1784163038135" ID="ID_998160291" MODIFIED="1784163050297" TEXT="die betr. prep_*-Operation anschauen"/>
<node CREATED="1784163051325" ID="ID_1399742238" MODIFIED="1784163064375" TEXT="diese verlinkt auf die unterliegende klassische Kernel-Operation"/>
<node CREATED="1784163065192" ID="ID_526495709" MODIFIED="1784163095092" TEXT="deren Parameter / R&#xfc;ckgabewerte werden systematisch in SQE / CQE gemapped">
<arrowlink DESTINATION="ID_181617694" ENDARROW="Default" ENDINCLINATION="255;0;" ID="Arrow_ID_472331517" STARTARROW="None" STARTINCLINATION="251;9;"/>
</node>
</node>
<node CREATED="1784162289299" ID="ID_653583150" MODIFIED="1784162292871" TEXT="Manpages">
<node CREATED="1784162294307" ID="ID_1880608167" LINK="https://man7.org/linux/man-pages/man7/io_uring.7.html" MODIFIED="1784162660448" TEXT="io_uring (low-level)"/>
<node CREATED="1784162298130" ID="ID_812019689" MODIFIED="1784162300427" TEXT="Liburing">
<node CREATED="1784162301417" ID="ID_1425990055" LINK="https://man7.org/linux/man-pages/man3/io_uring_queue_init.3.html" MODIFIED="1784162314395" TEXT="io_uring_queue_init"/>
<node CREATED="1784162324350" ID="ID_754199569" LINK="https://man7.org/linux/man-pages/man3/io_uring_wait_cqe.3.html" MODIFIED="1784162332857" TEXT="io_uring_wait_cqe"/>
<node CREATED="1784162374598" ID="ID_1701741193" LINK="https://man7.org/linux/man-pages/man3/io_uring_submit.3.html" MODIFIED="1784162382762" TEXT="io_uring_submit">
<node CREATED="1784162384092" ID="ID_1562969484" MODIFIED="1784162631504" TEXT="verweist auf sehr viele weitere (siehe ganz unten)...">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1784162438390" ID="ID_967395162" LINK="https://man7.org/linux/man-pages/man3/io_uring_prep_read.3.html" MODIFIED="1784162578416" TEXT="io_uring_prep_read"/>
<node CREATED="1784162450985" ID="ID_703973678" LINK="https://man7.org/linux/man-pages/man3/io_uring_prep_write.3.html" MODIFIED="1784162588103" TEXT="io_uring_prep_write"/>
<node CREATED="1784162522735" ID="ID_1545552991" LINK="https://man7.org/linux/man-pages/man3/io_uring_prep_readv.3.html" MODIFIED="1784162595286" TEXT="io_uring_prep_readv"/>
<node CREATED="1784162531872" ID="ID_399339523" LINK="https://man7.org/linux/man-pages/man3/io_uring_prep_readv_fixed.3.html" MODIFIED="1784162602735" TEXT="io_uring_prep_readv_fixed"/>
<node CREATED="1784162619555" ID="ID_1359309346" LINK="https://man7.org/linux/man-pages/man3/io_uring_prep_timeout.3.html" MODIFIED="1784162627225" TEXT="io_uring_prep_timeout"/>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1779396319748" ID="ID_652484743" MODIFIED="1779396323865" TEXT="Basisinfos">
<node CREATED="1779396332330" ID="ID_1277198826" MODIFIED="1779396361916" TEXT="zwei Ringbuffer (&quot;queue rings&quot; &#x27f6; daher der Name)"/>
<node CREATED="1779396785527" ID="ID_1581052613" MODIFIED="1779396800974" TEXT="eingef&#xfc;hrt 2019 mit Linux 5.1"/>
<node CREATED="1779396508382" ID="ID_1790185181" MODIFIED="1779396544764" TEXT="soll den R&#xfc;ckstand von Linux f&#xfc;r async-IO beheben">
<node CREATED="1779398726939" ID="ID_64708046" MODIFIED="1779398814014" TEXT="die de-facto-L&#xf6;sung ist EPOLL">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
man setzt einen Socket auf &quot;asynchron&quot;. Durch cleveres Polling bekommt man mit, wann die IO-Operation &#187;ready&#171; wird. <b>Aber</b>&#160;das ist readyness-semantics, not completion-semantics. Und es ist sehr limitiert, und setzt eine komplexe State-Machine im Userland vorraus
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1779396620988" ID="ID_769607449" MODIFIED="1779396634370" TEXT="es gab seit Linux 2.5 bereits async_io"/>
<node CREATED="1779396635421" ID="ID_1823781286" MODIFIED="1779396769771" TEXT="das ist aber auf Spezialf&#xe4;lle limitiert und schwierig zu nutzen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Arbeitet in einem speziellen Modus, IO_DIRECT
</p>
<p>
Kann nur bereits allozierte/ ge&#246;ffnete Files bearbeiten
</p>
<p>
kann nicht mit generischen Sockets arbeiten &#10230; auch kein Networking
</p>
<p>
geht am Page Cache vorbei
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1779396658091" ID="ID_1042616589" MODIFIED="1779396675648" TEXT="Windows kann da seit den Nuller-Jahren wesentlich mehr">
<icon BUILTIN="smily_bad"/>
</node>
<node CREATED="1779398012338" ID="ID_157830257" MODIFIED="1779398079260" TEXT="Hardware-Entwicklung hat eine Rolle gespielt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Aus einem Kommentar auf LWN
</p>
<p>
https://lwn.net/Articles/810898/
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8">
What it says about the state of hardware is easy.<br />
</p>
<p>
Meltdown mitigations made context switching more expensive, and SSDs made the actual I/O cheaper. At some point, you're spending almost as much time context switching as you are doing actual work, and there's nothing Linux can do about it because it's all tied up in the architecture of the MMU and the processor's cache. Thus, it now makes sense to design the interface around reducing the number of context switches at all cost, instead of just assuming that the cost of doing the actual I/O will dominate.
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1779396548708" ID="ID_1822858626" MODIFIED="1779396599007" TEXT="kann mit dBPF zusammenarbeiten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
extended Berkeley Package Filter: ein Framework, das Code als Reaktion auf Events direkt im Kernel-Kontext ausf&#252;hrt
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1779396822977" ID="ID_211122289" MODIFIED="1779397158118" TEXT="bedingt durch die komplett neue Struktur &#x27f9; massive Sicherheitsprobleme">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Es wurde alsbald erheblich als Einfallstor f&#252;r Exploits genutzt, da das bestehende Security-Tooling diese neuen Mechanismen &#252;berhaupt nicht &#187;auf dem Schirm&#171; hat. Im Jahr 2023 hat das Google-Security-Team 60% aller Linux-Exploits dem IO_URING subsystem zugeordnet. Daher ist es auf Android und ChromeOS und unter Docker in der Standard-Konfiguration deaktiviert (und hat einen schlechten Ruf unter den &#187;Oldtimern&#171;)
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1779397402228" ID="ID_1111670287" LINK="https://github.com/axboe/liburing" MODIFIED="1779397445634" TEXT="die liburing erleichtert den Umgang mit dem anspruchsvollen API">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1779398825661" ID="ID_1355173640" MODIFIED="1779398859668" STYLE="fork" TEXT="Chat-GPT meint: das wird die zuk&#xfc;nftige default-L&#xf6;sung">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1779398860929" ID="ID_676326792" MODIFIED="1779398870836" TEXT="aber Vorsicht, mein Promt war subtil biassed"/>
<node CREATED="1779398873080" ID="ID_1322619305" MODIFIED="1779398910066" TEXT="jedenfalls meint Chat-GPT...">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<ul>
<li>
adoption is rising
</li>
<li>
io_uring is not going away anywhere soon
</li>
</ul>
</body>
</html></richcontent>
</node>
<node CREATED="1779398911786" ID="ID_200652684" MODIFIED="1779398922097" TEXT="nennt nur AIO und EPOLL als relevante Alternativen"/>
<node COLOR="#338800" CREATED="1779398922776" ID="ID_614335681" MODIFIED="1779398955570" TEXT="das gen&#xfc;gt mir">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...denn das bedeutet, da ist nichts &#187;mainstreamiges&#171; unterwegs, von dem ich noch nichts w&#252;&#223;te.
</p>
</body>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
2026-07-10 02:57:34 +02:00
<node CREATED="1783380531260" ID="ID_469108654" MODIFIED="1783380548076" TEXT="mit dem Thema vertraut machen....">
<node CREATED="1783380549407" ID="ID_1386950252" MODIFIED="1783380553917" TEXT="grunds&#xe4;tzich">
<node CREATED="1783380554930" ID="ID_840014622" MODIFIED="1783380581481">
<richcontent TYPE="NODE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
AsyncIO f&#252;r <i>sehr hohen</i>&#160;throughput
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
also ehr im Bereich von Millionen Requests / sec
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
<node CREATED="1783380657844" ID="ID_1057905414" MODIFIED="1783380667920" TEXT="erst da macht sich der Kontext-Switch bemerkbar"/>
<node CREATED="1783380668713" ID="ID_1392613640" MODIFIED="1783380678765" TEXT="f&#xfc;r tausende Requests/sec reicht ein Threadpool"/>
</node>
<node CREATED="1783380582620" ID="ID_188672487" MODIFIED="1783380656505" TEXT="aber: Files sind immer &quot;ready&quot; und ePoll meldet nur das">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
deshalb war die Behandlung von Files stets etwas asymetrisch. Auch wenn der Socket <i>ready</i>&#160;ist, kann er dann doch noch blocken, wenn das System unter Druck steht.
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
<node CREATED="1783380681615" ID="ID_849345355" MODIFIED="1783380696024" TEXT="das ist f&#xfc;r uns das zentrale Argument">
<icon BUILTIN="back"/>
</node>
<node CREATED="1783382094070" ID="ID_434911517" MODIFIED="1783382108385" TEXT="au&#xdf;erdem: AIO erlaubt nur direktes, unbuffered IO"/>
</node>
2026-08-02 23:38:55 +02:00
<node COLOR="#435e98" CREATED="1783380898163" FOLDED="true" ID="ID_504375047" MODIFIED="1785602822630" TEXT="Struktur des io_uring-Interface">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="list"/>
2026-07-10 02:57:34 +02:00
<node CREATED="1783381938828" ID="ID_651806818" MODIFIED="1783381950696" TEXT="Lord-of-the-uring-Tutorial">
<icon BUILTIN="info"/>
</node>
<node CREATED="1783380936792" ID="ID_1455615031" MODIFIED="1783380942073" TEXT="zwei Ringbuffer-Kan&#xe4;le">
<node CREATED="1783380943213" ID="ID_1918214029" MODIFIED="1783380969821" TEXT="SQ = submission queue"/>
<node CREATED="1783380958402" ID="ID_371171829" MODIFIED="1783380967381" TEXT="CQ = completion queue"/>
<node CREATED="1783380992795" ID="ID_1515222220" MODIFIED="1783381004376" TEXT="Speicher f&#xfc;r die Ringbuffer is shared (user/kernel space)"/>
<node CREATED="1783381017807" ID="ID_552310788" MODIFIED="1783381022222" TEXT="einrichten">
<node CREATED="1783381034591" ID="ID_1237271759" LINK="https://unixism.net/loti/ref-iouring/io_uring_setup.html#c.io_uring_setup" MODIFIED="1783381043083" TEXT=" io_uring_setup()">
<node CREATED="1783387356135" ID="ID_1660238093" MODIFIED="1783387385016" TEXT="die L&#xe4;nge des Queue-Ringbuffers kann man konfigurieren"/>
2026-08-02 23:38:55 +02:00
<node CREATED="1785602722746" ID="ID_1040502252" MODIFIED="1785602814687" TEXT="Resultat: ein File-Descriptor">
<linktarget COLOR="#4283d0" DESTINATION="ID_1040502252" ENDARROW="Default" ENDINCLINATION="-1335;138;" ID="Arrow_ID_733993173" SOURCE="ID_1651891538" STARTARROW="None" STARTINCLINATION="-1836;143;"/>
</node>
2026-07-10 02:57:34 +02:00
</node>
<node CREATED="1783381048487" ID="ID_384071147" MODIFIED="1783381055553" TEXT="dann per mmap in den user-space mappen"/>
</node>
</node>
<node CREATED="1783381397970" ID="ID_1269361958" MODIFIED="1783381400665" TEXT="Verwenden...">
<node CREATED="1783381413665" ID="ID_738123625" MODIFIED="1783381418189" TEXT="add submission queue entry"/>
<node CREATED="1783381440513" ID="ID_1540836016" LINK="https://unixism.net/loti/ref-iouring/io_uring_enter.html#c.io_uring_enter" MODIFIED="1783381479636" TEXT="io_uring_enter()">
<node CREATED="1783381449741" ID="ID_1923740843" MODIFIED="1783381497303" TEXT="triggert den Kernel an: neue SQE da">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
man kann auch mehrere Eintr&#228;ge hinzuf&#252;gen und dann antriggern
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
<node CREATED="1783381503670" ID="ID_176407271" LINK="https://unixism.net/loti/tutorial/sq_poll.html#sq-poll" MODIFIED="1783381536644" TEXT="oder Submisssion-Queue-Polling verwenden">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
dann erkennt der Kernel sebst&#228;ndig, wenn was neues in der Queue ist
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
<node CREATED="1783381563444" ID="ID_1738464780" MODIFIED="1783381590147" TEXT="kann auch warten bis eine gewisse Zahl an CQ Entries zur&#xfc;ckgeschickt wurde"/>
</node>
<node CREATED="1783381611534" ID="ID_1396608178" MODIFIED="1783381625024" TEXT="ein CQE pro SQE, mit Ergebnis-Status">
<node CREATED="1783387631984" ID="ID_888714962" MODIFIED="1783387642585" TEXT="werden verbunden durch einen user_data-Pointer"/>
<node CREATED="1783387674355" ID="ID_1734790893" MODIFIED="1783387688094" TEXT="dieser wird vom Kernel einfach unver&#xe4;ndert durchgereicht"/>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1783389920263" ID="ID_631311167" MODIFIED="1783389939307" TEXT="Ha! das pa&#xdf;t perfekt auf mein Design der Continuations im Scheduler">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1783384996718" ID="ID_1183383765" MODIFIED="1783385010780" TEXT="CQ-Entries kommen in beliebiger Reihenfolge (wenn ready)">
<node CREATED="1783385011889" ID="ID_141657481" MODIFIED="1783385016940" TEXT="man kann aber Ordnung erzwingen"/>
</node>
<node CREATED="1783390082574" ID="ID_693582801" MODIFIED="1783390088426" TEXT="Daten / Buffer">
<icon BUILTIN="idea"/>
<node CREATED="1783390090337" ID="ID_1527986562" MODIFIED="1783390107574" TEXT="hier &#xfc;bertr&#xe4;gt sich die Systematik der alten IO-Syscalls"/>
<node CREATED="1783390108838" ID="ID_1250332278" MODIFIED="1783390117912" TEXT="man gibt einen Buffer im User-Process-Space an"/>
<node CREATED="1783390118846" ID="ID_752139916" MODIFIED="1783390138958" TEXT="der Kernel sorgt daf&#xfc;r, da&#xdf; dort die Daten landen"/>
<node CREATED="1783390139733" ID="ID_1637000405" MODIFIED="1783390228531" TEXT="wie er das macht, kann uns egal sein">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
....vermutlich wird der Buffer-Speicher einfach geeignet auch in den Kernel-Space gemapped; jedoch das Setup mit den Command/Completion-Ringbuffern isoliert den User komplett von diesen Fragen. Sehr geschickt!
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
<icon BUILTIN="ksmiletris"/>
</node>
</node>
</node>
<node CREATED="1783381920148" ID="ID_1220852513" MODIFIED="1783381925793" TEXT="low-level-Interface">
<node CREATED="1783381965202" ID="ID_1728181714" MODIFIED="1783381975125" TEXT="Tutorial: erst einmal redv() verstehen...">
<node CREATED="1783382282094" ID="ID_1820629134" MODIFIED="1783446293619" TEXT="scatter/gather-IO bzw. vectored IO">
<linktarget COLOR="#fdfdca" DESTINATION="ID_1820629134" ENDARROW="Default" ENDINCLINATION="1190;0;" ID="Arrow_ID_836559053" SOURCE="ID_668632489" STARTARROW="None" STARTINCLINATION="619;22;"/>
</node>
<node CREATED="1783382409880" ID="ID_1027835294" MODIFIED="1783382419498" TEXT="bekommt eine Liste von Auftrags-Structs">
<node CREATED="1783382430363" ID="ID_1171141321" MODIFIED="1783382439848" TEXT="struct iovec">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<pre http-equiv="content-type" content="text/html; charset=utf-8" class="enlighter-clipboard">struct iovec {
void *iov_base; /* Starting address */
size_t iov_len; /* Number of bytes to transfer */
};</pre>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
</node>
<node CREATED="1783384437400" ID="ID_261205380" MODIFIED="1783384460053" TEXT="transferiert den File-content l&#xfc;ckenlos der Reihe nach in die Buffer"/>
</node>
<node CREATED="1783387732857" ID="ID_1688041268" MODIFIED="1783387775312" TEXT="CQE hat user_date, res/error-code, wie read()"/>
<node CREATED="1783387816253" ID="ID_480695787" MODIFIED="1783387823986" TEXT="SQE ist eine Command-struct">
<node CREATED="1783387824860" ID="ID_1367724603" MODIFIED="1783387827979" TEXT="hat eine Command-ID"/>
<node CREATED="1783387828460" ID="ID_854431460" MODIFIED="1783387836666" TEXT="und dann diverse multi-purpose-fields"/>
<node CREATED="1783387924878" ID="ID_1554669393" MODIFIED="1783387936427" TEXT="Aufrufe sind modelliert nach bekannten IO-Operationen">
<node CREATED="1783388108773" ID="ID_1963002363" MODIFIED="1783388118801" TEXT="bsp: verwendet einen File-Descriptor"/>
<node CREATED="1783388119281" ID="ID_595160605" MODIFIED="1783388126033" TEXT="hat einen Offset in das File"/>
<node CREATED="1783388126544" ID="ID_1557501628" MODIFIED="1783388139315" TEXT="bekommt einen Buffer-pointer oder einen iovec"/>
</node>
</node>
<node CREATED="1783388781316" ID="ID_1265251773" MODIFIED="1783388814792" TEXT="man gibt eine struct io_uring_params an den io_uring_setup()"/>
<node CREATED="1783388646919" ID="ID_1468403550" MODIFIED="1783388660393" TEXT="man definiert sich selbst passende Schnittstellen-Structs">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783388674071" ID="ID_1871456691" MODIFIED="1783439712989" TEXT="Frage: warum ist das nicht vom Kernel vordefiniert?">
<icon BUILTIN="help"/>
<node CREATED="1783388990307" ID="ID_1963229698" MODIFIED="1783389000855" TEXT="weil das schon ein Abstraktionslayer ist"/>
<node CREATED="1783389001425" ID="ID_149275964" MODIFIED="1783389017213" TEXT="der Kernel definiert lediglich die Basis-structs SQE und CQE"/>
<node CREATED="1783389033526" ID="ID_531781879" MODIFIED="1783389070406" TEXT="die Positionen der Ringbuffer-Kontrollfelder sind quasi-dynamisch"/>
<node CREATED="1783389073434" ID="ID_378448165" MODIFIED="1783389087003" TEXT="sie werden per io_uring_params zur&#xfc;ckgegeben"/>
<node CREATED="1783389088143" ID="ID_1057767628" MODIFIED="1783389106739" TEXT="deshalb ist es sinnvoll, sich da eine Interface-struct dr&#xfc;berzusetzen"/>
</node>
<node CREATED="1783388687235" ID="ID_572599133" MODIFIED="1783388699931" TEXT="diese kann man dann per mmap in den user-space mappen"/>
<node CREATED="1783388891850" ID="ID_54309322" MODIFIED="1783388907891" TEXT="f&#xfc;r das zu mappende &quot;file&quot; gibt es einen File-Descriptor"/>
<node CREATED="1783388921357" ID="ID_788864531" MODIFIED="1783388932860" TEXT="dieser wird von io_uring_setup() zur&#xfc;ckgeliefert"/>
</node>
<node CREATED="1783439723372" ID="ID_70450003" MODIFIED="1783439731172" TEXT="Ringbuffer sind auf Index-Basis implementiert">
<node CREATED="1783439735880" ID="ID_1310555659" MODIFIED="1783439754513" TEXT="es ist ein Array, wobei head und tail als Indices gegeben sind"/>
<node CREATED="1783439755001" ID="ID_339978399" MODIFIED="1783439785005" TEXT="vor dem Zugriff wird der Index modulo die Ringbuffer-L&#xe4;nge genommen"/>
<node CREATED="1783439788873" ID="ID_800063940" MODIFIED="1783439821495" TEXT="Kontrollfelder und die Entry-Arrays liegen im shraed (mmaped) memory"/>
<node CREATED="1783439823932" ID="ID_51197608" MODIFIED="1783439987223" TEXT="die SQ-Entries werden &#xfc;ber eine weitere Indirektion mitgeteilt">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
Im Submission-Ringbuffer liegt nur eine Index-Nummer, die in ein daneben stehendes weiteres Array zeigt. Im Tutorial hei&#223;t es, das sei so konstruiert worden, um Applikationen zus&#228;tzliche Flexibilit&#228;t zu geben (was ich nicht wirklich verstehe, da ja auch das externe SQ-Array im mmapped-mem liegen mu&#223;)
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
</node>
<node CREATED="1783439999125" ID="ID_1383082691" MODIFIED="1783440018308" TEXT="Sichtbarkeit &#xfc;ber Thread-Grenzen beachten">
<node CREATED="1783440021146" ID="ID_171647218" MODIFIED="1783440029669" TEXT="shared-memory-Programmierung..."/>
<node CREATED="1783440030756" ID="ID_1601251687" MODIFIED="1783440088278" TEXT="braucht immer eine Read-barrier und am Ende eine write-barrier">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
damit man zu Beginn die neuesten Updates vom Kernel mitbekommt, und am Ende dem Kernel die neue Schreib/Lese-Position sichtbar gemacht wird
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
<node CREATED="1783440089704" ID="ID_1425651981" MODIFIED="1783440102635" TEXT="das gen&#xfc;gt hier, da es sich um single-Producer/Consumer handelt"/>
</node>
</node>
<node CREATED="1783440114398" ID="ID_1217216266" MODIFIED="1783440119000" TEXT="liburing verwenden">
<node CREATED="1783440833117" ID="ID_839873138" MODIFIED="1783440844539" TEXT="stellt ein C-Interface f&#xfc;r den Zugriff auf die Ringbuffer bereit">
<node CREATED="1783440926298" ID="ID_170963361" MODIFIED="1783440944465" TEXT="eine Schnittstellen-struct io_uring">
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1783820387473" ID="ID_215295477" MODIFIED="1783820445186" TEXT="modernes C/C++ weitgehend header-only / static-inline">
<arrowlink COLOR="#4387d9" DESTINATION="ID_569042424" ENDARROW="Default" ENDINCLINATION="-977;-775;" ID="Arrow_ID_876718032" STARTARROW="None" STARTINCLINATION="81;442;"/>
</node>
2026-07-10 02:57:34 +02:00
</node>
<node CREATED="1783440846153" ID="ID_1052852486" MODIFIED="1783440859478" TEXT="man kann...">
<node CREATED="1783440860347" ID="ID_134839902" MODIFIED="1783440877595" TEXT="auf den n&#xe4;chsten CQ-Entry blockend warten"/>
</node>
<node CREATED="1783440882234" ID="ID_301034439" MODIFIED="1783440900525" TEXT="die read/write-Barrieren sind verborgen">
<node CREATED="1783440901646" ID="ID_1734627767" MODIFIED="1783440912071" TEXT="stattdessen: io_uring_cqe_seen"/>
<node CREATED="1783442225762" ID="ID_1142061633" MODIFIED="1783442228423" TEXT="io_uring_submit(ring)"/>
</node>
<node CREATED="1783442066344" ID="ID_345729175" MODIFIED="1783442157624" TEXT="stellt high-level parameter-Konstruktoren f&#xfc;r die Operationen bereit">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
im Tutorial-Beispiel: io_uring_prep_readv() f&#252;llt einen SQ-Entry passend aus f&#252;r eine readv-Operation
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
</node>
<node CREATED="1783446631153" ID="ID_235240398" LINK="https://unixism.net/2020/04/io-uring-by-example-part-2-queuing-multiple-requests/" MODIFIED="1783446637597" TEXT="Tutorial: async coply">
<node CREATED="1783446647749" ID="ID_1584749060" MODIFIED="1783446656535" TEXT="alloziert jeweils eine Buffer + einen descriptor"/>
<node CREATED="1783446657178" ID="ID_42171709" MODIFIED="1783446665185" TEXT="h&#xe4;ngt diese als user-data an den Request"/>
<node CREATED="1783446669249" ID="ID_1943056546" MODIFIED="1783446680844" TEXT="macht die Queue erst mit read-requests voll"/>
<node CREATED="1783446681440" ID="ID_1130661279" MODIFIED="1783446690677" TEXT="im descriptor gibt es eine read/write-flag"/>
<node CREATED="1783446691449" ID="ID_557522221" MODIFIED="1783446702668" TEXT="damit wird ein copy-Proze&#xdf; realisiert"/>
<node CREATED="1783446913957" ID="ID_457406046" MODIFIED="1783446917117" TEXT="Komplikationen">
<node CREATED="1783446918040" ID="ID_742805192" MODIFIED="1783447636257" TEXT="anscheinend gibt es einen &quot;retry&quot;, signalisiert mit EAGAIN">
<node CREATED="1783447637802" ID="ID_1480100399" MODIFIED="1783447653363" TEXT="readv() ist nur eine scatter/gather-variante von read/write()"/>
<node CREATED="1783447770285" ID="ID_1587286955" MODIFIED="1783447818026" TEXT="wenn man read() mit Flag O_NONBLOCK aufruft, k&#xf6;nnte der physiche Read trotzdem blocken"/>
<node CREATED="1783447818970" ID="ID_1745751924" MODIFIED="1783447840404" TEXT="in diesem Fall liefert read() einen Fehler (ret=-1) mit Errno == EAGAIN"/>
</node>
<node CREATED="1783446948271" ID="ID_75609256" MODIFIED="1783446958635" TEXT="au&#xdf;erdem k&#xf6;nnen reads/writes k&#xfc;rzer sein als instruiert">
<node CREATED="1783447857789" ID="ID_1707492290" MODIFIED="1783447870607" TEXT="das ist explizit so vorgesehen"/>
<node CREATED="1783447871203" ID="ID_1408811228" MODIFIED="1783447879544" TEXT="kann sein, da&#xdf; das File zuende ist"/>
<node CREATED="1783447880121" ID="ID_1382932735" MODIFIED="1783447896011" TEXT="kann aber auch durch einen Interrupt bewirkt sein"/>
</node>
<node CREATED="1783446959217" ID="ID_1108500089" MODIFIED="1783446972605" TEXT="in beiden F&#xe4;llen mu&#xdf; man einen Request anpassen / nochmal senden"/>
</node>
</node>
</node>
<node CREATED="1783467860105" ID="ID_562346346" MODIFIED="1783467875236" TEXT="spezielle Aspekte">
<node CREATED="1783467876349" ID="ID_76451018" LINK="https://unixism.net/loti/tutorial/sq_poll.html#sq-poll" MODIFIED="1783468042036" TEXT="submission-polling">
<node CREATED="1783467887910" ID="ID_663414334" MODIFIED="1783467904503" TEXT="der Kernel erkennt neue Submission-Queue-Entries von selbst"/>
<node CREATED="1783467913708" ID="ID_1956703105" MODIFIED="1783467937206" TEXT="das spart einen Syscall pro Batch"/>
<node CREATED="1783468073102" ID="ID_1192604598" MODIFIED="1783468079770" TEXT="aktiviert per Flag beim Setup">
<node CREATED="1783468234883" ID="ID_422059492" MODIFIED="1783468250144" TEXT="au&#xdf;erdem: mu&#xdf; das &quot;fixed-files&quot;-feature verwenden"/>
<node CREATED="1783468250631" ID="ID_229494074" MODIFIED="1783468266874" TEXT="das ist ein vorbereitetes Array mit File-Descriptoren"/>
</node>
<node CREATED="1783467937700" ID="ID_1422805249" MODIFIED="1783467948389" TEXT="ABER: Kernel verwendet einen poller-Thread">
<node CREATED="1783467954732" ID="ID_161296285" MODIFIED="1783467979900" TEXT="der verursacht eine nicht-triviale CPU-Last"/>
<node CREATED="1783467981270" ID="ID_1932680351" MODIFIED="1783467997361" TEXT="und er endet von selber, wenn idle; mu&#xdf; dann neu gestartet werden"/>
</node>
<node CREATED="1783468009859" ID="ID_37458969" MODIFIED="1783468021842" TEXT="also &#x27f9; trade-off"/>
</node>
<node CREATED="1783471315936" ID="ID_238162094" MODIFIED="1783471325172" TEXT="Completions entnehmen">
<node CREATED="1783471326168" ID="ID_1768891087" MODIFIED="1783471336770" TEXT="es gibt einen blocking poll"/>
<node CREATED="1783471337414" ID="ID_1463733161" MODIFIED="1783471345321" TEXT="man kann aber peek-Funktionen verwenden"/>
<node CREATED="1783471346034" ID="ID_821102680" MODIFIED="1783471359503" TEXT="das geht auch f&#xfc;r einen Batch von Entries"/>
</node>
<node CREATED="1783469960153" ID="ID_1792704761" LINK="https://unixism.net/loti/tutorial/link_liburing.html#link-liburing" MODIFIED="1783471296410" TEXT="man kann Jobs sequentiell verketten">
<node CREATED="1783469982826" ID="ID_1031698216" MODIFIED="1783469991377" TEXT="dann k&#xf6;nnen sie nur der Reihe nach laufen"/>
<node CREATED="1783469992517" ID="ID_1177264229" MODIFIED="1783470001469" TEXT="nat&#xfc;rlich erzeugt das so einige Komplikationen"/>
<node CREATED="1783470003243" ID="ID_1005057440" MODIFIED="1783470013684" TEXT="und: eine solche Kette kann vorzeitig scheitern"/>
</node>
<node CREATED="1783470066077" ID="ID_858165857" LINK="https://unixism.net/loti/tutorial/fixed_buffers.html" MODIFIED="1783470085644" TEXT="&#xbb;fixed buffers&#xab; direkt shared gemapped">
<node CREATED="1783470086753" ID="ID_522385315" MODIFIED="1783470095701" TEXT="man mu&#xdf; dazu bestimmte Buffer vorher registrieren"/>
<node CREATED="1783470096329" ID="ID_1191315406" MODIFIED="1783470104274" TEXT="dann gibt man nur noch den Index des Buffers an"/>
<node CREATED="1783470104964" ID="ID_2685011" MODIFIED="1783470118664" TEXT="das geht nat&#xfc;rlich nur f&#xfc;r bestimmte Lese/Schreiboperationen"/>
<node CREATED="1783470119428" ID="ID_931891459" MODIFIED="1783470187977" TEXT="Vorteil: keine Kopie der Daten">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
weil der Buffer shared in den Client-Process-Space gemapped ist, mu&#223; der Kernel keine Daten mehr explizit in den Ziepuffer im Proze&#223; kopieren
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
</node>
<node CREATED="1783470603776" ID="ID_492007892" LINK="https://unixism.net/loti/tutorial/register_eventfd.html" MODIFIED="1783470629736" TEXT="kann per poll/epoll signalisieren da&#xdf; eine io_uring-completion vorliegt"/>
</node>
<node CREATED="1783471563411" ID="ID_1282916061" MODIFIED="1783471571979" TEXT="Async-Server-Patterns">
<node CREATED="1783471572703" ID="ID_1157203614" MODIFIED="1783471574044" TEXT="Reactor">
<node CREATED="1783471575007" ID="ID_1734284682" MODIFIED="1783471584374" TEXT="ein Thread der Requests dispatched"/>
<node CREATED="1783471588564" ID="ID_452380465" MODIFIED="1783471606480" TEXT="nimmt Requests entgegen und gibt sie an einen passenden Handler weiter"/>
<node CREATED="1783471897570" ID="ID_1140725129" MODIFIED="1783471919980" TEXT="Charakteristik: ein Reactor reagiert auf Readiness">
<node CREATED="1783471922698" ID="ID_1198048918" MODIFIED="1783471930114" TEXT="typisch f&#xfc;r poll / epoll"/>
<node CREATED="1783471930679" ID="ID_79266399" MODIFIED="1783471942404" TEXT="das Event ist, wenn der Socket ready ist"/>
<node CREATED="1783471943836" ID="ID_1316391544" MODIFIED="1783471950639" TEXT="danach macht der Handler das IO"/>
</node>
</node>
<node CREATED="1783471952182" ID="ID_46196379" MODIFIED="1783471954085" TEXT="Proactor">
<node CREATED="1783471954799" ID="ID_526206128" MODIFIED="1783471962028" TEXT="wie der Reactor: ein Handler-Thread"/>
<node CREATED="1783471962649" ID="ID_415612091" MODIFIED="1783471971307" TEXT="aber hier sind die Events bereits Completions"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783472019223" ID="ID_1612025217" MODIFIED="1783472086097" TEXT="Achtung: Backpressure notwendig">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1783472033373" ID="ID_662077901" MODIFIED="1783472046527" TEXT="man darf nur so viele Events auf den Weg schicken..."/>
<node CREATED="1783472047042" ID="ID_47181594" MODIFIED="1783472070378" TEXT="...wie man derzeit Completions gleichzeitig handhaben kann"/>
<node CREATED="1783472070951" ID="ID_277160689" MODIFIED="1783472080389" TEXT="sonst explodiert Speicher/Resourcen-Nutzung"/>
</node>
</node>
</node>
</node>
<node CREATED="1783820353490" ID="ID_806269718" MODIFIED="1783820356649" TEXT="Detail-Themen">
<node CREATED="1783820358773" ID="ID_492574690" MODIFIED="1783820363860" TEXT="Performance-Aspekte">
<node CREATED="1783820364596" ID="ID_569042424" MODIFIED="1783820440351" TEXT="liburing ist komplett als static-inline definiert">
<linktarget COLOR="#4387d9" DESTINATION="ID_569042424" ENDARROW="Default" ENDINCLINATION="-977;-775;" ID="Arrow_ID_876718032" SOURCE="ID_215295477" STARTARROW="None" STARTINCLINATION="81;442;"/>
<node CREATED="1783820461975" ID="ID_715616295" MODIFIED="1783820480357" TEXT="mit optimiser also praktisch direkter Kernel-Aufruf"/>
<node CREATED="1783820481050" ID="ID_1869508632" MODIFIED="1783820542141" TEXT="liburing-ffi: definiert alle calls als binary-Symbols (&#x27f9; langsamer)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ist notwendig f&#252;r andere Sprach-Bindings oder &#228;ltere Compiler; dadurch hat dann nat&#252;rlich jeder Call einen Overhead
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node CREATED="1784909413276" ID="ID_249945275" MODIFIED="1785374060368" TEXT="alte / andere IO-Modelle">
<node CREATED="1784909419840" ID="ID_468319825" MODIFIED="1784909424853" TEXT="poll/epoll">
<node CREATED="1784909439497" ID="ID_1084860008" MODIFIED="1784909467251" TEXT="alle beantworten: &quot;welchen von diesen N Sockets kann ich jetzt lesen?&quot;"/>
<node CREATED="1784909430431" ID="ID_1550519100" MODIFIED="1784909431498" TEXT="select">
<node CREATED="1784909493440" ID="ID_1776306601" MODIFIED="1784909501801" TEXT="die &#xe4;lteste L&#xf6;sung"/>
<node CREATED="1784909502349" ID="ID_2286932" MODIFIED="1784909521102" TEXT="man gibt dem Kernel eine Bitmask die interessante FildDescriptors markiert"/>
<node CREATED="1784909521832" ID="ID_1755337748" MODIFIED="1784909530992" TEXT="der Kernel setzt dort Bit"/>
<node CREATED="1784909532281" ID="ID_1850235470" MODIFIED="1784909544907" TEXT="man sieht dann selber welche FD-Nummer man anschauen sollte"/>
<node CREATED="1784909546095" ID="ID_242092869" MODIFIED="1784909559545" TEXT="limitiert durch die feste Bitmask-Gr&#xf6;&#xdf;e (1024)"/>
</node>
<node CREATED="1784909581226" ID="ID_486293840" MODIFIED="1784909582678" TEXT="poll">
<node CREATED="1784909583578" ID="ID_50149205" MODIFIED="1784909592869" TEXT="gleiches Prinzip, aber API mit einer flexiblen Liste"/>
<node CREATED="1784909594154" ID="ID_1802655092" MODIFIED="1784909599505" TEXT="jeder Call ist O(n)"/>
</node>
<node CREATED="1784909637914" ID="ID_92373023" MODIFIED="1784909639511" TEXT="epoll">
<node CREATED="1784909640259" ID="ID_507142615" MODIFIED="1784909645150" TEXT="Linux-spezifische L&#xf6;sung"/>
<node CREATED="1785374094283" ID="ID_1130821537" MODIFIED="1785374151760" TEXT="implementiert analog zu einem Futex">
<arrowlink COLOR="#597699" DESTINATION="ID_1095241058" ENDARROW="Default" ENDINCLINATION="-218;-303;" ID="Arrow_ID_1783250058" STARTARROW="None" STARTINCLINATION="-666;46;"/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1784909650811" ID="ID_1531049274" MODIFIED="1784909659550" TEXT="man registriert Interesse an bestimmten FDs"/>
<node CREATED="1784909660072" ID="ID_882314156" MODIFIED="1784909688207" TEXT="man bekommt per Kernel-Aufruf eine Liste der lesebereiten FDs"/>
<node CREATED="1784909688716" ID="ID_1964702359" MODIFIED="1784909707021" TEXT="ist O(1) da push vom Network-Stack"/>
</node>
</node>
<node CREATED="1784909736198" ID="ID_1140561950" MODIFIED="1784909738753" TEXT="im Detail">
<node CREATED="1784909739501" ID="ID_1315873664" MODIFIED="1784909745423" TEXT="das sind alles blockende Kernel-Calls"/>
<node CREATED="1784909751964" ID="ID_1277219779" MODIFIED="1784909761846" TEXT="nur werden die Daten intern bereits vorbereitet"/>
<node CREATED="1784909776690" ID="ID_988789751" MODIFIED="1784909785052" TEXT="Jeder Socket hat einen receive-Buffer"/>
<node CREATED="1784909814875" ID="ID_1511520490" MODIFIED="1784909824021" TEXT="dort kann man sich in eine wait-queue registrieren"/>
<node CREATED="1784909824946" ID="ID_943421877" MODIFIED="1784909849298" TEXT="beim Eintreffen von Daten wird der aktuelle Thread auf &quot;aktiv&quot; markiert"/>
<node CREATED="1784909851798" ID="ID_890255483" MODIFIED="1784909865847" TEXT="beim n&#xe4;chsten Scheduler-Turn wird er auf eine core gemapped"/>
</node>
<node CREATED="1784909882722" ID="ID_898978088" MODIFIED="1784909894254" TEXT="es gibt eine Unix-Signal-basierte Variante">
<node CREATED="1784909895312" ID="ID_1380240825" MODIFIED="1784909906371" TEXT="die wird aber extrem selten genutzt"/>
<node CREATED="1784909920762" ID="ID_409154508" MODIFIED="1784909936575" TEXT="ist kniffelig: man wei&#xdf; nicht f&#xfc;r welchen FD man signalisiert wurde"/>
</node>
<node CREATED="1784909970894" ID="ID_467441062" MODIFIED="1784910002009" TEXT="Achtung: lokale Files nicht f&#xfc;r poll/epoll geeignet">
<node CREATED="1784910003130" ID="ID_1349981115" MODIFIED="1784910020372" TEXT="sie implementieren nicht den &quot;readiness-contract&quot; des VFS-Layers"/>
<node CREATED="1784910020816" ID="ID_1067149107" MODIFIED="1784910030490" TEXT="sie haben keinnen Buffer-leer-Status"/>
<node CREATED="1784910033854" ID="ID_245837866" MODIFIED="1784910044737" TEXT="insofern &#xbb;erscheinen&#xab; sie immer &quot;ready&quot;"/>
<node CREATED="1784910045236" ID="ID_1620698915" MODIFIED="1784910058118" TEXT="aber der Lese-Aufruf blockt dann u.U. doch"/>
<node CREATED="1784910062689" ID="ID_637014950" MODIFIED="1784910077818" TEXT="Abhilfe: asio und File-Handles im DIRECT-Modus"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1784910098946" ID="ID_1349516830" MODIFIED="1784910117028" TEXT="selbst das Reactor-Modell braucht stets einen Kernel-Call">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784910118219" ID="ID_560621411" MODIFIED="1784910129209" TEXT="das ist der wichtigste Vorteil von IO_URING"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785860775384" ID="ID_1509658937" LINK="https://claude.ai/share/8fa0fb6e-992b-40a1-adce-f03f3f748edb" MODIFIED="1785861103377" STYLE="fork">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<b>Recherche / Background</b>&#160;- Konversation mit <u>Claude</u>
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<linktarget COLOR="#25bbd3" DESTINATION="ID_1509658937" ENDARROW="Default" ENDINCLINATION="-1299;65;" ID="Arrow_ID_1234011492" SOURCE="ID_402484787" STARTARROW="None" STARTINCLINATION="-369;0;"/>
<font NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="wizard"/>
<node COLOR="#335352" CREATED="1785860960381" ID="ID_333032086" MODIFIED="1785861084358" TEXT="lang laufender Thread &#x2014; parallel zu meinen eigenen Recherchen">
<font NAME="SansSerif" SIZE="11"/>
</node>
<node COLOR="#335352" CREATED="1785860994323" ID="ID_525300724" MODIFIED="1785861084358" TEXT="Ausgangspunkt war meine eigene Unsicherheit im Begriffsgebrauch">
<font NAME="SansSerif" SIZE="11"/>
</node>
<node COLOR="#335352" CREATED="1785861008363" ID="ID_1530707411" MODIFIED="1785861084358" TEXT="habe mir dann Details erkl&#xe4;ren lassen, die ich nur ungef&#xe4;r wu&#xdf;te">
<font NAME="SansSerif" SIZE="11"/>
</node>
<node COLOR="#335352" CREATED="1785861023766" ID="ID_391668172" MODIFIED="1785861084356" TEXT="gegen Ende wurde es eine Debatte zu Unix/Design-Philosophien">
<font NAME="SansSerif" SIZE="11"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1784562284612" ID="ID_1770923455" MODIFIED="1785373442117" TEXT="Performance-Aspekte">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ich verf&#252;ge &#252;ber vertieftes Wissen und einiges an Erfahrung in diesen Bereichen, sollte aber meine Kenntnisse &#252;berpr&#252;fen und festigen, um auch auf Fragen eingehen zu k&#246;nnen. Im Besonderen zu Kernel-nahen Themen wei&#223; ich ehr wenig.
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
<node CREATED="1784562295882" ID="ID_1400086239" MODIFIED="1785373434667" TEXT="Cache/Pipeline">
<arrowlink DESTINATION="ID_1358858974" ENDARROW="Default" ENDINCLINATION="486;-286;" ID="Arrow_ID_713987634" STARTARROW="None" STARTINCLINATION="1350;0;"/>
</node>
<node CREATED="1784562308304" ID="ID_1632264826" MODIFIED="1784562316059" TEXT="Locking/Barriers">
<node CREATED="1784597020131" ID="ID_246135215" MODIFIED="1784597022117" TEXT="Begriffe">
<node CREATED="1784597025507" ID="ID_1545286772" MODIFIED="1784597032928" TEXT="Barrier vs. Memory Barrier vs Fence">
<node CREATED="1784599247555" ID="ID_1445290198" MODIFIED="1784599258517" TEXT="Fence und Barrier ist im allgemeinen synonym"/>
<node CREATED="1784599259921" ID="ID_592274590" MODIFIED="1784599269499" TEXT="kann auf verschiedenen Ebenen sitzen">
<node CREATED="1784599271052" ID="ID_1057609140" MODIFIED="1784599273771" TEXT="Hardware"/>
<node CREATED="1784599274465" ID="ID_1950423301" MODIFIED="1784599279400" TEXT="Compiler instruction reordering"/>
</node>
<node CREATED="1784599287789" ID="ID_756195091" MODIFIED="1784599304567" TEXT="machmal wird auch unterschieden zwischen synchronisation barrier und memory barrier"/>
</node>
<node CREATED="1784600731066" ID="ID_1114913802" MODIFIED="1784600735725" TEXT="Ursprung der Begriffe">
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784903431103" ID="ID_1723854173" MODIFIED="1784905020234" STYLE="fork" TEXT="Claude sieht drei Urspr&#xfc;nge">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1784903450919" ID="ID_657261671" MODIFIED="1784905020228" TEXT="1. Hardware/ISA level">
<node CREATED="1784903498677" ID="ID_1041458587" LINK="https://de.wikipedia.org/wiki/Industry_Standard_Architecture" MODIFIED="1784905020228" TEXT="Industry Standard Architecture (ISA)"/>
<node CREATED="1784903604215" ID="ID_1994086427" MODIFIED="1784905020228" TEXT="ARM Manuals use the term &quot;barrier&quot;"/>
<node CREATED="1784903616247" ID="ID_821194885" MODIFIED="1784905020228" TEXT="Intel/AMD uses &quot;fences&quot; and has fence-Instructions"/>
<node CREATED="1784903638786" ID="ID_499701429" MODIFIED="1784905020228" TEXT="Power hat sync-Instruktionen (werden im Handbuch als synchronisation barriers) beschrieben"/>
</node>
<node CREATED="1784903476009" ID="ID_688864045" MODIFIED="1784905020228" TEXT="2. The four-way taxonomy">
<node CREATED="1784903693418" ID="ID_1045852271" MODIFIED="1784905020228" TEXT="stammt aus dem SPARC-Umfeld">
<node CREATED="1784903717049" ID="ID_1030627846" MODIFIED="1784905020228" TEXT="Sparc hat instruktionen mit einer Barrier-Bitmask"/>
<node CREATED="1784903736845" ID="ID_1408029632" MODIFIED="1784905020228" TEXT="LoadLoad, StoreStore, LoadStore, StoreLoad."/>
</node>
<node CREATED="1784903749579" ID="ID_114135406" MODIFIED="1784905020228" TEXT="aufgegriffen f&#xfc;r Java-5">
<node CREATED="1784903760129" ID="ID_1989117356" MODIFIED="1784905020228" TEXT="das war die erste Mainstream-Sprache mit einem Memory-Model"/>
<node CREATED="1784903786078" ID="ID_1216686049" LINK="https://gee.cs.oswego.edu/dl/jmm/cookbook.html" MODIFIED="1784905020228">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Doug Lea's &quot;<b>JSR-133 Cookbook for Compiler Writers</b>&quot;
</p>
</body>
</html></richcontent>
<icon BUILTIN="info"/>
</node>
<node CREATED="1784903807771" ID="ID_904190729" MODIFIED="1784905020229" TEXT="Adve &amp; Gharachorloo, &quot;Shared Memory Consistency Models: A Tutorial&quot; (1996)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Gilt als Quelle f&#252;r Doug Lea
</p>
</body>
</html></richcontent>
<node CREATED="1784904506202" ID="ID_511399832" LINK="https://www.cs.cmu.edu/afs/cs/academic/class/15740-f18/www/papers/ieeemicro96-adve-consistency.pdf" MODIFIED="1784905020229" TEXT="Scan einer Publikation 1996">
<node CREATED="1784904643053" ID="ID_1228994940" LINK="https://web.archive.org/web/20260121164830/https://www.cs.cmu.edu/afs/cs/academic/class/15740-f18/www/papers/ieeemicro96-adve-consistency.pdf" MODIFIED="1784905020229" TEXT="A"/>
</node>
<node CREATED="1784904536322" ID="ID_1489665899" LINK="Rice University ECE Technical Report 9512" MODIFIED="1784905020229" TEXT="PDF (kopierbar) &#x2022; Rice University ECE Technical Report 9512 &#x2022; September 1995">
<node CREATED="1784904767253" ID="ID_402738850" LINK="https://web.archive.org/web/20250125204437/https://www.cs.unc.edu/~prins/Classes/633/Readings/MemoryConsistencyModelsTutorial.pdf" MODIFIED="1784905020229" TEXT="A"/>
</node>
</node>
</node>
<node CREATED="1784903888398" ID="ID_863086016" MODIFIED="1784905020229" TEXT="Common names">
<node CREATED="1784903888399" ID="ID_12480073" MODIFIED="1784905020229" TEXT="LoadLoad read-read fence">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
loads before must complete before loads after
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784903888399" ID="ID_296525436" MODIFIED="1784905020229" TEXT="StoreStore write-write fence">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
stores before must become visible before stores after
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784903888399" ID="ID_655305278" MODIFIED="1784905020229" TEXT="LoadStore read-write fence">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
loads before must complete before stores after
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784903888400" ID="ID_636786121" MODIFIED="1784905020229" TEXT="StoreLoad write-read fence">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
stores before must become visible before loads after
</p>
</body>
</html></richcontent>
<node CREATED="1785788731289" ID="ID_967019067" MODIFIED="1785788740700" TEXT="this is expensive"/>
</node>
</node>
</node>
<node CREATED="1784903486937" ID="ID_689347133" MODIFIED="1784905020229" TEXT="3. C++ standard">
<node CREATED="1784905049390" ID="ID_1252554036" LINK="https://en.cppreference.com/cpp/atomic/memory_order" MODIFIED="1784905137346" TEXT="std::memory_order">
<node CREATED="1784905152608" ID="ID_566957216" MODIFIED="1784905162786" TEXT="ist eine hardware-unabh&#xe4;ngige Abstraktion"/>
<node CREATED="1784905163542" ID="ID_295092916" MODIFIED="1784905176027" TEXT="wird vom Compiler f&#xfc;r jede Plattform passend umgesetzt"/>
</node>
<node CREATED="1784905073150" ID="ID_524344347" LINK="https://en.cppreference.com/cpp/atomic/atomic_thread_fence" MODIFIED="1784905144999" TEXT="std::atomic_thread_fence"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784904925694" ID="ID_1668338633" MODIFIED="1784905006895" STYLE="fork" TEXT="Fromulierungs-Vorschlag von Claude">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1784904935445" ID="ID_1352377610" MODIFIED="1784905006877">
<richcontent TYPE="NODE"><html>
<head/>
<body>
&quot;barrier/fence is hardware vocabulary for a specific machine instruction; memory_order is C++'s hardware-independent vocabulary for a guarantee; the compiler's job is to translate one into the other &#8212; and 'fence' in the standard specifically means the standalone
<p>
<code http-equiv="content-type" content="text/html; charset=utf-8" class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">atomic_thread_fence</code>, not a synonym for <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">memory_order</code>.&quot;
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node CREATED="1784908320566" ID="ID_1732195522" MODIFIED="1784908327105" TEXT="Reactor / Proactor">
<node CREATED="1784908328417" ID="ID_1472819180" LINK="https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture" MODIFIED="1784908462711">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<a rel="mw:WikiLink" href="https://en.wikipedia.org/wiki/Douglas_C._Schmidt" title="Douglas C. Schmidt">Douglas C. Schmidt</a><br /><u>Pattern-Oriented Software Architecture Volume 2</u>:<br />Patterns for Concurrent and Networked Objects
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784908524543" ID="ID_1085065643" LINK="https://www.researchgate.net/publication/215835789_Pattern-Oriented_Software_Architecture_Patterns_for_Concurrent_and_Networked_Objects_Volume_2" MODIFIED="1784908532546" TEXT="online auf ResearchGate.net">
<node CREATED="1784908575496" ID="ID_981331086" MODIFIED="1784908579812" TEXT="Proactor: S.181"/>
</node>
</node>
</node>
<node CREATED="1784905507376" ID="ID_1003026788" MODIFIED="1784905516883" TEXT="Unterscheidung: Synchronisation / Memory barrier">
<node CREATED="1784905550523" ID="ID_46753921" MODIFIED="1784905564533" TEXT="synchronisation: a rendevous point"/>
<node CREATED="1784905569032" ID="ID_601678647" MODIFIED="1784905583378" TEXT="memory barrer: not blocking on itself">
<node CREATED="1784905602745" ID="ID_1645902351" MODIFIED="1784905612758" TEXT="visibility regime"/>
<node CREATED="1784905587190" ID="ID_1714821702" MODIFIED="1784905602160" TEXT="ordering guarantee always holds"/>
<node CREATED="1784905613970" ID="ID_616950822" MODIFIED="1784905800237" TEXT="but is only useful when paired with a (edge) observation"/>
<node CREATED="1784905714197" ID="ID_1563515485" MODIFIED="1784905719560" TEXT="man bindet an eine Flag">
<node CREATED="1784905720466" ID="ID_1613902659" MODIFIED="1784905720943" TEXT="Release = StoreStore + LoadStore, placed before the flag store"/>
<node CREATED="1784905728611" ID="ID_201116957" MODIFIED="1784905729215" TEXT="Acquire = LoadLoad + LoadStore, placed after the flag load"/>
</node>
</node>
<node CREATED="1784905763758" ID="ID_515518167" MODIFIED="1784905772088" TEXT="C++ Standard: synchronizes-with"/>
<node CREATED="1784905829373" ID="ID_1029060555" MODIFIED="1784905832642" TEXT="usage pattern">
<node CREATED="1784905836661" ID="ID_1106405339" MODIFIED="1784905840592" TEXT="spin loop"/>
<node CREATED="1784905840892" ID="ID_351410280" MODIFIED="1784905844349" TEXT="CAS retry loop"/>
<node CREATED="1784905865424" ID="ID_1584320750" MODIFIED="1784905872076" TEXT="pattern match trail"/>
</node>
</node>
<node CREATED="1784905913607" ID="ID_760903381" MODIFIED="1784905925301" TEXT="x86 memory model : TSO (Total Store Order)">
<node CREATED="1784906050870" ID="ID_1735111195" MODIFIED="1784906102565" TEXT="StoreStore, LoadLoad, LoadStore : automatically guaranteed"/>
<node CREATED="1784906107472" ID="ID_311784766" MODIFIED="1784906116199" TEXT="StoreLoad must be enforced">
<node CREATED="1784906130273" ID="ID_1293987900" MODIFIED="1784906139736" TEXT="Store can sit in the Store buffer"/>
<node CREATED="1784906140344" ID="ID_151207131" MODIFIED="1784906152185" TEXT="another Load is satisfied from Cache"/>
<node CREATED="1784906168264" ID="ID_641921488" MODIFIED="1784906181563" TEXT="only relevant for sequentially_consistent"/>
</node>
<node CREATED="1784906198381" ID="ID_1790908983" MODIFIED="1784906267764">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
ABER: gemeinsamer Speicherzugriff <b>kostet immer</b>
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784906659191" ID="ID_59883588" MODIFIED="1784906668665" TEXT="&#xbb;cache coherence protocol traffic&#xab;"/>
<node CREATED="1784906746716" ID="ID_1799583572" MODIFIED="1784906767217" TEXT="typischerweise mehr als der Store-Buffer-flush f&#xfc;r seq_cst">
<icon BUILTIN="clanbomber"/>
</node>
</node>
<node CREATED="1784906268926" ID="ID_66218233" MODIFIED="1784906290776">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
ABER: der Compiler kann auch <b>umordnen</b>
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1784906855164" ID="ID_301489633" MODIFIED="1784906865587">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Bezug zu <b>liburing</b>
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
<node CREATED="1784906876690" ID="ID_698949310" MODIFIED="1784906877398" TEXT="io_uring_smp_store_release() / io_uring_smp_load_acquire()"/>
<node CREATED="1784906878482" ID="ID_786453150" MODIFIED="1784906887132" TEXT="verwendet acquire / release-Semantik"/>
<node CREATED="1784906895393" ID="ID_388911767" MODIFIED="1784906905154" TEXT="braucht keine sequentielle Konsistenz"/>
</node>
<node CREATED="1784907052250" ID="ID_1271354149" MODIFIED="1784907068596" TEXT="Operationskosten vs. tats&#xe4;chliche Kosten">
<node CREATED="1784907070048" ID="ID_1700979751" MODIFIED="1785374442764" TEXT="drei Situation / Regimes zu unterscheiden">
<linktarget COLOR="#59757b" DESTINATION="ID_1700979751" ENDARROW="Default" ENDINCLINATION="-189;281;" ID="Arrow_ID_1440622046" SOURCE="ID_920472395" STARTARROW="None" STARTINCLINATION="-155;25;"/>
<node CREATED="1784907081695" ID="ID_8314744" MODIFIED="1784907094681" TEXT="Microbenchmark: hei&#xdf; und unter Druck">
<node CREATED="1784907141593" ID="ID_267156252" MODIFIED="1784907149370" TEXT="Zugriffe 3-5 x langsamer"/>
<node CREATED="1784907149877" ID="ID_248586022" MODIFIED="1784907156913" TEXT="niedrige 2-stellige Nanosekunden">
<node CREATED="1784907159045" ID="ID_1638111160" MODIFIED="1784907161960" TEXT="meine Beobachtung"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784907162385" ID="ID_1402937823" MODIFIED="1784907178100" STYLE="fork" TEXT="Claude hat im Netz gesucht und die Gr&#xf6;&#xdf;enordnung best&#xe4;tigt">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
</node>
<node CREATED="1784907202617" ID="ID_673513114" MODIFIED="1784907235721" TEXT="Kosten h&#xe4;ngen praktisch nicht von anderen Threads ab">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
weil die Benchmark-Thread(s) warm
</p>
<p>
&#160;gehalten werden
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1784907095381" ID="ID_1358858974" MODIFIED="1785373434667" TEXT="real call-chain yet hot cache">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1358858974" ENDARROW="Default" ENDINCLINATION="486;-286;" ID="Arrow_ID_713987634" SOURCE="ID_1400086239" STARTARROW="None" STARTINCLINATION="1350;0;"/>
<node CREATED="1784907242553" ID="ID_854501852" MODIFIED="1784907254508" TEXT="man sieht Cache-Miss-Kosten"/>
<node CREATED="1784907255224" ID="ID_191201973" MODIFIED="1784907288063" TEXT="LLC (low-levelCache) hit: mitlere 2-stellige ns"/>
<node CREATED="1784907289483" ID="ID_30976624" MODIFIED="1784907303133" TEXT="Cache-to-DRAM : 100ns"/>
</node>
<node CREATED="1784907105569" ID="ID_498759870" MODIFIED="1784907119046" TEXT="real call-chain with cold or even sleeping partner">
<node CREATED="1784907337701" ID="ID_1773112651" MODIFIED="1784907348168" TEXT="kann bis in den &#xb5;s-Bereich kosten"/>
<node CREATED="1784907386622" ID="ID_55157951" MODIFIED="1784907408951" TEXT="Kontext-Switches via OS kosten 1.5 - 4&#xb5;s"/>
<node CREATED="1784907434040" ID="ID_1806367904" MODIFIED="1784907439211" TEXT="sleep-state wakeup latency">
<node CREATED="1784907446230" ID="ID_125187055" MODIFIED="1784907456006" TEXT="C1E state (leicht) : 10&#xb5;s latency"/>
<node CREATED="1784907459037" ID="ID_1079013280" MODIFIED="1784907468760" TEXT="C6 state (deper) : 130 &#xb5;s"/>
<node CREATED="1784907496160" ID="ID_1152415054" MODIFIED="1784907503846" TEXT="Rekonfiguration einer Core: ~10&#xb5;s"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784907639420" ID="ID_421389218" MODIFIED="1784907652689" STYLE="fork">
<richcontent TYPE="NODE"><html>
<head/>
<body>
&quot;A synchronization primitive's instruction-level cost is what a hot microbenchmark measures; its systemic cost &#8212; coherence traffic under contention, and blocking/wake latency when it isn't contended &#8212; is what your production tail latency measures, and the two can differ by two to four orders of magnitude.&quot;
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1784908696776" ID="ID_1195619223" MODIFIED="1784908716530">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Verbindung zum <b>Proactor</b>
</p>
</body>
</html></richcontent>
<icon BUILTIN="back"/>
<node CREATED="1784908718133" ID="ID_161622462" MODIFIED="1784908739198" TEXT="IO-dominiert &#x27f9; hei&#xdf;">
<node CREATED="1784908742591" ID="ID_1531538522" MODIFIED="1784908749941" TEXT="der Proactor schl&#xe4;ft nie"/>
<node CREATED="1784908768511" ID="ID_962776798" MODIFIED="1784908783059" TEXT="man zahlt nur acquire/release-Kosten und Cache-traffic"/>
</node>
<node CREATED="1784908784724" ID="ID_1308278739" MODIFIED="1784908793543" TEXT="CPU-dominiert &#x27f9; kalt">
<node CREATED="1784908801017" ID="ID_298423761" MODIFIED="1784908804553" TEXT="Proactor blockt"/>
<node CREATED="1784908805122" ID="ID_736379164" MODIFIED="1784908815372" TEXT="man zahlt zumindest Kontext-Switch"/>
<node CREATED="1784908815936" ID="ID_254573875" MODIFIED="1784908824651" TEXT="u.U sogar wakeup einer Idle-Core"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784909009687" ID="ID_388537598" MODIFIED="1784909032689" STYLE="fork" TEXT="Frage an Claude: Verh&#xe4;ltnis zur Backpressure">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<icon BUILTIN="help"/>
<node CREATED="1784909034361" ID="ID_1332104626" MODIFIED="1784909049037" TEXT="Claude ordnet das ehr als &#xbb;Duty-cycle&#xab; ein"/>
<node CREATED="1784909107922" ID="ID_901244335" MODIFIED="1784909111887">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<strong http-equiv="content-type" content="text/html; charset=utf-8">server-vacation</strong>&#160;model
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1784908878383" ID="ID_1154107045" MODIFIED="1784909008360" TEXT="Hinweis auf Submission SQPOLL">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
man kann einen Kernel-Thread konfiguieren, der die Submission-Queue pollt. Dort konfiguriert man eine Einschlafe-Periode. Wenn der Poller schl&#228;ft, setzt er ein Bit und mu&#223; von der Applikation explizit wieder reaktiviert werden.
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1785373456739" ID="ID_295523448" MODIFIED="1785373463022" TEXT="Basis-Mechanismen">
<node CREATED="1785373485441" ID="ID_941680751" MODIFIED="1785373500804" TEXT="die Kosten setzen sich stets aus mehreren Komponenten zusammen">
<node CREATED="1785373502656" ID="ID_1749694308" MODIFIED="1785373513287" TEXT="Atomic / Memory-Barrier f&#xfc;r eine Flag"/>
<node CREATED="1785373514436" ID="ID_285943102" MODIFIED="1785373526134" TEXT="typischwerwise Zugriff mit atomic-CAS"/>
<node CREATED="1785373528313" ID="ID_488098307" MODIFIED="1785373553521" TEXT="bei Contention &#x27f9; mu&#xdf; warten"/>
<node CREATED="1785373554116" ID="ID_1023699101" MODIFIED="1785373564672" TEXT="dazu in eine wait-queue im Kernel"/>
<node CREATED="1785373565532" ID="ID_462807653" MODIFIED="1785373574271" TEXT="und dann den Thread schlafen legen"/>
</node>
<node CREATED="1785373585511" ID="ID_1095241058" MODIFIED="1785374146516" TEXT="moderne Implementierung dieses Mechanismus: Futex">
<linktarget COLOR="#597699" DESTINATION="ID_1095241058" ENDARROW="Default" ENDINCLINATION="-218;-303;" ID="Arrow_ID_1783250058" SOURCE="ID_1130821537" STARTARROW="None" STARTINCLINATION="-666;46;"/>
<node CREATED="1785373600344" ID="ID_1992394136" MODIFIED="1785373608186" TEXT="&quot;fast userspace mutex&quot;">
<node CREATED="1785373640222" ID="ID_1176006855" LINK="https://kernel-internals.org/locking/futex/" MODIFIED="1785373651076" TEXT="ist eine Linux-spezifische Implementierung"/>
<node CREATED="1785373651891" ID="ID_852212282" MODIFIED="1785373656476" TEXT="der Mechanismus ist generisch">
<node CREATED="1785373696131" ID="ID_1324517392" MODIFIED="1785373774336">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Windows has <code http-equiv="content-type" content="text/html; charset=utf-8" class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]"><font face="Monospaced" color="#733a3a">WaitOnAddress</font></code><font face="Monospaced" color="#733a3a">/<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">WakeByAddressSingle</code>/<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">WakeByAddressAll</code></font>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785373716197" ID="ID_1245015075" MODIFIED="1785373788200">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
FreeBSD has <code http-equiv="content-type" content="text/html; charset=utf-8" class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]"><font face="Monospaced" color="#7a5454">_umtx_op</font></code>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1785373803889" ID="ID_1512882398" MODIFIED="1785373807427" TEXT="syscalls">
<node CREATED="1785373825289" ID="ID_174764098" MODIFIED="1785373826006" TEXT="futex(FUTEX_WAIT, addr, expected)">
<node CREATED="1785373829201" ID="ID_951216369" MODIFIED="1785373833165" TEXT="macht einen CAS"/>
<node CREATED="1785373833721" ID="ID_1842215225" MODIFIED="1785373848586" TEXT="wenn *addr == expected &#x27f9; Schlafen"/>
</node>
<node CREATED="1785373860741" ID="ID_1986824982" MODIFIED="1785373862088" TEXT="futex(FUTEX_WAKE, addr, n)">
<node CREATED="1785373863108" ID="ID_1980037133" MODIFIED="1785373891097">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
weckt n threads auf,
</p>
<p>
die in der wait-queue f&#252;r adr. stehen
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1785373936627" ID="ID_261363018" MODIFIED="1785373963603">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
beachte: der <i>uncontended-case</i>&#160;bleibt <b>komplett im userspace</b>
</p>
</body>
</html></richcontent>
<node CREATED="1785373966875" ID="ID_1767743436" MODIFIED="1785373975865" TEXT="d.h. der ist so schnell wie eine atomic-barrier"/>
<node CREATED="1785373976469" ID="ID_155107098" MODIFIED="1785373986417" TEXT="nur wenn wir eh blocken, machen wir einen syscall"/>
</node>
</node>
<node CREATED="1785374468131" ID="ID_1152412438" MODIFIED="1785374479713" TEXT="Hinweis: C++20 hat nun ein std::atomic::wait()">
<node CREATED="1785374486872" ID="ID_685239977" MODIFIED="1785374496979" TEXT="damit hat man direkt Zugriff auf ein Atomic+Futex"/>
<node CREATED="1785374497538" ID="ID_236549154" MODIFIED="1785374507225" TEXT="man kann damit selber custom-Locks implementieren"/>
<node CREATED="1785374522332" ID="ID_173017861" MODIFIED="1785374544060" TEXT="f&#xe4;llt transparent auf Mutex+Cond-Var zur&#xfc;ck (wenn nicht Linux)"/>
</node>
<node CREATED="1785374181810" ID="ID_27956831" MODIFIED="1785374210226" TEXT="alle &#xbb;wait-Mechanismen&#xab; kosten &#x201e;praktisch&#x201c; das Gleiche">
<node CREATED="1785374212038" ID="ID_370192999" MODIFIED="1785374215346" TEXT="das war nicht immer so"/>
<node CREATED="1785374218629" ID="ID_1002961055" MODIFIED="1785374240868" TEXT="die Unterschiede liegen im Nutzkontext"/>
<node CREATED="1785374251721" ID="ID_642192338" MODIFIED="1785374257091" TEXT="und vor allem in der workload">
<node CREATED="1785374257860" ID="ID_1630491542" MODIFIED="1785374260715" TEXT="Beispiel Future">
<node CREATED="1785374262221" ID="ID_791328949" MODIFIED="1785374270705" TEXT="Future wird nur ein einziges mal gepr&#xfc;ft"/>
<node CREATED="1785374271271" ID="ID_1622542937" MODIFIED="1785374276777" TEXT="in der Regel ist der Wert schon da"/>
<node CREATED="1785374277447" ID="ID_1273394515" MODIFIED="1785374296358" TEXT="&#x27f9; l&#xe4;uft in den &#xbb;uncontended&#xab; branch des unterliegenden Futex"/>
</node>
<node CREATED="1785374299082" ID="ID_1622886203" MODIFIED="1785374301662" TEXT="Beispiel Mutex">
<node CREATED="1785374302443" ID="ID_1801864697" MODIFIED="1785374308669" TEXT="ist ebenfalls durch ein Futex implementiert"/>
<node CREATED="1785374309201" ID="ID_1911827110" MODIFIED="1785374327674" TEXT="aber eine &#xbb;protected section&#xab; wird normalerweise contended"/>
<node CREATED="1785374328270" ID="ID_1014218563" MODIFIED="1785374340120" TEXT="und daher sieht man die Kosten f&#xfc;r das Warten / Aufwecken"/>
</node>
</node>
<node CREATED="1785374346803" ID="ID_920472395" MODIFIED="1785374449100" TEXT="und das Regime">
<arrowlink COLOR="#59757b" DESTINATION="ID_1700979751" ENDARROW="Default" ENDINCLINATION="-189;281;" ID="Arrow_ID_1440622046" STARTARROW="None" STARTINCLINATION="-155;25;"/>
<node CREATED="1785374352413" ID="ID_911760365" MODIFIED="1785374420663" TEXT="Regime-A : hot inner loop"/>
<node CREATED="1785374369293" ID="ID_1318591290" MODIFIED="1785374408490" TEXT="Regime-B : generisch aktiv und meist hei&#xdf;"/>
<node CREATED="1785374380979" ID="ID_512559122" MODIFIED="1785374393801" TEXT="Regime-C : Thread war schlafen"/>
</node>
</node>
</node>
</node>
<node CREATED="1784562287819" ID="ID_1068288733" MODIFIED="1785378606550" TEXT="Kontext-Switches"/>
<node CREATED="1784562292542" ID="ID_1603052289" MODIFIED="1785373446866" TEXT="Kernel-Calls">
<node CREATED="1785376102079" ID="ID_1536989433" MODIFIED="1785376127245" TEXT="kosten einen Aufwand im 3-stelligen ns-Bereich"/>
<node CREATED="1785376129817" ID="ID_1511137632" MODIFIED="1785376141879" TEXT="eine komplexe Sequenz">
<node CREATED="1785376143534" ID="ID_152207069" MODIFIED="1785376148074" TEXT="Einsprung &#xfc;ber eine Library"/>
<node CREATED="1785376148758" ID="ID_295125768" MODIFIED="1785376156969" TEXT="Ausl&#xf6;sen einer Trap">
<node CREATED="1785376177775" ID="ID_930548024" MODIFIED="1785376186620" TEXT="eine spezielle Assembly-Instruktion">
<node CREATED="1785376187454" ID="ID_164263068" MODIFIED="1785376195279" TEXT="x86 : syscall"/>
</node>
<node CREATED="1785376208543" ID="ID_1847650103" MODIFIED="1785376220339" TEXT="daraufhin wird instruction-pointer und einige Register gesichert"/>
<node CREATED="1785376241235" ID="ID_725013930" MODIFIED="1785376256368" TEXT="danach wird in h&#xf6;her priorisierten Modus geschaltet"/>
<node CREATED="1785376262807" ID="ID_1950591472" MODIFIED="1785376276097" TEXT="und an eine einzige vorkonfigurierte Addresse gesprungen">
<node CREATED="1785376292363" ID="ID_1115226790" MODIFIED="1785376299850" TEXT="diese wird beim Boot in ein Register gelegt"/>
<node CREATED="1785376300386" ID="ID_366808888" MODIFIED="1785376310031" TEXT="und kann vom userspace nicht manipuliert werden"/>
<node CREATED="1785376310664" ID="ID_1139400273" MODIFIED="1785376386487" TEXT="das stellt die Integrit&#xe4;t des Kernels sicher">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
man kann nur aufrufen, was der Kernel an Einsprungspunkten bietet; eigentlicher Kernel-Code ist nicht vom Userpace zug&#228;nglich
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1785376387374" ID="ID_10839834" MODIFIED="1785376421394" TEXT="im Kernel dann gibt es einen entry-Stup (sichert weiteren Prozessor-State)"/>
<node CREATED="1785376444393" ID="ID_1935728415" MODIFIED="1785376496241" TEXT="Page-Table swap / hier passieren Meltdown-Mititgations">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...um Ausspionieren des Kernel via speculative execution zu verhindern
</p>
</body>
</html></richcontent>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1785377263697" ID="ID_1250788650" MODIFIED="1785377268936" TEXT="Stichwort: KPTI page-table swap">
<icon BUILTIN="help"/>
</node>
</node>
<node CREATED="1785376498647" ID="ID_1822205437" MODIFIED="1785376509044" TEXT="danach noch Aktivit&#xe4;ten um Daten sichtbar zu machen"/>
</node>
<node CREATED="1785376518059" ID="ID_1257914148" MODIFIED="1785376526031" TEXT="Nebeneffekte: Cache">
<node CREATED="1785376527107" ID="ID_1748163345" MODIFIED="1785376537650" TEXT="der TLB wird geflushed"/>
<node CREATED="1785376539111" ID="ID_543560260" MODIFIED="1785376559166" TEXT="der Kernel-Pfad hat Cache-Lines belegt (die jetzt stale sind)"/>
<node CREATED="1785376566422" ID="ID_136776264" MODIFIED="1785376574840" TEXT="das verringert den nutzbaren Cache"/>
</node>
<node CREATED="1785376585693" ID="ID_1949566985" MODIFIED="1785376603757" TEXT="io_uring vermeidet diese Kosten (fast)">
<node CREATED="1785376605217" ID="ID_1055827511" MODIFIED="1785376611073" TEXT="mit SQPOLL sogar ganz"/>
<node CREATED="1785376611567" ID="ID_53028222" MODIFIED="1785376621074" TEXT="sonst: ein syscall pro batch"/>
</node>
</node>
<node CREATED="1785378610026" ID="ID_305120612" MODIFIED="1785378619580" TEXT="memory mapping / Buffer handover">
<node CREATED="1785378623250" ID="ID_523538154" MODIFIED="1785379303000" TEXT="die Virtual Memory Architecture (VMA) erm&#xf6;glicht zero-copy data access"/>
<node CREATED="1785379254871" ID="ID_519865367" MODIFIED="1785379261305" TEXT="DMA schreibt in einen Speicherblock"/>
<node CREATED="1785379280369" ID="ID_12699703" MODIFIED="1785379313432" TEXT="VMA kann das mappen in...">
<node CREATED="1785379314109" ID="ID_1246590305" MODIFIED="1785379322334" TEXT="den Kernel-Page-Cache"/>
<node CREATED="1785379323178" ID="ID_1435039698" MODIFIED="1785379332276" TEXT="in eine mem-mapped area im userspace"/>
</node>
<node CREATED="1785379355285" ID="ID_903959948" MODIFIED="1785379371231" TEXT="memory mapping geht typischwereise via trap/page fault">
<node CREATED="1785379376779" ID="ID_1210575438" MODIFIED="1785379387038" TEXT="erst bei Zugriff passiert eine Trap"/>
<node CREATED="1785379387490" ID="ID_1395999338" MODIFIED="1785379393300" TEXT="Aufwand &#xe4;hnlich wie ein Kernel-call"/>
<node CREATED="1785379395416" ID="ID_1593183459" MODIFIED="1785379411081" TEXT="dann wird gepr&#xfc;ft: sind die Daten bereits im Kernel-Page-Cache">
<node CREATED="1785379411798" ID="ID_758477303" MODIFIED="1785379418186" TEXT="ja: einfach das Mapping eintragen"/>
<node CREATED="1785379418573" ID="ID_821579792" MODIFIED="1785379427772" TEXT="nein: das IO auf den Weg bringen"/>
</node>
</node>
<node CREATED="1785379448249" ID="ID_391864672" MODIFIED="1785379459343" TEXT="ABER: Koh&#xe4;renz / Alignment sind das Problem">
<node CREATED="1785379460211" ID="ID_1126553137" MODIFIED="1785379475287" TEXT="normales read() kann an beliebigen Offset lesen"/>
<node CREATED="1785379477453" ID="ID_1182558436" MODIFIED="1785379498703" TEXT="sowas mu&#xdf; zwingend mit einer weiteren Kopie im Kernel realisiert werden"/>
<node CREATED="1785379507593" ID="ID_1859490386" MODIFIED="1785379522058" TEXT="nur wenn man O_DIRECT verwendet, kommt man ohne Kopie aus"/>
</node>
<node CREATED="1785379524914" ID="ID_668241807" MODIFIED="1785379537889" TEXT="Ausblick / Weiterung : zero-copy pipeline">
<node CREATED="1785379538807" ID="ID_1141220584" MODIFIED="1785379544840" TEXT="w&#xe4;re theoretisch m&#xf6;glich"/>
<node CREATED="1785379545284" ID="ID_976464777" MODIFIED="1785379554159" TEXT="wird derzeit im Kernel-Umfeld diskutiert"/>
<node CREATED="1785379554714" ID="ID_1096717282" MODIFIED="1785379577923" TEXT="also Kernel, DMA, Userland und GPU verwenden den gleichen Page-frame">
<node CREATED="1785379707206" ID="ID_657041630" MODIFIED="1785379708586" TEXT="EGL_EXT_image_dma_buf_import"/>
</node>
<node CREATED="1785379579783" ID="ID_98992954" MODIFIED="1785379593121" TEXT="es gibt diverse Constraints zu beachten">
<node CREATED="1785379593918" ID="ID_1333013861" MODIFIED="1785379636649" TEXT="vor allem : VRAM &#x2259; RAM"/>
<node CREATED="1785379637415" ID="ID_1927386268" MODIFIED="1785379647023" TEXT="das w&#xfc;rde also nur bei integrierter Grafik funktionieren"/>
</node>
<node CREATED="1785379657266" ID="ID_1701186306" MODIFIED="1785379678483" TEXT="ebenfalls (noch) nicht gekl&#xe4;rt: funktioniert es mit konkreten GPUs und IO-Controllern"/>
</node>
</node>
</node>
<node CREATED="1785460636982" ID="ID_1471899646" MODIFIED="1785460646186" TEXT="Historie und Kernel-Architektur">
<node CREATED="1785460654246" ID="ID_1541397265" MODIFIED="1785460672884" TEXT="Linux beruht immer noch im Kern auf einem synchronen Modell"/>
<node CREATED="1785460673714" ID="ID_1722879183" MODIFIED="1785460694557" TEXT="Windows(NT) und BSD haben schon l&#xe4;nger eine essentiell asynchrone Struktur"/>
<node CREATED="1785460704814" ID="ID_431321839" MODIFIED="1785460714572" TEXT="warum hat Linux so lange gebraucht?">
<node CREATED="1785460715693" ID="ID_1245470107" MODIFIED="1785460751768" TEXT="man hat nicht &#xbb;geschlafen&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
man hat die Herausforderung durch die SSDs zeitnah erkannt und mit tiefgreifenden internen Umbauten begonnen
</p>
</body>
2026-08-02 23:38:55 +02:00
</html></richcontent>
</node>
<node CREATED="1785460755305" ID="ID_1752698985" MODIFIED="1785460765988" TEXT="aber man hat mehrfach einen Ansatz versucht, der gescheitert ist">
<node CREATED="1785460770789" ID="ID_971932172" MODIFIED="1785460801851" TEXT="man hat versucht, &#x201e;Syscalls asynchron zu machen&#x201c;"/>
<node CREATED="1785460833117" ID="ID_335280595" MODIFIED="1785460858629" TEXT="das scheitert daran, da&#xdf; man dann sukzessive viele Kernel-Strukturen aufdoppeln m&#xfc;&#xdf;te"/>
<node CREATED="1785460866904" ID="ID_1886883732" MODIFIED="1785460932865" TEXT="oder (wie bei libaio) da&#xdf; jedes einzelne Subsystem eine &quot;non-blocking&quot;-Variante bieten m&#xfc;&#xdf;te">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...was nicht realisierbar ist, und deshalb ist der Ansatz von libaio stecken geblieben und bleibt auf einige Randf&#228;lle begrenzt (und noch schlimmer, kann jederzeit auf blocking waits zur&#252;ckfallen)
</p>
</body>
2026-08-02 23:38:55 +02:00
</html></richcontent>
</node>
<node CREATED="1785460802793" ID="ID_1282819861" MODIFIED="1785460820914" TEXT="IO_Uring dagegen umgeht das Thema &#xbb;Syscalls&#xab;"/>
</node>
<node CREATED="1785460957172" ID="ID_1847144170" MODIFIED="1785460964913" TEXT="aber: die Unix-Kultur war schon ein Problem">
<node CREATED="1785460973671" ID="ID_334979690" MODIFIED="1785460990352" TEXT="das hat sich erst ge&#xe4;ndert, als das Problem brennend wurde"/>
<node CREATED="1785460990807" ID="ID_1675938710" MODIFIED="1785461010393" TEXT="d.h. als SSDs daf&#xfc;r gesorgt haben, da&#xdf; Linux zum Bottleneck wird"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785461018940" ID="ID_1539303083" MODIFIED="1785461038542" STYLE="fork" TEXT="Claude f&#xfc;hrt BSD* als einen interessanten Zwischenfall auf">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1785461042173" ID="ID_667957116" MODIFIED="1785461061694" TEXT="BSD hat seit 2000 ein asynchrones Notifikations-System (kqueue)"/>
<node CREATED="1785461064042" ID="ID_1779599299" MODIFIED="1785461071883" TEXT="deshalb kann es echtes AIO bieten"/>
<node CREATED="1785461073404" ID="ID_877504311" MODIFIED="1785461093981" TEXT="das ist und bleibt aber fragmentiert (&#x27f6; die ganze Unix-Legacy)"/>
<node CREATED="1785461094856" ID="ID_521796255" MODIFIED="1785461114055" TEXT="deshalb hatte BSD bisher noch keine brennende Notwendigkeit, etwas zu tun"/>
<node CREATED="1785461139724" ID="ID_997488870" MODIFIED="1785461163800">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
FreeBSD: <b>linuxulator</b>&#160;wird erzwingen, da&#223; man io_uring einfach nachbaut
</p>
</body>
2026-08-02 23:38:55 +02:00
</html></richcontent>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1785461164784" ID="ID_292095460" MODIFIED="1785461169884" TEXT="TODO: linuxlator">
<icon BUILTIN="help"/>
</node>
</node>
</node>
</node>
<node CREATED="1785461190277" ID="ID_1761641831" MODIFIED="1785883741927" TEXT="das Sicherheits-Problem">
<linktarget COLOR="#fd43b9" DESTINATION="ID_1761641831" ENDARROW="Default" ENDINCLINATION="-889;102;" ID="Arrow_ID_733801359" SOURCE="ID_1939965989" STARTARROW="None" STARTINCLINATION="-710;35;"/>
<node CREATED="1785461196832" ID="ID_1824131652" MODIFIED="1785461203022" TEXT="hat zwei Aspekte">
<node CREATED="1785461203739" ID="ID_1580053924" MODIFIED="1785461216640" TEXT="es ist ein neues sehr komplexes und zustandsbehaftetes System">
<node CREATED="1785461315436" ID="ID_1482123737" MODIFIED="1785461334765" TEXT="das ist eine Fundgrube f&#xfc;r double-free und use-after-free"/>
<node CREATED="1785461335273" ID="ID_798212307" MODIFIED="1785461354799" TEXT="viele Attacken gehen diesen Weg"/>
<node CREATED="1785461355415" ID="ID_44782768" MODIFIED="1785461363465" TEXT="insofern ein Problem fehlender Reife"/>
</node>
<node CREATED="1785461219863" ID="ID_537546788" MODIFIED="1785461231348" TEXT="der Paradigmenwechsel: es verwendet keinen Syscall">
<node CREATED="1785461254333" ID="ID_334883335" MODIFIED="1785461261299">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Stichwort: <b>seccomp</b>
</p>
</body>
2026-08-02 23:38:55 +02:00
</html></richcontent>
</node>
<node CREATED="1785461262768" ID="ID_1205947275" MODIFIED="1785461273541" TEXT="beruht auf &#xdc;berwachen / filtern gef&#xe4;hrlicher syscalls"/>
<node CREATED="1785461304909" ID="ID_1670791378" MODIFIED="1785461307313" TEXT="&quot;we can&apos;t filter out syscalls we never make.&quot;"/>
</node>
</node>
<node CREATED="1785461370936" ID="ID_1804212027" MODIFIED="1785461389925" TEXT="was machen die Cloud-Provider?">
<node CREATED="1785461391129" ID="ID_1602564687" MODIFIED="1785461409560" TEXT="Google deaktiviert es f&#xfc;r seinen eigenen Code">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
u.a. auf Android
</p>
</body>
2026-08-02 23:38:55 +02:00
</html></richcontent>
</node>
<node CREATED="1785461411934" ID="ID_1121458948" MODIFIED="1785466338044" TEXT="Docker deaktiviert es im Default seccomp profile"/>
<node CREATED="1785461426652" ID="ID_66609589" MODIFIED="1785461439375" TEXT="ABER: kein Cloud-Provider deaktiviert es pauschal / per se"/>
</node>
<node CREATED="1785466394820" ID="ID_836481520" MODIFIED="1785883797488" TEXT="aktueller Stand (2026)">
<arrowlink COLOR="#f4f1b2" DESTINATION="ID_1807082301" ENDARROW="Default" ENDINCLINATION="-429;-32;" ID="Arrow_ID_1681597248" STARTARROW="None" STARTINCLINATION="-102;204;"/>
<node CREATED="1785466404044" ID="ID_562222456" MODIFIED="1785466426860" TEXT="der Hauptautor (Axboe) entwickelt ein neues Sicherheitsframework"/>
<node CREATED="1785466427380" ID="ID_841041241" MODIFIED="1785466459628" TEXT="es beruht auf classic BPF (nicht eBPF)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Grund ist: eBPF erfordert h&#246;here Privilegien
</p>
</body>
2026-08-02 23:38:55 +02:00
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785466487794" ID="ID_13728980" MODIFIED="1785466521731" STYLE="fork" TEXT="Claude findet das bemerkenswert">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<h3 http-equiv="content-type" content="text/html; charset=utf-8" dir="ltr" class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">
Where it stands now &#8212; and a lovely structural irony
</h3>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">
As of January 2026, Axboe is actively fixing this: a rapidly evolving patch series adds a restriction mechanism to io_uring itself, since io_uring's operations are analogous to system calls and one might well want to restrict them the same way. Notably, it uses classic BPF rather than eBPF &#8212; because cBPF can be used by unprivileged processes while eBPF requires CAP_BPF, and unprivileged accessibility matters for the container-sandboxing use case; Axboe acknowledged this costs usability, since filters must now be written in cBPF bytecode.
</p>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">
And here's the irony I'd actually enjoy putting in front of an audience: <strong>io_uring is now reinventing seccomp inside itself.</strong>&#160;That rhymes precisely with why fibrils were rejected in 2007 &#8212; Moln&#225;r's objection that a parallel simplified scheduler would inevitably grow into a copy of the real scheduler. Same law, different subsystem: <strong>create a parallel mechanism, and you eventually have to regrow every feature the original had.</strong>&#160; io_uring escaped the syscall interface and is now rebuilding the syscall interface's security machinery from scratch. That's a genuinely good closing thought for a talk about paradigm shifts.
</p>
</body>
2026-08-02 23:38:55 +02:00
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
</node>
</node>
<node CREATED="1785804402157" ID="ID_1203491113" MODIFIED="1785804415528" TEXT="Design-Philosophien">
<node CREATED="1785804416696" ID="ID_520132718" MODIFIED="1785804431381" TEXT="warum ist Linux &#xbb;im Kern synchron&#xab;?">
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785804452783" ID="ID_1420036923" MODIFIED="1785804939680" STYLE="fork" TEXT="Ans&#xe4;tze">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1785804462733" ID="ID_1457799258" MODIFIED="1785804939678" TEXT="weil es von Unix abstammt">
<node CREATED="1785804482173" ID="ID_1948549857" MODIFIED="1785804939678" TEXT="blocking-IO macht Pipelines m&#xf6;glich"/>
<node CREATED="1785804501768" ID="ID_1281083182" MODIFIED="1785804939678" TEXT="daher ist es tats&#xe4;chlich eine concurrency-L&#xf6;sung"/>
<node CREATED="1785804513028" ID="ID_810564608" MODIFIED="1785804939678" TEXT="fr&#xfc;her war IO inh&#xe4;rent &quot;sequentiell&quot; (und laaaaangsam)"/>
<node CREATED="1785804579094" ID="ID_169491261" MODIFIED="1785804939678" TEXT="klar strukturierte Prozesse &#x2014; concurrency macht der Kernel"/>
</node>
<node CREATED="1785804617057" ID="ID_1017583320" MODIFIED="1785804939678" TEXT="die MIT vs. Berkely (oder &quot;New Yersey&quot;) - Spaltung">
<node CREATED="1785804660938" ID="ID_1005661547" MODIFIED="1785804939678" TEXT="&quot;Worse is Better&quot;"/>
<node CREATED="1785804666379" ID="ID_1582632" MODIFIED="1785804939678" TEXT="Unix ist klein und leicht zu portieren"/>
<node CREATED="1785804699380" ID="ID_1566178029" MODIFIED="1785804939678" TEXT="Komplexit&#xe4;t wird zum User verschoben"/>
</node>
<node CREATED="1785804734992" ID="ID_689668422" MODIFIED="1785804939678" TEXT="direct style vs. continuation-passing">
<node CREATED="1785804754814" ID="ID_1857083368" MODIFIED="1785804939678" TEXT="letzteres erfoldert ein Framework oder Sprachunterst&#xfc;tzung"/>
<node CREATED="1785804771030" ID="ID_942195693" MODIFIED="1785804939678" TEXT="diekt-Style kann man leicht in C schreiben"/>
</node>
<node CREATED="1785804791625" ID="ID_1260040279" MODIFIED="1785804939678" TEXT="historische Wurzeln">
<node CREATED="1785804799556" ID="ID_1705484855" MODIFIED="1785804939678" TEXT="Gro&#xdf;rechner">
<node CREATED="1785804803735" ID="ID_1712110487" MODIFIED="1785804939678" TEXT="hatten schon in den 60ern echtes Async-processing">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Stichwort: Channel Programs
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1785804820899" ID="ID_1792223474" MODIFIED="1785804939678" TEXT="damals war die Core extrem teuer, und die Peripherie billig"/>
</node>
<node CREATED="1785804856072" ID="ID_1948328630" MODIFIED="1785804939678" TEXT="Minicomputers">
<node CREATED="1785804891691" ID="ID_570139726" MODIFIED="1785804939678" TEXT="DEC und VMS"/>
<node CREATED="1785804904554" ID="ID_565305668" MODIFIED="1785804939678" TEXT="AST: Asynchronous System Traps">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
a completion routine the system delivers by interrupting your thread. Results land in an I/O Status Block; you synchronize with event flags. Submit, continue, get called back.
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1785805001938" ID="ID_1225715009" MODIFIED="1785805004288" TEXT="Dave Cutler">
<node CREATED="1785805005222" ID="ID_1389176244" MODIFIED="1785805009419" TEXT="hat f&#xfc;r VMS gearbeitet"/>
<node CREATED="1785805009875" ID="ID_1379143061" MODIFIED="1785805024309" TEXT="dann zu Microsoft &#x27f6; dort NT entwickelt"/>
<node CREATED="1785805224198" ID="ID_1190503655" MODIFIED="1785805266125" TEXT="NT hatte ein POSIX-Subsystem, nur f&#xfc;r FIPX-151-compliance">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1190503655" ENDARROW="Default" ENDINCLINATION="89;4;" ID="Arrow_ID_1739832767" SOURCE="ID_1416441454" STARTARROW="None" STARTINCLINATION="72;-2;"/>
<node CREATED="1785805270424" ID="ID_1212846076" MODIFIED="1785805325165" TEXT="das war hier ein &quot;Randfall&quot; &#x2014; und in der Praxis irrelevant">
<arrowlink DESTINATION="ID_1748959283" ENDARROW="Default" ENDINCLINATION="212;10;" ID="Arrow_ID_1416167543" STARTARROW="None" STARTINCLINATION="40;148;"/>
</node>
</node>
</node>
<node CREATED="1785805084727" ID="ID_1061852207" MODIFIED="1785805087933" TEXT="POSIX">
<node CREATED="1785805088928" ID="ID_107490748" MODIFIED="1785805102753" TEXT="war lediglich eine Konsolidierung der damaligen Unix-Landschaft"/>
<node CREATED="1785805103406" ID="ID_237364056" MODIFIED="1785805119376" TEXT="hat den Ansatz der inter-process-Concurrency festgeschrieben"/>
<node CREATED="1785805187779" ID="ID_1416441454" MODIFIED="1785805266125" TEXT="US &quot;FIPS 151&quot; : verlangt POSIX-compliance f&#xfc;r Government-Procurment">
<arrowlink DESTINATION="ID_1190503655" ENDARROW="Default" ENDINCLINATION="89;4;" ID="Arrow_ID_1739832767" STARTARROW="None" STARTINCLINATION="72;-2;"/>
</node>
<node CREATED="1785805120184" ID="ID_1504987026" MODIFIED="1785805141196" TEXT="Linux war POSIX-compiliant und konnte damit gar nicht anders sein"/>
<node CREATED="1785805149384" ID="ID_1748959283" MODIFIED="1785805325166" TEXT="POSIX ASIO ist als Reandfall gedacht, f&#xfc;r &quot;real-time systems&quot;">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1748959283" ENDARROW="Default" ENDINCLINATION="212;10;" ID="Arrow_ID_1416167543" SOURCE="ID_1212846076" STARTARROW="None" STARTINCLINATION="40;148;"/>
</node>
</node>
</node>
</node>
<node CREATED="1785805358964" ID="ID_1303284509" MODIFIED="1785805366918" TEXT="MIT vs. Berkely">
<node CREATED="1785805368992" ID="ID_1532683119" MODIFIED="1785805387092" TEXT="Async-IO ist vor allem ein Interface &#x2014; MIT-Style">
<node CREATED="1785805389503" ID="ID_1066936890" MODIFIED="1785805399454" TEXT="also eine vereinfachende Abstraktion"/>
<node CREATED="1785805400390" ID="ID_1446974737" MODIFIED="1785805414664" TEXT="bietet einen einheitlichen Kontrakt mit Korrektheits-Garantie"/>
</node>
<node CREATED="1785805417964" ID="ID_1034172535" MODIFIED="1785805436167" TEXT="demgegen&#xfc;ber k&#xf6;nnte man blocking-IO als &#xbb;Berkely-style&#xab; bezeichnen">
<node CREATED="1785805436996" ID="ID_592860998" MODIFIED="1785805441828" TEXT="einfach zu iimplementieren"/>
<node CREATED="1785805442576" ID="ID_103267801" MODIFIED="1785805450215" TEXT="Komplexit&#xe4;ten wandern zum User"/>
</node>
<node CREATED="1785805476292" ID="ID_763961218" MODIFIED="1785805493653" TEXT="inzwischen gibt es einen Mittelweg: abstracted continuations">
<node CREATED="1785805498849" ID="ID_1654664703" MODIFIED="1785805536048" TEXT="Erlang, Aktoren, Goroutines, Coroutinen"/>
<node CREATED="1785805586557" ID="ID_945535370" MODIFIED="1785805615976" TEXT="&#xbb;function coloration&#xab; leicht gemacht">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
d.h. das Problem mit den <i>coloured functions</i>&#160;wird nicht gel&#246;st, aber der Schmerz wird reduziert
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node CREATED="1785805707014" ID="ID_1430769471" MODIFIED="1785885271445" TEXT="Channel Progams &#x27f6; IO-Logik">
<linktarget COLOR="#fef6be" DESTINATION="ID_1430769471" ENDARROW="Default" ENDINCLINATION="-773;77;" ID="Arrow_ID_1412764443" SOURCE="ID_1541401046" STARTARROW="None" STARTINCLINATION="-1223;237;"/>
<node CREATED="1785805739128" ID="ID_307384766" MODIFIED="1785805756035" TEXT="auf dem Mainframe laufen die Channel-Programs separat vom Kern"/>
<node CREATED="1785805760204" ID="ID_166287783" MODIFIED="1785805767042" TEXT="io_uring und BPF">
<node BACKGROUND_COLOR="#f2e1ba" COLOR="#2f2577" CREATED="1785805768996" ID="ID_1807082301" MODIFIED="1785805768996" TEXT="das sind Neuerungen in 2026">
<linktarget COLOR="#f4f1b2" DESTINATION="ID_1807082301" ENDARROW="Default" ENDINCLINATION="-429;-32;" ID="Arrow_ID_1681597248" SOURCE="ID_836481520" STARTARROW="None" STARTINCLINATION="-102;204;"/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1785805808990" ID="ID_1350573167" MODIFIED="1785805815881" TEXT="zwei verschiedene Entwicklungen">
<node CREATED="1785805817007" ID="ID_418215666" MODIFIED="1785805860708" TEXT="cBPF f&#xfc;r Sicherheits-Filtering"/>
<node CREATED="1785805827846" ID="ID_506178696" LINK="https://lkml.rescloud.iu.edu/2106.0/05620.html" MODIFIED="1785806029205" TEXT="eBPF for event-loop control">
<node CREATED="1785806034520" ID="ID_675648051" MODIFIED="1785806047826" TEXT="vermeidet den Kontext-Switch f&#xfc;r continuation-chaining"/>
<node CREATED="1785806048491" ID="ID_24264743" MODIFIED="1785806066487" TEXT="das eBPF-Programm kann unimittelbar weiteres IO beauftragen"/>
<node CREATED="1785806067739" ID="ID_867470885" MODIFIED="1785806079174" TEXT="allerdings: das l&#xe4;uft alles im Kernel (nicht auf einem externen Device)"/>
</node>
</node>
</node>
</node>
<node CREATED="1785806134178" ID="ID_196718915" MODIFIED="1785806167810" TEXT="&#xbb;Worse is Better&#xab;">
<node CREATED="1785806143377" ID="ID_769817813" LINK="https://en.wikipedia.org/wiki/Worse_is_better" MODIFIED="1785806156651" TEXT="Wikipedia"/>
<node CREATED="1785806196578" ID="ID_106898826" LINK="https://yosefk.com/blog/what-worse-is-better-vs-the-right-thing-is-really-about.html" MODIFIED="1785806220192" TEXT="Blog: What &quot;Worse is Better vs The Right Thing&quot; is really about">
<node CREATED="1785806227700" ID="ID_646833802" MODIFIED="1785806241320" TEXT="argumentiert da&#xdf; es um &#xbb;evolution&#xe4;ren Erfolg&#xab; geht"/>
<node CREATED="1785806242287" ID="ID_1662494576" MODIFIED="1785806257395" TEXT="nicht um besser/schlechter/richtig/falsch"/>
</node>
<node CREATED="1785806885989" ID="ID_1342407665" MODIFIED="1785806905620" TEXT="Richard Gabriel hat mit sich selber eine &#xbb;Debatte&#xab; gef&#xfc;hrt">
<node CREATED="1785806906727" ID="ID_290906212" MODIFIED="1785806928635" TEXT="sein erster Artikel was als satirische &#xdc;berzeichnung gedacht"/>
<node CREATED="1785806929283" ID="ID_1833959351" MODIFIED="1785807147619">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
nachdem der Artikel so stark eingeschlagen hat,
</p>
<p>
hat er selber, unter einem Pseudonym, eine Replik geschrieben
</p>
</body>
</html></richcontent>
<node CREATED="1785807193346" ID="ID_977154454" LINK="http://dreamsongs.com/Files/worse-is-worse.pdf" MODIFIED="1785807201901" TEXT="&quot;Worse is Better is Worse&quot;"/>
</node>
<node CREATED="1785807148579" ID="ID_1979393125" LINK="https://dreamsongs.com/Essays.html" MODIFIED="1785807160610" TEXT="Essays von Richard Gabriel">
<icon BUILTIN="back"/>
<node CREATED="1785807208321" ID="ID_1501711769" MODIFIED="1785807219621" TEXT="beachte: Auseinandersetzung mit Christopher Alexander">
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1519001955679" ID="ID_65625223" MODIFIED="1779386731937" TEXT="Demo-Inhalte">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#c6c6d1" COLOR="#435e98" CREATED="1779504843301" FOLDED="true" ID="ID_1215238444" MODIFIED="1784562244830" TEXT="Idee">
<icon BUILTIN="idea"/>
<node CREATED="1779504852591" ID="ID_628756969" MODIFIED="1783787704354" TEXT="ein Raw-Video-File framewise einlesen">
<linktarget COLOR="#5a07d6" DESTINATION="ID_628756969" ENDARROW="Default" ENDINCLINATION="686;-59;" ID="Arrow_ID_347382746" SOURCE="ID_649621958" STARTARROW="None" STARTINCLINATION="347;-14;"/>
2026-07-10 02:57:34 +02:00
<node CREATED="1783641376247" HGAP="32" ID="ID_1978377711" MODIFIED="1783641391758" TEXT="ist einfach" VSHIFT="3"/>
</node>
<node CREATED="1779504863066" ID="ID_986008832" MODIFIED="1779504921775" TEXT="jeden Frame in den Output-Code aus dem Video-output-Vortrag schicken"/>
<node COLOR="#435e98" CREATED="1783642371760" ID="ID_622863035" MODIFIED="1784562217268" TEXT="Konstruktions-Schema">
<icon BUILTIN="idea"/>
<node CREATED="1783642378650" ID="ID_460419" MODIFIED="1784222786307" TEXT="naheliegend: einen Proactor zeigen">
2026-07-10 02:57:34 +02:00
<node CREATED="1783642938966" ID="ID_1117409154" MODIFIED="1783642955536" TEXT="m&#xe4;&#xdf;ig sinnvoll"/>
<node CREATED="1783642956739" ID="ID_141690825" MODIFIED="1783642968326" TEXT="hier nur ein Consumer"/>
<node CREATED="1784222792149" ID="ID_1259331721" MODIFIED="1784222808639" TEXT="ist aber die Standard-L&#xf6;sung (push)"/>
2026-07-10 02:57:34 +02:00
</node>
<node COLOR="#5b280f" CREATED="1783642985618" FOLDED="true" ID="ID_169416260" MODIFIED="1784052474215" TEXT="oder einen pull-Worker">
<icon BUILTIN="button_cancel"/>
2026-07-10 02:57:34 +02:00
<node CREATED="1783642995707" ID="ID_216666777" MODIFIED="1783642999794" TEXT="das w&#xe4;re n&#xe4;her an Lumiera"/>
<node CREATED="1783643000727" ID="ID_737342556" MODIFIED="1783643655114" TEXT="der w&#xfc;rde jeweils nur die Queue ausr&#xe4;umen"/>
<node CREATED="1783643039177" ID="ID_1046849410" MODIFIED="1783643729328" TEXT="und eine Flag am Buffer setzen">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
...also eine kleine State-machine implementieren: Completion-Entries entgegennehmen, schauen ob komplett und partiell, partielle nochmal auf den Weg schicken, Komplette am Buffer markieren. Danach w&#252;rde die Render-Aktion laufen, und lediglich schauen, ob die Daten in &#187;ihrem&#171; Buffer schon da sind. Alles per Modulus gesteuert.
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
<node CREATED="1783643047694" ID="ID_887714759" MODIFIED="1783643329861" TEXT="verwende einen Buffer-Ring">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
der sollte dann die gleiche Gr&#246;&#223;e haben wie der Kernel-Ringbuffer; man w&#252;rde damit einen Task sofort in den passenden Buffer-Slot schicken
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783643760643" ID="ID_697288367" MODIFIED="1783644233208" TEXT="braucht Flow-Steuerung">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
Damit das funktioniert, mu&#223; sich das System selbst beobachten: einen EMA f&#252;r den IO-Vorlauf; entsprechend viele Zyklen vorher eine neue IO-Aktion auf den Weg schicken.
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
</node>
<node CREATED="1784052477036" ID="ID_1273958721" MODIFIED="1784052501398" TEXT="nach Diskussion mit Claude: Proactor ist didaktisch vorzuziehen">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#fbfdca" CREATED="1784052519992" ID="ID_1545269972" MODIFIED="1784052885403" TEXT="man kann auch die Timings dar&#xfc;ber steuern">
<arrowlink COLOR="#f4f3a4" DESTINATION="ID_1489274093" ENDARROW="Default" ENDINCLINATION="638;-170;" ID="Arrow_ID_396926940" STARTARROW="None" STARTINCLINATION="1155;67;"/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1784052896300" ID="ID_746832214" MODIFIED="1784052909501" TEXT="kann auf die Weise alle zentralen Konzepte in einem St&#xfc;ck Code zeigen"/>
</node>
2026-07-10 02:57:34 +02:00
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1783644313430" ID="ID_170028474" MODIFIED="1784562263358" TEXT="Demo-Prototyp entwickeln">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1783644336145" FOLDED="true" ID="ID_413309976" MODIFIED="1784562206196" TEXT="Skelett">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1783788677873" ID="ID_551733396" LINK="#ID_517750346" MODIFIED="1783788805152" TEXT="Lizenz: GPL v2+"/>
<node COLOR="#338800" CREATED="1783644339455" ID="ID_932453573" MODIFIED="1783788820590" TEXT="CMake">
<icon BUILTIN="button_ok"/>
<node CREATED="1783788564665" ID="ID_941883231" MODIFIED="1783788584317" TEXT="&#xfc;bernehme den Projektrahmen vom FrOSCon-Talk letztes Jahr (Video Output)"/>
<node CREATED="1783788586075" ID="ID_449956672" MODIFIED="1783788647212" TEXT="allerdings vereinfacht auf ein einziges Demo-Executable">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
letztes Jahr haben wir vier verschiedene Varianten gezeigt, die jeweils unterschiedliche Lib-Dependencies hatten. Deshalb war es ein Multimodule-Projekt. Das kann ich diesmal vereinfachen in ein einziges Projekt
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783788648324" ID="ID_1920636432" MODIFIED="1783788665326" TEXT="nehme sofort die Dependencies f&#xfc;r OpenGL / EGL mit dazu"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1783819908913" ID="ID_813164182" MODIFIED="1783820014700" TEXT="Liburing">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1783819936485" ID="ID_15961209" MODIFIED="1783819937734" TEXT="apt install liburing-dev"/>
<node CREATED="1783819973578" ID="ID_1822496144" MODIFIED="1783820003203" TEXT="Debian-Trixie: liburing2:amd64 2.9-1"/>
<node CREATED="1783819939590" ID="ID_251450941" MODIFIED="1783819959674" TEXT="liburing.pc"/>
</node>
<node COLOR="#338800" CREATED="1783788814487" ID="ID_1955496379" MODIFIED="1783788819238" TEXT="Hello-Uring l&#xe4;uft">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1783795438472" FOLDED="true" ID="ID_1695706583" MODIFIED="1783795624063" TEXT="(Eclipse-Setup)">
<icon BUILTIN="info"/>
<node CREATED="1783795458277" ID="ID_840412256" MODIFIED="1783795469953" TEXT="Projekt-Skelett anlegen"/>
<node CREATED="1783795470514" ID="ID_840042890" MODIFIED="1783795474897" TEXT="einmal mit CMake bauen"/>
<node CREATED="1783795475774" ID="ID_1250076625" MODIFIED="1783795489958" TEXT="als &quot;external builder Make&quot;-Projekt importieren"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783795490756" ID="ID_972729826" MODIFIED="1783795620602" TEXT="Vorsicht: brauche keinen C-Build">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Hatte immer die Fehlermeldung &quot;build misconfigured&quot; (o.&#228;). Hab lange rumgesucht, denn alle Settings waren effektiv gleich wie beim &#187;VideoOutput&#171;-Projekt. Bis ich dann im .project-File gesehen hab, da&#223; auch noch ein C-Builder konfiguriert worden war (m&#246;glichweise ein Toolchain-Default).
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#338800" CREATED="1783644343706" ID="ID_481307677" MODIFIED="1784052427730" TEXT="ein GTK-Rahmen (wie letztes Jahr)">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1783644357376" ID="ID_1687423764" MODIFIED="1784142889926" TEXT="ein Proactor-Thread">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1783644382004" ID="ID_222096554" MODIFIED="1784222739934" TEXT="Handler">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1783644394013" ID="ID_599467746" MODIFIED="1784222741419" TEXT="Completion-Handler">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1783644399671" ID="ID_1684157516" MODIFIED="1784222743125" TEXT="Submission-Handler">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1783644407569" ID="ID_69520880" MODIFIED="1784222744755" TEXT="Display-Handler">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1784222746115" ID="ID_1070022489" MODIFIED="1784222750547" TEXT="Shutdown-Handler">
<icon BUILTIN="button_ok"/>
2026-07-10 02:57:34 +02:00
</node>
</node>
</node>
<node COLOR="#234872" CREATED="1783900894906" ID="ID_1398236830" MODIFIED="1784222832373" TEXT="Design-Fragen">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783900916807" FOLDED="true" ID="ID_1965380217" LINK="https://claude.ai/share/2d09d5e6-1a47-45e9-b05b-500550fb0977" MODIFIED="1784562639905" STYLE="fork" TEXT="Design / Technologie-Dialog mit Claude">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1783900973837" ID="ID_271684795" MODIFIED="1783900988031" TEXT="Claude weist nach meiner Einf&#xfc;hrung sofort auf Knackpunkte hin">
<node CREATED="1783900994827" ID="ID_39866859" MODIFIED="1783901005106" TEXT="user-space buffer or preregistered buffers?"/>
<node CREATED="1783901008546" ID="ID_336576874" MODIFIED="1783901018571" TEXT="depth of pipeline: real pipelining?"/>
<node CREATED="1783901023762" ID="ID_561342572" MODIFIED="1783901034901" TEXT="waiting / timing strategy in the worker thread"/>
<node CREATED="1783901038197" ID="ID_8240786" MODIFIED="1783901059421" TEXT="File IO : use O_DIRECT or IORING_OP_READ"/>
<node CREATED="1783901079926" ID="ID_1856365027" MODIFIED="1783901085930" TEXT="Threading ownership model"/>
</node>
<node CREATED="1783901091272" ID="ID_504921767" MODIFIED="1783901102000" TEXT="ich kl&#xe4;re die (mir ist die Entscheidung schon klar)">
<node CREATED="1783901105001" ID="ID_406126832" MODIFIED="1783901129762" TEXT="den Talk so einfach wie m&#xf6;glich halten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
die Zuh&#246;rer sind keine Systemprogrammierer
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783901133887" ID="ID_1114781881" MODIFIED="1783901146536" TEXT="daher die einfachen userspace-Buffer und das normale read()"/>
<node CREATED="1783901151199" ID="ID_168398984" MODIFIED="1783901166527" TEXT="selbstverst&#xe4;ndlich will ich eine echte pipeline, d.h. mehrere Buffer">
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1783901170599" ID="ID_1292606828" MODIFIED="1783901198318" TEXT="timing/waiting sowie Ownership/Handover ist was ich in der Diskussion kl&#xe4;ren m&#xf6;chte">
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1783901673639" ID="ID_1158267991" MODIFIED="1783901688375" TEXT="ich frage nach Timing-Sync mit Video-Output">
<node CREATED="1783901711226" ID="ID_1930870094" MODIFIED="1783901723228" TEXT="Claude schl&#xe4;gt vor, &#xfc;berhaupt nicht zu &#xbb;synchronisieren&#xab;"/>
<node CREATED="1783901727663" ID="ID_1596599158" MODIFIED="1783901972168" TEXT="Argument: da gibts nichts zu synchronisieren, denn die Sync geht nicht auf">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Der Desktop l&#228;uft mit z.B. 60fps, das video mit 25fps. Man sollte akzeptieren (und im Talk klar machen) da&#223; das niemals aufgeht. Vielmehr sollte man regelm&#228;&#223;ig die fertig geladenen Frames &#252;bergeben, wenn sie eben da sind. F&#252;r den Talk schl&#228;gt Claude vor, das Thema &quot;tearing&quot; mehr oder weniger zu ignorieren (hatte ich nicht gesagt, sehe ich aber genauso). Sp&#228;ter, f&#252;r die Prod-Version sei das ein nicht-trivialer Aspekt
</p>
</body>
</html></richcontent>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783901847104" ID="ID_1936627376" MODIFIED="1783901856567" TEXT="Guter Punkt, da h&#xe4;tte ich mich m&#xf6;glicherweise verrant!">
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1783901974887" ID="ID_1974536015" MODIFIED="1783902062028" TEXT="Claude geht davon aus, da&#xdf; die OpenGL-Pipeline im GUI-Thread laufen sollte">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das sei zwar nicht notwendig (korrekt!), aber vermeide Komplexit&#228;ten. Ein OpenGL-Kontext ist an einen Thread gebunden, also m&#252;&#223;te man nach jedem Thread-Wechsel umbinden.
</p>
<p>
&#10233; sehr gut, damit hat sich eine Frage von selber gekl&#228;rt, die ich noch stellen wollte
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783902186522" ID="ID_80755144" MODIFIED="1783902207310" TEXT="wegen dem Timing weist Claude auf die M&#xf6;glichkeit hin, das &#xfc;ber io_uring selber zu machen">
<icon BUILTIN="back"/>
<node CREATED="1783902209900" ID="ID_168498311" MODIFIED="1783902217323" TEXT="wow ... das hatte ich gar nicht auf dem Schrim"/>
<node CREATED="1783902217878" ID="ID_118182743" MODIFIED="1783902223322" TEXT="das w&#xe4;re nat&#xfc;rlich super elegant"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1783902223899" ID="ID_1596372987" MODIFIED="1783902235325" TEXT="allerdings dann definitiv nicht was wir in Lumiera machen werden">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1783902236744" ID="ID_1546055488" MODIFIED="1783902253577">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
allerdings: der Worker w&#228;re damit ein <b>Proactor</b>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783902258661" ID="ID_67058752" MODIFIED="1783902369689" TEXT="wollte ich zwar erst nicht, k&#xf6;nnte mich aber mit dem Gedanken anfreunden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
....es w&#228;re n&#228;mlich tats&#228;chlich dann ganz ideomatisch (so hab ich die Doku verstanden, und Claude sagt das von sich aus auch).
</p>
<p>
Zwar hatte ich die Idee, im Talk schon grunds&#228;tzlich etwas zu machen, was funktioniert wie in Lumiera geplant. Aber wenn ich mir das <i>wirklich vom didaktischen Gesichtspunkt her nochmal &#252;berlege,</i>&#160;ist es nicht so geschickt.
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1783902501677" ID="ID_742016664" MODIFIED="1783902513392" TEXT="Claude fragt genauer nach der GTK-Integration">
<node CREATED="1783902514414" ID="ID_1855924638" MODIFIED="1783902527158" TEXT="ich gebe Kontext: &quot;Gtk the toolkit, not the framework&quot;"/>
<node CREATED="1783902529522" ID="ID_117691046" MODIFIED="1783902544351" TEXT="erkl&#xe4;re wie der Demo-Code vom letzten Jahr grunds&#xe4;tzlich funktioniert"/>
<node CREATED="1783902544813" ID="ID_265030509" MODIFIED="1783902552490" TEXT="Claude meint, das vereinfache das Design"/>
<node CREATED="1783902552987" ID="ID_1533807493" MODIFIED="1783902569992" TEXT="er schl&#xe4;gt vor: nur einen &#xbb;Tick&#xab; verwenden, und zwar io_uring"/>
<node CREATED="1783902573851" ID="ID_451286400" MODIFIED="1783902590704" TEXT="wenn ein Frame ready ist, sollte man lediglich dem GUI-Thread signalisieren"/>
<node CREATED="1783902591217" ID="ID_1763048000" MODIFIED="1783902681362" TEXT="er schl&#xe4;gt daf&#xfc;r g_idle_add() vor -- das sei low-level GLib und weithin etabliert">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...es w&#252;rde zur &quot;toolkit, nicht framework&quot;-Policy passen, und zudem w&#228;re das Signal explizit von jedem Thread aus triggerbar
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783902821732" ID="ID_1465201307" MODIFIED="1783902838122" TEXT="getriggert w&#xfc;rde dann der Code, der die OpenGL-Pipeline mit neuen Daten versorgt"/>
<node CREATED="1783902838536" ID="ID_1259653595" MODIFIED="1783902845946" TEXT="dieser w&#xfc;rde mithin im GTK-Thread laufen"/>
<node CREATED="1783902847135" ID="ID_1990712475" MODIFIED="1784140538042" TEXT="Hinweis auf die VSync-Problematik">
<arrowlink COLOR="#347acc" DESTINATION="ID_1393441883" ENDARROW="Default" ENDINCLINATION="288;0;" ID="Arrow_ID_707364611" STARTARROW="None" STARTINCLINATION="140;12;"/>
</node>
<node BACKGROUND_COLOR="#efdeb8" CREATED="1783956967738" ID="ID_1170137190" MODIFIED="1783957012593" TEXT="Wichtige Einsicht: warum nicht jeder Desktop-Frame per Buffer-Flip bedient werden mu&#xdf;">
<icon BUILTIN="idea"/>
<node CREATED="1783957017373" ID="ID_1419210108" MODIFIED="1783957033385" TEXT="wenn wir neue daten haben dann triggern wir die Anzige-Pipeline"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783957040816" ID="ID_468719143" MODIFIED="1783957188965" STYLE="fork" TEXT="das funktioniert weil darunter ein Compositor sitzt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<!--
body { font-family: SansSerif; font-size: 12pt }
p { margin-top: 0 }
-->
<ul type="text/css">
<li>
As an aside: do I assume correct that the OpenGL side will just redisplay the same data if nothing is sent for intermittent buffer flips (assuming that the desktop frame rate is higher than the video frame rate)?
</li>
</ul>
<p>
</p>
<p>
<strong http-equiv="content-type" content="text/html; charset=utf-8">Your aside &#8212; yes, and here's the actual mechanism:</strong>&#160;with swap interval 0 and swaps only triggered by <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">frameReady.emit()</code>, you are <em>not</em>&#160;relying on OpenGL to &quot;resend&quot; anything between your swaps &#8212; OpenGL/EGL has no ongoing activity at all in between. What actually keeps the picture on screen is the desktop compositor: once <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">eglSwapBuffers()</code>&#160;makes a buffer the current front buffer, that's simply what's there until you swap again, and the compositor samples it at its own repaint cadence (its vsync, typically 60Hz+) regardless of whether your app does anything. So your assumption holds, but the credit belongs to &quot;a swapped buffer is persistent state the compositor keeps re-showing,&quot; not to any active redisplay behavior on your side &#8212; a good one-sentence clarification to have ready if someone in the audience asks &quot;wait, doesn't something have to keep pushing frames?&quot;
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1783957160551" ID="ID_1093301164" MODIFIED="1783957181327" TEXT="OpenGL macht gar nichts, wenn kein swapBuffers() aufgerufen wird">
<icon BUILTIN="ksmiletris"/>
</node>
</node>
</node>
<node CREATED="1783904677906" ID="ID_923117300" MODIFIED="1783904701552" TEXT="habe Claude dann die URL f&#xfc;r unseren Demo-Code gegeben">
<node CREATED="1783904704085" ID="ID_1817354735" MODIFIED="1783904712017" TEXT="best&#xe4;tigt die vorherige Diskussion"/>
<node CREATED="1783904712480" ID="ID_471788469" MODIFIED="1783904750809" TEXT="Klarstellung: solte Gtkmm verwenden"/>
<node CREATED="1783904918332" ID="ID_788373194" MODIFIED="1783904930062" TEXT="Claude best&#xe4;tigt: der Umbau der GtkApp d&#xfc;rfte trivial sein"/>
<node CREATED="1783904930773" ID="ID_1456697138" MODIFIED="1783904945590" TEXT="er schl&#xe4;gt vor: ich sollte auch den onFrame-Callback so erhalten, nur anders aufrufen"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#520f69" CREATED="1783904751803" ID="ID_648202546" MODIFIED="1783904801052" TEXT="lasse mir von Claude zwei Code-Templates generieren">
<icon BUILTIN="edit"/>
<node CREATED="1783904765875" ID="ID_1730135150" MODIFIED="1783904774302" TEXT="die C-L&#xf6;sung mit g_idle_add()"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783904774961" ID="ID_795180608" MODIFIED="1784136111537" STYLE="fork" TEXT="die Gtkmm-L&#xf6;sung mit dem Glib::Dispatcher">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
// --- GUI thread, once at setup ---
</p>
<p>
Glib::Dispatcher frameReady;
</p>
<p>
frameReady.connect([this]{ displayFrame(*processor_); });&#160;&#160;// upload + draw + eglSwapBuffers()
</p>
<p>
</p>
<p>
// --- worker thread, once a frame is ready ---
</p>
<p>
frameReady.emit();&#160;&#160;&#160;// thread-safe; wakes the GUI thread's main loop
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<icon BUILTIN="edit"/>
</node>
</node>
</node>
<node CREATED="1783952838505" ID="ID_1257919936" MODIFIED="1783952858029" TEXT="Worker Thread and State organisation">
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783952862448" ID="ID_842498915" MODIFIED="1783954578059" STYLE="fork">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
ich habe das Stichwort &quot;<b>Proactor</b>&quot; gebraucht. Claude best&#228;tigt das
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das hei&#223;t: die L&#246;sung, auf die es nun f&#252;r den Talk hinausl&#228;uft, ist da&#223; ich nicht wirklich einen &quot;Worker&quot; hab (kein Vorgriff auf die Lumiera Engine), sondern einen Proactor.
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783954584980" ID="ID_532077726" MODIFIED="1783954609626" TEXT="&#x27f9; hei&#xdf;t: blocken auf wait_cqe()">
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1784052687896" ID="ID_1489274093" MODIFIED="1784052865429" TEXT="interessanter Ansatz: man kann einen Kernel-Timer in IO_Uring einbinden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Darauf w&#228;re ich nicht gekommen; ich h&#228;tte an meinem von Lumiera abgeleiteten Schema festgehalten....
</p>
<p>
Claude betont, das w&#228;re idiomatisch und w&#252;rde die Proactor-Loop ins Zentrum stellen. Das &#252;berzeugt mich &#10233; werde dann also doch einen Proactor in der Demo zeigen
</p>
</body>
</html></richcontent>
<linktarget COLOR="#f4f3a4" DESTINATION="ID_1489274093" ENDARROW="Default" ENDINCLINATION="638;-170;" ID="Arrow_ID_396926940" SOURCE="ID_1545269972" STARTARROW="None" STARTINCLINATION="1155;67;"/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1783953153918" ID="ID_1754327495" MODIFIED="1783953520369" TEXT="ich sage: f&#xfc;r async IO braucht man immer eine Art State-Engine">
<node CREATED="1783953183906" ID="ID_339096490" MODIFIED="1783953350863" TEXT="Claude widerspricht nicht">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ich verwende das aktuelle &quot;Sonnet&quot; auf Stufe Medium. Das braucht erhebliche Rechenzeit f&#252;r jede Antwort auf diesem Diskussionslevel (und zeigt auch jeweils expandierende, schlu&#223;folgernde und kondensierende Phasen an)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783953200905" ID="ID_1912082579" MODIFIED="1783953252578" TEXT="aber er fa&#xdf;t die von mir genannten Optionen zusammen in zwei Klassen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal">
<strong>Proactor, confirmed.</strong>&#160;io_uring is the textbook proactor: you submit a description of the completed operation you want, the kernel does the work, and your thread's job is purely to consume results and act on them &#8212; as opposed to a reactor (epoll-style), where you're told &quot;this fd is ready,&quot; and <em>you</em>&#160;still perform the (potentially blocking, now guaranteed-non-blocking) I/O yourself. Good instinct to name this explicitly in the talk; it's the single sentence that makes the rest of the design legible.
</p>
<p class="font-claude-response-body break-words whitespace-normal">
<strong>On the &quot;abstraction of state progression&quot; claim</strong>&#160;&#8212; I think it's correct, but I'd collapse your four options into two families rather than four separate things:
</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2">
<strong>Implicit state, paid for in threads.</strong>&#160;Thread-per-operation blocking I/O doesn't <em>avoid</em>&#160;needing a state machine &#8212; it hides one inside the OS thread: the thread's stack and program counter <em>are</em>&#160; the state (&quot;I am here, at this line, holding these locals&quot;). You get state-tracking for free, but you pay for it in thread/stack cost per concurrent operation, which is exactly what proactor-style async I/O exists to avoid.
</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">
<strong>Explicit state, paid for in bookkeeping.</strong>&#160;Everything else &#8212; hand-rolled flags, continuation chains, and coroutines &#8212; is the <em>same</em>&#160; idea at different levels of automation. A coroutine is, mechanically, a compiler-synthesized state machine: <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">co_await</code>&#160;points become case labels, locals that need to survive a suspension become member fields of a generated struct. Continuation-passing is the same thing done by hand with closures instead of compiler codegen. So &quot;coroutines&quot; and &quot;explicit state engine&quot; aren't really two different answers to your question &#8212; a coroutine <em>is</em>&#160;an explicit state engine, just one you didn't have to write by hand.
</li>
</ul>
<p class="font-claude-response-body break-words whitespace-normal">
Given that framing: you're right that a flag-per-buffer is not a lesser or simplified version of &quot;the real solution&quot; &#8212; it's the same solution as coroutines, just written manually because your problem is small and linear enough that the compiler-generated version would be pure overhead (both in runtime terms and, more importantly here, in <em>audience cognitive load</em>&#160;&#8212; introducing C++20 coroutine machinery to explain a 3-state pipeline would be a bad trade for this talk).
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783953439647" ID="ID_478135892" MODIFIED="1783953440909" TEXT="enum class SlotState { Empty, Submitted, Ready };"/>
<node CREATED="1783953460141" ID="ID_1859865790" MODIFIED="1783954625972">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
std::<b>atomic</b>&lt;SlotState&gt;
</p>
</body>
</html></richcontent>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783953478348" ID="ID_186490339" MODIFIED="1784076975728" STYLE="fork" TEXT="with release-on-write / acquire-on-read">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
Since each slot has exactly one producer (the worker) and one consumer (the GUI thread, via the dispatcher callback) and they never touch a slot at the same time by construction,
<p>
<code http-equiv="content-type" content="text/html; charset=utf-8" class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">std::atomic&lt;SlotState&gt;</code>&#160;with release-on-write / acquire-on-read is enough &#8212; no mutex needed. That pairing is worth a beat in the talk on its own: the atomic isn't there to prevent concurrent writes (there aren't any), it's there to guarantee the GUI thread sees the <em>buffer contents</em>&#160;the worker wrote, not just the state flag &#8212; a clean, concrete illustration of why acquire/release exists, tied directly to something the audience just watched you build.
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<arrowlink COLOR="#0c8e99" DESTINATION="ID_1043516833" ENDARROW="Default" ENDINCLINATION="556;-26;" ID="Arrow_ID_1416969408" STARTARROW="None" STARTINCLINATION="1283;82;"/>
<icon BUILTIN="wizard"/>
</node>
</node>
</node>
<node CREATED="1783953378671" ID="ID_1599260447" MODIFIED="1783953395622" TEXT="Claude sagt, man sollte dann jeden Buffer auch mit der Frame-Nummer markieren"/>
<node CREATED="1783953396149" ID="ID_12931299" MODIFIED="1783953416430" TEXT="ich sage: das bekommt man doch von selbst, wenn man die Buffer in einen Ring organisiert"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783953941213" ID="ID_713186135" MODIFIED="1783954028109" STYLE="fork" TEXT="Claude greift das auf, betont aber (nochmal) da&#xdf; die CQ-Reihenfolge nicht garantiert ist">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal">
The ring idea is correct, and it's the right way to lay out storage &#8212; but it solves a different problem than the one we flagged last time, and I think that's the thing worth pulling apart carefully, because the two compose nicely rather than one replacing the other.
</p>
<p class="font-claude-response-body break-words whitespace-normal">
<strong>What the cyclic layout gives you:</strong>&#160;a deterministic mapping from frame number to physical buffer &#8212; <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">slot = frameNumber % N</code>&#160;&#8212; so you never need a free-list, an allocator, or any &quot;find me an empty slot&quot; search. You always know exactly where frame <em>K</em>'s data belongs before you even submit the read. That's a clean, standard pattern and exactly right for a fixed pool of reusable buffers.
</p>
<p class="font-claude-response-body break-words whitespace-normal">
<strong>What it does <em>not</em>&#160;give you for free:</strong>&#160;the display-order guarantee. The ring tells you <em>where</em>&#160;frame K's bytes live; it says nothing about <em>when</em>&#160;the read for frame K finishes relative to the read for frame K+1. Two SQEs submitted in order are not guaranteed to complete in order &#8212; for sequential reads against one local file on one machine it's very likely in practice, but &quot;likely&quot; is exactly the kind of unverified pragmatism you just said you don't accept. So you still need the mechanism from last time: track which frame is <em>next expected for display</em>, and only <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">emit()</code>&#160;once that specific slot says <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Ready</code>&#160; &#8212; regardless of what else has completed in the meantime.
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1783954062803" ID="ID_281008431" MODIFIED="1783954065743" TEXT="weitere Hinweise">
<node CREATED="1783954070297" ID="ID_1690793152" MODIFIED="1783954092918" TEXT="man sollte die frameNr als &quot;user data&quot; verwenden">
<icon BUILTIN="idea"/>
<node CREATED="1783954096287" ID="ID_1210379052" MODIFIED="1783954102642" TEXT="da w&#xe4;re ich nicht draufgekommen"/>
<node CREATED="1783954103307" ID="ID_399338998" MODIFIED="1783954150362" TEXT="trotzdem w&#xfc;rde ich die &#xfc;bliche Praxis mit dem Pointer darstellen"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783954171957" ID="ID_1248856525" MODIFIED="1783954243633" STYLE="fork" TEXT="sollte einen &quot;nextExpected&quot;-Cursor im Thread-State mitf&#xfc;hren">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<ul>
<li http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body whitespace-normal break-words pl-2">
Keep one cursor, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">nextExpected</code>&#160;(monotonically increasing, starts at 0). On every completion, mark <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">slots[frameNumber % N]</code>&#160;as <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Ready</code>. Separately &#8212; and this can literally be a small loop, since bursts of completions can land between two checks &#8212; while <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">slots[nextExpected % N].state == Ready</code>: emit the dispatcher for that slot, mark it <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Empty</code>&#160; again, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">++nextExpected</code>.
</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">
The same <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">nextExpected</code>-style counter also tells the <em>submission</em>&#160; side what to do: whenever a slot frees up (goes back to <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Empty</code>&#160;&#160;after display), submit a new read for <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">nextToSubmit</code>, into <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">slots[nextToSubmit % N]</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">++nextToSubmit</code>. Priming at startup is just: submit frames <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">0..N-1</code>&#160;into slots <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">0..N-1</code>&#160;before the first <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">wait_cqe</code>.
</li>
</ul>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1783954256289" ID="ID_582576620" MODIFIED="1783954281086" TEXT="&#xbb;Backpressure&#xab; falles out for free with this design"/>
<node CREATED="1783954286225" ID="ID_681083402" MODIFIED="1783954360400" TEXT="sollte nextFrame und Frame-Pos im Quellfile konzeptionell trennen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...obschon man sie auf dem gleichen lokalen State aufbaut. Das Beispiel, das Claude nennt: man k&#246;nnte das Quellfile loopen
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1783956243726" ID="ID_1521391070" MODIFIED="1783956255868" TEXT="Scheduling und Behandeln der Aktionen via IO_URING">
<node CREATED="1783956270352" ID="ID_1579558384" MODIFIED="1783957478739" TEXT="zeige an da&#xdf; ich liburing verwenden m&#xf6;chte">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1783956516487" ID="ID_1971249448" MODIFIED="1783956541623" TEXT="Claude schreibt mir drei Code-Snippets">
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783956542891" ID="ID_922011151" MODIFIED="1784136111537" STYLE="fork" TEXT="Setup von Uring und Timer + initiales Bef&#xfc;llen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
struct io_uring ring;
</p>
<p>
io_uring_queue_init(QUEUE_DEPTH, &amp;ring, 0);
</p>
<p>
</p>
<p>
// One reserved tag that can never collide with a real frame number:
</p>
<p>
constexpr uint64_t TICK_TAG = UINT64_MAX;
</p>
<p>
</p>
<p>
// The periodic beat &#8212; submitted ONCE, keeps firing on its own:
</p>
<p>
struct __kernel_timespec ts = { .tv_sec = 0, .tv_nsec = 40'000'000 }; // 40ms &#8776; 25fps
</p>
<p>
struct io_uring_sqe* tsqe = io_uring_get_sqe(&amp;ring);
</p>
<p>
io_uring_prep_timeout(tsqe, &amp;ts, 0, IORING_TIMEOUT_MULTISHOT);
</p>
<p>
io_uring_sqe_set_data64(tsqe, TICK_TAG);
</p>
<p>
</p>
<p>
// Prime the pipeline &#8212; one read per slot, tagged with its frame number:
</p>
<p>
for (uint64_t f = 0; f &lt; N; ++f) {
</p>
<p>
&#160;&#160;&#160;&#160;struct io_uring_sqe* sqe = io_uring_get_sqe(&amp;ring);
</p>
<p>
&#160;&#160;&#160;&#160;io_uring_prep_read(sqe, fd, slots[f % N].buf, FRAME_BYTES, f * FRAME_BYTES);
</p>
<p>
&#160;&#160;&#160;&#160;io_uring_sqe_set_data64(sqe, f);
</p>
<p>
}
</p>
<p>
io_uring_submit(&amp;ring);&#160;&#160;&#160;// one syscall flushes everything prepped above
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<icon BUILTIN="edit"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783956564734" ID="ID_519769608" MODIFIED="1784136111536" STYLE="fork" TEXT="Skelett der Proactor-Loop">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
for (;;) {
</p>
<p>
&#160;&#160;&#160;&#160;struct io_uring_cqe* cqe;
</p>
<p>
&#160;&#160;&#160;&#160;io_uring_wait_cqe(&amp;ring, &amp;cqe);&#160;&#160;&#160;&#160;&#160;&#160;// blocks &#8212; the worker's only wait point
</p>
<p>
</p>
<p>
&#160;&#160;&#160;&#160;uint64_t tag = cqe-&gt;user_data;
</p>
<p>
&#160;&#160;&#160;&#160;if (tag == TICK_TAG)
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;onTick();
</p>
<p>
&#160;&#160;&#160;&#160;else
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;onReadComplete(/*frame=*/tag, cqe-&gt;res);
</p>
<p>
</p>
<p>
&#160;&#160;&#160;&#160;io_uring_cqe_seen(&amp;ring, cqe);&#160;&#160;&#160;&#160;&#160;&#160;&#160;// MUST always call this, or the CQ ring fills and stalls
</p>
<p>
}
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<icon BUILTIN="edit"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783956594083" ID="ID_1956714359" MODIFIED="1784136509799" STYLE="fork" TEXT="onTick + follow-up">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<pre>void onTick()
&#160;&#160;{
&#160;&#160;&#160;&#160;if (slots[nextExpected % N].state == Ready)
&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;frameReady.emit(); // GUI thread will draw slots[nextExpected % N]
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;++nextExpected; // GUI marks the slot Empty once it's done drawing
&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;// else: do nothing &#8212; this frame slips one tick later. Not dropped, just delayed.
while (slots[nextToSubmit % N].state == Empty)
&#160;&#160;{
&#160;&#160; &#160;&#160;submitRead(nextToSubmit); // io_uring_prep_read + set_data64(nextToSubmit)
++nextToSubmit;
&#160;&#160; }
io_uring_submit(&amp;ring);
}
</pre>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<icon BUILTIN="edit"/>
<node CREATED="1783956613435" ID="ID_121998302" MODIFIED="1784136083060" TEXT="Claude erl&#xe4;utert dazu....">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
The reason top-up belongs in <code>onTick</code>&#160;rather than in <code>onReadComplete</code>:<br />a slot only becomes reusable once the <em>GUI thread</em>&#160;has finished drawing it and flips it back to <code>Empty</code>&#160;&#160;&#8212; and the worker, sitting blocked in <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">io_uring_wait_cqe</code>, has no way to know that happened except by waking up for <em>something</em>. The tick is that guaranteed periodic wake-up, so it doubles as &quot;check if there's new capacity to fill,&quot; with a worst-case latency of one tick period (~40ms) before a freed slot gets reused &#8212; fine at this cadence, and a nice illustration that the timer isn't just pacing display, it's also the thing that keeps the whole state machine alive even when nothing else is happening.
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783957483612" ID="ID_918051178" MODIFIED="1784151801322" STYLE="fork" TEXT="a Zuckerl: Chrono-to-Kernel-Timespec">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<!--
body { font-family: SansSerif; font-size: 12pt }
p { margin-top: 0 }
-->
<ul type="text/css">
<li>
can you write me a short inline function that takes the &quot;40 millisecods&quot; as a std::chrono spec (&quot;40ms&quot;) and returns the struct __kernel_timespec
</li>
</ul>
<p>
#include &lt;chrono&gt;
</p>
<p>
#include &lt;linux/time_types.h&gt;&#160;&#160;&#160;// struct __kernel_timespec (also pulled in via liburing.h)
</p>
<p>
</p>
<p>
template&lt;class Rep, class Period&gt;
</p>
<p>
constexpr struct __kernel_timespec
</p>
<p>
toKernelTimespec(std::chrono::duration&lt;Rep, Period&gt; d)
</p>
<p>
{
</p>
<p>
&#160;&#160;&#160;&#160;using namespace std::chrono;
</p>
<p>
&#160;&#160;&#160;&#160;auto secs&#160;&#160;= duration_cast&lt;seconds&gt;(d);
</p>
<p>
&#160;&#160;&#160;&#160;auto nsecs = duration_cast&lt;nanoseconds&gt;(d - secs);
</p>
<p>
&#160;&#160;&#160;&#160;return __kernel_timespec{ static_cast&lt;long long&gt;(secs.count()),
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;static_cast&lt;long long&gt;(nsecs.count()) };
</p>
<p>
}
</p>
<font color="#800c0c">auto ts = toKernelTimespec(40ms);</font>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<linktarget COLOR="#5b8796" DESTINATION="ID_918051178" ENDARROW="Default" ENDINCLINATION="-181;1174;" ID="Arrow_ID_1798992367" SOURCE="ID_546021072" STARTARROW="None" STARTINCLINATION="-274;12;"/>
<icon BUILTIN="wizard"/>
<icon BUILTIN="edit"/>
</node>
<node BACKGROUND_COLOR="#e9c7a3" COLOR="#440099" CREATED="1783964845540" ID="ID_784995591" MODIFIED="1783964898453" TEXT="schlie&#xdf;e eine allgemeine &#xdc;berlegung an btr. Lumiera-Engine">
<icon BUILTIN="back"/>
<node CREATED="1783964913819" ID="ID_1290458999" MODIFIED="1783964940263" TEXT="gebe Claude eine &#xbb;executive summary&#xab; bez&#xfc;glich Lumiera Engine">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
er hat dazu keine weiteren Fragen
</p>
</body>
</html></richcontent>
</node>
<node COLOR="#338800" CREATED="1783964942767" ID="ID_993102807" MODIFIED="1783966105865" TEXT="lasse Claude die Diskrepanz herausarbeiten gegen&#xfc;ber dem Proactor-Pattern">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
best&#228;tigt meine Analyse, ohne Diskrepanz
</p>
</body>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1783966114659" ID="ID_325758280" MODIFIED="1783966124441" TEXT="Claude identifiziert Problemzonen">
<node CREATED="1783966132732" ID="ID_227446892" MODIFIED="1783966134051" TEXT="&quot;someone has to drain the CQ&quot;"/>
<node CREATED="1783966148026" ID="ID_1364400629" MODIFIED="1783966149873" TEXT="what guarantees the CQ actually gets drained in a timely fashion?"/>
<node CREATED="1783966160726" ID="ID_1852031512" MODIFIED="1783966162572" TEXT="who owns the ring at engine scale?"/>
</node>
<node CREATED="1783966216653" ID="ID_62921124" MODIFIED="1783966234722" TEXT="ich frame das Problem mit den lang laufenden Trasks als &#xbb;Backpressure&#xab;">
<node CREATED="1783966235635" ID="ID_492766487" MODIFIED="1783966241017" TEXT="Claude akzeptiert das"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783966254735" ID="ID_1661464656" MODIFIED="1783966306039" STYLE="fork" TEXT="aber er nennt das &quot;implicit backpressure">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783966276865" ID="ID_1822059325" MODIFIED="1783966298429" STYLE="fork" TEXT="bemerkt: es ist offen ob das gen&#xfc;gt">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1783966316107" ID="ID_1390907760" MODIFIED="1783966366559" TEXT="ich geme mein Reasoning bez&#xfc;glich Ring-Ownership">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
As far as I could see from looking at the liburing sources, there is a fundamental read barrier before retrieving/updating the rings, and a write barrier at the other side (when done with a completion or submitting). Now you also pointed out the conclusion that submitting the next IO task could itself be a scheduled activity. Combining both, if we ensure that interaction with io_uring happens only in the &quot;mutual exclusive&quot; phase (i.e. the worker holds the GroomingToken) -- then that would ensure that, at any given time, only one thread at max interacts with the urings. And Liburing inserts the necessary barriers, so that the next task to enter that zone would see the changes. Does that reasoning hold? What difficulties do you see?
</body>
</html></richcontent>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783966388626" ID="ID_857234213" MODIFIED="1783966398679" STYLE="fork" TEXT="yeour reasoning holds, with one caveat that matters a lot and a couple of smaller ones.">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#4a0f69" CREATED="1783966412590" ID="ID_1533910419" MODIFIED="1783966530095" TEXT="Achtung: acquire / release - Semantik is notwendig auf dem Grooming-Token">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ja, wei&#223; ich. Deshalb hab ich's so programmiert. Freut mich da&#223; Claude da unabh&#228;ngig zum gleichen Schlu&#223; kommt (denn ich hab mich oft gefragt, ob ich mich da in Spitzfindigkeiten verrenne).<br />Also nochmal explizit: memory_order_relaxed reicht hier nicht<br />
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1783966538813" ID="ID_340512988" MODIFIED="1783966733292" TEXT="das GroomingToken und die Barrieren in liburing dienen verschiedenen Zwecken">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Einmal geht es um shared-data zwischen Kernel und Userspace. Wohingegen das Grooming-Token die Sichtbarkeit &#252;ber die Worker hinweg steuert.
</p>
<p>
</p>
<p>
Diese Unterscheidung ist konzeptionell (sehe ich so, Claude deutet es auch so). Beide Ans&#228;tze st&#246;ren sich nicht, man sollte sie aber auseinanderhalten. Ich denke, das ist ein generischer guter Rat beim Design solcher Systeme, man sollte nicht danach streben, solche verschiedenen Belange zusammenzufassen, selbst wenn es im konkreten Fall m&#246;glich w&#228;re (wie hier der Fall, aber nur weil keine data-dependenciy im memory-ordering includiert ist)
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1783966752311" ID="ID_1363514128" MODIFIED="1783966837345" TEXT="whatever you do inside the token-held section must never block! ">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
That's a much bigger problem than in the FrOSCon demo, where blocking on
<p>
<code http-equiv="content-type" content="text/html; charset=utf-8" class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">wait_cqe</code>&#160;was the worker's <em>entire job</em>. Here it would reintroduce exactly the kind of global stall your pull architecture is designed to avoid. The fix is straightforward but needs to be deliberate: only ever use the non-blocking <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">io_uring_peek_cqe()</code>&#160; inside grooming &#8212; check if anything's ready, harvest what's there, submit what's ready to submit, and move on regardless of whether anything was found. That keeps the ring interaction cheap and bounded, consistent with a critical section that's already supposed to be short.
</p>
</body>
</html></richcontent>
<icon BUILTIN="clanbomber"/>
<node CREATED="1783966769728" ID="ID_882108638" MODIFIED="1783966784791" TEXT="Gefahr: wait_cqe() kann die ganze Engine stallen"/>
<node CREATED="1783966793306" ID="ID_1685734854" MODIFIED="1783966801007" TEXT="stets nur io_uring_peek_cqe() verwenden">
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783966849036" ID="ID_145214537" MODIFIED="1783966861508" TEXT="an Completion-Queue-Overflow denken">
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783966894277" ID="ID_231061601" MODIFIED="1783966904895" STYLE="fork" TEXT="">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
CQ overflow: if grooming genuinely doesn't run for a while under heavy CPU load, does a full completion queue drop completions, or buffer them? Recent kernels buffer overflow internally rather than dropping (subject to
<p>
<code http-equiv="content-type" content="text/html; charset=utf-8" class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">IORING_FEATURE_NODROP</code>-era behavior), but it's worth confirming for whatever kernel baseline you commit to, rather than assuming.
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
</node>
<node CREATED="1783966925433" ID="ID_852283957" MODIFIED="1783967012774">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Deliberately avoid <code><font color="#7c5252">IORING_SETUP_SQPOLL</font></code>
</p>
</body>
</html></richcontent>
<icon BUILTIN="clanbomber"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783967014652" ID="ID_758622095" MODIFIED="1783967890660" STYLE="fork" TEXT="">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
Deliberately avoid
<p>
<code http-equiv="content-type" content="text/html; charset=utf-8" class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">IORING_SETUP_SQPOLL</code>. It's tempting since it removes the need to call into the kernel for submission most of the time, but it works by adding a kernel-side polling thread that reads the SQ ring on its own schedule &#8212; an actor outside your GroomingToken discipline and outside your capacity self-calibration entirely. That's exactly the kind of uncontrolled independent actor your architecture is built to avoid.
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<linktarget COLOR="#4389dd" DESTINATION="ID_758622095" ENDARROW="Default" ENDINCLINATION="196;89;" ID="Arrow_ID_200171107" SOURCE="ID_156133270" STARTARROW="None" STARTINCLINATION="334;27;"/>
<icon BUILTIN="wizard"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783967051428" ID="ID_1173652481" MODIFIED="1783967077582" STYLE="fork" TEXT="Claude gibt eine &#xbb;freundliche conclusion&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
Net: I think folding I/O into the same single-threaded grooming discipline you already have is the
<p>
<em http-equiv="content-type" content="text/html; charset=utf-8">consistent</em>&#160;choice, not a compromise &#8212; you've already accepted one global serialization point for scheduling decisions, and a small, non-blocking peek/submit pair is cheap enough to ride along in that same section without becoming a new bottleneck category. The real design work is less &quot;is this safe&quot; (I think it is, modulo the ordering-semantics check and the non-blocking discipline) and more &quot;how do we know, empirically, that grooming-section latency stays small enough once I/O bookkeeping is added&quot; &#8212; which sounds like exactly the kind of thing you'd want numbers for before committing, rather than reasoning about further in the abstract.
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1783967080199" ID="ID_820048763" MODIFIED="1783967099409" TEXT="geschickt schmeicheln wurde gut trainiert">
<icon BUILTIN="smiley-oh"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783967101185" ID="ID_88930827" MODIFIED="1783967123407" TEXT="gut verpackte Warnung: nicht wehter gehen ohne empirsche Daten">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1783967137487" ID="ID_551703511" MODIFIED="1783967158497" TEXT="bitte Claude, dieses Desidng in zeitgen&#xf6;ssische Trends einzuordnen">
<node CREATED="1783967167257" ID="ID_714798259" MODIFIED="1783967181600" TEXT="er sieht das als Konvergenz in zwei Trends"/>
<node CREATED="1783967182462" ID="ID_592074869" MODIFIED="1783967198604" TEXT="das Scheduler / Work-stealing Design wird sogar standardisiert"/>
<node CREATED="1783967246522" ID="ID_550800786" MODIFIED="1783967291305" TEXT="der zeweite, gegens&#xe4;tzliche Trend sei &quot;thread-per-core no shared data&quot;">
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783967583375" ID="ID_1425666844" MODIFIED="1783967597761" STYLE="fork" TEXT="">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
<strong http-equiv="content-type" content="text/html; charset=utf-8">Current 2 &#8212; thread-per-core, shared-nothing, and it's picking up real steam.</strong>&#160;This is the more consequential trend to be aware of, because it's a genuinely different answer to the same problem you're solving, and it's currently the fashionable one in high-performance I/O-heavy systems: pin one thread per core, partition data and work by that core (typically via hashing), eliminate cross-thread shared state entirely, and communicate exclusively via message passing rather than shared queues or locks. This is the architecture behind ScyllaDB and Redpanda via the Seastar framework, and it's spreading into the Rust ecosystem too (Glommio, compio, and others). A recent writeup from the Apache Iggy project frames the shift precisely as moving from work stealing to &quot;work steering&quot; &#8212; i.e., instead of idle workers reaching into a shared structure (what you have), work is routed to the specific core that already owns the relevant data, and nobody has to contend for anything. Interestingly, the standard advice against a single shared io_uring instance per application is exactly the contention concern we discussed for your ring &#8212; each thread in Glommio gets its own private set of rings instead, which is the thread-per-core answer to the same &quot;who owns the ring&quot; question you and I just spent a while on. <a href="https://iggy.apache.org/blogs/2026/02/27/thread-per-core-io_uring/" target="_blank" class="group/tag relative h-[18px] rounded-full inline-flex items-center overflow-hidden -translate-y-px cursor-pointer">Apache + 2</a>
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1783967332866" ID="ID_655858860" MODIFIED="1783967346236" TEXT="&quot;from work stealing to work steering&quot;"/>
<node CREATED="1783967350704" ID="ID_650693098" MODIFIED="1783967359922" TEXT="relevant for high-performance computing"/>
<node CREATED="1783967361702" ID="ID_1030181773" MODIFIED="1783967366938" TEXT="nanosecons statt milliseconds"/>
</node>
<node CREATED="1783967397582" ID="ID_980790835" MODIFIED="1783967420293" TEXT="Diverse Quellenangaben im Chatverlauf">
<icon BUILTIN="back"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1783967604917" ID="ID_1465824912" MODIFIED="1783967742187" STYLE="fork" TEXT="abschlie&#xdf;ene Einordnung">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
Even more directly relevant to your capacity-calibration idea: Glommio ships built-in &quot;controllers&quot; that automatically adjust per-task-queue scheduler shares to control throughput against a user-specified criterion &#8212; that's essentially your self-calibrating capacity-weights idea, independently arrived at by a different team solving an adjacent problem. Worth knowing that's not an idiosyncratic idea of yours &#8212; it's something the field has landed on more than once, which is generally a good sign for an architectural instinct.
<p>
<a href="https://docs.rs/glommio/latest/glommio/" target="_blank">Rust</a>
</p>
<p>
</p>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal">
<strong>Where I'd place your design relative to these two currents:</strong>&#160;your GroomingToken-serialized shared-scheduler model sits closer to &quot;classic&quot; worker-pool architecture than to shared-nothing thread-per-core &#8212; and I think that's the <em>right</em>&#160;call for Lumiera specifically, not a lag behind the state of the art. The strongest argument for thread-per-core is when per-request overhead is so small (network request handling, KV-store lookups &#8212; sub-microsecond territory) that even brief lock contention or cache-line bouncing dominates the cost. Your own numbers &#8212; single-digit milliseconds up into seconds per frame task &#8212; are three to six orders of magnitude coarser than that regime. A brief critical section for grooming and ring bookkeeping is genuinely negligible next to task costs measured in milliseconds; it would not be negligible next to costs measured in tens of nanoseconds, which is the world Seastar/ScyllaDB actually live in. So I wouldn't read &quot;thread-per-core is trendy&quot; as pressure to abandon your model &#8212; I'd read it as: the technique exists and is well-proven if your task granularity ever drops by several orders of magnitude (which, for a video render engine, seems unlikely &#8212; your bottleneck is decode/filter/encode work, not tiny message dispatch).
</p>
<p class="font-claude-response-body break-words whitespace-normal">
<strong>One trend worth just keeping an eye on, not acting on:</strong>&#160;core counts keep climbing &#8212; high core-count workstation and consumer chips are increasingly normal &#8212; and any single serialization point gets proportionally more expensive as contention scales with thread count, even if each individual crossing is cheap. Not a problem today, and your task granularity buys you a lot of headroom, but it's the kind of thing worth having empirical data on (exactly the &quot;more empirics needed&quot; conclusion you already reached) if Lumiera is ever deployed on genuinely large core counts rather than typical desktop/workstation counts.
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1783967750406" ID="ID_1287889954" MODIFIED="1783967801786" TEXT="Hinweis auf steigende Anzahl an Cores">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Lumiera k&#246;nnte ja schon auch auf eine high-end-Workstation laufen
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783967758928" ID="ID_284611592" MODIFIED="1783967785981" TEXT="sollte Contention um das single-threaded bottleneck im Blick behalten">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783901529929" ID="ID_1631713573" MODIFIED="1783901543887" TEXT="nebenbei notiert">
<icon BUILTIN="bell"/>
<node COLOR="#435e98" CREATED="1783901558710" ID="ID_156133270" MODIFIED="1783967976008" STYLE="fork" TEXT="was ist IORING_SETUP_SQPOLL?">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
von Claude erw&#228;hnt im Zusammenhang mit Locking visibility. Er weist auch darauf hin da&#223; io_uring keine multiple thread submissions unterst&#252;tzt. Zu dem Schlu&#223; war ich ja auch gekommen
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#4389dd" DESTINATION="ID_758622095" ENDARROW="Default" ENDINCLINATION="196;89;" ID="Arrow_ID_200171107" STARTARROW="None" STARTINCLINATION="334;27;"/>
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1783967899141" HGAP="34" ID="ID_1537697930" MODIFIED="1783967981234" TEXT="verstanden &#x2014; klarer Fall" VSHIFT="23">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
der Kernel kann nicht zaubern; stattdessen hat er dann einfach einen poll-Worker. Keine gute Idee in einer Architektur die selber alle Resourcen steuern m&#246;chte
</p>
</body>
</html></richcontent>
<icon BUILTIN="ksmiletris"/>
</node>
</node>
<node CREATED="1783902798597" ID="ID_599725786" MODIFIED="1783902800007" TEXT="eglSwapInterval">
<node CREATED="1783902800007" ID="ID_1393441883" MODIFIED="1784562583608" TEXT="damit kann man wohl das Verhl&#xe4;tnis zu VSync steuern">
<linktarget COLOR="#708a96" DESTINATION="ID_1393441883" ENDARROW="Default" ENDINCLINATION="-431;-21;" ID="Arrow_ID_986847518" SOURCE="ID_1448869178" STARTARROW="None" STARTINCLINATION="-642;52;"/>
<linktarget COLOR="#347acc" DESTINATION="ID_1393441883" ENDARROW="Default" ENDINCLINATION="288;0;" ID="Arrow_ID_707364611" SOURCE="ID_1990712475" STARTARROW="None" STARTINCLINATION="140;12;"/>
</node>
</node>
<node CREATED="1783904509744" ID="ID_1126395932" MODIFIED="1783904513706" TEXT="X11 / Wayland">
<node CREATED="1783904515877" ID="ID_718620596" MODIFIED="1783904524313" TEXT="habe das nebenbei erw&#xe4;hnt"/>
<node CREATED="1783904524844" ID="ID_473487490" MODIFIED="1783904606751" TEXT="Claude best&#xe4;tigt: unter EGL ist die Anpassung nur minimal">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p http-equiv="content-type" content="text/html; charset=utf-8" class="font-claude-response-body break-words whitespace-normal">
<strong>Wayland/X11</strong>
</p>
<p class="font-claude-response-body break-words whitespace-normal">
Your instinct is basically right, but I'd sharpen &quot;not too deep&quot; a bit: the EGL calls that matter for your loop &#8212; <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">eglCreateContext</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">eglMakeCurrent</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">eglSwapBuffers</code>&#160;&#8212; are identical either way. What differs is only the step just before <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">eglCreateWindowSurface</code>, i.e. how you obtain the native window handle from GDK:
</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2">
X11: you already have this &#8212; <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">gdk_x11_window_get_xid()</code>&#160;gives you a raw <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Window</code>&#160;XID directly usable as the native window type.
</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">
Wayland: GDK gives you a <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">wl_surface*</code>&#160;(<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">gdk_wayland_window_get_wl_surface()</code>), but EGL on Wayland doesn't accept that directly &#8212; you have to wrap it with <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">wl_egl_window_create()</code>&#160;(from <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">libwayland-egl</code>) to get something usable as <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">EGLNativeWindowType</code>.
</li>
</ul>
<p class="font-claude-response-body break-words whitespace-normal">
So it's genuinely a small, well-isolated patch of platform glue &#8212; a handful of lines, gated behind a runtime check of which GDK backend is active (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">GDK_IS_X11_DISPLAY</code>&#160;/ <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">GDK_IS_WAYLAND_DISPLAY</code>) &#8212; everything downstream of surface creation is untouched.
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1783968013173" ID="ID_1777944229" MODIFIED="1783968109171" TEXT="Fazit">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1783968016550" ID="ID_1512987627" MODIFIED="1783968023075" TEXT="ich baue nun doch einen Proaktor"/>
<node CREATED="1783968025925" ID="ID_109357172" MODIFIED="1783968034071" TEXT="verwende Glib::Dispatcher f&#xfc;r hand-over"/>
<node CREATED="1783968039719" ID="ID_1431893413" MODIFIED="1783968050997" TEXT="f&#xfc;r die Daten-Sichtbarkeit gen&#xfc;gt eine atomic-state-flag"/>
<node CREATED="1783968058381" ID="ID_234180982" MODIFIED="1783968077778" TEXT="IO_URING hat selber einen Timing-Mechanismus &#x27f9; den sollte man nutzen"/>
<node CREATED="1783968083676" ID="ID_1583854744" MODIFIED="1783968100714" TEXT="Buffer zyklisch organisieren. Next-Frame-Nr als Key verwenden"/>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1783968124839" ID="ID_32919071" MODIFIED="1783968137925" TEXT="Allgemeine Einsichten f&#xfc;r die Lumiera-Engine">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
<node CREATED="1783968139661" ID="ID_721741944" MODIFIED="1783968157925" TEXT="Proactor ist push &#x2014; unsere Architektur ist konsistent pull"/>
<node COLOR="#5b280f" CREATED="1783968173638" ID="ID_1363800541" MODIFIED="1783968193807" TEXT="man sollte nicht versuchen, einen Proactor in unser Design zu integrieren">
<icon BUILTIN="stop-sign"/>
</node>
<node CREATED="1783968195246" ID="ID_1729925953" MODIFIED="1783968212467" TEXT="stattdessen kann man die Proactor-Loop in Activities oder Jobs packen"/>
<node CREATED="1783968233008" ID="ID_1599145728" MODIFIED="1783968259313" TEXT="Auf Engine-Level: Zugang zum URing mu&#xdf; in der &#xbb;Grooming-Zone&#xab; bleiben">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1783968264384" ID="ID_1390930082" MODIFIED="1783968317234" TEXT="das ist ausreichend um die Cross-Thread-Visibility sicherzustellen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
aber man sollte konzeptionell zwischen der visibility mit dem Kernel und der Visibility zwischen den Workern unterscheiden; f&#252;r ersteres gibt es die Barrieren in Liburing
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783968339226" ID="ID_52764530" MODIFIED="1783968361355" TEXT="Blocken in der Grooming-Phase verhindern &#x27f6; sonst Engine-Stall">
<icon BUILTIN="clanbomber"/>
</node>
<node CREATED="1783968381176" ID="ID_291465589" MODIFIED="1783968485845" TEXT="Flow/Capacity-Steuerung ist essentiell notwendig">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
der Umstand da&#223; neue IO-Aktivit&#228;ten gescheduled werden und Completions entnommen werden m&#252;ssen, garantiert nur eine passive Backpressure (nicht entnommene Completions gehen nicht verloren, und der Platz in den URings ist begrenzt). Sehr wahrscheinlich ist mehr notwendig, damit die Engine rund l&#228;uft.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783968535936" ID="ID_1390321079" MODIFIED="1783968546673" TEXT="Einordnung in gegenw&#xe4;rtige Trends">
<node CREATED="1783968547646" ID="ID_1203574703" MODIFIED="1783968635282" TEXT="Scheduler/Worker-Pattern wird standardisiert (C++26)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Es ist eine etablierte und bew&#228;hrte Methode, und wird nicht weggehen. Was wir geschaffen haben konvergiert gut mit den allgemeinen Einsichten im Feld
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783968562254" ID="ID_1154684301" MODIFIED="1783968600700" TEXT="High-Performance-Computing: thread-per-core no shared data">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das ist ein Gegentrend, der aber auf einer anderen Gr&#246;&#223;enordnung arbeitet (im Nanosekunden-Bereich)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783968636663" ID="ID_1048046164" MODIFIED="1783968651582" TEXT="sollte an sehr hohe Anzahl an Cores denken">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#b2e9b7" COLOR="#014e21" CREATED="1783984352027" FOLDED="true" ID="ID_1602724940" MODIFIED="1784562200845" TEXT="Aufbau der Application-Shell">
<icon BUILTIN="yes"/>
<node CREATED="1783984371031" ID="ID_1219649133" MODIFIED="1783984401222" TEXT="das Grundschema von letztem Jahr war n&#xfc;tzlich">
<node CREATED="1783984407459" ID="ID_321798557" MODIFIED="1783984427656" TEXT="&#x201e;mu&#xdf; den GTK-Code gar nicht anschauen&#x201c;"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783985102373" ID="ID_734300736" MODIFIED="1784076612700" TEXT="Aber: die Ablaufsteuerung liegt jetzt nicht mehr (komplett) in GTK">
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783985519074" ID="ID_1873813285" MODIFIED="1783985537906" TEXT="&#x27f9; mu&#xdf; nun einen Frame-Callback (cross-Thread) realisieren">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1783985135020" ID="ID_1062164422" LINK="https://web.archive.org/web/20200806190801/https://developer.gnome.org/glibmm/stable/classGlib_1_1Dispatcher.html" MODIFIED="1783985145748" TEXT="Glib::Dispatcher">
<icon BUILTIN="list"/>
</node>
<node CREATED="1783985286044" ID="ID_1662752917" MODIFIED="1783985548196" TEXT="Regeln">
<icon BUILTIN="info"/>
<node CREATED="1783985294267" ID="ID_1295877512" MODIFIED="1783985308444" TEXT="ein receiver-Thread, aber Trigger von jedem anderen Thread"/>
<node CREATED="1783985309048" ID="ID_1248615877" MODIFIED="1783985320489" TEXT="im receiver-Thread mu&#xdf; eine Glib-Loop laufen"/>
<node CREATED="1783985321418" ID="ID_1994550502" MODIFIED="1783985333946" TEXT="ein Dispatcher-Objekt...">
<node CREATED="1783985334643" ID="ID_291484889" MODIFIED="1783985343649" TEXT="mu&#xdf; im Receiver-Thread erzeugt und zerst&#xf6;rt werden"/>
<node CREATED="1783985344196" ID="ID_1733483538" MODIFIED="1783985362637" TEXT="sollte vor allen anderen Threads erzeugt werden (&#x27f9; Sichtbarkeit)"/>
</node>
<node CREATED="1783985372148" ID="ID_1967828108" MODIFIED="1783985396343" TEXT="alle Dispatcher-Objekte eines receiver(Loop)-Threads verwenden eine einzige Pipe">
<node CREATED="1783985399747" ID="ID_720330070" MODIFIED="1783985405923" TEXT="Locks niemals auf der Senderseite"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1783985980271" FOLDED="true" ID="ID_1205516934" MODIFIED="1784076663250" TEXT="Konstruktions-Problem: Verdrahtung">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1783985998296" ID="ID_602134117" MODIFIED="1783986005435" TEXT="die Verdrahtung ist jetzt kreuzweise">
<node CREATED="1783986006656" ID="ID_1853634036" MODIFIED="1783986020234" TEXT="GtkApp &#x27f6; Setup"/>
<node CREATED="1783986025918" ID="ID_905927115" MODIFIED="1783986037848" TEXT="Setup &#x27f9; erzeugt Player"/>
<node CREATED="1783986070733" ID="ID_1828650606" MODIFIED="1783986085969" TEXT="GtkApp &#x27f9; erzeugt Dispatcher f&#xfc;r Player"/>
<node CREATED="1783986088261" ID="ID_863448551" MODIFIED="1783986143522" TEXT="Player &#x27f6; OpenGL-Display"/>
<node CREATED="1783986156014" ID="ID_1075245760" MODIFIED="1783986166367" TEXT="Player &#x27f6; Frame-Signal"/>
<node CREATED="1783986171122" ID="ID_931723726" MODIFIED="1783986184677" TEXT="GtkApp &#x27f6; Player-Stop"/>
</node>
<node COLOR="#435e98" CREATED="1783986532114" ID="ID_1245562739" MODIFIED="1784076460564" TEXT="Knackpunkt: wo sitzt der Dispatcher?">
<icon BUILTIN="help"/>
<node COLOR="#5b280f" CREATED="1783986546063" ID="ID_1573759034" MODIFIED="1783986688651" TEXT="L&#xf6;sung-1 : in der GtkApp">
<icon BUILTIN="button_cancel"/>
<node CREATED="1783986575996" ID="ID_236050628" MODIFIED="1783986584350" TEXT="Vorteil: nat&#xfc;rlicherweise die GTK-Verbindung"/>
<node CREATED="1783986584944" ID="ID_478484131" MODIFIED="1783986600350" TEXT="bleibt damit Interna der GTK-App"/>
<node CREATED="1783986603534" ID="ID_1364662813" MODIFIED="1783986612304" TEXT="Nachteil: Verdrahtung nicht offensichtlich"/>
</node>
<node CREATED="1783986560783" ID="ID_1335290152" MODIFIED="1784076661520" TEXT="L&#xf6;sung-2 : im Player">
<arrowlink COLOR="#308bd6" DESTINATION="ID_1751781345" ENDARROW="Default" ENDINCLINATION="95;-7;" ID="Arrow_ID_309586658" STARTARROW="None" STARTINCLINATION="77;235;"/>
<icon BUILTIN="back"/>
<node CREATED="1783986627477" ID="ID_281071387" MODIFIED="1783986637023" TEXT="Vorteil: Verdrahtung offensichtlich und einfach"/>
<node CREATED="1783986637869" ID="ID_1603304" MODIFIED="1783986655939" TEXT="Nachteil : GTK-spezifisches Detail leaked"/>
<node CREATED="1783986737099" ID="ID_1043412300" MODIFIED="1783986749522" TEXT="Nachteil: Thread-Bezug ist implizit"/>
</node>
<node CREATED="1783986666480" ID="ID_1770044442" MODIFIED="1783986681514" TEXT="Entscheidung: L&#xf6;sung-2">
<icon BUILTIN="yes"/>
<node CREATED="1783986693369" ID="ID_1838622028" MODIFIED="1783986710414" TEXT="GTK-Bez&#xfc;ge sind auch f&#xfc;r das EglDisplay wichtig"/>
<node CREATED="1783986712145" ID="ID_625334732" MODIFIED="1783986726835" TEXT="Dispatcher ist zentraler Bestandteil meiner Demo"/>
<node CREATED="1783986758056" ID="ID_223369723" MODIFIED="1783986770513" TEXT="auch das Thema &#xbb;Threading&#xab; geh&#xf6;rt in den Scope der Demo"/>
</node>
</node>
<node CREATED="1784045996386" ID="ID_1209517516" MODIFIED="1784046001812" TEXT="immer noch schwierig....">
<node CREATED="1784046009218" ID="ID_20536040" MODIFIED="1784046024950" TEXT="jetzt habe ich ein Objekt &#x2014; das sollte non-copyable sein"/>
<node CREATED="1784046116554" ID="ID_234421285" MODIFIED="1784046238573" TEXT="die Callback-Hook m&#xf6;chte ich aber trotzdem &#x2014; aus didaktischen Gr&#xfc;nden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Hier m&#246;chte ich sowohl den GTK-Code selber verbergen, alsauch dem Umstand da&#223; die Start-Lokik in der Applikation nicht ganz trivial ist, und mit dem Start des Players verwoben. Lesbarkeit ist eine weitere Motivation: man kann dadurch Dinge benennen
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784047131109" ID="ID_34162762" MODIFIED="1784047205771" TEXT="also geht es vor allem darum, die Form aufrecht zu erhalten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
dazu geh&#246;rt auch, keine &#187;Tricks&#171; anzuwenden und keine schlechten Praktiken vorzuf&#252;hren. Der Zustands-Tr&#228;ge sollte unique sein, ohne Wenn und Aber.
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1783986793999" ID="ID_1360252421" MODIFIED="1783986816919" TEXT="L&#xf6;sung: baue ein Player-Objekt im Start-Hook">
<node CREATED="1783986820215" ID="ID_360250150" MODIFIED="1783986836070" TEXT="das tritt an die Stelle wo bisher der EglContext stand"/>
<node CREATED="1783986838784" ID="ID_1847977458" MODIFIED="1783986861705" TEXT="L&#xf6;sung: das EglDisplay wird nun ein weiteres Objekt">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1783986866318" ID="ID_623423104" MODIFIED="1783986874503" TEXT="alles per Konstruktor-Verdrahtung"/>
</node>
</node>
<node COLOR="#1f267f" CREATED="1784076499094" ID="ID_1786219220" MODIFIED="1784222712766" TEXT="Player per Konstruktur-Initialisierung">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="back"/>
<node CREATED="1784076561463" ID="ID_1248489844" MODIFIED="1784076582686" TEXT="l&#xe4;uft im GUI-Thread">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1784076539919" ID="ID_1751781345" MODIFIED="1784076661520" TEXT="erzeuge hier den Dispatcher">
<linktarget COLOR="#308bd6" DESTINATION="ID_1751781345" ENDARROW="Default" ENDINCLINATION="95;-7;" ID="Arrow_ID_309586658" SOURCE="ID_1335290152" STARTARROW="None" STARTINCLINATION="77;235;"/>
</node>
<node CREATED="1784076520970" ID="ID_1201489587" MODIFIED="1784076537887" TEXT="mu&#xdf; auch die EGL-Initialisierung in den Konstruktor bringen"/>
<node CREATED="1784076675289" ID="ID_1648662317" MODIFIED="1784076685507" TEXT="unmittelbar hier den Thread starten"/>
</node>
</node>
</node>
<node COLOR="#434698" CREATED="1783644425567" FOLDED="true" ID="ID_238189215" MODIFIED="1784562158435" TEXT="Flow-Steuerung">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784052955974" ID="ID_1491751742" MODIFIED="1784307052218" TEXT="da nun Proactor &#x27f9; getrieben vom Timer-Tick">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784076700200" ID="ID_1239755482" MODIFIED="1784307048562" TEXT="Daten&#xfc;bergabe / Sichtbarkeit">
<node CREATED="1784076715698" ID="ID_102034340" MODIFIED="1784076740355" TEXT="Dispatcher &#xfc;bertr&#xe4;gt nur den Trigger &#xfc;ber die Thread-Grenzen"/>
<node CREATED="1784076755543" ID="ID_1514914957" MODIFIED="1784076772757" TEXT="mu&#xdf; Atomics / Barrieren einf&#xfc;hren f&#xfc;r die Datensicherheit"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#010101" CREATED="1784076776201" ID="ID_1043516833" MODIFIED="1784076975728" STYLE="fork" TEXT="Vorschlag von Claude: die State-Machine als Atomic implementieren">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<linktarget COLOR="#0c8e99" DESTINATION="ID_1043516833" ENDARROW="Default" ENDINCLINATION="556;-26;" ID="Arrow_ID_1416969408" SOURCE="ID_186490339" STARTARROW="None" STARTINCLINATION="1283;82;"/>
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1784076979882" ID="ID_1129579308" MODIFIED="1784421369960" TEXT="Bemerkenswert">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="back"/>
<node BACKGROUND_COLOR="#eae5a4" COLOR="#351d75" CREATED="1784076979882" ID="ID_1843330900" MODIFIED="1784421405261" TEXT="das hat sich durch die Konversation so ergeben">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...es war nicht so, da&#223; Claude diese &#8222;Idee gehabt&#8220; h&#228;tte &#8212; denn ich hatte die Konversation ja so gef&#252;hrt, da&#223; Claude mir meine Konzept-Ans&#228;tze validiert und verfeinert. Dann habe ich das Prinzip formuliert, da&#223; f&#252;r Async-IO irgendwo eine State-Machine sein mu&#223;. Claude hat das aufgegriffen, validiert und versch&#228;rft; und damit war offensichtlich geworden, da&#223; man diese State-Flag als Atomic auslegen kann. Das habe ich in dem Moment genauso &#187;offensichtlich&#171; gesehen, und Claude hat es ebenso formuliert.
</p>
<p>
Warum ich hier nochmal nachzeichne, wie das zustandegekommen ist:
</p>
<ul>
<li>
weil ich allein da nicht draufgekommen w&#228;re
</li>
<li>
aber weil es offensichtlich nicht von Claude stammt
</li>
</ul>
<p>
&#10233; das wirft ein Licht darauf, wie dieses <i>scheinbar intelligente &#187;Generieren&#171; funktioniert, </i>auf Basis einer industriellen Daten-Technik, die Plausibilit&#228;ten integriert und interpoliert.
</p>
</body>
</html></richcontent>
<font NAME="SansSerif" SIZE="12"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#99005b" CREATED="1784421416065" ID="ID_428576666" MODIFIED="1784421838679" TEXT="und diese plausible Schlu&#xdf;folgerung ist fehlerhaft">
<arrowlink COLOR="#d8024e" DESTINATION="ID_419323733" ENDARROW="Default" ENDINCLINATION="580;-47;" ID="Arrow_ID_64123671" STARTARROW="None" STARTINCLINATION="1203;65;"/>
<icon BUILTIN="smiley-oh"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1784079033427" ID="ID_1573408699" MODIFIED="1784079050907" TEXT="Zustands&#xfc;berg&#xe4;nge">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="info"/>
<node CREATED="1784078717834" ID="ID_17978925" MODIFIED="1784078954065" TEXT="IO beauftragen: FREE &#x27f6; READ"/>
<node CREATED="1784078958419" ID="ID_1531715805" MODIFIED="1784221555857" TEXT="&#xdc;bergabe an Display: READ &#x27f6; FEED"/>
<node CREATED="1784165852364" ID="ID_721661485" MODIFIED="1784221545799" TEXT="Warten auf Display: FEED &#x27f6; SHOW">
<linktarget COLOR="#6574c5" DESTINATION="ID_721661485" ENDARROW="Default" ENDINCLINATION="925;77;" ID="Arrow_ID_86014624" SOURCE="ID_312946304" STARTARROW="None" STARTINCLINATION="397;-23;"/>
</node>
<node CREATED="1784078981634" ID="ID_1578413583" MODIFIED="1784221551696" TEXT="Frame-Flip: SHOW &#x27f6; FREE"/>
<node CREATED="1784165852364" ID="ID_849967229" MODIFIED="1784167346009" TEXT="Abbrunch/End-of-File: markiert durch STOP">
<linktarget COLOR="#6574c5" DESTINATION="ID_849967229" ENDARROW="Default" ENDINCLINATION="755;51;" ID="Arrow_ID_1693130420" SOURCE="ID_948621808" STARTARROW="None" STARTINCLINATION="411;-22;"/>
</node>
</node>
<node CREATED="1784078466234" ID="ID_424139171" MODIFIED="1784078496653">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
hier mu&#223; auch die <b>Backpressure</b>&#160;beachtet und realisiert werden
</p>
</body>
</html></richcontent>
<node CREATED="1784078502730" ID="ID_846472947" MODIFIED="1784078534574" TEXT="darf nur weitergehen, nachdem der vorherige Frame aufgegriffen wurde"/>
<node CREATED="1784078681486" ID="ID_1106864388" MODIFIED="1784078714572" TEXT="und darf nur neue IO beauftragen wenn der Zielpuffer vom Consumer freigegeben werden"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1784079572400" ID="ID_1393056375" MODIFIED="1784079586917" TEXT="wie bekommt der EglDisplayer die Daten?">
<node CREATED="1784079589221" ID="ID_1308906754" MODIFIED="1784079609606" TEXT="Optionen">
<node CREATED="1784079611026" ID="ID_870843631" MODIFIED="1784079835110" TEXT="Buffer-Ring k&#xf6;nnte global sichtbar sein">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Sofern er aus dem GUI-Thread alloziert wird, also bevor der Proactor-Thread startet, ist die Position f&#252;r beide Threads sichtbar (und unver&#228;nderlich)
</p>
</body>
</html></richcontent>
<node CREATED="1784079641676" ID="ID_595831960" MODIFIED="1784079776456" TEXT="eine currentFrameNr ebenso">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Diese w&#228;re dann ebenfalls teil der cross-Trade-Synchronisation (ebenfalls bewirkt durch release-Semantik auf dem State-Atomic)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784079653178" ID="ID_1804993764" MODIFIED="1784079727230" TEXT="oder der Displayer hat intern seine eigene FrameNr">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...nur als lokale Variable, die er jeweils hochz&#228;hlt, wenn er einen Trigger bekommt (Nachteil: duplizierter State, dessen Konsistenz sich nur implizit ergibt und nicht offensichtlich ist)
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1784079838160" ID="ID_1763616932" MODIFIED="1784080020991" TEXT="k&#xf6;nnte dem Displayer direkt gegeben werden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das w&#228;re dann ein Pointer (const void *); seine Sichtbarkeit ergibt sich auch hier aus dem atomic-State
</p>
</body>
</html></richcontent>
<node CREATED="1784079873496" ID="ID_714454620" MODIFIED="1784079881936" TEXT="kann aber nicht per Dispatcher erfolgen"/>
<node CREATED="1784079882711" ID="ID_102892347" MODIFIED="1784079907595" TEXT="mu&#xdf; dann ein Datenfeld sein (sinnvollerweise im Displayer)"/>
</node>
</node>
<node CREATED="1784080062495" ID="ID_254917759" MODIFIED="1784080174245" TEXT="die zuletzt genanne M&#xf6;glichkeit erscheint mir am nat&#xfc;rlichsten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...da ich immer in Zust&#228;ndigkeiten denke, ist es mir unsympatisch, einen Satz gemeinsamer Zustands-Variablen zu verwenden
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784080203172" ID="ID_952531619" MODIFIED="1784222609101" TEXT="daraus ergibt sich die Datenstruktur">
<icon BUILTIN="yes"/>
<node CREATED="1784080214847" ID="ID_1165930889" MODIFIED="1784080245515" TEXT="und zwar geh&#xf6;ren damit die Buffer dem Proactor-Thread"/>
<node CREATED="1784080390813" ID="ID_1044489570" MODIFIED="1784080418199" TEXT="Allocation und Ownership">
<node CREATED="1784080461760" ID="ID_1762147278" MODIFIED="1784080535764" TEXT="Buffer sehr gro&#xdf; &#x27f9; einzeln allozieren">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das gilt f&#252;r ein Prod-System, in dem der Speicher framentiert ist, und man vermutlich Buffer-Pools hat
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1784080449077" ID="ID_1803805054" MODIFIED="1784080659901" TEXT="einfach w&#xe4;re ein riesiges Array auf dem Heap">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
F&#252;r die Demo ist das die offensichtliche L&#246;sung: man bekommt unique-ownership und Subscript-Operator einfach vom std::unique_ptr. Wenn man den notwendigen Speicher nicht bekommt, dann l&#228;uft die Demo eh nicht, also wozu die Umst&#228;nde?
</p>
</body>
</html></richcontent>
<icon BUILTIN="back"/>
</node>
</node>
<node CREATED="1784082520499" ID="ID_299429653" MODIFIED="1784082523281" TEXT="Buffer-Typ">
<node COLOR="#5b280f" CREATED="1784082524138" ID="ID_1665124664" MODIFIED="1784132193492" TEXT="der Einfachheit halber &#x27f9; definiert vom EglDisplay">
<icon BUILTIN="button_cancel"/>
<node CREATED="1784082547951" ID="ID_1261536746" MODIFIED="1784082582921" TEXT="ist ein std::array aus 8bit-Pixeln"/>
<node COLOR="#5b280f" CREATED="1784082595689" ID="ID_1135557355" MODIFIED="1784132191641" TEXT="verwende diese Typedef aber auch als &#xbb;Buffer&#xab;-Abstraktion">
<icon BUILTIN="stop-sign"/>
<node CREATED="1784132084657" HGAP="24" ID="ID_845039951" MODIFIED="1784132637445" TEXT="hier beginnt der Knoten" VSHIFT="7">
<arrowlink COLOR="#b92b54" DESTINATION="ID_1404935910" ENDARROW="Default" ENDINCLINATION="101;8;" ID="Arrow_ID_1619759457" STARTARROW="None" STARTINCLINATION="53;82;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
<node BACKGROUND_COLOR="#e7d8b6" CREATED="1784132196542" ID="ID_1214331051" MODIFIED="1784132240994" TEXT="besser: Globale Konfig &#x27f6; Template-Paramter">
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784083148598" ID="ID_504827142" MODIFIED="1784143583720" TEXT="Problem: Anordnung der Daten-Definition im Code">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784083166480" ID="ID_1404935910" MODIFIED="1784132116787" TEXT="mu&#xdf; hierzu auch das Enum definieren">
<linktarget COLOR="#b92b54" DESTINATION="ID_1404935910" ENDARROW="Default" ENDINCLINATION="101;8;" ID="Arrow_ID_1619759457" SOURCE="ID_845039951" STARTARROW="None" STARTINCLINATION="53;82;"/>
</node>
<node CREATED="1784083179322" ID="ID_275541270" MODIFIED="1784083198899" TEXT="und zum Buffer den atomic-state packen"/>
<node CREATED="1784083201959" ID="ID_697343104" MODIFIED="1784083233397" TEXT="Alignment beachten &#x27f9; besser separater Ring von State-Flags"/>
<node CREATED="1784083236834" ID="ID_1267317279" MODIFIED="1784131541424" TEXT="wie kann dann der Zugriff erfolgen?">
<arrowlink COLOR="#5a94d9" DESTINATION="ID_169121010" ENDARROW="Default" ENDINCLINATION="135;0;" ID="Arrow_ID_84801803" STARTARROW="None" STARTINCLINATION="76;6;"/>
</node>
<node CREATED="1784131317769" ID="ID_1516225282" MODIFIED="1784131336237" TEXT="das Anordnungs-Problem ist eine Sackgasse">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784131338269" ID="ID_1521754743" MODIFIED="1784131354300" TEXT="es ist zwar &#xbb;nur&#xab; ein Problem der Code-Anordnung"/>
<node CREATED="1784131354971" ID="ID_458757211" MODIFIED="1784131366411" TEXT="diese ist jedoch festgelegt">
<node CREATED="1784131367993" ID="ID_55736035" MODIFIED="1784131407585" TEXT="durch die Forderung nach Lesbarkeit (&#xd83e;&#xdc32; Demo-Code)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
hei&#223;t: hier gibt es keine M&#246;glichkeit, <i>ein Auge zuzudr&#252;cken</i>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784131409804" ID="ID_359711423" MODIFIED="1784131419742" TEXT="durch das einmal gew&#xe4;hlte Domain-Scoping"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1784131432702" ID="ID_1143489272" MODIFIED="1784143579660" TEXT="L&#xf6;sung: Zugriff vom Datentyp trennen">
<icon BUILTIN="button_ok"/>
<node CREATED="1784131442690" ID="ID_656100547" MODIFIED="1784131483235" TEXT="dadurch bleibt das Scoping unbedingt erhalten"/>
<node CREATED="1784131484193" ID="ID_169121010" MODIFIED="1784131533952" TEXT="Zugriff als Funktion darstellen &#x27f9; &#x3bb;">
<linktarget COLOR="#5a94d9" DESTINATION="ID_169121010" ENDARROW="Default" ENDINCLINATION="135;0;" ID="Arrow_ID_84801803" SOURCE="ID_1267317279" STARTARROW="None" STARTINCLINATION="76;6;"/>
</node>
<node CREATED="1784136965047" ID="ID_1744030854" MODIFIED="1784137036831" TEXT="zu kurz gedacht: es ist eine Zugriffs-Klammer">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Eine Operation zum Zugriff und eine Operation um den abgeschlossenen Zugriff zu markieren; zudem gibt es auch noch den Dispatcher.
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784137038242" ID="ID_1199476075" MODIFIED="1784143571509" TEXT="dann doch ein klassisches OO-Callback-Interface">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784143662545" ID="ID_1198363494" MODIFIED="1784307056010" TEXT="Event-Handler">
<node COLOR="#338800" CREATED="1784143667543" ID="ID_1705410666" MODIFIED="1784152302590" TEXT="Setup der Event-Verarbeitung">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1784143709139" ID="ID_1508199132" MODIFIED="1784151704956" TEXT="File &#xf6;ffnen">
<icon BUILTIN="button_ok"/>
<node CREATED="1784145655032" ID="ID_815825627" MODIFIED="1784145664817" TEXT="macht man das mit C++?"/>
<node CREATED="1784145665437" ID="ID_1276445757" MODIFIED="1784145828191" TEXT="besser direkt mit den POSIX-Funktionen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Mehrere Argumente daf&#252;r: man k&#246;nnte die low-level-Flags setzen (wie <code>O_CLOEXEX, O_NOFOLLOW, </code>oder gar <code>O_DIRECT</code>). Das &#214;ffnen ist <i>atomic,</i>&#160; d.h. das File kann nicht mehr gel&#246;scht/verschoben werden beform man das Filehandle hat (was bei einem getrennten STAT und Path-Check durchaus m&#246;glich ist)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784147238004" ID="ID_973311307" LINK="https://man7.org/linux/man-pages/man2/open.2.html" MODIFIED="1784147251992" TEXT="man: open()"/>
</node>
<node COLOR="#338800" CREATED="1784143714978" ID="ID_127436641" MODIFIED="1784151706946" TEXT="URings anlegen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1784143731216" ID="ID_101354381" MODIFIED="1784151710995" TEXT="Timer aktivieren">
<icon BUILTIN="button_ok"/>
<node CREATED="1784151717872" ID="ID_1035839641" MODIFIED="1784151726466" TEXT="das ist eine spezielle Submission in den URing"/>
<node BACKGROUND_COLOR="#e6dfa8" COLOR="#690f14" CREATED="1784151807158" ID="ID_161068537" MODIFIED="1784152246318" TEXT="&#x27f9; mu&#xdf; URing um +1 Slot gr&#xf6;&#xdf;er dimensionieren">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Begr&#252;ndung
</p>
<ul>
<li>
da wir stets <i>in bulk</i>&#160;die Submissions hinzuf&#252;gen <i>und erst danach (synchronisiert)</i>&#160;den Output antriggern, k&#246;nnen das maximal so viele Eintr&#228;ge sein, wie wir Buffer haben
</li>
<li>
<i>zus&#228;tzlich</i>&#160;wird ein Eintrag ben&#246;tigt, um am Anfang auch den periodischen Timer in Gang zu setzen
</li>
<li>
eben dieser <i>eine zus&#228;tzliche Eintrag</i>&#160;gen&#252;gt auch, um jeweils noch <i>ein</i>&#160;Timer-Event zu empfangen
</li>
<li>
weitere Completions k&#246;nnen nicht kommen, da wir nicht mehr Submissions abgeschickt haben
</li>
<li>
weitere Timer-Events k&#246;nnten kommen, falls wir zum Entnehmen und &#220;bergeben mehr als einen Timer-tick brauchen (unwahrscheinlich, aber nicht auszuschlie&#223;en). In einem solchen Fall w&#252;rden schlimmstenfalls hinten weitere Timer-Events &#8222;runterfallen&#8220; (wobei aktuelle Kernel ein internes Backlog haben). Sollten wir dergestalt Timer-Events verpassen, sind sie aber auch schon &#252;berholt, und das n&#228;chste regul&#228;re Event wird uns wieder weiterschieben
</li>
</ul>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1784151734786" ID="ID_546021072" MODIFIED="1784151801321" TEXT="verwende hier meine Hilfsfunktion f&#xfc;r Chrono &#x27fc; Kernel-Timespec">
<arrowlink COLOR="#5b8796" DESTINATION="ID_918051178" ENDARROW="Default" ENDINCLINATION="-181;1174;" ID="Arrow_ID_1798992367" STARTARROW="None" STARTINCLINATION="-274;12;"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1784143738263" ID="ID_1385880788" MODIFIED="1784222595782" TEXT="Handler-Loop">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1784143781367" ID="ID_1463866164" MODIFIED="1784165740325" TEXT="gelesene Daten entgegennehmen">
<icon BUILTIN="button_ok"/>
<node CREATED="1784165743594" ID="ID_465943099" MODIFIED="1784165755001" TEXT="ERRNO steckt im cqe.res">
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1784165759121" HGAP="34" ID="ID_469358369" MODIFIED="1784165775260" TEXT="mache hier aber keine Fehlerbehandlung...." VSHIFT="4">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node CREATED="1784165783214" ID="ID_907378266" MODIFIED="1784165801510" TEXT="short-reads erkennen &#x27f9; Playback stoppen">
<node CREATED="1784165802955" ID="ID_165426868" MODIFIED="1784165813591" TEXT="das geht bei dieser Konstrollstuktur nur indirekt"/>
<node COLOR="#435e98" CREATED="1784165814417" ID="ID_948621808" MODIFIED="1784167329763" TEXT="f&#xfc;hre dazu eine weitere Status-Auspr&#xe4;gung ein: STOP">
<arrowlink COLOR="#6574c5" DESTINATION="ID_849967229" ENDARROW="Default" ENDINCLINATION="755;51;" ID="Arrow_ID_1693130420" STARTARROW="None" STARTINCLINATION="411;-22;"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1784143790590" ID="ID_1916682510" MODIFIED="1784152292235" TEXT="neue Leseauftr&#xe4;ge absetzen">
<icon BUILTIN="button_ok"/>
<node CREATED="1784152255150" ID="ID_1732543149" MODIFIED="1784152264977" TEXT="lagere das in eine Hilfsfunktion aus"/>
<node CREATED="1784152265502" ID="ID_861900858" MODIFIED="1784152274216" TEXT="diese orientiert sich nur an den freien Slots"/>
<node CREATED="1784152276235" ID="ID_812423922" MODIFIED="1784152289135" TEXT="&#x27f9; Backpressure und anfangs alle Slots">
<icon BUILTIN="idea"/>
</node>
</node>
<node COLOR="#338800" CREATED="1784143798563" ID="ID_532286724" MODIFIED="1784168674393" TEXT="Time-Tick : Frame weiterschalten">
<icon BUILTIN="button_ok"/>
<node CREATED="1784166180437" ID="ID_411616254" MODIFIED="1784166202948">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
verwende hier den zweiten Cursor: <font face="Monospaced" color="#271bd4">nextShow_</font>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784166214698" ID="ID_255228689" MODIFIED="1784166237247" TEXT="dar&#xfc;ber auf den State dieses Buffer-Slot zugreifen"/>
<node CREATED="1784166238079" ID="ID_503678940" MODIFIED="1784166404098" TEXT="wenn Daten da sind (state == SHOW) &#x27f9; trigger Displayer">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...und zwar via Glib::Dispatcher &#10230; GUI-Thread.
</p>
<p>
Der zugeh&#246;rige Handler-Code l&#228;uft dann bei n&#228;chster Gelegenheit in der GUI-Event-Loop, und holt sich per Callback (Interface PixelFeed) die Daten; in diesem Callback mu&#223; die Read-Barrier realisiert sein, damit der GUI-Thread alle vor diesem Punkt erfolgten Daten&#228;nderungen auch tats&#228;chlich sieht
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1784166414946" ID="ID_1720545051" MODIFIED="1784166498112" TEXT="wenn hier Short-Read markiert &#x27f9; Player anhalten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Beachte: das darf erst hier passieren, weil wir hier den n&#228;chst niedersten erwarteten Frame anschauen; da wir immer etwas im Voraus lesen, werden wir auch ein end-of-File schon einige Ticks fr&#252;her markieren, m&#252;ssen aber die Schleife noch solange weiterlaufen lassen, bis die letzten erfolgreich gelesenen Frames in die Anzeige &#252;bertragen wurden
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#efd6b7" COLOR="#690f14" CREATED="1784166503838" ID="ID_645230473" MODIFIED="1784307041196" TEXT="Bei genauerer Betrachtung : t&#xfc;ckisches Korrektheits-Problem hier">
<icon BUILTIN="broken-line"/>
<node CREATED="1784166547264" ID="ID_225348495" MODIFIED="1784166564736" TEXT="und zwar k&#xf6;nnte der GUI-Thread &#xfc;berlastet sein, und die Daten nicht rechzeitig abholen"/>
<node CREATED="1784166577960" ID="ID_1754845143" MODIFIED="1784166592939" TEXT="damit k&#xf6;nnte der n&#xe4;chste Tick passieren, w&#xe4;hrend der GUI-Thread grade arbeitet"/>
<node CREATED="1784166593774" ID="ID_383603118" MODIFIED="1784166605762" TEXT="oder vorher, bevor die Daten &#xfc;berahupt &#xfc;bernommen wurden"/>
<node CREATED="1784166606710" ID="ID_499843773" MODIFIED="1784166618527" TEXT="in beiden F&#xe4;llen ist der Cursor inkonsitent"/>
<node CREATED="1784166652416" ID="ID_261339357" MODIFIED="1784166866154">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
brauche doch einen 3.Cursor: <font face="Monospaced" color="#5f15de">currShow_</font>
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#d9b995" COLOR="#690f14" CREATED="1784165814417" ID="ID_312946304" MODIFIED="1784221578895" TEXT="mu&#xdf; zwingend weitere State-Transition einf&#xfc;rhen: FEED">
<arrowlink COLOR="#6574c5" DESTINATION="ID_721661485" ENDARROW="Default" ENDINCLINATION="925;77;" ID="Arrow_ID_86014624" STARTARROW="None" STARTINCLINATION="397;-23;"/>
<arrowlink COLOR="#a03127" DESTINATION="ID_194548529" ENDARROW="Default" ENDINCLINATION="373;0;" ID="Arrow_ID_726120332" STARTARROW="None" STARTINCLINATION="-39;152;"/>
<icon BUILTIN="yes"/>
<node CREATED="1784167398651" ID="ID_977847492" MODIFIED="1784167422438" TEXT="denn der 3.Cursor kann erst hier bewegt werden"/>
<node CREATED="1784167422935" ID="ID_953106086" MODIFIED="1784167433471" TEXT="und es ist nun der 3.Cursor, der vom GUI-Thread verwendet wird"/>
<node CREATED="1784167433959" ID="ID_1914570598" MODIFIED="1784167447134">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
also brauche ich die cross-Thread-Barriere <b>erst hier</b>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1783644430659" ID="ID_269686877" MODIFIED="1784562147673" TEXT="Aufrabe: Vorlauf steuern">
2026-07-10 02:57:34 +02:00
<node CREATED="1783644529049" ID="ID_486151338" MODIFIED="1783644875737" TEXT="zwei Phasen (Chase/Lock)">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
In der Chase-Phase werden blank-Frames ausgegeben, solange bis wir Frames mit gen&#252;gend Vorlauf im Speicher haben. Danach, in der Lock-Phase ist eine Relation zwischen der rotierenden Buffer-Position und dem aktuellen Flip gesetzt. Ab dem Punkt kann man N Frames im Voraus die IO-Aktion losschicken.
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
<node CREATED="1783644878986" ID="ID_629406693" MODIFIED="1783644997672" TEXT="Problem: Anfangs-Spitze">
<richcontent TYPE="NOTE"><html>
<head/>
2026-07-10 02:57:34 +02:00
<body>
<p>
Zu Beginn schicken wir M Frames auf den Weg; die brauchen u.U l&#228;nger. Sch&#246;n w&#228;re es nat&#252;rlich, wenn man diesen Selbs-regulierenden Mechanismus auch live zeigen k&#246;nnte
</p>
</body>
</html></richcontent>
2026-07-10 02:57:34 +02:00
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784142959996" ID="ID_1894186700" MODIFIED="1784562137504" TEXT="Ansatz: realisiere das durch &#xbb;Backpressure&#xab;">
<icon BUILTIN="idea"/>
<node CREATED="1784142980731" ID="ID_1146524396" MODIFIED="1784142995774">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
also <i>keine explizite</i>&#160;Steuerung
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784143310222" ID="ID_1598149960" MODIFIED="1784143340787" TEXT="vielmehr sorgt die feste zyklische Buffer-Struktur f&#xfc;r die Limitierung"/>
<node CREATED="1784143015199" ID="ID_218469149" MODIFIED="1784143039421" TEXT="zwei Phasen schreiten jeweils so schnell voran wie derzeig m&#xf6;glich">
<node CREATED="1784143040300" ID="ID_227838217" MODIFIED="1784143254426" TEXT="Phase-1 : read-Submissions beauftragen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ist jeweils nur m&#246;glich wenn der daf&#252;r vorgesehene Buffer bereits frei geworden ist
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784143055979" ID="ID_1727640820" MODIFIED="1784143309405" TEXT="Phase-2 : eingelesene Daten &#xfc;bergeben">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ist nur m&#246;glich wenn diese Daten f&#252;r den erwartungsgem&#228;&#223; n&#228;chsten Frame bereits da sind, und der unmittelbar vorausgegangene Frame schon komplett vom Video-Displayer &#252;bernommen wurde
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1784221175896" ID="ID_777175706" MODIFIED="1784222589807" TEXT="Ausreifen und Testen">
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1784221197676" ID="ID_888318010" MODIFIED="1784562127945" TEXT="Code-Verbesserungen">
<node CREATED="1784221201656" ID="ID_206094356" MODIFIED="1784221217727" TEXT="Getter im BufferDispatcher einf&#xfc;hren">
<node CREATED="1784221218666" ID="ID_847912873" MODIFIED="1784221225933" TEXT="f&#xfc;r current-state und current-frame"/>
<node CREATED="1784221226449" ID="ID_1575870011" MODIFIED="1784221251514" TEXT="verbirgt den kaskadierenden Zugriff &#xfc;ber den outer-Pointer"/>
<node CREATED="1784221253300" ID="ID_1527096674" MODIFIED="1784221274998" TEXT="macht au&#xdf;erdem die Verwendungsstelle lesbarer (Intention im Namen)"/>
</node>
<node CREATED="1784221286953" ID="ID_468705787" MODIFIED="1784221294691" TEXT="State-Flags umbenennen">
<node CREATED="1784221295711" ID="ID_194548529" MODIFIED="1784221395809" TEXT="die Bedeutung von SHOW hat sich ge&#xe4;ndert">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
im State SHOW pasiert jetzt gar nicht mehr das Display, sondern es bedeutet nun, da&#223; der Frame weitergegeben werden mu&#223;
</p>
</body>
</html></richcontent>
<linktarget COLOR="#a03127" DESTINATION="ID_194548529" ENDARROW="Default" ENDINCLINATION="373;0;" ID="Arrow_ID_726120332" SOURCE="ID_312946304" STARTARROW="None" STARTINCLINATION="-39;152;"/>
</node>
<node CREATED="1784221423989" ID="ID_1367029376" MODIFIED="1784221595584" TEXT="nenne diese Phase jetzt FEED">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
suche einen 4-Buchstaben-Namen, da bin ich &#196;sthet. PUSH w&#228;re auch denkbar, nat&#252;rlich w&#228;re PROPAGATE viel korrekter ;-)
</p>
</body>
</html></richcontent>
</node>
</node>
<node COLOR="#435e98" CREATED="1784335264402" ID="ID_494036485" MODIFIED="1784337690200" TEXT="IO-Laufzeiten messen">
<arrowlink COLOR="#a6fdfd" DESTINATION="ID_1315195836" ENDARROW="Default" ENDINCLINATION="-1219;90;" ID="Arrow_ID_462277871" STARTARROW="None" STARTINCLINATION="-89;575;"/>
<node CREATED="1784335284745" ID="ID_1701920818" MODIFIED="1784337685187" TEXT="es geht nur um eine diagnostische Ausgabe">
<icon BUILTIN="yes"/>
<node CREATED="1784335310132" ID="ID_74981723" MODIFIED="1784335319627" TEXT="hier wird eine Zeitreihe beobachtet">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1784335320658" ID="ID_1702163307" MODIFIED="1784335336932" TEXT="man kann aber nur jeden k-ten-Wert ausgeben (weil sonst zu schnell)"/>
<node CREATED="1784335337812" ID="ID_1692924948" MODIFIED="1784335361432" TEXT="&#x27f9; klassicher Fall f&#xfc;r einen exponentiellen-moving-average">
<node CREATED="1784335368476" ID="ID_77716704" MODIFIED="1784335539730" TEXT="siehe hauZu.mm">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
der &#187;alte Wert&#171; wird jeweils mit (N-1)/N multipliziert
</p>
<p>
n meiner Rationalisierung w&#228;re dann &#945; &#8788; 1/N&#160;&#160;&#10233; 1-&#945; = (N-1)/N
</p>
<p>
<font face="SansSerif, sans-serif"><b>D&#228;mpfungsfaktor &#945;</b></font>
</p>
<p>
EMA(i) = &#945; &#183; value(i) + (1- &#945;) &#183; EMA(i-1)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784335588727" ID="ID_1900875309" MODIFIED="1784335609726" TEXT="kann Mittelungs-Periode als Template-Parameter definieren"/>
</node>
</node>
<node CREATED="1784335615306" ID="ID_639063024" MODIFIED="1784335631453" TEXT="Code-Lesbarkeit: sollte Timer komplett &#xbb;daneben&#xab; stellen">
<node COLOR="#338800" CREATED="1784335636544" ID="ID_267882121" MODIFIED="1784337678294" TEXT="definiere eine ma&#xdf;geschneiderte Timer-Klasse in den &#xbb;commons&#xab;">
<icon BUILTIN="button_ok"/>
<node CREATED="1784335697343" ID="ID_1157691393" MODIFIED="1784335705962" TEXT="verwendet ein Array von Einzel-Timern"/>
<node CREATED="1784335706628" ID="ID_848237208" MODIFIED="1784335719033" TEXT="Zeitmessugs-Code mit std::chrono"/>
<node CREATED="1784335719545" ID="ID_1863925346" MODIFIED="1784335733140" TEXT="siehe microbenchmark.hpp"/>
</node>
<node COLOR="#435e98" CREATED="1784335673422" ID="ID_1048715353" MODIFIED="1784337675374" TEXT="die wird dann in eine globale Variable gepackt und gut is">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node CREATED="1784229335474" ID="ID_476891533" MODIFIED="1784229337398" TEXT="Fragen">
<node COLOR="#5b280f" CREATED="1784229339746" ID="ID_655619575" MODIFIED="1784423380988" TEXT="bisher habe ich in addNext... die mem_order_seq_cst">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...weil das der Default ist, ich hab deshalb n&#228;mlich gar keine angegeben
</p>
</body>
</html></richcontent>
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
<icon BUILTIN="button_cancel"/>
<node CREATED="1784229415567" ID="ID_572644187" MODIFIED="1784229431525" TEXT="g&#xe4;be es einen Unterschied zu mem_order_acquire?"/>
<node CREATED="1784229436588" ID="ID_1851133925" MODIFIED="1784229459165" TEXT="oder wird beim Lesen keine Write-Barrier erzeugt?"/>
<node CREATED="1784423360704" ID="ID_104238528" LINK="#ID_524518128" MODIFIED="1784423391250" TEXT="hat sich durch die Umstellung auf den atomic-Buffer-Pointer erledigt"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1784222841942" FOLDED="true" ID="ID_74519525" MODIFIED="1784562116757" TEXT="zum Laufen bringen">
<icon BUILTIN="button_ok"/>
<node CREATED="1784223517618" ID="ID_609106899" MODIFIED="1784562112157" TEXT="startet schon mal bis zum &#xd6;ffnen des File">
<icon BUILTIN="ksmiletris"/>
</node>
<node COLOR="#435e98" CREATED="1784223529015" ID="ID_1980887771" MODIFIED="1784562103677" TEXT="brauche nun ein Testvideo">
<icon BUILTIN="yes"/>
<node CREATED="1784223536006" FOLDED="true" ID="ID_44452226" MODIFIED="1784562096327" TEXT="Test-1:Animation von letztem Jahr">
<icon BUILTIN="full-1"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#010101" CREATED="1784226368203" ID="ID_1901417329" MODIFIED="1784226455132" STYLE="fork" TEXT="lasse mir von Claude ein Aufruf-Programm erzeugen">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="idea"/>
<node CREATED="1784226456781" ID="ID_401970861" MODIFIED="1784226467897" TEXT="hinzugef&#xfc;gt zum letztj&#xe4;hrigen Froscon-Projekt"/>
<node CREATED="1784226468341" ID="ID_399827309" MODIFIED="1784226488382" TEXT="als neuer Unterordner examples/raw"/>
<node CREATED="1784226522365" ID="ID_303378535" MODIFIED="1784226528208" TEXT="verwendet image-gen"/>
<node CREATED="1784226528773" ID="ID_1747867217" MODIFIED="1784226537423" TEXT="schreibt ein Raw-Video ins aktuelle Verzeichnis"/>
</node>
<node CREATED="1784226886199" ID="ID_1477642542" MODIFIED="1784227084689" TEXT="anzeigen....">
<icon BUILTIN="back"/>
<node CREATED="1784226890979" ID="ID_634134790" MODIFIED="1784226920034" TEXT="ffplay">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 30 demovideo-320.raw
</p>
</body>
</html></richcontent>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1784226921919" ID="ID_454447584" MODIFIED="1784226963886" TEXT="vlc">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
vlc --demux rawvideo --rawvid-width 320 --rawvid-height 240 --rawvid-chroma RV24 --rawvid-fps 30 demovideo-320.raw
</p>
</body>
</html></richcontent>
<icon BUILTIN="wizard"/>
</node>
</node>
<node CREATED="1784304949037" ID="ID_519850342" MODIFIED="1784304954254" TEXT="demovideo-320.raw">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
</node>
</node>
<node CREATED="1784297356802" FOLDED="true" ID="ID_1171942440" MODIFIED="1784562099140" TEXT="Test-2: ein HD-Video">
<icon BUILTIN="full-2"/>
<node CREATED="1784297366839" ID="ID_760634306" MODIFIED="1784297370218" TEXT="Idee: Feuerwerk">
<node CREATED="1784297376716" ID="ID_260423797" MODIFIED="1784297399265" TEXT="ist abstrakt genug">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...so da&#223; es ohne Kontext sofort erkennbar ist
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784297400412" ID="ID_1396606851" MODIFIED="1784297467112" TEXT="wirkt auf verschiedener Skala">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wer hinten sitzt oder nur den Livestream sieht, bekommt ein stark reduziertes Bild mit schlechtem Kontrast
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784297478369" ID="ID_1211159911" MODIFIED="1784297928984" TEXT="wirkt als &#xbb;Hingucker&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Idealerweise sollte man f&#252;r diese Demo nichts weiter erl&#228;utern m&#252;ssen &#8212; und es sollte auf einer anderen Ebene nochmal <i>eine Closure erzeugen. </i>
</p>
<p>
</p>
<p>
Es handelt sich um einen &#187;Zaubertrick&#171;, erfordert also implizites Framing; beim Vortrag 2025 hat das nicht funktioniert, was m.E. daran lag da&#223; Benny an der Stelle immer so ungeschickt auf der festen Fenstergr&#246;&#223;e herumgeritten ist, und ich das nicht realisiert und rechtzeitig aufgegriffen habe
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784297929880" FOLDED="true" ID="ID_1630754208" MODIFIED="1784562087917" TEXT="suche Material">
<icon BUILTIN="yes"/>
<node CREATED="1784297943166" ID="ID_488286955" MODIFIED="1784298188764" TEXT="eigenes Material verwenden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das halte ich auf verschiedenen Ebenen f&#252;r sinnvoll. Eine ersichtlich <i>handgemachte</i>&#160; Aufnahme ist &#187;ein Video&#171; im betonten Sinn, es pa&#223;t in meinen Rhythmus und Stil, und ich hab trivialerweise die Rechte am Bild (letzteres k&#246;nnte problematisch sein bei einem &#246;ffentlich inszenierten Feuerwerk, d.h. die Aufnahme mu&#223; sofort ersichtlich einen dokumentarischen Charakter haben)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784298190694" ID="ID_104068729" MODIFIED="1784562083709" TEXT="Sommernachtstraum-2024">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das war ein ganz selten herausragendes Feuerwerk, und ich erinnere mich da&#223; mir einige sehr gut abgeschlossene Sequenzen gelungen sind
</p>
</body>
</html></richcontent>
<icon BUILTIN="button_cancel"/>
<node CREATED="1784298243470" ID="ID_396338130" MODIFIED="1784298274562" TEXT="Lumix/vidzzz/"/>
<node CREATED="1784298326663" ID="ID_125254865" MODIFIED="1784298916848" TEXT="00535.mts">
<node CREATED="1784299006300" ID="ID_539210641" MODIFIED="1784299124443" TEXT="ab 0:15">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
nach einem typischen Bouquet brechen an mehreren Stellen hell leuchtende orange-rote Kugeln auf, zuletzt sogar ganz vom Boden her; dabei wird die umgebende Szenerie am Olympiaberg einen Augenblick lang sichtbar. Diese Sequenz ist sehr kurz und kann gelooped werden
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784299320547" ID="ID_788676623" MODIFIED="1784299379983" TEXT="ab 4:05">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das w&#228;re dann aber eine l&#228;ngere Sequenz, beginnend mit den goldgelben Garben am untern Bildrand, und dann ein Bouquet aus gro&#223;en Kugeln, die ihre Farbe von Blau &#252;ber Rot entfalten. Klassisches Feuerwerk
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1784298340820" ID="ID_1114649715" MODIFIED="1784298919194" TEXT="00536.mts">
<node CREATED="1784299605622" ID="ID_731311262" MODIFIED="1784299746166" TEXT="1:35 - 2:20">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das ist die charakteristischte und dichteste Sequenz in diesem Feuerwerk gewesen; ein seltener Fall in dem die Kombination &#187;Rot-Gr&#252;n&#171; &#252;berzeugend eingesetzt ist und nicht blo&#223; &#8222;bunt&#8220; wirkt
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784299495478" ID="ID_913177207" MODIFIED="1784299741304" TEXT="ab 3:00">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
auch das eine ehr langsame und zeitlose Sequenz; besonders im Zusammenspiel mit den Pulverwolken und Spuren am Ende
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1784298343553" ID="ID_971255026" MODIFIED="1784562079274" TEXT="Silvester-2023">
<icon BUILTIN="back"/>
<node CREATED="1784298243470" ID="ID_340204401" MODIFIED="1784298274562" TEXT="Lumix/vidzzz/"/>
<node BACKGROUND_COLOR="#e6e4b0" CREATED="1784298326663" ID="ID_1952065564" MODIFIED="1784299846209" TEXT="00444.mts">
<icon BUILTIN="back"/>
<node CREATED="1784298445620" ID="ID_1080755886" MODIFIED="1784298452200" TEXT="ab ~ 1:15"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1784298592488" ID="ID_735279780" MODIFIED="1784298826077" TEXT="auf identifizierbare Personen achten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Wegen dem Recht am Bild. Zwar ist die Rechtslage in Deutschland eindeutig (Panoramafreiheit sowie Geschehen der relativen Zeitgeschichte), jedoch k&#246;nnte es &#196;rger geben, wenn jemand erkennbar prominent im Bild ist. Bei der bezeichneten Szene w&#228;re das vor 1:15 der Fall, wo mehrere Leute direkt im Vordergrund Gruppen-Selfies machen; das k&#246;nnte man m.E. unbesorgt einsetzen, wenn man die Gesamt-Szene zeigt, aber f&#252;r einen kurzen Ausschnitt sollte ich besser vorsichtig sein. Daher w&#228;hle ich die n&#228;chste Sequenz, in der selbst in der Gruppe mit den Wunderkerzen keine Gesichter prominent erkennbar sind
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1784298493000" ID="ID_403555231" MODIFIED="1784298588968" TEXT="da ist mir eine zetlose Szene gelungen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Die Kamera bewegt sich fl&#252;ssig nach links durch eine gut gelaunte Menschenmenge, eine Gruppe mit Wunderkerzen, eine Steinskulptur, dahinter die Flu&#223;br&#252;cke randvoll mit einer Menschenmasse und ein irres Feuerwerk dar&#252;ber, schon halb im Pulverdampf
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1784299751980" ID="ID_278948854" MODIFIED="1784299826938" TEXT="das isses! mu&#xdf; nicht weiter suchen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
(ich h&#228;tte schon eine Menge mehr, aber das hier erf&#252;llt bereits alles, was ich mir im Kontext hier w&#252;nsche)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784301781426" ID="ID_167806190" MODIFIED="1784301793830" TEXT="extrahieren: 1:18 - 1:38">
<node CREATED="1784301815838" ID="ID_919961155" MODIFIED="1784302154962" TEXT="20sec &#xe0; 50fps &#x2259; 1000 Frames"/>
<node CREATED="1784302490121" ID="ID_278799818" MODIFIED="1784302496324" TEXT="ffmpeg -r 50 -i ~/Platz/Lumix/vidzzz/00444.mts -ss 0:1:18 -vframes 1000 -vcodec copy -an test.mkv"/>
<node CREATED="1784302618850" ID="ID_72123433" MODIFIED="1785882623797" TEXT="Originalgr&#xf6;&#xdf;e: 1920 x 1080 &#x27fc; 5.9 MiB/frame RAW in RGB24"/>
<node CREATED="1784302728769" ID="ID_46873234" MODIFIED="1784303613645" TEXT="ffmpeg -r 50 -i ~/Platz/Lumix/vidzzz/00444.mts -ss 0:1:18 -vframes 1000 -an -vf &quot;scale=1200:675,format=rgb24&quot; -f rawvideo -pix_fmt rgb24 demovideo-1200.raw"/>
<node CREATED="1784303736468" ID="ID_1648226456" MODIFIED="1784306990152">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
bitrate=972000.0kbits/s video:2373047KiB&#160;&#160;&#8793; <b><font color="#890707">2.3</font></b><font color="#890707">&#160; GiB</font>
</p>
</body>
</html></richcontent>
<linktarget COLOR="#7df3c4" DESTINATION="ID_1648226456" ENDARROW="Default" ENDINCLINATION="-217;0;" ID="Arrow_ID_618400356" SOURCE="ID_373290565" STARTARROW="None" STARTINCLINATION="-2269;256;"/>
2026-08-08 19:40:17 +02:00
<linktarget COLOR="#5bfe3a" DESTINATION="ID_1648226456" ENDARROW="Default" ENDINCLINATION="-269;14;" ID="Arrow_ID_1321145390" SOURCE="ID_1577242171" STARTARROW="None" STARTINCLINATION="238;17;"/>
</node>
<node CREATED="1784304034683" ID="ID_428549034" MODIFIED="1784304887052" TEXT="anzeigen mit...">
<icon BUILTIN="idea"/>
<node CREATED="1784304051481" ID="ID_1707477874" MODIFIED="1784304052333" TEXT="ffplay -f rawvideo -pixel_format rgb24 -video_size 1200x675 -framerate 50 demovideo-1200.raw"/>
<node CREATED="1784304855337" ID="ID_419748946" MODIFIED="1784304884718" TEXT="vlc --demux rawvideo --rawvid-width=1200 --rawvid-height=675 --rawvid-fps=50 --rawvid-chroma=RV24 --vout=opengl demovideo-1200.raw">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
--vout war notwendig, da der Default (VDPAU) mit anscheinend mit dem Pixelformat nicht zurechtkommt
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1784304971029" ID="ID_1008974035" MODIFIED="1784305013409" TEXT="das Fenster ist deutlich kleiner als der Desktop und spielt fl&#xfc;ssig ab (selbst von Magnitic-Disk)">
<icon BUILTIN="info"/>
</node>
</node>
</node>
</node>
<node CREATED="1784304949037" ID="ID_1089334463" MODIFIED="1784304964219" TEXT="demovideo-1200.raw">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
</node>
</node>
<node CREATED="1784226886199" ID="ID_1400452740" MODIFIED="1784562001622" TEXT="RAW anzeigen....">
<icon BUILTIN="back"/>
<node CREATED="1784226890979" ID="ID_473596944" MODIFIED="1784562049044" TEXT="ffplay">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ffplay -f rawvideo -pixel_format rgb24 -video_size 1200x675 -framerate 50 demovideo-1200.raw
</p>
</body>
</html></richcontent>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1784226921919" ID="ID_1975886749" MODIFIED="1784562062109" TEXT="vlc">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
vlc --demux rawvideo --rawvid-width=1200 --rawvid-height=675 --rawvid-fps=50 --rawvid-chroma=RV24 --vout=opengl demovideo-1200.raw
</p>
</body>
</html></richcontent>
<icon BUILTIN="wizard"/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1784228106784" ID="ID_1212494407" MODIFIED="1784229520498" STYLE="fork" TEXT="Segfault">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1784228751285" ID="ID_1565658342" MODIFIED="1784228767139" TEXT="beim ersten initialen Bef&#xfc;llen der SQ"/>
<node CREATED="1784228768814" ID="ID_259879669" MODIFIED="1784228789008" TEXT="der Timer-Entry funktioniert"/>
<node CREATED="1784228840197" ID="ID_870664557" MODIFIED="1784228851823" TEXT="ein SQE kommt als NULL zur&#xfc;ck"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1784228853179" ID="ID_1537742880" MODIFIED="1784229512039" TEXT="AUA ... nextRead_ steht auf 7">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784228886607" ID="ID_630552952" MODIFIED="1784228889758" TEXT="wir wrappen">
<node CREATED="1784228902224" ID="ID_1676148614" MODIFIED="1784228918826" TEXT="(intern fa&#xdf;t die Queue sogar 8 Eintr&#xe4;ge)">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1784228920986" ID="ID_815377389" MODIFIED="1784239445118" TEXT="der State-Marker wurde nicht weitergeschaltet">
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1784235804029" ID="ID_1424148212" MODIFIED="1784235907976" TEXT="Fenster zu klein">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784235809692" ID="ID_1855255977" MODIFIED="1784235916712" TEXT="das window.set_size() wird ignoriert">
<icon BUILTIN="help"/>
</node>
<node CREATED="1784235819503" ID="ID_1683175695" LINK="https://stackoverflow.com/a/3582628/444796" MODIFIED="1784235920446" TEXT="Suche im Netz: set_resizable(false) zwingt auf den size-request zur&#xfc;ck">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das ist zwar nicht logisch, und auch nicht so dokumentiert, wurde aber von anderen Leuten bereits f&#252;r GTK-3 beobachtet
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node COLOR="#338800" CREATED="1784235892210" ID="ID_1028422738" MODIFIED="1784235902975" TEXT="L&#xf6;sung: set_size_request() direkt im launchPlayer()">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1784229521721" ID="ID_698829631" MODIFIED="1784238411088" TEXT="Alle Frames Slipped">
<icon BUILTIN="broken-line"/>
<node CREATED="1784238232017" ID="ID_1493418690" MODIFIED="1784238248280" TEXT="Anzeigebedingung greift nicht im Anfangszustand"/>
<node CREATED="1784238248956" ID="ID_1279441149" MODIFIED="1784238267938" TEXT="zu Beginn ist currShow &#x2261; nextShow">
<node CREATED="1784238311811" ID="ID_210721081" MODIFIED="1784238324834" TEXT="Bedingung pr&#xe4;ziser formulieren"/>
<node CREATED="1784238325286" ID="ID_782122885" MODIFIED="1784238407314">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<font color="#3a1f18" face="DejaVu Sans Mono" size="9pt">prevState </font><font color="#65533c" face="DejaVu Sans Mono" size="9pt">!=</font><font color="#3a1f18" face="DejaVu Sans Mono" size="9pt">&#160;</font><font color="#9d724e" face="DejaVu Sans Mono" size="9pt"><i>SHOW</i></font>
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
denn zur Anzeige wird der Slot auf <font color="#9d724e" face="DejaVu Sans Mono"><i>SHOW </i></font>gesetzt; zu pr&#252;fen ist also, da&#223; dieser Zustand sich ge&#228;ndert hat.
</p>
<p>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1784238412197" ID="ID_377076622" MODIFIED="1784239365101" TEXT="5 Frames angezeigt &#x2014; dann Slipped">
<icon BUILTIN="broken-line"/>
<node CREATED="1784239290031" ID="ID_826828158" MODIFIED="1784239308912" TEXT="im 5. &#x2259; 0.Slot steht READ"/>
<node CREATED="1784239309460" ID="ID_686652707" MODIFIED="1784239363002">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<font color="#642880" face="DejaVu Sans Mono"><b>io_uring_submit</b></font><font color="#11123a" face="DejaVu Sans Mono">(</font><font color="#65533c" face="DejaVu Sans Mono">&amp;</font><font color="#803435" face="DejaVu Sans Mono">uRing</font><font color="#11123a" face="DejaVu Sans Mono">)</font>&#160;&#160;vergessen
</p>
</body>
</html></richcontent>
<icon BUILTIN="broken-line"/>
</node>
</node>
<node BACKGROUND_COLOR="#174956" COLOR="#8dfd49" CREATED="1784239367168" HGAP="13" ID="ID_790023827" MODIFIED="1784239826448" STYLE="bubble" TEXT="Kaum macht mans richtig &#x2014; schon funktioniert&apos;s" VSHIFT="12">
<edge COLOR="#61fe5b" STYLE="bezier" WIDTH="thin"/>
<font NAME="SansSerif" SIZE="14"/>
<node COLOR="#054262" CREATED="1784239826448" ID="ID_273149802" MODIFIED="1784239872263" STYLE="fork" TEXT="auch getested: schnellere Wiedergabe">
<font NAME="SansSerif" SIZE="11"/>
</node>
<node COLOR="#054262" CREATED="1784239826448" ID="ID_776972591" MODIFIED="1784239931511" STYLE="fork" TEXT="getested: Playback-Stop bei end-of-file">
<font NAME="SansSerif" SIZE="11"/>
</node>
<node COLOR="#054262" CREATED="1784239826448" ID="ID_1233113947" MODIFIED="1784239901209" STYLE="fork" TEXT="getested: Fenster verschieben w&#xe4;hrend Widergabe">
<font NAME="SansSerif" SIZE="11"/>
</node>
<node COLOR="#054262" CREATED="1784239826448" ID="ID_1577242171" MODIFIED="1784307006942" STYLE="fork">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Wiedergabe von <b>972000 kBit/s</b>&#160;<i>l&#228;uft glatt</i>
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#5bfe3a" DESTINATION="ID_1648226456" ENDARROW="Default" ENDINCLINATION="-269;14;" ID="Arrow_ID_1321145390" STARTARROW="None" STARTINCLINATION="238;17;"/>
<font NAME="SansSerif" SIZE="11"/>
<icon BUILTIN="back"/>
</node>
<node COLOR="#054262" CREATED="1784239826448" ID="ID_1315195836" MODIFIED="1784337690200" STYLE="fork" TEXT="Beobachtung: &#x2205; IO ~ 1.2ms (mag HD)">
<linktarget COLOR="#a6fdfd" DESTINATION="ID_1315195836" ENDARROW="Default" ENDINCLINATION="-1219;90;" ID="Arrow_ID_462277871" SOURCE="ID_494036485" STARTARROW="None" STARTINCLINATION="-89;575;"/>
<font NAME="SansSerif" SIZE="11"/>
</node>
2026-07-10 02:57:34 +02:00
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1784421477265" ID="ID_1391027398" MODIFIED="1784561964725" TEXT="Code validieren und dokumentieren">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784421490377" ID="ID_839229493" MODIFIED="1784421553194" STYLE="fork" TEXT="lasse Claude-Code die Konsistenz &#xfc;berpr&#xfc;fen">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node BACKGROUND_COLOR="#f3bba9" COLOR="#fa002a" CREATED="1784421589967" ID="ID_419323733" MODIFIED="1784421838679" TEXT="Race im Synchronisationsmechnismus">
<linktarget COLOR="#d8024e" DESTINATION="ID_419323733" ENDARROW="Default" ENDINCLINATION="580;-47;" ID="Arrow_ID_64123671" SOURCE="ID_428576666" STARTARROW="None" STARTINCLINATION="1203;65;"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1784421650718" HGAP="39" ID="ID_682650657" MODIFIED="1784421708013" TEXT="Problem steckt auf der Lese-Seite" VSHIFT="9">
<icon BUILTIN="back"/>
</node>
<node CREATED="1784421659355" ID="ID_883501072" MODIFIED="1784421675151" TEXT="man braucht den Cursor bereits um auf den Slot zuzugreifen"/>
<node CREATED="1784421675731" ID="ID_22782051" MODIFIED="1784421691422" TEXT="aber erst der Zugriff auf den Slot konstituiert die Read-Barrier"/>
<node CREATED="1784421923608" ID="ID_1849827082" MODIFIED="1784422178172">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<i>rein zuf&#228;llig</i>&#160;funktioniert es aber trotzdem
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
und zwar, wie Claudes ausf&#252;hrt, weil unter Linux die Lese / Schreib-Kernel-Calls einen Syncrhonisationspunkt darstellen. Da der Glib::Dispatcher &#252;ber einen Pipe-Write/Read implementiert ist, f&#252;hrt bereits das Dispatch zu einer vollen Barrier, und daher ist es unter Linux ausgeschlossen, da&#223; der GUI-Thread noch einen alten, verschleppten Cursor-State sieht.
</p>
<p>
</p>
<p>
Das gilt aber nicht allgemein und f&#252;r andere Betriebssysteme und ist mithin nicht durch den C++-Standard gedeckt. Deshalb <i>beherrscht diese L&#246;sung</i>&#160;nicht das Problem, und die dargestellte Begr&#252;ndung ist nicht stichhaltig.
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#e2e0bd" COLOR="#435e98" CREATED="1784421763371" ID="ID_1187975455" MODIFIED="1784422182182" TEXT="mein L&#xf6;sungsansatz beruht darauf da&#xdf;, nur ein Zustand synchronisiert werden mu&#xdf;">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784422189692" ID="ID_524518128" MODIFIED="1784422226476" TEXT="Atomic von der State-Engine trennen &#x27f9; stattdessen ein std::atomic&lt;Buffer*&gt;">
<node CREATED="1784422263938" ID="ID_1098483559" MODIFIED="1784422275268" TEXT="das f&#xfc;hrt insgesamt zu einer deutlichen Vereinfachung"/>
<node CREATED="1784422275837" ID="ID_328441268" MODIFIED="1784422293595" TEXT="ich schlage daraufhin vor: die drei Cursor auf zwei zu reduzieren"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784422309123" ID="ID_975047310" MODIFIED="1784422325191" STYLE="fork" TEXT="beauftrage Claude eine entspr. L&#xf6;sung auszuarbeiten">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1784422331646" ID="ID_691393919" MODIFIED="1784422358057" TEXT="Vorschlag: den nextShow-Cursor erst beim &#xbb;reclaim&#xab; des Buffers inkrementieren"/>
<node CREATED="1784422475931" ID="ID_566892395" MODIFIED="1784422543922" TEXT="d.h. die Backpressure wird hier realisiert, indem erst danach der n&#xe4;chste Slot &#xfc;bpr&#xfc;ft wird"/>
<node CREATED="1784422546982" ID="ID_230854798" MODIFIED="1784422774468" TEXT="diese L&#xf6;sung gef&#xe4;llt mir: Logik hat jetzt weitgehend die Form einer State-Engine"/>
<node CREATED="1784422779995" ID="ID_1873586884" MODIFIED="1784422802079" TEXT="Claude schl&#xe4;gt vor, ein Switch-Case zu verwenden &#x2014; auch das eine gute Idee"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#8c054b" CREATED="1784422824049" ID="ID_1421936373" MODIFIED="1784422874139">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
weiterer <i>theoretischer</i>&#160;Race: die playing-Steuervariable
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784422887697" ID="ID_1880556582" MODIFIED="1784423000837" TEXT="extrem unwahrscheinlich zu triggern">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
dazu m&#252;&#223;te das GUI sofort terminieren, w&#228;hrend der Proactor-Thread grade erst startet &#10233; dann w&#252;rde dort in der Loop ohne weiteren Check playing_ = true gesetzt, und damit ginge die Shutdown-Signalisierung verloren
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1784423002330" ID="ID_191859221" MODIFIED="1784423029018" TEXT="Resultat w&#xe4;re, da&#xdf; der Proactor-Thread dann h&#xe4;ngt und irgenwann blockt"/>
<node CREATED="1784423036125" ID="ID_1995226372" MODIFIED="1784423050746" TEXT="und die Applikation w&#xfc;rde im Shutdown verklemmen (im thread.join)"/>
<node COLOR="#338800" CREATED="1784423055506" ID="ID_616531880" MODIFIED="1784423089086" TEXT="Mein Vorschlag: der Player ist sowiso &#xbb;RAII&#xab; &#x27f9; also gleich playing_ = true von Anfang an">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1784423469985" ID="ID_1639097185" MODIFIED="1784423662654">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<u>Hinweis</u>: in Prod-Code sollte man jedes <font color="#5b3131" face="Monospaced">io_uring_get_sqe() != nullptr</font>&#160;&#160;pr&#252;fen
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Begr&#252;ndung: im Moment kann das nicht passieren, da die Queue ausreichend dimensioniert ist auf RING_SIZ + 1.&#160;&#160;Sollte sich sowas aber unter Maintainnance &#228;ndern, dann k&#246;nnte man in einen Segfault laufen! (Ja das sehe ich genauso und h&#228;tte es in Prod-Code tats&#228;chlich in eine Hilfsfunktion gepackt; hier aber habe ich bewu&#223;t aus didaktischen Gr&#252;nden darauf verzichtet)
</p>
</body>
</html></richcontent>
<icon BUILTIN="clanbomber"/>
</node>
<node CREATED="1784423094670" ID="ID_891536459" MODIFIED="1784423144970">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
au&#223;erdem habe ich vergessen:&#160;<font color="#642880" face="DejaVu Sans Mono" size="9pt"><b>io_uring_queue_exit</b></font><font color="#11123a" face="DejaVu Sans Mono" size="9pt">(</font><font color="#65533c" face="DejaVu Sans Mono" size="9pt">&amp;</font><font color="#9c2303" face="DejaVu Sans Mono" size="9pt">uRing</font><font color="#11123a" face="DejaVu Sans Mono" size="9pt">)</font><font color="#65533c" face="DejaVu Sans Mono" size="9pt">;</font>
</p>
</body>
</html></richcontent>
</node>
</node>
2026-08-09 20:28:35 +02:00
<node COLOR="#435e98" CREATED="1785879338699" ID="ID_1348254697" MODIFIED="1786299108448" TEXT="Bugfix: addNextReadSubmissions() braucht NULL-Check">
<icon BUILTIN="broken-line"/>
2026-08-09 20:28:35 +02:00
<node BACKGROUND_COLOR="#f8d2cb" COLOR="#a50125" CREATED="1785879362992" ID="ID_854540412" LINK="https://man7.org/linux/man-pages/man3/io_uring_get_sqe.3.html" MODIFIED="1786299142949" TEXT="io_uring_get_sqe (&amp;uRing) k&#xf6;nnte scheitern">
<icon BUILTIN="clanbomber"/>
</node>
</node>
<node CREATED="1784423169337" ID="ID_1181187272" MODIFIED="1784423187567" TEXT="Beschreibung in ProcSpec.txt">
<icon BUILTIN="edit"/>
<node CREATED="1784423189039" ID="ID_221455189" MODIFIED="1784423195187" TEXT="entwerfe eine Gliederung"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784423195777" ID="ID_497657354" MODIFIED="1784423304160" STYLE="fork" TEXT="lasse Claude die Abschnitte ausf&#xfc;llen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...da der Konversations-Status ein komplettes Bild der Steuerlogik enth&#228;lt, bietet sich das gradezu an; stilistisch &#252;berarbeiten kann ich den Text sp&#228;ter immer noch
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1784423283442" ID="ID_1109777699" MODIFIED="1784423292988" TEXT="lasse Claude auch gleich ein paar SVG-Diagramme generieren"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1784561954266" ID="ID_624596145" MODIFIED="1784561960852" TEXT="Text ausarbeiten">
<icon BUILTIN="flag-pink"/>
</node>
</node>
</node>
2026-07-10 02:57:34 +02:00
</node>
</node>
</node>
<node CREATED="1783786559990" ID="ID_1008291067" MODIFIED="1783786563832" TEXT="Publikation">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1783786565267" ID="ID_330019672" MODIFIED="1783787290503" TEXT="Frage: Lizenz?">
<icon BUILTIN="help"/>
<icon BUILTIN="yes"/>
<node COLOR="#5b280f" CREATED="1783786615366" ID="ID_905609740" MODIFIED="1783787270254" TEXT="Es ist Lehrmaterial &#x27f9; permissiv">
<icon BUILTIN="button_cancel"/>
<node CREATED="1783786773754" ID="ID_12321607" MODIFIED="1783786935315" TEXT="es w&#xe4;re dieses Mal leicht m&#xf6;glich">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...anders als bei dem Video-Output-Thema, bei dem wir uns die zentralen Element &#252;berhaupt erst aufschlie&#223;en mu&#223;ten, und dies nur mithilfe bestehender GPL-Codebasen geschafft haben. Diesmal ist die Situation ganz anders, das Thema ist ziemlich gut in Tutorials und Blogs aufbereitet. Viele haben zwar kein brauchbares Lizenz-Statement, aber andererseits ist die Aufgabe so einfach, da&#223; ich nirgends Code abschreiben mu&#223;, den ich nicht auch genauso selber schreiben k&#246;nnte.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783786937038" ID="ID_782656761" MODIFIED="1783787030571" TEXT="ist das &#xfc;berhaupt noch relevant??">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<ul>
<li>
es schaut ja eh keiner auf unseren Beispielcode. Da mach ich mir keine Illusionen. Der Code ist f&#252;r &quot;uns&quot; selber sp&#228;ter wichtig....
</li>
<li>
wer interessiert sich &#252;berhaupt noch f&#252;r LIzenzen, die AI stiehlt ja sowiso alles, und Jedermann kann behaupten, er h&#228;tte seine Weisheit von einem LLM.
</li>
</ul>
</body>
</html></richcontent>
<icon BUILTIN="smily_bad"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1783786668847" ID="ID_517750346" MODIFIED="1783787279327">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
mein Bauchgef&#252;hl: <b>GPL</b>
</p>
</body>
</html></richcontent>
<icon BUILTIN="back"/>
<node CREATED="1783787032442" ID="ID_1472543330" MODIFIED="1783787496449">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Das ist ein politisches Statement. <i>Das ist wichtiger denn je</i>
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Der Vollst&#228;ndigkeit halber: es gibt den Unterschied zwischen negativer Freiheit und positiver Feiheit; letztere ist der Entschlu&#223; zu einer klar formulierten Vision. Die GPL formuliert hierzu die &#187;vier Freiheiten&#171;. Dahinter steht das Ideal des Gemeinwohls. Das mu&#223; leider verteidigt werden gegen Ausbeutung und Veruntreuung.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783787061169" ID="ID_1906878927" MODIFIED="1783787101544" TEXT="Der Code soll auf die Lumiera-Website. Eine Abweichende Lizenz schafft dort nur Komplikationen"/>
<node CREATED="1783787106667" ID="ID_1055216820" MODIFIED="1783787173608" TEXT="und dann ist da noch der EGL-Code aus dem letzen Jahr (den ich tats&#xe4;chlich kopiere)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...und der beruht, transitiv argumentiert, nicht nur pro-forma, sondern auch dem Geist nach auf Publikationen unter Copyleft
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1785860391030" ID="ID_1841666778" LINK="https://www.lumiera.org/research/ioUring/index.html" MODIFIED="1786458953423" TEXT="Research-Sektion auf Lumiera.org">
<arrowlink COLOR="#7595a3" DESTINATION="ID_1713197876" ENDARROW="Default" ENDINCLINATION="-227;-574;" ID="Arrow_ID_1359881181" STARTARROW="None" STARTINCLINATION="-579;46;"/>
<node CREATED="1785860406146" ID="ID_17114163" MODIFIED="1785860420192" TEXT="Overview"/>
<node CREATED="1785860425383" ID="ID_468739218" MODIFIED="1785860427904" TEXT="Resources">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1785860434326" ID="ID_1458908971" MODIFIED="1785860443825" TEXT="TimeScales">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1785860445180" ID="ID_153676570" MODIFIED="1785860464957" STYLE="fork" TEXT="Informationen zusammengetragen mit Claude">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1785860471809" ID="ID_402484787" MODIFIED="1785861103377" TEXT="teilweise bereits im Background/Recherche-Chat">
<arrowlink COLOR="#25bbd3" DESTINATION="ID_1509658937" ENDARROW="Default" ENDINCLINATION="-1299;65;" ID="Arrow_ID_1234011492" STARTARROW="None" STARTINCLINATION="-369;0;"/>
</node>
<node CREATED="1785861111621" ID="ID_1704710749" MODIFIED="1785861189290" TEXT="habe meine eigenen Erfahrungswerte validieren lassen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
alle meine eigenen Erfahrungen und Richtwerte konnten vollumf&#228;nglich best&#228;tigt werden; manche Me&#223;werte kann ich nun besser einordnen, z.B. durch die Unterscheidung in hott-pressed und systemic-cost. Erheblich dazugelernt habe ich bez&#252;glich <b>Futex</b>es
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1785861193146" ID="ID_387177535" LINK="#ID_1762091251" MODIFIED="1785861228218" TEXT="habe daraus ein Diagramm bauen lassen">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1785861229354" ID="ID_162556201" MODIFIED="1785861244236" TEXT="au&#xdf;erdem: alle Zahlenwerte in Tabelle konsolidiert">
<node CREATED="1785861248495" ID="ID_677703208" MODIFIED="1785861264545" TEXT="Richtwerte(Zeit/Latenz)"/>
<node CREATED="1785861265022" ID="ID_256243482" MODIFIED="1785861266825" TEXT="Bedeutung"/>
<node CREATED="1785861267284" ID="ID_1608529429" MODIFIED="1785861270480" TEXT="Quellen als Fu&#xdf;noten"/>
<node CREATED="1785861270940" ID="ID_1066989785" MODIFIED="1785861302195" TEXT="Spalte &#xbb;gef&#xfc;hlte Zeit&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wenn ein Clock-cycle eine Sekunde dauern w&#252;rde....
</p>
</body>
</html></richcontent>
<icon BUILTIN="ksmiletris"/>
</node>
</node>
<node CREATED="1785861304416" ID="ID_1042454460" MODIFIED="1785861317095" TEXT="lasse einge Abschnitte mit Erl&#xe4;uterungen generieren"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1785861321077" ID="ID_1405791777" MODIFIED="1785861334834" TEXT="Dokument formal/technisch fertigstellen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1785861335967" ID="ID_493138343" MODIFIED="1785861342325" TEXT="Quellen nochmal gegenchecken">
<icon BUILTIN="flag-pink"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1785861381365" ID="ID_1527233926" MODIFIED="1785861393616" TEXT="Text &#xfc;berarbeiten / erg&#xe4;nzen">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node CREATED="1785860420848" ID="ID_1771994994" MODIFIED="1785860424896" TEXT="Demo-Code"/>
</node>
</node>
<node CREATED="1781400461948" FOLDED="true" ID="ID_1876863038" MODIFIED="1783362593603" TEXT="Laptop">
<icon BUILTIN="go"/>
<node COLOR="#338800" CREATED="1781400465563" ID="ID_1232371284" MODIFIED="1781651339119" TEXT="f&#xfc;r LAC-Maynooth : auf Ubuntu 26.04 (Resolute)">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1781519278720" ID="ID_676588034" MODIFIED="1781519283129" TEXT="Upgrade">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781519283647" ID="ID_907242344" MODIFIED="1781519289042" TEXT="Software installieren">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1781519289702" ID="ID_844551265" MODIFIED="1781651337448" TEXT="aktuelle Versionen bauen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1781519307590" ID="ID_1201788638" MODIFIED="1781532814179" TEXT="Ardour">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1781521235928" ID="ID_855039252" MODIFIED="1781521242957" TEXT="lokaler PC : hat geklappt">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781521243888" ID="ID_240912391" MODIFIED="1781532813148" TEXT="auf dem Laptop">
<icon BUILTIN="button_ok"/>
<node CREATED="1781522460966" ID="ID_1081421465" MODIFIED="1781522500489" TEXT="Ubuntu-DEB: 1:9.0.0+ds-1ubuntu1"/>
<node CREATED="1781522503976" ID="ID_1135878055" MODIFIED="1781522538823" TEXT="in Debian: 1:9.5.0+ds-1"/>
<node COLOR="#338800" CREATED="1781522543132" FOLDED="true" ID="ID_30314490" MODIFIED="1781532811176" TEXT="forward-Port machen">
<icon BUILTIN="button_ok"/>
<node CREATED="1781522570447" ID="ID_409284912" MODIFIED="1781522597602" TEXT="Ubuntu-DEB-Sources herunterladen"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1781522598218" FOLDED="true" ID="ID_1010572140" MODIFIED="1781532809159" TEXT="per rsync auf den PC und dort zusammenf&#xfc;hren">
<icon BUILTIN="yes"/>
<node CREATED="1781522626485" ID="ID_1443600419" MODIFIED="1781522633859" TEXT="eigentlich die Debian-Version nehmen"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1781522634468" ID="ID_285777397" MODIFIED="1781532807736" TEXT="aber die Control-Files abgleichen">
<node CREATED="1781523384531" ID="ID_801829490" MODIFIED="1781523386502" TEXT="Patches">
<node CREATED="1781523387306" ID="ID_137138514" MODIFIED="1781523396061" TEXT="ein Patch zu Jackd2 f&#xe4;llt auf"/>
<node CREATED="1781523396635" ID="ID_1655264957" MODIFIED="1781523403357" TEXT="dieser rollt Patches von Debian zur&#xfc;ck"/>
<node CREATED="1781523405765" ID="ID_1146993987" MODIFIED="1781523416946" TEXT="Frage: ist er f&#xfc;r 1.9.5 (noch) notwendig?">
<node CREATED="1781523571407" ID="ID_339341038" MODIFIED="1781523579053" TEXT="er w&#xe4;re mit fuzz anwendbar"/>
<node CREATED="1781523595665" ID="ID_650244806" MODIFIED="1781523605450" TEXT="(verstehe nicht wozu der Patch da ist)"/>
<node CREATED="1781523580065" ID="ID_180781601" MODIFIED="1781523595053" TEXT="sieht f&#xfc;r mich harmlos aus"/>
<node COLOR="#338800" CREATED="1781523606701" ID="ID_1269040745" MODIFIED="1781524065108" TEXT="nach M&#xf6;glichkeit mit einschlie&#xdf;en!">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1781524082558" ID="ID_1176756896" MODIFIED="1781524101285" TEXT="Debian hat zudem einen Patch 0600-vst3-paths.patch">
<node CREATED="1781524116935" ID="ID_735500939" MODIFIED="1781524124015" TEXT="sieht harmlos / offensichtlich aus"/>
<node COLOR="#338800" CREATED="1781524124596" ID="ID_1001934095" MODIFIED="1781524128425" TEXT="ebenfalls mitnehmen">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node CREATED="1781524249949" ID="ID_1355298644" MODIFIED="1781524253229" TEXT="install">
<node CREATED="1781524261583" ID="ID_1874128958" MODIFIED="1781524273478" TEXT="die Ubuntu-Version qualifiziert explizit den namen &quot;ardour9&quot;"/>
<node COLOR="#435e98" CREATED="1781524254037" ID="ID_776388280" MODIFIED="1781524282923" TEXT="bleibe bei der Debian-Version">
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1781524277542" ID="ID_584412681" MODIFIED="1781524280743" TEXT="control">
<node COLOR="#5b280f" CREATED="1781524284651" ID="ID_1978642217" MODIFIED="1781524316796" TEXT="Debian definiert zus&#xe4;tzlich Abh&#xe4;ngigkeit auf libjack-jackd2-dev">
<icon BUILTIN="button_cancel"/>
<node CREATED="1781524322302" ID="ID_875489732" MODIFIED="1781524333241" TEXT="unter Ubuntu wohl nicht notwendig"/>
<node CREATED="1781524466723" ID="ID_698827027" MODIFIED="1781524491336" TEXT="das Problem kommt mir bekannt vor">
<node CREATED="1781524492343" ID="ID_110782565" MODIFIED="1781524506569" TEXT="Ubuntu hat nur libjpeg-turbo8-dev"/>
<node CREATED="1781524507661" ID="ID_1118717481" MODIFIED="1781524515854" TEXT="anscheindend gen&#xfc;gt dort aber libjpeg-dev"/>
</node>
<node COLOR="#5b280f" CREATED="1781524317630" ID="ID_1053940314" MODIFIED="1781528533780" TEXT="lasse ich weg">
<icon BUILTIN="yes"/>
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1781528537191" ID="ID_1400481410" MODIFIED="1781528555724" TEXT="nehme libjpeg62-dev">
<linktarget COLOR="#a4103e" DESTINATION="ID_1400481410" ENDARROW="Default" ENDINCLINATION="437;58;" ID="Arrow_ID_1089824375" SOURCE="ID_1232407594" STARTARROW="None" STARTINCLINATION="931;0;"/>
</node>
</node>
<node CREATED="1781524527147" ID="ID_1783245907" MODIFIED="1781524535638" TEXT="Jackd">
<node CREATED="1781524536394" ID="ID_1529067711" MODIFIED="1781524541837" TEXT="Debian h&#xe4;ngt ab von Jack-1"/>
<node CREATED="1781524542321" ID="ID_1991227022" MODIFIED="1781524547292" TEXT="Ubuntu verwendet nur Jack-2"/>
<node CREATED="1781524547844" ID="ID_1930682769" MODIFIED="1781524568324" TEXT="Jack-2 ist eigentlich auch notwendig (siehe Changelog!)"/>
<node CREATED="1781524569293" ID="ID_68544587" MODIFIED="1781524580904" TEXT="L&#xf6;sung: verlange Jack-2 mit Fallback auf Jack-1"/>
</node>
<node CREATED="1781524603377" ID="ID_811822631" MODIFIED="1781524617027" TEXT="Standards-Version in Debian ist 4.7.4">
<node CREATED="1781524619119" ID="ID_1075248000" MODIFIED="1781524623970" TEXT="eine h&#xf6;her als in ubuntu"/>
<node CREATED="1781524624454" ID="ID_1208892081" MODIFIED="1781524635127" TEXT="Ubuntu baut also formal auf Debian-stable auf"/>
<node CREATED="1781524635669" ID="ID_1981983708" MODIFIED="1781524656094" TEXT="da es ein minor-bump ist gehe ich zur&#xfc;ck auf 4.7.3"/>
</node>
<node CREATED="1781524665741" ID="ID_1201708006" MODIFIED="1781524672723" TEXT="Debian definiert auch provides">
<node CREATED="1781524683265" ID="ID_222109669" MODIFIED="1781524684099" TEXT=" ladspa-host, lv2-host, vst2-host, vst3-host,"/>
<node CREATED="1781524684969" ID="ID_1654604516" MODIFIED="1781524691425" TEXT="erscheinen allesamt sinnvol"/>
<node COLOR="#435e98" CREATED="1781524691918" ID="ID_833961413" MODIFIED="1781524696831" TEXT="nehme ich mit"/>
</node>
</node>
<node CREATED="1781525241343" ID="ID_54562490" MODIFIED="1781525243872" TEXT="changelog">
<node CREATED="1781525244646" ID="ID_1161552067" MODIFIED="1781525286433" TEXT="setze Versionsnummer sinnvoll">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...so da&#223; es h&#246;her steht als das Ubuntu-Paket, aber von einem offiziellen Ubuntu-Paket der gleichen Version ersetzt w&#252;rde
</p>
</body>
</html></richcontent>
</node>
<node COLOR="#435e98" CREATED="1781525296172" ID="ID_667189739" MODIFIED="1781525299964" TEXT="1:9.5.0+ds-1ubuntu0~port1">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
</node>
<node CREATED="1781525318070" ID="ID_179652020" MODIFIED="1781525324371" TEXT="(liste meine Anpassungen auf)"/>
<node CREATED="1781525306532" ID="ID_1756176951" MODIFIED="1781525312307" TEXT="zeichne mit meinem Namen/Key"/>
</node>
</node>
<node COLOR="#338800" CREATED="1781525900388" ID="ID_592913455" MODIFIED="1781525918634" TEXT="baue neues Quellpaket">
<icon BUILTIN="button_ok"/>
<node CREATED="1781525905665" ID="ID_1258557880" MODIFIED="1781525906344" TEXT="ardour_9.5.0+ds-1ubuntu0~port1.dsc"/>
<node CREATED="1781525907396" ID="ID_333880345" MODIFIED="1781525917114" TEXT="verwendet: ardour_9.5.0+ds.orig.tar.xz"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1781525924624" ID="ID_357934879" MODIFIED="1781526052650" TEXT="auf den Laptop &#xfc;bertragen -&gt; ~/debBIld"/>
<node CREATED="1781526328443" ID="ID_1711109725" MODIFIED="1781526338507" TEXT="auf dem Laptop (Ubuntu 26.04)">
<node CREATED="1781526053864" ID="ID_260807395" MODIFIED="1781526062695" TEXT="dort: mk-build-deps"/>
<node COLOR="#435e98" CREATED="1781526238697" ID="ID_1361966809" MODIFIED="1781526252042" TEXT="ardour-build-deps 1:9.5.0+ds-1ubuntu0~port1">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="info"/>
</node>
<node CREATED="1781526341712" ID="ID_1089321343" MODIFIED="1781526343501" TEXT="debuild -i -us -uc -b">
<node CREATED="1781526365487" ID="ID_785116268" MODIFIED="1781526385797" TEXT="Begr&#xfc;ndung: nicht signieren">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
sonst scheitert der Build wom&#246;glich noch....
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1781526386620" ID="ID_728043433" MODIFIED="1781526443328" TEXT="das ist nicht zur Distribution bestimmt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wenn &#252;berhaupt, w&#252;rde ich den Build sp&#228;ter in einem Docker-Container wiederholen;
</p>
<p>
f&#252;r die PPAs dagegen w&#228;re mein angepa&#223;tes Source-Paket so wie es vorliegt grade richtig (signiert, ohne Binaries)
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1781526956638" ID="ID_131187864" MODIFIED="1781526968649" TEXT="Interner Compiler-Fehler">
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
<node CREATED="1781526972454" ID="ID_619273003" MODIFIED="1781526979581" TEXT="also dann doch: Build auf Docker">
<node CREATED="1781528313248" ID="ID_1860859885" MODIFIED="1781528322006" TEXT="Build scheitert: jpeglib.h fehlt"/>
<node CREATED="1781528323330" ID="ID_1232407594" MODIFIED="1781528561050" TEXT="versuche dann doch libjpeg62-dev">
<arrowlink COLOR="#a4103e" DESTINATION="ID_1400481410" ENDARROW="Default" ENDINCLINATION="437;58;" ID="Arrow_ID_1089824375" STARTARROW="None" STARTINCLINATION="931;0;"/>
</node>
<node COLOR="#338800" CREATED="1781532767067" ID="ID_497843372" MODIFIED="1781532770991" TEXT="Build funktioniert">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1781532771843" ID="ID_12601059" MODIFIED="1781532782382" TEXT="Ardour 9.5 installiert">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781532777434" ID="ID_301772035" MODIFIED="1781532781666" TEXT="kurzer Testlauf OK">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1781519309280" ID="ID_1473871922" MODIFIED="1781651318661" TEXT="Yoshimi">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1781521250102" ID="ID_158010908" MODIFIED="1781651316654" TEXT="Will hat neue Version gemacht">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1781521569558" ID="ID_863017096" MODIFIED="1781521573991" TEXT="v2.3.6.4"/>
<node CREATED="1781521575486" ID="ID_1041894838" MODIFIED="1781521583310" TEXT="es gibt einen GUI-Bugfix"/>
<node CREATED="1781521583778" ID="ID_544320855" MODIFIED="1781521588374" TEXT="und einen GUI-Tweak"/>
<node CREATED="1781521588952" ID="ID_1251659207" MODIFIED="1781521594598" TEXT="und massive &#xdc;berarbeitung der Doku"/>
</node>
<node COLOR="#435e98" CREATED="1781521616181" ID="ID_914070530" MODIFIED="1781651304475" TEXT="unklar: soll ich noch bauen?">
<icon BUILTIN="help"/>
<icon BUILTIN="yes"/>
<node CREATED="1781521625685" ID="ID_694849318" MODIFIED="1781521632756" TEXT="w&#xe4;re nat&#xfc;rlich &#xbb;sch&#xf6;n&#xab;"/>
<node CREATED="1781521649465" ID="ID_1777979871" MODIFIED="1781521659380" TEXT="dann h&#xe4;tte ich ihn auch gleich auf meinem Laptop"/>
<node COLOR="#338800" CREATED="1781651306551" ID="ID_419598314" MODIFIED="1781651310038" TEXT="hab noch gebaut">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1781642640870" ID="ID_1911864376" MODIFIED="1781651860784" TEXT="Demo-Setup">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1781642864216" ID="ID_847138093" MODIFIED="1781651264267" TEXT="Focusrite mu&#xdf; mit dem Laptop laufen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781642660365" ID="ID_118877508" MODIFIED="1781651266296" TEXT="Ardour + Yoshimi + Jack-Session testen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781642670984" ID="ID_309685613" MODIFIED="1781651268838" TEXT="Playback von meiner Session funktioniert">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1781642475972" ID="ID_1490884530" MODIFIED="1781642478672" TEXT="brauche noch....">
<node COLOR="#338800" CREATED="1781642479524" ID="ID_1571433727" MODIFIED="1781651806686" TEXT="midicomp">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Quellen auch kopiert; das Binary tut dr&#252;ben ohne Weiteres auch...
</p>
</body>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781642484763" ID="ID_1190304637" MODIFIED="1781651850947" TEXT="qrencode">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1781519331385" ID="ID_55446699" MODIFIED="1781519339623" TEXT="Build-Umgebung">
<icon BUILTIN="help"/>
<node COLOR="#5b280f" CREATED="1781642707022" ID="ID_1745959271" MODIFIED="1781663809078" TEXT="Trac: alte Version als Paket bereitstellen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das Trac startet nicht auf dem Laptop. Habe keine Zeit mehr zur Untersuchung. Daher meine Idee: versuchen, das aktuelle Debian-Paket in einem Ubuntu-Image gebaut zu bekommen
</p>
</body>
</html></richcontent>
<icon BUILTIN="button_cancel"/>
<node CREATED="1781663810498" ID="ID_405325289" MODIFIED="1781663815766" TEXT="sollte nicht der Grund sein!"/>
<node CREATED="1781663816274" ID="ID_622622971" MODIFIED="1781663837267" TEXT="Resloute hat v. 1.6-4 (das ist nur eine Debian-Rev weiter)"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1781666343182" ID="ID_365895434" MODIFIED="1781666381517" STYLE="fork" TEXT="ChatGPT hat den Traceback erkannt">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1781666366226" ID="ID_1908475780" MODIFIED="1781666381516" TEXT="issue https://trac.edgewall.org/ticket/13607"/>
<node CREATED="1781666398978" ID="ID_193223054" MODIFIED="1781666415107" TEXT="das version-Attribut des SQLite-Moduls ist weggefallen"/>
<node CREATED="1781666390387" ID="ID_970388595" MODIFIED="1781666398190" TEXT="schl&#xe4;gt einen einfachen Workaround vor"/>
<node COLOR="#338800" CREATED="1781666415951" ID="ID_735749217" MODIFIED="1781666424175" TEXT="Problem damit gel&#xf6;st: Tracd startet">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1781642762242" ID="ID_1654989070" MODIFIED="1781642770376" TEXT="einmal Lumiera bauen k&#xf6;nnen...">
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1781519320843" ID="ID_118394895" MODIFIED="1781651276766" TEXT="Zwersync">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1781651277675" ID="ID_1217658482" MODIFIED="1781651287554" TEXT="morgens nochmal....">
<icon BUILTIN="bell"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1780237673481" FOLDED="true" HGAP="-64" ID="ID_1856494971" MODIFIED="1783362473882" STYLE="bubble" TEXT="Vorbereitung Yoshimi-Workshop LAC-26" VSHIFT="69">
<edge COLOR="#816262" STYLE="linear"/>
<font NAME="SansSerif" SIZE="15"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1780237746684" ID="ID_834777983" MODIFIED="1780237767193" STYLE="fork" TEXT="Ablauf-Planung">
<node CREATED="1780237784167" FOLDED="true" ID="ID_1409484378" MODIFIED="1781519439769" TEXT="Vorschlag Will">
<icon BUILTIN="list"/>
<node CREATED="1780237817296" ID="ID_1410441549" MODIFIED="1780237819958" TEXT="Demo-Play"/>
<node CREATED="1780237827363" ID="ID_1141362896" MODIFIED="1780237831189" TEXT="Introduction Will"/>
<node CREATED="1780237831721" ID="ID_752310977" MODIFIED="1780237838309" TEXT="Yoshimi&apos;s History">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_103290730" MODIFIED="1780241530002" STYLE="bubble" TEXT="10" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780237861320" ID="ID_593799273" MODIFIED="1780237865472" TEXT="Introduction Hermann"/>
<node CREATED="1780237878811" ID="ID_822584185" MODIFIED="1780237897619" TEXT="Investigating breakages">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_414426381" MODIFIED="1780241530002" STYLE="bubble" TEXT="15" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780237906463" ID="ID_1405299160" MODIFIED="1780237913498" TEXT="Will: Demo of new features">
<node CREATED="1780237926346" ID="ID_847602707" MODIFIED="1780237932344" TEXT="part change notification"/>
<node CREATED="1780237936833" ID="ID_1333685402" MODIFIED="1780237943982" TEXT="MIDI-Learn Envelopes"/>
<node CREATED="1780237950689" ID="ID_1697523350" MODIFIED="1780237954629" TEXT="Improved Crossfade">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1144779594" MODIFIED="1780241530001" STYLE="bubble" TEXT="25" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
</node>
<node CREATED="1780237962764" ID="ID_1319954314" MODIFIED="1780237965940" TEXT="and then?"/>
</node>
<node CREATED="1780238104765" FOLDED="true" ID="ID_135325439" MODIFIED="1781519439770" TEXT="Plan von mir: MIDI">
<icon BUILTIN="list"/>
<node CREATED="1780238134049" ID="ID_626996067" MODIFIED="1780238136156" TEXT="Intro">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1732530235" MODIFIED="1780241530001" STYLE="bubble" TEXT="5" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238137576" ID="ID_982044739" MODIFIED="1780238156569" TEXT="Theory: how Yoshimi uses MIDI">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1825434147" MODIFIED="1780241530001" STYLE="bubble" TEXT="10" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238433872" ID="ID_504891870" MODIFIED="1780238451146" TEXT="Demo: setup Yoshimi and connect to Sequencer">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_262215120" MODIFIED="1780241530000" STYLE="bubble" TEXT="15" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238454728" ID="ID_1614588875" MODIFIED="1780238465522" TEXT="Demo: MIDI-Learn">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1440126499" MODIFIED="1780241530000" STYLE="bubble" TEXT="20" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238604538" ID="ID_1958048363" MODIFIED="1780238687858">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Explanation of the Assignment:
</p>
<p>
arrange a given MIDI file
</p>
</body>
</html></richcontent>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_690078145" MODIFIED="1780241530000" STYLE="bubble" TEXT="25" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238712767" ID="ID_1695146360" MODIFIED="1780238724357" TEXT="Experimentattion or Workshop">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1493950235" MODIFIED="1780241530000" STYLE="bubble" TEXT="40" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238737360" ID="ID_524250532" MODIFIED="1780238750634" TEXT="closing / Q &amp; A">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1640635754" MODIFIED="1780241529999" STYLE="bubble" TEXT="45" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
</node>
<node CREATED="1780238805800" ID="ID_1575474951" MODIFIED="1781519425066" TEXT="Kombination beider">
<icon BUILTIN="back"/>
<node CREATED="1780237817296" ID="ID_1940571822" MODIFIED="1780237819958" TEXT="Demo-Play"/>
<node CREATED="1780237827363" ID="ID_1012673273" MODIFIED="1780237831189" TEXT="Introduction Will"/>
<node CREATED="1780237831721" ID="ID_555913907" MODIFIED="1780237838309" TEXT="Yoshimi&apos;s History">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1681984669" MODIFIED="1780241529999" STYLE="bubble" TEXT="10" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780237861320" ID="ID_810123151" MODIFIED="1780237865472" TEXT="Introduction Hermann"/>
<node CREATED="1780237878811" ID="ID_1566813500" MODIFIED="1780237897619" TEXT="Investigating breakages">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1299010797" MODIFIED="1780241529999" STYLE="bubble" TEXT="15" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238137576" ID="ID_1356058098" MODIFIED="1780239007738" TEXT="Theory: how Yoshimi uses MIDI (Hermann)">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_390378744" MODIFIED="1780241529998" STYLE="bubble" TEXT="20" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238433872" ID="ID_709543406" MODIFIED="1780238451146" TEXT="Demo: setup Yoshimi and connect to Sequencer">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1985638247" MODIFIED="1780241529998" STYLE="bubble" TEXT="25" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238454728" ID="ID_131655559" MODIFIED="1780238465522" TEXT="Demo: MIDI-Learn">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1392101848" MODIFIED="1780241529998" STYLE="bubble" TEXT="30" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238712767" ID="ID_1813262998" MODIFIED="1780238937833" TEXT="Arrange a MIDI (Demo)">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_1803864508" MODIFIED="1780241529998" STYLE="bubble" TEXT="40" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node CREATED="1780238737360" ID="ID_1529703548" MODIFIED="1780238750634" TEXT="closing / Q &amp; A">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1780238019168" HGAP="27" ID="ID_567389147" MODIFIED="1780241529997" STYLE="bubble" TEXT="45" VSHIFT="14">
<edge COLOR="#482fe8"/>
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1780237752332" FOLDED="true" ID="ID_81992278" MODIFIED="1783358871068" STYLE="fork" TEXT="Inhalte">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="edit"/>
<node CREATED="1780432956427" ID="ID_423790273" MODIFIED="1780432965014" TEXT="MIDI zum Arrangieren">
<node CREATED="1780432966338" ID="ID_1459116926" MODIFIED="1781519518871" TEXT="Lorenzo hat ein relativ langes St&#xfc;ck bereitgestellt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
es ist komplex und verwendet viele Effekte &#8212; und ist (wenn ich Will recht verstehe) &quot;not really contemporary&quot;
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1780433042756" ID="ID_1480794618" MODIFIED="1780433145744" TEXT="meine Idee: Concerto d-moll nach Vivaldi BWV 596">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
Vivaldi's Concerto in D minor for two violins and obbligato violoncello, Op.3, No.11 (RV 565)
<p>
</p>
<p>
Ich w&#252;rde nat&#252;rlich nur das Pr&#228;ludium nehmen...
</p>
</body>
</html></richcontent>
<node COLOR="#338800" CREATED="1781519527472" ID="ID_1934474300" MODIFIED="1781519556887" TEXT="MIDI aufgebaut">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781519538938" ID="ID_1279956929" MODIFIED="1781519557633" TEXT="Timings arrangiert">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1781519547556" ID="ID_28843701" MODIFIED="1781519554906" TEXT="gesucht: Instrumentierung">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1781519559257" ID="ID_1497966862" MODIFIED="1781519657916" TEXT="habe bisher mit meinen Instrumenten gearbeitet">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das war sch&#246;n f&#252;r mich, ist aber nicht wirklich hilfreich....
</p>
<ul>
<li>
weil meine Instrumente eigentlich ein Sound-Matering erfordern
</li>
<li>
der Sound recht ungewohnt ist &#8212; ganz bestimmt nicht &#187;cool&#171;
</li>
</ul>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1781519661016" ID="ID_1699740765" MODIFIED="1781519726415" TEXT="f&#xfc;r die Demo m&#xfc;ssen es Presets aus der Yoshimi-Distribution sein">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das ist zwingend, denn unsere geplante Demo des Arrangierens soll diesen Ansatz zeigen
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1781519734632" ID="ID_1651753374" MODIFIED="1781519793847" TEXT="nur wenn das gelingt, ist mein MIDI eine Option">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
und entschieden wird ganz n&#252;chtern, gemeinsam
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1781519800631" ID="ID_1046286575" MODIFIED="1781519803555" TEXT="Aufgaben">
<node CREATED="1781519804591" ID="ID_241693310" MODIFIED="1781519814463" TEXT="etwas f&#xfc;r B1 finden"/>
<node CREATED="1781519815557" ID="ID_964247971" MODIFIED="1781519821944" TEXT="etwas f&#xfc;r die beiden L-Stimmen finden"/>
<node CREATED="1781519822660" ID="ID_1309842488" MODIFIED="1781519830775" TEXT="etwas f&#xfc;r M1"/>
<node CREATED="1781519831323" ID="ID_1295099144" MODIFIED="1781519833789" TEXT="etwas f&#xfc;r M2"/>
<node CREATED="1781519836238" ID="ID_1295136641" MODIFIED="1781519844293" TEXT="Balance &#xfc;ber Lautsprecher erproben"/>
</node>
</node>
<node CREATED="1781519855616" ID="ID_337979956" MODIFIED="1781519864963" TEXT="MIDI fertigstellen">
<node CREATED="1781519865719" ID="ID_1991258362" MODIFIED="1781519870594" TEXT="Debugging">
<node CREATED="1781519871447" ID="ID_1039687891" MODIFIED="1781519875577" TEXT="einige Noten bleiben h&#xe4;ngen"/>
<node CREATED="1783358657059" ID="ID_944825999" MODIFIED="1783358760348" TEXT="das Problem ist reproduzierbar">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
getriggert wird es, wenn der vorherige Note-off nicht direkt mit dem n&#228;chsen Note-on aligned, aber sehr kurzzeitig davor endet. Bei mir ist das entstanden aus dem Time-Stretching der zun&#228;chst per Grid eingegebenen MIDI-Noten. Und weil Ardour immer noch nicht seine off-by-one-Probleme im Griff hat. Das m&#252;ssen wir in Lumiera besser machen!!!
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1783358662474" ID="ID_1694393697" MODIFIED="1783358673070" TEXT="TODO: Bug melden">
<icon BUILTIN="bell"/>
</node>
</node>
<node CREATED="1781519881032" ID="ID_1312918562" MODIFIED="1781519893055" TEXT="Bank-Select-Messages"/>
<node CREATED="1781519903346" ID="ID_343859982" MODIFIED="1781519906413" TEXT="Volume-Automation"/>
</node>
</node>
<node CREATED="1783358770868" ID="ID_646676522" MODIFIED="1783358859094">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
letzten Endes haben wir nur eine Demo gemacht,
</p>
<p>
und etwas von Lorenzo's St&#252;ck (auszugsweise) gespielt
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
f&#252;r mein Arrangement war da gar kein Platz, was mir aber auch recht war (das w&#228;re anders gewesen, wenn wir einen richtigen Workshop mit ausreichend Zeit gehabt h&#228;tten)
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1781520004907" ID="ID_1568233541" MODIFIED="1781520035140" TEXT="Thema: schwierige Situation im letzten Jahr">
<node CREATED="1781520037168" ID="ID_397513738" MODIFIED="1781520058537" TEXT="Gedanken f&#xfc;r 5 Minuten &#xbb;Lightning-Talk&#xab;"/>
<node CREATED="1781520061597" ID="ID_51178707" MODIFIED="1781520064600" TEXT="Konzept">
<node CREATED="1781520067449" ID="ID_1341578014" MODIFIED="1781520073128" TEXT="ich bin seit 10 Jahren dabei"/>
<node CREATED="1781520073626" ID="ID_1890645092" MODIFIED="1781520111258" TEXT="in den letzten (2?) Jahren kaum noch inhaltliche Entwicklung"/>
<node CREATED="1781520112219" ID="ID_1007604945" MODIFIED="1781520131830" TEXT="Symptom: sehr aufwendige Suche nach Ursachen von Problemen"/>
<node CREATED="1781520132852" ID="ID_1957223345" MODIFIED="1781520141015" TEXT="Ausl&#xf6;ser">
<node CREATED="1781520142010" ID="ID_25873608" MODIFIED="1781520168650" TEXT="vermutlich expandierende Nutzung"/>
<node CREATED="1781520169485" ID="ID_1364489442" MODIFIED="1781520179641" TEXT="&#xc4;nderungen im Software-Umfeld"/>
</node>
<node CREATED="1781520181173" ID="ID_1776229830" MODIFIED="1781520183424" TEXT="Ursache">
<node CREATED="1781520186335" ID="ID_994758870" MODIFIED="1781520196495" TEXT="wie die Code-Basis entstanden ist">
<node CREATED="1781520573390" ID="ID_132982159" MODIFIED="1781520585226" TEXT="Bl&#xfc;tezeit der OpenSource"/>
<node CREATED="1781520587342" ID="ID_117091715" MODIFIED="1781520592642" TEXT="creatives Chaos"/>
<node CREATED="1781520593289" ID="ID_1714631787" MODIFIED="1781520597401" TEXT="many helping hands"/>
</node>
<node CREATED="1781520211211" ID="ID_519076972" MODIFIED="1781520617231" TEXT="aktueller Zustand">
<node CREATED="1781520620759" ID="ID_201769766" MODIFIED="1781520626826" TEXT="nicht mehr die Original-Autoren"/>
<node CREATED="1781520676867" ID="ID_667008577" MODIFIED="1781520685030" TEXT="die Experten sind weitergezogen"/>
<node CREATED="1781520639904" ID="ID_363304176" MODIFIED="1781520658453" TEXT="Code-Basis &#xfc;berfordert die meisten potentiellen Contributoren"/>
<node CREATED="1781520618898" ID="ID_1608327032" MODIFIED="1781520620115" TEXT="viele &#xbb;ad-hoc&#xab; Fixes, sp&#xe4;ter vergessen"/>
</node>
<node CREATED="1781520253790" ID="ID_1682535861" MODIFIED="1781520269965" TEXT="Information und Kommunikation mit anderen Projekten schwieriger geworden"/>
</node>
<node CREATED="1781520296483" ID="ID_60480027" MODIFIED="1781520301271" TEXT="Verallgemeinerung">
<node CREATED="1781520302357" ID="ID_1034795521" MODIFIED="1781520309965" TEXT="wir als Community"/>
<node CREATED="1781520386588" ID="ID_1099579549" MODIFIED="1781520396069" TEXT="sollten mit dem Kult der &#xbb;technischen L&#xf6;sungen&#xab; brechen"/>
<node CREATED="1781520310503" ID="ID_71783091" MODIFIED="1781520322380" TEXT="m&#xfc;ssen uns um unsere Commons k&#xfc;mmern"/>
<node CREATED="1781520398936" ID="ID_1240655542" MODIFIED="1781520408059" TEXT="warum AI nicht hilfreich ist">
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1781520411146" ID="ID_344431376" MODIFIED="1781520418626" TEXT="Vorsicht: hier beschr&#xe4;nken">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1781520420539" ID="ID_1028039494" MODIFIED="1781520436303" TEXT="auf Alexei Alesandrescu beziehen">
<node CREATED="1781520437675" ID="ID_285379657" MODIFIED="1781520440646" TEXT="Skills"/>
<node CREATED="1781520441151" ID="ID_22473641" MODIFIED="1781520443334" TEXT="Judgement"/>
<node CREATED="1781520443757" ID="ID_482746350" MODIFIED="1781520483793" TEXT="Sovereignty and Creativity"/>
</node>
</node>
</node>
</node>
</node>
<node COLOR="#5b280f" CREATED="1781519909489" ID="ID_1379383182" MODIFIED="1783358585461" TEXT="(optional) Outline / Pr&#xe4;sentation">
<icon BUILTIN="button_cancel"/>
<node CREATED="1781519929311" ID="ID_825383909" MODIFIED="1781519938576" TEXT="was ist MIDI?"/>
<node CREATED="1781519939029" ID="ID_274182264" MODIFIED="1781519949650" TEXT="MIDI in Yoshimi">
<node CREATED="1781519951363" ID="ID_1409401616" MODIFIED="1781519954812" TEXT="3 Back-ends"/>
<node CREATED="1781519955241" ID="ID_768646541" MODIFIED="1781519963860" TEXT="Bedeutung der Channel"/>
<node CREATED="1781519964474" ID="ID_563332994" MODIFIED="1781519967339" TEXT="Note-Events"/>
<node CREATED="1781519968233" ID="ID_1769201868" MODIFIED="1781519975028" TEXT="CC-Events"/>
<node CREATED="1781519975952" ID="ID_470680710" MODIFIED="1781519977996" TEXT="Bank-Select"/>
<node CREATED="1781519978400" ID="ID_66374315" MODIFIED="1781519986787" TEXT="MIDI-Learn"/>
</node>
<node CREATED="1783358560424" ID="ID_935851419" MODIFIED="1783358578889" TEXT="habe dann beschlossen, darauf zu verzichten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
pa&#223;t nicht zum Charakter der Veranstaltung
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1783358587740" ID="ID_620274200" MODIFIED="1783358625416" TEXT="was gut war: hab mich mit Will an einem Abend im Hotel zusammengesetzt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...und wir sind nochmal alles durchgegangen und haben unser Demo-Material ausprobiert.
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
<node COLOR="#338800" CREATED="1781520732368" FOLDED="true" ID="ID_137593604" MODIFIED="1783358898016" STYLE="fork" TEXT="sonstige Vorbereitung">
<icon BUILTIN="button_ok"/>
<node CREATED="1781520750329" ID="ID_1327239664" MODIFIED="1783358895611" TEXT="Sachen bereitlegen zum Packen">
<node COLOR="#435e98" CREATED="1781521718680" ID="ID_295580533" MODIFIED="1783358895611" TEXT="noch was einzukaufen?">
<icon BUILTIN="help"/>
<node CREATED="1781521728935" ID="ID_1416745009" MODIFIED="1783358895611" TEXT="Socken"/>
<node CREATED="1781521730882" ID="ID_1332742604" MODIFIED="1783358895611" TEXT="ggfs Seife / Zahnpasta"/>
<node COLOR="#5b280f" CREATED="1781521746547" ID="ID_362809678" MODIFIED="1783358895612" TEXT="kleines MIDI-Keyboard?">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...hab ich versucht, aber in ganz M&#252;nchen nicht mehr bekommen. Lindberg h&#228;tte es gehabt, ist aber im Konkurs. Music-Shop hatte nichts, hat auch bei der Konkurrenz in Pasing angerufen. War dann ein nettes Gespr&#228;ch mit einem andern alten Musik-Hacker :-)
</p>
</body>
</html></richcontent>
<icon BUILTIN="help"/>
<icon BUILTIN="button_cancel"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783358462501" ID="ID_671509472" MODIFIED="1783358895612" TEXT="&#xfc;bersehen: brauche Netz-Adapter">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
weiter nicht schlimm ... das passiert vielen Leuten, deshalb gibt es das in Irland in jedem &quot;convenience store&quot;
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#ac4e6b" DESTINATION="ID_131441753" ENDARROW="Default" ENDINCLINATION="-131;-567;" ID="Arrow_ID_1550824993" STARTARROW="None" STARTINCLINATION="-252;19;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
<node CREATED="1781520780027" ID="ID_109604369" MODIFIED="1783358895612" TEXT="Laptop und Kamera"/>
<node COLOR="#435e98" CREATED="1781520796200" FOLDED="true" ID="ID_1874846493" MODIFIED="1783358895612" TEXT="Reisevorbereitung">
<icon BUILTIN="go"/>
<node COLOR="#338800" CREATED="1781520842316" ID="ID_633256100" MODIFIED="1783357218912" TEXT="Formalien zum Flug pr&#xfc;fen">
<icon BUILTIN="button_ok"/>
<node CREATED="1781520854531" ID="ID_409853627" MODIFIED="1781520859358" TEXT="siehe Mail von Lufthansa"/>
<node CREATED="1781520863498" ID="ID_402035574" MODIFIED="1781520886450" STYLE="fork" TEXT="Einreise Irland">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1781520892348" ID="ID_747515400" MODIFIED="1781520900550" TEXT="kein Schengen-Staat">
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#338800" CREATED="1781520887947" ID="ID_1584628267" MODIFIED="1781520889479" TEXT="Personalausweis ist OK">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781520903045" ID="ID_479611634" MODIFIED="1781657277574" TEXT="mu&#xdf; Ausreise-Daten-Formular ausf&#xfc;llen">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1781520949014" ID="ID_456449715" MODIFIED="1783357559328" TEXT="Aus/Einreisekontrolle">
<node CREATED="1781520978808" ID="ID_727486787" MODIFIED="1781520986631" TEXT="in Dublin"/>
<node CREATED="1781520987145" ID="ID_633169539" MODIFIED="1781520994141" TEXT="vermutlich in M&#xfc;nchen bei der R&#xfc;ckkehr"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1781520917531" ID="ID_1132702356" MODIFIED="1783357228571" TEXT="unklar: gibt es in M&#xfc;nchen etwas besonderes zu beachten?">
<icon BUILTIN="help"/>
<node CREATED="1783357231402" ID="ID_1132822714" MODIFIED="1783357251627" TEXT="Antwort: ein Flughafen ist eine Chaos-Maschine"/>
<node CREATED="1783357253967" ID="ID_1932895270" MODIFIED="1783357838600" TEXT="aber letztlich mu&#xdf; man immer nur den Wegweisern folgen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
In dem Fall bedeutet das konkret, da&#223; man in M&#252;nchen bereits durch eine Sonderkontroll-Zone gelotst wird, nachdem man duch den Security-Check durch ist. Auch der Security-Check ist schon auf einer anderen Ebene. D.h. man wird hier durch die Kan&#228;le f&#252;r echtes Ausland geschleust. Dann gibt es aber &#252;berall Abk&#252;rzungen, da Irland zwar kein Schengen-Staat ist, aber letztlich doch EU. Insgesamt wurde in M&#252;nchen meine Identit&#228;t 5 mal unabh&#228;ngig gecheckt. Bei der Gep&#228;ckabgabe, am Security-Check, dann im Ausreisecheck mit automatischer Biometrie-Erfassung in einer Schleuse. Danach nochmal an einem Checkpoint durch die Polizei. Und am Gate ein weiteres Mal, durch das Lufthansa-Personal. Alles sehr freundlich, aber bestimmt.
</p>
<p>
</p>
<p>
Ganz anders in Dublin. Bei der Ankunft wird man vom Terminal direkt durch die Zollstation geleitet. Das ist derzeit eine Baustelle, funktioniert aber reibungslos (man merkt sofort den andern Stil der Leute dort, gegen&#252;ber Deutschland). Einmal die Kennkarte vorzeigen, die wird kurz auf einen Scanner gelegt, und das war's (&quot;welcome in Ireland&quot; und tats&#228;chlich ein freundliches L&#228;cheln). Beim R&#252;ckflug gab es gar keine spezielle Umleitung, sondern nur den &#252;blichen ID-Check beim Boarding. Zur&#252;ck in M&#252;nchen wird man wieder durch eine Polizeistation geleitet, kann dort aber die fast-Lane f&#252;r EU-Residents nehmen. Ein strenger s&#228;uerlicher Blick von einem Beamten, Kennkarte auf einen Scanner, und ein kurzes Nicken.
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1781527887764" ID="ID_1973787585" MODIFIED="1783358370919" TEXT="Gep&#xe4;ck">
<icon BUILTIN="button_ok"/>
<node CREATED="1781527890896" MODIFIED="1781527890896" TEXT="1 Personal item included in this fare (40 x 30 x 15 cm max)."/>
<node CREATED="1781527920312" ID="ID_414717887" MODIFIED="1781527921227" TEXT="1 carry-on bag (18lbs 8kg/46in. 118cm max)"/>
<node CREATED="1781527935283" ID="ID_657903509" MODIFIED="1781527936214" TEXT="1 checked bag (50lbs 23kg/62in. 158cm max)"/>
<node COLOR="#338800" CREATED="1781530149901" ID="ID_702527051" MODIFIED="1783357220800" TEXT="Contact-Form ausdrucken und beilegen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781529085571" ID="ID_1325712235" MODIFIED="1781532736106" TEXT="Batterien">
<icon BUILTIN="yes"/>
<node CREATED="1781529089936" ID="ID_935390555" MODIFIED="1781529107077" TEXT="Limit: 100 Wh / Device">
<node CREATED="1781529140870" ID="ID_266057087" MODIFIED="1781529142137" TEXT="watt hours (Wh) = milliampere hours (mAh) x voltage (V) / 1,000"/>
<node CREATED="1781529145353" ID="ID_1706145542" MODIFIED="1781529150590" TEXT="Foto-Akku">
<node CREATED="1781529152116" ID="ID_1338730651" MODIFIED="1781529157623" TEXT="1100mAh"/>
<node CREATED="1781529158131" ID="ID_1223023656" MODIFIED="1781529162899" TEXT="7,2V"/>
<node CREATED="1781529185445" ID="ID_697450947" MODIFIED="1781529190587" TEXT="7,92 Wh"/>
</node>
<node CREATED="1781529235923" ID="ID_1836255078" MODIFIED="1781529244946" TEXT="Original-Akku: hat 8.2 Wh"/>
<node CREATED="1781529282771" ID="ID_1780882202" MODIFIED="1781529291439" TEXT="Notebook: 45,4 Wh"/>
<node CREATED="1781529379774" ID="ID_105961328" MODIFIED="1781529383115" TEXT="Smartphone">
<node CREATED="1781529384348" ID="ID_1475601754" MODIFIED="1781529399694" TEXT="2715 mAh"/>
<node CREATED="1781529417448" ID="ID_1001234247" MODIFIED="1781529430998" TEXT="Nennkapazit&#xe4;t 3916 mAh"/>
<node CREATED="1781529432581" ID="ID_1181155078" MODIFIED="1781529441793" TEXT="Spannung 4,004V"/>
<node CREATED="1781529460458" ID="ID_1463082239" MODIFIED="1781529467397" TEXT="15,67 Wh"/>
</node>
</node>
<node CREATED="1781529706285" ID="ID_1753997132" MODIFIED="1781529719446" TEXT="Photo/Video-Equipment">
<node CREATED="1781529720066" ID="ID_1007453983" MODIFIED="1781529723542" TEXT="eigens aufgef&#xfc;hrt"/>
<node CREATED="1781529724009" ID="ID_1583683698" MODIFIED="1781529735668" TEXT="gleiche Limits wie electronic Devices"/>
<node CREATED="1781529736211" ID="ID_1751960387" MODIFIED="1781529742841" TEXT="die 15 Devices gelten f&#xfc;r alles zusammen"/>
</node>
<node CREATED="1781529107906" ID="ID_1413895046" MODIFIED="1781529110934" TEXT="max 15 Devices"/>
<node CREATED="1781529612816" ID="ID_1121796427" MODIFIED="1781529617094" TEXT="+20 Ersatz-Akkus"/>
<node CREATED="1781529114521" ID="ID_970944244" MODIFIED="1783357959517" TEXT="recommended: in carry-on baggage"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1783357972864" ID="ID_1814383959" MODIFIED="1783358365549" TEXT="Erfahrung: problemlos">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Andere Leute haben wesentlich mehr Gep&#228;ckvolumen als ich. Wenn man sich an die Regeln h&#228;lt (Waffen, Werkzeuge, Elektronik), dann ist es auch heute noch so wie vor 20 Jahren. Eigentlich sogar einfacher, da die Scanner besser sind. Der security-Check in M&#252;nchen hat sich mein USB-Inteface genau angeschaut, auch erkannt was es ist. Ansonsten alles andere gem&#228;&#223; Anzeige am Bildschirm durchgewunken. Man kann heutzutage auch alles in eine einzige Schale kippen. Was ich immer wieder vergesse: die Taschent&#252;cher raus aus den Hosentaschen, und auch die Medikamente aus der Brusttasche. Ist aber nur ein Schmunzeln wert. Ein Detail: ich hatte eine Tube Bepanthen in einer Klarsichtt&#252;te im Rucksack. Wurde angeschaut, war OK. Besser w&#228;re es gewesen, sich eine Klarsichtt&#252;te mit Zip-Lock zu besorgen, dann k&#246;nnte man auch ein Deo und eine Zahnb&#252;rste mit dabei haben (falls man von seinem Gep&#228;ck getrennt wird). Akkus m&#252;ssen allesamt nicht nur im Handgep&#228;ck-Rucksack sein, sondern direkt am K&#246;rper/Handtasche. Da achtet man drauf (wu&#223;te ich vorher).
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1781528647062" ID="ID_1090801494" MODIFIED="1781531275157" TEXT="Lufthansa-App verwenden?">
<icon BUILTIN="help"/>
<node COLOR="#338800" CREATED="1781531276165" ID="ID_977980212" MODIFIED="1781531284092" TEXT="installiert &amp; kann mich anmelden">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781656785877" ID="ID_224644673" MODIFIED="1781656789750" TEXT="Check-In funktioniert">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1781521117008" ID="ID_1432710998" MODIFIED="1783352791959" TEXT="Zeitplanung">
<icon BUILTIN="back"/>
<node CREATED="1781521121499" ID="ID_1456930720" MODIFIED="1781521124291" TEXT="Hinflug">
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1781666537972" ID="ID_174325198" MODIFIED="1781666550065" TEXT="Abfahrt: 12:09 Sendlinger Kirche">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1781651359560" ID="ID_355203422" MODIFIED="1781651374030" TEXT="Ziel f&#xfc;r Ankunft am Flughafen: 13:00 +x"/>
<node CREATED="1781656583769" ID="ID_945016614" MODIFIED="1781656593839" TEXT="Boarding-Time: 14:40"/>
<node CREATED="1781532071241" ID="ID_62918728" MODIFIED="1781532079131" TEXT="Bag-drop Deadline: 14:45"/>
<node CREATED="1781656662525" ID="ID_1538980114" MODIFIED="1781656668317" TEXT="Gate schlie&#xdf;t: 15:10"/>
<node CREATED="1781530022658" ID="ID_925566273" MODIFIED="1781530034141" TEXT="Depart: 15:25 MEST"/>
<node CREATED="1781530072499" ID="ID_1759665102" MODIFIED="1781656644988" TEXT="Terminal 2 Gate-Area H"/>
<node CREATED="1781656645613" ID="ID_627941235" MODIFIED="1781656650787" TEXT="Gate H24"/>
<node CREATED="1781530084274" ID="ID_1325622136" MODIFIED="1781530087509" TEXT="A320neo"/>
<node COLOR="#338800" CREATED="1781656792137" ID="ID_1901609818" MODIFIED="1781656794772" TEXT="check-in">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1781521124737" ID="ID_1340964220" MODIFIED="1781521126416" TEXT="R&#xfc;ckflug">
<node CREATED="1783352841090" ID="ID_484481637" MODIFIED="1783352852865" TEXT="Check-out im Hotel ca 10:30"/>
<node CREATED="1783352853375" ID="ID_974656381" MODIFIED="1783352873115" TEXT="kurz nach 11:00 in Maynooth in den Zug gestiegen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Will hat mich noch zum Bahnhof gebracht...
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783352877496" ID="ID_1656703385" MODIFIED="1783352890214" TEXT="hatte dann &gt; 2h in Dublin">
<node CREATED="1783352895946" ID="ID_1245615755" MODIFIED="1783355275054" TEXT="Gep&#xe4;ckaufbewahrung hat v&#xf6;llig problemlos funktioniert">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Tip: die App installieren!
</p>
</body>
</html></richcontent>
<linktarget COLOR="#434cb2" DESTINATION="ID_1245615755" ENDARROW="Default" ENDINCLINATION="275;14;" ID="Arrow_ID_601912277" SOURCE="ID_66627055" STARTARROW="None" STARTINCLINATION="421;0;"/>
<linktarget COLOR="#4878b2" DESTINATION="ID_1245615755" ENDARROW="Default" ENDINCLINATION="310;0;" ID="Arrow_ID_627411553" SOURCE="ID_893630246" STARTARROW="None" STARTINCLINATION="566;0;"/>
</node>
<node CREATED="1783352908429" ID="ID_1002742986" MODIFIED="1783353270945" TEXT="&quot;wohl gef&#xfc;hlt&quot; hab ich mich dabei nicht">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...man geht in so einen &#187;convenience store&#171; am Block gegen&#252;ber der Connolly Station. Das ist Bahnhofs-Gegend, aber immerhin nicht direkt im Bahnhof. Im Laden kommt so ein gestresster syrischer Ladenbesitzer (allerdings: in Irland ist Jedermann viel taktvoller als hier in Deutschland), macht ein Foto mit seinem Handy, und stellt das Gep&#228;ck dann auf ein Regal direkt hinter dem Tresen. Sp&#228;ter, beim Abholen, erkennt er einen &quot;you want to pick up your luggage?&quot;, wuchtet die zwei Sachen raus, und das wars dann. Wenn w&#228;hrend der Zeit jemand in meinen Rucksack &quot;geschaut&quot; h&#228;tte, dann h&#228;tte ich eine Beschwerde machen m&#252;ssen...
</p>
<p>
Wei&#223; nicht, ob mir eine Halle mit Schlie&#223;f&#228;chern dort wirklich sympatischer w&#228;re. Naja, hab Connolly Station eigentlich als ungef&#228;hrlich empfunden.
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1783353283530" ID="ID_901827813" MODIFIED="1783353423530" TEXT="15:09 mit dem Flughafenbus">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Die Info im Internet war falsch. Die Station ist nicht an George's Quay, sondern direkt gegen&#252;ber am (sehr bekannten) Zollhaus. Alles sehr relaxed, kurzer Blick auf das Handy, da&#223; man ein Ticket hat, niemand schaut genau hin. Der erste Bus war zu voll. Ich stand mit 20 weiteren Leuten da. Ein Mitarbeiter des Busbetreibers ist dort vor Ort. 5 Minuten sp&#228;ter kam der n&#228;chste Bus, der war halb leer.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783353424871" ID="ID_552493329" MODIFIED="1783353466925" TEXT="war damit 15:30 berereits am Flughafen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
also gute 2 Stunden Zeit.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783353468465" ID="ID_1068490435" MODIFIED="1783353571013" TEXT="Check-In f&#xfc;r Lufthansa + SwissAir leicht zu finden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ein Schalter f&#252;r First, drei Schalter f&#252;r Business + Ecconomy. Keine Warteschlange
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783353573275" ID="ID_1155171226" MODIFIED="1783353669564" TEXT="Sicherheitskontrolle hat ca. 15 Minuten gedauert">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ist in Terminal-1 im obersten Stockwerk. Kurze Wartezeit in der Schlange. Alles in eine Schale, danach sortiert das System in &quot;sofort OK&quot; vs. &quot;manuelle Nachkontrolle&quot;. Ich war in ersterer Kategorie.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783353671294" ID="ID_594703854" MODIFIED="1783353715861" TEXT="war danach erst mal in aller Ruhe auf dem Klo">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wie &#252;blich: die WCs direkt bei der Sicherheitskontrolle sind nicht sonderlich frequentiert, und sehr sauber.
</p>
</body>
</html></richcontent>
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1783353717408" ID="ID_1892189619" MODIFIED="1783353819179" TEXT="Wartezeit verging rasch">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Hab mir eine Cola gekauft, und dann mein Schmerzmittel genommen. Das war ein sehr guter Trick. Vorher, tags&#252;ber war es noch m&#252;hsam.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783353834897" ID="ID_1454753493" MODIFIED="1783353884486" TEXT="nur einfache Pa&#xdf;kontrolle beim Boarding">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Im Vergleich dazu sind die Beh&#246;rden in Deutschland wirklich paranoid.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783353958688" ID="ID_14650357" MODIFIED="1783354030247" TEXT="Hin- wie R&#xfc;ckflug war komplett ausgebucht">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
daher das &#252;bliche Spiel, ob jemand noch sein Handgepeck aufgeben m&#246;chte. Da waren aber auch Leute mit Rollkoffern. Bei mir hat niemand gefragt, und letztlich hat der Platz im Flugzeug dann auch locker gereicht
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1781521003339" ID="ID_79687716" MODIFIED="1781666562100" TEXT="Nahverkehr Dublin">
<icon BUILTIN="button_ok"/>
<node CREATED="1781666567793" ID="ID_1000796696" MODIFIED="1783354035665" TEXT="brauche eine Leap Visitor Card"/>
<node CREATED="1781666577822" ID="ID_1289346136" MODIFIED="1781666587148" TEXT="Verkaufstelle w&#xe4;re z.B. der Spar im Terminal-2"/>
<node COLOR="#338800" CREATED="1781666587968" ID="ID_845747754" MODIFIED="1781666598707" TEXT="hab die Routenplanungs-App">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781666604477" ID="ID_1967788146" MODIFIED="1781666613125" TEXT="hab ein Ticket f&#xfc;r den Express-Bus gekauft">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1781521028121" ID="ID_960362958" MODIFIED="1781666556579" TEXT="Karten bereitstellen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1781521041562" ID="ID_1112143538" MODIFIED="1783354047935" TEXT="Gep&#xe4;ckaufbewahrung Montag">
<icon BUILTIN="button_ok"/>
<node CREATED="1783354053081" ID="ID_1041441953" MODIFIED="1783354057718" TEXT="Benny hat mir einen Tip gegeben"/>
<node CREATED="1783354058330" ID="ID_66627055" MODIFIED="1783354094276" TEXT="war dann letztlich der gleiche Tip, wie von ChatGPT">
<arrowlink COLOR="#434cb2" DESTINATION="ID_1245615755" ENDARROW="Default" ENDINCLINATION="275;14;" ID="Arrow_ID_601912277" STARTARROW="None" STARTINCLINATION="421;0;"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1783354158016" ID="ID_131441753" MODIFIED="1783358496766" TEXT="was ich &#xfc;bersehen hatte: Netz-Adapter">
<linktarget COLOR="#ac4e6b" DESTINATION="ID_131441753" ENDARROW="Default" ENDINCLINATION="-131;-567;" ID="Arrow_ID_1550824993" SOURCE="ID_671509472" STARTARROW="None" STARTINCLINATION="-252;19;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1783354171454" ID="ID_259492664" MODIFIED="1783354179678" TEXT="Irland hat das englische Stecker-System"/>
<node CREATED="1783354180095" ID="ID_1613950322" MODIFIED="1783354195478" TEXT="ist aber elektrisch kompatibel zu Europa"/>
<node CREATED="1783354198024" ID="ID_1447295955" MODIFIED="1783354207317" TEXT="Adapter gibt es an jedem &quot;convenience store&quot;"/>
<node CREATED="1783354215003" ID="ID_294205898" MODIFIED="1783354423947" TEXT="konkret: HL Smith Terminal-1 oder &quot;Spar&quot; Terminal-2">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
hab dann bei Smith 2 Adapter gekauft, St&#252;ck 10&#8364;. Problem gel&#246;st. Leap Visitor Card gabs da aber nur f&#252;r 1 Tag (genauso wie's ChatGPT sagte). Bin dann weiter zu Terminal-2 gelaufen. War sehr gut, da&#223; ich mir sp&#228;t nachts noch Google-Maps angeschaut habe. Merke, das ist keine Paranoia, sondern eine sehr gute Gewohnhait von mir!!!
</p>
<p>
In Terminal-2 war &quot;Spar&quot; etwas versteckt, ist n&#228;mlich im oberen Stock, beim Eingang zum Abflug (w&#228;hrend WL Smith in Terminal-1 unten bei der Ankunft ist, ganz links). Leap Visitor Card dort gekauft, dann einen neuen Bus gebucht
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783354426801" ID="ID_40376061" MODIFIED="1783355039734" TEXT="Erfahrung: Flughafenbus">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Definitiv so: man mu&#223; die Tickets online buchen. Das geht aber auch noch vor Ort (per WLan), wenige Minuten vor Abfahrt. Visa-Debitkarte von ING und Consors hat problemlos funktioniert. Das mu&#223; man aber im Griff haben (also kein Zeitdruck! ruhige Ecke suchen, eine App verwenden, von der man sicher ist, da&#223; die Verifikation funktioniert, wie hier, die ING-App). Was ich nicht wu&#223;te: ich h&#228;tte mir gar nicht nochmal ein Ticket kaufen m&#252;ssen, mein vorher gebuchtes Ticket f&#252;r den Bus 30 minuten fr&#252;her, den ich vers&#228;umt habe, wegen der Geschichte mit dem Netz-Adaptor, w&#228;re informell akzeptiert worden, weil die Leute dort &quot;common sense&quot; haben.
</p>
<p>
Die Busfahrt dauert ca 40 Minuten. Davon gef&#252;hlt die H&#228;lfte durch ein endloses Tunell unter der Stadt durch. Das letzte St&#252;ck im Stadtverkehr zieht sich endlos. George's Quay ist die erste Station in der Stadt, und die n&#228;chste zu Connolly Station. Tara Street Station w&#228;re sogar direkt daneben, aber mein Zug fuhr von Connolly.
</p>
<p>
Der Bus f&#228;hrt von dort weiter den Liffy-River entlang, insges. braucht er 40 Minuten, bis er auf der anderen (n&#246;rdlichen) Seite, vor dem Zoll-Geb&#228;ude wieder ankommt. Die Pl&#228;ne und Angaben auf der Website sind irref&#252;hrend. F&#252;r den R&#252;ckflug sollte man nicht ab George's Quay buchen, sondern gegen&#252;ber. Spielt aber in der Praxis keine Rolle. Gegen&#252;ber, beim Zoll-Geb&#228;ude ist ein Mitarbeiter der Buslinie vor Ort. Fahrg&#228;ste werden einfach nach vorhandener Kapazit&#228;t mitgenommen, da die Busse tats&#228;chlich alle 10 Minuten fahren. W&#228;re ich, wie gebucht, an George's Quay eingestiegen, dann w&#228;re ich 40 Minuten durch die Stadt gezockelt. Aber der Busfahrer dr&#252;ben am George's Quay hat mir das gleich gesagt. Vorher hatte ich einen Passanten angesprochen, auch der war, wie typisch in Irland, nicht betont freundlich, aber offen und gespr&#228;chig. Er hat mir gleich gesagt, wie das hier l&#228;uft, und mir dann gleich erz&#228;hlt, da&#223; er einen Freund in Deuschland hat, der jetzt nach Finnland &#252;bersiedelt, usw... Ja so sind die drauf. Kann man sich in DE gar nicht vorstellen.
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1783355051623" ID="ID_427423585" MODIFIED="1783355054598" TEXT="Links">
<node CREATED="1783355068680" LINK="https://about.leapcard.ie/about/where-to-buy?" MODIFIED="1783355068680" TEXT="https://about.leapcard.ie/about/where-to-buy?"/>
<node CREATED="1783355096471" ID="ID_1267131533" LINK="https://checkout.dublinexpress.ie/" MODIFIED="1783355096471" TEXT="https://checkout.dublinexpress.ie/"/>
<node CREATED="1783355164275" LINK="https://www.transportforireland.ie/available-apps/tfi-live/" MODIFIED="1783355164275" TEXT="https://www.transportforireland.ie/available-apps/tfi-live/"/>
<node CREATED="1783355248868" ID="ID_1985129010" LINK="https://radicalstorage.com/luggage-storage/dublin/connolly-rail-station" MODIFIED="1783355248868" TEXT="https://radicalstorage.com/luggage-storage/dublin/connolly-rail-station">
<node CREATED="1783355260847" ID="ID_893630246" MODIFIED="1783355721903" TEXT="die hab ich verwendet">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Den Umst&#228;nden enstprechend ist das wohl die praktischste L&#246;sung. Man installiert eine App, bucht und bezahlt sich das kurz vorher (bei mir: am Abend vorher). Dann geht man in den jeweilgen &quot;convenience store&quot;.
</p>
<p>
Mir pers&#246;nlich, als old-Timer w&#228;re eine Halle mit Schlie&#223;f&#228;chern am Bahnhof viel sympatischer. Aber Bahnh&#246;fe sind auch nicht mehr das, was sie mal waren. Wobei Irland hier einen sehr guten Eindruck hinterl&#228;&#223;t. Aber auch das mit dem lokalen Shop ist letztlich OK, da es in Irland der normale Stil ist. In Deutschland sind solche Shops praktisch immer &quot;zwielichtig&quot;, in Irland nicht. Au&#223;erdem hat man ja den Storage-Betreiber mit der App, und ein Foto vom Gep&#228;ck wird vorher auch gemacht, das gibt eine gewisse Sicherheit. Wobei mir klar ist, da&#223; man im Problemfall erst mal selber sich um eine Beschwerde k&#252;mmern m&#252;&#223;te.
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#4878b2" DESTINATION="ID_1245615755" ENDARROW="Default" ENDINCLINATION="310;0;" ID="Arrow_ID_627411553" STARTARROW="None" STARTINCLINATION="566;0;"/>
</node>
<node CREATED="1783355248869" ID="ID_766057884" MODIFIED="1783355248869" TEXT="oder:">
<node CREATED="1783355248869" ID="ID_1480973137" LINK="https://www.dublinairport.com/at-the-airport/facilities/luggage-facilities" MODIFIED="1783355248869" TEXT="https://www.dublinairport.com/at-the-airport/facilities/luggage-facilities"/>
<node CREATED="1783355248870" ID="ID_1249155908" LINK="https://bounce.com/luggage-storage/dublin" MODIFIED="1783355248870" TEXT="https://bounce.com/luggage-storage/dublin"/>
<node CREATED="1783355248870" ID="ID_1566717405" LINK="https://stasher.com/" MODIFIED="1783355248870" TEXT="https://stasher.com/"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1781521053248" ID="ID_1208693129" MODIFIED="1783356020921" TEXT="Aufenthalt">
<icon BUILTIN="button_ok"/>
<node CREATED="1781521079725" ID="ID_439928185" MODIFIED="1781521083386" TEXT="Essen?">
<node CREATED="1783355723349" ID="ID_1548869747" MODIFIED="1783355847796" TEXT="Tja ... h&#xe4;tte ich gerne mehr kennengelernt...">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...aber, realistisch geshen, ist das f&#252;r mich vorbei. Es ist besser, wenn ich nichts esse, und es ist sicherlich kein Genu&#223; mehr, mit anderen Leuten zum Essen zu gehen, sondern ein ziemlicher Stre&#223;faktor. Die ersten beiden Tage ging's noch relativ glatt. Und ich war froh, mich an Will dranh&#228;ngen zu k&#246;nnen, der die Gepflogenheiten besser versteht.
</p>
</body>
</html></richcontent>
<icon BUILTIN="smily_bad"/>
</node>
<node CREATED="1783355849528" ID="ID_429086567" MODIFIED="1783356014201" TEXT="Immerhin: das Hotel hatte ein klassisches Irish breakfast">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...und das hab ich genossen. Jetzt wei&#223; ich, was &quot;black pudding&quot; ist.
</p>
<p>
An den letzten Tagen war dieses Fr&#252;hst&#252;ck praktisch das einzige, was ich den ganzen Tag gegessen habe, und das war so die beste L&#246;sung. Im Grunde &#228;hnlich wie in Lyon, und auch dort hat sich das bew&#228;hrt (auch wenn ich immer noch die andere Vorstellung im Kopf habe, da&#223; man auf einer Reise irgendwo genu&#223;voll und entspannt zum Essen geht, mit Leuten, bei denen man sich wohlf&#252;hlt)
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1781521083876" ID="ID_593173048" MODIFIED="1781521101566" TEXT="war kann man in Dublin machen?">
<node CREATED="1783356022966" ID="ID_407501820" MODIFIED="1783356083354" TEXT="Benny hatte den besten Tip f&#xfc;r mich: die Irish National Gallery">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das ist meine Welt. Hab praktisch den ganzen Tag dort verbracht. Mit dem ganzen sonstigen sight-seeing k&#246;nnen die sich mal ihren Schuh aufblasen.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783356085379" ID="ID_1658706026" MODIFIED="1783356444120" TEXT="und: ich war in Howt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das ist eine Touristen-Attraktion. War mir vorher klar. Ist aber leider auch wirklich so. Ich war praktisch die ganze Zeit nur mit meinem eigenen Hass auf diesen leeren Betrieb besch&#228;ftigt.
</p>
<p>
Warum ich aber dann doch nach Howt gefahren bin, war der Klippen-Trail, den ich auf der Karte gesehen hatte. Ich bin die zweitl&#228;ngste Strecke gelaufen, 12km, rote Markierung. Damit war ich nach den ersten 45 Minuten raus aus dem Touristen-Strom. Au&#223;erdem war ich schon wohlweislich erst am sp&#228;ten Nachmittag, um 17:00 angekommen. Es war Sonnwend, also Sonnenuntergang kurz vor 22:00 Irischer Sommerzeit. Tats&#228;chlich bin ich sogar fr&#252;her wieder heim, um 21:00. Den schmalen Pfad &#252;ber dieses eigenartige Hochland werde ich in Erinnerung behalten. Und die M&#246;ven. Ansonsten ist es dort laut, denn es liegt in der Einflugschneise vom Flughafen. Und eine Techno-Party war auch noch, vermutlich wegen Sonnwend.
</p>
</body>
</html></richcontent>
<icon BUILTIN="smiley-neutral"/>
</node>
<node CREATED="1783356447630" ID="ID_775846710" MODIFIED="1783357210751" TEXT="im &#xdc;brigen war mir Dublin unheimlich...">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Hab die Wellenl&#228;nge dieser Stadt nicht wirklich gefunden.
</p>
<p>
Hatte daf&#252;r aber auch gar keine Zeit, und keinen Grund.
</p>
<p>
Was ich gesehen habe, war eine Mitte, die keine ist. Ein Hafen, der nicht mehr zug&#228;nglich ist, sondern ein Industriegebiet. Massiver Autoverkehr. Keine U-Bahn. Enge Stra&#223;en, durch die sich auch noch diese Stockbusse durchzw&#228;ngen. Massen an Touristen, f&#252;r die kein Raum ist. Und massives Elend &#252;berall. Verfallende Altbauten, und moderne Architektur, die wie ein Raumschiff eingepflanzt ist, und um sich herum keinen Stadtraum schafft.
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
2026-05-12 11:36:16 +02:00
</node>
<node BACKGROUND_COLOR="#c0c8f4" COLOR="#5a4398" CREATED="1783358907786" ID="ID_602463099" MODIFIED="1783358947492" STYLE="fork" TEXT="Fazit">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="back"/>
<node CREATED="1783358952176" ID="ID_157125384" MODIFIED="1783359064870" TEXT="Workshop gut &#xfc;ber die B&#xfc;hne gebracht">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Es war der letzte Slot im Programm, und wir haben es geschafft, da&#223; es bei uns &#187;Musik&#171; gab (keine &quot;Avant-Garde&quot; und keine Tech-Demo). Die allgemeine Stimmung war sehr erfreulich. So einige Zuh&#246;rer waren wieder sichtlich beeindruckt von den klanglichen M&#246;glichkeiten. Einige kamen nachher noch, und haben auf dem Keyboard gespielt.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783359066482" ID="ID_1590606696" MODIFIED="1783359804215" TEXT="Mein Kurz-Talk-im-Workshop lief so lala-OK-ish">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ich hatte die ganzen Abende vorher, im Hotell ge&#252;bt, und wu&#223;te schon jeden Punkt auswendig. Das hat sich bew&#228;hrt. Thematisch bin ich in dieser Vorbereitung, w&#228;hrend der Konferenz etwas &#187;zur&#252;ckgerudert&#171;. Auch das war angemessen. Ich hatte das Gef&#252;hl, da&#223; niemand im Publikum ver&#228;rgert war, ich aber auch nichts wirklich Erhellendes gesagt habe. Was ich aber im R&#252;ckblick als gut empfinde, denn ich hatte nicht die Position f&#252;r etwas Weitergehendes.
</p>
<p>
Um es nochmal zu rekapitulieren, <i>ich</i>&#160;wollte diesen Themenblock nicht, aber Will war es wichtig. Ich selber empfinde die Schwierigkeiten, die wir letztes Jahr hatten, als normal und keiner Rede wert. Was <i>mich dabei</i>&#160;nur &#228;rgert ist, da&#223; <i>ausgerechnet ich diese Drecksarbeit </i>andauernd machen mu&#223;. Aber letztlich gibt es nur mich und Will, Kristian ist berufst&#228;tig und hat Familie, und nur sporadisch mal Zeit, Jesper will sich raushalten (und nicht wieder Project-Lead werden). Und wenn man Will pers&#246;nlich trifft, ist v&#246;llig klar, wer er ist, was sein Horizont ist, und was er nicht machen kann. Insofern bleibe ich einfach &#252;brig, und wenn mir an Yoshimi weiterhin was liegt, werde ich diese Arbeit machen m&#252;ssen, oder das Projekt geht vor die S&#228;ue. All das hab ich aber nicht gesagt, und ich habe es inhaltlich gut hinbekommen, stattdessen etwas Generisches zu sagen, das doch immerhin den Sachverhalt bezeichnet. Hab mich ziemlich genau an die hier skizzierte Gliederung gehalten. Weiterungen zu AI habe ich nicht ausgef&#252;hrt, obwohl <i>das</i>&#160;das Einzige gewesen w&#228;re, was mich daran interessiert h&#228;tte. Es ist aber auch gut so, das habe ich an der Diskussion in den vorangegangenen Tagen gemerkt.
</p>
<p>
Vom Sprechen her war es so la-la. Ich glaube, ich hab nicht mehr so viel gestottert. Da&#223; meine Aussprache grauenhaft deutsch klingt, habe ich inzwischen einfach akzeptiert, und ignoriere es (was mir sehr hilft, mich auf die Wortwahl zu konzentrieren). Duch die Vorbereitung mu&#223;te ich nicht &quot;nach Worten suchen&quot;. Ansonsten war mein Vortrag nach meinen eigenen Ma&#223;st&#228;ben ziemlich mittelm&#228;&#223;ig. Es gab auch keinen Spannungsbogen (und ich hatte eigentlich nach meinem eigenen Empfinden nichts zu sagen).
</p>
<p>
Am Ende habe ich meinen Block nicht ganz zuende formuliert, da mir Will mit einem Einwurf eine Br&#252;cke zur&#252;ck gebaut hat (die viel geschickter war, als das, was ich grade sagen wollte, daher habe ich sie sofort genommen)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783359806614" ID="ID_672968897" MODIFIED="1783360282544" TEXT="der Zeit-Slot hat gereicht, war sogar zu lang">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Damit hat sich mein urspr&#252;ngliches Bauchgef&#252;hl best&#228;tigt. Will kann nicht einmal 45 Minuten f&#252;llen, er w&#252;rde nur Demo nach Demo machen. Durch die Gliederung, die wir uns vorher gmacht haben, waren wir aber eigentlich gut sortiert. Insofern best&#228;tigt sich, warum Will mich gebeten hat, mitzumachen. Er hat n&#228;mlich jeden meiner Vorschl&#228;ge gerne aufgenommen; die Zusammenarbeit war sehr konstruktv, vor allem, als wir uns pers&#246;nlich abstimmen konnten, im Hotel in Maynooth.
</p>
<p>
</p>
<p>
Am Ende vom Zeit-Slot blieb etwas Luft, und so hat Will noch einen weiteren Track von sich gespielt, der aber nur noch wenig zum Thema beigetragen hat. Ich hab ihm dann signalisiert, da&#223; es reicht, und er hat das verstanden. Da waren wir in Minute 40. Insofern konnten wir sogar noch etwas Diskussion machen. Da kam dann eine Frage zu meinem Themenblock und zur Dokumentation. Im R&#252;ckblick &#228;rgert es mich, da&#223; ich nicht im Stande war, das besser aufzugreifen (da h&#228;tte ich n&#228;mlich nochmal eine Br&#252;cke zur A.I. schlagen k&#246;nnen). Aber was ich gesagt habe, war OK, und mehr wollte der Fragende ja eigentlich nicht. Ansonsten kamen noch zwei technische Detail- / Verst&#228;ndnisfragen, die wieder zeigen, da&#223; viele Zuh&#246;rer nur mit CSound oder PureData experimentieren, aber nicht mit so einem typsichen &quot;Synthie&quot; vertraut sind (denn in dieser Hinsicht ist Zyn/Yoshimi &#252;berhaupt nicht &#252;berraschend)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1783360099299" ID="ID_1453107748" LINK="https://lac26.mucs.club/gallery/" MODIFIED="1783360117914" TEXT="Hier sind Photos von der Konferenz">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1783360325165" ID="ID_1549768533" MODIFIED="1783362343464" TEXT="Maynooth behalte ich gerne in Erinnerung">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
F&#252;r mich war dazu essentiell, da&#223; ich nicht blo&#223; Zuh&#246;rer war, sondern ein Projekt vertreten habe. Bez&#252;glich &#187;Networking&#171; hatte ich keine Ambitionen, hab aber auch nichts vers&#228;umt; ich habe zwei oder drei Leuten ausf&#252;hrlich von Lumiera erz&#228;hlen k&#246;nnen, und die schienen alle durchaus im Stande, die Tragweite zu erkennen. Allerdings war niemand da, der mich jetzt direkt etwas voranbringen w&#252;rde. H&#228;tte ich aber auch nicht erwartet, ich kenne diese Community. M&#246;glich w&#228;re es, aber die Community wird kleiner und kleiner, und wer noch da ist, sitzt in seiner Ecke. Ich h&#228;tte mich gefreut, etwas mehr mit Robin reden zu k&#246;nnen. Das hat sich aber nicht ergeben, und ich habe keinerlei Interesse, da &quot;zu dr&#252;cken&quot;. Robin zeigt seinerseits kein Interesse, und f&#252;hlt sich mir gegen&#252;ber etwas unwohl, obwohl er oberfl&#228;chlich immer den &quot;alten Bekannten&quot; begr&#252;&#223;t. Bemerkenswerterweise hatte Robin alles vergessen, was ich ihm in Lyon von Lumiera erz&#228;hlt hatte. Er war erstaunt, zu h&#246;ren, da&#223; ich immer noch mit Lumiera weitermache. Ich komme mit ihm nicht auf die Ebene, die interessant w&#228;re (w&#252;rde mir davon aber auch nichts erwarten, da ich inzwischen ziemlich genau vestehe, wo er steht). Drei bis vier andere Leute, die ich in Lyon kennengelernt hatte, und mit denen ich gerne wieder ankn&#252;pfen wollte, waren nicht da. Insgesamt war sonst kaum jemand da, mit dem mich pers&#246;nlich ein Gespr&#228;ch interessiert h&#228;tte. Ich bin aber weiterhin vorsichtig, mich nicht zu aggressiv zu positionieren. Aktuell geht es mir nur darum, pr&#228;sent zu sein (ich k&#246;nnte auch in keine Art von Kollaboration einsteigen derzeit, weil ich meine Kr&#228;fte zusammenhalten mu&#223;, insofern bin ich froh, da&#223; sich auch dazu keine Gelegenheit ergab).
</p>
<p>
</p>
<p>
Ohne diese Aufgabe, ein Projekt zu vertreten (und Networking zu machen), w&#252;rde mich die LAC (schon seit langer Zeit) nicht hinter dem Ofen vorlocken. Die &quot;Konzerte&quot; sind immer gleich. Da gen&#252;gt ein Termin, weil es schon sch&#246;n ist, ein gut aufgebautes Ambisonics zu h&#246;ren. Das zweite und drite Konzert habe ich &quot;geschwenzt&quot;. Das war ein Gl&#252;ck, denn anstelle des zweiten Konzerts hatte ich Zeit, in dieser alten Universit&#228;ts-Anlage zu sein und nichts zu tun, und die Stille und Ruhe des Ortes aufzunehmen. Das war auch der Abend mit dem Gewitter und dem Regenbogen.
</p>
<p>
Insgesamt war Maynooth viel kleiner und bescheidener aufgebaut, als Lyon, was aber einfach an den dahinter stehenden Organisationen lag. Das dritte Konzert, in Dublin, w&#228;re ein allgemeines Experimental-Konzert f&#252;r elektronische Musik gewesen. Von mir aus h&#228;tte mich das nur gelangweilt, und da Will auch kein Interesse hatte, war die Konferenz sehr schnell beendet. So hatte ich Zeit f&#252;r eine Wanderung zum Carton Demense, und hab so tats&#228;chlich ein St&#252;ck von Irland gesehen.
</p>
<p>
Hinzu kommt, da&#223; ich doch bei einer solchen Gelegenheit immer wieder merke, wie sehr ich gesundheitlich angeschlagen bin. Am vierten Tag, an dem ich nach Dublin wollte, ging es mir ziemlich dreckig. Sp&#228;ter, gegen Abend zu, hat es sich etwas mehr eingependelt, was aber auch damit zusammenh&#228;ngt, da&#223; ich da in Howt im Freien war, und mehrere Stunden einfach allein laufen konnte.
</p>
<p>
Insgesamt war es ein &#187;Nicht-Urlaub&#171; von einer Art, die ich noch gut ertragen kann. Dieses kleine Universit&#228;ts-St&#228;dtchen mutet an wie aus einer andern Zeit, da war die &#187;Quality without a Name&#171;, von der Christopher Alexander spricht. Und zum Gl&#252;ck mu&#223; ich dort nicht leben. Das Hotel war mindestens eine Kategorie zu edel f&#252;r mich, aber ich konnte gut unerkannt bleiben, die Leute in Irland sind wirklich auf eine unaufdringliche Art zugewandt, und ich hab mich sehr wohl gef&#252;hlt. Vom Hotel aus war alles fu&#223;l&#228;ufig zu erreichen, die w&#252;ste Welt der Automobile war zwar zu h&#246;ren, aber nur auf der anderen Seite. Und zum Gl&#252;ck gibt es praktisch nichts &quot;Sehenswertes&quot; im Maynooth.
</p>
<p>
</p>
<p>
Wenn ich nur bedenke, was Daniela garde im Moment mit ihrer LItauen-Bildungsreise alles um die Ohren geworfen bekommt, dann graut mir, und ich f&#252;hle mich verloren. Was f&#252;r ein lehrer und eitler Betrieb das alles.
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1519000413497" HGAP="-43" ID="ID_1743786269" MODIFIED="1715873905102" POSITION="left" VSHIFT="108">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
org<font size="3">a</font><font size="1">nisatorisch</font>
</p>
</body>
</html></richcontent>
<edge COLOR="#f1ff7f"/>
<font NAME="SansSerif" SIZE="16"/>
<node CREATED="1715854555555" ID="ID_954941333" MODIFIED="1715854555555" TEXT="Termin">
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1519001747051" ID="ID_1181924241" MODIFIED="1779386001214" TEXT="Call-of-Papers">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1519001776927" ID="ID_562121416" MODIFIED="1779556988899" TEXT="Deadline">
<icon BUILTIN="clanbomber"/>
2026-05-12 11:36:16 +02:00
<node COLOR="#338800" CREATED="1715854555555" ID="ID_897784401" MODIFIED="1779385985746" TEXT="23.5.">
2024-08-04 02:41:20 +02:00
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1519519862359" ID="ID_986061503" MODIFIED="1779386001216" TEXT="Acceptance notification:">
<icon BUILTIN="flag-yellow"/>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1519329832209" ID="ID_242907821" MODIFIED="1779388707226" TEXT="Format">
2024-08-04 02:41:20 +02:00
<icon BUILTIN="info"/>
2026-05-12 11:36:16 +02:00
<node CREATED="1722708347189" ID="ID_290520471" MODIFIED="1747438903818" TEXT="Kurzform und Langform"/>
<node CREATED="1722708352348" ID="ID_1408970240" MODIFIED="1722708358823" TEXT="Text mit HTML-Markup"/>
<node CREATED="1722708359315" ID="ID_599162106" MODIFIED="1722708370381" TEXT="Eingabe im FrOSCon-Konferenzsystem">
<node CREATED="1747815803642" ID="ID_354079086" MODIFIED="1779388718154" TEXT="mein Account funktioniert noch">
<richcontent TYPE="NOTE"><html>
<head/>
2026-05-12 11:36:16 +02:00
<body>
<p>
-----BEGIN PGP MESSAGE-----
</p>
<p>
</p>
<p>
hF4DgGNXC/FW0HQSAQdAynTDJxP4gey1VAsJ/2fb/Pz/7SdEDaH99pGL3xFNBhgw
</p>
<p>
gOXq9+2npcG+wn9stWNHsIHJlCTcgMQWoBSQX8w2irTkUYncReWhdiAbz971t4Cs
</p>
<p>
0sBJAXhQ13ML9umVxaY9+RGxUUZqZ1dLDfcAbDTh0b9xbjrrGclWCA8kO9y8cVOI
</p>
<p>
afQLpsGCRvSaDCGIDTe2sbK1knwCiZK7sQIz6GOYEHQYvyRTwNHhmCivLy4aqy1U
</p>
<p>
jLJVbx0qgbUu+mMJGugNbITFRyfIu2W9P4ceBX4AE0KUaXwwg8CIbQfGld+0+cMc
</p>
<p>
IafKrmBGrIAYf6APYSDbBxXV3V5QfTN4Ew220rxcO8HIpYJDYyaNbHpyT3OjcSgy
</p>
<p>
GVpZ7L8f88aXGKbiwX2rdW1iLbmfBdbFixY0Me4on4A0qHzXpMB7ZeGZ6yvq6j5q
</p>
<p>
/K7d77gSJdwLWRyE49RwdmRXe1Siv/iP4WM9lQ==
</p>
<p>
=RxD1
</p>
<p>
-----END PGP MESSAGE-----
</p>
</body>
</html></richcontent>
2026-05-12 11:36:16 +02:00
<icon BUILTIN="ksmiletris"/>
</node>
</node>
2026-05-12 11:36:16 +02:00
</node>
<node COLOR="#338800" CREATED="1519329836328" ID="ID_214079495" MODIFIED="1779556986278" TEXT="formulieren">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1779805644353" ID="ID_1181598347" MODIFIED="1779805677287" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Titel: <u><font size="4">Reading Video data with IO_URING</font></u>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1779504756681" ID="ID_466048202" MODIFIED="1779504767437" TEXT="halte mich an das Schema aus den letzten Jahren"/>
<node CREATED="1779504768195" ID="ID_531662550" MODIFIED="1779504785771" TEXT="Kurzform und Langform ergeben auch zusammen einen Text"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1779554095269" ID="ID_1290433500" MODIFIED="1779554118621" STYLE="fork" TEXT="habe mir noch einige Vorschl&#xe4;ge von ChatGPT geben lassen">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1779504789243" ID="ID_649621958" MODIFIED="1783787704354" TEXT="Kl&#xe4;ren: kann man mit IO_URING gezielt bestimmte Bereiche eines Files lesen?">
<arrowlink COLOR="#5a07d6" DESTINATION="ID_628756969" ENDARROW="Default" ENDINCLINATION="686;-59;" ID="Arrow_ID_347382746" STARTARROW="None" STARTINCLINATION="347;-14;"/>
<icon BUILTIN="help"/>
2026-07-10 02:57:34 +02:00
<node CREATED="1783446197275" ID="ID_1248460230" MODIFIED="1783446216012" TEXT="IO_URING stellt andere IO-Operationen in asynchroner Weise bereit"/>
<node CREATED="1783446217077" ID="ID_668632489" MODIFIED="1783446293619" TEXT="insofern ja: readv() / writev() k&#xf6;nnen beliebige Teilbereiche eines Files lesen/schreiben">
<arrowlink COLOR="#fdfdca" DESTINATION="ID_1820629134" ENDARROW="Default" ENDINCLINATION="1190;0;" ID="Arrow_ID_836559053" STARTARROW="None" STARTINCLINATION="619;22;"/>
</node>
</node>
</node>
</node>
<node CREATED="1519001760129" ID="ID_1268047369" MODIFIED="1519001762637" TEXT="Konferenz">
<node BACKGROUND_COLOR="#e5d49f" CREATED="1780593833446" ID="ID_1139009542" LINK="https://lac26.mucs.club/" MODIFIED="1780593885021" STYLE="fork" TEXT="LAC Maynooth 18-20.Juni 2026">
<edge COLOR="#f1ff7f" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="calendar"/>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#e5d49f" CREATED="1779386584639" ID="ID_1677738266" MODIFIED="1779386630766" TEXT="15./16. August 2026">
<icon BUILTIN="calendar"/>
</node>
<node CREATED="1519519948666" ID="ID_1460418188" MODIFIED="1519519951178" TEXT="Programm">
<node COLOR="#435e98" CREATED="1780593932919" ID="ID_166107707" LINK="https://lac2026.sciencesconf.org/program?lang=en" MODIFIED="1783362517394" TEXT="Sa 20.Juni 16:30-17:15 Yoshimi-Workshop"/>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#e2eab4" CREATED="1752362406520" ID="ID_1027335076" MODIFIED="1779389036950" TEXT="1X.August XX:00">
<arrowlink COLOR="#97606e" DESTINATION="ID_734596433" ENDARROW="Default" ENDINCLINATION="-323;76;" ID="Arrow_ID_276868768" STARTARROW="None" STARTINCLINATION="-69;10;"/>
<icon BUILTIN="info"/>
2024-08-04 02:41:20 +02:00
</node>
</node>
2026-05-12 11:36:16 +02:00
<node CREATED="1519001850989" ID="ID_795393550" MODIFIED="1519001852201" TEXT="Zeit"/>
2024-08-04 02:41:20 +02:00
</node>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1519001331772" ID="ID_1530039807" MODIFIED="1779386016335" TEXT="Hotel">
<icon BUILTIN="hourglass"/>
<node COLOR="#338800" CREATED="1779390075377" ID="ID_1767288848" MODIFIED="1779390085364" TEXT="LAC/Maynooth ist gebucht">
2024-08-04 02:41:20 +02:00
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1783362491002" ID="ID_1488082806" MODIFIED="1783362505307" TEXT="Hotel Astoria Bonn ist gebucht">
<icon BUILTIN="button_ok"/>
</node>
</node>
2026-05-12 11:36:16 +02:00
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1519001321685" ID="ID_1826326861" MODIFIED="1779386016334" TEXT="Reise">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1779389894637" HGAP="33" ID="ID_1663209801" MODIFIED="1779390020656" TEXT="an Storno-Option f&#xfc;r Benny denken" VSHIFT="10">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>
</map>