M configure.ac +25 -0
@@ 1340,5 1340,30 @@ AC_CONFIG_FILES([kreatives/kritzelkratze
 
 AC_CONFIG_FILES([kreatives/best-thing-today--2025--01--klein.png:kreatives/best-thing-today--2025--01--klein.png
                  kreatives/best-thing-today--2025--01.png:kreatives/best-thing-today--2025--01.png])
+
+AC_CONFIG_FILES([software/p2p-talk.org:software/p2p-talk.org
+                 software/bittorrent-struktur.png:software/bittorrent-struktur.png
+                 software/freenet-fetchpull-get.png:software/freenet-fetchpull-get.png
+                 software/freenet-fetchpull-put.png:software/freenet-fetchpull-put.png
+                 software/freenet-link-length.png:software/freenet-link-length.png
+                 software/freenet-peer-count.png:software/freenet-peer-count.png
+                 software/freenet-weekly-uptime.png:software/freenet-weekly-uptime.png
+                 software/gnutella-suche.png:software/gnutella-suche.png
+                 software/in-view-of-multitasking-sana2013.png:software/in-view-of-multitasking-sana2013.png
+                 software/kademlia-peers-full.png:software/kademlia-peers-full.png
+                 software/kademlia-peers.png:software/kademlia-peers.png
+                 software/Limewire-screen-wikimedia-GPL.png:software/Limewire-screen-wikimedia-GPL.png
+                 software/overlay-structured.png:software/overlay-structured.png
+                 software/overlay-unstructured.png:software/overlay-unstructured.png
+                 software/p2p-grundprobleme-schwarz-einstieg.png:software/p2p-grundprobleme-schwarz-einstieg.png
+                 software/p2p-grundprobleme-schwarz-kommunikation.png:software/p2p-grundprobleme-schwarz-kommunikation.png
+                 software/p2p-grundprobleme-schwarz-suche.png:software/p2p-grundprobleme-schwarz-suche.png
+                 software/p2p-grundprobleme-schwarz-verteilung.png:software/p2p-grundprobleme-schwarz-verteilung.png
+                 software/schluessel-zum-licht.png:software/schluessel-zum-licht.png
+                 software/twitter-torrent-mesh.png:software/twitter-torrent-mesh.png
+                 software/twitter-torrent-ring.png:software/twitter-torrent-ring.png
+                 software/vorlesung-verteilte-systeme-1-p2p-nup-thumb.png:software/vorlesung-verteilte-systeme-1-p2p-nup-thumb.png
+                 software/vorlesung-verteilte-systeme-1-p2p-thumb.png:software/vorlesung-verteilte-systeme-1-p2p-thumb.png])
+
 AC_OUTPUT
 

          
M external-rss.org.in +231 -240
@@ 4,37 4,7 @@ 
 
 
   :FEEDSTATUS:
-(("https://rollenspiel.social/@ArneBab/113802683660413999" t
-  "f8dfedd4c945cfacda6e351016aa5da3c5577237")
- ("https://rollenspiel.social/@ArneBab/113802736042695489" t
-  "c6775cfd97aab8b3e17d7d88f6d295a1ed2e0122")
- ("https://rollenspiel.social/@ArneBab/113804530697844236" t
-  "60fd6921ce21110d4ad2e0de71d4698af8326137")
- ("https://rollenspiel.social/@ArneBab/113810099277961267" t
-  "3ee579004f97341b704bbe2bd667d585fcff2524")
- ("https://rollenspiel.social/@ArneBab/113810461037945052" t
-  "8ab57c33147101dce17dea0ddf988cb415b56c8e")
- ("https://rollenspiel.social/@ArneBab/113810468099136849" t
-  "655ab27b6b03cf51d9ee0a957b3901b4a6099a41")
- ("https://rollenspiel.social/@ArneBab/113815176144832507" t
-  "87f2cf3d48b73746037d3ef654854525b2da0fe1")
- ("https://rollenspiel.social/@ArneBab/113820918290284886" t
-  "9e19aa60beb60a11f939f06a792cc1e274751bb8")
- ("https://rollenspiel.social/@ArneBab/113825369189972831" t
-  "e630c1a9ea0f3c9b9d84fea70d62c4f8138ff5f1")
- ("https://rollenspiel.social/@ArneBab/113826403839562938" t
-  "cff6e9575326022cd824aba9dbea3e0b8fb052cd")
- ("https://rollenspiel.social/@ArneBab/113828705971349946" t
-  "5b722347c147a6fd8d5eefd7c5be40c624eac551")
- ("https://rollenspiel.social/@ArneBab/113831014106523590" t
-  "5fde2130123bbaf834c83cf3c1766ca09b7bed61")
- ("https://rollenspiel.social/@ArneBab/113834047469588499" t
-  "511bed1af21037428a57ed616e7301de72dadf36")
- ("https://rollenspiel.social/@ArneBab/113834573775643340" t
-  "1f0e4aa11e303b9907ae8a2b316510f2f28a1cc0")
- ("https://rollenspiel.social/@ArneBab/113836322478249170" t
-  "f256919298aaa51937b5ecaaadc4f2c8ceea7219")
- ("https://rollenspiel.social/@ArneBab/113836889080343329" t
+(("https://rollenspiel.social/@ArneBab/113836889080343329" t
   "6d81c84d95e09fa5b5463c00ffa82d1c3ec62e9f")
  ("https://rollenspiel.social/@ArneBab/113837072599602692" t
   "c2a10d4a2e45295cf4ac340bf8b5fb10e96e001f")

          
@@ 43,8 13,237 @@ 
  ("https://rollenspiel.social/@ArneBab/113857335924739638" t
   "62ebc0f669a83b782c63e15f6ce534a4f72bc9ae")
  ("https://rollenspiel.social/@ArneBab/113862444017515654" t
-  "96f643d39d367da72bd582215be91138ed51644e"))
+  "96f643d39d367da72bd582215be91138ed51644e")
+ ("https://rollenspiel.social/@ArneBab/113862522882588680" t
+  "9d84ee99ccda86b2dd5f3db359ef8d1e065d9d31")
+ ("https://rollenspiel.social/@ArneBab/113862689812377315" t
+  "cea09fc0e0ba6223ab607413692556de86040f34")
+ ("https://rollenspiel.social/@ArneBab/113862985363405623" t
+  "509148de10f99e1d238fea8d3bb37ec4ee112e3f")
+ ("https://rollenspiel.social/@ArneBab/113863117143343054" t
+  "f9b426601ef910160685f3c8e1e86754a32cdcb8")
+ ("https://rollenspiel.social/@ArneBab/113864923555987034" t
+  "2a8a3d5080c0ef157ed9a7b807374d521428d295")
+ ("https://rollenspiel.social/@ArneBab/113868422760431301" t
+  "1ecb5e9e4166af3c15cb1064d71bb744ed01f4e2")
+ ("https://rollenspiel.social/@ArneBab/113870791778314322" t
+  "d9b619b849b155650ab373aaeb06fec70d290002")
+ ("https://rollenspiel.social/@ArneBab/113872321128551737" t
+  "18f1ccca18dae13c84fa3981da5e42636b40240c")
+ ("https://rollenspiel.social/@ArneBab/113874640566841609" t
+  "d1f527d6d5a626030a68d743748d6288c5827409")
+ ("https://rollenspiel.social/@ArneBab/113881837936381410" t
+  "a78415f35557579bbcfc9499a30f5fe202bc246e")
+ ("https://rollenspiel.social/@ArneBab/113885442695794369" t
+  "5b6e08149f4b97df804b1329697031b1b60ba53b")
+ ("https://rollenspiel.social/@ArneBab/113885457851672166" t
+  "76439de6f5a87cb26df7843ae0929f1f39c3388a")
+ ("https://rollenspiel.social/@ArneBab/113885545779911246" t
+  "19fc39f5e3a2b303339a4d0c83916cfcbca7b6eb")
+ ("https://rollenspiel.social/@ArneBab/113889098376960891" t
+  "d0037d0725cc719deca74b1e5b0fc62ce850e708")
+ ("https://rollenspiel.social/@ArneBab/113889443214974890" t
+  "8dd621ba229dc18fd694070aab23bb2d34280a11"))
   :END:
+** [2025-01-25 Sa 14:23]
+  #Taz: Merz’ Anbiederung an die AfD
+
+Das war’s mit der Brandmauer
+
+
+https://taz.de/Merz-Anbiederung-an-die-AfD/!6061889/
+
+
+Dem ist nichts hinzuzufügen außer #noCDU und stellt euch den Horror
+vor, wenn CDU und AfD zusammen >50% haben sollten.
+
+  [[https://rollenspiel.social/@ArneBab/113889443214974890]]
+
+
+** [2025-01-25 Sa 12:55]
+  Wenn ein Antrag nur mit Stimmen der #noAfD Erfolg haben kann und dann
+mit diesen Stimmen durch geht, ist das Zusammenarbeit mit der AfD.
+
+
+Egal, was CDU-Politiker behaupten.
+
+  [[https://rollenspiel.social/@ArneBab/113889098376960891]]
+
+
+** [2025-01-24 Fr 21:52]
+  Youtube bietet einen *Familientarif* an, nachdem ich ImperiumHymns
+"The Hymn Of Death" starte.
+
+
+Das würde doch bei einem Buchplot auch wieder als unplausibel
+abgelehnt.
+
+  [[https://rollenspiel.social/@ArneBab/113885545779911246]]
+
+
+** [2025-01-24 Fr 21:29]
+  Schlund und Murks.
+
+  [[https://rollenspiel.social/@ArneBab/113885457851672166]]
+
+
+** [2025-01-24 Fr 21:25]
+  Elon zeigt einen Hitlergruß.  BILD: Herzchen!
+
+Schönheit zeigt Elon mit dessen Hitlergruß.  WELT: Hitlergruß!
+
+
+Gab es Medien, die verlässlich informiert haben?
+
+
+https://www.youtube.com/watch?v=J49X4_eaG48
+
+  [[https://rollenspiel.social/@ArneBab/113885442695794369]]
+
+
+** [2025-01-24 Fr 06:09]
+  So soll unser #Bundeskanzler mit schrecklichen Ereignissen umgehen:
+
+
+https://www.youtube.com/watch?v=ZedjKSk_CSk&t=203s
+
+
+#Habeck Aschaffenburg
+
+  [[https://rollenspiel.social/@ArneBab/113881837936381410]]
+
+
+** [2025-01-22 Mi 23:38]
+  USPOL
+
+
+----------------------------------------------------------------------------
+
+Dark Brandon gives a small overview of the rights reaction to Musks
+Nazi salute:
+
+
+https://www.youtube.com/watch?v=48Wd-tByZ7g
+
+
+- cheering for the Nazi "Energy" 🤢 - saying "he did not know what he
+did" (even if that were so: why did you put him on a stage?)
+
+- claiming "didn’t happen"
+
+- "some said it was"
+
+- "not socially apt" (⇒ why on stage?)
+
+- a troll
+
+
+⇒ all but the Neonazis seem to be in denial.
+
+  [[https://rollenspiel.social/@ArneBab/113874640566841609]]
+
+
+** [2025-01-22 Mi 13:48]
+  Wenn ich durch Arbeit 40.000 Euro im Jahr verdiene und jemand anders
+durch Arbeit 20.000 und durch Vermögenszinsen nochmal 20.000 drauf
+bekommt, sollten wir beide gleich viel in die Krankenkasse einzahlen.
+
+  [[https://rollenspiel.social/@ArneBab/113872321128551737]]
+
+
+** [2025-01-22 Mi 07:19]
+  Dread Pirate Roberts ist begnadigt …
+
+https://www.heise.de/news/Verurteilter-Darknet-Pionier-Silk-Road-Gruender-von-Donald-Trump-begnadigt-10251382.html?utm_source=flipboard&utm_medium=activitypub
+
+  [[https://rollenspiel.social/@ArneBab/113870791778314322]]
+
+
+** [2025-01-21 Di 21:17]
+  Yesterday was hard.  It helps me cope to look back what was good in
+2025.  Often little good things that I would not want to have missed.
+
+
+You can see these in my "My best thing today" in #sketchnotes — I
+uploaded the scan for the time between the years:
+
+
+https://www.draketo.de/kreatives/best-thing-today#2025-01
+
+
+See the alt-text for a description.
+
+
+Please boost.  I’m publishing these with some hope that others may
+start #bestthingtoday sketchnotes: it’s a good way to build and
+strengthen positive memories.
+
+
+#ink art
+
+  [[https://rollenspiel.social/@ArneBab/113868422760431301]]
+
+
+** [2025-01-21 Di 06:27]
+  #Dorktower ❤️
+
+
+http://www.dorktower.com/
+
+
+#vonnegut
+
+  [[https://rollenspiel.social/@ArneBab/113864923555987034]]
+
+
+** [2025-01-20 Mo 22:48]
+  I’m now going to take a break from horrible things and listen to
+Warhammer 40k songs.
+
+  [[https://rollenspiel.social/@ArneBab/113863117143343054]]
+
+
+** [2025-01-20 Mo 22:14]
+  USPOL
+
+
+----------------------------------------------------------------------------
+
+Das hat nicht lange gedauert:
+
+
+#noafd musk
+
+  [[https://rollenspiel.social/@ArneBab/113862985363405623]]
+
+
+** [2025-01-20 Mo 20:59]
+  The #network from forgotten times when #crypto meant #privacy, not
+#corruption:
+
+
+→ https://www.hyphanet.org ←
+
+Connect to your friends with #Hyphanet to have a safe haven to
+coordinate when bad comes to worse.
+
+
+#freenet decentralization
+
+  [[https://rollenspiel.social/@ArneBab/113862689812377315]]
+
+
+** [2025-01-20 Mo 20:16]
+  Praise the Emperor:
+
+https://www.draketo.de/politik/kommentare#praise-the-emperor
+
+
+https://www.youtube.com/watch?v=TCaXGGfj0js&list=PLzGpN3drAsQQsKHQD6rd-j_EPJt_4KHF2&index=9
+
+  [[https://rollenspiel.social/@ArneBab/113862522882588680]]
+
+
 ** [2025-01-20 Mo 19:56]
   PRAISE
 

          
@@ 150,214 349,6 @@ https://www.youtube.com/watch?v=LaKByad9
   [[https://rollenspiel.social/@ArneBab/113836889080343329]]
 
 
-** [2025-01-16 Do 05:13]
-  Which well-moderated Mastodon instances used by free software projects
-(or explicitly for free floss projects) do you know?
-
-  [[https://rollenspiel.social/@ArneBab/113836322478249170]]
-
-
-** [2025-01-15 Mi 21:49]
-  „Wer einen nicht loben kann, dem nimmt man auch nicht die Kritik ab.“
-— Luisa Neubauer
-
-https://www.youtube.com/watch?v=SGGxKKhVfs8
-
-  [[https://rollenspiel.social/@ArneBab/113834573775643340]]
-
-
-** [2025-01-15 Mi 19:35]
-  Da droht ein US Präsident der Hamas, sie komplett zu vernichten, und
-plötzlich stimmt die Hamas der Freilassung von Geiseln zu.
-
-
-https://www.deutschlandfunk.de/gaza-streifen-offenbar-einigung-auf-geisel-deal-und-waffenpause-100.html
-
-  [[https://rollenspiel.social/@ArneBab/113834047469588499]]
-
-
-** [2025-01-15 Mi 06:43]
-  Überfrierende Nässe, krasser als in der Schlittschuhhalle, und auf
-schrägen Gehwegen.
-
-
-Bitte passt auf euch auf!
-
-  [[https://rollenspiel.social/@ArneBab/113831014106523590]]
-
-
-** [2025-01-14 Di 20:56]
-  „Das Gewicht der Kapitaleinkünfte ist gestiegen“ [im Vergleich zu
-Lohneinkünften].
-
-
-https://www.deutschlandfunk.de/sozialabgaben-auf-kapitalertraege-eine-gute-idee-100.html
-
-
-Übersetzt: Immer größere Teile des Geldes, das Leute erhalten, wird
-aus der Leistung Anderer gezogen.
-
-
-Der Experte im Artikel redet allerdings um konkrete Zahlen herum.  Die
-Journalistin rechnet dann vor, dass bei 100.000 Euro vermögen etwa 700
-Euro pro Jahr zusammenkommen.  60 Euro pro Monat.
-
-
-Die Beitragsbemessungsgrenze liegt bei 4.425,00 EUR pro Monat.
-
-
-⇒ über 7 Millionen Vermögen.
-
-  [[https://rollenspiel.social/@ArneBab/113828705971349946]]
-
-
-** [2025-01-14 Di 11:11]
-  @lxo I just noticed that the bug you opened at mozilla does not show
-up at the bug that causes it — but I cannot add a reference:
-https://bugzilla.mozilla.org/show_bug.cgi?id=1930548
-
-
-So this may have been missed.
-
-
-https://bugzilla.mozilla.org/show_bug.cgi?id=1930548#c2
-
-
-Can you edit the bug and add 1860492 in the field references →
-regressed by?
-
-  [[https://rollenspiel.social/@ArneBab/113826403839562938]]
-
-
-** [2025-01-14 Di 06:48]
-  Please remember the risk of volatile software¹, volatile
-infrastructure², and soft trauma³, when taking decisions about
-backwards compatibility.
-
-
-¹ https://stevelosh.com/blog/2012/04/volatile-software/
-
-Do not be the tool which breaks itself or other tools on update.
-
-
-² https://www.draketo.de/software/volatile-infrastructure
-
-Volatile Infrastructure is worse than volatile applications.
-
-
-³ https://drewdevault.com/2019/11/26/Avoid-traumatic-changes.html
-
-Two kinds of trauma: something needs work to get working again or it
-needs work to get idiomatic again.
-
-
-#programming freesoftware
-
-  [[https://rollenspiel.social/@ArneBab/113825369189972831]]
-
-
-** [2025-01-13 Mo 11:56]
-  #Tagesschau: "X hat keine große Reichweite in Deutschland."  — Zu
-politischen Themen informieren sich dort nur 5%.  — @sveckert
-
-
-https://www.youtube.com/watch?v=wvaOt1fMh-k
-
-
-Angehängt ist der wichtigste Teil des Tagesschau-Videos.
-
-
-Don’t trust the Musk.
-
-Don’t boost the Murks.
-
-  [[https://rollenspiel.social/@ArneBab/113820918290284886]]
-
-
-** [2025-01-12 So 11:36]
-  Annalena #Baerbock zur Öltanker-Havarie:
-
-
-https://www.youtube.com/watch?v=zHyCYIG3ZCU
-
-
-Sehr wichtige Punkte.
-
-  [[https://rollenspiel.social/@ArneBab/113815176144832507]]
-
-
-** [2025-01-11 Sa 15:38]
-  #Demokratie ist kein Zuschauersport | Robert #Habeck
-
-
-https://www.youtube.com/watch?v=y_12pI0N0kY
-
-
-„eine Politik, die die Ärmel hochkrempelt und bereit ist, sich
-reinzuhängen“
-
-  [[https://rollenspiel.social/@ArneBab/113810468099136849]]
-
-
-** [2025-01-11 Sa 15:37]
-  Warum der #noAfD nun die eigene Jugendorganisation gefährlich wird |
-Inside PolitiX
-
-
-https://www.youtube.com/watch?v=DOu_RcPgdoE
-
-
-„Ich höre aber auch stimmen aus der Parteispitze, die sagen, ‚wir
-brauchen die‘“
-
-  [[https://rollenspiel.social/@ArneBab/113810461037945052]]
-
-
-** [2025-01-11 Sa 14:04]
-  The world shapes us (though not completely) — and for others *we* are
-part of the world that shapes them:
-
-https://www.flipsidecomics.com/comic.php?i=5056
-
-  [[https://rollenspiel.social/@ArneBab/113810099277961267]]
-
-
-** [2025-01-10 Fr 14:28]
-  „Die Union macht kein Angebot“ — Robert Habeck
-
-
-https://www.youtube.com/watch?v=i610QYZeY64
-
-  [[https://rollenspiel.social/@ArneBab/113804530697844236]]
-
-
-** [2025-01-10 Fr 06:52]
-  „CDU übernimmt Vorschlag der AfD zur Ausbürgerung“
-
-https://www.youtube.com/watch?v=1Yhmoqva6aU
-
-
-Und was machen wir jetzt?
-
-
-Gehen wir zu Millionen auf die Straße gegen die CSDUAfD
-
-
-Was machen die für einen Mist ☹
-
-„Die wollen an meinen Pass“ — Eine lose Bekannte
-
-  [[https://rollenspiel.social/@ArneBab/113802736042695489]]
-
-
-** [2025-01-10 Fr 06:39]
-  https://www.draketo.de/zitate#medien-bias
-
-https://www.draketo.de/zitate.pdf Seite 256
-
-  [[https://rollenspiel.social/@ArneBab/113802683660413999]]
-
-
 
 * Gute Neuigkeiten
 

          
M kreatives/best-thing-today.org +3 -4
@@ 74,7 74,7 @@ AC_OUTPUT
 #+attr_latex: :width 0.87\linewidth
 [[file:best-thing-today--2025--01.png][file:best-thing-today--2025--01--klein.png]]
 
-# I uploaded the second "My best thing today" in #sketchnotes for December 2025:
+# I uploaded "My best thing today" in #sketchnotes for the time between the years:
 # 
 # https://www.draketo.de/kreatives/best-thing-today#2025-01
 # 

          
@@ 84,14 84,13 @@ AC_OUTPUT
 # 
 # --- Image Description ---
 # 
-# rough, small sketches in ink with the best experience for almost every day in the timeframe.
+# Rough, small sketches in ink with the best experience for almost every day in the timeframe.
 # 
 # The base is lineart in black and gray, often colored with sky blue, grass green, sun orange, or earth yellow as highlight-colors. On the right there is a streak of colors where I clean the pens after they take up black ink.
 # 
 # It starts with eating and cooking pancakes, followed by raclette.
 # 
-# One is listening to 38c3 streams, another singing with Guitar, and
-# one a scene from a Cthulhu roleplaying session.
+# One is listening to 38c3 streams, another singing with Guitar, and one a scene from a Cthulhu roleplaying session.
 # 
 # There’s a blue rabbit and a dog in front of a stove.
 # 

          
A => software/Limewire-screen-wikimedia-GPL.png +0 -0

        
A => software/bittorrent-struktur.png +0 -0

        
A => software/freenet-fetchpull-get.png +0 -0

        
A => software/freenet-fetchpull-put.png +0 -0

        
M software/freenet-keyspace.png +0 -0

        
A => software/freenet-link-length.png +0 -0

        
A => software/freenet-peer-count.png +0 -0

        
A => software/freenet-weekly-uptime.png +0 -0

        
M software/freenet-wot-rank.png +0 -0

        
A => software/gnutella-suche.png +0 -0

        
A => software/in-view-of-multitasking-sana2013.png +0 -0

        
A => software/kademlia-peers-full.png +0 -0

        
A => software/kademlia-peers.png +0 -0

        
A => software/overlay-structured.png +0 -0

        
A => software/overlay-unstructured.png +0 -0

        
A => software/p2p-grundprobleme-schwarz-einstieg.png +0 -0

        
A => software/p2p-grundprobleme-schwarz-kommunikation.png +0 -0

        
A => software/p2p-grundprobleme-schwarz-suche.png +0 -0

        
A => software/p2p-grundprobleme-schwarz-verteilung.png +0 -0

        
A => software/p2p-talk.org +1691 -0
@@ 0,0 1,1691 @@ 
+#+INCLUDE: ../org-templates/level-1.org
+#+title: peer-to-peer networks that worked
+#+subtitle: core challenges, routing, and privacy.
+#+author: Dr. Arne Babenhauserheide
+#+date: <2025-01-24 Fr>
+#+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_act(Act) %4BEAMER_col(Col) %8BEAMER_opt(Opt)
+#+PROPERTY: BEAMER_col_ALL 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.0 :ETC
+#+STARTUP: beamer
+#+STARTUP: hidestars
+#+SEQ_TODO: TODO ☯ Σ | ☺
+#+LANGUAGE: en
+
+#+latex: \iffalse
+
+This 90 minutes talk decribes how peer-to-peer networks managed to
+interactively search 4 million computers with the bandwidth of 2004,
+which goals they failed to reach, and what information the networks
+expose as part of their operation.
+
+#+begin_export html
+<div class="sourcebox" markdown="1" >
+<a href="p2p-talk.pdf"><img width="168" height="235" title="PDF" src="../assets/pdf-thumbnail.png" /></a><br />
+<a href="p2p-talk.pdf">PDF</a> (drucken)
+</div>
+#+end_export
+
+It starts with the core challenges all fully distributed systems face
+and then describes how four peer to peer systems solved them: Gnutella
+(for efficient keyword search), Kademlia (for efficient hash search),
+BitTorrent (for its simplification), and Freenet/Hyphanet (for privacy
+and small world routing).
+
+I gave it as guest talk for a resilient networking lecture at KIT. The
+[[p2p-talk.pdf][slides]] are created from the same source as this article.
+
+#+latex: \fi
+
+* Intro
+** intro
+*** peer-to-peer: where decentralization works/worked
+**** 
+ #+latex: \centering
+
+
+
+ /From Gnutella and Kademlia/ \\
+ /Over BitTorrent/ \\
+ /To Freenet/Hyphanet/
+
+**** 
+ #+latex: \LARGE \centering \(\ddot \smile\)
+
+**** 
+
+#+begin_quote
+  Those who don’t learn from the tech of the past are doomed to repeat
+  its mistakes — with less time and brain share, since “the problems
+  are already solved”.
+#+end_quote
+
+*** DO NOT OBEY IN ADVANCE
+
+- You are the ones who build the rules of the future.
+- You are the last line of defense against horrors.
+- If you do not build it, it will not be built (well enough to work).
+- Whatever you are told: *you are not replaceable*.
+
+/Do not obey in advance./
+
+https://media.ccc.de/v/38c3-opening-ceremony#t=1343
+
+/You knew whom you invited./
+
+** Why?
+*** Understand p2p-networks that worked in real life
+
+#+begin_quote
+after a few days (and especially nights) of nervous full-site
+tinkering, it turned a 40 minute deploy process into one that lasted
+just 12 seconds![fn:15]
+#+end_quote
+
+- Bittorrent-Deployment: https://vimeo.com/11280885
+
+/Understand why deployment improved but did not match expectations./
+
+Spoiler: Cut-through routing.
+
+*** Me
+
+- Since 2004 in p2p-Development
+- Since 2013 with competence
+- Since 2017 Release-Manager of the Freenet/Hyphanet project
+- Until 2017 PhD and PostDoc in physics
+- Since 2017 Software Developer as job
+
+** Topics
+
+*** Topics today
+
+ - Core challenges
+ - Gnutella (the first widespread, fully distributed p2p network)
+ - Kademlia (the most widespread DHT)
+ - BitTorrent
+ - Freenet/Hyphanet
+
+*** p2p?
+
+- *peer-to-peer (p2p)* :: peers (equal partners) cooperate to grant a service to each other.
+
+**** *Why?*
+
+Your programs popularity exceeded your wildest dreams. 50 million people want to download it. Size 100 GiB. How much do you pay?
+
+/Relax: the game of the year in almost every award 2023/2024 launched with less than one million players./
+
+**** *2025* quick checks: 5 million TB
+     :PROPERTIES:
+     :BEAMER_act: <2->
+     :END:
+- AWS CloudFront: $100 million ([[https://aws.amazon.com/cloudfront/pricing/][$0.02/GB]])
+- Hetzner: 6 million € ([[https://docs.hetzner.com/de/robot/general/traffic/][1.19€/TB]]) in 137 years (2000 dl/day)
+- Gnutella worked with a handful of servers for 50 million users
+
+# https://www.cloudflare.com/learning/cloud/what-is-aws-data-transfer-pricing/
+# https://docs.hetzner.com/de/robot/general/traffic/ 
+# https://news.ycombinator.com/item?id=29953834 $5400 for 70TB?
+
+* Core challenges
+** challenges
+*** Topics
+
+The core challenges p2p systems have to solve or circumvent.
+
+*** Core problems in p2p networks
+
+****                                                              :B_columns:
+     :PROPERTIES:
+     :BEAMER_env: columns
+     :END:
+*****                                                                 :BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.454
+      :END:
+  - *Entry*: How to find the right place?
+     #+attr_latex: :width 0.3\linewidth
+     file:p2p-grundprobleme-schwarz-einstieg.png
+  - *Search*: Where do I find what I need?
+     #+attr_latex: :width 0.3\linewidth
+     file:p2p-grundprobleme-schwarz-suche.png
+*****                                                                 :BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.454
+      :END:
+  - *Distribution*: How to avoid bottlenecks?
+     #+attr_latex: :width 0.25\linewidth
+     file:p2p-grundprobleme-schwarz-verteilung.png
+  - *Communication*: How can information flow?
+     #+attr_latex: :width 0.4\linewidth
+     file:p2p-grundprobleme-schwarz-kommunikation.png
+     
+****                                                        :B_ignoreheading:
+     :PROPERTIES:
+     :BEAMER_env: ignoreheading
+     :END:
+  - /*Resistance against disruption*: How can desired scale better than unwanted?/
+
+** Core requirements
+*** Entry: How to find the right place?
+
+ - *First addresses*: How to find addresses of other nodes?
+ - *Choose connections*: With whom should I connect?
+ - *Routing-Information*: Which data do nodes need?
+     #+attr_latex: :width 2cm
+     file:p2p-grundprobleme-schwarz-einstieg.png
+
+ 
+*** Structured vs. unstructured
+
+**** *Unstructured*
+ - *First addresses*: A Simple list
+ - *Choose connections*: Choose at will
+ - *Routing-Information*: Exchange explicitly
+
+**** *Structured*
+ - *First addresses*: Needs topology[fn:25]         
+ - *Choose connections*: Only some are useful
+ - *Routing-Information*: By choosing peers
+
+**** /Can I reach all directly?/
+
+*** Search: What to look for?
+
+ - *Keyword*: Gnutella, Skype (before MS)
+ - *Content-Hash*: Kademlia, BitTorrent VHT, Freenet/Hyphanet
+ - *Public Key*: Freenet/Hyphanet
+
+Glossary:
+#+latex: \vspace*{-0.5cm}
+#+attr_latex: :width 1.5cm
+file:p2p-grundprobleme-schwarz-suche.png
+
+ - *BitTorrent VHT* :: Distributed Hash Table, a DHT
+ - *DHT* :: Distributed Hash Table
+ - *Public Key* :: The mirror of the private key in asymmetric cryptography
+
+*** Search: Where do I find what I need?
+
+Two concepts:
+
+ - Search Paths to existing data: Gnutella
+ - Put the data in the right place: Kademlia, BitTorrent VHT, Freenet/Hyphanet
+
+*** Distribution: How to avoid bottlenecks?
+
+ - Centralized: Streaming by the ISP via multicast
+ - Swarming: users take part in the distribution
+   - Coordinated by a central place: BitTorrent (Tracker)
+   - Coordinated by other users: Gnutella (Download-Mesh)
+   - Independently distributed chunks: Freenet/Hyphanet[fn:9]
+
+Glossary:
+#+latex: \vspace*{-0.75cm}
+#+attr_latex: :width 1cm
+file:p2p-grundprobleme-schwarz-verteilung.png
+#+latex: \vspace*{-0.25cm}
+
+- *Download-Mesh*: :: name of the protocol
+- *Tracker*: :: A server coordinating a BitTorrent-Swarm
+
+*** Communication: How can information flow?
+
+- One-to-one (PM/DM/msg/Anruf/…)
+- Group discussion (Chat, Forum, Video call, …)
+- Public discourse
+- Learn about new content
+- Metadata about content (comments, rating, …)
+#+attr_latex: :width 2cm
+file:p2p-grundprobleme-schwarz-kommunikation.png
+
+*** Resistance against disruption
+
+**** *Disruption*
+
+Anything that reduces the quality of the service for users
+
+**** *Required on every level*
+
+ - *Entry*: connecting to attackers
+ - *Search*: spam, misinformation
+ - *Distribution*: poison files
+ - *Communication*: spam, harassment and censorship[fn:10]
+
+** 
+*** Summary
+****                                                              :B_columns:
+     :PROPERTIES:
+     :BEAMER_env: columns
+     :END:
+*****                                                                 :BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.454
+      :END:
+  - *Entry*: First addresses and routing info
+     #+attr_latex: :width 0.3\linewidth
+     file:p2p-grundprobleme-schwarz-einstieg.png
+  - *Search*: Keyword, Content, Public Key
+     #+attr_latex: :width 0.3\linewidth
+     file:p2p-grundprobleme-schwarz-suche.png
+*****                                                                 :BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.454
+      :END:
+  - *Distribution*: Tracker, Download-Mesh, Cached fragments
+     #+attr_latex: :width 0.25\linewidth
+     file:p2p-grundprobleme-schwarz-verteilung.png
+  - *Communication*: One-to-one, Forum, News, Comments
+     #+attr_latex: :width 0.4\linewidth
+     file:p2p-grundprobleme-schwarz-kommunikation.png
+     
+****                                                        :B_ignoreheading:
+     :PROPERTIES:
+     :BEAMER_env: ignoreheading
+     :END:
+  - /*Disruption*: connect to attackers, spam results, misinformation,
+    poison files, harassment./
+
+* Gnutella
+** Gnutella
+*** Gnutella
+
+#+begin_quote
+On March 14th, 2000, … an early version … with a note: “Justin and Tom
+work for Nullsoft, makers of Winamp and Shoutcast. See? AOL can bring
+you good things!” …\\
+AOL ordered him to take the program down immediately … calling
+Gnutella an “unauthorized freelance project.” … hackers had gone … to
+reverse-engineer it … into the hands of the open-source community …\\
+— [[https://archive.ph/20120630204949/http://74.220.215.94/~davidkus/index.php?option=com_content&view=article&id=82:the-worlds-most-dangerous-geek-&catid=35:articles&Itemid=54][The World's Most Dangerous Geek; Interviewed by David Kushner;
+RollingStone.com; January 13, 2004.]]
+#+end_quote
+
+The simple TCP based protocol improved. By 2008 about 50 million
+people used it every day. It mostly disappeared after the main
+development companies lost in court. The tech is almost forgotten.
+
+*** Topics
+
+ - *Users perspective*: this was Gnutella
+ - *Entry*: GWebCaches
+ - *Search*: Slow-Start + Keyword-Multicast
+ - *Distribution*: Download-Mesh
+ - *Communication*: See new files and brows the collection
+ - *Resistance against disruption*: Heuristics or rating matrices
+
+*** Users perspective
+
+  - 50 million nodes
+  - Search by filename and ID3 tags
+  - Filter to see only creative commons licensed content
+  - Search by newest files
+  - Download from many sources without central coordination
+  - Audio streaming around 2004 (“preview”)
+  - /LimeWire, Bearshare, Shareaza, Phex, gtk-gnutella, …/
+
+*** How it looked
+
+#+attr_latex: :width 0.6\linewidth
+[[file:Limewire-screen-wikimedia-GPL.png]]
+
+/von Wikipedia: [[https://upload.wikimedia.org/wikipedia/commons/1/1b/LimeWire_screen.png][LimeWire_screen.png]]/
+
+** Entry
+*** Entry: addresses
+
+ - List of the recently connected good nodes
+ - UDP Host-Caches: Tiny servers that collected IP-lists and provided
+   the most recent ones
+ - Example: GhostWhiteCrab[fn:12]
+
+     #+latex: \vspace*{-2.5cm}\hfill
+     #+attr_latex: :width 2cm :center nil
+     file:p2p-grundprobleme-schwarz-einstieg.png
+
+*** Entry: Connecting
+
+HTTP-Handshake with feature negotiation, then binary over TCP socket +
+out of band answers via UDP.
+
+** Search and distribution
+*** Search process
+****                                                              :B_columns:
+     :PROPERTIES:
+     :BEAMER_env: columns
+     :END:
+*****                                                                 :BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.6
+      :END:
+  #+begin_src dot :file gnutella-suche.png :exports results
+   digraph {
+     rankdir=LR
+     UP1 [xlabel="3-5"]
+     UP2 [xlabel="<128"]
+     UP3 [xlabel="<4.096"]
+     UP4 [xlabel="<131.072"]
+     Leaf2 [xlabel="<128"]
+     Leaf3 [xlabel="<4.096"]
+     Leaf4 [xlabel="<131.072"]
+     Leaf5 [xlabel="<4.194.304"]
+     Leaf -> UP1 [label="3-5 x slow-start"]
+     Leaf -> UP2 [style=invis,weight=0]
+     Leaf -> UP3 [style=invis,weight=0]
+     Leaf -> UP4 [style=invis,weight=0]
+     UP1 -> UP2 [label="32 x slow-start",constraint=false]
+     UP2 -> UP3 [label="32 x flooding",constraint=false]
+     UP3 -> UP4 [label="32 x Intra-UP Keyword-Multicast",constraint=false]
+     UP4 -> Leaf5 [label="32 x Keyword-Multicast"]
+     UP1 -> Leaf2 [label="32 x Keyword-Multicast"]
+     UP2 -> Leaf3 [label="32 x Keyword-Multicast"]
+     UP3 -> Leaf4 [label="32 x Keyword-Multicast"]
+   }
+  #+end_src
+
+  #+RESULTS:
+  [[file:gnutella-suche.png]]
+****                                                        :B_ignoreheading:
+     :PROPERTIES:
+     :BEAMER_env: ignoreheading
+     :END:
+  Not existing file: 4 x 32 x 32 = 4.096 nodes
+
+  Load (empirical): <1kiB/s Leaf, <14kiB/s Ultrapeer
+
+- *Ultrapeer (UP)* :: A communication hub (32 peers)
+- *Leaf* :: An edge node, searches via Ultrapeers
+- *Knoten* :: A Peer or Ultrapeer.
+#+latex: \vspace*{-1.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-suche.png
+
+  # TODO: LimeWire-Entwickler fragen, wie gut Intra-UP-QRP funktionierte.
+
+*** Distribution in Gnutella: Out-of-Band
+
+Originally sent back via the search path, but:
+
+ - 5 Steps
+ - Average life time of a node:[fn:11] 2h
+ - => Half the connections broke after 24 minutes
+
+ Solution: Download-Mesh, independent of the search.
+
+ Disadvantage: All IPs always visible.
+
+#+latex: \vspace*{-0.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-verteilung.png
+
+*** Distribution: Download-Mesh
+
+ #+latex: \scriptsize
+
+ - Standard HTTP Range-Requests
+ - Content-Addressed: HOST/uri-res/raw/urn:sha1:HASH[fn:13]
+ - 5 additional Headers:[fn:14]
+   - *X-Alt* :: Checked source for the file, IP/Port
+   - *X-NAlt* :: Unreachable source or node with corrupted data. IP/Port
+   - *X-Gnutella-Content-URN* :: Merkle-Tree Root-Hash
+   - *X-Thex-URI* :: /uri-res/N2X?urn:sha1:HASH;MERKLE_TREE_ROOT
+   - *X-Available-Ranges* :: bytes 0-10,20-30 (example)
+
+** Limitations and summary
+*** Communication: Weakness
+
+ - Chat never worked well
+ - No lasting contact to others
+ - Working:
+   - “What’s new?” (via LimeWire: See new files)
+   - Search collection (see all shared files)
+
+#+latex: \hfill
+#+attr_latex: :width 2cm :center nil
+file:p2p-grundprobleme-schwarz-kommunikation.png
+
+*** Resistance against disruption: Heuristics as Spam-Filter
+
+ Similar to E-Mail spam filters, partially user-configurable.
+
+ /Reduced Spam to 10-20% of the results./[fn:39]
+
+*** Resistance against disruption: object trust via Credence
+
+ - Every correctly named/good file: 1.0
+ - Every falsely named/bad file: -1.0
+ - Ratings of others multiplied with the correlation of files both rated.
+
+With proof that spammers would have to rate enough files correctly to
+spread false ratings that multiple spamming parties would cancel each
+other out.
+
+ → http://credence-p2p.org
+
+/Never added to a mainstream program; LimeWire already in court./
+
+** Privacy and Summary
+*** Privacy
+
+- IP visible in searches and downloads (originally not; direct downloads as optimization)
+- Ultrapeers know their leafs
+- Downloader of a file knows all other downloaders (but not how much all have)
+
+*** Remaining weaknesses 2010
+
+ - 10-20% Spam-Results despite 50 million users
+   - Credence was never widespread
+ - One step flooding: Windows (home)limited the connection count
+ - Required parameter-adaption during growth
+ - No comments, Peer-Chat never worked well
+ - Bad support for Asian fonts
+
+*** Summary Gnutella
+
+ - Efficient Search for keywords
+ - TCP-based binary protocol, 50 mio users, 1kiB/s Leaf, 14kiB/s Ultrapeer
+ - Entry: WebCache-Server + Exchange QRT (like Bloom-Filters)[fn:20]
+ - Search: Slow-Start + QRT Routing
+ - Distribution: Download-Mesh (mini-network per download)
+ - Resistance against disruption: Heuristics or object trust
+
+* Kademlia
+** Kademlia
+*** Kademlia
+
+/Lookup in a distributed Hash-Table (DHT) with xor-metric./
+
+- Users’ perspective
+- Search
+- Entry /(uses search)/
+*** Users’ perspective
+
+**** *Tools*
+
+ - Filesharing: :: Kad in aMule, VHT in Torrent clients
+
+/Amazon Dynamo uses Chord, that works very similar./
+
+**** *Usage*
+
+ - Searches for exact files or exact keyword
+ - Resolves Magnet-links
+ - Choose the server to write to; eventual consistency
+
+** Search
+*** Search in Kademlia
+
+- Every node has a random ID
+- Search by Hash → Distributed Hash Table
+- Distance between Hash und ID via *xor-Metric*[fn:31]
+- Step by step in O(log(N)) to the nearest node
+
+/Simlar: Chord, Pastry./
+#+latex: \vspace*{-1.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-suche.png
+
+*** Prefix-Buckets
+
+****                                                                  :BMCOL:
+     :PROPERTIES:
+     :BEAMER_col: 0.4
+     :END:
+ #+begin_src dot :file kademlia-peers.png :exports results
+ digraph {
+
+ ABC
+ subgraph cluster_b {
+ label=Axx
+ subgraph cluster_a {
+ label=ABx
+ ABC -> ABa
+ ABC -> ABf
+ }
+ ABC -> Aca
+ ABC -> Aa2
+ }
+ ABC -> be5
+ ABC -> 543
+ // fix ranks
+ edge [style=invis]
+ ABC -> Aca
+ ABC -> Aa2
+ ABa -> Aca
+ ABa -> Aa2
+ Aa2 -> be5
+ Aa2 -> 543
+ }
+ #+end_src
+
+ #+RESULTS:
+ [[file:kademlia-peers.png]]
+
+*** Search for b91
+
+ #+begin_src dot :file kademlia-peers-full.png :exports results
+ digraph {
+
+ ABC [style=bold]
+ be5 [color=red,style=bold]
+ subgraph cluster_b {
+ label=Axx
+ subgraph cluster_a {
+ label=ABx
+ ABC -> ABa
+ ABC -> ABf
+ }
+ ABC -> Aca
+ ABC -> Aa2
+ }
+ ABC -> be5
+ ABC -> 543
+   BE5 [color=red,style=bold]
+   B9f [color=blue,style=bold]
+   subgraph cluster_d {
+   label=Bxx
+   subgraph cluster_c {
+   label=BEx
+   BE5 -> BE3
+   BE5 -> BEa
+   }
+   BE5 -> Bf0
+   BE5 -> B9f
+   }
+   BE5 -> abc
+   BE5 -> 123
+
+     B9F [color=blue,style=bold]
+     B91 [color=green,style=bold]
+     subgraph cluster_f {
+     label=Bxx
+     subgraph cluster_e {
+     label=B9x
+     B9F -> B9b
+     B9F -> B91
+     }
+     B9F -> Bb0
+     B9F -> Baf
+     }
+     B9F -> 001
+     B9F -> ffd
+     be5 -> BE5 [constraint=false]
+     B9f -> B9F [constraint=false]
+
+     // fix ranks
+     edge [style=invis]
+     ABC -> Aca
+     ABC -> Aa2
+     ABa -> Aca
+     ABa -> Aa2
+     Aa2 -> be5
+     Aa2 -> 543
+
+     B91 -> Bb0
+     B91 -> Baf
+     Baf -> 001
+     Baf -> ffd
+
+     BE3 -> Bf0
+     BE3 -> B9f
+     Bf0 -> abc
+     Bf0 -> 123
+
+
+
+ }
+
+ #+end_src
+
+ #+RESULTS:
+ [[file:kademlia-peers-full.png]]
+
+*** Store
+
+- Search for node nearest to the hash.
+- STORE: Hash + Value.
+
+/Think =put(key, value)= ⇒ “Distributed Hash Table”./
+
+** Entry
+*** Entry in Kademlia
+
+- Needs contact to at least one existing node.
+- Search your own ID: =FIND_NODE=\\
+  (near = responsible for ID)
+- Response contains addresses and IDs\\
+  of nodes touched
+- Contacted nodes also keep your address and ID.
+
+     #+latex: \vspace*{-2cm}\hfill
+     #+attr_latex: :width 2cm :center nil
+     file:p2p-grundprobleme-schwarz-einstieg.png
+
+** Privacy and Sumary
+*** Privacy
+
+- IPs of downloaders and uploaders known to responsible nodes
+- Hashes of searches & searcher IP known to nodes on the path
+- All addresses must be reachable globally
+
+*** Summary
+
+- Distance: key-hash XOR node-ID
+- Search: ask closest known node for better nodes
+- knows more close nodes than remote nodes
+- Store works like searching: store where a search would land
+- Entry:
+  - Search for own ID
+  - Touched nodes use address and ID
+
+* BitTorrent Downloads
+** BitTorrent
+*** BitTorrent
+
+- Most widespread solution for swarming
+- BitTorrent, IPFS, Blizzard-Updater
+- Upload to get faster Downloads
+- Coordinated by centralized Tracker: avoids complexity
+- No decentralized search
+
+*** Users’ perspective
+
+- Information from Tracker-sites
+- Download with torrent-file or Magnet-Link
+- Supports folders
+- Today: ipfs: Websites via BitTorrent
+- Supports NAT-Traversal
+- Can hide the IP via Tor (as SOCKS5 proxy)
+
+** Distribution
+*** Concept of BitTorrent
+
+**** Structure                                                :B_block:BMCOL:
+      :PROPERTIES:
+      :BEAMER_env: block
+      :BEAMER_col: 0.3
+      :END:
+
+#+begin_src dot :file bittorrent-struktur.png :exports results
+graph {
+{rank=same; client5 Tracker}
+Tracker [shape=diamond]
+{rank=same; Tracker client4}
+client1 -- Tracker
+client2 -- Tracker
+client3 -- Tracker
+client5 -- Tracker [constraint=false]
+Tracker -- client4 [constraint=false]
+Tracker -- client6
+Tracker -- client7
+Tracker -- client8
+}
+#+end_src
+
+#+RESULTS:
+[[file:bittorrent-struktur.png]]
+
+**** Tracker: Website                                         :B_block:BMCOL:
+     :PROPERTIES:
+     :BEAMER_col: 0.7
+     :BEAMER_env: block
+     :END:
+
+- Coordinates Swarms
+- Search, Forum, Rating, Validation, Community
+- Statistics: Seeder, Leecher
+- Does not provide Data
+- Aggregates how much nodes upload\\
+  → Incentive
+
+     #+latex: \hfill
+     #+attr_latex: :width 1.5cm :center nil
+     file:p2p-grundprobleme-schwarz-suche.png
+     #+attr_latex: :width 2cm :center nil
+     file:p2p-grundprobleme-schwarz-kommunikation.png
+     #+attr_latex: :width 2cm :center nil
+     file:p2p-grundprobleme-schwarz-einstieg.png
+
+*** Torrent-File
+
+- Tracker URL(-s)
+- Hashes for Chunks
+- Names of the File(-s)
+- Can contain folders[fn:18]
+#+latex: \vspace*{-0.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-verteilung.png
+
+*** Incentive to Upload
+
+- Fraction Upload/Download is checked
+- Freeloaders[fn:32] are throttled by other clients (choked: lower download rate)
+- Published research gave strong focus on the incentive, in practical use the forums make more of a difference
+- Tracker with login: private groups
+
+** Extended usage
+*** Related
+
+- VHT in addition/instead of Tracker possible (Kademlia)
+- Free and Open Protocol with many implementations
+- Development within the Community
+- IPFS uses Torrents as decentralized cache for Websites
+
+*** Torrent for Twitter-Deployment
+
+- Cost at Twitter: Transport over many steps
+- Torrent transmits in fragments.
+
+****                                                              :B_columns:
+:PROPERTIES:
+:BEAMER_env: columns
+:END:
+***** Wish                                                    :B_block:BMCOL:
+     :PROPERTIES:
+     :BEAMER_act: <1->
+     :BEAMER_col: 0.3
+     :BEAMER_env: block
+     :END:
+
+#+begin_src dot :file twitter-torrent-mesh.png :exports results
+digraph {
+A -> B
+A -> C
+B -> D
+B -> E
+C -> F
+}
+#+end_src
+
+#+RESULTS:
+[[file:twitter-torrent-mesh.png]]
+
+
+***** Reality                                                 :B_block:BMCOL:
+     :PROPERTIES:
+     :BEAMER_act: <2->
+     :BEAMER_col: 0.3
+     :BEAMER_env: block
+     :END:
+
+#+begin_src dot :file twitter-torrent-ring.png :exports results
+digraph {
+{rank=same; A B C}
+{rank=same; D E F}
+A -> B
+B -> C
+C -> D
+E -> D [dir=back]
+F -> E [dir=back]
+}
+#+end_src
+
+#+RESULTS:
+[[file:twitter-torrent-ring.png]]
+
+/cat … ssh tee …/
+
+/Cut-through / streaming./
+
+** Privacy and summary
+*** Privacy
+
+- Tracker knows
+  - who downloads
+  - how much they have
+  - how much they upload
+- Users know what the tracker tells them
+- No search, except by Hash: private trackers stay private
+- IP hiding via Tor is possible but blocked by most trackers
+
+*** Summary
+
+- Tracker and Clients
+- Tracker: statistics and coordination
+- Torrent-File with Piece-Info
+
+* Freenet/Hyphanet
+** Hyphanet
+*** Freenet/Hyphanet
+
+/Censorship-resistant, privacy respecting communication on friend-to-friend network/
+
+/Decentralized database with pubkey-access./
+****                                                                  :BMCOL:
+     :PROPERTIES:
+     :BEAMER_col: 0.5
+     :END:
+
+ - Users’ perspective
+ - Entry
+ - Small-World
+ - Search
+
+****                                                                  :BMCOL:
+     :PROPERTIES:
+     :BEAMER_col: 0.5
+     :END:
+
+ - Distribution
+ - Communication
+ - Usage
+ - Privacy
+
+*** Users’ perspective
+
+- Web-interface: decentralized websites
+- Plugins with E-Mail and Microblogging
+- External programs like Chat and forums with Freenet/Hyphanet as database using HTTP-like API (FCP)
+
+** Entry
+*** Entry in Freenet/Hyphanet
+
+- Opennet:
+  - Similar to Kademlia: choose known Seednode[fn:33], Seednode searches ID → node references
+  - Difference to Kademlia: Not just IP: referenz with keys
+- Friend-to-Friend:
+  - Fixed connections
+  - Knoten swap their IDs, to reconstruct\\
+    the social Small-World-Network\\
+    ⇒ minimize Overlay-costs.
+
+     #+latex: \vspace*{-2cm}\hfill
+     #+attr_latex: :width 2cm :center nil
+     file:p2p-grundprobleme-schwarz-einstieg.png
+
+*** Small-World-Network (scale free network)
+
+- Many short and few long connections.
+- 6 deegrees of separation via snail mail: Our acquaintances formm a small-world network
+- Kleinberg-Network: Probability to be connected: \(\frac{1}{d^x}\), d = distance, x = dimension.
+- Freenet/Hyphanet: \(x=1\)
+
+** Search
+*** Freenet/Hyphanet Search
+
+- Like Kademlia, but forwarded hop by hop → no global reachability or visibility
+- Can search by public key
+- Keyspace: [0.0 : 0.1)
+
+
+#+BEGIN_SRC dot :file freenet-keyspace.png :cmd circo :exports results
+digraph {
+0.1 [color=red]
+0.1 -> 0.5 [color=red]
+0.5 -> 0.6 [color=red]
+0.6 -> 0.4 [color=red]
+
+0.7 [color=blue]
+0.7 -> 0.3 [color=blue]
+0.3 -> 0.2 [color=blue]
+
+edge [style=invis]
+0.0 -> 0.1 
+0.1 -> 0.2 
+0.2 -> 0.3 
+0.3 -> 0.4 
+0.4 -> 0.5 
+0.5 -> 0.6 
+0.6 -> 0.7 
+0.7 -> 0.8 
+0.8 -> 0.9
+0.9 -> 0.0
+}
+#+END_SRC
+
+#+attr_latex: :width 0.3\textwidth
+#+RESULTS:
+[[file:freenet-keyspace.png]]
+
+#+latex: \vspace*{-1.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-suche.png
+
+*** Types of Keys
+
+- CHK: Content Hash
+- KSK: Keyword Subspace: Password
+- SSK: Signed Subspace: Public Key
+- USK: Updatable Subspace: SSK with version
+
+Format: =XXK@routing,encryption/tarball-name/path/to/file.ext=
+
+Can omit path and name (smaller → optimization).
+
+** Distribution
+*** Distribution in Freenet/Hyphanet
+
+- Network saves content → distributed Cache
+- Files saved encrypted, as 32 kiB fragments with 100% redundancy
+- Manifest contains keys of the fragments as CHKs
+- Limited lifetime: Effectively LRU-Cache:[fn:34]
+  - Saving overwrites randomly chosen fragments
+  - Access restores overwritten fragments
+- Upload to exsting key+path: collision\\
+  → Effectively immutable
+
+
+#+latex: \vspace*{-1.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-verteilung.png
+
+** Usage
+*** Freenet/Hyphanet as Database
+
+- Search by Public Key + Path
+- → personal keyspace
+- → tarballs for structured data (i.e. website)
+- → pub-sub-protocols on decentralized database
+- → Websites, Forums, Chat, …
+
+/Optimization: Subscribe to keys to be able to watch 10k keys and see updates quickly./
+
+*** Getting low latency
+
+- Up to 1kiB, raw, realtime mode: <20s; 30s -- 90s RTT
+- Larger files, in manifest (folder): ~5 min
+
+/Must do it exactly right or it will be slow. Like [[https://dev.to/shadowfaxrodeo/why-your-website-should-be-under-14kb-in-size-398n][14kB websites]]./
+
+****                                                              :B_columns:
+     :PROPERTIES:
+     :BEAMER_env: columns
+     :BEAMER_opt: t
+     :END:
+
+***** *Realtime* (small, interactive)                         :B_block:BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.5
+      :BEAMER_env: block
+      :END:
+ #+begin_src scheme
+ PriorityClass . 2 ;; high
+ MaxRetries . 0 ;; default: 10
+ RealTimeFlag . true
+ DontCompress . true
+ ExtraInsertsSingleBlock . 0
+ ExtraInsertsSplitfileHeaderBlock . 0
+ #+end_src
+
+***** *Bulk* (large, slower)                                  :B_block:BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.5
+      :BEAMER_env: block
+      :END:
+
+ #+begin_src scheme
+ PriorityClass . 3 ;; medium
+ RealTimeFlag . false
+ DontCompress . false
+ #+end_src
+
+*** Spam-protection
+
+/WoT (Web of Trust): One of two possibilities in actual use. The other is FMS (Freenet/Hyphanet Message System)./
+
+- ID = USK
+- Trust -100 to 100
+- Rank: Distance → capacity
+  - Rank 1 40 % to 1 %
+  - rank 1: 100 trust = +40 points score.
+
+- Score: Sum of all ratings: trust * rank
+
+- Can scale to arbitrary size at 22 messages per day and person[fn:21]
+
+*** Communication via Freenet/Hyphanet
+
+- Entry: Seed-keys + Captcha[fn:35]-Queue: KSK-Prefix
+- Search: User-specific pages with links, update-infos
+- Distribution: Gossip[fn:36] keys, just upload files
+- Resistance against disruption: Web of Trust with visibility increasing by interaction
+
+/Autospawn node => Freenet/Hyphanet transparently as backend./
+
+#+latex: \vspace*{-1.3cm}\hfill
+#+attr_latex: :width 2cm :center nil
+file:p2p-grundprobleme-schwarz-kommunikation.png
+
+*** Stats
+****                                                                  :BMCOL:
+     :PROPERTIES:
+     :BEAMER_col: 0.05
+     :END:
+****                                                                  :BMCOL:
+     :PROPERTIES:
+     :BEAMER_col: 0.45
+     :END:
+
+#+latex: \vspace{-1.5cm}
+
+#+attr_latex: :height 0.37\paperheight
+ [[./freenet-fetchpull-get.png]]
+
+#+attr_latex: :height 0.37\paperheight
+ [[./freenet-fetchpull-put.png]]
+
+****                                                                  :BMCOL:
+     :PROPERTIES:
+     :BEAMER_col: 0.5
+     :END:
+
+#+latex: \vspace{-1.5cm}
+
+#+attr_latex: :height 0.37\paperheight
+ [[./freenet-weekly-uptime.png]]
+
+#+attr_latex: :height 0.37\paperheight
+ [[./freenet-peer-count.png]]
+
+
+** Privacy and Summary
+*** Privacy
+
+- Seednodes can enumerate all opennet nodes.
+- With pure Friend-to-Friend mode, ISPs may recognize a high volume of
+  encrypted UDP packets.
+- Directly connected peers can see that a search was *started by or
+  forwarded by* a node (hops-to-live with randomized decrement).
+- With friend-to-friend mode, only trusted nodes can be directly
+  connected. Needs key exchange with friends.
+- Nodes can see whether chunks for which they are the best location
+  are accessed but not by whom or how often.
+- IDs in communication are stable pseudonyms: rotated session keys —
+  ratchet — only in custom implementations.
+
+*** Summary
+
+- Entry: Search at a seednode for my ID
+- Search: Greedy Hash search on Small World Network
+- Distribution: Chunk-Tree with Redundancy
+- Communication:
+  - Entry: Seed-keys + CAPTCHA-Queue
+  - Search: Index-Pages, Subscribe for Updates
+  - Distribution: Upload files, websites
+  - Propagating Trust with slowly rising visibility
+
+* Closing
+** Aside
+*** Aside
+
+- Guarantees
+- Magnet-Links
+- WebRTC
+- Lessons learned
+
+*** Guarantees
+
+/They scale by giving few guarantees. From strong to weak:/
+
+- Tampering: All networks here prevent tampering with a file being downloaded.
+- Access control: You need the keys to files to gain access: hashes or public keys.
+- Availability: None of the p2p networks here guarantee it:
+  - Data may not exist
+  - Connections may break
+  - Names may be wrong
+
+/To give availability guarantees, take CRDTs or similar as starting point for proofs./
+
+*** Magnet-Links
+
+#+begin_example
+magnet:?xt=urn:bitprint:TIGER_TREE.SHA1
+&xt=urn:btih:BITTORRENT_INFO_HASH
+&xt=urn:sha1:HASH
+&xl=LENGTH
+&dn=NAME
+&as=LINK_WITHOUT_HASH
+&xs=LINK_WITH_HASH
+&kt=SEARCH_STRING
+#+end_example
+
+/Netzwerk-unabhängig, Link zu HTTP und p2p-Quellen, weitverbreitet/
+
+*** WebRTC
+
+- Runs in the Browser (Javascript)
+- Provides Audio, Video, …, and *Peer-Socket*
+- First connection moderated by server -- avoids many problems
+- p2p-Systems, that don’t need installation
+- Example: WebTorrent https://webtorrent.io/
+
+** Lessons Learned
+*** Thoughts
+
+# TODO: Wie heißt Optimierung für Netzbetreiber bei BitTorrent
+- All Upload Queues are always full. Like all disks are always full.
+  Ask the Large Scale Data Facility at KIT/SCC.
+- Optimization for ISPs often thought about: Prefer clients in same
+  (sub-)net. Gnutella: „p4p“. Pastry (Windows) uses it according to Ghosh.
+- Example for non-greedy routing[fn:37]: Random Walk in ants (programm). Did not gain traction.
+- Throwing money on problems: MaidSafe had 2000$ hardware cost per
+  month. Shut that down 2019.[fn:22] Freenet/Hyphanet has <20$ cost
+  per month.
+
+*** Fallacies of distributed Systems, extended version
+
+****                                                                  :BMCOL:
+:PROPERTIES:
+:BEAMER_col: 0.5
+:END:
+
+1. The network is reliable
+2. The network is secure
+3. The network is homogeneous
+4. Topology does not change
+5. Latency is zero
+6. Bandwidth is infinite
+7. Transport cost is zero
+8. There is one administrator
+
+****                                                                  :BMCOL:
+:PROPERTIES:
+:BEAMER_col: 0.5
+:END:
+
+1. Hard disks don’t fail\\
+   Files stay intact
+2. Power is stable
+3. IPs are reachable
+4. Constant factors are negligible
+5. APIs stay compatible
+6. Textfiles are simple
+
+** Legacy
+*** Current developments
+
+/What’s happening today:/
+
+- Spritely Golem: p2p distributable content for the fediverse[fn:16]
+- Decentralized Internet and Privacy at FOSDEM[fn:17]
+  - DAT, GNUnet, Fediverse, Tor, …
+- In Karlsuhe: 23. Gulaschprogrammiernacht: https://entropia.de/GPN23/en 19. bis 22. Juni 2025
+
+** Summary
+*** Summary: Core challenges
+****                                                              :B_columns:
+     :PROPERTIES:
+     :BEAMER_env: columns
+     :END:
+*****                                                                 :BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.454
+      :END:
+  - *Entry*: First addresses and routing info
+     #+attr_latex: :width 0.3\linewidth
+     file:p2p-grundprobleme-schwarz-einstieg.png
+  - *Search*: Keyword, Content, Public Key
+     #+attr_latex: :width 0.3\linewidth
+     file:p2p-grundprobleme-schwarz-suche.png
+*****                                                                 :BMCOL:
+      :PROPERTIES:
+      :BEAMER_col: 0.454
+      :END:
+  - *Distribution*: Tracker, Download-Mesh, Cached fragments
+     #+attr_latex: :width 0.25\linewidth
+     file:p2p-grundprobleme-schwarz-verteilung.png
+  - *Communication*: One-to-one, Forum, News, Comments
+     #+attr_latex: :width 0.4\linewidth
+     file:p2p-grundprobleme-schwarz-kommunikation.png
+     
+****                                                        :B_ignoreheading:
+     :PROPERTIES:
+     :BEAMER_env: ignoreheading
+     :END:
+  - /*Disruption*: connect to attackers, spam results, misinformation,
+    poison files, harassment./
+
+*** Summary: Implementations
+#+latex: \small
+
+#+attr_latex: :center nil
+ |                  | Einstieg             | Suche                          |
+ |------------------+----------------------+--------------------------------|
+ | Gnutella         | WebCache             | Slow-Start + Keyword-Multicast |
+ | Kademlia         | Search own ID        | xor-Hash-hierarchy             |
+ | BitTorrent       | Tracker-URL          | Kademlia / Tracker / Web       |
+ | Freenet/Hyphanet | Seed-Nodes search ID | Greedy on Small World  |
+ | WebRTC           | WebRTC Server        | -                              |
+
+#+attr_latex: :center nil
+ |                  | Verteilung                   | Störung            |
+ |------------------+------------------------------+--------------------|
+ | Gnutella         | Alt+NAlt, Range, Merkle-Tree | Heuristik/Credence |
+ | Kademlia         | /various/                    | -                  |
+ | BitTorrent       | Torrent                      | Rating on Tracker  |
+ | Freenet/Hyphanet | Chunk-Tree with Redundancy   | Propagating Trust  |
+ | WebRTC           | -                            | -                  |
+
+
+
+
+*** Good luck! @@latex:\hspace{3.25cm} \(\ddot \smile\)@@
+
+#+latex: \centering
+# #+latex: \(\ddot \smile\)
+
+My wish is that 5 years from now\\
+some of you look back and say:
+
+#+latex: \vspace{0.5cm}
+
+#+begin_quote
+@@latex:\centering@@
+“What I learned in the p2p lecture@@latex:\phantom{”}@@\\
+@@latex:\phantom{„}@@was one of the pillars of my success.”
+#+end_quote
+
+# #+latex: \vspace{0.5cm}
+
+# #+latex: \centering \(\ddot \smile\)
+
+* Appendix                                                  :B_ignoreheading:
+  :PROPERTIES:
+  :BEAMER_env: ignoreheading
+  :BEAMER_opt: allowframebreaks
+  :END:
+
+\appendix
+
+** 
+
+*** Verweise
+    :PROPERTIES:
+    :BEAMER_opt: allowframebreaks,label=
+    :END:
+
+ \bibliographystyle{apalike}
+ \bibliography{ref}
+
+**** Bilder                                                 :B_ignoreheading:
+     :PROPERTIES:
+     :BEAMER_env: ignoreheading
+     :END:
+
+ #+latex: \tiny Bilder: \citet{}
+**** Merkle Tree Patent 1982
+
+https://worldwide.espacenet.com/patent/search/family/022107098/publication/US4309569A?q=pn%3DUS4309569
+
+Eingereicht 1979 als Methode Diffie-Authentication günstiger zu machen.
+
+
+
+[fn:6] Static NAT, Dynamic NAT und Port-Mapping NAT erklärt: https://www.geeksforgeeks.org/computer-network-types-network-address-translation-nat/
+
+* German Backup Slides
+** Weiteres
+
+*** Weitere Knoten finden: X-Try
+
+Beim Handshake (wie HTTP):
+
+ #+latex: \scriptsize
+
+ #+begin_example
+ When rejecting a connection, a servent MUST, if possible, provide the
+ remote host with a list of other Gnutella hosts, so it can try 
+ connecting to them. This SHOULD be done using the X-Try header.
+
+ An X-Try header can look like:
+
+         X-Try:1.2.3.4:1234,3.4.5.6:3456
+ #+end_example
+
+*** Weitere Knoten finden: Pong
+
+ #+latex: \scriptsize
+
+ #+begin_example
+ Pong messages contains information about a Gnutella host. The 
+ message has the following fields
+
+     Bytes:  Description:
+     0-1     Port number. The port number on which the responding
+             host can accept incoming connections.
+     2-5     IP Address. The IP address of the responding host.
+             Note: This field is in big-endian format.
++     * When a Ping message is received (TTL>1 and it was at least one 
+       second since another Ping was received on that connection), a 
+       servent MUST, if possible, respond with a number of Pong 
+       Messages. These pongs MUST have the same message ID as the 
+       incoming ping, and a TTL no lower than the hops value of the 
+       ping.
+ #+end_example
+
+ → http://rfc-gnutella.sourceforge.net/src/rfc-0_6-draft.html
+
+*** Größe der Query Routing Tabellen in Gnutella
+
+- Hashes: Normalisierte Suchwörter in der Suchanfrage oder im Dateinamen
+- Größe: Variabel, Default in LimeWire 128kiB, interpolation auf größere und kleinere Tabellen möglich.
+- Aktuell verfügbare Quelle: [[https://github.com/metapirate/LimeWire-Pirate-Edition/blob/master/components/gnutella-core/src/main/java/com/limegroup/gnutella/routing/BitSetQRTTableStorage.java#L87][BitSetQRTTableStorage.java]]
+- Hash-Funktion pro Suchwort: [[https://github.com/metapirate/LimeWire-Pirate-Edition/blob/master/components/gnutella-core/src/main/java/com/limegroup/gnutella/routing/HashFunction.java][HashFunction.java]]
+
+*** Suche 4: Dateien nach Hash finden
+
+ - Zugriff auf Magnet-Links[fn:27] brauchte exakte Dateisuche.[fn:23]
+ - Angepasstes Kademlia ⇒ im Abschnitt zu Kademlia.
+
+*** Gnutella Routing Experiment
+
+- Peers: Tisch + davor + dahinter
+- Letzte 2 Hops
+- Suche nach Namen
+- Hash = 1. Buchstabe
+- QRT[fn:28]: Hash der Namen der Peers
+- Intra-UP QRT: QRTs der Peers, zusammengefasst
+
+/Was müsst ihr vorher austauschen?/
+
+*** Warum p2p?
+
+ - *Skalierbarkeit* :: Ein einzelner Server bricht bei etwa 100k Anfragen pro Sekunde ein. /dwd bei Sturm Sabine 2020?/
+ - *Mit Nutzung wachsen* :: Ähnliche Infrastruktur für 1000 Leute oder 10 Millionen Leute
+ - *Infrastrukturkosten* :: 100k€ pro Jahr = Entwickler oder Entwicklerin
+
+ # TODO: Benchmark wrk
+
+*** Warum nicht p2p?
+
+- Gestiegende Leistung von Servern. /Sturm: dwd[fn:19] hielt größtenteils Stand (durch vereinfachte Seite[fn:30])/
+- Handies sind durch Batterie und Netz begrenzt → keine kontinuierliche Leistung. (Nachts möglich?)
+- Viele der einfachen Lösungen unmöglich, z.B. Geld auf Probleme werfen.
+
+
+**** 
+*** Schlüssel zum Licht
+
+#+attr_latex: :width 0.5\textwidth
+[[file:schluessel-zum-licht.png]]
+
+*** Störquellen
+
+**** Sammeln am Flipchart
+
+**** Quellen
+     :PROPERTIES:
+     :BEAMER_act: <2->
+     :END:
+
+ - *Parasiten*: Bessere Leistung auf Kosten Anderer (leecher).
+ - *Trolle*: Kein Finanzinteresse, minimale Resourcen, nutzen jegliche Lücke.
+ - *Spammer*: Erfolg durch Verbreitung eigener Inhalte.[fn:8]
+ - *Konkurrenten*: Erfolg durch verringerte Qualität des Systems.
+ - *Angreifer*: Erfolg durch Schädigung von Nutzern.
+
+*** Weitere Eigenschaft: Grad der Verteilung
+
+/Serverkoordinierte Teilgruppen bis vollständig dezentrale Interaktion./
+
+*** Suche 1: Slow-Start
+
+„Dynamic Querying“ (DQ)
+
+ - Leaf fragt einen UP nach dem anderen. Stoppt nach „genug“ Ergebnissen (um die 100).
+ - UP fragt Leafs und andere UPs. Stoppt nach „genug“ Ergebnissen.
+
+*** Suche 2: Keyword-Multicast
+
+ Query Routing Protocol (QRP)
+ - Suchwörter normalisiert:[fn:38] lowercase, keine Akzente, …
+ - Query Routing Table (QRT): Set mit schwachen Hashes von normalisierten Suchwörtern
+ - Automatisch hochskaliert für gewünschten Füllgrad
+
+ Intra-Ultrapeer-QRP:
+ - Vereinigung der Tabellen
+
+/Ähnlich: Bloom-Filter/
+
+*** Suche abschicken
+
+#+begin_example
+<15 bytes GUID>0x00
+0x80 ; message type: Query
+0x07 ; TTL: 7
+0x00 ; Hops 0
+0x00,0x00,0x09 ; payload length, max: 4kiB
+0x00,0x00 ; min speed
+test foo ; payload: search criteria
+0x00 ; null-terminator, begins extensions
+#+end_example
+
+- *GUID* :: Globally Unique ID. Zufällig erstellt, um Schleifen zu vermeiden.
+
+*** Mutability: O(1) Zugriff auf neuste Version
+
+- Nutzende: =SSK@…/meine-seite-1/...= → =SSK@…/meine-seite-2/activelink.png=
+- Optimiert: =USK@…/meine/seite/1=
+  - =SSK@[key]/[sitename]-DATEHINT-[year]=
+
+#+BEGIN_EXAMPLE
+HINT
+46
+2013-7-5
+#+END_EXAMPLE
+
+/DATEHINT-[year], DATEHINT-[year]-WEEK-[week], DATEHINT-[year]-[month], DATEHINT-[year]-[month]-[day]/
+
+*** Capacity
+
+#+BEGIN_SRC dot :file freenet-wot-rank.png :exports results
+digraph {
+rankdir=LR
+"0:100%" -> "1: 40%" 
+"1: 40%"  -> "2: 16%"
+"2: 16%" -> "3: 6%"
+"3: 6%"-> "4: 2%"
+"4: 2%" -> "1%"
+}
+#+END_SRC
+
+#+RESULTS:
+[[file:freenet-wot-rank.png]]
+
+- Rank 1 40 %. rank 1: 100 trust, 40 Punkte als Score.
+- Rank 2 16 %
+- Rank 3 6 %
+- Rank 4 2 %
+- Rank 5 und niedriger: 1 %
+
+/Integer-Mathematik: =2 * 6 / 100 = 0=./
+*** Theoretische und gemessene Link-Längen
+
+ [[./freenet-link-length.png]]
+*** Swapping: Friend-to-Friend wird Small World
+****                                                                  :BMCOL:
+:PROPERTIES:
+:BEAMER_col: 0.5
+:END:
+#+latex: \LARGE
+
+| *9* | 4 | *3* |
+|   5 | 2 |   8 |
+|   1 | 6 |   7 |
+
+------
+
+
+| 6 | *4* |   9 |
+| 5 |   2 |   8 |
+| 1 |   3 | *7* |
+
+****                                                                  :BMCOL:
+:PROPERTIES:
+:BEAMER_col: 0.5
+:END:
+#+latex: \LARGE
+
+| *3* |   4 | 9 |
+|   5 |   2 | 8 |
+|   1 | *6* | 7 |
+
+------
+
+| 6 | 7 | 9 |
+| 5 | 2 | 8 |
+| 1 | 3 | 4 |
+
+
+*** Mein Ziel
+
+Ich will, dass Sie die Fähigkeiten erwerben, unter denen zu sein, die
+die Deployment Zeit um Größenordnungen verringern, ohne dabei die
+Kosten dafür zu zahlen, Torrents als Blackbox zu sehen.
+
+- *Torrent* :: Bezeichnung für eine BitTorrent-Datei oder eine von BitTorrent verwaltete Datei.
+- *BitTorrent* :: Ein p2p-System zum Verteilen großer Datenmengen; Verwaltung läuft  auf zentralisierten Trackern
+
+
+*** Projektideen
+
+- Download-Mesh implementieren
+    - Nur Range-Requests + magnet für Quellen
+    - Quellen-Gossip via XAlt[fn:29]
+    - Mit Merkle-Tree oder hashliste für chunks und mit XNalt
+- Suche über WebRTC in Javascript
+    - flooding über vereinfachtes Binärprotokoll
+    - QRP / QRT
+    - Sharing als Upload in local storage
+    - GGEP: Generic Gnutella Extension Protocol; Binarprotokoll für beliebige Daten.
+
+
+* Footnotes
+
+[fn:40] ⇒ shared state,  global; in Realität stattdessen: Hash. 
+[fn:39] Could this be used in a webshop? Who needs which guarantees?
+
+[fn:38] ungelöst: Japanische oder Chinesische Zeichen. 
+[fn:30] ⇒ gibt es eine einfachere Lösung? 
+
+[fn:37] Greedy-Routing: forward requests with local information to the best node.
+
+[fn:36] Gossip: attach information to normal communication to distribute it.
+
+[fn:35] CAPTCHA: Usually images with letters whose result is part of a watched key.
+
+[fn:34]LRU: Least Recently Used. Delete oldest first. 
+
+[fn:33] Seednode: Bekannter Knoten, der Verbindungen zu anderen vermittelt.
+
+[fn:32] Freeloader: People who don’t upload. Also: „Leech“. Inverse: „Seed“.
+
+[fn:31] xor-Metric: 4 xor 2 ⇒ 100 xor 010 ⇒ 110 ⇒ 6.
+
+[fn:29] XAlt/XNalt: Header, der gute / kaputte Quellen beschreibt.
+
+[fn:28] QRT: Query Routing Table. 
+
+[fn:27] Magnet-Links liefern Infos für Downloads in leicht kopierbarem Link.
+
+[fn:26] Tauschbörse: Ein Dienst, in dem Nutzerinnen und Nutzer Inhalte anbieten und von anderen Nutzern herunterladen.
+
+[fn:25] Topologie: Struktur des Netzes.
+
+[fn:19] dwd: Deutscher Wetterdienst. 
+
+[fn:24] History of LimeWire: https://melmagazine.com/en-us/story/an-oral-history-of-limewire-the-little-app-that-changed-the-music-industry-forever 
+
+[fn:23] kt=…: Suchanfrage, wurde kaum genutzt. Weiteres: https://en.wikipedia.org/wiki/Magnet_URI_scheme#Design
+
+[fn:22] Source: https://www.reddit.com/r/safenetwork/comments/erpvee/dumb_question_is_safe_live/
+
+[fn:20] Set of weak hashes of the search words, number of keys scaled and interpolated dynamically
+
+[fn:21] \tiny https://www.draketo.de/english/freenet/deterministic-load-decentralized-spam-filter
+
+[fn:18] \tiny http://www.bittorrent.org/beps/bep_0003.html
+
+[fn:7] \tiny Teile der Spezifikation: http://rfc-gnutella.sourceforge.net/rfc-gnutella.zip und https://web.archive.org/web/20070429042042/http://www.the-gdf.org/index.php?title=Main_Page
+
+[fn:17] \tiny https://fosdem.org/ — viele Vorträge zu decentralization, privacy, …
+
+[fn:16] \tiny https://gitlab.com/spritely/golem/blob/master/README.org 
+
+[fn:15] \tiny https://web.archive.org/web/20120807165933/http://engineering.twitter.com/2010/07/murder-fast-datacenter-code-deploys.html 
+
+[fn:14] \tiny http://rfc-gnutella.sourceforge.net/src/Partial_File_Sharing_Protocol_1.0.txt 
+
+[fn:13] \tiny https://www.ietf.org/rfc/rfc2169.txt und http://www.nuke24.net/docs/2015/HashURNs.html 
+
+
+[fn:2] Wenn der Name im package steht, ist es nicht anonym :-)
+
+[fn:3] Das war mit der Benennung nicht gemeint, aber hiermit haben Sie bereits die Grundlagen für Übungen zu Anwendungen
+
+[fn:1] Beispiel nach RFC 2210 und 2211.
+
+[fn:4] \tiny https://www.akamai.com/de/de/about/our-thinking/state-of-the-internet-report/state-of-the-internet-ipv6-adoption-visualization.jsp
+
+[fn:5] IANA: Internet Assigned Numbers Authority
+
+[fn:8] Werbung ist Spam durch die genutzte Plattform.
+
+[fn:9] Reduziert Swarming auf Download einzelner Dateien, braucht aber caching: Zeitlich begrenzte Zwischenspeicherung.
+
+[fn:10] “The Internet treats censorship as a malfunction and routes around it.” -- John Perry Barlow 
+
+[fn:11] 2h lifetime are surprisingly persistent.
+
+[fn:12] gwc resource: https://github.com/gtk-gnutella/gwc 
+
+
+# #+toc: headlines 2
+
+
+#+setupfile: ../org-templates/level-1-software.org
+#+LaTeX_CLASS: beamer
+#+LaTeX_CLASS_OPTIONS: [presentation]
+#+beamer_header: \setbeameroption{show notes}
+# #+beamer_header: \setbeameroption{hide notes}
+# #+beamer_header: \setbeameroption{show only notes}
+#+beamer_header: \setbeamertemplate{navigation symbols}{}
+
+# add appendix
+#+LaTeX_HEADER:\newcounter{framenumberwithoutappendix}
+#+latex_header: \usetheme{Berlin}\usecolortheme{dove}
+#+latex_header: \newcommand{\carlo}[1]{\color{blue!65!black}{#1}}
+#+latex_header: \newcommand{\arne}[1]{\color{red!50!black}{#1}}
+#+LaTeX: \definecolor{bg}{rgb}{0.98,0.98,0.98}
+
+
+#+latex_header: \usepackage{hyperref}
+#+LATEX_HEADER: \usepackage{xcolor}
+#+LATEX_HEADER: \usepackage[ngerman]{babel}
+#+LATEX_HEADER: \usepackage{tikz}
+#+LATEX_HEADER: \setlength{\parindent}{0cm}
+#+LATEX_HEADER: \setlength{\parskip}{0.5em}
+
+# unicode input
+#+LATEX_HEADER: \usepackage{uniinput}
+#+LATEX_HEADER: \DeclareUnicodeCharacter{B7}{\ensuremath{\cdot}}
+
+#+LATEX_HEADER: \usepackage{natbib}
+#+LATEX_HEADER: \usepackage{morefloats}
+#+LATEX_HEADER: \hypersetup{
+#+LATEX_HEADER:     colorlinks,
+#+LATEX_HEADER:     linkcolor={red!50!black},
+#+LATEX_HEADER:     citecolor={blue!30!black},
+#+LATEX_HEADER:     urlcolor={blue!50!black}
+#+LATEX_HEADER: }
+#+LATEX_HEADER: \usepackage{lmodern}
+#+LATEX_HEADER: \usepackage[protrusion=true,expansion=true]{microtype}
+#+LATEX_HEADER: \usepackage{pdfpages}
+
+#+LATEX_HEADER: % make PDF reproducible as by https://tex.stackexchange.com/questions/229605/reproducible-latex-builds-compile-to-a-file-which-always-hashes-to-the-same-va/313605#313605
+#+LATEX_HEADER: % For pdfTex:
+#+LATEX_HEADER: \pdfinfoomitdate=1
+#+LATEX_HEADER: \pdftrailerid{}
+#+LATEX_HEADER: \pdfinfo{   /Producer () /Creator () }
+
+
+
+# Local Variables:
+# org-confirm-babel-evaluate: nil
+# org-export-default-language: de
+# org-babel-noweb-wrap-start: "{{{"
+# org-babel-noweb-wrap-end: "}}}"
+# org-latex-images-centered: nil
+# End:
+# override template options:
+#+options: toc:nil H:3 num:nil ^:nil

          
A => software/schluessel-zum-licht.png +0 -0

        
A => software/twitter-torrent-mesh.png +0 -0

        
A => software/twitter-torrent-ring.png +0 -0

        
M software/vorlesung-verteilte-systeme-1-p2p-nup-thumb.png +0 -0

        
M software/vorlesung-verteilte-systeme-1-p2p-thumb.png +0 -0

        
M wissen/klimalinks.org +11 -0
@@ 35,6 35,17 @@ Languages: 🇬🇧 English and 🇩🇪 Deutsch ([[https://www.draketo.de/wissen/klimalinks.xml][RSS-Feed]])
   
 #+toc: headlines 2
 
+* Klimaschutz Priorität
+  :PROPERTIES:
+  :CUSTOM_ID:  waermstes-jahr-ueberleben
+  :ID:       863557d0-a3eb-4bc1-96cd-3b42a46d36e2
+  :PUBDATE:  2025-01-21 Di 00:35
+  :END:
+
+- wdr: [[https://www1.wdr.de/nachrichten/interview-klimaforscher-niklas-hoehne-klimaziele-100.html][Klimaforscher: „Es geht um das blanke Überleben unserer Gesellschaft“]]
+
+[2025-01-20 Mo]
+
 * Deutsches Klimakonsortium: Klimaschutz in Parteiprogramme
   :PROPERTIES:
   :CUSTOM_ID:  dkk-klimaschutz-parteiprogramme

          
M zitate.org +22 -0
@@ 3600,3 3600,25 @@ dead” cultural values, etc.\\
 about themselves in the next.*\\
 --- OnlineVagabund on creating for\\
 \phantom{---} Warhammer 40k ([[https://rollenspiel.social/@OnlineVagabund/113837198403751276][2025-01-17 Fr]])
+
+* 
+  :PROPERTIES:
+  :CUSTOM_ID: reject-the-evidence-1984
+  :ID:       ebf83cb7-35b7-415a-87d6-11734adbe8dc
+  :PUBDATE:  2025-01-25 Sa 17:18
+  :END:
+
+The Party told you to reject the evidence of your eyes and ears. It was their final, most essential command.\\
+--- George Orwell, 1984
+
+* 
+  :PROPERTIES:
+  :CUSTOM_ID: truth-lie-questioned
+  :ID:       cce8bd2b-52c7-4719-a05b-212905d9ff78
+  :PUBDATE:  2025-01-25 Sa 17:18
+  :END:
+
+Truth does not mind being questioned.\\
+A lie does not like being challenged.\\
+--- Original source unknown
+