Last weeks were pretty intensive to me in the context of my professional life. I had a pleasure to speak on 4Developers conference, then attend FrontTrends 2014 and finally speak at another awesome GeeCON 2014 conference. On both 4Developers and GeeCON I gave the same talk (with slight changes) and you can find slides from that talk here “Building modern web applications - Single Responsibility Principle applied”. At GeeCON all talks were recorded so video should be online some time soon if you would like to watch it. It was also the first conference at which I changed the way I learnt from talks. I used an advice from the article shared by Tomek on twitter:
I must say it worked out pretty well. Now when the conference is over I have my paper notes full of bullet points and comments and I know exactly what ideas I want to apply and which to explore further. From my personal point of view this year GeeCON was one of the best conference events I’ve ever attended. I’m not only talking about being a speaker, although it was a great honor to me to speak there. Let me briefly summarize it. So here it goes.
At the beginning of first day I was feeling quite unsatisfied with my choices - I didn’t enjoy second keynote as much as I expected (I couldn’t attend the first one). The same applied to Arun Gupta’s talk about getting kids to programming. I was expecting something more than just review of tools available. I was expecting more of his own, hands on experience and more tips & tricks about that topic. So it wasn’t the best conference start, wasn’t it?
Go - the language of the cloud
And then it clicked. I went to Ken Sipe’s talk about Go language, remembering his great talk about Spock from previous GeeCON. I had no previous experience with Go and although this session lacked this “language of the cloud” explanation I was delighted with it. Now, Go language is on my short-list of things to try out soon after the conference.
- Platform native & fast compiler
- Mix of pascal, js, scala, java in terms of syntax
- Channels for concurrency
- One ultimate formatting
- Safe pointers
- Kind of duck typing
Keep it simple with Scala
As I haven’t written single line of code in Java for last 1,5 year (coding backend side of Codebrag in Scala and playing with languages other than Java) it was easy shot to go to the talk by my SoftwareMill buddy, Adam Warski. In short - excellent session with perfect live coding but… if you had no previous experience in Scala it could be a bit of mind-bending kind of talk.
- Scala async to write async code more like sync one
- Spray.io - instant, simple HTTP API server
- Macwire - dependency injection built on macros
- Probably mind-blowing talk for Scala newbies
DIY - Usability design for developers
Next one on my radar was this nice talk about doing UX researches, trying different concepts, tools and techniques. We used to use some of them in Codebrag so it wasn’t completely new to me. As I love working with frontends in web applications I wanted to learn something more about UX and I was pretty satisfied I went to this one.
- Pen and paper to sketch UI
- 5-6-8 set up 5 mins timer and sketch 6 to 8 different proposals
- User testing - like in Codebrag
- Java FX with minimal styles used as prototyping tool?
Project Avatar - server side JS on JVM
As far as I understand and fully support porting node.js implementation to JVM to make use of this awesome platform (multithreading, java ecosystem etc) I couldn’t understand the point of adding another complexity and layer to that and tightly integrating it with JavaEE. I can see no benefits from using that mix in practice. Although the talk itself was quite good, I’m completely not convinced as for the use cases and future of Project Avatar. Maybe that’s because I left JavaEE behind some time ago in favor of building smaller application stacks and tweaking it according to my needs using various micro-libraries available. Also it’s worth mentioning that Project Avatar is a different beast than Avatar.js which is the thing I’m ok with and which simply brings node.js model to JVM.
- Avatar.js bundled with JavaEE
- Background threads similar to WebWorkers
- What are use cases? Where could I apply JS?
- Why building yet another layer on top of e.g. JPA?
- Looks like heavy, enterprise-ish stack
First day GeeCON party was ok. I had quite a few pleasant chats with other geeks over a beer but I had to leave it early as I had my talk on the next day (I was getting a bit nervous already and also wanted to rehearse it once again).
Deploying And Testing Microservices
On the second day I deliberately missed first session slot as I couldn’t find anything I really wanted to go on this slot. It was completely opposite the next one. I knew I’d go to learn more about (currently all the rage) microservices from Sam Newman. I remembered his excellent talks from last two GeeCON editions. I learnt about taking different approach to testing and deploying microservices and I was happy that things I privately play with (like Vagrant, Packer and Docker) were mentioned as valuable tools in that kind of projects. As a frontend lover I was curious about UI aspect of microservices and finally had a chance to ask Sam about that during the 2nd day party. We had a quite long chat about different approaches and it surprisignly turned into possible Sam’s next talk idea :) I was also convinced by him to give Clojure yet another (third) try and really try Go lang.
- Rethink the way you test when in microservices land
- Last tests after production deployment (!)
- Virtualization FTW! Vagrant, Packer, Docker
- ThoughtWorks uses Ansible for provisioning
- One service per machine means huge costs overhead
- Virtualize: LXC
- Pact - customer-driven contracts
- Mountebank - stub service on different protocols
- Better have 2 versions of API for some time than two separate services
Building modern web applications - SRP applied
Then I attended, well… my talk, as a speaker. Taking into account great competition during the same slot (e.g. Ken Sipe about Spock and Arun Gupta on JavaEE 7) I was surprised that I had pretty good number of geeks on the audience. The talk went pretty well I guess and I had several valuable discussions afterwards. By the way, if you attended it and had any kind of feedback to me - I’d be more than happy to hear about it.
Docker - intro to revolution
After the most stressful part of the day I could finally sit back, relax and enjoy the rest of the conference. I went to Marek Goldmann’s talk about Docker, where I found out about freshly baked Project Atomic as well as about some facts from Docker world I didn’t know before. Good talk with a lots of real, live command line coding examples.
- Start up tons of containers in almost no time
- Sharing images
- Project Atomic - infrastructure management
High performance, reactive applications with Vert.x
Last of full-blown, long talks I choose was one by Tim Fox introducing Vert.x. I’ve just heard about but have never played with Vert.x so decided to give it a try (all in all it among the others mixes up some of my favorite runtimes and languages: JVM, Ruby and JS). Having a great chat with Tim after the talk I found that it’s quite complicated at this stage to bring native ruby/js(npm) modules/libs to work on vert.x but I guess it’s just a matter of time.
- Lots of languages available or support landing soon
- Messaging bus that can reach frontend
- How to add additional modules (jar, npm modules etc)?
- Clustering and HA of processes
- Work on Vert.x 3 starts now
For the lightning talks I choose Room 5 with great talk about self development by Bartosz Majsak, “ok” talk by Jakub Marchwicki about soft aspects of clean code. The last one, remote pair programming session was well… wasted due to some heavy technical issues.
As I left stress and nerves related to my talk behind I could finally relax over a beer with folks at another GeeCON party that night. The venue for speakers dinner as well as attendees party were both great allowing us to fully enjoy the party, have great chats and lots of fun there. Also I was unoficially invited to conduct workshops on awesome Warsjawa workshops conference this year (I had a pleasure to have hold AngularJS workshops last year there).
Third day started to me from the second session about modules in JS by Sander Mak and Paul Bakker. Guys prefer AMD modules over CommonJS (and this is what they presented) and I use CommonJS recently but this entire talk was well served. I didn’t learn anything new in terms of modularity but I was convinced to try Typescript language and also to give AMD and RequireJS yet another try.
- Try Typescript
- Typescript can compile to both AMD and CJS modules (ES6?)
- Quite slow compiler, but has incremental mode (pretty good)
- Nice that guys broke up with mvn for frontend build and moved to grunt
Modding Minecraft with a dash of Ruby
Next I went to see some JRuby in action while poking Minecraft. I didn’t really know what to expect as I didn’t know much about Minecraft before, but the talk was really good and entertaining. Being able to create extensions to Minecraft with Java or with pretty syntax of Ruby is really cool and makes me want to try that. Also seeing what kind of freaky mods Tom Enebo was showing I was laughing out loud there together with the rest of the audience.
- Bukkit - library to extend Minecraft
- Ruby wrapper for that
- Tons of crazy ideas for extensions
Last talk I could attend (I had early train back home) was this one by Sandro Mancuso. I knew I wanted to go to this one so there was no doubt in this slot. Well served talk, practically discussing approaches to software development I fully support: thin server-side transport layer (VC in MVC model), controllers with 3-5 lines max, use cases as entry points to your application orchestrating all the required calls, separating read and write use cases and so on. After the talk tons of great questions and answers were given so I’m fully satisfied with this talk.
- Sane mix of several approaches
- Thin web transport layer (VC in MVC)
- Small controllers (3-5 lines) delegating to use cases
- Use cases as entry points to application
- Fast track for “read” use cases. Don’t use domain stuff. Builds required view directly on raw DB data
- Rethink project packages organization
This year GeeCON was probably one of the best and most valuable conferences I’ve ever attended. I stepped out of my comfort zone again and gave a talk in english. I met old friends and made some new ones, which was not a piece of cake to me. I’m not very “sociable” person when it comes to meeting new people. I’ll definitely go to GeeCON next year and can recommend it to all of you if in doubt.