ubuntistas issue 9 may june july 2010

25

Upload: iasptk

Post on 11-Mar-2016

228 views

Category:

Documents


7 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Ubuntistas issue 9 may june july 2010
Page 2: Ubuntistas issue 9 may june july 2010

Τεύχος 9 - Μάιος Ιούνιος Ιούλιος 2010

Ομάδα Περιοδικού:• Αλμπανόπουλος Νίκος (nikosal):Επιμελητής Κειμένων - [email protected]

• Διαμαντής Δημήτρης (ftso):Συντάκτης - [email protected]

• Κωστάρας Γιάννης (hawk):Συντάκτης - [email protected]

• Παπαδόπουλος ∆ημήτρης (Dimitris):Συντάκτης, σελιδοποίηση - [email protected]

• Πετούμενου Τζένη (jennie):Επιμελήτρια Κειμένων - [email protected]

• Σαββίδης Σόλων (g00fy):Συντάκτης, ∆ημόσιες Σχέσεις - [email protected]

• Φωτιάδης Γρηγόρης:Σχεδιασμός οπισθόφυλλου - [email protected]

• Φωτιάδης Φίλιππος (filippos.xf):Συντάκτης - [email protected]

• Χατζηπαντελής Παντελής (kalakouentin):Συντάκτης, σελιδοποίηση - [email protected]

Σημείωμα από τη σύνταξη...

Το καλοκαίρι έφτασε και τοθερινό ubuntistas είναι έτοιμο μεποικίλα θέματα. Η παρουσίαση ενόςσύγχρονου IDE, του Netbeans, θασας δώσει μια πρώτη γεύση για τοπώς να χρησιμοποιείτε το πανίσχυροαυτό περιβάλλον ανάπτυξης κώδικα.Όποιος ενδιαφέρεται να αυξήσει τηνταχύτητα του KDE του, τότε τοπαρόν τεύχος θα του φανεί σίγουραχρήσιμο. Και για όσους ασχολουνταιμε επιστημονικές εφαρμογές, τότεη παρουσίαση της επιστημονικήςβιβλιοθήκης GNU, GNU ScientificLibrary, σίγουρα δε θα περάσειαπαρατήρητη. Στο προηγούμενοτεύχος είχαμε ξεκινήσει μια μικρήεισαγωγή στην κρυπτογραφία καισε αυτό συνεχίζουμε με πρακτικέςεφαρμογές χρησιμοποιώντας τηγλώσσα προγραμματισμού Java.Τέλος, το πρόγραμμα fsprotect μπορεί

πλέον να χρησιμοποιηθεί και από τοubuntu, και σας το παρουσιάζουμεεν συντομία. Φυσικά, όλα αυτάσυμπληρώνονται με τα νέα τηςελληνικής κοινότητας ubuntu.

Το περιοδικό Ubuntistas είναι έναελεύθερο περιοδικό της ελληνικήςκοινότητας ubuntu. Αυτό σημαίνειότι, όποιος έχει όρεξη να συνεισφέρει,είτε με τεχνικά άρθρα, παρουσιάσειςπρογραμμάτων, εικόνες και γραφικά,είτε βοηθώντας στην επιμέλεια τωνκειμένων και τη σελιδοποίηση, είναιελεύθερος να δηλώσει συμμετοχή.Και φυσικά, χαιρόμαστε πάντα ναδιαβάζουμε μηνύματα του τύπου "θαήθελα να διαβάσω για προγράμματαπροσομοίωσης του big bang" ή "πώςμπορώ να στήσω ένα server με RAID5" ή "πώς μπορώ να παραγωγίσω τονκώδικά μου;"

Καλή ανάγνωση!

Page 3: Ubuntistas issue 9 may june july 2010

Περιεχόμενα To ubuntu

Το ubuntu linux είναι ένα λειτουργικό σύστημα. Μεπεριβάλλον εργασίας gnome το φωνάζουμε ubuntu,με kde το φωνάζουμε kubuntu. Είναι πλήρες(!), τεχνο-λογικά προηγμένο(!), και εύκολο στην χρήση από οποι-ονδήποτε(!). Στα αποθετήρια του ubuntu υπάρχουνδιαθέσιμες κυριολεκτικά χιλιάδες εφαρμογές σχεδόν γιαοτιδήποτε(!) … για επαγγελματική, επιστημονική, εκ-παιδευτική, και οικιακή χρήση. Τόσο το ubuntu όσο καιοι εφαρμογές του είναι Ελεύθερο Λογισμικό / ΛογισμικόΑνοιχτού Κώδικα (ΕΛ/ΛΑΚ), δηλαδή διατίθενται ελεύ-θερα, και στην Ελλάδα υποστηρίζονται από την άτυπηαλλά πολύ δραστήρια κοινότητα ubuntu-gr. Περισσό-τερα στο http://www.ubuntu-gr.org.

Η κοινότητα ubuntu-gr

Η κοινότητα ubuntu-gr ανήκει στα μέλη της και είναιανοιχτή σε όλους! Eίναι το μέρος όπου έμπειροι και ά-πειροι(!) χρήστες συζητάνε ότι τους απασχολεί, ιδέες,ερωτήματα, πρακτικά ζητήματα, οργανωτικά θέματα,και κυρίως τεχνικά προβλήματα. Αποτελείται από αν-θρώπους με εμπειρία στην πληροφορική αλλά κυρίωςαπό απλούς χρήστες, οι οποίοι εθελοντικά συμμετέ-χουν i) στην δημιουργία-ανάπτυξη του λογισμικού, ii)στην μετάφρασή του στην ελληνική γλώσσα, iii) στηνπροώθηση-διάδοση του στην Ελλάδα, και κυρίως iv)στην παροχή αμεσότατης(!) και υψηλής ποιότητας(!)τεχνικής υποστήριξης σε άλλους ελληνόφωνους χρή-στες. Λειτουργεί με αυτό-οργάνωση και προσπαθούμεοι αποφάσεις να λαμβάνονται όσο το δυνατόν πιο δημο-κρατικά από εκείνους πουπροσφέρουν-δραστηριοποι-ούνται συστηματικά. Η ελληνική κοινότητα του Ubuntuδιαθέτει μέχρι στιγμής φόρουμ, λίστα ηλ. ταχυδρομείου,κανάλι συζητήσεων τύπου IRC, καθώς και το περιοδικόUbuntistas. Για όλα αυτά υπάρχουν οδηγίες και linksστο http://www.ubuntu-gr.org.

Το περιοδικό ubuntistas

Το Ubuntistas, το ηλεκτρονικό περιοδικό της ελληνικήςκοινότητας του ubuntu (ubuntu-gr), κυκλοφορεί ελεύ-θερα κάθε δίμηνο, με πρώτο τεύχος του Νοεμβρίοου -Δεκεμβρίου 2008. Περιέχει νέα, πληροφορίες, συνεντεύ-ξεις, παρουσιάσεις, οδηγούς, και άρθρα σχετικά με τοubuntu. Το περιοδικό είναι ανοιχτό σε όλους, όπωςκαι το GNU/Linux! Ο καθένας μπορεί να συμμετέχειενεργά στην δημιουργία του, να αρθρογραφήσει, ναπροτείνει ιδέες και να κάνει τις επισημάνσεις / παρατη-ρήσεις του.

Η άδεια διάθεσης του περιεχομένου του ubuntistasΤα άρθρα που περιλαμβάνονται στο περιοδικό διατίθενται υπό τη άδεια της Creative Commons Attribution-By-Share Alike 3.0 Unported license. Αυτό σημαίνει ότι μπορείτε να προσαρμόσετε, να αντιγράψετε, να διανείμετεκαι να διαβιβάσετε τα άρθρα, αλλά μόνο υπό τους ακόλουθους όρους: πρέπει να αποδώσετε την εργασία στοναρχικό συντάκτη (π.χ. με αναφορά ονόματος, email, url) αλλά και στο περιοδικό, αναφέροντας την ονομασίατου (Ubuntistas). Δεν επιτρέπεται να αποδίδετε το άρθρο/α με τρόπο που να το/α επικυρώνετε ως δική σαςεργασία. Και εάν κάνετε αλλαγές, μεταβολές, ή δημιουργίες πάνω σε αυτήν την εργασία, πρέπει να διανείμετε τηνπροκύπτουσα εργασία με την ίδια άδεια, παρόμοια ή συμβατή.Περίληψη άδειας: http://tinyurl.com/5nv7kn - Πλήρης άδεια: http://tinyurl.com/yqontc

REVIEW

HOW-TO

ΠΑΙΧΝΙΔΙΑ

HINTS & TIPS

UBUNTU-GR

Netbeans11

Εισαγωγή στην Κρυπτογραφία με

τη γλώσσα Java4

GNU Scientific Library9Flight Gear20

Νέα & ανακοινώσεις της κοινότητας

ubuntu-gr23

Σύντομες απαντήσεις σε συχνές ερωτήσεις24

19 Αυξήστε την ταχύτητα του KDE

ΕΠΙΣΤΗΜΟΝΙΚΑ

10 Scipy

Page 4: Ubuntistas issue 9 may june july 2010

HOW-TO

του Κωστάρα Γιάννη

Εισαγωγή στην Κρυπτογραφία με τη γλώσσα JavaΣυμμετρική κρυπτογραφία.

Στο προηγούμενο τεύχος του Ubun-tistas παρουσιάσαμε μια εισαγωγή στηνΚρυπτογραφία. Σε αυτή τη σειράάρθρων θα εξετάσουμε τις δυο κατηγορίεςΚρυπτογραφίας που υπάρχουν (Συμμετρικήκαι Δημοσίου κλειδιού), και θα δούμεπρακτικά προγράμματα σε Java πουχρησιμοποιούν τις βιβλιοθήκες Java Cryp-tography Extension (JCE).

Μια άλλη κατηγοριοποίηση τωνκρυπτοσυστημάτων φαίνεται στο σχήμα 1.

Κρυπτοσυστήματα

Κλασσικά

ΚρυπτοσυστήματαΜοντέρνα

Κρυπτοσυστήματα

Αναδιάταξης Συμμετρικά

ΠολυαλφαβητικήςΜονοαλφαβητικής

Πολυσταδιακές Μονοσταδιακές

Αντικατάστασης

Ασύμμετρα

ΟμοφωνικήςΠολυγραμματικής

Ψευδοτυχαίες

ακολουθίες

Συμμετρικοί

κρυπταλγόριθμοι

Ψηφιακές υπογραφέςΣυναρτήσεις

κατακερματισμού

Σημειωματάριο

μιας χρήσης

Ρότορες

Ψηφιακές υπογραφέςΑσύμμετροι

κρυπταλγόριθμοι

Σχήμα 1: Κρυπτοσυστήματα

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

• Δέσμης (Block Ciphers), οι οποίοιχωρίζουν το μήνυμα σε τμήματα καικρυπτογραφούν κάθε ένα από τατμήματα αυτά χωριστά.

• Ροής (Stream Ciphers), οι οποίοικρυπτογραφούν μία ροή μηνύματος(stream) χωρίς να την διαχωρίζουν σετμήματα.

Συμμετρική κρυπτογραφία

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

Η πιο γνωστή περίπτωση ήταν οαλγόριθμος κρυπτογράφησης του Καίσαρα[1,2,11]. Ο Ιούλιος Καίσαρας έγραφεστον Κικέρωνα και σε άλλους φίλους του,αντικαθιστώντας κάθε γράμμα του κειμένουμε το γράμμα που βρισκόταν 3 θέσεις μετάστο λατινικό αλφάβητο. Έτσι, σήμερα, τοσύστημα κρυπτογράφησης που στηρίζεταιστην αντικατάσταση των γραμμάτων τουαλφαβήτου με άλλα που βρίσκονται σε

καθορισμένο αριθμό θέσης, πριν ή μετά,λέγεται κρυπτοσύστημα αντικατάστασης τουΚαίσαρα. Κάθε γράμμα αντιστοιχίζεται σεέναν αριθμό, π.χ. A = 0, B = 1, C = 2,…, Z = 25

Το κλειδί (ή μετατόπιση), είναι έναςαριθμός μεταξύ 0 και 25. Ο Καίσαραςχρησιμοποιούσε το 3, π.χ.Αρχικό κείμενο: CRYPTOGRAPHYΚρυπτογραφημένο: FUBSWRJUDSKBΜετατόπιση: 3, δηλ. A→D, B→E, C→F …

Ο παραλήπτης πρέπει να μοιράζεται τοίδιο κλειδί με τον αποστολέα για να μπορέσεινα αποκρυπτογραφήσει το μήνυμα. Φυσικά,το πρόβλημα ήταν η ασφαλής μεταφοράτου κλειδιού στον παραλήπτη. Παρόμοιατεχνική χρησιμοποιούσαν κι οι Σπαρτιάτεςμε τη σπαρτιατική σκυτάλη [1]. Το μήκος τηςσκυτάλης αποτελούσε το κλειδί.

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

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

4

Page 5: Ubuntistas issue 9 may june july 2010

HOW-TO

ιστογράμματος συχνοτήτων του παρακάτωσχήματος (Σχήμα 2).

Σχήμα 2: Συχνότητες γραμμάτων Αγγλικούαλφαβήτου

Οι πιο γνωστοί συμμετρικοί αλγόριθμοιείναι οι [1,3,4]:

• DES

• Triple DES

• AES

• Blowfish

• RC2

• RC4

• IDEA

• DES

Οι αλγόριθμοι αυτοί ανήκουν στηνκατηγορία των κωδίκων τύπου δέσμης(block). Ένας κώδικας δέσμης δέχεται δυοεισόδους, ένα κλειδί μεγέθους k-bit κι ένακείμενο M μεγέθους L-bit κι επιστρέφει ένα

κρυπτογραφημένο κώδικα C μεγέθους L-bit.

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

DES

Είναι ο πιο γνωστός κρυπτοαλγόριθμοςτύπου δέσμης, αν και πλέον δε θεωρείταιασφαλής [1,3-7]. Πρόκειται για έναναξιοσημείωτα καλοσχεδιασμένο αλγόριθμο,ευρεία διαδεδομένο. Κάθε φορά πουχρησιμοποιείτε ένα ATM χρησιμοποιείτε τονDES. Μήκος κλειδιού k = 56 bits και μήκοςδέσμης L = 8 bytes = 8x8 = 64 bits. Το 1977υιοθετήθηκε από την NBS (πλέον NIST) ωςFIPS PUB 46 και αποδείχθηκε αξιοσημείωταασφαλής. Σήμερα μπορεί να σπάσει σελιγότερο από 24 ώρες.

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

παραχθεί εκ νέου το αρχικό μήνυμα. (Σχήμα3)

Ισχύς του DES: 56-bit κλειδιά παράγουν256 = 7.2x1016 δυνατές τιμές, πράγμα πουσημαίνει ότι η αναζήτηση με δοκιμή όλωντων πιθανών συνδυασμών (brute force)είναι δύσκολη, αλλά πιθανή. Π.χ., τονΙούλιο του 1998, το Electronic Frontier Foun-dation (EFF) ανακοίνωσε ότι έσπασε μιακρυπτογράφηση DES με μια μηχανή ειδικάφτιαγμένη για να σπάσει τον αλγόριθμο,η οποία κόστισε $250,000 και χρειάστηκε22 ώρες και 15 λεπτά. Φυσικά, σήμεραείναι ζήτημα ωρών για να σπάσει ο DESκαι γι' αυτό το λόγο έχουν αναπτυχθεί νέοιαλγόριθμοι όπως ο Triple DES και ο AES.

Σχήμα 3: Λειτουργία της συμμετρικήςκρυπτογραφίας (DES)

Σύμφωνα με το νόμο του Μoore που μαςλέει ότι η υπολογιστική ισχύς διπλασιάζεταικάθε 18 μήνες, για να παραμείνει οαλγόριθμος αποτελεσματικός, το μέγεθοςκλειδιού πρέπει να είναι τουλάχιστο 128bits. Το μέγεθος δέσμης του AES είναι 16bytes = 16x8 = 128 bits.

5

Page 6: Ubuntistas issue 9 may june july 2010

HOW-TO

Το πρόβλημα με τους κώδικες δέσμηςείναι ότι το κείμενο που θέλουμε νακρυπτογραφήσουμε θα πρέπει να έχειμέγεθος ακέραιο πολλαπλάσιο τουμεγέθους του μπλοκ του κώδικα, π.χ.πολλαπλάσιο των 56 bits για τον DES. Αναυτό δεν ισχύει, τότε καταφεύγουμε στηντεχνική padding, όπου γεμίζουμε κατάλληλατα υπόλοιπα bits, ώστε να φθάσουμε στοεπιθυμητό μέγεθος. Υπάρχουν διάφοροιαλγόριθμοι padding, όπως PKCS #5, PKCS#7, ISO10126-2, ISO7816-4, X9.23, TrailingBit Complement κ.ά. [8].

Στον αντίποδα υπάρχουν οι κώδικεςροής, που επιτρέπουν την κρυπτογράφησηκειμένου οποιουδήποτε μεγέθους. Αυτότο επιτυγχάνουν με το να εφαρμόζουν τηνπράξη XOR μεταξύ του κειμένου προςκρυπτογράφηση και μιας ακολουθίας απόbits, όπως φαίνεται στο ακόλουθο σχήμα(Σχήμα 4):

Σχήμα 4: Σύγκριση αλγορίθμωνκρυπτογράφησης δέσμης (block) και ροής

(stream)

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

package gr . ubun t i s tas . issue9 ;

import java . i o . UnsupportedEncodingException ;

import java . se cu r i t y . Inva l idKeyExcept ion ;

import java . se cu r i t y . NoSuchAlgorithmException ;

import java . se cu r i t y . SecureRandom ;

import javax . c ryp to . BadPaddingException ;

import javax . c ryp to . Cipher ;

import javax . c ryp to . I l l ega lB lockS i zeExcep t i on ;

import javax . c ryp to . KeyGenerator ;

import javax . c ryp to . NoSuchPaddingException ;

import javax . c ryp to . SecretKey ;

import org . apache . commons . codec . b inary . Base64 ;

/ * *

* Encrypts and then decrypts a message from the standard inpu t .

* @author hawk

*

* /

public class SimpleSymmetricExample {

private SecretKey key ; / / sec re t key

private Cipher c ipher ; / / c ipher being used

/ * *

* I n i t i a l i z e s the symmetric encryp t ion a lgo r i t hm

* @param a lgo r i t hm to use , e . g . 'AES ' , 'DES ' e tc .

* @throws NoSuchAlgorithmException i f a lgo r i t hm does not

e x i s t

* @throws NoSuchPaddingException

* /

SimpleSymmetricExample ( f i n a l St r i ng a lgo r i thm ) throws

NoSuchAlgorithmException , NoSuchPaddingException

{

key = generateKey ( a lgo r i t hm ) ;

c ipher = Cipher . ge t Ins tance ( a lgo r i t hm ) ;

}

/ * *

* Generates a random secre t key .

* @param a lgo r i t hm to use , e . g . HmacSHA1, SHA etc .

* @throws NoSuchAlgorithmException i f the a lgo r i t hm

s t r i n g passed as a parameter i s not recognized

* /

private SecretKey generateKey ( f i n a l St r i ng a lgo r i t hm )

throws NoSuchAlgorithmException {

KeyGenerator keygen = KeyGenerator . ge t Ins tance (

a lgo r i thm ) ;

keygen . i n i t (new SecureRandom ( ) ) ;

return keygen . generateKey ( ) ;

}

/ * *

* Encrypts the <code>message</ code>

* @param message p l a i n t e x t message to be encrypted

* @return a base64 encoded rep resen ta t i on o f the

encrypted message

* @throws UnsupportedEncodingException i f encoding i s

not UTF−8

* @throws Inva l idKeyExcept ion

* @throws BadPaddingException

* @throws I l l ega lB lockS i zeExcep t i on

* /

St r i ng encrypt ( f i n a l St r i ng message ) throws

UnsupportedEncodingException , Inva l idKeyExcept ion

,

I l l ega lB lockS izeExcep t i on , BadPaddingException {

byte [ ] p l a i nTex t = message . getBytes ( "UTF−8" ) ;

byte [ ] c ipherTex t = new byte [ p l a i nTex t . leng th ] ;

c ipher . i n i t ( Cipher .ENCRYPT_MODE, key ) ;

c ipherTex t = c ipher . doFina l ( p l a i nTex t ) ;

Base64 encoder = new Base64 ( ) ;

return encoder . encodeToString ( c ipherTex t ) ;

}

/ * *

* Decrypts the <code>encryptedMessage </ code>

* @param encryptedMessage c ipher t e x t

* @return the decrypted message

* @throws UnsupportedEncodingException i f encoding i s

not UTF−8

* @throws Inva l idKeyExcept ion

* @throws I l l e g a l B lo ck S i z eEx c ep t i o n

* @throws BadPaddingException

* /

St r i ng decrypt ( f i n a l St r i ng encryptedMessage ) throws

UnsupportedEncodingException , Inva l idKeyExcept ion

,

I l l ega lB lockS izeExcep t i on , BadPaddingException {

Base64 decoder = new Base64 ( ) ;

byte [ ] c ipherTex t = decoder . decode (

encryptedMessage ) ;

byte [ ] p l a i nTex t = new byte [ c ipherTex t . leng th ] ;

c ipher . i n i t ( Cipher .DECRYPT_MODE, key ) ;

p la inTex t = c ipher . doFina l ( c ipherTex t ) ;

return new St r i ng ( p la inTex t , "UTF−8" ) ;

}

/ * *

* @param args

* /

public s ta t i c void main ( S t r i ng [ ] args ) throws Except ion {

S t r i ng message = " " ;

i f ( args . leng th > 0) {

for ( i n t i =0; i <args . leng th ; i ++)

message += args [ i ]+ "␣" ;

} else {

System . out . p r i n t l n ( "Usage : ␣ java␣−cp␣ . : l i b

/ commons−codec−1.4. j a r ␣gr . ubun t i s tas .

issue9 . SimpleSymmetricExample␣<p l a i n ␣

t ex t > " ) ;

System . e x i t ( 1 ) ;

}

System . out . p r i n t l n ( " i npu t␣ t e x t ␣ : ␣" + message ) ;

SimpleSymmetricExample symmetric = new

SimpleSymmetricExample ( "AES" ) ;

/ / enc ryp t ion pass

St r i ng c ipherTex t = symmetric . encrypt (message ) ;

System . out . p r i n t l n ( " Cipher␣ t e x t : " + c ipherTex t ) ;

/ / dec ryp t ion pass

System . out . p r i n t l n ( " P la in␣ t e x t : ␣" + symmetric .

decrypt ( c ipherTex t ) ) ;

}

}

Για να μεταγλωτίσετε το πρόγραμμααπαιτείται να προσθέσετε τη βιβλιοθήκηcommons-codec.jar στο classpath, τηνοποία μπορείτε να κατεβάσετε από τηνιστοσελίδα http://commons.apache.org/codec/. Η βιβλιοθήκη αυτή περιέχει τηνκλάση Base64, η οποία μας επιτρέπει νααναπαριστούμε τους κώδικες σε μια πιοφιλική μορφή (την Base64).

6

Page 7: Ubuntistas issue 9 may june july 2010

HOW-TO

Μεταγλωττίστε και εκτελέστε τοπρόγραμμα. Ένα παράδειγμα εκτέλεσηςφαίνεται παρακάτω:

\ $ java −cp . : l i b / commons−codec−1.4. j a r gr . ubun t i s tas . issue9. SimpleSymmetricExampleThis i s a long message !

P la in t e x t i npu t : This i s a longmessage !

Cipher t e x t :4DQ+eTUCb4UcVClHSLwzfIXOV /F7t1bB2OosIAIkL+4=

P la in t e x t output : This i s along message !

Ας δούμε πως δουλεύει. Ξεκινάμεμε τη main(). Το πρόγραμμα δέχεταιαπό την είσοδο (πληκτρολόγιο) μιαακολουθία από λέξεις χωρισμένες μεκενά ή άλλους χαρακτήρες και τουςαποθηκεύει στη μεταβλητή message. Στησυνέχεια δημιουργεί ένα αντικείμενο τηςSimpleSymmetricExample, περνώνταςτον αλγόριθμο που θέλουμε ναχρησιμοποιήσουμε. Στο συγκεκριμένοπαράδειγμα περάσαμε τον AES, αλλάοποιοσδήποτε άλλος συμμετρικόςαλγόριθμος, όπως π.χ. ο DES θα δούλευετο ίδιο καλά. Η λίστα των αλγορίθμωνπου μπορείτε να χρησιμοποιήσετεεξαρτάται από τον πάροχο (provider)που θα χρησιμοποιήσετε (βλ. [8]).Τέτοιοι πάροχοι, πέραν της SunJCEφυσικά, είναι π.χ. η BouncyCastleκαι το Cryptix project. Οι αλγόριθμοι

είναι της μορφής αλγόριθμος/τρόπος/-padding, π.χ. DES/CBC/PKCS5Padding ήAES/ECB/NoPadding, όπου το τρόπος και τοpadding μπορούν να παραλειφθούν.

Στη συνέχεια καλείται η μέθοδοςencrypt(message), η οποία επιστρέφειτο κρυπτογραφημένο μήνυμα σε μορφήBase64 και το εμφανίζει στην έξοδο, ενώτέλος καλείται η decrypt(cipherText),η οποία επιστρέφει το αρχικό μήνυμα.Όπως είδαμε, η SimpleSymmetricExampleπεριλαμβάνει τρεις μεθόδους: τη μέθοδοκατασκευής (constructor), την encrypt()και την decrypt().

Η μέθοδος κατασκευής αρχικοποιεί τημεταβλητή key (το μυστικό κλειδί), καθώς καιτον αλγόριθμο cipher, τον οποίο περνάμεως παράμετρο στη μέθοδο (βλ. και σχήμα3). Η αρχικοποίηση του cipher είναι εύκολη:Cipher.getInstance(algorithm), όπουalgorithm = "AES" στο παράδειγμά μας.Για το μυστικό κλειδί, ο πιο εύκολος τρόποςείναι να αφήσουμε τη Java να δημιουργήσειένα κλειδί, χρησιμοποιώντας την κλάσηKeyGenerator και αρχικοποιώντας τημε έναν τυχαίο αριθμό (βλ. [9]). ΗSecureRandom() έχει δημιουργηθεί απότη Sun γι' αυτόν ακριβώς το σκοπό. Ηδημιουργία του κλειδιού περιλαμβάνει τρίαβήματα, τη δημιουργία ενός αντικειμένουτύπου KeyGenerator, την αρχικοποίησήτου με έναν τυχαίο αριθμό και, τέλος,τη δημιουργία του κρυφού συμμετρικούκλειδιού (βλ. τη μέθοδο generateKey()).

H encrypt() μετατρέπει το κείμενο

σε έναν πίνακα από bytes, καλείτην cipher.init() σε ENCRYPT_MODE,περνώντας της και το μυστικό κλειδί, καιστη συνέχεια καλεί τη cipher.doFinal(),περνώντας της το κείμενο που θέλουμενα κρυπτογραφήσουμε. Τέλος, ημέθοδος κωδικοποιεί και επιστρέφει τοκρυπτογραφημένο μήνυμα σε μορφήBase64.

Η decrypt() επιτελεί την ακριβώςαντίστροφη διαδικασία. Αποκωδικοποιείτο μήνυμα από Base64 μορφή και στησυνέχεια καλεί πάλι την cipher.init()σε DENCRYPT_MODE, περνώντας της το ίδιομυστικό κλειδί, και τη cipher.doFinal(),περνώντας της το κρυπτογραφημένοκείμενο και επιστρέφοντας το αρχικό κείμενοσε μορφή UTF-8.

Δυστυχώς, το παραπάνω πρόγραμμαδεν δουλεύει για όλες τις περιπτώσεις.Αν βιαστήκατε να χρησιμοποιήσετεάλλους αλγόριθμους πέραν των DES,AES, π.χ. DES/CBC/PKCS5Padding ήAES/ECB/NoPadding ή οποιονδήποτεάλλον συνδυασμό του SunJCE, θαδείτε ότι το πρόγραμμα αποτυγχάνει.Ορισμένοι τρόποι (modes), όπως οCTR και ο CBC, χρειάζονται μιαακολουθία αρχικοποίησης (IV) τύπουIvParameterSpec για να δουλέψουν.Επίσης, η generateKey() δεν καταλαβαίνειπ.χ. το DES/CBC/PKCS5Padding και θαπρέπει να της περάσετε μόνο το DES, π.χ.με την παρακάτω γραμμή κώδικα:

key = generateKey ( a lgo r i thm .

7

Page 8: Ubuntistas issue 9 may june july 2010

HOW-TO

indexOf ( ' / ' ) == −1 ?a lgo r i t hm : a lgo r i t hm . subs t r i ng

(0 , a lgo r i t hm . indexOf ( ' / ' ) ) ) ;

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

Επίλογος

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

Πηγές

1. http://el.wikipedia.org/wiki/������������

2. Caesar's cipher,http://www.secretcodebreaker.com/caesar-cipher.html

3. Menezes A., van Oorschot P., Van-stone S. (1997), Handbook of AppliedCryptography, CRC Press.

4. Schneier B. (1996), Applied Cryptog-raphy, John Wiley & Sons.

5. Anderson R. (2001), Security Engi-neering, John Wiley & Sons.

6. Stallings W. (2005), Cryptography andNetwork Security, Prentice Hall.

7. DES, http://en.wikipedia.org/wiki/Data_Encryption_Standard

8. Hook D. (2005), Beginning Cryptogra-phy with Java, Wrox.

9. Knudsen J. (1998), Java Cryptogra-phy, O' Reilly.

10. Schratt M. (2009), “RSA & AES inJAVA”, Hakin9, τεύχος 5, σελ. 52-57.

11. Hanna T. (2010), “Methods of Se-crecy”, Hakin9, τεύχος 2, σελ. 54-57.

12. Hanna T. (2010), “Symmetric Se-crets”, Hakin9, τεύχος 3, σελ. 50-54.

>>> import hashlib>>> m = hashlib.md5()>>> m.update("Nobody inspects")>>> m.update(" the spammish repetition")>>> m.digest()'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'>>> m.digest_size16>>> m.block_size64

Κρυπτογραφικές τεχνικές σε python

hashlib: Secure hashes και message digest

To module hashlib υλοποιεί μια κοινή διεπιφάνεια σε διάφορους αλγόριθμους, μεταξύ των οποίων οι SHA1, SHA224, SHA256, κ.α. και τον RSA αλγόριθμο MD5.

Ένα απλό παράδειγμα δείχνει τη χρήση του:

Dimitris

Dimitris

Ένας από τους λόγους που ο αλγόριθμος RSA (προέρ-χεται από τα αρχικά των R.L. Rivest, A. Shamir, και L.Adleman που τον ανακάλυψαν το 1977) είναι τόσο επιτυχημένος είναι το γεγονός ότι η παραγοντοποίηση ενός μεγάλου αριθμού είναι ένας από τους πιο χρονοβόρους αλγόριθμους.

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

Το 1998 αποκαλύφθηκε ότι ο Clifford Cocks είχε μελετήσει την κρυπτογράφηση μηνυμάτων χρησιμοποιώντας παρόμοιες μεθόδους ήδη από το 1973, αλλά η δουλειά του είχε κρατηθεί μυστική. [1]

Θυμάστε ένα κενό ασφαλείας στο debian πριν από κάτι χρόνια; Είχε να κάνει με τη κρυπτογράφηση RSA στο πρόγραμμα ssh. Δύο σημαντικοί αριθμοί p και q στον αλγόριθμο δεν πρέπει να είναι απλώς "τυχαίοι" πρώτοι αριθμοί. Ένας προγραμματιστής που διόρθωσε ένα σφάλμα σε ένα μέρος του κώδικα εισήγαγε αυτό το κενό ασφαλείας. Φυσικά για τους απλούς χρήστες δε σημαίνει τίποτε, απλώς τα κλειδιά που δημιουργήθηκαν με εκείνη την έκδοση είναι λιγότερο ασφαλή (δηλαδή αντί να πάρουν χρόνια για να "σπάσουν" θα έπαιρναν μέρες).

Ένας αριθμός της μορφής 2^n - 1 δε μπορεί να είναι πρώτος εκτός κι αν ο n είναι πρώτος. Το 1644, ο Marin Mersenne εξέπληξε τους σύγχρονούς του όταν δήλωσε ότι οι αριθοί 2^p - 1 είναι πρώτοι για p = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257, και για κανένα άλλο p μικρότερο του 257. Οι αριθμοί Mersenne σχετίζονται με το τελευταίο θεώρημα του Fermat, το οποίο αποδείχθηκε το 1993 από τον Andrew Wiles.

To 1996 επαληθεύθηκε σε έναν Cray T94 ύστερα από 8,3 ώρες ότι ο αριθμός 2^1257787 - 1 είναι πρώτος, ενώ το 1997 επαληθεύθηκε ύστερα από 15 ημέρες σε έναν 100MHz Pentium PC ότι ο αριθμός 2^2976221 - 1 είναι πρώτος.

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

Πηγές: [1] The Art of Computer Programming, D.E. Knuth.

Παραγοντοποίηση σε γινόμενο πρώτων παραγόντων

8

Page 9: Ubuntistas issue 9 may june july 2010

ΕΠΙΣΤΗΜΟΝΙΚΑ

του Χατζηπαντελή Παντελή

GSLGNU Scientific Library.

H GSL (GNU Scientific Library)είναι μια συλλογή από ρουτίνες γιααριθμητική ανάλυση και υπολογισμούς.Όλες οι ρουτίνες της έχουν γραφτεί σεC, εξολοκλήρου από την αρχή, ειδικάγια τη χρήση τους στο πακέτο GSL.Φυσικά, αποτελούν ελεύθερο λογισμικόπου διατίθεται κάτω από την άδειαGPLv3. Οι προσφερόμενες ρουτίνεςκαλύπτουν σχεδόν κάθε πεδίο όπουγίνεται χρήση λογισμικού για αριθμητικήανάλυση. Εκτείνονται από "απλές" ρουτίνεςΓραμμικής Άλγεβρας και ΜετασχηματισμώνFourier έως πιο εξειδικευμένες ρουτίνεςΚυματιδιακής Ανάλυσης και ΠολυδιάστατηςΕλαχιστοποίησης. Επίσης, η GSLπροσφέρει τις δικές της μεθόδους γιαπαραγωγή καλών τυχαίων αριθμών,ένα μάλλον μόνιμο πρόβλημα όσωνπρογραμματίζουν σε C/C++. Το κύριοπλεονέκτημα της GSL προφανώς είναι ηταχύτητα της. Αυτή τη στιγμή, πρόκειταιγια μία από τις πιο διαδεδομένες ρουτίνεςαριθμητικής ανάλυσης και επιστημονικούπρογραμματισμού, και συνεχώς κερδίζειέδαφος έναντι άλλων πακέτων όπως το LA-PACK. Από την άλλη, το κύριο μειονέκτηματης, όπως και όλων των εξειδικευμένων

πακέτων επιστημονικού προγραμματισμού,είναι η δυσκολία της. Πολύ απλά, η GSLδεν είναι ένα φιλικό πακέτο σχεδιασμένο γιατον μέσο οικιακό χρήστη. Προαπαιτεί καλήκατανόηση της C/C++, ειδικά σε ό,τι αφοράθέματα χρήσης δεικτών και, σε μικρότεροβαθμό, διαχείρισης μνήμης.

Η Εγκατάσταση

Αν και στο παρελθόν η GSL φημιζότανγια την περίπλοκη εγκατάσταση της (κάτιπου εξακολουθεί να ισχύει στα Windows),πλέον το apt-get προσφέρει μια γρήγορηκαι πανεύκολη διαδικασία εγκατάστασης.Ο χρήστης θα χρειαστεί να εγκαταστήσειτα πακέτα gsl-bin, gsl-doc-info, libgsl0-dbg,libgsl0-dev και libgsl0ldbl. Σε περίπτωσηπου κάποιος επιθυμεί να εγκαταστήσειτην GSL από τα binary που διατίθενταιστο http://www.gnu.org/software/gsl/,συνιστάται η ευλαβική προσήλωση στιςοδηγίες που δίνονται. Διαφορετικά,είναι πολύ εύκολο να δημιουργηθεί έναςαχταρμάς από διάσπαρτους συμβολικούςσυνδέσμους...Το Πρόγραμμα: Το ακόλουθο πρόγραμμαδεν κάνει τίποτα άλλο παρά να υπολογίζειτο ολοκλήρωμα

∫ 30 3x3log(x3)dx. Αν και

απλό, το πρόγραμμα αυτό είναι γραμμένο σεC++ και παρουσιάζει την τυπική δομή ενόςπρογράμματος GSL σε C/C++. Πρέπει ναυπογραμμίσουμε εδώ ότι η GSL προσφέρειμια πλειάδα από διαφορετικά binding pa-ckages για να ενσωματώνεται σε διάφορεςγλώσσες προγραμματισμού.

Το Πρόγραμμα

#include <iostream>#include <iomanip>#include <gsl/gsl_integration.h>using namespace std;double f (double x, void * params) {

double f = 3 * pow(x,3) * log(pow(x,3));return f; }

intmain () {

gsl_integration_workspace * w =gsl_integration_workspace_alloc (10000);

double result, error;gsl_function F;F.function = &f;gsl_integration_qags (&F, 0, 3, 0,

1e-7, 10000, w, &result, &error);cout << "result = " << setprecision(12)

<< result << endl<< "estimated error = " << error << endl;gsl_integration_workspace_free (w);return 0; }

9

Page 10: Ubuntistas issue 9 may june july 2010

ΕΠΙΣΤΗΜΟΝΙΚΑ

Μεταγλώττιση

Και έφτασε η στιγμή της μεταγλώττισης...H GSL πρέπει να γίνεται linked κατά τηδιαδικασία compile. Αυτό σημαίνει ότι, εκτόςαπό τα όποια ορίσματα χρησιμοποιεί ο κάθεχρήστης, ο compiler πρέπει να ειδοποιείταιγια το πού βρίσκονται οι επιπρόσθετεςβιβλιοθήκες GSL. Ο παραπάνω κώδικαςγίνεται εύκολα compile με τη χρήση τηςεντολής:

g++ -lm -lgsl -lgslcblasnumIntegrator.cpp -o numIntegrator.out

Eκτελώντας την εντολή, λαμβάνουμε τοαποτέλεσμα της αριθμητικής ολοκλήρωσηςπου ορίσαμε παραπάνω: 1

./numIntegrationresult = 154.659589614estimated error = 2.20354841232e-06

H Τελική Αποτίμηση: Όπως προαναφέραμε,η GSL δεν είναι παιχνίδι για παιδιά. Δενείναι εύκολη, η τεκμηρίωσή της είναι κάθεάλλο παρά πλήρης, και απαιτεί χρόνο καιυπομονή από το χρήστη της. Πρόκειταιγια καθαρόαιμο αγωνιστικό αυτοκίνητο, πουμε τις ιδιοτροπίες του και τη νευρική τουσυμπεριφορά απλά θα κουράσει και θα

εκνευρίσει τον μέσο οδηγό. Από την άλλη,στις κακοτράχαλες ειδικές διαδρομές τουnumerical computing όπου άλλα πιο φιλικάοχήματα (πχ. scipy) περνάνε αργά και μεπροσοχή... η GSL πάει με τις πάντες!

Η εναλλακτική λύση: Scipyτου Dimitris

To Scipy είναι ένα πακετό γιαεπιστημονικούς υπολογισμούς στην python.Το υποπακέτο scipy.integrate προσφέρειαρκετές μεθόδους ολοκλήρωσης συμπερι-λαμβανομένου και ενός λύτη κανονικώνδιαφορικών εξισώσεων. Η συνάρτηση quadπροσφέρεται για την ολοκλήρωση μιαςσυνάρτησης μιας μεταβλητής μεταξύ δύοσημείων. Για παράδειγμα η ολοκλήρωσητης προηγούμενης συνάρτησης στοδιάστημα [0,3] γίνεται πολύ απλά:

>>> result = scipy.integrate.quad(lambda x: 3*x**3*log(x**3), 0,3)

>>> print result(154.65958961432, 2.2035484175671e-06)

Το πρώτο όρισμα της quad είναι ένα"καλέσιμο" Python αντικείμενο (δηλ. μιασυνάρτηση, μέθοδος ή class instance). Στοπαραπάνω παράδειγμα χρησιμοποιήσαμε

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

Οι δυνατότητες της scipy επεκτείνονταικαι στη βελτιστοποίηση. Περιλαμβάνειαλγόριθμους όπως οι Nelder-Mead, Pow-ell, conjugate gradient, quasi-Newton, κ.α.Η χρήση της δίνεται επιγραμματικά με έναπαράδειγμα:

>>> from scipy.optimize import fmin>>> def rosen(x):... """The Rosenbrock function"""... return sum(100.0*(x[1:]-

x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)>>> x0 = [1.3, 0.7, 0.8, 1.9, 1.2]>>> xopt = fmin(rosen, x0, xtol=1e-8)Optimization terminated successfully.

Current function value: 0.000000Iterations: 339Function evaluations: 571

>>> print xopt[ 1. 1. 1. 1. 1.]

Τέλος, περιλαμβάνει συναρτήσεις γιαπαρεμβολή, μετασχηματισμούς Fourier,γραμμική άλγεβρα, επεξεργασία σήματοςκ.α. Tο πακέτο μπορεί να εγκατασταθεί απότο synaptic.Πηγή: http://www.scipy.org/

1 Για του λόγου το αληθές, αυτό είναι και το αποτέλεσμα των πράξεων στο octave:octave:1> X = sort(3.* rand(1,10000));octave:2> Y =@(x) 3.*x. ̂ 3*log(x. ̂3);octave:3> quadgk(Y,0,3)ans = 154.66

10

Page 11: Ubuntistas issue 9 may june july 2010

REVIEW

του Κωστάρα Γιάννη

NetbeansΈνα σύγχρονο IDE.

Όσοι ασχολείστε με τη Java, σίγουρατο γνωρίζετε. Αλλά και οι προγραμματιστέςάλλων γλωσσών, όπως C/C++, Perl/PHP,Ruby/RoR, Python, Groovy/Grails, Scalaκ.ά. μπορεί να έχετε ακούσει γι' αυτό.Πρόκειται για το Ολοκληρωμένο ΠεριβάλλονΕργασίας (ΟΠΑ) ή Integrated Develop-ment Environment (IDE) της SUN, τοοποίο με τη βοήθεια προσθέτων (plug-ins) μπορεί να καλύψει ένα μεγάλο εύροςγλωσσών προγραμματισμού. Το Netbeansδεν έχει τίποτα να ζηλέψει από το αντίπαλοδέος, το Visual Studio .NET της Microsoft,διαθέτοντας όλα όσα θα ζητούσε έναςσύγχρονος προγραμματιστής. Υποστηρίζειπολλές γλώσσες προγραμματισμού καιδιαθέτει χρήσιμα χαρακτηριστικά που θαεπιταχύνουν το χρόνο ανάπτυξης τωνεφαρμογών σας, σε όποια γλώσσα κι ανγράφετε. Φυσικά, το Netbeans έχει πολλούςάξιους ανταγωνιστές, όπως το βετεράνοEclipse, το ανοικτού κώδικα παιδί τηςIBM, που διαθέτει και τους περισσότερουςθαυμαστές, το IDEA της Jetbrains, το οποίοπλέον διατίθεται και σε έκδοση ανοικτούκώδικα, ή το JDeveloper της Oracle, μεπολλούς Wizard για επικοινωνία με τοbackend (δηλ. την Oracle DBMS), για να

αναφέρουμε τα πιο γνωστά.

Εγκατάσταση

Το Netbeans μπορείτε να το βρείτεστο Κέντρο λογισμικού Ubuntu στηνκατηγορία Εργαλεία Προγραμματισμού> Περιβάλλοντα Ανάπτυξης Εφαρμογών.Η τελευταία έκδοση 10.04 του Ubuntuυποστηρίζει την προηγούμενη έκδοση 6.8του Netbeans, ενώ η τρέχουσα έκδοσηείναι η 6.9. Όσοι δεν έχετε αναβαθμιστείακόμα στην έκδοση 10.04 του Ubuntu, θαβρείτε την προηγούμενη έκδοση 6.7 τουNet-beans. Βέβαια, μπορείτε να εγκαταστήσετετο Netbeans και κατευθείαν από το sitehttp://netbeans.org/downloads/index.html,αν π.χ. θέλετε να εγκαταστήσετε τηντελευταία έκδοση ή να επιλέξετε την έκδοσηπου σας ταιριάζει (βλ. Εικόνα 1).

Εικόνα 1: Η ιστοσελίδα με τις εκδόσεις τουNetbeans

Μπορείτε π.χ. να κατεβάσετε μόνοτην έκδοση για C/C++, αν προγραμματίζετεμόνο σε αυτή τη γλώσσα. Μια έκδοσηπου ίσως θα σας ενδιέφερε είναι η 6.5, ηοποία είχε ένα πολύ καλό visual εργαλείογια BPEL, καθώς και τις βιβλιοθήκες Wood-stock για ανάπτυξη εφαρμογών ιστού σεJava Server Faces. Δυστυχώς, οι νεότερεςεκδόσεις δεν υποστηρίζουν πλέον αυτές τιςβιβλιοθήκες, ενώ το εργαλείο BPEL δενείναι τόσο καλό πλέον. Μη με ρωτάτεγιατί. Αν εγκαταστήσατε το πρόγραμμααπό το Κέντρο λογισμικού Ubuntu, τότεμπορείτε να εκκινήσετε το Netbeans απότο μενού Εφαρμογές > Προγραμματισμός >Netbeans IDE 6.8.

Εικόνα 2: Το αρχικό περιβάλλον του Netbeans

Το πρώτο πράγμα που ίσως σαςκάνει εντύπωση είναι η απλότητα του

11

Page 12: Ubuntistas issue 9 may june july 2010

REVIEW

περιβάλλοντος, με λίγα κουμπιά και μόνοτα απολύτως απαραίτητα εργαλεία. Απότην αρχική σελίδα μπορείτε να επιλέξετενα παρακολουθήσετε διάφορα tutorials, γιανα μάθετε περισσότερα για το περιβάλλον.Το Netbeans υποστηρίζει, όπως είπαμε,πολλές γλώσσες προγραμματισμού.Μπορείτε να προσθέσετε όποια γλώσσαθέλετε, αρκεί να κατεβάσετε το κατάλληλοπρόσθετο. Υποστηρίζει επίσης πολλάσυστήματα version control (CVS, Subver-sion, Mercurial κλπ.), και φυσικά τα πάνταγύρω από τη Java (Java SE, Swing, JavaEE, JavaFX, Java Web Services κλπ).Εμφανίστε τη λίστα με τα πρόσθετα απότο μενού Tools > Plugins.

Εικόνα 3: Το παράθυρο των προσθέτων τουNetbeans

Το πρώτο μας έργο

Ας δημιουργήσουμε ένα νέο έργο (project)κάνοντας κλικ στο δεύτερο κουμπί τηςγραμμής εργαλείων (New Project), ή απότο μενού File > New Project. Επιλέξτε την

κατηγορία C/C++ και το έργο C/C++ Qt Ap-plication, για να συγκρίνουμε το Netbeansμε το Qt Creator.

Εικόνα 4: Δημιουργία ενός νέου έργου Qt

Πατήστε το Next, δώστε HelloQtWorldως όνομα του έργου (Εικόνα 5) και στησυνέχεια πατήστε Finish.

Εικόνα 5: Δημιουργία της εφαρμογήςHelloQtWorld

Θα παρατηρήσετε ότι, στα αριστερά,στην καρτέλα Projects, το Netbeansδημιούργησε μια σειρά από φακέλους (βλ.Εικόνα 6) με τα απαραίτητα αρχεία.

Εικόνα 6: Το άδειο έργο HelloQtWorld

Κάνοντας διπλό κλικ στο αρχείοmain.cpp, παρατηρούμε ότι υπάρχουνλάθη τα οποία εμφανίζονται με ένα κόκκινοθαυμαστικό. Αν περάσετε από πάνω τουςτο δρομέα του ποντικιού, μπορείτε ναλάβετε περισσότερες πληροφορίες. Στησυγκεκριμένη περίπτωση, το Netbeansπαραπονιέται ότι δεν μπορεί να βρει τοQt. Πατήστε το κουμπί Run Main Project(το κουμπί με το πράσινο βελάκι) για ναπροσπαθήσετε να τρέξετε το πρόγραμμα.Εμφανίζεται το παράθυρο διαλόγου τηςΕικόνας 7.

Εικόνα 7: Resolve Missing Native Build Tools

12

Page 13: Ubuntistas issue 9 may june july 2010

REVIEW

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

john@ubuntu:~$ qmakeThe program 'qmake' can be found in thefollowing packages:* qt3-dev-tools* qt4-qmake

Try: sudo apt-get install <selectedpackage>

john@ubuntu:~$ sudo apt-get installqt4-dev-tools

Στη συνέχεια, προσθέστε την εντολή/usr/bin/qmake στο πεδίο Qmake Com-mand του παραθύρου της Εικόνας 7.Επαναλάβετε για τη /usr/bin/cmake:

john@ubuntu:~$ cmakeThe program 'cmake' is currently notinstalled. You can install it by typing:sudo apt-get install cmakejohn@ubuntu:~$ sudo apt-get installcmake

Επανεκκινήστε το Netbeans αν χρειάζεται.Πλέον τα λάθη θα πρέπει να έχουνεξαφανιστεί. Πατήστε πάλι το κουμπίRun Main Project για να εκτελέσετε τοέτοιμο πρόγραμμα που δημιούργησε τοNetbeans στη main.cpp. Συγχαρητήρια!Ας χρησιμοποιήσουμε το ίδιο πρόγραμματου τεύχους 5 του Ubuntistas. Αφούαντιγράψετε κι επικολλήσετε τον κώδικατης σελ. 21 του τεύχους στη main.cpp,

κάντε δεξί κλικ και Format για ναμορφοποιήσετε τον κώδικά σας. Oπανίσχυρος επεξεργαστής του Netbeansδιαθέτει πολλά καλούδια. Π.χ., μπορείτε ναβρείτε πού χρησιμοποιείται μια μεταβλητή ήμια μέθοδος κάνοντας δεξί κλικ πάνω της καιεπιλέγοντας Find Usages. Ή, μπορείτε νακάνετε κλικ πάνω σε μια μεταβλητή, μέθοδοή όνομα βιβλιοθήκης, πατώντας ταυτόχρονακαι το Ctrl, για να μεταβείτε στον ορισμό της(ή δεξί κλικ και επιλέγοντας Navigate > GotoDeclaration). Ακόμη, διαθέτει έναν αριθμόαπό χρήσιμα Refactorings, όπως Rename,Encapsulate Fields κλπ.

Εικόνα 8: Το πρώτο σας πρόγραμμα σε Qt

Το αποτέλεσμα εκτέλεσης τουπρογράμματος φαίνεται στην Εικόνα 9.

Εικόνα 9: Το αποτέλεσμα της εκτέλεσης τουπρώτου προγράμματός σας σε Qt

Όπως όμως και με το Qt Designer,έτσι και με το Netbeans μπορούμε νασχεδιάσουμε και το γραφικό κομμάτι τηςεφαρμογής μας. Όπως και στο Β' μέροςτου άρθρου στο τεύχος 6 του Ubuntistas,κάντε δεξί κλικ στο έργο HelloQtWorld στηνκαρτέλα Projects και επιλέξτε New > NewQt Form. Επιλέξτε Dialog without buttonsως Form Type και το κουμπί επιλογής Cre-ate C++ wrapper class. Πατώντας το κουμπίFinish δημιουργούνται τρία αρχεία και τοNetbeans ανοίγει αυτόματα το Qt Designerγια να επεξεργαστείτε τη φόρμα σας. Απόεδώ και πλέον τα βήματα είναι τα ίδια όπωςπεριγράφονται στο τεύχος 6.

Εικόνα 10: Παράθυρο δημιουργίας νέαςφόρμας Qt

13

Page 14: Ubuntistas issue 9 may june july 2010

REVIEW

Παρατηρήστε ότι εμφανίζονται ορισμέναλάθη μεταγλώτισης. Π.χ. το Netbeansδεν αναγνωρίζει το αρχείο κεφαλίδαςui_Dialog.h και παραπονιέται για τη μέθοδοsetupUi. Αυτά τα λάθη προκύπτουν κατάτη διάρκεια της πρώτης μεταγλώτισης.Πατήστε το κουμπί Clean and Build MainProject για να διορθωθούν. Παρατηρήστε,επίσης, πως οι διάφορες μεταβλητέςπου αναφέρονται στα widgets του Qtεμφανίζονται με πράσινο χρώμα στονεπεξεργαστή κειμένου του Netbeans (βλ.Dialog.cpp). Πατήστε το κουμπί Run MainProject για να τρέξετε το πρόγραμμα και ναεπιβεβαιώσετε ότι δουλεύει όπως και στοτεύχος 6.

Εικόνα 11: Εκτέλεση του προγράμματος τουτεύχους 6

Το πρώτο μας έργο σε Java

Ας ξαναγράψουμε το παραπάνωπρόγραμμα σε Java/Swing για νασυγκρίνουμε τις δυο γλώσσες και τιςβιβλιοθήκες γραφικών που διαθέτουν, αλλάκαι για να γνωρίσουμε τον πανίσχυροεπεξεργαστή κειμένου Java του Netbeans.Δημιουργήστε ένα νέο έργο τύπου Java Ap-plication, όπως φαίνεται στην παρακάτωεικόνα.

Εικόνα 12: Δημιουργία ενός έργου JavaApplication

Πατήστε Next και δώστε HelloSwingAp-plication ως το όνομα του έργου (βλ. Εικόνα13):

Τέλος, πατήστε Finish. Το Netbeansδημιουργεί το έργο και ανοίγει την κλάσηMain. Πάμε να δημιουργήσουμε τη φόρμαμας, όπως και στο έργο Qt. Κάντε δεξί κλικπάνω στο έργο HelloSwingApplication καιεπιλέξτε New > Other > Swing GUI Forms> JFrame Form.

Εικόνα 13: Δημιουργία του έργουHelloSwingApplication

Δώστε της το όνομα κλάσης Dialog καιτοποθετήστε τη στο package helloswingap-plication, που είναι και η Main. Το Netbeansάνοιξε τη φόρμα σε προβολή σχεδίασης (βλ.Εικόνα 14). Στο κάτω αριστερό μέρος θαβρείτε επιλεγμένη την καρτέλα ComponentInspector, όπου εμφανίζεται ένα δέντρο τωνcomponents της φόρμας σας. Κάντε δεξίκλικ στο JFrame και επιλέξτε Set Layout >BorderLayout. Επιλέξτε μια ετικέτα (Label)από τα Swing Controls που εμφανίζονταιδεξιά, και σύρετέ τη στο κέντρο της φόρμας.Κάντε δεξί κλικ στο jLabel1 στον Compo-nent Inspector, επιλέξτε Edit Text και ορίστεσαν κείμενο της ετικέτας Place for Image.Πάλι δεξί κλικ στην ετικέτα στον Compo-nent Inspector, Change variable name... καιδώστε lblImage. Αυτό θα είναι το όνοματης μεταβλητής που θα χρησιμοποιήσουμεστο πρόγραμμα για να προσπελάσουμε τηνετικέτα. Επιλέξτε ένα Panel από τα SwingContainers και σύρτε το στο κάτω μέρος της

14

Page 15: Ubuntistas issue 9 may june july 2010

REVIEW

φόρμας, κάτω από την ετικέτα. Αλλάξτετο όνομα της μεταβλητής από jPanel1 σεbuttonPanel, όπως είδαμε προηγούμενα.Αλλάξτε το layout σε FlowLayout. Σύρτε δυοbuttons στο buttonPanel και αλλάξτε τους ταστοιχεία, όπως παρακάτω: Text: Open ExitVariable name: btnOpen btnExit Mnemonic:O X

Εικόνα 14: Το έργο HelloSwingApplication στοNetbeans

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

new Dialog().setVisible(true);

Παρατηρήστε ότι, όσο πληκτρολογείτε,εμφανίζεται το σύστημα βοήθειας τουNetbeans, παρέχοντάς σας λεπτομερείςπληροφορίες για κάθε μέθοδο πουχρειάζεστε. Μπορείτε να πατήσετεοποιαδήποτε στιγμή Ctrl + Space για ναεμφανίσετε αυτό το μενού. Το Netbeansπαρέχει επίσης πολλές συντομεύσεις, π.χ.μπορείτε να πληκτρολογήσετε sout κάτωαπό την παραπάνω γραμμή και να πατήσετε

Tab. Τρέξτε το πρόγραμμά σας. Αν όλαπήγαν καλά, τότε θα πρέπει να δείτε έναμικρό παράθυρο με την ίδια εμφάνιση όπωςκαι η φόρμα σας, αλλά όχι λειτουργικόακόμα. Κλείστε το παράθυρο και επιστρέψτεστην κλάση Dialog. Κάντε δεξί κλικ στοκουμπί Exit και επιλέξτε Events > Actions >actionPerformed. Θα μεταβείτε στον κώδικατης φόρμας. Προσθέστε τις ακόλουθεςγραμμές κώδικα:

this.setVisible(false);this.dispose();

Πατήστε το κουμπί Design και επαναλάβετετη διαδικασία για το κουμπί Open:

final JFileChooser fc = newJFileChooser();

fc.setAcceptAllFileFilterUsed(false);fc.addChoosableFileFilter(

new ImgFilter());

int returnVal = fc.showOpenDialog(this);

if (returnVal == JFileChooser.APPROVE_OPTION) {

File file = fc.getSelectedFile();try {

BufferedImage image = ImageIO.read(file);

lblImage.setIcon(newImageIcon(image));

lblImage.setText("");} catch (IOException ex) {

Logger.getLogger(Dialog.class.getName()).log(Level.SEVERE,

null, ex);}

}

Θα εμφανιστούν πολλά λάθη που οφείλονταιστο ότι το Netbeans δεν αναγνωρίζεικάποιες κλάσεις. Αυτό διορθώνεταιπολύ εύκολα κάνοντας δεξί κλικ στηνπεριοχή του επεξεργαστή κειμένου τουNetbeans και επιλέγοντας Fix imports.Παραπονιέται ακόμα για την ImgFil-ter. Επιλέξτε το λαμπάκι και τηνμοναδική συμβουλή που σας δίνει, Cre-ate class ImgFilter in package hel-loswingapplication. Αντιγράψτε τον κώδικααπό εδώ http://java.sun.com/docs/books/tutorial/uiswing/examples/components/FileChooserDemo2Project/src/component, προσέχοντας ναδιατηρήσετε το όνομα της κλάσης ωςImgFilter και όχι ImageFilter (που ήδηυπάρχει στη Java), αλλά και το packa-ge helloswingapplication. Δημιουργήστετην κλάση Utils, όπως περιγράψαμεπροηγουμένως, και επικολλήστε τον κώδικααπό εδώ http://java.sun.com/docs/books/tutorial/uiswing/examples/components/FileChooserDemo2Project/src/component. Τα λάθη θα πρέπει ναέχουν εξαφανιστεί. Το Netbeans διαθέτειμια μεγάλη γκάμα από Refactorings. Π.χ.,αν δεν σας αρέσει το όνομα ImgFilterκαι προτιμάτε το ImageFilter, αρκεί νακάνετε δεξί κλικ πάνω στο ImgFilter στονεπεξεργαστή κειμένου και να επιλέξετεRefactor > Rename. Παρατηρήστε ότι τοNetbeans αλλάζει όλες τις αναφορές τουονόματος της κλάσης από ImgFilter σε Im-ageFilter! Τρέξτε το πλήρως λειτουργικό

15

Page 16: Ubuntistas issue 9 may june july 2010

REVIEW

πλέον πρόγραμμα. Το μόνο κακό είναιότι το αρχικό παράθυρο είναι πολύ μικρό.Προσθέστε τις παρακάτω γραμμές κάτωαπό την initComponents(), στη μέθοδοκατασκευής (constructor) της Dialog:

this.setSize(500, 350);this.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);

Το πρόγραμμα Java έχει ομολογουμένωςπερισσότερες γραμμές κώδικα από τοαντίστοιχο Qt, όμως αυτό οφείλεταιστη δημιουργία του φίλτρου για τηνεμφάνιση μόνο των εικόνων. Δοκιμάστενα ξαναγράψετε την εφαρμογή ξεκινώνταςαπό ένα έργο τύπου Java Desktop Appli-cation για να δείτε έναν πιο γρήγορο τρόποδημιουργίας μιας desktop εφαρμογής. Γιατον ίδιο σκοπό το Netbeans προσφέρει καιτο Rich Client Platform, μια αρχιτεκτονικήαπό έτοιμα components για την ανάπτυξηdesktop εφαρμογών.

Επίλογος

Αν και δεν καλύψαμε παρά ένα μικρόμέρος από τα χαρακτηριστικά του Net-beans, ελπίζω ότι σας άνοιξε η όρεξη ναεξερευνήσετε τις δυνατότητες του φοβερούαυτού εργαλείου. Και κλείνουμε με τα λόγιατου πατέρα της Java, του James Gosling,στο Javapolis το 2007: «I’m very excitedabout NetBeans 6.0. Are you still using

Emacs? Then go shoot yourself. Emacswas a good idea – about thirty years ago.»

Αναφορές

1. Netbeans home page, http://www.netbeans.org.

2. Netbeans tutorials, http://netbeans.org/kb/.

3. Vladykin Α. (2010), Working with QtApplications,http://netbeans.org/kb/docs/cnd/qt-applications.html

4. http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html

5. Keegan P. et. al. (2006), NetBeans™IDE Field Guide: Developing Desktop,Web, Enterprise, and Mobile Applica-tions, 2nd Edition, Prentice Hall.

6. Myatt A. (2008), Pro Netbeans IDE 6Rich Client Platform Edition, Apress.

7. Wielenga G. & Keegan P. (2009),Netbeans Java Editor, http://refcardz.dzone.com/refcardz/netbeans-java-editor-68.

8. Fowler M. et. al. (1999), Refactor-ing: Improving the Design of ExistingCode, Addison Wesley.

ADOL-C

του Dimitris

To ADOL-C είναι ένα πακέτο ελεύθερουκώδικα για την αυτόματη παραγώγιση(automatic differentiation) C και C++προγραμμάτων. Οι συναρτήσεις πουπαράγονται για τον υπολογισμό πρώτηςή υψηλότερης τάξης παραγώγων μπορούννα καλεσθούν από τη C, C++, FORTRAN ήοποιαδήποτε άλλη γλώσσα που μπορεί νασυνδεθεί με C.

Η αυτόματη παραγώγιση βασίζεταιστο μαθηματικό ορισμό της παραγώγουτης συνάρτησης μιας ή περισσοτέρωνμεταβλητών. Κατά την αυτόματηπαραγώγιση το πρόγραμμα δέχεται ωςείσοδο κώδικα, του οποίου υπολογίζει τηνπαράγωγο ως προς μία ή περισσότερεςμεταβλητές, και έπειτα δημιουργεί τοναντίστοιχο κώδικα. Οι αριθμητικές τιμές τωνπαραγώγων είναι ελεύθερες από σφάλματααποκοπής. Διαφέρει από τα computer al-gebra system, πρώτον στο ότι δημιουργείκώδικα και δεύτερον στο ότι μπορεί ναπαραγωγίσει βρόχους και διακλαδώσεις (if).

Το πρόγραμμα μπορείτε να τοκατεβάσετε από την ιστοσελίδα του: http://www.coin-or.org/projects/ADOL-C.xml. Η άδεια χρήσης είναι Common PublicLicense 1.0 ή GNU General Public License2.0.

16

Page 17: Ubuntistas issue 9 may june july 2010

REVIEW

του Διαμαντή Δημήτρη

fsprotectΚάντε δοκιμές και πειράματα στο σύστημά σας άφοβα!

Πλέον, μετά την απομάκρυνση ενός bugπου εμπόδιζε τη «συνύπαρξη» ubuntu, aufsκαι fsprotect, έχουμε την δυνατότητα ναεγκαταστήσουμε και να χρησιμοποιήσουμετο fsprotect και στο ubuntu.

Τι είναι το fsprotect;

Ένα σύνολο από scripts που μαςεπιτρέπουν να προστατέψουμε τα ήδηυπάρχοντα συστήματα αρχείων τουυπολογιστή μας. Το έχει αναπτύξει ο Σ.Χαρχαλάκης (aka V13.gr) ειδικά για το de-bian και ως εκ τούτου για όλες τις βασισμένεςστο debian διανομές.

Πώς λειτουργεί;

Ρυθμίζοντας κατάλληλα καιενεργοποιώντας το fsprotect, τα συστήματααρχείων που έχουμε επιλέξει προσαρτώνταιμε δικαιώματα μόνο ανάγνωσης και όχιεγγραφής και διαγραφής. Παράλληλα,για κάθε ένα από αυτά δημιουργείταιένα αντίστοιχο σημείο προσάρτησης στηνεικονική μνήμη (ram+swap), μέσω τουtmpfs. Εκεί γίνεται ένωση των δυοσυστημάτων αρχείων σε ένα, με χρήσητου aufs. Όμως, οι οποιεσδήποτε αλλαγές

πραγματοποιούνται υποχρεωτικά στο tmpfsκαι όχι στο δίσκο.Έτσι, όταν αργότερα δοκιμάσουμε ναανοίξουμε ένα έγγραφο, αυτό θα ανοίξειαπό το κανονικό σύστημα αρχείων που είναιαποθηκευμένο. Αν όμως τροποποιήσουμετο έγγραφο και το αποθηκεύσουμε, αυτόθα αποθηκευτεί στο tmpfs, δηλαδή στηνεικονική μνήμη. Πλέον, κάθε φορά που θαανοίγουμε και θα κλείνουμε το ίδιο έγγραφο,κάνοντας και στην συνέχεια αποθηκεύονταςαλλαγές, αυτές θα πηγαίνουν στην εικονικήμνήμη.Φανταστείτε τώρα ότι στην θέση τουεγγράφου έχουμε την εγκατάστασηενός προγράμματος, τη διαγραφή ενόςκαταλόγου ή όποια άλλη ενέργεια εγγραφήςή διαγραφής στο σύστημα. Όλα θα γίνουνστην εικονική μνήμη και θα παραμείνουνεκεί... μέχρι να κάνουμε επανεκκίνησητου συστήματος, οπότε και θα αδειάσει ηεικονική μνήμη! Έτσι, μόλις το σύστημαεκκινήσει εκ νέου, όλα θα είναι όπωςπριν, σαν να μην έχουμε εφαρμόσει καμίααλλαγή. Το έγγραφο που τροποποιήσαμεδεν θα έχει πειραχτεί, το πρόγραμμα πουεγκαταστήσαμε θα έχει εξαφανιστεί και οκατάλογος που διαγράψαμε θα βρίσκεται

στη θέση του. Κάπως σαν να δουλεύαμε μεένα live CD δηλαδή.

Τα θετικά του fsprotect είναι ότιμπορούμε να κάνουμε δοκιμές καιπειράματα, όπως π.χ. αναβάθμιση του kdeχωρίς κίνδυνο αποτυχίας, ότι προστατεύει τοσύστημα αρχείων από διακοπές ρεύματος,καθώς και ότι, σε ορισμένες περιπτώσεις,αυξάνει την ταχύτητα πρόσβασης στοσύστημα αρχείων.Επίσης, μπορεί να φανεί πολύ χρήσιμο σευπολογιστές δημόσιας πρόσβασης, πουείναι και ο κύριος λόγος ανάπτυξής του.Στα αρνητικά του τώρα συγκαταλέγεται τοότι το μέγιστο όριο αλλαγών που μπορούμενα κάνουμε σε κάθε σύστημα αρχείων είναιίσο με το μέγεθος που θα ορίσουμε στοαντίστοιχο tmpfs που θα δημιουργηθεί.Ως εκ τούτου, απαιτείται όσο το δυνατόνμεγαλύτερη εικονική μνήμη. Και επειδή ηram είναι ακριβή, μάλλον θα χρειαστεί ναθυσιάσουμε ένα σχετικά μεγάλο κομμάτιτου δίσκου για swapping. Βέβαια, αυτόεξαρτάται και από το μέγεθος των αλλαγώνπου θα θελήσουμε να εφαρμόσουμε.Επίσης, ένα άλλο «αρνητικό» είναι ότι,ναι μεν μπορούμε να κάνουμε ακόμα και

17

Page 18: Ubuntistas issue 9 may june july 2010

REVIEW

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

Η ρύθμιση του fsprotect είναι απλή.Για να το ενεργοποιήσουμε, αρκεί ναπεράσουμε την παράμετρο fsprotect=xGστην γραμμή του πυρήνα πριν την εκκίνησηστον grub (2 ή legacy) ή στον lilo.Το x είναι το μέγεθος του tmpfs πουπρόκειται να δημιουργηθεί, και το οποίοθα χρησιμοποιείται για τις αλλαγές στοROOT (/) σύστημα αρχείων. Δεν γίνεταινα ενεργοποιήσουμε το fsprotect χωρίςταυτόχρονα να προστατέψουμε το ROOT.Για τα υπόλοιπα συστήματα αρχείων θαπρέπει να επεξεργαστούμε από πριν τοαρχείο /etc/default/fsprotect και να ταπροσθέσουμε εκεί, εισάγοντας, μεταξύάλλων το επιθυμητό μέγιστο όριο αλλαγώνγια το καθένα, δηλαδή το μέγεθος τουtmpfs. Αν παραλείψουμε το όριο για κάποιοσύστημα αρχείων, θα χρησιμοποιηθούν ωςπροεπιλογή 0.5 Gigabytes.Για την ευκολότερη ρύθμιση καιενεργοποίηση-απενεργοποίηση του fspro-tect ο γράφων έχει δημιουργήσει ένασενάριο φλοιού το οποίο μπορείτε ναεκτελέσετε από το recovery mode τουgrub2. Αφού εγκαταστήσετε τις εξαρτήσειςτου σεναρίου, απλά το κατεβάζετεκαι το αποθηκεύετε ως υπερ-χρήστηςστον κατάλογο /usr/share/recovery-

mode/options/, δίνοντας του ταυτόχροναδικαιώματα εκτέλεσης. Για να το εκτελέσετε,επιλέξτε το recovery mode στο boot μενούτου grub 2 και επιλέξτε απο το μενού πουθα εμφανιστεί το «Protect the file sys-tem». Τα υπόλοιπα είναι σχετικά εύκολα μεβάση τις κατανοητές -πιστεύω- υποδείξειςπου παρατίθενται... Το σενάριο φλοιού(protectmyfs) μπορείτε να το κατεβάσετεαπο εδώ: http://cli-apps.org/content/show.php?content=125943Στην ίδια διεύθυνση, καθώς και στο readmeπου περιλαμβάνεται στο συμπιεσμένοαρχείο, θα βρείτε περισσότερεςλεπτομέρειες και οδηγίες για το protectmyfs,το fsprotect και τις υπόλοιπες εξαρτήσεις τουπρώτου.

Το protectmyfs το έχω δοκιμάσει αρκετάκαι δεν έχω βρει κάποια δυσλειτουργίαακόμα. Παρόλα αυτά, κρατάω... και μιαπισινή, κι έτσι η έκδοση 1.0 παραμένειbeta, περιμένοντας απο εσάς να στείλετεαναφορές για τυχόν bugs, ώστε να μπορέσεινα τελειοποιηθεί.Απαραίτητη προϋπόθεση για να δουλέψειτο protectmyfs είναι να έχετε (x)Ubuntu10.04+, εικονική μνήμη άνω των 2 Gb (όσοπερισσότερη τόσο καλύτερα) και grub 2 μεενεργοποιημένο το recovery mode.

Αυτά από εμένα. Καλά πειράματα μέχριτο επόμενο τεύχος...

Μετατροπή πακέτων

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

To Alien υποστηρίζει αρκετές μορφέςπακέτων, συμπεριλαμβανομένων των RPM(Red Hat Package Manager), LSB (LinuxStandards Base), SLP (Stampede), Slack-ware, PKG (Solaris), και DEB (Debian pack-age) και μπορεί να μετατρέψει ένα πακέτοαπό τη μία μορφή σε άλλη. Η εγκατάστασητου πακέτου γίνεται με:

$ sudo apt-get install alien

H μετατροπή γίνεται απλά:

$ alien -c myprogram-1.0.1-1.i386.rpm

H επιλογή -c λέει στο Alien να μετατρέψεικαι όλα τα scripts εγκατάστασης ήαπεγκατάστασης που υπάρχουν στοαρχικό πακέτο. Τώρα είστε έτοιμοι ναεγκαταστήσετε το πακέτο .deb. Φυσικά ταπράγματα πάντα μπορεί να πάνε στραβάκαι στο τέλος κάτι να μη λειτουργεί...

18

Page 19: Ubuntistas issue 9 may june july 2010

HINTS & TIPS

του Διαμαντή Δημήτρη

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

1. Πατάμε Alt+F2 και εκτελούμε: kquitapp plasma-desktopΜόλις δούμε μαύρη οθόνη, χωρίς πανικό (:P), πατάμε καιπάλι Alt+F2 και εκτελούμε:plasma-desktop --graphicssystem rasterΑυτό θα πρέπει να το κάνουμε κάθε φορά που ανοίγειτο σύστημα. Διαφορετικά μπορούμε να φτιάξουμε ένανεκκινητή μέσα στο ∼/.kde/Autostart/

2. Πατάμε Alt+F2 και εκτελούμε: kdebugdialogΣτο παράθυρο που θα εμφανιστεί επιλέγουμε το "Disableall Debug output" και πατάμε OK.Αν έχουμε πρόβλημα με κάποια εφαρμογή, θα πρέπει νατο ενεργοποιήσουμε εκ νέου για να δούμε τις καταγραφέςτης αποσφαλμάτωσης (debug output).

3. Μπορούμε να μεταφέρουμε το /tmp σε tmpfs.Το /tmp είναι ο κατάλογος όπου γράφονται τα προσωρινάαρχεία για όλες σχεδόν τις εφαρμογές. Τα περιεχόμενάτου διαγράφονται μετά από κάθε επανεκκίνηση. Το tmpfs,από την άλλη, είναι τύπος συστήματος αρχείων που

χρησιμοποιεί την εικονική μνήμη αντί για τον δίσκο.

Τι πρέπει να κάνουμε;Ως υπερχρήστες, επεξεργαζόμαστε το /etc/fstab καιπροσθέτουμε την γραμμή:tmpfs /tmp tmpfs nodev,nosuid, noexec,mode=1777 0 0Αποθηκεύουμε και κάνουμε επανεκκίνηση.

4. Μετά από μια αναβάθμιση του kde, κάποιες ρυθμίσεις πουέχουμε κάνει στο plasma μπορεί να μην είναι συμβατέςμε τη νέα έκδοση και να δημιουργούν προβλήματα σεεπιδόσεις και σταθερότητα.Η καλύτερη λύση είναι να επιστρέψουμε στιςπροκαθορισμένες ρυθμίσεις της νέας έκδοσης και νααρχίσουμε εκ νέου την παραμετροποίηση.Αυτό γίνεται διαγράφοντας τα αρχεία που θα μαςεμφανίσει η εντολή:ls ∼/.kde/share/config/ | grep plasmaΣτην συνέχεια, θα πρέπει να αποσυνδεθούμε και νασυνδεθούμε εκ νέου στο kde.

19

Page 20: Ubuntistas issue 9 may june july 2010

ΠΑΙΧΝΙΔΙΑ

του Σαββίδη Σόλωνα

Flight GearΜια ελεύθερη παιχνιδομηχανή.

Το καλοκαιράκι έχει φτάσει και όλοιξεκινούν να έχουν στο μυαλό τους τηνάδεια, αν δεν την έχουν ξεκινήσει μέχριτώρα. Η αλήθεια είναι πως αυτή ηχρονιά ήταν δύσκολη για την ελληνικήπραγματικότητα και τα οικονομικά όλωνλιγότερο ή περισσότερο έχουν στριμωχθεί.Ενδεχομένως να έχουν γίνει ακυρώσειςκάποιων σχεδίων ή χρονική μετατόπισήτους (ποιος ξέρει για πόσο). Το μουντιάλεπίσης έχει κρατήσει αρκετούς (και γιατί όχιαρκετές) μέσα για να το παρακολουθήσουμεκαι να δoξάσουμε τους μάγους τηςστρογγυλής θεάς. Όπως και να 'χει περνάμεαρκετές ώρες μέσα στο σπίτι μας και στηδροσιά του air-condition.

Ίσως αυτός ο μικρός πρόλογος νασας έβαλε υποψίες πως το άρθρο τωνπαιχνιδιών αυτού του τεύχους θα είναι κάτισχετικό με τη μπάλα ή την οικονομία...λάθος! Σαν ελεύθερο περιοδικό τηςελληνικής κοινότητας του Ubuntu θα σαςμοιράσουμε εισιτήρια και μάλιστα πρώτηςθέσης σε όποια αεροπορική πτήση εσείςεπιθυμείτε! Πλοηγός μας θα είναι ο Ubun-tistas και η καλή διάθεση. Ετοιμαστείτε γιαένα μαγικό ταξίδι....

Η ιστορία ξεκινά κάπου στα μέσα του

1996 απο τον David Murr ο οποίος είχετην ιδέα να δημιουργήσει έναν εξομοιωτήπτήσης. Μετά απο σχεδόν ένα χρόνοεντατική δουλειάς και κώδικα η πρώτηέκδοση του παιχνιδιού ήταν γεγονός υποτην άδεια GNU GPL. Απο την πρώτη στιγμήαγαπήθηκε απο τους εραστές πτήσεων τουελεύθερου κώδικα.

Βασισμένο κυρίως στη γλώσσα C++,στηρίχθηκε σε κώδικα γραφικών τριώνδιαστάσεων, πράγμα που το έκανε αρκετάδύσκολο στην ανάπτυξή του. Ένα χρόνομετά, η πηγή άλλαξε και χρησιμοποιήθηκεη βιβλιοθήκη OpenGL που θα βοηθούσεαρκετά το έργο των προγραμματιστών.Φυσικά η κοινότητα μεγάλωσε και βοήθησε

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

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

Πετώντας στους αιθέρες

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

20

Page 21: Ubuntistas issue 9 may june july 2010

ΠΑΙΧΝΙΔΙΑ

καταφέρνει να ξεχωρίσει σε πολλούς τομείςκαι γιατί όχι - να ξεπεράσει αντίστοιχα έργακλειστού λογισμικού.

Αυτό που κάνει εντύπωση είναι ηαίσθηση του ρεαλισμού κατα την πτήση. Ηχρήση διαφορετικών μοντέλων εξομοίωσηςείναι αυτά που καθορίζουν τη μορφήτης πτήσης. Κάθε αεροσκάφος πουπρογραμματίζεται πρέπει να χρησιμοποιείαυτά τα μοντέλα και αυτή τη στιγμήτο FG είναι το μοναδικό στο είδος τουπου ενσωματώνει τόσα πολλά. Στοεσωτερικό του αεροσκάφους μπορούμε νααλληλεπιδράσουμε με αρκετούς διακόπτεςκαι όργανα.

Ένα βασικό χαρακτηριστικό που μπορείνα κάνει κάθε ενδιαφερόμενο να ασχοληθείπολύ καιρό μαζί του είναι η ποικιλίααεροσκαφών. Απο μικρά αεροπλανάκιαμονοκινητήρια και gliders έως JumboJet, μαχητικά, ελικόπτερα και ιπτάμενουςδίσκους, το FG τα έχει όλα και το κυριότεροελεύθερα! Φυσικά δε θα μπορούσε ναλείπει και το χιούμορ καθώς έχουμε στηδιάθεσή μας και το έλκηθρο του Άϊ Βασίλη!Όλα μπορούμε να τα κατεβάσουμε απο τηνεπίσημη ιστοσελίδα του προγράμματος καινα τα εγκαταστήσουμε στο μηχάνημά μας.Κάθε ένα έχει διαφορετικό τρόπο που πετάκαι αντιδρά στις συνθήκες που μπορούμενα ορίσουμε μέσα απο τις παραμέτρους.Η αλήθεια είναι οτι προσπάθησα να κάνωέναν πλήρη κύκλο 360o με ένα Jumbo747!... μην το προσπαθήσετε όμως στηνπραγματικότητα γιατί τα αποτελέσματα δεν

είναι πάντοτε καλά (όπως κι εγώ δεν τοκατάφερα με την πρώτη).

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

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

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

Η πτήση 311 της FG για Maimaiαναχωρεί, παρακαλώ περάστε απο τοSynaptic για να παραλάβετε το εισιτήριόσας...Μετά απο όλα αυτά είμαι σίγουρος πωςθέλετε να πάρετε μια γεύση απο τηνεμπειρία αυτού του παιχνιδιού. Στο Ubuntuυπάρχει έτοιμο στα αποθετήρια, οπότε απλάκάνετε αναζήτηση για FlightGear και τοεπιλέγετε για εγκατάσταση. Εναλλακτικάμπορούμε και να κατεβάσουμε την τελευταίαέκδοση απο τα επίσημα αποθετήρια τουπρογράμματος και να το εγκαταστήσουμεχειροκίνητα. Δυστυχώς όμως δεν αρκείμόνο αυτό μιας και για να ξεκινήσει τοFlight Gear χρειάζεται να διαβάσουμε τις...εντολές που θα δώσουμε απο το τερματικό!Ναι, το FG είναι τόσο περίπλοκο πρόγραμμαώστε να απαιτεί πάμπολλες παραμέτρουςμέχρι να μπορέσουμε να φορτώσουμε ένααεροσκάφος και να πετάξουμε. Σίγουραεδώ θα πρέπει να δοθεί περισσότερηβαρύτητα και να δημιουργηθεί ενα καλόFront End με όλες τις λειτουργίες. Φυσικάκαι κυκλοφορούν Front End τρίτων για τοπαιχνίδι. Για το περιβάλλον του Gnomeέχουμε το FGKicker και στο KDE αντίστοιχατο KfreeFlight. Εναλλακτικά μπορούμε νακατεβάσουμε το JflightWizard το οποίο είναι

21

Page 22: Ubuntistas issue 9 may june july 2010

ΠΑΙΧΝΙΔΙΑ

ένα γραφικό περιβάλλον για το παιχνίδιγραμμένο σε Java. Υπάρχει εκτενήςαναφορά για τον τρόπο εγκατάστασης μέσαστο συμπιεσμένο αρχείο.

Είμαι αναγκασμένος να κλείσω αυτο τοάρθρο για να μην ξεπεράσω τα όρια τουπεριοδικού (αλλα και του σελιδοποιητή μας).Η παρουσίαση ενός τέτοιου προγράμματοςδε μπορεί να περιοριστεί μέσα σε 2 σελίδες,αντ' αυτού θα μπορούσαμε να γράψουμεολόκληρο βιβλίο.

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

Μέχρι το επόμενό μας ραντεβού,ρυθμίστε τα flaps, το μείγμα, πάρτε άδειααπο τον πύργο ελέγχου και καλά ταξίδια.

Σύνδεσμοι:

• Επίσημη ιστοσελίδα: http://www.flightgear.org/

• JflightWizard:http://sourceforge.net/projects/jflightwizard/

Allegro

Allegro είναι μία βιβλιοθήκη γιαπρογραμματισμό παιχνιδιών για C/C++προγραμματιστές η οποία διανέμεταιελεύθερα για διάφορα λειτουργικά. Επίσηςυπάρχουν bindings και για διάφορες άλλεςγλώσσες προγραμματισμού. Στα ιταλικά Al-legro σημαίνει "γρήγορος, ταχύς, εύθυμος",αλλά είναι και αναδρομικό ακρώνυμο τωνλέξεων "Allegro Low LEvel Game ROu-tines".

Η βιβλιοθήκη περιλαμβάνει δια-νυσματικά γραφικά, sprites, χειρισμόχρωμάτων, κειμένου (υποστηρίζει από de-fault UTF-8) κ.α. Οι οδηγοί περιλαμβάνουνOSS, ALSA, JACK, SGI AL, κ.α.Υποστηρίζει το χειρισμό ποντικιού,πληκτρολογίου και joystick.

Τον κώδικα μπορείτε να τον κατεβάσετεαπό εδώ: http://www.talula.demon.co.uk/allegro/. Η άδεια είναι αρκετά ευέλικτηκαι μπορεί να χρησιμοποιηθεί σχεδόνχωρίς κανέναν περιορισμό. Τα εγχειρίδιακαι οι οδηγοί είναι αρκετά αναλυτικοί καιδιευκολύνουν μια γρήγορη επαφή με τηβιβλιοθήκη.

Gnushogi

Gnushogi είναι η GNU έκδοση τουπαιχνιδιού Shogi, μιας ιαπωνέζικηςπαραλλαγής του σκακιού. Είναι ένα παιχνίδιγια δύο παίχτες που έχει την καταγωγή τουστην Ινδία του 6ου αιώνα μ.Χ. και αργότεραδιαδόθηκε στην Κίνα και στην Ιαπωνία.

To παιχνίδι shogi είναι παρόμοιο με τοσκάκι αλλά έχει πολύ μεγαλύτερο δένδροπολυπλοκότητας (game tree complexity)εξαιτίας του κανόνα ότι τα "αιχμαλωτισμένα"κομμάτια μπορούν να χρησιμοποιηθούναπό τον αντίπαλο. Ανάλογα με τιςικανότητες των αντιπάλων, μπορεί τοπαιχνίδι να ρυθμιστεί ώστε να είναι το ίδιοδύσκολο και για τους δύο, μειώνοντας τοπλήθος των κομματιών ανάλογα.

22

Page 23: Ubuntistas issue 9 may june july 2010

ΝΕΑ & ΑΝΑΚΟΙΝΩΣΕΙΣ

του Φωτιάδη Φιλίππου

Νέα & Ανακοινώσεις...της ελληνικής κοινότητας του Ubuntu (ubuntu-gr)!

Αλλαγές στην ομάδασυντονιστών-διαχειριστών του φόρουμ

Άλλες δύο αποχωρήσεις υπήρξαν στοδιάστημα αυτών των δύο μηνών (Μάιος-Ιούνιος), αλλά και δύο προσθήκες. Χρονικά,πρώτος αποχώρησε ο ilpara και πιο μετάπροέκυψε η αποχώρηση του vagrale13.Ο ilpara αποχώρησε γιατί δεν είχε πλέοντον απαραίτητο ελεύθερο χρόνο και ο va-grale13 για προσωπικούς του λόγους.Όπως και να έχει, είναι δύο μέλη πουβοήθησαν στην βελτίωση του φόρουμ καιπροσέφεραν σημαντικά σε αυτό. Τουςευχαριστούμε και τους ευχόμαστε καλήσυνέχεια σε ό,τι κι αν κάνουν. Λόγοτης παρουσίας και της ενεργητικότηταςπου είχαν οι προαναφερθέντες, ήταναναμενόμενο να αφήσουν μεγάλο κενόυποχρεώσεων και καθηκόντων. Ένα κενόπου έπρεπε γρήγορα να καλύψουμε καιμετά από την απαραίτητη ψηφοφορίαπου έγινε στο φόρουμ, βρήκαμε τους δύονέους συντονιστές. Είναι ο Mitsakos και οEpirotes! Δύο παλιά και ενεργά μέλη τουφόρουμ, που προσφέρουν εθελοντικά στονελεύθερο τους χρόνο με τον τρόπο τους.Καλή επιτυχία παιδιά.

Σχετικοί σύνδεσμοι:

• http://bit.ly/cWYQRc

• http://bit.ly/co14ye

• http://bit.ly/btsLJs

Αλλαγές στην ομάδα του περιοδικούUbuntistas

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

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

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

Σχετικοί σύνδεσμοι:

• http://bit.ly/91lTGN

• http://bit.ly/9Dyljt

23

Page 24: Ubuntistas issue 9 may june july 2010

ΝΕΑ & ΑΝΑΚΟΙΝΩΣΕΙΣ

Προτάσεις για την βελτίωση του φόρουμ

Ο φίλος μας medigeek (πρώηνδιαχειριστής) είχε μια εξαιρετική ιδέα, τηνδημιουργία ξεχωριστού υπό-φόρουμ γιαπροτάσεις. Έτσι θα είναι πιο εύκολο ναπαρακολουθηθεί μια συγκεκριμένη πρότασηως ξεχωριστό θέμα, παρά να ψάχνουμεπ.χ. 33 σελίδες ενός θέματος για όλεςτις προτάσεις. Φυσικά η ιδέα δεν πέρασεαπαρατήρητη, την υλοποίησε μετά απόμερικές ημέρες ο Nisok. Πλέον υπάρχειξεχωριστή ενότητα για προτάσεις, όπου εκείμπορείτε ελεύθερα και άφοβα να αναφέρετετις ιδέες σας. Ίσα ίσα τις χρειαζόμαστε καιτις θέλουμε για να βελτιωθεί το φόρουμμας, αφού πάντα θα υπάρχουν περιθώριαβελτίωσης. Μπράβο medigeek για τηνιδέα! ;)

Ξεχωριστή ενότητα για προτάσεις:http://bit.ly/dnKWPh

Κεντρική ιστοσελίδα της κοινότητας

Η ομάδα ανάπτυξης-συντήρησης τουιστοχώρου χρειαζόταν ενίσχυση, γιααυτό έγινε σχετικό κάλεσμα προς κάθεενδιαφερόμενο για να συμβάλει στην ομάδα.Στο κάλεσμα μας υπήρξε ενδιαφέρονκαι θετική ανταπόκριση από το μέλοςbserem, ο οποίος ήρθε σε επαφή μαζίμας και μπήκε κατευθείαν στο “ψητό”.Έγινε μέλος της ομάδας και όχι μόνοαυτό, αλλά υλοποίησε κιόλας δύο απότις εκκρεμότητες που είχαμε για τηνκεντρική ιστοσελίδα. Μία εκκρεμότηταήταν η προσθήκη επιλογής "Λογότυπα"στο μενού αριστερά, με τα λογότυπα τηςκοινότητας και τους embedded κωδικούς.

Μια άλλη πολύ σημαντική εκκρεμότητα ήτανη προσθήκη επιλογής "Φωτογραφίες" στομενού αριστερά, με εικόνες από διάφοραhappenings, εκδηλώσεις κτλ. Ένα μεγάλομπράβο στον bserem, χαιρόμαστε που είναιστην ομάδα.

Distro watch του μήνα:

6. Mandriva

7.PCLinuxOS

8. Sabayon

9. Arch

10. FreeBSD

1. openSUSE

2. Ubuntu

3. Mint

4. Fedora

5. Debian

Συγγνώμη, κύριος.

Ναι, σε σένα μιλάω.

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

Συχνές ερωτήσεις

Ε: Πώς μπορώ να βρω πόση μνήμη RAMέχει ο υπολογιστής μου;A: # grep MemTotal /proc/meminfo

Ε: Πώς μπορώ να βρω πόση μνήμη swapέχω;A: # grep SwapTotal /proc/meminfo

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

Μνήμη RAM(Mb) Μνήμη Swap(Mb)<1024 2×RAM1025--2048 1,5×RAM2049--8192 1×RAM>8192 0.75×RAM

Ε: Πώς μπορώ να βρω τον ελεύθερο χώροστο δίσκο;A: # df -k

Ε: Πώς μπορώ να βρω τι τύπο επεξεργαστήέχω;A: Με δυο τρόπους:α. # grep "model name" /proc/cpuinfoβ. # echo `uname -p`

Ε: Πώς μπορώ να γίνω root στο Ubuntu;A: Συνήθως, προσθέτοντας sudo πριναπό κάθε εντολή, η εντολή εκτελείται μεδικαιώματα υπερχρήστη. Αν όμως θέλετεσώνει και καλά να δίνει prompt root:α. $ sudo bashβ. $ sudo -s

του hawk

24

Page 25: Ubuntistas issue 9 may june july 2010