Προγραμματισμός ελλακ

Από Βικιβιβλία

Εισαγωγικά[επεξεργασία]

Στο παρόν καταγράφω προσωρινά εμπειρίες μου από την συμμετοχή σε εγχειρήματα προγραμματισμού .


Πέρα από την γνώσση γλωσσών προγραμματισμού ένας προγραμματιστής πρέπει να γνωρίζει εργαλεία όπως svn , ssh , uml , GNU build system κτλ

Συμμετέχοντας [1][επεξεργασία]

  1. Το ΕΛΛΑΚ προϋποθέτει και την δική σου συνεισφορά , οπότε η διάθεση για εργασία και συμμετοχή είναι προαπαιτούμενη.
  2. Εμπιστέψου τις δυνάμεις σου. Αν σου λένε ότι είναι καλή η ιδέα σου τότε προχώρα στην υλοποίησή της.
  3. Μίλησε για την ιδέα σου. Όσο νωρίτερα την κοινοποιήσεις τόσο ποιό πιθανό είναι να συνεισφέρουν και άλλοι στο εγχείρημά σου αισθανόμενοι ότι είναι και δικιά τους. Οι πιο πολλοί δυστάζουν να κοινοποιήσουν και να μοιραστούν μια ιδέα μέχρι να είναι σίγουροι ότι ειναι καλή ιδέα. Αλλά μέχρι τότε , η ιδέα θα είναι δικιά σου και θα είναι αργά για τους άλλους.
  4. Μην ανυσηχείς για το την αναγνώριση Don't worry about getting credit. It's all done publicly, on a mailing list that's recorded for prosperity or on IRC in front of everyone. You'll get your credit. Float your idea, encourage others, accept their feedback and ideas. Give more credit than you take. (And ask yourself if you want your idea to happen or if you want credit. Either answer is ok but only one can be your highest priority.)
  5. Συμμετείχε στη συζήτηση. Πολλά ελλακ εγχειρήματα οργανώνται με λίστες ηλ.ταχυδρομίου. Πολύ δραστηριότητα υπάρχει πλεον και στο irc
  6. Γίνε αποτελεσματικός στο να παρακολουθείς και να φιλτράρεις μεγάλο όγκο πληροφορίας. Διαχειριστες ροών ειδήσεων, ηλ.αλληλογραφίας, πλοηγούς , irc πελάτες κτλ.
  7. Απάντησε σε όλους. Ειναι χρήσιμο σε ένα εγχείρημα η ροή πληροφορίας να μην δημιουργεί τοίχοι.
  8. Σκέψου το καλύτερο για τους ανθρώπους. Τα πράγματα χάνονται με το email. Είναι πολύ ευκολότερο να διαβάσεις λάθος ένα email ή να παρεξηγηθείς για κάτι σε ένα email απ'ότι είναι όταν είσαι με τον άλλον κατά πρόσωπο. Θυμήσου το αυτό οποτεδήποτε νευριάζεις με κάποιον εξαιτίας ενός email.
  9. Meet people. Along the same lines as communicating well in email, meet as many of your fellow open source people in person. This is somewhat controversial as the open source model works really well in a virtual world. But I think that conferences like OSCON, GUADEC, SCALE and OpenSource World that get lots of open source people together, create stronger relationships and better projects. Personally I find that when I can read an email in someone's voice, it makes a lot more sense. It's often funnier and more relevant.
 10. Be yourself. Be yourself, add some personal notes, make sure your motivations are transparent. Anyone who is obviously acting with "ulterior" motives - like pushing their company's policy without thinking about what it means to them and the project - is less trust worthy. Not because what they are doing is bad but because it's hard to know what type of decisions they are going to make and carry through on.
 11. Ask for help. There are a lot of people in the open source community willing to help. Just make sure you share the whole plan and ask for specific help. If you don't share the plan, they won't know why they should help. If you don't ask for specific help, they won't know how to help.
 12. Show your passion. Excitement is contagious. Share why you are doing what you are doing and why it's important or fun. (Be sure to temper the "because the alternative sucks" viewpoint.) Be positive and passionate!

Τι άλλο θα προσέθετες; Ποιά είναι η καλύτερη συμβουλή σου για να προχωρούν καλύτερα τα πράγματα σε έναν κόσμο ανοιχτού κώδικα;

Freeciv[επεξεργασία]

Για να μπορείς να συνεισφέρεις στο εγχείρημα αυτό πρέπει να έχεις δικαιώματα εγγραφής στο αποθετήριο κώδικα του εγχειρήματος που βρίσκεται στο gna.org.

Άσκηκη : Αφιερώστε μερικά λεπτά και περιηγηθήτε στο αποθετήριο κώδικα του freeciv.

Ένα πρόβλημα που μου παρουσιάστηκε συχνά είναι αυτό της πρόσβασης στο αποθετήριο.

To ssh είναι ένα κέλυφος που χρησιμοποιεί Κρυπτογραφία Δημόσιου Κλειδιού χρησιμοποιούντας τους κρυπταλγορίθμουςRSA και DSA προκειμένου να εξασφαλίσει ασφαλή επικοινωνία ανάμεσα σε υπολογιστές.

Πρόσβαση μέλους στο αποθετήριο κώδικα μέσω ασφαλούς κελύφου[επεξεργασία]

$ svn co svn+ssh://<membername>@svn.gna.org/svn/freeciv/trunk freeciv
$ svn co svn+ssh://<membername>@svn.gna.org/svn/freeciv/branches/S2_1 freeciv


Ασφαλές κέλυφος[επεξεργασία]

Χρήσιμη εντολή για αποσφαλμάτωση κατά τη σύνδεση σε αποθετήριο svn στο gna.

 $ ssh -v  chomwitt@svn.gna.org

Για να αποκτήσεις πρόσβαση εγγραφής στο svn αποθετήριο κώδικα του, freeciv (για παράδειγμα), πρέπει εγγραφείς μέλος και για είναι ασφαλής η πρόσβαση μέσω ssh πρέπει και να καταχωρήσεις το δικό σου δημόσιο κλειδί στη σελίδα διαχείρισης λογαριασμού σου στον ιστότοπο gna.org. Τα δυο κλειδιά θα τα δημιουργήσεις με την εντολή

$ ssh-keygen -t rsa

η οποία θα σου ζητήσει πρώτα μια φράση κλειδί που θα προστατεύει το κλειδί σου Κατόπιν θα δημιουργηθεί ένα ζεύγος κλειδίων και τι δημόσιο θα αποθηκευτεί στον κατάλογο:

~/.ssh/id_rsa.pub.


Πώς το SSH χρησιμοποιεί την κρυπτογραφία δημόσιου κλειδίου[επεξεργασία]

Πρώτα δημιουργούμε ένα ζευγάρι κρυπτογραφικών κλειδίων με τον κρυπταλγόριθμο RSA ή DSA . Το ένα είναι το δημόσιο και το άλλο είναι το ιδιωτικό. Το ιδιωτικό κλειδί το φυλάς προστατευεμένο (μέσω μια φράσης-άδειας) με την προσοχή που θα φυλούσες πχ το κλειδί του σπιτίου σου. Έστω λοιπόν έχεις καταχωρήσει το δημόσιο σου κλειδί στον λογαριασμό σου στον απομακρυσμένο υπολογιστή. Αν σταλεί ένα μήνυμα κρυπτογραφημένο (πιθανώς για λόγους πιστοποίησης) από τον ssh εξυπηρετητή (που τρέχει σαν υπηρεσία στον υπολογιστή με τον οποίο θέλουμε να επικοινωνήσουμε) , τότε ο μόνος που θα μπορούσε να αποκρυπτογραφήσει το μήνυμα αυτό θα είσαι εσύ με το ιδιωτικό σου κλειδί. (ποιό αναλυτικά θα μπορούσε ο εξυπηρετητής να υπολογίσει ένα άθροισμα από ένα κείμενο -που θα το στείλει κατόπιν κωδικοποιημένο -και αν του σταλθεί πίσω το ίδιο άθροισμα αυτό θα είναι μια πετυχημένη πιστοποίηση αφού μόνο ο κάτοχος του δημόσιου κλειδίου θα μπορούσε να αποκρυπτογραφήσει το μήνυμα αυτο). Αυτή η πιστοποίηση είναι ωφέλιμη και στα δυο μέρη. Φανταστείται πχ ένα τρίτο να προσπαθεί να συνδεθεί με το όνομα σας για να κάνει κακόβουλες αλλαγές σε ένα αποθετήριο!. Απο την στιγμή που γίνει η πιστοποίηση μπορεί να προχωρήσει η σύνδεση κρυπτογραφημένη. Ο εξυπηρετητής θα στέλνει μηνύματα κρυπτογραφημένα με το δημόσιο κλειδί και ο πελάτης θα στέλνει τα δικά του μηνύματα κρυπτογραφημένα με το δημόσιο κλειδί του εξυπηρετητή που πιθανώς θα του δωθεί μετά από μια επιτυχημενη πιστοποίηση.

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

Βασικές έννοιες και πλαίσιο της κρυπτογραφίας[επεξεργασία]

Θεωρούμε ότι υπάρχουν οντότητες που θέλουν να επικοινωνήσουν. Όταν μια οντότητα Α εμπιστεύεται μια άλλη οντότητα Β αυτό σημαίνει ότι ο Α ξέρει και περιμένει η Β να συμπεριφέρεται με κάποιον συγκεκριμένο τρόπο και να αλληλεπιδρά με τον Α με εναν τρόπο που έχει συμφωνηθεί και που είναι ωφέλιμος,χρήσιμος και για τα δύο μέλη. Θέλουμε τα μηνύματα που ανταλλάσουν αυτές οι δύο οντότητες να ειναι κρυπτογραφημένα ώστε να μην μπορει μια τρίτη μη-έμπιστη οντότητα να διαταράξει την συμφωνημένη αλληλεπίδραση επικοινωνία των Α,Β με τρόπο μη αποδεκτό.

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

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

Για τους υπάρχοντες δημιουργόυς freeciv αφού δεν έχουν συναντήσει ποτέ τον νεό δημιουργο είναι γι'άυτούς μια αφηρημένη οντότητα με χαρακτηριστικά όπως irc chat μηνύματα , όνομα ,ip , emails , ιδιωτικό-δημόσιο κλειδί , αλλαγές στο αποθετήριο κτλ. Αυτός ο νέος δημιουργούς είναι έμπιστος σε κάποιο βαθμό αφού εξ'ορισμου ακολούθησε με επιτυχία κάποιες κοινές πρακτικές-πρότυπα αλληλεπίδραση και γι´αυτό του δώθηκε και το δικαίωμα αλλαγής αλλά κρυπτογραφημένα γιατί θεωρείται ότι αυτός και όχι κάποιος τρίτος κατέχει αυτό το ελάχιστο υποβαθρο. Σε'αυτήν την περίπτωση η ασφάλεια έχει νόημα και σε σχέση με τρίτους που θα ήταν ικανοί να κάνουν άθελά τους κάποια ζημίά αν είχαν πρόσβαση στο αποθετήριο αφου λογικά μπορει κάποιος κακόβουλος να περάσει έυκολα τα στάδια της εγγραφής. Αυτό αφορά το στάδιο της πιστοποίησης. Όμως θα μπορούσαμε να μην συνεχίζουμε την επικοινωνία κρυπτογραφημένα. Αυτή η κρυπτογράφηση έχει νόημα για να προστατεύσει την συνοχή της επικοινωνίας αλληλεπίδρασης του νεου μέλους με το αποθετήριο στην περίπτωση που κάποια κακόβουλη οντότητα ήθελε να αλλάξει καθ´οδον τις αλλαγές του νέου μέλους , μια δυνατότητα που θα την είχε χωρίς κρυπτογράφηση. Αυτό θα ήταν πολύ επικίνδυνο αν πχ οι αλλαγές κάποιου πολύ παλιού και έμπιστου δημιουργού που ίσως δεν θα ελέγχονταν πολύ από τα υπόλοιπα μέλη είχαν υποστεί αυτή την κακόβουλη τροποποίηση.

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


Ανάλυση προγράμματος[επεξεργασία]

$ strace -etrace=open [γραμμή εντολής]   // δίνωντας αυτές τις επιλογές στην strace μπορείτε να δείτε ποιά αρχεία ανοίγει και με ποιά κλήση συστήματος ένα πρόγραμμα

Ιστότοποι συνεργατικής διαχείρισης ανάπτυξης λογισμικού[επεξεργασία]

  • alioth Πλατφόρμα ανάπτυξης λογισμικού σχετικού με το debian
  • gna.org Πλατφόρμα ανάπτυξης ελεύθερου λογισμικού υπο την εποπτεία του fsffrance.org
  • savannah.gnu.org Πλατφόρμα ανάπτυξης ελεύθερου λογισμικού υπο την εποπτεία του fsf.org


Σημειώσεις και παραπομπές[επεξεργασία]

  1. http://www.stormyscorner.com/2009/02/how-to-get-things-done-in-open-source.html

Εξωτερικοί σύνδεσμοι[επεξεργασία]