Προς το περιεχόμενο

Πως σετάρουμε το high nibble ενός byte;


migf1

Προτεινόμενες αναρτήσεις

πω πω αγάπες, ζηλεύω....

 

ρε defacer/migf/directx, κοροϊδεύετε τον εαυτό σας? σας παρακολουθώ και βλέπω συνέχεια συμφωνείτε μεταξύ σας, γράφει κάτι ο ένας πετάγονται άλλοι 2-3 και γράφουν "συμφωνώ, έτσι είναι"

 

ηρεμήστε ωρε παλικάρια, loby σας το κάνατε εδώ :P

 

 

Πόσο κακός είμαι? ΑΡΡΡΡ

 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 106
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

πω πω αγάπες, ζηλεύω....

 

ρε defacer/migf/directx, κοροϊδεύετε τον εαυτό σας? σας παρακολουθώ και βλέπω συνέχεια συμφωνείτε μεταξύ σας, γράφει κάτι ο ένας πετάγονται άλλοι 2-3 και γράφουν "συμφωνώ, έτσι είναι"

 

ηρεμήστε ωρε παλικάρια, loby σας το κάνατε εδώ :P

 

 

Πόσο κακός είμαι? ΑΡΡΡΡ

 

 

Δεν εχω προβλημα με τον defacer γέλιο έχει :P

 

Σε μερικα θεματα ο καθενας εχει την αποψη του.

 

Οταν εισαι πραγματικος χάκερ - καλος προγραμματιστης μπορεις να μαθεις μια γλωσσα προγραμματισμου

σε 1 μηνα το πολυ. (Εφοσον εχεις καλο background σε σοβαροτερες και δυσκολοτερες) αυτο πιστευω.

 

Ο migf1 σας κοροιδευει αλλα με την καλη εννοια :P δεν εχει θεμα να μαθει την οποιαδηποτε γλωσσα

οπως και άλλοι καλοι του τομεα απλα δεν θελει ο ανθρωπος.... εχει μεινει σε ενα μοτιβο που ειναι και το αγαπημενο του.

Και αν θες οντως να δεις..... πες του να σου δωσει το σαιτ του που το χει φτιαξει μονος του !!!!! Την αλλη φορα ειχε μπει

σε φορουμ αλλο και τους εριξε μια ρυθμιση και τους άφησε χάνους !!!!

 

Απλα δεν θελει να παει αλλου.... θεμιτοτατο αλλα δεν μας παραπλανα :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Οταν εισαι πραγματικος χάκερ - καλος προγραμματιστης μπορεις να μαθεις μια γλωσσα προγραμματισμου

σε 1 μηνα το πολυ. (Εφοσον εχεις καλο background σε σοβαροτερες και δυσκολοτερες) αυτο πιστευω

 

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

 

parsifal

 

απλά λίγο χαβαλέ κάνουμε, δεν προσβάλουμε κανέναν. δεν χρειάζεται να δώσουν σημασία :P

 

 

In any case we dont want to spam, so this wont continue.

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

Κοιτα δεν μπορεις να γινεις χακερ αν δεν εισαι καλος προγραμματιστης.

Αλλα εσενα σου φαινεται λογικο να εισαι πολυ καλος στην C να την εχεις φαει 2-3 χρονια στην μάπα

και να μην μπορεις να μαθεις την Perl σε λιγοτερο απο 2 μήνες ? :/

 

Αυτο υποστηριζω γιατι πιστευω οτι ειναι εφικτο.

 

p.s Ειμαστε οφφ τοπικ ?

 

p.s2 http://earthlab.uoi....acker-howto-gr/

 

" Για να είσαι ένας πραγματικός hacker,πρέπει να φτάσεις στο σημείο να μπορείς να μάθεις μια καινούρια γλώσσα σε μέρες,συσχετίζοντας το τί υπάρχει στο εγχειρίδιο με αυτά που ήδη ξέρεις. "

 

Αμα περιμενε ενας χακερ φιλε να του παιρνει 10 χρονακια η καθε γλωσσα οπως υποστηριζει ο γνωστης defacer σε αυτα... τοτε θα έφτανε 70 χρονων γερος και ακομη θα έγραφε στα φορουμ με τους πιτσιρικαδες χαχαχα !!!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Κοιτα δεν μπορεις να γινεις χακερ αν δεν εισαι καλος προγραμματιστης.

Αλλα εσενα σου φαινεται λογικο να εισαι πολυ καλος στην C να την εχεις φαει 2-3 χρονια στην μάπα

και να μην μπορεις να μαθεις την Perl σε λιγοτερο απο 2 μήνες ? :/

 

Αυτο υποστηριζω γιατι πιστευω οτι ειναι εφικτο.

 

p.s Ειμαστε οφφ τοπικ ?

 

p.s2 http://earthlab.uoi....acker-howto-gr/

 

" Για να είσαι ένας πραγματικός hacker,πρέπει να φτάσεις στο σημείο να μπορείς να μάθεις μια καινούρια γλώσσα σε μέρες,συσχετίζοντας το τί υπάρχει στο εγχειρίδιο με αυτά που ήδη ξέρεις. "

 

Αμα περιμενε ενας χακερ φιλε να του παιρνει 10 χρονακια η καθε γλωσσα οπως υποστηριζει ο γνωστης defacer σε αυτα... τοτε θα έφτανε 70 χρονων γερος και ακομη θα έγραφε στα φορουμ με τους πιτσιρικαδες χαχαχα !!!!

Από το Link που έβαλες για τους hackers

 

 

2. Κανένα πρόβλημα δεν πρέπει να λύνεται δύο φορές.

 

Τα δημιουργικά μυαλά είναι μια πολύτιμη, περιορισμένη πηγή. Δεν πρέπει να σπαταλούνται για να "ξανα-ανακαλύπτουν τον τροχό" όταν υπάρχουν τόσα πολλά διασκεδαστικά καινούρια προβλήματα που περιμένουν.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ενταξει , σωστο ειναι αυτο που γράφει.

 

Μπορεις να πάρεις έναν κώδικα που έχει γραφτεί για ενα προβλημα

που σε απασχολει και να τον μελετήσεις στο χαρτι να δεις τι εξοδο δινει . Αφου εισαι ενταξει με αυτο

Μπορεις να πας ενα βημα παραπερα και να προσθεσεις και δικα σου καινουργια χαρακτηριστικα !!!!

 

Απο αυτη την αποψη ειναι βλακεια να τον ξαναγραψεις απο την αρχη εκτος και αν τον κανεις περισσοτερο αποδοτικο

απο αυτους που βρηκες. Μερικοι ομως θεωρουν πως αν καταπιαστεις με C καταπιανεσαι με θεματα

να ανακαλυπτεις ξανα τον τροχο !!! Σε αυτο εγω δεν συμφωνω.

 

Star_Light,

 

Μπούρδες! αυτά είναι θεωρίες από 16αχρονα,

 

Αυτος που το εχει γραψει δεν ειναι 16χρονος. Ξερεις ποιος ειναι καταρχην ?

Γιατι ειναι θεωριες για 16χρονους? Δεν πρεπει να ξερεις Αγγλικα? Να παιζεις με Unix

και να ξες να προγραμματιζεις για να μπορεσεις να σταθεις καπου σοβαρα.... εισαι δεν εισαι χακερ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

φίλε μου, απλά λέω ότι

 

ΟΚ αν ξέρεις προγραμματισμό σε βοηθάει να κάνεις 1-2 κολπάκια (εσείς πείτε τα hackies, Πχ το Mail-Phone Crawling εγώ δεν το θεωρώ hack) .

 

Πιο πολύ θέλει μυαλό, να ξέρεις πως πρέπει να το κάνεις, τι εμπόδια θα έχεις , πως θα τα ξεπεράσεις...

 

υπάρχουν αρκετά "μικρά" (συνήθως 15-16-17 είναι) που πιστεύουν ότι πρέπει να μάθουν προ για να γίνουν χακερς, είμαι σίγουρος ότι συμφωνείς και εσύ με αυτό.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

φίλε μου, απλά λέω ότι

 

ΟΚ αν ξέρεις προγραμματισμό σε βοηθάει να κάνεις 1-2 κολπάκια (εσείς πείτε τα hackies, Πχ το Mail-Phone Crawling εγώ δεν το θεωρώ hack) .

 

Πιο πολύ θέλει μυαλό, να ξέρεις πως πρέπει να το κάνεις, τι εμπόδια θα έχεις , πως θα τα ξεπεράσεις...

 

υπάρχουν αρκετά "μικρά" (συνήθως 15-16-17 είναι) που πιστεύουν ότι πρέπει να μάθουν προ για να γίνουν χακερς, είμαι σίγουρος ότι συμφωνείς και εσύ με αυτό.

 

Πιο πολυ τιτλος τιμης ειναι μωρε..... για καποιον που οντως κανει ωραια πραγματα . Ηθελα να διαβασω λιγο Kevin Mitnick

για το Social Engineering αλλα δεν εχω χρονο.... :(

Τωρα τα πιτσιρικια που θελουν να σπασουν κανα προφιλ να δουν αν τους απαταει η γκομενα

ειναι για γελια :P

 

Εκτος απο τον προγραμματισμο πρεπει να μελετησει κανεις και αλγοριθμους. Γιατι πρεπει να αποκτησεις και σκεψη για το πως θα πρεπει να σχεδιάζεται κατι σαν λυση οχι μονο πως θα υλοποιησεις μια ηδη γνωστη λύση σε εναν ΗΥ. Εχει να προτεινει κανεις κανενα καλο free book?

 

Ολα θελουν μυαλο παντως οχι μονο ο προγραμματισμος. Αντε καληνυχτα !!!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 4 εβδομάδες αργότερα...

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

 

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

 

Σημ. Είναι όλα απλουστευμένα KAI σε επίπεδο 1st draft (δηλαδή προς το παρόν δεν ασχολούμαι με βελτιστοποιήσεις).

 

Απλουστευμένη γεύση από το βασικό interface...

 

 

>
...
#define MAX_DBFILTERS        5
typedef struct DBaseFilter {
   void    *round;
   void    *extraParams;
   bool    (*cb_round_is_equal)(const void *r1, const void *r2, void *extraParams);
} DBaseFilter;
...

/*********************************************************//**
*
*************************************************************
*/
bool db_reset_filters( DBaseFilter filters[MAX_DBFILTERS] )
{
   if ( !filters ) {
       err_set( ERR_INVPOINTER );
       errMSGBOXF(
           UI_MB_FATAL,
           "*** %s (%s OR %s)",
           err_get_msg(), "round", "cb_round_is_equal"
           );
   }

   // memset(,0,) does not guarantee x-platform NULL
   for (int i=0; i < MAX_DBFILTERS; i++)
       filters[i].round = filters[i].extraParams = filters[i].cb_round_is_equal = NULL;

   return true;
}

/*********************************************************//**
*
*************************************************************
*/
bool db_append_filter(
   DBaseFilter filters[MAX_DBFILTERS],
   void *round,
   void *extraParams,
   bool (*cb_round_is_equal)(const void *r1, const void *r2, void *extraParams)
   )
{
   int i = 0;

   err_set_noerror();

   if ( !filters || !round || !cb_round_is_equal ) {
       err_set( ERR_INVPOINTER );
       errMSGBOXF(
           UI_MB_FATAL,
           "*** %s (%s OR %s OR %s)",
           err_get_msg(), "filters", "round", "cb_round_is_equal"
           );
   }

   // find 1st empty slot in filters[] array
   for (i=0; i < MAX_DBFILTERS; i++)
       if ( !filters[i].round || !filters[i].cb_round_is_equal )
           break;
   if ( MAX_DBFILTERS == i ) {
       errMSGBOXF(
           UI_MB_ERROR,
           "*** %s", "FILTERS[] IS FULL"
           );
       return false;
   }

   filters[i].round = round;
   filters[i].extraParams = extraParams;
   filters[i].cb_round_is_equal = cb_round_is_equal;

   return true;
}

 

 

 

Δηλαδή ένας στατικός πίνακας για να φιλοξενεί τα φίλτρα (που μπορεί προφανώς να αλλάξει σε κάποια δυναμική δομή μελλοντικά) και μερικές βασικές λειτουργίες πάνω του.

 

Εδώ ένα επίσης απλουστευμένο παράδειγμα χρήσης ΕΝΟΣ φίλτρου για δημιουργία νέας ΒΔ που είναι το φιλτράρισμα της βασικής...

 

 

>
...
   DBase *dbFiltered = NULL;
   DBaseFilter filters[MAX_DBFILTERS] = { {NULL} };    // near initialization
   bool success = false;
...
   // prepare db filters
   db_reset_filters( filters );
   success = db_append_filter( filters, round, NULL, &round_is_equal_uptoExactHandHole );
   if ( !success )
       return false;

   // spawn filtered dbase
   dbFiltered = db_spawn_filters( dbase, filters );
   if ( dbFiltered && !db_is_empty(dbFiltered) ) {
       // bla bla
...
   db_cleanup(&dbFiltered);
...

 

 

 

Το φίλτρο στο παραπάνω παράδειγμα είναι η συνάρτηση round_is_equal_uptoExactHandHole() η οποία εφαρμόζεται στη βασική ΒΔ, συγκρινόμενη με κάθε εγγραφή της (round)... το παραθέτω με απλή σειριακή αναζήτηση για να το κρατήσω απλό...

 

Το φίλτρο...

 

 

>
/*********************************************************//**
*
*************************************************************
*/
bool round_is_equal_uptoExactHandHole( const void *round1, const void *round2, void *dummy )
{
   const Round *r1 = (const void *)round1;
   const Round *r2 = (const void *)round2;

   err_set_noerror();

   if ( !r1 || !r2 ) {
       err_set( ERR_INVPOINTER );
       errMSGBOXF(
           UI_MB_FATAL,
           "*** %s (%s OR %s) ",
           err_get_msg(), "r1", "r2"
           );
       return false;
   }

   return    0 == round_compare_gameType(r1, r2)
       && 0 == round_compare_gamePlayers(r1, r2)
       && 0 == round_compare_seat(r1, r2)
       && 0 == round_compare_exact_handHole(r1, r2);
}

 

 

 

Το απλουστευμένο "spawn-άρισμα" (με απλή, σειριακή αναζήτηση) ...

 

 

>
/*********************************************************//**
*
*************************************************************
*/
bool _dbfilters_all_true( const DBaseFilter filters[], const void *round )
// debug friendly version
{
   bool ret = false;

   err_set_noerror();

   if ( !filters || !round) {
       err_set( ERR_INVPOINTER );
       errMSGBOXF(
           UI_MB_FATAL,
           "*** %s (%s OR %s)",
           err_get_msg(), "filters", "round"
           );
       return false;
   }

   for (int i=0; i < MAX_DBFILTERS; i++ ) {
       ret =     filters[i].round
           && filters[i].cb_round_is_equal
           && filters[i].cb_round_is_equal(
                       round,
                       filters[i].round,
                       filters[i].extraParams
                       );
       if (ret)
           break;
   }

   return ret;
}

/*********************************************************//**
*
*************************************************************
*/
DBase *db_spawn_filters( const DBase *dbMain, const DBaseFilter filters[MAX_DBFILTERS] )
{
   DBase *dbNew = NULL;
   int i = 0, nFilters = 0;

   err_set_noerror();

   if ( !filters ) {
       err_set( ERR_INVPOINTER );
       errMSGBOXF( UI_MB_FATAL, "*** %s (%s)", err_get_msg(), "filters" );
       return NULL;
   }
   if ( !db_has_data(dbMain) ) {
       errMSGBOXF( UI_MB_FATAL, "*** %s", err_get_msg() );
       return NULL;
   }
   for (i=0; i < MAX_DBFILTERS; i++)
       if ( !filters[i].round || !filters[i].cb_round_is_equal )
           break;
   nFilters = i < MAX_DBFILTERS ? i++ : MAX_DBFILTERS;
   if ( 0 == nFilters ) {
       errMSGBOXF( UI_MB_ERROR, "*** %s", "THERE MUST BE AT LEAST 1 VALID FILTER" );
       return NULL;
   }

   dbNew = db_new_inited( NULL );
   if ( !dbNew ) {
       errMSGBOXF( UI_MB_ERROR, "%s", err_get_msg() );
       FREE(dbNew);
       return NULL;
   }

   for (RoundIndex i=0; i < dbMain->status.nrounds; i++)
   {
       Round *currRound = &dbMain->data[i];
       if ( _dbfilters_all_true(filters, currRound) )
           db_insert_round(dbNew, currRound);
   }

   return dbNew;
}

 

 

 

Οπότε η βασική ιδέα είναι το κάθε φίλτρο που χρειάζομαι (όσο απλό ή όσο σύνθετο είναι) να το υλοποιήσω ως μια (ή περισσότερες) συναρτήσεις, και να το περνάω στον πίνακα filters[]. Στο παραπάνω κώδικα μπορώ να έχω μέχρι 5 φίλτρα (απλά ή σύνθετα), αλλά αυτό δεν με απασχολεί στην παρούσα φάση... εννοώ είναι τετριμμένο να το αλλάξω ανά πάσα στιγμή.

 

Επίσης (ευτυχώς) ο χρήστης δεν χρειάζεται να ορίζει δικά του custom φίλτρα. Οπότε, δεν χρειάζεται το πρόγραμμα να υλοποιεί τέτοια λειτουργικότητα.

 

Βλέπετε καμιά χτυπητή χοντράδα, αναπηρία (handicap), κλπ στην παραπάνω λογική; Έχετε υπόψη σας κάποια καλύτερη υλοποίηση για τα συγκεκριμένα ζητούμενα, καμιά άλλη ιδέα;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

δεν μας λες το σχημα για να καταλαβουμε τι συμπεριφορα θες απο τα δεδομενα;

 

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

 

Αλλά έχεις δίκιο ότι χρειάζονται διευκρινήσεις!

 

Για παράδειγμα, ας πούμε πως η κάθε εγγραφή (record, row, ή όπως αλλιώς την καταλαβαίνει ο καθένας) αποτελείται από 4 πεδία (fields, columns ή όπως αλλιώς τα καταλαβαίνει ο καθένας)... :

  • Όνομα
  • Επίθετο
  • Γένος
  • Ηλικία

Ένα φίλτρο θα μπορούσε να απαιτεί για παράδειγμα να είναι ίδια τα 2 τελευταία πεδία, οπότε όταν το εφαρμόσουμε στην ΒΔ θα μας φιλτράρει (θα μας δώσει ως αποτέλεσμα) όσες εγγραφές έχουν ίδια τα 2 τελευταία τους πεδία (π.χ. άντρες 30 ετών).

 

Στον κώδικα που παρέθεσα, η εγγραφή είναι το round (παρτίδα πόκερ) ενώ τα πεδία που συγκρίνει το φίλτρο που έδωσα είναι τα:

  • gameType
  • gamePlayers
  • seat
  • handHole

Το ότι π.χ το handHole είναι μια ομάδα συνεχόμενων χαρτιών δεν μας απασχολεί, ούτε το πως υλοποιείται εσωτερικά. Ούτε το ότι υπάρχουν κι άλλα πεδία μετά το handHole.

 

Το κάθε φίλτρο στον κώδικά μου, είναι ένα struct 3 πραγμάτων (πεδίων δλδ, αλλά είπα να μην τα γράψω έτσι και τα μπερδέψει κανείς με τα πεδία της ΒΔ):

  • round, αυτή είναι μια παρτίδα η οποία περιέχει τιμές στα πεδία που θέλουμε να συγκριθούν με όλες τις καταγεγραμμένες παρτίδες της βάσης.
  • extraParams, αυτό είναι ένα έξτρα, generic όρισμα για τη συνάρτηση που θα εφαρμόσει τη σύγκριση των πεδίων του round (το εξηγώ σε spoiler, λίγο πιο κάτω).
  • cb_is_equal_round(), αυτή είναι η συνάρτηση-σύγκρισης του φίλτρου, που αποφασίζει αν 2 παρτίδες θεωρούνται ίδιες ή όχι (στην πράξη συγκρίνει τα πεδία του παραπάνω round με τα πεδία κάθε καταγεγραμμένης παρτίδας στη βάση).

Σε κώδικα, ο παραπάνω ορισμός μεταφράζεται...

>
typedef struct DBaseFilter {
   void    *round;
   void    *extraParams;
   bool    (*cb_round_is_equal)(const void *r1, const void *r2, void *extraParams);
} DBaseFilter;

 

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

 

>
bool round_is_equal_uptoExactHandHole( const void *round1, const void *round2, void *dummy );

 

Όπως όλες οι συναρτήσεις-σύγκρισης στα φίλτρα μου, έτσι κι αυτή δέχεται 2 παρτίδες στα πρώτα της ορίσματα (κι ένα ακόμα που δεν επηρεάζει τη συζήτηση) κι επιστρέφει true αν αυτές οι 2 παρτίδες έχουν ίδια τα πρώτα τους πεδία, μέχρι και το πεδίο handHole... εξού και το επίθεμα "_uptoExactHandHole" στο όνομα της συνάρτησης (με το "Exact" εκεί ανάμεσα να σημαίνει πως στο handHole θέλουμε όχι μόνο να είναι ίδια τα χαρτιά του αλλά και στην ίδια σειρά)

 

 

 

Το έξτρα όρισμα θα μπορούσε να ήταν π.χ. η διεύθυνση ενός int, ας πούμε του 1, που θα σήμαινε πως θέλουμε η συνάρτηση να θεωρήσει ίδια τα handHoles 2 παρτίδων αν έχουν τουλάχιστον 1 όμοιο φύλλο και στην στην ίδια ακριβώς θέση.

 

Βασικά το τι ακριβώς περιέχει και τι σημαίνει για την κάθε συνάρτηση το έξτρα όρισμα της το ξέρει η ίδια η συνάρτηση, για αυτό και το έχω void * ... η συγκεκριμένη όμως συνάρτηση δεν χρειάζεται κανένα έξτρα όρισμα, για αυτό και το έχω ονοματίσει "dummy" στον ορισμό της. Όταν την καλώ το περνάω ως NULL αυτό το όρισμα, αλλά ότι και να πέρναγα η συνάρτηση αυτή θα το αγνοούσε. Δεν μπορώ να το παραλείψω τελείως ως όρισμα, γιατί μιλάμε για callback συνάρτηση, άρα πρέπει να είναι ορισμένη ομοιογενώς με τις αντίστοιχες συναρτήσεις των υπόλοιπων φίλτρων.

 

 

 

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

 

Το βασικό πρόβλημα που υπάρχει είναι πως οποιοδήποτε arbitrary expression συγκρίσεων πρέπει να γραφτεί επί τούτου ως ξεχωριστή συνάρτηση. Δεν μπορεί δηλαδή να παραχθεί αυτόματα από το πρόγραμμα (βέβαια, δεν μου έχει ζητηθεί τέτοια λειτουργικότητα και νομίζω ούτε πρόκειται να χρειαστεί).

 

Ένα άλλο που βλέπω τώρα είναι πως δεν υπάρχει απολύτως κανένας λόγος να διατηρώ πίνακα πολλών φίλτρων. Ένα μόνο φίλτρο αρκεί (μιας και δεν χρειάζεται να χειριστώ αυτόματη παραγωγή arbitrary expressions).

 

Επίσης, πρέπει να αλλάξω το όνομα του ορισμού της συνάρτησης-σύγκρισης από...

>
cb_round_is_equal()

 

σε κάτι σαν...

>
cb_round_is_matched()

 

μιας και το ταίριασμα 2 παρτίδων δεν προϋποθέτει αναγκαστικά ισότητα μεταξύ τους (καλά αυτό δεν είναι λειτουργικό πρόβλημα, πρόβλημα readability είναι)

 

Αν χρειάζεστε άλλες διευκρινήσεις πείτε μου. Κυρίως όμως με ενδιαφέρουν γνώμες, ιδέες, επισημάνσεις κλπ. Π.χ. για τυχόν προβλήματα που μπορεί να έχω με αυτή την υλοποίηση, που δεν τα βλέπω αυτή τη στιγμή... ή για καλύτερους τρόπους υλοποίησης. Οι ΒΔ δεν είναι το φόρτε μου :P

 

 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...