Sunday, March 27, 2016

The Java Hellenic User Group..είμαστε ακόμα εδώ - 2 April 2016 @ Orange Grove

Νομίζω δεν θα ξεπεράσω ποτέ το 'είμαστε, έχω τρέξει αρκετά (όπως και άλλοι) για την μικρή αυτή την κοινότητα στην Αθήνα και την πονάω και ενδιαφέρομαι ακόμα.  Είναι ιδιαίτερη στιγμή γιατί έχουμε ουσιαστικά το  πρώτο JHUG event το οποίο δεν το οργανώνει 100% η αρχική ομάδα του JHUG. Γι' αυτό όσοι είναι ακόμα στην Ελλάδα και συγκεκριμένα στην Αθήνα στις 2 Απριλίου, περάστε μια βόλτα απ' το Orange Grove. Πληροφορίες εδώ.

 Καλά να java-ρετε όπου κι αν είστε!

Sunday, March 20, 2016

Is your codebase smelly? Find out with the help of SonarQube and the Smells plugin!

In the project which I recently joined, I discovered a set of annotations, (part of the code) that eventually did not add any functionality but they were 'marking' classes or fields  as a potential bad implementation, or as a potential case that may need to be reworked. The original author, had created a very elegant way (imho) on annotating parts of the code, for things that needed to change or to be improved. This mechanism was mostly targeting less senior contributors so they improve and at the same time, it was marking 'smells' in the code that unfortunately were not a 5 minute fix and might need a bigger change or discussion around it.

@TechBebt ("rework this method, so that takes care this business concern")
@Refactor ("Use the proper data structure for this operation, see LinkedList");
public void doSomething(String aParam){

In the past I used to work in projects where this kind of code-review and comment process was performed using our famous following comments. You might have some of those in your project I guess.

// TODO 
// FIX-ME

I really liked the annotation approach, so since I am new, I started searching for them all over the place. When I found something that I could fix, I followed the annotation's description field, and I could provide a small bug fix. It seemed to be a bit cleaner than the long sentenced TODO items. The problem with the above annotations is you will bump into them, only if you happen to see them, or search for them in your IDE, where TODO or FIX-ME usually show up in IntelliJ's or Eclipse's task (todo) list.

At the same time, I proposed to install Sonar for the team and eventually monitor the 'health' of our code base improving the exposure of this information to a wider audience. The more you expose your code problems to the team, the easier you make this information to anyone, the more chances you have members to contribute fixes rather than dictating it as a process.

While I was configuring Sonar, I discovered the Qualinsight Smells Plugin, along with their maven library. Eventually it is a library that contains similar annotations to those I discovered in the project, so you can add it as a dependency in your project and start 'marking the smells'. These annotations then can be scanned by the related Sonar Plugin, so when you code base is scanned, in the final Sonar report, you can have a list of  all the annotated 'Smells'. You can go through the simple documentation on github. A smell annotation looks like this: 

@Smell(minutes=10,reason="This class should be redesigned in order to", 
type=SmellType.BAD_DESIGN)

You have to indicated
  • an estimate of time for a potential fix.
  • the reason, actually the description of the smell.
  • and a set of predefined types, in order to specify what kind of smell it is. The provided list is  sufficient enough to cover most of the cases.
You can find an example of project configuration here.

When the Sonar report is ready, the smells are going to be listed , as the image below illustrates.



I really liked the overall approach. Despite the fact that our ultimate goal is eventually to fix the code and only 'annotating' defects, I still think it is a very elegant idea. Especially when your team consists of less senior developers or 'devs' that they don't pay attention to things like quality and maintainability of the code base, it is a very 'constructive' and elegant way to bring forward these concerns and with the help Sonar, increase their exposure. It is also a team effort, identified Smells are not predefined rules from findbugs or PMD, they are human identified  points, there might cases where the code is fine, but it does not implement correctly the business.  Sonar enables non technical stuff to eventually have access to the 'state' of the project, so yet another way the product owners/ managers to a better understand about 'technical debt'.

So...is your code base smelly? If yes do something about it. Nobody likes smelly code.

ps) All credits to M.Pawlak  (@QualInsight) for his work on this library.

Sunday, March 13, 2016

KubeCon EU - 2016 - London, short review #kubecon #kubernetes




I 'fell in love'  with Kubernetes, a year ago, during a day job research initiative around containers, micro-services, orchestra-tors and platforms as a service frameworks. I'm not a sysadmin, neither an OPs guy, I am a developer. I like to write code, design software, improve them, refactor them, re-architecting them.  From the developer's perspective kubernetes is eventually the right technology  (IMHO) to abstract many of the challenges of a micro-services based architecture, at the same time is easy to learn at least it's main idea's- without being sysAdmin Hulk.  Last summer,  when the first KubeCon tool place in California, I was telling to my self ' Man I wish I was there, it would be great to be in a conference for a technology that is in it's infancy and is picking up'. A few months later, KubeCon EU is announced and I registered no matter what.

A few months forward, I am sitting happy enough on a big room, along with other Kube-nauts, waiting for the keynote talk by Kelsey Hightower, who I was very happy to meet in person and ask about the latest details of his book, which I've done a early review - a couple of months ago. By the way he is a great presenter, fun to watch and very honest towards the maturity and simplicity of Kubernetes. I really liked statements like the following from his talk - which  show that the people behind pushing kubernetes are pragmatists and not unicorn riders!


 
 It happens that KubeCon 2016, happened in a very intense period of my life, it was only 10 days that I have fully relocated to London, so everything was so.... 'new?' maybe.

Due to my developer background, I was mostly interested on use cases talks, rather than specific technical updates on the framework, which anyway I follow on the github page and the relevant slack channel.

I have to note that, the introduction of  Ingres, Deployments  and deamon sets, were very nice addition to the recent versions - and they are going to simplify the workload of many teams embracing kubernetes. My favorite part of Kubernetes is anyway the combination of Services/ Replication Controllers and load balancers (ingres) and how I can apply it on top of any legacy - statically design deployment.

It was more than obvious, that Kubernetes is picking up on adoption in various and different organizations, we saw examples from the New York Times, the Met Office Informatics Lab and the UK home Office (which by the way has a very impressive github page). Of course we had talks from RedHat which is already embracing Kubernetes through OpenShift. I think it is matter of time, that we are going to see even more examples in future kubecons and then the use cases track is going to be even bigger. 
 
Kubernetes is eventually picking up in the 'local' scene as well, and my bet is that in a year or so the examples and demand for 'related' skills is going to be  higher, I kind of did my own research while job searching here in the UK, and in many companies still the idea of 'orhecstrators or Platforms as a Service' is just an idea, or a research initiative, while many companies still evaluate containers, micro-service based solutions or..they live happy enough leveraging Amazon services :).

 
The event planning and execution was very nice, so congrats to the conference organizers. The premises of CodeNode in London were more than sufficient for that amount of people and the number of sessions. Maybe as a proposal for future KubeCons in the future is to consider adding some live streams? Also, I would love to see more sessions on use cases but with real 'code' and examples on the specifics of the deployments. In some cases I can understand that this was not possible, for example use cases like the UK home office, could not easily provide specific details. In some other cases a more 'technical' oriented session would be even more useful.

Last but not least, finally I got to get a proper Kubernetes sticker for my laptop!!! Yaay! So go Kube and I trully hope that soon enough I will be able to see kubernetes in my day to day work or projects.

Tuesday, March 08, 2016

Mind the gap



Όταν  το καλοκαίρι του 2004 αποχαιρετούσα  το όμορφο Canterbury (Kent) όπου και πέρασα μια αρκετά όμορφη χρονιά εντελώς διαφορετική απ' τα χρόνια του πτυχίου στα κατάμαυρα Midlands, δεν πίστευα ότι θα γύριζα για να μείνω μόνιμα. 12 χρόνια αργότερα, επέστρεψα και μάλιστα συνειδητά, αφού είδαμε και τι 'παίζει' σε κάποιες γωνιές της κεντρικής Ευρώπης.

Το Λονδίνο δεν είναι μια εύκολη πόλη, προφανέστατα δεν είμαι ο πρώτος που το γράφει ή το λέει. Άλλο όταν το ζούσα σαν φοιτητής - επισκέπτης, άλλο τώρα. Βέβαια το Λονδίνο μπορεί να γίνει αρκετά βολικό και ωραίο, ή σε έναν βαθμό 'βολικό' χωρίς αυτή την ενέργεια και το βάρος που σου ρίχνει, αν είσαι τυχερός και επιλέξεις να ζεις σε μια βολική και όμορφη περιοχή. Απ' τα δυτικά προάστια της Αθήνας, στα βόρειο ανατολικά του Λονδίνου, καλώς ήρθατε στο Hackney και μια τζούρα Islington και μία τζούρα Angel. Μπορώ να πω ότι δεν θα μπορούσαμε τηρουμένων των αναλογιών και δυνατοτήτων μας να βρούμε πιο βολική και ωραία τοποθεσία να ξεκινήσουμε το ταξίδι μας σε αυτή την χώρα. Περπάτημα στην δουλειά μέσα από τα κανάλια της περιοχής, περπάτημα πίσω, περπάτημα για το super market (αν και μόλις σήμερα έκανα την πρώτη μας δοκιμαστική παραγγελία στο Ocado), περπάτημα για να πας 2 σταθμούς πιο πέρα και να μην πάρεις το tube, περπάτημα στο κέντρο. Γενικά περπάτημα το οποίο δεν είναι κακό.

Δυστυχώς, παρόλο που κάνω το tour της Ευρώπης, ακόμα δεν έχω πέσει σε σπίτι που να έχει πραγματικό fiber@home. Οπότε όπως και στο Λουξεμβούργο, έτσι κι εδώ ADSL, ελπίζω τουλάχιστον το πακέτο των καναλιών της sky να αξίζει (μην βαράτε ήταν αρκετά φτηνή προσφορά). Όσο για το κινητό, έκανα μάλλον λάθος, επέλεξα την 3.co.uk με το unlimited data plan της, αλλά μέσα σε κτήρια δεν έχω σήμα. Κάπως σώζεται η κατάσταση γιατί έχουν μια εφαρμογή που ουσιαστικά σε συνδέει μέσα από VOIP κανάλι, αρκεί να έχεις πχ στην δουλειά Wifi.

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

Για την ώρα γραφειοκρατικά τα έχουμε πάει καλά  οι διαδικασίες προχωράνε as expected - με ίσως το πιο σημαντικό να γραφτείς στο αντίστοιχο ΙΚΑ(?),  National Insurance Number. Πολλές από τις υποχρεώσεις του σπιτιού, βασικά όλες, δεν χρειάστηκε να πάω κάπου για να τις ολοκληρώσω - έγιναν online με συμπλήρωμα κάποιας φόρμας και βαριά βαριά ένα τηλέφωνο, όπως πχ να παζαρέψω ένα καλό deal για internet και tv. Μάλιστα η εγγραφή στον δήμο και η πληρωμή των πρώτων δημοτικών τελών  (council tax) έγινε σε 2 μέρες. Το βράδυ έκανα την αίτηση την επόμενη μέρα, ενεργοποιήθηκε ο λογαριασμός και μου δόθηκε αριθμός πληρωμής. Το σύστημα είναι απίστευτα efficient στο να στα παίρνει, ελπίζω να είναι αντίστοιχα καλό και στο να σου παρέχει πράγματα / υπηρεσίες.

Η εμπειρία στην δουλειά είναι ενδιαφέρουσα, δεν έχω ξανα-δουλέψει σε τόσο μεγάλο οργανισμό - πολυεθνική. Αρκετά ως υπεραρκετά συστήματα, πολυπλοκότητα, μεγάλα deployments, σύνθετες τοπολογίες. Ομάδα 24/7 development, όπου το τελευταίο commit σου είναι ορατό σε κάποιον (ους) στην απέναντι όχθη του Ατλαντικού ή σε κάποια άλλη γωνιά της Ευρώπης. Δεν μπορώ να πω ότι είναι mind blowing ότι βλέπω τεχνολογικά (αν και έχω μια λίστα με πράγματα και τεχνολογίες που θα μελετήσω), παρόλα αυτά είναι αλήθεια ότι πριν γράψεις ένα email, πριν αφήσεις ένα slack μήνυμα πριν κάνεις commit, rebase ή και merge request πρέπει να το σκεφτείς 2 φορές, μιας και όλο και κάποιος θα το δει, θα το τσεκάρει θα σε κάνει challenge. By the way είναι ο δεύτερος οργανισμός που κάνω join (με πρώτη τη Trasys στην Ελλάδα πριν σχεδόν 10 χρόνια που προσπαθούσε να δουλέψει έτσι), που βρήκα έτοιμο, στημένο continuous integration pipeline- από το git push του branch σου μέχρι και το integration test της εφαρμογής. Επιτέλους σοβαρότητα, χάρηκα ιδιαίτερα με αυτό.

Επί της ουσίας καμία δουλειά δεν είναι τέλεια, κανένα project στην πένα (ίσως να υπάρχουν εξαιρέσεις- ιδιαίτερα σε εταιρίες που παίζουν με τον ανταγωνισμό) παρόλα αυτά βλέπεις την διαφορά νοοτροπίας σε ότι έχει να κάνει με βασικά πράγματα τα οποία θα βοηθήσουν το day to day της ομάδας, θα τονώσουν την ποιότητα, ορθότητα και maintainability του project. 

Last but not least, κάτι που με κάνει χαρούμενο που βρίσκομαι εδώ είναι τα πολλά και διαφορετικά event κάθε εβδομάδα για developers. Αύριο μαζί με καλούς φίλους και συναδέλφους από την Ελλάδα, session για Microservices, την Πέμπτη διήμερο google kubernetes conference (το πρώτο στην Ευρώπη και είμαι αρκετά χαρούμενος που θα παραστώ) , την επόμενη εβδομάδα OpenJDK session κάπου άλλου, Java Champions meetup στο κέντρο του Λονδίνο, την ίδια εβδομάδα σε γραφεία της εταιρίας που δουλεύω ανεξάρτητο Agile Developer meetup μετά κάτι άλλο. Δεν σταματάει ποτέ. Νιώθω σαν παιδάκι σε κατάστημα παιχνιδιών δεν ξέρω τι να πρώτο διαλέξω, τι να δω και που να συμμετέχω! 

Βέβαια είναι ακόμα αρχή οπότε βλέπουμε, πάντως είναι μια αρκετά καλή αρχή, ελπίζω να συνεχίσει έτσι (αν και τα τελευταία χρόνια έχω γίνει επιφυλακτικός με τα πάντα ).