Εισαγωγή, προέλευση και διαμοιρασμός

Εισαγωγή: τι γράφεται, τι δεν γράφεται ποτέ

Η εισαγωγή ενός αγώνα, μιας θέσης ή μιας άλλης βάσης προσθέτει ό,τι λείπει· δεν αντικαθιστά ό,τι υπάρχει ήδη.

  • Μια θέση δεν διπλασιάζεται ποτέ. Είναι η ταυτότητά της — πούλια, κύβος, ζάρια, σκορ — που την αναγνωρίζει, ποτέ το αρχείο από το οποίο προέρχεται: η ίδια θέση που συναντάται σε δύο αγώνες παραμένει μία μόνο γραμμή.

  • Η εισαγωγή μιας βάσης διαβάζει ξανά ό,τι γράφει μια εξαγωγή. Τις θέσεις, με τις αναλύσεις και τα σχόλιά τους, αλλά και τα ματς (μαζί με παρτίδες και κινήσεις), τα τουρνουά με τη Διεύθυνση και τη Συνάντησή τους, τα πρόχειρα μεταγραφής, τα ψευδώνυμα, τις συλλογές, τα μαθήματα και τις τράπουλες Anki: βλ. Συγχώνευση βάσης δεδομένων. Τίποτα δεν αντικαθίσταται: ένα ματς που υπάρχει ήδη δεν αντιγράφεται ξανά, ένα ομώνυμο τουρνουά δέχεται τα ματς χωρίς να αλλάξει η ημερομηνία του γεγονότος (η ημερομηνία τελευταίας τροποποίησής του προχωρά, αφού δέχεται νέα ματς), ένα τουρνουά που έχει ήδη τη Διεύθυνσή του την κρατά και μένει εκτός της εισαγόμενης Συνάντησης, ένα ματς που έχει ήδη τοποθετηθεί σε άλλο τουρνουά ή σε άλλη θέση του πίνακα παραμένει εκεί, και ό,τι η βάση είχε ήδη αποφασίσει παραμένει όπως το αποφάσισε. Τα τουρνουά, οι Διευθύνσεις, οι Συναντήσεις, τα πρόχειρα μεταγραφής και τα ψευδώνυμα που δημιουργεί η εισαγωγή κρατούν τις αρχικές τους ημερομηνίες· οι συλλογές, τα μαθήματα και οι τράπουλες Anki που δημιουργούνται δεν τις κρατούν.

  • Μία ανάλυση ανά μηχανισμό. Το eXtreme Gammon, το GNUbg, το BGBlitz και ο ενσωματωμένος αξιολογητής συνυπάρχουν πάνω στην ίδια θέση, και ο πίνακας Ανάλυσης δείχνει την προέλευση της καθεμιάς. Η εισαγωγή της μιας δεν σβήνει την άλλη.

  • Μια εισαγμένη ανάλυση δεν υπολογίζεται ποτέ ξανά. Το blunderDB την αποθηκεύει ως έχει, με την ετικέτα επιπέδου της («3-ply», «XG Roller++», «Book»), τα equity, τα σφάλματα, τις πιθανότητές της και την τύχη της ζαριάς. Ο κανόνας είναι «μια αξιολόγηση συμπληρώνει μόνο ένα κενό»: η αυτόματη ανάλυση μετά την εισαγωγή επισκέπτεται μόνο τις θέσεις χωρίς καμία ανάλυση, και η επανανάλυση των παρωχημένων αναλύσεων gammonNet αφήνει άθικτη κάθε θέση που φέρει εισαγμένη ανάλυση (βλ. Ρυθμίσεις).

  • Η επανεισαγωγή ενός ήδη αποθηκευμένου ματς φέρνει μόνο ό,τι είναι βαθύτερο. Το ματς αναγνωρίζεται από το παιχνίδι του (παίκτες, μήκος, ζάρια, κινήσεις, κύβος), όχι από την ανάλυσή του: κανένα ματς, παιχνίδι ή κίνηση δεν ξαναγράφεται. Οι σημάνσεις του αρχικού λογισμικού προστίθενται, και μια ανάλυση βαθύτερη από την αποθηκευμένη την αντικαθιστά, θέση προς θέση — μια έκδοση Roller++ του ίδιου ματς αντικαθιστά την έκδοση 3-ply, όποια κι αν είναι η σειρά εισαγωγής· σε ίσο ή μικρότερο βάθος, η αποθηκευμένη ανάλυση μένει. Η επανεισαγωγή του ίδιου αρχείου επομένως δεν ξαναγράφει τίποτα. Η αναφορά εισαγωγής ξεχωρίζει τα διπλότυπα που δεν έφεραν τίποτα από εκείνα που εμβάθυναν αναλύσεις. Στη γραμμή εντολών, το --skip-duplicates παραλείπει ένα διπλότυπο χωρίς να κρατήσει τίποτα πέρα από τις σημάνσεις. Ένα ματς που διακόπηκε και αργότερα ολοκληρώθηκε (περισσότερα παιχνίδια) δεν είναι το ίδιο ματς: εισάγεται ως δεύτερο ματς.

  • Μια μη αναγνώσιμη ανάλυση δεν εμποδίζει την εισαγωγή του αγώνα. Μια απόφαση της οποίας η ανάλυση περιέχει τιμή που δεν είναι πεπερασμένος αριθμός (NaN ή άπειρο, όπως περιέχουν ορισμένα αρχεία XG) εισάγεται χωρίς αυτή την ανάλυση· ο υπόλοιπος αγώνας εισάγεται κανονικά και η αναφορά εισαγωγής μετρά τις αποφάσεις που αφορά.

  • Ένας αγώνας που υπάρχει ήδη με άλλα ονόματα επισημαίνεται, δεν συγχωνεύεται ποτέ. Τα δύο αποτυπώματα αγώνα περιέχουν τα ονόματα των παικτών: το «Martin A.» και το «Alice Martin» δίνουν δύο αγώνες. Η εισαγωγή συγκρίνει επίσης τα ζάρια (μήκος, αρχικό σκορ, ζάρια κάθε παρτίδας) και επισημαίνει, κάτω από τη γραμμή του αρχείου και στην αναφορά, τον αγώνα που υπάρχει ήδη στη βάση με άλλα ονόματα και έχει τα ίδια ζάρια. Το blunderdb repair --duplicates απαριθμεί αυτά τα ζεύγη σε υπάρχουσα βάση, καθώς και τους κομμένους αγώνες και τη μακρύτερη εκδοχή τους.

  • Ένα όνομα γνωστό με άλλη γραφή καταγράφεται με το κανονικό του όνομα. Ένα ψευδώνυμο λέει ότι το «Martin A.» είναι άλλη γραφή του «Alice Martin» (ή ότι ένα όνομα διοργάνωσης είναι άλλη γραφή ενός άλλου). Κατά την εισαγωγή, τα ονόματα των παικτών και της διοργάνωσης αντικαθίστανται από το κανονικό τους όνομα, και ο αγώνας τοποθετείται στο τουρνουά της κανονικής διοργάνωσης. Τα αποτυπώματα του αγώνα κρατούν τα ονόματα του αρχείου: ένα αρχείο που εισήχθη πριν υπάρξει το ψευδώνυμό του αναγνωρίζεται λοιπόν πάντα. Ένας αγώνας με ζάρια ίδια με αυτά ενός αγώνα της βάσης και με ονόματα που διαφέρουν μόνο κατά γνωστά ψευδώνυμα δεν είναι δεύτερος αγώνας: οι αναλύσεις του εμπλουτίζουν αυτόν που είναι αποθηκευμένος.

Τα ψευδώνυμα διαχειρίζονται στην καρτέλα Σώμα αγώνων των ρυθμίσεων: επιλέξτε Παίκτες ή Διοργανώσεις, πληκτρολογήστε το ψευδώνυμο και το κανονικό όνομα ή αφαιρέστε ένα ψευδώνυμο από τη λίστα. Το Πρόταση παραθέτει τα ονόματα που διαφέρουν μόνο σε πεζά/κεφαλαία, τόνους, στίξη ή σειρά λέξεων· τίποτα δεν εφαρμόζεται χωρίς κλικ στο Εφαρμογή. Η ίδια καρτέλα περιέχει το πλαίσιο Παράλειψη διπλοτύπων κατά την εισαγωγή (το αντίστοιχο του --skip-duplicates, για τη συνεδρία) και την αναζήτηση των πιθανών διπλοτύπων μιας υπάρχουσας βάσης, αυτή του blunderdb repair --duplicates: κάθε ζεύγος δίνεται με τους αριθμούς αγώνων του, τίποτα δεν συγχωνεύεται. Κάτω από ένα ζεύγος με τα ίδια ζάρια, το Δημιουργία αυτών των ψευδωνύμων καταχωρίζει με ένα κλικ τα ψευδώνυμα παικτών που θα έκαναν τους δύο αγώνες να ονομάζουν τους ίδιους παίκτες, με τη γραφή του πιο πρόσφατου αγώνα να γίνεται το ψευδώνυμο: μία μόνο πρόταση όταν ένα όνομα είναι κοινό και στους δύο, αλλιώς δύο — θέση προς θέση, μετά χιαστί — από τις οποίες επιλέγεται αυτή που λέει ποιος είναι ποιος. Στη γραμμή εντολών: blunderdb players alias και blunderdb events alias.

  • Ένας φάκελος εισάγεται παράλληλα. Τα αρχεία διαβάζονται σε πολλούς πυρήνες ταυτόχρονα και γράφονται κατά ομάδες, πάντα με τη σειρά του φακέλου: οι αριθμοί των αγώνων δεν εξαρτώνται από το μηχάνημα. Ένα αρχείο πανομοιότυπο, byte προς byte, με αρχείο που έχει ήδη διαβαστεί από τον ίδιο φάκελο δεν διαβάζεται ξανά: μετράει ως διπλότυπο. Η ακύρωση σταματά την εισαγωγή στην τρέχουσα ομάδα· ό,τι είχε ήδη γραφτεί παραμένει.

  • Η πρόοδος μετριέται σε θέσεις ανά δευτερόλεπτο. Το παράθυρο εισαγωγής δείχνει το ποσοστό που έχει διαβαστεί, τον ρυθμό, τον εκτιμώμενο χρόνο που απομένει και τις τρέχουσες μετρήσεις (εισηγμένα, διπλότυπα, με σφάλμα). Η Ελαχιστοποίηση το τοποθετεί στη γραμμή κατάστασης, από όπου ένα σήμα το ανοίγει ξανά: η εισαγωγή συνεχίζεται ενώ εργάζεστε, και το παράθυρο επιστρέφει μόνο του με την αναφορά στο τέλος. Τα πρώτα εκατό σφάλματα παρατίθενται· τα υπόλοιπα μετρώνται, και το αρχείο καταγραφής της εφαρμογής τα κατονομάζει όλα. Στη γραμμή εντολών, το blunderdb import --type batch εμφανίζει την ίδια πρόοδο στην έξοδο σφαλμάτων, και το --format json την επιστρέφει στο τελικό αντικείμενο (progress).

  • Κάθε αρχείο μιας εισαγωγής καταγράφεται, και μια διακοπείσα εισαγωγή μπορεί να συνεχιστεί. Για κάθε αρχείο, το ημερολόγιο της παρτίδας κρατά τη διαδρομή, το μέγεθος, την ημερομηνία τροποποίησης, το αποτύπωμα SHA-256 και το αποτέλεσμα: νέος αγώνας (με τον αριθμό του), διπλότυπο (με τον αγώνα που το καλύπτει), εμπλουτισμένος αγώνας ή σφάλμα (με το μήνυμα). Μια ακυρωμένη ή διακοπείσα εισαγωγή συνεχίζεται χωρίς να επαναληφθεί ό,τι έχει ήδη αποφασιστεί: ένα αρχείο με την ίδια διαδρομή, το ίδιο μέγεθος και την ίδια ημερομηνία παραλείπεται χωρίς να διαβαστεί· ένα αρχείο με το ίδιο περιεχόμενο διαβάζεται αλλά δεν αναλύεται· ένα αρχείο με σφάλμα επαναδοκιμάζεται. Στην εφαρμογή, το παράθυρο λήξης της εισαγωγής παραθέτει το ημερολόγιο (ένα αρχείο ανά γραμμή, με το αποτέλεσμά του και το μήνυμα ενός σφάλματος· ένα αρχείο που επαναδοκιμάστηκε δείχνει την τελευταία του έκβαση), και μια γραμμή που έδωσε αγώνα τον ανοίγει. Μια ακυρωμένη εισαγωγή αφήνει το παράθυρο ανοιχτό με το κουμπί Συνέχεια. Στη γραμμή εντολών, το blunderdb import --type batch --dir <φάκελος> --resume <παρτίδα> συνεχίζει την παρτίδα της οποίας ο αριθμός εμφανίστηκε στην αρχή της εισαγωγής, και το --format json επιστρέφει το ημερολόγιο στο τελικό αντικείμενο (journal). Ο διακομιστής δέχεται το resume στο αίτημα του imports.batch και επιστρέφει το ημερολόγιο μέσω του imports.files. Το ημερολόγιο είναι δεδομένο της εισαγωγής: το άνοιγμα ή η ανάγνωση μιας βάσης δεν γράφει τίποτα σε αυτό.

  • Μια εισαγωγή που διακόπηκε από τον τερματισμό της εφαρμογής συνεχίζεται από το παράθυρο. Η εντολή :resume απαριθμεί τις εισαγωγές που τίποτα δεν ολοκλήρωσε· επιλέγετε αυτήν που θα συνεχίσετε και υποδεικνύετε ξανά τον φάκελο ή τα αρχεία, όπως το --dir στη γραμμή εντολών. Το ημερολόγιο της δέσμης αποφασίζει τι δεν διαβάζεται ξανά.

  • Ένας μεγάλος φάκελος εισάγεται σε μαζική λειτουργία. Από 200 αρχεία και πάνω, το blunderDB γράφει με μεγαλύτερη κρυφή μνήμη και λιγότερα σημεία ελέγχου. Αν η βάση δεν περιέχει ακόμη καμία θέση, πηγαίνει πιο μακριά: τα ευρετήρια αναζήτησης ξαναχτίζονται μόνο στο τέλος και οι εγγραφές δεν συγχρονίζονται πλέον στον δίσκο. Μια διακοπή ρεύματος κατά τη διάρκεια μιας τέτοιας εισαγωγής μπορεί τότε να καταστρέψει τη βάση: πρέπει να δημιουργηθεί ξανά και να ξαναγίνει η εισαγωγή. Ένα απότομο σταμάτημα του προγράμματος, αντίθετα, αφήνει μόνο ευρετήρια που λείπουν, τα οποία ξαναχτίζει το επόμενο άνοιγμα (το αρχείο καταγραφής το αναφέρει).

  • Τι δεν γράφει ποτέ το blunderDB: μια τύχη που υπολογίστηκε ξανά — διαβάζεται από το αρχείο προέλευσης ή μένει άγνωστη — και ένα rollout που δεν εκτέλεσε το ίδιο: τα δεδομένα rollout ενός αρχείου .xg δεν ανοίγονται. Αποθηκεύονται μόνο τα rollout που παράγει το blunderDB (Rollouts), δίπλα στην ανάλυση.

Πίνακας Μεταδεδομένων

Το πάνελ Μεταδεδομένα (CTRL-M) εμφανίζει τις γενικές πληροφορίες της τρέχουσας βάσης δεδομένων: Χρήστης, ημερομηνία δημιουργίας (Δημιουργήθηκε), Έκδοση του σχήματος και Περιγραφή. Ο χρήστης, η ημερομηνία και η περιγραφή τροποποιούνται επιτόπου και αποθηκεύονται όταν φεύγετε από το πεδίο· η έκδοση είναι μόνο για ανάγνωση. Προσβάσιμο και μέσω της εντολής meta.

Εμφανίζει επίσης, όταν υπάρχει, την προέλευση της βάσης — βλ. Διανομή μιας βάσης: προέλευση και κωδικός πρόσβασης. Μια συνηθισμένη βάση δεν εμφανίζει αυτή την ενότητα.

Διανομή μιας βάσης: προέλευση και κωδικός πρόσβασης

Ένας δάσκαλος που διανέμει μια βάση θέσεων διαθέτει δύο μηχανισμούς, ανεξάρτητους μεταξύ τους, και οι δύο προαιρετικοί και επιλεγόμενοι κατά την εξαγωγή: να σημάνει το αρχείο με την προέλευσή του και να το προστατεύσει με κωδικό πρόσβασης.

Σημείωση

Κανένας από τους δύο δεν παρακολουθεί την τύχη του αρχείου. Το blunderDB δεν καταγράφει τίποτε από την πλευρά εκείνου που λαμβάνει τη βάση: το άνοιγμα μιας σημασμένης βάσης είναι ακριβώς σαν το άνοιγμα οποιασδήποτε άλλης, και πουθενά δεν καταγράφεται ποιος την άνοιξε, πότε, ούτε από πού προέρχεται το περιεχόμενό της.

Σήμανση μιας βάσης με την προέλευσή της

Το παράθυρο εξαγωγής χωράει σε μία μόνο οθόνη: μια λωρίδα κεφαλίδας — ο αριθμός των εξαγόμενων θέσεων, Ακύρωση και Εξαγωγή… — και μετά ένα πλέγμα, με μία γραμμή ανά οικογένεια και το πλήθος της. Αυτά τα πλήθη είναι ακριβή: διαβάζονται από τον διακομιστή σε κάθε αλλαγή πλαισίου, στην ίδια επιλογή με την εξαγωγή, και είναι όσα θα περιέχει το αρχείο. Το αρχείο επιλέγεται τελευταίο, μετά το Εξαγωγή…· αν κλείσετε αυτή την επιλογή χωρίς όνομα, επιστρέφετε στο πλέγμα. Στη συνέχεια εμφανίζεται μια ένδειξη προόδου για όσο διαρκεί η εγγραφή, το παράθυρο κλείνει από μόνο του και το αποτέλεσμα εμφανίζεται στη γραμμή κατάστασης.

Εννέα σημεία αξίζουν προσοχή:

  • Το εύρος: από μια λίστα — μια αναζήτηση, μια συλλογή —, η γραμμή Εύρος επιλέγει ανάμεσα στην Τρέχουσα λίστα και στην Ολόκληρη η βιβλιοθήκη. Η τρέχουσα λίστα εξάγει τις θέσεις της, και η γραμμή Αγώνες προτείνει μόνο εκείνους στους οποίους παίχτηκαν αυτές οι θέσεις· κάθε αγώνας που είναι τσεκαρισμένος φεύγει με όλες τις θέσεις του. Από τη βιβλιοθήκη, το εύρος είναι η βιβλιοθήκη.

  • Ολόκληρη η βιβλιοθήκη είναι η εξαγωγή του διακομιστή και της export --type database: όλες οι οικογένειες είναι εξαρχής τσεκαρισμένες, οι τράπουλες Anki με το ιστορικό επανάληψής τους, και οι μεταγραφές που βρίσκονται σε εξέλιξη φεύγουν μαζί με τα υπόλοιπα.

  • Ο συγχρονισμός: με το Ολόκληρη η βιβλιοθήκη, η γραμμή Συγχρονισμός προτείνει Μόνο ό,τι είναι νέο από την τελευταία εξαγωγή σε αυτόν τον φάκελο και το κουμπί Επιλογή φακέλου…. Το αρχείο δεν ζητείται πλέον: γράφεται σε αυτόν τον φάκελο με νέο όνομα, και τα σύνολα είναι εκείνα του νέου υλικού (βλ. Συγχρονισμός δύο υπολογιστών).

  • Ένας αγώνας φεύγει με το πρόχειρο μεταγραφής του, κάτω από το πλαίσιο Μεταγραφές της γραμμής Αγώνες, εξαρχής τσεκαρισμένο· οι αγώνες που μεταφέρει επίσης ένα τουρνουά. Ένα πρόχειρο που δεν έχει ακόμη παραγάγει αγώνα φεύγει μόνο με ολόκληρη τη βιβλιοθήκη. Ένας αγώνας ή μια μεταγραφή συνδεδεμένα με τοπικό βίντεο μεταφέρουν μόνο το όνομα του αρχείου, χωρίς τον φάκελό του, που ο παραλήπτης επανατοποθετεί στο δικό του αντίγραφο· ένας σύνδεσμος ιστού φεύγει ως έχει. Το αρχείο από το οποίο εισήχθη ένας αγώνας φεύγει επίσης μόνο με το όνομά του.

  • Ένας αγώνας φεύγει με τα ψευδώνυμα των παικτών και του γεγονότος του: το πλαίσιο Ψευδώνυμα, εξαρχής τσεκαρισμένο, κάνει τη συγχώνευση παικτών να ακολουθεί, και ο παραλήπτης διαβάζει έναν συγχωνευμένο παίκτη ως έναν. Ένα ψευδώνυμο που δεν ονομάζει κανέναν από τους εξαγόμενους αγώνες μένει σε εσάς.

  • Μια συλλογή της οποίας οι θέσεις δεν βρίσκονται όλες στη λίστα φτάνει κομμένη. Η λίστα των συλλογών εμφανίζει, για καθεμία, το μέρος που καλύπτεται («12/40») και το επισημαίνει με κόκκινο όταν είναι μερικό. Το πλαίσιο + οι θέσεις τους μεταφέρει τις θέσεις των συλλογών που είναι τσεκαρισμένες: αυτές μιας λίστας φτιαγμένης με το χέρι, αυτές που επιλέγει το ερώτημα μιας ζωντανής συλλογής. Μια ζωντανή συλλογή της οποίας το ερώτημα αναφέρει γραμμές που το αρχείο δεν περιέχει φεύγει παγωμένη: φτάνει ως η λίστα που επιλέγει σήμερα το ερώτημά της, και η λίστα την επισημαίνει με κόκκινο «παγωμένη» μαζί με μια σημείωση· αν τσεκάρετε + οι θέσεις τους, μένει ζωντανή.

  • Ένα τουρνουά φεύγει πάντα με τους αγώνες του: χωρίς αυτούς, ο σύνδεσμος τουρνουά–αγώνα δεν υπάρχει και το τουρνουά θα έφτανε άδειο. Η επιλογή ενός τουρνουά παίρνει μαζί και τους αγώνες του, ακόμη κι αν το πλαίσιο των αγώνων είναι ξεμαρκαρισμένο ή περιορισμένο σε άλλους. Φεύγει επίσης με τη Διεύθυνσή του — ημερολόγιο, ζεύγη, τραπέζια και σύνδεση των εξαγόμενων αγώνων — και η Συνάντησή του φεύγει μόλις φύγει ένα από τα τουρνουά της· ο φάκελος εξόδου της Διεύθυνσης μένει σε εσάς. Η Διεύθυνση βρίσκεται ανοίγοντας το αρχείο ή εισάγοντάς το σε άλλη βάση.

  • Μια τράπουλα Anki φεύγει με τις θέσεις της, ως καινούργιο αντίγραφο μελέτης. Το πλαίσιο με το ιστορικό μου μεταφέρει επιπλέον την κατάσταση κάθε κάρτας και το αρχείο καταγραφής των επαναλήψεών της: ένα αντίγραφο ασφαλείας, ή οι τράπουλές σας μεταφερμένες σε άλλο μηχάνημα. Είναι ξετσεκαρισμένο για μια λίστα, τσεκαρισμένο για τη βιβλιοθήκη.

  • Τα αποθηκευμένα φίλτρα δεν εξάγουν περιεχόμενο αλλά τις δικές σας αναζητήσεις, άχρηστες στη βάση κάποιου άλλου· το πλαίσιο είναι ξετσεκαρισμένο για μια λίστα. Ένα φίλτρο που υποδεικνύει μια θέση, έναν αγώνα ή ένα τουρνουά με τον αριθμό του αριθμείται εκ νέου για το αρχείο· αν υποδεικνύει κάτι που δεν φεύγει, μένει σε εσάς.

Οι συλλογές, τα μαθήματα, οι μεταγραφές, οι τράπουλες Anki, τα ψευδώνυμα και τα τουρνουά φεύγουν με τις ημερομηνίες δημιουργίας και προσθήκης που φέρουν σε εσάς, όχι με την ημερομηνία της εξαγωγής.

Τα πεδία Χρήστης, Περιγραφή και Ημερομηνία δημιουργίας περιγράφουν το παραγόμενο αρχείο· είναι προσυμπληρωμένα από τη βάση προέλευσης.

Η επιλογή Υδατογράφημα εμφανίζει δύο πεδία:

  • Προέλευση — τι είναι αυτό το αρχείο και από πού προέρχεται, με δικά σας λόγια: «Μάθημα του Jean Dupont — 12 Μαρτίου 2026». Το πεδίο αυτό είναι υποχρεωτικό: όσο είναι κενό, περιβάλλεται από κόκκινο περίγραμμα και το κουμπί εξαγωγής παραμένει ανενεργό.

  • Σημείωση, προαιρετική — όροι χρήσης, διεύθυνση επικοινωνίας, ένα αίτημα να μην αναδιανεμηθεί.

Η σήμανση υπογράφεται με την ταυτότητα εκδότη σας. Είναι επομένως αναλλοίωτη και μη πλαστογραφήσιμη: κανείς δεν μπορεί να την τροποποιήσει ούτε να κατασκευάσει μία στο όνομά σας. Δεν είναι όμως ανεξίτηλη — το αρχείο που διανέμεται είναι μια συνηθισμένη βάση SQLite και το blunderDB είναι ελεύθερο λογισμικό. Δεν εμποδίζει τίποτε: λέει από πού προέρχεται το αρχείο.

Τα σχόλια που έχετε γράψει υπογράφονται με την ίδια ταυτότητα: ο παραλήπτης βλέπει ότι προέρχονται από εσάς και αν αλλοιώθηκαν στην πορεία (βλ. Πίνακας Σχολίων). Ένα σχόλιο που φέρει ήδη την υπογραφή άλλου εκδότη την κρατά. Η γραμμή κατάστασης αναφέρει, στο τέλος της εξαγωγής, πόσα από τα σχόλιά σας υπογράφηκαν· μια εξαγωγή χωρίς σήμανση δεν υπογράφει κανένα.

Ταυτότητα εκδότη

Οι σημάνσεις υπογράφονται με την ταυτότητα εκδότη σας, η οποία δημιουργείται από μόνη της την πρώτη φορά που σημαίνετε ένα αρχείο· δεν χρειάζεται καμία ρύθμιση. Ανήκει σε ένα πρόσωπο και όχι σε μια βάση: όλα σας τα αρχεία φέρουν το ίδιο δημόσιο αποτύπωμα, της μορφής A3F1-9C24-7B05-E1D8.

Μπορείτε να γνωστοποιήσετε αυτό το αποτύπωμα στους παραλήπτες σας ώστε να επαληθεύουν ότι ένα αρχείο προέρχεται πράγματι από εσάς. Η ταυτότητα μεταφέρεται από τον έναν υπολογιστή στον άλλο με ένα μόνο αρχείο (επέκταση .bdbid), ενδεχομένως προστατευμένο με συνθηματική φράση. Το αρχείο αυτό επιτρέπει την υπογραφή στο όνομά σας: μην το μοιράζεστε.

Στις ρυθμίσεις (εικονίδιο γραναζιού της γραμμής εργαλείων), η καρτέλα Ταυτότητα εκδότη εμφανίζει το όνομα και το αποτύπωμά σας και προσφέρει Αποθήκευση ταυτότητας…, Φόρτωση ταυτότητας… και Αναδημιουργία….

Προειδοποίηση

Η αναδημιουργία δεν ανακαλεί τίποτε. Μια σήμανση ενσωματώνει το δημόσιο κλειδί που την υπέγραψε: επαληθεύεται επομένως για πάντα, από μόνη της. Αν το αρχείο ταυτότητάς σας διέρρευσε, όποιος το κατέχει θα μπορεί να συνεχίσει να υπογράφει με το παλιό σας αποτύπωμα, και οι σημάνσεις αυτές θα παραμένουν έγκυρες.

Αυτό που σας προστατεύει μετά από μια διαρροή δεν είναι λογισμικό: είναι να δημοσιοποιήσετε το νέο σας αποτύπωμα και να αποκηρύξετε το παλιό απέναντι στους παραλήπτες σας.

Η αναδημιουργία αντικαθιστά το τρέχον κλειδί· το blunderDB προτείνει να το αποθηκεύσετε πριν το αντικαταστήσει.

Προστασία μιας βάσης με κωδικό πρόσβασης

Ο κωδικός πληκτρολογείται κρυμμένος, εδώ όπως και κατά το άνοιγμα ενός προστατευμένου αρχείου· το εικονίδιο σε σχήμα ματιού τον εμφανίζει όσο το κρατάτε πατημένο και τον κρύβει ξανά μόλις το αφήσετε.

Η επιλογή Κωδικός παράγει αρχείο με επέκταση .dbx — ακόμη κι αν το όνομα που επιλέχθηκε στο παράθυρο αποθήκευσης τελειώνει σε .db. Για να το ανοίξετε, χρησιμοποιήστε το συνηθισμένο άνοιγμα βάσης: το παράθυρο επιλογής δέχεται εξίσου .db και .dbx. Το blunderDB ζητά τότε τον κωδικό και εγκαθιστά δίπλα μια συνηθισμένη βάση· μετά δεν ζητείται τίποτε άλλο.

Το παράθυρο προτείνει τη διαγραφή του προστατευμένου αρχείου μετά το άνοιγμα: διαφορετικά διατηρείτε το ίδιο περιεχόμενο με δύο ονόματα. Το πλαίσιο δεν είναι επιλεγμένο εξ ορισμού — το προστατευμένο αρχείο παραμένει δικό σας αν σκοπεύετε να το διαβιβάσετε — και η διαγραφή γίνεται μόνο μετά από επιτυχές άνοιγμα.

Προειδοποίηση

Ο κωδικός προστατεύει τη μεταφορά του αρχείου, όχι τη βάση. Εμποδίζει έναν τρίτο να ανοίξει ένα αρχείο ξεχασμένο σε έναν φάκελο λήψεων ή ένα συνημμένο που προωθήθηκε κατά λάθος. Δεν προστατεύει από εκείνον στον οποίο δώσατε τον κωδικό.

Ο κωδικός επαληθεύεται σε κάθε άνοιγμα, ακόμη και όταν το αρχείο έχει ήδη ανοιχτεί προηγουμένως σε αυτόν τον υπολογιστή.

Τεχνικά, η βάση κρυπτογραφείται με AES-256 σε λειτουργία GCM, με κλειδί που παράγεται από τον κωδικό μέσω Argon2id (64 MiB μνήμης, 3 περάσματα, 4 νήματα) και τυχαίο αλάτι ξεχωριστό για κάθε αρχείο. Η λειτουργία GCM πιστοποιεί το σύνολο: ένας λανθασμένος κωδικός εντοπίζεται ως τέτοιος, όπως και κάθε αλλοίωση του κρυπτογραφημένου αρχείου — ποτέ δεν καταλήγει κανείς σιωπηλά με κατεστραμμένη βάση.

Η κεφαλίδα του προστατευμένου αρχείου παραμένει μη κρυπτογραφημένη: η προέλευσή του παραμένει αναγνώσιμη χωρίς τον κωδικό.

Ανάγνωση της προέλευσης ενός αρχείου

Στην εφαρμογή, ανοίξτε το αρχείο και εμφανίστε τον πίνακα Μεταδεδομένα (εντολή meta). Στην κορυφή του πίνακα εμφανίζεται μια ενότητα Προέλευση, μόνο για ανάγνωση, που δείχνει τι καταχωρήθηκε, από ποιον, πότε, και την κατάσταση της υπογραφής:

  • «✓ σημάνθηκε από εσάς»: το αρχείο φέρει τη δική σας σήμανση, ανέπαφη·

  • «✓ η υπογραφή επαληθεύτηκε»: η σήμανση είναι ανέπαφη και προέρχεται από άλλο κλειδί — συγκρίνετε το αποτύπωμά της με εκείνο που σας γνωστοποίησε ο δημιουργός·

  • «⚠ μη έγκυρη υπογραφή»: το έγγραφο τροποποιήθηκε ή πλαστογραφήθηκε.

Η ενότητα αυτή δεν εμφανίζεται σε μια συνηθισμένη βάση.

Από τη γραμμή εντολών, το blunderdb info --db αρχείο.db εμφανίζει την προέλευση και την κατάσταση της υπογραφής, χωρίς ποτέ να γράφει στο αρχείο. Η εντολή λειτουργεί και σε προστατευμένο αρχείο, χωρίς τον κωδικό. Βλ. CLI_USAGE.md για τις επιλογές --watermark και --password της export, καθώς και για τις identity και open.

Δημοσίευση μιας βάσης για άλλους

Μια σημασμένη βάση διανέμεται όπως οποιοδήποτε αρχείο — ηλεκτρονικό ταχυδρομείο, προσωπικός ιστότοπος, στικάκι USB. Το blunderDB δεν παρέχει καμία υπηρεσία: ούτε αποθετήριο, ούτε φιλοξενούμενο κατάλογο, ούτε λογαριασμό. Είναι άμεση συνέπεια της σχεδίασής του: τίποτα δεν καταγράφεται ποτέ από την πλευρά εκείνου που λαμβάνει ένα αρχείο, και δεν θα υπήρχε λοιπόν τίποτα να αναφερθεί σε μια υπηρεσία, ακόμη κι αν υπήρχε.

Αυτό που κάνει μια δημοσιευμένη βάση χρήσιμη σε κάποιον άλλο περιορίζεται σε τέσσερα πεδία, όλα ήδη παρόντα:

  • Χρήστης — ποιος τη συγκρότησε, με το όνομα που θέλετε να αναφέρεται.

  • Περιγραφή — τι περιέχει η βάση, σε μία φράση που χωράει σε μια λίστα: «240 αποφάσεις κύβου στο σκορ, σχολιασμένες, ενδιάμεσο επίπεδο».

  • Προέλευση (του υδατογραφήματος) — τι είναι αυτό το αρχείο και για ποιον παρήχθη. Είναι το πρώτο που διαβάζει ο παραλήπτης στον πίνακα Μεταδεδομένα.

  • Αποτύπωμα εκδότη — δημοσιεύστε το δίπλα στο αρχείο, όχι μέσα του: συγκρίνοντάς το ο παραλήπτης επαληθεύει ότι το αρχείο προέρχεται από εσάς και όχι από κάποιον που πήρε το όνομά σας.

Μια βάση που δημοσιεύεται χωρίς υδατογράφημα παραμένει απολύτως χρήσιμη· είναι απλώς ανώνυμη, και ο πίνακας Μεταδεδομένα δεν εμφανίζει τότε καμία ενότητα Προέλευση.

Για να γίνει γνωστή μια βάση, η κατηγορία Show and tell των συζητήσεων του αποθετηρίου χρησιμεύει ως ευρετήριο: είναι μια λίστα που τηρούν όσοι δημοσιεύουν, όχι μια υπηρεσία που παρέχει το blunderDB. Η ανακοίνωση μιας βάσης εκεί απαιτεί τον σύνδεσμο, τα τέσσερα παραπάνω πεδία και το αποτύπωμα.