Χτίζοντας εφαρμογές με το Quickly και την Python

dimitris | Κυρ, 07/08/2012 - 18:39 | 27'

Δημιουργήστε γραφικές εφαρμογές στο Linux με τη βοήθεια του Quickly, ενός διασκεδαστικού εργαλείου που θα σας κρατήσει πίσω από την οθόνη του υπολογιστή για ώρες!

Του Κωνσταντίνου Αποστόλου

Όλοι, άλλοι λιγότερο και άλλοι περισσότερο, θα έχετε θελήσει να δημιουργήσετε δικές σας εφαρμογές. Μπορεί κάποια στιγμή να προσπαθήσατε αλλά να μην μπορέσατε να ολοκληρώσετε το δημιούργημά σας, γιατί πολύ απλά δεν είχατε την ευκολία. Γι' αυτό το λόγο υπάρχει το Quickly! Για να σας βοηθήσει να δημιουργήσετε τις εφαρμογές σας με μεγαλύτερη ευκολία σε σχέση με το τερματικό. Πέρα από την ευκολία συγγραφής του κώδικα, σας δίνει και εργαλεία για να μπορείτε να επεξεργάζεστε το γραφικό περιβάλλον της εφαρμογής σας για να το φέρνετε εύκολα στα μέτρα σας, με τη βοήθεια του Glade. Επίσης, μπορείτε με μια μόνο εντολή να τρέξετε την εφαρμογή σας την ώρα που την προγραμματίζετε για να δείτε αν όλα πάνε όπως τα θέλετε.

Η εγκατάσταση του Quickly είναι πολύ εύκολη, αν τρέχει ο υπολογιστής σας κάποια διανομής της «οικογένειας» Ubuntu. Το μόνο που έχετε να κάνετε είναι να ανοίξετε το terminal και να γράψετε την εντολή:

# sudo apt-get install quickly

Σε μερικά δευτερόλεπτα το πακέτο θα έχει κατέβει και θα έχει εγκατασταθεί στο σύστημά σας. Αν, όμως, ο υπολογιστής σας τρέχει κάποια διανομή άλλη εκτός του Ubuntu, μπορείτε να ανοίξετε τον web browser σας και να πάτε στη σελίδα του Quickly στο Launchpad [1], εκεί θα πρέπει να συμβουλευτείτε την τεκμηρίωση και να δείτε εάν η διανομή σας είναι συμβατή με αυτό.

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

Γνωριμία με το Quickly

Ανοίξτε ένα καινούργιο παράθυρο στο τερματικό και πληκτρολογείστε την εντολή: # quickly

Αμέσως μετά το “Enter” που θα πατήσετε, θα δείτε όλες τις δυνατές επιλογές που σας δίνει το λογισμικό αυτό. Συγκεκριμένα θα δείτε:

create <template> <project-name> (template is mandatory for this command)
   quickly <template-origin> <template-dest> to create a create derived template
   getstarted to get some starting hints

Το “template” στο οποίο αναφέρεται το quickly είναι το είδος της εφαρμογής που θέλουμε εμείς να δημιουργήσουμε. Αν εισάγουμε σκέτη την εντολή “quickly create” θα πάρουμε το εξής μήνυμα στην οθόνη του τερματικού μας, μαζί με το μήνυμα σφάλματος:

Candidate templates are: ubuntu-application, ubuntu-cli, ubuntu-flash-game, ubuntu-pygame

Οπότε, καταλαβαίνουμε ότι οι επιλογές που έχουμε είναι να δημιουργήσουμε εφαρμογές για το desktop μας, για το τερματικό, flash games και παιχνίδια με την pygame. Εμείς θα εισάγουμε την εξής εντολή:

# quickly create ubuntu-application LinuxInside

Με το που πατήσουμε “Enter”, το quickly θα δημιουργήσει έναν φάκελο, στον κατάλογο που ήδη βρίσκεστε, με το όνομα “LinuxInside” και αυτόματα θα τρέξει για πρώτη φορά το project με τον default κώδικα. Αν όλα είναι καλά, στην οθόνη σας θα δείτε ένα παράθυρο με το λογότυπο του Ubuntu (εικόνα 1). Σε αυτό το σημείο μόνο ελάχιστα από τα κουμπιά και μενού της εφαρμογής δουλεύουν, οπότε μπορείτε να «πειράξετε» ότι από αυτά θέλετε.

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

# cd linuxinside

Μέσα σε αυτόν τον φάκελο, αν κάνουμε “ls” θα δούμε έναν αριθμό από αρχεία και υποφακέλους. Στους φακέλους “linuxinside” και “linuxinside_lib” βρίσκεται ο κώδικας της εφαρμογής, στον φάκελο “data” βρίσκονται όλα τα αρχεία τα οποία χρησιμοποιούνται από την εφαρμογή και στον φάκελο “bin” βρίσκεται το εκτελέσιμο αρχείο που παράγεται κατά την μεταγλώττιση της εφαρμογής. Μπορείτε να μεταγλωττίσετε την εφαρμογή απλά εισάγοντας την εντολή:

# quickly run

Όταν πατήσετε “Enter” θα πρέπει να δείτε το παράθυρο που είδατε στην αρχή, μόλις δημιουργήσατε το project. Φυσικά, η εφαρμογή δεν κάνει κάτι παραπάνω από ότι έκανε και πριν, κάτι που σημαίνει ότι πρέπει να “πειράξουμε τον κώδικα. Πως θα το κάνουμε αυτό; Με την παρακάτω εντολή:

# quickly edit

Με αυτή την εντολή, το quickly θα ανοίξει όλα τα αρχεία κώδικα python στο αγαπημένο μας Gedit (στην περίπτωση των Gnome based διανομών). Από εκεί θα μπορέσουμε να κάνουμε τις αλλαγές που θέλουμε και μετά να ξανατρέξουμε την εφαρμογή με την παραπάνω εντολή. Εάν η διανομή που είναι εγκατεστημένη στον υπολογιστή σας είναι το Kubuntu/Xubuntu/Lubuntu κτλ, μπορείτε εύκολα να εγκαταστήσετε το Gedit με την εντολή:

# sudo apt-get install gedit

Στην περίπτωση που θέλετε να επεξεργαστείτε το γραφικό περιβάλλον της εφαρμογής σας, μπορείτε απλά να «τρέξετε» την εντολή (θεωρώντας, πάντα, ότι βρίσκεστε στον φάκελο του project σας):

# quickly design

Με αυτήν την εντολή ανοίγει το Glade και φορτώνει όλα τα αρχεία XML που διαχειρίζονται το γραφικό περιβάλλον της εφαρμογής μας. Κατά την άποψή μου, είναι λίγο δύσκολο στη χρήση, γι’ αυτό και προτιμώ να “πειράζω” τα “*.xml” μόνος μου. Τα “*.xml” μπορείτε να τα βρείτε στον φάκελο “data/ui/”.

Μια καλή τακτική όταν δημιουργείτε ανοιχτού κώδικα εφαρμογές είναι να τους βάζετε κάποια άδεια χρήσης (licence). To Quickly σας δίνει τη δυνατότητα να το κάνετε αυτό με μόλις δύο κινήσεις. Πρώτα, επεξεργαστείτε το αρχείο «AUTHORS», βάζοντας το όνομά σας, το e-mail σας και το τρέχον έτος. Αφού αποθηκεύσετε τις αλλαγές, γράψτε την εντολή στο Τερματικό:

# quickly licence

Μετά, θα δείτε ότι εμφανίστηκε ένα αρχείο με το όνομα «COPYING». Αν το ανοίξετε, θα δείτε ότι έχει δώσει στην εφαρμογή μας την πασίγνωστη άδεια χρήσης GNU GPL 3.

Φυσικά, δεν περιορίζεστε στη δημιουργία μόνο γραφικών εφαρμογών για το desktop σας, αλλά μπορείτε να ασχοληθείτε και με τη δημιουργία άλλων ειδών εφαρμογών. Παραπάνω είδαμε πως όταν εισάγαμε την εντολή:

# quickly create

δηλαδή χωρίς κάποιο όρισμα, το Quickly μας επέστρεψε ένα μήνυμα που περιείχε όλα τα διαθέσιμα πρότυπα εφαρμογών. Πέρα από το “ubuntu-application” είδαμε και τα “ubuntu-cli”, το “ubuntu-flash-game” και “ubuntu-pygame”. Με λίγα λόγια, το “ubuntu-cli” είναι για τη δημιουργία εφαρμογών που θα τρέχουν μόνο μέσω τερματικού (χωρίς γραφικά), το “ubuntu-flash-game” είναι για εκείνους που σκοπεύουν να γράψουν κάποιο flash game και το “ubuntu-pygame” είναι για εκείνους που θα επιχειρήσουν να γράψουν ένα κανονικό παιχνίδι. Σε κάθε περίπτωση το Quickly, με το που κάνετε το “quickly create”, θα σας εφοδιάσει με ένα περιεκτικό και κατανοητό παράδειγμα.

Και αφού ολοκληρώσω την εφαρμογή μου; Μετά τι γίνεται; Πως μπορώ να την μοιραστώ με άλλους; Το Quickly έχει προνοήσει και για αυτό! Πέραν της δυνατότητας δημιουργίας πακέτου τύπου “*.deb” μπορείτε να μοιραστείτε την εφαρμογη σας στο Launchpad. Η δημιουργία πακέτου “*.deb” της εφαρμογής σας, μέσω του Quickly, γίνεται με την εντολή:

# quickly package

Ενώ, για να την μοιραστείτε στο Launchpad, στο οποία θα πρέπει να είσαστε εγγεγραμμένοι χρήστες, πρέπει απλά να “δώσετε” την εντολή:

# quickly share

ή εαν θέλετε να την δημοσιεύσετε, την παρακάτω:

# quickly release

Ναι, είναι τόσο απλό να ξεκινήσετε και να ολοκληρώσετε μια εφαρμογή ή ένα παιχνίδι με το Quickly, αρκεί να έχετε και μια κάποια επαφή με την γλώσσα της Python!

Μίνι εισαγωγή στην Python

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

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

print 'Hello, world!'

Φυσικά, για να τρέξετε την εντολή αυτή, πρέπει να γίνει με το εκτελέσιμο της Python:

# python print 'Hello Linux Inside fans!'

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

name = raw_input('What is your name?\n')
print 'Hello there, %s.' % (name)

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

Όπως σε κάθε γλώσσα προγραμματισμού, έτσι και στην Python υπάρχουν υλοποιήσεις βρόγχων όπως η γνωστή σε όλους for. Στο παράδειγμα που ακολουθεί, θα διαβάσουμε το περιεχόμενο μιας σειράς (array). Έστω ότι το περιεχόμενο της σειράς αυτής είναι μερικά  ονόματα ελληνικών πόλεων:

poleis = ['Athens', 'Patras', 'Thessaloniki', 'Volos', 'Samos', 'Argos']
for i, city in enumerate(poleis):
    print "%i - %s" % (i, city)

Η υλοποίηση είναι ως εξής. Για κάθε στοιχείο που υπάρχει στην σειρά “poleis” και στην θέση “i”, εκτύπωσε την θέση ακολουθούμενη από το όνομα της πόλης. Απλό ε; Βέβαια, η Python υποστηρίζει και συναρτήσεις. Η υλοποίησή τους και η κλήση τους γίνεται με τον παρακάτω τρόπο:

def Say_Hello_To(name):
    print 'Hello ', name

Say_Hello_To('Marios')
Say_Hello_To('Konstantinos')
Say_Hello_To('Vasilis')

Μπορούμε να καλέσουμε την συνάρτηση “Say_Hello_To(name)”, πρακτικά, από όπου θέλουμε, αρκεί να βρισκόμαστε στον ίδιο τόμο. Επίσης, η Python δεν περιορίζεται στις συναρτήσεις, αλλά επιτρέπει να δώσετε στα προγράμματα σας και μια αίσθηση αντικειμενοστρέφειας. Και πως γίνεται αυτό; Δείτε το παρακάτω παράδειγμα διαχείρισης τραπεζικών λογαριασμών:

class BankAccount(object):
    def __init__(self, initial_balance=0):
        self.balance = initial_balance
    def deposit(self, amount):
        self.balance += amount
    def withdraw(self, amount):
        self.balance -= amount
    def overdrawn(self):
        return self.balance &lt; 0
my_account = BankAccount(150)
my_account.withdraw(500)
print my_account.balance

Η κλάση ορίζεται με το “class BankAccount(object):” ενώ καλείται με την γραμμή κώδικα, κάτω από την κλάση, “my_account = BankAccount(150)”. Όταν δημιουργείται το αντικείμενο της κλάσης, καλείται αυτόματα η μέθοδος/συνάρτηση “def __init__(self, initial_balance = 0):”, η οποία ορίζει το αρχικό ποσό που θα υπάρχει στον λογαριασμό ενώ όταν κληθεί η μέθοδος/συνάρτηση “def withdraw(self, amount):”, που βρίσκεται ακριβώς από κάτω από την αρχικοποίηση του λογαριασμού, προστίθεται το δοσμένο ποσό στον λογαριασμό - στην περίπτωση αυτή είναι 500 χρηματικές μονάδες.

H Python έχει μια αρκετά ανεπτυγμένη κοινότητα, διαθέτει ατελείωτο υλικό από τεκμηρίωση, tutorials κτλ και, φυσικά, τα forums είναι εκεί για να θέσετε όποια απορία μπορεί να έχετε. Πέρα από το wiki page της Python [2], ωραία tutorials μπορείτε να βρείτε παντού στου διαδίκτυο. Η αγαπημένη μου ιστοσελίδα είναι η http://www.java2s.com η οποία περιέχει έναν τεράστιο όγκο από tutorials, references και open source projects από τα οποία μπορείτε να μάθετε πάρα πολλά πράγματα. Φυσικά η ιστοσελίδα αυτή, όπως μαρτυρά και το όνομά της, δεν περιέχει tutorials (και τα συναφή) για Python μόνο, αλλά και για όλες τις γνωστές γλώσσες, όπως C, C++, C#, VisualBasic, Java, Javascript, HTML, Python, Perl κτλ. Με άλλα λόγια μπορείτε να περάσετε ατελείωτες ώρες διασκεδάζοντας και μαθαίνοντας, παράλληλα.

Ένα απλό tutorial με το Quickly

Στη συνέχεια, θα δούμε πως να γράψουμε μια απλή εφαρμογή για το τερματικό μας. Είναι, σχετικά, το πιο απλό είδος εφαρμογών για τον λόγο ότι δεν έχει γραφικό περιβάλλον και το μόνο που κάνει είναι να εμφανίζει μηνύματα στον χρήστη. Εμείς θα γράψουμε κώδικα για μια εφαρμογή που κατεβάζει πληροφορίες και αρχεία από το διαδίκτυο. Πρώτα όμως θα πρέπει να δημιουργήσουμε το project. Όπως είπαμε παραπάνω, αυτό γίνεται με την εντολή:

# quickly create ubuntu-cli downloader

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

«I'm launched and my args are: »

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

# cd downloader

Αμέσως μετά, για να καταλάβουμε τι ακριβώς έκανε το quickly με την εντολή «create ubuntu-cli downloader» κάντε ένα «ls». Θα δείτε συνολικά πέντε αντικείμενα. Δύο φακέλους, δύο αρχεία python και το αρχείο AUTHORS, στο οποίο αναφερθήκαμε παραπάνω. Συγκεκριμένα θα δείτε τα εξής:

# ls
AUTHORS  bin  downloader  setup.py  setup.pyc

Το αρχείο «AUTHORS” αναφέρθηκε παραπάνω. Άρα, μπορείτε να ανοίξετε το αρχείο και να προσθέσετε το όνομά σας και τα λοιπά στοιχεία στα πεδία που έχει (όνομα, ηλεκτρονική διεύθυνση κτλ). Μετά θα δείτε τον φάκελο “bin” ο οποίος είναι ο φάκελος όπου το quickly θα αποθηκεύει το εκτελέσιμο αρχείο, το οποίο μπορείτε να τρέχετε όποτε θέλετε (απλά “δίνοντας” στο τερματικό: “./bin/<project name>”) χωρίς να χρειάζεται να εκτελείτε συνέχεια το “quickly run”.

Ο φάκελος “<project name>” (“downloader” στη περίπτωσή μας) είναι εκείνος στον οποίο βρίσκεται ο κώδικας του προγράμματός μας. Μέσα θα δείτε όλα τα αρχεία κώδικα Python και τα “<file name>.pyc” του μεταγλωττισμένου κώδικα Python. Τέλος, υπάρχει ακόμα ένα αρχείο, το “setup.py” (μαζί με το “setup.pyc”), που η δουλειά του είναι να εγκαταστήσει το πρόγραμμα στο σύστημά μας ή και σε άλλον υπολογιστή - αυτή η διαδικασία μπορεί να αντικατασταθεί από τη δημιουργία πακέτου .deb.

Μπορούμε τώρα να «παίξουμε» με τον κώδικα. Μπορείτε να ανοίξετε κάθε αρχείο κώδικα χειροκίνητα με το gedit ή απλά πιο απλά με την εντολή που αναφέρθηκε πιο πάνω:

# quickly edit

Με αυτήν την εντολή ανοίγουν όλα τα αρχεία στο gedit. Θα δείτε τρία αρχεία. Το “__init__.py” , το “downloaderconfig.py” και το “downloader”. Το “__init__.py” είναι εκείνο που περιέχει τον κώδικα που εκτελείται απευθείας από το Quickly, άρα, ας του ρίξουμε μια ματιά (εικόνα 2)

Ακριβώς κάτω από την αρχή της “def main()” θα δείτε ότι αρχικοποιούνται τα options του «Downloader» και μαζί ένα παράδειγμα ενός easter egg. Κάνοντας scroll down θα δείτε την παρακάτω γραμμή κώδικα:

print _("I'm launched and my args are: %s") % (" ".join(args))

Αν θυμάστε, πιο πάνω, την πρώτη φορά που έτρεξε το πρόγραμμα, είδαμε στην οθόνη του τερματικού το μήνυμα που παράγεται από την παραπάνω εντολή. Δίπλα από το μήνυμα μπορείτε να δείτε ένα ιδιότυπο πεδίο, το “(" ".join(args)“. Αυτό το πεδίο συγκεντρώνει τα ορίσματα με τα οποία τρέχει ο χρήστης το πρόγραμμα και επιστρέφει το “I'm launched and my args are: %s“ ακολουθούμενο από αυτά τα ορίσματα (εικόνα 3) Εμείς θα αξιοποιήσουμε αυτό το πεδίο για να “στέλνουμε” στο πρόγραμμα την διεύθυνση του αρχείου που θέλουμε να κατεβάσουμε από το Ιντερνετ. Και πώς θα το κάνουμε αυτό;

Ακριβώς από πάνω από την “main()" δηλώστε άλλη μια συνάρτηση και ονομάστε την “download(url)". Διαμορφώστε την καινούργια συνάρτηση ώστε να περιέχει τον παρακάτω κώδικα (θα βρείτε όλον τον κώδικα στο φάκελο Magazine στο συνοδευτικό DVD):

def download(url):
       import urllib
       print _("Downloading: %s") % (" ".join(url))
       webFile = urllib.urlopen(url)
       try:
       localFile = open(url.split('/')[-1], 'w')
       localFile.write(webFile.read())
       except:
          print 'Could not download'
       webFile.close()
       localFile.close()

Και στο “__init__.py”, αντικαταστήστε την γραμμή

“print _("I'm launched and my args are: %s") % (" ".join(args))"

με την εντολή:

“download(args[0])".

Με τον κώδικα που προσθέσαμε στην συνάρτηση που δημιουργήσαμε, πρώτα πρώτα προσθέτουμε τις λειτουργίες της βιβλιοθήκης «urllib» , ύστερα ανοίγουμε τον σύνδεσμο του αρχείου και προσπαθούμε να κατεβάσουμε το αρχείο αυτό και να το «γράψουμε» σε ένα τοπικό αρχείο. Σε κάθε περίπτωση, γνωστοποιούμε στον χρήστη το αποτέλεσμα της ενέργειας αυτής.

Στο τέλος κλείνουμε τα ανοιχτά αρχεία και επιστρέφουμε στην main. Μπορούμε τώρα να τρέξουμε το πρόγραμμα, δίνοντας του σαν όρισμα έναν σύνδεσμο, για παράδειγμα ενός αρχείου κειμένου ή μιας σελίδας html (εικόνα 4):

# quickly run http://www.google.com/index.html

Αφού δείτε τα σχετικά μηνύματα, και κάνετε ένα «ls» στον τρέχων κατάλογο θα δείτε το αρχείο που θέλατε να κατεβάσετε (στην προκειμένη το «index.html»). Με αυτόν τον κώδικα μπορείτε να κατεβάσετε, πρακτικά, ότι θέλετε. Μεταξύ αυτών και αρχεία κειμένου, εικόνες, συμπιεσμένα αρχεία, βίντεο κτλ.

ΣΥΜΒΟΥΛΗ

Αν είσαστε καινούργιοι στην Python, μπορείτε να βρείτε πάρα πολλά παραδείγματα και tutorial σε Python στις σελίδες: http://goo.gl/yoKOg και http://goo.gl/D7yHh

Αν δεν έχετε λογαριασμό στο Launchpad μπορείτε να δημιουργήσετε ακολουθώντας απλά το παρακάτω link και συμπληρώνοντας τα στοιχεία που θα σας ζητηθούν: http://goo.gl/6V3tc

 

Σύνδεσμοι

[1] Η ιστοσελίδα του Quickly:  http://launchpad.net/quickly
[2] Το wiki της Python  http://goo.gl/D3W48


1  Η πρώτη μας εφαρμογή για το Ubuntu. Δεν κάνει κάτι αλλά δεν γράψαμε ούτε γραμμή κώδικα!


2  Στο αρχείο __init__.py βρίσκεται ο κώδικας  που εκτελείται απευθείας από το Quickly


3   Το προγραμματάκι μας διαβάζει τα ορίσματα που του δίνουμε και τα τυπώνει στην οθόνη.


4  Το πρώτο μας ολοκληρωμένο πρόγραμμα επί το έργον. Κατεβάζει την αρχική σελίδα του Google.

WHO IS WHO
Ο Κωνσταντίνος είναι φοιτητής Μηχανικών Η/Υ και περνάει την ώρα του δημιουργώντας το Cinux και προγράμματα.

Δώσε αστέρια!

MO: 5 (ψήφοι: 2)