Unkillable zombie blog

This blog just won't die

May 11, 2010

Deployment with Fabric

Τί είναι:

To fabric είναι ένα εργαλείο για αυτοματοποίηση εργασιών μέσω SSH που διευκολύνει το deployment ή την διαχείρηση συστημάτων.

Συγκεκριμένα, πρόκειται για ένα command line εργαλείο και μια βιβλιοθήκη (API) γραμμένη σε Python που επιτρέπει την εκτέλεση προγραμμάτων command line ή και Python κώδικα, σε τοπικό η και απομακρυσμένο server(s).

Παράδειγμα:

Έστω οτι έχω ένα Django site που το αναπτύσσουμε στον υπολογιστή μας, και τρέχουμε ένα production server σε ένα VPS.

Οταν έχω μια νέα έκδοση του site μου, τρέχω μερικές εντολές στο τοπικό PC (πχ το test framework, κάνω push τις αλλαγές κλπ), μετά κάνω login στο VPS μου μέσω SSH και κάνω τις αναβαθμίσεις. Αυτά τα βήματα μπορούν, αφού καταγραφούν, και μετά να αυτοματοποιηθούν κάνοντας χρήση του fabric.

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

Η εγκατάσταση είναι πολύ έυκολη. easy_install fabric ή απο το package manager της διανομής μας

Το fabfile

Το πρώτο βήμα για την χρήση του fabric είναι η δημιουργία του αρχείου στο οποίο βάζουμε τις “εντολές” μας. Το αρχείο αυτό το ονομάζουμε fabfile.py γιατί με αυτό το όνομα το βρίσκει αυτόματα το εργαλείο fab (το command line εργαλείο του fabric)

Στο fabfile αρχείο καταγράφουμε τις διάφορες “λειτουργίες” που θα εκτελεί το Fabric.

Παράδειγμα:

def hello():
    print "Hello world"

Τώρα μπορούμε να τρέξουμε την “hello” τρέχοντας:

arcanum@localhost ~ $ fab hello

Το fabric αυτόματα θα ψάξει για ένα αρχείο με όνομα fabfile.py και μέσα του για ένα callable με όνομα hello και θα το εκτελέσει.

Φυσικά αυτό είναι υπερβολικά απλό και όχι ιδιαίτερα χρήσιμο απο μόνο του. Η χρησιμότητα του Fabric έρχεται απο το API του.

Παράδειγμα με το API του Fabric

Όπως είπαμε θέλουμε να τρέξουμε μερικές εντολές στο τοπικό PC και μερικές στο απομακρυσμένο. Το fabric μας παρέχει ένα API για αυτή την δουλειά Αυτό είναι ένα (τροποποιημένο για πολλούς λόγους) script που χρησιμοποιώ σε ένα project μου.

def import datetime
from fabric.api import local, run, cd, env

# The app directory of metaxas.gr
PROJECT_DIR='/home/arcanum/django_projects/myproject'

env.hosts = ['arcanum@metaxas.gr:2000']

def deploy():
    backup_database()
    sync_remote_repo()
    run_migrations()
    restart_wsgi()

def push_updates():
    """
    Push updates from local repo to remote repo
    Does *NOT* commit uncommited modifications
    """
    # TODO check for uncommitted modifications and give warning
    local("hg push")

def sync_remote_repo():
    """
    Sync the remote stable repository on the production server
    """
    with cd(PROJECT_DIR):
        run('hg pull')
        run('hg up')

def run_migrations():
    """
    Run any migration on the remote server
    """
    with cd(PROJECT_DIR):
        run('./manage.py migrate')


def restart_wsgi():
    """
    Restart the WSGI app by 'touch'ing the wsgi file.
    Thi means updating the last modification date of that file, which is
    monitored by the WSGI app server
    """
    with cd(PROJECT_DIR):
        run('touch wsgi/django.wsgi')


def backup_database():
    """
    Make a backup of the database.
    """
    with cd(PROJECT_DIR):
        now = datetime.datetime.now()
        now_str = now.strftime("%d-%m-%Y")
        BACK_CMD = 'pg_dump --format=t mydatabase |bzip2 > mydatabase-%s.sql.bz2'%(now_str, )

        run(BACK_CMD)

Θεωρώ οτι είναι αρκετά απλό παράδειγμα και κάποιος με εμπειρία στην Python θα καταλάβει αμέσως τι γίνεται όμως θα ανεφέρω μερικά πράγματα:

  1. Τρέχοντας fab deploy το fabric θα βρεί την function με όνομα deploy και θα την εκτελέσει. Αυτή με την σειρά της καλεί διάφορες άλλες functions μέσα στο fabfile.

  2. Απο το API του fabric χρησιμοποιούμε μερικές τυπικές λειτουργίες όπως local , run, cd κλπ.

Η local μας δίνει την δυνατότητα να τρέξουμε μια εντολή (σαν να είμασταν στο shell) στο τοπικό μηχάνημα.

Η run τρέχει μια εντολή (πάλι shell) στο remote μηχάνημα. Αυτό γίνεται transparently μέσω SSH. Το remote host τον βρίσκει απο το την env.hosts λίστα. Θα μπορούσαμε να συνδεόμαστε σε πολλούς hosts (αν για παράδειγμα είχαμε πολλούς web server σε ένα scalable site).

Το cd κάνει αυτό που φαντάζεσται. Η ανάγκη του προέρχεται απο την έλλειψη state της των shell-less SSH συνδέσεων. Το cd έχει ένα context manager (with statement ) οπότε οτι τρέχει μέσα στο context του with γίνεται prepend το path.

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

Το API του fabric είναι, προφανώς, πολύ μεγαλύτερο με δυνατότητες για prompts, file transfers, κλπ.

Για περισσότερα ανατρέξτε στο fabric documentation

Click to read and post comments

Aug 20, 2009

Newsletter με πολλούς παραλήπτες και privacy

Πρόσφατα έλαβα ένα ενημερωτικό email απο ένα ηλεκτρονικό κατάστημα με (πολύ) προκλητικά εσώρουχα. ( Όχι δεν έχω ψωνίσει. Το έχει φτιάξει φίλος μου και γράφτηκα για να δώ την υλοποίηση. Seriously )

Το email αυτό λοιπόν έχει πολλούς παραλήπτες στο Το: header και μπορώ να δώ ποιος άλλος το έλαβε. Απλά απαράδεκτο.

Μου ήταν πολύ απλό να πάρω μερικά email, να πάω στην αναζήτηση του Facebook και να βρω ποιος είναι πελάτης του συγκεκριμένου καταστήματος. Στην συγκεκριμένη περίπτωση δεν ήταν ποιός, αλλά ποιες και μάλιστα πολλές και καλές. Νομίζω οτι λάθος δουλειά κάνω. :-)

Αν δεν είχε ανάμιξη ο φίλος μου (δεν είχε στο email) θα τους έστελνα ένα καλό flame.

Είμαι βέβαιος οτι η ασχετοσύνη κυριαρχεί εδώ και όχι τίποτα πονηρό.

Click to read and post comments

Aug 11, 2009

Νέα μέθοδος γρήγορου makeup

Όλες οι γυναίκες κρύβουν ένα Πικάσο μέσα τους. Και αυτό είναι κακό. Πολύ κακό. Διότι το βγάζουν στο βάψιμο τους, και ο Πικάσο δεν είχε ένα ανάλαφρο στύλ, αλλα βαρύ, δυσνόητο, στύλ καρικατούρας που οι δήθεν το ονομάζουν cubism αλλα οι γνώστες το ονομάζούν "Απέτυχα σε όλες τις χρήσιμες δουλειές και έγινα ζωγράφος"

Παρά τα χάλια του, Ο Πικάσο δεν έφτιαχνε τα έργα του σε δέκα λεπτά. Μια αηδία τέτοιου μεγέθους χρειάζεται χρόνο για επιμονή για να φτάσει το απόγειο της. Έτσι και οι ο γυναικείος πληθυσμός, δεν βάζει make-up σε 10 λεπτά αλλα, όπως ο Πικάσο, χρειάζεται χρόνο, χρήμα (o Hondos κλέφτης θα γίνει?) και επιμονή για να φτάσει στην αηδία που ονομάζουν βάψιμο.

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

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

Έστυψα το μυαλό μου λοιπόν για να βρω τρόπου να συγκεράσουμε την τέχνη με την γρήγορη εφαρμογή της.

Ιδέες:

Εφαρμογή make-up με προτυπωμένο χαρτί σαν αυτοκόλλητο.

Η τεχνολογία πιστεύω υπάρχει για να δημιουργηθεί ένα φύλο χαρτιού με προ-τυπωμένο make-up. Απλά το εφαρμόζεις στο πρόσωπό σου και αφήνει το make-up στα κατάλληλα σημεία. Προφανώς θα πρέπει να έχει σημάδια, (σταυρούς, εγκοπές, κλπ) για υπάρξουν σωστές συμπτώσεις αλλά πιστεύω οτι αυτά λύνονται εύκολα. Θα μπορούσαν να κυκλοφορούν σε μια μεγάλη γκάμα make-up όπως "Πόρνη της Βαβυλώνας" , "Ξεπεσμένη Κλεοπάτρα", " Δειγματολόγιο της Lancome" , "Τροχαίο με φορτηγό που μεταφέρει μπογιές" , "Ο βιασμός του Ουράνιου Τόξου" και όλα τα δημοφιλή patterns.

Σκαλωσιά

Μια ακόμα λύση στο πρόβλημα είναι η δημιουργία μιας μινι σκαλωσίας (όπως στης οικοδομές) γύρω απο πρόσωπο της ενδιαφερόμενης. Αυτό θα επιτρέψει στα Oompa Loompas να έχουν πρόσβαση σε όλα τα επίπεδα και να εφαρμόσουν το επιθυμητό make-up πολύ γρήγορα και με την γνωστή τελειομανία τους. Τα ηθικοπλαστικά τραγούδια είναι προαιρετικά, αλλά ενθαρρύνονται.

Αλγοριθμική δημιουργία make-up pattern

Αυτό είναι ελκυστικότερο στα geek-girls αλλα νομίζω οτι έχει γενικότερη εφαρμογή. Αντί να αποφασίζει η γυναίκα για το που ακριβώς θα εφαρμοστεί ποιο καλλυντικό, αφήνουμε αυτές τις αποφάσεις σε ένα αλγόριθμο. Σκέψου Fractals.

Έχει το πλεονέκτημα αν κάποιος πλησιάσει πολύ κοντά στο πρόσωπό σου, το make-up σου δεν θα pixelιάσει αλλα θα κάνει σωστά zoom.

Επιπλέον κάθε make-up θα έχει ένα web interface που θα ψηφίζει ο αντρικός πληθυσμός αν θέλει να δεί κάτι τέτοιο στον δρόμο. Κάτι σε στυλ stumbleupon. Τα make-up με υψηλή βαθμολογία θα εμφανίζονται πιό συχνά. Ετσι οι σύγχρονη γυναίκα θα είναι πάντα στην μόδα.

Μόνιμο Μακιγιάζ

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

Γενικότερες φιλοσοφίες

Πέρα απο τρόπους για ταχύτερη εφαρμογή του make-up πιστεύω οτι οι εταιρίες καλλυντικών δεν έχουν εφαρμώσει σωστές μάρκετινγκ τεχνικές. (insert buzzwords here, like synergize, leverage κλπ κλπ Βλέπε Dilbert για λεπτομέρειες).

Για παράδειγμα θα μπορούσαν μαζί με ένα σετ μακιγιάζ να δίνουν και ένα dvd με τον Steven Seagal ώστε το να έχει κάτι να ασχοληθεί ο φίλος σας. (Εξάλλου είναι γνωστό οτι ο Steven Seagal είναι αυτό που πραγματικά ξεχωρίζει του άντρες απο τις γυναίκες)

Είμαι σίγουρος οτι υπάρχουν και άλλοι τρόπου που δεν σκέφτηκα. Περιμένω τις ιδέες σας. :-)

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

Click to read and post comments

May 06, 2009

Τα μαγικά λεωφορεία της Πάτρας

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

Το πρώτο πράγμα που εντυπωσιάζει τον επίδοξο επιβάτη είναι η πληροφόρηση ώς προς τις στάσεις επιβίβασης. Είναι κοινά αποδεκτό οτι η πληροφορία είναι πλέον σημαντικός παράγοντας στα σύγχρονα πεδία μάχης, και , μα τον Τουτάτις, αυτή είναι μια μάχη που τα αστικά ΚΤΕΛ σκοπεύουν να την κερδίσουν… με αντίπαλο τον επιβάτη.
Ο μόνος τρόπος για να βρείς που έχει στάση είναι να γυρνάς τους δρόμους σαν άστεγος, ψάχνοντας για μια ανεξήγητα υψηλή συγκέντρωση όρθιου κόσμου στο πεζοδρόμιο. Ο χρυσός κανόνας είναι, οτι ψάχνουμε για ένα σημείο με απόκλιση 3-4 standard deviations πάνω απο το mean.

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

Έστω, όμως, οτι με πλάγιους τρόπους λαμβάνεις την κατάλληλη πληροφόρηση και καταφέρνεις να βρεις την στάση , αλλά και την ώρα. Όταν ως δια μαγείας φτάνει το λεωφορείο, θα εντυπωσιαστείς (βλέπε πρωτύτερο ορισμό του “εντυπωσιαστείς”) με τα Πατρινά υπερσύγχρονα κομψοτεχνήματα μηχανικής και τεχνολογίας. Το μόνο μειονέκτημα τους είναι πως επειδή κατασκευάστηκαν πριν την ανακάλυψη του πετρελαίου, καίνε βοθρολυμάτα . Σε περίπτωση που δεν υπάρχουν διαθέσιμα καύσιμα (πχ η κρίση χτύπησε και την τουαλέτα μας) υπάρχουν ειδικές καταπακτές κάτω απο τα καθίσματα που πέφτουν και βγάζουν τα πόδια τους οι επιβάτες σαν τους Flintstones. Μην ανησυχείτε αν δεν ξέρετε τι να κάνετε, ο οδηγός θα σας δείξει την διαδικασία ακριβώς όπως κάνουν οι αεροσυνοδοί στο αεροπλάνο.
Το να πεί κανείς οτι τα λεωφορεία είναι παλιά, είναι σαν να λέμε οτι το Big Bang είναι κάτι που “έγινε παλιά”. Δεν αποδίδει την έννοια στο πλήρες μεγαλείο της. Η επικρατέστερη, πάντως, θεωρία είναι οτι τα Πατρινά λεωφορεία δεν κατασκευάστηκαν απο τον άνθρωπο αλλά σχηματίστηκαν μόνα τους στο πέρασμα του χρόνου απο την φυσιολογική μεταβολή της ύλης σε μοριακό επίπεδο.

Ακούγοντας αυτά τα προβληματάκια θα σκεφτεί κανείς οτι τα αστικά ΚΤΕΛ δεν έχουν αρκετή χρηματοδότηση γιατί τα εισιτήρια θα πρέπει να είναι πολύ φτηνά. Τα εισιτήρια μας όμως είναι πανάκριβα. Δεν το έχω επιβεβαιώσει, αλλά είμαι σίγουρος οτι στην ιδια τιμή που μου κοστίζει να πάω απο το σπίτι μου στην Πλατεία Γεωργίου, θα μπορούσα να πάρω το αεροπλάνο και να κάνω μια εβδομάδα διακοπές στα νησιά Φίτζι, συνοδευόμενος απο δύο high class escorts , όλα πληρωμένα , προσφορά του εαυτού μου. Όπως είπα, δεν είναι τσεκαρισμένο μεν,αλλά δεν μπορεί να πέφτω και πολύ έξω.

Αν ποτέ επισκεφθείτε την Πάτρα μην παραλείψετε να ζήσετε την μοναδική εμπειρία που είναι οι αστικές συγκοινωνίες μας.

Click to read and post comments

May 04, 2009

Why PHP sucks.

Με αφορμή ένα facebook status message ενός φίλου (ναι, την μισεί και αυτός :p ), είπα να γράψω οτι είναι στραβό με την PHP κατα την γνώμη μου.

Εχουμε λοιπόν:

  1. Χιλιάδες functions στο default namespace.
    Είναι πραγματικά απίστευτο. Μέχρι πρόσφατα η PHP δεν υποστήριζε namespaces και υπάρχουν κυριολεκτικά χιλιάδες functions στο default namespace. Εντελώς απαράδεκτο.
  2. Unicode. Πού είναι? οεο!
    Έχουμε 2009 και η PHP δεν υποστηρίζει Unicode. Μοιάζει μα ανέκδοτο αλλά δεν είναι.
  3. Κανένα database abstraction.
    Πόσο δύσκολο είναι ένα καλύτερο API για database access που να μην είναι δεμένο σε μια συγκεκριμένη database? Υπάρχουν διάφορα modules/scripts κλπ για να το λύνουν αυτό , παρόλα αυτά πάρα πολλά project χρησιμοποιούν functions συγκεκριμένες σε μια μόνο database. Και δεν μιλάω για χρήση ORM. Απλά ένα DB API όπως της Python.
  4. Χάος με deprecated functions.
    Συχνά functions σπάνε την συμβατότητα, αλλάζουν όνομα και υπάρχουν διαφορετικές και ασύμβατες functions παράλληλα. Παράδειγμα: mysql_* με mysqli_* και mysql_escape_string vs mysql_real_escape_string.
  5. Δεν υπάρχουν στάνταρ στις functions.
    Η σειρά των παραμέτρων αλλάζει ανάμεσα σε string μεθόδους. Παράδειγμα
  6. Ασυνεπές περιβάλλον Με τα .ini αρχεία ο developer δεν μπορεί να γνωρίζει είναι διαθέσιμο και τι όχι.
    Επιπλέον, υπάρχουν functions όπως η money_format() που δεν είναι portable και χωρίς σημαντικό λόγο. Η money_format() δεν είναι fork() ή κάποιο system call δεμένο σε μια πλατφόρμα. Γιατί το υλοποίησαν με non-portable τρόπο?
  7. Βλαμμένες χακιές
    Πχ magic_quotes. Το magic quotes ήταν μια χαζή ιδέα γεμάτη προβλήματα. Η ιδέα εγκαταλείφθηκε αλλα άφησε τα απομεινάρια της. Ο developer δεν γνωρίζει αν είναι ενεργοποιημένα ή όχι, και πρέπει να ελέγχει με get_magic_quotes_gpc().
    Φυσικά έχουμε και το register_globals. Μια ακόμα βλαμμένη ιδέα που καταργήθηκε. Ήταν μια πηγή απο bugs και απο σοβαρά κενά ασφαλείας. Δείτε εδώ για περισσότερα.
  8. Δεν προάγει διαχωρισμό HTML , κώδικα και SQL.
    Υπάρχουν MVC frameworks αλλα η συντριπτική πλειοψηφία του PHP κώδικα είναι “όλα αχταρμάς”. Τα περισσότερα βιβλία και tutorial σε μαθαίνουν την λογική όλα μέσα. Για κάθε PHP project που είναι καλά σχεδιασμένο/γραμμένο υπάρχουν άλλα χίλια που θες να βγάλεις τα μάτια σου και να τα φάς.

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

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

posted at 15:11  ·   ·  php  sucks  rant  greek
Click to read and post comments

Mar 23, 2009

Applications meme

Ένα ενδιαφέρον blog meme απο εδώ:

Answer the following questions with less than 50 words each (mind, only desktop/gui applications):

  1. which desktop manager do you use more often ?
  2. which desktop application you would not like to see implemented again on linux? and why?
  3. which desktop application you definitely would like to see implemented on linux? describe it briefly or point out to a similar application.
  4. write the name of the last project (not the very best, the last!) that made you wish to thank their developers so you can thank them now! :-)
  5. (optional) Link the blogs of 1-3 people you’d like to take part to this meme. (no more than three). you can skip this question if you like.

Οι απαντήσεις μου:

  1. KDE αποκλειστικά.
  2. audio players. Έχουμε πολλούς και πολύ καλούς. Ας βελτιώσουμε αυτούς.
  3. Video editing. πχ Sony Vegas κλπ.
  4. Django. Thank you people. You’re super awesome.
  5. Whatever…
posted at 17:02  ·   ·  meme  linux  greek
Click to read and post comments

Feb 28, 2009

Δημιουργία ImageSurface στο pycairo με χρηση της PIL.

Πρόσφατα δοκίμαζα το cairo (με την χρήση των python bindings, pycairo). Μια 2D vector graphics βιβλιοθήκη γραμμένη σε C με bindings για πολλές γλώσσες.

Ήθελα να μπορώ να φορτώνω εικόνες απο αρχεία με διάφορα format και να τα βάζω στο canvas μου.

Η PIL (Python Imaging Library) είναι μια πολύ καλή βιβλιοθήκη που μας επιτρέπει να διαβάζουμε και να επεξεργαζόμαστε πολλά αρχεία είκόνας.

Η PIL μας δίνει την δυνατότητα να πάρουμε τα “raw” δεδομένα μιας εικόνας, το cairo μας επιτρέπει να φτιάξουμε ένα ImageSurface απο τα “raw” δεδομένα μιας εικόνας αρα το πρόβλημα θα έπρεπε να είναι απλό. Μετατρέπουμε μια εικόνα σε RGBA format (γιατί μπορεί πχ να είναι pallete ) , παίρνουμε τα raw δεδομένα και τα δίνουμε στο cairo. Δεν είναι ακριβώς έτσι όμως. Η PIL χρησιμοποιεί RGBA format στα raw δεδομένα ενώ η cairo ARGB. (δηλαδή πρώτα το alpha channel αντί για τελευταίο όπως στο RGBA). Το αποτέλεσμα είναι οτι αντιστρέφονται τα χρώματα στο B και R color bands.

Για να το λύσουμε αυτό πρέπει να αντιστρέψουμε τα B και R color bands (blue και Red δηλαδή). Το οτι χρειάζεται να γίνει αυτό, όπως και το πώς γίνεται το βρήκα με αρκετό ψάξιμο ψάξιμο στα intertubes και για αυτό το καταγράφω εδώ. Υπάρχει στο cookbook του cairo σχετικό θέμα αλλα δεν λύνει την μετατροπή RGBA->ARGB και αυτό που αναφέρει σαν λύση (οτι το PIL μπορεί να μετατρέψει ARGB) δεν δουλεύει.

Ορίστε λοιπόν:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import Image
import cairo
import numpy

img = Image.open('our_file.jpg')
img = img.convert("RGBA")
r , g , b, a  = img.split()
img = Image.merge("RGBA"  ( b, g, r ,a ) )
buff = numpy.asarray(img)
buff.flags.writeable = True

width,height = img.size
stride = cairo.ImageSurface.format_stride_for_width(
                  cairo.FORMAT_ARGB32,width)

surface = cairo.ImageSurface.create_for_data(buff,
                    cairo.FORMAT_ARGB32, width,height,stride)

Εδώ χρησιμοποιώ την numpy για writeable buffer που χρειάζεται η μέθοδος create_for_data() αλλα γίνεται το ίδιο απλά και με το array module.

Click to read and post comments

Jan 30, 2009

Ubuntu is all about the community

Πολλά πράγματα μου συμβαίνουν αυτή την εποχή, και δυσάρεστα αλλα (μάλλον) και ευχάριστα οπότε δεν έχω χρόνο για το blog.

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

Προσοχή, δεν είναι για ανήλικους. (ποτέ όμως δεν είπα οτι το blog αυτό είναι σεμνό).

Ubuntu Porn

Ήθελα να σκεφτώ κάποιο κατάλληλο tagline για να προσθέσω αλλα ποτέ δεν το έκανα. Πχ κάτι σε στύλ “Ubuntu brings communities closer” ή κάτι σχετικό :p

posted at 17:32  ·   ·  ubuntu  logo  humor  greek  pr0n
Click to read and post comments

Dec 31, 2008

Το χάλι της Forthnet.

Ήμουν αρχικά πελάτης της Internet Helllas. Αυτή αγοράστηκε απο την Forthnet και μεταφέρθηκα αυτόματα εκεί. Απο τότε μέχρι σήμερα ήμουν πελάτης της Forthnet.

Πλήρωνα με πιστωτική κάρτα. Κάθε μήνα “τράβαγαν” τα χρήματα αυτόματα και όλα μια χαρά. Μέχρι που στις 29/12 ώρα 15:00 πέφτει η σύνδεσή μου και στα logs του modem βλέπω προσπάθεις για login με λάθος username/password.

Επειδή η πιστωτική κάρτα που χρησιμοποιώ ανανεώθηκε πρόσφατα (άρα άλλαξε ημερομηνία λήξης και CVV) και χρειάστηκε να την ενημερώσω σε πολλές υπηρεσίες (hosting/paypal κλπ) πήγε το μυαλό μου οτι κάτι τέτοιο συμβαίνει και έτσι μίλησα με το τμήμα πωλήσεων της Forthnet.

Αυτό είχε συμβεί και στο παρελθόν. Σε απενεργοποιούν και δεν μπορείς να κάνεις login. Τότε είχα πάρει τηλέφωνο τους έδωσα τα νέα στοιχεία τις κάρτα και όλα καλά.

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

Στο τηλέφωνο μου λένε οτι υπάρχει ένα χρέος 7 τιμολόγια (7 μήνες δηλαδή). 2 τιμολόγια του 2005 (!?!) και τα υπόλοιπα του 2006! Όλα τα μεταγενέστερα τιμολόγια μέχρι σήμερα είναι πληρωμένα κανονικά! Κανένας δεν μπόρεσε να μου απαντήσει πώς προέκυψε αυτό το χρέος αφού πληρώνω με πιστωτική κάρτα. Στο τηλέφωνο μου λένε οτι δεν γίνεται να δώσω τα στοιχεία της κάρτας μου απο το τηλέφωνο για να πληρωθεί το χρέος (και να συνεχίσουν οι χρεώσεις) και πως πρέπει να πάω στο υποκατάστημα.

Στο υποκατάστημα (που πήγε η αδελφή μου) της λένε οτι μπορεί να πληρώσει μόνο τα τιμολόγια του 2006 και πως τα 2 τιμολόγια του 2005 δεν μπορούν να πληρωθούν γιατι δεν τα “δέχεται” το σύστημα τους. Πρέπει να πάω στην τράπεζα και να τους στείλω το αποδεικτικό κατάθεσης με fax (το σύστημά τους δέχεται αποδεικτικά κατάθεσης, αλλά όχι μετρητά? wtf?). Μιας και όλα αυτά γίνονται απόγευμα, αυτόματα το ξεμπλοκάρισμά μου πάει για την επόμενη ημέρα. Και όλα αυτά ενώ τους έχω εξηγήσει πολλές φορές οτι το internet το χρειάζομαι το συντομότερο δυνατόν για την δουλειά μου.

Την επόμενη ημέρα πάω στο υποκατάστημα και τους λέω:

  • Έχω το έρθει με μετρητά για χρέος που δεν ξερετε γιατί πρέπει να πληρώσω. Μπορώ να το πληρώσω εδώ?
  • Οχι, πρέπει να πάτε στην τράπεζα.
  • Ωραία, φέρτε μου έντυπο να καταργήσω την συνδρομή μου

Όπως και έκανα φυσικά.
Ούτε το ΙΚΑ και η Εφορία δεν είναι τόσο χάος.

Φυσικά θεώρησα αυτονόητο οτι αφού έχω γραμμή adsl απο τον ΟΤΕ και εξοπλισμό δικό μου θα μπορούσα να κάνω μια νέα σύνδεση μέσα σε λίγες ώρες. (username/password χρειαζόμουν μονο). Στα μαγαζιά που πήγα όμως μου είπαν οτι έχουν μονο πακέτα (που θέλουν 10-15 ημέρες) και για αυτό που ζητάω να πάρω τηλ. στον ISP που θέλω.

Παίρνω τηλέφωνο στην HOL και αφού τους εξηγώ την περίπτωσή μου, μου λέει οτι θέλει 7 ημέρες για να ενεργοποιηθεί. (Γιατί?)

Αφού απογοητεύομαι απο την HOL, πάω στην τελευταία επιλογή. Otenet. Και εκεί μου εξηγούν οτι θα κάνουν ότι μπορούν για να μου δώσουν τους κωδικούς το συντομότερο δυνατό. Έκανα την αίτηση απο το 134 στις 15:00 και στις 16:00 με πήραν τηλέφωνο στο κινητό (που δυστυχώς δεν το άκουσα και έτσι με πήραν την επόμενη ημέρα πρωί-πρωί ).

Η εταιρία απο την οποία περίμενα τα λιγότερα ήταν η πιο εξυπηρετική. Φυσικά δεν ασχολήθηκα καθόλου με Tellas και λοιπές εταιρίες επιπέδου Altec.

Πλέον είμαι πελάτης της Otent. Ελπίζω να μην το μετανιώσω. Για να δούμε….

Πάντως το σκηνικό των τηλεπικοινωνιών στην Ελλάδα είναι πολύ απογοητευτικό.

Σκέφτομαι τι θα είχα πάθει αν είχα βάλει και Forthnet Double Play :p

Click to read and post comments

Dec 27, 2008

Αγαπημένα παιδικά

Είμαι γεννημένος το 1980. Ορισμένα παλιά παιδικά και σειρές της εποχής εκείνης έχουν μια ιδιαίτερη θέση στο μυαλό μου. Δυστυχώς για πολλά απο αυτά δεν ήξερα τους τίτλους τους. Σε κάποια θυμόμουν ένα κομμάτι απο την μελωδία, ένα απόσπασμα απο τους στίχους ή μερικές χαρακτηριστικές εικόνες.

Για τις περισσότερες σειρές αυτό δεν ίδιαίτερο πρόβλημα. Αν ρωτήσεις Ποιά είναι αυτή η σειρά που ο ήρωας είχε ένα άσπρο ρομποτάκι και πάλευε αγώνες τότε όλο και κάποιος θα βρεθεί να σου πεί “Ο Τζουμαρού”.
Ορισμένες σειρές όμως είναι πολύ λιγότερο γνωστές για κάποιο λόγο. Ελάχιστοι τις ηλικίας μου τα θυμούνται, και ακόμα λιγότεροι γνωρίζουν ποιές είναι.

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

Σάγκμα (νομίζω)

Κλασσική προσπάθεια έυρεσης:

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

Απο τα αγαπημένα μου. Γαλλική παραγωγή με τίτλο: “Le mondes engloutis”.
Ακολουθούν οι τίτλοι εισαγωγής. Απο ότι διαβάζω τραγουδάει Αννα Βίσση. Στα γιουτούμπια κυκλοφόρεί και το ελληνικό τραγούδι των πειρατών.

Σούπερ Μαρς

Κλασική ανάμνηση ώς:

Αυτό το παιδικό με το παιδάκι ρομπότ που πέταγε και πάλευε με διάφορους κακούς.

Δεν νομίζω οτι το έδειξε η τηλεόραση. Υπήρχε στο τοπικό video club.

Οι περιπέτειες του μικρού Κοάλα

(Μετάφραση απο “The adventures of the little koala”)

Κλασσική ανάμνηση οι στίχοι απο το τραγούδι:

Έπεσα, χτύπησα , ε και τι μ’αυτό. Οι φίλοι μου ας είν’ καλά.

Στο βίντεο υπάρχει η αγγλική εισαγωγή, αλλα η μελωδία είναι ίδια. Αρχίζει στο 1:57

Grendizer

Γνωστό και ώς:

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

Το λάτρευα μικρός αυτό το παιδικό. Δεν θυμάμαι αν το είχα δεί στην τηλεόραση ή σε VHS.

Blackstar

Δεν νομίζω οτι το έδειξε η τηλεόραση, αλλα το είχε το video club της γειτονιάς μου.
Γνωστό και ώς:

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

Μιας και αυτό το theme (σπαθί, πλανήτης. kicking ass) είναι ιδιαίτερα δημοφιλές στα παιδικά, αυτό ήταν αρκετά δύσκολο να το βρώ.

Ο Τζέηκ και το μυστήριο του χρυσού πιθήκου

Original τίτλος, “Tales of the gold monkey”. Ήμουνα κάπως μεγαλύτερος όταν έβλεπα αυτή την σειρά, αλλα δεν θυμάμαι ποιά χρονιά την έδειχνε η τηλεόραση. Θυμάμαι τον τίτλο της, και δεν ήταν ιδιαίτερα δύσκολο να την βρώ, αλλα την αναφέρω εδώ γιατί λίγοι θυμούνται αυτή την σειρά.

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

  1. Τζουμαρού (Plawres sanshiro)
  2. He-Man
  3. Thundercats
  4. Αλφ ο εξωγήινος (ALF)
  5. MacGyver
  6. Knight Rider
  7. Του κουτιού τα παραμύθια.
  8. Airwolf
posted at 15:59  ·   ·  tv  80s  cartoon  greek  greece
Click to read and post comments
Next → Page 1 of 4