Saturday, May 20, 2017

Voxxed Days - Athens 2017 - short review #vdathens

Yesterday I had the pleasure to attend the very first Voxxed Days Athens. As I have written 6 months ago while attending Voxxed Days Thesalloniki, this was the day I've waiting for too many years, a  proper conference, with top class speakers on the main IT hub of Greece, Athens. Once again, congrats to Patroklos Papapetrou and the team around Voxxed Athens, at least for me they made a dream come true!

There is a always a catch for me, when I do attend conferences in Greece. Since I am away now, I don't get to see or get in touch with old colleagues and friends from the very first days of the Java Hellenic Use Group.  So when I am back and I get to see lots of them at once, I kind of spend most of time socializing rather than attending all the talks. This is exactly what happened, but I am very very happy, I got to see so many familiar faces, talk about past jobs, laugh about it , talk about our current state either abroad or in Greece and last but not least debate around the prospects of our country which continues it's spiral into economic recession.

Definitely things like VoxxedAthens, validate the the small IT sector in Greece, is still alive so there is hope. Of course many other things need to change until we can conclude that we have a shift on a better course. 

I am very pleased to see, that our small user group, (JHUG) is more active than ever, Markos, Thomas and Kostis are doing a great job and JHUG managed to organize 6 meetups within a year, this is crazy compared to the past. It seems that Greek companies  are nowadays more open to the idea of a ' meetup', they do indeed  want to attract talent (or whatever talent is left behind, since lots of people are now out of the country). I hope this support to dev communities to continue and get stronger rather than being an one off side effect of companies just trying to recruit for a certain period of time. A strong software development market, needs active and vibrant communities, software companies in the local market need to embrace on a regular base all them. Software developers are like flowers, the more incentives, opportunities or support you provide them, the more they grow and  they become better, they add skills and in the end they contribute to the business cause of the company they work for .

If you are really looking for a detailed review of most of the talks, (meaning more specifics, please head here and here . Markos and Spyros  provide a very comprehensive review of the event.

The venue was nice, but I do hope next year for a more tech talk friendly place. The rooms were large but the projector and screens a bit small to actually see the slides or the code presented from the back. Also lot's of noice occasionally from overlapping talks & people coming in and out. Latetly I have been addicted to the Devoxx way ,which means I expect that all the conferences will be on cinemas, where I can sit confortably, enjoy a huge screen where I can see the code and slides.

I am not going to go through the talks I attended, since I managed to save time for 4 of them. My 2 favorite though were :
  • You can do better with Kotlin
    • I am currently half way on reading 'Kotlin in Action' and I was really happen that I had the chance to meet and talk with one of co-authors, Svetlana Isakova. I am very positive towards Kotlin and i will continue to investigate way on eventually adopting or mixing it with Java, in any of my personal projects or maybe at work.
  • Taming the Dragon: Conquering non blocking code with RxJava
    RxJava is coming, through Java9, through Spring Reactive or other Reactor based frameworks. I really enjoyed this talk by Frank Lyarru. We need to make sure that we get our heads around the new concepts since I bet they will become mainstream soon enough.
Overall I am very happy, we need to support Voxxed Athens, and make sure it becomes a place we meet once every year!

Back to London :) after getting some sun and enjoying some nice cold freddo espresso!

Saturday, May 13, 2017

Some sort of confusion? Or uncessary noise ...on my Kotlin journey

Lately I try to level up my skills with Kotlin, mostly from the view point of a JVM backend developer. 

I really feel very motivated and enthusiastic, I think the language has the right balance to make me feel like home (I am a hardcore Java developer after all) but at the same time give me new skills. 

As I've said many times, when I first tried to Kotlin I thought it was like Java from the Future, with idioms or syntactic sugar of Java libraries like Lombok & Javaslang (vavr) etc.

Part of the learning process is to  to engage with the community, so I've already attended one Kotlin meetup, or try to talk with people that have adopted Kotlin in production.

There is one thing that frustrates me thought. I don't understand this kind of hate towards Java, more or less not justified, with statements like 'If you use Lombok you are not doing Java'. I am really confused what is happening here.

So I kind of reply, 'so if you use Lombok or if you use Spring, or any framework that does byte code manipulation or byte code infusion is not Java? '

Yes typically we have Java the language, as a set of keywords and principles but the actual internals of the JVM and the way you can leverage bytecode through the use of Java or any other language (Kotlin generates bytecode after all) is part of the game. If you are an application developer, you use libraries that provide more or less some kind of abstraction.

I consider myself a pragmatic application  (business) developer. I don't want to re-invent the wheel when I want to implement something simple, and in business software (more or less what the majority of people do) you don't want to do that. 

When I rely or use any framework, or any language, I should be aware of what I am using and what are the pros & cons of using. You should be aware on what Lombok is doing / generating for you behind the scenes, or how Spring or Hibernate, or EJB implementations, enhance your your POJO's so that get  for example transactional or  other context awareness. This is not something we don't know and suddenly we want to jump out of the ship because someone revealed a secret.

Is this 'dynamic' nature of these libraries not the right thing for you? You don't like the fact that all these libraries leverage the bytecode and mechanics of the JVM? This is just fine, and in some cases yes you better re-invent the wheel or do your custom thing.

But please people lets all relax a bit, and stop stating things that eventually don't add anything to the picture. Everyone has an opinion towards different programming languages and I respect that but at least when we want to push forward for a new thing, lets focus on all the nice things that are offered rather than doing completely unrelated bashing on stuff that I consider technicalities.

If you ask me, I am really excited with Kotlin, but I still enjoy Java8, and Lombok , javaslang, Spring Boot, JBoss Weld, Guava  or Wildfly Swarm, or LogBack, or AsyncHttpClient etc etc.

It is always better when you show case the power of Kotlin rather than talking about how Java sucks, which in many cases yes Java does not do well compared to other stuff, but is not that is the worst language on earth or its so outdated. When you try to sell something new- focus on it's strengths and less on the weaknesses of the thing that wants to replace!

DevoxxUK 2017 - day2 #devoxxuk #devoxx

With one day delay here is my second day review of Devoxx UK 2017.

  • Front End for Back End developers, Matt Raible
    •  I personally don't fancy front-end development mostly because of my dislike towards JavaScript, but I do like to stay in touch with the technology trends, understand the basics of the frameworks. Most of the time eventually all the API and backend systems that I help develop, have to power a Single Page Application or some sort of JS front-end. On this talk M.Raible went through the current trends on Javascript / Frameworks, tooling for front-end developers and ways for a back-end minded dev to start coding on the other side. Not bad at all. 
  • The diabolical developer's guide to performance tuning, Martijn Verburg
    •  I could not miss a talk from Martijn, by far one of my favorite conference speakers of all time. Very nice and pragmatic presentation regarding performance tuning and the mind set behind discovering or tackling such problems.
      • Some worth taking notes like 'Every developer should spend some time and learn about the underlying hardware that powers his application'
      • Don't try to outsmart javac neither the JIT compiler, most of the times they are smarter than you, and will produce or inline code better than your attempts on the source code. 
      • Code first for maintainability and simplicity, then measure..and then you can code for performance (if you have such problems)
      • Try JITWatch
  • Real world Java 9, Trisha Gee
    • Always enjoy the java talks of Trisha Gee, she went through live coding and upgrading an older project she has showed off in previous conferences and talks to Java9. You can find here a full blog post with the slide and the code for her talk. What I will keep from this talk is that currently adopting Java9 on production code is not a walk in the path, especially if you want to fully adopt Java modules. I am not saying that is rocket science but I am really confused by small things like, source code layout that needs to change (by the way WHY PEOPLE!!!! i still remember the days of Ant where every developer kind of imposed his own structure), or repackaging or restructuring of existing code bases. Jigsaw aside, the talk featured some other hot features of Java9, like the introduction of ReactiveStreams aka Flow API.
  • An introduction to Kotlin by Example
    • Another Kotlin related talk which i really enjoyed. As I have previously elaborated Kotlin has a place in my developer heart and I try to learn it in my spare time and think of ways that I could use it in some of my projects. Very nice talk.
      • Slides of the talk and the examples can be found here
      • I really liked the 99 problems with Kotlin challenge. Try some of the examples even if your solution is not 100% aligned with the author, because you did not leverage recursion or tail recursion, its a nice way to get used of the Kotlin standard API. 
Overall it was a great, conference. I am really looking forward to the next one. My conference time is not over though, next week I am flying back to my home country Greece to attend Voxxed Athens. I am very proud to be member of the program committee. So see you in Athens next week , of course related blog posts will follow. 

Thursday, May 11, 2017

DevoxxUK 2017 - day1- 10 years of JavaPolis / Devoxx for me #devoxxuk #devoxx

So, Devoxx Uk 2017. For me its  a 10 year anniversary for one of the best European and now global developer conferences. I still remember my first 2007 Javapolis at Antwrep, its the conference I got to meet and get in touch with the broader Java community and people like Stephan J. The conference that I managed to meet the father of Java and many other Java Rock stars. The conference that I got to meet my wife (yes true story!)- a java developer as well :). So today as a Java family, living in London, we attended Devoxx UK 2017 for the very first time.

First of all you can judge the quality of the conference, from the amount of t-shirts and gadgets you managed to collect by your first day. As you can see, Devoxx UK was a great success : ) .

The event takes place at the Design Business center in Angel , we got so lucky because we live just around the corner so it was an easy morning walk. Really impressive place, even though, I still prefer the cinema's. Some of the rooms (not all of them) were not sound proofed and in some cases when you are seating in the back you could not see the speaker. Also if you are used to cinema like chairs and auditoriums going back to conventional conference centers feels a bit weird. But anyway it was not that bad, maybe we are just spoiled by Devoxx :). I hope Devoxx-UK grows more and then they can 'rent' cinema rooms next year : ).

  •  Opening KeyNote - Constructing a practical quantum computer
    • Impressive stuff, but at some point I got lost, maybe not so easy to or too early to full grasp the magic of quantum physics.  
  • Opening KeyNote- Video games: The quest for smart dumbness 
  • Opening Keynote - Ask the Architect
    • A short session with M. Reihnold, defending project Jigsaw. I have made my mind about Jigsaw and I kind of agree with the emerged skepticism and arguments from the community, which has materialized to the infamous EC down vote. I did not get any extra points from the session apart from what we already know from both sides.
  • Reactive Spring - by Josh Long
    • Well I admit I am more into Spring lately, not completely sold but I do follow some stuff that I consider nice. This was a typical code Spring :allthethings: session by J.Long. I am interested on the upcoming Spring Web Functions- programming model + the RxJava Spring abstractions that are coming over. 
  • Serveless, not so FaaS!
    •  Interesting talk about the current state of the serveless movement and the available offerings. Personally i am not sold on the overall idea. I still consider the whole ecosystem and the solutions are a nice to have for ad hoc or nice to have or dont care functionality. Maybe I am wrong. The talk gave some nice points on what you can and can not do if you consider going 'serveless'. I still don't understand the term - its just someone spinning containers that spin other containers containers..for you.
  • A Pragmatist's Guide to functional Geekery
    •  Really enjoyed this one. A Scala developer showing functional programming idioms in Java using one of my favorite libraries JavaSlang (aka I really like vavr, and i do try to use as much as I can (or learn to use it). At the same time I do try to keep a balance especially in older code bases that are not functional at all, not ending up with hybrid - ugly procedural-O.O and some functions in the mix code. Something that makes me sad. The examples from the talk can be found here. Very nice worth checking out.
  •  Microservices for the Masses with Spring Boot, JHipster, and JWT
    • I really like M.Raible his talk was around Spring and JHipster. I am amazed on how much this project has evolved. I mean seriously now it even spits kubernetes deployment descriptors! I am not a huge fan of the Spring Cloud initiative that was also featured during the work- mostly the Okta architecture, but the latest JHipster, seems powerful enough to do the scaffolding for you as long as you like the core techs behind it, Spring +Angular 4.
  • Gang of Four Patterns 
    • Huge fun of Mario Fusco. One of the best Java Twitter accounts and great speaker - with the right amount of black humor. Mario went through the behavioral design patterns from the GoF book, and re-implemented then using functional programming paradigms. You can find the code here.
  •  The case for Kotlin & Ceylon
    • I think that was my favorite talk of the day. Russel Winder is a very charismatic speaker with lots of experience on his shoulder and lots of strong opinions - which infuses lots of energy to his talks. I happen to invest in my free time in Kotlin (this must be a separate blog post). I was kind of tired with Scala, tried a couple of times and I still consider it unnecessarily complex for my taste of needs, at the same time I was feeling that Java is cool but it is not the answer to everything. So while searching and trying other stuff, I got a small push - like yes try it you will really like it from my ex-manager and great colleague at Ticketmaster (thanks Joel) which I trust a lot on his tech views. It was a love at first code, in the beginning I felt that I am coding in some sort of Java with Lombok and Javaslang - of course the more you go through the lang the more you discover new and interesting stuff. I am still learning but Kotlin is in my heart now and I can easily find my self in the future coding Java and Kotlin in parallel / professionally!
That's all for today!!! Greetings from London : ) .

New MacBookPro @ work, first impressions

Well Santa came early for me back at Ticketmaster INTL. 

When I joined I kind of made a mistake and swapped my original 15 MacBookPro for a smaller one 13inch/iCore5, because I did not want to carry stuff around (even though I don't commute a lot to he honest).  

Eventually after a year, I am thankful, to receive a machine upgrade. I wont be carrying it all around so i don't mind the extra size. I remain loyal to the 13inch one, for personal use. My personal Macbook is a 13inch one (iCore7, Dual core) late 2015 and I very happy with it.

So there we are with a new 15inch, Quad Core i7, 16GB RAM and this new touch-bar instead of real keys! Here are my first impressions after a couple of days use.

  • Huge performance boost compared to my previous state, dual core iCore5 (2015) to Quad Core iCore 7. All my dev tools / editors etc operate and feel much faster!!
  • Very nice monitor- as always!
  • Very thin form factor, wow this thing is really slick
  • The keyboard is niiiiice. Great feel great feedback actually it really improves your typing rate but there is...a catch. If you are a rage typist like me - meaning if you  apply lots of force when you type, by the way I think I got worse these last 5 years that I use Topre keyboards, I get to rage type all the time because my keyboard can handle it. But you should listen to me when I was typing to this new laptop, I kind of thought that maybe my wife would throw me out of the apartment. Thank god for my wife and my colleagues, I am going to operate using my beloved external mechanical keyboard. Not sure what is going to happen in the first long flight I will feel the urge to  code or type something. We will see!
  • The 'haptic' mouse pad - I think is improved compared to the first version (the one I have in my personal MBP). The feedback is a bit better. 
  • The touch-bar, is actually not that bad. For the first couple of hours, I was accidentally pressing 'Esc', because I was just 'parking' my fingers on the upper left corner. The first time I found my self opening a file with 'vi' pressing  'Esc' a couple of times it felt weird, or pressing 'F8' during a debug, but it works better as I expected. Anyway I am going to operate it mostly on 'close lid' mode, so I get to play with the touch-bar when I use it at home or during a trip.
  • USB-C? Not sure how I feel about it, awkward? Along with the laptop I received a combo - USB-c to other things converter, so I was covered for most of the stuff. But is really weird, i got it back home the first day, just to realize that my existing power supplies from my MacBook will not work.
Overall not bad at all, and I am happy that I got a big performance upgrade still using my favorite Operating System.

Sunday, April 23, 2017

Setting multiple Java JRE/ JDK on MacOSX using brew, cask and jenv

Yesterday at the Java9, Jigsaw HackTheTower event, I realized that I need to step up my game and improve my existing mechanism on maintaining several different JDK's on my machines.

I used to manually download the jdk's, or install them using brew cask, and I would set 'bash alias' on my `~/bash_profile` to switch between different 'JAVA_HOME' etc etc.

I am already using brew & brew cask (official site here) & i recently started using 'CakeBrew'. So in order to install 3 different versions of java all you need to do is :

Step 1: Install JDK's using brew and  brew cask

> brew cask install caskroom/versions/java6
> brew cask install caskroom/versions/java7  
> brew install java

After the installation check the following folder, you are expected to see the 3 different JDK folders.

> cd /Library/Java/JavaVirtualMachines


Step 2: Install jenv

> brew install jenv 

Step 3: Add the 3 available JDK's to jenv

> jenv add /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
> jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
> jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Step 4: Check if jenv has registered the different jdk's

> jenv versions

Step 5: Use jenv to set up the JDK env either globally or the current shell

--Setting java 1.8 for the shell
> jenv shell 1.8
> java -version 
> jenv shell 1.7
> java -version 
-- this sets it globally
> jenv global 1.8
> java -version

All done! You can switch different versions easily!

Watch out for now

  • You can install a pre-release of java9 using ' brew cask install caskroom/versions/java9-beta' but it seems that the way it is installed and the paths are not compatible with what jenv expects so you can not jenv add 1.9 (for the time being)

Saturday, April 22, 2017

Java 9 Module System (Jigsaw) @ LJC's HackTheTower

Today we spent half a day, on our first HackTheTower event. Members of London's Java User Group (aka LJC),  gathered on the 26th floor of  'SalesForceTower'  (aka Heron Tower) at the City of London, invited by
to talk and learn about one Project Jigsaw, Java 9's modular-isation system. The event was well organized, and coding from above, viewing London's town center and the rest of the skyscrapers is really a thing!

The event was splint into 3 sections, where we were given exercises and material to cover around Jigsaw (small examples, similar to the one you will find on OpenJDK's pages) and then we could talk about or raise any concerns or missing things that we felt the should be fed back to the OpenJDK / Oracle devs, evolving Jigsaw.

You can find all the material / slides & our feedback on the following links:

 How do I feel about Jigsaw

I have to be honest, it seems that Jigsaw is my least favorite feature of Java 9. It was one of the reasons I joined the event. Not because it is a bad feature as such or the actual needs behind it, especially the one to make the core of the JDK/JRE modular or more IoT friendly. But because of the potential side effects on the existing Java ecosystem and applications. It is really the first time that I eventually I did not trial personal or work related projects with pre-releases, to see if they work with the new version of Java, because of the various problems (and I still have).

Were we missing Jigsaw like functionality? Yes. Did we have similar attempts? Yes we had, OSGi (was covering many parts), then years after JBoss Modules. I always found OSGi a nice idea, but too complicated . I had the chance to work with JBoss Modules, I liked it but this was only on a product that was built on top of it, the Wildfly Application server, so it was like a full-filled prophecy, so I never tried to applied on my project or any of the projects I worked for.

Today I was kind of frustrated seeing examples of Java code, accompanied with  bash scripts calling jdk specific command like tools. Javac with flags, jlink or jmod, Jars that are not jars, but they behave like jars. I felt like my first Java day's at the uni, where eventually Ant was still NOT a thing, and java was compiled with bespoke make file mechanisms etc. Do I like all this new tooling? No. Why? Because as an application/ business developer I rely on abstracted build tools and I expect they do the heavy lifting for me, i dont want to go back editing module- descriptors or fighting existing build tools where the Plain Old Jar is the king, with the new king the Module and vice versa.

So, currently I don't see a clear path for existing, mainstream Java Built tools. Yes work is underway, for example the Maven Compiler Plugin version 3.6.1 is Jigsaw compatible. By the way it seems that currently you need to map and package your JigSaw modules as Maven Modules, so that you can have the best of 2 world. I don't know this whole thing confuses me a bit, unless I miss something.

It seems that we are heading towards a Java ecosystem, at least for Java 9, where either you play with Jigsaw's rules and you start building something new from scratch, introducing modules & project structure compatible with Jigsaw semantics or you kind of close your eyes,  add the 'kill switch' or your java executions  and continue your quest towards the new and the old world.

Last but not least, I can not ignore, the increasing number of worries and posts from application server, library developers on the potential problems Java9 might introduce to their libraries. I guess all java application developers would like to use Java 9, but if it is like going to introduce 1000 new issues because Spring Class-loading is not working any more, or CDI or any sub-module of their application server is going to break this is kind of unnecessary noise. 

So for the time being I am skeptic about it, but I will continue to invest time and learn more or experiment with it, most probably not using my SpringBoot or WildflySwarm projects but rather simple. 

I really liked the following articles