JHUG meetup November 11th 2019

Την περασμένη Δευτέρα κάναμε τη δεύτερη μας εκδήλωση για φέτος που ήταν και το πρώτο meetup εφόσον η πρώτη εκδήλωση ένα workshop για το quarkus.

Το meetup έγινε στην πολύ όμορφη αίθουσα του Code.Hub στη Λεωφόρο Αλεξάνδρας. Αυτή τη φορά είχαμε χορηγούς την Nokia και το Code.Hub που μας βοήθησαν με την προβολή του meetup, την αίθουσα, το networking και πρόσφεραν και τα κεράσματα σε όσους έλαβαν μέρος.

Η προσέλευση ήταν ικανοποιητική. Δυστυχώς λόγω της επίσκεψης του προέδρου της Κίνας και αναταραχών στην ΑΣΟΕΕ η κατάσταση στους δρόμους ήταν δύσκολη και υπήρχε κόσμος που δεν ρίσκαρε να κατέβει στο κέντρο. Αρκετοί από αυτούς θα σκέφτηκαν ότι δεν πειράζει, θα δουν τις ομιλίες όταν ανέβουν τα βίντεο αλλά δυστυχώς σε αυτό το meetup δεν είχαμε βίντεο λόγω υποχρεώσεων του κάμεραμαν(sic!) εκτός Αθηνών. Αυτά τα απρόοπτα δυστυχώς συμβαίνουν. Δεν είναι τα πάντα προβλέψιμα, στρωτά και εύκολα όπως όταν γράφουμε κώδικα σε java.

Ο Θωμάς καλωσόρισε τον κόσμο εκ μέρους του JHUG και για μια ακόμα φορά ζήτηση περισσότερες συμμετοχές για ομιλίες.

Ο Δημήτρης Αϊβάτογλου από τη Nokia μίλησε για την εταιρεία, την πορεία της και τα απαιτητικά έργα που φέρνει σε πέρας και πως η java αποτελεί το πιο αξιόπιστο εργαλείο της.

Στη συνέχεια ο Γιάννης Νικολακόπουλος από το Code.Hub μίλησε για τη σημασία που έχει σήμερα η γνώση προγραμματισμού, για τις υπηρεσίες που προσφέρουν και για τη στήριξη που παρέχουν στα meetups της Αθήνας και όχι μόνο.

Μετά από αυτές τις απαραίτητες αναφορές, το λόγο πήραν οι ομιλητές.

Java Memory Management, Bedtime Stories από την Εύη Χατζιδάκη

Η Εύη, senior software engineer στη Nokia, με αυτή την ομιλία έσπασε μια άσχημη παράδοση που μας στεναχωρούσε, ότι σε κανένα meetup δεν είχε κάνει παρουσίαση γυναίκα μηχανικός.

Διάλεξε ένα θέμα με το οποίο είχε ασχοληθεί αρκετά όπως είπε, το java memory management. Το project στο οποίο συμμετέχει περιλαμβάνει ένα server από τον οποίο περνάει πολύ μεγάλη κίνηση και άρα τα memory leaks και ο χρόνος που τρέχει ο garbage collector έχουν μεγάλο αντίκτυπο στο performance του.

Η παρουσίαση της είχε πολύ υλικό, νομίζω άνετα μπορούν να βγούνε ακόμα 2-3 ομιλίες από όσα είπε για τα επόμενα meetups. Η Εύη έκανε ένα overview του πως διαχειρίζεται τη μνήμη η JVM, έδειξε σχετικά patterns και anti-patterns και παρουσίασε εργαλεία για monitoring και debugging θεμάτων σχετικών με μνήμη. Για τα περισσότερα από αυτά έδειξε και ένα live demo όπου φαινόταν καθαρά το πρόβλημα και η λύση.

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

Quiz, pizza and beer

Ανάμεσα στις δυο ομιλίες ο Γιώργος Καλφόπουλος βλ Ministry Of Testing έκανε ένα quiz με ερωτήσεις java και στους νικητές δώθηκαν δύο βιβλία και μια προσωπική άδεια intellij προσφορά της JetBrains

Μετά απο αυτή την ευχάριστη νότα έγινε διάλειμμα για pizza και networking, πριν συνεχίσουμε με τη δεύτερη ομιλία.

Faster, Cheaper, Leaner: Horizontally Scaling a CI Pipeline από τον Γιώργο Σασλή

Ο Γιώργος είναι software delivery engineer στη RedHat και είναι γνωστός στο Ελληνικό ΙΤ σαν ένα από τα κινητήρια γρανάζια πίσω από το IT οικοσύστημα της Κρήτης και από τη διοργάνωση των AgileCrete και JCrete.

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

Η παρουσίαση είχε 2 μέρη.

Το πρώτο θα μπορούσε να έχει τίτλο “Όλα όσα θέλατε να μάθετε για το CI pipeline”. Πραγματικά παρουσίασε το ιστορικό της εξέλιξης του, την αναγκαιότητα του και πολλά patterns καλής χρήσης και ομοίως anti-patterns κακής. Έκανε αναφορά σε όλα τα σχεδιαστικά θέματα ενός CI pipeline όπως κόστος VMs, χρόνος εκτέλεσης, παράλληλη εκτέλεση των tests, αξιοπιστία των αποτελεσμάτων, flaky tests και πολλά άλλα.

Το δεύτερο μέρος περιείχε τη λύση που δώσανε στα παραπάνω θέματα στα projects που συμμετέχει. Παρουσίασε το CI pipeline της 3scale και έδειξε τα πλεονεκτήματα και τα μειονεκτήματα του.

Ο Γιώργος ανέβασε τις διαφάνειες του εδώ ενώ τα projects της 3scale είναι open source και βρίσκεται εδώ

Το επόμενο;

Το ραντεβού ανανεώθηκε για την επόμενη φορά με περισσότερη java. Επειδή όμως το meetup.com έχει ένα θέμα με τα RSVP αν θέλετε κοιτάζεται και τα υπόλοιπα κανάλια για να μην χάσετε την ημέρα.

Join JHUG

Μπορείτε να μαθαίνετε τα νέα του JHUG, να συμμετέχετε και να ανταλλάξετε ιδέες μέσα από τα κανάλια μας:
Slack
Twitter
Meetup
Blog
Vimeo

Τα νέα για τα meetup και τις άλλες εκδηλώσεις δημοσιεύονται σε όλα τα κανάλια αλλά οι ενδιαφέρουσες συζητήσεις είναι στο slack. Αν δεν είσαστε εκεί, ζητήστε πρόσκληση.

Και τώρα κάτι εντελώς διαφορετικό

Το περασμένο Σάββατο έγινε το πρώτο meetup του JHUG για τη νέα σεζόν και ήταν διαφορετικό από τα προηγούμενα. Ας πάρουμε όμως τα πράγματα από την αρχή.

Εδώ και καιρό θέλαμε να δοκιμάσουμε κάτι διαφορετικό στα meetups και να ξεφύγουμε λιγάκι από τη δομή με τις 2 ομιλίες. Η ευκαιρία μας δόθηκε σε συνεργασία με τον Γιώργο Ανδριανάκη ο οποίος πρότεινε, αλλά και προθυμοποιήθηκε να βοηθήσει, στη διοργάνωση ενός workshop σχετικό με τα Quarkus extensions για τo spring web API. Το Quarkus είναι η νέα, πολλά υποσχόμενη πρόταση της Red Hat για την ανάπτυξη εφαρμογών για microservices, cloud native και serverless εφαρμογές και φυσικά είναι σε java. Για αυτή τη νέα πλατφόρμα έχουν γίνει ομιλίες και στο JHUG και στο Voxxed Days Athens. Ο Γιώργος θα κάνει και μια ομιλία στο προσεχές Devoxx για Quarkus και spring οπότε το JHUG ήταν ταυτόχρονα αποκλειστικότητα για τα μέλη και πρόβα generale για τον Γιώργο.

Για την διοργάνωση του workshop είχαμε για άλλη μια φορά τη βοήθεια της Advantage FSE η οποία παραχώρησε την αίθουσα της και τα κεράσματα στους συμμετέχοντες. Η εταιρεία στέκεται πάντα πολύ κοντά στο JHUG και μας βοηθάει στις εκδηλώσεις μας. Με αυτή την ευκαιρία να ευχαριστήσουμε για άλλη μια φορά την εταιρεία και το HR τμήμα για τη προσφορά και τη συνεργασία τους.

Η εκδήλωση ξεκίνησε με το καλωσόρισμα του JHUG στους παρευρισκόμενους με την ευχή να έχουμε καλή νέα σεζόν και να ευχαριστηθούμε java. Η συμμετοχή, περίπου 30 άτομα με το laptop τους, κρίνεται πολύ ικανοποιητική για το πρώτο μας workshop.

Στη συνέχεια η Αdvantage έκανε μια παρουσίαση για το προφίλ της, τις ψηφιακές υπηρεσίες και τα προϊόντα που παρέχει στον οικονομικό τομέα και τη καλή σχέση που έχει με τα IT communities. Επιθυμία της είναι αυτή η σχέση να ισχυροποιηθεί περισσότερο και με συμμετοχή της σε προσεχείς εκδηλώσεις αλλά και ανοίγοντας θέσεις εργασίας.

Μετά σειρά είχε το κύριο πιάτο, ο κώδικας. Ο Γιώργος ξεκίνησε με μια πάρα πολύ σύντομη εισαγωγή στο Quarkus και μετά μίλησε για τα spring web API extensions. Το δεύτερο κομμάτι προτίμησε να το κάνει με τη μορφή live coding. Διάλεξε μια σειρά από μικρές spring εφαρμογές και κάθε μια την έγραφε, την τέσταρε και την έτρεχε live. Οι εφαρμογές αυτές περιείχαν μεγάλη γκάμα από spring features σχετικών με web apps όπως configuration, validation, serialization, routing κτλ. Στα παραδείγματα του Quarkus μπορείτε να βρείτε τον κώδικα για παρόμοιες εφαρμογές με αυτές που παρουσιάστηκαν.

Το live coding ήταν ένας πάρα πολύ καλός τρόπος να παρουσιαστούν αυτά τα features γιατί φάνηκαν όλα τα καθημερινά θέματα του development:

  1. τι πρέπει να γράψουμε εμείς και τι θα κάνει το framework αυτόματα
  2. τι υποστηρίζεται πλήρως, τι μερικώς και τι καθόλου
  3. πως γίνεται το debugging
  4. πως κάνουμε monitor μια εφαρμογή που τρέχει

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

Το live coding τελείωσε μετά από ένα demo για deployment των native images μιας Quarkus εφαρμογής σε kubernetes όπου φάνηκε πως η εφαρμογή κάνει scale ανάλογα και με το traffic πως προσαρμόζεται στα traffic bursts.

Μετά από ένα διάλειμμα για καφέ, ακολούθησε το workshop. Σε αυτό η κάθε ομάδα θα δοκίμαζε να φτιάξει μια εφαρμογή με το Quarkus με ελεύθερο θέμα. Μπορούσε είτε να κάνει ένα toy project για να δει πως δουλεύει το framework, είτε να δοκιμάσει ένα έτοιμο tutorial, είτε να δοκιμάσει να κάνει port μια υπάρχουσα spring εφαρμογή είτε να δοκιμάσει να φτιάξει μια νέα από την αρχή.

Σε όλη τη διάρκεια του coding, είχαμε ελεύθερη συζήτηση ανάμεσα στους παρευρισκόμενους. Ήταν μια χαλαρή κουβέντα από αυτές τις ωραίες που γίνονται όταν οι developers έχουν όρεξη για κώδικα και πάρλα. Μιλήσαμε για πάρα πολλά θέματα σχετικά με το Quarkus και το java οικοσύστημα αλλά και γενικότερα για διάφορα επαγγελματικά θέματα του κλάδου. Φυσικά σε όλη τη διάρκεια λύθηκαν απορίες σχετικά με τις εφαρμογές που αναπτύσσονταν εκείνη την ώρα και όλες οι ομάδες είπαν την άποψη τους για το framework και τις εντυπώσεις τους από την χρήση του.

Στο τέλος του workshop ακολούθησε pizza και networking και κληρώθηκαν δύο άδειες για το IntelliJ προσφορά της Jetbrains. Το ραντεβού ανανεώθηκε για την επόμενη φορά με περισσότερη java.

Join JHUG

Μπορείτε να μαθαίνετε τα νέα του JHUG, να συμμετέχετε και να ανταλλάξετε ιδέες μέσα από τα κανάλια μας:

Τα νέα για τα meetup και τις άλλες εκδηλώσεις δημοσιεύονται σε όλα τα κανάλια αλλά οι ενδιαφέρουσες συζητήσεις είναι στο slack. Αν δεν είσαστε εκεί, ζητήστε πρόσκληση.

Και μετά και μετά;

Το επόμενο meetup μας θα γίνει στις 11 Νοεμβρίου. Έχουμε διαλέξει 2 πρακτικά θέματα και οι ομιλίες προβλέπονται πολύ ενδιαφέρουσες. Μέχρι τότε, keep coding.

new Season(“2019-2020”)

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

Την σεζόν 2018-2019 καταφέραμε να διοργανώσουμε 5 meetups πάντα με τη βοήθεια των μελών μας και την ευγενή χορηγία εταιριών που αγαπούν την java. Τα meetups αυτά, με τους τίτλους των ομιλιών, τον χορηγό και link στο blog post ήταν:

  1. Σεπτέμβριος 2018 με τη χορηγία της Accenture
    • An overview of IntelliJ IDEA
    • Microservices architecture in action
  2. Οκτώβριος 2018 με τη χορηγία της Eurobank
    • Getting (a bit) familiar with Data Science
    • Java is still free
    • Notes on Java security
  3. Δεκέμβριος 2018 με τη χορηγία της Intralot
    • High performance asynchronous transaction orchestration with Java Reactive frameworks
    • Java puzzlers
    • JUnit 5
  4. Φεβρουάριος 2019 με τη χορηγία της Atos
    • Hands-on TDD
    • Improve the quality of your software in 6 steps
  5. Απρίλιος 2019 με τη χορηγία της Blueground
    • Testing Anti-patterns
    • Introduction to Quarkus

Σε αριθμούς η χρονιά μεταφράζεται σε 13 ομιλίες, περίπου 13 ώρες βίντεο — πολλά ευχαριστώ για άλλη μια φορά στον Κωστή Καπελώνη για την εθελοντική και ποιοτική δουλειά του — και αν προσθέσουμε socializing, blog posts κτλ έχουμε κοντά στις 16 ώρες γεμάτες java που τις παρακολούθησαν κοντά στα 500 άτομα. Τα meetups φαίνεται να άρεσαν στο κόσμο τόσο για το περιεχόμενο τους όσο και για την παρουσίαση. Δεν είχαμε αρνητικό feedback για κανένα ομιλητή ή θέμα. Για μερικές ομιλίες είχαμε και πάρα πολύ θετικά σχόλια και μάλιστα ειπώθηκε ότι ήταν καλύτερες από αντίστοιχες ομιλίες σε δυνατά συνέδρια.

Στα highlights της σεζόν ανήκουν σίγουρα η παρουσίαση του Quarkus σχεδόν ταυτόχρονα με την επίσημη ανακοίνωση του, η ζωηρή κουβέντα που έγινε μετά την ομιλία για τα testing anti-patterns, η ωραία χαλαρή διάθεση όταν λύναμε τα java puzzles και η αμηχανία που νιώσαμε όταν καταλάβαμε απο τη σχετική ομιλία πως το security δεν είναι καθόλου δεδομένο ακόμα και στο ασφαλές(?) περιβάλλον της java.

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

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

  1. οι ημερομηνίες να βολεύουν την χορηγό εταιρεία ανάλογα με τις άλλες δραστηριότητες της
  2. διαθεσιμότητα μεγάλης αίθουσας γιατί συμμετέχουν περίπου 100 άτομα σε κάθε meetup
  3. διαθεσιμότητα ομιλητών για την παραπάνω ημερομηνία

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

Μια λύση θα ήταν να “βολευτούμε” με μικρότερες αίθουσες 30-40 ατόμων. Πολλές εταιρείες μπορούν να διοργανώσουν στα γραφεία τους τέτοια meetup και είναι πολύ πιο ευέλικτες στις ημερομηνίες. Αυτή τη λύση δεν την υποστηρίξαμε γιατί αν και η αίθουσα είναι μεγάλο πρόβλημα εντούτοις δεν είναι το μεγαλύτερο οργανωτικό πρόβλημα!

Την περασμένη σεζόν είχαμε ενδιαφέρον από πάρα πολλές εταιρείες και δυστυχώς μερικές δεν προχώρησαν επειδή το μεγαλύτερο πρόβλημα του jhug είναι η διαθεσιμότητα ομιλητών. Αυτό ακριβώς είναι το σημείο που αισθανόμαστε ότι το jhug έχει μεγαλύτερο δυναμικό. Με βάση το πλήθος των java developers στην Αθήνα αλλά και το status και τη δημοφιλία της java σαν πλατφόρμα θα έπρεπε να έχουμε κάθε σεζόν 20-30 προτάσεις για ομιλίες, αλλά πρακτικά είναι κοντά στις 10.

Το πρόβλημα αυτό το έχουν και όλα τα άλλα meetups. Η εύκολη εξήγηση θα ήταν να πούμε ότι οφείλεται στον ορισμό των ημερομηνιών, στις μέρες, στα εργασιακά ωράρια κτλ. Αυτό δεν ισχύει γενικά παρά μόνο κατά περίπτωση. Ο σημαντικότερος λόγος είναι πως ο περισσότερος κόσμος βλέπει τα meetups σαν συνέδρια και αυτό είναι μια εντελώς λανθασμένη θεώρηση. Για παράδειγμα μερικοί λένε ότι όλη ή σεζόν του jhug ισοδυναμεί με 1-2 μέρες στο devoxx ή στη fossdem. Γιατί να ασχοληθώ αφού θα πάω σε αυτά τα δύο συνέδρια; Για ποιό λόγο να δω το vimeo κανάλι σας όταν όλα τα συνέδρια ανεβάζουν τις ομιλίες;

Μπορούν να ειπωθούν πολλά πάνω στις διαφορές τους αλλά ας μείνουμε στη μία και σημαντικότερη: το συνέδριο έχει συγκεκριμένο πλαίσιο λειτουργίας που το θέτουν οι διοργανωτές: Ποιός θα μιλήσει, τι θα πεί, πως θα το πεί, ποιός θα το παρακολουθήσει, ποιός δεν θα το παρακολουθήσει και άλλα πολλά. Το meetup αντιθέτως δεν έχει κανένα τέτοιο κλισέ και αυτό τους δίνει μια άλλη δυναμική. Για να φανεί καλύτερα ας το οριοθετήσουμε με τα κλασσικά 5W της δημοσιογραφίας:

  1. Who όποιος έχει ενδιαφέρον για κάποιο θέμα μπορεί να ετοιμάσει μια ομιλία. Δεν είναι απαραίτητο να είναι expert στο θέμα, ούτε να έχει εμπειρία με αυτό. Η εμπειρία στο αντικείμενο δεν εξασφαλίζει πάντα μια καλή ομιλία και το αντίθετο.
  2. What όποιο αντικείμενο θέλει. Δεν είναι απαραίτητο ούτε να είναι buzzword, ούτε να πουλάει, ούτε καν να είναι χρήσιμο. Μερικές ιδέες
    • παρουσίαση ενός δημοφιλούς framework
    • evaluation μιας νέας τεχνολογίας
    • παρουσίαση ενός προσωπικού github project
    • παρουσίαση ενός βιβλίου, ενός blog post, ενός youtube βίντεο απο μια ενδιαφέρουσα ομιλία
    • advanced tutorial για μια τεχνολογία
    • java fun, puzzles, snippets, pitfalls
    • java vs go, ruby, js, python, scala etc
    • community matters όπως license, πτώση της java στο tiobe index, microsoft and java κτλ
    • γενικά θέματα όπως open source, licenses, privacy, remote working κτλ
    • τρόπος οργάνωσης της ομάδας του στην εταιρεία που δουλεύει
  3. When μακάρι να μπορούσαμε να κάναμε meetup και κάθε εβδομάδα
  4. Where η αίθουσα είναι μεγάλο πρόβλημα του jhug
  5. Why γιατί η συμμετοχή και η προσφορά είναι θεμέλια της προόδου. Υπάρχουν μηχανικοί που κάνουν και τα 2 απο την εργασία τους ή απο συνέδρια ή απο προσωπικά sites ή με κάποιο άλλο τρόπο. Αλλά σε κάθε περίπτωση για να υπάρξει πρόοδος και για κάθενα ξεχωριστά αλλά και για το community χρειάζεται και συμμετοχή και προσφορά. Είναι πολύ πιο δύσκολο αλλά και ωφέλιμο να ετοιμάζεις μια παρουσίαση για ένα θέμα από το να παρακολουθήσεις 4. Το ίδιο ισχύει για γράψιμο vs διάβασμα και για κάθε είδος και τρόπο δημιουργίας.

Με αυτές τις σκέψεις ξεκινάμε τη νέα σεζόν με ακόμα περισσότερη java. Σύντομα θα ανακοινωθούν οι ημερομηνίες για τα πρώτα meetup και οι πρώτες ομιλίες. Ελπίζουμε να περάσουμε καλά, να ευχαριστηθούμε java και να ανταλλάξουμε ωραίες ιδέες και θετικά vibes.

Join JHUG

Μπορείτε να μαθαίνετε νέα, να συμμετέχετε και να ανταλλάσετε ιδέες και σχόλια στα κανάλια μας:

Τα νέα για τα meetups και τα διάφορα events δημοσιεύονται σε όλα τα κανάλια αλλά οι ενδιαφέρουσες συζητήσεις είναι στο slack.

JHUG meetup April 9th 2019

The April meetup was sponsored by Blueground at the Impact Hub in Psyri, Athens. Apart from leasing the space, Blueground also kindly offered pizzas and beer for all the attendees.

Kostis Kapelonis on behalf of JHUG welcomed the participants with an urge. This season JHUG has many proposals from sponsors for meetups but the speakers are limited. He urged people to do talks on all topics regarding java and/or the jvm. JHUG is open to all speakers and topics and most importantly the members of JHUG throughout its lifetime — it is the oldest Greek meetup founded in 2001 — have proved that they respect every speaker regardless of the topic, the presentation skills or the content level.

After that Stratos Pavlakis VP of Engineering at Blueground presented the company, what they do and their engineering culture. It was of great interest when he described that the company started as an operations company but eventually had to evolve into a tech company to handle the increasing scale. Moreover Stratos as a co-organizer of the GreeceJS meetup added some useful thoughts on the topic addressed by Kostis before him.

The meetup then continued as always with two talks and a beer-pizza-networking break.

Testing Anti-patterns

The first talk was from Kostis Kapelonis about software testing anti-patterns. Kostis is a firm believer in that testing done right gives great value to a code base. He has given many presentations on this topic and has written a book about it.

Wikipedia defines an anti-pattern as a common response to a recurring problem that is usually ineffective and risks being highly counterproductive. So, imagine a talk that will tell 100 attendees they do testing wrong, combine it with the lively and provocative presenting style of Kostis and you get the context of the talk.

The talk was a live commentary on a revised edition of a popular blog post by Kostis. After giving an overview of how testing should be done properly he defined and explained the following list of anti-patterns.

  1. Having unit tests without integration tests
  2. Having integration tests without unit tests
  3. Having the wrong kind of tests
  4. Testing the wrong functionality
  5. Testing internal implementation
  6. Paying excessive attention to test coverage
  7. Having flaky or slow tests
  8. Running tests manually
  9. Treating test code as a second class citizen
  10. Not converting production bugs to tests
  11. Treating TDD as a religion
  12. Writing tests without reading documentation first

For each one of them, he presented the topic in detail, refuted the arguments that consider it a best practice and explained why it is an anti-pattern. In almost all of the topics there were questions from people who either did not consider it an anti-pattern or were not convinced by Kostis arguments. He answered many questions and eventually the talk went well beyond the time limit so the organizers had to end it.

The talk was very interesting, easy and enjoyable to follow and thought provoking as expected, and promised, by Kostis. The video will go live soon on our vimeo channel and it is highly recommended. The original blog post is also worth reading. The topic of course is very large and cannot finish in one talk. As a closing note we repeat some of the general advices Kostis gave for proper testing.

  • Automate, automate, automate
  • A developer must be able to run the whole test suite easily, fast and out of the box for every new code base he is involved.
  • If tests do not give value to business they are useless even if they are correct and well written.
  • When in doubt what to test, monitor the state of production

Introduction to Quarkus

The second talk was about Quarkus a new, very promising framework from Red Hat. The project is very new, released about a month ago so this talk was a JHUG exclusivity. Moreover, the speaker Georgios Andrianakis is a contributor to the project so he has a very good understanding of the design tradeoffs used for quarkus.

He started the talk by setting the context for quarkus, why a new framework was needed and where it stands in the java ecosystem. The problems it addresses are with java in production and mostly with cloud deployments. In such environments characteristics of java like large memory footprints, slow startup times, class loading issues etc are drawbacks and hinter the adoption of java. These are relics of the era where java was used in inhouse clusters and the application servers took full control of the machines. He pointed out that production environments are dynamic in essence, configuration changes, code changes, dependencies changes, and thus a new more flexible way was needed to address these issues.

Then he described Quarkus which is composed of 2 things.

First, a java stack for development that includes well established frameworks like hibernate, Resteasy, eclipse microprofile, netty, kafka, vert.x (enter reactive) and many more are on the way. All these are used by java developers daily and thus if you adopt quarkus you are not forced to learn something new but you can continue to use the things you know and trust.

Second, a runtime environment based on GraalVM which powerups your application and gives you smaller memory footprint, very fast startup times, live reloading of code and configuration and if you choose, a native executable. Note that quarkus applications can still run on the JVM if you choose but in this case you lose many of quarkus benefits.

Of course as you understand quarkus is much more than assembling a jar from the above frameworks and running it on GraalVM. It does some hard work both during the build time and during the runtime to ensure that you get the benefits of the platform. During build time it does static code analysis to eliminate dead code, remove unused classes, reduce reflection calls, all of which reduce the memory footprint and fasten application startup. During runtime it does not do aggressive classloading or reflection or dynamic proxied or use agents like JMX as this incurs additional costs that are maybe insignificant for in house deployments but are very expensive for cloud deployments. In a nutshell you must write code the quarkus way. If you use the supported frameworks it is very easy and straightforward. If you don’t then you must either wait till they are supported or do some good code reviews to make your app quarkus ready.

After the presentation Giorgos gave a live demo that demonstrated build times, startup times, live reloading, native executables and finally support of jpa. It was a very good demo as he was very confident in quarkus and was eager to ask the audience “what do you want to run next?”

The Q&A session was about quarkus support, mostly how well it supports spring, a framework that heavily relies on reflection and dynamic proxies and how ready is quarkus for production. Giorgos suggested adoption of quarkus, it is very mature, not production ready yet but it is actively developed and it will be ready for production soon. As for spring support it is improving, some of its parts work fine, but the full framework is not quarkus ready yet.

That was an excellent talk and helped us get a clear view of quarkus beyond the buzzwords. Those that missed it should definitely see the video of the talk when we release it in our vimeo channel. Also Giorgos will give another talk for quarkus at the May Kubernetes meetup

Aftermath

Of course besides the talks there was a lot of networking between our members, old and new, and a lot of ideas exchanged. The positive energy that such meetups give to the attendants is enormous.

In this meet up we also made a draw for two IntelliJ licenses a gentle offer of Jetbrains and two tickets for Voxxed Days Athens a gentle offer of SoftConf. They are both firm supporters of JHUG and we thank them a lot.

Join JHUG

You can learn news about JHUG, participate and exchange ideas and feedback via our channels:

News about meetups and other events are published in all these channels but the interesting discussions are on slack. If you are not there, consider joining.

See you at the next meetup. Until then keep coding.

JHUG meetup December 3rd 2018

The last meetup for 2018 (meetup.com) was sponsored by Intralot at the Impact Hub in Psyri. Apart from leasing the space, Intralot also kindly offered pizzas and beer for all the attendees.

A little more than 100 people attended the meetup, many new faces among them. For those who couldn’t attend, we recorded the meetup, so either revisit this post for the videos, or subscribe to our Vimeo channel.

The meetup kicked off with Thomas Pliakas, from the JHUG team, who welcomed the attendants on behalf of the group. As Thomas stressed, JHUG exists thanks to people who volunteer to present, so if there is something you like and use and want to share your passion about it, submit a presentation proposal to our call-for-presentations form. Also, we have an active Slack channel, check the instructions in the box on the right side of this post to get an invitation.

Afterwards, Irene Dimou took the stage and presented what our host, Intralot, works on, how it is organised, and how much it has grown over the years, now employing over 700 people in Greece and many more worldwide. With the economy crisis still going strong, it is very consoling to see that there are – mostly IT – companies that build expertise and thrive internationally.

High performance asynchronous transaction orchestration with Java Reactive frameworks

The first presentation was by Nikos Papadopoulos and Vasilis Petropoulos, both Engineers at Intralot. They started by presenting the special requirements their business brings with it: multitude of clients, large numbers of transactions with spikes in traffic, low response times, regulations for auditing and logging, penalties for mishandled transactions, runtime configurability. A practical aspect that raised some eyebrows was that their traffic may go up several times in a matter of minutes, and then go down again. Their solution needed to scale that fast, and then scale down so as to keep the bill low. They then discussed how the Reactive Manifesto and Microservices with Docker and Kubernetes are a good fit for them.

Nikos and Vasilis then presented the toolset they chose in order to accommodate their needs:

  • Netty: it’s significantly more lightweight than Tomcat, event-driven and its thread model is customizable
  • Spring Boot 2 with Spring 5: A mature framework with easy DI configuration and libraries for everything, produces a single containerizable jar file
  • Spring Webflux: Spring’s reactive web framework, which can sit on top of Netty, providing mechanisms for back-pressure, filtering, sorting batching etc.
  • Spring Actuator: Spring’s library that provides real-time information and metrics on the status of our application
  • Jersey: The popular JAX-RS implementation, which can be used to generate Swagger docs for our APIs
  • jBPM: A business process modelling framework to comceptualize, design and develop service flows

Nikos and Vasilis went on to discuss the challenges they faced implementing their solution, which both technical (i.e. making all the tools work together) and non-technical (introducing a paradigm shift to the asynchronous world for their team). Their implementation, which is in production as you are reading this, met the requirements they had set initially, achieving the elasticity and resilience their clients needs.

A final point we spent some time discussing was the way they are achieving eventual consistency in the distributed world. For each flow, they maintaining a reverse one that reverts it. When kicking off complex operations, they are keeping a log of the list of sub-operations (flows) that need to take place, and if one of them fails, they execute the reverse flows for all executed flows. Although they didn’t use the word, this sounds like the Saga pattern.

You can find the presentation here

Java puzzlers

George Kalfopoulos from Trasys (now part of NRB) prepared 10-minute Java puzzlers session. After some head-scratching and facepalms, the quickest answers won two books we gave away. This small session was so engaging we are very keen to repeating it in the near future.

JUnit 5

The second talk was by our own Thomas Pliakas on JUnit 5. Thomas took the risk and did a live-coding session, fortunately everything worked out.

Thomas started by presenting how JUnit is organised at a high level, supporting both new tests (Jupiter) and old JUnit 4 tests (Vintage).

He went on with the new annotations. Some of them are just a rename of corresponding JUnit 4 annotations. Some others though, are new, for example the @DisplayName annotation that can be used to give a human-readable name to a test method, different than the one infered from the method name. Similarly, JUnit 5 comes with its own list of Assumptions (“lesser” assertions).

An important addition is the Conditional Test Execution. Apart from the baked-in list of conditions (i.e. running only on Linux, or on Java 11, or if environment variable FOO is set to BAR), one can write their own conditions.

Another feature is Tags. By tagging tests, you can run specific subsets of your tests.

Other (seemingly less important) features exist, such as nested tests, test interfaces and default methods. We didn’t see much value in them when discussing them, but you may. Let us know if you do.

Finally, JUnit 5 comes with first class support for repeated and parameterized tests, as well as parallel test execution, which promises to make our builds faster.

For additional resources, you can check the sample JUnit 5 projects on Github, as well as Thomas’ junit repository.

JHUG meetup October 30th 2018

Java is famous for the uptime of applications and our meetup certainly meets the challenge. The October meetup was held last Tuesday and it was very interesting.

The place was the premises of Eurobank one of the largest Greek banks. Eurobank provided their auditorium, a very large one indeed, but our meetup scales well and there were about 100 attendants that made the large room seem smaller. Our hosts also provided the treats: coffee, beer and pizzas, the standard essential nutrition for software engineers.

Kostis Kapelonis welcomed the attendands on behalf of JHUG. After a quick recap of the schedule he made a call for talks for our following meetups reminding one of the principles of our group: It is not necessary to be an expert to give a talk, all is needed is a little curiosity and work to tackle a topic and a lot of good will to share your findings. Most, if not all, speakers of JHUG are not professional speakers but give talks for the shake and fun of it and this has worked well so far.

Mr Philip Anastasakos introduced Eurobank to us. The bank is committed to all things digital providing a large portfolio of digital services to their customers. But for Eurobank digital also means Java as they are both committed and satisfied from the platform. The IT department of the bank has great plans for 2019 and they are working to create a talent pool to help them achieve their goals. Anyone interested in participating can contact Philip via LinkedIn.

And now the major part, the talks.

Getting (a bit) familiar with Data Science – Ioannis FoukarakisSlides

The first talk was by Ioannis Foukarakis a senior engineer at Yilu . He decided to make a introductory talk to the topic to lay the foundations for it. He explained what is data science, what is not data science, common traps and pitfalls. Then he presented an application, a spam filter, and how he attacked the problem as a data scientist and the solution he devised using Apache Spark. Finally he concluded with some clarifications about the vocabulary of the field like machine learning, supervised – unsupervised learning, deep learning etc. It was a very good and well paced talk that certainly answered many questions about data science.

This talk was exactly what JHUG is about: Share knowledge, good will and challenges.

Java is still free – Spyros AnastasopoulosSlides

The second talk was a lightning one and lasted about 10 minutes including the Q&A sessions. The topic was the new commercial license of the JDK by Oracle and the confusion and controversy it has generated among the users. The talk was like a journalist’s article gathering facts from many sources on the internet. The slides contain the most important references and the reader should consult them to form his own opinion on the issue. For those who prefer to see front pages and not dig deep in the news just one hint: Follow the AdoptJDK project.

Lightning talks are not frequent in JHUG but this need not be the case. A lightning talk is very easy to prepare and deliver. Many large conferences have sessions for lightning talks and they devote a window of an hour to 5-6 of them. It would be interesting to try something like that in a following JHUG meetup. The submission window for the next meetup is open and accepts lightning talks.

Notes on Java security – Dimitris GlynosSlides

The third and final talk was about Java security. It was delivered by Dimitris Glynos of Census Labs a company that provides IT security services. One of their services is source code audits and he presented to us some of his experience with Java. He presented security holes originated by bad exception handling, race conditions, insecure APIs, insecure serialization of objects and insecure third party components. He introduced each case as a Q&A game with the audience and then presented the detail of the problem and potential solutions. Both the pace of the talk and the quality of the material made this talk very appealing to the audience. The slides are also very well written and will repay study.

Security is a bit weird. You think you have a secure system, then someone shows you a hole and even it is in front of your eyes you still can’t believe how such a thing was introduced in the code base. That talk helped us to start looking not just for bugs but for security holes. The difference is not subtle, it is important:

  • Bug: A user does something unexpected and crashes your application
  • Hole: A user does something unexpected and it is no longer your application

Aftermath

Of course besides the talks there was a lot of networking between our members, old and new, and a lot of ideas exchanged. The positive energy that such meetups give to the attendants is enormous.

In this meet up we also made a draw for one IntelliJ license a gentle offer of Jetbrains. We also shared some sticker with our logo a gentle offer of Thomas Pliakas.

At the meetup page, here, there is a photo gallery from the meetup.

We are looking forward to our next meetup on 3 December. Details will be announced in our official channels. Stay tuned.

Finally we would like again to thank SoftConf and Voxxed Days Athens for the donation of a wireless Shure microphone that we use to record the questions of the audience. Such acts are a great boost for local meetups.

Join JHUG

You can learn news about JHUG, participate and exchange ideas and feedback via our channels:

Slack
Twitter
Meetup
Blog

News about meetups and other events are published in all these channels but the interesting discussions are on slack. If you are not there, consider joining.

See you at the next meetup. Until then keep coding.

Παρουσιάσεις και βιντεο από ομιλίες

Το Java Hellenic User group ηταν από τις πρωτες ομάδες που εφτιαξε καναλι με βιντεο και αρχισε να καταγραφει σε βιντεο ολες τις ομιλιες. Ετσι εχουμε μια μεγαλη συλλογη από πολλες παρουσιασεις διαθεσιμες ανα πασα στιγμή για οποιον ενδιαφερεται να μαθει τι έγινε στις προηγουμενες συναντήσεις μας.

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

Θα θέλαμε να ευχαριστησουμε ιδιαίτερα την εταιρια SoftConf και το Voxxed Days Athens, για την ευγενικη χορηγία τους ενός ασυρματου μικροφώνου Shure. Θα χρησιμοποιήσουμε το μικρόφωνο για να καταγραψουμε τις ερωτήσεις του κοινού που γίνονται μετά από καθε ομιλία ετσι ώστε το τελικό βιντεο να εχει και την παρουσιαση αλλα και το τμήμα ερωτήσεων

new Meetup(“Sep 2018”)

It was a rainy and windy day (September 27th 2018) when JHUG started the meetups for the new season 2018/2019. We, the organizers of JHUG, were a bit anxious whether people will attend. It was the first meetup and the weather was bad. However it was an excellent start. Java apps may suffer sometimes from slow booting but Java meetups do not have such problems. We estimated that about 100 people, most of them newcomers, attended the meetup. This is very encouraging and sets a high bar we will try to cross.

The meetup was held in the premises of The Hub Events and was sponsored by Accenture. Markos Fragkakis welcomed the attendants on behalf of JHUG and wished for a good season with a lot of Java. He then passed the word to Nicolas Moschatos the HR Manager of Accenture. He welcomed the JHUG members and stated Accenture’s satisfaction and commitment to Java technology, their support for JHUG and their pursuit to collaborate with talented engineers. A team of HR stuff and engineers were active during the meetup discussing career opportunities with the attendants.

After the introductions the talks started.

An overview of IntelliJ IDEA – Zisis PontikasSlides

Zisis chose to talk about the latest version of the best and most popular IDE for JVM based platforms. He did a quick chronology of IDEA and the milestones of its development. Then we proceed to do live demos including

  • project organization
  • build tools integration
  • git integration
  • code refactoring
  • code test and coverage
  • spring boot integration
  • live templates

It was a big task for the 45 minutes but he did fine. New users were surely challenged to have a look at IDEA while old user learned some new tricks and felt justified for the time they devoted to learn the tool. You can watch the full video below.

Break

After the talk there was the essential break for food, beer and networking in no particular order of significance. This time is was very important because the newcomers were many and a lot of acquaintances were made. Also there was a lot of ideas and suggestions for future meetups. During this break there was also a draw for 2 IDEA ultimate licenses offered by JetBrains.

Microservices architecture in action – Giannis KormarisSlides

The second talk by Yannis was about software architecture. Microservices are trending these days but still there isn’t an acceptable definition of what constitutes a microservices architecture. This talk contributed to the ongoing dialogue. Yannis presented a general overview of what is such an architecture and when applicable he become very specific with concrete examples from projects he had worked on. It was very valuable that all examples were from personal experience and that was justified in the Q&A section(more later). The topics addressed were:

  • monolith vs microservices
  • complex business domain
  • services API
  • business capabilities
  • scalability
  • error handling
  • distribution of services
  • deployment

and much more.

Technology wise he showed a bias towards RabbitMQ and OpenShift, which he called Kubernetes on steroids, and he discussed a bit about their technical merits.

This talk concluded with a good Q&A section in which proponents of monolithic apps and monolithic packaging argued about code structure, distributed transactions, performance penalties, easiness of testing etc. Surely, if the time hadn’t passed we would have stayed and talked about these the whole night. You can watch the full video below.

The hidden talk

Yannis mentioned in his talk that he attendend a JHUG meetup some years ago and was inspired by a talk by Kostis Kapelonis Package By Feature. He considered the organization proposed there a good template for organizing code for a microservice. You can find the original talk at JHUG 2010, along with a revised version of it at Oracle Java Day 2014 here

.next()

To conclude it was a very interesting meetup and a very promising start. We are looking forward to worthy followups. All talks were recorded in video and will be released soon for those who weren’t able to attent. At the meetup page, here, there is a photo gallery from the meetup.

.join()

You can learn news about JHUG, participate and exchange ideas and feedback via our channels:

News about meetups and other events are published in all these channels but the interesting discussions are on slack. If you are not there, consider joining.

See you at the next meetup. Until then keep coding.

This post was written by Spyros Anastasopoulos