Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

06.05.2016, 06:44

Ich finde die Idee mit den Hashes eigentlich ganz gut. Ich würde vielleicht sogar jede Datei in mehreren Blöcken hashen (1-4k). Die meisten Kollisionen werden wohl ohnehin durch die Größe der Datei ausgeschlossen werden können und von den übrigen die meisten über die ersten paaar gehashten Blöcke. Ich halte es für recht unwahrscheinlich, dass sich erst sehr weit hinten Kollisionen ergeben. Mit Block-Hashes und einem Indizierten File-Lookup-by-Length solltest Du Dir also viel Lese- und Vergleichs-Aufwand sparen können.
Mich würde trotzdem interessieren, ob git diff hilfreich ist in diesem Fall.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

06.05.2016, 12:09

Hmm ihr habt schon gelesen, dass sich der Hash sehr wahrscheinlich immer unterscheiden wird, da in den Dokumenten immer die Metainformationen unterscheiden? Sprich man müsste den Block immer erst rausfiltern, wenn ich das richtig verstand.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

13

06.05.2016, 12:27

Mit git diff komme ich nicht viel weiter, ich erhalte Binary files "a/.\\a.pdf" and "b/.\\b.pdf" differ aber keinerlei Angaben inwiefern und inwieweit. Ansonsten wäre das natürlich eine echt schöne Lösung. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

14

06.05.2016, 12:27

Wenn er Glück hat, liegt der Meta-Block an einem festen Offset und man kann ihn einfach vor dem Hashing rausschneiden. Ansonsten den Ansatz von BlueCobold nutzen, also blockweise hashen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

06.05.2016, 12:30

Exactly, die Metadaten muss er ja offenbar sowieso rausfiltern, natürlich muss er das auch für's Hashen tun...

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

16

06.05.2016, 12:31

Hmm ihr habt schon gelesen, dass sich der Hash sehr wahrscheinlich immer unterscheiden wird, da in den Dokumenten immer die Metainformationen unterscheiden? Sprich man müsste den Block immer erst rausfiltern, wenn ich das richtig verstand.

Genau das ist leider das Problem. Ich kann bei dem Chunk-Vorgehen nicht garantieren, dass ich die vollständige Metainformation bekomme. Heißt, in dem einen Block könnte Creation-Date: <Wirrer-Hex vorkommen und in dem nächsten Part der Rest adezimal-String>. Damit wären beide Hashes von beiden Chunks unterschiedlich. Dann müsste man auch bestimmen, inwieweit der Unterschied legal ist. Also Zeichenweise durchgehen und die prozentuale Übereinstimmung der Zeichen ermitteln und dann eine Good-guess Prozent-Zahl als Validen Threshold bestimmen und das dann feintunen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

17

06.05.2016, 12:34

Die Sache ist: Wenn du dich nicht z.B. mit einem prozentualen Vergleich, den du z.B. ab 90% Übereinstimmung bzw. 10% Nichtübereinstimmung abbrechen kannst, zufrieden geben willst, musst rein prinzipiell sowieso die ganze Datei runterladen. Dann kannst du auch einfach die Metadaten rausfiltern und die Datei hashen...

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

18

06.05.2016, 12:37

Ich hätte nur gerne den Umstand vermieden, immer gleich den ganzen Datei-Content zu laden.. ^^ Und eig. wäre es natürlich schön, wenn ich mich darauf verlassen könnte, dass der prozentuale Unterschied nur bei den Meta-Informationen vorkommt. Aber auch dafür muss ich ja die ganze Datei laden, da ich bei dem Chunk-Vorgehen einfach keine Garantie habe, jede Zeile bis zum Ende zu lesen. :hmm:
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

19

06.05.2016, 12:38

Ich hätte nur gerne den Umstand vermieden, immer gleich den ganzen Datei-Content zu laden.. ^^

Eben darum die Sache mit den Hashes. Da musst du jede Datei nur einmal durchlesen, nämlich während du den Hash berechnest und dann nur noch die Hashes vergleichen. Idealerweise würde man den Hash gleich während dem Download der Datei mitberechnen...

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

20

06.05.2016, 12:45

Stimmt, beim Download der Dateien habe ich den Content des Attachement natürlich bereits im Speicher! Also könnte ich einfach damit arbeiten, statt die Datei später erneut zu öffnen. Manchmal sieht man den Wald vor lauter Bäumen nicht. :crazy: Dann muss ich diesen Vergleichs-Vorgang eben nur vorziehen und es sollte klappen. Bleibt nur dieses eklige Ersetzen der Meta-Informationen, der mir nicht so zusagt. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige