GNOME.ORG

24 hours a day, 7 days a week, 365 days per year...

March 31, 2024

Τι είναι το Fedora; Όλα όσα πρέπει να γνωρίζετε...

Fedora Logo
Μαζί με το openSUSE, το Arch και το Debian, το Fedora είναι μία από τις «τέσσερεις μεγάλες» διανομές Linux. Ανάγεται η καταγωγή του στο Red Hat Linux, την αρχική διανομή που βασίζεται σε RPM.

Το Fedora είναι γνωστό για τις τεχνολογίες αιχμής, το πιο πρόσφατο λογισμικό και τις συχνές ενημερώσεις. Είναι επίσης μια από τις λίγες μεγάλες διανομές που αγκαλιάζουν το GNOME vanilla. Τον τελευταίο καιρό, η διανομή έχει γίνει πιο φιλική προς το χρήστη, με οθόνη καλωσορίσματος, υποστήριξη Flatpak και δυνατότητα ενεργοποίησης αποθετηρίων τρίτων κατά τη ρύθμιση.

Ιστορία του Fedora

Η ιστορία του Fedora είναι παράλληλη από την ιστορία του Red Hat. Η διανομή ήταν αρχικά γνωστή ως "Fedora Linux", στη συνέχεια "Fedora Core", πριν τελικά καταλήξει στο Fedora.

Το Fedora Linux ήταν ένα αποθετήριο τρίτου κατασκευαστή για το αρχικό Red Hat Linux, ενώ το Fedora Core ήταν μια δωρεάν έκδοση του Red Hat Enterprise Linux που διατηρείται από την κοινότητα. Σήμερα, το Fedora είναι upstream για το Red Hat Enterprise Linux και χρησιμεύει ως μια καλή προεπισκόπηση του τι πρόκειται να γίνει στην "πληρωμένη" έκδοση Workstation.

Ενώ είναι κοινοτικό έργο, το Fedora προφανώς χρηματοδοτείται από τη Red Hat, η οποία ανήκει πλέον στην IBM.

Αξιοσημείωτα χαρακτηριστικά του Fedora

Με μια τόσο μακρά ιστορία, τα επιτεύγματα του Fedora είναι αμέτρητα. Ευτυχώς, αυτή η διανομή έχει πολλά πράγματα αυτή τη στιγμή, επομένως δεν υπάρχει λόγος να επιστρέψουμε στην αρχαία ιστορία για τα κυριότερα σημεία.

1. Κυκλοφορεί με το αυθεντικό GNOME ως προεπιλογή

Ένα από τα μεγαλύτερα πλεονεκτήματα του Fedora είναι η κυκλοφορία του με το αυθεντικό GNOME.

Θα νομίζατε ότι επειδή το GNOME είναι ένα από τα "δύο μεγάλα" περιβάλλοντα επιφάνειας εργασίας Linux και είναι τόσες πολλές διανομές που το χρησιμοποιούν, ότι το GNOME θα ήταν κοινό για όλους, αλλά όχι. Σήμερα, οι περισσότερες διανομές που κυκλοφορούν με το GNOME περιλαμβάνουν πολλές τροποποιήσεις που προσπαθούν να κάνουν το GNOME να συμμορφώνεται με τις συμβάσεις GUI της δεκαετίας του '90.

Το Fedora δεν το κάνει αυτό. Αντίθετα, παρέχει ένα από τα πιο "καθαρά" και πιο ενημερωμένα παραδείγματα του GNOME.

2. Φιλικό προς το χρήστη

Ενώ πολλές διανομές ξεπερνούν τα όρια για να βοηθήσουν τους νέους χρήστες με προγράμματα εγκατάστασης γραφικών και οθόνες καλωσορίσματος, κανείς δεν περίμενε πραγματικά να κάνει κάτι αντίστοιχο το Fedora. Αλλά το έκανε. Το Fedora υποστηρίζει το Flatpak out-of-the-box εκτός από τα αρχεία RPM.

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

3. Προσφέρει λογισμικό αιχμής

Το Fedora ενημερώνεται κάθε έξι μήνες, δεν έχει έκδοση LTS, ώστε να λαμβάνετε πάντα τις πιο πρόσφατες ενημερώσεις και η πιο πρόσφατη έκδοση είναι πάντα η κορυφαία έκδοση.

Πέρα από τις συχνές αναβαθμίσεις, το Fedora κερδίζει τους περισσότερους αντιπάλους του στη κυκλοφορία ως προεπιλεγμένο λογισμικό αιχμής, ανοιχτού κώδικα. Ήταν η πρώτη μεγάλη διανομή που άλλαξε από το X11 στο Wayland και από το PulseAudio στο PipeWire.

4. Το Fedora είναι αξιόπιστο

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

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

Αν θέλετε να ζείτε στα άκρα, υπάρχουν εκδόσεις ανάπτυξης του Fedora όπως το Rawhide.

Εκδόσεις Fedora

Το Fedora προσφέρει τρεις κανονικές εκδόσεις και τρεις επίσημες "αναδυόμενες εκδόσεις". Ωστόσο, μόνο δύο από αυτά τα έξι είναι για καθημερινή χρήση από έναν τελικό χρήστη. Θα παραλείψουμε τις "γεύσεις" που εστιάζονται σε διακομιστή και σε IoT.

1. Workstation

Fedora Workstation
Το Fedora Workstation είναι η κορυφαία έκδοση του έργου. Διαθέτει την τελευταία τρέχουσα σταθερή έκδοση GNOME και υποστήριξη Flatpak out-of-the-box.

Λήψη: Workstation Fedora (δωρεάν & ανοιχτού κώδικα)

2. Silverblue

Η αναδυόμενη έκδοση Fedora Silverblue είναι μια "αμετάβλητη" παραλλαγή του Fedora Workstation. Η κύρια διαφορά είναι ότι οι χρήστες είναι πιθανό να αντιμετωπίσουν προβλήματα με την εγκατάσταση RPM, καθώς το Flatpak είναι η εγγενής μορφή πακέτου του Silverblue.

Λήψη: Fedora Silverblue (δωρεάν & ανοιχτού κώδικα)

3. Kinoite

Το Kinoite είναι μια ανερχόμενη έκδοση του Fedora που δεν εμφανίζεται ακόμα στην αρχική σελίδα. Το Kinoite είναι απλώς μια εναλλακτική λύση με "γεύση" KDE Plasma εναλλακτικό του Silverblue.

Λήψη: Fedora Kinoite (δωρεάν & ανοιχτού κώδικα)

4. Sericea

Ο δημοφιλής διαχειριστής παραθύρων πλακιδίων Sway προσφέρεται από τη Fedora Sericea με "αμετάβλητο" τρόπο. Κάνει το Sway προσιτό και ενδιαφέρον τόσο στους νέους όσο και στους έμπειρους χρήστες που προτιμούν να μην αλληλεπιδρούν με το περιβάλλον τους μέσω ποντικιού, επιφάνειας αφής ή άλλης συσκευής κατάδειξης. Το Fedora Sericea προσφέρει μια ολοκληρωμένη εμπειρία με μια απλή διεπαφή χρήστη και περιλαμβάνει ελαφριές εφαρμογές για περιήγηση στο web, σύνταξη κειμένου και αναπαραγωγή πολυμέσων.

Λήψη: Fedora Kinoite (δωρεάν & ανοιχτού κώδικα)

Fedora Spins

Όπως πολλές διανομές, το Fedora προσφέρει μια ποικιλία εναλλακτικών λύσεων με μια ποικιλία περιβαλλόντων επιφάνειας εργασίας. Το Fedora ονομάζει αυτές τις παραλλαγές "Spins".

1. KDE Plasma Desktop

Fedora KDE Plasma
Το KDE Plasma Spin του Fedora αφήνει ανέπαφες τις περισσότερες προεπιλογές του KDE, αλλάζοντας μόνο την ταπετσαρία και το εικονίδιο εκκίνησης εφαρμογών και επιτρέποντας το διπλό κλικ για άνοιγμα/εκκίνηση.

Λήψη: Fedora KDE Plasma Desktop Spin (δωρεάν & ανοιχτού κώδικα)

2. XFCE Desktop

Fedora XFCE
Το Fedora XFCE Spin χρησιμοποιεί την παραδοσιακή διάταξη διεπαφής τύπου BSD/Mac. Φαίνεται πολύ ωραίο για ένα ελαφρύ περιβάλλον επιφάνειας εργασίας.

Λήψη: Fedora XFCE Desktop Spin (δωρεάν & ανοιχτού κώδικα)

3. Cinnamon Desktop

Fedora Cinnamon
Παραδόξως, το Fedora προσφέρει το Cinnamon, ένα προϊόν του Linux Mint.

Εδώ το Cinnamon διαθέτει την επωνυμία Fedora, μπλε χρώμα με έμφαση, λεπτή γραμμή εργασιών και λείπει κυρίως τα XApps του Mint. Παρά αυτές τις αλλαγές, είναι αναζωογονητικό να βλέπεις το Cinnamon να χρησιμοποιείται διαφορετικά από ό,τι στο Linux Mint.

Λήψη: Fedora Cinnamon Desktop Spin (δωρεάν & ανοιχτού κώδικα)

4. MATE-Compiz Desktop

Fedora MATE-Compiz
Κολλημένοι στο χρόνο; Το Fedora MATE-Compiz Spin είναι τέλειο για όσους λαχταρούν τις μέρες δόξας του GNOME 2 Ubuntu και τα εντυπωσιακά εφέ επιφάνειας εργασίας.

Λήψη: Fedora MATE-Compiz Desktop Spin (δωρεάν & ανοιχτού κώδικα)

5. i3 Tiling Window Manager

Fedora i3 Tiling Window Manager
Ναι, το Fedora έχει ακόμη και ένα tiling window manager spin, οπότε τώρα μπορείτε και εσείς να δημοσιεύετε στο r/unixporn. Πέρα από την πλάκα, το i3 είναι ένα από τα πιο δημοφιλή WM για πλακάκια και ένα τέλειο σημείο εκκίνησης για να μπείτε στον κόσμο των tiling WM που βασίζονται σε πληκτρολόγιο.

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

Λήψη: Fedora i3 Tiling WM Spin (δωρεάν & ανοιχτού κώδικα)

6. Sway Tiling Window Manager

Fedora Sway Tiling Window Manager
Το Fedora Sway Spin παρέχει τον δημοφιλές διαχειριστή παραθύρου πλακιδίων Sway. Κάνει το Sway προσβάσιμο και ελκυστικό τόσο για αρχάριους όσο και για προχωρημένους χρήστες που προτιμούν να μην χρησιμοποιούν το ποντίκι, την επιφάνεια αφής ή άλλη συσκευή κατάδειξης για να αλληλεπιδρούν με το περιβάλλον τους. Διαθέτει ελαφριές εφαρμογές για περιήγηση στον Ιστό, επεξεργασία κειμένου και αναπαραγωγή πολυμέσων, το Fedora Sway Spin προσφέρει μια ολοκληρωμένη εμπειρία με ένα μινιμαλιστικό περιβάλλον χρήστη.

Λήψη: Fedora Sway Tiling WM Spin (δωρεάν & ανοιχτού κώδικα)

7. LXQt Desktop

Fedora LXQt Spin
Χωρίς να σταματά στα "μεγάλα τρία" περιβάλλοντα επιφάνειας εργασίας, το Fedora προσφέρει επίσης το LXQt. Αυτή η εναλλακτική λύση του LXDE που βασίζεται σε Qt παρέχει μια απλή εμπειρία που μοιάζει με τα Windows XP.

Λήψη: Fedora LXQt Desktop Spin (δωρεάν & ανοιχτού κώδικα)

8. Budgie Desktop

Fedora Budgie
Το Fedora Budgie Spin παρουσιάζει το Budgie Desktop, μια πλούσια σε χαρακτηριστικά, μοντέρνα επιφάνεια εργασίας. Αυτό το Spin έχει σχεδιαστεί για να ευθυγραμμίζεται στενά με το upstream Budgie Desktop, παρέχοντας μια εμπειρία σχεδόν βανίλια με ένα επιλεγμένο σύνολο προεπιλεγμένων εφαρμογών που ταιριάζουν καλύτερα με το Budgie.

Λήψη: Fedora Budgie Desktop Spin (δωρεάν & ανοιχτού κώδικα)

9. SOAS (Sugar on a Stick)

Fedora SOAS (Sugar on a Stick)
Αφού εξαντλήθηκαν όλα τα περιβάλλοντα επιφάνειας εργασίας που έχετε ακούσει, το Fedora συνεχίζει να εντυπωσιάζει με το Fedora spin SOAS. Ίσως το γνωρίζετε καλύτερα ως Sugar on a Stick, το οποίο όπως υποδηλώνει το όνομά του είναι Sugar on a bootable USB stick.

Το περιβάλλον επιτραπέζιου υπολογιστή πρώιμης εκμάθησης έγινε ευρέως γνωστό όταν επιλέχθηκε ως το λειτουργικό σύστημα για το έργο OLPC (Ένας φορητός υπολογιστής ανά παιδί). Λήψη: Fedora SOAS Spin (δωρεάν & ανοιχτού κώδικα)

10. Phosh

Fedora Phosh
Το Phosh spin παρέχει μια φιλική διεπαφή προς κινητά, βασισμένη στην αφή της οθόνης. Είναι κατασκευασμένο για φορητές συσκευές όπως τηλέφωνα και tablet, αλλά και φορητούς υπολογιστές με οθόνες αφής.

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

Πίσω από αυτήν την επιφάνεια εργασίας βρίσκεται ολόκληρη η συλλογή πακέτων Fedora τα οποία μπορείτε να εγκαταστήσετε και να χρησιμοποιήσετε όπως σας ταιριάζει. Το Phosh είναι χτισμένο σε wayland και άλλες σύγχρονες τεχνολογίες επιτραπέζιων υπολογιστών gnome.

Λήψη: Fedora Phosh Spin (δωρεάν & ανοιχτού κώδικα)

Σε ποιον απευθύνεται το Fedora;

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

Εάν είστε λάτρης του GNOME, το Fedora είναι η μόνη μεγάλη διανομή που στέλνει μια ενημερωμένη έκδοση του GNOME vanilla. Οι χρήστες Mac και οι νεότεροι που μεγάλωσαν με κινητές συσκευές μπορεί επίσης να εκτιμήσουν το GNOME. Και οι χρήστες φορητών υπολογιστών θα ερωτευτούν τις χειρονομίες της επιφάνειας αφής Wayland για έλεγχο του χώρου εργασίας.

February 23, 2023

Νους υγιής εν κώδικα υγιεί

Open Source Software
Αυτό είναι εμπνευσμένο θέμα που το έχω αγαπήσει ιδιαίτερα.

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

Νομίζω ότι είναι απαραίτητο να υπενθυμίσουμε στους εαυτούς μας ότι δεν είμαστε ρομπότ. Χρειαζόμαστε ελεύθερο χρόνο κάθε τόσο και πρέπει να ισορροπήσουμε σωστά τη ζωή μας. Θα πρέπει να ζείτε τη ζωή σας. Δεν πρέπει να ξοδεύετε κάθε στιγμή που ξυπνάτε στο project που δουλεύετε, διότι δεν είναι υγιές. Μπορείτε να ξοδέψετε ένα μεγάλο μέρος του χρόνου σας σε projects που σας ευχαριστούν.

Το πιο σημαντικό πράγμα είναι να λέτε συχνά ΟΧΙ. Αυτό είναι και δικό μου λάθος. Μπορείτε να πειτε ΟΧΙ δεν μπορώ όταν κάποιος σας ρωτά "Μπορείς να κάνεις αυτό;". Βέβαια μπορείτε να πείτε και ΝΑΙ μερικές φορές. Μην τα ισοπεδώνουμε.

Υπάρχουν άλλα σημαντικά πράγματα.
  • Ένα από τα πιο σημαντικά πράγματα είναι ο ύπνος. Να κοιμάστε πολλές ώρες. Να ξεκουραστείτε.
  • Επίσης σημαντικές είναι οι φιλίες. Μπορείτε να έχετε φιλίες. Φιλίες εντός του project είτε εκτός. Θα σας κάνουν να αισθανθείτε περίφημα.
  • Υιοθετήστε έναν έναν υγιεινό τρόπο ζωής και ίσως μερικές φορές σκεφτείτε τη δική σας κατάσταση του μυαλού. Πώς αισθάνεστε και πώς σας κάνει να νιώθετε το project που συνεισφέρετε. Ίσως επειδή ίσως σας αγχώνουν, είναι καλό να καταλάβετε γιατί αγχώνεστε και έτσι κάνετε σωστά την ερώτηση στον εαυτό σας.

Να έχετε υπόψη σας ότι τα projects ανοικτού λογισμικού αποτελούν μια εθελοντική προσπάθεια. Δεν βγάζετε κάτι από αυτό, σωστά; Οπότε θα πρέπει να έχετε στο νού σας να πάρετε κάτι από αυτό. Ίσως είναι απόλαυση, ίσως είναι απλώς η αίσθηση της κοινότητας, η αίσθηση της φιλίας που βιώνουμε. Αυτό που σίγουρα δεν θέλετε να έχετε είναι να χάσετε τον ύπνο σας. Γι' αυτό αν υπάρχει ένα ιδιαίτερα δύσκολο πρόβλημα που αντιμετωπίζετε στην καθημερινή σας δουλειά στο project σας, απλώς ρωτήστε κάποιον άλλο. Πάρτε τη γνώμη κάποιου άλλου. Μην χάσετε τον ύπνο σας. Ο ύπνος είναι πολύ σημαντικός. Φυσικά μερικές φορές μπορεί απλώς να χρειαστεί να αποστασιοποιηθείτε από τα πράγματα.

Ορίστε μερικές συμβουλές, μερικές πολύ γενικές συμβουλές:

  • Να ξέρετε τα όριά σας. Μην αγχώνεστε πολύ αν δεν μπορείτε να διορθώσετε όλα τα σφάλματα στον κόσμο. Τα μισά από αυτά μπορεί να ειναι ΟΚ. Μην απλώσετε το εύρος ζώνης σας, ακόμα και αν πιστεύετε ότι αυτό που θα κάνετε θα σας αποφέρει ευχαρίστηση.
  • Μερικές φορές είναι εντάξει να κάνετε διακοπές για μερικά χρόνια. Εννοώ ότι μπορείτε να απέχετε από το project ανοικτού λογισμικού που συνεισφέρετε. Όλη η κοινότητα θα σας αγαπά ακόμα όταν επιστρέψετε. Και ελπίζω ότι θα επιστρέψετε.
  • Δεν χρειάζεται να σχεδιάζετε υπερβολικά τη ζωή σας. Να είστε ελεύθεροι να δεσμευτείτε στο project που σας άρεσε και συνεισφέρατε τόσο χρόνο, μόνο και μόνο επειδή συντηρείτε ένα κομμάτι λογισμικού δεν σημαίνει ότι έχετε το παντρευτήκατε και πρέπει να το συντηρείτε για πάντα. Μπορεί να κάνετε ένα βήμα πίσω και να μπείτε σε ένα άλλο έργο πχ έρευνας και ανάπτυξης.
  • Αν διαπιστώσετε ότι κάτι δεν σας προσφέρει ικανοποίηση, δεν σας προσφέρει απόλαυση, μειώστε τον χρόνο που διαθέτετε σε αυτό. Καλύτερα είναι να το αφήσετε τελείως, ιδιαίτερα αν είναι μια λίστα αλληλογραφίας ή κάτι άλλο που δεν οδηγεί σε τίποτα παραγωγικό ούτως ή άλλως
Healthy Git

August 18, 2014

OPW final report - Greek Translation

Finally, my first contribution to the GNOME Project within the OPW came to an end!!! I can say it was more difficult than expected and required much learning, reading and research for a simple translator like me who has no programming knowledge. 
The main job of the project was to translate and review all GNOME project files in Greek. The Greek translation of GNOME was at a good level, thanks to the work done in previous years by the members of the Greek community. After discussion with the community and my mentor, we found it useful to first do a research on available translation programs and to write a quick guide on How to start using GNOME's translation system.

In order to deliver uniformity we standardized terms and created from scratch a new glossary which took some extra time but is an important tool for all future translations. Also as a new translator Ι wanted a tool to help me search for our glossary terms among the files. The good Open-tran.eu is closed and "grep"-ing po files weren't so easy and efficient for me.
So along with the glossary, we came up with the idea to set up a pylyglot instance for our language. That was something new and experimental for Greek GNOME community, but it proved to be handy as it helped us to speed up the review and translation process. We could easily check the translated files and the consistency of the whole GNOME environment by just searching specific terms from the glossary at our pylyglot website.

Along the way, and after communication with the mentor and the other members of the community, we decided to modify the initial time schedule, aiming precision and consistency especially regarding the new release files of GNOME 3.14 which I believe has been achieved greatly.  

Many thanks to mentor Efstathios Iosifidis, Tom Tryfonidis and all other team members who helped me on this effort!!!
I can say so far the journey with GNOME has been exciting all the way. 

Thank you GNOME!

August 04, 2014

Greek Translation - OPW Report #7 – week 10-11

This week I had some strange issues with my translation files. Strings I never changed were shown as changed from me in the diff with the repository files. It seems to be a conflict with older files and I still try to figure out whether the problem my PO editor is or the localization application (l10n). If anyone had similar issues or any idea of the cause, I would appreciate any kind of help.

I'm still working on the 3.14 release files and reviewed – translated following ones:

UI Translations:
seahorse, vino, gnome-disk-utility, gdm, gucharmap, gnome-desktop           

Only translation of new strings (files have already been reviewed):
gnome-photos, file-roller, bijiben, iagno, gnome-shell, gnome-control-center, gitg, Evince Document Viewer, gedit, gnome-boxes, gnome-klotski, gnome-mahjongg, gnome-sudoku, dconf, tracker, gtksourceview, gnome-maps, gnome-weather

Documentation:
GNOME User Documentation, gtk-doc



January 23, 2012

Bypass Firewalls with Android SSH Tunneling

January 05, 2012

How to clean PHP code after injection

Did someone hack your PHP files ? Is that possible ? Oooh yes. It happens to everybody and the difference between "everybody" is how often it happens. And code injection is one type of attack, I won't refer to cases that someone changed the homepage and you can just restore the last backup.

So, what can you do if you find out that someone injected code into your PHP files ?
Read more...

July 23, 2011

Systray και popup menu με το Glade

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

Θα φτιάξουμε ένα μικρό slider που θα ελέγχει την ένταση του ήχου, όπως αυτό που υπάρχει ήδη στα περισσότερα συστήματα linux. Έχει καθαρά εκπαιδευτικούς σκοπούς δείχνοντας την αλληλοεπίδραση μεταξύ των σημάτων του systray και του προγράμματος. Για τον έλεγχο του ήχου θα χρησιμοποιήσουμε είτε την βιβλιοθήκη alsaaudio της python είτε την εντολή amixer του συστήματος της ALSA.

Δημιουργούμε το παράθυρο μας στο Glade και του δίνουμε όνομα volumewindow. Στον Τύπο παραθύρου επιλέγουμε Αναδυόμενο (popup). Αυτού του είδους τα παράθυρα δεν έχουν πλαίσιο και διακοσμήσεις και δεν τα ελέγχει ο window manager του συστήματος. Στις αιτήσεις πλάτους και ύψους δίνουμε αντίστοιχα 60 και 170 pixels, ενώ στο Πλάτος πλαισίου δίνουμε τιμή 2. Αυτό είναι το περιθώριο που θα έχουν όλα τα αντικείμενα του παραθύρου από τις άκρες του.

Στην συνέχεια προσθέτουμε ένα frame και αφαιρούμε τα alignment και label που δημιουργεί. Επιλέγουμε την σκίαση της αρεσκείας μας και προσθέτουμε μέσα του ένα πλαίσιο fixed. Αυτό το πλαίσιο μας επιτρέπει να τοποθετήσουμε αντικείμενα σε συγκεκριμένες θέσεις μέσα του. Βλέπουμε ότι έχουμε και αυτήν την δυνατότητα εκτός από την τοποθέτηση σε γραμμές και στήλες. Στην συγκεκριμένη περίπτωση είναι χρήσιμο γιατί το παράθυρο δεν μπορεί να αλλάξει μέγεθος και έτσι με λίγο πειραματισμό μπορούμε να τοποθετήσουμε τα διάφορα widget όπου ακριβώς θέλουμε και να είμαστε σίγουροι ότι πάντα θα φαίνονται έτσι.

Προσθέτουμε μία Κατακόρυφη κλιμακα (slider) και την ονομάζουμε masterslider. Θέτουμε τα Ψηφία στο μηδέν, την Θέση τιμής κάτω και την ορίζουμε σαν Αντεστραμμένη. Προσθέτοντας μια νέα Ρύθμιση το glade την ονομάζει αυτόματα adjustment1 και της δίνει ορισμένες αρχικές τιμές. Αλλάζουμε την Μέγιστη τιμή σε 100, τον Ρυθμό αύξησης βήματος σε 1, την Αύξηση σελίδας σε 10 και το Μέγεθος σελίδας σε 0.

Επιστρέφοντας στο masterslider και στο tab packing βλέπουμε ότι τα συνηθισμένα Γέμισμα και Ανάπτυξη έχουν αντικατασταθεί από τα Θέση Χ και Θέση Υ , λόγω του ότι βρίσκετε μέσα σε fixed πλαίσιο. Σε αυτά βάζουμε αντίστοιχα τις τιμές 10 και 6. Στα Σήματά του και συγκεκριμένα στο value-changed δίνουμε σαν handler την μέθοδο masterslider_change. Αυτή θα αλλάζει την ένταση του ήχου ανάλογα με την θέση του slider.

Στην συνέχεια προσθέτουμε ένα button με το όνομα button, και στην ετικέτα του βάζουμε Mixer. Στις θέσεις Χ και Υ βάζουμε 1 και 132 αντίστοιχα, ενώ στο σήμα clicked δίνουμε σαν handler button_clicked. Αυτή η μέθοδος θα εμφανίζει το gnome-alsamixer, αν υπάρχει στο σύστημα.

Με το μικρό μας παράθυρο έτοιμο ας προσθέσουμε τα υπόλοιπα αντικείμενα που χρειαζόμαστε για το πρόγραμμα μας. Επιλέγουμε ένα Αναδυόμενο μενού (popup) και του δίνουμε το όνομα menu. Με το menu επιλεγμένο πατάμε edit στην μπάρα εργαλείων και προσθέτουμε δύο Στοιχεία εικόνας. Για το πρώτο επιλέγουμε το έτοιμο κουμπί stock Περί και για το άλλο το Έξοδος. Στα activate σήματα τους βάζουμε σαν handler αντίστοιχα τις μεθόδους about dialog και close_window.

Το βασικότερο μας αντικείμενο είναι ένα Εικονίδιο γραμμής κατάστασης το οποίο θα το βρούμε στα Διάφορα. Προσθέτουμε ένα και το ονομάζουμε staticon. Στο Pixbuf γράφουμε το όνομα του αρχείου του εικονιδίου που θα χρησιμοποιήσουμε. Υπάρχουν πολλά εικονίδια που μπορείτε να χρησιμοποιήσετε στον κατάλογο /usr/share/icons/gnome. Αντιγράψτε ένα της αρεσκείας σας στον ίδιο κατάλογο με τα αρχεία glade και python. Στον Τίτλο δίνουμε SysAudio. Αυτό θα εμφανίζεται όταν περνάει ο δείκτης του ποντικιού από πάνω του. Στα Σήματα του δίνουμε στο activate την μέθοδο window_show και στο popup-menu την menu_popup. Η πρώτη μέθοδος εκτελείται όταν ο χρήστης κάνει αριστερό κλικ πάνω στο εικονίδιο και θα εμφανίσει το παράθυρο μας με τον slider, ενώ η δεύτερη όταν κάνει ένα από τα υπόλοιπα και συγκεκριμένα δεξί κλικ, εμφανίζοντας το μενού της εφαρμογής.

Τα βασικά αντικείμενα της εφαρμογής είναι τα εξής:

Σε αυτό το σημείο το αρχείο glade είναι έτοιμο, έχουμε προσδιορίσει ότι θα χρειαστούμε και το σώζουμε σαν volumecontrol.glade. Το πρόγραμμα μας σε python είναι απλό και περιέχει στοιχεία που έχουμε δει ήδη.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
try:
    import alsaaudio
    HAVEALSA=True
except:
    import subprocess
    import commands
    HAVEALSA=False
import pygtk
pygtk.require('2.0')
import gtk

class VolumeControl():

    def __init__(self):
        builder=gtk.Builder()
        builder.add_from_file("volumecontrol.glade")
        builder.connect_signals(self)
        self.window = builder.get_object("volumewindow")
        self.window_position = (0, 0)
        self.staticon = builder.get_object("staticon")
        self.menu = builder.get_object("menu")
        self.masterslider = builder.get_object("masterslider")

    def close_window(self, widget, data=None):
        gtk.main_quit()

    def button_clicked(self, widget):
        os.system('gnome-alsamixer')

    def window_show(self, widget, data=None):
        if self.window.get_property('visible'):
            self.window.hide()
        else:
            self.masterslider.set_value(self.get_master_volume())
            self.set_window_position()
            self.window.move(self.window_position[0], self.window_position[1])
            self.window.show_all()
            self.window.present()
           
    def menu_popup(self, widget, button, time, data = None):
        if button == 3:
            self.menu.show_all()
            self.menu.popup(None, None, None, 3, time)

    def masterslider_change(self, widget):
        volume = int(widget.get_value())
        if HAVEALSA:
            mix = alsaaudio.Mixer()
            mix.setvolume(volume)
        else:
            proc = subprocess.Popen('/usr/bin/amixer sset Master ' \
                    + str(volume) + '%', shell=True, stdout=subprocess.PIPE)
            proc.wait()

    def set_window_position(self):
        staticon_geometry = self.staticon.get_geometry()[1]
        if staticon_geometry.y <= 200:
            y_coords = staticon_geometry.y
        else:
            y_coords = staticon_geometry.y-180
        self.window_position = (staticon_geometry.x+20, y_coords+10)

    def get_master_volume(self):
        if HAVEALSA:
            mix = alsaaudio.Mixer()
            return mix.getvolume()[0]
        else:
            output = commands.getoutput('/usr/bin/amixer sget Master | grep "%"')
            master = output.split('\n')[0]
            start = master.find('[') + 1
            end = master.find('%]', start)
            return float(master[start:end])

    def aboutdialog(self, widget, data=None):
        about = gtk.AboutDialog()
        about.set_program_name('Volume Control')
        about.set_version('1.0')
        about.set_comments(u'Πρόγραμμα ελέγχου της στάθμης του ήχου.')
        about.run()
        about.destroy()

    def main(self):
        gtk.main()

if __name__ == "__main__":
    app=VolumeControl()
    app.main()

Στην αρχή προσπαθούμε να φορτώσουμε την βιβλιοθήκη alsaaudio και αν αυτό αποτύχει φορτώνουμε τις subprocess και command για να μπορέσουμε να εκτελέσουμε εντολή του συστήματος και να πάρουμε το αποτέλεσμα της. Ορίζουμε και μια μεταβλητή για να ξέρουμε αν έχουμε φορτώσει την alsaaudio ή όχι. Οι βασικές μέθοδοι είναι γνωστές από τα προηγούμενα άρθρα. Στην __init__ φορτώνουμε το glade αρχείο και ορίζουμε τις μεταβλητές που θα χρησιμοποιήσουμε. Η aboutdialog δημιουργεί και δείχνει το παράθυρο “Περί” όταν πατήσει ο χρήστης την αντίστοιχη επιλογή στο μενού και η close_window τερματίζει το πρόγραμμα.

Η get_master_volume επιστρέφει την τιμή που έχει η ένταση του ήχου κατά τη στιγμή της κλήσης της. Χρησιμοποιεί είτε την getvolume της alsaaudio είτε το αποτέλεσμα της εντολής “amixer sget Master”. Η set_window_position θέτει την θέση του παραθύρου λίγο πιο κάτω και λίγο πιο δεξιά από το εικονίδιο.

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

Η master_slider_change εκτελείται όταν ο χρήστης αλλάξει την θέση του slider και αναλόγως αυτής θέτει την τιμή της έντασης είτε με την setvolume είτε με την “amixer sset Master”.

Η menu_popup εμφανίζει το μενού της εφαρμογής. Τα popup menu χρειάζονται για να εμφανιστούν τον αριθμό του κουμπιού του ποντικιού που πατήθηκε και την χρονική στιγμή που έγινε το γεγονός. Αυτά και τα δύο μας τα δίνει το σήμα popup-menu του εικονιδίου, εμείς μένει μόνο να ελέγξουμε αν το κουμπί που πατήθηκε είναι το δεξί.

Η button_clicked εμφανίζει το gnome-alsamixer, αν είναι εγκατεστημένο, αλλιώς θα εμφανίσει μήνυμα λάθους στην γραμμή εντολών. Εδώ μπορείτε, με τις πληροφορίες από τα προηγούμενα άρθρα, να προσθέσετε ένα ErrorDialog για να ενημερώνεται ο χρήστης.

Είναι μια απλή εφαρμογή αλλά δείχνει τα στοιχεία που χρειάζονται για την δημιουργία ενός systray προγράμματος. Με τον ίδιο τρόπο διάφορα προγράμματα, όπως η Opera και το Transmission, βάζουν ένα εικονίδιο στο systray και το πρόγραμμα δεν τερματίζει αν ο χρήστης πατήσει το Χ στο παράθυρο του αλλά κρύβεται απλώς και εμφανίζεται πάλι αν ο χρήστης κάνει αριστερό κλικ στο εικονίδιο, ενώ με δεξί εμφανίζει είτε μενού είτε πληροφορίες του προγράμματος.

Τα αρχεία του άρθρου υπάρχουν σε .tar.gz εδώ

June 26, 2011

Σύνθετα αντικείμενα στο Glade (γ' μέρος)

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import gtk
import os
import codecs

CODEPAGES = ['utf_16','utf_8','cp1253','iso8859_7']
EOL = ['Windows','Unix','Mac']
DICT_EOL = {'Windows':'\r\n','Unix':'\n','Mac':'\r'}

class FileToConvert(object):

    def __init__(self,fn = None, cp = None, eol=None):
        self.fn = fn
        self.cp = cp
        self.eol = eol
        self.to_cp = ''
        self.to_eol = ''

    def checkfile(self,codefrom=None):
        encodings=CODEPAGES
        if codefrom:
            encodings=[codefrom]
        for enc in encodings:
            t1=codecs.open(self.fn,'r',enc)
            try:
                line=t1.readline()
                if '\r\n' in line:
                    self.eol = EOL[0]
                elif '\n' in line:
                    self.eol = EOL[1]
                elif '\r' in line:
                    self.eol = EOL[2]
                self.cp=enc
                t1.close()
                ret=True
                break
            except:
                ret=False
        return ret    

class ConvertFiles(object):

    def close_window(self, widget, data=None):
        gtk.main_quit()

    def delete_chooser(self, widget, data=None):
        return True

    def aboutmenu_clicked(self, widget, data=None):
        self.aboutdialog.run()
        self.aboutdialog.hide()

    def helpmenu_clicked(self, widget, data=None):
        import webbrowser
        webbrowser.open("help.html")

    def openmenu_clicked(self, widget, data=None):
        self.filechooser.show()

    def filterbox_changed(self, widget, data=None):
        if widget.get_active() == 0:
            self.filechooser.set_filter(self.txtfilter)
        if widget.get_active() == 1:
            self.filechooser.set_filter(self.srtfilter)
        if widget.get_active() == 2:
            self.filechooser.set_filter(self.allfilter)              

    def filelistview_key(self, widget, data=None):
        treeviewmodel, treeviewindex = widget.get_selection().get_selected()
        if (gtk.gdk.keyval_name(data.keyval) == 'Delete') and treeviewindex:
            treeviewmodel.remove(treeviewindex)

    def filelist_row_deleted(self,widget,data=None):
        del self.files[data[0]]
        self.statusbar.push(0,"Αφαίρεση αρχείου")

    def filechooser_cancel(self, widget, data=None):
        self.filechooser.hide()

    def filechooser_ok(self, widget, data=None):
        filenames=[]
        if self.files:
            for fi in self.files:
                filenames.append(fi.fn)
        errortxt=''
        i=0
        for fi in self.filechooser.get_filenames():
            if fi not in filenames:
                newfile = FileToConvert(fi)
                if newfile.checkfile():
                    self.files.append(newfile)
                    self.filelist.append([newfile.fn,newfile.cp,newfile.eol])
                    i+=1
                else:
                    errortxt+=u"Πρόβλημα στην ανάγνωση του αρχείου: %s.\n" % cf.fn
                    self.errordialog(errortxt)
        self.filechooser.hide()
        if i>0:
            self.statusbar.push(0,u"Επιτυχής αναγνωση %d αρχείων" % i)
        else:
            self.statusbar.push(0,"")

    def errordialog(self, errortxt):
        dialog=gtk.MessageDialog(parent=None,flags=gtk.DIALOG_MODAL & gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
        dialog.set_title(u"Σφάλμα")
        dialog.set_markup(u"<b>"+errortxt+"</b>")
        response=dialog.run()
        if response == gtk.RESPONSE_DELETE_EVENT or response == gtk.RESPONSE_OK:
           dialog.destroy()

    def savemenu_clicked(self, widget, data=None):
        errortxt=''
        if not self.files:
            self.errordialog(u"Δεν έχετε επιλέξει αρχεία.\n")
            return
        for fi in self.files:
            if self.codefrombox.get_active()>0:
                if not fi.checkfile(CODEPAGES[self.codefrombox.get_active()-1]):
                    errortxt+=u"Πρόβλημα στην ανάγνωση του αρχείου: %s.\n" % fi.fn
        if errortxt:
            self.errordialog(errortxt)
            self.statusbar.push(0,u"Δεν ήταν σωστή η κωδικοποίηση που ορίσατε.")
            return
        for i in range(len(self.files)):
            self.files[i].to_cp=CODEPAGES[self.codetobox.get_active()]
            self.files[i].to_eol=EOL[self.eolbox.get_active()]
        treeiter=self.filelist.get_iter_first()
        for fi in self.files:
            try:
                t1=codecs.open(fi.fn,'r',fi.cp)
                t2=codecs.open('tmp','w',fi.to_cp)
                for line in t1:
                    line=line.replace(DICT_EOL[fi.eol],DICT_EOL[fi.to_eol])
                    t2.write(line)
                t2.close()
                t1.close()
                os.rename('tmp',fi.fn)
            except:
                self.errordialog(u"Πρόβλημα στην μετατροπή του %s.\n" % fi.fn)
                success=False
            else:
                if fi.checkfile():
                    self.filelist.set_value(treeiter,1,fi.cp)
                    self.filelist.set_value(treeiter,2,fi.eol)
                    fi.to_cp = ''
                    fi.to_eol = ''
                    success=True
                else:
                    self.errordialog(u"Πρόβλημα στην τελική ανάγνωση του %s.\n" % fi.fn)
                    success=False
            treeiter=self.filelist.iter_next(treeiter)
        if success:
            self.statusbar.push(0,u"Επιτυχής μετατροπή")
        else:
            self.statusbar.push(0,u"Προβλήματα στην μετατροπή")
     
    def __init__(self):
        builder = gtk.Builder()
        builder.add_from_file("convert.glade")
        builder.connect_signals(self)
        self.window = builder.get_object("convertwindow")
        self.codefrombox = builder.get_object("codefrombox")
        self.codetobox = builder.get_object("codetobox")
        self.eolbox = builder.get_object("eolbox")
        self.codefromlist = builder.get_object("codefromlist")
        self.codetolist = builder.get_object("codetolist")
        self.eollist = builder.get_object("eollist")
        self.filelist = builder.get_object("filelist")
        self.codefromlist.append([u"Μαντεψιά"])
        for item in CODEPAGES:
            self.codefromlist.append([item])
            self.codetolist.append([item])
        for item in EOL:
            self.eollist.append([item])
        self.codefrombox.set_active(0)
        self.codetobox.set_active(0)
        self.eolbox.set_active(0)
        self.filechooser = builder.get_object("filechooser")
        self.aboutdialog = builder.get_object("aboutdialog")
        self.txtfilter = builder.get_object("txtfilter")
        self.srtfilter = builder.get_object("srtfilter")
        self.allfilter = builder.get_object("allfilter")
        self.filterbox = builder.get_object("filterbox")
        self.txtfilter.add_pattern('*.txt')
        self.txtfilter.add_pattern('*.TXT')
        self.srtfilter.add_pattern('*.srt')
        self.srtfilter.add_pattern('*.SRT')
        self.allfilter.add_pattern('*.*')
        self.filterbox_changed(self.filterbox)
        self.statusbar=builder.get_object("statusbar")
        self.files=[]
     
    def main(self):
        self.window.show()
        gtk.main()

if __name__== "__main__":
    app=ConvertFiles()
    app.main()  
Ξεκινάμε στην αρχή με τα απαραίτητα import. Το νέο εδώ είναι η βιβλιοθήκη codecs, η οποία θα μας χρησιμεύσει στις μετατροπές. Στην συνέχεια υπάρχουν τρεις σταθερές. Η πρώτη περιέχει τα λεκτικά των κωδικοποιήσεων έτσι όπως τα χρειάζεται η codecs και με αυτά γεμίζουμε και τα δύο μας combobox. H EOL σταθερά είναι αυτή που περιέχει τα λεκτικά για τα διάφορα τελειώματα γραμμής που υπάρχουν. Στην επόμενη σταθερά γίνεται συσχέτιση μεταξύ αυτών των λεκτικών και των πραγματικών τιμών που έχει το κάθε τέλος γραμμής.


Θα χρειαστούμε να ορίσουμε ένα αντικείμενο για κάθε αρχείο που θα διαλέξει ο χρήστης κι αυτό θα φτιαχτεί από την κλάση FileToConvert. Το αντικείμενο θα περιέχει τις εξής πληροφορίες: το όνομα του αρχείου, την κωδικοποίηση και το τέλος γραμμής που έχει πριν την μετατροπή καθώς και σε τι θέλουμε να το μετατρέψουμε. Η κλάση ακόμα περιλαμβάνει την μέθοδο checkfile η οποία προσπαθεί να μαντέψει ποια από τις τέσσερις κωδικοποιήσεις και ποιο από τα τρία EOL έχει το αρχείο. Αν είναι επιτυχής επιστρέφει True, αλλιώς False.


Στην κύρια κλάση έχουμε προσθέσει στην __init__ μέθοδο δύο μεταβλητές, την self.filelist η οποία είναι το μοντέλο του TreeView και την self.files στην οποία θα κρατάμε τα αντικείμενα FilesToConvert.


H μέθοδος filelistview_key εκτελείται όταν ο χρήστης πατήσει ένα πλήκτο. Η get_selected() επιστρέφει δύο τιμές το μοντέλο στο οποίο ανήκει το TreeView και τον αύξων αριθμό της επιλογής. Έτσι λοιπόν ελέγχουμε αν ο χρήστης έχει πατήσει Delete και αν έχει επιλέξει γραμμή. Τότε μόνο διαγράφουμε την αντίστοιχη επιλογή από το μοντέλο. Όταν διαγραφεί ένα στοιχείο από το μοντέλο εκτελείται η filelist_row_deleted στην οποία διαγράφουμε το αντίστοιχο αντικείμενο από την self.files.


Όταν ο χρήστης επιλέξει αρχεία φτιάχνουμε έναν προσωρινό πίνακα με τα ονόματα των αρχείων που υπάρχουν ήδη έτσι ώστε να αποφύγουμε τις διπλές εισαγωγές. Στην συνέχεια για κάθε αρχείο φτιάχνουμε το αντίστοιχο αντικείμενό του και καλούμε την chekfile για να προσδιορίσει τον τύπο του αρχείου και του τέλους της γραμμής του. Για κάθε επιτυχή αναγνώριση προσθέτουμε τα αντίστοιχα πεδία στην self.filelist για να εμφανιστούν στο TreeView.


Εδώ θα θέλαμε να αναφέρουμε ορισμένα στοιχεία για την codecs.open. Αυτή όταν ανοίγει ένα αρχείο για διάβασμα το ανοίγει πάντα σε binary mode. Αυτό έχει σαν αποτέλεσμα να μην χτυπάει λάθος όταν αρχείο δεν είναι text. Ακόμα επειδή οι λατινικοί χαρακτήρες έχουν την ίδια κωδικοποίηση τόσο σε utf-8 όσο και σε windows-1253 ή ISO8859-7 μπορεί να μην δώσει σωστό αποτέλεσμα σε αρχεία με μόνο τέτοιους χαρακτήρες. Ένα άλλο σημείο προσοχής είναι ότι η μόνη διαφορά, στους ελληνικούς εμφανίσιμους χαρακτήρες, μεταξύ των windows-1253 και ISO8859-7 είναι το άλφα κεφαλαίο τονούμενο (Ά), οπότε πάλι μπορεί να έχουμε λάθος προσδιορισμό. Γι´ αυτό και βάλαμε την επιλογή “Κωδικοποίηση από” για να μπορεί να επιλέξει ο χρήστης αν γνωρίζει την κωδικοποίηση του αρχείου προς μετατροπή.


Η μετατροπή γίνεται στην savemenu_clicked, ανοίγοντας με την σειρά τα αρχεία που υπάρχουν στην self.files με την κωδικοποίηση που έχει ορίσει ο χρήστης και σώζοντας τα σε ένα προσωρινό με την νέα. Αν όλα πάνε καλά τα ξαναδιαβάζει για να ενημερώσει το TreeView και για να δει ο χρήστης το αποτέλεσμα.


Καθ' όλη την διαδικασία της μετατροπής το πρόγραμμα ενημερώνει τον χρήστη με δύο τρόπους. Ο ένας είναι ο διάλογος μηνυμάτων που έχουμε δει και σε προηγούμενο άρθρο και ο άλλος είναι μέσω της statusbar. Η statusbar λειτουργεί σαν στοίβα LIFO. Βάζουμε στην στοίβα αυτό που θέλουμε να εμφανίσει με push και το αφαιρούμε με pop. Κάθε μήνυμα μπορεί να έχει και ένα αναγνωριστικό κωδικό, προσδιορίζοντας έτσι από πιο μέρος του προγράμματος προήλθε. Εδώ δεν χρησιμοποιούμε αυτήν την δυνατότητα γι' αυτό όλα τα μηνύματα έχουν σαν προσδιοριστικό το μηδέν.


Είδαμε σ' αυτό το άρθρο ορισμένα από τα πιο βασικά σύνθετα αντικείμενα του Gnome και του GTK και πως τα αναπτύσσουμε αυτά μέσα από το Glade. Βλέπουμε ότι ενώ αυτά είναι αρκετά πιο πολύπλοκα από ένα απλό label ή ένα text input, ωστόσο όλη η διαδικασία δημιουργίας και ελέγχου τους ολοκληρώνεται μέσα από το Glade προσθέτοντας ελάχιστο προγραμματιστικό βάρος.
 

May 26, 2011

Μαθαίνοντας τα πρόσθετα του Gnome shell

Gnome logo

Το gnome shell είναι το νέο interface του GNOME 3.Ήρθε να αντικαταστήσει τη παλιά επιφάνεια εργασίας του Gnome επιφέροντας αρκετές αλλαγές στη λειτουργικότητα αλλά και στην εμφάνιση του Gnome.

Μαζί με το gnome shell ήρθαν και νέα extensions (οι devs λένε πως δεν ήρθαν να αντικαταστήσουν τα applets!) κάνοντας τη ζωή μας πιο εύκολη !! Παρακάτω θα παρουσιάσω μερικά από τα extensions που βρήκα και με τον ένα ή αλλο τρόπο μπορούν να χρησιμεύσουν στον καθένα μας.

Περιεχόμενα

Πως εγκαθιστώ τα extensions του Gnome Shell ;
Πως θα ενεργοποιήσω τα πρόσθετα ;

Extensions που υπάρχουν για το Gnome Shell

Dock
Alternate-tab
Alternate-status-menu
Drive-menu
Places-menu
User-theme
User-theme-selector

Κάντε το Gnome shell να μοιάζει με το Gnome 2 (extensions από Ron Yorston)

Move the clock
Favorites in panel
Disable dynamic workspaces
Applications menu in panel

Χρήση του GnomeTweakTool
Λοιπά – toDO

Πως εγκαθιστώ τα extensions του Gnome Shell ;

Πριν προχωρήσουμε,να πω ότι οι τοποθεσίες που βρίσκονται τα extensions είναι:

  • /usr/share/gnome-shell/extensions/ (διαθέσιμα για όλους τους χρήστες του συστήματος)
  • $HOME/.local/share/gnome-shell/extensions/ (διαθέσιμα μόνο για έναν χρήστη)

Υπάρχουν 2 τρόποι για να κάνετε εγκατάσταση τα extension του gnome shell.

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

Ο δεύτερος τρόπος είναι να κατεβάσετε το extension που θέλετε και να βάλετε σε μια από τις δύο τοποθεσίες που αναφέραμε πριν.

Πίσω στα περιεχόμενα..

Πως θα ενεργοποιήσω τα πρόσθετα ;

Απλά κάνετε μια επανεκκίνηση το gnome shell.Πατήστε alt+F2 πληκτρολογήστε το r,enter και είμαστε έτοιμοι!

Πίσω στα περιεχόμενα..

Dock

dock-1Ένα από τα πρόσθετα του gnome shell είναι το dock.Το dock εμφανίζει τις αγαπημένες εφαρμογές που έχουμε ορίσει στην επιφάνεια εργασίας,για να έχουμε γρήγορη πρόσβαση σε αυτές.

Λήψη του extension από το git του Gnome.

Εγκατάσταση

Fedora: yum install gnome-shell-extensions-dock
openSUSE: zypper install
Arch Linux: pacman -S gnome-shell-extension-dock

Αν για κάποιο λόγο δεν σας βολεύει το dock μπορείτε να χρησιμοποιήσετε το cairo-dock,awn κ.λπ που έχουν περισσότερες επιλογές.

dock-2 dock-3

Πίσω στα περιεχόμενα..

Alternate-tab

Το extension αυτό επαναφέρει τη συμπεριφορά της συντόμευσης Alt+Tab στη παλιά λειτουργία του.Συγκεκριμένα γίνεται εναλλαγή των εφαρμογών σε σχέση με τα ανοιχτά παράθυρα (όπως παλιά..) και όχι σε σχέση με τις ανοιγμένες εφαρμογές.

alt-tab-extension

Λήψη του extension από το git του Gnome.

Εγκατάσταση

Fedora: yum install gnome-shell-extensions-alternate-tab
openSUSE: zypper install
Arch Linux: pacman -S gnome-shell-extension-alternate-tab
Πίσω στα περιεχόμενα..

Alternate-status-menu

alt-menu-extensionΣτο τωρινό status menu η επιλογή suspend είναι η μόνη εμφανή επιλογή.Όταν θέλουμε να κλείσουμε τον υπολογιστή μας πρέπει να πατήσουμε το Alt και να κάνουμε κλικ στο Shutdown που θα εμφανιστεί.

Το extension αυτό εμφανίζει πάντα την επιλογή του Shutdown και του Hibernate όπως επίσης και αυτή του Suspend που υπήρχε ήδη.

Λήψη του extension από το git του Gnome.

Εγκατάσταση

Fedora: yum install gnome-shell-extensions-alternative-status-menu
openSUSE: zypper install
Arch Linux: pacman -S gnome-shell-extension-alternative-status-menu
Πίσω στα περιεχόμενα..

Drive-menu

drive-menu-extensionΤο συγκεκριμένο πρόσθετο κάθε φορά που συνδέουμε μια εξωτερική αποθηκευτική συσκευή ενεργοποιείται.Είτε είναι usb είτε εξωτερικός δίσκος θα εμφανιστεί δίνοντας μας δύο επιλογές.Του umount και του άνοιγμα του περιηγητή.

Λήψη του extension από το git του Gnome.

Εγκατάσταση

Fedora: yum install
openSUSE: zypper install gnome-shell-extensions-drive-menu
Arch Linux: pacman -S gnome-shell-extension-drive-menu
Πίσω στα περιεχόμενα..

Places-menu

places-menu-extensionΤο extension προσθέτει ένα μενού με τις τοποθεσίες του συστήματος.Έτσι έχουμε εύκολη και γρήγορη πρόσβαση όπου θελήσουμε!!

Λήψη του extension από το git του Gnome.

Εγκατάσταση

Fedora: yum install gnome-shell-extensions-places-menu
openSUSE: zypper install
Arch Linux: pacman -S gnome-shell-extension-places-menu

places-1

Πίσω στα περιεχόμενα..

User-theme

Το user theme extension μας δίνει τη δυνατότητα να προσθέσουμε θέματα στο gnome shell.
Αφού το κάνουμε εγκατάσταση,μετά απλώς τοποθετούμε το φάκελο του θέματος στη τοποθεσία: $HOME/.themes/

Τέλος για να γίνει η εφαρμογή του θέματος,πατάμε alt+F2 πληκτρολογούμε r και enter.

Επίσης ρίξτε μια ματιά στο GNOME tweak tool.Μπορείτε εύκολα μεσα από το GUI του,να αλλάξετε το θέμα του gnome shell παραβλέποντας τη παραπάνω διαδικασία.

Λήψη του extension από το git του Gnome.

Εγκατάσταση

Fedora: yum install gnome-shell-extensions-user-theme
openSUSE: zypper install
Arch Linux: pacman -S gnome-shell-extension-user-theme
Πίσω στα περιεχόμενα..

User-theme selector

themes-1

Το user theme selector λειτουργεί συνήθως με το extension που αναφέραμε πριν.Δημιουργεί ένα νέο tab (themes) δίπλα από τις Εφαρμογές με όσα θέματα έχουμε τοποθετήσει για ευκολότερη επιλογή.

Ιστότοπος project: @ fpmurphy.com

Εγκατάσταση

Η εγκατάσταση θα γίνει χειροκίνητα,όπως αναφέραμε στο Πως εγκαθιστώ τα extensions του Gnome Shell ;
Πίσω στα περιεχόμενα..

Κάντε το Gnome shell να μοιάζει με το Gnome 2

Παρακάτω θα παρουσιάσουμε 4 extensions που σαν βασικό σκοπό έχουν τη μετατροπή του gnome shell στο παλιό γνώρισμο σε όλους Gnome 2.Οπότε έχουμε και λεμε:

Ιστότοπος του project: @ Ron Yorston

Move the clock

Το extension αυτό μετακινεί το ρολόι από το κέντρο που βρίσκεται στη δεξια μεριά της μπάρας του gnome shell.

apps-1

Favortites in panel

Όπως φαίνεται και από την ονομασία του extension,οι αγαπημένες μας εφαρμογές εμφανίζονται στη μπάρα δίπλα από το Activities (σ.σ Applications αν θα εφαρμόσουμε το παρακάτω extension.)

apps-2

Disable dynamic workspaces

Αυτό το extension απενεργοποιεί τη δημιουργία νέου δυναμικού workspace όταν μια εφαρμογή εκκινηθεί σε αυτό.Μπορούμε να ορίσουμε εμείς πόσα workspaces θέλουμε να έχουμε,όπως στο Gnome 2 όπου είχαμε εξ’ αρχής 4 στατικά workspaces.
Για να ορίσουμε 4 workspaces εκτελούμε την ακόλουθη εντολή:

gconftool-2 -t int -s /apps/metacity/general/num_workspaces 4

Applications menu in panel

apps-3

Το συγκεκριμένο extension αντικαθιστά με ένα drop down μενού το κουμπί Activities,με τις εφαρμογές που έχουμε στον υπολογιστή μας.

Εγκατάσταση

Μέχρι στιγμής δεν γνωρίζω αν υπάρχουν πακέτα για διανομές.Γι αυτό το λόγο η εγκατάσταση θα γίνει χειροκίνητα στους φακέλους,όπως αναφέραμε στο Πως εγκαθιστώ τα extensions του Gnome Shell ;
Πίσω στα περιεχόμενα..

Χρήση του GnomeTweakTool

Πρόκειται για μια εφαρμογή που μας επιτρέπει να επεξεργαστούμε το gnome shell.ΜΑς φίνει τη δυνατότητα να αλλάξουμε το μέγεθος των γραμματοσειρών,
επαναφορά των κουμπιών ελαχιστοποίησης και μεγιστοποίησης,επαναφορά της παλιάς επιφάνειας εργασίας του Gnome,επιλογή για την αλλαγή του θέματος του gnome shell και ένα σωρό άλλες ρυθμίσεις!!

Ιστότοπος του project: Gnome Tweak Tool

Gnome-tweak-tool

Εγκατάσταση

Το Gnome Tweak Tool υπάρχει πλέον στις περισσότερες διανομές linux.Ενδεικτικά μερικές από αυτές έιναι:

Fedora: yum install gnome-tweak-tool
openSUSE: zypper install gnome-tweak-tool
Arch Linux: pacman -S gnome-tweak-tool
Πίσω στα περιεχόμενα..

Λοιπά – toDO

Τα πακέτα για το fedora δεν έχουν ελεγχθεί,οι ονομασίες μπήκαν σε σχέση με αυτά που βρήκα στο http://rpm.pbone.net

Προσθήκη νέων extension..

Πίσω στα περιεχόμενα..

February 11, 2010

Openoffice.org 3.2 is out!!



Οι επίσημες ελληνικές εκδόσεις του OpenOffice.org 3.2 ειναι διαθέσιμες

1) Ελληνικό OOo 3.2 για Linux x86 (rpm) ftp://ftp5.gwdg.de/pub/openoffice/localized/el/3.2.0/OOo_3.2.0_LinuxIntel_install_el.tar.gz
2) Ελληνικό OOo 3.2 για Linux x86 (rpm με jre) http://download.services.openoffice.org/files/localized/el/3.2.0/OOo_3.2.0_LinuxIntel_install_wJRE_el.tar.gz
3) Ελληνικό OOo 3.2 για Linux x86 (deb) ftp://ftp5.gwdg.de/pub/openoffice/localized/el/3.2.0/OOo_3.2.0_LinuxIntel_install_el_deb.tar.gz
4)Ελληνικό OOo 3.2 για Windows (με jre) http://download.services.openoffice.org/files/localized/el/3.2.0/OOo_3.2.0_Win32Intel_install_wJRE_el.exe
5)Ελληνικό OOo 3.2 για Windows (χωρίς jre) ftp://ftp5.gwdg.de/pub/openoffice/localized/el/3.2.0/OOo_3.2.0_Win32Intel_install_el.exe
6) Ελληνικό OOo 3.2 για MacOSX http://download.services.openoffice.org/files/localized/el/3.2.0/OOo_3.2.0_MacOSXIntel_install_el.dmg
7) Ελληνικό OOo 3.2 για Solaris Sparc http://download.services.openoffice.org/files/extended/3.2.0rc5/OOo_3.2.0rc5_20100203_SolarisSparc_install_wJRE_el.tar.gz
8) Ελληνικό OOo 3.1.1 για Solaris x86 http://download.services.openoffice.org/files/extended/3.2.0rc5/OOo_3.2.0rc5_20100203_Solarisx86_install_wJRE_el.tar.gz
9) Ελληνικό OOo 3.2 για Linux 64-bit RPM (με jre) http://download.services.openoffice.org/files/extended/3.2.0rc5/OOo_3.2.0rc5_20100203_LinuxX86-64_install_wJRE_el.tar.gz
10) Ελληνικό OOo 3.2 για Linux 64-bit deb http://download.services.openoffice.org/files/extended/3.2.0rc5/OOo_3.2.0rc5_20100203_LinuxX86-64_install_el_deb.tar.gz



ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ linux:
(απεγκαταστήστε πρωτα την παλιά σας έκδοση)
Rpm:
1. Αποσυμπιέστε το OOo_xxxLinuxX86_install_el_rpm.tar.gz
2. cd στο κατάλογο που αποσυμπιέσατε τα αρχεία (RMPS)
3. sudo rpm -Uvih *rpm.
4) cd στο κατάλογο Desktop-integration και εγκαταστήστε το ανάλογο rpm για την διανομή σας

rpm with Jre
1. Αποσυμπιέστε το OOo_xxxLinuxX86_install_el_rpm.tar.gz
2. cd στο κατάλογο που αποσυμπιέσατε τα αρχεία (RMPS)
3. Τρέξτε ως root το JavaSetup.jar

deb:

1. Απεγκαταστήστε την έκδοση που έχετε στο σύστημα σας
2. Αποσυμπιέστε το OOo_xxxLinuxX86_install_el_deb.tar.gz
3. cd στο κατάλογο που αποσυμπιέσατε τα αρχεία (DEBS)
4. sudo dpkg --install --force-overwrite *.deb
5. cd στο κατάλογο Desktop-integration και εγκαταστήστε το ανάλογο deb για την διανομή σας

November 09, 2009

Ο Mozilla Firefox έγινε 5 χρονών!!

Ο Mozilla Firefox έγινε 5 χρονών!


09-11-2009



Σήμερα συμπληρώνονται πέντε χρόνια από την ημερομηνία κυκλοφορίας της πρώτης επίσημης έκδοσης του Mozilla Firefox (και μην ξε χάσετε να δείτε το εορταστικό βιντεάκι στο http://www.spreadfirefox.com/5years/el/ ).


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


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



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



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



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


Όπως επαναστατικό ήταν και είναι το μοντέλο ανάπτυξης του Firefox, βασισμένο σε μια κοινότητα χιλιάδων ανθρώπων απ' όλο τον κόσμο, με το 40% του κώδικα του να είναι γραμμένο ακόμα και σήμερα από εθελοντές, με μεταφράσεις σε πάνω από 70 γλώσσες γραμμένες σχεδόν αποκλειστικά από εθελοντές, με χιλιάδες ανθρώπους που δοκιμάζουν και ελέγχουν τις νέες εκδόσεις πριν αυτές γίνουν επίσημες και χιλιάδες υποστηρικτές του να τον διαδίδουν από στόμα σε στόμα και να προσφέρουν βοήθεια σε νέους χρήστες.


Φυσικά αυτό το μοντέλο του ελεύθερου/ανοικτού κώδικα λογισμικού προϋπήρχε, αλλά ο Mozilla Firefox κατάφερε να το βάλει στα μηχανήματα πάνω από 330 εκατομμυρίων χρηστών παγκοσμίως.


Και δεν είναι το μόνο πρόγραμμα ελεύθερου/ανοικτού λογισμικού, υπάρχουν χιλιάδες άλλα που περιμένουν να τα ανακαλύψετε όπως το OpenOffice ή το λειτουργικό σύστημα ubuntu που περιλαμβάνουν και τα μαθητικά netbook.



Καταφέραμε μέσα σ' αυτό το διάστημα να ανοίξουμε ξανά μια αγορά που κυριαρχούνταν μονοπωλιακά από ένα προϊόν, όχι επειδή ήταν το καλύτερο αλλά απλά επειδή καμία εταιρία δεν μπορούσε να το ανταγωνιστεί με ίσους όρους, προσφέροντας ξανά το δικαίωμα της επιλογής στον καθένα για το πως θέλει να βλέπει τον ιστό.H ανάπτυξη και η γιγάντωση της χρήσης του Firefox, δίνει ώθηση και στην υιοθέτηση ανοιχτών προτύπων στο Ελληνικό διαδίκτυο.


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


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



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


Ανοικτά πρότυπα όπως το open document format (odf) για τα έγγραφα, το Ogg format και οι codecs Theora και Vorbis για την αναπαραγωγή βίντεο εξασφαλίζουν την διαλειτουργικότητα των συστημάτων και την ελεύθερη πρόσβαση στην πληροφορία από όλους.



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



Ας δούμε λοιπόν μαζί μερικές από τις ημερομηνίες-σταθμούς στην κοινή μας πορεία:




  • Γύρω στα τέλη του 2002 δημιουργήθηκε ο Phoenix, σαν μια προσπάθεια να αυτονομηθεί ο περιηγητής από την πλήρη εφαρμογή Mozilla suite (διάδοχο του Netscape Navigator suite).



  • Στα μέσα του 2003 , ο οργανισμός mozilla αποφασίζει την στήριξη της ανάπτυξης ξεχωριστών εφαρμογών για περιήγηση και ηλεκτρονικό ταχυδρομείο και αποφασίζεται η αλλαγή του ονόματος σε Mozilla Firebird.





  • Στις αρχές του 2004 αποφασίζεται μια ακόμα αλλαγή του ονόματος και ο Mozilla Firebird γίνεται ο γνωστός σε όλους μας πια Mozilla Firefox για να ακολουθήσει λίγο πριν το τέλος της ίδιας χρονιάς η έκδοση 1.0 στις 9 Νοεμβρίου μεταφρασμένή ήδη σε 29 γλώσσες.


    Την πρώτη κιόλας μέρα έχουν πραγματοποιηθεί 1 εκατομμύριο λήψεις.




  • Σχεδόν ένα χρόνο αργότερα, εκδίδεται ο Mozilla Firefox 1.5 που προσφέρει αυτόματη ενημέρωση, βελτιωμένες ρυθμίσεις ασφαλείας και είναι μεταφρασμένος σε 32 γλώσσες.



  • Τον Οκτώβριο του 2006 βγαίνει ο Mozilla Firefox 2.0 μεταφρασμένος σε 37 γλώσσες και μέσα σε 24 ώρες τρέχει στα μηχανήματα πάνω από δυο εκατομμυρίων χρηστών.



  • Τον Ιούνιο του 2008 εκδίδεται ο Mozilla Firefox 3.0 και κατακτά το παγκόσμιο ρεκόρ Guinness για τον μεγαλύτερο αριθμό λήψεων μέσα σε 24 ώρες.


    Λίγο αργότερα ανακοινώνονται τα σχέδια για τη δημιουργία μιας έκδοσης του Firefox για κινητά με την κωδική ονομασία Fennec.



  • Ένα χρόνο μετά, τον Ιούνιο του 2009 εκδίδεται ο Mozilla Firefox 3.5 μεταφρασμένος σε 73 γλώσσες, υποστήριξη για HTML5 και ανοιχτούς τύπους βίντεο και ήχου.



  • Στις 31 Οκτωβρίου 2009 διατέθηκε η πρώτη δοκιμαστική έκδοση του Mozilla Firefox 3.6 και σύντομα θα είναι διαθέσιμη και η επίσημη.







Σήμερα, το μερίδιο αγοράς του Mozilla Firefox στην Ελλάδα έχει φτάσει στο 44,11% (πηγή: statcounter), μια επίδοση που ξεπερνά κατά πολύ τον ευρωπαϊκό και παγκόσμιο μέσο όρο.


Μια επίδοση που οφείλετε στην εμπιστοσύνη, την πίστη και την αγάπη που όλοι εμείς οι χρήστες του Mozilla Firefox δείξαμε και συνεχίζουμε να δείχνουμε στο ελεύθερο πνεύμα και τις κορυφαίες επιδόσεις του.



Γι' αυτό σας καλούμε όλους να γιορτάσετε μαζί μας αυτά τα πέντε πρώτα χρόνια και να ευχηθούμε όλοι μαζί πολλά περισσότερα!

Feeds