Παρασκευή 10 Ιουλίου 2009

Gcc09: Υλοποίηση Ελληνικής Αρίθμησης

Το πρώτο από τα project του GCC09 που θα ήθελα να παρουσιάσω είναι η υλοποίηση ελληνικής αρίθμησης για το OpenOffice.org. Το project αυτό προτάθηκε αρχικά στα πλαίσια του συνεδρίου ΕΛΛΑΚ από τον Κώστα Παπαδήμα και μια και ήταν σχετικά μικρό και εύκολο, φάνηκε καλή ιδέα να το εντάξουμε στα έργα του camping μας.

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

Εφόσον η κατάσταση είχε απλοποιηθεί τόσο, αποφασίστηκε κατά τη διάρκεια του camp να αναλάβω το project ο ίδιος, εφόσον ο Ηλίας που ήταν επίσης ενδιαφερόμενος ήταν απασχολημένος με το project των templates (στο οποίο έγινε εξαιρετική δουλειά btw, ειδικά το template για την υπεύθυνη δήλωση που φτιάχτηκε από το μηδέν).

Στο δικό μου κομμάτι, στην αρχή ασχολήθηκα με το πώς θα κάνω το build του oo.org αποδοτικά, μια και δεν είναι μικρό project ;) Ευτυχώς, η εταιρεία ΕΛΛΑΚ είχε φροντίσει να μας παρέχει πρόσβαση σε ένα αρκετά δυνατό server στο ntua (τι καλοί άνθρωποι που είναι αυτοί στην ΕΕΛΛΑΚ, σε σκλαβώνουν ώρες-ώρες :)

Δυστυχώς, λόγω τεχνικών θεμάτων δεν μπορούσαμε να έχουμε root ή sudo access οπότε δεν ήταν δυνατόν να εγκαταστήσουμε τις εξαρτήσεις. Ευτυχώς λύθηκε και αυτό χάρη στην προθυμία των διαχειριστών του server και τη μεσολάβηση του Νίκου Ρούσσου και το βράδυ ξεκίνησε το build του developer milestone 51
(σε screen session φυσικά).

Για όσους ενδιαφέρονται, η βέλτιστη εντολή για το build του oo.org σε ένα 16-πύρηνο μηχάνημα βρέθηκε να είναι η:
cd instsetoo_native &&
build --all --dlv_switch -link -P4 -- -P4
Ουσιαστικά η εντολή αυτή παράγει 4 dmake instances τα οποία τρέχουν 4 build.pl το καθένα. Το συγκεκριμμένο configuration σε συνδυασμό και με ccache και ένα καλό RAID μπορεί να κάνει το full build του oo.org ιδιαίτερα αποδοτικό για development και testing. Ας ελπίσουμε ότι κάποιο εκπαιδευτικό ίδρυμα θα σκεφτεί σοβαρά την παροχή ενός τέτοιου μηχανήματος για tinderbox σε πιο μόνιμη βάση. Περισσότερες λεπτομέρειες για τη δομή του κώδικα του oo.org, το building (και το debugging του build που είναι πιο σημαντικό) μπορούν να δοθούν σε άλλο post αν υπάρξει ενδιαφέρον.

Ας επιστρέψουμε όμως στην καθεαυτό υλοποίηση της αρίθμησης. Αντίθετα με τον τρόπο ανάγνωσης που παρουσίασε ο κος Σπινέλλης στο blog του, υπάρχει ένας αρκετά γρηγορότερος τρόπος να διαβάσει κάποιος τον κώδικα του oo.org και να τον καταλάβει αρκετά καλά ώστε να υλοποιήσει την αρίθμηση :) O τρόπος αυτός είναι φυσικά η αξιοποίηση του google και των ανθρώπινων γνωριμιών (Κωστής Παπαδήμας) ώστε να οδηγηθούμε στο patch που υλοποιεί την αντίστοιχη λειτουργικότητα για τα βουλγαρικά/κυριλλικά.

Έχοντας λοιπόν πια όλα τα συστατικά, η υλοποίηση ήταν αρκετά εύκολη. Επειδή υπήρξαν κάποιες ενστάσεις σχετικά με την άδεια χρήσης κλπ του κώδικα Java, υλοποίησα και μία έκδοση εντελώς "from scratch" η οποία μπορούσε να μετρήσει ως το 10000 (υπέραρκετό για λίστες και παραγράφους εκτός ίσως αν κάποιος θέλει να γράψει το Mathematica Book ;) την οποία θα μπορούσα να υποβάλλω αν για κάποιο λόγο δεν μπορούσαμε να βρούμε έγκαιρα τον κο Σπινέλλη (καθώς το καλοκαίρι είναι χρόνος συνεδρίων/διακοπών κλπ).

Τελικά ούτε αυτό δε χρειάστηκε (ο κος Σπινέλλης ανταποκρίθηκε σε προσωπικό email εντυπωσιακά γρήγορα), οπότε σήμερα το patch στάλθηκε στη λίστα του greek coding camp και στους υπόλοιπους ενδιαφερόμενους για review και εκτός απροόπτου θα συμπεριληφθεί επίσης στο σχετικό bug του oo.org με στόχο την ενσωμάτωση στην έκδοση 3.2.

Υπάρχουν σκέψεις για την παροχή πακέτων τουλάχιστον για ubuntu και freebsd (3.1 + ελληνική αρίθμηση) αν κάποιος δεν μπορεί να περιμένει ως την έκδοση 3.2 για αυτή τη λειτουργικότητα, αλλά προς το παρόν ας αρκεστούμε σε ένα "screencast" (please be gentle, it is my first time :p )

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου