Sunday, January 6, 2013

Windows Rants και ένα εργαστήριο με FreeBSD Samba Server

Κάθε χρόνο στις γιορτές έχω το χρόνο να ασχοληθώ και να συντηρήσω το εργαστήριο και τους υπολογιστές της γραμματείας του παραρτήματος Χανίων του ΚΕΚ ΔΕΛΤΑ. Έτσι και φέτος, ξεκίνησα με μια απόφαση: να αποσύρω τον Windows 2003 Server και να τον αντικαταστήσω με ένα Samba server σε FreeBSD 9.1-RELEASE. Οι ανάγκες του συγκεκριμένου δικτύου άνετα καλύπτονται πλέον με Samba σε domain controller configuration και τα επιπλέον licenses που χρειαζόμαστε για το 2003 είναι πεταμένα λεφτά...

Ιστορικά στοιχεία

Ξεκίνησα να συντηρώ το παράρτημα της συγκεκριμένης σχολής από τις πρώτες μέρες της λειτουργίας της στα Χανιά, κάπου το 1995-96. Την εποχή εκείνη τα μηχανήματα τους ήταν παλιά (τα είχαν φέρει από άλλο παράρτημα) και είχαν διάφορα προβλήματα. Όταν μετακόμισαν κάπου το 1999-2000 στο νέο τους κτήριο, ανέλαβα να τους φτιάξω από την αρχή ένα δίκτυο με νέα μηχανήματα και εξοπλισμό. Το αρχικό εκείνο δίκτυο βασίστηκε σε:

  • Windows 2000 Server
  • Windows 2000 Professional για τους σταθμούς εργασίας
  • Λίγα παλιά μηχανήματα με Windows 98 (!)

Την εποχή εκείνη είχα ήδη καλή επαφή με το Linux, ωστόσο μετά από πολλές δοκιμές κατέληξα στο συμπέρασμα ότι το συγκεκριμένο δίκτυο θα εξυπηρετούνταν πολύ καλύτερα από ένα Windows Server. Και πράγματι, ο 2000 Server (που αργότερα αντικαταστάθηκε από το 2003) είχε πολλά πλεονεκτήματα: αναφέρω για παράδειγμα τη δυνατότητα assign και publish εφαρμογών - αρχεία msi και mst - για αυτόματη εγκατάσταση τους στους σταθμούς εργασίας.

Το αρχικό εκείνο δίκτυο είχε καλά μηχανήματα για την εποχή τους - Pentium III 866Mhz. Υπήρχαν δύο εργαστήρια και συνολικά περίπου 30 μηχανήματα μαζί με τα γραμματειακά.

Ο καιρός όμως πέρναγε, τα μηχανήματα πάλιωναν, τα 2000 Professional έπαψαν να καλύπτουν τις ανάγκες (μετά από πολύ καιρό είναι αλήθεια) και κάποιες δοκιμές με XP δεν ήταν ιδιαίτερα... ενθαρρυντικές στο υπάρχον hardware. Καθώς διάφορα PC χάλαγαν και δεν μπορούσαν να επισκευαστούν, τα αντικαθιστούσαμε με πιο νέα μηχανήματα. Η ομοιογένεια του υλικού και του λογισμικού της αρχικής εγκατάστασης είχε πάει περίπατο.

To 2012 λήφθηκε η απόφαση για τη δημιουργία νέου εργαστηρίου 20 υπολογιστών με σύγχρονο λογισμικό. Τα παλιά μηχανήματα - όσα ήταν ακόμα λειτουργικά - θα μεταφέρονταν σε δεύτερο βοηθητικό εργαστήριο, με την προυπόθεση να μπορούν να τρέξουν XP. Το νέο εργαστήριο θα βασίζονταν σε Windows 7 64bit. Και εδώ αρχίζουν τα προβλήματα.

  • Τα Windows 2000 ήταν δύο εκδόσεις: Η Professional που έχει τα πάντα για ένα σταθμό εργασίας και ο Server που προορίζεται για... server. Τα Windows 7 είναι σε αρκετές εκδόσεις, αυτές δε που συμφέρουν είναι τεχνητά περιορισμένες να μην έχουν βασικές δυνατότητες. Για παράδειγμα η έκδοση Home Premium δεν υποστηρίζει σύνδεση μέσω remote desktop και φυσικά δεν υποστηρίζει domain logins.
  • Όπως αποκαλύφθηκε, εν έτει 2012 υπάρχει ακόμα πλήθος εφαρμογών που δεν μπορούν να εκτελεστούν με δικαιώματα χρήστη, απαιτώντας Administrator access. Μέσος χρόνος ζωής μηχανήματος με administrator access χωρίς κάποιο πρόγραμμα τύπου deep freeze: Μισή ώρα.
  • Δεν θέλω καν να μπω στη διαδικασία των ενεργοποιήσεων, ελέγχων κλπ που είναι ένα μαρτύριο που τραβάνε μόνο οι χρήστες που έχουν πληρώσει: οι υπόλοιποι τρέχουν τα έτσι και αλλιώς πειρατικά τους προγράμματα και γελάνε με την MS.

Το νέο εργαστήριο

Για λόγους κόστους (είναι περίεργες οι εποχές) αποφασίστηκε να χρησιμοποιηθούν τα Windows 7 Home Premium 64 bit. Χάνουμε έτσι το domain login (το οποίο όμως παραμένει στα παλιότερα μηχανήματα με XP) αλλά αυτό έτσι και αλλιώς δεν ήταν πολύ χρήσιμο στα εκπαιδευτικά μηχανήματα. Το μόνο που χρειάζεται πρακτικά είναι καθένα από αυτά να κάνει autologin με ένα διαφορετικό λογαριασμό και το home directory να γίνεται map από το server στην εκκίνηση του περιβάλλοντος. Αυτό είναι πολύ εύκολο και δεν αποτελεί πρόβλημα: όσο τα user credentials ταιριάζουν στο μηχάνημα και το server, η πρόσβαση στα shares γίνεται χωρίς πρόβλημα.

Μετά το αρχικό στήσιμο του εργαστηρίου, τα Windows 7 συνδέθηκαν με αυτό τον τρόπο στον 2003 Server ενώ το παλιότερο εργαστήριο XP παρέμεινε στο domain. Καθώς ο ρόλος του 2003 server ήταν πλέον πολύ πιο περιορισμένος, συμφωνήσαμε κάποια στιγμή να αλλαχθεί με ελεύθερο λογισμικό. Εξάλλου είχαμε ήδη ξεπεράσει τα αρχικά CALs. Και όπως πάντα, τέτοιες μαζικές αλλαγές γίνονται στις γιορτές, όπου και εγώ έχω χρόνο και η σχολή είναι κλειστή.

Η Αντικατάσταση του Server

Υπήρχε ήδη ένας FreeBSD Server στη σχολή! Τον είχα εγκαταστήσει αρκετά παλιά για να κρατάει backup στα δεδομένα του 2003 και να μπορεί να αναλάβει βασικές λειτουργίες σε περίπτωση σοβαρής βλάβης του 2003. Τόσο ο 2003 όσο και ο υπάρχον FreeBSD server λειτουργούσαν με mirror. To mirror του FreeBSD παρέδωσε πνεύμα (ο ένας δίσκος) κάπου το Νοέμβρη. Συνέχιζε να λειτουργεί με τον ένα δίσκο φυσικά, αλλά σκοπός ήταν στη διάρκεια της συντήρησης να βρεθεί κάπου ένας δίσκος αντίστοιχης χωρητικότητας και τεχνολογίας (το μηχάνημα είναι Pentium III!) για να αντικατασταθεί. Αυτό πράγματι επιτεύχθηκε την πρώτη μέρα της συντήρησης.

Αντίθετα, το hardware του 2003 Server είναι επαρκώς σύγχρονο (Core2Duo) με SATA δίσκους και Intel Network Card. Στο μηχάνημα αυτό εγκαταστάθηκε το FreeBSD 9.1-RELEASE 64bit. Στην εγκατάσταση του χρησιμοποιήθηκαν τα παρακάτω:

Για ευκολία, η εγκατάσταση έγινε αρχικά στο σπίτι σε VMWare και αφού ρυθμίστηκε σύμφωνα με τις βασικές ρυθμίσεις του 2003 που θα αντικαθιστούσε (και δοκιμάστηκε φυσικά σε άλλο virtual client), έγινε dump και restore στο πραγματικό μηχάνημα. Έτσι χρειάστηκε πολύ λίγος χρόνος για επιπλέον παραμετροποίηση (πρακτικά μόνο η δημιουργία λογαριασμών χρηστών/μηχανημάτων.

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

Δημιουργήθηκαν έπειτα οι χρήστες του εργαστηρίου και έγιναν map τα κατάλληλα shares σε κάθε υπολογιστή. Στο παλιό εργαστήριο, τα μηχανήματα βγήκαν από το παλιό domain και συνδέθηκαν στο νέο χωρίς κανένα πρόβλημα.

Όχι ένας, αλλά δύο!

Δύο FreeBSD servers φυσικά! Γιατί υπάρχει και ο παλιός Pentium III o οποίος πλέον:

  • Έχει ρόλο δεύτερου DNS σαν slave του κύριου server.
  • Παίρνει backup τα δεδομένα μέσω rsync.
  • Μπορεί ξανά να παρέχει βασικές υπηρεσίες και πρόσβαση στα δεδομένα της γραμματείας σε περίπτωση βλάβης του κύριου server.

Φωτογραφικό υλικό

Ακολουθεί φωτογραφικό υλικό απο τα μηχανήματα και τη διαδικασία.

Δοκιμαστικό restore του atlantis στο atom για να ελεχθεί το dump.

Πολύ ευχαριστημένος, ο phoenix με καινούριο δίσκο στο mirror και το gmirror να αναφέρει "complete".

O atlantis λίγο μετά το καθάρισμα του hardware από τη σκόνη και λίγο πριν το "καθάρισμα" του 2003 Server από τους δίσκους!

Δημιουργία των partitions με το gpart, λίγο πριν το restore. Η διαδικασία έγινε με τη λειτουργία Live CD που παρέχει το FreeBSD 9.X

To atomακι με το ενσωματωμένο τροφοδοτικό να έχει παραδώσει το πνεύμα. Για άλλη μια φορά.

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

Μικρός και μεγάλος δαίμονας σε δράση! Atlantis και Phoenix στις τελικές τους θέσεις.

ΟΚ, το τερματίσαμε!

Καλή Χρονιά!

Monday, December 31, 2012

Ανακοίνωση Κυκλοφορίας: FreeBSD 9.1-RELEASE


Στις 30/12/2012, το FreeBSD Project ανακοίνωσε επίσημα την κυκλοφορία της έκδοσης 9.1-RELEASE. Το 9.1-RELEASE έρχεται να βελτιώσει με διορθώσεις και νέα χαρακτηριστικά το πολύ καλό 9.0-RELEASE. Mπορείτε να δείτε τα νέα χαρακτηριστικά του στη σχετική ανακοίνωση:

FreeBSD 9.1 Release Announcement

Μπορείτε να κατεβάσετε οποιαδήποτε διαθέσιμη έκδοση του FreeBSD από κάποιο από τα πολλά mirror sites. To 9.1-RELEASE έχει ήδη εμφανιστεί στους FTP servers μεγάλων ελληνικών ISPs.

Διαβάστε άρθρα σχετικά με το λειτουργικό ή κατεβάστε έτοιμο VirtualBox image με xfce desktop από το site του περιοδικού deltaHacker.

Τέλος, μην παραλείψετε να επισκεφθείτε την Δικτυακή Τοποθεσία της Ελληνικής Κοινότητας FreeBSD

Kαλή εγκατάσταση!

Friday, December 28, 2012

DHCP και Dynamic DNS Updates

Σε παλιότερο μας άρθρο είχαμε συζητήσει τη δημιουργία ενός DHCP server για την απόδοση διευθύνσεων και ρυθμίσεων δικτύου στα client μηχανήματα του δικτύου μας. Σε άλλο μας άρθρο είχαμε συζητήσει τη δημιουργία ενός DNS Server κατάλληλο για σχολικά εργαστήρια - αλλά γιατί όχι και για το οικιακό ή εταιρικό σας δίκτυο. Μάλιστα του είχαμε φτιάξει και μια ωραία... μαύρη τρύπα για να κόψουμε κάποιες διευθύνσεις.

Αν τώρα καταφέρουμε τον DHCP server μας να ενημερώνει το DNS κάθε φορά που αποδίδει μια νέα διεύθυνση (δημιουργεί / τροποποιεί ένα lease) θα έχουμε πετύχει το τέλειο. Πάμε να δούμε πως!

Το Σενάριο

Σε ένα δίκτυο έχετε ένα FreeBSD server με υπηρεσίες DHCP & DNS. Τα client μηχανήματα παίρνουν δυναμικές διευθύνσεις (και λοιπές ρυθμίσεις δικτύου) από τον DHCP server. Θέλετε να μπορείτε ανά πάσα στιγμή να έχετε πρόσβαση στα μηχανήματα αυτά από οποιοδήποτε άλλο μηχάνημα χρησιμοποιώντας το όνομα τους και όχι το IP τους - που έτσι και αλλιώς δεν ξέρετε.

Παράδειγμα: Το μηχάνημα workstation01.lab1.local πήρε χθες δυναμική IP 192.168.0.33. Μια βδομάδα μετά, πήρε την 192.168.0.24. Οι διευθύνσεις είναι αδιάφορες: Θέλουμε να μπορούμε να αναφερθούμε σε αυτό γράφοντας κάτι σαν:

# ping workstation01.lab1.local

Είναι φανερό, ότι ο DHCP server θα πρέπει να ενημερώνει τον DNS: Να δημιουργεί εγγραφές για νέα μηχανήματα της ζώνης αλλά και να ανανεώνει υπάρχουσες. Καλώς ήλθατε στα dynamic DNS updates! Για το παράδειγμα μας θα υποθέσουμε οτι ο DNS/DHCP server εκτελούνται στο ίδιο μηχάνημα με IP 192.168.0.1

Γενικές γνώσεις

Αν ψάξετε λίγο το αρχείο σας /etc/named.conf, θα βρείτε κάτι σαν το παρακάτω για τις ζώνες σας:

zone "lab1.local" {
        type master;
        file "/etc/namedb/master/lab1.local.db";
};

zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/namedb/master/0.168.192.in-addr.arpa";
};

Παρατηρήστε ότι τα αρχεία αυτά βρίσκονται στον υποκατάλογο master στον οποίο ο χρήστης bind (με τα δικαιώματα του οποίου εκτελείται ο DNS server στο FreeBSD) δεν έχει δικαιώματα εγγραφής. Άρα ακόμα και αν στείλετε με κάποιο τρόπο μήνυμα "update" στον server, δεν θα μπορέσει να γράψει κάτι σε αυτό τον κατάλογο.

Μη βιαστείτε να αλλάξετε τα δικαιώματα: Αν αλλάξετε το χρήστη/group του καταλόγου σε bind:wheel, το bind θα τα αλλάξει ξανά στην επόμενη εκκίνηση της υπηρεσίας και θα δείτε και το παρακάτω μήνυμα:

Stopping named.
Waiting for PIDS: 6707.
etc/namedb/master changed
 user expected 0 found 53 modified
Starting named.

Το οποίο σε απλά ελληνικά σημαίνει: "μη πειράζετε τα δικαιώματα σε αυτό τον κατάλογο!". Και τι πρέπει να κάνουμε; Μα πολύ απλά. Θα μεταφέρετε τα αρχεία στον κατάλογο dynamic. Γιατί εκεί θα γίνονται οι δυναμικές ανανεώσεις και o bind έχει την κατάλληλη πρόσβαση.

# service named stop
# cd /etc/namedb/master
# mv lab1.local.db   ../dynamic
# mv 0.168.192.in-addr.arpa   ../dynamic

Και πριν επανεκκίνησετε, φυσικά θα αλλάξετε και τις καταχωρίσεις ώστε να δείχνουν στον κατάλογο dynamic:

zone "lab1.local" {
        type master;
        file "/etc/namedb/dynamic/lab1.local.db";
};

zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/namedb/dynamic/0.168.192.in-addr.arpa";
};

Μπορείτε τώρα να επανεκκινήσετε την υπηρεσία όση ώρα θα ψάχνετε πως γίνεται το dynamic DNS update από τον DHCP server. Όχι τίποτα, άλλο μη γκρινιάζουν και οι χρήστες που δεν θα έχουν δίκτυο στο μεταξύ :)

# service named start

Δημιουργία... μυστικών

Για να γίνεται το DNS update, θα πρέπει ο DHCP server να στέλνει το κατάλληλο μήνυμα στον DNS κάθε φορά που απαιτείται να δημιουργηθεί ή να τροποποιηθεί μια εγγραφή. Όμως δεν μπορούμε να αφήσουμε τον DNS να δέχεται updates από παντού. Οι εποχές είναι πονηρές! Πρέπει να δημιουργήσουμε ένα μυστικό κλειδί που θα γνωρίζουν ο DNS και ο DHCP για να συννενοούνται:

# dnssec-keygen -a hmac-md5 -b 128 -n USER dhcpupdatekey
Kdhcpupdatekey.+157+10817

Δείτε το περιεχόμενο του αρχείου με κατάληξη .key που δημιουργήθηκε:

# more Kdhcpupdatekey.+157+10817.key 
dhcpupdatekey. IN KEY 0 3 157 dw5akl5zJw8Rc/8za61TLA==

Το κλειδί που θέλετε είναι αυτό το τελευταίο πεδίο:

dw5akl5zJw8Rc/8za61TLA==

Τροποποιήστε το /etc/named.conf όπως φαίνεται παρακάτω:

key "dhcpupdatekey" {
  algorithm hmac-md5;
  secret "dw5akl5zJw8Rc/8za61TLA==";
};

zone "lab1.local" {
        type master;
        file "/etc/namedb/dynamic/lab1.local.db";
        allow-update { key "dhcpupdatekey"; };
};

zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/namedb/dynamic/0.168.192.in-addr.arpa";
       allow-update { key "dhcpupdatekey"; };
};

Κάντε restart το bind και για να πείσετε τον εαυτό σας ότι το dynamic update λειτουργεί, δοκιμάστε να του στείλετε ένα update χειροκίνητα. Επιλέξτε μια διεύθυνση που γνωρίζετε και περάστε την:

# service named restart
# nsupdate
> server 192.168.0.1
> key dhcpupdatekey dw5akl5zJw8Rc/8za61TLA==
> zone lab1.local
> update add workstation01.lab1.local. 600 IN A 192.168.0.24
> send
> quit

Δεν θα πρέπει να δείτε κανένα μήνυμα μετά το send. Μπορείτε να επιβεβαιώσετε την εγγραφή τρέχοντας την nslookup:

# nslookup
> workstation01.lab1.local

Server:  192.168.0.1
Address: 192.168.0.1#53

Name:  workstation01.lab1.local
Address: 192.168.0.24
> exit

Αφού λειτουργεί, δεν μένει παρά να βάλουμε τον DHCP να κάνει τη δουλειά που κάναμε εμείς χειροκίνητα! Πάμε λοιπόν να επεξεργαστούμε το /usr/local/etc/dhcpd.conf

Αλλαγή του dhcpd.conf

Και εδώ πρόκειται για πολύ απλές και αναμενόμενες αλλαγές. Προσθέτουμε το ίδιο μυστικό κλειδί (προσέξτε εδώ χωρίς εισαγωγικά!):

key dhcpupdatekey {
  algorithm hmac-md5;
  secret dw5akl5zJw8Rc/8za61TLA==;
}

Προσθέτουμε τη γραμμή που ενημερώνει το DHCP server ότι θα κάνει πλέον dynamic dns updates:

ddns-update-style interim;

Και τέλος τα στοιχεία για τις ζώνες που θα ενημερώνονται:

zone lab1.local. {
  primary 192.168.0.1;
  key dhcpupdatekey;
}

zone 0.168.192.in-addr.arpa. {
  primary 192.168.0.1;
  key dhcpupdatekey;
}

Κάντε και μια επανεκκίνηση το DHCP σας και είμαστε έτοιμοι:

# service isc-dhcpd restart

Μπορείτε να διαβάσετε και αυτό το σχετικό άρθρο με το οποίο ξεκινήσαμε και εμείς τις αναζητήσεις μας.

Ελπίζουμε να περάσετε ένα ευχάριστο χειμωνιάτικο απόγευμα. Καλές γιορτές!

Saturday, September 1, 2012

Παιχνίδια σε Python & Pygame - Το Βιβλίο

Η ιδέα για αυτό το βιβλίο ξεκίνησε κοντά στις γιορτές Χριστουγέννων του 2011. Είχα αναλάβει το μάθημα "Εφαρμογές Πολυμέσων" της Γ' τάξης των ΕΠΑΛ και ήθελα να κάνω κάτι αρκετά διαφορετικό από τα καθιερωμένα. Τι νόημα έχει ένα τέτοιο μάθημα αν δεν φτιάξεις πραγματικά μια πολυμεσική εφαρμογή; Και τι καλύτερο από ένα παιχνίδι - κίνηση, γραφικά, ήχος, συνδυάζει όλα τα στοιχεία πολυμέσων.

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

Καθώς επεξεργαζόμουν την ιδέα, ο Χρήστος Βαρελάς, εκδότης του deltaHacker αναζητούσε ιδέες για νέα άρθρα. Συμφωνήσαμε λοιπόν να γίνει το Python Game Programming μια σειρά άρθρων στο περιοδικό (αλλά και στο site του περιοδικού) και να κυκλοφορήσει σε free ebook με την ολοκλήρωση της.

Η σειρά πράγματι ξεκίνησε στο τεύχος Φλεβάρη 2012 και ολοκληρώθηκε στο τεύχος Αυγούστου 2012. Ταυτόχρονα γίνονταν και η μεταφορά της στο XeLaTeX για τη δημιουργία του βιβλίου. Να συμπληρώσω εδώ ότι η εργασία παρουσιάστηκε και στην Έκθεση Μαθητικής Δημιουργίας στα Χανιά όπου και είχε μεγάλη απήχηση!

Για την υποστήριξη του βιβλίου και τη διανομή των προγραμμάτων και των αρχείων υποστήριξης έχει δημιουργηθεί ο ιστότοπος pygamegr.wordpress.com. Για τους βιαστικούς δίνουμε παρακάτω απευθείας τους πιο βασικούς συνδέσμους:

Στο βιβλίο παρέχονται επίσης και άλλα μικρότερα προγράμματα και παραλλαγές των παραπάνω και είναι κατάλληλο για (αυτο)διδασκαλία τόσο μαθητών όσο και ενηλίκων στον προγραμματισμό με ευχάριστο τρόπο!

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

Saturday, August 18, 2012

Python Game Programming

Pygame Invaders

Με την ολοκλήρωση της σειράς Python Game Programming στο περιοδικό deltaHacker μπορείτε πλέον να κατεβάσετε στη πλήρη του μορφή και το τελευταίο παιχνίδι που δημιουργήσαμε για τη σειρά, γνωστό ως Pygame Invaders.


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

Παιχνίδια σε Python και Pygame

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

Εννοείται φυσικά ότι τα παιχνίδια τρέχουν σε οποιοδήποτε λειτουργικό, Windows, OSX, Linux, BSD αρκεί να έχετε Python 2.7 και Pygame εγκατεστημένα. Οδηγίες για τα περισσότερα λειτουργικά θα βρείτε στο pygame.org.

Καλή διασκέδαση και καλά ξενύχτια! (στον κώδικα πάντα).

Saturday, May 12, 2012

Εγκαταστήστε το FreeBSD 9.0 χωρίς το bsdinstall

Έχει περάσει κάποιο διάστημα από το FreeBSD 9.0-RELEASE και μάλλον ήρθε η
ώρα να δούμε πως μπορούμε να το εγκαταστήσουμε χωρίς την βοήθεια του
installer. Για όποιον έχει χάσει επεισόδια, το FreeBSD 9.0 έρχεται με τον
νέο installer, bsdinstall. Η αλήθεια είναι ότι δεν μας ξετρέλανε κιόλας όταν
τον είδαμε, αλλά δεν πειράζει: η λογική του ευχάριστου απογεύματος είναι να
δούμε πως θα τον παρακάμψουμε για να κάνουμε μια χειροκίνητη εγκατάσταση.


Η γενική ιδέα είναι εύκολη, θέλουμε όμως να εκμεταλλευτούμε και το νέο
σύστημα partitioning, το GPT. Βλέπετε, το bsdinstall το υποστηρίζει και δεν
θέλουμε η δική μας λύση να είναι κατώτερη. Αν μάθουμε να κάνουμε GPT
partitioning χειροκίνητα, θα μπορούμε επίσης να χρησιμοποιήσουμε την
λειτουργία LiveCD του FreeBSD 9.0 και με άλλους τρόπους (π.χ. να κάνουμε
partitioning και να ρίξουμε κάποιο έτοιμο dump που έχουμε χωρίς να κάνουμε
νέα εγκατάσταση).


Ο Warren Block, FreeBSD Doc committer, έχει γράψει ένα μικρό αλλά πολύ
κατατοπιστικό οδηγό για το GPT που ουσιαστικά περιγράφει ότι θέλουμε να
κάνουμε όσο αφορά το partitioning. Για να ξεκινήσουμε, χρησιμοποιήστε το
FreeBSD 9.0-RELEASE CD (ή DVD) για να εκκινήσετε το μηχάνημα σας.
Στο παράθυρο Welcome επιλέξτε LiveCD και κάντε login ως root.


Βήμα 1ο - Διαγράψτε τα πάντα και δημιουργήστε GPT Scheme


Προσοχή: Σε αυτό το σημείο θα διαγράψουμε όλα τα περιεχόμενα του δίσκου!
Υποθέτουμε ότι ο δίσκος μας είναι ο ada0 αλλά μπορείτε να διαπιστώσετε στο
δικό σας μηχάνημα με ένα ls /dev/ad*


# gpart destroy -F ada0

ada0 destroyed

# gpart create -s gpt ada0

ada0 created


Βήμα 2ο: Δημιουργία freebsd-boot partition και εγκατάσταση GPT bootcode


Το boot partition θα κρατήσει το loader. Το φτιάχνουμε σε μέγεθος 128Κ το
οποίο μάλιστα περισσεύει - αλλά αν αργότερα κάνουμε ZFS boot θα μας
χρειαστεί.


# gpart add -t freebsd-boot -l gpboot -s 128K ada0

ada0p1 added

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0

bootcode written to ada0


Βήμα 3ο: Δημιουργία UFS filesystem για το root partition


Δημιουργούμε το partition για το /. Ξεκινάει στο 1Μ boundary για να έχουμε
σωστή ευθυγράμμιση τομέων σε δίσκους με μέγεθος τομέα 4Κ. Εφ'όσον όλα τα
μεγέθη partition που θα ακολουθήσουν θα είναι σε ζυγό μέγεθος, η ευθυγράμμιση
θα παραμείνει σωστή. Στο παράδειγμα μας, θα βάλουμε 8Gb root filesystem.
Παρατηρήστε ότι δίνουμε και ετικέτες (labels) στα partitions. Οι ετικέτες
αυτές θα εμφανίζονται στο /dev/gpt και μας επιτρέπουν να προσαρτήσουμε το
σύστημα αρχείων χωρίς να αναφερθούμε στη συσκευή δίσκου.


# gpart add -t freebsd-ufs -l gproot -b 1M -s 8G ada0

ada0p2 added


Μπορούμε να το διαμορφώσουμε και άμεσα, χρησιμοποιώντας μάλιστα και το νέο
soft updates journaling:


# newfs -j /dev/gpt/gproot

...αριθμοί sectors που μόνο ο McKusick καταλαβαίνει...
newfs: soft updates journaling set


Βήμα 4ο: Δημιουργία filesystem για το home partition


Είναι προφανώς καλή ιδέα να φτιάξουμε ένα χωριστό partition για τα δεδομένα
των χρηστών. Θα βάλουμε εδώ άλλα 8G σαν παράδειγμα.


# gpart add -t freebsd-ufs -l gphome -s 8G ada0

ada0p3 added

# newfs -j /dev/gpt/gphome
...
newfs: soft updates journaling set


Βήμα 5ο: Δημιουργία swap partition


Το τελευταίο μας partition και εδώ θα χρησιμοποιήσουμε απλώς ότι χώρο έχει
απομείνει (υποτίθεται είχαμε υπολογίσει από πριν με βάση τα υπόλοιπα
partitions το χώρο που μένει για το swap). Όταν δεν δώσουμε συγκεκριμένο
χώρο στην εντολή, χρησιμοποιείται όλος ο υπόλοιπος διαθέσιμος χώρος.


# gpart add -t freebsd-swap -l gpswap ada0

ada0p4 added


Βήμα 6ο: Προσάρτηση του νέου root filesystem και αποσυμπίεση αρχείων


Μπορούμε τώρα να προσαρτήσουμε το νέο σύστημα αρχείων root σε ένα προσωρινό
χώρο και να αποσυμπιέσουμε τα αρχεία εγκατάστασης από το CD. Τα ελάχιστα που
χρειαζόμαστε είναι τα kernel.txz και base.txz:


# mount /dev/gpt/gproot /media
# cd /media
# xz -dc /usr/freebsd-dist/kernel.txz | tar xvpf -
# xz -dc /usr/freebsd-dist/base.txz | tar xvpf -


Προαιρετικά, μπορείτε να κάνετε το ίδιο και για τα games.txz, doc.txz, src.txz και ports.txz.


Βήμα 7ο: Δημιουργία του fstab


Θα χρειαστεί να φτιάξουμε ενα fstab για το νέο σύστημα ώστε να γίνει δυνατή
η εκκίνηση του. Αυτό όμως είναι αρκετά εύκολο γιατί έχουμε τα labels:


# cd /media/etc
# vi fstab


Γράψτε τα παρακάτω:


#Device         Mountpoint      FStype   Options  Dump Pass#
/dev/gpt/gproot /               ufs      rw       1    1
/dev/gpt/gphome /usr/home       ufs      rw       1    2
/dev/gpt/gpswap none            swap     sw       0    0

Θα προσαρτήσουμε το home στο παραδοσιακό /usr/home του FreeBSD, οπότε μην
παραλείψετε να δημιουργήσετε τον κατάλογο:


# mkdir -p /media/usr/home

Βήμα 8ο: Επανεκκίνηση και ολοκλήρωση


Αποπροσαρτήστε το σύστημα αρχείων και επανεκκινήστε:


# cd /
# umount /media
# shutdown -r now


Βγάλτε το CD και αφήστε το σύστημα σας να εκκινήσει κανονικά. Μετά την
επανεκκίνηση, κάντε login ως root και:


  • Δημιουργήστε root password γιατί είναι κενό!
  • Εκτελέστε ln -s /usr/home /home
  • Φτιάξτε κατάλληλο rc.conf (Εντάξει, αντιγράψτε το από την άλλη σας εγκατάσταση)
  • Προσθέστε χρήστες, λογισμικό και οτιδήποτε άλλο θα γεμίσει ευχάριστα το μουντό σας απόγευμα
  • Χορέψτε το χορό της νίκης που απαλλαγήκατε μια για πάντα από το bsdinstall!

Thursday, April 26, 2012

Python Game Programming

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

Με βάση το παραπάνω και καθώς φέτος διδάσκω το μάθημα Εφαρμογές Πολυμέσων, σκέφτηκα ότι είναι πράγματι ευκαιρία να φτιάξουμε κάτι αληθινά ενδιαφέρον αντί για τις χαζές παρουσιάσεις σε Powerpoint ή (μη χειρότερα) Flash που κάνουν συνήθως σε αυτό το μάθημα. Αν σκεφτείτε μάλιστα ότι το εργαστήριο μου τρέχει FreeBSD, ένας λόγος παραπάνω :)

Ταυτόχρονα σκέφτηκα ότι θα ήταν ενδιαφέρον να δημοσιευτεί μια σειρά άρθρων προγραμματισμού για αρχαρίους που να βασίζεται στη δημιουργία παιχνιδιών - όπως δηλ. μάθαμε και εμείς προγραμματισμό πριν (πολλά) χρόνια στους οικιακούς μας υπολογιστές. Δυστυχώς στο μεταξύ η αμεσότητα των πρώτων αυτών υπολογιστών χάθηκε μέσα σε διάφορες γλώσσες προγραμματισμού, λειτουργικά, API, OpenGL, DirectX και δεν ξέρω και εγώ τι άλλο.  Η αρχική δυνατότητα να γράψεις ένα προγραμματάκι 20 γραμμές που να κινεί μια μπάλα ή ένα διαστημοπλοιάκι στην οθόνη και να δίνει τη χαρά της δημιουργίας φαίνεται ότι είχε περάσει ανεπιστρεπτί.

Ευτυχώς δεν είναι ακριβώς έτσι: Η python και η βιβλιοθήκη pygame δίνουν αυτή ακριβώς τη δυνατότητα προσαρμόσμενη στα σύγχρονα δεδομένα αλλά πάντα με αρκετή ευκολία ώστε ο αρχάριος να μην απογοητευτεί αλλά αντίθετα να κολλήσει στο αντικείμενο!  Η σειρά άρθρων για το pygame δημοσιεύεται στο περιοδικό deltaHacker.  Με την ολοκλήρωση της θα γίνει και η δημοσίευση των άρθρων σε μορφή βιβλίου που θα μπορείτε να κατεβάσετε και να χρησιμοποιήσετε στη διδασκαλία.

Για την ώρα μπορείτε να κατεβάσετε τα προγράμματα από το site που έχει δημιουργηθεί για την υποστήριξη του μαθήματος:


Μην παραλείψετε επίσης να επισκεφτείτε την ιστοσελίδα του περιοδικού deltaHacker όπου θα βρείτε και κάποια συμπληρωματικά - βοηθητικά άρθρα.

Το όλο εγχείρημα θα παρουσιάστει επίσης στις 11 Μαίου στην Έκθεση Μαθητικής Δημιουργίας Μαθητών Πληροφορικής που θα πραγματοποιηθεί στα Χανιά, στο Κέντρο Αρχιτεκτονικής Μεσογείου.