Archive for the Category » Programming «

Sunday, March 29th, 2009 | Author: admin

i18niconΜ’αρέσει όταν κάνω install “έξυπνες” εφαρμογές, όπως για παράδειγμα το AverTV της AverMedia για να υποστηρίζει το AverMedia Volar HX tv-tuner μου. Τι το έξυπνο έχει; Απλά, σου λέει “Λοιπόν φιλαράκο, έχεις επιλέξει Greek regional settings; Ε, λοιπόν, θα βλέπεις το GUI της εφαρμογής στα Ελληνικά - (σ.σ. ο θεός να τα κάνει Ελληνικά!) - θέλοντας και μη!”. Ούτε καν επιλογή για manual αλλαγή της γλώσσας του GUI δεν υπάρχει!

more…

Thursday, March 19th, 2009 | Author: admin

Σε web application τα οποία γίνονται developed μέσω κάποιου agile process (και όχι μόνο), πολύ συχνά υπάρχουν πολλά version που συνυπάρχουν. Άλλο version στο μηχάνημα του κάθε developer, άλλο στο Production, άλλο στο pre-Prod, άλλο στο Testing, στο Acceptance, κτλ. Καλό θα είναι λοιπόν να έχεις έναν εύκολο τρόπο, ενσωματωμένο στη build διαδικασία σου, ο οποίος θα ενσωματώνει αυτόματα το version το οποίο πρόκειται να κάνεις ship.

more…

Category: Programming  | Tags: , , ,  | Leave a Comment
Monday, December 15th, 2008 | Author: admin

Σε προηγούμενο blogpost είδες πως μπορείς να χρησιμοποιήσεις το jBPM μέσω μιας απλής stand-alone java εφαρμογής. Το επόμενο βήμα λοιπόν, είναι να ενσωματώσεις το jBPM στο enterprise application σου και να το χρησιμοποιήσεις για να κάνεις handle πολλαπλά workflow τα οποία θα τρέχουν παράλληλα, από διαφορετικούς χρήστες και σε διαφορετικά states. Για να γίνει αυτό, θα πρέπει να συνδέσεις το jBPM με μια βάση δεδομένων έτσι ώστε να μπορείς να έχεις persistent state στα workflows σου.

Η διαδικασία είναι σχετικά απλή και το jBPM έχει σχεδιαστεί έτσι ώστε και να την απλοποιεί αλλά και να την κάνει generic-enough ώστε να μη σε δεσμεύει σε συγκεκριμένες DBs. Για το παράδειγμα αυτό, θα χρησιμοποιήσουμε τον client που έφτιαξες στο προηγούμενο blogpost επεκτείνοντάς τον κατάλληλα για τη σύνδεση του jBPM με τη MySQL.

more…

Category: Programming  | Tags: , , ,  | Leave a Comment
Monday, December 15th, 2008 | Author: admin

Έχεις στα requirements του project σου διαδικασίες που περιλαμβάνουν πολλαπλούς χρήστες, διαφορετικά execution paths και decision points, notifications και triggers ανάλογα με τα action και άλλα τέτοια ωραία δυναμικά constraints; Καλωσόρισες στον κόσμο των workflows! Όπως πάντα, θα αφήσω το κομμάτι της θεωρίας - που μπορείς να βρεις εύκολα με ένα γρήγορο search στο google - και θα προχωρήσω σε ένα hands-on παράδειγμα. Για το παράδειγμα αυτό θα χρησιμοποιήσουμε το JBoss jBPM και το Eclipse 3.4.0 (aka Ganymede).

more…

Category: Programming  | Tags: , ,  | Leave a Comment
Tuesday, December 02nd, 2008 | Author: admin

Θα έχεις παρατηρήσει σε διάφορα sites που επισκέπτεσαι ότι οι διαφημίσεις “ξέρουν” ότι έρχεσαι από την Ελλάδα ή ακόμα π.χ. από την Αθήνα. Αφού περάσει το αρχικό shock του πως είναι δυνατόν όλες αυτές οι “Ελληνίδες” που θέλουν να επικοινωνήσουν μαζί σου μέσω των διαφημίσεων να είναι ξανθές, γαλανομάτες, 1.80μ και με ονόματα όπως Agneta, Kersting, Nilsin κτλ. αναρωτιέσαι: Πως ξέρουν ότι έρχομαι από την Αθήνα (και τι κάνει ο κ. Δαφέρμος;). Η απάντηση είναι πολύ απλή: Ξέρουν το IP σου και εφαρμόζοντας geocoding  μπορούν να εντοπίσουν με αρκετά μεγάλη ακρίβεια από που έρχεσαι. Αλλά ας δούμε πως γίνεται αυτό αναλυτικότερα.

more…

Category: Programming  | Tags: , , ,  | One Comment
Friday, November 28th, 2008 | Author: admin

Μερικές γρήγορες οδηγίες για να ενεργοποιήσεις το SSL στον Tomcat για να πειραματιστείς με HTTPS:

1. Ενεργοποίησε τον SSL connector στο server.xml αρχείο του Tomcat, βγάζοντας τα comments από το παρακάτω


<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" />

2. Θα χρειαστείς ένα certificate ώστε να το χρησιμοποιήσει ο Tomcat στο SSL. Μιας και απλά θέλουμε να πειραματιστούμε δε μας ενδιαφέρει το certificate να είναι “κανονικό” (σ.σ. να προέρχεται από κάποιο publicly trusted CA = να πληρώσουμε για να το αγοράσουμε) οπότε θα χρησιμοποιήσουμε το keytool της Java για να φτιάξουμε ένα certificate μόνοι μας.

more…

Thursday, November 27th, 2008 | Author: admin

Πληρώνοντας κάτι… παραπάνω για Application Server, μαζί με διάφορα άλλα καλούδια παίρνουμε (συνήθως) και μια ωραία Management Console. Αυτό συμβαίνει και στην περίπτωση του Oracle WebLogic 10.3. Μέσα από το ενσωματωμένο management console λοιπόν, μπορούμε να κάνουμε διάφορες ενέργειες ως administrators μια εξ των οποίων και το να φτιάξουμε ένα cluster μόνο με point-and-click. Στις παρακάτω γραμμές, μπορείς να δεις παραδείγματα και screenshots της όλης διαδικασίας για ένα απλό cluster με 2 nodes στο ίδιο machine.

Υποθέτω ότι έχεις ήδη κάνει install τον Oracle WebLogic 10.3 στο μηχάνημά σου (το παράδειγμα είναι σε Windows XP) και ότι γνωρίζεις βασικά πράγματα, όπως τι είναι ο Node Manager, τι είναι ο Admin Server, ποια είναι η έννοια του Machine στον WebLogic κτλ.

more…

Monday, November 03rd, 2008 | Author: admin

Αφού λοιπόν είδαμε τι ωραία πράγματα μπορούμε να κάνουμε με τα Rule Engines, ας δοκιμάσουμε κάτι hands-on. Αυτή τη στιγμή ένα από τα καλύτερα και πιο ολοκληρωμένα fully open source Rule Engines είναι το Drools της JBoss (a division of Red Hat :) ). Αρχικά, πήγαινε στη σελίδα με τα downloads του Drools και κατέβασε το Drools 4.0.7 Binaries. Αποσυμπίεσέ το σε ένα folder στο PC σου και άνοιξε το αγαπημένο σου IDE (για ‘μένα, το NetBeans ;) ).

Δε θα ασχοληθούμε με structuring και proper layering της demo εφαρμογής μας, οπότε έχε υπόψη σου ότι τα παρακάτω κομμάτια κώδικα υπάρχουν κυρίως για να σου δώσουν μια γρήγορη και πρώτη ιδέα του πως μπορείς να χρησιμοποιήσεις το Drools. Για applications στο production, you should try better than that ;)

Ας δούμε λοιπόν το specification της εφαρμογής μας. Ας υποθέσουμε λοιπόν ότι φτιάχνουμε - ένα πάααααρα πολύ απλό version - μιας εφαρμογής για τον υπολογισμό του λογαριασμού ενός πελάτη εταιρίας τηλεφωνίας. Τα στοιχεία του πελάτη αντιπροσωπεύονται από ένα Customer object και τα διάφορα items του λογαριασμού του από ένα ή περισσότερα BillItem objects. Όπως είναι λογικό, έχουμε πολλούς πελάτες, με λογαριασμούς με πολλαπλά items με τη διαφορά όμως ότι δεν έχουμε ενιαίο τρόπο υπολογισμού του τελικού κόστους του λογαριασμού μιας και ο κάθε πελάτης μπορεί να ανήκει σε διαφορετικό plan. Τι κάνουμε λοιπόν; Φτιάχνουμε ένα CostCalculator class το οποίο το επεκτείνουμε με νέες μεθόδους κάθε φορά που ένα νέο plan δημιουργείται από την εταιρία μας; Προσπαθούμε να το κάνουμε λίγο παραπάνω modularise και φτιάχνουμε όλες τις ρουτίνες υπολογισμού του κόστους των λογαριασμών με PL/SQL στη βάση, ώστε τουλάχιστον να μη χρειάζεται να κάνουμε re-deploy την εφαρμογή μας κάθε τρεις και λίγο; Φτιάχνουμε ένα custom τρόπο με τον οποίο μπορούμε να υπολογίσουμε το κόστος βασιζόμενοι σε data που έχουμε ορίσει σε κάποιο proprietary text file (του οποίου το format, φυσικά, βαριόμαστε να κάνουμε properly document και μόλις φύγει από την εταιρία ο άνθρωπος που το έφτιαξε ψάχνουμε να προσλάβουμε τους απόγονους του Ventris για να το αποκρυπτογραφήσουν); Χμ, γιατί δε δοκιμάζουμε να χρησιμοποιήσουμε ένα Rule Engine;

more…

Category: Programming  | Tags: , , ,  | Leave a Comment
Friday, October 31st, 2008 | Author: admin

Είναι γεγονός ότι οι σημερινές Enterprise Applications είναι τόσο πολύπλοκες όπου ένα μεγάλο μέρος του business logic τους μπορεί να χρησιμοποιηθεί ξανά και ξανά μεταξύ διαφορετικών υλοποιήσεων. Παρόλα αυτά, μικρές ή και μεγαλύτερες διαφορές στο πως ακριβώς η εφαρμογή καλείται να υλοποιήσει ένα συγκεκριμένο business requirement πολλές φορές μας οδηγούν στο να προτιμήσουμε να ξαναγράψουμε τον κώδικα από την αρχή παρά να προσπαθήσουμε να αλλάξουμε τον ήδη υπάρχοντα κώδικα που έχουμε από ένα παλαιότερο application.

Πως θα σου φαινόταν όμως αν μπορούσες να γράφεις τον κοινό κώδικα μόνο μια φορά σαν “Business Rules” και στα σημεία εκείνα όπου χρειάζεται να υλοποιήσεις εντελώς custom business logic να είχες τη δυνατότητα να τα “παραμετροποιήσεις” ουσιαστικά κανοντάς τα inject μέσα στον κωδικά σου από ένα εξωτερικό source; Welcome to the world of Rule Engines!

Ένα Rule Engine σου επιτρέπει να ορίσεις business rules, σε μορφή if-then, τα οποία κάνει evaluate και execute στο runtime έτσι ώστε να επιτύχεις διαχωρισμό του business knowledge από το implementation του και να μπορείς να αλλάζεις τη συμπεριφορά του application σου χωρίς να χρειάζεται, απαραίτητα, να αλλάξεις και τον κωδικά του.

more…