Friday, 14 September 2012

Android + Scala + IntelliJ on Ubuntu For Dummies



DEPRECATED
Please use the instructions in this link instead:
https://github.com/pfn/android-sdk-plugin


So far I have realized that wikis matter! Nobody wants to repeat the same thing twice and the more easier the wiki the faster you get where you want.
The faster you get where you want the higher the chances you will win a new “customer” (developer) working on your technology than the other!
I like as many others, solving real engineering problems, like how to get meaningful results from a rating system or how to create a beautiful animation with the tools being provided or even how to model a protocol for interaction among my users.
All the other stuff, how to setup servers, get the libraries working etc. are boring!

One challenging feat is to get an android project work with scala!
So let me walk you through this tedious task!

Please note the versions for each tool I use.
For starters I am using the java version 1.7.0_09

http://stackoverflow.com/questions/10005907/eclipse-android-plugin-libncurses-so-5#_=_
Install these libraries in ubuntu if they are missing:
sudo apt-get install lib32ncurses5 lib32stdc++6

-Download and setup the android sdk. I have downloaded all versions from 1.5 (API 3) to 4.1 (API 16). I will not go into further details on this. There are many tutorials and the official guide is a good place to start: http://developer.android.com/sdk/index.html

We are going to need the android home path in an enviroment variable. So let's set a persistant enviroment variable for the current user

gedit ~/.pam_environment
and now append this: ANDROID_HOME=<the path of the android sdk>
e.g.
ANDROID_HOME=/home/pligor/android-sdk-linux

Now let's grab the sbt tool. We could have used this repository http://apt.typesafe.com/repo-deb-build-0002.deb and then do a sudo apt get update and sudo apt get sbt to get the sbt easily but this returns an older version.

We would rather have a manual installation of sbt.
Find the “Unix” section in the above link and download sbt-launch.jar and place it in ~/bin
Currently this is version 0.12.2
Then create an sbt file:
gedit ~/bin/sbt

write this line inside:

java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"

and make script executable:
chmod u+x ~/bin/sbt

For github templates you need the giter8 tool. So execute:
curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
and then execute:
cs n8han/giter8

Now I use the g8 to get an android app template from jberkel:
g8 jberkel/android-app

There are some questions for you to setup. Currently I leave everything to default.
Which means:
Scala version: 2.9.2
If you feel more adventurous try the (non-stable) scala version 2.10.0-RC1 which is a little faster
Android API: 10 (2.3.3)
scalatest_version: 1.8.
Set useProguard to true.
Android devices do not have scala library inside and including in the package will make the .apk too large!
Proguard will only keep these parts of the library that you will use ;)

Before you run sbt:
We need to make an adjustment for the currently compatible sbt with the android-plugin.
Go inside the folder of the new android application e.g.
cd my-android-project/
and execute:
gedit project/build.properties
and insert this line:
sbt.version=0.12.3

Below at the command android:package-debug there were some warnings like:
trouble processing: bad class file magic (cafebabe) or version (0033.0000)
...while parsing my/android/project/R$id.class

That is why we follow this:
Android does not work with java bytecode of java 7 so you will need to work with java 6.
So you will need to add some configuration to the autogenerated Build.scala file of sbt:
gedit project/Build.scala

and inside there place at the beginning of settings inside the Seq( ) the line:
javacOptions ++= Seq("-source", "1.6", "-target", "1.6"),
scalacOptions ++= Seq("-deprecation", "-unchecked"),
and inside the proguardSettings insert after “useProguard in Android := true” this statement:
proguardOption in Android :=
      """-keep class scala.Function1
        |
        |-keep class android.bluetooth.BluetoothDevice {
        | *** fetchUuidsWithSdp(...);
        | *** getUuids(...);
        |}
      """.stripMargin

You also need to change the plugins.sbt file:
gedit project/plugins.sbt

https://github.com/mpeltonen/sbt-idea
and replace contents with these lines:
resolvers += Resolver.url("scalasbt releases", new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
 
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0") 
 
addSbtPlugin("org.scala-sbt" % "sbt-android-plugin" % "0.6.2")
 
remember each .sbt files seperates each statement by an extra empty line

Inside the same folder execute:
sbt 'gen-idea no-classifiers' compile

and then go to the sbt interactive mode console:
sbt

Inside the console execute:
android:package-debug

Now you can try to start an android emulator: android:emulator-start <my_avd>  # use <tab> to get a list of avds
e.g.
android:emulator-start android2_1

after the emulator is fully started execute the android app like that:
android:start-emulator

Or you can try using a real device which is usually better since it is faster and nicer than an emulator
android:start-device

You must see the hello world application :)

Now a few days or a few week pass full of coding...

Finally you have something ready and you want to upload it on the market [http://play.google.com]

First inside sbt execute:
android:package-release

Yeah I think you got it right. This will create an .apk file inside target folder.

This file need a little bit processing before uploading on google play.

I omit referring how to create your own unique keystore file because there are many other tutorials who cover that and it is an one time thing!

First signing with jarsigner:

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore <keystore file path> <apk file path> <your alias>

this will prompt you for the keystore password and the keypass.

the above command changes the .apk file itself and does not generate a new file. You can verify that with this command:

jarsigner -verify <apk file path>


Then you need to zipalign it:
~/android-sdk-linux/tools/zipalign -v 4 <apk path> <new aligned apk path>

This apk is now ready to be uploaded out in the wild !!

Note a few facts:
You must not write android version name and android version code as arguments inside AndroidManifest.xml
Rather you set these values inside Build.scala:
android:versionCode inside xml corresponds to -> versionCode attribute of Build.scala
same way android:versionName -> version

Now get out there and create a mobile application who offers real value ..or fun!
Author: George Pligor

Wednesday, 21 December 2011

Opensource: Μία καλύτερη κοινωνία


Στον κόσμο των υπολογιστών είναι όλα ψηφιακά, όλα ευμετάβλητα και τα πάντα γίνονται ευκολότερα απ' ότι στην πραγματικότητα. Αν θα θέλατε να “αντιγράψετε” ένα μπουκάλι νερό ή ένα ρολόι ή γενικώς οποιοδήποτε άλλο αντικείμενο θα έπρεπε να μπείτε σε μια διαδικασία που θα περιελάμβανε αρκετούς ανθρώπους ή στην καλύτερη περίπτωση πολλά ακριβά εργοστασιακά μηχανήματα. Αυτό συνεπάγεται αμέσως – αμέσως πως εσείς ο ίδιος δεν μπορείτε να είστε δημιουργός ενός αντικειμένου ή δεν μπορείτε να συμβάλλετε στην δημιουργία του εκτός και αν καταφέρετε να αποκτήσετε την συγκεκριμένη θέση εργασίας στην συγκεκριμένη εταιρεία όπου κατασκευάζεται αυτό. Στον ψηφιακό κόσμο αυτό είναι πολύ εύκολο. Μπορείτε να δημιουργήσετε και να επηρεάσετε ψηφιακά αντικείμενα, κοινώς εφαρμογές / προγράμματα όποτε και όπως εσείς θέλετε, απλά γράφοντας κώδικα ή βρίσκοντας άλλου είδους interfaces για να πείτε στον υπολογιστή αυτό ακριβώς που θέλετε να κάνει.


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


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


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


Υπάρχει μια φράση που συντομογραφείτε ως DRY: DON'T REPEAT YOURSELF.
Οτιδήποτε λοιπόν μπορούμε να τυποποιήσουμε, σε έναν Η/Υ ή σε ένα μηχάνημα θα ήταν χρήσιμο να μην επαναληφθεί ξανά από κανέναν άλλο άνθρωπο. Αν συνέβαινε αυτό, το οποίο συμβαίνει σήμερα παντού γύρω μας, τότε μιλάμε για μια ανούσια σπατάλη χρόνου και εκμετάλλευση της ζωής ενός πλάσματος με συναισθήματα και με ανώτερες δυνατότητες όπως είναι ο άνθρωπος. Κρατήστε αυτή την αρχή υπόψη σας σε κάθε επόμενο βήμα.


Υπάρχουν δύο βασικοί παράγοντες: το εργαλείο για να φτιάξεις ένα σωλήνα βρίσκεται στο συγκεκριμένο εργοστάσιο, ενώ το εργαλείο για να φτιάξεις κάτι στο ψηφιακό κόσμο ονομάζεται Η/Υ και σήμερα είναι πανταχού παρόν. Δεύτερον η ανταλλαγή γνώσης μέσω internet είναι πολύ απλή σε software καθώς απλά χρειάζεται να ανεβάσεις τον κώδικα ή το τελικό πρόγραμμα online, ενώ αντίστοιχα για να φτιάξεις ένα ζευγάρι γυαλιά πρέπει να επεξηγήσεις αναλυτικά τη διαδικασία παρασκευής είτε με κείμενο είτε με βίντεος κτλ.


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


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


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


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


Άλλο ερώτημα: Αν σταματήσω να ανεβάζω τις δημιουργίες μου online, θα σταματήσει να λειτουργεί το ελεύθερο λογισμικό? Η απάντηση είναι Ναι! Προφανώς δεν θα σταματήσει γενικότερα αλλά όλοι αυτοί που θα επηρεάζονταν από το λογισμικό σου και θα έχτιζαν πάνω σε αυτό, δεν θα το κάνουν ποτέ εκτός αν το μοιραστείς μαζί τους.
Το opensource είναι ένα από τα πράγματα που ΔΕΝ ερμηνεύονται σε χρήματα. Ενδιαφέρον δεν νομίζετε? Δεν μπορώ να σκεφτώ κάτι άλλο αυτή τη στιγμή που να μην επιδέχεται αναγωγή σε κάποιο χρηματικό ποσό.
Συνεπώς η έννοια εκμετάλλευση, από την κακή όψη του νομίσματος, δεν είναι δυνατόν να εφαρμοστεί. Το να δώσεις σε κάποιον ελεύθερο λογισμικό, δεν μπορεί να το πραγματικά να το κάνει τίποτα. Ακόμα και αν προσπαθήσει να κερδοσκοπήσει εις βάρος σου, πολυ σύντομα θα βρεθεί κάποιος που θα αποκαλύψει πως το “προιόν” υπάρχει ελεύθερο προς διάθεση.
Ο ζητιάνος ζητάει λεφτά.. δεν θα ζητήσει ποτέ opensource!
ΜΟΝΟ όσοι θέλουν να δημιουργήσουν θα ζητήσουν να έχουν τον κώδικα μιας opensource εφαρμογής ώστε να τον αναπτύξουν και να χτίσουν πάνω σε αυτό.


Το opensource ουσιαστικά καταργεί την έννοια του νομίσματος. Δεν αποδίδεις συγκεκριμένη αξία σε κάτι, μάλιστα αριθμητική, και μετά την ανταλλάσεις, αλλά δίνεις ελεύθερο το δημιουργήμα σου σε όλους και ορισμένοι από αυτούς θα το εξελίξουν και θα πρέπει με τη σειρά τους να το ανεβάσουν online.
Ναι! αυτό θα πρέπει να το κάνετε. Όπως ακριβώς στο τέλος του μήνα “αγχώνεστε” να πληρώσετε το λογαριασμό του ρεύματος και του τηλεφώνου, με τον ίδιο τρόπο θα πρέπει να αγχωθείτε να μοιραστείτε τις δημιουργίες σας με άλλους ανθρώπους ώστε να η αλυσίδα του opensource και τα εκπληκτικά έργα που αυτή παράγει να συνεχίζεται. Οι εφαρμογές στο opensource δεν ανήκουν σε μια συγκεκριμένη ομάδα ανθρώπων αλλά σε όλη την κοινότητα. Αν εσείς συμβάλλεται κατά το 0.001% ή αν συμβάλλεται το 10% δεν έχει καμία διαφορά. Κάθε συμβολή ενισχύει το δημιούργημα σε ένα νέο επίπεδο. Μπορεί αντίστοιχα σε ένα διαφορετικό project οι συμμετοχές να αντιστρέφονται.


Σε μια κοινωνία όμως που το χρήμα είναι (ακόμα) απαραίτητο για την επιβίωση θα θέλαμε να το εντάξουμε στην όλη διαδικασία. Η λογική είναι απλή, μην μοιραστείς το τελικό συνολικό project, αλλά μοιράσου μερικά από τα επιμέρους κομμάτια. Τα κομμάτια αυτά θα αναπτυχθούν από άλλους και εσύ μετά θα εκμεταλλευτείς τα νέα αυτά κομμάτια. Θα έχεις μια win – win κατάσταση.


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


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


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


Ας πάρουμε για παράδειγμα τον κώδικα με τον οποίο έχει κατασκευαστεί το taxis. Θα ήταν πολύ θεμιτό να είχαμε διαθέσιμο ολόκληρο τον κώδικα ώστε να γνωρίζουμε πως ακριβώς λειτουργεί, σε κάθε λεπτομέρεια, για να πούμε πως αρχίζει να υπάρχει διαφάνεια. Αλλά ο κώδικας δεν αρκεί από μόνος του. Ο κώδικας είναι μονάχα η διαδικασία. Κρατώντας από τη λέξη opensource μόνο το open θα θέλαμε να είναι ανοιχτά και διαθέσιμα και τα δεδομένα που υπάρχουν ή που συμπληρώνονται κάθε στιγμή, ζωντανά! Δηλαδή να είχαμε άμεση πρόσβαση να αναγνώσουμε την βάση δεδομένων, μιας και σήμερα όλα τα δεδομένα αποθηκεύονται σε βάσεις δεδομένων.


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


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


Κατ' αυτόν τον τρόπο η αμεσότητα του internet παρακάμπτει οποιουσδήποτε μεσάζοντες και ο καθενας θα είχε την δυνατότητα να ελέγξει ανά πάσα στιγμή μια υπηρεσία που τον αφορά.


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


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


Επιμέλεια: Γιώργος Πληγορόπουλος


Το άρθρο αυτό δεν γράφτηκε με σκοπό να τελειώσει εδώ. Συνεχίζεται και εξελίσσεται!
Οποιαδήποτε κριτική είναι θεμιτή και βοηθάει σε τεράστιο βαθμό (-:

Sunday, 4 December 2011

TEDxAthens 2011 Impact 'n' Feedback

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

First things first. Πως κατάφερα να βρεθώ στην εκδήλωση του TEDxAthens ? Ο παρουσιαστής, ο Θοδωρής Αναγνωστόπουλος, είπε πως για να είμαστε εκεί θα πρέπει να έχουμε είτε καλό βιογραφικό, είτε καλές γνωριμίες. Στη συγκεκριμένη περίπτωση γνωριμίες δεν υπήρχαν, και το βιογραφικό μου αν και αρκετά καλοδουλεμένο από τον καιρό που αναζητούσα εργασία, δεν πρέπει να ήταν κάτι το συνταρακτικό σε σχέση με άλλους. Αυτό που είχα όμως ήταν επιμονή. Διότι ο κόσμος, η γραφειοκρατία, η πολιτεία, η κοινωνία αν θέλετε με γνωρίζει ως Γιώργο Πληγορόπουλο. Ο Γιώργος Πληγορόπουλος never made it! Δεν τον κάλεσαν και δυστυχώς δεν πήγε στην εκδήλωση. O George Pligor από την άλλη πλευρά ή πιο απλά pligor, που είναι και το username που χρησιμοποιώ τυπικά σε ολόκληρο το internet είχε πρόσκληση! Με άλλα λόγια η δεύτερη αίτησή μου, μια ελαφρώς διαφορετική παρουσίαση του προφίλ μου, όπως καλή ώρα εξηγούσε στην παρουσίαση του ο Rory Sutherland, έγινε δεκτή!

Σε ένα event ανάλογο του TEDxAthens για να περάσεις όσο το δυνατόν καλύτερα, μιας και μιλάμε για ολοήμερο event, δεν πηγαίνεις μόνος σου! Στην δική μου περίπτωση τρεις φίλοι που ενδιαφέρονταν εξίσου να ακολουθήσουν, αλλά για να θυμηθώ, ο ένας είναι στην Γερμανία, ο άλλος στην Ελβετία, και ο τρίτος στα Χανιά! Οπότε δυστυχώς βρέθηκα εκεί χωρίς κάποιον γνωστό. Αλλά αν ήμουν ο μόνος θα έλεγε κανείς, πως οκ είμαι η εξαίρεση. Ούτε το αντίθετο να φανταστείτε, όντως όσοι είχαμε έρθει μόνοι μας είμασταν η μειοψηφία, αλλά ακόμα και αυτή η μειοψηφία με στεναχωρεί και είναι διττός ο λόγος:
  1. Ακόμα και αυτοί οι λίγοι άντρες και γυναίκες που ήρθαν μόνοι τους, μπορεί και να έτυχε οι γνωστοί/φίλοι τους να μην μπορούν να παρευρεθούν εκείνη τη μέρα ή να μην τους δέχτηκαν και αυτό έχει καλώς. Όμως φοβάμαι πως αυτοί οι άνθρωποι δεν βρίσκονται μέσα σε κάποιον κοινωνικό κύκλο που να ασπάζεται το πάθους τους για νέες ιδέες όπως είναι τα ted talks. Ακόμα και εγώ που έχω μόνο τρεις γνωστούς/φίλους να τα παρακολουθούν αισθάνομαι αποτυχία να μην μπορώ να μεταδώσω το πάθος μου σε άλλους συνομίληκους μου. Και όχι μόνο για τα ted talks αλλά ως ένα μεγαλύτερο ενδιαφέρον για δουλειά, γιατί δουλειά χρειάζεται η αλλαγή (προσαρμογή αν θέλετε) και όχι μόνο διασκέδαση.
  2. Δεύτερον, event όπως το TEDxAthens, δεν είναι ένα cinema που απλώς πηγαίνεις και παρακολουθείς μια παράσταση, θα πρέπει ενεργά κάποιος να βοηθήσει τους ανθρώπους να γνωριστούν μεταξύ τους, και ας μην ήταν 45 ευρώ η συμμετοχή, ας ήταν 50. Και όχι μόνο τους ανθρώπους που ήρθαν μόνοι τους, αλλά και τις υπόλοιπες παρέες ανθρώπων. Είναι το ίδιο πρόβλημα που αντιμετωπίζει κανείς όταν ετοιμάζει ένα πάρτυ σε ένα σπίτι και ας είναι μόνο 20-30 άτομα! Εάν δεν ενεργήσει ο οικοδεσπότης με απλούς ή άλλους πιο έξυπνους τρόπους, πχ μέσα από ένα παιχνίδι, για να γνωριστούν τα άτομα μεταξύ τους τότε το πάρτυ δεν θα έχει την δυναμική που θα μπορούσε να έχει. Και εδώ δεν μιλάμε απλά για ένα πάρτυ που οι καλεσμένοι μπορεί να είναι άσχετοι μεταξύ τους αλλά για ανθρώπους που οι περισσότεροι έχουν δει εκατοντάδες TED videos και θα βρουν σίγουρα ένα κοινό θέμα, ένα κοινό πάθος με τους υπόλοιπους TEDsters!

    Με άλλα λόγια η κοινωνική δικτύωση που ο φίλτατος παρουσιάστης ζήτησε δεν επιτεύχθηκε όσο θα μπορούσε. Επιμένω στην κοινωνική δικτύωση διότι έχω κάνει ήδη ένα πείραμα προς την αντίθετη κατεύθυνση και θα εξηγήσω αμέσως τι εννοώ. Μιας και το έγραφε το καρτελάκι του TEDxAthens οι διοργανωτές ήδη γνωρίζουν πως ο George Pligor είναι Ηλεκτρονικός Μηχανικός & Μηχανικός Η/Υ και εργάζεται στην Διεύθυνση Διαχείρισης Νησιών της ΔΕΗ. Με μια φράση, απλά μηχανογραφώ τον τομέα. Προσπαθώ να εισάγω όσο το δυνατόν περισσότερες νέες τεχνολογίες στην κατασκευή μιας βάσης δεδομένων που ακολουθείται από ένα Web Application το οποίο βασίζεται στο Yii framework. Αναλαμβάνοντας αυτό το εγχείρημα, με την πάροδο των μηνών, κατανοώ όλο και περισσότερο πως μπορώ να επιτύχω πολύ λίγα πράγματα μόνος μου. Ακόμα και η πληροφορική, η πλέον ευέλικτη επιστήμη εφόσον όλα γίνονται από έναν Η/Υ, έχει τεχνικές δυσκολίες που σε απομακρύνουν από τον στόχο. Δεν έχει σημασία πόσο καλός ή κακός επιστήμονας πληροφορικής είναι κάποιος. Αν αργεί να εκτελέσει μια εργασία τότε μπορεί το project που υλοποίησα το τελευταίο εξάμηνο να το έβγαζε σε ένα χρόνο, αν όμως ήταν “διάνοια” και το έβγαζε σε τρεις ή δύο μήνες αυτό είναι καλό? Όχι, διότι ακόμα και αυτό είναι πάρα πολύ αργό, μπορεί η ίδια “διάνοια” να πετύχει πολλά περισσότερα πράγματα αν καταφέρει να συνυπάρξει και να συνεργαστεί με άλλους ανθρώπους.
    Οκ προσωπικά μπορεί να μην είχα έρθει με την καλύτερη διάθεση, δυστυχώς για προσωπικούς λόγους, ώστε να κάνω νέες γνωριμίες αλλά κάποιοι ίσως να με θυμάστε από την μπλούζα PLIGOR εικόνα έκρηξης και Disruptive από κάτω αλλά ακόμα περισσότεροι θα με θυμάστε όταν προσπαθούσα να κουμπώσω την τσάντα στον δεύτερο όροφο και το κρασί έγινε σμπαράλια στο πάτωμα. Δεν χειροκροτήσατε οπότε δεν σας άρεσε αυτό το θέαμα ε? Ευχαριστώ τον διοργανωτή που κάλεσε αμέσως να καθαρίσουν. Και εντελώς καλοπροαίρετα καθώς δεν θυμάμαι ονόματα αλλα πρόσωπα, επειδή θυμίζει λίγο τον Jon Voight θα τον αναφέρω έτσι στο υπόλοιπο κείμενο. Εμένα θα μου άρεσε να μοιάζω με τον Jon Voight, ελπίζω να μην παρεξηγηθεί από αυτό το remark :)

Πριν αναφερθώ στις παρουσιάσεις εντός της αίθουσας, ας πάμε λιγο εκτός στον χώρο των διαλειμμάτων. Εκπληκτικό, πολλά συγχαρητήρια στους διοργανωτές για τους χορηγούς που κατάφεραν να συγκεντρώσουν. Ήταν αναμενόμενο πως θα υπάρχει φαγητό όπως και σε όλα τα events αλλά δεν περίμενα όλα αυτά τα gourmet. Όλα τα καναπεδάκια ήταν υπέροχα. Το γεγονός ότι υπήρχαν σερβιτόροι που κινούνταν στο χώρο να τα μοιράζουν ήταν επίσης πολύ ωραία ιδέα. Στον πάνω όροφο που μπορούσες να φτιάξεις τα δικά σου καναπεδάκια, κορυφαίο! Και οι γεύσεις συνεχίζονται! Τα παγωτά, πολύ νόστιμα και δροσιστικά. Δεν θα περάσεις όμως να πάρεις και ένα κρασάκι? Ήταν ότι έπρεπε. Και συνεχίζουμε στο επόμενο διάλειμμα με τις σοκολάτες. Ε ρε κόλαση!! Και μετά πας και για ένα black label για να χαλαρώσεις ακόμα περισσότερο. Ας αφήσω την περιγραφή εδώ γιατί τα θυμάμαι και μου τρέχουν τα σάλια. Ήταν όμως όλα ωραίες γεύσεις, ειδικά για άτομα σαν εμένα που αρέσκονται σε περίεργες ή μαλλον πρωτότυπες και ποικίλες γεύσεις μπορώ να πω πως απόλαυσα ιδιαίτερα τα διαλείμματα!

Ας περάσουμε και στο αναγκαίο κακό: Χορηγοί που χρειαζόμαστε αλλα που στην πραγματικότητα δεν θα θέλαμε. Ο Γερμανός για παράδειγμα κάθονταν εκεί στη γωνία μόνος του, διότι το event ήταν για νέες ιδέες, για επιχειρηματικότητα, δεν είχε σχέση με το εμπόριο. Από την άλλη πλευρά τα multirama έφεραν να προωθήσουν τα βιντεοπαιχνίδια.... εντάξει τα παιδία παίζει που λέμε, λίγο βαβούρα μόνο κατά τα άλλα όλα καλά δεν ενόχλησαν ιδιαίτερα. Αυτό που χάρηκα όμως από την άλλη ήταν η παρουσία της τράπεζας και το γεγονός ότι κανείς δεν πλησίαζε. Οι τράπεζες είναι το πρόβλημα, οι νέες ιδέες που χρειαζόμαστε είναι για να μην επαναλάβουμε τα σφάλματα του παρελθόντος. Ανάμεσα σε σκεπτόμενους ανθρώπους μια τράπεζα θα μένει πάντα στην άκρη. Όσο όμως ο κόσμος παρακινείται ευκολότερα από το χρήμα όσο από οτιδήποτε άλλο η τράπεζα ξέρει πως κάποιος που θα επιχειρήσει, θα την αναζητήσει. Τουλάχιστον υπάρχει η ικανοποίηση πως σε αυτό το event, αυτή τη μέρα, η τράπεζα έφαγε μεγάλο φτύσιμο!

Αφού σας άνοιξα την όρεξη λοιπόν με όλα τα καλούδια που πρόσφερε το event ας περάσουμε και εντός της αίθουσας. Συνήθως αφού δω ενα ted talk, είτε μου αρέσει είτε όχι, είτε διαφωνώ είτε συμφωνώ, το ανεβάζω στο internet, σε κάποιο social network ή όπου αλλου και το συνοδεύω με ένα σχόλιο που μπορεί να είναι από μια λέξη μέχρι μία παράγραφο. Θέλοντας να αφήσω όμως αυτό το άρθρο σε αυτό το παραδοσιακό κλασσικό μοτίβο του singlemedia (αντίθετο του multimedia), δηλαδή μόνο κείμενο, θα κάνω λίγες παρατηρήσεις σε όσα είδαμε. Ανοίγω λοιπόν το βιβλιαράκι που βρήκα μέσα στη τσάντα και ας ξεφυλλίσω τους ομιλήτες. Σημείωστε πως θα παραλείψω τα μουσικά δρώμενα μιας και η σχέση μου με την μουσική είναι μια σχέση ναι μεν αγάπης, που ποτέ όμως δεν έκατσα να αναλύσω ή να καταλάβω, άρα δεν έχει feedback για τους μουσικούς sorry. Εντούτοις απόλαυσα όλα αυτά τα μουσικά διαλείμματα ανάμεσα στις ομιλίες!

Μου άρεσε η παρουσίαση του Juliano Tubino, ήταν πολύ ορθά δομημένη αλλά επειδή έχει εκπροσωπήσει την Microsoft θα ήθελα να μοιραστώ με όλους τους προγραμματιστές και χρήστες αυτό: Ακόμα και αν σας δίνει δωρεάν τα προγράμματά της ή τα πακέτα ανάπτυξης η microsoft δεν τα χρειάζεστε, υπάρχουν άλλα frameworks, άλλες γλώσσες προγραμματισμού που λειτουργούν σκεπτόμενα μόνο τον ίδιο το τελικό αποδέκτη και χρήστη αυτών και όχι πως θα τον εγκλωβίσουν να εξαρτάται από τα προιόντα της microsoft. Μου πήρε αρκετό καιρό να καταλάβω πως η microsoft έχει κατασκευάσει αρχιτεκτονικά με πολύ κομψο τρόπο ένα περιβάλλον που εγκλωβίζει και σε κάνει να εξαρτάσαι από τα προιόντα της Microsoft. Δεν μπορούμε να κάνουμε κάτι γι' αυτό παρά μόνο να ζητήσουμε να αλλάξει αυτή την νοοτροπία που χαρακτηρίζεται πλέον ανώριμη!

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

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

Το black forest ήταν εντυπωσιακό. Λίγο πριν το πρώτο διάλειμμα αν θυμάμαι καλά, μας άνοιξαν για τα καλά την όρεξη! Συγχαρητήρια στη Γεωργιάννα Χιλιαδάκη και στο Νίκο Ρούσσο. Με έψησαν πολύ για μια επίσκεψη στο funky gourmet που θα κρατήσω για καμία special περίπτωση.

Only mathematicians really prove things είχα διαβάσει κάπου. Οπότε δεν μπορώ να πω κάτι άλλο παρά τα θερμά συγχαρητήρια στον Κωνσταντίνο Δασκαλάκη που νόμιζα ο αφελής πως έχει μόνο ένα θεώρημα αλλά όχι έχει δύο θεωρήματα που αποδεικνύουν πως η πολυπλοκότητα του συστήματος παίζει πολύ βασικό ρόλο. Το απέδειξε μαθηματικώς οπότε δεν μπορεί κανείς να του πει τίποτα αλλά φοβάμαι πως η αστάθεια στην περίπτωση του χρηματοπιστωτικού συστήματος είναι θεμιτή. Νομίζετε αλήθεια πως θα τους άρεσε να μπορούσαμε να λύσουμε το πρόβλημα και να φέρουμε το σύστημα σε σταθερή κατάσταση ακόμα και προσωρινά, ακόμα και αν ήταν δυνατό?!

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

Εντυπωσιακή η Άννα Ευαγγελινού και ο Chris Colwell. Ο Chris Colwell έβγαλε έναν εκπληκτικό λογο, που αν και δουλεμένος από νωρίτερα ήταν πολύ ισχυρός. Αυτά που είπε είναι σωστά και είναι η αλήθεια, αλλά η αλήθεια έχει την γνωστή συνήθεια να εκνευρίζει τους ανθρώπους. Εκμεταλλεύτηκε το γεγονός πως είναι ανάπηρος, διότι μπορεί να σου τα πει έξω από τα δόντια, να σου πει την ωμή αλήθεια στα μούτρα σου και όσο και αν σε ενοχλεί δεν μπορείς να γυρίσεις να του τη πεις επειδή η αλήθεια σου έκατσε βαριά στο στομάχι. Γι' αυτό την επόμενη φορά που κάποιος θα σου κάνει τη χάρη, κατ' ουσίαν, να σου πει την αλήθεια πριν τον αμφισβητήσεις σκέψου μήπως ο εκνευρισμός σου οφείλεται σε αυτή την αντίφαση, του πόσο ωραία είχες μέσα στο μυαλό σου τα πράγματα και πόσο απέχουν από την αλήθεια. Αν το καταλάβεις αυτό τότε είναι και αυτό μια επένδυση στο μέλλον. Στεναχωριέμαι, εκνευρίζομαι και αισθάνομαι ανόητος τώρα, αλλά γνωρίζοντας την αλήθεια έχω μια καλύτερη γνώση των πραγμάτων και μπορώ να πάρω καλύτερες αποφάσεις. Αν ο στόχος είναι να είμαι ευτυχισμένος για παράδειγμα, τώρα έχω περισσότερες ελπίδες να το επιτύχω!

Το πρώτο από τα παιδιά των παρουσιάσεων, ο Ricardo Sousa φαίνεται να τα πηγαίνει μια χαρα, και έχει σωστές σκέψεις στο μυαλό του. Είναι μικρός ακόμα, μόλις 19 χρονών και ίσως ανακαλύψει και άλλα ενδιαφέροντα στην πορεία, ίσως να μην ασχοληθεί μόνο με την εκπαίδευση. Φαίνεται να είναι καλός ομιλητής και δεν ξέρω ίσως να αποδειχθεί και καλός αρχιτέκτονας, διότι οι αλλαγές στην παιδεία, δεν είναι απλά αλλαγές, εδώ χρειάζεται επανασχεδιασμός από λευκί κόλλα!

Ο Glenn Lowry είχες πολύ ωραίες παραστάσεις από ζωντανά και διαδραστικά θέματα σε μουσεία. Μου άρεσε αυτό πραγματικά, ταιριάζει με ένα άλλο είδος τέχνης που υποστηρίζω το οποίο είναι το data visualization. Στο data visualization έχουμε δεδομένα τα οποία όμως δεν γεννιούνται από το πουθενά, αλλα προκύπτουν από ενέργειες ανθρώπων και εμείς διαλέγουμε να τα αναπαραστήσουμε με το δικό μας τρόπο οπτικά. Το ίδιο είναι και αυτό που μας σύστησε ο Lowry, στο μουσείο ο άνθρωπος συμμετέχει άμεσα στο έργο είτε κάνοντας μια ενέργεια, είτε απλά δίνοντας το ύψος του στον τοίχο!

Αν δεν κάνω λάθος, από τις πιο πετυχημένες επιχειρηματικές ιδέες ήταν η ιστορία της σταδιοδρομίας του Χάρη Τσέβη. Μας έδειξε πως πρέπει να δώσεις, να παρουσιάσεις πραγματική δουλειά, να έχεις έτοιμο ένα demo, να μη φοβηθείς να μοιραστείς με τον κόσμο τη δουλειά σου και αν η ιδέα σου είναι πρωτοπορίακή οι πελάτες θα βρεθούν και θα επενδύσουν πάνω σου. Εξάλλου ένας άνθρωπος με καλές ιδέες κοστίζει λίγο και χρησιμεύει πολύ. Και αν δεν πετύχεις νομίζω είναι το γνωστό μοτίβο με όσους ρισκάρουν: Retreat regroup kai strike again!

O Hasan Elahi πάει ενάντια στο κατεστημένο (όχι δεν είναι αυτό το πρωτότυπο) για να τους θυμίσει την αξία της πληροφορίας. Έχει δίκαιο, ο όγκος πληροφοριών αυξάνεται με ταχύτερο ρυθμό απ' όσο μπορούμε να τον επεξεργαστούμε και να τον αναλύσουμε. Πρέπει να βιαστούμε, οι πληροφορίες αυτές δεν καταγράφονται απλά για να καταλήγουν στα σκουπίδια. Οι πληροφορίες είναι η ζωή μας, ένα έυκολο να καταγραφεί αποτύπωμα του ιχνους που αφήνουμε καθημερινά από όλες τις δραστηριότητες που περιλαμβάνουν ηλεκτρονικές συσκευές και αυτό αυξάνεται όλο και περισσότερο. Αν τις εκμεταλλευτούμε με έξυπνους τρόπους οι πληροφορίες αυτές μπορούν να μας δώσουν εικόνες που δεν μπορούσαμε ποτέ να αντιληφθούμε και από αυτές να εξάγουμε συμπεράσματα που θα μας βοηθήσουν να γίνουμε καλύτεροι.

Ο Clemens Oellinger Guptara το δεύτερο παιδί των ομιλιών και ακόμα μικρότερος σε ηλικία 16 ετών η αλήθεια είναι πως δεν του φερθήκαμε πολύ σωστά ως κοινό. Θα έπρεπε να χαμογελάσουμε λίγο περισσότερο ώστε να του δώσουμε το θάρρος να τα πει όπως ήθελε να τα πει και όχι με αυτό το αγχός που τον κατέβαλλε. Οι γενικότερες θεωρήσεις του για την ζωή είναι ωραίες και ελπίζω να τον δω στα επόμενα χρόνια να της εφαρμόζει σε μια ενασχόληση που θα βρει να αγαπάει!

Ο Joe Trippi καλά τα λέει, αλλά αυτό που αναρωτιέμαι είναι αν ακούει ή αν καταλαβαίνει ο ίδιος αυτά που λέει! Μας παρουσιάσε τις νέες τεχνολογίες και πως μπορούν δημοκρατικά οι άνθρωποι μέσω του διαδικτύου να παρέμβουν και εμπλακούν και πάλι με την κοινωνία στην οποία ανήκουν. Τα δικά του λεγόμενα τα ερμηνέυω πως η τρέχουσα πολιτική είναι παρωχημένη και πως τίθεται ως επιτακτική ανάγκη να προσαρμοστεί με τις σύγχρονες δομές της κοινωνίας, έτσι? Θα ήθελα να το πάω ένα βήμα παραπέρα και να πω πως η πολιτική ως η έννοια της εξουσίας που δίνεται σε λίγους ανθρώπους είναι ανώριμη ως έννοια και θα πρέπει να απαγκιστρωθούμε από αυτήν σιγα σιγά!

Matina Stevis. Ήρθε να μας πει πως αξίζει να ασχοληθούμε με το εμπόριο χρήματος στο συνάλλαγμα. Αξίζει?! Ήρθε να μας πει πως μπορούμε να επηρεάσουμε πραγματικά εμείς την παγκόσμια αγορά και να καταλάβουμε τι συμβαίνει. Συγνώμη αλλά είμαι ο μόνος που αισθάνθηκε ότι τον πέρασαν για χάπατο?..

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

Κάποιος ομιλητής κατάφερε να ταιριάξει πολλές από τις τρέχουσες τάσεις της επιστήμης των Η/Υ μαζί και να μας παρουσιάσει τι θα γίνονταν αν αυτές εφαρμόζονταν και αυτός είναι ο Νικόλαος Μαυρίδης. Ο ομιλία του θυμίζει λιγο το βιβλίο “1984”, μας δίνει ένα παράθυρο στο μέλλον. Πολύ σωστά στο τέλος έριξε το μπαλάκι σε εμάς τους θεατές και μας ρώτησε αν θα θέλαμε να ζούμε σε ένα κόσμο με συλλογικές ευφυείς οντότητες. Μπορούμε όμως να απαντήσουμε? Είναι πολύ δύσκολο να απαντήσει ο ίδιος είτε εμείς. Διότι αν όντως χρειαστούμε αυτές τις συλλογικές ευφυείς οντότητες αυτό θα σημαίνει πως υπήρχαν δυνάμεις που μας έσπρωξαν προς τα εκεί. Αυτό μπορεί να γίνει διά της βίας ή απλά ειρηνικά να είναι σαν μια νέα μόδα, αλλά όταν θα φτάσουμε εκεί θα έχουμε αλλοτριωθεί τόσο πολύ από γενιά σε γενιά που δεν μπορούμε να προβλέψουμε από τώρα το σκεπτικό των απογόνων μας. Μπορεί η δική μας απάντηση αυτή τη στιγμή να είναι όχι, αλλά το δικό τους ναι αν όντως απαντήσουν έτσι θα έχει προκύψει λόγω μιας τελείως διαφορετική κουλτούρας και μόρφωσης που μεγάλωσαν αυτοί οι απόγονοι μας που δεν θα είναι συγκρίσιμο. Με απλούστερα λόγια ναι πιστεύω προς εφαρμοστεί κάποτε το μοντέλο της επιστημονικής φαντασίας του Νικόλαου Μαυρίδη αλλά θα γίνει υπό μια κοινωνία η οποία θα έχει αλλοτριωθεί, δεν ορίζω καλό ή κακό, θα είναι απλά διαφορετική, κατά πάσα πιθανότητα ούτε η γενιά των παιδιών μας, ίσως η επόμενη.

Η τέχνη του cinema σίγουρα έχει να κάνει με ανθρώπινα συναισθήματα και υπερβατικά βιώματα. Τι να πω ο Sebastian Lindstrom έχει δίκαιο, όπως έχω διαπιστώσει και ο ίδιος από δικές μου εμπειρίες, αν δεν βιώσεις από κοντά μια κατάσταση, αν δεν το ζήσεις με όλες σου τις αισθήσεις δεν μπορείς να το νιώσεις πραγματικά και να το καταλάβεις. Δίνω και γω με τη σειρά μου το go ahead για την guerilla!

Last but not least o Matt Webb είναι όπως ακριβώς γράφει το βιβλιαράκι, ένας ταλαντούχος ομιλητής. Πολύ καλός! Δεν κόλλησε καθόλου όταν του ζήτησαν να μας ξαναπει τις πρώτες διαφάνειες! Το 'χει, τον παραδέχομαι! Και μετά την διασκέδαση μας ζήτησε να δώσουμε 100 ώρες από τη ζωή μας σε κάτι ξεχωριστό. Αν πάρουμε το δικό του συμπέρασμα λίγο διαφορετικά, ότι δηλαδή οι 100 ώρες να είναι μέρος ενός συλλογικού έργου, όπως καλή ώρα ανέφερε ο ίδιος την wikipedia τότε θα έχουμε λειτουργήσει σαν ένα πρώιμο είδος συλλογικής νοημοσύνης που οραματίζεται ο Νικόλαος Μαυρίδης και θα έχουμε πετύχει κάτι σπουδαίο. Αρκεί μετά τις 100 ώρες να μην το ρίξουμε στην τεμπελιά ε? :)

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

Και κάπου εδώ με ένα κείμενο που λογικά γεμίζει πάνω από πέντε κόλλες χαρτί τελείωνω με το άρθρο μου και σας αφήνω να πάτε να ξεκουραστείτε!

Επιμέλεια: Γιώργος Πληγορόπουλος

Saturday, 6 August 2011

Data Visualization - Ambiant Workshop 2011

Η πιο ανανεωμένη έκδοση του post βρίσκεται στο facebook note:
http://www.facebook.com/note.php?note_id=227490770622932

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


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

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



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

Αναφέρομαι στο data visualization ως μια μορφή τέχνης καθώς ο τρόπος με τον οποίο θα απεικονιστούν τα δεδομένα βασίζεται στην ανθρώπινη φαντασία. Σήμερα το data visualization το αναλαμβάνουν πληροφορικάριοι μόνο και μόνο επειδή έχουν την τεχνική γνώση να συνδέσουν την πληροφορία με την τελική εικόνα.
Πιστεύετε όμως πως εκάστοτε μηχανικός πληροφορικής που θα του ζητήθεί ή θα πάρει την πρωτοβουλία μόνος του να αναπαραστήσει τα δεδομένα με μια απεικόνιση χρησιμοποιεί εκείνη τη στιγμή τις τεχνικές του γνώσεις? Στην πραγματικότητα απλά χρησιμοποιεί τη φαντασία όπως οποιοσδήποτε άλλος άνθρωπος για το πως θα είναι το τελικό αποτέλεσμα. Δεν έχει τον απόλυτο έλεγχο στο τελικό αποτέλεσμα καθώς αυτό εξαρτάται από τι του δίνουμε ως είσοδο. Δηλαδή το εικαστικό μας έχει μια εξάρτηση από την πληροφορία. Γνωρίζουμε πως περίπου θα είναι αλλά δεν γνωρίζουμε πως ακριβώς θα είναι. Μάλιστα συνήθως φανταζόμαστε ποια θα είναι η αναπαράσταση σε μια μέση περίπτωση. Ακραίες περιπτώσεις στα δεδομένα μας όπου υπάρχει απόλυτη συμμετρία ή που όλα είναι ίσα μεταξύ τους ίσως να μας δώσει ένα μόνο σημείο ή να μας δώσει ένα επίπεδο, και να προκύψει κάτι τελείως flat και αδιάφορο, αλλά εξίσου αδιάφορα θα είναι και τα δεδομένα μας.

Όλα συνήθως αρχίζουν με μια ερώτηση: Ποια ήταν πραγματικά η δραστηριότητα του dropbox από όλους τους χρήστες για ένα ορισμένο χρονικό διάστημα ?? Φυσικά η δραστηριότητα θα χαρακτηρίζεται και από ορισμένα κριτήρια ώστε να δίνουμε συν ή πλην βαθμούς ανάλογα με τη δραστηριότητα που υπήρχε.

Αυτό που μας δίνεται από το ίδιο το dropbox είναι ένα αρχείο καταγραφών όπου γραμμή – γραμμή αναφέρονται με χρονολογική σειρά οι ενέργειες του κάθε χρήστη. Οι καταγραφές μοιάζουν κάπως έτσι:

  • In AmbiantWorkshop2011, Aris Bezas added 110720 and 2 more folders. 7/20/2011 8:50 PM
  • In AmbiantWorkshop2011, Stratos Kountouras renamed the folder ThaliaKotzampasi. 7/20/2011 1:17 PM
  • In AmbiantWorkshop2011, Manty Albani edited the file index_user_template_Greek_windows.txt. 7/20/2011 11:27 AM
  • In AmbiantWorkshop2011, Konstantinos Tiligadis deleted Test2.tmp and 2 more files. 7/20/2011 11:13 AM

Αν και εδώ είχαμε μόνο περίπου 400 γραμμές φανταστείτε πως δυνητικά θα είχαμε χιλιάδες καταγραφές. Αν θέλαμε να βρούμε κάτι πολύ συγκεκριμένο τότε σίγουρα ένα απλό search θα αρκούσε. Αν όμως θέλαμε την συνολική εικόνα των δεδομενών και τις συσχετίσεις με τους υπόλοιπους χρήστες?
Τότε θα έπρεπε να κάνουμε υπολογισμούς και να παρουσιάσουμε έναν επίσης δυσανάγνωστο πίνακα. Εδώ έχουμε χαρακτηριστικά μια περίπτωση όπου η οπτική αναπαράσταση των δεδομένων θα βοηθούσε.

Θα πάρουμε μια σχετικά απλή λύση: Ένα 3D γράφημα όπου με όροι και κοιλάδες θα φαίνεται η “αρνητική” ή “θετική” δραστηριότητα των χρηστών στην πορεία του χρόνου.

Απαραίτητο στοιχείο για την αναπαράσταση των δεδομένων είναι να έχουμε κάτι μετρήσιμο. Οι παραπάνω γραμμές που παράγονται από το dropbox θα γίνουν ένας πίνακας με δεδομένα. Εδώ θα έχουμε ένα τρισδιάστατο γράφημα με τρεις άξονες:
  1. Ο άξονας με τους χρήστες
  2. Ο άξονας του χρόνου
  3. και ο άξονας του μέτρου της δραστηριότητας εκείνη την χρονική στιγμή
Ο πίνακας των δεδομένων θα μοιάζει κάπως έτσι:


Στην πρώτη στήλη είναι η χρονική στιγμή. Η χρονική στιγμή εδώ είναι τα δευτερόλεπτα που έχουν παρέλθει από την εποχή EPOCH. Αλλά δεν χρειάζεται να μπούμε σε τεχνικές λεπτομέρειες, αρκεί να θυμάται κανείς πως ο χρόνος είναι εκφρασμένος σε δευτερόλεπτα. Στην δεύτερη στήλη έχουμε τον χρήστη, ενώ στην τρίτη και τελευταία στήλη την ενέργεια του χρήστη εκείνη την χρονική στιγμή.
Με άλλα λόγια απλοποιήσαμε την αναφορά του dropbox σε μια γραμμή με τρία(3) μετρήσιμα στοιχεία.

Τεχνικές λεπτομέρειες
Για τη δημιουργία του 3D γραφήματος μπορούμε να χρησιμοποιήσουμε τα εργαλεία mathematica και matlab ή οποιοδήποτε άλλο πρόγραμμα μπορεί να παράγει τρισδιάστατα γραφήματα. Στην προκειμένη περίπτωση χρησιμοποιήσαμε το Octave, μια open-source λύση που αποτελεί το δωρεάν παιδί της matlab. Έχει πλήρη υποστήριξη του matlab script απλά απουσιάζουν ορισμένες προχωρημένες δυνατότητες του matlab που ίσως χρειαστούν σε εξειδικευμένες περιπτώσεις.

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

Τώρα όσον αφορά τις δραστηριότητες, κάναμε μια απλή παρατήρηση στις γραμμές του dropbox και διαπιστώσαμε πως έχουμε τις εξής εννέα ενέργειες:
  1. added
  2. deleted
  3. edited
  4. invited
  5. joined
  6. left
  7. moved
  8. renamed
  9. restored

Εδώ εμφανίζεται και το δυναμικό της όλης υπόθεσης από την μεριά του δημιουργού του data visualization. Δίνοντας διαφορετική βαρύτητα, διαφορετικά βάρη σε κάθε ενέργεια θα προκύψουν διαφορετικά 3D γραφήματα που θα ανταποκρίνεται σε διαφορετικό πόρισμα το καθένα.

Επιπλέον για να το κάνουμε πιο θεαματικό το 3D γράφημα αυτό θα εξελίσσεται στο χρόνο, πάνω στον άξονα του χρόνου. Επιπλέον θα περιστρέψουμε την κάμερα κάτα 90 μοίρες πάνω στο ίδιο animation.

Αν θεωρήσουμε πως όλες οι ενέργειες είναι ισάξιες, δηλαδή added=1, deleted=1, edited=1 κτλ. τοτε προκύπτει το παρακάτω animation:
http://www.multiupload.com/V74CE8WDT4
Ενώ αν ορίσουμε διαφορετικά βάρη σε κάθε ενέργεια πχ. με το παρακάτω μοτίβο:
  • added: +1 γιατί μας αρέσει που προσθέτει
  • deleted: -2 γιατί δεν μας αρέσει καθόλου που αφαιρείς
  • edited: 0 διότι η επεξεργασία ήδη υπάρχοντων αρχείων μας αφήνει αδιάφορους
  • invited: +2 γιατί θέλουμε να μεγαλώσει η κοινότητα των χρηστών
  • joined: +10 γιατί χαιρόμαστε που είσαι και εσύ μέλος της παρέας
  • left: -10 γιατί μας άφησες
  • moved: -1 γιατί θα μας βάλεις να ψάχνουμε αρχεία
  • renamed: -1 γιατί θα ψάχνουμε το παλιό όνομα του αρχείου
  • restored: +2 διότι ευχαριστούμε που το ανέκτησες
Όπως βλέπουμε στο παρακάτω animation ο άρης μπέζας δεν είναι πλέον ο πιο δημοφιλής χρήστης όλες τις χρονικές στιγμές αλλά υπάρχουν στιγμές που έχει φτάσει στο μείον:
http://www.multiupload.com/T22QZ90CY4

Προσέξτε πως το Octave δεν έχει τη δυνατότητα με εύκολο τρόπο να παράγει animation αλλά δίνει την δυνατότητα να εξάγουμε κάθε καρέ ως .png αρχείο εικόνας. Χάρις τους encoders του linux μπορούμε να δημιουργήσουμε αρχείο βίντεο από τα καρέ ορίζοντας το ρυθμό των καρέ. Στη δική μας περίπτωση χρησιμοποιήσαμε το mencoder με την εξής εντολή:
mencoder "mf://*.png" -mf fps=16 -o allframes.avi -ovc lavc -lavcopts vcodec=mjpeg:vbitrate=2000
Όπως βλέπουμε ορίσαμε τo frame rate σε 16 ώστε να προκύπτει ένα animation 25 δευτερολέπτων.

Το παραπάνω παράδειγμα δείχνει με απτό και άμεσο τρόπο την δραστηριότητα των χρηστών στο dropbox κατά τη διάρκεια του σεμιναρίου Ambiant Workshop 2011. Αυτό το παράδειγμα δυστυχώς δεν είναι άμεσα συνδεδεμένο με το dropbox, διότι αν συνέβαινε αυτό θα είχαμε ένα ζωντανό animation που θα άλλαζε ανάλογα την δραστηριότητα των χρηστών που το απαρτίζουν.

Ο κώδικας και τα δεδομένα του project βρίσκονται στο zip αρχείο:
http://www.multiupload.com/WE01AV4GBS

Πρόσθετες Αναφορές
Η πληροφορία δεν χρειάζεται να είναι ατελειώτα κατεβατά, γιγάντιοι πίνακες δεδομένων ή χαοτικές βάσεις δεδομένων μέσα στις οποίες ψάχνουμε τα δεδομένα που θέλουμε να βρούμε. Η πληροφορία μπορεί να είναι όμορφη. Και φυσικά υπάρχει ιστοσελίδα που ονομάζεται ακριβώς έτσι: http://www.informationisbeautiful.net/

Ας δούμε και ορισμένες υλοποιήσεις data visualization που έχουν παρουσιαστεί στην εν λόγω ιστοσελίδα ώστε να έχουμε μια καλύτερη κατανόηση του τι μπορούμε να κάνουμε με τα δεδομένα για να βγάλουμε ωραίες απεικονίσεις και animation.

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







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

Καμία φορά μερικά κουτάκια και λίγο χρώμα αρκούν:
 
Στην παραπάνω εικόνα φαίνονται πόσα λεφτά έβγαλε η wikipedia με τα διάφορα promo που είχε στο internet. Τελικά η ευγνωμοσύνη απέδωσε αρκετά λιγότερα από την ενοχή!

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

Φυσικά η παραπάνω εικόνα δεν μπορεί να ανταποκρίνεται σε animation.

Το μεγάλο ατού των data visualization είναι η αναπαράσταση των σχέσεων μεταξύ των στοιχείων που υπάρχουν στο γράφημα. Για παράδειγμα μια ωραία ερώτηση θα ήταν για τα διάφορα ροφήματα ποιο προσφέρει την περισσότερη ή λιγότερη καφείνη και ποιο φέρει περισσότερες ή λιγότερες θερμίδες. Ούτε αυτό μπορεί να γίνει animation αλλά μας δίνει ένα καλό παράδειγμα πόσο διαισθητικά περνάει η πληροφορία και πόσο γρήγορα μπορούμε να βγάλουμε μια καλή σχετική εκτίμηση για το αγαπημένο μας ρόφημα.


 Αντιθέτως η παρακάτω εικόνα μπορεί να είναι ιδιαίτερη δυναμική αν μετακινηθεί στο χώρο (στις διάφορες τοποθεσίες) ή στο χρόνο καθόσο αφορά την δραστηριότητα των χρηστών στο twitter.

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


Έχοντας ταυτόχρονα πληροφορία για τα έσοδα (με το μέγεθος) και για την πορεία των εσόδων (με το χρώμα) έχουμε μια πολύ πιο ωραία διαισθητικά αναπαράσταση της μάχης των μεγάλων εταιρείων. Φυσικά και θα μπορούσαμε να φτιάξουμε ένα animation για να δείξουμε πως εξελίσσονται τα παραπάνω βελάκια (μηνύσεις) στην πορεία του χρόνου.

Το τελευταίο data visualization είναι ένα flash animation που μπορείτε να το βρείτε στην ιστοσελίδα:
http://projects.flowingdata.com/walmart/

Αυτό το data visualization animation είναι η πραγματική ιστορία ανάπτυξης μιας αμερικάνικης εταιρείας από το 1962 μέχρι το 2010. Χωρίς πολλά εφέ άλλα ούτε και ήχο, σε κάνει να νιώθεις την επιταχυνόμενη εξέλιξη της εταιρείας και της επιβίωσής της μέχρι και σήμερα.

Εν κατακλείδι φαντασία να υπάρχει και όλες οι ιδέες είναι καλές. Φανταστείτε αν είχαμε μια αποθήκη με όπλα και θέλαμε να δούμε πόσα όπλα υπάρχουν από το κάθε είδος θα μπορούσαμε να είχαμε μια φιγούρα, έναν 3D στρατιώτη ο οποίος θα έφερε πάνω του όλα τα είδη όπλων που έχει η αποθήκη. Θα μπορούσαμε να έχουμε το πλήθος των όπλων να αντιστοιχεί σε μια χρωματική απόχρωση που να κυμαίνεται από το χάλκινο έως το χρυσό.
Αλήθεια αν το σκεφτούμε πιο καλά δεν υπάρχει δεδομένο που να μην μπορεί να αναπαρασταθεί εικαστικά αν βάλουμε τη φαντασία μας να δουλέψει. Αν είχαμε τα ποτά ενός bar και μπορούσαμε να μετρήσουμε σε πραγματικό χρόνο πόσα λίτρα αλκοολ υπάρχουν αλλά και καταναλώνονται τότε θα είχαμε ένα μπουκάλι που αυξομειώνεται το ύψος του. Αν επίσης μπορούσαμε να μετρήσουμε το μέσο όρο βαθμού αλκοολ από όλα τα ποτά του μπαρ θα είχαμε το μπουκάλι να λεπταίνει ή να παχαίνει ανάλογα τον βαθμό αλκοολ.

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

Επιμέλεια: Γιώργος Πληγορόπουλος

Tuesday, 28 June 2011

ISA hierarchy of tables inside a database and how to implement a single form

Please consider the following: Imagine I have a simple ISA hierarchy: parent A with children B and C. So let's say we have the corresponding tables named "a", "b", "c" and (created with the help of the gii model creator) the classes A, B, C The following is a screenshot from MySQL workbench:
 
 

The tables b and c have a primary key which ALSO plays the role of the foreign key to the primary key of table a (as expected)
I have an attribute which are common among the children classes B and C .. BUT for other reasons (as you can see other foreign keys) I cannot move these properties to the parent class A.
Initially I names these attributes with different names. This proved to be bad design! So I got back to the database and named them with the same name "protocol"
Now to access these attributes from the parent class A you have to create a custom property inside class A.
A custom property is not a variable but a combination of get/set methods to read and write to a variable. If you have getAttr and setAttr then the attribute is named "attr".
What I did was to create a getChild method (but no setChild method was necessary) Remember the parent class (created from gii) has already access to its children from the public function relations. So exploit this to get the child object.
Note: that this solution works only if row of A has ONLY ONE child, either B or C
The goal is to create a common form to fill the database tables a and b or c So you need an attribute to differentiate the category. Is model A a parent of B or a parent of C? Once more you use custom properties. I used getCateg and setCateg methods. In my case if model A is a newRecord then the category is null but you may want to use a different approach

I create with the help of CHtml a drop down list so user can select B or C This drop down list has values (0, 1) which correspond to class B or C The extra bonus is that this "categ" custom property is an attribute that can be used from the form widget and be validated
$attribute = "pvCat";
print $form->labelEx($model, $attribute);
print $form->dropDownList( $model, $attribute, $model::getCatDescs() );
print $form->error($model, $attribute);
As you see you have a seamless portion of code as the rest of the attributes which are real columns in table "a"
So the dropdown list feeds the "categ" attribute
This way the used has chosen the class. So you can now add a $protocol variable in your class A. This protocol is only temporary and plays the same role for both class B and C. This way you create a textbox to fill protocol for either class B or class C in a seamless way.

$attribute = "protocol";
print $form->labelEx($model, $attribute);
print $form->textField($model, $attribute);
print $form->error($model, $attribute);

I also edited the "rules" method of class A. For instance the "categ" has the 'in' validator with a specific range
But currently I use the controller to call explicitly $modelB->save() or $modelC->save() There is an idea to override save() function in class A to automagically save the child model (since in object oriented terms the class/model A is an abstract class) Please let me know if that works better for you

Authored by George Pligor

Wednesday, 15 June 2011

Let's GAME [Graphics Aided Model Engineering] (maybe UML ?)

Updated reference of this article here: http://www.facebook.com/note.php?note_id=210549415650401

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

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

Γι' αυτό όταν θέλουμε να αναπαραστήσουμε κάτι θα χρησιμοποιήσουμε γραφήματα και γενικότερα visualisation! Είναι κάτι που μας ευχαριστεί ιδιαίτερα καθώς από μια όμορφη δομημένη εικόνα μπορούμε να καταλάβουμε, να αντιληφθούμε, ακόμα και να νιώσουμε αυτό που θέλουν να μας πούνε.
Χρησιμοποιώντας λοιπόν απλούς μαθηματικούς τύπους ή πίνακες με μετρήσεις που έχουμε συλλέξει είναι αναγκαίο να φανταστούμε το τι συμβαίνει, δηλαδή δεν μπορούμε άμεσα να το δούμε.
Ακόμα και αν κάνουμε μια γραφική παράσταση, αυτό είναι κάτι το στατικό διότι για μια επόμενη γραφική παράσταση θα πρέπει να επαναλάβουμε όλες τις πράξεις από την αρχή.

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

Όταν τώρα παμε να γράψουμε διαδικασίες που επιθυμούμε να εκτελεί ο υπολογιστής, επιστρέφουμε στο "χαρτί". Δηλαδή γράφουμε μια γλώσσα προγραμματισμού η οποία έχει τα ίδια μειονεκτήματα με την ελληνική ή οποιαδήποτε άλλη γλώσσα γραπτού λόγου. Είναι βαρετή! και δεν μεταδίδει το μήνυμα όπως ακριβώς θα θέλαμε. Αν προσέξετε πολύ πιο δύσκολο μεταφέρονται σε εσάς τα νοήματα μέσα από αυτό το κείμενο παρά από το διάγραμμα που φαίνεται στην αρχή του άρθρου. Οκ, ο αντίλογος είναι πως η γλώσσα προγραμματισμού έχει μια συγκεκριμένη δομή, και έναν χρωματικό κώδικα για να είναι πιο ευανάγνωστη. Αλλά από την άλλη και εδώ στα ελληνικά θα μπορούσα να προσθέσω κάποιες τονισμένες λέξεις, ή κάποιες υπογραμμισμένες λέξεις και ακολουθούντας μια πιστή σύμβαση να βοηθήσω τον εκάστοτε skim reader να περάσει μία στα γρήγορα το κείμενο εξάγοντας την κεντρική ιδέα.

Βέβαια όταν μιλάμε για μοντελοποίηση θα πρέπει να ξεχωρίσουμε δύο(2) βασικές κατηγορίες. Μοντελοποίηση της Πραγματικότητας και Μοντελοποίηση της Πληροφορίας. Διότι όταν προσπαθούμε να μοντελοποιήσουμε ένα πραγματικό σύστημα τότε γνωρίζουμε, συνήθως, ακριβώς που θέλουμε να φτάσουμε τι να περιμένουμε ως τελική απάντηση. Εδώ το σύστημα είναι λίγο έως πολύ περίπλοκο και θέλουμε να απλοποιήσουμε με τις κατάλληλες παραδοχές. Η μοντελοποίηση όμως της πληροφορίας από την μία πλευρά φαίνεται απλή διότι η πληροφορία είναι ήδη σε ψηφιακή μορφή, είναι κάτι που βρίσκεται στον ψηφιακό κόσμο και δεν είναι δύσκολο να εφεύρουμε δομές που να αποθηκεύουν αυτή την πληροφορία. Αλλά πως ακριβώς θα θέλαμε να επεξεργαστούμε? Γενικώς η πληροφορία είναι κάτι που μπορούμε να εκμεταλλευτούμε με διάφορους πολύπλοκους τρόπους για να εξάγουμε ένα μεγάλο πλήθος συμπερασμάτων και εκεί είναι που γίνεται δαιδαλώδες το σύστημα, επεξεργασίας της πληροφορίας.

Επομένως είτε έτσι είτε αλλιώς το σύστημα μπορεί να προκύψει αρκετά περίπλοκο.
Δεν θα ήταν υπέροχο η μοντελοποίηση του συστήματος να έχει μια οπτική διασταση ?!

Πολλοί μηχανικοί για παράδειγμα έχουν χρησιμοποιήσει τα διαγράμματα πεπερασμένων καταστάσεων (FSMs - Finite State Machines). Τα FSMs δηλώνουν μια διαδικασία που έχει μια αρχή, ένα τέλος ή κάποιο ατέρμονο loop. Όπως και να έχει σίγουρα μπορούν να αναπαρασταθούν από κώδικα ηλεκτρονικού υπολογιστή.

Ο σύγχρονος προγραμματισμός όμως προστάζει κάτι περισσότερο αντικειμενοστραφές και μάλιστα δόμηση σε ιεραρχίες τριών ή περισσότέρων (δυνητικά Ν) επιπέδων [N-tier models]. Οπότε σίγουρα τα State Diagrams δεν επαρκούν για να περιγράψουν αυτή την κατάσταση. Εδώ λοιπόν είναι που έρχεται η UML για να (προσπαθήσει) να λύσει το θέμα. H UML ήταν η προσπάθεια οργάνωσης της αναρχίας των διαγραμμάτων που επικρατούμε παλιότερα, γι' αυτό και λέγεται Unified Modelling Language.

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

Τα διαγράμματα της UML όπως για παράδειγμα τα use-case diagrams που προορίζονται να περιγράψουν τις διαδικασίες ενός προγράμματος από την πλευρά του χρήστη χωρίς όμως να έχουν την τυποποίηση που θα μπορούσε να εκμεταλλευτεί ένας Η/Υ για να τα αξιοποιήσει περαιτέρω δεν μας αφορούν! Το γιατί δεν μας αφορούν είναι απλώς το γεγονός ότι δεν συμμετέχουν στην μοντελοποίηση του συστήματος. Είναι σαν να λέγαμε ένα mind-mapping, σκεπτόμενοι διάφορες ιδέες πάνω στο χαρτί από την πλευρά του χρήστη χωρίς να μπαίνουμε σε μεγαλύτερη λεπτομέρεια.

Υπάρχουν όμως τα διαγράμματα όπως τα Class Diagrams, τα Sequence Diagrams, τα Collaboration Diagrams, τα Activity Diagrams, τα Package Diagrams και άλλα τα οποία μπορούν να τυποποιηθούν και να έχουν μια συγκεκριμένη δομή.
Για παράδειγμα έχετε ένα σωρό αντικείμενα, μιας και γράφετε αντικειμενοστραφή προγραμματισμό, και αυτά αντιστοιχούν κάποιες ιδιότητες και κάποιες μεθόδοι. Οπότε γράφετε στον κώδικα "class..."
Επίσης το ένα αντικείμενο σχετίζεται και συνεπώς χρησιμοποιεί το άλλο οπότε αυτοί είναι οι συσχετισμοί μεταξύ των αντικειμένων.
Άρα πολύ ωραία μπορεί κάποιος να αναπαραστάσει αυτές τις κλάσεις σε ένα Class Diagrams.
Yahooooo! Τώρα θα πρέπει να αισθάνεται πολύ ωραία που μπορεί να δει τον κώδικα του οργανωμένο σε ένα διάγραμμα.
Αλλά αυτό το διάγραμμα πόσο συντηρήσιμο θα είναι στο μέλλον? Αν αλλάξει κάτι στον κώδικα θα μπει στον κόπο να ενημερώσει το διάγραμμα? ή αν κάνει πολλές αλλαγές στο διάγραμμα, οι οποίες με τη σειρά τους μπορεί να έχουν επίπτωση σε πολλά μέρη στα διαφορετικά αρχεία του κώδικα θα θυμηθεί να κάνει αυτές τις αλλαγές?
Μιλάμε για άνθρωπο... ειναι αυτονόητο να κάνει λάθος κάποια στιγμή. Επίσης μιλάμε για άνθρωπο, πότε μάλλον θα βαρεθεί την διπλή δουλειά σε κάποιο σημείο, θα αφήσει το διάγραμμα και θα συνεχίσει απλά να γράφει κώδικα!
Και έτσι γίνονται πολλά από τα προγράμματα σήμερα. Συνήθως υπάρχουν 2 άνθρωποι, ένας ο προγραμματιστής στον κώδικα και ένας ο αναλυτής στο διάγραμμα. Αν είχαμε με έναν άνθρωπο πρόβλημα μην περιμένετε να διορθώσουμε την κατάσταση με δύο ανθρώπους, τουλάχιστον θα την επιβαρύνουμε εις διπλούν!
Τι θα θέλαμε?? Φυσικά να γίνεται ένας συγχρονισμός μεταξύ του Class Diagram και του κώδικα.
Τα καλά νέα είναι πως υπάρχουν αξιόλογες προσπάθειες από διάφορα εργαλεία για να προσφερθεί αυτή η δυνατότητα.

Μια αναλογία για να γίνει αντιληπτό το θέμα και σε λοιπούς μηχανικούς είναι η εξής: Φανταστείτε να σχεδιάζατε ένα διάγραμμα στο Autocad. Αυτό το διάγραμμα για να εξομοιώσετε θα πρέπει να γράψετε αρκετά μπελαλίδικο κώδικα στο spice. Από την άλλη προγράμματα όπως το Electronics Workbench ή το Simulink της Matlab θα σας ανάγκαζαν μεν να ξανασχεδιάσετε το ηλεκτρικό / ηλεκτρολογικό διάγραμμα στην αντίστοιχο εργαλείο αλλά θα μπορούσαν να το εξομοιώσουν ώστε να μην έχετε απλά ένα "νεκρό" διάγραμμα αλλά κάτι "ζωντανό" μπροστά στην οθόνη του υπολογιστή σας.
Επόμενο βήμα φυσικά θα ήταν μετά την επιτυχή εξομοίωση να ζητήσετε από ένα ρομποτ να τραβήξει τα καλώδια ή να χαράξει τις ηλεκτρικές διαδρομές πάνω στην πλακέτα αυτόματα χωρίς να χρειάζεται να μπείτε σε επιπλέον κόπο. Σίγουρα πιο δύσκολο να περάσει κανείς από τον ψηφιακό κόσμο στον πραγματικό (με χρήση ρομποτ) αλλά ευτυχώς στον κόσμο της πληροφορίας που είναι ήδη ψηφιακός δεν έχουμε τέτοοια προβλήματα. <-- αυτό θα πει πραγματική αυτοματοποίηση

Γυρίζοντας τώρα στα διαγράμματα της UML είναι ενδιαφέρον ότι έχουμε περιγράψει (με class diagrams) τι υπάρχει, τι μπορεί να κάνει και ποιοι είναι οι συσχετισμοί αλλά δεν έχουμε την δυναμική του συστήματος. Πως αυτά τα αντικείμενα ενεργούν δυναμικά στο χρόνο. Δηλαδή σκεφτείτε πως χρησιμοποιείτε ένα σύστημα. Εκτελείτε μια ενέργεια σε μια ιστοσελίδα (web application). Για να το κάνουμε τελείως απλοικό κάνετε κλικ σε ένα link. Με άλλα λόγια είστε ο user και ενεργείται με ένα user request. Γίνονται οι όποιες ενέργειες. Ποια αντικείμενα επηρεάστηκαν από αυτές? Μήπως αυτές οι ενέργειες έχουν κάποια αποτελέσματα που ΘΑ επηρεάσουν άλλα αντικείμενα ανάλογα με τις επόμενες επιλογές.
Δηλαδή όταν θα τελειώσει το κλικ που πατήσατε, ποιες θα είναι οι επόμενες δυνατότητες που θα έχετε? Τι θα μπορεί να σας δοθεί να κάνετε περαιτέρω κλικ? κάνοντας ένα νέο user request.

Για να δείτε μια πορεία που θα διαγραψετε αυτήν μπορεί να ακολουθήσει ο χρήστης μπορείτε κάλλιστα να απευθυνθείτε στον κώδικα. Δηλαδή να κάτσετε να ψάξετε μία-μία τις μεθόδους των αντικειμένων, ποια μέθοδος καλεί ποια μέθοδο, που υπάρχουν τα if για να δείτε τις διακλαδώσεις κτλ.
Όλα αυτά διαγράφουν μια αλληλουχία ενεργειών μέσα στο μυαλό σας. Επειδή έχετε γράψει πάρα πολύ κώδικα και θα θέλατε αυτές οι ενέργειες να φαίνονται σε ένα διάγραμμα κάθεστε και σχεδιάζετε ένα sequence diagram ή ένα collaboration diagram.
Για ακόμα μια φορά βρισκόμαστε στο ίδιο δίλημμα και η απάντηση είναι η ίδια. Θέλουμε τα διαγράμματα αυτά να είναι τυποποιημένα κατά τέτοιο τρόπο ώστε να μεταφράζονται απευθείας σε κώδικα. Μόνο αυτό το σύστημα είναι sustainable!

Δυστυχώς η έως τώρα εμπειρία μου με τα εργαλεία που μεταφράζουν UML σε κώδικα είναι απογοητευτική όσον αφορά τα τελευταία διαγράμματα.
Δεν γνωρίζω αν είναι οι ίδιες οι προδιαγραφές της UML που προσφέρουν πάρα πολλές, περισσότερες από όσες θα έπρεπε, δυνατότητες ή απλά είναι τα εργαλεία που δεν έχουν δομηθεί σωστά για να είναι φιλικά προς τον αγαπητό προγραμματιστή ο οποίος θέλει κάτι πιο abstract και πιο απτό, και πιο φανερό και πιο αντιληπτό όπως είναι ένα διάγραμμα να αντικαταστήσει ένα μεγάλο μέρος του κώδικα που γράφει. Όχι το σχεδιαστικό πρόγραμμα να γίνει ένα μεγάλο overhead, με long learning curve!

Προγραμματίζω σε γλώσσα προγραμματισμού PHP, δεν το κρύβω, και θα συνεχίσω να επιμένω σε αυτή τη γλώσσα διότι είναι η μόνη που γράφτηκε από προγραμματιστές για προγραμματιστές. H PHP νιώθει περισσότερο τον προγραμματιστή που θέλει απλά να πει στο καταραμένο το μηχάνημα (το γνωστό σε όλους PC) πως να εκτελέσει κάποια διαδικασία και όχι να εμπλακεί με τις λεπτομέρειες της υλοποίησης. Άλλες γλώσσες προγραμματισμού όπως η Java ήταν ισχυρές παλιότερα αλλά όπως φαίνεται πλέον η μία γλώσσα κλέβει ιδέες από την άλλη με αποτέλεσμα να ακολουθούν μια παράλληλη πορεία και να είναι πλέον "θρησκευτικό" το ζήτημα για το ποια ακριβώς θα ακολουθηθεί. Δεν αναφέρω καν τις γλώσσες όπως η C# ή η Visual Basic που ανήκουν στην Microsoft η οποία πασχίζει να κρατήσει το δικό της θεό (κάποτε τον έλεγαν Bill Gates, για σήμερα δεν είμαι σίγουρος).

Άρα το θέμα είναι να χρησιμοποιηθούν εργαλεία τα οποία να προσφέρουν μετατροπή των UML διαγραμμάτων σε PHP γλώσσα αλλά και αντίστροφα!
Ρίξτε μια ματιά σε αυτό το link: http://en.wikipedia.org/wiki/List_of_Unified_Modeling_Language_tools
Καταρχάς όσα εργαλεία έχουν να ανανεωθούν πολύ καιρό δεν θεωρούνται αξιόπιστα. Από την άλλη δεν υπάρχουν πολλά εργαλεία που να μπορούν να παράγουν PHP.

Το open-source Dia Diagram φαίνεται ενδιαφέρον αλλά αν χρησιμοποιήσει κανείς το εργαλείο θα δει πως δεν υπάρχει κανενός είδος τυποποίηση που να αποτρέπει τα λάθη. Και γενικώς δεν υπάρχει η αναμενόμενη οργάνωση, με packages κτλ, ώστε να χρησιμοποιηθεί για κάτι σοβαρό

Επόμενο υποψήφιο εργαλείο είναι το Software Ideas Modeller το οποίο όμως δεν φαίνεται να έχει κάποια υψηλή υποστήριξη, δηλαδή έχει μικρή κοινότητα χρηστών (μόνο 400 likes στο facebook πχ αυτή τη στιγμή) και το μικρό του μέγεθος (2ΜΒ setup.exe) σε σχέση με τις δυνατότητες που προσφέρει ενώ παράλληλα διαθέτει τόσα πολλά γραφικά προβληματίζει. Δεν φαίνεται να έχει δοκιμαστεί αρκετά ώστε να ξεχωρίσει.

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

Το Bouml είναι το open source εργαλείο του γάλλου Bruno Pages. Το κυριότερο μειονέκτημα του εργαλείου είναι πως ο δημιουργός του, σταμάτησε να το αναπτύσσει επειδή δέχονταν επίθεση από άλλους (περισσότερα στην ιστοσελίδα του)
Αν και το Bouml βρίσκεται σε ένα πολύ καλό σημείο ανάπτυξης εντούτοις υπάρχει αρκετή δουλειά που θα μπορούσε να γίνει ακόμα στην αυτόματη μετατροπή του κώδικα. Από την άλλη ενώ υπάρχουν πολλές αναφορές στο internet για το εν λόγω project δεν υπάρχουν αρκετά tutorial για το πως θα μπορούσε να χρησιμοποιήσει κανείς τα υπόλοιπα διαγράμματα πέρα από τα class diagrams.
Ακόμα και ο ίδιος ο δημιουργός έχει δηλώσει email στην ιστοσελίδα του που δεν υπάρχει πλέον.
Άρα θα ήταν ένα μικρό ρίσκο να πει κανείς πως ασχολείται επαγγελματικά με το συγκεκριμένο εργαλείο εκτός και αν είχε φιλοδοξίες να γράφει C++ και να το εξελίξει παραπέρα.

Τέλος ερχόμαστε να αναφερθούμε σε ένα από τα προγράμματα που δεσπόζουν ως η ναυαρχίδα των UML προγραμμάτων. Το Visual Paradigm. Βέβαια ως ναυαρχίδα δεν είναι καθόλου open source απεναντίας είναι ένα πολύ ακριβό πρόγραμμα για έναν ιδιώτη, αλλά όχι τόσο ακριβό για μια εταιρεία.
Αν και οι δυνατότητες του προγράμματος είναι εμφανείς, ίσως εκεί είναι και το μειονέκτημά του. Οι δυνατότητες είναι πολύ εμφανείς! Φαίνονται όλες, πάνω στο ίδιο interface, υπάρχουν χιλιάδες επιλογές ακριβώς όπως το visual studio ή άλλα τέτοια windows IDEs τα οποία είναι εσκεμμένα δύσχρηστα.
Ο δόλος βρίσκεται στο γεγονός πως κρατώντας την learning curve long μπορούν να δικαιολογήσουν μαθήματα και σεμινάρια (ακόμα και ετήσιας διάρκειας!) με σκοπό την μεγιστοποίηση του κέρδους!
Οπότε και εδώ η χρήση των υπολοίπων διαγραμμάτων (πέρα των class diagrams) και πως μπορούν αυτά να αξιοποιηθούν για την αυτόματη παραγωγή, ενός μέρους έστω, του κώδικα σίγουρα ΔΕΝ είναι προφανής.
Από την άλλη ο PHP κώδικας που παράγεται από το Visual Paradigm φαίνεται να είναι ο καλύτερος σε σχέση με τα υπόλοιπα εργαλεία πράγμα που εδραιώνει την θέση του.

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

Αν έχετε ασχοληθεί και επιθυμείτε μπορείτε να καταθέσετε την δική σας εμπειρία από την χρήση του BOUML, του Visual Paradigm ή κάποιου άλλου PHP <-> UML εργαλείου (:

Επιμέλεια: Γιώργος Πληγορόπουλος
 

Applied Ideas Copyright © 2010
George Pligor - Stergios