Codemotion Amsterdam – Day 1


Last week was the event, Codemotion Amsterdam 2016. Codemotion is known for organizing conferences having high-quality software content and this was the first time they organized a conference in Amsterdam. It was a two day conference with talks on technology trends like Microservices, Graph data stores and upcoming front-end trends like Redux and React Native etc.  I attended the conference along with my Luminis colleague Jettro who was also a speaker at the conference.

The morning started with a very interesting keynote “WWW: World Wide Web, not Wealthy Westerners’ Web“ by Bruce Lawson (Opera). The talk gave insights into how the majority of the world is still not connected to the internet, especially developing countries like India, China and countries in Africa have a large potential internet userbase. These developing countries have a good GDP growth thus more and more people are buying smart phones and getting connected to Internet. The talk discussed strategies used in order to make internet browsing affordable in developing countries as internet data plans are expensive and can be upto 10 % of the monthly income of the users in these countries. Image compression and removal of ads by proxy browsers like Opera mini very effectively cuts down on data usage thus helpful for consumers in developing countries. The talk also discussed Progressive web apps, which gives the user an app like experience while still running in full screen mode of the mobile browser. This is something very useful if you are living in a developed country and have a flaky mobile network and an expensive data plan as instead of downloading the complete App you can use a Progressive web app.

After the keynote, there were multiple parallel sessions and attendee could attend anyone based on their interests. I choose the attend the session “Managing Connected Big Data in Art with Neo4j Graph Database” by Lorenzo Speranzoni. The session focussed on graph databases specially Neo4J, and a real life use-case along with a demo. The presenter discussed how important it is to build relationships between data points instead of just collecting them. Currently, most of the NoSql datastores focus on storing large amounts of data and running analytics on it whereas Neo4j specializes in storing relationships as first class citizens. Storing relationships isn’t possible in traditional RDBMS due to tabular data and rigid schema structure thus with the growing surge in Big Data it becomes imperative to have a data store which stores not just data points but their relationships as well. The speaker presented a nice demo of Neo4J being used to show the relationship between artists and their paintings, the museums that have those paintings and the cities having those museums. This talk was followed by a talk on Microservices.

“Living on the Edge (Service): Bundling Microservices to Optimize Consumption for Devices with Spring Cloud & Netflix” by Mark Heckler, this talk was focussed on building effective microservices using the Spring stack, especially Spring Boot and Spring Cloud along with the Spring Netflix modules. The talk gave a very brief overview of microservices and the “12 factor app” methodology.  The presenter, Mark quickly turned the talk into a live coding session, which was fun. He explained all major modules of Spring stack like Eureka for service discovery, Zuul for routing / Edge services and Hystrix as circuit breaker for handling failures.  Using these modules he created a microservice based web app and deployed it on his local machine. This session gave a nice overview of various capabilities of spring and netflix components for development and deployment of microservices.

Next, I attended the talk “Sinfonier: How I turned my grandmother into a data analyst”, this talk was about Sinofier which is a visual tool for generating Apache Storm topologies. Using this tool one can create Apache storm topologies. Complex real-time computation pipelines can be created using the visual tool which automatically creates the underlying configurations and the computation code can be provided by specifying a GitHub link.  A demo was given using Shodan as the data source and displaying the relationships within that data using Neo4j. I liked the tool but I feel that it’s still in preliminary stages and needs to have stronger support and contribution from the community in order to be widely adopted. Next talk I attended about React Native for developing cross platform mobile apps.

“React Native – Unleash the power of React in your device”  by Eduard Tomàs. This talk gave a nice overview of the React Native framework from Facebook, key features of the framework were discussed along with some shortcomings as it’s still in adoption phase. React Native can be used to develop cross platform Apps for both iOS and Android. Javascript and other standard web technologies are used by the framework to develop Apps. The framework is built around components, wherein each component would store the functionality and some state as well, which seems like a good idea but doesn’t scale well. To fix this issue React Native implements the concept of “Single source of truth” which means there would be one master state for your application and then the master would propagate that state to the child components. So if there is a change in master component’s state then those changes are propagated downwards to child components. Since child component get their state from master component thus they themselves are easy to test as they are stateless.

In React Native the UI of the built application is native but the UI related code can’t be fully shared between iOS and Android. React API provides components to access key functionalities of Android and iOS platform like Camera, Geolocation etc. In case, the developer needs to access some specific mobile platform features which isn’t yet available in React then they need to create their own module in mobile native code and then use that module in React. After the talk I had a quick chat with the Speaker, he said that most of the major features of mobile platform are available as components in React but still there is work to be done and the React framework still needs to be more mature in order to be widely adopted.

Next talk I attended was “Everything you always wanted to know about highly available distributed databases” by Javier Ramirez. This talk was focussed on various strategies, scenarios and good practices for making sure that distributed databases are always available and fault tolerant. The talk started with describing incidents of service failures of major cloud vendors thus emphasizing “Failures happen quite more often than we think”. It then discussed the common master-slave strategy for data replication and fault tolerance and it’s shortcomings, and how it’s an operation heavy process to replicate data on all slaves and thus leading to scalability of reads but not on writes. The Master-Master strategy was then discussed which has high latency when in synchronous mode but, when in asynchronous mode it give rise to poor conflict resolution. The talk shared the key needs of distributed cluster setup, namely, something that runs on cheap hardware, low latency and is able to grow or shrink fast depending on the load. The talk also provided insights into the tradeoffs inherent in distributed systems owing to CAP theorem.  The next talk I attended was about highly performant REST API design.

Boxcars and Cabooses: When one more XHR is too much” by Peter Chittum (Salesforce). This talk focussed on making REST API design more performant by bundling together of REST calls. The presenter discussed scenarios wherein a client App may need access to multiple resources at the same time, and individual rest calls may prove to be a performance hog thus it “Boxcarring” technique can be a good alternate. In “Boxcarring” multiple calls are batched together which can contain upto 25 sub-requests, failure in one transaction won’t affect other requests in the Batch. This can be changed using a flag field in the request which would cause the failure of the whole batch request even if one sub-request fails.  At the end of the talk, there was short demo showcasing various scenarios including error handling and failure scenarios.

The closing keynote of the first day was “The Most Important Feature You Can Provide to Your Team, Company and Customers” by Leslie Hawthorn, this talk focussed on the “Human” element of software development. Importance of “empathy” as being one of the core values of the organization. Some tips were discussed for building empathy and importance of human communication. The need to be inclusive in your values and expectations and not to have unwritten rules and avoiding assumptions as much as possible. Making it “ok to fail” is also important for organizations to adapt to rapidly changing world.