Jul 27, 2014

Glossy displays και συχνές μετακινήσεις

Αν και δεν έχω κάνει ακόμα στο blog ένα επίσημο review, εδώ και περίπου ενάμιση χρόνο έχω αντικαταστήσει το Thinkpad T400 με το Sony VAIO SVE14A27CXH ως βασικό επαγγελματικό μου εργαλείο. Ευτυχώς η σειρά E των VAIO αποδείχτηκε πολύ φιλική με το Linux, με καλή ποιότητα και βάρος κατασκευής, γρήγορες αποδόσεις και επεκτασιμότητα, χωρίς να ξεφεύγει οικονομικά σε σχέση με άλλες πιο "επαγγελματικές" λύσεις. Θυμάμαι πως όταν ξεδίπλωσα την συσκευασία και έβαλα τον υπολογιστή στο γραφείο, μου έκανε ιδιαίτερη εντύπωση οι αντανακλάσεις που είχε η οθόνη. Η οθόνη λοιπόν ήταν τεχνολογίας "glossy" (glare), που πρακτικά όταν είναι σβηστή λειτουργούσε ως μαύρος καθρέφτης, ενώ σε λειτουργία επέτρεπε και τις αντανακλάσεις από ισχυρές πηγές φωτός.

 Αν και τα χρώματα της οθόνης είναι πραγματικά εξαιρετικά, αυτή η συμπεριφορά άρχισε να με κουράζει όταν χρειάστηκε να δουλεύω καθημερινά σε διαφορετικούς πελάτες (βλέπε consultant) , ειδικά σε γραφεία που βρίσκονταν κοντά σε παράθυρα. Οι αντανακλάσεις του φωτός σε κουράζουν και μειώνουν την αναγνωσιμότητα της οθόνης. Το ίδιο φυσικά συνέβη και δουλεύοντας τώρα το καλοκαίρι σε εξωτερικούς χώρους. Τελικά το πήρα απόφαση και αγόρασα μια anti-glare μεμβράνη με 10 ευρώ. Η εφαρμογή της θέλει προσοχή ώστε να μην προκύπτουν κενά αέρος.
Το αποτέλεσμα ήταν πραγματικά πολύ καλό. Αν και τα χρώματα στην οθόνη εμφανίζονται με μικρότερη ζωηρότητα, εξακολουθούν και είναι φωτεινά και ευδιάκριτα. Και έχοντας πια αρκετές επισκέψεις σε γραφεία συνεργατών αλλά και σε εξωτερικούς χώρους, είναι σαφέστατα πολύ πιο ξεκούραστη η εργασία. Παρατηρείστε στην ακόλουθη φωτογραφία την διαφορά αντανάκλασης ανάμεσα στο περίβλημα του laptop (πολύ ισχυρή) και στην οθόνη του που έχει το anti-glare περίβλημα.

Jul 19, 2014

Νέο χαρακτηριστικό: Weblogic logs στον JDeveloper 12.1.3

Η ανακοίνωση της έκδοσης 12c για το JDeveloper, ADF, Weblogic και την οικογένεια SOA/BPM/OSB στα τέλη του Ιουνίου, θα αναγκάσει μερικούς από εμάς να περάσουμε (άλλο) ένα καλοκαίρι διαβάζοντας αλλά και δοκιμάζοντας νέα χαρακτηριστικά. Σίγουρα ένα από τα πιο "τρανταχτά" γνωρίσματα αποτελεί η δυνατότητα εκτέλεσης και αποσφαλμάτωσης SOA, BPM και OSB ροών απευθείας στον JDeveloper. Κάτι λιγότερο σημαντικό είναι πως πια ο Application Server Navigator του JDeveloper μας προσφέρει τη δυνατότητα απευθείας εμφάνισης των log files ενός Weblogic domain (για την ακρίβεια του Administration Server), κάτι πολύ χρήσιμο όταν κάνουμε development.
Αν επιλέξουμε ένα αρχείο του Weblogic και διαλέξουμε στο δεξί κλικ την επιλογή "View", θα εμφανιστούν τα περιεχόμενα του log file, δυστυχώς χωρίς δυνατότητα αυτόματης ανανέωσης.

Jul 1, 2014

10$ κάθε βιβλίο της Packt ως τις 5 Ιουλίου !

Ο εκδοτικός οίκος της Packt έχει ήδη συμπληρώσει 10 χρόνια ζωής, έχοντας αμέτρητα τεχνικά βιβλία. Στα πλαίσια του εορτασμού, έως την 5η Ιουλίου προσφέρονται όλα τα βιβλία στην τιμή των 10$ το καθένα!

Περισσότερες πληροφορίες για την προσφορά θα βρείτε εδώ.

Ανάμεσα στους πιο πρόσφατους τίτλους, ξεχωρίζουν hot topics όπως "Mastering Java Server Faces 2.2", "Extending Puppet", "Mastering AngularJS Directives", "Node.js Blueprints", "Mastering Clojure Data Analysis", "Application Development in iOS 7", "Scala for Java Developers" κ.α.

Jun 29, 2014

Disaster-Recovery Weblogic Servers διαμέσου του LXC

Σε περίπτωση που θέλουμε να σχεδιάσουμε μια αρχιτεκτονική υψηλής διαθεσιμότητας, βασισμένη στον Oracle Weblogic Server, σε ένα δευτερεύον σημείο πρόσβασης (disaster-recovery site) το πρώτο που θα κάνουμε είναι να διαβάσουμε την επίσημη τεκμηρίωση. Εκεί περιγράφεται κατά κύριο λόγο μια συμμετρική αρχιτεκτονική, όπου η ενημέρωση του μεσαίου επιπέδου (middleware) πραγματοποιείται με disc replication ή αλλιώς με τον συγχρονισμό των shared storages μεταξύ των δυο sites (production και disaster-recovery) που περιλαμβάνει τα Weblogic domains, εφαρμογές, κλπ.
Προκειμένου να επιβεβαιώσουμε μια τέτοιου είδους αρχιτεκτονική, μπορούμε είτε να την εφαρμόσουμε απευθείας σε ένα σύστημα (πχ με την χρήση virtualization software OVM ή VMWare) είτε με έναν πιο απλό τρόπο που είναι το lxc. Για παράδειγμα, έχω κατασκευάσει έναν Oracle Linux-based container (με το όνομα orasoa) στον οποίον εγκαθίσταται ένας Weblogic Server και γίνονται deployments εφαρμογών. Ας υποθέσουμε πως πρόκειται για τον production server. Η δημιουργία ενός αντιγράφου (clone)  είναι απλή υπόθεση για το lxc, απλά χρησιμοποιούμε την εντολή lxc-clone. Έτσι δημιουργείται μια δεύτερη μηχανή (πχ orasoaclone), με τα ίδια ακριβώς χαρακτηριστικά όπως στο production.
Τελικά, για να ελέγξουμε την τακτική ενημέρωση ενός DR site, ας προσομοιάσουμε την αντιγραφή των περιοχών shared storages ανάμεσα στα δυο sites, με την αντιγραφή σε επίπεδο host OS που φιλοξενεί τα lxc containers. Αν λοιπόν, όλοι μας οι containers βρίσκονται στην διαδρομή /var/lib/lxc (default για το Ubuntu) τότε απλά αρκούν εντολές σαν αυτές:

rsync -azv orasoa/rootfs/home/oracle/user_projects/prod_domain/servers/AdminServer/ orasoaclone/rootfs/home/oracle/user_projects/prod_domain/servers/AdminServer
rsync -azv orasoa/rootfs/home/oracle/user_projects/prod_domain/config/ orasoaclone/rootfs/home/oracle/user_projects/prod_domain/config

ώστε να μεταφερθούν καινούργιες εκδόσεις των εφαρμογών αλλά και εν γένει των Weblogic domains στο δευτερεύον site. Φυσικά, όπως αναφέρει και το documentation της Oracle, το δευτερεύον site δεν είναι ενεργό παρά μόνο για τις ανάγκες του switchover. Ωστόσο, το shared storage του DR θα πρέπει να είναι προσβάσιμο από το παραγωγικό σύστημα για τις ανάγκες του συγχρονισμού.

Jun 22, 2014

Keyboard shortcuts στον JDeveloper


Τις προάλλες ο καλός συνάδελφος Θανάσης Σακελαρίου, μου έδειξε ένα φοβερό keyboard shortcut στο JDeveloper. Εφόσον έχει συμπληρωθεί ήδη μια έκφραση, πατώντας Ctrl+Alt+v γίνεται η ανάθεση της σε μια μεταβλητή, όπως για παράδειγμα φαίνεται στην παρακάτω έκφραση getAttribute(). Αυτή η συντόμευση είναι αντιστοιχίζεται στο μενού Refactor-->Introduce Variable
Ένας κατάλογος για γενικές συντομεύσεις του περιβάλλοντος του JDeveloper βρίσκεται εδώ, ενώ ειδικά για την επεξεργασία Java κώδικα περισσότερες πληροφορίες εδώ. Υπάρχει επίσης ένας χρήσιμος οδηγός για τις 30 πιο συνηθισμένες συντομεύσεις πληκτρολογίου σε αυτό το σημείο.

Τέλος, χρήσιμη και παραμετροποιήσιμη δυνατότητα του JDeveloper είναι και τα code templates που αυτόματα συμπληρώνουν ένα κομμάτι κώδικα μετά από έναν συνδυασμό πλήκτρων.

Jun 4, 2014

Σύντομος και ασφαλής υπολογισμός ενός inline if της Groovy στο ADF

Στο ADF μπορούμε σε πολλαπλά σημεία να χρησιμοποιήσουμε εκφράσεις της Groovy για διάφορες λειτουργίες. Ειδικά ως προς τους υπολογισμούς συχνά πρέπει να ελέγχουμε αν υπάρχει σωστή αρχικοποίηση τιμών ώστε να αποφύγουμε τιμές όπως null. Ευτυχώς στην Groovy υπάρχει μια βελτίωση του inline if ώστε να καλύπτεται με συντομία και ασφάλεια η απουσία τιμής. Για παράδειγμα στο σχήμα fod, ο υπολογισμός ενός πεδίου LineTotal που προκύπτει από δυο άλλα (UnitPrice και Quanity) μπορεί να οριστεί ως:

(Quantity ?: 0) * (UnitPrice ?: 0)

May 14, 2014

Πρώτες εντυπώσεις από το FreeBSD

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

Το τελευταίο χρονικό διάστημα βρήκα την ευκαιρία να ασχοληθώ σε μικρό βαθμό με το BSD. Υπήρξαν διάφοροι λόγοι για την περιέργεια μου. Ένας από αυτούς ήταν η συμπεριφορά του ως λειτουργικό σύστημα, μιας και διαθέτει την φήμη για ένα πολύ σταθερό σύνολο, που εξάλλου χρησιμοποιείται και από το Mac OS. Μια άλλη τεχνολογία που παρουσιάζει ενδιαφέρον είναι αυτή του lightweight virtualization που υλοποιείται με το jails (αντίπαλο δέος του lxc που έχω αναφερθεί στο παρελθόν) Μια τρίτη περιοχή είναι η υποστήριξη της Java και των εργαλείων της. Δεν είχα ιδιαίτερες φιλοδοξίες για το λογισμικό της Oracle, μιας και κανένα προϊόν δεν είναι certified με αυτήν την πλατφόρμα.

Στα πλαίσια μιας δοκιμής μικρής κλίμακας, αποφάσισα να χρησιμοποιήσω ένα έτοιμο virtual machine image του FreeBSD, που ονομάζεται VirtualBSD. Αυτό είναι διαθέσιμο τόσο για VirtualBox όσο και για VMWare και αφορά αρχιτεκτονικές 64-bit. Μέσα σε λίγα λεπτά προέκυψε ένα έτοιμο σύστημα προς χρήση! Να μια φωτογραφία από το web site των δημιουργών του VirtualBSD, έκδοση 10.0. Ένας οδηγός γρήγορης εισαγωγής και μάλιστα στα ελληνικά βρίσκεται εδώ.
Το VirtualBSD έρχεται με ένα μεγάλο πλήθος χρηστικών εφαρμογών (LibreOffice, Skype, Pidgin, VLC, κλπ) Το να αναβαθμίσει κανείς μια εφαρμογή ή να εγκαταστήσει μια καινούργια προκαλεί αρχικά έκπληξη, αφού κατά τον παραδοσιακό τρόπο, χρειάζεται να γίνεται άντληση από το internet του πηγαίου κώδικα της εφαρμογής και να ακολουθήσει compilation με την προτροπή για διάφορα flags. Ίσως με αυτόν τον τρόπο ενθαρρύνεται η σταθερότητα του συστήματος. Από την άλλη, μια νέα έκδοση του LibreOffice θα χρειάζεται τουλάχιστον ένα διώρο compilation με την CPU σε υψηλό φόρτο! Εντύπωση μου έκανε πάντως το package (ή καλύτερα ports) management στο BSD: μπόρεσα από διαφορετικά τερματικά να κάνω εγκατάσταση ταυτόχρονα δυο εφαρμογές. Διαχειριστές πακέτων στο Linux όπως στο Ubuntu (deb) και στο Oracle Linux/RedHat συνήθως βάζουν κλειδώματα στη βάση δεδομένων των εφαρμογών και επιτρέπουν μια ενημέρωση την φορά. Το σύστημα των αρχείων ακολουθεί μια μεγαλύτερη πειθαρχία με τις νέες εφαρμογές να τοποθετούνται στον κατάλογο /usr/local.

Ένα άλλο πολύ θετικό του BSD είναι η χαμηλή κατανάλωση πόρων και ιδίως της μνήμης (RAM), ακόμα και παρακάτω από το Linux. Αυτό σου δίνει την αίσθηση ενός στιβαρού, multitasking UNIX συστήματος.  Επίσης η διαχείριση των εργασιών κατά την εκκίνηση (startup jobs) είναι πολύ απλή, σε αντίθεση με πολύ σοφιστικέ προσεγγίσεις στο Linux (systemd, upstart)

To BSD ενσωματώνει μια τεχνολογία lightweight virtualization που ονομάζεται jails. Αντίστοιχα με το lxc, επιτρέπει να τρέχουν μέσα στον ίδιο kernel προστατευμένα αντίγραφα του λειτουργικού συστήματος. Η υλοποίηση μου άρεσε πάρα πολύ όπως και η ύπαρξη διαφορετικών, ισχυρών εργαλείων διαχείρισης (warden και ezjail) Υπάρχει ακόμα μια υποτυπώδης υποστήριξη για την εκκίνηση Debian μέσα σε ένα τέτοιο περιβάλλον! Όπως και στο lxc, ένας νέος container ξεκινά σε δυο-τρια δευτερόλεπτα.

Ως προς την Java, το VirtualBSD έρχεται με την προεγκατεστημένη έκδοση OpenJDK 1.6.0.32, ενώ στον κατάλογο ports θα βρούμε επίσης τις εκδόσεις OpenJDK 7/8, το NetBeans 8 και το Eclipse Indigo (3.7.1) H εγκατάσταση του OpenJDK8 και του NetBeans 8 ήταν δίχως προβλήματα (αν και πήρε πολύ ώρα λόγω του compilation) Για την ορθή λειτουργία, χρειάστηκε να προστεθεί στο αρχείο etc/netbeans.conf η σωστή αναφορά στο OpenJDK8 home καθώς και η παράμετρος nosplash για την εκκίνηση, δηλαδή:

netbeans_default_options="-J-client ... --nosplash"
netbeans_jdkhome="/usr/local/openjdk8"

May 2, 2014

Υψηλής ποιότητας έγγραφα (documents) από απλά αρχεία κειμένου (text files)

Στους υπολογιστές μας συντηρούμε χιλιάδες αρχεία με πιο δημοφιλή σε εμάς τους προγραμματιστές τα αρχεία κειμένου. Αυτά διαβάζονται και μεταβάλλονται εύκολα από οποιονδήποτε συντάκτη κειμένου (editor) ενώ μεγάλο πλεονέκτημα είναι η εύκολη αναζήτηση στα περιεχόμενα τους (ειδικά στο Linux με το πλούσιο ρεπερτόριο χρήσιμων εντολών) Πέρα όμως από τις προγραμματιστικές ανάγκες, πολύ συχνά σε αρχεία κειμένου διατηρώ τις σημειώσεις μιας συνάντησης ή ακόμα και τον απολογισμό μιας ημέρας, κτλ. Μια φανταστική σειρά εργαλείων της Python είναι τα docutils που προσφέρουν δυνατότητες ώστε χρησιμοποιώντας απλούς χαρακτήρες σε ένα απλό αρχείο κειμένου, να το μετασχηματίσουν σε υψηλής ποιότητας έγγραφο σε μορφή HTML, PDF, OpenOffice document ή άλλα formats. Η μορφή αυτού του markup ονομάζεται reStructuredText (rst) και θυμίζει αρκετά τον τρόπο εργασίας με το LaTeX μόνο που τα σύμβολα του είναι απλούστερα και "λερώνουν" λιγότερο την μορφή του κειμένου μας. Για παράδειγμα, για τονισμένη γραφή, περικλείουμε το κείμενο μας σε διπλούς αστερίσκους ('**'), δηλαδή:

**κείμενο**

για να δηλώσουμε μια επικεφαλίδα, στην επόμενη γραμμή αντιγράφουμε στο μήκος της τον χαρακτήρα '=', '~' ή '-' ανάλογα με το επίπεδο της. Για παράδειγμα:

Επικεφαλίδα 1
=========

Με ανάλογες δηλώσεις μπορούμε να ορίσουμε πίνακες περιεχομένων, λίστες, πίνακες, κλπ. Έτσι κατασκευάζουμε το αρχείο μας με μια τυπική επέκταση (πχ .txt) και έπειτα από την γραμμή εντολών, μπορούμε να εκτελέσουμε τον κατάλληλο μετατροπέα ώστε να το μετασχηματίσει σε διάφορες μορφές (πχ html, pdf, LaTeX, odt, man page) Για παράδειγμα:

rst2html.py myfile.txt > out.html

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

Apr 13, 2014

Οδηγός γρήγορης εκκίνησης του SonarQube στο Ubuntu σε 2 λεπτά

Το SonarQube αποτελεί ένα de-facto εργαλείο για την στατική ανάλυση κώδικα και την παρακολούθηση της εξέλιξης, της ποιότητας και της εφαρμογής κανόνων στην ανάπτυξη. Αυτό το διάστημα εξετάζω το SonarQube σε σχέση με το Oracle ADF και κώδικα γραμμένο σε PL/SQL και αυτό το πρώτο σημείωμα στοχεύει στην εγκατάσταση του SonarQube με τον γρηγορότερο δυνατό τρόπο στο Ubuntu.

Συνεπής με τις τεχνολογίες virtualization και για λόγους καλύτερης οργάνωσης, κατασκεύασα μια εικονική μηχανή στο lxc, βασισμένη στην τελευταία έκδοση του Ubuntu με την εντολή:

sudo lxc-create -t ubuntu -n sonar

Άσχετα αν ακολουθήσουμε το lxc, θα χρειαστούμε ένα data repository για το SonarQube. Ας χρησιμοποιήσουμε την MySQL.


sudo apt-get install mysql-server


Ένα script για την κατασκευή του απαραίτητου σχήματος θα βρείτε εδώ. Για την εγκατάσταση του λογισμικού του SonarQube, θα χρειαστούμε την Java (κατά προτίμηση JDK 7) αλλά και το ίδιο το λογισμικό του Sonar. Πολύ εύκολο! Προσθέτουμε δυο εγγραφές στο /etc/apt/sources.list:

deb http://downloads.sourceforge.net/project/sonar-pkg/deb binary/
deb http://ppa.launchpad.net/webupd8team/java/ubuntu saucy main

Και έπειτα εγκαθιστούμε το σχετικό λογισμικό:

sudo apt-get update && sudo apt-get install oracle-java7-installer sonar

Με την προηγούμενη εντολή, θα γίνει εγκατάσταση στην διαδρομή /opt/sonar με τα δικαιώματα ενός ειδικού χρήστη (sonar) Για να συνδέσουμε το Sonar με την MySQL, επεξεργαζόμαστε το αρχείο /opt/sonar/conf/sonar.properties και σχολιάζουμε (comment) την H2 database και κάνουμε uncomment την γραμμή της MySQL.

Τέλος, για την αυτόματη εκκίνηση του SonarQube, μπορούμε να προσθέσουμε την εξής γραμμή στο αρχείο /etc/rc.local.

su - sonar /opt/sonar/bin/linux-x86-64/sonar.sh start

Έτσι, οι αναφορές θα μας περιμένουν στο http://localhost:9000. Περισσότερες πληροφορίες για την εγκατάσταση θα βρείτε εδώ.

Στα επόμενα άρθρα θα αναφερθούμε στην χρήση SonarQube σε ADF εφαρμογές καθώς και στην διασύνδεση με το OJAudit.

Apr 3, 2014

Επιλεκτική διαγραφή πρόσφατων αρχείων από το GNOME

Το GNOME στο οποίο βασίζεται και το Ubuntu, ανά πάσα ώρα και στιγμή διατηρεί τη λίστα των πιο πρόσφατων αρχείων (recent files) που έχουν χρησιμοποιηθεί. Αυτή η λίστα είναι διαθέσιμη είτε στον File Manager (nautilus) είτε σε τρίτες εφαρμογές όπως για παράδειγμα ο φοβερός keystroke launcher kupfer ώστε με δυο clicks να έχουμε στην άμεση διάθεσή μας τα πιο πρόσφατα αρχεία μας. Δεν λείπουν πάντως οι φορές που μερικά αρχεία δεν θέλουμε να τα "θυμάται" το GNOME αλλά προτιμούμε να μην εμφανίζονται στην σχετική λίστα.

Για να το καταφέρουμε αυτό θα χρειαστούμε μια μικρή επεξεργασία XML αρχείων από το shell του Linux. Πρώτα από όλα, τα πρόσφατα αρχεία καταγράφονται στην τοποθεσία $HOME/.local/share/recently-used.xbel που είναι όντως ένα XML αρχείο. Εκεί για κάθε έγγραφο καταγράφεται η τοποθεσία του σε ένα attribute ονόματι href. Επειδή δεν μπορούμε να απαγορεύσουμε την καταγραφή του συστήματος για τα πρόσφατα αρχεία, το μόνο που μπορούμε να κάνουμε είναι μια εκκαθάριση (clean) τους, σύμφωνα με κάποια κριτήρια, κατά τακτά χρονικά διαστήματα. Είχαμε παλαιότερα αναφερθεί στο φανταστικό πρόγραμμα xmlstarlet που βοηθάει στην επεξεργασία XML από command-line. Έτσι και τώρα, προκειμένου να σβήσουμε (delete) τις εγγραφές των πρόσφατων αρχείων που ανήκουν σε έναν συγκεκριμένο κατάλογο (πχ private) δεν έχουμε παρά να εκδώσουμε την εντολή:

xmlstarlet ed -N bookmark="http://www.freedesktop.org/standards/desktop-bookmarks" -d "//bookmark[contains(@href, 'private/')]" $HOME/.local/share/recently-used.xbel > $HOME/.local/share/recently-used.xbel.bck ; mv $HOME/.local/share/recently-used.xbel.bck $HOME/.local/share/recently-used.xbel

To παραπάνω script μπορούμε να το εντάξουμε στα auto-startup scripts του Ubuntu.