Aussehen
Suche Einloggen
[c] [meta] [fefe] [erp]

/c/ – Eine der letzten echten Webseiten


Antwort erstellen

(≤ 4)



[Zurück]

  • [l] Hansa: The Infiltration of the Dark Web Efef [RAUTE][RAUTE] DARKNETMOD Wed, 29 Jul 2026 16:51:43 GMT Nr. 164113
    PNG 998×638 470.1k
    GIF 498×280 8.4M
    GIF 480×270 1.9M
    JPG 2537×1847 1.1M
    Quellen:
    https://docs.google.com/document/d/1T7s65rPHMH6H0ZuMxFhGMcCwXXh4RjBxJPOow3VxTkY/edit

    Video:
    https://www.youtube.com/watch?v=V6d8Yy7Ji68
  • [l] Felix Wed, 29 Jul 2026 17:22:59 GMT Nr. 164114
    PNG 1920×1080 763.1k
    Die Admins waren ja auch strunzdumm.
  • [l] Felix Wed, 29 Jul 2026 18:27:07 GMT Nr. 164115
    >>164114
    >le yagi meme
  • [l] Felix Wed, 29 Jul 2026 22:19:20 GMT Nr. 164118
    >>164113
    >data wipe 2.gif
    Diffusiondithering, lange nicht mehr gesehen, gibt's das auch für NetzMs?
  • [l] Felix Wed, 29 Jul 2026 22:31:20 GMT Nr. 164119
    >>164118
    >Ich bin so alt, ich kann mich sogar noch daran erinnern, als GIFs echte GIFs waren und keine konvertierten MP4/NetzM-Dateien, die so tun als wären sie ein GIF
  • [l] Felix Thu, 30 Jul 2026 04:00:45 GMT Nr. 164122
    Gut gemachte Produktion, danke für das teilen.

    https://www.youtube.com/watch?v=V6d8Yy7Ji68&t=1207s

    Schon sehr herb lächerlich. Schnell neue Fotos machen und dann wohl sogar die Geocords (?) mit drin gelassen haben.
    Aber dick im DunkelNetz am verticken sein ... das sind die richtigen.

    >>164118
    >>164119
    Wohl Wahr. Bei genug langeweile wird Felix data_wipe durch richtige Webm ersetzen.

    >Bzgl. data_wipe gab es doch schon vor Jahren (auf der Schwarzhut?) tolle Ideen.
    Wie z.B. Thermit welches dann auf "Knopfdruck" über den Festplatten gezündet werden konnte.

    Zum Glück hat Felix sowas alles nicht nötig, dennoch ist die Theorie und Hintergrundsgeschichte von solchen Dingen immer interessant.
  • [l] Felix Thu, 30 Jul 2026 04:14:33 GMT Nr. 164123
    >>164122
    >Wie z.B. Thermit welches dann auf "Knopfdruck" über den Festplatten gezündet werden konnte.
    Eine ordentliche Vollbitverschlüsselung für die Festplatte und ein Knopfdruck, der den RAM-Inhalt mit Nullen überschreibt, hätte es auch getan aber oke
  • [l] Felix Thu, 30 Jul 2026 05:01:05 GMT Nr. 164124
    WEBM 1280×720 0:33 2.8M
    JPG 1280×720 48.6k
    WEBM 1280×720 1:12 3.1M
    WEBM 1280×720 1:32 2.6M
    Warum ist data 1 soviel größer als data 2?
    Sind doch beide fast gleich lang. Sind da wieder versteckte Botschaften drin versteckt?
    Doofer Mod, braucht ihr noch neue? Teehee

    >>164123
    Hihi aber ohne Feuer macht es doch keinen Spass.
    Wie willst du dann jemanden für Wissenschaft begeistern?

  • [l] Felix Thu, 30 Jul 2026 05:26:50 GMT Nr. 164126
    >>164123
    Ich habe noch einen Felix 123. Wird wohl sonst nie an die Öffenlichkeit kommen weil sämtliche Mitarbeiter ein NDA unterschreiben durften und die eh nur Knöpfe drücken.

    Aber hier gibt es so einen Stahlkonzern und die haben vor ein paar Jahren so ein -- 'Falls mal Feuer ausbricht wird gelöscht Ding' eingebaut.
    Problem an der Sache: Wenn das Feuer wirklich ausbricht und die Anlage anspringt, sollte Feuer die geringste Sorge von den Menschen in der Nähe sein. Das Feuer geht aus, zu 100%. Safety First
  • [l] Felix Thu, 30 Jul 2026 06:27:37 GMT Nr. 164128
    JPG 1836×2048 417.3k
    JPG 1385×2048 289.4k
    >>164118
    >Diffusiondithering, lange nicht mehr gesehen, gibt's das auch für NetzMs?
    Kommt drauf an, wie viel Mühe man sich in ffmpeg machen möchte. Da gibt es Spielraum.
    <https://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html
  • [l] Felix Thu, 30 Jul 2026 06:33:18 GMT Nr. 164129
    PNG 1070×123 124.5k
    PNG 1115×628 359.3k
    >>164122
    Gerne, ich teile immer freudig!
    NTFS ist im übrigen schlimmer als EXIF.

    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments]
    "SaveZoneInformation"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3]
    "1806"=dword:00000000


  • [l] Felix Thu, 30 Jul 2026 06:48:48 GMT Nr. 164130
    >>164129
    Danke Felix aber du musst dies mehr erläutern, denn Feuer ist einfacher als die Registry zu raiden.
  • [l] Felix Thu, 30 Jul 2026 07:03:26 GMT Nr. 164133
    JPG 1450×809 37.7k
    >>164130
    obiges schaltet Mark of the Web ab (MOTW) was grundsätzlich ein UAC spawnt auch bei einem digital signiertem Treiber und warnt die Datei kommt aus dem Netz. Unabhängig ob dann wirklich Adminrechte angefragt wurden.

    Das andere speichert nicht die alternativen Datenströme mit den Dateien aus dem Netz. Sonst hat man ganz tolle beweise wo du *jede* wirklich jede Datei heruntergeladen hast. Mit URI der Datei und aktuellen Seite.

    Kannst ja vorher ein Backup der alten werte machen, pwsh kommandos zum testen habe ich ja gezeigt.
  • [l] Felix Thu, 30 Jul 2026 07:28:46 GMT Nr. 164134
    >>164113
    Alles bei Amazon gekauft, gut eingepackt und zurück geschickt.
    FICK DICH!
    FEUER FEUER FEUER
  • [l] Felix Thu, 30 Jul 2026 10:30:02 GMT Nr. 164142
    PNG 1280×436 156.6k
    >>164129
    unter macOS oder Windows scheint das ja absolut kein Problem zu sein, aber unter Linux kriegt man das offenbar nicht hin, wäre schon nett zu wissen wo die Datei herkommt, die man heruntergeladen hat

    der Käfer im Feuerfuchs ist auch bald volljährig
    https://bugzilla.mozilla.org/show_bug.cgi?id=665531

    Zumindest hier fallen ein paar Metadaten von file:// und http(s):// Elfen an
    ~/.local/share/gvfs-metadata/
    ~/.local/share/tracker/
    ~/.local/share/*.xbel
    ~/.cache/thumbnails/
    

  • [l] Felix Thu, 30 Jul 2026 10:33:57 GMT Nr. 164144
    >>164142
    Mit extended attributes (xattrs) sollte ich sowas prinzipiell auch unter Linux realisieren lassen bei Dateisystemen, die diese unterstützen (die meisten gängigen). Das ist quasi das Linux-Äquivalent zu Alternate Data Streams bei NTFS.

    Dass der Fuchs das nicht macht, liegt vermutlich daran, dass Linuxbenutzer nicht vor ihrer eigenen Dummheit beschützt werden müssen wie Fensterbenutzer.
  • [l] Felix Thu, 30 Jul 2026 15:22:51 GMT Nr. 164150
    PNG 886×597 122.6k
    >>164144
    >dass Linuxbenutzer nicht vor ihrer eigenen Dummheit beschützt werden müssen
    Aber Poettering hat doch gesagt:
    >Just embrace app sandboxing!

    @claude review
  • [l] Felix Thu, 30 Jul 2026 15:36:03 GMT Nr. 164151
    >>164150
    Gibt es schon Altersportale für Linux?


    sowas wie
    xdg-desktop-age-brackets-portal
    xdg-desktop-legal-age-portal
    xdg-desktop-millenials-portal (für töpfernd)
  • [l] Felix Thu, 30 Jul 2026 15:42:05 GMT Nr. 164152
    PNG 249×236 82.1k
    JPG 980×742 88.3k
    PNG 986×1224 85.6k
    JPG 1344×1546 93.7k
    >>164142
    >wäre schon nett zu wissen wo die Datei herkommt, die man heruntergeladen hat
    >unter macOS [...] scheint das ja absolut kein Problem zu sein
    Alter was hier für Meinungen vertreten werden.


    >>164144
    >Mit extended attributes (xattrs) sollte ich sowas prinzipiell auch unter Linux realisieren lassen
    Lennart macht schon genug Mist mit Altersverifizierung als systemd-modul. Bitte nicht!

    >>164150
    Ich weiß bis heute nicht ob Lennart da getrollt hat oder es sein ernst war. Ich warte ja auf CLOSED, WONTFIX & NOTABUG.
  • [l] Felix Thu, 30 Jul 2026 15:59:26 GMT Nr. 164154
    JPG 1280×720 47.6k
    >164151
    Es ist ja nicht so als hätten wir schon genug Gefangenenportale.
  • [l] Felix Thu, 30 Jul 2026 16:38:07 GMT Nr. 164156
    WEBM 960×720 0:46 5.5M
    PNG 955×448 74.0k
    >>164151
    Sebastian Wick (selber eine Lachkuch) hat den entsprechenden Faden zu xdg-desktop-portal gesperrt, und kurz davor wurde der Faden auf "too heated" gesetzt. Letzteres haben sie scheinbar von des GNOME-Meisters Adjutanten gelernt.

    https://github.com/flatpak/xdg-desktop-portal/pull/1922

    Sebastian Wick hat übrigens in der Fahrradunterstand-Zentrale bikeshed central (namens Wayland Protocols) gerade einen Pfosten abgesetzt, welcher den Meister stolz machen würde:
    >This isn't a feature, but an anti-feature. Global shortcuts must work with systems which do not have a keyboard and must support things like touch gestures.
    https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/525#note_3584038

    Wer kennt es nicht, wie soll man seinen Brauser mal schnell im Porno-Profil starten wenn man nicht einfach dafür seine Pene aufs Touchpad klatschen kann?

    Wayland-Entwicklung läuft bereits seit Jahren nach dem Motto
    >Oh du willst ein Protokoll? Tja, Pech gehabt! Mach es über dbus als Portal. Wir sprechen uns nochmal in 10 Jahren, vielleicht.
    und dann kam Valve und hat ihre Frog-Protocols gemacht, und plötzlich gingen die paar Protokolle, welche für Valve wichtig waren, wie auf Zauberhand durch. Nur die Drohung hat bereits gereicht, Frog-Protocols hat aktuell gar keine eigene Bedeutung mehr.
  • [l] Felix Thu, 30 Jul 2026 16:57:50 GMT Nr. 164157
    >>164156
    >nicht einfach dafür seine Pene aufs Touchpad klatschen kann?
    Gab/gibt da so ein Projekt, wo die Entwickler ein Penis-Maschine-Interface gebaut haben, hab mir das damals nachgebaut und nutze das bis heute. Das ist schon erstaunlich, man kann seinen PC ziemlich handfrei damit bedienen. Diesen Beitrag habe ich jetzt auch nur mit meinem Penis geschrieben.
  • [l] Felix Thu, 30 Jul 2026 17:02:40 GMT Nr. 164158
    WEBM 576×304 0:53 2.4M
    >>164156
    Ich bin ja sowieso der Meinung, dass systemd zu viel Hate abbekommt und dbus viel zu wenig. Habe den Verdacht, dass Leute das durcheinanderbringen, weil beide ein d im Namen haben, von Rot Hut stammen und massiv von Rot Hut forciert wurden, und weil systemd als Rot-Hut-Produkt natürlich auch die hauseigene D-Bus-Technologie benutzt, benutzen muss, (wobei man systemd der Meson-Datei nach zu urteilen auch ohne dbus-Unterstützung kompilieren kann... macht aber keine mir bekannte Distribution. Ob das dann hinterher tatsächlich läuft, weiß ich auch nicht, habe Zweifel). Viele der Sachen, die an systemd scheiße sind, sind in Wirklichkeit dbus. Und dbus ist auch sonst einfach nur beschissen in jeder Hinsicht. Und es ist ansteckend. Alles, was mit dbus in Berührung kommt, wird automatisch auch beschissen.
  • [l] Felix Fri, 31 Jul 2026 10:06:48 GMT Nr. 164166
    PNG 1200×700 96.1k
    PNG 1200×520 59.6k
    >>164144
    >extended attributes (xattrs)
    >quasi das Linux-Äquivalent zu Alternate Data Streams bei NTFS

    Nur weil man Dateiattribute in Gabelnhttps://en.wikipedia.org/wiki/Fork_(file_system) ablegen kann, sind diese nicht damit gleichzusetzen.

    Gabeln – bekannt als Ressourcen- oder Datengabeln unter macOS (HFS, APFS) oder Alternate Data Streams in NTFS, was nur ein alternativer Begriff für benannte Datenattribute bei Dateien mit mehr als einem Datenattribut sind – sind dazu da Dateiinhalte abzulegen.

    Unter macOS werden erweiterte Dateiattribute tatsächlich in benannten Gabeln abgelegt, weil es kein Attribut gibt um erweiterte Dateiattribute abzulegen. Unter Linux gibt es das, aber keine Gabeln. In NTFS existiert beides.https://superuser.com/a/1736010

    Das Erweiterte-Dateiattribute-Attribut bei Ext-basierten Dateisystemen ist auf die Blockgröße beschränkt, bei NTFS auf 64KiB. Unter btrfs kann man soviele Erweiterte-Dateiattribute anlegen wie Speicher vorhanden ist. Ob das wohl die Probleme erklärt, wenn der Speicher fast voll ist, oder wenn man den belegten Speicher ermitteln will? Aber der Windows Explorer zeigt ja auch nur die Größe des unbenannten Datenattributs als Größe einer Datei an und ignoriert die benannten. Da zeigen die B-Baum-Dateisysteme im Nutzerland ja ähnlich verwirrendes Verhalten. Die maximale Anzahl der Datenattribute einer Datei in NTFS ist auf die Größe der Attributsliste beschränkt, die bei 256KiB liegt, in der die Verweise auf die Datenattribute abgelegt werden.https://colatkinson.site/windows/ntfs/2019/05/14/alternate-data-stream-size/
  • [l] Felix Sat, 01 Aug 2026 11:49:16 GMT Nr. 164191
    >>164166
    >sind diese nicht damit gleichzusetzen.
    In der Tat! Allerdings muss man sich schon fragen, ob für ~100-300 Bytes eine Gabel das richtige wäre. Auf NTFS sind ADS der Standard™, und sollte auch dort genutzt werden, nach Felixens Meinung ist aber für so kleine Zusatzinformationen das Reinstopfen in xattrs genau das Richtige. Denn fast alle Dateisysteme bieten _inline_ xattrs, wodurch diese Attribute direkt im inode block gespeichert werden.

    Hier mal die Größen von inline xattrs verschiedener Linux-Dateisysteme:
    *ext4: 324 Bytes
    *btrfs: 16109 Bytes
    *F2FS: 200 Bytes (konfigurierbar via inline_xattr_size)
    *XFS: 330 Bytes

    Wenn es nicht inline gespeichert wird, geht natürlich mehr.

    Ganz davon abgesehen will Felix aber eigentlich gar kein Mark of the Web, wegen Nacktmachung und Dateisystemreinheit. Auch wenn solche Daten beim Dateihochlad ins Netz nicht übermittelt werden.

    >zeigt ja auch nur die Größe des unbenannten Datenattributs als Größe einer Datei an
    >B-Baum-Dateisysteme
    Ich glaube, dass das nichts mit B-Bäumen zu tun hat. Es ist eher eine architekturelle API-Regel.
    Felix möchte daran erinnern, dass beispielsweise das sehr performate F2FS keine B-Baum-Dateisysteme benutzt. Felix glaubt, dass auch die Datei-Explorierer auf Linux nicht die Größe der xattrs als Teil der Dateigröße betrachten und dementsprechend eine kleinere Zahl anzeigen. Das gilt dann egal ob ext4 oder F2FS etc.

    >B-Baum-Dateisysteme
    Generell merkt man, dass Bäumen in der Informatik immer mehr das Wasser abgegraben wird (höhö), weil man gesehen hat, dass Hash-Tabellen häufig die bessere Lösung sind, insbesondere bzgl. Performanz wenn man Hash-Tabellen mit offener Adressierung (auch bekannt als: Wir machen das mit dem Array) benutzt. F2FS benutzt eine (ggf. erweiterbare) Hash-Tabelle pro Verzeichnis, um von Namen auf inodes zu kommen.

    Bäume hat man noch hauptsächlich dann, wenn man nun einmal die Eltern-Kind-Relation irgendwie aufzeichnen muss, und dafür eben die Zeiger speichern muss, also zum Speichern, nicht zum Verarbeiten. Wenn man Dinge verarbeiten will, will man sicherlich nicht ständig auf Zeiger-Jagt gehen (was auch die Baum-Apologeten gemerkt haben und B-Bäumen gebaut haben). Rot-Schwarz-Bäume/AVL-Bäume haben auch gegen Skip-Listen (mit Hashing um die Knoten-Ebene zu bestimmen, statt Zufall) in der noch verleibenden Nische (einströmende Daten, die immer sortiert gehalten werden, d.h. "Anschnur-Algorithmen") immer mehr an Bedeutung verloren. Man muss heutzutage wirklich, wirklich gute Gründe haben, um noch Bäume als Datenstruktur bei der Verarbeitung zu verwenden, das dämliche Runterhangeln tötet einfach die Performanz.
  • [l] Felix Sat, 01 Aug 2026 12:28:04 GMT Nr. 164192
    JPG 800×1195 420.8k
    >>164191
    >Hash-Tabellen mit offener Adressierung (auch bekannt als: Wir machen das mit dem Array)
    Aber eigentlich sind B-Bäume bzw. B+-Bäume doch gerade "Wir machen das mit dem Array". Die können schon ziemlich effizient sein. Es ist aber entscheidend, die Knotengröße richtig zu wählen. Die sollte meistens so gewählt sein, dass sie genau in den "Cache" passt - welcher Cache, das hängt von der Anwendug ab. Bei In-Memory-Bäumen bietet sich die Größe des L1/L2/L3-Caches an, bei Dateisystemen die Größe einer Seite. Am besten ist es aber, zu messen. Die optimale Größe ist oft größer als man erwartet. Bei In-Memory-Bäumen lag das Optimum in meinem Fall, wenn ich mich richtig erinnere, bei etwa 16 - 32 KB, wobei 64 KB und 128 KB nur geringfügig langsamer waren.

    Man will die Knoten so breit wie möglich haben, weil dann die Höhe des Baumes umso niedriger ist. In der Regel hat man dann nur ein, zwei oder maximal drei Level.

    Aber Hashtabellen und Bäume lösen auch unterschiedliche Probleme. Hashtabellen sind im Vorteil, wenn man hauptsächlich Lookups durchführt und immer nur genau einen Eintrag liest, und wenn es jedes mal "zufällig" ist, welchen Eintrag man liest.

    Bäume betrachte ich hingegen eher als ständig sortierte Arrays, in denen man effizient Einfügen und Löschen kann. B-Bäume spielen vor allem bei Bereichsanfragen ihre Stärken aus, also wenn man über alle Einträge zwischen a und b drüberiterieren will. Da sind sie extrem cache-effizient. Eine Hashtabelle ist da der Worst-Case: Die Einträge sind aufgrund der Hashfunktion vollkommen zufällig im Speicher verteilt, sodass jeder Zugriff ein Cache-Miss ist.

    Mit B-Bäumen kann man auch noch ein paar andere kühle Sachen machen, z.B. Ropes. Man kann auch effizient Referenzen implementieren, die immer auf einen bestimmten Eintrag zeigen (oder eine Lücke zwischen zwei Einträgen), und auch dann gültig bleiben, wenn Elemente eingefügt oder gelöscht werden.

    Bäume haben vielleicht einen schlechten Ruf wegen Rot-Schwarz-Bäumen und AVL-Bäumen: Dort hat jeder Knoten immer nur maximal zwei Kinder, weshalb der Baum sehr tief ist. Und die Knoten sind dann auch noch quer über den Heap vertreut. Das ist natürlich ineffizient.

    Weiterer Nachteil der Hashtabelle (und auch Skipliste): Sie sind probabilistisch, während balancierte Bäume vollkommen deterministisch sind. Erinnert sich noch jemand an den DoS-Angriff auf u.a. PHP (glaube Java, Ruby und einige andere waren auch betroffen), indem man speziell gecraftete Parameter in die URL einfügte, damit die Hash-Liste, in der diese Runtimes die Parameter speichern, zu quadratischem Laufzeitverhalten degenerierte? Mit Bäumen wäre das nicht passiert!!1 Man kann das natürlich ein Stück weit mitigieren mit randomisierten Hashes wie siphash. Der Nachteil ist, dass diese Hashfunktionen aber langsamer sind.

    Bäume sind eigentlich schon ganz kühl, weil sie einfach gute Allround-Datenstrukturen sind. Sie sind einfach in keiner Disziplin wirklich schlecht. Man kann sie eigentlich für alles ohne Bedenken nehmen, es gibt keine pathologischen Fälle. It just works.

    Einziger Nachteil: B-Bäume sind im Vergleich zu anderen Datenstrukturen ein ziemlicher Krampf zu implementieren.
  • [l] Felix Sat, 01 Aug 2026 13:06:12 GMT Nr. 164194
    PNG 755×1189 360.1k
    >>164192
    Affenbrot-Baum meldet sich, Felix antwortet! :)

    >Aber eigentlich sind B-Bäume bzw. B+-Bäume doch gerade "Wir machen das mit dem Array"
    Ja, aber eben mit den Arrays in einem Baum angeordnet, und man muss sich immer noch zu den Array hinhangeln.
    >Man will die Knoten so breit wie möglich haben, weil dann die Höhe des Baumes umso niedriger ist. In der Regel hat man dann nur ein, zwei oder maximal drei Level.
    Ja!

    Ohne Blöcke wie beim B-Baum sollte man Felixens Meinung nach Bäume heutzutage gar nicht erst versuchen.

    >Bäume betrachte ich hingegen eher als ständig sortierte Arrays
    >Bereichsanfragen
    Wenn man "ständige Sortierung" oder "Bereichsabfragen" will, dann sollte man nicht Hash-Tabellen verwenden! Nicht umsonst gibt es in der besondersten Programmiersprache der Welt die Unterscheidung zwischen std::unordered_map und std::map. Und wie zu erwarten, sind die Namen genau unpraktisch gewählt (es wäre std::map und std::ordered_map besser gewesen) und aufgrund eines Spezifikationsfehlers im Standard kann man std::unordered_map nicht mit offener Adressierung implementieren. Mit dem Gegenangriff std::flat_map wird das alles bestimmt in Ordnung kommen.

    Aber gerade bei Bereichsabfragen ist das nicht zu verwenden, und z.B. die Computergrafik hat ihre eigenen BVH-Datenstrukturen (wobei die auch ihr "spatial hashing" für Lookups entdeckt haben).

    >drüberiterieren
    Wenn man über _alle_ Einträge einer Hash-Tabelle (also nicht nur in einem Bereich) drüber iterieren will, sollte die Hash-Tabelle eine Zugriffsmöglichkeit bieten, mit der man über das dahinterliegende Daten-Array iterieren kann. Dann muss man aber leere/ge-Grabstein-te Elemente überspringen. Hash-Tabellen haben in der Regel einen Maximalfüllstand (z.B. 80 %) und entsprechenden Minimalfüllstand (z.B. 20 %). Demenstprechend kann man tatsächlich bis zum 80 % leere Elemente haben, wo der Zugriff vergeudet ist.

    Das gilt jedoch nicht bei "stabilen" Hash-Tabellen, welche ein nochmals dahinterliegendes Daten-Array haben, welches dicht gepackt ist, auf welches das Key-Value-Array zeigt. Das Daten-Array kann höchstens bei Löschungen Einträge wie bei einer Free-List haben, die überspringen werden müssen, aber beim Hinzufügen wieder gefüllt werden. Das ist in der Regel damit sehr kompakt beim Durchiterieren über alle Elemente, ohne vergeudete Zugriffe.

    >Ropes
    Felix präferiert Piece-Tables. :)

    >Bäume haben vielleicht einen schlechten Ruf wegen Rot-Schwarz-Bäumen und AVL-Bäumen: Dort hat jeder Knoten immer nur maximal zwei Kinder, weshalb der Baum sehr tief ist. Und die Knoten sind dann auch noch quer über den Heap vertreut. Das ist natürlich ineffizient.
    Warum lernt man die eigentlich als Paradebeispiel für Bäume in der Uni?

    >Weiterer Nachteil der Hashtabelle (und auch Skipliste): Sie sind probabilistisch, während balancierte Bäume vollkommen deterministisch sind.
    Skiplisten werden klassischerweise mit PRNG implementiert, Felix hat sie mit Hashfunktion implementiert.
    Hash-Tabellen und Skiplisten sind beide deterministisch, aber beide können mit pseudo-randomisierter Hashfunktion implementiert werden, indem man einen Seed XOR't.

    Ich glaube, Abseil macht das.

    Wobei die von Google diesbezüglich einen großkotzigen Blockpfosten rausgehauen haben, dass die KI (die KI!!) ihnen nun eine bessere Hashfunktion geliefert habe, die ja besonders super toll sei, und sie diese Hashfunktion nun in Abseil implementiert haben. Plotttwist: Die Leute von Google haben diese angeblich bessere Hashfunktion dann nach 2 Jahren wieder aus der Kotbasis rausgeworfen, und essentiell durch das gute, alte Knuth-Hashing plus Seed ersetzt. Natürlich still und heimlich, ein "Hupsi, hab gefeeft" macht sich schließlich nicht gut in einem Blockpfosten.

    >Bäume sind eigentlich schon ganz kühl
    >Man kann sie eigentlich für alles ohne Bedenken nehmen, es gibt keine pathologischen Fälle.
    Man kann aufsteigende Werte einfügen, bis jeder Knoten im B-Baum fast ganz gefüllt ist, und dann beim nächsten Einfügen eine Kettenreaktion auslösen?
    Ebenso beim Löschen, wenn jeder Knoten im B-Baum ganz knapp über dem Minimum liegt.

    Das klappt natürlich bei Rot-Schwarz-Bäumen und AVL-Bäumen ganz besonders gut, weil dort Minimum und Maximum zusammenfallen.

    >It just works.
    Wenn man sich mit Zeigerjagt abgibt. Zugegebenermaßen gibt es in den meisten Kotbasen ganz andere Probleme als die Zeigerjagt.
    Felix hat jedoch im Profiling bereits auffällig häufig std::ordered_map oben gesehen.
  • [l] Felix Sat, 01 Aug 2026 13:46:12 GMT Nr. 164195
    >>164194
    >Warum lernt man die eigentlich als Paradebeispiel für Bäume in der Uni?
    Keine Ahnung, Felix hatte da Glück. Felix hat an seiner Uni B+-Bäume (oder sowas ähnliches) gelernt, weil der Prof meinte, dass man damit das Konzept am besten versteht und dass es keinerlei Sinn macht, diese ganzen komischen Varianten zu lernen, zumal Rotschwarz-Bäume isomorph zu 2-4-B-Bäumen sind oder irgendwie sowas. Der Übungsleiter meinte auch, er hat diesen Scheiß gehasst. Die Algorithmenvorlesung war wirklich gut. Leider war die Klausur dafür die reinste Verarsche.
  • [l] Felix Sat, 01 Aug 2026 13:54:43 GMT Nr. 164199
    Nachtrag:

    >>164195
    >Felix hat jedoch im Profiling bereits auffällig häufig std::ordered_map oben gesehen.
    Liegt wahrscheinlich an der Implementierung und nicht an der Datenstruktur an sich. Eins von Felixens Übungsleiters Projekten damals war eine alternative Implementierung von ebenjenen C++-Datenstrukturen, die erheblich schneller war, als das, was die Compilerhersteller standardmäßig ausliefern. Ich weiß nicht mehr, ob es API-kompatibel war, glaube aber schon.

    >Man kann aufsteigende Werte einfügen, bis jeder Knoten im B-Baum fast ganz gefüllt ist, und dann beim nächsten Einfügen eine Kettenreaktion auslösen?
    >Ebenso beim Löschen, wenn jeder Knoten im B-Baum ganz knapp über dem Minimum liegt.
    Maximal logarithmisch viele Operationen, so hoch wie der Baum ist. Und wenn man es richtig macht, dann ist der nicht hoch, sondern maximal so ~3 Ebenen.

    Mit Skiplisten habe ich mich persönlich nie beschäftigt, aber ich weiß, dass das auch nur verkappte Bäume sind, bloß eben probabilistisch. Und ich schätze mal, da hat man noch eine Menge Pointer-Overhead, wo du schon "Pointer-Chasing" angesprochen hast, weil das ganze doch auf (mehreren) doppelt verketteten Listen basiert.

    Eigentlich hat man bei B-Bäumen ausgesprochen wenig Pointer-Chasing, der Speicher wird sehr effizient genutzt und die Lokalität ist auch sehr gut.
  • [l] Felix Sat, 01 Aug 2026 14:01:09 GMT Nr. 164200
    >>164199
    >Maximal logarithmisch viele Operationen, so hoch wie der Baum ist. Und wenn man es richtig macht, dann ist der nicht hoch, sondern maximal so ~3 Ebenen.
    Auch: Vergleiche das mit einer Hashtabelle, bei der du alle Einträge neu hashen musst, wenn die Tabelle vergrößert werden muss. O(log n) vs. O(n).
  • [l] De Urs Sat, 01 Aug 2026 14:48:05 GMT Nr. 164202
    I find's scho no amüsant. Hüt isch de 1. August, mer chönt eifach mal zäme fiire und de Tag gnüsse – aber nei, stattdesse wird über irgendöppis diskutiert, wo am Änd eh niemertem öppis bringt.

    Das isch irgendwie so typisch dütsch: Statt eifach mal locker z'sii und s'Läbe z'gnüsse, wird lieber bis is letscht Detail umegstritte. Chömed, gönd use, grilliered öppis, trinked es Bier oder es Rivella und fiired de Nationalfiirtag. Die Diskussion lauft morn au no devo.
  • [l] Felix Sat, 01 Aug 2026 14:57:00 GMT Nr. 164204
    >>164202
    Ist doch kein Streit? Macht doch Spaß, über solche Dinge zu discotieren. Wir sind hier doch unter uns. Unter Nerds.
  • [l] Felix Sun, 02 Aug 2026 21:22:54 GMT Nr. 164210
    >>164199
    >>164200
    >Mit Skiplisten habe ich mich persönlich nie beschäftigt, aber ich weiß, dass das auch nur verkappte Bäume sind, bloß eben probabilistisch. Und ich schätze mal, da hat man noch eine Menge Pointer-Overhead, wo du schon "Pointer-Chasing" angesprochen hast
    Ja, sicherlich Overhead, aber bei Skip-Listen macht man die gleichen Tricks wie bei B-Trees.

    Ich hatte oben als Anwendungsbeispiel für Skip-Listen "Anschnur-Algorithmen" genannt. Das ist auch richtig so, denn da kommen ständig Daten rein, die sortiert abgelegt werden müssen. Beim B-Tree kriegt man dann einiges an Verschieberei, weil man die einzelnen B-Tree-Knoten schließlich intern sortiert vorhalten muss. Das hat man bei der Skip-List nicht und das Einfügen kann man bei der Skip-List sogar Lock-frei implementieren.

    >In the past five years, people have become increasingly sceptical of skip lists’ performance, due to their poor cache behavior when compared to e.g. B-trees, but fear not, a good implementation of skip lists can easily outperform B-trees while being implementable in only a couple of hundred lines.
    https://ticki.github.io/blog/skip-lists-done-right/
    <Warning: This is the blog I wrote as a kid. Most of what is written here is probably wrong.
    Mhhm. Ähhm.

    >Maximal logarithmisch viele Operationen, so hoch wie der Baum ist. Und wenn man es richtig macht, dann ist der nicht hoch, sondern maximal so ~3 Ebenen.
    >Auch: Vergleiche das mit einer Hashtabelle, bei der du alle Einträge neu hashen musst, wenn die Tabelle vergrößert werden muss. O(log n) vs. O(n).
    Klar, mit dem B-Baum bei einem Fan-Out von ~500 kriegt man nur ~3 Ebenen.
    Ein Problem und mit so einem Fan-Out ist eben, wie schon oben genannt, dass beim Einfügen man bis zu 498 Elemente verschieben muss.

    Am Ende ist das Einfügen in eine Hash-Tabelle amortisiert O(1), wohingegen bei einem B-Baum das Einfügen im Durchschnitt O(log_B(n) + B) ist. Im Wurst-Case dann für die Hash-Tabelle O(n) und für den B-Tree O(B * log_B(n)). Das ist die CPU-Zeit, weil man andere Angaben für die I/O-Zeit kriegt, die dabei häufig angegeben werden. Wobei sich Felix gerade ernsthaft fragt, ob dabei eine O-basierte Analyse wirklich sinnig ist, weil dabei die Effekte von Speicherzugriff, Cache-Lokalität und großen Konstanten viel wichtiger sind.

    Wenn man viel Zufalls-Lookup macht, kriegt man mit Hash-Tabellen rasend schnellen Zugriff.
    Wenn man viel Zufalls-Lookup und viel Durchiterieren macht, kriegt man mit stabilen Hash-Tabellen rasend schnellen Zugriff.
    Wenn man viel Einfügen macht und permanente Sortierung braucht, kriegt man mit Skip-Listen sehr effizientes Einfügen und keine hohen Latenz-Ausschläge.

    Bleibt für Felix noch der Fall, wenn man viel Einfügen macht und keine permanente Sortierung braucht. Da hat aber Felix den Fall, dass häufig die Gesamtgröße vorherbestimmbar ist. Und da nimmt dann Felix einfach ein dynamisches Array (mit dem guten, alten Reserve- + Commit-Trick) oder, wenn er zufällige Lookups machen muss, eine vorreservierte Hash-Tabelle.

    Vielleicht ist Felixens Punkt eher, dass ein Szenario "man macht viel Einfügen und viel Löschen und viel Zufalls-Lookup und viel Durchiterieren" (und am besten noch irgendwas mit Sortierung) bei Felix praktisch nie vorkommt, sondern man klar in die Zukunft sehen kann und erkennen kann, was man hauptsächlich macht. In vielen Fällen kann Felix auch die Anzahl Elemente einfach im voraus bestimmen und direkt vorallozieren.
  • [l] Felix Mon, 03 Aug 2026 01:06:43 GMT Nr. 164212
    >>164210
    >Ein Problem und mit so einem Fan-Out ist eben, wie schon oben genannt, dass beim Einfügen man bis zu 498 Elemente verschieben muss.
    Ja. Nur ist es defacto so, dass das auf modernen CPUs mit einer hoch-optimierten memmove-Funktion extrem schnell ist.

    >das Einfügen kann man bei der Skip-List sogar Lock-frei implementieren.
    Bist du sicher? Waren lock-freie doppelt-verkettete Listen nicht immer noch ein ungelöstes Problem der Informatik oder verwechsle ich das mit etwas anderem?

    Ich habe mal eine lock-freie Queue implementiert. Wollte eigentlich enien lockfreien Ringbuffer implementieren, stellte sich aber raus, dass das auf jeden Fall noch ein ungelöstes Problem der Informatik ist. Für Queues allgemein gibt es ein paar publizierte Lösungen, meine war am Ende sogar besser. Wobei sie streng genommen nicht "lock-frei" im eigentlichen Sinne ist, sie benutzt lediglich lock-freie Primitive und ist schneller als die klassische Variante mit Locks; theoretisch könnte es aber zu Wettlaufsituationen zwischen mehreren Threads kommen, sodass niemals Fortschritt gemacht wird - passiert in der Praxis aber nicht. Man könnte die Implementierung aber etwas modifizieren und dann wirklich lock-frei machen.

    Jedenfalls war Teil dieser lockfreien Queue-Implmentierung eine einfach-verkettete Liste. Und alleine das lock-frei zu machen ohne, dass es zu wettlaufsituationen kommt, war schon höllisch kompliziert und involvierte Hazard-Pointer und Pipapo. Eine doppelt-verkettete Liste lockfrei klingt für mich auf Anhieb intuitiv fast unmöglich, weil man ja pro Eintrag gleich zwei Zeiger hat, die immer synchron gehalten werden müssen, um die Invarianten zu erhalten; wenn die Invariante verletzt wird, dann passieren böse Dinge. Wenn das zwei Threads gleichzeitig drin rumpfuschen, dann müssen da eigentlich Wettlaufsituationen entstehen. Vielleicht ist es möglich, aber es klingt wie die absolute Hölle.

    Und bei einer Skip-List hat man ja auch noch gleich mehrere doppelt-verkettete Listen. Wenn einfach-verkettete Liste schon die Hölle ist, dann ist doppelt-verkettete List die Hölle² und Skip-List die Hölle³.
  • [l] Felix Tue, 04 Aug 2026 10:41:25 GMT Nr. 164225
    >>164212
    >Nur ist es defacto so, dass das auf modernen CPUs mit einer hoch-optimierten memmove-Funktion extrem schnell ist.
    Richtig (Felix hat memcpy/memmove (fast das gleiche, nur andere Richtung) und memset selber in x86-64-Assembler implementiert, fragt mich alles), jedoch wollte Felix an der Stelle darauf hinaus, dass auch ein B-Tree ohne Kettenreaktionen bei den Knoten eine Varianz bei der Ausführung hat, und ferner hat Felix auch zu seiner Ehrenrettung gesagt:
    >weil dabei die Effekte von Speicherzugriff, Cache-Lokalität und großen Konstanten viel wichtiger sind.
    Da bei solchen kleinen Größen memmove keine nt-Funktionen benutzt, wird bei 250 Elementen mit einer Größe ab je ~200 Byte der L1-Cache vollständig leergeräumt. Und da das alles im Kontext von dem guten Einwurf stand, dass die Hash-Tabelle bei Vergrößerung alles neu hashen muss (und damit noch viel mehr von den Caches leerräumt), macht letzteres F2FS auch nicht, sondern ... hängt eine neue Hash-Tabelle dran.

    >Auch: Vergleiche das mit einer Hashtabelle, bei der du alle Einträge neu hashen musst, wenn die Tabelle vergrößert werden muss. O(log n) vs. O(n).
    Felix hat das noch einmal durchdacht. Wenn man eine Hash-Tabelle (offene Adressierung, lineares Probieren) hat, welche sich beim Überschreiten des Load-Faktors verdoppelt, kriegt man in so einer Sequenz im Durchschnitt 2 Hash-Operationen und 2 Speicher-Verschiebungen pro Element, bis man alle Elemente fertig eingefügt hat und die Hash-Tabelle in Endform dasteht.

    So langsam ist Felix aber mit seinen asymptotischen Betrachtungen unzufrieden und müsste es mal implementieren, weil das Analysieren im Nebel doch nicht das Gelbe vom Ei ist.

    >doppelt-verkettete Listen
    Gibt es, die meisten Skip-Listen sind einfach-verkettet. In Bild relatiert hat man tatsächlich nur bei den Pfeilen Zeiger, also nur horizontal in eine Richtung, und auch nicht vertikal.
    >und [Lock-freie] Skip-List die Hölle³
    https://github.com/greensky00/skiplist/blob/master/src/skiplist.cc#L411

    Wie gesagt, das ist eine Spezial-Datenstruktur, für Spezialfälle (wie wenn massig Daten reinkommen und man gleichzeitig massig Abfragen macht).

    Das Problem mit B-Bäumen, wenn Felix es weiter durchdenkt, ist eher, dass in den meisten Fällen man schlicht weiß, was man machen will (Zufalls-Lookup, Durchiterieren, Einfügen, Löschen oder sortiertes Vorhalten), insbesondere mit vorher bekannter Anzahl Elemente, und daher die Anwendungsfälle für B-Trees gegen Null zusammenschnurpsen. Felixens Punkt ist weniger, dass wenn man einen tatsächlich guten Anwendungfall für B-Trees hat, der B-Tree dort schlechte Performanz aufweisen würden; sondern dass diese Anwendungsfälle schlicht selten vorkommen.

    Für welchen Fall waren B-Trees nun nach dieser Diskussion gut? Wenn man
    *man nicht weiß, wie viele Elemente man hat
    *man viele Elemente einfügt (Hash-Tabelle müsste sich neu hashen)
    *man viel linear Durchiterieren will
    *man aber eher wenige Zufalls-Lookups machen will und
    *man diese Elemente für Intervallabfragen permanent sortiert halten will (geht nicht mehr gut mit dynamischen Arrays)
    ?

    Dieser Felix bräuchte mal den klar umrissenen Anwendungsfall.

    B-Trees werden in der Anzahl Anwendungsfälle bereits irgendwo zwischen dynamischen Arrays und Hash-Tabellen kleingemacht (ganz ohne Skip-Listen).
  • [l] Felix Tue, 04 Aug 2026 11:16:22 GMT Nr. 164229
    >>164225
    >https://github.com/greensky00/skiplist/blob/master/src/skiplist.cc#L411
    Weniger schlimm als ich erwartet hatte. Nur 1000 Zeilen? Meine Queue hatte schon ~670 (mit Headern und Hazard-Pointer-Implementierung).
  • [l] Felix Tue, 04 Aug 2026 11:50:12 GMT Nr. 164230
    >>164227
    >Hunt geschnitzt.png
    pivot to woodworking


[Zurück]
[c] [meta] [fefe] [erp]