<?xml version="1.0" encoding="utf-8"?>
<chapter id="principles" lang="el">
    
    <title>Αρχές χρηστικότητας</title>

    <para>Αυτή η ενότητα εξηγεί μερικές από τις βασικές αρχές πίσω από τις πιο συγκεκριμένες τεχνικές συστάσεις αυτού του εγγράφου. Πιστεύουμε ότι αυτές οι αρχές είναι καθολικά σημαντικές για την ανάπτυξη εφαρμογών.</para>

    <sect1 id="principles-people">
      <title>Σχεδιάστε για ανθρώπους</title>

      <para>Να θυμάστε ότι ο σκοπός οποιασδήποτε εφαρμογής είναι να επιτρέψει σε κάποια ομάδα ανθρώπων να εκπληρώσουν μερικούς στόχους. Επομένως, όταν σχεδιάζετε την εφαρμογή σας βεβαιωθείτε πρώτα για τα εξής:</para>

	<orderedlist>
		<listitem><para>ποιοι είναι οι χρήστες σας</para></listitem>
		<listitem><para>τι θέλετε να τους επιτρέπετε να κάνουν</para></listitem>
	</orderedlist>

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

      <para>Το σημαντικό είναι να ξέρετε το κοινό σας, και να καταλαβαίνετε τους στόχους τους και τις απαραίτητες εργασίες για να επιτύχουν αυτούς τους στόχους. Υπάρχει ένας μεγάλος αριθμός από επαγγελματίες σχεδιαστές αλληλεπίδρασης που γράφουν βιβλία και διδάσκουν μαθήματα πάνω σε μεθόδους σχεδιασμού που μπορούν να βοηθήσουν με αυτή τη διαδικασία, πολλά από τα οποία είναι εξαιρετικά χρήσιμα - δείτε την <xref linkend="bibliography"/> για παράδειγμα. Ωστόσο, οι περισσότερες από τις μεθόδους αυτές συμπυκνώνονται σε συγκεκριμένους τρόπους κατανόησης των χρηστών σας, κατανόησης των εργασιών που θέλετε να τους βοηθήσετε να επιτύχουν, και εύρεσης τρόπων για να υποστηρίξετε αυτές τις εργασίες στην εφαρμογή σας.</para>

    </sect1>
    <sect1 id="principles-broad-userbase">
      <title>Μην περιορίζετε τη βάση χρηστών σας</title>

      <para>Αν σχεδιάζετε μια εφαρμογή για μηχανικούς, ή για παιδιά, ή για διαχειριστές συστημάτων, βεβαιωθείτε ότι μπορεί να χρησιμοποιηθεί από <emphasis>όλους</emphasis> τους μηχανικούς, τα παιδιά ή τους διαχειριστές συστημάτων, συμπεριλαμβανομένων και εκείνων με ειδικές δυσκολίες ή εκείνων που μιλούν μια γλώσσα διαφορετική από τη δική σας. Να λάβετε υπόψη τα θέματα πρόσβασης, διεθνοποίησης και τοπικοποίησης, πολλά από τα οποία αντιμετωπίζονται από τον οδηγό σε αυτό το έγγραφο.</para>

      <sect2 id="accessibility">
	<title>Προσιτότητα</title>

	<para>Προσιτότητα (που μερικές φορές καλείται και <emphasis>a11y</emphasis>) σημαίνει να επιτρέπετε σε χρήστες με ειδικές ικανότητες να συμμετέχουν στις καθημερινές δραστηριότητες: ειδικά σε αυτήν την περίπτωση, να χρησιμοποιούν το λογισμικό σας. Για παράδειγμα:</para>

	<itemizedlist>
		<listitem><para>Χρήστες με αχρωματοψία ενδέχεται να μη μπορούν να χρησιμοποιήσουν την εφαρμογή σας αν βασίζεται μόνο σε χρώματα για να διακρίνει διαφορετικούς τύπους πληροφορίας</para></listitem>
		<listitem><para>Χρήστες με προβλήματα ακοής μπορεί να μη μπορούν να χρησιμοποιήσουν την εφαρμογή σας αν αυτή βασίζεται σε ήχους για να επισημάνει κρίσιμες πληροφορίες</para></listitem>
		<listitem><para>Χρήστες με περιορισμένη κινητικότητα μπορεί να μην μπορούν να χρησιμοποιήσουν την εφαρμογή σας αν δεν παρέχετε αντίστοιχους τρόπους για να εκτελεστούν οι εντολές από το πληκτρολόγιο</para></listitem>
	</itemizedlist>

	<para>Το λογισμικό σας θα πρέπει επίσης να είναι χρήσιμο με διεπαφές φωνής, αναγνώριση οθόνης όπως το <ulink url="http://projects.gnome.org/orca/">Όρκα</ulink>, εναλλακτικές συσκευές εισόδου, και άλλες βοηθητικές τεχνολογίες. Οι πρότυποι κατάλογοι GNOME κάνουν την μεγαλύτερη από αυτή τη δουλειά για σας, αλλά με λίγο περισσότερη προσπάθεια μπορείτε να κάνετε την εφαρμογή σας ακριβώς τόσο χρήσιμη για τους χρήστες που βασίζονται σε αυτές τις τεχνολογίες όσο και για αυτούς που δεν το κάνουν.</para>

	<para>Το GNOME έχει εξαιρετική ενσωματωμένη υποστήριξη για προσβασιμότητα με τη βοήθεια των καταλόγων ATK και GAIL, η οποία σε πολλές περιπτώσεις μπορεί να κάνει το μεγαλύτερο μέρος της δουλειάς για εσένα. Περισσότερες πληροφορίες για την προσβασιμότητα στο GNOME μπορεί να βρεθεί στο <ulink url="http://projects.gnome.org/accessibility">Έργο προσβασιμότητας GNOME</ulink>.</para>

      </sect2>
      <sect2 id="internationalization">
	<title>Διεθνοποίηση και τοπικοποίηση</title>

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

	<para>Το GNOME έχει εξαιρετική στήριξη τόσο για την διεθνοποίηση (επίσης αναφέρεται και ως i18n) όσο και την τοπικοποίηση (επίσης αναφέρεται και ως i10n). Στις περισσότερες περιπτώσεις, απλά χρησιμοποιώντας βασικά GNOME APIs για την εμφάνιση κειμένων και μηνυμάτων επιτρέπεται σε εσάς ή τους άλλους να τοπικοποιήσετε την εφαρμογή σας για άλλες περιοχές. Για περισσότερες πληροφορίες στο πώς να τοπικοποιήσετε την εφαρμογή σας, δείτε την <ulink url="http://www.pango.org"> αρχική σελίδα του Pango project</ulink> (Το Pango είναι ο κατάλογος του GNOME για την ερμηνεία κειμένου διεθνοποίησης),την <ulink url="http://www.gnome.org/i18n/">σελίδα μεταφράσεων GNOME</ulink>, και την <ulink url="http://developer.gnome.org/projects/gtp/">σελίδα του μεταφραστικού έργου GNOME</ulink>.</para>
	
	<para>Ευαισθησία σε θέματα κουλτούρας και πολιτικής είναι επίσης ένα σημαντικό ζήτημα. Ο σχεδιασμός εικονιδίων και ήχων, ακόμα και η επιλογή χρωμάτων απαιτεί κάποια κατανόηση στην επίδραση που μπορεί να έχουν στον χρήστη από ένα άλλο μέρος του κόσμου.</para>
	<para>Κάποια παραδείγματα στοιχείων που είναι καλύτερα να αποφεύγονται για αυτούς του λόγους είναι:</para>
	<itemizedlist>
		<listitem><para>Εικόνες σημαιών ή χρημάτων</para></listitem>
		<listitem><para>Χάρτες που εμφανίζουν πολιτικά όρια ή αμφισβητούμενες ονομασίες περιοχών</para></listitem>
		<listitem><para>Λίστες χωρών ή πόλεων σε μη-αλφαβητική σειρά (εκτός αν χρειάζεται ή απαιτείται ειδικά από τα συμφραζόμενα)</para></listitem> 
		<listitem><para>Εικονίδια που απεικονίζουν ζώα</para></listitem>
		<listitem><para>Εικονίδια που απεικονίζουν μόνο χέρια ή πόδια</para></listitem>
	</itemizedlist>

      </sect2>
    
    </sect1>

    <sect1 id="principles-match">
      <title>Συνδέστε την εφαρμογή σας με τον πραγματικό κόσμο</title>

      <para id="use-users-language">Να χρησιμοποιείτε πάντα λέξεις, φράσεις και έννοιες που είναι οικείες στο χρήστη αντί για όρους από το υποκείμενο σύστημα. Χρησιμοποιήστε όρους που σχετίζονται με τη γνώση του χρήστη σχετικά με τις εργασίες που υποστηρίζει η εφαρμογή σας. Για παράδειγμα, στην ιατρική, ο χάρτινος φάκελος που περιέχει όλες τις πληροφορίες για έναν συγκεκριμένο ασθενή ονομάζεται "ιστορικό". Επομένως, μια ιατρική εφαρμογή μπορεί να αναφέρεται στην καταχώριση ενός ασθενή η οποία περιέχει τις ίδιες πληροφορίες με το διάγραμμα ασθενούς ως "ιστορικό ασθενούς" αντί για "εγγραφή του ασθενούς στη βάση δεδομένων".</para>

      <para>Συχνά μπορείτε να εκμεταλλευτείτε την τεχνογνωσία των χρηστών σας χρησιμοποιώντας μεταφορές -δηλαδή οικείες έννοιες από τον έξω κόσμο- για να αναφερθείτε σε στοιχεία μέσα στην εφαρμογή σας. Για παράδειγμα:</para>

	<itemizedlist>
		<listitem><para>η εικόνα ενός φακέλου υπαινίσσεται έναν περιέκτη μέσα στον οποίο μπορούν να τοποθετηθούν έγγραφα</para></listitem>
		<listitem><para>ένας κάδος αχρήστων υπαινίσσεται έναν περιέκτη μέσα στον οποίο μπορούν να τοποθετηθούν αντικείμενα που δεν είναι πλέον χρήσιμα</para></listitem>
	</itemizedlist>

      <para>Όταν χρησιμοποιείτε μεταφορές όμως, είναι σημαντικό να μην πάρετε τη μεταφορά κυριολεκτικά αλλά ούτε και να την επεκτείνετε πέρα από τη λογική της χρήση. Για παράδειγμα, η χωρητικότητα ενός φακέλου αρχείων δεν πρέπει να περιορίζεται σε εκείνην ενός πραγματικού φακέλου αρχείων, ο οποίος θα μπορούσε να περιέχει μόνο μερικά έγγραφα προτού γίνει δύσχρηστος. Από την άλλη, ένας κάδος αχρήστων δεν μπορεί παρά να περιέχει απορριπτέα αρχεία. Η εικόνα του δε θα πρέπει να χρησιμοποιείται, για παράδειγμα, για την εξαγωγή ενός αφαιρούμενου μέσου όπως μια δισκέτα ή ένα CD.</para>
    </sect1>

    <sect1 id="principles-consistency">
      <title>Κάντε την εφαρμογή σας συνεπή</title>

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

      <para>Η συνέπεια δίνει την δυνατότητα στους χρήστες να εφαρμόσουν τις υπάρχουσες γνώσεις τους για το υπολογιστικό περιβάλλον τους και άλλες εφαρμογές για την κατανόηση μίας νέας εφαρμογής. Αυτό δεν επιτρέπει μόνο στους χρήστες να εξοικειωθούν με νέες εφαρμογές ταχύτερα, αλλά επίσης βοηθάει στην δημιουργία μιας αίσθησης άνεσης και εμπιστοσύνης στο γενικό περιβάλλον. Οι περισσότερες συστάσεις στο GNOME HI Guidelines είναι σχεδιασμένες για να σας βοηθήσουν να δημιουργήσετε εφαρμογές που είναι συνεπείς με το περιβάλλον GNOME και με άλλες εφαρμογές GNOME.</para>

      <para>Μια λέξη προσοχής: μια λάθος εφαρμοσμένη ή ημιτελής συνέπεια είναι συχνά χειρότερα από την ασυνέπεια. Αν η εφαρμογή σας περιέχει ένα αντικείμενο μενού <guimenuitem>Αναίρεση</guimenuitem> για συνέπεια, αλλά είναι πάντα απενεργοποιημένο επειδή η εφαρμογή σας στην ουσία δεν υποστηρίζει την Αναίρεση, αυτό θα μειώσει την εμπιστοσύνη του χρήστη στην διαθεσιμότητα της Αναίρεσης σε άλλες εφαρμογές στην επιφάνεια τους. Είτε κάντε την εφαρμογή σας να υποστηρίζει την Αναίρεση, είτε αφαιρέστε το αντικείμενο μενού <guimenuitem>Αναίρεση</guimenuitem> τελείως.</para>

    </sect1>

    <sect1 id="principles-feedback">
      <title>Κρατήστε το χρήστη ενημερωμένο</title>

      <para>μΠάντα να πληροφορείτε το χρήστη για το τι συμβαίνει στην εφαρμογή σας χρησιμοποιώντας την κατάλληλη ανάδραση στην κατάλληλη στιγμή. Ο χρήστης δεν πρέπει ποτέ να χρειάζεται να μαντέψει για την κατάσταση του συστήματος ή της εφαρμογής σας. Όταν ο χρήστης κάνει μια ενέργεια, δώστε του ανάδραση που να υποδεικνύει ότι το σύστημα έχει δεχτεί την καταχώριση του χρήστη και την επεξεργάζεται. Η ανάδραση μπορεί να είναι οπτική, ηχητική ή και τα δύο. Αν το σύστημα θα κάνει πολύ χρόνο για να επεξεργαστεί μια αίτηση, παρέχετε όσο περισσότερη ανάδραση μπορείτε για το πόσο χρόνο θα χρειαστεί η λειτουργία. Μερικοί τύποι χρήσιμης ανάδρασης περιλαμβάνουν αλλά δεν περιορίζονται σε: αλλαγές του δείκτη του ποντικιού, κινούμενους "παλμούς", δείκτες προόδου, ηχητική ανάδραση όπως ένα μπιπ και μηνύματα λάθους. Τα μηνύματα σφάλματος θα πρέπει να χρησιμοποιούν απλή γλώσσα, να δηλώνουν το πρόβλημα ξεκάθαρα και να παρέχουν λύσεις ή να λένε στο χρήστη πώς να φύγει από την τρέχουσα κατάσταση αν αυτό είναι δυνατό.</para>

      <para>Είναι κρίσιμο η ανάδραση να είναι <emphasis>ακριβείς</emphasis> και <emphasis>σαφής</emphasis>. Αν εμφανίζετε έναν προσδιορισμένο δείκτη προόδου για να εμφανίζει την κατάσταση της ολοκλήρωσης μίας εργασίας και είναι ανακριβείς, ο χρήστης θα χάσει την πίστη του στους δείκτες προόδου, και θα βρούνε το περιβάλλον λιγότερο χρήσιμο. Αν εμφανίζετε ένα γενικό μήνυμα σφάλματος που υποδεικνύει ότι υπάρχει ένα πρόβλημα αλλά αδυνατεί να παρέχει αρκετές πληροφορίες για την διάγνωση ή την επίλυση του προβλήματος, οι χρήστες σας θα είναι αδύνατον να συνεχίσουν την εργασία τους.</para>
      <para>Δείτε τις <xref linkend="feedback"/> και <xref linkend="windows-alert"/> για περισσότερες πληροφορίες πάνω στην ανάδραση.</para>
    </sect1>

    <sect1 id="principles-simplicity">
      <title>Απλά και όμορφα</title>

      <para>Η εφαρμογή σας θα πρέπει να επιτρέπει στο χρήστη να συγκεντρωθεί στην εργασία του. Επομένως, σχεδιάστε την εφαρμογή σας ώστε να εμφανίζει μόνο χρήσιμες και σχετικές πληροφορίες και στοιχεία της διεπαφής. Οποιεσδήποτε επιπλέον πληροφορίες ή έλεγχοι στη διεπαφή, ανταγωνίζονται τις πραγματικά σημαντικές πληροφορίες και αποσπούν το χρήστη από αυτές. Επομένως, μη βαρυφορτώνετε τη διεπαφή σας, και μην πνίγετε το χρήστη σε κουμπιά, επιλογές μενού, εικονίδια ή άλλες άσχετες πληροφορίες. Αντί αυτού, χρησιμοποιήστε σταδιακή αποκάλυψη και άλλες τεχνικές για να περιορίσετε τι βλέπει ο χρήστης σε δεδομένη στιγμή.</para>

      <para>Τέλος, παρουσιάστε τις πληροφορίες και τα στοιχεία της διεπαφής σας με έναν αισθητικά ευχάριστο τρόπο. Μια ανοργάνωτη, ατακτοποίητη διεπαφή με λίγα στοιχεία μπορεί να αποσπά το χρήστη το ίδιο όσο μια οργανωμένη διεπαφή με υπερβολική πληροφορία. Βεβαιωθείτε ότι τα στοιχεία στους διαλόγους είναι καλά στοιχισμένα, και μην το παρακάνετε με τη χρήση χρωμάτων ή γραφικών. Αν γνωρίζετε ένα σχεδιαστή γραφικών, ζητήστε τη συμβουλή του αν είναι δυνατόν - οι οδηγίες σε αυτό το έγγραφο θα σας βοηθήσουν με τα βασικά, αλλά σαν τη ματιά του ειδικού δεν είναι τίποτα.</para>

	<para>Δείτε τις <xref linkend="design"/> και <xref linkend="icons"/> για περισσότερες πληροφορίες πάνω στο σχεδιασμό της οπτικής εμφάνισης της εφαρμογής σας.</para>

    </sect1>

    <sect1 id="principles-user-control">
      <title>Δώστε τον έλεγχο στο χρήστη</title>

      <para>Να θυμάστε ότι οι υπολογιστές υπάρχουν για να εξυπηρετούν ανθρώπους. Ένας χρήστης θα πρέπει να αισθάνεται πάντα ότι έχει τον έλεγχο, ικανός να κάνει ότι θέλει όποτε το θέλει. Αυτό σημαίνει ότι εσείς γενικά θα πρέπει να αποφύγετε τις λειτουργίες· οι χρήστες θα πρέπει να είναι ικανοί να αλλάζουν ανάμεσα στις εργασίες (και ειδικότερα, διαφορετικά παράθυρα) οποιαδήποτε στιγμή. Δείτε την <xref linkend="window-props-modality"/> για περισσότερες πληροφορίες πάνω στις λειτουργίες.</para>

      <para>Ο χρήστης θα πρέπει επίσης να μπορεί να προσαρμόζει τις πτυχές του περιβάλλοντος του ώστε να ταιριάζει στις προσωπικές του προτιμήσεις. Είναι πολύ σημαντικό, ωστόσο, να αποφεύγετε την παγίδα με το να επιτρέπετε πολλές διαμορφώσεις. ή με το να επιτρέπετε την διαμόρφωση παραμέτρων που πολλοί χρήστες δεν θα καταλάβουν ή δεν θα βρούνε χρήσιμες να τροποποιήσουν. Όποτε είναι δυνατό, υιοθετήστε οπτικές παραμέτρους και παραμέτρους συμπεριφοράς από παγκόσμιες προτιμήσεις και ρυθμίσεις όπως το τρέχων θέμα GTK+.</para>
    </sect1>

    <sect1 id="principles-forgiveness">
      <title>Να συγχωρείτε τον χρήστη</title>

      <para>Όλοι κάνουμε λάθη. Είτε εξερευνούμε και μαθαίνουμε πώς να χρησιμοποιούμε το σύστημα, είτε είμαστε ειδικοί που απλά πατήσαμε το λάθος πλήκτρο, είμαστε άνθρωποι. Η εφαρμογή σας επομένως θα πρέπει να επιτρέπει στους χρήστες να αναιρέσουν άμεσα τα αποτελέσματα των ενεργειών τους.</para>

      <para>Αν κάποια ενέργεια είναι πολύ επικίνδυνη και δεν υπάρχει τρόπος να αναιρεθεί το αποτέλεσμα, προειδοποιήστε το χρήστη και ζητήστε επιβεβαίωση. Βέβαια, αυτό να το κάνετε μόνο σε ακραίες περιπτώσεις· αν οι χρήστες βλέπουν πολύ συχνά τέτοια μηνύματα επιβεβαίωσης, αρχίζουν να τα αγνοούν, και έτσι τα μηνύματα αυτά γίνονται κάτι περισσότερο από άχρηστα.</para>

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

    </sect1>

    <sect1 id="principles-direct-manipulation">
      <title>Παρέχετε άμεσους χειρισμούς</title>

      <para>Όπου είναι δυνατόν, επιτρέψτε στους χρήστες να ενεργούν άμεσα πάνω σε αντικείμενα και δεδομένα, αντί μέσω διαλόγων και ρητών εντολών. Για παράδειγμα, είναι πιο φυσιολογικό να σύρεται ένα κυκλικό αντικείμενο πάνω σε ένα διάγραμμα παρά να επιλέγεται μια εντολή "Μετακίνηση" από ένα μενού, ενώ ο κύκλος είναι επιλεγμένος. Παρομοίως, σε μια εφαρμογή ηλεκτρονικής αλληλογραφίας, επιτρέψτε στο χρήστη αν θέλει να επισυνάπτει αρχεία σέρνοντάς τα από το διαχειριστή αρχείων και αποθέτοντάς τα μέσα στη σύνταξη μηνύματος.</para>

	<para>Δείτε την <xref linkend="input"/> για περισσότερες λεπτομέρειες πάνω στους άμεσους χειρισμούς.</para>

    </sect1>

  </chapter>
