<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://fragkakis.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://fragkakis.org/" rel="alternate" type="text/html" /><updated>2026-02-08T19:22:54+00:00</updated><id>https://fragkakis.org/feed.xml</id><title type="html">Markos Fragkakis</title><subtitle>Personal website and blog</subtitle><author><name>Markos Fragkakis</name></author><entry><title type="html">Ανοιχτά δεδομένα στην Ελλάδα</title><link href="https://fragkakis.org/Anoixta-dedomena/" rel="alternate" type="text/html" title="Ανοιχτά δεδομένα στην Ελλάδα" /><published>2026-02-01T00:00:00+00:00</published><updated>2026-02-01T00:00:00+00:00</updated><id>https://fragkakis.org/Anoixta-dedomena</id><content type="html" xml:base="https://fragkakis.org/Anoixta-dedomena/"><![CDATA[<p>Τις τελευταίες μέρες βρίσκω ανοιχτά δεδομένα (είτε ως API είτε ως στατικά dataset), και με πολύ vibe coding και λίγο πείραγμα με το χέρι φτιάχνω visualization, τα οποία μπορείτε να βρίσκετε στη <a href="https://fragkakis.org/projects/">σελίδα των projects</a>. Προγράμματα με ανοιχτά δεδομένα έγραφα από παλιά, αλλά πλέον με το AI είναι πολύ εύκολο να χαλαρώσω ένα βράδυ φτιάχνοντας στα γρήγορα μια σελίδα που οπτικοποιεί κάποιο dataset που βρίσκω ενδιαφέρον.</p>

<p>Με αυτή την αφορμή, θα αφήσω εδώ κάποιες σκέψεις σχετικά με τα ανοιχτά δεδομένα στη χώρα μας.</p>

<p>Για όποιον ψάξει για ενδιαφέροντα dataset για να οπτικοποιήσει, γίνεται γρήγορα προφανές ότι τα ανοιχτά δεδομένα δεν είναι πρώτη προτεραιότητα στην Ελλάδα. Δύο από τις “κεντρικές” σελίδες με ελληνικά ανοιχτά δεδομένα είναι το <a href="https://data.gov.gr/">data.gov.gr</a> και το <a href="https://www.statistics.gr">statistics.gr</a>. Υπάρχουν τα παρακάτω μοτίβα προβλημάτων:</p>

<ul>
  <li><strong>Εγκατελειμένα dataset:</strong> dataset που έχουν δεδομένα μέχρι κάποιο έτος, και μετά σταμάτησαν να τα ανανεώνουν.</li>
  <li><strong>Dataset αντί για API:</strong> κάποια δεδομένα έχει νόημα να ανανεώνονται συχνά (πχ κάθε μέρα), αντί να είναι στατικά</li>
  <li><strong>Ακατάλληλα data format:</strong> Πολλά dataset διατίθενται σε ακατάλληλα format, πχ σε excel, doc ή PDF (συνήθως ένα ανά χρονιά, διαφορετικής δομής), αντί να είναι σε κάποιο format πιο κατάλληλο για επεξεργασία.</li>
  <li><strong>“API” που σερβίρει στατικά δεδομένα:</strong> Ειδικά το data.gov.gr είναι γεμάτο “API” τα οποία απλά σερβίρουν ένα στατικό αρχείο που δεν ανανεώνεται ποτέ.</li>
  <li><strong>Έλλειψη ανοιχτών δεδομένων:</strong> Ίσως το μεγαλύτερο πρόβλημα είναι η έλλειψη ανοιχτών δεδομένων.</li>
</ul>

<p>Γιατί όμως είναι πολύτιμα τα ανοιχτά δεδομένα, ώστε να δικαιολογείται το κόστος συντήρησής τους; Τα ανοιχτά δεδομένα έχουν αναμφίβολα κόστος παραγωγής και συντήρησης. Όμως μπορούν δυνητικά να δώσουν πολλαπλάσια αξία. Αυτό επειδή άνθρωποι μπορούν να χτίσουν επιπλέον αξία γύρω από αυτά (οπτικοποιήσεις, προγράμματα), χωρίς κάποια επιβάρυνση για το κράτος, και να κάνουν προσβάσιμη την πληροφορία στο ευρύ κοινό. Όταν τα ανοιχτά δεδομένα είναι προσβάσιμα σε τόσους ανθρώπους, μπορεί να αξιολογείται η λειτουργία του κράτους πλέον μετρήσιμα και αδιαμφισβήτητα, φέρνοντας στην επιφάνεια παθογένειες.</p>

<p>Έχοντας αυτό στο νου, και επίσης επειδή μου αρέσει η οπτικοποίηση δεδομένων, γράφω μικρά και μεγάλα προγράμματα που βασίζονται σε ανοιχτά δεδομένα της Ελλάδας.</p>

<p>Όχι ότι έχει κάποια σημασία, αλλά μια προσωπική wishlist από ανοιχτά δεδομένα, κατά προτίμηση σε μορφή API θα ήταν:</p>

<ul>
  <li>Τα αστυνομικά δεδομένα με συντεταγμένες (για παράδειγμα στο Ηνωμένο Βασίλειο έχουν <a href="https://www.police.uk/pu/your-area/metropolitan-police-service/junction/?tab=crimemap">εφαρμογή</a> που τα δείχνει στο χάρτη).</li>
  <li>Δεδομένα μετακίνησης (για παράδειγμα το εξαιρετικό <a href="https://tfl.gov.uk/info-for/open-data-users/our-open-data">Transport for London</a>). Ενώ υπάρχουν API για την τηλεματική του ΟΑΣΑ και του ΟΑΣΘ, δεν υπάρχει για το Μετρό και τον Προαστειακό, ούτε για την ακτοπλοΐα.</li>
  <li>Δεδομένα για την εξυπηρέτηση στα νοσοκομεία</li>
</ul>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[Τις τελευταίες μέρες βρίσκω ανοιχτά δεδομένα (είτε ως API είτε ως στατικά dataset), και με πολύ vibe coding και λίγο πείραγμα με το χέρι φτιάχνω visualization, τα οποία μπορείτε να βρίσκετε στη σελίδα των projects. Προγράμματα με ανοιχτά δεδομένα έγραφα από παλιά, αλλά πλέον με το AI είναι πολύ εύκολο να χαλαρώσω ένα βράδυ φτιάχνοντας στα γρήγορα μια σελίδα που οπτικοποιεί κάποιο dataset που βρίσκω ενδιαφέρον.]]></summary></entry><entry><title type="html">De-USAification</title><link href="https://fragkakis.org/De-USAification/" rel="alternate" type="text/html" title="De-USAification" /><published>2026-01-25T00:00:00+00:00</published><updated>2026-01-25T00:00:00+00:00</updated><id>https://fragkakis.org/De-USAification</id><content type="html" xml:base="https://fragkakis.org/De-USAification/"><![CDATA[<p>How things have changed, looks like the USA is no longer a friend of Europe.</p>

<p>This feels so strange. For as long as I remember, USA was a close ally. In this new world, the US accuses and mocks the EU for all sorts of things, wants to take over Greenland, and wants to take over Canada as well. If you haven’t already, it’s worth listening to the Canadian Prime Minister’s <a href="https://www.weforum.org/stories/2026/01/davos-2026-special-address-by-mark-carney-prime-minister-of-canada/">speech</a> at the World Economic Forum 2026.</p>

<p>Europe should use this situation as an opportunity to grow a spine and stand on its own feet.</p>

<p>While we are at it, over the next months, I will try to distance myself from USA-based products and move over to Europe-based stuff as much as possible.</p>

<p>This is my preference:</p>

<ol>
  <li>EU-based</li>
  <li>Open source</li>
  <li>Rest of the world (non-USA)</li>
  <li>USA</li>
</ol>

<p>Here are some resources I plan to explore:</p>

<ul>
  <li><a href="https://eualternative.eu/">https://eualternative.eu/</a></li>
  <li><a href="https://www.switch-to.eu/en">https://www.switch-to.eu/en</a></li>
  <li><a href="https://www.goeuropean.org/">https://www.goeuropean.org/</a></li>
  <li><a href="https://european-alternatives.eu/">https://european-alternatives.eu/</a></li>
</ul>

<p>This is by no means a simple endeavour, and I am also not sure how well it will go. The reason is that, digitally at least, most of us are tied up in one of the two ecosystems: iOS or Android. We use them for critical stuff, like email, photos, maps &amp; navigation etc.</p>

<p>There was some low hanging fruit I quickly picked up. Firefox for web browsing, and <a href="https://mistral.ai/">Mistral.ai</a> for daily LLM use. So far so good.</p>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[How things have changed, looks like the USA is no longer a friend of Europe.]]></summary></entry><entry><title type="html">Fun with flags (in Slack)</title><link href="https://fragkakis.org/Fun-with-flags-in-slack/" rel="alternate" type="text/html" title="Fun with flags (in Slack)" /><published>2024-02-29T00:00:00+00:00</published><updated>2024-02-29T00:00:00+00:00</updated><id>https://fragkakis.org/Fun-with-flags-in-slack</id><content type="html" xml:base="https://fragkakis.org/Fun-with-flags-in-slack/"><![CDATA[<p>This post is about a pet trolling I do in Slack, and I thought I’d share with the world.</p>

<p>When colleagues return from time off abroad, they often bring a local delicacy for the office and announce it in Slack, so that we can help ourselves. Normally people add happy emojis, often including the flag of the country mentioned in the post.</p>

<p>Instead, I like to add the emoji an <strong>incorrect</strong> flag that only resembles the correct one in appearance, planting a subtle seed of confusion. Most people will go on and click the incorrect flag emoji, and go on with their lives.</p>

<p>The incorrect flag may be:</p>

<ul>
  <li>A flag with similar patters</li>
  <li>A flag with similar colors</li>
</ul>

<p>You could call it flagrolling.</p>

<h3 id="examples">Examples:</h3>

<ul>
  <li>🇺🇾 (Uruguay) instead of 🇬🇷 (Greece)</li>
  <li>🇵🇫 (French polynesia) instead of 🇦🇹 (Austria)</li>
  <li>🇮🇪 (Ireland) instead of 🇫🇷 (France)</li>
</ul>

<h3 id="goals">Goals:</h3>

<ul>
  <li>Be the first one to post an incorrect flag</li>
  <li>Get as many clicks as possible on the incorrect flag</li>
  <li>Extra credit if noone adds the correct flag</li>
</ul>

<h3 id="gallery">Gallery</h3>

<h4 id="french-polynesia--instead-of-austria-">French Polynesia 🇵🇫 instead of Austria 🇦🇹</h4>

<p><img src="/images/flagrolling-austria.png" alt="flagrolling-austria" /></p>

<h4 id="philippines--instead-of-czech-republic-">Philippines 🇵🇭 instead of Czech Republic 🇨🇿</h4>

<p><img src="/images/flagrolling-czech.png" alt="flagrolling-czech" /></p>

<h4 id="norway--instead-of-iceland-">Norway 🇳🇴 instead of Iceland 🇮🇸</h4>

<p><img src="/images/flagrolling-iceland.png" alt="flagrolling-iceland" /></p>

<h4 id="morocco--instead-of-vietnam-">Morocco 🇲🇦 instead of Vietnam 🇻🇳</h4>

<p><img src="/images/flagrolling-vietnam.png" alt="flagrolling-vietnam" /></p>

<h3 id="credits">Credits</h3>

<p>Thanks a lot to <a href="https://www.georgestefanis.com/">George Stefanis</a> for the idea to create this post and for proofreading it.</p>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[This post is about a pet trolling I do in Slack, and I thought I’d share with the world.]]></summary></entry><entry><title type="html">JHUG meetup November 28th 2017</title><link href="https://fragkakis.org/JHUG-meetup-28-November-2017/" rel="alternate" type="text/html" title="JHUG meetup November 28th 2017" /><published>2017-11-28T00:00:00+00:00</published><updated>2017-11-28T00:00:00+00:00</updated><id>https://fragkakis.org/JHUG-meetup-28-November-2017</id><content type="html" xml:base="https://fragkakis.org/JHUG-meetup-28-November-2017/"><![CDATA[<p>On November 28th 2017 <a href="http://www.jhug.gr/">JHUG</a> held its latest meetup (<a href="https://www.meetup.com/Java-Hellenic-User-Group/events/244787630/">Meetup.com event</a>). The event was kindly hosted by <a href="https://www.eurobank.gr">Eurobank</a> in their impressive auditorium. The attendance was around 140, which is very satisfactory because it shows that many Java developers care for their work and feel the urge to expand their knowledge.</p>

<p>The first presentation was by Vassilis Bekiaris (<a href="https://www.linkedin.com/in/vassilis-bekiaris-88a7003/">LinkedIn profile</a>, <a href="https://twitter.com/karbonized1">Twitter</a>) of <a href="https://hazelcast.com/">Hazelcast</a> with title “Using JCache to speed up your apps”. Vassilis began with the main motives for caching and that we should consider it when our data either does not offen change or is very expensive to retrieve. Then he explored how the concepts latency and size come together in caches, as well as when deserialisation plays a role. Then he presented the patterns of caching aside and caching through and went on with the differences of in-process caches (single node) and distributed caches (multiple nodes). In the latter, the cached data needs to be serializable (so that it can be transmitted to all the cache nodes). However, it may be a good practice to serialize in the first case as well, because your data may exceed the heap size (or simply because you may want to be ready to go distributed). <a href="https://www.jcp.org/en/jsr/detail?id=107">JSR-107</a> is the specification for caching in Java, for which there are several <a href="https://jcp.org/aboutJava/communityprocess/implementations/jsr107/index.html">implementations</a>, one being Hazelcast. Vassilis went on with some of the entities JSR-107 specifies (<code class="language-plaintext highlighter-rouge">Caching</code>, <code class="language-plaintext highlighter-rouge">CachingProvider</code>, <code class="language-plaintext highlighter-rouge">CacheManager</code> and <code class="language-plaintext highlighter-rouge">Cache</code>), some other constructs to transform or perform computations on your data and with the Listeners your cache comes with. He then showed the annotations (with support for <a href="https://docs.oracle.com/javaee/6/tutorial/doc/giwhl.html">CDI</a>, <a href="https://spring.io/">Spring</a> and <a href="https://github.com/google/guice">Guice</a>) and can also provide real time statistics via <a href="http://www.oracle.com/technetwork/articles/java/javamanagement-140525.html">JMX</a>. Vassilis showcased some sample code (<a href="https://github.com/vbekiaris/jcache-demo">github</a>) and also played around with caching in the Spring Boot sample (<a href="https://github.com/vbekiaris/spring-boot/tree/jcache-jhug/add-caching-to-echoservice">github</a>). You can find the slides of his presentation <a href="https://github.com/JHUG/JHUG-General-Resources/blob/master/presentations/2017/28-November/Using%20JCache%20to%20speed%20up%20your%20apps.pdf">here</a>.</p>

<p>The second presentation was by Apostolos Polymenakos (<a href="https://www.linkedin.com/in/apostolos-polymenakos-94a192b7/">LinkedIn profile</a>) and Giorgos Sikalias(<a href="https://www.youtube.com/channel/UCIHmD8TgISeqazpDj5fVnHw">Youtube channel</a>), both employees of Eurobank, and was titled “Docker, Kubernetes &amp; Java Microservices”. Giorgos is an ex colleague from our days at <a href="http://www.trasysinternational.com/">Trasys</a> and is an accomplished circuit driver, although I wouldn’t get in a car he drives. Apostolos started the presentation with some basic concepts of microservices and their main differences to monoliths. He went on explaining that containers have actually been around since 2008 and offer OS-level virtualization (they hide everything but the OS kernel and the appropriate binaries and libraries). VMs are inherently different from containers in that you may run multiple isolated containers on the same OS without paying the overhead of the OS again and again for each deployment. Their key advantages are the small footprint, their portability and the fast startup. <a href="https://www.docker.com/">Docker</a> is the container engine with the greatest momentum. In order to manage a large number of containers in production, we need a container orchestration engine, and <a href="https://kubernetes.io/">Kubernetes</a> is also the one with the greatest momentum. Apostolos finished his part of the presentation explaining that Kubernetes tries to make sure that the production system remains in the specified declared desired state with mechanisms for self-healing, making effective use of the hardware, while abstracting the infrastructure.</p>

<p>Giorgos continued with the second part of the presentation, which was about how his team set out to use Docker and Kubernetes to build the infrastructure for Eurobank. He started with pointing out the importance of selecting an appropriate image with respect to size, out-of-memory handling and startup parameters. He went on with the importance of monitoring in order to be able to track down problems. Having this in mind, they use the <a href="https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready">Spring Boot Actuator</a>, <a href="https://jolokia.org/">Jolokia</a> and <a href="http://hawt.io/">hawt.io</a>. Giorgos continued with the <a href="http://projects.spring.io/spring-cloud/">Spring Cloud</a> family of libraries (some of which come from <a href="https://netflix.github.io/">Netflix</a>) such as <a href="https://github.com/Netflix/Hystrix">Hystrix</a>, <a href="https://cloud.spring.io/spring-cloud-sleuth/">Sleuth</a>. Another point to consider is that it is desirable to move as fast as possible to the final (on-premise in Eurobank’s case) infrastructure, as many public clouds are not performant and the developers and operations will need time to familiarize. He closed the presentation with some tips that boosted his team’s productivity, such as <a href="https://kotlinlang.org/">Kotlin</a>, <a href="http://spockframework.org/">Spock</a> for testing and the <a href="https://github.com/openshift/source-to-image">source-to-image</a> tool. Giorgos also pointed out that a company needs to invest on good hardware and tooling for developers to be able to work effectively (I hope some managers are reading this). You can find the slides of his presentation <a href="https://github.com/JHUG/JHUG-General-Resources/blob/master/presentations/2017/28-November/Docker%2C%20Kubernetes%20%26%20Java%20Microservices.pdf">here</a> and the video below:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/247101263" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[On November 28th 2017 JHUG held its latest meetup (Meetup.com event). The event was kindly hosted by Eurobank in their impressive auditorium. The attendance was around 140, which is very satisfactory because it shows that many Java developers care for their work and feel the urge to expand their knowledge.]]></summary></entry><entry><title type="html">JHUG meetup October 20th 2017</title><link href="https://fragkakis.org/JHUG-meetup-20-October-2017/" rel="alternate" type="text/html" title="JHUG meetup October 20th 2017" /><published>2017-10-20T00:00:00+00:00</published><updated>2017-10-20T00:00:00+00:00</updated><id>https://fragkakis.org/JHUG-meetup-20-October-2017</id><content type="html" xml:base="https://fragkakis.org/JHUG-meetup-20-October-2017/"><![CDATA[<p>On Friday the 20th of October we held our latest <a href="http://www.jhug.gr/">JHUG</a> meetup (<a href="https://www.meetup.com/preview/Java-Hellenic-User-Group/events/243384988">Meetup.com event</a>). Our host was <a href="http://www.afse.eu/">Advantage FSE</a>, who also hosted <a href="https://www.meetup.com/preview/Java-Hellenic-User-Group/events/235583737">another meetup</a> last year. Apart from their presentation room, Advantage FSE kindly offered coffee, pizza and beverages.</p>

<p>This was the first meetup for the 2017-2018 season, and we were happy to have gathered around 90 JHUG members plus around 20 employees of our host. Seeing that there is this kind of interest for the meetup is indeed very encouraging for us, the organisers.</p>

<p>Some devops information: Although we recorded the presentations, due to a glitch with our <a href="http://www.takstar.com/en/product/detail-1-24-0-184">new recording equipment</a> (a generous offer by yours truly), we were not able to record the sound. This means that the sound in the videos to come will be the one captured by the camera.</p>

<p>Moving on with the presentations. Sam Shemirani (<a href="https://www.linkedin.com/in/sam-g-shemirani-389369a/">Linkedin</a>) made a presentation on “Microservices with <a href="https://projects.spring.io/spring-boot/">Spring Boot</a>”. Sam walked us through the subject using their project that implements the EU <a href="https://ec.europa.eu/info/law/payment-services-psd-2-directive-eu-2015-2366_en">PSD2</a> directive that has to do with credit card charges on banking systems. He began with some basic ideas on Microservices vs Monoliths and advantages and disadvantages of each architectural paradigm. He then explored several aspects which are important to implement a Microservices architecture, the first being authentication. He also explained how their system makes use of <a href="https://github.com/Netflix/eureka">Netflix Eureca</a> for service discovery and <a href="https://github.com/Netflix/zuul">Netflix Zuul</a> for routing incoming requests to different microservices (hence the universal hostname and port for all requests). He overviewed two flows of oAuth (which his team decided to use over JWT) and performed a demo with <a href="https://www.getpostman.com/postman">Postman</a> on their API. Another concern Sam explored is centralised logging, which helps figure out the sequence of requests spanning several microservices. His team implements centralised logging using <a href="https://logback.qos.ch/">Logback</a>, <a href="https://kafka.apache.org/">Apache Kafka</a> and the <a href="https://www.elastic.co/products">Elastic Stack</a>. Their system makes use of <a href="https://www.docker.com/">Docker</a> for the containerisation of the microservices. This also enables using a container orchestration system (such as <a href="https://kubernetes.io/">Kubernetes</a> or <a href="https://docs.docker.com/engine/swarm/">Docker Swarm</a>) for deployment, monitoring, elasticity and scaling. A very interesting part of the presentation is how Spring Boot brings all this together for us. If you haven’t seen it already, you will be impressed with <a href="https://start.spring.io/">Spring Initializr</a>, where you can check the dependencies you need, and a new project will be generated for you where you can start writing your business logic. You can find the slides <a href="https://github.com/JHUG/JHUG-General-Resources/blob/master/presentations/2017/10-October/JHug-microservices-springboot.pdf">here</a> and watch the video below:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/246536422" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>The second presentation was by Ioannis Kolaxis (<a href="https://www.linkedin.com/in/ioannis-kolaxis/">Linkedin</a>, <a href="https://twitter.com/IoannisKolaxis">Twitter</a>), who talked about Java 9. The first key feature he presented was, naturally, modules. Ioannis explained how modules further refine access control in our codebase, and that the feature was indeed huge, as it incorporated splitting the JVM itself into modules. A (big, red) cherry on top is the <code class="language-plaintext highlighter-rouge">jlink</code> tool, with which we can “generate” a custom, lightweight JVM, which only contains the modules our code needs. Ioannis went on with the syntactic sugar Java 9 brings for defining immutable collections, and the gotcha of random iteration order for unordered collections. Another big change is in garbage collection, where G1 is the new default. As Ioannis said, G1 is a low latency-oriented garbage collector, which uses several smaller regions (instead of 2 bigger ones for Young and Old generation). Java 9 changed the memory representation of Strings, which makes them more compact. Java 9 also brings new classes for native process handling and a brand new HTTP client, which also supports HTTP2. Finally, Ioannis demonstrated the <code class="language-plaintext highlighter-rouge">jshell</code> (Java Shell) tool, a <a href="https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop">REPL</a> tool like the ones commonly used with scripting languages. Jshell is ideal for trying out and experimenting with small snippets of code without having to recompile - redeploy our application. You can find the slides <a href="https://github.com/JHUG/JHUG-General-Resources/blob/master/presentations/2017/10-October/jhugkolaxisioannisjava9-171020210902.pdf">here</a> and watch the video below:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/246622212" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>At the end of the meetup, we gave away a copy of <a href="https://www.manning.com/books/spring-microservices-in-action">Spring Microservices in Action</a> and a copy of <a href="http://shop.oreilly.com/product/0636920049494.do">Java 9 Modularity</a>.</p>

<p>See you all at the next meetup!</p>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[On Friday the 20th of October we held our latest JHUG meetup (Meetup.com event). Our host was Advantage FSE, who also hosted another meetup last year. Apart from their presentation room, Advantage FSE kindly offered coffee, pizza and beverages.]]></summary></entry><entry><title type="html">Voxxed Days Athens 2017</title><link href="https://fragkakis.org/Voxxed-Athens-19-May-2017/" rel="alternate" type="text/html" title="Voxxed Days Athens 2017" /><published>2017-05-19T00:00:00+00:00</published><updated>2017-05-19T00:00:00+00:00</updated><id>https://fragkakis.org/Voxxed-Athens-19-May-2017</id><content type="html" xml:base="https://fragkakis.org/Voxxed-Athens-19-May-2017/"><![CDATA[<p>Today I attended <a href="https://voxxeddays.com/athens/">Voxxed Days Athens</a> and had a great time. This post contains the quick notes I took at the talks I went to.</p>

<h2 id="the-art-of-visualising-software-architecture-simon-brown">The art of visualising software architecture (Simon Brown)</h2>

<p>The <a href="https://voxxeddays.com/athens/sessions/visualising-software-architecture/">keynote speech</a> was by <a href="https://voxxeddays.com/athens/speakers/simon-brown/">Simon Brown</a>, who started his presentation by pointing out the disparity and lack of standardisation of software architecture diagrams (functional view, component view). Members of the same team will draw the same system they just architected together differently and will not understand each other’s diagram. He went on with some different software visualisation approaches and their disadvantages describing architecture. For example, UML (which is too low level), N+1 and the methodologies in the book View points and perspectives. Almost always the Logical view  and the Development view are different, because they are created by different people with different viewpoints (i.e. Business vs Architect).</p>

<p>The problem is that there is no good, ubiquitous vocabulary to describe software architecture. The so called “Component diagrams” all around the world have a different level of abstraction (he showed a diagram with a cryptic “Business Logic” component). He also listed some desired properties for a diagramming model:</p>

<ul>
  <li>To be text-based (in order to be version-controllable and diffable)</li>
  <li>To be connected to the code</li>
</ul>

<p>Simon brown has created his own software system diagram, <a href="https://www.structurizr.com/">Structurizr</a>, which has 4 levels of abstraction: Software system &gt; Containers &gt; Components &gt; Classes. It is a static model around which all sorts of views can be created. Structurizr comes with 2 libraries (one for Spring and one for .Net), which scan a compiled project with reflection and generate the text model for the software. You can have a look at some of the diagrams that can be created out of the generated model <a href="https://www.structurizr.com/help/examples">here</a>. Some of these, have “drill-down” capabilities from the high-level to the lower-level layers of the architecture.</p>

<h2 id="you-can-do-better-with-kotlin-svetlana-isakova">You can do better with Kotlin (Svetlana Isakova)</h2>

<p>Next I attended the <a href="https://voxxeddays.com/athens/sessions/you-can-do-better-with-kotlin/">talk</a> about Kotlin by <a href="https://voxxeddays.com/athens/speakers/svetlana-isakova/">Svetlana Isakova</a> of Jetbrains, which is <a href="https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/">as of yesterday</a> officially supported for Android development. Kotlin compiles to Java bytecode, to Javascript and native code. Also, Gradle plans to support Kotlin. Thanks to Jetbrains (who also develops one of the best IDEs), it also has very good tooling (she also showed us the Java to Kotlin converter). She then went on with some important features of the language, like the named method parameters, the data keyword (which adds equals and hashcode methods to classes) and the nullable types. She spent the rest of the talk on coroutines, one of the (experimental for now) features of the language, which provides the language constructs for async-await.</p>

<h2 id="continuous-learning-of-tech-professionals-in-an-evolving-world-dimitris-livas">Continuous learning of Tech Professionals in an evolving world (Dimitris Livas)</h2>

<p>The next <a href="https://voxxeddays.com/athens/sessions/continuous-learning-tech-professionals-evolving-world/">talk</a> I attended was by <a href="https://voxxeddays.com/athens/speakers/dimitris-livas/">Dimitris Livas</a>, and was about the important role of continuous learning of tech professionals in a world that evolves with great speed. He started by exploring the needs of a professional in order to remain relevant (i.e. to be marketable, up-to-date) and the needs of businesses (to be attractive to talent, to be able to migrate its tech). As far as professionals are concerned, common challenges are self awareness, field state awareness and the adaptation to new evolving stages. Also, different professionals have different goals (i.e. long term employment, or using bleeding edge technology, or set a target role for the next years).</p>

<p>A key takeaway from the talk was that the term “scrumification” is applicable for the personal development of a professional (where the professional is the scrum master and product owner, their personal development is the product and the things they want to grow into are the backlog). The professional development also has “sprints”, as it involves small steps, reevaluation of targets and keeping track of the progress.</p>

<p>Dimitris Livas also pointed out the importance to have a coach, who works on the same area with the goals of the professional. Finally, he closed with five values that are essential for the personal development: Having a purpose, being adventurous, being agile, respecting and empowering colleagues and trust.</p>

<h2 id="taming-the-dragon-conquering-non-blocking-code-with-rxjava-frank-lyaruu">Taming the Dragon: Conquering non blocking code with RxJava (Frank Lyaruu)</h2>

<p>I then attended the <a href="https://voxxeddays.com/athens/sessions/taming-the-dragon-conquering-non-blocking-code-with-rxjava/">talk</a> by <a href="https://voxxeddays.com/athens/speakers/Frank-Lyaruu/">Frank Lyaruu</a> on RxJava. Frank started by listing the merits of blocking code over non-blocking: it is familiar, easy to reason about and easy to debug. He went on by comparing the same code in non-blocking servlet 3.1 (&gt;30 lines) versus node.js (3 lines). He went on with RxJava and wrapped some blocking code in a non-blocking method returning an Observable, showing that it is light and easy to add to existing apps. He also touched the notion of backpressure.</p>

<p>Frank continued by clearing out that non-blocking code is not about running faster, but rather unblocking threads, and pointed out that there are few reactive drivers available (i.e. RxNetty, RxMongo, Couchbase, barely any SQL support). Furthermore, he underlined that blocking IO is a lie, but you can get away with it if network latecy is low (however, applications cover more distance) and if our network is reliable (however, we use wireless more and more).</p>

<p>He closed concluding that blocking code misbehaves under pressure and that its price will keep going up. So the adoption of non-blocking code will be inevitable.</p>

<h2 id="mutation-testing-to-the-rescue-of-your-tests-nicolas-frankel">Mutation Testing to the rescue of your Tests (Nicolas Frankel)</h2>

<p>This was my favourite technical <a href="https://voxxeddays.com/athens/sessions/mutation-testing-rescue-tests/">talk</a> of the conference, by <a href="https://voxxeddays.com/athens/speakers/Nicolas-Frankel/">Nicolas Frankel</a>, and was about mutation testing. Apart from the interesting topic, the talk had just the right amount of developer grievances and humour. Nicolas started with listing the many kinds of testing that we use (unit, integration, performance, penetration, end-to-end and others) trying to ensure the quality of our production code. He pointed out that one of the metrics we most often use is code coverage, and we often fool ourselves that high code coverage alone means quality code, which is not the case given how easy it is to achieve high code coverage without testing anything of value.</p>

<p>He then went on by explaining what mutation testing is. Mutation testing in essence messes up our code in different ways (how cool is that!) and makes sure that our normal tests fail. If the tests don’t fail on the messed up code, there is something wrong. He went on with <a href="http://pitest.org/">PIT</a> and the list of <a href="http://pitest.org/quickstart/mutators/">mutations</a> it supports. Some important ones are the “conditionals boundary mutator” (it you have <code class="language-plaintext highlighter-rouge">if (a&lt;b) {...}</code> the mutator may change it to <code class="language-plaintext highlighter-rouge">if (a&lt;=b) {...}</code>), removing method calls and others.</p>

<p>Nicolas went on with a demo, and closed saying that PIT comes with its own set of shortcomings. For example, it does produce false positives, it is slow (it will create a new version of the code for each applied mutation, run all the tests on it and produce aggregate results). Some of these shortcomings have workarounds, like using more threads, incremental analysis (i.e. running mutation tests only for changed code), and not binding to the test phase.</p>

<h2 id="better-security-and-privacy-for-your-web-apps-panos-astithas">Better security and privacy for your web apps (Panos Astithas)</h2>

<p>Next on my schedule was the <a href="https://voxxeddays.com/athens/sessions/better-security-privacy-web-apps/">talk</a> by <a href="https://voxxeddays.com/athens/speakers/panos-astithas/">Panos Astithas</a> on better security and privacy for web apps. Panos started by underlying that privacy and security are more important than ever, and people have began caring.</p>

<p>He started with encryption, pointing out the “good parts” of the last years: HTTP/2, TLS 1.3, HTTP Strict Transport Security, HTTP Public Key Pinning and most importantly <a href="https://letsencrypt.org/">Let’s Encrypt</a>, which is backed by many companies, is free and tries to be transparent. He went on with the not so good parts: insecure algorithms, missing intermediate CA certificates (~6% of HTTPS requests on FF), mixed content (passive vs active) and insecure logins (~25%).</p>

<p>Panos then went on with the tools we have on Content security:</p>

<ul>
  <li>For cookies we have useful directives, such as <code class="language-plaintext highlighter-rouge">Expires</code> and <code class="language-plaintext highlighter-rouge">Max-Age</code>, <code class="language-plaintext highlighter-rouge">Secure</code> and <code class="language-plaintext highlighter-rouge">HttpOnly</code>, <code class="language-plaintext highlighter-rouge">Domain</code> and <code class="language-plaintext highlighter-rouge">Path</code>. Also, experimental directives (supported in Firefox) such as <code class="language-plaintext highlighter-rouge">__Secure-</code> and <code class="language-plaintext highlighter-rouge">__Host-</code>.</li>
  <li>The Content Security Policy HTTP header can be used to limit the places our resources can come from.</li>
  <li>He also mentioned the experimental <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API">Web Crypto API</a></li>
  <li>Cross Origin Resource sharing and Subresource Integrity.</li>
  <li>For permissions on the web (for geolocation and notifications, push and WebRTC) he mentioned the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API">Permissions API</a></li>
  <li>Best practices: avoid the load event, pre-prompt for context, prefer HTTPS, prompt in parent frames</li>
</ul>

<p>He finished his talk with some points on Privacy:</p>

<ul>
  <li>tracking erodes trust (users only trust the first party to track them, and not third parties), that Ad networks can serve malware, and that there is a differentiation between tracking protection versys ad blockers.</li>
  <li>Tracking mitigations: tracking scripts may fail to load, sendBeacon vs onBeforeUnload, anti-fingerprinting, lean data practices (https://www.mozilla.org/en-US/about/policy/lean-data/)</li>
  <li>Internet health report (https://internethealthreport.org/v01/)</li>
  <li>Observatory (https://observatory.mozilla.org/)</li>
</ul>

<h2 id="numbers-douglas-crockford">Numbers (Douglas Crockford)</h2>

<p>The <a href="https://voxxeddays.com/athens/sessions/numbers/">closing keynote</a> was by the well known <a href="https://voxxeddays.com/athens/speakers/douglas-crockford/">Douglas Crockford</a>.</p>

<h2 id="conclusion">Conclusion</h2>

<p>International IT conferences were not part of our life in Athens. Voxxed Days was a very pleasant addition to our lives. Not everything around it was perfect, but the conference was overall very successful. Lots of people (~450) attended and had a good time, exchanged ideas, learning interesting things. Now that Voxxed Days was held, we should support it so that it can come back next year with more talks and more attendees.</p>

<p>So, cheers to the team! I am looking forward to it.</p>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[Today I attended Voxxed Days Athens and had a great time. This post contains the quick notes I took at the talks I went to.]]></summary></entry><entry><title type="html">JHUG meetup May 12th 2017</title><link href="https://fragkakis.org/JHUG-meetup-12-May-2017/" rel="alternate" type="text/html" title="JHUG meetup May 12th 2017" /><published>2017-05-12T00:00:00+00:00</published><updated>2017-05-12T00:00:00+00:00</updated><id>https://fragkakis.org/JHUG-meetup-12-May-2017</id><content type="html" xml:base="https://fragkakis.org/JHUG-meetup-12-May-2017/"><![CDATA[<p>Today, 12th of May, we held our next <a href="http://www.jhug.gr/">JHUG</a> meetup (<a href="https://www.meetup.com/Java-Hellenic-User-Group/events/239505325/">Meetup.com event</a>). <a href="https://www.agileactors.com/">Agile Actors</a> invited us at their new office, and also bought pizza and beverages. We had around 60-70 attendees. Our host also recorded the presentations for us, so we have videos of the presentatations as well.</p>

<p>The first presentation was by Petros Kaklamanis (<a href="https://www.linkedin.com/in/petros-kaklamanis">Linkedin</a>), whose talk was about the Cassandra database. Petros had presented the first part in December’s meetup (video <a href="https://vimeo.com/197079359">here</a>). He picked up pointing out that Cassandra offers lightweight transactionality in two ways: compare-and-set (CAS) operations and batch statements. He went on with data modeling, and explained that defining a schema that will accommodate our needs, one has to start by analysing what queries will needed. This step will help identify the partition and clustering columns. After the schema definition, Petros underlined the importance of testing out the schema with the development tools that come with Cassandra (i.e. <a href="http://docs.datastax.com/en/archived/cql/3.0/cql/cql_reference/cqlsh.html">CQLSH</a>), and also deciding on the way to interact with Cassandra (a driver or 3rd party integration layer, such as <a href="http://projects.spring.io/spring-data-cassandra/">Spring Data</a>). You can find the slides <a href="https://github.com/JHUG/JHUG-General-Resources/blob/master/presentations/2017/05-May/JHUG_12052017_CassandraIntro.pdf">here</a> (slide 57 and on for this part of the presentation), the sample application <a href="https://github.com/pek-github/SpringCassandra">here</a> and watch the video:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/218583074" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>The second presentation was by Spyros Anastasopoulos (<a href="https://www.linkedin.com/in/anastasop/">Linkedin</a>, <a href="https://twitter.com/anastasop">Twitter</a>), whose talk was about <a href="http://reactivex.io/">Reactive Extensions</a> in Java. Spyros is a long-time member of JHUG and is known for his engaging presentations. He started by explaining why modern computing has moved away from sequential programming towards concurrent programming, and that Java provides only low level tools for that, which makes reasoning about the correctness of our programs difficult. Spyros continued with the history of Reactive Extensions and explained how they hide the complexity of concurrent programming with high level constructs, and allow us to focus on our business logic. The center of Reactive Extensions is <a href="http://reactivex.io/documentation/observable.html">Observable</a>, which brings together the Observer pattern and asynchronous programming. In contrast to standard Java constructs (i.e. <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html">Future</a>) which don’t protect us from mixing together concurrency and business code, Reactive Extensions help us write our code in a clear way. Spyros went on with some common methods (create, flatMap, zip, take, amb, reduce) and also presented how he wrote a website scraper with the reactive magic. He concluded by listing the available implementations of Reactive Extensions in Java. You can find the slides <a href="https://github.com/JHUG/JHUG-General-Resources/blob/master/presentations/2017/05-May/Reactive_Programming.pdf">here</a> and watch the video:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/219470138" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>At the end of the meetup, we gave away a copy of <a href="http://shop.oreilly.com/product/0636920043041.do">Cassandra: The Definitive Guide</a> and a copy of <a href="http://shop.oreilly.com/product/0636920042228.do">Reactive Programming with RxJava</a>.</p>

<p>See you all in the next meetup!</p>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[Today, 12th of May, we held our next JHUG meetup (Meetup.com event). Agile Actors invited us at their new office, and also bought pizza and beverages. We had around 60-70 attendees. Our host also recorded the presentations for us, so we have videos of the presentatations as well.]]></summary></entry><entry><title type="html">JHUG meetup March 15th 2017</title><link href="https://fragkakis.org/meetup-15-March-2017/" rel="alternate" type="text/html" title="JHUG meetup March 15th 2017" /><published>2017-03-15T00:00:00+00:00</published><updated>2017-03-15T00:00:00+00:00</updated><id>https://fragkakis.org/meetup-15-March-2017</id><content type="html" xml:base="https://fragkakis.org/meetup-15-March-2017/"><![CDATA[<p>Today, 15th of March, we held our next <a href="http://www.jhug.gr/">JHUG</a> meetup (<a href="https://www.meetup.com/Java-Hellenic-User-Group/events/237755048/">Meetup.com event</a>). <a href="http://www.trasysinternational.com/trasys-nrb-group/">Trasys Greece</a>, <a href="http://www.nrbjobs.be/vacancies/vacancy-senior-java-developer-3983951-31.html">who is hiring</a>, invited us to use the presentation room of their new office, and also bought pizza and beverages. We had around 60-70 attendees, including both old and new members.</p>

<p>The first presentation was by Panagiotis Kapralos (<a href="https://www.linkedin.com/in/panagiotis-kapralos-84b0078b">Linkedin</a>), whose talk was about Code Refactoring. The talk was entry level, but also useful for more experienced software engineers. Panos began with an example of a class with several opportunities for refactoring. Step by step, he refactored the class to a more maintainable piece of code, explaining what caught his eye each time. After this example, he went on with a set of common Refactorings (i.e. extract method, extract variable, consolidate duplicate conditional fragments) and what each means. Then he presented the not-so-obvious relation between refactoring and economics (which you can use to convince your manager you are not losing your time and his budget). Furthermore, he explained that a software engineer should regard refactoring as an opportunity and not a chore, and allocate time for it. Finally, he concluded by reminding that there are cases where refactoring should not be considered (i.e. when the end-of-life of the software is close). You can find the slides <a href="https://github.com/JHUG/JHUG-General-Resources/blob/master/presentations/2017/03-March/Refactoring-In-Practice.pdf">here</a> and watch the video:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/208950085" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>The second presentation was by George Kalfopoulos, who talked about Microbenchmarking with <a href="http://openjdk.java.net/projects/code-tools/jmh/">JMH</a>, the Java Microbenchmark Harness. George started by explaining why benchmarking is not straightforward because of optimisations that take place in several layers (JDK, JVM, OS, Hardware). These optimisations can give you a false picture of how performant your software is. JMH helps you profile your code with useful metrics (i.e. throughput, average time) in different setups (i.e. single thread, parallel threads) and even JVM initialisation arguments. It takes care of excluding setup tasks and warm-up executions in the results, so that you have a better picture of how your code behaved while actually executing. George reminded that even JMH results should be taken with a grain of salt, because even a minor Java update may have a drastic effect on the produced numbers. You can find the slides <a href="https://github.com/JHUG/JHUG-General-Resources/blob/master/presentations/2017/03-March/Microbenchmarking.pdf">here</a> and watch the video:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/208947227" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>In the end of the meetup, we gave away 2 copies of <a href="https://www.manning.com/books/java-testing-with-spock">Java testing with Spock</a>, by our own <a href="http://codepipes.com/">Kostis Kapelonis</a>, and 2 free invitations for <a href="https://voxxeddays.com/athens/">Voxxed Days Athens</a> (May 18th – 20th 2017), which were kindly offered to JHUG by the conference organizers.</p>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[Today, 15th of March, we held our next JHUG meetup (Meetup.com event). Trasys Greece, who is hiring, invited us to use the presentation room of their new office, and also bought pizza and beverages. We had around 60-70 attendees, including both old and new members.]]></summary></entry><entry><title type="html">JHUG meetup October 4th 2016</title><link href="https://fragkakis.org/JHUG-meetup-4-October-2016/" rel="alternate" type="text/html" title="JHUG meetup October 4th 2016" /><published>2016-10-04T00:00:00+00:00</published><updated>2016-10-04T00:00:00+00:00</updated><id>https://fragkakis.org/JHUG-meetup-4-October-2016</id><content type="html" xml:base="https://fragkakis.org/JHUG-meetup-4-October-2016/"><![CDATA[<p>After several months, <a href="http://www.jhug.gr/">JHUG</a> returned on Tuesday, 4th of October (<a href="http://www.meetup.com/Java-Hellenic-User-Group/events/234290199/?">Meetup.com event</a>). I asked my employer, <a href="http://www.workable.com">Workable</a> to host the event, and they happilly agreed, so JHUG members had the opportunity to visit our impressive new premises. In terms of people this was a very successful meetup, as around 70 non-Workablers showed up, several new faces in them. Building on our experience from the previous event, we (well, <a href="http://codepipes.com/">Kostis</a>) recorded the event, so this post will be updated once the videos are ready.</p>

<p>The first presentation was by my two co-workers, Nikos Dimos (<a href="https://gr.linkedin.com/in/nikolaosbdimos">Linkedin</a>) and Rui Miguel Forte (<a href="https://gr.linkedin.com/in/ruimiguelforte">Linkedin</a>), who lead the Sourcing and Data Science teams respectively. Nikos talked about how the Sourcing team at Workable moved to Microservices architecture. He started with some basics, like defining what a monolith architecture and a microservice architecture are, and when each is a good fit (no silver bullet here either). He then drilled down to specific problems that kept cropping up with our old, monolithic architecture, and how they were mitigated by moving to Microservices. He showed how the new architecture relies on <a href="https://www.rabbitmq.com/">Rabbit MQ</a> for inter-service communication, and employs tools like <a href="http://kafka.apache.org/">Apache Kafka</a> to keep track of what service invocations took place and how. Key takeaways were understanding the tradeoffs when selecting between the Monolith and Microservices, how testing becomes easier and the fact that when moving to a Microservice architecture you need to embrace working asynchronously and make the most out of it. You can find the slides <a href="https://www.dropbox.com/s/j3wtylt3nijrae9/Microservices%20in%20a%20Data%20Science%20World.pdf?dl=0">here</a> and watch the video below:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/187563316" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>Miguel (who is also the leader of the <a href="http://www.meetup.com/Data-Science-Athens/">Data Science Athens</a> group) carried on with an introduction on what Data Science is and the kind of problems we use it to solve, and went on with tools that his team frequently uses. The first tool is <a href="https://tika.apache.org/">Apache Tika</a>, a toolkit that extracts text and metadata from multiple file types. He also demoed (code available to play with on <a href="https://github.com/ruimiguelforte/tika-tutorial/commits/develop">Github</a> - branch develop) some more advanced tasks, such as image and links extraction. The presentation went on with <a href="https://en.wikipedia.org/wiki/Predictive_Model_Markup_Language">PMML</a> (Predictive Model Markup Language). A common problem our Data Science team has is that predictive models are easier to develop and train in languages like Python or R, but then those models need to be ported to Java for production. PMML is a - surprisingly old - exchange format allows us to transfer (export and re-import) the models from from one platform to the other, so that the model does not need to be developed and trained from scratch (which may take days, depending on the model). You can find the slides <a href="https://www.dropbox.com/s/ttiewp4fwdcnloa/FORTE%20JHUG%20Presentation%202016.pdf?dl=0">here</a>.</p>

<p>The second presentation was by Marios Kogias (<a href="https://www.linkedin.com/in/marioskogias">Linkedin</a>), who talked about Code Maintainability. The talk was based on the book <a href="http://shop.oreilly.com/product/0636920049159.do">Building Maintainable Software</a> by Joost Visser and others. As Marios pointed out, the methodology promoted by the book is not written in blood, but is essentially a set of best practices which can make our life easier in the long run. Essentially, the talk highlighted three simple day-to-day habits, like keeping methods at most 15 LoC, duplicating code wisely, and keeping method signatures simple using encapsulation. Marios also described which refactoring operations (most IDEs have them out of the box) are appropriate for each case. Finally, the presentation mentioned code analysis tools like <a href="https://bettercodehub.com/">Better Code Hub</a>, <a href="https://pmd.github.io/">PMD</a> and the fantastic <a href="http://www.sonarqube.org/">SonarQube</a>. The presentation is also appropriate for junior devs. You can find the slides <a href="https://www.dropbox.com/s/hzbgyq0d5sr24kw/Maintainability.Presentation.v1.3.pdf?dl=0">here</a> and watch the video below:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/186186187" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>The third presentation was by Thomas Pliakas (<a href="https://gr.linkedin.com/in/thomas-pliakas-24aa88123">Linkedin</a>), who talked about Garbage Collection performance tuning. We all know that GC is something taking place in the background, and we don’t worry about it often. When we do though, it is useful that we know at least which are the basic Garbage Collectors, what algorithms they use and the phases of their execution. Thomas began with the presentation of the sub-regions of what we see from the outside as Java Heap (Eden, Tenured, Permgen), and why GC revolves around the age of objects. He then went on to explain what Minor, Major and Full GC are, as well as available Garbage Collectors. Thomas explained factors to take into account before tuning GC (latency, throughput, capacity) and continued with tunings for the G1, which is going to become the default. The presentation finished with references which are a very good starting point for people diving into the interesting world of GC. You can find the slides <a href="https://www.dropbox.com/s/hkrfde0frlxaq1r/GC%20Performance%20Tuning.pdf?dl=0">here</a>.</p>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[After several months, JHUG returned on Tuesday, 4th of October (Meetup.com event). I asked my employer, Workable to host the event, and they happilly agreed, so JHUG members had the opportunity to visit our impressive new premises. In terms of people this was a very successful meetup, as around 70 non-Workablers showed up, several new faces in them. Building on our experience from the previous event, we (well, Kostis) recorded the event, so this post will be updated once the videos are ready.]]></summary></entry><entry><title type="html">JHUG meetup April 2nd 2016</title><link href="https://fragkakis.org/JHUG-meetup-2-April-2016/" rel="alternate" type="text/html" title="JHUG meetup April 2nd 2016" /><published>2016-04-02T00:00:00+00:00</published><updated>2016-04-02T00:00:00+00:00</updated><id>https://fragkakis.org/JHUG-meetup-2-April-2016</id><content type="html" xml:base="https://fragkakis.org/JHUG-meetup-2-April-2016/"><![CDATA[<p>After a silent 2015, <a href="http://www.jhug.gr/">JHUG</a> made a strong comeback on Saturday, 2nd of April at the <a href="http://orangegrove.biz/">Orange Grove</a>. We were happy to have new people coming in, in addition to the familiar faces of older members. All in all, around 50 people attended the meetup, and that was a very nice surprise. Also, this was the first ever recorded JHUG meetup, so people who couldn’t attend can still watch the presentations.</p>

<p>The first presentation was by Kostas Saidis (<a href="https://twitter.com/saikos">twitter</a>, <a href="http://t.co/fKAd8eCkgT">linkedin</a>), who talked about <a href="http://gradle.org/">Gradle</a>. The presentation is entry level, so it is a good starting point for someone looking into what build systems exist today for Java projects. Kostas showed how Gradle builds upon lessons learned by pre-existing build systems (conversion-over-configuration, dependency management) and combines them with customizability, to enable custom and maintainable builds. Gradle takes full advantage of <a href="http://www.groovy-lang.org/">Groovy</a> and its syntactic sugar, and offers a concise DSL, which makes build files less verbose and easy on the eye. You can find the slides <a href="http://www.slideshare.net/KostasSaidis/an-introduction-to-gradle-for-java-developers">here</a> and watch the video below.</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/163474384" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>The second presentation was by my friend Kostis Kapelonis (<a href="http://codepipes.com/">web</a>, <a href="https://twitter.com/codepipes">twitter</a>, <a href="https://www.linkedin.com/in/kkapelon">linkedin</a>), who talked about <a href="https://code.google.com/archive/p/spock/">Spock</a>. Kostis is very knowlegeable about Spock, he has (literally) written a <a href="https://www.manning.com/books/java-testing-with-spock">book</a> on the subject. The presentation showed how Spock can be used to test <em>Java</em> programs, and how it can deal with cases where Java traditional testing tools (JUnit, TestNG, Mockito) produce non-elegant test cases. Spock helps the developer write structured test cases with clearly separated steps (given, when, then), and avoid common pitfalls of assertions intermingled with setup method calls. Also, the use of plain English in Spock allows the generation of readable reports, and facilitates communication with non-developer members of the team. You can find the slides <a href="http://codepipes.com/presentations/spock-vs-junit.pdf">here</a> and watch the video below:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%;">
  <iframe src="https://player.vimeo.com/video/163169615" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="">
  </iframe>
</div>

<p>The meetup was followed by pizzas, which were kindly offered by <a href="http://www.playventure.com/">Playventure</a>.</p>]]></content><author><name>Markos Fragkakis</name></author><summary type="html"><![CDATA[After a silent 2015, JHUG made a strong comeback on Saturday, 2nd of April at the Orange Grove. We were happy to have new people coming in, in addition to the familiar faces of older members. All in all, around 50 people attended the meetup, and that was a very nice surprise. Also, this was the first ever recorded JHUG meetup, so people who couldn’t attend can still watch the presentations.]]></summary></entry></feed>